[
  {
    "path": ".editorconfig",
    "content": "# Remove the line below if you want to inherit .editorconfig settings from higher directories\nroot = true\n\n# C# files\n[*.cs]\n\n#### Core EditorConfig Options ####\n\n# Indentation and spacing\nindent_size = 4\nindent_style = space\ntab_width = 4\n\n# New line preferences\nend_of_line = crlf\ninsert_final_newline = false\n\n#### .NET Code Actions ####\n\n# Type members\ndotnet_hide_advanced_members = false\ndotnet_member_insertion_location = with_other_members_of_the_same_kind\ndotnet_property_generation_behavior = prefer_throwing_properties\n\n# Symbol search\ndotnet_search_reference_assemblies = true\n\n#### .NET Coding Conventions ####\n\n# Organize usings\ndotnet_separate_import_directive_groups = false\ndotnet_sort_system_directives_first = false\nfile_header_template = unset\n\n# this. and Me. preferences\ndotnet_style_qualification_for_event = false\ndotnet_style_qualification_for_field = false\ndotnet_style_qualification_for_method = false\ndotnet_style_qualification_for_property = false\n\n# Language keywords vs BCL types preferences\ndotnet_style_predefined_type_for_locals_parameters_members = true\ndotnet_style_predefined_type_for_member_access = true\n\n# Parentheses preferences\ndotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity\ndotnet_style_parentheses_in_other_binary_operators = always_for_clarity\ndotnet_style_parentheses_in_other_operators = never_if_unnecessary\ndotnet_style_parentheses_in_relational_binary_operators = always_for_clarity\n\n# Modifier preferences\ndotnet_style_require_accessibility_modifiers = for_non_interface_members\n\n# Expression-level preferences\ndotnet_prefer_system_hash_code = true\ndotnet_style_coalesce_expression = true\ndotnet_style_collection_initializer = true\ndotnet_style_explicit_tuple_names = true\ndotnet_style_namespace_match_folder = true\ndotnet_style_null_propagation = true\ndotnet_style_object_initializer = true\ndotnet_style_operator_placement_when_wrapping = beginning_of_line\ndotnet_style_prefer_auto_properties = true\ndotnet_style_prefer_collection_expression = when_types_loosely_match\ndotnet_style_prefer_compound_assignment = true\ndotnet_style_prefer_conditional_expression_over_assignment = true\ndotnet_style_prefer_conditional_expression_over_return = true\ndotnet_style_prefer_foreach_explicit_cast_in_source = when_strongly_typed\ndotnet_style_prefer_inferred_anonymous_type_member_names = true\ndotnet_style_prefer_inferred_tuple_names = true\ndotnet_style_prefer_is_null_check_over_reference_equality_method = true\ndotnet_style_prefer_simplified_boolean_expressions = true\ndotnet_style_prefer_simplified_interpolation = true\n\n# Field preferences\ndotnet_style_readonly_field = true\n\n# Parameter preferences\ndotnet_code_quality_unused_parameters = all\n\n# Suppression preferences\ndotnet_remove_unnecessary_suppression_exclusions = none\n\n# New line preferences\ndotnet_style_allow_multiple_blank_lines_experimental = true\ndotnet_style_allow_statement_immediately_after_block_experimental = true\n\n#### C# Coding Conventions ####\n\n# var preferences\ncsharp_style_var_elsewhere = false\ncsharp_style_var_for_built_in_types = false\ncsharp_style_var_when_type_is_apparent = false\n\n# Expression-bodied members\ncsharp_style_expression_bodied_accessors = true\ncsharp_style_expression_bodied_constructors = false\ncsharp_style_expression_bodied_indexers = true\ncsharp_style_expression_bodied_lambdas = true\ncsharp_style_expression_bodied_local_functions = false\ncsharp_style_expression_bodied_methods = false\ncsharp_style_expression_bodied_operators = false\ncsharp_style_expression_bodied_properties = true\n\n# Pattern matching preferences\ncsharp_style_pattern_matching_over_as_with_null_check = true\ncsharp_style_pattern_matching_over_is_with_cast_check = true\ncsharp_style_prefer_extended_property_pattern = true\ncsharp_style_prefer_not_pattern = true\ncsharp_style_prefer_pattern_matching = true\ncsharp_style_prefer_switch_expression = true\n\n# Null-checking preferences\ncsharp_style_conditional_delegate_call = true\n\n# Modifier preferences\ncsharp_prefer_static_anonymous_function = true\ncsharp_prefer_static_local_function = true\ncsharp_preferred_modifier_order = public,private,protected,internal,file,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,required,volatile,async\ncsharp_style_prefer_readonly_struct = true\ncsharp_style_prefer_readonly_struct_member = true\n\n# Code-block preferences\ncsharp_prefer_braces = true\ncsharp_prefer_simple_using_statement = true\ncsharp_prefer_system_threading_lock = true\ncsharp_style_namespace_declarations = block_scoped\ncsharp_style_prefer_method_group_conversion = true\ncsharp_style_prefer_primary_constructors = true\ncsharp_style_prefer_top_level_statements = true\n\n# Expression-level preferences\ncsharp_prefer_simple_default_expression = true\ncsharp_style_deconstructed_variable_declaration = true\ncsharp_style_implicit_object_creation_when_type_is_apparent = true\ncsharp_style_inlined_variable_declaration = true\ncsharp_style_prefer_index_operator = true\ncsharp_style_prefer_local_over_anonymous_function = true\ncsharp_style_prefer_null_check_over_type_check = true\ncsharp_style_prefer_range_operator = true\ncsharp_style_prefer_tuple_swap = true\ncsharp_style_prefer_utf8_string_literals = true\ncsharp_style_throw_expression = true\ncsharp_style_unused_value_assignment_preference = discard_variable\ncsharp_style_unused_value_expression_statement_preference = discard_variable\n\n# 'using' directive preferences\ncsharp_using_directive_placement = outside_namespace\n\n# New line preferences\ncsharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true\ncsharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true\ncsharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true\ncsharp_style_allow_blank_lines_between_consecutive_braces_experimental = true\ncsharp_style_allow_embedded_statements_on_same_line_experimental = true\n\n#### C# Formatting Rules ####\n\n# New line preferences\ncsharp_new_line_before_catch = true\ncsharp_new_line_before_else = true\ncsharp_new_line_before_finally = true\ncsharp_new_line_before_members_in_anonymous_types = true\ncsharp_new_line_before_members_in_object_initializers = true\ncsharp_new_line_before_open_brace = all\ncsharp_new_line_between_query_expression_clauses = true\n\n# Indentation preferences\ncsharp_indent_block_contents = true\ncsharp_indent_braces = false\ncsharp_indent_case_contents = true\ncsharp_indent_case_contents_when_block = true\ncsharp_indent_labels = one_less_than_current\ncsharp_indent_switch_labels = true\n\n# Space preferences\ncsharp_space_after_cast = false\ncsharp_space_after_colon_in_inheritance_clause = true\ncsharp_space_after_comma = true\ncsharp_space_after_dot = false\ncsharp_space_after_keywords_in_control_flow_statements = true\ncsharp_space_after_semicolon_in_for_statement = true\ncsharp_space_around_binary_operators = before_and_after\ncsharp_space_around_declaration_statements = false\ncsharp_space_before_colon_in_inheritance_clause = true\ncsharp_space_before_comma = false\ncsharp_space_before_dot = false\ncsharp_space_before_open_square_brackets = false\ncsharp_space_before_semicolon_in_for_statement = false\ncsharp_space_between_empty_square_brackets = false\ncsharp_space_between_method_call_empty_parameter_list_parentheses = false\ncsharp_space_between_method_call_name_and_opening_parenthesis = false\ncsharp_space_between_method_call_parameter_list_parentheses = false\ncsharp_space_between_method_declaration_empty_parameter_list_parentheses = false\ncsharp_space_between_method_declaration_name_and_open_parenthesis = false\ncsharp_space_between_method_declaration_parameter_list_parentheses = false\ncsharp_space_between_parentheses = false\ncsharp_space_between_square_brackets = false\n\n# Wrapping preferences\ncsharp_preserve_single_line_blocks = true\ncsharp_preserve_single_line_statements = true\n\n#### Naming styles ####\n\n# Naming rules\n\ndotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion\ndotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface\ndotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i\n\ndotnet_naming_rule.types_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.types_should_be_pascal_case.symbols = types\ndotnet_naming_rule.types_should_be_pascal_case.style = pascal_case\n\ndotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members\ndotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case\n\n# Symbol specifications\n\ndotnet_naming_symbols.interface.applicable_kinds = interface\ndotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected\ndotnet_naming_symbols.interface.required_modifiers = \n\ndotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum\ndotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected\ndotnet_naming_symbols.types.required_modifiers = \n\ndotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method\ndotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected\ndotnet_naming_symbols.non_field_members.required_modifiers = \n\n# Naming styles\n\ndotnet_naming_style.pascal_case.required_prefix = \ndotnet_naming_style.pascal_case.required_suffix = \ndotnet_naming_style.pascal_case.word_separator = \ndotnet_naming_style.pascal_case.capitalization = pascal_case\n\ndotnet_naming_style.begins_with_i.required_prefix = I\ndotnet_naming_style.begins_with_i.required_suffix = \ndotnet_naming_style.begins_with_i.word_separator = \ndotnet_naming_style.begins_with_i.capitalization = pascal_case\n\n# CA2000: Dispose objects before losing scope\n#dotnet_diagnostic.CA2000.severity = warning\n\n# CA2007: Do not directly await a Task without calling ConfigureAwait\n#dotnet_diagnostic.CA2007.severity = warning\n\n# CA4014: async code not awaited.  See https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-messages/cs4014\ndotnet_diagnostic.CA4014.severity = error"
  },
  {
    "path": ".gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto\n\n# Custom for Visual Studio\n*.cs     diff=csharp\n*.sln    merge=union\n*.csproj merge=union\n*.vbproj merge=union\n*.fsproj merge=union\n*.dbproj merge=union\n\n# Standard to msysgit\n*.doc\t diff=astextplain\n*.DOC\t diff=astextplain\n*.docx diff=astextplain\n*.DOCX diff=astextplain\n*.dot  diff=astextplain\n*.DOT  diff=astextplain\n*.pdf  diff=astextplain\n*.PDF\t diff=astextplain\n*.rtf\t diff=astextplain\n*.RTF\t diff=astextplain\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**To Reproduce**\nSteps to reproduce the behavior:\n1. Go to '...'\n2. Click on '....'\n3. Scroll down to '....'\n4. See error\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Screenshots**\nIf applicable, add screenshots to help explain your problem.\n\n**Desktop (please complete the following information):**\n - OS: [e.g. iOS]\n - Browser [e.g. chrome, safari]\n - Version [e.g. 22]\n\n**Smartphone (please complete the following information):**\n - Device: [e.g. iPhone6]\n - OS: [e.g. iOS8.1]\n - Browser [e.g. stock browser, safari]\n - Version [e.g. 22]\n\n**Additional context**\nAdd any other context about the problem here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your feature request related to a problem? Please describe.**\nA clear and concise description of what the problem is. Ex. I'm always frustrated when [...]\n\n**Describe the solution you'd like**\nA clear and concise description of what you want to happen.\n\n**Describe alternatives you've considered**\nA clear and concise description of any alternative solutions or features you've considered.\n\n**Additional context**\nAdd any other context or screenshots about the feature request here.\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where the package manifests are located.\n# Please see the documentation for all configuration options:\n# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates\n\nversion: 2\nupdates:\n  - package-ecosystem: \"\" # See documentation for possible values\n    directory: \"/\" # Location of package manifests\n    schedule:\n      interval: \"weekly\"\n\n\n"
  },
  {
    "path": ".github/workflows/codeql.yml",
    "content": "# For most projects, this workflow file will not need changing; you simply need\n# to commit it to your repository.\n#\n# You may wish to alter this file to override the set of languages analyzed,\n# or to provide custom queries or build logic.\n#\n# ******** NOTE ********\n# We have attempted to detect the languages in your repository. Please check\n# the `language` matrix defined below to confirm you have the correct set of\n# supported CodeQL languages.\n#\nname: \"CodeQL Advanced\"\n\non:\n  push:\n    branches: [ \"master\" ]\n  pull_request:\n    branches: [ \"master\" ]\n  schedule:\n    - cron: '23 17 * * 5'\n\njobs:\n  analyze:\n    name: Analyze (${{ matrix.language }})\n    # Runner size impacts CodeQL analysis time. To learn more, please see:\n    #   - https://gh.io/recommended-hardware-resources-for-running-codeql\n    #   - https://gh.io/supported-runners-and-hardware-resources\n    #   - https://gh.io/using-larger-runners (GitHub.com only)\n    # Consider using larger runners or machines with greater resources for possible analysis time improvements.\n    runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}\n    permissions:\n      # required for all workflows\n      security-events: write\n\n      # required to fetch internal or private CodeQL packs\n      packages: read\n\n      # only required for workflows in private repositories\n      actions: read\n      contents: read\n\n    strategy:\n      fail-fast: false\n      matrix:\n        include:\n        - language: actions\n          build-mode: none\n        - language: csharp\n          build-mode: none\n        - language: javascript-typescript\n          build-mode: none\n        - language: python\n          build-mode: none\n        - language: ruby\n          build-mode: none\n        # CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'rust', 'swift'\n        # Use `c-cpp` to analyze code written in C, C++ or both\n        # Use 'java-kotlin' to analyze code written in Java, Kotlin or both\n        # Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both\n        # To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,\n        # see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.\n        # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how\n        # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@v4\n\n    # Add any setup steps before running the `github/codeql-action/init` action.\n    # This includes steps like installing compilers or runtimes (`actions/setup-node`\n    # or others). This is typically only required for manual builds.\n    # - name: Setup runtime (example)\n    #   uses: actions/setup-example@v1\n\n    # Initializes the CodeQL tools for scanning.\n    - name: Initialize CodeQL\n      uses: github/codeql-action/init@v4\n      with:\n        languages: ${{ matrix.language }}\n        build-mode: ${{ matrix.build-mode }}\n        # If you wish to specify custom queries, you can do so here or in a config file.\n        # By default, queries listed here will override any specified in a config file.\n        # Prefix the list here with \"+\" to use these queries and those in the config file.\n\n        # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs\n        # queries: security-extended,security-and-quality\n\n    # If the analyze step fails for one of the languages you are analyzing with\n    # \"We were unable to automatically build your code\", modify the matrix above\n    # to set the build mode to \"manual\" for that language. Then modify this step\n    # to build your code.\n    # ℹ️ Command-line programs to run using the OS shell.\n    # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun\n    - name: Run manual build steps\n      if: matrix.build-mode == 'manual'\n      shell: bash\n      run: |\n        echo 'If you are using a \"manual\" build mode for one or more of the' \\\n          'languages you are analyzing, replace this with the commands to build' \\\n          'your code, for example:'\n        echo '  make bootstrap'\n        echo '  make release'\n        exit 1\n\n    - name: Perform CodeQL Analysis\n      uses: github/codeql-action/analyze@v4\n      with:\n        category: \"/language:${{matrix.language}}\"\n"
  },
  {
    "path": ".github/workflows/jekyll-gh-pages.yml",
    "content": "# Sample workflow for building and deploying a Jekyll site to GitHub Pages\nname: Deploy Jekyll with GitHub Pages dependencies preinstalled\n\non:\n  # Runs on pushes targeting the default branch\n  push:\n    branches: [\"master\"]\n\n  # Allows you to run this workflow manually from the Actions tab\n  workflow_dispatch:\n\n# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages\npermissions:\n  contents: read\n  pages: write\n  id-token: write\n\n# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.\n# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.\nconcurrency:\n  group: \"pages\"\n  cancel-in-progress: false\n\njobs:\n  # Build job\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Setup Pages\n        uses: actions/configure-pages@v5\n      - name: Build with Jekyll\n        uses: actions/jekyll-build-pages@v1\n        with:\n          source: ./jekyll_site\n          destination: ./_site\n      - name: Upload artifact\n        uses: actions/upload-pages-artifact@v3\n\n  # Deployment job\n  deploy:\n    environment:\n      name: github-pages\n      url: ${{ steps.deployment.outputs.page_url }}\n    runs-on: ubuntu-latest\n    needs: build\n    steps:\n      - name: Deploy to GitHub Pages\n        id: deployment\n        uses: actions/deploy-pages@v4\n"
  },
  {
    "path": ".github/workflows/linux.yml",
    "content": "name: linux\n\npermissions:\n  contents: read\n\non:\n  push:\n    branches: [master]\n  pull_request:\n    branches: [master]\n\njobs:\n  linux-build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n      - name: Setup .NET\n        uses: actions/setup-dotnet@v5\n        with:\n          dotnet-version: 10.0.x\n      - name: Restore dependencies\n        run: dotnet restore MajorsilenceReporting-Linux-GtkViewer.sln\n      - name: Build GtkViewer\n        run: dotnet build -c Release-DrawingCompat MajorsilenceReporting-Linux-GtkViewer.sln\n      - name: Build MajorsilenceReporting DrawingCompat\n        run: dotnet build -c Release-DrawingCompat MajorsilenceReporting.sln\n      - name: Test\n        run: dotnet test -c Release-DrawingCompat MajorsilenceReporting.sln --verbosity normal --collect:\"XPlat Code Coverage\" --logger:\"trx\"\n      - name: Test Report\n        uses: dorny/test-reporter@v2\n        if: success() || failure() # run this step even if previous step failed\n        with:\n          name: unit tests\n          path: \"**/TestResults/*.trx\"\n          reporter: dotnet-trx\n\n"
  },
  {
    "path": ".github/workflows/mac.yml",
    "content": "name: mac\n\npermissions:\n  contents: read\n\non:\n  push:\n    branches: [master]\n  pull_request:\n    branches: [master]\n\njobs:\n  mac-build:\n    runs-on: macos-latest\n    steps:\n      - uses: actions/checkout@v6\n      - name: Setup .NET\n        uses: actions/setup-dotnet@v5\n        with:\n          dotnet-version: 10.0.x\n      - name: Restore dependencies\n        run: dotnet restore MajorsilenceReporting-Linux-GtkViewer.sln\n      - name: Build GtkViewer\n        run: dotnet build -c Release-DrawingCompat MajorsilenceReporting-Linux-GtkViewer.sln\n      - name: Build MajorsilenceReporting DrawingCompat\n        run: dotnet build -c Release-DrawingCompat MajorsilenceReporting.sln\n      - name: Test\n        run: dotnet test -c Release-DrawingCompat MajorsilenceReporting.sln --verbosity normal --collect:\"XPlat Code Coverage\" --logger:\"trx\"\n      - name: Test Report\n        uses: dorny/test-reporter@v2\n        if: success() || failure() # run this step even if previous step failed\n        with:\n          name: unit tests\n          path: \"**/TestResults/*.trx\"\n          reporter: dotnet-trx\n"
  },
  {
    "path": ".github/workflows/windows.yml",
    "content": "name: windows\n\non:\n  push:\n    branches: [master]\n  pull_request:\n    branches: [master]\n\njobs:\n  windows-build:\n    permissions:\n      contents: read\n    runs-on: windows-latest\n    steps:\n      - uses: actions/checkout@v6\n      - name: Setup .NET\n        uses: actions/setup-dotnet@v5\n        with:\n          dotnet-version: 10.0.x\n      - name: Build Release\n        run: ./build-release.ps1\n      - name: Test\n        run: dotnet test -c Release MajorsilenceReporting.sln --verbosity normal --collect:\"XPlat Code Coverage\" --logger:\"trx\"\n      - name: Test Report\n        uses: dorny/test-reporter@v2\n        if: success() || failure() # run this step even if previous step failed\n        with:\n          name: unit tests\n          path: \"**/TestResults/*.trx\"\n          reporter: dotnet-trx\n      - name: SBOM\n        uses: CycloneDX/gh-dotnet-generate-sbom@v1\n        with:\n          path: ./MajorsilenceReporting.sln\n      - name: Archive artifacts\n        uses: actions/upload-artifact@v6\n        with:\n          name: build-output\n          path: |\n            Release-Builds/build-output/*.zip\n            Release-Builds/build-output/*.nupkg\n            Release-Builds/build-output/*.snupkg\n            sbom.xml\n          retention-days: 1"
  },
  {
    "path": ".gitignore",
    "content": "python_project_root/\n# Created by https://www.gitignore.io\n\n### VisualStudio ###\n## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\nbuild/\nbld/\n[Bb]in/\n[Oo]bj/\n\n# Roslyn cache directories\n*.ide/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n#NUNIT\n*.VisualState.xml\nTestResult.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n*_i.c\n*_p.c\n*_i.h\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opensdf\n*.sdf\n*.cachefile\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n.idea/\n\n# JustCode is a .NET coding addin-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# TODO: Comment the next line if you want to checkin your web deploy settings \n# but database connection strings (with potential passwords) will be unencrypted\n*.pubxml\n*.publishproj\n\n# NuGet Packages\n*.nupkg\n# The packages folder can be ignored because of Package Restore\n**/packages/*\n# except build/, which is used as an MSBuild target.\n!**/packages/build/\n# If using the old MSBuild-Integrated Package Restore, uncomment this:\n#!**/packages/repositories.config\n\n# Windows Azure Build Output\ncsx/\n*.build.csdef\n\n# Windows Store app package directory\nAppPackages/\n\n# Others\nsql/\n*.Cache\nClientBin/\n[Ss]tyle[Cc]op.*\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.pfx\n*.publishsettings\nnode_modules/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\n*.mdf\n*.ldf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n\n# Microsoft Fakes\nFakesAssemblies/\n\n\n### XamarinStudio ###\nbin/\nobj/\n*.userprefs\n\n\n/Release-Builds/my-fyi-build-dot-net-4-viewer-x86\n\n/Release-Builds/majorsilence-reporting-build-dot-net-4-viewer-x86\n\n/Release-Builds/majorsilence-reporting-build-dot-net-4-AnyCPU\n/Release-Builds/majorsilence-reporting-build-dot-net-4-x86\n/Release-Builds/majorsilence-reporting-build-dot-net-4-viewer-x86.zip\n/Release-Builds/majorsilence-reporting-build-dot-net-4-AnyCPU.zip\n/Release-Builds/majorsilence-reporting-build-dot-net-4-x86.zip\n/Release-Builds/setup-Majorsilence-Reporting-dot-net4-x86.msi\n/Release-Builds/setup-Majorsilence-Reporting-dot-net4-x86.wixobj\n/Release-Builds/setup-Majorsilence-Reporting-dot-net4-x86.wixpdb\n/Release-Builds/setup-Majorsilence-Reporting-dot-net4-x86.wxs\n/Release-Builds/majorsilence-reporting-build-dot-net-4-php-x86\n/Release-Builds/majorsilence-reporting-build-dot-net-4-php-x86.zip\n/Release-Builds/majorsilence-reporting-build-dot-net-4-python-x86\n/Release-Builds/majorsilence-reporting-build-dot-net-4-ruby-x86\n/Release-Builds/majorsilence-reporting-build-dot-net-4-python-x86.zip\n/Release-Builds/*.msi\n/Release-Builds/majorsilence-reporting-build-dot-net-4-AnyCPU\n/Release-Builds/*.zip\n/Release-Builds/nuget/My-FyiReporting/lib\n/Release-Builds/majorsilence-reporting-build-dot-net-3.5-AnyCPU\n/Release-Builds/majorsilence-reporting-build-dot-net-3.5-AnyCPU.zip\n\n*~\n\n/Release-Builds/majorsilence-reporting-build-dot-net-2-x64\n/Release-Builds/majorsilence-reporting-build-dot-net-2-x86\n/Release-Builds/build-output\n/Release-Builds/nuget/MajorsilenceReporting/lib\n/Release-Builds/nuget/MajorsilenceReporting-Core/lib\n/Release-Builds/nuget/MajorsilenceReporting-Core/content\n/Release-Builds/nuget/MajorsilenceReporting-Viewer/lib\n/Release-Builds/nuget/MajorsilenceReporting-Asp/lib\n/Release-Builds/nuget/MajorsilenceReporting-XwtViewer/lib\n/Release-Builds/nuget/MajorsilenceReporting-WpfViewer/lib\n/Examples/SampleApp/SampleReportApp/RdlEngineConfig.Linux.xml\n/Examples/SampleApp/SampleReportApp/RdlEngineConfig.xml\n/Examples/SampleApp2-SetData/SampleApp2-SetData/RdlEngineConfig.Linux.xml\n.vs/\n\n/Examples/SampleAspDotNet/SampleAspDotNet/libSkiaSharp.dll\n/Examples/SampleAspDotNet/SampleAspDotNet/libSkiaSharp.dylib\n.DS_Store\n*.pyc\n/LanguageWrappers/python/Examples/output\n/LanguageWrappers/ruby/Examples/output\n/LanguageWrappers/php/Examples/output\n"
  },
  {
    "path": "DataProviders/BaseDataParameter.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// BaseDataParameter is the base class for handling parameters\n\t/// </summary>\n\tpublic class BaseDataParameter : IDbDataParameter\n\t{\n\t\tstring _Name;\t\t\t// parameter name\n\t\tstring _Value;\t\t\t// parameter value\n\n\t\tpublic BaseDataParameter()\n\t\t{\n\t\t}\n\n\n\t\t#region IDbDataParameter Members\n\n\t\tpublic byte Precision\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Precision setting is not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic byte Scale\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Scale setting is not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic int Size\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Size setting is not implemented\");\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDataParameter Members\n\n\t\tpublic System.Data.ParameterDirection Direction\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn System.Data.ParameterDirection.Input;\t// only support input parameter\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tif (value != ParameterDirection.Input)\n\t\t\t\t\tthrow new Exception(\"Parameter Direction must be Input\");\n\t\t\t}\n\t\t}\n\n\t\tpublic System.Data.DbType DbType\n\t\t{\n\t\t\tget\n\t\t\t{\t\t\t  \n\t\t\t\treturn DbType.String;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tif (value != DbType.String)\n\t\t\t\t\tthrow new Exception(\"DbType must always be String\");\n\t\t\t}\n\t\t}\n\n\t\tpublic object Value\n\t\t{\n\t\t\tget {return _Value;}\n\t\t\tset {_Value = value != null? value.ToString(): null;}\n\t\t}\n\n\t\tpublic bool IsNullable\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tpublic System.Data.DataRowVersion SourceVersion\n\t\t{\n\t\t\tget\n\t\t\t{\t\t\t\t\t\t\t\t\t   \n\t\t\t\treturn DataRowVersion.Current;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Setting DataRowVersion is not implemented.\");\n\t\t\t}\n\t\t}\n\n\t\tpublic string ParameterName\n\t\t{\n\t\t\tget {return _Name;}\n\t\t\tset {_Name = value;}\n\t\t}\n\n\t\tpublic string SourceColumn\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Setting SourceColumn is not implemented.\");\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/DataParameterCollection.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Data;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// XmlDataParameter\n\t/// </summary>\n\tpublic class DataParameterCollection : IDataParameterCollection\n\t{\n\t\tArrayList _List;\t\t// parameter collection\n\n\t\tpublic DataParameterCollection()\n\t\t{\n\t\t\t_List = new ArrayList();\n\t\t}\n\t\t#region IDataParameterCollection Members\n\n\t\tpublic object this[string parameterName]\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tint index = IndexOf(parameterName);\n\t\t\t\tif (index < 0)\n\t\t\t\t\treturn null;\n\t\t\t\treturn _List[index];\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tIDbDataParameter dp = value as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tthrow new ArgumentException(\"Object must be an IDbDataParameter\");\n\n\t\t\t\t_List[this.IndexOf(parameterName)] = dp;\t\t\t\t\n\t\t\t}\n\t\t}\n\n\t\tpublic void RemoveAt(string parameterName)\n\t\t{\n\t\t\t_List.RemoveAt(this.IndexOf(parameterName));\n\t\t}\n\n\t\tpublic bool Contains(string parameterName)\n\t\t{\n\t\t\treturn IndexOf(parameterName) < 0? false: true;\n\t\t}\n\n\t\tpublic int IndexOf(string parameterName)\n\t\t{\n\t\t\tint i=0;\n\t\t\tforeach (IDbDataParameter dp in _List)\n\t\t\t{\n\t\t\t\tif (dp.ParameterName == parameterName)\n\t\t\t\t\treturn i;\n\t\t\t\ti++;\n\t\t\t}\n\t\t\treturn -1;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IList Members\n\n\t\tpublic bool IsReadOnly\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _List.IsReadOnly;\n\t\t\t}\n\t\t}\n\n\t\tobject System.Collections.IList.this[int index]\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _List[index];\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t_List[index] = value;\n\t\t\t}\n\t\t}\n\n\t\tvoid System.Collections.IList.RemoveAt(int index)\n\t\t{\n\t\t\t_List.RemoveAt(index);\n\t\t}\n\n\t\tpublic void Insert(int index, object value)\n\t\t{\n\t\t\t_List.Insert(index, value);\n\t\t}\n\n\t\tpublic void Remove(object value)\n\t\t{\n\t\t\t_List.Remove(value);\n\t\t}\n\n\t\tbool System.Collections.IList.Contains(object value)\n\t\t{\n\t\t\treturn _List.Contains(value);\n\t\t}\n\n\t\tpublic void Clear()\n\t\t{\n\t\t\t_List.Clear();\n\t\t}\n\n\t\tint System.Collections.IList.IndexOf(object value)\n\t\t{\n\t\t\treturn _List.IndexOf(value);\n\t\t}\n\n\t\tpublic int Add(object value)\n\t\t{\n\t\t\treturn _List.Add(value);\n\t\t}\n\n\t\tpublic bool IsFixedSize\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _List.IsFixedSize;\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region ICollection Members\n\n\t\tpublic bool IsSynchronized\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _List.IsSynchronized;\n\t\t\t}\n\t\t}\n\n\t\tpublic int Count\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _List.Count;\n\t\t\t}\n\t\t}\n\n\t\tpublic void CopyTo(Array array, int index)\n\t\t{\n\t\t\t_List.CopyTo(array, index);\n\t\t}\n\n\t\tpublic object SyncRoot\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _List.SyncRoot;\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IEnumerable Members\n\n\t\tpublic System.Collections.IEnumerator GetEnumerator()\n\t\t{\n\t\t\treturn _List.GetEnumerator();\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/DataProviders.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Express 2012 for Web\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DataProviders\", \"DataProviders.csproj\", \"{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x64.Build.0 = Debug|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.Build.0 = Debug|x86\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x64.ActiveCfg = Release|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x64.Build.0 = Release|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.ActiveCfg = Release|x86\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.Build.0 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "DataProviders/DictionaryDataReader.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq;\n\nnamespace Majorsilence.Reporting.Data\n{\n    public class DictionaryDataReader : IDataReader\n    {\n        private readonly List<Dictionary<string, object>> _data;\n        private readonly string[] _fieldNames;\n        private readonly Dictionary<string, int> _fieldIndexMap;\n        private int _currentRow = -1;\n\n        public DictionaryDataReader(List<Dictionary<string, object>> data)\n        {\n            _data = data ?? new List<Dictionary<string, object>>();\n        \n            if (_data.Count > 0)\n            {\n                _fieldNames = _data[0].Keys.ToArray();\n            \n                // Create case-insensitive field mapping\n                _fieldIndexMap = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);\n                for (int i = 0; i < _fieldNames.Length; i++)\n                {\n                    _fieldIndexMap[_fieldNames[i]] = i;\n                }\n            }\n            else\n            {\n                _fieldNames = Array.Empty<string>();\n                _fieldIndexMap = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);\n            }\n        }\n\n        public int GetOrdinal(string name)\n        {\n            if (_fieldIndexMap.TryGetValue(name, out int index))\n                return index;\n\n            throw new ArgumentException($\"Field '{name}' not found. Available fields: {string.Join(\", \", _fieldNames)}\");\n        }\n\n        public bool Read() => ++_currentRow < _data.Count;\n        public int FieldCount => _fieldNames.Length;\n        public string GetName(int i) => _fieldNames[i];\n\n        public object GetValue(int i)\n        {\n            if (_currentRow < 0 || _currentRow >= _data.Count || i < 0 || i >= _fieldNames.Length)\n                return DBNull.Value;\n            return _data[_currentRow].TryGetValue(_fieldNames[i], out var val) ? val ?? DBNull.Value : DBNull.Value;\n        }\n\n        public int GetValues(object[] values)\n        {\n            int count = Math.Min(values.Length, FieldCount);\n            for (int i = 0; i < count; i++)\n            {\n                values[i] = GetValue(i);\n            }\n\n            return count;\n        }\n\n        public bool IsDBNull(int i) => GetValue(i) == DBNull.Value;\n        public object this[int i] => GetValue(i);\n        public object this[string name] => GetValue(GetOrdinal(name));\n        public Type GetFieldType(int i) => GetValue(i)?.GetType() ?? typeof(object);\n\n        // Minimal additional methods\n        public void Close() { }\n        public void Dispose() { }\n        public bool NextResult() => false;\n        public int Depth => 0;\n        public bool IsClosed => false;\n        public int RecordsAffected => -1;\n\n        // Not implemented for brevity\n        public DataTable GetSchemaTable()\n        {\n            DataTable schemaTable = new DataTable();\n\n            // Add standard schema columns\n            schemaTable.Columns.Add(\"ColumnName\", typeof(string));\n            schemaTable.Columns.Add(\"ColumnOrdinal\", typeof(int));\n            schemaTable.Columns.Add(\"DataType\", typeof(Type));\n            schemaTable.Columns.Add(\"IsKey\", typeof(bool));\n            schemaTable.Columns.Add(\"IsUnique\", typeof(bool));\n            schemaTable.Columns.Add(\"IsAutoIncrement\", typeof(bool));\n            schemaTable.Columns.Add(\"AllowDBNull\", typeof(bool));\n\n            // Populate schema information for each column\n            for (int i = 0; i < FieldCount; i++)\n            {\n                DataRow row = schemaTable.NewRow();\n                row[\"ColumnName\"] = GetName(i);\n                row[\"ColumnOrdinal\"] = i;\n                row[\"DataType\"] = GetFieldType(i);\n                row[\"IsKey\"] = false;\n                row[\"IsUnique\"] = false;\n                row[\"IsAutoIncrement\"] = false;\n                row[\"AllowDBNull\"] = true;\n\n                schemaTable.Rows.Add(row);\n            }\n\n            return schemaTable;\n        }\n\n        public bool GetBoolean(int i) => (bool)GetValue(i);\n        public byte GetByte(int i) => (byte)GetValue(i);\n\n        public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length)\n        {\n            object value = GetValue(i);\n            if (value is byte[] bytes)\n            {\n                int bytesToCopy = (int)Math.Min(length, bytes.Length - fieldOffset);\n                if (bytesToCopy > 0 && buffer != null)\n                {\n                    Array.Copy(bytes, fieldOffset, buffer, bufferoffset, bytesToCopy);\n                }\n\n                return bytesToCopy;\n            }\n\n            return 0;\n        }\n\n        public char GetChar(int i) => (char)GetValue(i);\n\n        public long GetChars(int i, long fieldOffset, char[] buffer, int bufferOffset, int length)\n        {\n            object value = GetValue(i);\n            if (value is string str)\n            {\n                // If value is a string, we can extract characters from it\n                int charsToCopy = (int)Math.Min(length, str.Length - fieldOffset);\n                if (charsToCopy > 0 && buffer != null)\n                {\n                    str.CopyTo((int)fieldOffset, buffer, bufferOffset, charsToCopy);\n                }\n\n                return charsToCopy;\n            }\n            else if (value is char[] chars)\n            {\n                // If value is already a char array, copy directly\n                int charsToCopy = (int)Math.Min(length, chars.Length - fieldOffset);\n                if (charsToCopy > 0 && buffer != null)\n                {\n                    Array.Copy(chars, fieldOffset, buffer, bufferOffset, charsToCopy);\n                }\n\n                return charsToCopy;\n            }\n\n            return 0;\n        }\n\n        public IDataReader GetData(int i)\n        {\n            object value = GetValue(i);\n\n            // Handle collections that can be converted to a data reader\n            if (value is IEnumerable<Dictionary<string, object>> dictList)\n            {\n                return new DictionaryDataReader(dictList.ToList());\n            }\n            else if (value is DataTable dataTable)\n            {\n                // Convert DataTable to list of dictionaries\n                var rows = new List<Dictionary<string, object>>();\n                foreach (DataRow row in dataTable.Rows)\n                {\n                    var dict = new Dictionary<string, object>();\n                    foreach (DataColumn col in dataTable.Columns)\n                    {\n                        dict[col.ColumnName] = row[col];\n                    }\n\n                    rows.Add(dict);\n                }\n\n                return new DictionaryDataReader(rows);\n            }\n\n            // For other types that can't be easily converted to a data reader\n            throw new InvalidCastException($\"Cannot convert value at index {i} to IDataReader\");\n        }\n\n        public string GetDataTypeName(int i) => GetFieldType(i).Name;\n        public DateTime GetDateTime(int i) => (DateTime)GetValue(i);\n        public decimal GetDecimal(int i) => (decimal)GetValue(i);\n        public double GetDouble(int i) => (double)GetValue(i);\n        public float GetFloat(int i) => (float)GetValue(i);\n        public Guid GetGuid(int i) => (Guid)GetValue(i);\n        public short GetInt16(int i) => (short)GetValue(i);\n        public int GetInt32(int i) => (int)GetValue(i);\n        public long GetInt64(int i) => (long)GetValue(i);\n        public string GetString(int i) => GetValue(i)?.ToString();\n    }\n}"
  },
  {
    "path": "DataProviders/FileDirCommand.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// FileDirCommand allows specifying the command for the web log.\n\t/// </summary>\n\tpublic class FileDirCommand : IDbCommand\n\t{\n\t\tFileDirConnection _fdc;\t\t// connection we're running under\n\t\tstring _cmd;\t\t\t\t// command to execute\n\t\t// parsed constituents of the command\n\t\tstring _Directory;\t\t\t// Directory\n\t\tstring _FilePattern;\t\t// SearchPattern when doing the file lookup\n\t\tstring _DirectoryPattern;\t// SearchPattern when doing the directory lookup\n\t\tstring _TrimEmpty=\"yes\";\t// Directory with no files will be omitted from result set\n\t\tDataParameterCollection _Parameters = new DataParameterCollection();\n\n\t\tpublic FileDirCommand(FileDirConnection conn)\n\t\t{\n\t\t\t_fdc = conn;  \n\t\t}\n\n\t\tinternal string Directory\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\t// Check to see if \"Directory\" or \"@Directory\" is a parameter\n\t\t\t\tIDbDataParameter dp= _Parameters[\"Directory\"] as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp= _Parameters[\"@Directory\"] as IDbDataParameter;\n\t\t\t\t// Then check to see if the Directory value is a parameter?\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp = _Parameters[_Directory] as IDbDataParameter;\n\t\t\t\tif (dp != null)\n\t\t\t\t\treturn dp.Value != null? dp.Value.ToString(): _Directory;\t// don't pass null; pass existing value\n\t\t\t\treturn _Directory == null? _fdc.Directory: _Directory;\n\t\t\t}\n\t\t\tset {_Directory = value;}\n\t\t}\n\n\t\tinternal string FilePattern\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\t// Check to see if \"FilePattern\" or \"@FilePattern\" is a parameter\n\t\t\t\tIDbDataParameter dp= _Parameters[\"FilePattern\"] as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp= _Parameters[\"@FilePattern\"] as IDbDataParameter;\n\t\t\t\t// Then check to see if the FilePattern value is a parameter?\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp = _Parameters[_FilePattern] as IDbDataParameter;\n\t\t\t\tif (dp != null)\n\t\t\t\t\treturn dp.Value as string;\n\t\t\t\treturn _FilePattern;\n\t\t\t}\n\t\t\tset {_FilePattern = value;}\n\t\t}\n\n\t\tinternal string DirectoryPattern\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\t// Check to see if \"DirectoryPattern\" or \"@DirectoryPattern\" is a parameter\n\t\t\t\tIDbDataParameter dp= _Parameters[\"DirectoryPattern\"] as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp= _Parameters[\"@DirectoryPattern\"] as IDbDataParameter;\n\t\t\t\t// Then check to see if the DirectoryPattern value is a parameter?\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp = _Parameters[_DirectoryPattern] as IDbDataParameter;\n\t\t\t\tif (dp != null)\n\t\t\t\t\treturn dp.Value as string;\n\t\t\t\treturn _DirectoryPattern;\n\t\t\t}\n\t\t\tset {_DirectoryPattern = value;}\n\t\t}\n\n\t\tinternal bool TrimEmpty\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\t// Check to see if \"TrimEmpty\" or \"@TrimEmpty\" is a parameter\n\t\t\t\tIDbDataParameter dp= _Parameters[\"TrimEmpty\"] as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp= _Parameters[\"@TrimEmpty\"] as IDbDataParameter;\n\t\t\t\t// Then check to see if the TrimEmpty value is a parameter?\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp = _Parameters[_TrimEmpty] as IDbDataParameter;\n\t\t\t\tif (dp != null)\n\t\t\t\t{\n\t\t\t\t\tstring tf = dp.Value as string;\n\t\t\t\t\tif (tf == null)\n\t\t\t\t\t\treturn false;\n\t\t\t\t\ttf = tf.ToLower();\n\t\t\t\t\treturn (tf == \"true\" || tf == \"yes\");\n\t\t\t\t}\n\t\t\t\treturn _TrimEmpty==\"yes\"? true: false;\t// the value must be a constant\n\t\t\t}\n\t\t\tset {_TrimEmpty = value? \"yes\": \"no\";}\n\t\t}\n\n\t\t#region IDbCommand Members\n\n\t\tpublic void Cancel()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"Cancel not implemented\");\n\t\t}\n\n\t\tpublic void Prepare()\n\t\t{\n\t\t\treturn;\t\t\t// Prepare is a noop\n\t\t}\n\n\t\tpublic System.Data.CommandType CommandType\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandType not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandType not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic IDataReader ExecuteReader(System.Data.CommandBehavior behavior)\n\t\t{\n\t\t\tif (!(behavior == CommandBehavior.SingleResult || \n\t\t\t\t  behavior == CommandBehavior.SchemaOnly))\n\t\t\t\tthrow new ArgumentException(\"ExecuteReader supports SingleResult and SchemaOnly only.\");\n\t\t\treturn new FileDirDataReader(behavior, _fdc, this);\n\t\t}\n\n\t\tIDataReader System.Data.IDbCommand.ExecuteReader()\n\t\t{\n\t\t\treturn ExecuteReader(System.Data.CommandBehavior.SingleResult);\n\t\t}\n\n\t\tpublic object ExecuteScalar()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ExecuteScalar not implemented\");\n\t\t}\n\n\t\tpublic int ExecuteNonQuery()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ExecuteNonQuery not implemented\");\n\t\t}\n\n\t\tpublic int CommandTimeout\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandTimeout not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbDataParameter CreateParameter()\n\t\t{\n\t\t\treturn new FileDirDataParameter();\n\t\t}\n\n\t\tpublic IDbConnection Connection\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._fdc;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Setting Connection not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic System.Data.UpdateRowSource UpdatedRowSource\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"UpdatedRowSource not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"UpdatedRowSource not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic string CommandText\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._cmd;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t// Parse the command string for keyword value pairs separated by ';'\n\t\t\t\t_FilePattern = null;\n\t\t\t\t_DirectoryPattern = null;\n\t\t\t\t_Directory = null;\n\t\t\t\tstring[] args = value.Split(';');\n\t\t\t\tforeach(string arg in args)\n\t\t\t\t{\n\t\t\t\t\tstring[] param = arg.Trim().Split('=');\n\t\t\t\t\tif (param == null || param.Length != 2)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tstring key = param[0].Trim().ToLower();\n\t\t\t\t\tstring val = param[1];\n\t\t\t\t\tswitch (key)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase \"directory\":\n\t\t\t\t\t\t\t_Directory = val;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"filepattern\":\n\t\t\t\t\t\t\t_FilePattern = val;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"directorypattern\":\n\t\t\t\t\t\t\t_DirectoryPattern = val;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new ArgumentException(string.Format(\"{0} is an unknown parameter key\", param[0]));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// User must specify both the url and the RowsXPath\n\t\t\t\tif (_Directory == null && this._fdc.Directory == null)\n\t\t\t\t{\n\t\t\t\t\tif (_Directory == null)\n\t\t\t\t\t\tthrow new ArgumentException(\"CommandText requires a 'Directory=' parameter.\");\n\t\t\t\t}\n\t\t\t\t_cmd = value;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDataParameterCollection Parameters\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Parameters;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbTransaction Transaction\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Transaction not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Transaction not implemented\");\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\t// nothing to dispose of\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/FileDirConnection.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// LogConnection handles connections to web log.\n\t/// </summary>\n\tpublic class FileDirConnection : IDbConnection\n\t{\n\t\tstring _Connection;\t\t\t\t// the connection string; of format dir=\n\t\tstring _Directory;\n\t\tbool bOpen=false;\n\t\tpublic FileDirConnection(string conn)\n\t\t{\n\t\t\tConnectionString = conn;\n\t\t}\n\n\t\tinternal string Directory\n\t\t{\n\t\t\tget {return _Directory;}\n\t\t\tset {_Directory = value;}\n\t\t}\n\n\t\tinternal bool IsOpen\n\t\t{\n\t\t\tget {return bOpen;}\n\t\t}\n\n\t\t#region IDbConnection Members\n\n\t\tpublic void ChangeDatabase(string databaseName)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ChangeDatabase method not supported.\");\n\t\t}\n\n\t\tpublic IDbTransaction BeginTransaction(System.Data.IsolationLevel il)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"BeginTransaction method not supported.\");\n\t\t}\n\n\t\tIDbTransaction System.Data.IDbConnection.BeginTransaction()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"BeginTransaction method not supported.\");\n\t\t}\n\n\t\tpublic System.Data.ConnectionState State\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"State not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic string ConnectionString\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Connection;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tstring c = value;\n\t\t\t\t// Now parse the connection string;\n\t\t\t\tArray args = c.Split (',');\n\t\t\t\tforeach(string arg in args)\n\t\t\t\t{\n\t\t\t\t\tif (arg.Trim().ToLower().StartsWith(\"directory=\"))\t// Only have one type of argument right now\n\t\t\t\t\t\t_Directory = arg.Trim().Split('=').GetValue(1) as string;\n\t\t\t\t}\n\t\t\t\t_Connection = value;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbCommand CreateCommand()\n\t\t{\n\t\t\treturn new FileDirCommand(this);\n\t\t}\n\n\t\tpublic void Open()\n\t\t{\n\t\t\tbOpen = true;\n\t\t}\n\n\t\tpublic void Close()\n\t\t{\n\t\t\tbOpen = false;\n\t\t}\n\n\t\tpublic string Database\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn null;\t\t\t// don't really have a database\n\t\t\t}\n\t\t}\n\n\t\tpublic int ConnectionTimeout\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tthis.Close();\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/FileDirDataParameter.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// FileDirDataParameter\n\t/// </summary>\n\tpublic class FileDirDataParameter : BaseDataParameter\n\t{\n\t\tpublic FileDirDataParameter():base()\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "DataProviders/FileDirDataReader.cs",
    "content": "\nusing System;\nusing System.Data;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.IO;\nusing System.Net;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// FileDirDataReader handles reading log files\n\t/// </summary>\n\tpublic class FileDirDataReader : IDataReader\n\t{\n\t\tFileDirConnection _fdconn;\n\t\tFileDirCommand _fdcmd;\n\t\tSystem.Data.CommandBehavior _behavior;\n\n\t\tIEnumerator _ie;\t\t\t//  enumerator thru rows\n\t\tstring _FilePattern;\t\t// FilePattern from _fdcmd\n\t\tstring _DirectoryPattern;\t// DirectoryPattern from _fdcmd\n\t\tbool _TrimEmpty;\t\t\t// Directories with no files will be omitted from result set\n\n\t\t// file data\n\t\tobject[] _Data;\t\t\t\t// data values of the columns\n\t\tArrayList _RowData;\t\t\t// row data\n\t\t// column information; this is fixed for all instances\n\t\tstatic string[] _Names;\t\t// names of the columns\n\t\tstatic Type[] _Types;\t\t// types of the columns\n\t\t// the location of the columns\n\t\tstatic readonly int COLUMN_NAME=0;\n\t\tstatic readonly int COLUMN_SIZE=1;\n\t\tstatic readonly int COLUMN_CREATIONTIME=2;\n\t\tstatic readonly int COLUMN_LASTACCESSTIME=3;\n\t\tstatic readonly int COLUMN_LASTWRITETIME=4;\n\t\tstatic readonly int COLUMN_ID=5;\n\t\tstatic readonly int COLUMN_PARENTID=6;\n\t\tstatic readonly int COLUMN_ISDIRECTORY=7;\n\t\tstatic readonly int COLUMN_EXTENSION=8;\n\t\tstatic readonly int COLUMN_FULLNAME=9;\n\t\tstatic readonly int COLUMN_COUNT=10;\n\n\t\tstatic FileDirDataReader()\n\t\t{\n\t\t\t// Add the names (fixed for type of DataReader depending on the columns parameter)\n\t\t\tType dttype = DateTime.MinValue.GetType();\t\t// work variable for getting the type\n\t\t\tType stype = \"\".GetType();\n\t\t\tType itype = int.MinValue.GetType();\n\t\t\tType ltype = long.MinValue.GetType();\n\t\t\tType btype = new bool().GetType();\n\t\t\t_Names = new string[COLUMN_COUNT]; \n\t\t\t_Names[COLUMN_NAME]=\"Name\";\n\t\t\t_Names[COLUMN_SIZE]=\"Size\";\n\t\t\t_Names[COLUMN_CREATIONTIME]=\"CreationTime\";\n\t\t\t_Names[COLUMN_LASTACCESSTIME]=\"LastAccessTime\";\n\t\t\t_Names[COLUMN_LASTWRITETIME]=\"LastWriteTime\";\n\t\t\t_Names[COLUMN_ID]=\"ID\";\n\t\t\t_Names[COLUMN_PARENTID]=\"ParentID\";\n\t\t\t_Names[COLUMN_ISDIRECTORY]=\"IsDirectory\";\n\t\t\t_Names[COLUMN_EXTENSION]=\"Extension\";\n\t\t\t_Names[COLUMN_FULLNAME]=\"FullName\";\n\t\t\n\t\t\t_Types = new Type[COLUMN_COUNT];\n\t\t\t_Types[COLUMN_NAME]=stype;\n\t\t\t_Types[COLUMN_SIZE]=ltype;\n\t\t\t_Types[COLUMN_CREATIONTIME]=dttype;\n\t\t\t_Types[COLUMN_LASTACCESSTIME]=dttype;\n\t\t\t_Types[COLUMN_LASTWRITETIME]=dttype;\n\t\t\t_Types[COLUMN_ID]=itype;\n\t\t\t_Types[COLUMN_PARENTID]=itype;\n\t\t\t_Types[COLUMN_ISDIRECTORY]=btype;\n\t\t\t_Types[COLUMN_EXTENSION]=stype;\n\t\t\t_Types[COLUMN_FULLNAME]=stype;\n\t\t}\n\n\t\tpublic FileDirDataReader(System.Data.CommandBehavior behavior, FileDirConnection conn, FileDirCommand cmd)\n\t\t{\n\t\t\t_fdconn = conn;\n\t\t\t_fdcmd = cmd;\n\t\t\t_behavior = behavior;\n\t\t\t_FilePattern = _fdcmd.FilePattern;\n\t\t\t_DirectoryPattern = _fdcmd.DirectoryPattern;\n\t\t\t_TrimEmpty = _fdcmd.TrimEmpty;\n\n\t\t\t_Data = new object[_Names.Length];\t\t\t// allocate enough room for data\n\n\t\t\tif (behavior == CommandBehavior.SchemaOnly)\n\t\t\t\treturn;\n\n\t\t\tstring dir = _fdcmd.Directory;\n\t\t\tif (dir == null)\n\t\t\t\tthrow new Exception(\"Directory parameter must be specified.\");\n\n\t\t\t// Populate the data array\n\t\t\t_RowData = new ArrayList();\n\t\t\tPopulateData(new DirectoryInfo(dir), -1);\n\t\t\t_ie = _RowData.GetEnumerator();\n\t\t}\n\n\t\tlong PopulateData(DirectoryInfo di, int parent)\n\t\t{\n\t\t\tlong size=0;\n\n\t\t\t// Create a new row for this directory\n\t\t\tobject[] prow = new object[_Names.Length];\n\t\t\t_RowData.Add(prow);\n\t\t\tint rowcount = _RowData.Count - 1;\n\t\t\tprow[COLUMN_NAME] = di.Name;\n\t\t\tprow[COLUMN_ISDIRECTORY] = true;\n\t\t\tprow[COLUMN_ID] = rowcount;\n\t\t\tprow[COLUMN_PARENTID] = parent >= 0? (object) parent: (object) null;\n\t\t\tprow[COLUMN_CREATIONTIME] = di.CreationTime;\n\t\t\tprow[COLUMN_LASTACCESSTIME] = di.LastAccessTime;\n\t\t\tprow[COLUMN_LASTWRITETIME] = di.LastWriteTime;\n\t\t\tprow[COLUMN_EXTENSION] = di.Extension;\n\t\t\tprow[COLUMN_FULLNAME] = di.FullName;\n\t\t\t\n\t\t\tparent = rowcount;\t\t// set the new parent\n\t\t\t\n\t\t\tFileInfo[] afi = _FilePattern == null? di.GetFiles(): di.GetFiles(_FilePattern);\n\t\t\tforeach (FileInfo fi in afi)\n\t\t\t{\t   \n\t\t\t\t// Create a new row for this file\n\t\t\t\tobject[] row = new object[_Names.Length];\n\t\t\t\t_RowData.Add(row);\n\t\t\t\trow[COLUMN_NAME] = fi.Name;\n\t\t\t\trow[COLUMN_ISDIRECTORY] = false;\n\t\t\t\trow[COLUMN_ID] = _RowData.Count - 1;\n\t\t\t\trow[COLUMN_PARENTID] = (object) parent;\n\t\t\t\trow[COLUMN_CREATIONTIME] = fi.CreationTime;\n\t\t\t\trow[COLUMN_LASTACCESSTIME] = fi.LastAccessTime;\n\t\t\t\trow[COLUMN_LASTWRITETIME] = fi.LastWriteTime;\n\t\t\t\trow[COLUMN_EXTENSION] = fi.Extension;\n\t\t\t\trow[COLUMN_FULLNAME] = fi.FullName;\n\t\t\t\trow[COLUMN_SIZE] = fi.Length;\n\t\t\t\tsize += fi.Length;\n\t\t\t}\n\n\t\t\tDirectoryInfo[] adi = _DirectoryPattern == null? di.GetDirectories(): di.GetDirectories(_DirectoryPattern);\n\t\t\tforeach (DirectoryInfo sdi in adi)\n\t\t\t{\n\t\t\t\tsize += PopulateData(sdi, parent);\n\t\t\t}\n\n\t\t\tprow[COLUMN_SIZE] = size;\n\n\t\t\t// If a directory has no files below it we (optionally) can omit the directory as well\n\t\t\tif (_TrimEmpty && parent >= 0 && _RowData.Count - 1 == rowcount)\n\t\t\t{\n\t\t\t\t_RowData.RemoveAt(rowcount);\n\t\t\t}\n\n\t\t\treturn size;\n\t\t}\n\n\n\t\t#region IDataReader Members\n\n\t\tpublic int RecordsAffected\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\tpublic bool IsClosed\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _ie == null;\n\t\t\t}\n\t\t}\n\n\t\tpublic bool NextResult()\t   \n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tpublic void Close()\n\t\t{\n\t\t\t_ie = null;\n\t\t\t_RowData = null;\n\t\t\t_Data = null;\n\t\t}\n\n\t\tpublic bool Read()\n\t\t{\n\t\t\tif (_ie == null || !_ie.MoveNext())\n\t\t\t\treturn false;\n\n\t\t\t_Data = _ie.Current as object[];\n\n\t\t\treturn true;\n\t\t}\n\t\n\t\tpublic int Depth\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\tpublic DataTable GetSchemaTable()\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tthis.Close();\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDataRecord Members\n\n\t\tpublic int GetInt32(int i)\n\t\t{\n\t\t\treturn Convert.ToInt32(_Data[i]);\n\t\t}\n\n\t\tpublic object this[string name]\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tint ci = this.GetOrdinal(name);\n\t\t\t\treturn _Data[ci];\n\t\t\t}\n\t\t}\n\n\t\tobject System.Data.IDataRecord.this[int i]\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Data[i];\n\t\t\t}\n\t\t}\n\n\t\tpublic object GetValue(int i)\n\t\t{\n\t\t\treturn _Data[i];\n\t\t}\n\n\t\tpublic bool IsDBNull(int i)\n\t\t{\n\t\t\treturn _Data[i] == null;\n\t\t}\n\n\t\tpublic long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetBytes not implemented.\");\n\t\t}\n\n\t\tpublic byte GetByte(int i)\n\t\t{\n\t\t\treturn Convert.ToByte(_Data[i]);\n\t\t}\n\n\t\tpublic Type GetFieldType(int i)\n\t\t{\n\t\t\treturn _Types[i];\n\t\t}\n\n\t\tpublic decimal GetDecimal(int i)\n\t\t{\n\t\t\treturn Convert.ToDecimal(_Data[i]);\n\t\t}\n\n\t\tpublic int GetValues(object[] values)\n\t\t{\n\t\t\tint i;\n\t\t\tfor (i=0; i < values.Length; i++)\n\t\t\t{\n\t\t\t\tvalues[i] = i >= _Data.Length? System.DBNull.Value: _Data[i];\n\t\t\t}\n\n\t\t\treturn Math.Min(values.Length, _Data.Length);\n\t\t}\n\n\t\tpublic string GetName(int i)\n\t\t{\n\t\t\treturn _Names[i] as string;\n\t\t}\n\n\t\tpublic int FieldCount\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Data.Length;\n\t\t\t}\n\t\t}\n\n\t\tpublic long GetInt64(int i)\n\t\t{\n\t\t\treturn Convert.ToInt64(_Data[i]);\n\t\t}\n\n\t\tpublic double GetDouble(int i)\n\t\t{\n\t\t\treturn Convert.ToDouble(_Data[i]);\n\t\t}\n\n\t\tpublic bool GetBoolean(int i)\n\t\t{\n\t\t\treturn Convert.ToBoolean(_Data[i]);\n\t\t}\n\n\t\tpublic Guid GetGuid(int i)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetGuid not implemented.\");\n\t\t}\n\n\t\tpublic DateTime GetDateTime(int i)\n\t\t{\n\t\t\treturn Convert.ToDateTime(_Data[i]);\n\t\t}\n\n\t\tpublic int GetOrdinal(string name)\n\t\t{\n\t\t\tint ci=0;\n\t\t\t// do case sensitive lookup\n\t\t\tforeach (string cname in _Names)\n\t\t\t{\n\t\t\t\tif (cname == name)\n\t\t\t\t\treturn ci;\n\t\t\t\tci++;\n\t\t\t}\n\n\t\t\t// do case insensitive lookup\n\t\t\tci=0;\n\t\t\tname = name.ToLower();\n\t\t\tforeach (string cname in _Names)\n\t\t\t{\n\t\t\t\tif (cname.ToLower() == name)\n\t\t\t\t\treturn ci;\n\t\t\t\tci++;\n\t\t\t}\n\n\t\t\tthrow new ArgumentException(string.Format(\"Column '{0}' not known.\", name));\n\t\t}\n\n\t\tpublic string GetDataTypeName(int i)\n\t\t{\n\t\t\tType t = _Types[i] as Type;\n\t\t\treturn t.ToString();\n\t\t}\n\n\t\tpublic float GetFloat(int i)\n\t\t{\n\t\t\treturn Convert.ToSingle(_Data[i]);\n\t\t}\n\n\t\tpublic IDataReader GetData(int i)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetData not implemented.\");\n\t\t}\n\n\t\tpublic long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetChars not implemented.\");\n\t\t}\n\n\t\tpublic string GetString(int i)\n\t\t{\n\t\t\treturn Convert.ToString(_Data[i]);\n\t\t}\n\n\t\tpublic char GetChar(int i)\n\t\t{\n\t\t\treturn Convert.ToChar(_Data[i]);\n\t\t}\n\n\t\tpublic short GetInt16(int i)\n\t\t{\n\t\t\treturn Convert.ToInt16(_Data[i]);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/FilteredDictionaryDataReader.cs",
    "content": "﻿using System;\nusing System.Data;\n\nnamespace Majorsilence.Reporting.Data\n{\n    public class FilteredDictionaryDataReader : IDataReader\n    {\n        private readonly DictionaryDataReader _innerReader;\n        private readonly string[] _columnNames;\n        private readonly int[] _columnMap;\n\n        public FilteredDictionaryDataReader(DictionaryDataReader reader, string[] columnNames)\n        {\n            _innerReader = reader;\n            _columnNames = columnNames;\n\n            // Create a mapping from our filtered indices to the inner reader's indices\n            _columnMap = new int[_columnNames.Length];\n            for (int i = 0; i < _columnNames.Length; i++)\n            {\n                _columnMap[i] = reader.GetOrdinal(_columnNames[i]);\n            }\n        }\n\n        // Override field count and name-related methods\n        public int FieldCount => _columnNames.Length;\n        public string GetName(int i) => _columnNames[i];\n        public int GetOrdinal(string name) => Array.IndexOf(_columnNames, name);\n\n        // Map our filtered indices to the inner reader\n        public object GetValue(int i) => _innerReader.GetValue(_columnMap[i]);\n        public Type GetFieldType(int i) => _innerReader.GetFieldType(_columnMap[i]);\n\n        // Override indexers\n        public object this[int i] => GetValue(i);\n        public object this[string name] => GetValue(GetOrdinal(name));\n\n        // Delegate all other methods to the inner reader\n        public bool Read() => _innerReader.Read();\n        public void Close() => _innerReader.Close();\n        public void Dispose() => _innerReader.Dispose();\n        public bool NextResult() => _innerReader.NextResult();\n        public int Depth => _innerReader.Depth;\n        public bool IsClosed => _innerReader.IsClosed;\n        public int RecordsAffected => _innerReader.RecordsAffected;\n\n        public int GetValues(object[] values)\n        {\n            int count = Math.Min(values.Length, FieldCount);\n            for (int i = 0; i < count; i++)\n            {\n                values[i] = GetValue(i);\n            }\n\n            return count;\n        }\n\n        // Implement the rest of the interface methods by mapping indices\n        public bool IsDBNull(int i) => _innerReader.IsDBNull(_columnMap[i]);\n        public bool GetBoolean(int i) => _innerReader.GetBoolean(_columnMap[i]);\n        public byte GetByte(int i) => _innerReader.GetByte(_columnMap[i]);\n\n        public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length) =>\n            _innerReader.GetBytes(_columnMap[i], fieldOffset, buffer, bufferoffset, length);\n\n        public char GetChar(int i) => _innerReader.GetChar(_columnMap[i]);\n\n        public long GetChars(int i, long fieldOffset, char[] buffer, int bufferoffset, int length) =>\n            _innerReader.GetChars(_columnMap[i], fieldOffset, buffer, bufferoffset, length);\n\n        public IDataReader GetData(int i) => _innerReader.GetData(_columnMap[i]);\n        public string GetDataTypeName(int i) => _innerReader.GetDataTypeName(_columnMap[i]);\n        public DateTime GetDateTime(int i) => _innerReader.GetDateTime(_columnMap[i]);\n        public decimal GetDecimal(int i) => _innerReader.GetDecimal(_columnMap[i]);\n        public double GetDouble(int i) => _innerReader.GetDouble(_columnMap[i]);\n        public float GetFloat(int i) => _innerReader.GetFloat(_columnMap[i]);\n        public Guid GetGuid(int i) => _innerReader.GetGuid(_columnMap[i]);\n        public short GetInt16(int i) => _innerReader.GetInt16(_columnMap[i]);\n        public int GetInt32(int i) => _innerReader.GetInt32(_columnMap[i]);\n        public long GetInt64(int i) => _innerReader.GetInt64(_columnMap[i]);\n        public string GetString(int i) => _innerReader.GetString(_columnMap[i]);\n\n        public DataTable GetSchemaTable()\n        {\n            DataTable originalSchema = _innerReader.GetSchemaTable();\n            DataTable filteredSchema = originalSchema.Clone();\n\n            // Only include rows for our filtered columns\n            foreach (string columnName in _columnNames)\n            {\n                foreach (DataRow row in originalSchema.Rows)\n                {\n                    if ((string)row[\"ColumnName\"] == columnName)\n                    {\n                        filteredSchema.ImportRow(row);\n                        break;\n                    }\n                }\n            }\n\n            return filteredSchema;\n        }\n    }\n}"
  },
  {
    "path": "DataProviders/GedcomCommand.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// LogCommand allows specifying the command for the web log.\n\t/// </summary>\n\tpublic class GedcomCommand : IDbCommand\n\t{\n\t\tGedcomConnection _lc;\t\t\t// connection we're running under\n\t\tstring _cmd;\t\t\t\t// command to execute\n\t\t// parsed constituents of the command\n\t\tstring _Url;\t\t\t\t// url of the file \n\t\tDataParameterCollection _Parameters = new DataParameterCollection();\n\n\t\tpublic GedcomCommand(GedcomConnection conn)\n\t\t{\n\t\t\t_lc = conn;\n\t\t}\n\n\t\tinternal string Url\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\t// Check to see if \"Url\" or \"@Url\" is a parameter\n\t\t\t\tIDbDataParameter dp= _Parameters[\"Url\"] as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp= _Parameters[\"@Url\"] as IDbDataParameter;\n\t\t\t\t// Then check to see if the Url value is a parameter?\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp = _Parameters[_Url] as IDbDataParameter;\n\t\t\t\tif (dp != null)\n\t\t\t\t\treturn dp.Value != null? dp.Value.ToString(): _Url;\t// don't pass null; pass existing value\n\t\t\t\treturn _Url;\t// the value must be a constant\n\t\t\t}\n\t\t\tset {_Url = value;}\n\t\t}\n\n\t\t#region IDbCommand Members\n\n\t\tpublic void Cancel()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"Cancel not implemented\");\n\t\t}\n\n\t\tpublic void Prepare()\n\t\t{\n\t\t\treturn;\t\t\t// Prepare is a noop\n\t\t}\n\n\t\tpublic System.Data.CommandType CommandType\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandType not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandType not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic IDataReader ExecuteReader(System.Data.CommandBehavior behavior)\n\t\t{\n\t\t\tif (!(behavior == CommandBehavior.SingleResult || \n\t\t\t\t  behavior == CommandBehavior.SchemaOnly))\n\t\t\t\tthrow new ArgumentException(\"ExecuteReader supports SingleResult and SchemaOnly only.\");\n\t\t\treturn new GedcomDataReader(behavior, _lc, this);\n\t\t}\n\n\t\tIDataReader System.Data.IDbCommand.ExecuteReader()\n\t\t{\n\t\t\treturn ExecuteReader(System.Data.CommandBehavior.SingleResult);\n\t\t}\n\n\t\tpublic object ExecuteScalar()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ExecuteScalar not implemented\");\n\t\t}\n\n\t\tpublic int ExecuteNonQuery()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ExecuteNonQuery not implemented\");\n\t\t}\n\n\t\tpublic int CommandTimeout\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandTimeout not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbDataParameter CreateParameter()\n\t\t{\n\t\t\treturn new GedcomDataParameter();\n\t\t}\n\n\t\tpublic IDbConnection Connection\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._lc;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Setting Connection not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic System.Data.UpdateRowSource UpdatedRowSource\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"UpdatedRowSource not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"UpdatedRowSource not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic string CommandText\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._cmd;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t// Parse the command string for keyword value pairs separated by ';'\n\t\t\t\tstring[] args = value.Split(';');\n\t\t\t\tstring url=null;\n\t\t\t\tforeach(string arg in args)\n\t\t\t\t{\n\t\t\t\t\tstring[] param = arg.Trim().Split('=');\n\t\t\t\t\tif (param == null || param.Length != 2)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tstring key = param[0].Trim().ToLower();\n\t\t\t\t\tstring val = param[1];\n\t\t\t\t\tswitch (key)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase \"url\":\n\t\t\t\t\t\tcase \"file\":\n\t\t\t\t\t\t\turl = val;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new ArgumentException(string.Format(\"{0} is an unknown parameter key\", param[0]));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// User must specify both the url and the RowsXPath\n\t\t\t\tif (url == null)\n\t\t\t\t\tthrow new ArgumentException(\"CommandText requires a 'Url=' parameter.\");\n\t\t\t\t_cmd = value;\n\t\t\t\t_Url = url;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDataParameterCollection Parameters\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Parameters;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbTransaction Transaction\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Transaction not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Transaction not implemented\");\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\t// nothing to dispose of\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/GedcomConnection.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// LogConnection handles connections to web log.\n\t/// </summary>\n\tpublic class GedcomConnection : IDbConnection\n\t{\n\t\tstring _Connection;\t\t\t\t// the connection string; of format file=\n\t\tbool bOpen=false;\n\t\tpublic GedcomConnection(string conn)\n\t\t{\n\t\t\tConnectionString = conn;\n\t\t}\n\n\t\tinternal bool IsOpen\n\t\t{\n\t\t\tget {return bOpen;}\n\t\t}\n\n\t\t#region IDbConnection Members\n\n\t\tpublic void ChangeDatabase(string databaseName)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ChangeDatabase method not supported.\");\n\t\t}\n\n\t\tpublic IDbTransaction BeginTransaction(System.Data.IsolationLevel il)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"BeginTransaction method not supported.\");\n\t\t}\n\n\t\tIDbTransaction System.Data.IDbConnection.BeginTransaction()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"BeginTransaction method not supported.\");\n\t\t}\n\n\t\tpublic System.Data.ConnectionState State\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"State not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic string ConnectionString\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Connection;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n                //string c = value;\n                //// Now parse the connection string;\n                //Array args = c.Split (',');\n                //string directory=null;\n                //foreach(string arg in args)\n                //{\n                //    if (arg.Trim().ToLower().StartsWith(\"directory=\"))\t// Only have one type of argument right now\n                //        directory = arg.Trim().Split('=').GetValue(1) as string;\n                //}\n\t\t\t\t_Connection = value;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbCommand CreateCommand()\n\t\t{\n\t\t\treturn new GedcomCommand(this);\n\t\t}\n\n\t\tpublic void Open()\n\t\t{\n\t\t\tbOpen = true;\n\t\t}\n\n\t\tpublic void Close()\n\t\t{\n\t\t\tbOpen = false;\n\t\t}\n\n\t\tpublic string Database\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn null;\t\t\t// don't really have a database\n\t\t\t}\n\t\t}\n\n\t\tpublic int ConnectionTimeout\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tthis.Close();\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/GedcomDataParameter.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// XmlDataParameter\n\t/// </summary>\n\tpublic class GedcomDataParameter : BaseDataParameter\n\t{\n\t\tpublic GedcomDataParameter():base()\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "DataProviders/GedcomDataReader.cs",
    "content": "\nusing System;\nusing System.Data;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.IO;\nusing System.Net;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// LogDataReader handles reading log files\n\t/// </summary>\n\tpublic class GedcomDataReader : IDataReader\n\t{\n\t\tGedcomConnection _lconn;\n\t\tGedcomCommand _lcmd;\n\t\tSystem.Data.CommandBehavior _behavior;\n\n\t\tMultipleStreamReader _sr;\t// StreamReader for _Url\n\t\tobject[] _Data;\t\t\t\t// data values of the columns\n\n\t\t// column information: is fixed for all instances\n\t\t// names of all the columns\n\t\tstatic string[] _Names= new string[] {\"host\",\"client_identifier\",\"user\",\"datetime\",\n\t\t\t\t\t\t\t\t\t\t\t\t \"request_cmd\",\"request_url\",\"request_type\", \"request_parameters\",\"status_code\",\n\t\t\t\t\t\t\t\t\t\t\t\t \"bytes\", \"referrer\", \"user_agent\", \"cookie\"};\n\t\t// types of all the columns\n\t\tstatic Type _dttype = DateTime.MinValue.GetType();\t\t// work variable for getting the type\n\t\tstatic Type _tstring = \"\".GetType();\n\t\tstatic Type _dtype = Double.MinValue.GetType();\n\t\tstatic Type[] _Types = new Type[] {_tstring,_tstring,_tstring,_dttype,\n\t\t\t\t\t\t\t\t\t\t\t  _tstring,_tstring,_tstring,_tstring,_tstring,\n\t\t\t\t\t\t\t\t\t\t\t  _dtype,_tstring,_tstring,_tstring};\n\t\tconst int DATETIME_FIELD=3;\t// the date time field\n\t\tconst int REQUEST_FIELD=4;\t// the request field\n\t\tconst int BYTES_FIELD=9;\t// the bytes field\n\n\n\t\tpublic GedcomDataReader(System.Data.CommandBehavior behavior, GedcomConnection conn, GedcomCommand cmd)\n\t\t{\n\t\t\t_lconn = conn;\n\t\t\t_lcmd = cmd;\n\t\t\t_behavior = behavior;\n\t\t\t\n\t\t\tstring fname = _lcmd.Url;\n\n\t\t\tif (behavior != CommandBehavior.SchemaOnly)\n\t\t\t\t_sr = new MultipleStreamReader(_lcmd.Url);\t// get the main stream\n\n\t\t\t_Data = new object[_Names.Length];\t\t\t// allocate enough room for data\n\t\t}\n\n\t\t#region IDataReader Members\n\n\t\tpublic int RecordsAffected\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\tpublic bool IsClosed\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _sr == null;\n\t\t\t}\n\t\t}\n\n\t\tpublic bool NextResult()\t   \n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tpublic void Close()\n\t\t{\n\t\t\tif (_sr != null)\n\t\t\t{\n\t\t\t\t_sr.Close();\n\t\t\t\t_sr = null;\n\t\t\t}\n\t\t\t_Data = null;\n\t\t}\n\n\t\tpublic bool Read()\n\t\t{\n\t\t\tif (this._sr == null)\n\t\t\t\treturn false;\n\n\t\t\t// read a line of the log\n\t\t\tstring line = _sr.ReadLine();\n\t\t\tif (line == null)\n\t\t\t\treturn false;\n\n\t\t\t// obtain the data from each column and put the data array\n\t\t\tLexer l = new Lexer(new StringReader(line));\n\t\t\tLexTokenList ll = l.Lex();\n\t\t\tint ci=0;\t\t\t\t\t// start at first column\n\t\t\tif (ll.Count > 11)\n\t\t\t\tci = 0;\n\t\t\tforeach (LexToken lt in ll)\n\t\t\t{\n\t\t\t\tif (ci >= _Data.Length || lt.Type == LexTokenTypes.EOF)\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tif (ci == DATETIME_FIELD)\n\t\t\t\t{\n\t\t\t\t\t_Data[ci] =GetDateTime(lt.Value);\n\t\t\t\t}\n\t\t\t\telse if (ci == REQUEST_FIELD)\n\t\t\t\t{\t// break the request into multiple fields; command, url, http type\n\t\t\t\t\tstring[] reqs = lt.Value.Split(' ');\n\n\t\t\t\t\tstring req_cmd=null;\n\t\t\t\t\tstring req_url=null;\n\t\t\t\t\tstring req_type=null;\n\t\t\t\t\tstring req_parameters=null;\n\n\t\t\t\t\tif (reqs == null)\n\t\t\t\t\t{}\n\t\t\t\t\telse if (reqs.Length >= 3)\n\t\t\t\t\t{\n\t\t\t\t\t\treq_cmd = reqs[0];\n\t\t\t\t\t\treq_url = reqs[1];\n\t\t\t\t\t\treq_type = reqs[2];\n\t\t\t\t\t}\n\t\t\t\t\telse if (reqs.Length == 2)\n\t\t\t\t\t{\n\t\t\t\t\t\treq_cmd = reqs[0];\n\t\t\t\t\t\treq_url = reqs[1];\n\t\t\t\t\t}\n\t\t\t\t\telse if (reqs.Length == 1)\n\t\t\t\t\t\treq_url = reqs[0];\n\n\t\t\t\t\tif (req_url != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tstring [] up = req_url.Split('?');\n\t\t\t\t\t\tif (up.Length > 1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treq_url = up[0];\n\t\t\t\t\t\t\treq_parameters = up[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t_Data[ci++] = req_type;\n\t\t\t\t\t_Data[ci++] = req_url;\n\t\t\t\t\t_Data[ci++] = req_type == \"HTTP/1.1\"? \"HTTP/1.1\": req_type;\n\t\t\t\t\t_Data[ci++] = req_parameters;\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\telse if (ci == BYTES_FIELD)\n\t\t\t\t{\n\t\t\t\t\tdouble v=0;\n\t\t\t\t\tif (lt.Value.Length == 0 || lt.Value == \"-\")\n\t\t\t\t\t{}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\ttry\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tv = Convert.ToDouble(lt.Value);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch\n\t\t\t\t\t\t{\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t_Data[ci] = v;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\t_Data[ci] = lt.Value;\n\t\t\t\tci++;\t\t\t\t\t// go to next column\n\t\t\t}\n\n\t\t\twhile (ci < _Data.Length)\n\t\t\t\t_Data[ci++] = null;\n\n\t\t\treturn true;\n\t\t}\n\n\t\tobject GetDateTime(string v)\n\t\t{\n\t\t\tobject result;\n\t\t\tif (v.Length != 26)\n\t\t\t\treturn null;\n\t\t\ttry \n\t\t\t{\n\t\t\t\tstring dd = v.Substring(0,2);\t// the day of the month\n\t\t\t\tstring MMM = v.Substring(3,3);\t// the month\n\t\t\t\tint month=1;\n\t\t\t\tswitch (MMM.ToLower())\n\t\t\t\t{\n\t\t\t\t\tcase \"jan\": month=1; break;\n\t\t\t\t\tcase \"feb\": month=2; break;\n\t\t\t\t\tcase \"mar\": month=3; break;\n\t\t\t\t\tcase \"apr\": month=4; break;\n\t\t\t\t\tcase \"may\": month=5; break;\n\t\t\t\t\tcase \"jun\": month=6; break;\n\t\t\t\t\tcase \"jul\": month=7; break;\n\t\t\t\t\tcase \"aug\": month=8; break;\n\t\t\t\t\tcase \"sep\": month=9; break;\n\t\t\t\t\tcase \"oct\": month=10; break;\n\t\t\t\t\tcase \"nov\": month=11; break;\n\t\t\t\t\tcase \"dec\": month=12; break;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tstring yyyy = v.Substring(7,4);\t// the year\n\t\t\t\tstring hh = v.Substring(12,2);\t// the hour\n\t\t\t\tstring mm = v.Substring(15,2);\t// the minute\n\t\t\t\tstring ss = v.Substring(18,2);\t// the seconds\n\t\t\t\tbool bPlus = v[21] == '+';\n\t\t\t\tint thh = Convert.ToInt32(v.Substring(22,2));\t// the time zone (hh)\n\t\t\t\tint tmm = Convert.ToInt32(v.Substring(24,2));\t// the time zone (mm)\n\t\t\t\tint tzdiff = thh * 60 + tmm;\t// time zone difference in minutes\n\t\t\t\tif (!bPlus)\n\t\t\t\t\ttzdiff = - tzdiff;\n\t\t\t\tDateTime dt = \n\t\t\t\t\tnew DateTime(Convert.ToInt32(yyyy),\n\t\t\t\t\tmonth,\n\t\t\t\t\tConvert.ToInt32(dd),\n\t\t\t\t\tConvert.ToInt32(hh),\n\t\t\t\t\tConvert.ToInt32(mm),\n\t\t\t\t\tConvert.ToInt32(ss), 0);\n\t\t\t\tresult = dt.AddMinutes(tzdiff);\t\n\t\t\t}\n\t\t\tcatch\n\t\t\t{ \n\t\t\t\tresult = null;\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\n\t\tpublic int Depth\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\tpublic DataTable GetSchemaTable()\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tthis.Close();\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDataRecord Members\n\n\t\tpublic int GetInt32(int i)\n\t\t{\n\t\t\treturn Convert.ToInt32(_Data[i]);\n\t\t}\n\n\t\tpublic object this[string name]\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tint ci = this.GetOrdinal(name);\n\t\t\t\treturn _Data[ci];\n\t\t\t}\n\t\t}\n\n\t\tobject System.Data.IDataRecord.this[int i]\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Data[i];\n\t\t\t}\n\t\t}\n\n\t\tpublic object GetValue(int i)\n\t\t{\n\t\t\treturn _Data[i];\n\t\t}\n\n\t\tpublic bool IsDBNull(int i)\n\t\t{\n\t\t\treturn _Data[i] == null;\n\t\t}\n\n\t\tpublic long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetBytes not implemented.\");\n\t\t}\n\n\t\tpublic byte GetByte(int i)\n\t\t{\n\t\t\treturn Convert.ToByte(_Data[i]);\n\t\t}\n\n\t\tpublic Type GetFieldType(int i)\n\t\t{\n\t\t\treturn _Types[i];\n\t\t}\n\n\t\tpublic decimal GetDecimal(int i)\n\t\t{\n\t\t\treturn Convert.ToDecimal(_Data[i]);\n\t\t}\n\n\t\tpublic int GetValues(object[] values)\n\t\t{\n\t\t\tint i;\n\t\t\tfor (i=0; i < values.Length; i++)\n\t\t\t{\n\t\t\t\tvalues[i] = i >= _Data.Length? System.DBNull.Value: _Data[i];\n\t\t\t}\n\n\t\t\treturn Math.Min(values.Length, _Data.Length);\n\t\t}\n\n\t\tpublic string GetName(int i)\n\t\t{\n\t\t\treturn _Names[i] as string;\n\t\t}\n\n\t\tpublic int FieldCount\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Data.Length;\n\t\t\t}\n\t\t}\n\n\t\tpublic long GetInt64(int i)\n\t\t{\n\t\t\treturn Convert.ToInt64(_Data[i]);\n\t\t}\n\n\t\tpublic double GetDouble(int i)\n\t\t{\n\t\t\treturn Convert.ToDouble(_Data[i]);\n\t\t}\n\n\t\tpublic bool GetBoolean(int i)\n\t\t{\n\t\t\treturn Convert.ToBoolean(_Data[i]);\n\t\t}\n\n\t\tpublic Guid GetGuid(int i)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetGuid not implemented.\");\n\t\t}\n\n\t\tpublic DateTime GetDateTime(int i)\n\t\t{\n\t\t\treturn Convert.ToDateTime(_Data[i]);\n\t\t}\n\n\t\tpublic int GetOrdinal(string name)\n\t\t{\n\t\t\tint ci=0;\n\t\t\t// do case sensitive lookup\n\t\t\tforeach (string cname in _Names)\n\t\t\t{\n\t\t\t\tif (cname == name)\n\t\t\t\t\treturn ci;\n\t\t\t\tci++;\n\t\t\t}\n\n\t\t\t// do case insensitive lookup\n\t\t\tci=0;\n\t\t\tname = name.ToLower();\n\t\t\tforeach (string cname in _Names)\n\t\t\t{\n\t\t\t\tif (cname.ToLower() == name)\n\t\t\t\t\treturn ci;\n\t\t\t\tci++;\n\t\t\t}\n\n\t\t\tthrow new ArgumentException(string.Format(\"Column '{0}' not known.\", name));\n\t\t}\n\n\t\tpublic string GetDataTypeName(int i)\n\t\t{\n\t\t\tType t = _Types[i] as Type;\n\t\t\treturn t.ToString();\n\t\t}\n\n\t\tpublic float GetFloat(int i)\n\t\t{\n\t\t\treturn Convert.ToSingle(_Data[i]);\n\t\t}\n\n\t\tpublic IDataReader GetData(int i)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetData not implemented.\");\n\t\t}\n\n\t\tpublic long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetChars not implemented.\");\n\t\t}\n\n\t\tpublic string GetString(int i)\n\t\t{\n\t\t\treturn Convert.ToString(_Data[i]);\n\t\t}\n\n\t\tpublic char GetChar(int i)\n\t\t{\n\t\t\treturn Convert.ToChar(_Data[i]);\n\t\t}\n\n\t\tpublic short GetInt16(int i)\n\t\t{\n\t\t\treturn Convert.ToInt16(_Data[i]);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/HttpClientExtension.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Data\n{\n    internal static class HttpClientExtension\n    {\n        public static void AddMajorsilenceReportingUserAgent(this HttpClient client)\n        {\n            if (client.DefaultRequestHeaders.UserAgent.Count == 0)\n            {\n                client.DefaultRequestHeaders.UserAgent.ParseAdd(\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3 MajorsilenceReporting/1.0\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "DataProviders/JsonCommand.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// TxtCommand allows specifying the command for a text file.\n\t/// </summary>\n\tpublic class JsonCommand : IDbCommand\n\t{\n\t\tJsonConnection _tc;\t\t\t// connection we're running under\n\t\tstring _cmd;\t\t\t\t// command to execute\n\t\t// parsed constituents of the command\n\t\tstring[] _Columns;\t\t\t// hold the column list\n\t\tDataParameterCollection _Parameters = new DataParameterCollection();\n\n\t\tpublic JsonCommand(JsonConnection conn)\n\t\t{\n\t\t\t_tc = conn;\n        }\n\n\t\tinternal string[] Columns\n\t\t{\n\t\t\tget {return _Columns;}\n\t\t}\n        \n        private string _tableName = null; // Add this field with default value\n\n        public string TableName\n        {\n            get { return _tableName; }\n        }\n\n\t\tinternal string Url\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\t// Check to see if \"Url\" or \"@Url\" is a parameter\n\t\t\t\tIDbDataParameter dp= _Parameters[\"Url\"] as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp= _Parameters[\"@Url\"] as IDbDataParameter;\n\t\t\t\t// Then check to see if the Url value is a parameter?\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp = _Parameters[_tc.Url] as IDbDataParameter;\n\t\t\t\tif (dp != null)\n\t\t\t\t\treturn dp.Value != null? dp.Value.ToString(): _tc.Url;\t// don't pass null; pass existing value\n\t\t\t\treturn _tc.Url;\t// the value must be a constant\n\t\t\t}\n\t\t}\n\n\t\t#region IDbCommand Members\n\n\t\tpublic void Cancel()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"Cancel not implemented\");\n\t\t}\n\n\t\tpublic void Prepare()\n\t\t{\n\t\t\treturn;\t\t\t// Prepare is a noop\n\t\t}\n\n\t\tpublic System.Data.CommandType CommandType\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandType not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t}\n\t\t}\n\n\t\tpublic IDataReader ExecuteReader(System.Data.CommandBehavior behavior)\n\t\t{\n\t\t\tif (!(behavior == CommandBehavior.SingleResult || \n\t\t\t\t  behavior == CommandBehavior.SchemaOnly))\n\t\t\t\tthrow new ArgumentException(\"ExecuteReader supports SingleResult and SchemaOnly only.\");\n\t\t\treturn new JsonDataReader(behavior, _tc, this);\n\t\t}\n\n\t\tIDataReader System.Data.IDbCommand.ExecuteReader()\n\t\t{\n\t\t\treturn ExecuteReader(System.Data.CommandBehavior.SingleResult);\n\t\t}\n\n\t\tpublic object ExecuteScalar()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ExecuteScalar not implemented\");\n\t\t}\n\n\t\tpublic int ExecuteNonQuery()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ExecuteNonQuery not implemented\");\n\t\t}\n\n\t\tpublic int CommandTimeout\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandTimeout not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbDataParameter CreateParameter()\n\t\t{\n\t\t\treturn new TxtDataParameter();\n\t\t}\n\n\t\tpublic IDbConnection Connection\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._tc;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Setting Connection not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic System.Data.UpdateRowSource UpdatedRowSource\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"UpdatedRowSource not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"UpdatedRowSource not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic string CommandText\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._cmd;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t// Parse the command string for keyword value pairs separated by ';'\n\t\t\t\tstring[] args = value.Split(';');\n\t\t\t\tstring[] columns = null;\n\t\t\t\tforeach(string arg in args)\n\t\t\t\t{\n\t\t\t\t\tstring[] param = arg.Trim().Split('=');\n\t\t\t\t\tif (param == null || param.Length != 2)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tstring key = param[0].Trim().ToLower();\n\t\t\t\t\tstring val = param[1];\n\t\t\t\t\tswitch (key)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase \"columns\":\n\t\t\t\t\t\t\t// column list is separated by ','\n\t\t\t\t\t\t\tcolumns = val.Trim().Split(',');\n\t\t\t\t\t\t\tbreak;\n                        case \"table\":\n                            _tableName = val;\n                            break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new ArgumentException(string.Format(\"{0} is an unknown parameter key\", param[0]));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t_cmd = value;\n\t\t\t\t_Columns = columns;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDataParameterCollection Parameters\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Parameters;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbTransaction Transaction\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Transaction not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Transaction not implemented\");\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\t// nothing to dispose of\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/JsonConnection.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\nusing System.Net.Http;\n\nnamespace Majorsilence.Reporting.Data\n{\n    /// <summary>\n    /// LogConnection handles connections to web log.\n    /// </summary>\n    public class JsonConnection : IDbConnection\n    {\n        string _Connection;             // the connection string; of format file=\n        bool bOpen = false;\n        public HttpClient Client { get; private set; }\n        private bool shouldDisposeClient = false;\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"conn\"></param>\n        /// <exception cref=\"ArgumentNullException\"></exception>\n        /// <example>\n        /// <code>\n        /// var conn1 = new JsonConnection(\"file=TestData.json\");\n        /// var conn2 = new JsonConnection(\"url=https://raw.githubusercontent.com/majorsilence/My-FyiReporting/refs/heads/master/RdlCreator.Tests/TestData.json\");\n        /// var conn3 = new JsonConnection(\"url=https://example.com/path/to/json/TestData.json;auth=Basic: <credentials>\");\n        /// var conn4 = new JsonConnection(\"url=https://example.com/path/to/json/TestData.json;auth=Bearer: <Token>\");\n        /// </code>\n        /// </example>\n        public JsonConnection(string conn) : this(conn, new HttpClient())\n        {\n            shouldDisposeClient = true;\n        }\n\n        public JsonConnection(string conn, HttpClient httpClient)\n        {\n            ConnectionString = conn;\n            Client = httpClient ?? throw new ArgumentNullException(nameof(httpClient), \"HttpClient cannot be null\");\n        }\n        \n        private string _tableName = null; // Add this field with default value\n\n        // Add property to access the table name\n        public string TableName\n        {\n            get { return _tableName; }\n        }\n\n        internal bool IsOpen\n        {\n            get { return bOpen; }\n        }\n\n        public string Url { get; private set; }\n        public string Auth { get; private set; }\n\n        #region IDbConnection Members\n\n        public void ChangeDatabase(string databaseName)\n        {\n            throw new NotImplementedException(\"ChangeDatabase method not supported.\");\n        }\n\n        public IDbTransaction BeginTransaction(System.Data.IsolationLevel il)\n        {\n            throw new NotImplementedException(\"BeginTransaction method not supported.\");\n        }\n\n        IDbTransaction System.Data.IDbConnection.BeginTransaction()\n        {\n            throw new NotImplementedException(\"BeginTransaction method not supported.\");\n        }\n\n        public System.Data.ConnectionState State\n        {\n            get\n            {\n                throw new NotImplementedException(\"State not implemented\");\n            }\n        }\n\n        public string ConnectionString\n        {\n            get\n            {\n                return _Connection;\n            }\n            set\n            {\n                _Connection = value;\n                SetUrlFromConnection();\n            }\n        }\n\n        public IDbCommand CreateCommand()\n        {\n            return new JsonCommand(this);\n        }\n\n        public void Open()\n        {\n            bOpen = true;\n        }\n\n        public void Close()\n        {\n            bOpen = false;\n        }\n\n        public string Database\n        {\n            get\n            {\n                return null;            // don't really have a database\n            }\n        }\n\n        public int ConnectionTimeout\n        {\n            get\n            {\n                return 0;\n            }\n        }\n\n        #endregion\n\n        private void SetUrlFromConnection()\n        {\n            string[] args = ConnectionString.Split(';');\n            string url = null;\n            foreach (string arg in args)\n            {\n                string[] param = arg.Trim().Split('=');\n                if (param == null || param.Length != 2)\n                    continue;\n                string key = param[0].Trim().ToLower();\n                string val = param[1];\n                switch (key)\n                {\n                    case \"url\":\n                    case \"file\":\n                        url = val;\n                        break;\n                    case \"memory:\":\n                        // Memory is not supported in JsonConnection\n                        throw new NotSupportedException(\"Memory parameter is not supported in JsonConnection.\");\n                    case \"auth\":\n                    case \"authorization\":\n                        Auth=val.Trim();\n                        break;\n                    case \"table\":\n                        _tableName = val;\n                        break;\n                    default:\n                        throw new ArgumentException(string.Format(\"{0} is an unknown parameter key\", param[0]));\n                }\n            }\n\n            // User must specify both the url and the RowsXPath\n            if (url == null)\n                throw new ArgumentException(\"CommandText requires a 'Url=' parameter.\");\n\n            Url = url.Trim();\n        }\n\n        #region IDisposable Members\n\n        public void Dispose()\n        {\n            if (shouldDisposeClient)\n            {\n                Client?.Dispose();\n                Client = null;\n            }\n            this.Close();\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "DataProviders/JsonDataReader.cs",
    "content": "using System;\nusing System.Xml;\nusing System.Data;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Data\n{\n    public class JsonDataReader : IDataReader\n    {\n        private readonly Dictionary<string, IDataReader> _readers;\n        private readonly IDataReader _rootReader;\n\n        JsonConnection _tconn;\n        JsonCommand _tcmd;\n        System.Data.CommandBehavior _behavior;\n        private readonly string[] _requestedColumns;\n\n        public JsonDataReader(System.Data.CommandBehavior behavior, JsonConnection conn, JsonCommand cmd)\n        {\n            _behavior = behavior;\n            _tcmd = cmd ?? throw new ArgumentNullException(nameof(cmd), \"Command cannot be null.\");\n            _tconn = conn ?? throw new ArgumentNullException(nameof(conn), \"Connection cannot be null.\");\n            _requestedColumns = cmd.Columns;\n        \n            string json = Task.Run(async () => await ReadAllJsonAsync()).GetAwaiter().GetResult();\n\n            var extractor = new JsonTableExtractor();\n            var allReaders = extractor.Extract(json);\n    \n            _readers = allReaders;\n    \n            // Use the table name from the command\n            string tableName = cmd.TableName ??  conn.TableName ?? \"root\";\n            if (!_readers.TryGetValue(tableName, out _rootReader))\n            {\n                throw new InvalidOperationException(\n                    $\"Table '{tableName}' not found in JSON data. Available tables: {string.Join(\", \", _readers.Keys)}\");\n            }\n    \n            // Apply column filtering if needed\n            if (_requestedColumns != null && _requestedColumns.Length > 0)\n            {\n                _rootReader = new FilteredDictionaryDataReader(\n                    (DictionaryDataReader)_rootReader, \n                    _requestedColumns);\n            }\n        }\n\n        /// <summary>\n        /// The main reader for the top-level JSON array.\n        /// </summary>\n        public IDataReader Root => _rootReader;\n\n        /// <summary>\n        /// Gets a child or nested reader (e.g., \"root_Dependents\").\n        /// </summary>\n        public IDataReader? GetTable(string name) =>\n            _readers.TryGetValue(name, out var reader) ? reader : null;\n\n        /// <summary>\n        /// List of available table names.\n        /// </summary>\n        public IEnumerable<string> TableNames => _readers.Keys;\n\n        // IDataReader - Delegate all to _rootReader\n        public bool Read() => _rootReader.Read();\n        public int FieldCount => _rootReader.FieldCount;\n        public string GetName(int i) => _rootReader.GetName(i);\n        public int GetOrdinal(string name) => _rootReader.GetOrdinal(name);\n        public object GetValue(int i) => _rootReader.GetValue(i);\n\n        public int GetValues(object[] values)\n        {\n            return _rootReader.GetValues(values);\n        }\n\n        public object this[int i] => _rootReader[i];\n        public object this[string name] => _rootReader[name];\n        public bool IsDBNull(int i) => _rootReader.IsDBNull(i);\n        public Type GetFieldType(int i) => _rootReader.GetFieldType(i);\n\n        public void Close() => _rootReader.Close();\n        public void Dispose() => _rootReader.Dispose();\n        public bool NextResult() => false;\n        public int Depth => 0;\n        public bool IsClosed => false;\n        public int RecordsAffected => -1;\n\n        public DataTable GetSchemaTable() => _rootReader.GetSchemaTable();\n        public bool GetBoolean(int i) => (bool)GetValue(i);\n        public byte GetByte(int i) => (byte)GetValue(i);\n\n        public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length) =>\n            _rootReader.GetBytes(i, fieldOffset, buffer, bufferoffset, length);\n\n        public char GetChar(int i) => (char)GetValue(i);\n\n        public long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length) =>\n            _rootReader.GetChars(i, fieldoffset, buffer, bufferoffset, length);\n\n        public IDataReader GetData(int i) => _rootReader.GetData(i);\n        public string GetDataTypeName(int i) => GetFieldType(i).Name;\n        public DateTime GetDateTime(int i) => (DateTime)GetValue(i);\n        public decimal GetDecimal(int i) => (decimal)GetValue(i);\n        public double GetDouble(int i) => (double)GetValue(i);\n        public float GetFloat(int i) => (float)GetValue(i);\n        public Guid GetGuid(int i) => (Guid)GetValue(i);\n        public short GetInt16(int i) => (short)GetValue(i);\n        public int GetInt32(int i) => (int)GetValue(i);\n        public long GetInt64(int i) => (long)GetValue(i);\n        public string GetString(int i) => GetValue(i)?.ToString();\n\n        async Task<StreamReader> GetStream()\n        {\n            string fname = _tcmd.Url;\n            Stream strm = null;\n\n            if (fname.StartsWith(\"http:\") || fname.StartsWith(\"https:\"))\n            {\n                _tconn.Client.AddMajorsilenceReportingUserAgent();\n                // set auth if found in connection string\n                // via a request object\n\n                var request = new HttpRequestMessage(HttpMethod.Get, fname);\n\n                if (!string.IsNullOrWhiteSpace(_tconn.Auth))\n                {\n                    var authParts = _tconn.Auth.Split(':');\n                    string authScheme = authParts[0];\n                    string authParameters = authParts[1];\n                    request.Headers.Authorization =\n                        new System.Net.Http.Headers.AuthenticationHeaderValue(authScheme, authParameters);\n                }\n\n                HttpResponseMessage response = await _tconn.Client.SendAsync(request);\n                response.EnsureSuccessStatusCode();\n                strm = await response.Content.ReadAsStreamAsync();\n            }\n            else if (fname.StartsWith(\"file:\"))\n            {\n                strm = new FileStream(fname.Substring(5), System.IO.FileMode.Open, FileAccess.Read);\n            }\n            else\n            {\n                strm = new FileStream(fname, System.IO.FileMode.Open, FileAccess.Read);\n            }\n\n            return new StreamReader(strm);\n        }\n\n        private async Task<string> ReadAllJsonAsync()\n        {\n            using var sr = await GetStream();\n            return await sr.ReadToEndAsync();\n        }\n    }\n}"
  },
  {
    "path": "DataProviders/JsonTableExtractor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq;\nusing System.Text.Json;\n\nnamespace Majorsilence.Reporting.Data\n{\n    public class JsonTableExtractor\n    {\n        private readonly Dictionary<string, List<Dictionary<string, object>>> _tables = new();\n\n        public Dictionary<string, IDataReader> Extract(string json)\n        {\n            using var doc = JsonDocument.Parse(json);\n            var rootElement = doc.RootElement;\n\n            _tables[\"root\"] = new();\n\n            if (rootElement.ValueKind == JsonValueKind.Array)\n            {\n                // Handle array root (existing logic)\n                foreach (var item in rootElement.EnumerateArray())\n                {\n                    var row = new Dictionary<string, object>();\n                    var guid = Guid.NewGuid().ToString();\n                    row[\"__guid\"] = guid;\n                    _tables[\"root\"].Add(row);\n\n                    Flatten(item, row, \"root\", guid);\n                }\n            }\n            else if (rootElement.ValueKind == JsonValueKind.Object)\n            {\n                // Handle object root (new logic)\n                var row = new Dictionary<string, object>();\n                var guid = Guid.NewGuid().ToString();\n                row[\"__guid\"] = guid;\n                _tables[\"root\"].Add(row);\n\n                Flatten(rootElement, row, \"root\", guid);\n            }\n            else\n            {\n                throw new InvalidOperationException(\"Root element must be an array or object.\");\n            }\n\n            return _tables.ToDictionary(kv => kv.Key, kv => (IDataReader)new DictionaryDataReader(kv.Value));\n        }\n\n        private void Flatten(JsonElement element, Dictionary<string, object> currentRow, string currentTable,\n            string parentGuid)\n        {\n            foreach (var prop in element.EnumerateObject())\n            {\n                var name = prop.Name;\n                var val = prop.Value;\n\n                switch (val.ValueKind)\n                {\n                    case JsonValueKind.Array:\n                        // Handle arrays as before - creates child tables\n                        var tableName = $\"{currentTable}_{name}\";\n                        if (!_tables.ContainsKey(tableName))\n                            _tables[tableName] = new();\n\n                        foreach (var item in val.EnumerateArray())\n                        {\n                            var childRow = new Dictionary<string, object> { [\"__parent_guid\"] = parentGuid };\n\n                            if (item.ValueKind == JsonValueKind.Object)\n                                Flatten(item, childRow, tableName, parentGuid);\n                            else\n                                childRow[name] = GetPrimitiveValue(item);\n\n                            _tables[tableName].Add(childRow);\n                        }\n\n                        break;\n\n                    case JsonValueKind.Object:\n                        // Two approaches for objects:\n                        // 1. Create a nested dictionary and store the entire object\n                        var nestedDict = new Dictionary<string, object>();\n                        foreach (var nested in val.EnumerateObject())\n                        {\n                            if (nested.Value.ValueKind == JsonValueKind.Object ||\n                                nested.Value.ValueKind == JsonValueKind.Array)\n                            {\n                                // For deeply nested objects, recursively process them\n                                var childGuid = Guid.NewGuid().ToString();\n                                var nestedTable = $\"{currentTable}_{name}_{nested.Name}\";\n\n                                if (nested.Value.ValueKind == JsonValueKind.Object)\n                                {\n                                    // Handle nested object\n                                    if (!_tables.ContainsKey(nestedTable))\n                                        _tables[nestedTable] = new();\n\n                                    var childRow = new Dictionary<string, object> { [\"__parent_guid\"] = parentGuid };\n                                    Flatten(nested.Value, childRow, nestedTable, childGuid);\n                                    _tables[nestedTable].Add(childRow);\n                                }\n\n                                nestedDict[nested.Name] = GetPrimitiveValue(nested.Value);\n                            }\n                            else\n                            {\n                                nestedDict[nested.Name] = GetPrimitiveValue(nested.Value);\n                            }\n                        }\n\n                        currentRow[name] = nestedDict;\n\n                        // 2. Also flatten the object properties with prefixed names (for backward compatibility)\n                        foreach (var nested in val.EnumerateObject())\n                        {\n                            if (nested.Value.ValueKind != JsonValueKind.Object &&\n                                nested.Value.ValueKind != JsonValueKind.Array)\n                            {\n                                currentRow[$\"{name}_{nested.Name}\"] = GetPrimitiveValue(nested.Value);\n                            }\n                        }\n\n                        break;\n\n                    default:\n                        currentRow[name] = GetPrimitiveValue(val);\n                        break;\n                }\n            }\n        }\n\n        private object? GetPrimitiveValue(JsonElement element)\n        {\n            return element.ValueKind switch\n            {\n                JsonValueKind.String => element.GetString(),\n                JsonValueKind.Number when element.TryGetInt64(out var l) => l,\n                JsonValueKind.Number => element.GetDouble(),\n                JsonValueKind.True => true,\n                JsonValueKind.False => false,\n                JsonValueKind.Null => null,\n                _ => element.ToString() // Fallback to raw JSON for unhandled types\n            };\n        }\n    }\n}"
  },
  {
    "path": "DataProviders/LexCharReader.cs",
    "content": "using System;\nusing System.IO;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// char reader simply reads entire file into a string and processes.\n\t/// </summary>\n\tinternal class LexCharReader\n\t{\n\t\tstring file = null;\n\t\tint    ptr  = 0;\n\n\t\tint col = 1;\t\t\t\t// column within line\n\t\tint savecol = 1;\t\t\t//   saved column before a line feed\n\t\tint line = 1;\t\t\t\t// line within file\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the CharReader class.\n\t\t/// </summary>\n\t\t/// <param name=\"textReader\">TextReader with DPL definition.</param>\n\t\tinternal LexCharReader(TextReader textReader)\n\t\t{\n\t\t\tfile = textReader.ReadToEnd();\n\t\t\ttextReader.Close();\n\t\t}\n\t\t\n\t\t/// <summary>\n\t\t/// Returns the next char from the stream.\n\t\t/// </summary>\n\t\t/// <returns>The next char.</returns>\n\t\tinternal char GetNext()\n\t\t{\n\t\t\tif (EndOfInput()) \n\t\t\t{\n\t\t\t\treturn '\\0';\n\t\t\t}\n\t\t\tchar ch = file[ptr++];\n\t\t\tcol++;\t\t\t\t\t// increment column counter\n\n\t\t\tif(ch == '\\n') \n\t\t\t{\n\t\t\t\tline++;\t\t\t\t// got new line\n\t\t\t\tsavecol = col;\n\t\t\t\tcol = 1;\t\t\t// restart column counter\n\t\t\t}\n\t\t\treturn ch;\n\t\t}\n\t\t\n\t\t/// <summary>\n\t\t/// Returns the next char from the stream without removing it.\n\t\t/// </summary>\n\t\t/// <returns>The top char.</returns>\n\t\tinternal char Peek()\n\t\t{\n\t\t\tif (EndOfInput()) // ok to peek at end of file\n\t\t\t\treturn '\\0';\n\n\t\t\treturn file[ptr];\n\t\t}\n\t\t\n\t\t/// <summary>\n\t\t/// Undoes the extracting of the last char.\n\t\t/// </summary>\n\t\tinternal void UnGet()\n\t\t{\n\t\t\t--ptr;\n\t\t\tif (ptr < 0) \n\t\t\t\tthrow new Exception(\"error : FileReader.UnGet : ungetted first char\");\n\t\t\t\n\t\t\tchar ch = file[ptr];\n\t\t\tif (ch == '\\n')\t\t\t\t// did we unget a new line?\n\t\t\t{\n\t\t\t\tline--;\t\t\t\t\t// back up a line\n\t\t\t\tcol = savecol;\t\t\t// go back to previous column too\n\t\t\t}\n\t}\n\t\t\n\t\t/// <summary>\n\t\t/// Returns True if end of input was reached; otherwise False.\n\t\t/// </summary>\n\t\t/// <returns>True if end of input was reached; otherwise False.</returns>\n\t\tinternal bool EndOfInput()\n\t\t{\n\t\t\treturn ptr >= file.Length;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the current column.\n\t\t/// </summary>\n\t\tinternal int Column \n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn col;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the current line.\n\t\t/// </summary>\n\t\tinternal int Line\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn line;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "DataProviders/LexToken.cs",
    "content": "\nusing System;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// Token class that used by Lexer.\n\t/// </summary>\n\tinternal class LexToken\n\t{\n\t\tinternal string Value;\n\t\tinternal LexTokenTypes Type;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the Token class.\n\t\t/// </summary>\n\t\tinternal LexToken(string value, LexTokenTypes type)\n\t\t{\n\t\t\tValue = value;\n\t\t\tType = type;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a string representation of the Token.\n\t\t/// </summary>\n\t\tpublic override string ToString()\n\t\t{\n\t\t\treturn \"<\" + Type + \"> \" + Value;\t\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "DataProviders/LexTokenList.cs",
    "content": "\n\nusing System;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// Represents a list of the tokens.\n\t/// </summary>\n\tinternal class LexTokenList : IEnumerable\n\t{\n\t\tprivate ArrayList tokens = null;\n\n\t\tinternal LexTokenList()\n\t\t{\n\t\t\ttokens = new ArrayList();\n\t\t}\n\n\t\tinternal void Add(LexToken token)\n\t\t{\n\t\t\ttokens.Add(token);\n\t\t}\n\n\t\tinternal void Push(LexToken token)\n\t\t{\n\t\t\ttokens.Insert(0, token);\n\t\t}\n\n\t\tinternal LexToken Peek()\n\t\t{\n\t\t\treturn (LexToken)tokens[0];\n\t\t}\n\n\t\tinternal LexToken Extract()\n\t\t{\n\t\t\tLexToken token = (LexToken)tokens[0];\n\t\t\ttokens.RemoveAt(0);\n\t\t\treturn token;\n\t\t}\n\n\t\tinternal int Count\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn tokens.Count;\n\t\t\t}\n\t\t}\n\n\t\tpublic IEnumerator GetEnumerator()\n\t\t{\n\t\t\treturn tokens.GetEnumerator();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "DataProviders/LexTokenTypes.cs",
    "content": "\nusing System;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// Types of tokens\n\t/// </summary>\n\tinternal enum LexTokenTypes\n\t{\n\t\tDATETIME,\n\t\tSTRING,\n\t\tEOF\n\t}\n}\n"
  },
  {
    "path": "DataProviders/Lexer.cs",
    "content": "\nusing System;\nusing System.IO;\nusing System.Collections;\nusing System.Text;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// A simple Lexer that is used by Parser.\n\t/// </summary>\n\tinternal class Lexer\n\t{\n\t\tprivate LexTokenList tokens;\n\t\tprivate LexCharReader reader;\n\t\tinternal char SeparatorChar=' ';\n\t\tinternal bool SeparateDatetime=true;\n\t\tinternal bool SeparateQuoted=true;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the Lexer class with the specified\n\t\t/// TextReader to lex.\n\t\t/// </summary>\n\t\t/// <param name=\"source\">A TextReader to lex.</param>\n\t\tinternal Lexer(TextReader source)\n\t\t{\n\t\t\t// token queue\n\t\t\ttokens = new LexTokenList();\n\n\t\t\t// read the file contents\n\t\t\treader = new LexCharReader(source);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Breaks the input stream onto the tokens list and returns it.\n\t\t/// </summary>\n\t\t/// <returns>The tokens list.</returns>\n\t\tinternal LexTokenList Lex()\n\t\t{\n\t\t\tLexToken token = GetNextToken();\n\t\t\twhile(true)\n\t\t\t{\n\t\t\t\tif(token != null)\n\t\t\t\t\ttokens.Add(token);\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\ttokens.Add(new LexToken(null, LexTokenTypes.EOF));\n\t\t\t\t\treturn tokens;\n\t\t\t\t}\n\n\t\t\t\ttoken = GetNextToken();\n\t\t\t}\n\t\t}\n\n\t\tprivate LexToken GetNextToken()\n\t\t{\n\t\t\twhile(!reader.EndOfInput())\n\t\t\t{\n\t\t\t\tchar ch = reader.GetNext();\n\n\t\t\t\t// skipping whitespaces\tat front of token\n\t\t\t\tif(Char.IsWhiteSpace(ch))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tswitch(ch)\n\t\t\t\t{\n\t\t\t\t\tcase '\"':\n\t\t\t\t\tcase '\\'':\n\t\t\t\t\t\tif (SeparateQuoted)\n\t\t\t\t\t\t\treturn ReadQuoted(ch);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '[':\n\t\t\t\t\t\tif (SeparateDatetime)\n\t\t\t\t\t\t\treturn ReadDateTime(']');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t} // end of switch\n\t\t\t\treturn ReadToChar(ch, SeparatorChar);\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\t// Quoted string like \" asdf \" or ' asdf '\n\t\tprivate LexToken ReadQuoted(char ch)\n\t\t{\n\t\t\tchar qChar = ch;\n\t\t\tStringBuilder quoted = new StringBuilder();\n\n\t\t\twhile(!reader.EndOfInput())\n\t\t\t{\n\t\t\t\tch = reader.GetNext();\n\t\t\t\tif (ch == '\\\\' && reader.Peek() == qChar)\t// look for escaped '\"'/\"'\"\n\t\t\t\t\tch = reader.GetNext();\t\t\t\t// got one skip escape char\n\t\t\t\telse if (ch == qChar)\n\t\t\t\t\treturn new LexToken(quoted.ToString(), LexTokenTypes.STRING);\n\n\t\t\t\tquoted.Append(ch);\n\t\t\t}\n\t\t\tthrow new Exception(\"Unterminated string!\");\n\t\t}\n\n\t\t// Read string to specified character\n\t\tprivate LexToken ReadToChar(char firstc, char ch)\n\t\t{\n\t\t\tchar qChar = ch;\n\t\t\tStringBuilder quoted = new StringBuilder();\n\t\t\tquoted.Append(firstc);\n\n\t\t\twhile(!reader.EndOfInput())\n\t\t\t{\n\t\t\t\tch = reader.GetNext();\n\t\t\t\tif (ch == qChar)\n\t\t\t\t\treturn new LexToken(quoted.ToString(), LexTokenTypes.STRING);\n\n\t\t\t\tquoted.Append(ch);\n\t\t\t}\n\t\t\treturn new LexToken(quoted.ToString(), LexTokenTypes.STRING);\n\t\t}\n\n\t\t// Read a datetime field == denoted by [...]\n\t\tprivate LexToken ReadDateTime(char ch)\n\t\t{\n\t\t\tchar qChar = ch;\n\t\t\tStringBuilder quoted = new StringBuilder();\n\n\t\t\twhile(!reader.EndOfInput())\n\t\t\t{\n\t\t\t\tch = reader.GetNext();\n\t\t\t\tif (ch == qChar)\n\t\t\t\t\tbreak;\n\n\t\t\t\tquoted.Append(ch);\n\t\t\t}\n\n\t\t\treturn new LexToken(quoted.ToString(), LexTokenTypes.DATETIME);\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "DataProviders/LogCommand.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// LogCommand allows specifying the command for the web log.\n\t/// </summary>\n\tpublic class LogCommand : IDbCommand\n\t{\n\t\tLogConnection _lc;\t\t\t// connection we're running under\n\t\tstring _cmd;\t\t\t\t// command to execute\n\t\t// parsed constituents of the command\n\t\tstring _Url;\t\t\t\t// url of the file \n\t\tstring _Domain;\t\t\t\t\n\t\tstring _IndexFile;\t\t\t// name of the index file; e.g. what's the default page when none (e.g. index.html)\n\t\tDataParameterCollection _Parameters = new DataParameterCollection();\n\n\t\tpublic LogCommand(LogConnection conn)\n\t\t{\n\t\t\t_lc = conn;\n\t\t}\n\n\t\tinternal string Url\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\t// Check to see if \"Url\" or \"@Url\" is a parameter\n\t\t\t\tIDbDataParameter dp= _Parameters[\"Url\"] as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp= _Parameters[\"@Url\"] as IDbDataParameter;\n\t\t\t\t// Then check to see if the Url value is a parameter?\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp = _Parameters[_Url] as IDbDataParameter;\n\t\t\t\tif (dp != null)\n\t\t\t\t\treturn dp.Value != null? dp.Value.ToString(): _Url;\t// don't pass null; pass existing value\n\t\t\t\treturn _Url;\t// the value must be a constant\n\t\t\t}\n\t\t\tset {_Url = value;}\n\t\t}\n\n\t\tinternal string Domain\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\t// Check to see if \"Domain\" or \"@Domain\" is a parameter\n\t\t\t\tIDbDataParameter dp= _Parameters[\"Domain\"] as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp= _Parameters[\"@Domain\"] as IDbDataParameter;\n\t\t\t\t// Then check to see if the Domain value is a parameter?\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp = _Parameters[_Domain] as IDbDataParameter;\n\t\t\t\treturn (dp == null || dp.Value == null)? _Domain: dp.Value.ToString();\n\t\t\t}\n\t\t\tset {_Domain = value;}\n\t\t}\n\n\t\tinternal string IndexFile\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\t// Check to see if \"IndexFile\" or \"@IndexFile\" is a parameter\n\t\t\t\tIDbDataParameter dp= _Parameters[\"IndexFile\"] as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp= _Parameters[\"@IndexFile\"] as IDbDataParameter;\n\t\t\t\t// Then check to see if the IndexFile value is a parameter?\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp = _Parameters[_IndexFile] as IDbDataParameter;\n\t\t\t\treturn (dp == null || dp.Value == null)? _IndexFile: dp.Value.ToString();\n\t\t\t}\n\t\t\tset {_IndexFile = value;}\n\t\t}\n\n\t\t#region IDbCommand Members\n\n\t\tpublic void Cancel()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"Cancel not implemented\");\n\t\t}\n\n\t\tpublic void Prepare()\n\t\t{\n\t\t\treturn;\t\t\t// Prepare is a noop\n\t\t}\n\n\t\tpublic System.Data.CommandType CommandType\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandType not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandType not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic IDataReader ExecuteReader(System.Data.CommandBehavior behavior)\n\t\t{\n\t\t\tif (!(behavior == CommandBehavior.SingleResult || \n\t\t\t\t  behavior == CommandBehavior.SchemaOnly))\n\t\t\t\tthrow new ArgumentException(\"ExecuteReader supports SingleResult and SchemaOnly only.\");\n\t\t\treturn new LogDataReader(behavior, _lc, this);\n\t\t}\n\n\t\tIDataReader System.Data.IDbCommand.ExecuteReader()\n\t\t{\n\t\t\treturn ExecuteReader(System.Data.CommandBehavior.SingleResult);\n\t\t}\n\n\t\tpublic object ExecuteScalar()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ExecuteScalar not implemented\");\n\t\t}\n\n\t\tpublic int ExecuteNonQuery()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ExecuteNonQuery not implemented\");\n\t\t}\n\n\t\tpublic int CommandTimeout\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandTimeout not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbDataParameter CreateParameter()\n\t\t{\n\t\t\treturn new LogDataParameter();\n\t\t}\n\n\t\tpublic IDbConnection Connection\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._lc;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Setting Connection not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic System.Data.UpdateRowSource UpdatedRowSource\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"UpdatedRowSource not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"UpdatedRowSource not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic string CommandText\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._cmd;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t// Parse the command string for keyword value pairs separated by ';'\n\t\t\t\tstring[] args = value.Split(';');\n\t\t\t\tstring url=null;\n\t\t\t\tstring domain=null;\n\t\t\t\tstring indexfile=null;\n\t\t\t\tforeach(string arg in args)\n\t\t\t\t{\n\t\t\t\t\tstring[] param = arg.Trim().Split('=');\n\t\t\t\t\tif (param == null || param.Length != 2)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tstring key = param[0].Trim().ToLower();\n\t\t\t\t\tstring val = param[1];\n\t\t\t\t\tswitch (key)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase \"url\":\n\t\t\t\t\t\tcase \"file\":\n\t\t\t\t\t\t\turl = val;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"domain\":\n\t\t\t\t\t\t\tdomain = val;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"indexfile\":\n\t\t\t\t\t\t\tindexfile = val;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new ArgumentException(string.Format(\"{0} is an unknown parameter key\", param[0]));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// User must specify both the url and the RowsXPath\n\t\t\t\tif (url == null)\n\t\t\t\t\tthrow new ArgumentException(\"CommandText requires a 'Url=' parameter.\");\n\t\t\t\t_cmd = value;\n\t\t\t\t_Url = url;\n\t\t\t\t_Domain = domain;\n\t\t\t\t_IndexFile = indexfile;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDataParameterCollection Parameters\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Parameters;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbTransaction Transaction\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Transaction not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Transaction not implemented\");\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\t// nothing to dispose of\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/LogConnection.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// LogConnection handles connections to web log.\n\t/// </summary>\n\tpublic class LogConnection : IDbConnection\n\t{\n\t\tstring _Connection;\t\t\t\t// the connection string; of format file=\n\t\tbool bOpen=false;\n\t\tpublic LogConnection(string conn)\n\t\t{\n\t\t\tConnectionString = conn;\n\t\t}\n\n\t\tinternal bool IsOpen\n\t\t{\n\t\t\tget {return bOpen;}\n\t\t}\n\n\t\t#region IDbConnection Members\n\n\t\tpublic void ChangeDatabase(string databaseName)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ChangeDatabase method not supported.\");\n\t\t}\n\n\t\tpublic IDbTransaction BeginTransaction(System.Data.IsolationLevel il)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"BeginTransaction method not supported.\");\n\t\t}\n\n\t\tIDbTransaction System.Data.IDbConnection.BeginTransaction()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"BeginTransaction method not supported.\");\n\t\t}\n\n\t\tpublic System.Data.ConnectionState State\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"State not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic string ConnectionString\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Connection;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tstring c = value;\n\t\t\t\t// Now parse the connection string;\n\t\t\t\tArray args = c.Split (',');\n\t\t\t\tstring directory=null;\n\t\t\t\tforeach(string arg in args)\n\t\t\t\t{\n\t\t\t\t\tif (arg.Trim().ToLower().StartsWith(\"directory=\"))\t// Only have one type of argument right now\n\t\t\t\t\t\tdirectory = arg.Trim().Split('=').GetValue(1) as string;\n\t\t\t\t}\n\t\t\t\t_Connection = value;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbCommand CreateCommand()\n\t\t{\n\t\t\treturn new LogCommand(this);\n\t\t}\n\n\t\tpublic void Open()\n\t\t{\n\t\t\tbOpen = true;\n\t\t}\n\n\t\tpublic void Close()\n\t\t{\n\t\t\tbOpen = false;\n\t\t}\n\n\t\tpublic string Database\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn null;\t\t\t// don't really have a database\n\t\t\t}\n\t\t}\n\n\t\tpublic int ConnectionTimeout\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tthis.Close();\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/LogDataParameter.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// XmlDataParameter\n\t/// </summary>\n\tpublic class LogDataParameter : BaseDataParameter\n\t{\n\t\tpublic LogDataParameter():base()\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "DataProviders/LogDataReader.cs",
    "content": "\nusing System;\nusing System.Data;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.IO;\nusing System.Net;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// LogDataReader handles reading log files\n\t/// </summary>\n\tpublic class LogDataReader : IDataReader\n\t{\n\t\tLogConnection _lconn;\n\t\tLogCommand _lcmd;\n\t\tSystem.Data.CommandBehavior _behavior;\n\t\tHashtable _CompressStrings;\t// we keep hashtable of strings so that we can reuse to save memory\n\t\t\t\t\t\t\t\t\t// most web sites won't have huge duplicates.\n\n\t\tMultipleStreamReader _sr;\t// StreamReader for _Url\n\t\tstring _Domain;\t\t\t\t// domain name from LogCommand\n\t\tstring _IndexFile;\t\t\t// index file name\n\t\tobject[] _Data;\t\t\t\t// data values of the columns\n\n\t\t// column information: is fixed for all instances\n\t\t// names of all the columns\n\t\tstatic string[] _Names= new string[] {\"host\",\"client_identifier\",\"user\",\"datetime\",\n\t\t\t\t\t\t\t\t\t\t\t\t \"request_cmd\",\"request_url\",\"request_type\", \"request_parameters\",\"status_code\",\n\t\t\t\t\t\t\t\t\t\t\t\t \"bytes\", \"referrer\", \"user_agent\", \"cookie\"};\n\t\t// types of all the columns\n\t\tstatic Type _dttype = DateTime.MinValue.GetType();\t\t// work variable for getting the type\n\t\tstatic Type _tstring = \"\".GetType();\n\t\tstatic Type _dtype = Double.MinValue.GetType();\n\t\tstatic Type[] _Types = new Type[] {_tstring,_tstring,_tstring,_dttype,\n\t\t\t\t\t\t\t\t\t\t\t  _tstring,_tstring,_tstring,_tstring,_tstring,\n\t\t\t\t\t\t\t\t\t\t\t  _dtype,_tstring,_tstring,_tstring};\n\t\tconst int DATETIME_FIELD=3;\t// the date time field\n\t\tconst int REQUEST_FIELD=4;\t// the request field\n\t\tconst int BYTES_FIELD=9;\t// the bytes field\n\n\n\t\tpublic LogDataReader(System.Data.CommandBehavior behavior, LogConnection conn, LogCommand cmd)\n\t\t{\n\t\t\t_lconn = conn;\n\t\t\t_lcmd = cmd;\n\t\t\t_behavior = behavior;\n\t\t\t_CompressStrings = new Hashtable(10000);\t\t// compress strings to save memory\n\t\t\t\n\t\t\tstring fname = _lcmd.Url;\n\t\t\t_Domain = _lcmd.Domain;\n\t\t\tif (_Domain == null)\n\t\t\t\t_Domain = \"\";\n\t\t\t_IndexFile = _lcmd.IndexFile;\n\t\t\tif (_IndexFile == null)\n\t\t\t\t_IndexFile = \"\";\n\n\t\t\tif (behavior != CommandBehavior.SchemaOnly)\n\t\t\t\t_sr = new MultipleStreamReader(_lcmd.Url);\t// get the main stream\n\n\t\t\t_Data = new object[_Names.Length];\t\t\t// allocate enough room for data\n\t\t}\n\n\t\t#region IDataReader Members\n\n\t\tpublic int RecordsAffected\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\tpublic bool IsClosed\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _sr == null;\n\t\t\t}\n\t\t}\n\n\t\tpublic bool NextResult()\t   \n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tpublic void Close()\n\t\t{\n\t\t\t_CompressStrings = null;\n\t\t\tif (_sr != null)\n\t\t\t{\n\t\t\t\t_sr.Close();\n\t\t\t\t_sr = null;\n\t\t\t}\n\t\t\t_Data = null;\n\t\t}\n\n\t\tpublic bool Read()\n\t\t{\n\t\t\tif (this._sr == null)\n\t\t\t\treturn false;\n\n\t\t\t// read a line of the log\n\t\t\tstring line = _sr.ReadLine();\n\t\t\tif (line == null)\n\t\t\t\treturn false;\n\n\t\t\t// obtain the data from each column and put the data array\n\t\t\tLexer l = new Lexer(new StringReader(line));\n\t\t\tLexTokenList ll = l.Lex();\n\t\t\tint ci=0;\t\t\t\t\t// start at first column\n\t\t\tif (ll.Count > 11)\n\t\t\t\tci = 0;\n\t\t\tforeach (LexToken lt in ll)\n\t\t\t{\n\t\t\t\tif (ci >= _Data.Length || lt.Type == LexTokenTypes.EOF)\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tif (ci == DATETIME_FIELD)\n\t\t\t\t{\n\t\t\t\t\t_Data[ci] =GetDateTime(lt.Value);\n\t\t\t\t}\n\t\t\t\telse if (ci == REQUEST_FIELD)\n\t\t\t\t{\t// break the request into multiple fields; command, url, http type\n\t\t\t\t\tstring[] reqs = lt.Value.Split(' ');\n\n\t\t\t\t\tstring req_cmd=null;\n\t\t\t\t\tstring req_url=null;\n\t\t\t\t\tstring req_type=null;\n\t\t\t\t\tstring req_parameters=null;\n\n\t\t\t\t\tif (reqs == null)\n\t\t\t\t\t{}\n\t\t\t\t\telse if (reqs.Length >= 3)\n\t\t\t\t\t{\n\t\t\t\t\t\treq_cmd = reqs[0];\n\t\t\t\t\t\treq_url = reqs[1];\n\t\t\t\t\t\treq_type = reqs[2];\n\t\t\t\t\t}\n\t\t\t\t\telse if (reqs.Length == 2)\n\t\t\t\t\t{\n\t\t\t\t\t\treq_cmd = reqs[0];\n\t\t\t\t\t\treq_url = reqs[1];\n\t\t\t\t\t}\n\t\t\t\t\telse if (reqs.Length == 1)\n\t\t\t\t\t\treq_url = reqs[0];\n\n\t\t\t\t\tif (req_url != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tstring [] up = req_url.Split('?');\n\t\t\t\t\t\tif (up.Length > 1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treq_url = up[0];\n\t\t\t\t\t\t\treq_parameters = up[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t_Data[ci++] = req_type;\n\t\t\t\t\tif (req_url != null && req_url.Length > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (req_url[0] == '/')\n\t\t\t\t\t\t\treq_url = _Domain + req_url;\n\t\t\t\t\t\tif (req_url[req_url.Length-1] == '/')\n\t\t\t\t\t\t\treq_url += _IndexFile;\n\t\t\t\t\t}\n\t\t\t\t\t_Data[ci++] = CompressString(req_url);\n\t\t\t\t\t_Data[ci++] = req_type == \"HTTP/1.1\"? \"HTTP/1.1\": CompressString(req_type);\n\t\t\t\t\t_Data[ci++] = req_parameters;\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\telse if (ci == BYTES_FIELD)\n\t\t\t\t{\n\t\t\t\t\tdouble v=0;\n\t\t\t\t\tif (lt.Value.Length == 0 || lt.Value == \"-\")\n\t\t\t\t\t{}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\ttry\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tv = Convert.ToDouble(lt.Value);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch\n\t\t\t\t\t\t{\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t_Data[ci] = v;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\t_Data[ci] = CompressString(lt.Value);\n\t\t\t\tci++;\t\t\t\t\t// go to next column\n\t\t\t}\n\n\t\t\twhile (ci < _Data.Length)\n\t\t\t\t_Data[ci++] = null;\n\n\t\t\treturn true;\n\t\t}\n\n\t\tstring CompressString(string v)\n\t\t{\n\t\t\tif (v == null)\n\t\t\t\treturn null;\n\t\t\tstring sv = _CompressStrings[v] as string;\n\t\t\tif (sv != null)\n\t\t\t\treturn sv;\n\t\t\t_CompressStrings.Add(v, v);\n\t\t\treturn v;\n\t\t}\n\n\t\tobject GetDateTime(string v)\n\t\t{\n\t\t\tobject result;\n\t\t\tif (v.Length != 26)\n\t\t\t\treturn null;\n\t\t\ttry \n\t\t\t{\n\t\t\t\tstring dd = v.Substring(0,2);\t// the day of the month\n\t\t\t\tstring MMM = v.Substring(3,3);\t// the month\n\t\t\t\tint month=1;\n\t\t\t\tswitch (MMM.ToLower())\n\t\t\t\t{\n\t\t\t\t\tcase \"jan\": month=1; break;\n\t\t\t\t\tcase \"feb\": month=2; break;\n\t\t\t\t\tcase \"mar\": month=3; break;\n\t\t\t\t\tcase \"apr\": month=4; break;\n\t\t\t\t\tcase \"may\": month=5; break;\n\t\t\t\t\tcase \"jun\": month=6; break;\n\t\t\t\t\tcase \"jul\": month=7; break;\n\t\t\t\t\tcase \"aug\": month=8; break;\n\t\t\t\t\tcase \"sep\": month=9; break;\n\t\t\t\t\tcase \"oct\": month=10; break;\n\t\t\t\t\tcase \"nov\": month=11; break;\n\t\t\t\t\tcase \"dec\": month=12; break;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tstring yyyy = v.Substring(7,4);\t// the year\n\t\t\t\tstring hh = v.Substring(12,2);\t// the hour\n\t\t\t\tstring mm = v.Substring(15,2);\t// the minute\n\t\t\t\tstring ss = v.Substring(18,2);\t// the seconds\n\t\t\t\tbool bPlus = v[21] == '+';\n\t\t\t\tint thh = Convert.ToInt32(v.Substring(22,2));\t// the time zone (hh)\n\t\t\t\tint tmm = Convert.ToInt32(v.Substring(24,2));\t// the time zone (mm)\n\t\t\t\tint tzdiff = thh * 60 + tmm;\t// time zone difference in minutes\n\t\t\t\tif (!bPlus)\n\t\t\t\t\ttzdiff = - tzdiff;\n\t\t\t\tDateTime dt = \n\t\t\t\t\tnew DateTime(Convert.ToInt32(yyyy),\n\t\t\t\t\tmonth,\n\t\t\t\t\tConvert.ToInt32(dd),\n\t\t\t\t\tConvert.ToInt32(hh),\n\t\t\t\t\tConvert.ToInt32(mm),\n\t\t\t\t\tConvert.ToInt32(ss), 0);\n\t\t\t\tresult = dt.AddMinutes(tzdiff);\t\n\t\t\t}\n\t\t\tcatch\n\t\t\t{ \n\t\t\t\tresult = null;\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\n\t\tpublic int Depth\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\tpublic DataTable GetSchemaTable()\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tthis.Close();\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDataRecord Members\n\n\t\tpublic int GetInt32(int i)\n\t\t{\n\t\t\treturn Convert.ToInt32(_Data[i]);\n\t\t}\n\n\t\tpublic object this[string name]\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tint ci = this.GetOrdinal(name);\n\t\t\t\treturn _Data[ci];\n\t\t\t}\n\t\t}\n\n\t\tobject System.Data.IDataRecord.this[int i]\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Data[i];\n\t\t\t}\n\t\t}\n\n\t\tpublic object GetValue(int i)\n\t\t{\n\t\t\treturn _Data[i];\n\t\t}\n\n\t\tpublic bool IsDBNull(int i)\n\t\t{\n\t\t\treturn _Data[i] == null;\n\t\t}\n\n\t\tpublic long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetBytes not implemented.\");\n\t\t}\n\n\t\tpublic byte GetByte(int i)\n\t\t{\n\t\t\treturn Convert.ToByte(_Data[i]);\n\t\t}\n\n\t\tpublic Type GetFieldType(int i)\n\t\t{\n\t\t\treturn _Types[i];\n\t\t}\n\n\t\tpublic decimal GetDecimal(int i)\n\t\t{\n\t\t\treturn Convert.ToDecimal(_Data[i]);\n\t\t}\n\n\t\tpublic int GetValues(object[] values)\n\t\t{\n\t\t\tint i;\n\t\t\tfor (i=0; i < values.Length; i++)\n\t\t\t{\n\t\t\t\tvalues[i] = i >= _Data.Length? System.DBNull.Value: _Data[i];\n\t\t\t}\n\n\t\t\treturn Math.Min(values.Length, _Data.Length);\n\t\t}\n\n\t\tpublic string GetName(int i)\n\t\t{\n\t\t\treturn _Names[i] as string;\n\t\t}\n\n\t\tpublic int FieldCount\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Data.Length;\n\t\t\t}\n\t\t}\n\n\t\tpublic long GetInt64(int i)\n\t\t{\n\t\t\treturn Convert.ToInt64(_Data[i]);\n\t\t}\n\n\t\tpublic double GetDouble(int i)\n\t\t{\n\t\t\treturn Convert.ToDouble(_Data[i]);\n\t\t}\n\n\t\tpublic bool GetBoolean(int i)\n\t\t{\n\t\t\treturn Convert.ToBoolean(_Data[i]);\n\t\t}\n\n\t\tpublic Guid GetGuid(int i)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetGuid not implemented.\");\n\t\t}\n\n\t\tpublic DateTime GetDateTime(int i)\n\t\t{\n\t\t\treturn Convert.ToDateTime(_Data[i]);\n\t\t}\n\n\t\tpublic int GetOrdinal(string name)\n\t\t{\n\t\t\tint ci=0;\n\t\t\t// do case sensitive lookup\n\t\t\tforeach (string cname in _Names)\n\t\t\t{\n\t\t\t\tif (cname == name)\n\t\t\t\t\treturn ci;\n\t\t\t\tci++;\n\t\t\t}\n\n\t\t\t// do case insensitive lookup\n\t\t\tci=0;\n\t\t\tname = name.ToLower();\n\t\t\tforeach (string cname in _Names)\n\t\t\t{\n\t\t\t\tif (cname.ToLower() == name)\n\t\t\t\t\treturn ci;\n\t\t\t\tci++;\n\t\t\t}\n\n\t\t\tthrow new ArgumentException(string.Format(\"Column '{0}' not known.\", name));\n\t\t}\n\n\t\tpublic string GetDataTypeName(int i)\n\t\t{\n\t\t\tType t = _Types[i] as Type;\n\t\t\treturn t.ToString();\n\t\t}\n\n\t\tpublic float GetFloat(int i)\n\t\t{\n\t\t\treturn Convert.ToSingle(_Data[i]);\n\t\t}\n\n\t\tpublic IDataReader GetData(int i)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetData not implemented.\");\n\t\t}\n\n\t\tpublic long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetChars not implemented.\");\n\t\t}\n\n\t\tpublic string GetString(int i)\n\t\t{\n\t\t\treturn Convert.ToString(_Data[i]);\n\t\t}\n\n\t\tpublic char GetChar(int i)\n\t\t{\n\t\t\treturn Convert.ToChar(_Data[i]);\n\t\t}\n\n\t\tpublic short GetInt16(int i)\n\t\t{\n\t\t\treturn Convert.ToInt16(_Data[i]);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/Majorsilence.Reporting.DataProviders.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\t<PropertyGroup>\n\t\t<ProjectType>Local</ProjectType>\n\t\t<DelaySign>false</DelaySign>\n\t\t<OutputType>Library</OutputType>\n\t\t<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>\n\t\t<GeneratePackageOnBuild>True</GeneratePackageOnBuild>\n\t\t<AssemblyTitle>RDL Data Providers</AssemblyTitle>\n\t\t<DelaySign>false</DelaySign>\n\t\t<PackageId>Majorsilence.Reporting.DataProviders</PackageId>\n\t\t<Configurations>Debug;Release;Debug-DrawingCompat;Release-DrawingCompat</Configurations>\n\t\t<TargetFrameworks>net48;net8.0;net10.0</TargetFrameworks>\n        <TargetFrameworks Condition=\"'$(OS)' == 'Unix'\">net8.0;net10.0</TargetFrameworks>\n\t\t<WarningsAsErrors>4014</WarningsAsErrors>\n\t</PropertyGroup>\n\t<PropertyGroup Condition=\"'$(Configuration)' == 'Debug-DrawingCompat' Or '$(Configuration)' == 'Release-DrawingCompat'\">\n\t\t<PackageId>Majorsilence.Reporting.DataProviders.SkiaSharp</PackageId>\n\t</PropertyGroup>\n\t<ItemGroup>\n\t\t<Reference Update=\"System\">\n\t\t\t<Name>System</Name>\n\t\t</Reference>\n\t\t<Reference Update=\"System.Data\">\n\t\t\t<Name>System.Data</Name>\n\t\t</Reference>\n\t\t<Reference Update=\"System.Xml\">\n\t\t\t<Name>System.XML</Name>\n\t\t</Reference>\n\t</ItemGroup>\n    <ItemGroup Condition=\"'$(TargetFramework)' == 'net48'\">\n        <Reference Include=\"System.Net.Http\" />\n        <Reference Include=\"System.Web.Services\" />\n    </ItemGroup>\n    <ItemGroup Condition=\"'$(TargetFramework)' == 'net48'\">\n        <PackageReference Include=\"System.Text.Json\" />\n    </ItemGroup>\n</Project>\n"
  },
  {
    "path": "DataProviders/MultipleStreamReader.cs",
    "content": "\nusing System;\nusing System.IO;\nusing System.Collections;\nusing System.Net;\nusing System.Text;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Data\n{\n    /// <summary>\n    /// MultipleStreamReader provides a logical single stream over multiple streams.  Only support ReadLine.\n    /// </summary>\n    public class MultipleStreamReader : TextReader\n    {\n        Queue _files;\n        StreamReader _sr = null;\n        static readonly HttpClient _httpClient = new HttpClient();\n\n        /// <summary>\n        /// Constructor taking a path list string.  Files are separated with blanks.  \n        /// If a file contains a blank then it should be enclosed with quotes (\").\n        /// </summary>\n        /// <param name=\"pathlist\"></param>\n        public MultipleStreamReader(string pathlist)\n        {\n            GetFileList(pathlist);          // split the string into multiple files\n\n            // HACK: async\n            Task.Run(async()=> await GetStream()).GetAwaiter().GetResult();             // get the first file\n        }\n\n        void GetFileList(string pathlist)\n        {\n            _files = new Queue();\n\n            StringBuilder sb = null;\n\n            int STARTFILE = 0;\n            int INFILE = 1;\n            int state = STARTFILE;\n            bool bQuote = false;\n\n            foreach (char c in pathlist)\n            {\n                if (state == STARTFILE)\n                {\n                    sb = new StringBuilder();\n                    bQuote = (c == '\"');\n\n                    if (!bQuote)\n                        sb.Append(c);\n                    state = INFILE;\n                }\n                else if (state == INFILE)\n                {\n                    if ((bQuote && c == '\"') || // quoted file and on last quote\n(!bQuote && c == ' '))      // not quoted file and blank\n                    {\n                        AddFileToQueue(sb.ToString(), bQuote);\n\n                        state = STARTFILE;\n                    }\n                    else\n                        sb.Append(c);\n                }\n            }\n\n            if (sb != null && sb.Length > 0)\n                AddFileToQueue(sb.ToString(), bQuote);\n\n            return;\n        }\n\n        void AddFileToQueue(string f, bool asis)\n        {\n            if (!asis)\n                f = f.Trim();           // get rid of extraneous blanks\n\n            if (f.Length <= 0)\n                return;\n\n            if (Path.GetFileNameWithoutExtension(f) == \"*\")\n            {\n                int i = f.LastIndexOf('*');\n                string path = f.Substring(0, i);\n                string[] fl = Directory.GetFiles(path, \"*\" + Path.GetExtension(f));\n                foreach (string file in fl)\n                    _files.Enqueue(file);\n            }\n            else\n                _files.Enqueue(f);\n        }\n\n        async Task<StreamReader> GetStream()\n        {\n            if (_sr != null)        // close out the previous file before getting another\n            {\n                _sr.Close();\n                _sr = null;\n            }\n\n            if (_files == null || _files.Count == 0)\n                return null;\n\n            string fname = _files.Dequeue() as string;\n            Stream strm = null;\n\n            if (fname.StartsWith(\"http:\") ||\n                fname.StartsWith(\"file:\") ||\n                fname.StartsWith(\"https:\"))\n            {\n                _httpClient.AddMajorsilenceReportingUserAgent();\n                HttpResponseMessage response = await _httpClient.GetAsync(fname);\n                response.EnsureSuccessStatusCode();\n                strm = await response.Content.ReadAsStreamAsync();\n            }\n            else\n                strm = new FileStream(fname, System.IO.FileMode.Open, FileAccess.Read);\n\n            _sr = new StreamReader(strm);\n\n            return _sr;\n        }\n\n        public override void Close()\n        {\n            if (_sr != null)\n            {\n                _sr.Close();\n                _sr = null;\n            }\n\n            _files.Clear();\n        }\n\n        public override string ReadLine()\n        {\n            if (_sr == null)\n                return null;\n\n            // HACK: async\n            string rs = Task.Run(async () => await _sr.ReadLineAsync()).GetAwaiter().GetResult();\n\n            if (rs == null)\n            {\n                // HACK: async\n                Task.Run(async () => { \n                    await GetStream();\n                    rs = await ReadLineAsync();\n                }).GetAwaiter().GetResult();               \n            }\n\n            return rs;\n        }\n\n    }\n}\n"
  },
  {
    "path": "DataProviders/TxtCommand.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// TxtCommand allows specifying the command for a text file.\n\t/// </summary>\n\tpublic class TxtCommand : IDbCommand\n\t{\n\t\tTxtConnection _tc;\t\t\t// connection we're running under\n\t\tstring _cmd;\t\t\t\t// command to execute\n\t\t// parsed constituents of the command\n\t\tstring _Url;\t\t\t\t// url of the file \n\t\tstring _Header;\t\t\t\t// does file contain a header row\n\t\tchar _Separator;\t\t\t// separator character\n\t\tstring[] _Columns;\t\t\t// hold the column list\n\t\tDataParameterCollection _Parameters = new DataParameterCollection();\n\n\t\tpublic TxtCommand(TxtConnection conn)\n\t\t{\n\t\t\t_tc = conn;  \n\t\t}\n\n\t\tinternal string[] Columns\n\t\t{\n\t\t\tget {return _Columns;}\n\t\t}\n\n\t\tinternal string Url\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\t// Check to see if \"Url\" or \"@Url\" is a parameter\n\t\t\t\tIDbDataParameter dp= _Parameters[\"Url\"] as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp= _Parameters[\"@Url\"] as IDbDataParameter;\n\t\t\t\t// Then check to see if the Url value is a parameter?\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp = _Parameters[_Url] as IDbDataParameter;\n\t\t\t\tif (dp != null)\n\t\t\t\t\treturn dp.Value != null? dp.Value.ToString(): _Url;\t// don't pass null; pass existing value\n\t\t\t\treturn _Url;\t// the value must be a constant\n\t\t\t}\n\t\t\tset {_Url = value;}\n\t\t}\n\n\t\tinternal char Separator\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\t// Check to see if \"Separator\" or \"@Separator\" is a parameter\n\t\t\t\tIDbDataParameter dp= _Parameters[\"Separator\"] as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp= _Parameters[\"@Separator\"] as IDbDataParameter;\n\t\t\t\t// Then check to see if the Separator value is a parameter?\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp = _Parameters[_Separator.ToString()] as IDbDataParameter;\n\t\t\t\tif (dp != null && dp.Value != null)\n\t\t\t\t{\n\t\t\t\t\tstring v = dp.Value.ToString();\n\t\t\t\t\tif (v.Length >= 1)\n\t\t\t\t\t\treturn v[0];\n\t\t\t\t}\n\n\t\t\t\tif (_Separator != '\\0')\t\t// Initialized?\n\t\t\t\t\treturn _Separator;\t\t//    yes, return it\n\t\t\t\t// otherwise we default depending on the Url extension (if any)\n\t\t\t\tstring url = this.Url.ToLower();\n\t\t\t\tif (url.IndexOf(\".txt\") >= 0)\n\t\t\t\t\treturn '\\t';\n\t\t\t\tif (url.IndexOf(\".csv\") >= 0)\n\t\t\t\t\treturn ',';\n\t\t\t\treturn _Separator;\t\t\t// done the best we can; but have no value\n\t\t\t}\n\t\t\tset {_Separator = value;}\n\t\t}\n\n\t\tinternal bool Header\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\t// Check to see if \"Header\" or \"@Header\" is a parameter\n\t\t\t\tIDbDataParameter dp= _Parameters[\"Header\"] as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp= _Parameters[\"@Header\"] as IDbDataParameter;\n\t\t\t\t// Then check to see if the Url value is a parameter?\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp = _Parameters[_Header] as IDbDataParameter;\n\t\t\t\tif (dp != null)\n\t\t\t\t{\n\t\t\t\t\tstring tf = dp.Value as string;\n\t\t\t\t\tif (tf == null)\n\t\t\t\t\t\treturn false;\n\t\t\t\t\ttf = tf.ToLower();\n\t\t\t\t\treturn (tf == \"true\" || tf == \"yes\");\n\t\t\t\t}\n\t\t\t\treturn _Header==\"yes\"? true: false;\t// the value must be a constant\n\t\t\t}\n\t\t\tset {_Header = value? \"yes\": \"no\";}\n\t\t}\n\n\t\t#region IDbCommand Members\n\n\t\tpublic void Cancel()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"Cancel not implemented\");\n\t\t}\n\n\t\tpublic void Prepare()\n\t\t{\n\t\t\treturn;\t\t\t// Prepare is a noop\n\t\t}\n\n\t\tpublic System.Data.CommandType CommandType\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandType not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandType not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic IDataReader ExecuteReader(System.Data.CommandBehavior behavior)\n\t\t{\n\t\t\tif (!(behavior == CommandBehavior.SingleResult || \n\t\t\t\t  behavior == CommandBehavior.SchemaOnly))\n\t\t\t\tthrow new ArgumentException(\"ExecuteReader supports SingleResult and SchemaOnly only.\");\n\t\t\treturn new TxtDataReader(behavior, _tc, this);\n\t\t}\n\n\t\tIDataReader System.Data.IDbCommand.ExecuteReader()\n\t\t{\n\t\t\treturn ExecuteReader(System.Data.CommandBehavior.SingleResult);\n\t\t}\n\n\t\tpublic object ExecuteScalar()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ExecuteScalar not implemented\");\n\t\t}\n\n\t\tpublic int ExecuteNonQuery()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ExecuteNonQuery not implemented\");\n\t\t}\n\n\t\tpublic int CommandTimeout\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandTimeout not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbDataParameter CreateParameter()\n\t\t{\n\t\t\treturn new TxtDataParameter();\n\t\t}\n\n\t\tpublic IDbConnection Connection\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._tc;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Setting Connection not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic System.Data.UpdateRowSource UpdatedRowSource\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"UpdatedRowSource not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"UpdatedRowSource not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic string CommandText\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._cmd;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t// Parse the command string for keyword value pairs separated by ';'\n\t\t\t\tstring[] args = value.Split(';');\n\t\t\t\tstring url=null;\n\t\t\t\tstring[] columns = null;\n\t\t\t\tstring header=null;\n\t\t\t\tchar separator='\\0';\n\t\t\t\tforeach(string arg in args)\n\t\t\t\t{\n\t\t\t\t\tstring[] param = arg.Trim().Split('=');\n\t\t\t\t\tif (param == null || param.Length != 2)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tstring key = param[0].Trim().ToLower();\n\t\t\t\t\tstring val = param[1];\n\t\t\t\t\tswitch (key)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase \"url\":\n\t\t\t\t\t\tcase \"file\":\n\t\t\t\t\t\t\turl = val;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"columns\":\n\t\t\t\t\t\t\t// column list is separated by ','\n\t\t\t\t\t\t\tcolumns = val.Trim().Split(',');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"header\":\n\t\t\t\t\t\t\theader = val.Trim().ToLower();\n\t\t\t\t\t\t\tif (header == \"yes\" || header == \"no\")\n\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t\telse if (header == \"true\")\n\t\t\t\t\t\t\t\theader = \"yes\";\n\t\t\t\t\t\t\telse if (header == \"false\")\n\t\t\t\t\t\t\t\theader = \"no\";\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tthrow new ArgumentException(string.Format(\"Invalid Header {0}; should be 'yes' 'no'.\", val));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"separator\":\n\t\t\t\t\t\t\tif (val.Length != 1)\n\t\t\t\t\t\t\t\tthrow new ArgumentException(string.Format(\"Invalid Separator character '{0}'; should be only a single character.\", val));\n\t\t\t\t\t\t\tseparator = val[0];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new ArgumentException(string.Format(\"{0} is an unknown parameter key\", param[0]));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// User must specify both the url and the RowsXPath\n\t\t\t\tif (url == null)\n\t\t\t\t\tthrow new ArgumentException(\"CommandText requires a 'Url=' parameter.\");\n\t\t\t\t_cmd = value;\n\t\t\t\t_Url = url;\n\t\t\t\t_Columns = columns;\n\t\t\t\t_Separator = separator;\n\t\t\t\t_Header = header;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDataParameterCollection Parameters\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Parameters;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbTransaction Transaction\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Transaction not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Transaction not implemented\");\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\t// nothing to dispose of\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/TxtConnection.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// LogConnection handles connections to web log.\n\t/// </summary>\n\tpublic class TxtConnection : IDbConnection\n\t{\n\t\tstring _Connection;\t\t\t\t// the connection string; of format file=\n\t\tbool bOpen=false;\n\t\tpublic TxtConnection(string conn)\n\t\t{\n\t\t\tConnectionString = conn;\n\t\t}\n\n\t\tinternal bool IsOpen\n\t\t{\n\t\t\tget {return bOpen;}\n\t\t}\n\n\t\t#region IDbConnection Members\n\n\t\tpublic void ChangeDatabase(string databaseName)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ChangeDatabase method not supported.\");\n\t\t}\n\n\t\tpublic IDbTransaction BeginTransaction(System.Data.IsolationLevel il)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"BeginTransaction method not supported.\");\n\t\t}\n\n\t\tIDbTransaction System.Data.IDbConnection.BeginTransaction()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"BeginTransaction method not supported.\");\n\t\t}\n\n\t\tpublic System.Data.ConnectionState State\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"State not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic string ConnectionString\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Connection;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tstring c = value;\n\t\t\t\t// Now parse the connection string;\n\t\t\t\tArray args = c.Split (',');\n\t\t\t\tstring directory=null;\n\t\t\t\tforeach(string arg in args)\n\t\t\t\t{\n\t\t\t\t\tif (arg.Trim().ToLower().StartsWith(\"directory=\"))\t// Only have one type of argument right now\n\t\t\t\t\t\tdirectory = arg.Trim().Split('=').GetValue(1) as string;\n\t\t\t\t}\n\t\t\t\t_Connection = value;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbCommand CreateCommand()\n\t\t{\n\t\t\treturn new TxtCommand(this);\n\t\t}\n\n\t\tpublic void Open()\n\t\t{\n\t\t\tbOpen = true;\n\t\t}\n\n\t\tpublic void Close()\n\t\t{\n\t\t\tbOpen = false;\n\t\t}\n\n\t\tpublic string Database\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn null;\t\t\t// don't really have a database\n\t\t\t}\n\t\t}\n\n\t\tpublic int ConnectionTimeout\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tthis.Close();\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/TxtDataParameter.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// TxtDataParameter\n\t/// </summary>\n\tpublic class TxtDataParameter : BaseDataParameter\n\t{\n\t\tpublic TxtDataParameter():base()\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "DataProviders/TxtDataReader.cs",
    "content": "\nusing System;\nusing System.Data;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.IO;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Data\n{\n    /// <summary>\n    /// TxtDataReader handles reading txt files\n    /// </summary>\n    public class TxtDataReader : IDataReader\n    {\n        TxtConnection _tconn;\n        TxtCommand _tcmd;\n        System.Data.CommandBehavior _behavior;\n\n        StreamReader _sr;           // StreamReader for _Url\n                                    // column information\n        object[] _Data;             // data values of the columns\n        bool bFirstRow;             // indicates that _Data has been filled with data of the 1st row\n        string[] _Names;            // names of the columns\n        Type[] _Types;              // types of the columns\n\n        public TxtDataReader(System.Data.CommandBehavior behavior, TxtConnection conn, TxtCommand cmd)\n        {\n            bFirstRow = false;\n            _tconn = conn;\n            _tcmd = cmd;\n            _behavior = behavior;\n\n            string fname = _tcmd.Url;\n            bool header = _tcmd.Header;\n            char separator = _tcmd.Separator;\n\n            // HACK: async\n            Task.Run(async () => _sr = await GetStream()).GetAwaiter().GetResult();             // get the main stream\n\n            Type tstring = \"\".GetType();\n\n            LexTokenList ll = GetLine();\n            int colcount = ll == null ? 0 : ll.Count - 1;       // don't count the end of line\n            _Names = _tcmd.Columns;\n            if (colcount == 0)\n            {\n                _sr.Close();\n                _sr = null;\n                if (_Names == null)\n                    return;\n                _Types = new Type[_Names.Length];\n                for (int ci = 0; ci < _Types.Length; ci++)\n                    _Types[ci] = tstring;\n                return;\n            }\n\n            if (_Names != null && _Names.Length != colcount)\n                throw new Exception(string.Format(\"{0} column names specified but {1} columns found.\", _Names.Length, colcount));\n\n            if (header)\n            {\n                if (_Names == null)\n                {   // uses the first row as the names of the columns\n                    _Names = new string[colcount];\n                    int ci = 0;\n                    foreach (LexToken lt in ll)\n                    {\n                        if (lt.Type == LexTokenTypes.EOF)\n                            break;\n                        _Names[ci++] = lt.Value;\n                    }\n                }\n                ll = GetLine();\n            }\n            else if (_Names == null)\n            {   // just name the columns 'column1', 'column2', ...\n                _Names = new string[colcount];\n                for (int ci = 0; ci < _Names.Length; ci++)\n                    _Names[ci] = \"column\" + (ci + 1).ToString();\n            }\n\n            _Data = new object[_Names.Length];          // allocate enough room for data\n            _Types = new Type[_Names.Length];\n            if (ll != null)         // we have a datarow\n            {\n                bFirstRow = true;\n                // loop thru determining the types of all data\n                int ci = 0;\n                foreach (LexToken lt in ll)\n                {\n                    if (ci >= _Types.Length || lt.Type == LexTokenTypes.EOF)\n                        break;\n                    _Types[ci++] = GetTypeOfString(lt.Value);\n                }\n                FillData(ll);\n            }\n            else\n            {   // no first row! assume all the column types are string\n                for (int ci = 0; ci < _Types.Length; ci++)\n                    _Types[ci] = tstring;\n            }\n\n            if (behavior == CommandBehavior.SchemaOnly)\n            {\n                _sr.Close();\n                _sr = null;\n            }\n\n        }\n\n        void FillData(LexTokenList ll)\n        {\n            Type stype = \"\".GetType();\n            int ci = 0;\n            foreach (LexToken lt in ll)\n            {\n                if (ci >= _Data.Length || lt.Type == LexTokenTypes.EOF)\n                    break;\n                // Optimize for no conversion\n                if (_Types[ci] == stype || lt.Value == null)\n                {\n                    _Data[ci++] = lt.Value;\n                    continue;\n                }\n                // We need to do conversion\n                try\n                {   // in case of conversion error \n                    _Data[ci] = Convert.ChangeType(lt.Value, _Types[ci]);\n                }\n                catch\n                {\n                    _Data[ci] = null;\n                }\n                ci++;\n            }\n\n            while (ci < _Data.Length)\n                _Data[ci++] = null;\n        }\n\n        LexTokenList GetLine()\n        {\n            if (_sr == null)\n                return null;\n\n            // read a line of the log\n            string line = _sr.ReadLine();\n            if (line == null)\n                return null;\n\n            // obtain the data from each column and put the data array\n            Lexer l = new Lexer(new StringReader(line));\n            l.SeparateDatetime = false;\n            l.SeparatorChar = _tcmd.Separator;\n            LexTokenList ll = l.Lex();\n            return ll;\n        }\n\n        Type GetTypeOfString(string v)\n        {\n            return \"\".GetType();                // just assume string for now\n        }\n\n        async Task<StreamReader> GetStream()\n        {\n            string fname = _tcmd.Url;\n            Stream strm = null;\n\n            if (fname.StartsWith(\"http:\") || fname.StartsWith(\"https:\"))\n            {\n                using (HttpClient client = new HttpClient())\n                {\n                    client.AddMajorsilenceReportingUserAgent();\n                    HttpResponseMessage response = await client.GetAsync(fname);\n                    response.EnsureSuccessStatusCode();\n                    strm = await response.Content.ReadAsStreamAsync();\n                }\n            }\n            else if (fname.StartsWith(\"file:\"))\n            {\n                strm = new FileStream(fname.Substring(5), System.IO.FileMode.Open, FileAccess.Read);\n            }\n            else\n            {\n                strm = new FileStream(fname, System.IO.FileMode.Open, FileAccess.Read);\n            }\n\n            _sr = new StreamReader(strm);\n\n            return _sr;\n        }\n\n        #region IDataReader Members\n\n        public int RecordsAffected\n        {\n            get\n            {\n                return 0;\n            }\n        }\n\n        public bool IsClosed\n        {\n            get\n            {\n                return _sr == null;\n            }\n        }\n\n        public bool NextResult()\n        {\n            return false;\n        }\n\n        public void Close()\n        {\n            if (_sr != null)\n            {\n                _sr.Close();\n                _sr = null;\n            }\n            _Data = null;\n            _Names = null;\n            _Types = null;\n        }\n\n        public bool Read()\n        {\n            if (this._sr == null || _Data == null)\n                return false;\n\n            // Do we already have a row primed?\n            if (bFirstRow)\n            {   // yes; but no more\n                bFirstRow = false;\n                return true;\n            }\n\n            // read a line of the log\n            LexTokenList ll = this.GetLine();\n            if (ll == null)\n                return false;\n\n            // take line and fill the data\n            this.FillData(ll);\n\n            return true;\n        }\n\n        object GetDateTime(string v)\n        {\n            object result;\n            if (v.Length != 26)\n                return null;\n            try\n            {\n                string dd = v.Substring(0, 2);  // the day of the month\n                string MMM = v.Substring(3, 3); // the month\n                int month = 1;\n                switch (MMM.ToLower())\n                {\n                    case \"jan\":\n                        month = 1;\n                        break;\n                    case \"feb\":\n                        month = 2;\n                        break;\n                    case \"mar\":\n                        month = 3;\n                        break;\n                    case \"apr\":\n                        month = 4;\n                        break;\n                    case \"may\":\n                        month = 5;\n                        break;\n                    case \"jun\":\n                        month = 6;\n                        break;\n                    case \"jul\":\n                        month = 7;\n                        break;\n                    case \"aug\":\n                        month = 8;\n                        break;\n                    case \"sep\":\n                        month = 9;\n                        break;\n                    case \"oct\":\n                        month = 10;\n                        break;\n                    case \"nov\":\n                        month = 11;\n                        break;\n                    case \"dec\":\n                        month = 12;\n                        break;\n                    default:\n                        break;\n                }\n                string yyyy = v.Substring(7, 4);    // the year\n                string hh = v.Substring(12, 2); // the hour\n                string mm = v.Substring(15, 2); // the minute\n                string ss = v.Substring(18, 2); // the seconds\n                bool bPlus = v[21] == '+';\n                int hhmm = Convert.ToInt32(v.Substring(22, 4)); // the time zone\n                if (!bPlus)\n                    hhmm = -hhmm;\n                DateTime dt =\n                    new DateTime(Convert.ToInt32(yyyy),\n                    month,\n                    Convert.ToInt32(dd),\n                    Convert.ToInt32(hh),\n                    Convert.ToInt32(mm),\n                    Convert.ToInt32(ss), 0);\n                result = dt.AddHours(hhmm / 100.0);\n            }\n            catch\n            {\n                result = null;\n            }\n            return result;\n        }\n\n        public int Depth\n        {\n            get\n            {\n                // TODO:  Add XmlDataReader.Depth getter implementation\n                return 0;\n            }\n        }\n\n        public DataTable GetSchemaTable()\n        {\n            // TODO:  Add XmlDataReader.GetSchemaTable implementation\n            return null;\n        }\n\n        #endregion\n\n        #region IDisposable Members\n\n        public void Dispose()\n        {\n            this.Close();\n        }\n\n        #endregion\n\n        #region IDataRecord Members\n\n        public int GetInt32(int i)\n        {\n            return Convert.ToInt32(_Data[i]);\n        }\n\n        public object this[string name]\n        {\n            get\n            {\n                int ci = this.GetOrdinal(name);\n                return _Data[ci];\n            }\n        }\n\n        object System.Data.IDataRecord.this[int i]\n        {\n            get\n            {\n                return _Data[i];\n            }\n        }\n\n        public object GetValue(int i)\n        {\n            return _Data[i];\n        }\n\n        public bool IsDBNull(int i)\n        {\n            return _Data[i] == null;\n        }\n\n        public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length)\n        {\n            throw new NotImplementedException(\"GetBytes not implemented.\");\n        }\n\n        public byte GetByte(int i)\n        {\n            return Convert.ToByte(_Data[i]);\n        }\n\n        public Type GetFieldType(int i)\n        {\n            return this._Types[i] as Type;\n        }\n\n        public decimal GetDecimal(int i)\n        {\n            return Convert.ToDecimal(_Data[i]);\n        }\n\n        public int GetValues(object[] values)\n        {\n            int i;\n            for (i = 0; i < values.Length; i++)\n            {\n                values[i] = i >= _Data.Length ? System.DBNull.Value : _Data[i];\n            }\n\n            return Math.Min(values.Length, _Data.Length);\n        }\n\n        public string GetName(int i)\n        {\n            return _Names[i] as string;\n        }\n\n        public int FieldCount\n        {\n            get\n            {\n                return _Data.Length;\n            }\n        }\n\n        public long GetInt64(int i)\n        {\n            return Convert.ToInt64(_Data[i]);\n        }\n\n        public double GetDouble(int i)\n        {\n            return Convert.ToDouble(_Data[i]);\n        }\n\n        public bool GetBoolean(int i)\n        {\n            return Convert.ToBoolean(_Data[i]);\n        }\n\n        public Guid GetGuid(int i)\n        {\n            throw new NotImplementedException(\"GetGuid not implemented.\");\n        }\n\n        public DateTime GetDateTime(int i)\n        {\n            return Convert.ToDateTime(_Data[i]);\n        }\n\n        public int GetOrdinal(string name)\n        {\n            int ci = 0;\n            // do case sensitive lookup\n            foreach (string cname in _Names)\n            {\n                if (cname == name)\n                    return ci;\n                ci++;\n            }\n\n            // do case insensitive lookup\n            ci = 0;\n            foreach (string cname in _Names)\n            {\n                if (String.Compare(cname, name, true) == 0)\n                    return ci;\n                ci++;\n            }\n\n            throw new ArgumentException(string.Format(\"Column '{0}' not known.\", name));\n        }\n\n        public string GetDataTypeName(int i)\n        {\n            Type t = _Types[i] as Type;\n            return t.ToString();\n        }\n\n        public float GetFloat(int i)\n        {\n            return Convert.ToSingle(_Data[i]);\n        }\n\n        public IDataReader GetData(int i)\n        {\n            throw new NotImplementedException(\"GetData not implemented.\");\n        }\n\n        public long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length)\n        {\n            throw new NotImplementedException(\"GetChars not implemented.\");\n        }\n\n        public string GetString(int i)\n        {\n            return Convert.ToString(_Data[i]);\n        }\n\n        public char GetChar(int i)\n        {\n            return Convert.ToChar(_Data[i]);\n        }\n\n        public short GetInt16(int i)\n        {\n            return Convert.ToInt16(_Data[i]);\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "DataProviders/WebServiceCommand.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// WebServiceCommand \n\t/// </summary>\n\tpublic class WebServiceCommand : IDbCommand\n\t{\n\t\tWebServiceConnection _wsc;\t// connection we're running under\n\t\tstring _cmd;\t\t\t\t// command to execute\n\t\tint _Timeout;\t\t\t\t// timeout limit on invoking webservice (only applies to invoking service)\n\t\t// parsed constituents of the command\n\t\tstring _Url;\t\t\t\t// url of the wsdl file \n\t\tstring _Service;\t\t\t// service name\n\t\tstring _Operation;\t\t\t// operation name\n\t\tstring _RepeatField;\t\t// Specifies the name of the array that should be repeated (only 1 can be)\n\t\tArrayList _Columns;\t\t\t// Columns specified for the request\n\t\tDataParameterCollection _Parameters = new DataParameterCollection();\n\n\t\tpublic WebServiceCommand(WebServiceConnection conn)\n\t\t{\n\t\t\t_wsc = conn;\n\t\t}\n\n\t\tinternal string Url\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\t// Check to see if \"Url\" or \"@Url\" is a parameter\n\t\t\t\tIDbDataParameter dp= _Parameters[\"Url\"] as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp= _Parameters[\"@Url\"] as IDbDataParameter;\n\t\t\t\t// Then check to see if the Url value is a parameter?\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp = _Parameters[_Url] as IDbDataParameter;\n\t\t\t\tif (dp != null)\n\t\t\t\t\treturn dp.Value != null? dp.Value.ToString(): _Url;\t// don't pass null; pass existing value\n\t\t\t\treturn _Url;\t// the value must be a constant\n\t\t\t}\n\t\t\tset {_Url = value;}\n\t\t}\n\n\t\tinternal string Operation\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tIDbDataParameter dp= _Parameters[\"Operation\"] as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp= _Parameters[\"@Operation\"] as IDbDataParameter;\n\t\t\t\t// Then check to see if the Operation value is a parameter?\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp = _Parameters[_Operation] as IDbDataParameter;\n\n\t\t\t\treturn (dp != null && dp.Value != null)? dp.Value.ToString(): _Operation;\t// don't pass null; pass existing value\n\t\t\t}\n\t\t\tset {_Operation = value;}\n\t\t}\n\n\t\tinternal string RepeatField\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tIDbDataParameter dp= _Parameters[\"RepeatField\"] as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp= _Parameters[\"@RepeatField\"] as IDbDataParameter;\n\t\t\t\t// Then check to see if the RepeatField value is a parameter?\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp = _Parameters[_RepeatField] as IDbDataParameter;\n\n\t\t\t\treturn (dp != null && dp.Value != null)? null: _RepeatField;\n\t\t\t}\n\t\t\tset {_RepeatField = value;}\n\t\t}\n\n\t\tinternal string Service\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tIDbDataParameter dp= _Parameters[\"Service\"] as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp= _Parameters[\"@Service\"] as IDbDataParameter;\n\t\t\t\t// Then check to see if the RowsXPath value is a parameter?\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp = _Parameters[_Service] as IDbDataParameter;\n\n\t\t\t\treturn (dp != null && dp.Value != null)? dp.Value.ToString(): _Service;\t// don't pass null; pass existing value\n\t\t\t}\n\t\t\tset {_Service = value;}\n\t\t}\n\n\t\tinternal ArrayList Columns\n\t\t{\n\t\t\tget {return _Columns;}\n\t\t\tset {_Columns = value;}\n\t\t}\n\n\t\t#region IDbCommand Members\n\n\t\tpublic void Cancel()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"Cancel not implemented\");\n\t\t}\n\n\t\tpublic void Prepare()\n\t\t{\n\t\t\treturn;\t\t\t// Prepare is a noop\n\t\t}\n\n\t\tpublic System.Data.CommandType CommandType\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandType not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandType not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic IDataReader ExecuteReader(System.Data.CommandBehavior behavior)\n\t\t{\n\t\t\tif (!(behavior == CommandBehavior.SingleResult || \n\t\t\t\t  behavior == CommandBehavior.SchemaOnly))\n\t\t\t\tthrow new ArgumentException(\"ExecuteReader supports SingleResult and SchemaOnly only.\");\n\t\t\treturn new WebServiceDataReader(behavior, _wsc, this);\n\t\t}\n\n\t\tIDataReader System.Data.IDbCommand.ExecuteReader()\n\t\t{\n\t\t\treturn ExecuteReader(System.Data.CommandBehavior.SingleResult);\n\t\t}\n\n\t\tpublic object ExecuteScalar()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ExecuteScalar not implemented\");\n\t\t}\n\n\t\tpublic int ExecuteNonQuery()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ExecuteNonQuery not implemented\");\n\t\t}\n\n\t\tpublic int CommandTimeout\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Timeout;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t_Timeout = value;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbDataParameter CreateParameter()\n\t\t{\n\t\t\treturn new WebServiceDataParameter();\n\t\t}\n\n\t\tpublic IDbConnection Connection\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._wsc;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Setting Connection not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic System.Data.UpdateRowSource UpdatedRowSource\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"UpdatedRowSource not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"UpdatedRowSource not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic string CommandText\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._cmd;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t// Parse the command string for keyword value pairs separated by ';'\n\t\t\t\tstring[] args = value.Split(';');\n\t\t\t\tstring url=null;\n\t\t\t\tstring operation=null;\n\t\t\t\tstring service=null;\n\t\t\t\tstring[] columns=null;\n\t\t\t\tforeach(string arg in args)\n\t\t\t\t{\n\t\t\t\t\tstring[] param = arg.Trim().Split('=');\n\t\t\t\t\tif (param == null || param.Length != 2)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tstring key = param[0].Trim().ToLower();\n\t\t\t\t\tstring val = param[1];\n\t\t\t\t\tswitch (key)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase \"url\":\n\t\t\t\t\t\tcase \"file\":\n\t\t\t\t\t\t\turl = val;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"service\":\n\t\t\t\t\t\t\tservice = val;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"operation\":\n\t\t\t\t\t\t\toperation = val;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"columns\":\n\t\t\t\t\t\t\t// column list is separated by ','\n\t\t\t\t\t\t\tcolumns = val.Trim().Split(',');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new ArgumentException(string.Format(\"{0} is an unknown parameter key\", param[0]));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// User must specify both the url and the RowsXPath\n\t\t\t\tif (url == null || operation == null || service == null)\n\t\t\t\t\tthrow new ArgumentException(\"CommandText requires 'Url', 'Service', and 'Operation' parameters.\");\n\t\t\t\t_cmd = value;\n\t\t\t\t_Url = url;\n\t\t\t\t_Operation = operation;\n\t\t\t\t_Service = service;\n\t\t\t\tif (columns != null)\n\t\t\t\t\t_Columns = new ArrayList(columns);\n\t\t\t}\n\t\t}\n\n\t\tpublic IDataParameterCollection Parameters\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Parameters;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbTransaction Transaction\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Transaction not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Transaction not implemented\");\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\t// nothing to dispose of\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/WebServiceConnection.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// WebServiceConnection handles connections for WebServices  \n\t/// </summary>\n\tpublic class WebServiceConnection : IDbConnection\n\t{\n\t\tstring _Connection;\t\t\t\t// the connection string; of format directory=\n\t\tbool bOpen=false;\n\t\tpublic WebServiceConnection(string conn)\n\t\t{\n\t\t\tConnectionString = conn;\n\t\t}\n\n\t\tinternal bool IsOpen\n\t\t{\n\t\t\tget {return bOpen;}\n\t\t}\n\n\t\t#region IDbConnection Members\n\n\t\tpublic void ChangeDatabase(string databaseName)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ChangeDatabase method not supported.\");\n\t\t}\n\n\t\tpublic IDbTransaction BeginTransaction(System.Data.IsolationLevel il)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"BeginTransaction method not supported.\");\n\t\t}\n\n\t\tIDbTransaction System.Data.IDbConnection.BeginTransaction()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"BeginTransaction method not supported.\");\n\t\t}\n\n\t\tpublic System.Data.ConnectionState State\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"State not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic string ConnectionString\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Connection;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tstring c = value;\n\t\t\t\t// Now parse the connection string;\n\t\t\t\tArray args = c.Split (',');\n\t\t\t\tstring directory=null;\n\t\t\t\tforeach(string arg in args)\n\t\t\t\t{\n\t\t\t\t\tif (arg.Trim().ToLower().StartsWith(\"directory=\"))\t// Only have one type of argument right now\n\t\t\t\t\t\tdirectory = arg.Trim().Split('=').GetValue(1) as string;\n\t\t\t\t}\n\t\t\t\t_Connection = value;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbCommand CreateCommand()\n\t\t{\n\t\t\treturn new WebServiceCommand(this);\n\t\t}\n\n\t\tpublic void Open()\n\t\t{\n\t\t\tbOpen = true;\n\t\t}\n\n\t\tpublic void Close()\n\t\t{\n\t\t\tbOpen = false;\n\t\t}\n\n\t\tpublic string Database\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn null;\t\t\t// don't really have a database\n\t\t\t}\n\t\t}\n\n\t\tpublic int ConnectionTimeout\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tthis.Close();\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/WebServiceDataParameter.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// WebServiceDataParameter\n\t/// </summary>\n\tpublic class WebServiceDataParameter : BaseDataParameter\n\t{\n\t\tpublic WebServiceDataParameter():base()\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "DataProviders/WebServiceDataReader.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Xml.XPath;\nusing System.Data;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.IO;\nusing System.Net;\n\nusing System.Reflection;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// Summary description for Class1.\n\t/// </summary>\n\tpublic class WebServiceDataReader : IDataReader\n\t{\n\t\tWebServiceConnection _wsconn;\n\t\tWebServiceCommand _wscmd;\n\t\tSystem.Data.CommandBehavior _behavior;\n\t\tstatic Type[] BASE_TYPES = new Type[] {System.String.Empty.GetType(),\n\t\t\t\t\t\t\t\t\t  System.Double.MinValue.GetType(),\n\t\t\t\t\t\t\t\t\t  System.Single.MinValue.GetType(),\n\t\t\t\t\t\t\t\t\t  System.Decimal.MinValue.GetType(),\n\t\t\t\t\t\t\t\t\t  System.DateTime.MinValue.GetType(),\n\t\t\t\t\t\t\t\t\t  System.Char.MinValue.GetType(),\n\t\t\t\t\t\t\t\t\t  new bool().GetType(),\n\t\t\t\t\t\t\t\t\t  System.Int32.MinValue.GetType(),\n\t\t\t\t\t\t\t\t\t  System.Int16.MinValue.GetType(),\n\t\t\t\t\t\t\t\t\t  System.Int64.MinValue.GetType(),\n\t\t\t\t\t\t\t\t\t  System.Byte.MinValue.GetType(),\n\t\t\t\t\t\t\t\t\t  System.UInt16.MinValue.GetType(),\n\t\t\t\t\t\t\t\t\t  System.UInt32.MinValue.GetType(),\n\t\t\t\t\t\t\t\t\t  System.UInt64.MinValue.GetType()};\n\n\t\t// column information\n\t\tArrayList _RowData;\t\t\t// array of Data rows; \n\t\tIEnumerator _ie;\t\t\t//  enumerator thru rows\n\t\tobject[] _Data;\t\t\t\t// data values of the columns\n\t\tArrayList _Names;\t\t\t// names of the columns\n\t\tArrayList _Types;\t\t\t// types of the columns\n\n\t\tpublic WebServiceDataReader(System.Data.CommandBehavior behavior, WebServiceConnection conn, WebServiceCommand cmd)\n\t\t{\n\t\t\t_wsconn = conn;\n\t\t\t_wscmd = cmd;\n\t\t\t_behavior = behavior;\n\n\t\t\tWebServiceWsdl wsw = WebServiceWsdl.GetWebServiceWsdl(_wscmd.Url);\n\n\t\t\t// build the structure of the result\n\t\t\tBuildMetaData(wsw);\n\n\t\t\tif (_behavior == CommandBehavior.SchemaOnly)\n\t\t\t\treturn;\n\n\t\t\t// build the array that will hold the data\n\t\t\tBuildData(wsw);\n\t\t\treturn;\n\t\t}\n\n\t\tvoid BuildData(WebServiceWsdl wsw)\n\t\t{\n\t\t\t_RowData = new ArrayList();\n\n\t\t\tobject result = wsw.Invoke(_wscmd.Service, _wscmd.Operation, \n\t\t\t\t_wscmd.Parameters as DataParameterCollection, _wscmd.CommandTimeout);\n\n\t\t\tif (result == null)\n\t\t\t{\n\t\t\t\t_ie = null;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tint ci=0;\n\t\t\tobject[] row=null;\n\t\t\tGetDataProperties(null, result.GetType(), result, ref ci, ref row);\n\t\t\t_ie = _RowData.GetEnumerator();\n\t\t}\n\n\t\tvoid GetDataProperties(string name, Type t, object data, ref int ci, ref object[] row)\n\t\t{\n\t\t\t// Handle arrays\n\t\t\tif (t.IsArray)\n\t\t\t{\n\t\t\t\tType at = t.GetElementType();\n\t\t\t\tif (data == null)\t\t// even with null we need to go down the tree\n\t\t\t\t\tGetDataProperties(name, at, null, ref ci, ref row);\n\t\t\t\telse \n\t\t\t\t{\n\t\t\t\t\tint saveci = ci;\n\t\t\t\t\tforeach (object d in data as Array)\n\t\t\t\t\t{\n\t\t\t\t\t\tci = saveci;\t\t\t// seems funny, but we need to restore before each call\n\t\t\t\t\t\tGetDataProperties(name, at, d, ref ci, ref row);\n\t\t\t\t\t\tif (name != _wscmd.RepeatField)\t\t// only loop thru once if not the repeat field\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\trow = null;\t\t\t\t// we'll want another row\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Base types go no further\n\t\t\tif (IsBaseType(t))\n\t\t\t{\n\t\t\t\tif (name == null)\n\t\t\t\t\tname = \"result\";\n\n\t\t\t\tif (row == null)\n\t\t\t\t{\n\t\t\t\t\trow = new object[_Names.Count];\n\t\t\t\t\t_RowData.Add(row);\n\t\t\t\t}\n\t\t\t\trow[ci++] = data;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\t// Handle complex type; get all its fields\n\t\t\tFieldInfo[] fis = t.GetFields();\n\t\t\tforeach (FieldInfo fi in fis)\n\t\t\t{\n\t\t\t\tstring column_name = name == null? fi.Name: name + \".\" + fi.Name;\n\t\t\t\tif (fi.FieldType.IsArray)\n\t\t\t\t{\n\t\t\t\t\tArray da = data == null? null: fi.GetValue(data) as Array;\n\t\t\t\t\tif (da == null)\t// still need to go down path even with null\n\t\t\t\t\t\tGetDataProperties(column_name, fi.FieldType.GetElementType(), null, ref ci, ref row);\n\t\t\t\t\telse \n\t\t\t\t\t{\t// loop thru the object\n\t\t\t\t\t\tobject[] save_row = row;\n\t\t\t\t\t\tint saveci = ci;\n\t\t\t\t\t\tforeach (object d in da)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tci = saveci;\t\t\t// seems funny, but we need to restore before each call\n\t\t\t\t\t\t\tGetDataProperties(column_name, fi.FieldType.GetElementType(), d, ref ci, ref row);\n\t\t\t\t\t\t\tif (column_name != _wscmd.RepeatField)\t\t// only loop thru once if not the repeat field\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\trow = null;\t\t\t\t// we'll want another row after this one\n\t\t\t\t\t\t}\n\t\t\t\t\t\trow = save_row;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tGetDataProperties(column_name, fi.FieldType, data == null? null: fi.GetValue(data), ref ci, ref row);\n\t\t\t}\n\t\t}\n\n\t\tvoid BuildMetaData(WebServiceWsdl wsw)\n\t\t{\n\t\t\t_Names = new ArrayList();\n\t\t\t_Types = new ArrayList();\n\n\t\t\tMethodInfo mi = wsw.GetMethodInfo(_wscmd.Service, _wscmd.Operation);\n\n\t\t\tGetProperties(null, mi.ReturnType);\n\t\t}\n\n\t\tvoid GetProperties(string name, Type t)\n\t\t{\n\t\t\t// Handle arrays\n\t\t\tif (t.IsArray)\n\t\t\t{\n\t\t\t\tGetProperties(name, t.GetElementType());\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Base types go no further\n\t\t\tif (IsBaseType(t))\n\t\t\t{\n\t\t\t\tif (name == null)\n\t\t\t\t\tname = \"result\";\n\n\t\t\t\t_Names.Add(name);\n\t\t\t\t_Types.Add(t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\t// Handle complex type; get all its fields\n\t\t\tFieldInfo[] fis = t.GetFields();\n\t\t\tforeach (FieldInfo fi in fis)\n\t\t\t{\n\t\t\t\tstring column_name = name == null? fi.Name: name + \".\" + fi.Name;\n\t\t\t\tif (fi.FieldType.IsArray)\n\t\t\t\t{\n\t\t\t\t\tif (_wscmd.RepeatField == null)\t\t\t// if no RepeatField specified use first Array encountered\n\t\t\t\t\t\t_wscmd.RepeatField = column_name;\n\t\t\t\t\tGetProperties(column_name, fi.FieldType.GetElementType());\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tGetProperties(column_name, fi.FieldType);\n\t\t\t}\n\t\t}\n\n\t\t// Determines if underlying type is a primitive\n\t\tbool IsBaseType(Type t)\n\t\t{\n\t\t\tforeach (Type bt in BASE_TYPES)\n\t\t\t{\n\t\t\t\tif (bt == t)\n\t\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\t#region IDataReader Members\n\n\t\tpublic int RecordsAffected\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\tpublic bool IsClosed\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _RowData != null;\n\t\t\t}\n\t\t}\n\n\t\tpublic bool NextResult()\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tpublic void Close()\n\t\t{\n\t\t\t_RowData = null;\t\t// get rid of the data & metadata\n\t\t\t_ie = null;\n\t\t\t_Data = null;\n\t\t\t_Names = null;\n\t\t\t_Types = null;\n\t\t}\n\n\t\tpublic bool Read()\n\t\t{\n\t\t\tif (_ie == null || !_ie.MoveNext())\n\t\t\t\treturn false;\n\n\t\t\t_Data = _ie.Current as object[];\n\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic int Depth\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\tpublic DataTable GetSchemaTable()\n\t\t{\n\t\t\t// TODO:  Add XmlDataReader.GetSchemaTable implementation\n\t\t\treturn null;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tthis.Close();\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDataRecord Members\n\n\t\tpublic int GetInt32(int i)\n\t\t{\n\t\t\treturn Convert.ToInt32(_Data[i]);\n\t\t}\n\n\t\tpublic object this[string name]\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tint ci = this.GetOrdinal(name);\n\t\t\t\treturn _Data[ci];\n\t\t\t}\n\t\t}\n\n\t\tobject System.Data.IDataRecord.this[int i]\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Data[i];\n\t\t\t}\n\t\t}\n\n\t\tpublic object GetValue(int i)\n\t\t{\n\t\t\treturn _Data[i];\n\t\t}\n\n\t\tpublic bool IsDBNull(int i)\n\t\t{\n\t\t\treturn _Data[i] == null;\n\t\t}\n\n\t\tpublic long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetBytes not implemented.\");\n\t\t}\n\n\t\tpublic byte GetByte(int i)\n\t\t{\n\t\t\treturn Convert.ToByte(_Data[i]);\n\t\t}\n\n\t\tpublic Type GetFieldType(int i)\n\t\t{\n\t\t\treturn this._Types[i] as Type;\n\t\t}\n\n\t\tpublic decimal GetDecimal(int i)\n\t\t{\n\t\t\treturn Convert.ToDecimal(_Data[i]);\n\t\t}\n\n\t\tpublic int GetValues(object[] values)\n\t\t{\n\t\t\tint i;\n\t\t\tfor (i=0; i < values.Length; i++)\n\t\t\t{\n\t\t\t\tvalues[i] = i >= _Data.Length? System.DBNull.Value: _Data[i];\n\t\t\t}\n\n\t\t\treturn Math.Min(values.Length, _Data.Length);\n\t\t}\n\n\t\tpublic string GetName(int i)\n\t\t{\n\t\t\treturn _Names[i] as string;\n\t\t}\n\n\t\tpublic int FieldCount\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Names == null? 0: _Names.Count;\n\t\t\t}\n\t\t}\n\n\t\tpublic long GetInt64(int i)\n\t\t{\n\t\t\treturn Convert.ToInt64(_Data[i]);\n\t\t}\n\n\t\tpublic double GetDouble(int i)\n\t\t{\n\t\t\treturn Convert.ToDouble(_Data[i]);\n\t\t}\n\n\t\tpublic bool GetBoolean(int i)\n\t\t{\n\t\t\treturn Convert.ToBoolean(_Data[i]);\n\t\t}\n\n\t\tpublic Guid GetGuid(int i)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetGuid not implemented.\");\n\t\t}\n\n\t\tpublic DateTime GetDateTime(int i)\n\t\t{\n\t\t\treturn Convert.ToDateTime(_Data[i]);\n\t\t}\n\n\t\tpublic int GetOrdinal(string name)\n\t\t{\n\t\t\tint ci=0;\n\t\t\t// do case sensitive lookup\n\t\t\tforeach (string cname in _Names)\n\t\t\t{\n\t\t\t\tif (cname == name)\n\t\t\t\t\treturn ci;\n\t\t\t\tci++;\n\t\t\t}\n\n\t\t\t// do case insensitive lookup\n\t\t\tci=0;\n\t\t\tname = name.ToLower();\n\t\t\tforeach (string cname in _Names)\n\t\t\t{\n\t\t\t\tif (cname.ToLower() == name)\n\t\t\t\t\treturn ci;\n\t\t\t\tci++;\n\t\t\t}\n\n\t\t\tthrow new ArgumentException(string.Format(\"Column '{0}' not known.\", name));\n\t\t}\n\n\t\tpublic string GetDataTypeName(int i)\n\t\t{\n\t\t\tType t = _Types[i] as Type;\n\t\t\treturn t.ToString();\n\t\t}\n\n\t\tpublic float GetFloat(int i)\n\t\t{\n\t\t\treturn Convert.ToSingle(_Data[i]);\n\t\t}\n\n\t\tpublic IDataReader GetData(int i)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetData not implemented.\");\n\t\t}\n\n\t\tpublic long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetChars not implemented.\");\n\t\t}\n\n\t\tpublic string GetString(int i)\n\t\t{\n\t\t\treturn Convert.ToString(_Data[i]);\n\t\t}\n\n\t\tpublic char GetChar(int i)\n\t\t{\n\t\t\treturn Convert.ToChar(_Data[i]);\n\t\t}\n\n\t\tpublic short GetInt16(int i)\n\t\t{\n\t\t\treturn Convert.ToInt16(_Data[i]);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/WebServiceWsdl.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\nusing System.Collections;\n#if !NETSTANDARD2_0 && !NET6_0_OR_GREATER\nusing System.Web.Services;\nusing System.Web.Services.Description;\nusing System.Web.Services.Protocols;\n#endif\nusing System.CodeDom;\nusing System.CodeDom.Compiler;\nusing System.Text;\nusing System.Reflection;\nusing System.IO;\nusing System.Net;\nusing Microsoft.CSharp;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// WebServiceWsdl handles generation and caching of Assemblies containing WSDL proxies\n\t///   It also will invoke proxies with the proper arguments.  These arguments must be \n\t///   provided as a WebServiceParameter.\n\t/// </summary>\n\tpublic class WebServiceWsdl\n\t{\n\t\t// Cache the compiled assemblies\n\t\tconst string _Namespace = \"fyireporting.ws\";\n\t\tstatic Hashtable _cache = Hashtable.Synchronized(new Hashtable());\t\n\t\tstring _url;\t\t\t\t\t// url for this assembly\n\t\tAssembly _WsdlAssembly;\t\t\t// Assembly ready for invokation\n\n\t\tstatic internal WebServiceWsdl GetWebServiceWsdl(string url)\n\t\t{\n\t\t\tWebServiceWsdl w = _cache[url] as WebServiceWsdl;\n\t\t\tif (w != null)\n\t\t\t\treturn w;\n\n\t\t\treturn new WebServiceWsdl(url);\n\t\t}\n\n\t\tstatic public void ClearCache()\n\t\t{\n\t\t\t_cache.Clear();\n\t\t}\n\n\t\tpublic MethodInfo GetMethodInfo(string service, string operation)\n\t\t{\n\t\t\t// Create an instance of the service object proxy   \n\t\t\tobject o = _WsdlAssembly.CreateInstance(_Namespace + \".\" + service, false);\n\t\t\tif (o == null)\n\t\t\t\tthrow new Exception(string.Format(\"Unable to create instance of service '{0}'.\", service));\n\n\t\t\t// Get information about the method\n\t\t\tMethodInfo mi = o.GetType().GetMethod(operation);\n\t\t\tif (mi == null)\n\t\t\t\tthrow new Exception(string.Format(\"Unable to find operation '{0}' in service '{1}'.\", operation, service));\n\n\t\t\treturn mi;\n\t\t}\n\n\t\t// Invoke the operation for the requested service\n\t\tpublic object Invoke(string service, string operation, DataParameterCollection dpc, int timeout)\n\t\t{\n\t\t\t// Create an instance of the service object proxy\n\t\t\tobject o = _WsdlAssembly.CreateInstance(_Namespace + \".\" + service, false);\n\t\t\tif (o == null)\n\t\t\t\tthrow new Exception(string.Format(\"Unable to create instance of service '{0}'.\", service));\n\n\t\t\t// Get information about the method\n\t\t\tMethodInfo mi = o.GetType().GetMethod(operation);\n\t\t\tif (mi == null)\n\t\t\t\tthrow new Exception(string.Format(\"Unable to find operation '{0}' in service '{1}'.\", operation, service));\n\n\t\t\t// Go thru the parameters building up an object array with the proper parameters\n\t\t\tParameterInfo[] pis = mi.GetParameters();\n\t\t\tobject[] args = new object[pis.Length];\n\t\t\tint ai=0;\n\t\t\tforeach (ParameterInfo pi in pis)\n\t\t\t{\n\t\t\t\tBaseDataParameter dp = dpc[pi.Name] as BaseDataParameter;\n\t\t\t\tif (dp == null)\t\t// retry with '@' in front!\n\t\t\t\t\tdp = dpc[\"@\"+pi.Name] as BaseDataParameter;\n\t\t\t\tif (dp == null || dp.Value == null)\n\t\t\t\t\targs[ai] = null;\n\t\t\t\telse if (pi.ParameterType == dp.Value.GetType())\n\t\t\t\t\targs[ai] = dp.Value;\n\t\t\t\telse\t// we need to do conversion\n\t\t\t\t\targs[ai] = Convert.ChangeType(dp.Value, pi.ParameterType);\n\t\t\t\tai++;\n\t\t\t}\n#if !NETSTANDARD2_0 && !NET6_0_OR_GREATER\n            SoapHttpClientProtocol so = o as SoapHttpClientProtocol;\n\t\t\tif (so != null && timeout != 0)\n\t\t\t\tso.Timeout = timeout;\n\t\t\treturn mi.Invoke(o, args);\n#else\n            throw new NotImplementedException(\"Some classes are not available on .NET STANDARD\");\n#endif\n\t\t}\n\n\t\t// constructor\n\t\tprivate WebServiceWsdl(string url)\n\t\t{\n\t\t\t_url = url;\t\t\t\t\t\t\n\t\t\t_WsdlAssembly = GetAssembly();\n\t\t\t_cache.Add(url, this);\n\t\t}\n\n\t\tprivate Assembly GetAssembly()\n\t\t{\n#if !NETSTANDARD2_0 && !NET6_0_OR_GREATER\n            ServiceDescription sd=null;\n                \n            // HACK: We need to run the async method synchronously here, but we can't use .Result or .Wait() because it can cause deadlocks. So we use Task.Run to run it on a separate thread and then wait for the result.\n            Task.Run(async()=> sd = await GetServiceDescription()).GetAwaiter().GetResult();\n\n\t\t\t// ServiceDescriptionImporter provide means for generating client proxy classes for XML Web services \n\t\t\tCodeNamespace cns = new CodeNamespace(_Namespace);\n\t\t\tServiceDescriptionImporter sdi = new ServiceDescriptionImporter();\n\t\t\tsdi.AddServiceDescription(sd, null, null);\n\t\t\tsdi.ProtocolName = \"Soap\";\n\t\t\tsdi.Import(cns, null);\n\n\t\t\t// Generate the proxy source code\n\t\t\tCSharpCodeProvider cscp = new CSharpCodeProvider();\n\t\t\tStringBuilder sb = new StringBuilder();\n\t\t\tStringWriter sw = new StringWriter(sb);\n\t\t\tcscp.GenerateCodeFromNamespace(cns, sw, null);\n\t\t\tstring proxy = sb.ToString();\n\t\t\tsw.Close();\n\n\t\t\t// debug code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n//\t\t\tStreamWriter tsw = File.CreateText(@\"c:\\temp\\proxy.cs\");\n//\t\t\ttsw.Write(proxy);\n//\t\t\ttsw.Close();\n\t\t\t// debug code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   \n\n\t\t\t// Create Assembly\n\t\t\tCompilerParameters cp = new CompilerParameters();\n\t\t\tcp.ReferencedAssemblies.Add(\"System.dll\");\n\t\t\tcp.ReferencedAssemblies.Add(\"System.Xml.dll\");\n\t\t\tcp.ReferencedAssemblies.Add(\"System.Web.Services.dll\");\n\t\t\tcp.GenerateExecutable = false;\n\t\t\tcp.GenerateInMemory = false;\t\t\t// just loading into memory causes problems when instantiating\n\t\t\tcp.IncludeDebugInformation = false; \n\t\t\tCompilerResults cr = cscp.CompileAssemblyFromSource(cp, proxy);\n\t\t\tif(cr.Errors.Count > 0)\n\t\t\t{\n\t\t\t\tStringBuilder err = new StringBuilder(string.Format(\"WSDL proxy compile has {0} error(s).\", cr.Errors.Count));\n\t\t\t\tforeach (CompilerError ce in cr.Errors)\n\t\t\t\t{\n\t\t\t\t\terr.AppendFormat(\"\\r\\n{0} {1}\", ce.ErrorNumber, ce.ErrorText);\n\t\t\t\t}\n\t\t\t\tthrow new Exception(err.ToString()); \n\t\t\t}\n\n\t\t\treturn Assembly.LoadFrom(cr.PathToAssembly);\t// We need an assembly loaded from the file system\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//   or instantiation of object complains\n#else\n            throw new NotImplementedException(\"Some classes are missing on .NET STANDARD\");\n#endif\n\t\t}\n\n#if !NETSTANDARD2_0 && !NET6_0_OR_GREATER\n        public async Task<ServiceDescription> GetServiceDescription()\n        {\n            ServiceDescription sd = new ServiceDescription();\n            Stream sr=null;\n            try\n            {\n                sr = await GetStream();\n                sd = ServiceDescription.Read(sr);\n            }\n            finally\n            {\n                if (sr != null)\n                    sr.Close();\n            }\n\n            return sd;\n        }\n#endif\n        \n        async Task<Stream> GetStream()\n        {\n            string fname = _url;\n            Stream strm = null;\n\n            if (fname.StartsWith(\"http:\") || fname.StartsWith(\"file:\") || fname.StartsWith(\"https:\"))\n            {\n                using (HttpClient client = new HttpClient())\n                {\n                    client.AddMajorsilenceReportingUserAgent();\n                    HttpResponseMessage response = await client.GetAsync(fname);\n                    if (response.IsSuccessStatusCode)\n                    {\n                        strm = await response.Content.ReadAsStreamAsync();\n                    }\n                    else\n                    {\n                        throw new Exception($\"Failed to get response from {fname}. Status code: {response.StatusCode}\");\n                    }\n                }\n            }\n            else\n            {\n                strm = new FileStream(fname, System.IO.FileMode.Open, FileAccess.Read);\n            }\n\n            return strm;\n        }\n\n\t}\n}\n"
  },
  {
    "path": "DataProviders/XmlCommand.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// Summary description for Class1.\n\t/// </summary>\n\tpublic class XmlCommand : IDbCommand\n\t{\n\t\tXmlConnection _xc;\t\t\t// connection we're running under\n\t\tstring _cmd;\t\t\t\t// command to execute\n\t\t// parsed constituents of the command\n\t\tstring _Url;\t\t\t\t// url of the xml file \n\t\tstring _RowsXPath;\t\t\t// XPath specifying rows selection\n\t\tArrayList _ColumnsXPath;\t\t// XPath for each column\n\t\tstring _Type;\t\t\t\t// type of request\n\t\tDataParameterCollection _Parameters = new DataParameterCollection();\n\n\t\tpublic XmlCommand(XmlConnection conn)\n\t\t{\n\t\t\t_xc = conn;\n\t\t}\n\n\t\tinternal string Url\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\t// Check to see if \"Url\" or \"@Url\" is a parameter\n\t\t\t\tIDbDataParameter dp= _Parameters[\"Url\"] as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp= _Parameters[\"@Url\"] as IDbDataParameter;\n\t\t\t\t// Then check to see if the Url value is a parameter?\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp = _Parameters[_Url] as IDbDataParameter;\n\t\t\t\tif (dp != null)\n\t\t\t\t\treturn dp.Value != null? dp.Value.ToString(): _Url;\t// don't pass null; pass existing value\n\t\t\t\treturn _Url;\t// the value must be a constant\n\t\t\t}\n\t\t\tset {_Url = value;}\n\t\t}\n\n\t\tinternal string RowsXPath\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tIDbDataParameter dp= _Parameters[\"RowsXPath\"] as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp= _Parameters[\"@RowsXPath\"] as IDbDataParameter;\n\t\t\t\t// Then check to see if the RowsXPath value is a parameter?\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp = _Parameters[_RowsXPath] as IDbDataParameter;\n\t\t\t\tif (dp != null)\n\t\t\t\t\treturn dp.Value != null? dp.Value.ToString(): _RowsXPath;\t// don't pass null; pass existing value\n\t\t\t\treturn _RowsXPath;\t// the value must be a constant\n\t\t\t}\n\t\t\tset {_RowsXPath = value;}\n\t\t}\n\n\t\tinternal ArrayList ColumnsXPath\n\t\t{\n\t\t\tget {return _ColumnsXPath;}\n\t\t\tset {_ColumnsXPath = value;}\n\t\t}\n\n\t\tinternal string Type\n\t\t{\n\t\t\tget {return _Type;}\n\t\t\tset {_Type = value;}\n\t\t}\n\n\t\t#region IDbCommand Members\n\n\t\tpublic void Cancel()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"Cancel not implemented\");\n\t\t}\n\n\t\tpublic void Prepare()\n\t\t{\n\t\t\treturn;\t\t\t// Prepare is a noop\n\t\t}\n\n\t\tpublic System.Data.CommandType CommandType\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandType not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandType not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic IDataReader ExecuteReader(System.Data.CommandBehavior behavior)\n\t\t{\n\t\t\tif (!(behavior == CommandBehavior.SingleResult || \n\t\t\t\t  behavior == CommandBehavior.SchemaOnly))\n\t\t\t\tthrow new ArgumentException(\"ExecuteReader supports SingleResult and SchemaOnly only.\");\n\t\t\treturn new XmlDataReader(behavior, _xc, this);\n\t\t}\n\n\t\tIDataReader System.Data.IDbCommand.ExecuteReader()\n\t\t{\n\t\t\treturn ExecuteReader(System.Data.CommandBehavior.SingleResult);\n\t\t}\n\n\t\tpublic object ExecuteScalar()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ExecuteScalar not implemented\");\n\t\t}\n\n\t\tpublic int ExecuteNonQuery()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ExecuteNonQuery not implemented\");\n\t\t}\n\n\t\tpublic int CommandTimeout\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandTimeout not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbDataParameter CreateParameter()\n\t\t{\n\t\t\treturn new XmlDataParameter();\n\t\t}\n\n\t\tpublic IDbConnection Connection\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._xc;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Setting Connection not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic System.Data.UpdateRowSource UpdatedRowSource\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"UpdatedRowSource not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"UpdatedRowSource not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic string CommandText\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._cmd;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t// Parse the command string for keyword value pairs separated by ';'\n\t\t\t\tstring[] args = value.Split(';');\n\t\t\t\tstring url=null;\n\t\t\t\tstring[] colxpaths=null;\n\t\t\t\tstring rowsxpath=null;\n\t\t\t\tstring type=\"both\";\t\t// assume we want both attributes and elements\n\t\t\t\tforeach(string arg in args)\n\t\t\t\t{\n\t\t\t\t\tstring[] param = arg.Trim().Split('=');\n\t\t\t\t\tif (param == null || param.Length != 2)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tstring key = param[0].Trim().ToLower();\n\t\t\t\t\tstring val = param[1];\n\t\t\t\t\tswitch (key)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase \"url\":\n\t\t\t\t\t\tcase \"file\":\n\t\t\t\t\t\t\turl = val;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"rowsxpath\":\n\t\t\t\t\t\t\trowsxpath = val;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"type\":\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype = val.Trim().ToLower();\n\t\t\t\t\t\t\tif (!(type == \"attributes\" || type == \"elements\" || type == \"both\"))\n\t\t\t\t\t\t\t\tthrow new ArgumentException(string.Format(\"type '{0}' is invalid.  Must be 'attributes', 'elements' or 'both'\", val));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"columnsxpath\":\n\t\t\t\t\t\t\t// column list is separated by ','\n\t\t\t\t\t\t\tcolxpaths = val.Trim().Split(',');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new ArgumentException(string.Format(\"{0} is an unknown parameter key\", param[0]));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// User must specify both the url and the RowsXPath\n\t\t\t\tif (url == null)\n\t\t\t\t\tthrow new ArgumentException(\"CommandText requires a 'Url=' parameter.\");\n\t\t\t\tif (rowsxpath == null)\n\t\t\t\t\tthrow new ArgumentException(\"CommandText requires a 'RowsXPath=' parameter.\");\n\t\t\t\t_cmd = value;\n\t\t\t\t_Url = url;\n\t\t\t\t_Type = type;\n\t\t\t\t_RowsXPath = rowsxpath;\n\t\t\t\tif (colxpaths != null)\n\t\t\t\t\t_ColumnsXPath = new ArrayList(colxpaths);\n\t\t\t}\n\t\t}\n\n\t\tpublic IDataParameterCollection Parameters\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Parameters;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbTransaction Transaction\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Transaction not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Transaction not implemented\");\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\t// nothing to dispose of\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/XmlConnection.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// XmlConnection handles connections for XML  \n\t/// </summary>\n\tpublic class XmlConnection : IDbConnection\n\t{\n\t\tstring _Connection;\t\t\t\t// the connection string; of format directory=\n\t\tbool bOpen=false;\n\t\tpublic XmlConnection(string conn)\n\t\t{\n\t\t\tConnectionString = conn;\n\t\t}\n\n\t\tinternal bool IsOpen\n\t\t{\n\t\t\tget {return bOpen;}\n\t\t}\n\n\t\t#region IDbConnection Members\n\n\t\tpublic void ChangeDatabase(string databaseName)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ChangeDatabase method not supported.\");\n\t\t}\n\n\t\tpublic IDbTransaction BeginTransaction(System.Data.IsolationLevel il)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"BeginTransaction method not supported.\");\n\t\t}\n\n\t\tIDbTransaction System.Data.IDbConnection.BeginTransaction()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"BeginTransaction method not supported.\");\n\t\t}\n\n\t\tpublic System.Data.ConnectionState State\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"State not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic string ConnectionString\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Connection;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tstring c = value;\n\t\t\t\t// Now parse the connection string;\n\t\t\t\tArray args = c.Split (',');\n\t\t\t\tstring directory=null;\n\t\t\t\tforeach(string arg in args)\n\t\t\t\t{\n\t\t\t\t\tif (arg.Trim().ToLower().StartsWith(\"directory=\"))\t// Only have one type of argument right now\n\t\t\t\t\t\tdirectory = arg.Trim().Split('=').GetValue(1) as string;\n\t\t\t\t}\n\t\t\t\t_Connection = value;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbCommand CreateCommand()\n\t\t{\n\t\t\treturn new XmlCommand(this);\n\t\t}\n\n\t\tpublic void Open()\n\t\t{\n\t\t\tbOpen = true;\n\t\t}\n\n\t\tpublic void Close()\n\t\t{\n\t\t\tbOpen = false;\n\t\t}\n\n\t\tpublic string Database\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn null;\t\t\t// don't really have a database\n\t\t\t}\n\t\t}\n\n\t\tpublic int ConnectionTimeout\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tthis.Close();\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/XmlDataParameter.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// XmlDataParameter\n\t/// </summary>\n\tpublic class XmlDataParameter : BaseDataParameter\n\t{\n\t\tpublic XmlDataParameter():base()\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "DataProviders/XmlDataReader.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Xml.XPath;\nusing System.Data;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.IO;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// Summary description for XmlDataReader.\n\t/// </summary>\n\tpublic class XmlDataReader : IDataReader\n\t{\n\t\tXmlConnection _xconn;\n\t\tXmlCommand _xcmd;\n\t\tSystem.Data.CommandBehavior _behavior;\n\t\t// xpath \n\t\tXPathDocument _xpd;\t\t\t// the document\t\t\n\t\tXPathNavigator _xpn;\t\t// the navigator\n\t\tXPathNodeIterator _xpni;\t// the main iterator\n\t\tXmlNamespaceManager _nsmgr;\t// name space manager\n\t\tListDictionary _NameSpaces;\t\t// names spaces used in xml document\n\n\t\t// column information\n\t\tobject[] _Data;\t\t\t\t// data values of the columns\n\t\tArrayList _Names;\t\t\t\t// names of the columns\n\t\tArrayList _Types;\t\t\t\t// types of the columns\n\n\t\tpublic XmlDataReader(System.Data.CommandBehavior behavior, XmlConnection conn, XmlCommand cmd)\n\t\t{\n\t\t\t_xconn = conn;\n\t\t\t_xcmd = cmd;\n\t\t\t_behavior = behavior;\n\n            // create an iterator to the selected rows\n            if (_xcmd.Url.Trim() == \"\") {\n                //Use an empty XML to allow rendering from memory\n                _xpd = new XPathDocument(new StringReader(\"<empty/>\"));\n            }\n            else {\n                _xpd = new XPathDocument(_xcmd.Url);\n            }\n\t\t\t_xpn =  _xpd.CreateNavigator();\n\t\t\t_xpni =  _xpn.Select(_xcmd.RowsXPath);\t// select the rows\n\t\t\t_NameSpaces = new ListDictionary();\n\t\t\t_Names = new ArrayList();\n\t\t\t_Types = new ArrayList();\n\n\t\t\t// Now determine the actual structure of the row depending on the command\n\t\t\tif (_xcmd.ColumnsXPath != null)\n\t\t\t\tColumnsSpecifiedInit();\t\t\t// xpaths to all columns specified\n\t\t\telse \n\t\t\t{\n\t\t\t\t_xcmd.ColumnsXPath = new ArrayList();\t\t\t// xpath of all columns will simply be the name\n\n\t\t\t\tswitch (_xcmd.Type)\n\t\t\t\t{\n\t\t\t\t\tcase \"both\":\n\t\t\t\t\t\tColumnsAttributes();\n\t\t\t\t\t\tColumnsElements();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"attributes\":\n\t\t\t\t\t\tColumnsAttributes();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"elements\":\n\t\t\t\t\t\tColumnsElements();\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t_Data = new object[_Names.Count];\t\t\t// allocate enough room for data\n\n\t\t\tif (_NameSpaces.Count > 0)\n\t\t\t{\n\t\t\t\t_nsmgr = new XmlNamespaceManager(new NameTable()); \n\t\t\t\tforeach (string nsprefix in _NameSpaces.Keys)\n\t\t\t\t{\n\t\t\t\t\t_nsmgr.AddNamespace(nsprefix, _NameSpaces[nsprefix] as string); // setup namespaces\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t\t_nsmgr = null;\n\t\t}\n\n\t\tvoid ColumnsAttributes()\n\t\t{\n\t\t\t//go to the first row to get info \n\t\t\tXPathNodeIterator temp_xpni = _xpni.Clone();\t// temporary iterator for determining columns\n\t\t\ttemp_xpni.MoveNext();\n\n\t\t\tXPathNodeIterator ni = temp_xpni.Current.Select(\"@*\");\t// select for attributes\n\t\t\twhile (ni.MoveNext()) \n\t\t\t{\n\t\t\t\t_Types.Add(ni.Current.Value.GetType());\n\t\t\t\tAddName(ni.Current.Name);\n\t\t\t\t_xcmd.ColumnsXPath.Add(\"@\" + ni.Current.Name);\n\t\t\t}\n\t\t}\n\n\t\tvoid ColumnsElements()\n\t\t{\n\t\t\t//go to the first row to get info \n\t\t\tXPathNodeIterator temp_xpni = _xpni.Clone();\t// temporary iterator for determining columns\n\t\t\ttemp_xpni.MoveNext();\n\n\t\t\tXPathNodeIterator ni = temp_xpni.Current.Select(\"*\"); \n\t\t\twhile (ni.MoveNext()) \n\t\t\t{\n\t\t\t\t_Types.Add(ni.Current.Value.GetType());\n\t\t\t\tAddName(ni.Current.Name);\n\t\t\t\t_xcmd.ColumnsXPath.Add(ni.Current.Name);\n\t\t\t\tif (ni.Current.NamespaceURI != String.Empty && \n\t\t\t\t\tni.Current.Prefix != String.Empty &&\n\t\t\t\t\t_NameSpaces[ni.Current.Prefix] == null)\n\t\t\t\t{\n\t\t\t\t\t_NameSpaces.Add(ni.Current.Prefix, ni.Current.NamespaceURI);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvoid ColumnsSpecifiedInit()\n\t\t{\n\t\t\tXPathNodeIterator temp_xpni = _xpni.Clone();\t\t\t\t// temporary iterator for determining columns\n\n\t\t\ttemp_xpni.MoveNext ();\n\t\t\tforeach (string colxpath in _xcmd.ColumnsXPath ) \n\t\t\t{\n\t\t\t\tXPathNodeIterator ni = temp_xpni.Current.Select(colxpath); \n\t\t\t\tni.MoveNext ();\n\t\t\t\tif (ni.Count < 1)\n\t\t\t\t{\t// didn't get anything in the first row; this is ok because \n\t\t\t\t\t//   the element might not exist in the first row.\n\t\t\t\t\t_Types.Add(\"\".GetType());\t// assume string\n\t\t\t\t\tAddName(colxpath);\t\t\t// just use the name of the path\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t_Types.Add(ni.Current.Value.GetType());\n\t\t\t\t\tAddName(ni.Current.Name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// adds name to array; ensure name is unique in the table\n\t\tvoid AddName(string name)\n\t\t{\n\t\t\tint ci=0;\n\t\t\tstring wname = name;\t\t\t\n\t\t\twhile (_Names.IndexOf(wname) >= 0)\n\t\t\t{\n\t\t\t\twname = name + \"_\" + (++ci).ToString();\n\t\t\t}\n\t\t\t_Names.Add(wname);\n\t\t}\n\n\t\t#region IDataReader Members\n\n\t\tpublic int RecordsAffected\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\tpublic bool IsClosed\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _xconn.IsOpen;\n\t\t\t}\n\t\t}\n\n\t\tpublic bool NextResult()\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tpublic void Close()\n\t\t{\n\t\t\t_xpd = null;\n\t\t\t_xpn = null;\n\t\t\t_xpni = null;\n\n\t\t\t_Data = null;\n\t\t\t_Names = null;\n\t\t\t_Types = null;\n\t\t}\n\n\t\tpublic bool Read()\n\t\t{\n\t\t\tif (!_xpni.MoveNext())\n\t\t\t\treturn false;\n\n\t\t\t// obtain the data from each column\n\t\t\tint ci=0;\n\t\t\tforeach (string colxpath in _xcmd.ColumnsXPath ) \n\t\t\t{\n\t\t\t\tXPathNodeIterator ni;\n\t\t\t\tif (_nsmgr == null)\n\t\t\t\t\tni = _xpni.Current.Select(colxpath); \n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tXPathExpression xp = _xpni.Current.Compile(colxpath);\n\t\t\t\t\txp.SetContext(_nsmgr);\n\t\t\t\t\tni = _xpni.Current.Select(xp); \n\t\t\t\t}\n\t\t\t\tni.MoveNext ();\n\t\t\t\t_Data[ci++] = ni.Count == 0? null: ni.Current.Value;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic int Depth\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\t// TODO:  Add XmlDataReader.Depth getter implementation\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\tpublic DataTable GetSchemaTable()\n\t\t{\n\t\t\t// TODO:  Add XmlDataReader.GetSchemaTable implementation\n\t\t\treturn null;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tthis.Close();\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDataRecord Members\n\n\t\tpublic int GetInt32(int i)\n\t\t{\n\t\t\treturn Convert.ToInt32(_Data[i]);\n\t\t}\n\n\t\tpublic object this[string name]\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tint ci = this.GetOrdinal(name);\n\t\t\t\treturn _Data[ci];\n\t\t\t}\n\t\t}\n\n\t\tobject System.Data.IDataRecord.this[int i]\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Data[i];\n\t\t\t}\n\t\t}\n\n\t\tpublic object GetValue(int i)\n\t\t{\n\t\t\treturn _Data[i];\n\t\t}\n\n\t\tpublic bool IsDBNull(int i)\n\t\t{\n\t\t\treturn _Data[i] == null;\n\t\t}\n\n\t\tpublic long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetBytes not implemented.\");\n\t\t}\n\n\t\tpublic byte GetByte(int i)\n\t\t{\n\t\t\treturn Convert.ToByte(_Data[i]);\n\t\t}\n\n\t\tpublic Type GetFieldType(int i)\n\t\t{\n\t\t\treturn this._Types[i] as Type;\n\t\t}\n\n\t\tpublic decimal GetDecimal(int i)\n\t\t{\n\t\t\treturn Convert.ToDecimal(_Data[i]);\n\t\t}\n\n\t\tpublic int GetValues(object[] values)\n\t\t{\n\t\t\tint i;\n\t\t\tfor (i=0; i < values.Length; i++)\n\t\t\t{\n\t\t\t\tvalues[i] = i >= _Data.Length? System.DBNull.Value: _Data[i];\n\t\t\t}\n\n\t\t\treturn Math.Min(values.Length, _Data.Length);\n\t\t}\n\n\t\tpublic string GetName(int i)\n\t\t{\n\t\t\treturn _Names[i] as string;\n\t\t}\n\n\t\tpublic int FieldCount\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Data.Length;\n\t\t\t}\n\t\t}\n\n\t\tpublic long GetInt64(int i)\n\t\t{\n\t\t\treturn Convert.ToInt64(_Data[i]);\n\t\t}\n\n\t\tpublic double GetDouble(int i)\n\t\t{\n\t\t\treturn Convert.ToDouble(_Data[i]);\n\t\t}\n\n\t\tpublic bool GetBoolean(int i)\n\t\t{\n\t\t\treturn Convert.ToBoolean(_Data[i]);\n\t\t}\n\n\t\tpublic Guid GetGuid(int i)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetGuid not implemented.\");\n\t\t}\n\n\t\tpublic DateTime GetDateTime(int i)\n\t\t{\n\t\t\treturn Convert.ToDateTime(_Data[i]);\n\t\t}\n\n\t\tpublic int GetOrdinal(string name)\n\t\t{\n\t\t\tint ci=0;\n\t\t\t// do case sensitive lookup\n\t\t\tforeach (string cname in _Names)\n\t\t\t{\n\t\t\t\tif (cname == name)\n\t\t\t\t\treturn ci;\n\t\t\t\tci++;\n\t\t\t}\n\n\t\t\t// do case insensitive lookup\n\t\t\tci=0;\n\t\t\tname = name.ToLower();\n\t\t\tforeach (string cname in _Names)\n\t\t\t{\n\t\t\t\tif (cname.ToLower() == name)\n\t\t\t\t\treturn ci;\n\t\t\t\tci++;\n\t\t\t}\n\n\t\t\tthrow new ArgumentException(string.Format(\"Column '{0}' not known.\", name));\n\t\t}\n\n\t\tpublic string GetDataTypeName(int i)\n\t\t{\n\t\t\tType t = _Types[i] as Type;\n\t\t\treturn t.ToString();\n\t\t}\n\n\t\tpublic float GetFloat(int i)\n\t\t{\n\t\t\treturn Convert.ToSingle(_Data[i]);\n\t\t}\n\n\t\tpublic IDataReader GetData(int i)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetData not implemented.\");\n\t\t}\n\n\t\tpublic long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetChars not implemented.\");\n\t\t}\n\n\t\tpublic string GetString(int i)\n\t\t{\n\t\t\treturn Convert.ToString(_Data[i]);\n\t\t}\n\n\t\tpublic char GetChar(int i)\n\t\t{\n\t\t\treturn Convert.ToChar(_Data[i]);\n\t\t}\n\n\t\tpublic short GetInt16(int i)\n\t\t{\n\t\t\treturn Convert.ToInt16(_Data[i]);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/iTunesCommand.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// iTunesCommand represents the command.  The user is allowed to specify the table needed.\n\t/// </summary>\n\tpublic class iTunesCommand : IDbCommand\n\t{\n\t\tiTunesConnection _xc;\t\t\t// connection we're running under\n\t\tstring _cmd;\t\t\t\t// command to execute\n\t\t// parsed constituents of the command\n\t\tstring _Table;\t\t\t\t// table requested\n\t\tDataParameterCollection _Parameters = new DataParameterCollection();\n\n        public iTunesCommand(iTunesConnection conn)\n\t\t{\n\t\t\t_xc = conn;\n\t\t}\n\n\t\tinternal string Table\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tIDbDataParameter dp= _Parameters[\"Table\"] as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp= _Parameters[\"@Table\"] as IDbDataParameter;\n\t\t\t\t// Then check to see if the Table value is a parameter?\n\t\t\t\tif (dp == null)\n\t\t\t\t\tdp = _Parameters[_Table] as IDbDataParameter;\n\t\t\t\tif (dp != null)\n\t\t\t\t\treturn dp.Value != null? dp.Value.ToString(): _Table;\t// don't pass null; pass existing value\n\t\t\t\treturn _Table;\t// the value must be a constant\n\t\t\t}\n\t\t\tset {_Table = value;}\n\t\t}\n\n\n\t\t#region IDbCommand Members\n\n\t\tpublic void Cancel()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"Cancel not implemented\");\n\t\t}\n\n\t\tpublic void Prepare()\n\t\t{\n\t\t\treturn;\t\t\t// Prepare is a noop\n\t\t}\n\n\t\tpublic System.Data.CommandType CommandType\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandType not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandType not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic IDataReader ExecuteReader(System.Data.CommandBehavior behavior)\n\t\t{\n\t\t\tif (!(behavior == CommandBehavior.SingleResult || \n\t\t\t\t  behavior == CommandBehavior.SchemaOnly))\n\t\t\t\tthrow new ArgumentException(\"ExecuteReader supports SingleResult and SchemaOnly only.\");\n\t\t\treturn new iTunesDataReader(behavior, _xc, this);\n\t\t}\n\n\t\tIDataReader System.Data.IDbCommand.ExecuteReader()\n\t\t{\n\t\t\treturn ExecuteReader(System.Data.CommandBehavior.SingleResult);\n\t\t}\n\n\t\tpublic object ExecuteScalar()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ExecuteScalar not implemented\");\n\t\t}\n\n\t\tpublic int ExecuteNonQuery()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ExecuteNonQuery not implemented\");\n\t\t}\n\n\t\tpublic int CommandTimeout\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"CommandTimeout not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbDataParameter CreateParameter()\n\t\t{\n\t\t\treturn new XmlDataParameter();\n\t\t}\n\n\t\tpublic IDbConnection Connection\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._xc;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Setting Connection not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic System.Data.UpdateRowSource UpdatedRowSource\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"UpdatedRowSource not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"UpdatedRowSource not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic string CommandText\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._cmd;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t// Parse the command string for keyword value pairs separated by ';'\n\t\t\t\tstring[] args = value.Split(';');\n\t\t\t\tstring table=null;\n\t\t\t\tforeach(string arg in args)\n\t\t\t\t{\n\t\t\t\t\tstring[] param = arg.Trim().Split('=');\n\t\t\t\t\tif (param == null || param.Length != 2)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tstring key = param[0].Trim().ToLower();\n\t\t\t\t\tstring val = param[1];\n\t\t\t\t\tswitch (key)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase \"table\":\n\t\t\t\t\t\t\ttable = val;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new ArgumentException(string.Format(\"{0} is an unknown parameter key\", param[0]));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// User must specify both the url and the RowsXPath\n                if (table == null)\n                    table = \"Tracks\";\n\t\t\t\t_cmd = value;\n\t\t\t\t_Table = table;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDataParameterCollection Parameters\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Parameters;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbTransaction Transaction\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Transaction not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Transaction not implemented\");\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\t// nothing to dispose of\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/iTunesConnection.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\nusing System.IO;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// iTunesConnection handles connections for the iTunes XML file\n\t/// </summary>\n\tpublic class iTunesConnection : IDbConnection\n\t{\n\t\tstring _Connection;\t\t\t\t// the connection string; of format directory=\n        string _File;\n\t\tbool bOpen=false;\n        public iTunesConnection(string conn)\n\t\t{\n\t\t\tConnectionString = conn;\n\t\t}\n\n\t\tinternal bool IsOpen\n\t\t{\n\t\t\tget {return bOpen;}\n\t\t}\n\n\t\t#region IDbConnection Members\n\n\t\tpublic void ChangeDatabase(string databaseName)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ChangeDatabase method not supported.\");\n\t\t}\n\n\t\tpublic IDbTransaction BeginTransaction(System.Data.IsolationLevel il)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"BeginTransaction method not supported.\");\n\t\t}\n\n\t\tIDbTransaction System.Data.IDbConnection.BeginTransaction()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"BeginTransaction method not supported.\");\n\t\t}\n\n\t\tpublic System.Data.ConnectionState State\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"State not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic string ConnectionString\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Connection;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tstring c = value;\n\t\t\t\t// Now parse the connection string;\n\t\t\t\tArray args = c.Split (',');\n\t\t\t\t_File=null;\n\t\t\t\tforeach(string arg in args)\n\t\t\t\t{\n\t\t\t\t\tif (arg.Trim().ToLower().StartsWith(\"file=\"))\t// Only have one type of argument right now\n\t\t\t\t\t\t_File = arg.Trim().Split('=').GetValue(1) as string;\n\t\t\t\t}\n\t\t\t\t_Connection = value;\n\t\t\t}\n\t\t}\n\n        public string File\n        {\n            get \n            { \n                if (_File != null)\n                    return _File;\n\n                // Search for the iTunes file; In My Documents/My Music/iTunes/iTunes Music Library.xml\n                string f = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic) +\n                            Path.DirectorySeparatorChar + \"iTunes\" +\n                            Path.DirectorySeparatorChar + \"iTunes Music Library.xml\";\n                return f;\n            }\n        }\n\n\t\tpublic IDbCommand CreateCommand()\n\t\t{\n\t\t\treturn new iTunesCommand(this);\n\t\t}\n\n\t\tpublic void Open()\n\t\t{\n\t\t\tbOpen = true;\n\t\t}\n\n\t\tpublic void Close()\n\t\t{\n\t\t\tbOpen = false;\n\t\t}\n\n\t\tpublic string Database\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn null;\t\t\t// don't really have a database\n\t\t\t}\n\t\t}\n\n\t\tpublic int ConnectionTimeout\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tthis.Close();\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "DataProviders/iTunesDataParameter.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Data;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n\t/// iTunesDataParameter\n\t/// </summary>\n\tpublic class iTunesDataParameter : BaseDataParameter\n\t{\n\t\tpublic iTunesDataParameter():base()\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "DataProviders/iTunesDataReader.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Xml.XPath;\nusing System.Data;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.Collections.Generic;\n\nnamespace Majorsilence.Reporting.Data\n{\n\t/// <summary>\n    /// Summary description for iTunesDataReader.\n\t/// </summary>\n\tpublic class iTunesDataReader : IDataReader\n\t{\n\t\tiTunesConnection _xconn;\n\t\tiTunesCommand _xcmd;\n\t\tSystem.Data.CommandBehavior _behavior;\n\t\t// xpath \n\t\tXPathDocument _xpd;\t\t\t// the document\t\t\n\t\tXPathNavigator _xpn;\t\t// the navigator\n\t\tXPathNodeIterator _xpni;\t// the main iterator\n\t\tXmlNamespaceManager _nsmgr;\t// name space manager\n\t\tListDictionary _NameSpaces;\t\t// names spaces used in xml document\n\n\t\t// column information\n\t\tobject[] _Data;\t\t\t\t// data values of the columns\n        static readonly string[] _Names = new string[] {\n            \"Track_ID\",\n\t\t\t\"Name\",\n\t\t\t\"Artist\",\n\t\t\t\"Composer\",\n\t\t\t\"Album\",\n\t\t\t\"Album Artist\",\n\t\t\t\"Genre\",\n            \"Category\",\n\t\t\t\"Kind\",\n\t\t\t\"Size\",\n\t\t\t\"Total_Time\",\n\t\t\t\"Track_Number\",\n\t\t\t\"Year\",\n\t\t\t\"Date_Modified\",\n\t\t\t\"Date_Added\",\n            \"Beats_Per_Minute\",\n\t\t\t\"Bit_Rate\",\n\t\t\t\"Sample_Rate\",\n\t\t\t\"Comments\",\n\t\t\t\"Skip_Count\",\n\t\t\t\"Skip_Date\",\n\t\t\t\"Artwork_Count\",\n\t\t\t\"Persistent_ID\",\n\t\t\t\"Track_Type\",\n\t\t\t\"Location\",\n\t\t\t\"File_Folder_Count\",\n\t\t\t\"Library_Folder_Count\",\n            \"Has_Video\",\n            \"Movie\",\n            \"Play_Count\",\n            \"Play_Date\",\n            \"Play_Date_UTC\",\n            \"Disc_Number\",\n            \"Disc_Count\",\n            \"Compilation\",\n            \"Track_Count\"\n            \n};\n        // types of all the columns\n        static readonly Type _dttype = DateTime.MinValue.GetType();\t\t// work variable for getting the type\n        static readonly Type _stype = \"\".GetType();\n        static readonly Type _btype = true.GetType();\n        static readonly Type _itype = int.MaxValue.GetType();\n        static readonly Type _ltype = long.MaxValue.GetType();\n        static readonly Type _dtype = Double.MinValue.GetType();\n        static readonly Type[] _Types = new Type[] \n{\n          /*  \"Track_ID\" */ _itype,\n\t\t\t/* Name */ _stype,\n\t\t\t/* Artist */ _stype,\n\t\t\t/* Composer */ _stype,\n\t\t\t/* Album */ _stype,\n\t\t\t/* Album Artist */ _stype,\n\t\t\t/* Genre */ _stype,\n            /* Category */ _stype, \n\t\t\t/* Kind */ _stype,\n\t\t\t/* Size */ _itype,\n\t\t\t/* Total_Time */ _itype,\n\t\t\t/* Track_Number */ _itype,\n\t\t\t/* Year */ _itype,\n\t\t\t/* Date_Modified */ _dttype,\n\t\t\t/* Date_Added */ _dttype,\n            /* Beats_Per_Minute */ _itype,\n\t\t\t/* Bit_Rate */ _itype,\n\t\t\t/* Sample_Rate */ _itype,\n\t\t\t/* Comments */ _stype,\n\t\t\t/* Skip_Count */ _itype,\n\t\t\t/* Skip_Date */ _dttype,\n\t\t\t/* Artwork_Count */ _itype,\n\t\t\t/* Persistent_ID */ _stype,\n\t\t\t/* Track_Type */ _stype,\n\t\t\t/* Location */ _stype,\n\t\t\t/* File_Folder_Count */ _itype,\n\t\t\t/* Library_Folder_Count */ _itype,\n            /* Has_Video */ _btype,\n            /* Movie */ _btype,\n            /* Play_Count */ _itype,\n            /* Play_Date */ _ltype,         /* Play_Date will overflow an integer */\n            /* Play_Date_UTC */ _dttype,\n            /* Disc_Number */ _itype,\n            /* Disc_Count */ _itype,\n            /* Compilation */ _btype,\n            /* Track_Count */ _itype\n};\n\n        public iTunesDataReader(System.Data.CommandBehavior behavior, iTunesConnection conn, iTunesCommand cmd)\n\t\t{\n\t\t\t_xconn = conn;\n\t\t\t_xcmd = cmd;\n\t\t\t_behavior = behavior;\n\n            _Data = new object[_Names.Length];\t\t\t// allocate enough room for data\n\n            if (behavior == CommandBehavior.SchemaOnly)\n                return;\n\n            // create an iterator to the selected rows\n            _xpd = new XPathDocument(_xconn.File);\n            _xpn = _xpd.CreateNavigator();\n            _xpni = _xpn.Select(\"/plist/dict\");\t// select the rows\n            _NameSpaces = new ListDictionary();\n\n\t\t\t// Now determine the actual structure of the row depending on the command\n\t\t\tswitch (_xcmd.Table)\n\t\t\t{\n\t\t\t\tcase \"Tracks\":\n                default:\n                    _xpni = GetTracksColumns();\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (_NameSpaces.Count > 0)\n\t\t\t{\n\t\t\t\t_nsmgr = new XmlNamespaceManager(new NameTable()); \n\t\t\t\tforeach (string nsprefix in _NameSpaces.Keys)\n\t\t\t\t{\n\t\t\t\t\t_nsmgr.AddNamespace(nsprefix, _NameSpaces[nsprefix] as string); // setup namespaces\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t\t_nsmgr = null;\n\t\t}\n\n        XPathNodeIterator GetTracksColumns()\n\t\t{\n            /*  this routine figures out based on first row in file; the problem is not\n             * all rows contain all the fields.   Now fields are hard coded. \n            XPathNodeIterator ti = PositionToTracks();\n            while (ti.MoveNext())\n            {\n                if (ti.Current.Name != \"key\")\n                    continue;\n                if (AddName(ti.Current.Value))  // when duplicate we've gone too far\n                    break;\n                ti.MoveNext();\n                Type t;\n                switch (ti.Current.Name)\n                {\n                    case \"integer\":\n                        t = long.MaxValue.GetType();\n                        break;\n                    case \"string\":\n                        t = string.Empty.GetType();\n                        break;\n                    case \"real\":\n                        t = Double.MaxValue.GetType();\n                        break;\n                    case \"true\":\n                    case \"false\":\n                        t = true.GetType();\n                        break;\n                    case \"date\":\n                        t = DateTime.MaxValue.GetType();\n                        break;\n                    default:\n                        t = string.Empty.GetType();\n                        break;\n                }\n                _Types.Add(t);\n            }\n            _Names.TrimExcess();        // no longer need extra space\n             */ \n            return PositionToTracks();  // return iterator to first row\n\t\t}\n\n        XPathNodeIterator PositionToTracks()\n        {\n            //go to the first row to get info \n            XPathNodeIterator temp_xpni = _xpni.Clone();\t// temporary iterator for determining columns\n            temp_xpni.MoveNext();\n\n            XPathNodeIterator ni = temp_xpni.Current.Select(\"*\");\n            while (ni.MoveNext())\n            {\n                if (ni.Current.Name != \"key\")\n                    continue;\n                if (ni.Current.Value == \"Tracks\")\n                {\n                    ni.MoveNext();\n                    if (ni.Current.Name != \"dict\")  // next item should be \"dict\"\n                        break;\n                    string sel = \"dict/*\";\n                    XPathNodeIterator ti = ni.Current.Select(sel);\n                    return ti;\n                }\n            }\n            return null;\n        }\n\n\t\t// adds name to array; return true when duplicate\n        //bool AddName(string name)\n        //{\n        //    string wname = name.Replace(' ', '_');\n        //    if (_Names.ContainsKey(wname))\n        //        return true;\n\n        //    _Names.Add(wname, _Names.Count);\n        //    return false;\n        //}\n\n\t\t#region IDataReader Members\n\n\t\tpublic int RecordsAffected\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\tpublic bool IsClosed\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _xconn.IsOpen;\n\t\t\t}\n\t\t}\n\n\t\tpublic bool NextResult()\n\t\t{\n            return false;\n\t\t}\n\n\t\tpublic void Close()\n\t\t{\n\t\t\t_xpd = null;\n\t\t\t_xpn = null;\n\t\t\t_xpni = null;\n\n\t\t\t_Data = null;\n\t\t\t\n\t\t}\n\n\t\tpublic bool Read()\n\t\t{\n            if (_xpni == null)\n                return false;\n\n            XPathNodeIterator ti = _xpni;\n\n            Hashtable ht = new Hashtable(_Names.Length);\n            \n            // clear out previous values;  previous row might have values this row doesn't\n            for (int i = 0; i < _Data.Length; i++)\n                _Data[i] = null;\n\n            XPathNodeIterator save_ti = ti.Clone();\n            bool rc = false;\n            while (ti.MoveNext())\n            {\n                if (ti.Current.Name != \"key\")\n                    continue;\n                string name = ti.Current.Value.Replace(' ', '_');\n                // we only know we're on the next row when a column repeats\n                if (ht.Contains(name))\n                {\n                    break;\n                }\n                ht.Add(name, name);\n\n                int ix;\n                try\n                {\n                    ix = this.GetOrdinal(name);\n                    rc = true;                      // we know we got at least one column value\n                }\n                catch   // this isn't a know column; skip it\n                {\n                    ti.MoveNext();\n                    save_ti = ti.Clone();\n                    continue;                   // but keep trying\n                }\n\n\n                ti.MoveNext();\n                save_ti = ti.Clone();\n                try\n                {\n                    switch (ti.Current.Name)\n                    {\n                        case \"integer\":\n                            if (_Names[ix] == \"Play_Date\")  // will overflow a long\n                                _Data[ix] = ti.Current.ValueAsLong;\n                            else\n                                _Data[ix] = ti.Current.ValueAsInt;\n                            break;\n                        case \"string\":\n                            _Data[ix] = ti.Current.Value;\n                            break;\n                        case \"real\":\n                            _Data[ix] = ti.Current.ValueAsDouble;\n                            break;\n                        case \"true\":\n                            _Data[ix] = true;\n                            break;\n                        case \"false\":\n                            _Data[ix] = false;\n                            break;\n                        case \"date\":\n                            _Data[ix] = ti.Current.ValueAsDateTime;\n                            break;\n                        default:\n                            _Data[ix] = ti.Current.Value;\n                            break;\n                    }\n                }\n                catch { _Data[ix] = null; }\n            }\n\n            _xpni = save_ti;\n            return rc;\n\t\t}\n\n\t\tpublic int Depth\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\t// TODO:  Add XmlDataReader.Depth getter implementation\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\n\t\tpublic DataTable GetSchemaTable()\n\t\t{\n\t\t\t// TODO:  Add XmlDataReader.GetSchemaTable implementation\n\t\t\treturn null;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tthis.Close();\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDataRecord Members\n\n\t\tpublic int GetInt32(int i)\n\t\t{\n\t\t\treturn Convert.ToInt32(_Data[i]);\n\t\t}\n\n\t\tpublic object this[string name]\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tint ci = this.GetOrdinal(name);\n\t\t\t\treturn _Data[ci];\n\t\t\t}\n\t\t}\n\n\t\tobject System.Data.IDataRecord.this[int i]\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Data[i];\n\t\t\t}\n\t\t}\n\n\t\tpublic object GetValue(int i)\n\t\t{\n\t\t\treturn _Data[i];\n\t\t}\n\n\t\tpublic bool IsDBNull(int i)\n\t\t{\n\t\t\treturn _Data[i] == null;\n\t\t}\n\n\t\tpublic long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetBytes not implemented.\");\n\t\t}\n\n\t\tpublic byte GetByte(int i)\n\t\t{\n\t\t\treturn Convert.ToByte(_Data[i]);\n\t\t}\n\n\t\tpublic Type GetFieldType(int i)\n\t\t{\n\t\t\treturn _Types[i];\n\t\t}\n\n\t\tpublic decimal GetDecimal(int i)\n\t\t{\n\t\t\treturn Convert.ToDecimal(_Data[i]);\n\t\t}\n\n\t\tpublic int GetValues(object[] values)\n\t\t{\n\t\t\tint i;\n\t\t\tfor (i=0; i < values.Length; i++)\n\t\t\t{\n\t\t\t\tvalues[i] = i >= _Data.Length? System.DBNull.Value: _Data[i];\n\t\t\t}\n\n\t\t\treturn Math.Min(values.Length, _Data.Length);\n\t\t}\n\n\t\tpublic string GetName(int i)\n\t\t{\n            return _Names[i];\n\t\t}\n\n\t\tpublic int FieldCount\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Data.Length;\n\t\t\t}\n\t\t}\n\n\t\tpublic long GetInt64(int i)\n\t\t{\n\t\t\treturn Convert.ToInt64(_Data[i]);\n\t\t}\n\n\t\tpublic double GetDouble(int i)\n\t\t{\n\t\t\treturn Convert.ToDouble(_Data[i]);\n\t\t}\n\n\t\tpublic bool GetBoolean(int i)\n\t\t{\n\t\t\treturn Convert.ToBoolean(_Data[i]);\n\t\t}\n\n\t\tpublic Guid GetGuid(int i)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetGuid not implemented.\");\n\t\t}\n\n\t\tpublic DateTime GetDateTime(int i)\n\t\t{\n\t\t\treturn Convert.ToDateTime(_Data[i]);\n\t\t}\n\n\t\tpublic int GetOrdinal(string name)\n\t\t{\n\t\t\t// do case sensitive lookup\n            int ci = 0;\n            foreach (string cname in _Names)\n            {\n                if (cname == name)\n                    return ci;\n                ci++;\n            }\n\n\t\t\t// do case insensitive lookup\n\t\t\tci=0;\n\t\t\tforeach (string cname in _Names)\n\t\t\t{\n\t\t\t\tif (string.Compare(cname, name, true) == 0)\n\t\t\t\t\treturn ci;\n\t\t\t\tci++;\n\t\t\t}\n\n\t\t\tthrow new ArgumentException(string.Format(\"Column '{0}' not known.\", name));\n\t\t}\n\n\t\tpublic string GetDataTypeName(int i)\n\t\t{\n\t\t\tType t = _Types[i] as Type;\n\t\t\treturn t.ToString();\n\t\t}\n\n\t\tpublic float GetFloat(int i)\n\t\t{\n\t\t\treturn Convert.ToSingle(_Data[i]);\n\t\t}\n\n\t\tpublic IDataReader GetData(int i)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetData not implemented.\");\n\t\t}\n\n\t\tpublic long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"GetChars not implemented.\");\n\t\t}\n\n\t\tpublic string GetString(int i)\n\t\t{\n\t\t\treturn Convert.ToString(_Data[i]);\n\t\t}\n\n\t\tpublic char GetChar(int i)\n\t\t{\n\t\t\treturn Convert.ToChar(_Data[i]);\n\t\t}\n\n\t\tpublic short GetInt16(int i)\n\t\t{\n\t\t\treturn Convert.ToInt16(_Data[i]);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "Directory.Build.props",
    "content": "<Project>\n  <PropertyGroup Condition=\"'$(Configuration)' == 'Release-DrawingCompat' Or '$(Configuration)' == 'Debug-DrawingCompat'\">\n    <DefineConstants>DRAWINGCOMPAT</DefineConstants>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\"'$(Configuration)' == 'Release-DrawingCompat' Or '$(Configuration)' == 'Release'\">\n    <Optimize>True</Optimize>\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <Deterministic>true</Deterministic>\n    <GenerateAssemblyInfo>true</GenerateAssemblyInfo>\n    <RepositoryUrl>https://github.com/majorsilence/My-FyiReporting</RepositoryUrl>\n    <AssemblyVersion>5.0.18</AssemblyVersion>\n    <FileVersion>5.0.18</FileVersion>\n    <Version>5.0.18</Version>\n    <GenerateAssemblyInfo>true</GenerateAssemblyInfo>\n    <Product>Majorsilence Reporting</Product>\n    <Copyright>Copyright © 2004-2008  fyiReporting Software, LLC, Majorsilence Reporting Devs 2026</Copyright>\n    <LangVersion>latest</LangVersion>\n    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>\n    <IncludeSymbols>true</IncludeSymbols>\n    <SymbolPackageFormat>snupkg</SymbolPackageFormat>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "Directory.Packages.props",
    "content": "<Project>\n  <PropertyGroup>\n    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>\n    <CentralPackageTransitivePinningEnabled>false</CentralPackageTransitivePinningEnabled>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageVersion Include=\"Avalonia.Themes.Fluent\" Version=\"11.3.12\" />\n    <PackageVersion Include=\"BarcodeLib\" Version=\"3.1.5\" />\n    <PackageVersion Include=\"BenchmarkDotNet\" Version=\"0.15.2\" />\n    <PackageVersion Include=\"DocumentFormat.OpenXml\" Version=\"3.2.0\" />\n    <PackageVersion Include=\"dotConnect.Express.for.PostgreSQL\" Version=\"8.3.10\" />\n    <PackageVersion Include=\"iTextSharp.LGPLv2.Core\" Version=\"3.7.4\" />\n    <PackageVersion Include=\"Majorsilence.Reporting.RdlViewer\" Version=\"5.0.18\" />\n    <PackageVersion Include=\"Majorsilence.Reporting.RdlEngine\" Version=\"5.0.18\" />\n    <PackageVersion Include=\"Majorsilence.Reporting.RdlCri\" Version=\"5.0.18\" />\n    <PackageVersion Include=\"Majorsilence.Reporting.ReportDesigner\" Version=\"5.0.18\" />\n    <PackageVersion Include=\"Microsoft.CSharp\" Version=\"4.5.0\" />\n    <PackageVersion Include=\"Microsoft.Data.Edm\" Version=\"5.8.5\" />\n    <PackageVersion Include=\"Microsoft.Data.OData\" Version=\"5.8.5\" />\n    <PackageVersion Include=\"Microsoft.Data.Services.Client\" Version=\"5.8.5\" />\n    <PackageVersion Include=\"Microsoft.Data.Sqlite\" Version=\"8.0.4\" />\n    <PackageVersion Include=\"Microsoft.Data.SqlClient\" Version=\"5.2.2\" />\n    <PackageVersion Include=\"Microsoft.WindowsAzure.ConfigurationManager\" Version=\"1.8.0\" />\n    <PackageVersion Include=\"MySql.Data\" Version=\"9.2.0\" />\n    <PackageVersion Include=\"Npgsql\" Version=\"8.0.7\" />\n    <PackageVersion Include=\"NPOI\" Version=\"2.7.4\" />\n    <PackageVersion Include=\"NUnit\" Version=\"4.4.0\" />\n    <PackageVersion Include=\"NUnit3TestAdapter\" Version=\"5.1.0\" />\n    <PackageVersion Include=\"PdfPig\" Version=\"0.1.11\" />\n    <PackageVersion Include=\"SharpZipLib\" Version=\"1.4.2\" />\n    <PackageVersion Include=\"SkiaSharp\" Version=\"3.119.0\" />\n    <PackageVersion Include=\"SkiaSharp.NativeAssets.Linux\" Version=\"3.119.0\" />\n    <PackageVersion Include=\"System.Data.DataSetExtensions\" Version=\"4.5.0\" />\n    <PackageVersion Include=\"System.Resources.Extensions\" Version=\"8.0.0\" />\n    <PackageVersion Include=\"System.Spatial\" Version=\"5.8.5\" />\n    <PackageVersion Include=\"System.Text.Json\" Version=\"9.0.0\" />\n    <PackageVersion Include=\"WindowsAzure.Storage\" Version=\"4.3.0\" />\n    <PackageVersion Include=\"ZXing.Net\" Version=\"0.16.10\" />\n    <PackageVersion Include=\"Microsoft.NET.Test.Sdk\" Version=\"17.13.0\" />\n    <PackageVersion Include=\"coverlet.collector\" Version=\"6.0.4\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageVersion>\n    <PackageVersion Include=\"GtkSharp\" Version=\"3.24.24.95\" />\n    <PackageVersion Include=\"Mono.Posix\" Version=\"7.1.0-final.1.21458.1\" />\n    <PackageVersion Include=\"Microsoft.AspNetCore.SystemWebAdapters\" Version=\"1.3.2\" />\n    <PackageVersion Include=\"ZXing.Net.Bindings.Windows.Compatibility\" Version=\"0.16.13\" />\n    <PackageVersion Include=\"ZXing.Net.Bindings.SkiaSharp\" Version=\"0.16.21\" />\n    <PackageVersion Include=\"ZKWeb.System.Drawing\" Version=\"4.0.1\" />\n    <PackageVersion Include=\"System.Drawing.Common\" Version=\"8.0.4\" />\n    <PackageVersion Include=\"jacobslusser.ScintillaNET\" Version=\"3.6.3\" />\n    <PackageVersion Include=\"fernandreu.ScintillaNET\" Version=\"4.2.0\" />\n    <PackageVersion Include=\"System.CodeDom\" Version=\"8.0.0\" />\n    <PackageVersion Include=\"System.Data.Odbc\" Version=\"8.0.0\" />\n    <PackageVersion Include=\"System.Data.OleDb\" Version=\"8.0.0\" />\n    <PackageVersion Include=\"System.Data.SqlClient\" Version=\"4.8.6\" />\n    <PackageVersion Include=\"Avalonia\" Version=\"11.3.12\" />\n    <PackageVersion Include=\"Avalonia.Desktop\" Version=\"11.3.12\" />\n    <PackageVersion Include=\"Avalonia.Diagnostics\" Version=\"11.3.12\" />\n    <PackageVersion Include=\"XamlNameReferenceGenerator\" Version=\"1.3.4\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "EncryptionProvider/EncryptionProvider.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\t<PropertyGroup>\n\t\t<OutputType>Library</OutputType>\n\t\t<UseWindowsForms>true</UseWindowsForms>\n\t\t<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>\n\t\t<GeneratePackageOnBuild>True</GeneratePackageOnBuild>\n\t\t<AssemblyTitle>EncryptionProvider</AssemblyTitle>\n\t\t<PackageId>Majorsilence.Reporting.EncryptionProvider</PackageId>\n\t\t<Configurations>Debug;Release;Debug-DrawingCompat</Configurations>\n\t\t<TargetFrameworks>net48;net8.0-windows;net10.0-windows</TargetFrameworks>\n\t\t<WarningsAsErrors>4014</WarningsAsErrors>\n\t</PropertyGroup>\n\t<ItemGroup>\n\t\t<PackageReference Include=\"System.Data.DataSetExtensions\" />\n\t</ItemGroup>\n</Project>"
  },
  {
    "path": "EncryptionProvider/Prompt.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing EncryptionProvider.Properties;\n\nnamespace EncryptionProvider\n{\n    public static class Prompt\n    {\n        public static string ShowDialog(string text, string caption)\n        {\n            Form prompt = new Form();\n            prompt.Width = 500;\n            prompt.Height = 200;\n            prompt.FormBorderStyle = FormBorderStyle.FixedDialog;\n            prompt.Text = caption;\n            \n            Label textLabel = new Label() {Left = 50, Top = 20, Width = 400, Height = 110, Text = text};\n            TextBox textBox = new TextBox() {Left = 50, Top = 100, Width = 400};\n            Button confirmation = new Button()\n            {\n                Text = Resources.Prompt_ShowDialog_OK,\n                Left = 350,\n                Width = 100,\n                Top = 120\n            };\n            confirmation.Click += (sender, e) => { prompt.Close(); };\n            prompt.Controls.Add(textBox);\n            prompt.Controls.Add(confirmation);\n            prompt.Controls.Add(textLabel);\n            prompt.AcceptButton = confirmation;\n            prompt.ShowDialog();\n            prompt.TopMost = true;\n\n\n            Screen screen = Screen.FromControl(prompt);\n\n            Rectangle workingArea = screen.WorkingArea;\n            prompt.Location = new Point()\n            {\n                X = Math.Max(workingArea.X, workingArea.X + (workingArea.Width - prompt.Width) / 2),\n                Y = Math.Max(workingArea.Y, workingArea.Y + (workingArea.Height - prompt.Height) / 3)\n            };\n            prompt.StartPosition = FormStartPosition.Manual;\n\n\n\n            return textBox.Text;\n        }\n\n       \n            \n    }\n}\n"
  },
  {
    "path": "EncryptionProvider/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace EncryptionProvider.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"EncryptionProvider.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to OK.\n        /// </summary>\n        internal static string Prompt_ShowDialog_OK {\n            get {\n                return ResourceManager.GetString(\"Prompt_ShowDialog_OK\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "EncryptionProvider/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Prompt_ShowDialog_OK\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n</root>"
  },
  {
    "path": "EncryptionProvider/String/StringEncryption.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Linq;\nusing System.Security.Cryptography;\nusing System.Text;\n\n\nnamespace EncryptionProvider.String\n{\n    public class StringEncryption\n    {\n        private readonly Random random;\n        private readonly byte[] key;\n        private readonly Aes aes;\n        private readonly UTF8Encoding encoder;\n\n        public StringEncryption(string pass)\n        {\n            //make sure that the password contains base 64 characters ONLY\n            string codes = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n            StringBuilder sb = new StringBuilder();\n            foreach (char c in pass)\n            {\n                if (codes.Contains(c))\n                {\n                    sb.Append(c);\n                }\n                else\n                {\n                    sb.Append(\"+\");\n                }\n            }\n\n            //make sure that the length of the password is divisible by 4\n            int padding = sb.Length % 4;\n            if (padding > 0)\n            {\n                for (int i = 4; i > padding; i--)\n                {\n                    sb = sb.Append(Convert.ToString(i));\n                }\n            }\n\n            this.random = new Random();\n            this.aes = Aes.Create();\n            this.encoder = new UTF8Encoding();\n            this.key = Convert.FromBase64String(sb.ToString());\n        }\n\n        public string Encrypt(string unencrypted)\n        {\n            var vector = new byte[16];\n            this.random.NextBytes(vector);\n            var cryptogram = vector.Concat(this.Encrypt(this.encoder.GetBytes(unencrypted), vector));\n            return Convert.ToBase64String(cryptogram.ToArray());\n        }\n\n        public string Decrypt(string encrypted)\n        {\n            var cryptogram = Convert.FromBase64String(encrypted);\n            if (cryptogram.Length < 17)\n            {\n                throw new ArgumentException(\"Not a valid encrypted string\", \"encrypted\");\n            }\n\n            var vector = cryptogram.Take(16).ToArray();\n            var buffer = cryptogram.Skip(16).ToArray();\n            return this.encoder.GetString(this.Decrypt(buffer, vector));\n        }\n\n        private byte[] Encrypt(byte[] buffer, byte[] vector)\n        {\n            var encryptor = this.aes.CreateEncryptor(this.key, vector);\n            return this.Transform(buffer, encryptor);\n        }\n\n        private byte[] Decrypt(byte[] buffer, byte[] vector)\n        {\n            var decryptor = this.aes.CreateDecryptor(this.key, vector);\n            return this.Transform(buffer, decryptor);\n        }\n\n        private byte[] Transform(byte[] buffer, ICryptoTransform transform)\n        {\n            var stream = new MemoryStream();\n            using (var cs = new CryptoStream(stream, transform, CryptoStreamMode.Write))\n            {\n                cs.Write(buffer, 0, buffer.Length);\n            }\n\n            return stream.ToArray();\n        }\n    }\n}\n"
  },
  {
    "path": "Examples/.editorconfig",
    "content": "# Remove the line below if you want to inherit .editorconfig settings from higher directories\nroot = true\n\n# Visual Basic files\n[*.vb]\n\n#### Core EditorConfig Options ####\n\n# Indentation and spacing\nindent_size = 4\nindent_style = space\ntab_width = 4\n\n# New line preferences\nend_of_line = crlf\ninsert_final_newline = false\n\n#### .NET Code Actions ####\n\n# Type members\ndotnet_hide_advanced_members = true\ndotnet_member_insertion_location = with_other_members_of_the_same_kind\ndotnet_property_generation_behavior = prefer_throwing_properties\n\n# Symbol search\ndotnet_search_reference_assemblies = true\n\n#### .NET Coding Conventions ####\n\n# Organize usings\ndotnet_separate_import_directive_groups = false\ndotnet_sort_system_directives_first = true\nfile_header_template = unset\n\n# this. and Me. preferences\ndotnet_style_qualification_for_event = false\ndotnet_style_qualification_for_field = false\ndotnet_style_qualification_for_method = false\ndotnet_style_qualification_for_property = false\n\n# Language keywords vs BCL types preferences\ndotnet_style_predefined_type_for_locals_parameters_members = true\ndotnet_style_predefined_type_for_member_access = true\n\n# Parentheses preferences\ndotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity\ndotnet_style_parentheses_in_other_binary_operators = always_for_clarity\ndotnet_style_parentheses_in_other_operators = never_if_unnecessary\ndotnet_style_parentheses_in_relational_binary_operators = always_for_clarity\n\n# Modifier preferences\ndotnet_style_require_accessibility_modifiers = for_non_interface_members\n\n# Expression-level preferences\ndotnet_prefer_system_hash_code = true\ndotnet_style_coalesce_expression = true\ndotnet_style_collection_initializer = true\ndotnet_style_explicit_tuple_names = true\ndotnet_style_namespace_match_folder = true\ndotnet_style_null_propagation = true\ndotnet_style_object_initializer = true\ndotnet_style_operator_placement_when_wrapping = beginning_of_line\ndotnet_style_prefer_auto_properties = true\ndotnet_style_prefer_collection_expression = when_types_loosely_match\ndotnet_style_prefer_compound_assignment = true\ndotnet_style_prefer_conditional_expression_over_assignment = true\ndotnet_style_prefer_conditional_expression_over_return = true\ndotnet_style_prefer_foreach_explicit_cast_in_source = when_strongly_typed\ndotnet_style_prefer_inferred_anonymous_type_member_names = true\ndotnet_style_prefer_inferred_tuple_names = true\ndotnet_style_prefer_is_null_check_over_reference_equality_method = true\ndotnet_style_prefer_simplified_boolean_expressions = true\ndotnet_style_prefer_simplified_interpolation = true\n\n# Field preferences\ndotnet_style_readonly_field = true\n\n# Parameter preferences\ndotnet_code_quality_unused_parameters = all\n\n# Suppression preferences\ndotnet_remove_unnecessary_suppression_exclusions = none\n\n# New line preferences\ndotnet_style_allow_multiple_blank_lines_experimental = true\ndotnet_style_allow_statement_immediately_after_block_experimental = true\n\n#### VB Coding Conventions ####\n\n# Modifier preferences\nvisual_basic_preferred_modifier_order = partial,default,private,protected,public,friend,notoverridable,overridable,mustoverride,overloads,overrides,mustinherit,notinheritable,static,shared,shadows,readonly,writeonly,dim,const,withevents,widening,narrowing,custom,async,iterator\n\n# Expression-level preferences\nvisual_basic_style_prefer_isnot_expression = true\nvisual_basic_style_prefer_simplified_object_creation = true\nvisual_basic_style_unused_value_assignment_preference = unused_local_variable\nvisual_basic_style_unused_value_expression_statement_preference = unused_local_variable\n\n#### Naming styles ####\n\n# Naming rules\n\ndotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion\ndotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface\ndotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i\n\ndotnet_naming_rule.types_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.types_should_be_pascal_case.symbols = types\ndotnet_naming_rule.types_should_be_pascal_case.style = pascal_case\n\ndotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members\ndotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case\n\n# Symbol specifications\n\ndotnet_naming_symbols.interface.applicable_kinds = interface\ndotnet_naming_symbols.interface.applicable_accessibilities = public, friend, private, protected, protected_friend, private_protected\ndotnet_naming_symbols.interface.required_modifiers = \n\ndotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum\ndotnet_naming_symbols.types.applicable_accessibilities = public, friend, private, protected, protected_friend, private_protected\ndotnet_naming_symbols.types.required_modifiers = \n\ndotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method\ndotnet_naming_symbols.non_field_members.applicable_accessibilities = public, friend, private, protected, protected_friend, private_protected\ndotnet_naming_symbols.non_field_members.required_modifiers = \n\n# Naming styles\n\ndotnet_naming_style.pascal_case.required_prefix = \ndotnet_naming_style.pascal_case.required_suffix = \ndotnet_naming_style.pascal_case.word_separator = \ndotnet_naming_style.pascal_case.capitalization = pascal_case\n\ndotnet_naming_style.begins_with_i.required_prefix = I\ndotnet_naming_style.begins_with_i.required_suffix = \ndotnet_naming_style.begins_with_i.word_separator = \ndotnet_naming_style.begins_with_i.capitalization = pascal_case\n\n# CA2000: Dispose objects before losing scope\n#dotnet_diagnostic.CA2000.severity = warning\n\n# CA2007: Do not directly await a Task without calling ConfigureAwait\n#dotnet_diagnostic.CA2007.severity = warning\n\n# CA4014: async code not awaited.  See https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-messages/cs4014\ndotnet_diagnostic.CA4014.severity = error\n"
  },
  {
    "path": "Examples/Designer.xsd",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?> \n<xsd:schema \ntargetNamespace=\"http://www.fyireporting.com/schemas\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" \nxmlns=\"http://www.fyireporting.com/schemas\" elementFormDefault=\"qualified\">\n\n<xsd:annotation>\n<xsd:documentation>The following schema for fyiReporting Project RDL describes the extensions to the Report Definition Language (RDL) for defining reports. fyiReporting does not make any representation or warranty regarding the schema or any product or item developed based on the schema. The schema is provided to you on an AS IS basis. fyiReporting disclaims all express, implied and statutory warranties, including but not limited to the implied warranties of merchantability, fitness for a particular purpose, and freedom from infringement. Without limiting the generality of the foregoing, fyiReporting does not make any warranty of any kind that any item developed based on the schema, or any portion of the schema, will not infringe any copyright, patent, trade secret, or other intellectual property right of any person or entity in any country. It is your responsibility to seek licenses for such intellectual property rights where appropriate. FYIREPORTING SHALL NOT BE LIABLE FOR ANY DAMAGES OF ANY KIND ARISING OUT OF OR IN CONNECTION WITH THE USE OF THE SCHEMA, INCLUDING WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL (INCLUDING ANY LOST PROFITS), PUNITIVE OR SPECIAL DAMAGES, WHETHER OR NOT MICROSOFT HAS BEEN ADVISED OF SUCH DAMAGES. (c) fyiReportin Software, LLC. All rights reserved.</xsd:documentation> \n</xsd:annotation>\n\n<xsd:element name=\"Rows\">\n  <xsd:complexType>\n  <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n  <xsd:element name=\"Row\" type=\"RowType\" /> \n  <xsd:any namespace=\"##other\" processContents=\"skip\" /> \n  </xsd:choice>\n  <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\" /> \n  </xsd:complexType>\n</xsd:element>\n<xsd:complexType name=\"RowType\">\n  <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n  <xsd:any namespace=\"##other\" processContents=\"skip\" /> \n  </xsd:choice>\n  <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\" /> \n</xsd:complexType>\n<xsd:element name=\"CanOmit\">\n  <xsd:extension base=\"xsd:string\"/>\n  <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\" /> \n</xsd:element>\n</xsd:schema>\n"
  },
  {
    "path": "Examples/Examples/ChartExampleArea.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>fyiReporting Software, LLC</Author>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n      </Query>\n      <Fields>\n        <Field Name=\"Category\">\n          <DataField>Category</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Year\">\n          <DataField>Year</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Sales\">\n          <DataField>Sales</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <Rows File=\"SalesData.xml\" />\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>0.0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>6 in</Height>\n    <ReportItems>\n      <Chart Name=\"area_chart\">\n        <Height>5.25 in</Height>\n        <Width>7.5 in</Width>\n        <Style>\n          <BackgroundColor>LightGrey</BackgroundColor>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Legend>\n          <Visible>true</Visible>\n          <Style>\n            <BackgroundColor>LightGreen</BackgroundColor>\n            <WritingMode>lr-tb</WritingMode>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BorderWidth>\n              <Default>1pt</Default>\n            </BorderWidth>\n            <PaddingLeft>0.25 in</PaddingLeft>\n            <TextAlign>Left</TextAlign>\n          </Style>\n          <Position>RightCenter</Position>\n          <Layout>Column</Layout>\n        </Legend>\n        <Palette>Default</Palette>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n                <DataLabel>\n                  <Style>\n                    <Format>c</Format>\n                  </Style>\n                </DataLabel>\n                <Marker />\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <CategoryAxis>\n          <Axis>\n            <MajorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <MajorInterval>1</MajorInterval>\n            <MinorInterval>1</MinorInterval>\n            <Margin>true</Margin>\n            <Visible>true</Visible>\n            <Scalar>true</Scalar>\n            <Title>\n              <Caption>Categories</Caption>\n              <Style>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n              </Style>\n            </Title>\n            <Style>\n              <FontWeight>Bolder</FontWeight>\n              <FontSize>15pt</FontSize>\n              <FontStyle>Italic</FontStyle>\n            </Style>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </CategoryAxis>\n        <DataSetName>Data</DataSetName>\n        <Type>Area</Type>\n        <Top>12.9pt</Top>\n        <PageBreakAtEnd>true</PageBreakAtEnd>\n        <Title>\n          <Caption>Sales by Category</Caption>\n          <Style>\n            <WritingMode>rl-tb</WritingMode>\n            <FontWeight>Bolder</FontWeight>\n            <FontSize>20pt</FontSize>\n            <FontStyle>Normal</FontStyle>\n          </Style>\n        </Title>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"area_chart_CategoryGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"column_chart_SeriesGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Category.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <Subtype>Plain</Subtype>\n        <PlotArea>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BackgroundColor>LightBlue</BackgroundColor>\n          </Style>\n        </PlotArea>\n        <ValueAxis>\n          <Axis>\n            <Title>\n              <Caption>Values</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n              </Style>\n            </Title>\n            <Style>\n              <Format>$#,##0</Format>\n            </Style>\n            <MajorGridLines>\n              <ShowGridLines>true</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Default>1pt</Default>\n                </BorderWidth>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Visible>true</Visible>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </ValueAxis>\n        <Left>13.0pt</Left>\n      </Chart>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>8in</Width>\n  <PageWidth>8.5in</PageWidth>\n  <PageHeight>11in</PageHeight>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/ChartExampleAreaPercentStacked.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>fyiReporting Software, LLC</Author>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n      </Query>\n      <Fields>\n        <Field Name=\"Category\">\n          <DataField>Category</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Year\">\n          <DataField>Year</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Sales\">\n          <DataField>Sales</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <Rows File=\"SalesData.xml\" />\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>0.0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>6 in</Height>\n    <ReportItems>\n      <Matrix Name=\"Matrix1\">\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor>\n            <Default>blue</Default>\n          </BorderColor>\n          <BackgroundColor>yellow</BackgroundColor>\n        </Style>\n        <Corner>\n          <ReportItems>\n            <Textbox Name=\"Corner\">\n              <Value>Year\\Category</Value>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Left>0pt</Left>\n                  <Right>1pt</Right>\n                  <Top>0pt</Top>\n                  <Bottom>1pt</Bottom>\n                </BorderWidth>\n                <FontWeight>bold</FontWeight>\n              </Style>\n            </Textbox>\n          </ReportItems>\n        </Corner>\n        <ColumnGroupings>\n          <ColumnGrouping>\n            <Height>26.0pt</Height>\n            <DynamicColumns>\n              <Grouping Name=\"DynamicColumnsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Category\">\n                  <Value>=\"\" + Fields!Category.Value + \" = \"+ Sum(Fields!Sales.Value)</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox1\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n        </ColumnGroupings>\n        <RowGroupings>\n          <RowGrouping>\n            <Width>86.7pt</Width>\n            <DynamicRows>\n              <Grouping Name=\"DynamicRowsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Year\">\n                  <Value>=Fields!Year.Value</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox2\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n        </RowGroupings>\n        <MatrixRows>\n          <MatrixRow>\n            <Height>0.25in</Height>\n            <MatrixCells>\n              <MatrixCell>\n                <ReportItems>\n                  <Textbox Name=\"SumSales\">\n                    <Value>=sum(Fields!Sales.Value)</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </MatrixCell>\n            </MatrixCells>\n          </MatrixRow>\n        </MatrixRows>\n        <MatrixColumns>\n          <MatrixColumn>\n            <Width>1 in</Width>\n          </MatrixColumn>\n        </MatrixColumns>\n        <Left>14.4pt</Left>\n        <Top>2.2pt</Top>\n      </Matrix>\n      <Chart Name=\"column_chart\">\n        <ToolTip>This is an Area Percent Stacked chart</ToolTip>\n        <Height>378.0pt</Height>\n        <Width>540.0pt</Width>\n        <Style>\n          <BackgroundColor>LightGrey</BackgroundColor>\n        </Style>\n        <Legend>\n          <Visible>true</Visible>\n          <Style>\n            <BackgroundColor>LightGreen</BackgroundColor>\n            <WritingMode>lr-tb</WritingMode>\n            <BorderStyle>\n              <Default>None</Default>\n            </BorderStyle>\n            <BorderWidth>\n              <Default>1pt</Default>\n            </BorderWidth>\n            <TextAlign>Left</TextAlign>\n          </Style>\n          <Position>BottomCenter</Position>\n          <Layout>Row</Layout>\n        </Legend>\n        <Palette>Default</Palette>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n                <DataLabel>\n                  <Style>\n                    <Format>c</Format>\n                  </Style>\n                </DataLabel>\n                <Marker />\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <CategoryAxis>\n          <Axis>\n            <MajorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <MajorInterval>1</MajorInterval>\n            <MinorInterval>1</MinorInterval>\n            <Margin>true</Margin>\n            <Visible>true</Visible>\n            <Scalar>true</Scalar>\n            <Title>\n              <Caption>Categories</Caption>\n              <Style>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n              </Style>\n            </Title>\n            <Style>\n              <FontWeight>Bolder</FontWeight>\n              <FontSize>15pt</FontSize>\n              <FontStyle>Italic</FontStyle>\n            </Style>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </CategoryAxis>\n        <DataSetName>Data</DataSetName>\n        <Type>Area</Type>\n        <Top>71.9pt</Top>\n        <PageBreakAtEnd>true</PageBreakAtEnd>\n        <Title>\n          <Caption>Sales by Category</Caption>\n          <Style>\n            <WritingMode>rl-tb</WritingMode>\n            <FontWeight>Bolder</FontWeight>\n            <FontSize>20pt</FontSize>\n            <FontStyle>Normal</FontStyle>\n          </Style>\n        </Title>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"chart_CategoryGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"chart_SeriesGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Category.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <Subtype>PercentStacked</Subtype>\n        <PlotArea>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BackgroundColor>LightBlue</BackgroundColor>\n          </Style>\n        </PlotArea>\n        <ValueAxis>\n          <Axis>\n            <Title>\n              <Caption>Values</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n              </Style>\n            </Title>\n            <Style>\n              <Format>0%</Format>\n            </Style>\n            <MajorGridLines>\n              <ShowGridLines>true</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Default>1pt</Default>\n                </BorderWidth>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Visible>true</Visible>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </ValueAxis>\n        <Left>15.9pt</Left>\n      </Chart>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>8in</Width>\n  <PageWidth>8.5in</PageWidth>\n  <PageHeight>11in</PageHeight>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/ChartExampleAreaStacked.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>fyiReporting Software, LLC</Author>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n      </Query>\n      <Fields>\n        <Field Name=\"Category\">\n          <DataField>Category</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Year\">\n          <DataField>Year</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Sales\">\n          <DataField>Sales</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <Rows File=\"SalesData.xml\" />\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>0.0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>6 in</Height>\n    <ReportItems>\n      <Matrix Name=\"Matrix1\">\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor>\n            <Default>blue</Default>\n          </BorderColor>\n          <BackgroundColor>yellow</BackgroundColor>\n        </Style>\n        <Corner>\n          <ReportItems>\n            <Textbox Name=\"Corner\">\n              <Value>Year\\Category</Value>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Left>0pt</Left>\n                  <Right>1pt</Right>\n                  <Top>0pt</Top>\n                  <Bottom>1pt</Bottom>\n                </BorderWidth>\n                <FontWeight>bold</FontWeight>\n              </Style>\n            </Textbox>\n          </ReportItems>\n        </Corner>\n        <ColumnGroupings>\n          <ColumnGrouping>\n            <Height>24.7pt</Height>\n            <DynamicColumns>\n              <Grouping Name=\"DynamicColumnsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Category\">\n                  <Value>=\"\" + Fields!Category.Value + \" = \"+ Sum(Fields!Sales.Value)</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox1\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n        </ColumnGroupings>\n        <RowGroupings>\n          <RowGrouping>\n            <Width>106.3pt</Width>\n            <DynamicRows>\n              <Grouping Name=\"DynamicRowsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Year\">\n                  <Value>=Fields!Year.Value</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox2\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n        </RowGroupings>\n        <MatrixRows>\n          <MatrixRow>\n            <Height>0.25in</Height>\n            <MatrixCells>\n              <MatrixCell>\n                <ReportItems>\n                  <Textbox Name=\"SumSales\">\n                    <Value>=sum(Fields!Sales.Value)</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </MatrixCell>\n            </MatrixCells>\n          </MatrixRow>\n        </MatrixRows>\n        <MatrixColumns>\n          <MatrixColumn>\n            <Width>1 in</Width>\n          </MatrixColumn>\n        </MatrixColumns>\n        <Left>13.7pt</Left>\n        <Top>2.2pt</Top>\n      </Matrix>\n      <Chart Name=\"area_chart\">\n        <Height>378.0pt</Height>\n        <Width>540.0pt</Width>\n        <Style>\n          <BackgroundColor>LightGrey</BackgroundColor>\n        </Style>\n        <Legend>\n          <Visible>true</Visible>\n          <Style>\n            <BackgroundColor>LightGreen</BackgroundColor>\n            <WritingMode>lr-tb</WritingMode>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BorderWidth>\n              <Default>1pt</Default>\n            </BorderWidth>\n            <TextAlign>Left</TextAlign>\n          </Style>\n          <Position>BottomCenter</Position>\n          <Layout>Row</Layout>\n        </Legend>\n        <Palette>Default</Palette>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n                <DataLabel>\n                  <Style>\n                    <Format>c</Format>\n                  </Style>\n                </DataLabel>\n                <Marker />\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <CategoryAxis>\n          <Axis>\n            <MajorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <MajorInterval>1</MajorInterval>\n            <MinorInterval>1</MinorInterval>\n            <Margin>true</Margin>\n            <Visible>true</Visible>\n            <Scalar>true</Scalar>\n            <Title>\n              <Caption>Categories</Caption>\n              <Style>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n              </Style>\n            </Title>\n            <Style>\n              <FontWeight>Bolder</FontWeight>\n              <FontSize>15pt</FontSize>\n              <FontStyle>Italic</FontStyle>\n            </Style>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </CategoryAxis>\n        <DataSetName>Data</DataSetName>\n        <Type>Area</Type>\n        <Top>66.6pt</Top>\n        <PageBreakAtEnd>true</PageBreakAtEnd>\n        <Title>\n          <Caption>Sales by Category</Caption>\n          <Style>\n            <WritingMode>rl-tb</WritingMode>\n            <FontWeight>Bolder</FontWeight>\n            <FontSize>20pt</FontSize>\n            <FontStyle>Normal</FontStyle>\n          </Style>\n        </Title>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"chart_CategoryGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"chart_SeriesGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Category.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <Subtype>Stacked</Subtype>\n        <PlotArea>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BackgroundColor>LightBlue</BackgroundColor>\n          </Style>\n        </PlotArea>\n        <ValueAxis>\n          <Axis>\n            <Title>\n              <Caption>Values</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n              </Style>\n            </Title>\n            <Style>\n              <Format>$#,##0</Format>\n            </Style>\n            <MajorGridLines>\n              <ShowGridLines>true</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Default>1pt</Default>\n                </BorderWidth>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Visible>true</Visible>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </ValueAxis>\n        <Left>13.8pt</Left>\n      </Chart>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>8in</Width>\n  <PageWidth>8.5in</PageWidth>\n  <PageHeight>11in</PageHeight>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/ChartExampleBar.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <PageHeight>8.5 in</PageHeight>\n  <PageWidth>11 in</PageWidth>\n  <LeftMargin>1 in</LeftMargin>\n  <Description>\n  </Description>\n  <Author>fyiReporting Software, LLC</Author>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n      </Query>\n      <Fields>\n        <Field Name=\"Category\">\n          <DataField>Category</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Year\">\n          <DataField>Year</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Sales\">\n          <DataField>Sales</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <Rows File=\"SalesData.xml\" />\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>.4 in</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>6 in</Height>\n    <ReportItems>\n      <Matrix Name=\"Matrix1\">\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor>\n            <Default>blue</Default>\n          </BorderColor>\n          <BackgroundColor>yellow</BackgroundColor>\n        </Style>\n        <Corner>\n          <ReportItems>\n            <Textbox Name=\"Corner\">\n              <Value>Year\\Category</Value>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Left>0pt</Left>\n                  <Right>1pt</Right>\n                  <Top>0pt</Top>\n                  <Bottom>1pt</Bottom>\n                </BorderWidth>\n                <FontWeight>bold</FontWeight>\n              </Style>\n            </Textbox>\n          </ReportItems>\n        </Corner>\n        <ColumnGroupings>\n          <ColumnGrouping>\n            <Height>22.4pt</Height>\n            <DynamicColumns>\n              <Grouping Name=\"DynamicColumnsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Category\">\n                  <Value>=\"\" + Fields!Category.Value + \" = \"+ Sum(Fields!Sales.Value)</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox1\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n        </ColumnGroupings>\n        <RowGroupings>\n          <RowGrouping>\n            <Width>86.8pt</Width>\n            <DynamicRows>\n              <Grouping Name=\"DynamicRowsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Year\">\n                  <Value>=Fields!Year.Value</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox2\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n        </RowGroupings>\n        <MatrixRows>\n          <MatrixRow>\n            <Height>0.25in</Height>\n            <MatrixCells>\n              <MatrixCell>\n                <ReportItems>\n                  <Textbox Name=\"SumSales\">\n                    <Value>=sum(Fields!Sales.Value)</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </MatrixCell>\n            </MatrixCells>\n          </MatrixRow>\n        </MatrixRows>\n        <MatrixColumns>\n          <MatrixColumn>\n            <Width>1 in</Width>\n          </MatrixColumn>\n        </MatrixColumns>\n        <Left>15.9pt</Left>\n        <Top>6.9pt</Top>\n      </Matrix>\n      <Chart Name=\"bar_chart\">\n        <Action>\n          <Hyperlink>http://www.fyireporting.com</Hyperlink>\n        </Action>\n        <Height>382.01pt</Height>\n        <Width>680.76pt</Width>\n        <Left>13.1pt</Left>\n        <Style>\n          <BackgroundColor>Coral</BackgroundColor>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Legend>\n          <Visible>true</Visible>\n          <Style>\n            <BackgroundColor>White</BackgroundColor>\n            <WritingMode>lr-tb</WritingMode>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BorderWidth>\n              <Default>1pt</Default>\n            </BorderWidth>\n            <TextAlign>Left</TextAlign>\n          </Style>\n          <Position>BottomCenter</Position>\n          <Layout>Row</Layout>\n        </Legend>\n        <Palette>Excel</Palette>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n                <DataLabel>\n                  <Style>\n                    <Format>$#,###</Format>\n                  </Style>\n                  <Visible>true</Visible>\n                </DataLabel>\n                <Marker />\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <CategoryAxis>\n          <Axis>\n            <MajorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <MajorInterval>1</MajorInterval>\n            <MinorInterval>1</MinorInterval>\n            <Margin>true</Margin>\n            <Visible>true</Visible>\n            <Scalar>true</Scalar>\n            <Title>\n              <Caption>Categories</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n                <VerticalAlign>Middle</VerticalAlign>\n              </Style>\n            </Title>\n            <Style>\n              <FontWeight>Bolder</FontWeight>\n              <FontSize>15pt</FontSize>\n              <FontStyle>Italic</FontStyle>\n              <VerticalAlign>Middle</VerticalAlign>\n            </Style>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </CategoryAxis>\n        <DataSetName>Data</DataSetName>\n        <Type>Bar</Type>\n        <Subtype>Plain</Subtype>\n        <Top>75.9pt</Top>\n        <PageBreakAtEnd>true</PageBreakAtEnd>\n        <Title>\n          <Caption>Sales by Category</Caption>\n          <Style>\n            <WritingMode>rl-tb</WritingMode>\n            <FontWeight>Bolder</FontWeight>\n            <FontSize>20pt</FontSize>\n            <FontStyle>Normal</FontStyle>\n          </Style>\n        </Title>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"chart_CategoryGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"chart_SeriesGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Category.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <PlotArea>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BackgroundColor>LightBlue</BackgroundColor>\n          </Style>\n        </PlotArea>\n        <ValueAxis>\n          <Axis>\n            <Title>\n              <Caption>Values</Caption>\n              <Style>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n                <TextAlign>Center</TextAlign>\n                <VerticalAlign>Middle</VerticalAlign>\n              </Style>\n            </Title>\n            <Style>\n              <Format>$#,##0</Format>\n            </Style>\n            <MajorGridLines>\n              <ShowGridLines>true</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Default>1pt</Default>\n                </BorderWidth>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Visible>true</Visible>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </ValueAxis>\n      </Chart>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>10in</Width>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/ChartExampleBarPercentStacked.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>fyiReporting Software, LLC</Author>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n      </Query>\n      <Fields>\n        <Field Name=\"Category\">\n          <DataField>Category</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Year\">\n          <DataField>Year</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Sales\">\n          <DataField>Sales</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <Rows File=\"SalesData.xml\" />\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>0.0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>6 in</Height>\n    <ReportItems>\n      <Matrix Name=\"Matrix1\">\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor>\n            <Default>blue</Default>\n          </BorderColor>\n          <BackgroundColor>yellow</BackgroundColor>\n        </Style>\n        <Corner>\n          <ReportItems>\n            <Textbox Name=\"Corner\">\n              <Value>Year\\Category</Value>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Left>0pt</Left>\n                  <Right>1pt</Right>\n                  <Top>0pt</Top>\n                  <Bottom>1pt</Bottom>\n                </BorderWidth>\n                <FontWeight>bold</FontWeight>\n              </Style>\n            </Textbox>\n          </ReportItems>\n        </Corner>\n        <ColumnGroupings>\n          <ColumnGrouping>\n            <Height>20.9pt</Height>\n            <DynamicColumns>\n              <Grouping Name=\"DynamicColumnsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Category\">\n                  <Value>=\"\" + Fields!Category.Value + \" = \"+ Sum(Fields!Sales.Value)</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                    <BorderColor />\n                  </Style>\n                  <CanGrow>True</CanGrow>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox1\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n        </ColumnGroupings>\n        <RowGroupings>\n          <RowGrouping>\n            <Width>89.8pt</Width>\n            <DynamicRows>\n              <Grouping Name=\"DynamicRowsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Year\">\n                  <Value>=Fields!Year.Value</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox2\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n        </RowGroupings>\n        <MatrixRows>\n          <MatrixRow>\n            <Height>0.25in</Height>\n            <MatrixCells>\n              <MatrixCell>\n                <ReportItems>\n                  <Textbox Name=\"SumSales\">\n                    <Value>=sum(Fields!Sales.Value)</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </MatrixCell>\n            </MatrixCells>\n          </MatrixRow>\n        </MatrixRows>\n        <MatrixColumns>\n          <MatrixColumn>\n            <Width>1 in</Width>\n          </MatrixColumn>\n        </MatrixColumns>\n        <Left>8.0pt</Left>\n        <Top>2.9pt</Top>\n      </Matrix>\n      <Chart Name=\"bar_chart\">\n        <Height>378.0pt</Height>\n        <Width>540.0pt</Width>\n        <Style>\n          <BackgroundColor>Coral</BackgroundColor>\n        </Style>\n        <Legend>\n          <Visible>true</Visible>\n          <Style>\n            <BackgroundColor>White</BackgroundColor>\n            <WritingMode>lr-tb</WritingMode>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BorderWidth>\n              <Default>1pt</Default>\n            </BorderWidth>\n            <TextAlign>Left</TextAlign>\n          </Style>\n          <Position>BottomCenter</Position>\n          <Layout>Row</Layout>\n        </Legend>\n        <Palette>Excel</Palette>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n                <DataLabel>\n                  <Style>\n                    <Format>$#,###</Format>\n                  </Style>\n                  <Visible>true</Visible>\n                </DataLabel>\n                <Marker />\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <CategoryAxis>\n          <Axis>\n            <MajorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <MajorInterval>1</MajorInterval>\n            <MinorInterval>1</MinorInterval>\n            <Margin>true</Margin>\n            <Visible>true</Visible>\n            <Scalar>true</Scalar>\n            <Title>\n              <Caption>Categories</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n                <VerticalAlign>Middle</VerticalAlign>\n              </Style>\n            </Title>\n            <Style>\n              <FontWeight>Bolder</FontWeight>\n              <FontSize>15pt</FontSize>\n              <FontStyle>Italic</FontStyle>\n              <VerticalAlign>Middle</VerticalAlign>\n            </Style>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </CategoryAxis>\n        <DataSetName>Data</DataSetName>\n        <Type>Bar</Type>\n        <Subtype>PercentStacked</Subtype>\n        <Top>62.9pt</Top>\n        <PageBreakAtEnd>true</PageBreakAtEnd>\n        <Title>\n          <Caption>Sales by Category</Caption>\n          <Style>\n            <WritingMode>rl-tb</WritingMode>\n            <FontWeight>Bolder</FontWeight>\n            <FontSize>20pt</FontSize>\n            <FontStyle>Normal</FontStyle>\n          </Style>\n        </Title>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"chart_CategoryGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"chart_SeriesGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Category.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <PlotArea>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BackgroundColor>LightBlue</BackgroundColor>\n          </Style>\n        </PlotArea>\n        <ValueAxis>\n          <Axis>\n            <Title>\n              <Caption>Percentage</Caption>\n              <Style>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n                <TextAlign>Center</TextAlign>\n                <VerticalAlign>Middle</VerticalAlign>\n              </Style>\n            </Title>\n            <Style>\n              <Format>0%</Format>\n            </Style>\n            <MajorGridLines>\n              <ShowGridLines>true</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Default>1pt</Default>\n                </BorderWidth>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Visible>true</Visible>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </ValueAxis>\n        <Left>8.5pt</Left>\n      </Chart>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>8in</Width>\n  <PageWidth>8.5in</PageWidth>\n  <PageHeight>11in</PageHeight>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/ChartExampleBarStacked.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>fyiReporting Software, LLC</Author>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n      </Query>\n      <Fields>\n        <Field Name=\"Category\">\n          <DataField>Category</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Year\">\n          <DataField>Year</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Sales\">\n          <DataField>Sales</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <Rows File=\"SalesData.xml\" />\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>0.0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>6 in</Height>\n    <ReportItems>\n      <Matrix Name=\"Matrix1\">\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor>\n            <Default>blue</Default>\n          </BorderColor>\n          <BackgroundColor>yellow</BackgroundColor>\n        </Style>\n        <Corner>\n          <ReportItems>\n            <Textbox Name=\"Corner\">\n              <Value>Year\\Category</Value>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Left>0pt</Left>\n                  <Right>1pt</Right>\n                  <Top>0pt</Top>\n                  <Bottom>1pt</Bottom>\n                </BorderWidth>\n                <FontWeight>bold</FontWeight>\n              </Style>\n            </Textbox>\n          </ReportItems>\n        </Corner>\n        <ColumnGroupings>\n          <ColumnGrouping>\n            <Height>21.6pt</Height>\n            <DynamicColumns>\n              <Grouping Name=\"DynamicColumnsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Category\">\n                  <Value>=\"\" + Fields!Category.Value + \" = \"+ Sum(Fields!Sales.Value)</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                    <BorderColor />\n                  </Style>\n                  <CanGrow>True</CanGrow>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox1\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n        </ColumnGroupings>\n        <RowGroupings>\n          <RowGrouping>\n            <Width>82.1pt</Width>\n            <DynamicRows>\n              <Grouping Name=\"DynamicRowsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Year\">\n                  <Value>=Fields!Year.Value</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox2\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n        </RowGroupings>\n        <MatrixRows>\n          <MatrixRow>\n            <Height>0.25in</Height>\n            <MatrixCells>\n              <MatrixCell>\n                <ReportItems>\n                  <Textbox Name=\"SumSales\">\n                    <Value>=sum(Fields!Sales.Value)</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </MatrixCell>\n            </MatrixCells>\n          </MatrixRow>\n        </MatrixRows>\n        <MatrixColumns>\n          <MatrixColumn>\n            <Width>1 in</Width>\n          </MatrixColumn>\n        </MatrixColumns>\n        <Left>10.4pt</Left>\n        <Top>3.0pt</Top>\n      </Matrix>\n      <Chart Name=\"line_chart\">\n        <Height>5.25 in</Height>\n        <Width>7.5 in</Width>\n        <Style>\n          <BackgroundColor>Coral</BackgroundColor>\n        </Style>\n        <Legend>\n          <Visible>true</Visible>\n          <Style>\n            <BackgroundColor>White</BackgroundColor>\n            <WritingMode>lr-tb</WritingMode>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BorderWidth>\n              <Default>1pt</Default>\n            </BorderWidth>\n            <TextAlign>Left</TextAlign>\n          </Style>\n          <Position>BottomCenter</Position>\n          <Layout>Row</Layout>\n        </Legend>\n        <Palette>Excel</Palette>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n                <DataLabel>\n                  <Style>\n                    <Format>$#,###</Format>\n                  </Style>\n                  <Visible>true</Visible>\n                </DataLabel>\n                <Marker />\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <CategoryAxis>\n          <Axis>\n            <MajorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <MajorInterval>1</MajorInterval>\n            <MinorInterval>1</MinorInterval>\n            <Margin>true</Margin>\n            <Visible>true</Visible>\n            <Scalar>true</Scalar>\n            <Title>\n              <Caption>Categories</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n                <VerticalAlign>Middle</VerticalAlign>\n              </Style>\n            </Title>\n            <Style>\n              <FontWeight>Bolder</FontWeight>\n              <FontSize>15pt</FontSize>\n              <FontStyle>Italic</FontStyle>\n              <VerticalAlign>Middle</VerticalAlign>\n            </Style>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </CategoryAxis>\n        <DataSetName>Data</DataSetName>\n        <Type>Bar</Type>\n        <Subtype>Stacked</Subtype>\n        <Top>62.4pt</Top>\n        <PageBreakAtEnd>true</PageBreakAtEnd>\n        <Title>\n          <Caption>Sales by Category</Caption>\n          <Style>\n            <WritingMode>rl-tb</WritingMode>\n            <FontWeight>Bolder</FontWeight>\n            <FontSize>20pt</FontSize>\n            <FontStyle>Normal</FontStyle>\n          </Style>\n        </Title>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"column_chart_CategoryGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"column_chart_SeriesGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Category.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <PlotArea>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BackgroundColor>LightBlue</BackgroundColor>\n          </Style>\n        </PlotArea>\n        <ValueAxis>\n          <Axis>\n            <Title>\n              <Caption>Sales in Dollars</Caption>\n              <Style>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n                <TextAlign>Center</TextAlign>\n                <VerticalAlign>Middle</VerticalAlign>\n              </Style>\n            </Title>\n            <Style>\n              <Format>$#,##0</Format>\n            </Style>\n            <MajorGridLines>\n              <ShowGridLines>true</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Default>1pt</Default>\n                </BorderWidth>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Visible>true</Visible>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </ValueAxis>\n        <Left>9.7pt</Left>\n      </Chart>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>8in</Width>\n  <PageWidth>8.5in</PageWidth>\n  <PageHeight>11in</PageHeight>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/ChartExampleColumn.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>fyiReporting Software, LLC</Author>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n      </Query>\n      <Fields>\n        <Field Name=\"Category\">\n          <DataField>Category</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Year\">\n          <DataField>Year</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Sales\">\n          <DataField>Sales</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <Rows File=\"SalesData.xml\" />\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>0.8pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>6 in</Height>\n    <ReportItems>\n      <Matrix Name=\"Matrix1\">\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor>\n            <Default>blue</Default>\n          </BorderColor>\n          <BackgroundColor>yellow</BackgroundColor>\n        </Style>\n        <Corner>\n          <ReportItems>\n            <Textbox Name=\"Corner\">\n              <Value>Year\\Category</Value>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Left>0pt</Left>\n                  <Right>1pt</Right>\n                  <Top>0pt</Top>\n                  <Bottom>1pt</Bottom>\n                </BorderWidth>\n                <FontWeight>bold</FontWeight>\n              </Style>\n            </Textbox>\n          </ReportItems>\n        </Corner>\n        <ColumnGroupings>\n          <ColumnGrouping>\n            <Height>23.8pt</Height>\n            <DynamicColumns>\n              <Grouping Name=\"DynamicColumnsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Category\">\n                  <Value>=\"\" + Fields!Category.Value + \" = \"+ Sum(Fields!Sales.Value)</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox1\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n        </ColumnGroupings>\n        <RowGroupings>\n          <RowGrouping>\n            <Width>89.5pt</Width>\n            <DynamicRows>\n              <Grouping Name=\"DynamicRowsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Year\">\n                  <Value>=Fields!Year.Value</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox2\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n        </RowGroupings>\n        <MatrixRows>\n          <MatrixRow>\n            <Height>0.25in</Height>\n            <MatrixCells>\n              <MatrixCell>\n                <ReportItems>\n                  <Textbox Name=\"SumSales\">\n                    <Value>=sum(Fields!Sales.Value)</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </MatrixCell>\n            </MatrixCells>\n          </MatrixRow>\n        </MatrixRows>\n        <MatrixColumns>\n          <MatrixColumn>\n            <Width>1 in</Width>\n          </MatrixColumn>\n        </MatrixColumns>\n        <Left>18.6pt</Left>\n        <Top>2.2pt</Top>\n      </Matrix>\n      <Chart Name=\"column_chart\">\n        <Height>5.25 in</Height>\n        <Width>7.5 in</Width>\n        <Style>\n          <BackgroundColor>LightGrey</BackgroundColor>\n        </Style>\n        <Legend>\n          <Visible>true</Visible>\n          <Style>\n            <BackgroundColor>LightGreen</BackgroundColor>\n            <WritingMode>lr-tb</WritingMode>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BorderWidth>\n              <Default>1pt</Default>\n            </BorderWidth>\n            <TextAlign>Left</TextAlign>\n          </Style>\n          <Position>BottomCenter</Position>\n          <Layout>Row</Layout>\n        </Legend>\n        <Palette>Default</Palette>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n                <DataLabel>\n                  <Style>\n                    <Format>c</Format>\n                  </Style>\n                </DataLabel>\n                <Marker />\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <CategoryAxis>\n          <Axis>\n            <MajorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <MajorInterval>1</MajorInterval>\n            <MinorInterval>1</MinorInterval>\n            <Margin>true</Margin>\n            <Visible>true</Visible>\n            <Scalar>true</Scalar>\n            <Title>\n              <Caption>Years</Caption>\n              <Style>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n              </Style>\n            </Title>\n            <Style>\n              <FontWeight>Bolder</FontWeight>\n              <FontSize>15pt</FontSize>\n              <FontStyle>Italic</FontStyle>\n            </Style>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </CategoryAxis>\n        <DataSetName>Data</DataSetName>\n        <Type>Column</Type>\n        <Top>67.1pt</Top>\n        <PageBreakAtEnd>true</PageBreakAtEnd>\n        <Title>\n          <Caption>Sales by Category</Caption>\n          <Style>\n            <WritingMode>rl-tb</WritingMode>\n            <FontWeight>Bolder</FontWeight>\n            <FontSize>20pt</FontSize>\n            <FontStyle>Normal</FontStyle>\n          </Style>\n        </Title>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"column_chart_CategoryGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"column_chart_SeriesGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Category.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <Subtype>Plain</Subtype>\n        <PlotArea>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BackgroundColor>LightBlue</BackgroundColor>\n          </Style>\n        </PlotArea>\n        <ValueAxis>\n          <Axis>\n            <Title>\n              <Caption>Values</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n              </Style>\n            </Title>\n            <Style>\n              <Format>$#,##0</Format>\n            </Style>\n            <MajorGridLines>\n              <ShowGridLines>true</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Default>1pt</Default>\n                </BorderWidth>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Visible>true</Visible>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </ValueAxis>\n        <Left>16.7pt</Left>\n      </Chart>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>8in</Width>\n  <PageWidth>8.5in</PageWidth>\n  <PageHeight>11in</PageHeight>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/ChartExampleColumnPercentStacked.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <PageHeight>8.5in</PageHeight>\n  <PageWidth>11in</PageWidth>\n  <LeftMargin>.5in</LeftMargin>\n  <Description>Column Chart</Description>\n  <Author>fyiReporting Software, LLC</Author>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <!--\t\t\t\t<DataProvider>SQL</DataProvider>   change to this for sql server -->\n        <DataProvider>xxx</DataProvider>\n        <!--  just for xml example data -->\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n      </Query>\n      <Fields>\n        <Field Name=\"Category\">\n          <DataField>Category</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Year\">\n          <DataField>Year</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Sales\">\n          <DataField>Sales</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <Rows File=\"SalesData.xml\" />\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>0.0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>6 in</Height>\n    <ReportItems>\n      <Matrix Name=\"Matrix1\">\n        <Corner>\n          <ReportItems>\n            <Textbox Name=\"Corner\">\n              <Value>Year\\Category</Value>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Left>1pt</Left>\n                  <Right>1pt</Right>\n                  <Top>1pt</Top>\n                  <Bottom>1pt</Bottom>\n                </BorderWidth>\n                <FontWeight>bold</FontWeight>\n              </Style>\n            </Textbox>\n          </ReportItems>\n        </Corner>\n        <ColumnGroupings>\n          <ColumnGrouping>\n            <Height>0.25in</Height>\n            <DynamicColumns>\n              <Grouping Name=\"DynamicColumnsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Category\">\n                  <Value>=\"\" + Fields!Category.Value + \" = \"+ Sum(Fields!Sales.Value)</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>1pt</Left>\n                      <Right>1pt</Right>\n                      <Top>1pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox1\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>1pt</Left>\n                        <Right>1pt</Right>\n                        <Top>1pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n        </ColumnGroupings>\n        <RowGroupings>\n          <RowGrouping>\n            <Width>1.25 in</Width>\n            <DynamicRows>\n              <Grouping Name=\"DynamicRowsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Year\">\n                  <Value>=Fields!Year.Value</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>1pt</Left>\n                      <Right>1pt</Right>\n                      <Top>1pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox2\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>1pt</Left>\n                        <Right>1pt</Right>\n                        <Top>1pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n        </RowGroupings>\n        <MatrixRows>\n          <MatrixRow>\n            <Height>0.25in</Height>\n            <MatrixCells>\n              <MatrixCell>\n                <ReportItems>\n                  <Textbox Name=\"SumSales\">\n                    <Value>=sum(Fields!Sales.Value)</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>1pt</Left>\n                        <Right>1pt</Right>\n                        <Top>1pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </MatrixCell>\n            </MatrixCells>\n          </MatrixRow>\n        </MatrixRows>\n        <MatrixColumns>\n          <MatrixColumn>\n            <Width>1.5 in</Width>\n          </MatrixColumn>\n        </MatrixColumns>\n        <Left>5.1pt</Left>\n        <Top>1.5pt</Top>\n      </Matrix>\n      <Chart Name=\"column_chart\">\n        <Height>7 in</Height>\n        <Width>10 in</Width>\n        <Style>\n          <BackgroundGradientEndColor>Gray</BackgroundGradientEndColor>\n          <BackgroundGradientType>LeftRight</BackgroundGradientType>\n          <BackgroundColor>White</BackgroundColor>\n        </Style>\n        <Legend>\n          <Visible>true</Visible>\n          <Style>\n            <WritingMode>lr-tb</WritingMode>\n            <BorderStyle>\n              <Default>None</Default>\n            </BorderStyle>\n            <BorderWidth>\n              <Default>1pt</Default>\n            </BorderWidth>\n            <TextAlign>Left</TextAlign>\n          </Style>\n          <Position>BottomCenter</Position>\n          <Layout>Row</Layout>\n        </Legend>\n        <Palette>Default</Palette>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n                <DataLabel>\n                  <Style>\n                    <Format>$#,###</Format>\n                    <Color>Red</Color>\n                    <VerticalAlign>Middle</VerticalAlign>\n                  </Style>\n                  <Visible>true</Visible>\n                </DataLabel>\n                <Marker />\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <CategoryAxis>\n          <Axis>\n            <MajorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <MajorInterval>1</MajorInterval>\n            <MinorInterval>1</MinorInterval>\n            <Margin>true</Margin>\n            <Visible>true</Visible>\n            <Scalar>true</Scalar>\n            <Title>\n              <Caption>Years</Caption>\n              <Style>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n              </Style>\n            </Title>\n            <Style>\n              <FontWeight>Bolder</FontWeight>\n              <FontSize>15pt</FontSize>\n              <FontStyle>Italic</FontStyle>\n            </Style>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </CategoryAxis>\n        <DataSetName>Data</DataSetName>\n        <Type>Column</Type>\n        <Top>64.8pt</Top>\n        <PageBreakAtEnd>true</PageBreakAtEnd>\n        <Title>\n          <Caption>Sales by Category</Caption>\n          <Style>\n            <WritingMode>rl-tb</WritingMode>\n            <FontWeight>Bolder</FontWeight>\n            <FontSize>20pt</FontSize>\n            <FontStyle>Normal</FontStyle>\n          </Style>\n        </Title>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"column_chart_CategoryGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"column_chart_SeriesGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Category.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <Subtype>PercentStacked</Subtype>\n        <PlotArea>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BackgroundGradientEndColor>White</BackgroundGradientEndColor>\n            <BackgroundGradientType>DiagonalRight</BackgroundGradientType>\n            <BackgroundColor>Red</BackgroundColor>\n          </Style>\n        </PlotArea>\n        <ValueAxis>\n          <Axis>\n            <Title>\n              <Caption>Percentages</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n              </Style>\n            </Title>\n            <Style>\n              <Format>0%</Format>\n            </Style>\n            <MajorGridLines>\n              <ShowGridLines>true</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Default>1pt</Default>\n                </BorderWidth>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Visible>true</Visible>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </ValueAxis>\n        <Left>0.0pt</Left>\n      </Chart>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>10in</Width>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/ChartExampleColumnStacked.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>fyiReporting Software, LLC</Author>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n      </Query>\n      <Fields>\n        <Field Name=\"Category\">\n          <DataField>Category</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Year\">\n          <DataField>Year</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Sales\">\n          <DataField>Sales</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <Rows File=\"SalesData.xml\" />\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>0.0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>6 in</Height>\n    <ReportItems>\n      <Matrix Name=\"Matrix1\">\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor>\n            <Default>blue</Default>\n          </BorderColor>\n          <BackgroundColor>yellow</BackgroundColor>\n        </Style>\n        <Corner>\n          <ReportItems>\n            <Textbox Name=\"Corner\">\n              <Value>Year\\Category</Value>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Left>0pt</Left>\n                  <Right>1pt</Right>\n                  <Top>0pt</Top>\n                  <Bottom>1pt</Bottom>\n                </BorderWidth>\n                <FontWeight>bold</FontWeight>\n              </Style>\n            </Textbox>\n          </ReportItems>\n        </Corner>\n        <ColumnGroupings>\n          <ColumnGrouping>\n            <Height>22.4pt</Height>\n            <DynamicColumns>\n              <Grouping Name=\"DynamicColumnsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Category\">\n                  <Value>=\"\" + Fields!Category.Value + \" = \"+ Sum(Fields!Sales.Value)</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox1\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n        </ColumnGroupings>\n        <RowGroupings>\n          <RowGrouping>\n            <Width>77.1pt</Width>\n            <DynamicRows>\n              <Grouping Name=\"DynamicRowsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Year\">\n                  <Value>=Fields!Year.Value</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox2\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n        </RowGroupings>\n        <MatrixRows>\n          <MatrixRow>\n            <Height>0.25in</Height>\n            <MatrixCells>\n              <MatrixCell>\n                <ReportItems>\n                  <Textbox Name=\"SumSales\">\n                    <Value>=sum(Fields!Sales.Value)</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </MatrixCell>\n            </MatrixCells>\n          </MatrixRow>\n        </MatrixRows>\n        <MatrixColumns>\n          <MatrixColumn>\n            <Width>1 in</Width>\n          </MatrixColumn>\n        </MatrixColumns>\n        <Left>12.6pt</Left>\n        <Top>2.1pt</Top>\n      </Matrix>\n      <Chart Name=\"column_chart\">\n        <Height>378.0pt</Height>\n        <Width>540.0pt</Width>\n        <Style>\n          <BackgroundColor>LightGrey</BackgroundColor>\n        </Style>\n        <Legend>\n          <Visible>true</Visible>\n          <Style>\n            <BackgroundColor>LightGreen</BackgroundColor>\n            <WritingMode>lr-tb</WritingMode>\n            <BorderStyle>\n              <Default>None</Default>\n            </BorderStyle>\n            <BorderWidth>\n              <Default>1pt</Default>\n            </BorderWidth>\n            <TextAlign>Left</TextAlign>\n          </Style>\n          <Position>BottomCenter</Position>\n          <Layout>Row</Layout>\n        </Legend>\n        <Palette>Default</Palette>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n                <DataLabel>\n                  <Style>\n                    <Format>c</Format>\n                  </Style>\n                </DataLabel>\n                <Marker />\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <CategoryAxis>\n          <Axis>\n            <MajorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <MajorInterval>1</MajorInterval>\n            <MinorInterval>1</MinorInterval>\n            <Margin>true</Margin>\n            <Visible>true</Visible>\n            <Scalar>true</Scalar>\n            <Title>\n              <Caption>Years</Caption>\n              <Style>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n              </Style>\n            </Title>\n            <Style>\n              <FontWeight>Bolder</FontWeight>\n              <FontSize>15pt</FontSize>\n              <FontStyle>Italic</FontStyle>\n            </Style>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </CategoryAxis>\n        <DataSetName>Data</DataSetName>\n        <Type>Column</Type>\n        <Top>65.9pt</Top>\n        <PageBreakAtEnd>true</PageBreakAtEnd>\n        <Title>\n          <Caption>Sales by Category</Caption>\n          <Style>\n            <WritingMode>rl-tb</WritingMode>\n            <FontWeight>Bolder</FontWeight>\n            <FontSize>20pt</FontSize>\n            <FontStyle>Normal</FontStyle>\n          </Style>\n        </Title>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"column_chart_CategoryGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"column_chart_SeriesGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Category.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <Subtype>Stacked</Subtype>\n        <PlotArea>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BackgroundColor>LightBlue</BackgroundColor>\n          </Style>\n        </PlotArea>\n        <ValueAxis>\n          <Axis>\n            <Title>\n              <Caption>Sales</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n              </Style>\n            </Title>\n            <Style>\n              <Format>$#,##0</Format>\n            </Style>\n            <MajorGridLines>\n              <ShowGridLines>true</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Default>1pt</Default>\n                </BorderWidth>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Visible>true</Visible>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </ValueAxis>\n        <Left>7.3pt</Left>\n      </Chart>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>8in</Width>\n  <PageWidth>8.5in</PageWidth>\n  <PageHeight>11in</PageHeight>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/ChartExampleDoughnut.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>fyiReporting Software, LLC</Author>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n      </Query>\n      <Fields>\n        <Field Name=\"Category\">\n          <DataField>Category</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Year\">\n          <DataField>Year</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Sales\">\n          <DataField>Sales</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <Rows File=\"SalesData.xml\" />\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>0.0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>6 in</Height>\n    <ReportItems>\n      <Matrix Name=\"Matrix1\">\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor>\n            <Default>blue</Default>\n          </BorderColor>\n          <BackgroundColor>yellow</BackgroundColor>\n        </Style>\n        <Corner>\n          <ReportItems>\n            <Textbox Name=\"Corner\">\n              <Value>Year\\Category</Value>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Left>0pt</Left>\n                  <Right>1pt</Right>\n                  <Top>0pt</Top>\n                  <Bottom>1pt</Bottom>\n                </BorderWidth>\n                <FontWeight>bold</FontWeight>\n              </Style>\n            </Textbox>\n          </ReportItems>\n        </Corner>\n        <ColumnGroupings>\n          <ColumnGrouping>\n            <Height>20.9pt</Height>\n            <DynamicColumns>\n              <Grouping Name=\"DynamicColumnsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Category\">\n                  <Value>=\"\" + Fields!Category.Value + \" = \"+ Sum(Fields!Sales.Value)</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                    <BorderColor />\n                  </Style>\n                  <CanGrow>True</CanGrow>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox1\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n        </ColumnGroupings>\n        <RowGroupings>\n          <RowGrouping>\n            <Width>81.5pt</Width>\n            <DynamicRows>\n              <Grouping Name=\"DynamicRowsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Year\">\n                  <Value>=Fields!Year.Value</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox2\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n        </RowGroupings>\n        <MatrixRows>\n          <MatrixRow>\n            <Height>0.25in</Height>\n            <MatrixCells>\n              <MatrixCell>\n                <ReportItems>\n                  <Textbox Name=\"SumSales\">\n                    <Value>=sum(Fields!Sales.Value)</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </MatrixCell>\n            </MatrixCells>\n          </MatrixRow>\n        </MatrixRows>\n        <MatrixColumns>\n          <MatrixColumn>\n            <Width>1 in</Width>\n          </MatrixColumn>\n        </MatrixColumns>\n        <Left>5.1pt</Left>\n        <Top>0.6pt</Top>\n      </Matrix>\n      <Chart Name=\"line_chart\">\n        <Height>3.75 in</Height>\n        <Width>4.0 in</Width>\n        <Style>\n          <BackgroundColor>Coral</BackgroundColor>\n        </Style>\n        <Legend>\n          <Visible>true</Visible>\n          <Style>\n            <BackgroundColor>White</BackgroundColor>\n            <WritingMode>lr-tb</WritingMode>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BorderWidth>\n              <Default>3pt</Default>\n            </BorderWidth>\n            <TextAlign>Left</TextAlign>\n          </Style>\n          <Position>BottomCenter</Position>\n          <Layout>Row</Layout>\n        </Legend>\n        <Palette>Excel</Palette>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n                <DataLabel>\n                  <Style>\n                    <Format>$#,###</Format>\n                  </Style>\n                  <Visible>true</Visible>\n                </DataLabel>\n                <Marker />\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <CategoryAxis>\n          <Axis>\n            <MajorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <MajorInterval>1</MajorInterval>\n            <MinorInterval>1</MinorInterval>\n            <Margin>true</Margin>\n            <Visible>true</Visible>\n            <Scalar>true</Scalar>\n            <Title>\n              <Caption>Categories</Caption>\n              <Style>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n                <VerticalAlign>Middle</VerticalAlign>\n              </Style>\n            </Title>\n            <Style>\n              <FontWeight>Bolder</FontWeight>\n              <FontSize>15pt</FontSize>\n              <FontStyle>Italic</FontStyle>\n              <VerticalAlign>Middle</VerticalAlign>\n            </Style>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </CategoryAxis>\n        <DataSetName>Data</DataSetName>\n        <Type>Doughnut</Type>\n        <Subtype>Plain</Subtype>\n        <Top>66.6pt</Top>\n        <PageBreakAtEnd>true</PageBreakAtEnd>\n        <Title>\n          <Caption>Sales by Category</Caption>\n          <Style>\n            <WritingMode>rl-tb</WritingMode>\n            <FontWeight>Bolder</FontWeight>\n            <FontSize>20pt</FontSize>\n            <FontStyle>Normal</FontStyle>\n          </Style>\n        </Title>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"column_chart_CategoryGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"column_chart_SeriesGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Category.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <PlotArea>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BackgroundColor>LightBlue</BackgroundColor>\n          </Style>\n        </PlotArea>\n        <ValueAxis>\n          <Axis>\n            <Title>\n              <Caption>Values</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n                <TextAlign>Center</TextAlign>\n                <VerticalAlign>Middle</VerticalAlign>\n              </Style>\n            </Title>\n            <Style>\n              <Format>$#,##0</Format>\n            </Style>\n            <MajorGridLines>\n              <ShowGridLines>true</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Default>1pt</Default>\n                </BorderWidth>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Visible>true</Visible>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </ValueAxis>\n        <Left>8.1pt</Left>\n      </Chart>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>8in</Width>\n  <PageWidth>8.5in</PageWidth>\n  <PageHeight>11in</PageHeight>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/ChartExampleLine.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n      </Query>\n      <Fields>\n        <Field Name=\"Category\">\n          <DataField>Category</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Year\">\n          <DataField>Year</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Sales\">\n          <DataField>Sales</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <Rows File=\"SalesData.xml\" />\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>0.0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>6 in</Height>\n    <ReportItems>\n      <Matrix Name=\"Matrix1\">\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor>\n            <Default>blue</Default>\n          </BorderColor>\n          <BackgroundColor>yellow</BackgroundColor>\n        </Style>\n        <Corner>\n          <ReportItems>\n            <Textbox Name=\"Corner\">\n              <Value>Year\\Category</Value>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Left>0pt</Left>\n                  <Right>1pt</Right>\n                  <Top>0pt</Top>\n                  <Bottom>1pt</Bottom>\n                </BorderWidth>\n                <FontWeight>bold</FontWeight>\n              </Style>\n            </Textbox>\n          </ReportItems>\n        </Corner>\n        <ColumnGroupings>\n          <ColumnGrouping>\n            <Height>20.9pt</Height>\n            <DynamicColumns>\n              <Grouping Name=\"DynamicColumnsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Category\">\n                  <Value>=\"\" + Fields!Category.Value + \" = \"+ Sum(Fields!Sales.Value)</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox1\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n        </ColumnGroupings>\n        <RowGroupings>\n          <RowGrouping>\n            <Width>89.5pt</Width>\n            <DynamicRows>\n              <Grouping Name=\"DynamicRowsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Year\">\n                  <Value>=Fields!Year.Value</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox2\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n        </RowGroupings>\n        <MatrixRows>\n          <MatrixRow>\n            <Height>0.25in</Height>\n            <MatrixCells>\n              <MatrixCell>\n                <ReportItems>\n                  <Textbox Name=\"SumSales\">\n                    <Value>=sum(Fields!Sales.Value)</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </MatrixCell>\n            </MatrixCells>\n          </MatrixRow>\n        </MatrixRows>\n        <MatrixColumns>\n          <MatrixColumn>\n            <Width>80.0pt</Width>\n          </MatrixColumn>\n        </MatrixColumns>\n        <Left>4.4pt</Left>\n        <Top>4.3pt</Top>\n      </Matrix>\n      <Chart Name=\"line_chart\">\n        <Height>378.0pt</Height>\n        <Width>540.0pt</Width>\n        <Style>\n          <BackgroundColor>LightGray</BackgroundColor>\n        </Style>\n        <Legend>\n          <Visible>true</Visible>\n          <Style>\n            <BackgroundColor>Aqua</BackgroundColor>\n            <WritingMode>lr-tb</WritingMode>\n            <BorderStyle>\n              <Default>None</Default>\n            </BorderStyle>\n            <BorderWidth>\n              <Default>3pt</Default>\n            </BorderWidth>\n            <TextAlign>Left</TextAlign>\n          </Style>\n          <Position>RightCenter</Position>\n          <Layout>Column</Layout>\n        </Legend>\n        <Palette>Excel</Palette>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n                <DataLabel>\n                  <Style>\n                    <Format>c</Format>\n                  </Style>\n                </DataLabel>\n                <Marker />\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <CategoryAxis>\n          <Axis>\n            <MajorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <MajorInterval>1</MajorInterval>\n            <MinorInterval>1</MinorInterval>\n            <Margin>true</Margin>\n            <Visible>true</Visible>\n            <Scalar>true</Scalar>\n            <Title>\n              <Caption>Year</Caption>\n              <Style>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n              </Style>\n            </Title>\n            <Style>\n              <FontWeight>Bolder</FontWeight>\n              <FontSize>15pt</FontSize>\n              <FontStyle>Italic</FontStyle>\n            </Style>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </CategoryAxis>\n        <DataSetName>Data</DataSetName>\n        <Type>Line</Type>\n        <Subtype>Smooth</Subtype>\n        <Top>78.6pt</Top>\n        <PageBreakAtEnd>true</PageBreakAtEnd>\n        <Title>\n          <Caption>Sales by Category</Caption>\n          <Style>\n            <WritingMode>rl-tb</WritingMode>\n            <FontWeight>Bolder</FontWeight>\n            <FontSize>20pt</FontSize>\n            <FontStyle>Normal</FontStyle>\n          </Style>\n        </Title>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"chart_CategoryGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"chart_SeriesGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Category.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <PlotArea>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BackgroundColor>LightBlue</BackgroundColor>\n          </Style>\n        </PlotArea>\n        <ValueAxis>\n          <Axis>\n            <Title>\n              <Caption>Sales</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n              </Style>\n            </Title>\n            <Style>\n              <Format>$#,##0</Format>\n            </Style>\n            <MajorGridLines>\n              <ShowGridLines>true</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Default>1pt</Default>\n                </BorderWidth>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Visible>true</Visible>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </ValueAxis>\n        <Left>7.2pt</Left>\n      </Chart>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>8in</Width>\n  <PageWidth>8.5in</PageWidth>\n  <PageHeight>11in</PageHeight>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/ChartExamplePie.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n      </Query>\n      <Fields>\n        <Field Name=\"Category\">\n          <DataField>Category</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Year\">\n          <DataField>Year</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Sales\">\n          <DataField>Sales</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <Rows File=\"SalesData.xml\" />\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>0.0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>6 in</Height>\n    <ReportItems>\n      <Matrix Name=\"Matrix1\">\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor>\n            <Default>blue</Default>\n          </BorderColor>\n          <BackgroundColor>yellow</BackgroundColor>\n        </Style>\n        <Corner>\n          <ReportItems>\n            <Textbox Name=\"Corner\">\n              <Value>Year\\Category</Value>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Left>0pt</Left>\n                  <Right>1pt</Right>\n                  <Top>0pt</Top>\n                  <Bottom>1pt</Bottom>\n                </BorderWidth>\n                <FontWeight>bold</FontWeight>\n              </Style>\n            </Textbox>\n          </ReportItems>\n        </Corner>\n        <ColumnGroupings>\n          <ColumnGrouping>\n            <Height>0.25in</Height>\n            <DynamicColumns>\n              <Grouping Name=\"DynamicColumnsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Category\">\n                  <Value>=\"\" + Fields!Category.Value + \" = \"+ Sum(Fields!Sales.Value)</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                    <BorderColor />\n                  </Style>\n                  <CanGrow>True</CanGrow>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox1\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n        </ColumnGroupings>\n        <RowGroupings>\n          <RowGrouping>\n            <Width>1 in</Width>\n            <DynamicRows>\n              <Grouping Name=\"DynamicRowsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Year\">\n                  <Value>=Fields!Year.Value</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox2\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n        </RowGroupings>\n        <MatrixRows>\n          <MatrixRow>\n            <Height>0.25in</Height>\n            <MatrixCells>\n              <MatrixCell>\n                <ReportItems>\n                  <Textbox Name=\"SumSales\">\n                    <Value>=sum(Fields!Sales.Value)</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </MatrixCell>\n            </MatrixCells>\n          </MatrixRow>\n        </MatrixRows>\n        <MatrixColumns>\n          <MatrixColumn>\n            <Width>1 in</Width>\n          </MatrixColumn>\n        </MatrixColumns>\n        <Left>3.6pt</Left>\n        <Top>3.6pt</Top>\n      </Matrix>\n      <Chart Name=\"pie_chart\">\n        <Height>3.75 in</Height>\n        <Width>7.5 in</Width>\n        <Style>\n          <BackgroundColor>Coral</BackgroundColor>\n        </Style>\n        <Legend>\n          <Visible>true</Visible>\n          <Style>\n            <BackgroundColor>White</BackgroundColor>\n            <WritingMode>lr-tb</WritingMode>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BorderWidth>\n              <Default>3pt</Default>\n            </BorderWidth>\n            <TextAlign>Left</TextAlign>\n          </Style>\n          <Position>BottomCenter</Position>\n          <Layout>Row</Layout>\n        </Legend>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n                <DataLabel>\n                  <Style>\n                    <Format>$#,###</Format>\n                  </Style>\n                  <Visible>true</Visible>\n                </DataLabel>\n                <Marker />\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <CategoryAxis>\n          <Axis>\n            <MajorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <MajorInterval>1</MajorInterval>\n            <MinorInterval>1</MinorInterval>\n            <Margin>true</Margin>\n            <Visible>true</Visible>\n            <Scalar>true</Scalar>\n            <Title>\n              <Caption>Categories</Caption>\n              <Style>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n                <VerticalAlign>Middle</VerticalAlign>\n              </Style>\n            </Title>\n            <Style>\n              <FontWeight>Bolder</FontWeight>\n              <FontSize>15pt</FontSize>\n              <FontStyle>Italic</FontStyle>\n              <VerticalAlign>Middle</VerticalAlign>\n            </Style>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </CategoryAxis>\n        <DataSetName>Data</DataSetName>\n        <Type>Pie</Type>\n        <Subtype>Exploded</Subtype>\n        <Top>65.1pt</Top>\n        <PageBreakAtEnd>true</PageBreakAtEnd>\n        <Title>\n          <Caption>Sales by Category</Caption>\n          <Style>\n            <WritingMode>rl-tb</WritingMode>\n            <FontWeight>Bolder</FontWeight>\n            <FontSize>20pt</FontSize>\n            <FontStyle>Normal</FontStyle>\n          </Style>\n        </Title>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"column_chart_CategoryGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"column_chart_SeriesGroup\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Category.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Category.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <PlotArea>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BackgroundColor>LightBlue</BackgroundColor>\n          </Style>\n        </PlotArea>\n        <ValueAxis>\n          <Axis>\n            <Title>\n              <Caption>Values</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n                <FontWeight>Bolder</FontWeight>\n                <FontSize>20pt</FontSize>\n                <FontStyle>Normal</FontStyle>\n                <TextAlign>Center</TextAlign>\n                <VerticalAlign>Middle</VerticalAlign>\n              </Style>\n            </Title>\n            <Style>\n              <Format>$#,##0</Format>\n            </Style>\n            <MajorGridLines>\n              <ShowGridLines>true</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Default>1pt</Default>\n                </BorderWidth>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Visible>true</Visible>\n            <MajorTickMarks>Cross</MajorTickMarks>\n          </Axis>\n        </ValueAxis>\n        <Left>13.9pt</Left>\n      </Chart>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>8in</Width>\n  <PageWidth>8.5in</PageWidth>\n  <PageHeight>11in</PageHeight>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/ChartMap.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>8.5 in</PageHeight>\n  <PageWidth>11 in</PageWidth>\n  <DataSets>\n    <DataSet Name=\"Data2\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>\n        </CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"Region\">\n          <DataField>Region</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"State\">\n          <DataField>State</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Year\">\n          <DataField>Year</DataField>\n          <TypeName>Integer</TypeName>\n        </Field>\n        <Field Name=\"Qtr\">\n          <DataField>Qtr</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Sales\">\n          <DataField>Sales</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n        <Field Name=\"XValue\">\n          <DataField>XValue</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n    </DataSet>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>\n        </CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"Region\">\n          <DataField>Region</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"State\">\n          <DataField>State</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Year\">\n          <DataField>Year</DataField>\n          <TypeName>Integer</TypeName>\n        </Field>\n        <Field Name=\"Qtr\">\n          <DataField>Qtr</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Sales\">\n          <DataField>Sales</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n        <Field Name=\"XValue\">\n          <DataField>XValue</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <fyi:Rows xmlns:fyi=\"http://www.fyireporting.com/schemas\">\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>50</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>21</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>36</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>42</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>27</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>19</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>10</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>34</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>32</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>28</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>9</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>21</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>20</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>11</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>16</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>47</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>37</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>5</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>48</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>5</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>44</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>7</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>43</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>29</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>31</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>41</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>45</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>24</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>30</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>43</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>27</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>18</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>34</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>6</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>33</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>20</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>16</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>35</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>21</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>35</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>29</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>29</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>22</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>34</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>12</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>20</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>10</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>15</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>30</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>32</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>29</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>13</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>21</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>11</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>50</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>39</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>13</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>9</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>21</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>24</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>15</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>36</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>25</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>11</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>22</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>13</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>35</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>18</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>25</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>28</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>49</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>7</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>8</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>24</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>37</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>32</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>36</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>10</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>26</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>18</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>26</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>15</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>44</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>22</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>48</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>30</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>24</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>25</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>35</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>16</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>5</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>35</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>32</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>5</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>6</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>28</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>39</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>42</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>39</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>28</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>39</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>40</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>41</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>9</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>25</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>37</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>16</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>40</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>40</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>45</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>29</Sales>\n          <XValue>1</XValue>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>27</Sales>\n          <XValue>1</XValue>\n        </Row>\n      </fyi:Rows>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>0.0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>386.1pt</Height>\n    <ReportItems>\n      <Chart Name=\"Chart1\">\n        <Height>364.38pt</Height>\n        <Width>528.70pt</Width>\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>None</Default>\n            <Left>None</Left>\n            <Right>None</Right>\n            <Top>None</Top>\n            <Bottom>None</Bottom>\n          </BorderStyle>\n          <BackgroundColor>White</BackgroundColor>\n          <BackgroundGradientType>None</BackgroundGradientType>\n          <BackgroundGradientEndColor>\n          </BackgroundGradientEndColor>\n          <BorderColor />\n          <BorderWidth />\n          <FontSize>14pt</FontSize>\n        </Style>\n        <Type>Map</Type>\n        <Subtype>usa_map</Subtype>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"DynamicCategoriesGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=1</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <CategoryAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Region</Caption>\n              <Style>\n                <BorderStyle />\n                <BorderColor />\n                <BorderWidth />\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </CategoryAxis>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"DynamicSeriesGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=UCase(Fields!State.Value)</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=UCase(Fields!State.Value)</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Code.GetRangeColor(Sum(Fields!Sales.Value))</Value>\n                  </DataValue>\n                </DataValues>\n                <DataLabel>\n                  <Value>\n                  </Value>\n                  <Visible>False</Visible>\n                </DataLabel>\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <ValueAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <FontSize>8pt</FontSize>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Sales</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </ValueAxis>\n        <Legend>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <PaddingLeft>5pt</PaddingLeft>\n            <FontSize>8pt</FontSize>\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Visible>false</Visible>\n          <Position>RightCenter</Position>\n        </Legend>\n        <Title>\n          <Style>\n            <FontWeight>Bold</FontWeight>\n            <FontSize>32pt</FontSize>\n            <TextAlign>Left</TextAlign>\n            <BorderStyle />\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Caption>United States Sales</Caption>\n        </Title>\n        <Left>0.80pt</Left>\n        <Top>0.00pt</Top>\n        <fyi:RenderAsVector xmlns:fyi=\"http://www.fyireporting.com/schemas\">True</fyi:RenderAsVector>\n        <fyi:Tooltip xmlns:fyi=\"http://www.fyireporting.com/schemas\">True</fyi:Tooltip>\n      </Chart>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>25.6pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>27.0pt</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox1\">\n                      <Value>State</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>None</Right>\n                          <Top>None</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <FontSize>8pt</FontSize>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>Sales</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>None</Right>\n                          <Top>None</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <FontSize>8pt</FontSize>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Footer>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value>All</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>None</Right>\n                          <Top>None</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <FontSize>8pt</FontSize>\n                        <BorderColor />\n                        <BorderWidth />\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox6\">\n                      <Value>=Sum(Fields!Sales.Value)</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>None</Right>\n                          <Top>None</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <FontSize>8pt</FontSize>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Footer>\n        <TableGroups>\n          <TableGroup>\n            <Grouping Name=\"TableGroupGroup1\">\n              <GroupExpressions>\n                <GroupExpression>=Fields!State.Value</GroupExpression>\n              </GroupExpressions>\n            </Grouping>\n            <Header>\n              <TableRows>\n                <TableRow>\n                  <Height>12 pt</Height>\n                  <TableCells>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox7\">\n                          <Value>=Fields!State.Value</Value>\n                          <CanGrow>true</CanGrow>\n                          <Style>\n                            <BorderStyle>\n                              <Default>None</Default>\n                              <Left>None</Left>\n                              <Right>None</Right>\n                              <Top>None</Top>\n                              <Bottom>None</Bottom>\n                            </BorderStyle>\n                            <BorderColor />\n                            <BorderWidth />\n                            <BackgroundColor>\n                            </BackgroundColor>\n                            <FontSize>8pt</FontSize>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox8\">\n                          <Value>=Sum(Fields!Sales.Value)</Value>\n                          <CanGrow>true</CanGrow>\n                          <Style>\n                            <BorderStyle>\n                              <Default>None</Default>\n                              <Left>None</Left>\n                              <Right>None</Right>\n                              <Top>None</Top>\n                              <Bottom>None</Bottom>\n                            </BorderStyle>\n                            <BackgroundColor>= Code.GetRangeColor(Sum(Fields!Sales.Value))</BackgroundColor>\n                            <FontSize>8pt</FontSize>\n                            <BorderColor />\n                            <BorderWidth />\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                  </TableCells>\n                </TableRow>\n              </TableRows>\n            </Header>\n          </TableGroup>\n        </TableGroups>\n        <Left>17.2pt</Left>\n        <Top>368.3pt</Top>\n      </Table>\n      <fyi:Grid xmlns:fyi=\"http://www.fyireporting.com/schemas\" Name=\"Grid1\">\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>65.9pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>23.1pt</Width>\n          </TableColumn>\n        </TableColumns>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>11.2pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>Sales &lt; 175</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>None</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox11\">\n                      <Value>\n                      </Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>None</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BackgroundColor>Red</BackgroundColor>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                        <PaddingTop>0pt</PaddingTop>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox19\">\n                      <Value>Sales &lt; 200</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>None</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox14\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>None</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                        <BackgroundColor>#00ff00</BackgroundColor>\n                        <PaddingTop>0pt</PaddingTop>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox27\">\n                      <Value>Sales &lt; 225</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>None</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                      <ZIndex>99</ZIndex>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox25\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>None</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                        <BackgroundColor>blue</BackgroundColor>\n                        <PaddingTop>0pt</PaddingTop>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>Sales &lt; 250</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>None</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>None</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                        <BackgroundColor>yellow</BackgroundColor>\n                        <PaddingTop>0pt</PaddingTop>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox28\">\n                      <Value>Sales &lt; 275</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>None</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox23\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>None</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                        <BackgroundColor>orange</BackgroundColor>\n                        <PaddingTop>0pt</PaddingTop>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox29\">\n                      <Value>Sales &gt;= 275</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>None</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox21\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>None</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                        <BackgroundColor>pink</BackgroundColor>\n                        <PaddingTop>0pt</PaddingTop>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n        <Left>557.6pt</Left>\n        <Top>90.7pt</Top>\n      </fyi:Grid>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>7in</Width>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>\n        </ConnectString>\n        <IntegratedSecurity>false</IntegratedSecurity>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <Code>Public Function GetRangeColor(sum as double) as String \n  dim color as String  \n\tif sum &lt; 175 Then \n\t\tcolor = \"red\"\n\telseif sum &lt; 200 Then \n\t\tcolor = \"#00ff00\" \n\telseif sum &lt; 225 Then \n\t\tcolor = \"blue\" \n\telseif sum &lt; 250 Then \n\t\tcolor = \"yellow\" \n\telseif sum &lt; 275 Then \n\t\tcolor = \"orange\" \n\telse \n\t\tcolor = \"pink\"\n\tend if\n   return color\nEnd Function</Code>\n</Report>"
  },
  {
    "path": "Examples/Examples/ChartMapWorld.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>8.5 in</PageHeight>\n  <PageWidth>11 in</PageWidth>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>\n        </CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"Country\">\n          <DataField>Country</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Year\">\n          <DataField>Year</DataField>\n          <TypeName>Integer</TypeName>\n        </Field>\n        <Field Name=\"Qtr\">\n          <DataField>Qtr</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Sales\">\n          <DataField>Sales</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <fyi:Rows xmlns:fyi=\"http://www.fyireporting.com/schemas\">\n        <Row>\n          <Country>USA</Country>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>50</Sales>\n        </Row>\n        <Row>\n          <Country>USA</Country>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Country>Mexico</Country>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>36</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>42</Sales>\n        </Row>\n        <Row>\n          <Country>Russia</Country>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>27</Sales>\n        </Row>\n        <Row>\n          <Country>Greenland</Country>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>19</Sales>\n        </Row>\n        <Row>\n          <Country>Algeria</Country>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>10</Sales>\n        </Row>\n        <Row>\n          <Country>South Africa</Country>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>34</Sales>\n        </Row>\n        <Row>\n          <Country>China</Country>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>32</Sales>\n        </Row>\n        <Row>\n          <Country>China</Country>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>28</Sales>\n        </Row>\n        <Row>\n          <Country>USA</Country>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>9</Sales>\n        </Row>\n        <Row>\n          <Country>India</Country>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Country>Antarctica</Country>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>20</Sales>\n        </Row>\n        <Row>\n          <Country>Portugal</Country>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>11</Sales>\n        </Row>\n        <Row>\n          <Country>Argentina</Country>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>16</Sales>\n        </Row>\n        <Row>\n          <Country>Mexico</Country>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>47</Sales>\n        </Row>\n        <Row>\n          <Country>USA</Country>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>37</Sales>\n        </Row>\n        <Row>\n          <Country>USA</Country>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>5</Sales>\n        </Row>\n        <Row>\n          <Country>Russia</Country>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>48</Sales>\n        </Row>\n        <Row>\n          <Country>China</Country>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>5</Sales>\n        </Row>\n        <Row>\n          <Country>China</Country>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>44</Sales>\n        </Row>\n        <Row>\n          <Country>India</Country>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>7</Sales>\n        </Row>\n        <Row>\n          <Country>Mexico</Country>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>43</Sales>\n        </Row>\n        <Row>\n          <Country>Algeria</Country>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Country>Algeria</Country>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>31</Sales>\n        </Row>\n        <Row>\n          <Country>Algeria</Country>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>41</Sales>\n        </Row>\n        <Row>\n          <Country>Greenland</Country>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>45</Sales>\n        </Row>\n        <Row>\n          <Country>Russia</Country>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>24</Sales>\n        </Row>\n        <Row>\n          <Country>USA</Country>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>30</Sales>\n        </Row>\n        <Row>\n          <Country>USA</Country>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>43</Sales>\n        </Row>\n        <Row>\n          <Country>South Africa</Country>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>27</Sales>\n        </Row>\n        <Row>\n          <Country>South Africa</Country>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>18</Sales>\n        </Row>\n        <Row>\n          <Country>South Africa</Country>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>34</Sales>\n        </Row>\n        <Row>\n          <Country>South Africa</Country>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>6</Sales>\n        </Row>\n        <Row>\n          <Country>South Africa</Country>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>33</Sales>\n        </Row>\n        <Row>\n          <Country>South Africa</Country>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>20</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>16</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>22</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>34</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>12</Sales>\n        </Row>\n        <Row>\n          <Country>USA</Country>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>20</Sales>\n        </Row>\n        <Row>\n          <Country>USA</Country>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>10</Sales>\n        </Row>\n        <Row>\n          <Country>USA</Country>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>15</Sales>\n        </Row>\n        <Row>\n          <Country>USA</Country>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>30</Sales>\n        </Row>\n        <Row>\n          <Country>USA</Country>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>32</Sales>\n        </Row>\n        <Row>\n          <Country>USA</Country>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Country>USA</Country>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>13</Sales>\n        </Row>\n        <Row>\n          <Country>India</Country>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Country>India</Country>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>11</Sales>\n        </Row>\n        <Row>\n          <Country>India</Country>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>50</Sales>\n        </Row>\n        <Row>\n          <Country>India</Country>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>39</Sales>\n        </Row>\n        <Row>\n          <Country>India</Country>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>13</Sales>\n        </Row>\n        <Row>\n          <Country>India</Country>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>9</Sales>\n        </Row>\n        <Row>\n          <Country>India</Country>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Country>India</Country>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>24</Sales>\n        </Row>\n        <Row>\n          <Country>India</Country>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>15</Sales>\n        </Row>\n        <Row>\n          <Country>India</Country>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>36</Sales>\n        </Row>\n        <Row>\n          <Country>China</Country>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>25</Sales>\n        </Row>\n        <Row>\n          <Country>China</Country>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>11</Sales>\n        </Row>\n        <Row>\n          <Country>China</Country>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>22</Sales>\n        </Row>\n        <Row>\n          <Country>China</Country>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>13</Sales>\n        </Row>\n        <Row>\n          <Country>China</Country>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Country>China</Country>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>18</Sales>\n        </Row>\n        <Row>\n          <Country>China</Country>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>25</Sales>\n        </Row>\n        <Row>\n          <Country>China</Country>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>28</Sales>\n        </Row>\n        <Row>\n          <Country>China</Country>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>49</Sales>\n        </Row>\n        <Row>\n          <Country>Brazil</Country>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>7</Sales>\n        </Row>\n        <Row>\n          <Country>Brazil</Country>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>8</Sales>\n        </Row>\n        <Row>\n          <Country>Brazil</Country>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>24</Sales>\n        </Row>\n        <Row>\n          <Country>Brazil</Country>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>37</Sales>\n        </Row>\n        <Row>\n          <Country>Brazil</Country>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>32</Sales>\n        </Row>\n        <Row>\n          <Country>Brazil</Country>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>36</Sales>\n        </Row>\n        <Row>\n          <Country>Brazil</Country>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>10</Sales>\n        </Row>\n        <Row>\n          <Country>Brazil</Country>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>26</Sales>\n        </Row>\n        <Row>\n          <Country>Brazil</Country>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>18</Sales>\n        </Row>\n        <Row>\n          <Country>Portugal</Country>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>26</Sales>\n        </Row>\n        <Row>\n          <Country>Portugal</Country>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>15</Sales>\n        </Row>\n        <Row>\n          <Country>Portugal</Country>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>44</Sales>\n        </Row>\n        <Row>\n          <Country>Portugal</Country>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>22</Sales>\n        </Row>\n        <Row>\n          <Country>Portugal</Country>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>48</Sales>\n        </Row>\n        <Row>\n          <Country>Portugal</Country>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>30</Sales>\n        </Row>\n        <Row>\n          <Country>Portugal</Country>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>24</Sales>\n        </Row>\n        <Row>\n          <Country>Portugal</Country>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>25</Sales>\n        </Row>\n        <Row>\n          <Country>Portugal</Country>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Country>Portugal</Country>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>16</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>5</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>32</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>5</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>6</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>28</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>39</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>42</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>39</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>28</Sales>\n        </Row>\n        <Row>\n          <Country>Canada</Country>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>39</Sales>\n        </Row>\n        <Row>\n          <Country>Mexico</Country>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>40</Sales>\n        </Row>\n        <Row>\n          <Country>Mexico</Country>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>41</Sales>\n        </Row>\n        <Row>\n          <Country>Mexico</Country>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>9</Sales>\n        </Row>\n        <Row>\n          <Country>Mexico</Country>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>25</Sales>\n        </Row>\n        <Row>\n          <Country>Mexico</Country>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>37</Sales>\n        </Row>\n        <Row>\n          <Country>Mexico</Country>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>16</Sales>\n        </Row>\n        <Row>\n          <Country>Mexico</Country>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>40</Sales>\n        </Row>\n        <Row>\n          <Country>Mexico</Country>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>40</Sales>\n        </Row>\n        <Row>\n          <Country>Mexico</Country>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>45</Sales>\n        </Row>\n        <Row>\n          <Country>Mexico</Country>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Country>Mexico</Country>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>27</Sales>\n        </Row>\n      </fyi:Rows>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>47.6pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n    <ReportItems>\n      <Textbox Name=\"Textbox3\">\n        <Height>27.78pt</Height>\n        <Width>177.59pt</Width>\n        <Value>World Sales</Value>\n        <Left>309.41pt</Left>\n        <Top>11.29pt</Top>\n        <Style>\n          <FontSize>24pt</FontSize>\n        </Style>\n      </Textbox>\n    </ReportItems>\n  </PageHeader>\n  <Body>\n    <Height>364.5pt</Height>\n    <ReportItems>\n      <Chart Name=\"Chart1\">\n        <Height>345.63pt</Height>\n        <Width>516.69pt</Width>\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>None</Default>\n            <Left>None</Left>\n            <Right>None</Right>\n            <Top>None</Top>\n            <Bottom>None</Bottom>\n          </BorderStyle>\n          <BackgroundColor>White</BackgroundColor>\n          <BackgroundGradientType>None</BackgroundGradientType>\n          <BackgroundGradientEndColor>\n          </BackgroundGradientEndColor>\n          <BorderColor />\n          <BorderWidth />\n          <FontSize>14pt</FontSize>\n        </Style>\n        <Type>Map</Type>\n        <Subtype>world_map</Subtype>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"DynamicCategoriesGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=1</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <CategoryAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Region</Caption>\n              <Style>\n                <BorderStyle />\n                <BorderColor />\n                <BorderWidth />\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </CategoryAxis>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"DynamicSeriesGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Country.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Country.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Code.GetRangeColor(Sum(Fields!Sales.Value))</Value>\n                  </DataValue>\n                </DataValues>\n                <DataLabel>\n                  <Value>\n                  </Value>\n                  <Visible>False</Visible>\n                </DataLabel>\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <ValueAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <FontSize>8pt</FontSize>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Sales</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </ValueAxis>\n        <Legend>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <PaddingLeft>5pt</PaddingLeft>\n            <FontSize>8pt</FontSize>\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Visible>false</Visible>\n          <Position>RightCenter</Position>\n        </Legend>\n        <Title>\n          <Style>\n            <FontWeight>Bold</FontWeight>\n            <FontSize>1pt</FontSize>\n            <TextAlign>Left</TextAlign>\n            <BorderStyle />\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Caption>\n          </Caption>\n        </Title>\n        <Left>0.00pt</Left>\n        <Top>0.74pt</Top>\n        <fyi:RenderAsVector xmlns:fyi=\"http://www.fyireporting.com/schemas\">True</fyi:RenderAsVector>\n        <fyi:Tooltip xmlns:fyi=\"http://www.fyireporting.com/schemas\">True</fyi:Tooltip>\n      </Chart>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>39.3pt</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox1\">\n                      <Value>Country</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>Sales</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Footer>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value>\n                      </Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox6\">\n                      <Value>=Sum(Fields!Sales.Value)</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Footer>\n        <TableGroups>\n          <TableGroup>\n            <Grouping Name=\"TableGroupGroup1\">\n              <GroupExpressions>\n                <GroupExpression>=Fields!Country.Value</GroupExpression>\n              </GroupExpressions>\n            </Grouping>\n            <Header>\n              <TableRows>\n                <TableRow>\n                  <Height>12 pt</Height>\n                  <TableCells>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox7\">\n                          <Value>=Fields!Country.Value</Value>\n                          <CanGrow>true</CanGrow>\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox8\">\n                          <Value>=Sum(Fields!Sales.Value)</Value>\n                          <CanGrow>true</CanGrow>\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                  </TableCells>\n                </TableRow>\n              </TableRows>\n            </Header>\n          </TableGroup>\n        </TableGroups>\n        <Left>526.9pt</Left>\n        <Top>5.1pt</Top>\n      </Table>\n      <fyi:Grid xmlns:fyi=\"http://www.fyireporting.com/schemas\" Name=\"Grid1\">\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>44.1pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>22.8pt</Width>\n          </TableColumn>\n        </TableColumns>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>&lt;= 100</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>Solid</Left>\n                          <Right>None</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>Black</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>1pt</Top>\n                        </BorderWidth>\n                        <TextAlign>Center</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox11\">\n                      <Value>\n                      </Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>Solid</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BackgroundColor>=Code.GetRangeColor(100)</BackgroundColor>\n                        <BorderColor>\n                          <Top>Black</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>1pt</Top>\n                        </BorderWidth>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox13\">\n                      <Value>&lt;= 200</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>Solid</Left>\n                          <Right>None</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                        <TextAlign>Center</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox14\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>Solid</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                        <BackgroundColor>=Code.GetRangeColor(200)</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox19\">\n                      <Value>&lt;= 300</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>Solid</Left>\n                          <Right>None</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                        <TextAlign>Center</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox20\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>Solid</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                        <BackgroundColor>=Code.GetRangeColor(300)</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox21\">\n                      <Value>&lt;= 400</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>Solid</Left>\n                          <Right>None</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                        <TextAlign>Center</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox22\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>Solid</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                        <BackgroundColor>=Code.GetRangeColor(400)</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox23\">\n                      <Value>&lt;= 500</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>Solid</Left>\n                          <Right>None</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                        <TextAlign>Center</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox24\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>Solid</Right>\n                          <Top>Solid</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                        <BackgroundColor>=Code.GetRangeColor(500)</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox25\">\n                      <Value>over 500</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>Solid</Left>\n                          <Right>None</Right>\n                          <Top>Solid</Top>\n                          <Bottom>Solid</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                        <TextAlign>Center</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox26\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>Solid</Right>\n                          <Top>Solid</Top>\n                          <Bottom>Solid</Bottom>\n                        </BorderStyle>\n                        <BorderColor>\n                          <Top>White</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Top>3pt</Top>\n                        </BorderWidth>\n                        <BackgroundColor>=Code.GetRangeColor(600)</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n        <Left>656.5pt</Left>\n        <Top>6.1pt</Top>\n      </fyi:Grid>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>7in</Width>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>\n        </ConnectString>\n        <IntegratedSecurity>false</IntegratedSecurity>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <Code>Public Function GetRangeColor(sum as double) as String \n  dim color as String  \n\tif sum &lt;= 100 Then \n\t\tcolor = \"red\"\n\telseif sum &lt;= 200 Then \n\t\tcolor = \"#00ff00\" \n\telseif sum &lt;= 300 Then \n\t\tcolor = \"blue\" \n\telseif sum &lt;= 400 Then \n\t\tcolor = \"yellow\" \n\telseif sum &lt;= 500 Then \n\t\tcolor = \"orange\" \n\telse \n\t\tcolor = \"pink\"\n\tend if\n   return color\nEnd Function</Code>\n  <LeftMargin>.5in</LeftMargin>\n  <TopMargin>.5in</TopMargin>\n</Report>"
  },
  {
    "path": "Examples/Examples/ChartTypes.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>8.5 in</PageHeight>\n  <PageWidth>11 in</PageWidth>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n      </Query>\n      <Fields>\n        <Field Name=\"Region\">\n          <DataField>Region</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"State\">\n          <DataField>State</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Year\">\n          <DataField>Year</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Qtr\">\n          <DataField>Qtr</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Sales\">\n          <DataField>Sales</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <Rows>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>50</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>36</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>42</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>27</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>19</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>10</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>34</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>32</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>28</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>9</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>20</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>11</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>16</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>47</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>37</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>5</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>48</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>5</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>44</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>7</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>43</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>31</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>41</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>45</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>24</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>30</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>43</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>27</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>18</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>34</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>6</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>33</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>20</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>16</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>22</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>34</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>12</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>20</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>10</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>15</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>30</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>32</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>13</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>11</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>50</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>39</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>13</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>9</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>24</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>15</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>36</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>25</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>11</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>22</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>13</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>18</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>25</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>28</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>49</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>7</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>8</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>24</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>37</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>32</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>36</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>10</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>26</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>18</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>26</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>15</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>44</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>22</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>48</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>30</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>24</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>25</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>16</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>5</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>32</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>5</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>6</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>28</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>39</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>42</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>39</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>28</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>39</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>40</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>41</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>9</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>25</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>37</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>16</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>40</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>40</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>45</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>27</Sales>\n        </Row>\n      </Rows>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>0.0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>553.6pt</Height>\n    <ReportItems>\n      <Matrix Name=\"Matrix1\">\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor>\n            <Default>blue</Default>\n          </BorderColor>\n          <BackgroundColor>yellow</BackgroundColor>\n          <BorderWidth />\n        </Style>\n        <Corner>\n          <ReportItems>\n            <Textbox Name=\"Corner\">\n              <Value>Region\\Year</Value>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Left>1pt</Left>\n                  <Right>1pt</Right>\n                  <Top>1pt</Top>\n                  <Bottom>1pt</Bottom>\n                </BorderWidth>\n                <FontWeight>Bold</FontWeight>\n                <BorderColor />\n                <FontStyle>Normal</FontStyle>\n                <FontFamily>Arial</FontFamily>\n                <FontSize>10pt</FontSize>\n                <TextDecoration>None</TextDecoration>\n                <TextAlign>Left</TextAlign>\n                <VerticalAlign>Middle</VerticalAlign>\n                <Color>Black</Color>\n                <Direction>LTR</Direction>\n                <WritingMode>lr-tb</WritingMode>\n              </Style>\n            </Textbox>\n          </ReportItems>\n        </Corner>\n        <ColumnGroupings>\n          <ColumnGrouping>\n            <Height>12.1pt</Height>\n            <DynamicColumns Name=\"DynamicColumns1\">\n              <Grouping Name=\"colGrouping1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Year\">\n                  <Value>=\"\" + Fields!Year.Value + \" = \"+ Sum(Fields!Sales.Value)</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>1pt</Left>\n                      <Right>1pt</Right>\n                      <Top>1pt</Top>\n                      <Bottom>1pt</Bottom>\n                      <Default>1pt</Default>\n                    </BorderWidth>\n                    <FontWeight>Bold</FontWeight>\n                    <FontStyle>Normal</FontStyle>\n                    <FontFamily>Arial</FontFamily>\n                    <FontSize>10pt</FontSize>\n                    <TextDecoration>None</TextDecoration>\n                    <TextAlign>Center</TextAlign>\n                    <VerticalAlign>Middle</VerticalAlign>\n                    <Color>Black</Color>\n                    <Direction>LTR</Direction>\n                    <WritingMode>lr-tb</WritingMode>\n                    <BorderColor />\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox1\">\n                    <Value>Column Grand Total </Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>1pt</Left>\n                        <Right>1pt</Right>\n                        <Top>1pt</Top>\n                        <Bottom>1pt</Bottom>\n                        <Default>1pt</Default>\n                      </BorderWidth>\n                      <FontWeight>Bold</FontWeight>\n                      <FontStyle>Normal</FontStyle>\n                      <FontFamily>Arial</FontFamily>\n                      <FontSize>10pt</FontSize>\n                      <TextDecoration>None</TextDecoration>\n                      <TextAlign>Center</TextAlign>\n                      <VerticalAlign>Middle</VerticalAlign>\n                      <Color>Black</Color>\n                      <Direction>LTR</Direction>\n                      <WritingMode>lr-tb</WritingMode>\n                      <BorderColor />\n                    </Style>\n                    <CanGrow>True</CanGrow>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n        </ColumnGroupings>\n        <RowGroupings>\n          <RowGrouping>\n            <Width>82.1pt</Width>\n            <DynamicRows Name=\"DynamicRows1\">\n              <Grouping Name=\"rowGrouping1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Region\">\n                  <Value>=Fields!Region.Value</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>1pt</Left>\n                      <Right>1pt</Right>\n                      <Top>1pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>Bold</FontWeight>\n                    <BorderColor />\n                    <FontStyle>Normal</FontStyle>\n                    <FontFamily>Arial</FontFamily>\n                    <FontSize>10pt</FontSize>\n                    <TextDecoration>None</TextDecoration>\n                    <TextAlign>General</TextAlign>\n                    <VerticalAlign>Middle</VerticalAlign>\n                    <Color>Black</Color>\n                    <Direction>LTR</Direction>\n                    <WritingMode>lr-tb</WritingMode>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox2\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>1pt</Left>\n                        <Right>1pt</Right>\n                        <Top>1pt</Top>\n                        <Bottom>1pt</Bottom>\n                        <Default>1pt</Default>\n                      </BorderWidth>\n                      <FontWeight>Bold</FontWeight>\n                      <BorderColor />\n                      <FontStyle>Normal</FontStyle>\n                      <FontFamily>Arial</FontFamily>\n                      <FontSize>10pt</FontSize>\n                      <TextDecoration>None</TextDecoration>\n                      <TextAlign>General</TextAlign>\n                      <VerticalAlign>Middle</VerticalAlign>\n                      <Color>Black</Color>\n                      <Direction>LTR</Direction>\n                      <WritingMode>lr-tb</WritingMode>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n        </RowGroupings>\n        <MatrixRows>\n          <MatrixRow>\n            <Height>15.7pt</Height>\n            <MatrixCells>\n              <MatrixCell>\n                <ReportItems>\n                  <Textbox Name=\"SumSales\">\n                    <Value>=sum(Fields!Sales.Value)</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                      <BorderColor />\n                      <TextAlign>Center</TextAlign>\n                      <VerticalAlign>Middle</VerticalAlign>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </MatrixCell>\n            </MatrixCells>\n          </MatrixRow>\n        </MatrixRows>\n        <MatrixColumns>\n          <MatrixColumn>\n            <Width>1 in</Width>\n          </MatrixColumn>\n        </MatrixColumns>\n        <Left>40.7pt</Left>\n        <Top>450.0pt</Top>\n      </Matrix>\n      <Chart Name=\"Chart1\">\n        <Height>144.00pt</Height>\n        <Width>288.00pt</Width>\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BackgroundColor>White</BackgroundColor>\n          <BackgroundGradientType>LeftRight</BackgroundGradientType>\n          <BackgroundGradientEndColor>Azure</BackgroundGradientEndColor>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Type>Column</Type>\n        <Subtype>Plain</Subtype>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"DynamicCategoriesGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <CategoryAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Region</Caption>\n              <Style>\n                <BorderStyle />\n                <BorderColor />\n                <BorderWidth />\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </CategoryAxis>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"DynamicSeriesGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <ValueAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <FontSize>8pt</FontSize>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Sales</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </ValueAxis>\n        <Legend>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <PaddingLeft>5pt</PaddingLeft>\n            <FontSize>8pt</FontSize>\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Visible>True</Visible>\n          <Position>RightCenter</Position>\n        </Legend>\n        <Title>\n          <Style>\n            <FontWeight>Bold</FontWeight>\n            <FontSize>14pt</FontSize>\n            <TextAlign>Center</TextAlign>\n            <BorderStyle />\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Caption>Region Year Chart</Caption>\n        </Title>\n        <Left>40.6pt</Left>\n        <Top>2.7pt</Top>\n      </Chart>\n      <Chart Name=\"Chart2\">\n        <Height>111.62pt</Height>\n        <Width>288.00pt</Width>\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BackgroundColor>White</BackgroundColor>\n          <BackgroundGradientType>LeftRight</BackgroundGradientType>\n          <BackgroundGradientEndColor>Azure</BackgroundGradientEndColor>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Type>Area</Type>\n        <Subtype>Stacked</Subtype>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"DynamicCategoriesGroup2\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <CategoryAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Region</Caption>\n              <Style>\n                <BorderStyle />\n                <BorderColor />\n                <BorderWidth />\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </CategoryAxis>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"DynamicSeriesGroup2\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <ValueAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <FontSize>8pt</FontSize>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Sales</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n            <MajorInterval>200</MajorInterval>\n          </Axis>\n        </ValueAxis>\n        <Legend>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <PaddingLeft>5pt</PaddingLeft>\n            <FontSize>8pt</FontSize>\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Visible>True</Visible>\n          <Position>RightCenter</Position>\n        </Legend>\n        <Title>\n          <Style>\n            <FontWeight>Bold</FontWeight>\n            <FontSize>14pt</FontSize>\n            <TextAlign>Center</TextAlign>\n            <BorderStyle />\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Caption>Region Year Chart</Caption>\n        </Title>\n        <Left>378.00pt</Left>\n        <Top>2.70pt</Top>\n      </Chart>\n      <Chart Name=\"Chart3\">\n        <Height>144.00pt</Height>\n        <Width>288.00pt</Width>\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BackgroundColor>White</BackgroundColor>\n          <BackgroundGradientType>LeftRight</BackgroundGradientType>\n          <BackgroundGradientEndColor>Azure</BackgroundGradientEndColor>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Type>Bar</Type>\n        <Subtype>Plain</Subtype>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"DynamicCategoriesGroup3\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <CategoryAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Region</Caption>\n              <Style>\n                <BorderStyle />\n                <BorderColor />\n                <BorderWidth />\n                <WritingMode>tb-rl</WritingMode>\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </CategoryAxis>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"DynamicSeriesGroup3\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <ValueAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <FontSize>8pt</FontSize>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Sales</Caption>\n              <Style>\n                <WritingMode>lr-tb</WritingMode>\n                <BorderStyle />\n                <BorderColor />\n                <BorderWidth />\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </ValueAxis>\n        <Legend>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <PaddingLeft>5pt</PaddingLeft>\n            <FontSize>8pt</FontSize>\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Visible>True</Visible>\n          <Position>RightCenter</Position>\n        </Legend>\n        <Title>\n          <Style>\n            <FontWeight>Bold</FontWeight>\n            <FontSize>14pt</FontSize>\n            <TextAlign>Center</TextAlign>\n            <BorderStyle />\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Caption>Region Year Chart</Caption>\n        </Title>\n        <Left>40.6pt</Left>\n        <Top>151.3pt</Top>\n      </Chart>\n      <Chart Name=\"Chart4\">\n        <Height>118.42pt</Height>\n        <Width>288.00pt</Width>\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BackgroundColor>White</BackgroundColor>\n          <BackgroundGradientType>LeftRight</BackgroundGradientType>\n          <BackgroundGradientEndColor>Azure</BackgroundGradientEndColor>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Type>Line</Type>\n        <Subtype>Smooth</Subtype>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"DynamicCategoriesGroup4\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <CategoryAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Region</Caption>\n              <Style>\n                <BorderStyle />\n                <BorderColor />\n                <BorderWidth />\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </CategoryAxis>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"DynamicSeriesGroup4\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <ValueAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <FontSize>8pt</FontSize>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Sales</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n            <MajorInterval>100</MajorInterval>\n          </Axis>\n        </ValueAxis>\n        <Legend>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <PaddingLeft>5pt</PaddingLeft>\n            <FontSize>8pt</FontSize>\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Visible>True</Visible>\n          <Position>RightCenter</Position>\n        </Legend>\n        <Title>\n          <Style>\n            <FontWeight>Bold</FontWeight>\n            <FontSize>14pt</FontSize>\n            <TextAlign>Center</TextAlign>\n            <BorderStyle />\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Caption>Region Year Chart</Caption>\n        </Title>\n        <Left>378.00pt</Left>\n        <Top>131.50pt</Top>\n      </Chart>\n      <Chart Name=\"Chart5\">\n        <Height>144.00pt</Height>\n        <Width>288.00pt</Width>\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BackgroundColor>White</BackgroundColor>\n          <BackgroundGradientType>LeftRight</BackgroundGradientType>\n          <BackgroundGradientEndColor>Azure</BackgroundGradientEndColor>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Type>Pie</Type>\n        <Subtype>Plain</Subtype>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"DynamicCategoriesGroup5\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <CategoryAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Region</Caption>\n              <Style>\n                <BorderStyle />\n                <BorderColor />\n                <BorderWidth />\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </CategoryAxis>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"DynamicSeriesGroup5\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <ValueAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <FontSize>8pt</FontSize>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Sales</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </ValueAxis>\n        <Legend>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <PaddingLeft>5pt</PaddingLeft>\n            <FontSize>8pt</FontSize>\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Visible>True</Visible>\n          <Position>RightCenter</Position>\n        </Legend>\n        <Title>\n          <Style>\n            <FontWeight>Bold</FontWeight>\n            <FontSize>14pt</FontSize>\n            <TextAlign>Center</TextAlign>\n            <BorderStyle />\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Caption>Region Year Chart</Caption>\n        </Title>\n        <Left>40.6pt</Left>\n        <Top>300.2pt</Top>\n      </Chart>\n      <Textbox Name=\"Textbox4\">\n        <Height>62.49pt</Height>\n        <Width>21.06pt</Width>\n        <Value>Column</Value>\n        <Left>9.70pt</Left>\n        <Top>31.20pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <WritingMode>tb-rl</WritingMode>\n          <FontWeight>Bold</FontWeight>\n          <FontSize>14pt</FontSize>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox5\">\n        <Height>62.49pt</Height>\n        <Width>21.06pt</Width>\n        <Value>Bar</Value>\n        <Left>9.70pt</Left>\n        <Top>171.69pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <WritingMode>tb-rl</WritingMode>\n          <FontWeight>Bold</FontWeight>\n          <FontSize>14pt</FontSize>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox6\">\n        <Height>118.21pt</Height>\n        <Width>23.31pt</Width>\n        <Value>Area - Stacked</Value>\n        <Left>345.60pt</Left>\n        <Top>0.00pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <WritingMode>tb-rl</WritingMode>\n          <FontWeight>Bold</FontWeight>\n          <FontSize>14pt</FontSize>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox7\">\n        <Height>111.41pt</Height>\n        <Width>27.83pt</Width>\n        <Value>Line - Smooth</Value>\n        <Left>341.08pt</Left>\n        <Top>130.90pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <WritingMode>tb-rl</WritingMode>\n          <FontWeight>Bold</FontWeight>\n          <FontSize>14pt</FontSize>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox8\">\n        <Height>62.49pt</Height>\n        <Width>21.06pt</Width>\n        <Value>Pie</Value>\n        <Left>9.70pt</Left>\n        <Top>313.97pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <WritingMode>tb-rl</WritingMode>\n          <FontWeight>Bold</FontWeight>\n          <FontSize>14pt</FontSize>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox9\">\n        <Height>62.49pt</Height>\n        <Width>21.06pt</Width>\n        <Value>Matrix</Value>\n        <Left>9.7pt</Left>\n        <Top>462.5pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <WritingMode>tb-rl</WritingMode>\n          <FontWeight>Bold</FontWeight>\n          <FontSize>14pt</FontSize>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox10\">\n        <Height>100.90pt</Height>\n        <Width>24.06pt</Width>\n        <Value>Doughnut</Value>\n        <Left>344.85pt</Left>\n        <Top>261.40pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <WritingMode>tb-rl</WritingMode>\n          <FontWeight>Bold</FontWeight>\n          <FontSize>14pt</FontSize>\n        </Style>\n      </Textbox>\n      <Chart Name=\"Chart6\">\n        <Height>113.17pt</Height>\n        <Width>288.00pt</Width>\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BackgroundColor>White</BackgroundColor>\n          <BackgroundGradientType>LeftRight</BackgroundGradientType>\n          <BackgroundGradientEndColor>Azure</BackgroundGradientEndColor>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Type>Doughnut</Type>\n        <Subtype>Plain</Subtype>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"DynamicCategoriesGroup6\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <CategoryAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Region</Caption>\n              <Style>\n                <BorderStyle />\n                <BorderColor />\n                <BorderWidth />\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </CategoryAxis>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"DynamicSeriesGroup6\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <ValueAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <FontSize>8pt</FontSize>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Sales</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </ValueAxis>\n        <Legend>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <PaddingLeft>5pt</PaddingLeft>\n            <FontSize>8pt</FontSize>\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Visible>True</Visible>\n          <Position>RightCenter</Position>\n        </Legend>\n        <Title>\n          <Style>\n            <FontWeight>Bold</FontWeight>\n            <FontSize>14pt</FontSize>\n            <TextAlign>Center</TextAlign>\n            <BorderStyle />\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Caption>Region Year Chart</Caption>\n        </Title>\n        <Left>378.00pt</Left>\n        <Top>262.00pt</Top>\n      </Chart>\n      <Textbox Name=\"Textbox3\">\n        <Height>111.41pt</Height>\n        <Width>27.83pt</Width>\n        <Value>Bubble</Value>\n        <Left>341.1pt</Left>\n        <Top>386.0pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <WritingMode>tb-rl</WritingMode>\n          <FontWeight>Bold</FontWeight>\n          <FontSize>14pt</FontSize>\n        </Style>\n      </Textbox>\n      <Chart Name=\"Chart7\">\n        <Height>157.13pt</Height>\n        <Width>281.92pt</Width>\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Legend>\n          <Visible>true</Visible>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Position>BottomCenter</Position>\n          <Layout>Table</Layout>\n          <InsidePlotArea>false</InsidePlotArea>\n        </Legend>\n        <Subtype>Plain</Subtype>\n        <Title />\n        <CategoryAxis>\n          <Axis>\n            <Title>\n              <Caption>Sales</Caption>\n              <Style>\n                <FontWeight>700</FontWeight>\n              </Style>\n            </Title>\n            <Style>\n              <FontFamily>Verdana</FontFamily>\n              <FontSize>8pt</FontSize>\n              <Format>C0</Format>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n            <MajorGridLines>\n              <ShowGridLines>true</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <MajorTickMarks>Outside</MajorTickMarks>\n            <Visible>true</Visible>\n            <Scalar>true</Scalar>\n          </Axis>\n        </CategoryAxis>\n        <PointWidth>0</PointWidth>\n        <ThreeDProperties>\n          <Rotation>30</Rotation>\n          <Inclination>30</Inclination>\n          <Shading>Simple</Shading>\n          <WallThickness>50</WallThickness>\n        </ThreeDProperties>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"DynamicSeriesGroup7\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value + \" \" + Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Region.Value + \" \" + Fields!Year.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <PlotArea>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BackgroundColor>LightGoldenrodYellow</BackgroundColor>\n            <BackgroundGradientEndColor>WhiteSmoke</BackgroundGradientEndColor>\n            <BackgroundGradientType>TopBottom</BackgroundGradientType>\n          </Style>\n        </PlotArea>\n        <ValueAxis>\n          <Axis>\n            <Title>\n              <Caption>Year</Caption>\n              <Style>\n                <FontWeight>700</FontWeight>\n                <WritingMode>tb-rl</WritingMode>\n                <BorderStyle />\n                <BorderColor />\n                <BorderWidth />\n              </Style>\n            </Title>\n            <Style>\n              <FontFamily>Verdana</FontFamily>\n              <FontSize>8pt</FontSize>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n              <BackgroundColor>Black</BackgroundColor>\n            </Style>\n            <MajorGridLines>\n              <ShowGridLines>true</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderColor>\n                  <Default>Black</Default>\n                </BorderColor>\n                <BorderWidth>\n                  <Default>1pt</Default>\n                </BorderWidth>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderColor>\n                  <Default>Black</Default>\n                </BorderColor>\n                <BorderWidth>\n                  <Default>1pt</Default>\n                </BorderWidth>\n              </Style>\n              <ShowGridLines>false</ShowGridLines>\n            </MinorGridLines>\n            <MajorTickMarks>None</MajorTickMarks>\n            <Min>1992</Min>\n            <MajorInterval>1</MajorInterval>\n            <Margin>true</Margin>\n            <Visible>true</Visible>\n            <Scalar>true</Scalar>\n            <Max>1995</Max>\n          </Axis>\n        </ValueAxis>\n        <Type>Bubble</Type>\n        <Palette>Default</Palette>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                  <DataValue>\n                    <Value>=Fields!Year.Value</Value>\n                  </DataValue>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n                <DataLabel />\n                <Marker>\n                  <Size>6pt</Size>\n                </Marker>\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <Style>\n          <BackgroundColor>White</BackgroundColor>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <BackgroundGradientEndColor>Azure</BackgroundGradientEndColor>\n          <BackgroundGradientType>LeftRight</BackgroundGradientType>\n        </Style>\n        <Left>378.00pt</Left>\n        <Top>384.70pt</Top>\n      </Chart>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>7in</Width>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/Contacts.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<Rows>\n<Row><ContactName>Alejandra Camino</ContactName><Phone>(91) 745 6200</Phone></Row>\n<Row><ContactName>Alexander Feuer</ContactName><Phone>0342-023176</Phone></Row>\n<Row><ContactName>Ana Trujillo</ContactName><Phone>(5) 555-4729</Phone></Row>\n<Row><ContactName>Anabela Domingues</ContactName><Phone>(11) 555-2167</Phone></Row>\n<Row><ContactName>Andr&#233; Fonseca</ContactName><Phone>(11) 555-9482</Phone></Row>\n<Row><ContactName>Ann Devon</ContactName><Phone>(171) 555-0297</Phone></Row>\n<Row><ContactName>Annette Roulet</ContactName><Phone>61.77.61.10</Phone></Row>\n<Row><ContactName>Antonio Moreno</ContactName><Phone>(5) 555-3932</Phone></Row>\n<Row><ContactName>Aria Cruz</ContactName><Phone>(11) 555-9857</Phone></Row>\n<Row><ContactName>Art Braunschweiger</ContactName><Phone>(307) 555-4680</Phone></Row>\n<Row><ContactName>Bernardo Batista</ContactName><Phone>(21) 555-4252</Phone></Row>\n<Row><ContactName>Carine Schmitt</ContactName><Phone>40.32.21.21</Phone></Row>\n<Row><ContactName>Carlos Gonz&#225;lez</ContactName><Phone>(9) 331-6954</Phone></Row>\n<Row><ContactName>Carlos Hern&#225;ndez</ContactName><Phone>(5) 555-1340</Phone></Row>\n<Row><ContactName>Catherine Dewey</ContactName><Phone>(02) 201 24 67</Phone></Row>\n<Row><ContactName>Christina Berglund</ContactName><Phone>0921-12 34 65</Phone></Row>\n<Row><ContactName>Daniel Tonini</ContactName><Phone>30.59.84.10</Phone></Row>\n<Row><ContactName>Diego Roel</ContactName><Phone>(91) 555 94 44</Phone></Row>\n<Row><ContactName>Dominique Perrier</ContactName><Phone>(1) 47.55.60.10</Phone></Row>\n<Row><ContactName>Eduardo Saavedra</ContactName><Phone>(93) 203 4560</Phone></Row>\n<Row><ContactName>Elizabeth Brown</ContactName><Phone>(171) 555-2282</Phone></Row>\n<Row><ContactName>Elizabeth Lincoln</ContactName><Phone>(604) 555-4729</Phone></Row>\n<Row><ContactName>Felipe Izquierdo</ContactName><Phone>(8) 34-56-12</Phone></Row>\n<Row><ContactName>Fran Wilson</ContactName><Phone>(503) 555-9573</Phone></Row>\n<Row><ContactName>Francisco Chang</ContactName><Phone>(5) 555-3392</Phone></Row>\n<Row><ContactName>Fr&#233;d&#233;rique Citeaux</ContactName><Phone>88.60.15.31</Phone></Row>\n<Row><ContactName>Georg Pipps</ContactName><Phone>6562-9722</Phone></Row>\n<Row><ContactName>Giovanni Rovelli</ContactName><Phone>035-640230</Phone></Row>\n<Row><ContactName>Guillermo Fern&#225;ndez</ContactName><Phone>(5) 552-3745</Phone></Row>\n<Row><ContactName>Hanna Moos</ContactName><Phone>0621-08460</Phone></Row>\n<Row><ContactName>Hari Kumar</ContactName><Phone>(171) 555-1717</Phone></Row>\n<Row><ContactName>Helen Bennett</ContactName><Phone>(198) 555-8888</Phone></Row>\n<Row><ContactName>Helvetius Nagy</ContactName><Phone>(206) 555-8257</Phone></Row>\n<Row><ContactName>Henriette Pfalzheim</ContactName><Phone>0221-0644327</Phone></Row>\n<Row><ContactName>Horst Kloss</ContactName><Phone>0372-035188</Phone></Row>\n<Row><ContactName>Howard Snyder</ContactName><Phone>(503) 555-7555</Phone></Row>\n<Row><ContactName>Isabel de Castro</ContactName><Phone>(1) 356-5634</Phone></Row>\n<Row><ContactName>Jaime Yorres</ContactName><Phone>(415) 555-5938</Phone></Row>\n<Row><ContactName>Janete Limeira</ContactName><Phone>(21) 555-3412</Phone></Row>\n<Row><ContactName>Janine Labrune</ContactName><Phone>40.67.88.88</Phone></Row>\n<Row><ContactName>Jean Fresni&#232;re</ContactName><Phone>(514) 555-8054</Phone></Row>\n<Row><ContactName>John Steel</ContactName><Phone>(509) 555-7969</Phone></Row>\n<Row><ContactName>Jonas Bergulfsen</ContactName><Phone>07-98 92 35</Phone></Row>\n<Row><ContactName>Jose Pavarotti</ContactName><Phone>(208) 555-8097</Phone></Row>\n<Row><ContactName>Jos&#233; Pedro Freyre</ContactName><Phone>(95) 555 82 82</Phone></Row>\n<Row><ContactName>Jytte Petersen</ContactName><Phone>31 12 34 56</Phone></Row>\n<Row><ContactName>Karin Josephs</ContactName><Phone>0251-031259</Phone></Row>\n<Row><ContactName>Karl Jablonski</ContactName><Phone>(206) 555-4112</Phone></Row>\n<Row><ContactName>Laurence Lebihan</ContactName><Phone>91.24.45.40</Phone></Row>\n<Row><ContactName>Lino Rodriguez</ContactName><Phone>(1) 354-2534</Phone></Row>\n<Row><ContactName>Liu Wong</ContactName><Phone>(406) 555-5834</Phone></Row>\n<Row><ContactName>Liz Nixon</ContactName><Phone>(503) 555-3612</Phone></Row>\n<Row><ContactName>L&#250;cia Carvalho</ContactName><Phone>(11) 555-1189</Phone></Row>\n<Row><ContactName>Manuel Pereira</ContactName><Phone>(2) 283-2951</Phone></Row>\n<Row><ContactName>Maria Anders</ContactName><Phone>030-0074321</Phone></Row>\n<Row><ContactName>Maria Larsson</ContactName><Phone>0695-34 67 21</Phone></Row>\n<Row><ContactName>Marie Bertrand</ContactName><Phone>(1) 42.34.22.66</Phone></Row>\n<Row><ContactName>Mario Pontes</ContactName><Phone>(21) 555-0091</Phone></Row>\n<Row><ContactName>Mart&#237;n Sommer</ContactName><Phone>(91) 555 22 82</Phone></Row>\n<Row><ContactName>Martine Ranc&#233;</ContactName><Phone>20.16.10.16</Phone></Row>\n<Row><ContactName>Mary Saveley</ContactName><Phone>78.32.54.86</Phone></Row>\n<Row><ContactName>Matti Karttunen</ContactName><Phone>90-224 8858</Phone></Row>\n<Row><ContactName>Maurizio Moroni</ContactName><Phone>0522-556721</Phone></Row>\n<Row><ContactName>Michael Holz</ContactName><Phone>0897-034214</Phone></Row>\n<Row><ContactName>Miguel Angel Paolino</ContactName><Phone>(5) 555-2933</Phone></Row>\n<Row><ContactName>Palle Ibsen</ContactName><Phone>86 21 32 43</Phone></Row>\n<Row><ContactName>Paolo Accorti</ContactName><Phone>011-4988260</Phone></Row>\n<Row><ContactName>Pascale Cartrain</ContactName><Phone>(071) 23 67 22 20</Phone></Row>\n<Row><ContactName>Patricia McKenna</ContactName><Phone>2967 542</Phone></Row>\n<Row><ContactName>Patricio Simpson</ContactName><Phone>(1) 135-5555</Phone></Row>\n<Row><ContactName>Paul Henriot</ContactName><Phone>26.47.15.10</Phone></Row>\n<Row><ContactName>Paula Parente</ContactName><Phone>(14) 555-8122</Phone></Row>\n<Row><ContactName>Paula Wilson</ContactName><Phone>(505) 555-5939</Phone></Row>\n<Row><ContactName>Pedro Afonso</ContactName><Phone>(11) 555-7647</Phone></Row>\n<Row><ContactName>Peter Franken</ContactName><Phone>089-0877310</Phone></Row>\n<Row><ContactName>Philip Cramer</ContactName><Phone>0555-09876</Phone></Row>\n<Row><ContactName>Pirkko Koskitalo</ContactName><Phone>981-443655</Phone></Row>\n<Row><ContactName>Renate Messner</ContactName><Phone>069-0245984</Phone></Row>\n<Row><ContactName>Rene Phillips</ContactName><Phone>(907) 555-7584</Phone></Row>\n<Row><ContactName>Rita M&#252;ller</ContactName><Phone>0711-020361</Phone></Row>\n<Row><ContactName>Roland Mendel</ContactName><Phone>7675-3425</Phone></Row>\n<Row><ContactName>Sergio Guti&#233;rrez</ContactName><Phone>(1) 123-5555</Phone></Row>\n<Row><ContactName>Simon Crowther</ContactName><Phone>(171) 555-7733</Phone></Row>\n<Row><ContactName>Sven Ottlieb</ContactName><Phone>0241-039123</Phone></Row>\n<Row><ContactName>Thomas Hardy</ContactName><Phone>(171) 555-7788</Phone></Row>\n<Row><ContactName>Victoria Ashworth</ContactName><Phone>(171) 555-1212</Phone></Row>\n<Row><ContactName>Yang Wang</ContactName><Phone>0452-076545</Phone></Row>\n<Row><ContactName>Yoshi Latimer</ContactName><Phone>(503) 555-6874</Phone></Row>\n<Row><ContactName>Yoshi Tannamuri</ContactName><Phone>(604) 555-3392</Phone></Row>\n<Row><ContactName>Yvonne Moncada</ContactName><Phone>(1) 135-5333</Phone></Row>\n<Row><ContactName>Zbyszek Piestrzeniewicz</ContactName><Phone>(26) 642-7012</Phone></Row>\n</Rows>\n"
  },
  {
    "path": "Examples/Examples/DrilldownTest.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"DrilldownTest\">\n  <Description>\n  </Description>\n  <Author>fyiReporting Software, LLC</Author>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT CategoryName, ProductName, ProductSales FROM \"Product Sales for 1997\"</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"CategoryName\">\n          <DataField>CategoryName</DataField>\n        </Field>\n        <Field Name=\"ProductName\">\n          <DataField>ProductName</DataField>\n        </Field>\n        <Field Name=\"ProductSales\">\n          <DataField>ProductSales</DataField>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>.25 in</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>57.1pt</Height>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <TableGroups>\n          <TableGroup>\n            <Header>\n              <TableRows>\n                <TableRow>\n                  <Height>12 pt</Height>\n                  <TableCells>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"CatToggle\">\n                          <Value>=Fields!CategoryName.Value</Value>\n                          <Style>\n                            <FontWeight>bold</FontWeight>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox5\">\n                          <Value>\n                          </Value>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox6\">\n                          <Value>=sum(Fields!ProductSales.Value)</Value>\n                          <Style>\n                            <Format>$#,##0.00</Format>\n                            <TextAlign>Right</TextAlign>\n                            <FontWeight>=iif(sum(Fields!ProductSales.Value)&gt;=100000,\"bold\", \"normal\")</FontWeight>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox7\">\n                          <Value>\n                          </Value>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                  </TableCells>\n                </TableRow>\n              </TableRows>\n              <RepeatOnNewPage>true</RepeatOnNewPage>\n            </Header>\n            <Grouping Name=\"CatNameGroup\">\n              <GroupExpressions>\n                <GroupExpression>=Fields!CategoryName.Value</GroupExpression>\n              </GroupExpressions>\n            </Grouping>\n          </TableGroup>\n        </TableGroups>\n        <Style>\n          <BorderStyle>Solid</BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>2 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox1\">\n                      <Value>Category</Value>\n                      <Style>\n                        <FontWeight>bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>Product</Value>\n                      <Style>\n                        <FontWeight>bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>Sales</Value>\n                      <Style>\n                        <FontWeight>bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>Running Sum</Value>\n                      <Style>\n                        <FontWeight>bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <Visibility>\n            <Hidden>true</Hidden>\n            <ToggleItem>CatToggle</ToggleItem>\n          </Visibility>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox8\">\n                      <Value>\n                      </Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"ProductName\">\n                      <Value>=Fields!ProductName.Value</Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"ProductSales\">\n                      <Value>=Fields!ProductSales.Value</Value>\n                      <Style>\n                        <TextAlign>Right</TextAlign>\n                        <Format>$#,##0.00</Format>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox9\">\n                      <Value>=RunningValue(Fields!ProductSales.Value, sum, CatNameGroup)</Value>\n                      <Style>\n                        <TextAlign>Right</TextAlign>\n                        <Format>$#,##0.00</Format>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n        <Footer>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>All products</Value>\n                      <Style>\n                        <Color>blue</Color>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox11\">\n                      <Value>\n                      </Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox12\">\n                      <Value>=sum(Fields!ProductSales.Value)</Value>\n                      <Style>\n                        <Format>$#,##0.00</Format>\n                        <TextAlign>Right</TextAlign>\n                        <Color>blue</Color>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox13\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <Format>$#,##0.00</Format>\n                        <TextAlign>Right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Footer>\n      </Table>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>8.5in</Width>\n  <PageWidth>8.5in</PageWidth>\n  <PageHeight>11in</PageHeight>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/DrilldownTwoLevel.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>Drilldown with two level</Description>\n  <Author>Kim</Author>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT CompanyName,Orders.OrderID,OrderDate,ProductName, od.UnitPrice*od.Quantity*(1-od.Discount) as 'Cost' FROM Customers, Orders, \"Order Details\" od, Products WHERE Customers.CustomerID = Orders.CustomerID and Orders.OrderID = od.OrderID and od.ProductID = Products.ProductID</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"CompanyName\">\n          <DataField>CompanyName</DataField>\n        </Field>\n        <Field Name=\"OrderID\">\n          <DataField>OrderID</DataField>\n        </Field>\n        <Field Name=\"OrderDate\">\n          <DataField>OrderDate</DataField>\n        </Field>\n        <Field Name=\"ProductName\">\n          <DataField>ProductName</DataField>\n        </Field>\n        <Field Name=\"Cost\">\n          <DataField>Cost</DataField>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>0.0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>78.6pt</Height>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>.75 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.5 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>2 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>.5 in</Width>\n          </TableColumn>\n        </TableColumns>\n        <TableGroups>\n          <TableGroup>\n            <Header>\n              <TableRows>\n                <TableRow>\n                  <Height>12 pt</Height>\n                  <TableCells>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"CmpToggle\">\n                          <Value>=Fields!CompanyName.Value</Value>\n                          <Style>\n                            <FontWeight>bold</FontWeight>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                            <TextAlign>Left</TextAlign>\n                            <PaddingRight>20 pt</PaddingRight>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                      <ColSpan>5</ColSpan>\n                    </TableCell>\n                  </TableCells>\n                </TableRow>\n              </TableRows>\n              <RepeatOnNewPage>true</RepeatOnNewPage>\n            </Header>\n            <Grouping Name=\"CmpNameGroup\">\n              <GroupExpressions>\n                <GroupExpression>=Fields!CompanyName.Value</GroupExpression>\n              </GroupExpressions>\n            </Grouping>\n          </TableGroup>\n          <TableGroup>\n            <Visibility>\n              <Hidden>true</Hidden>\n              <ToggleItem>CmpToggle</ToggleItem>\n            </Visibility>\n            <Header>\n              <TableRows>\n                <TableRow>\n                  <Height>12 pt</Height>\n                  <TableCells>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox6\">\n                          <Value>\n                          </Value>\n                          <Style>\n                            <FontWeight>bold</FontWeight>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"OrdToggle\">\n                          <Value>=Fields!OrderID.Value</Value>\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox7\">\n                          <Value>=Fields!OrderDate.Value</Value>\n                          <Style>\n                            <Format>MMM dd, yyyy</Format>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox8\">\n                          <Value>\n                          </Value>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox9\">\n                          <Value>\n                          </Value>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                  </TableCells>\n                </TableRow>\n              </TableRows>\n              <RepeatOnNewPage>true</RepeatOnNewPage>\n            </Header>\n            <Grouping Name=\"OrdNameGroup\">\n              <GroupExpressions>\n                <GroupExpression>=Fields!OrderID.Value</GroupExpression>\n              </GroupExpressions>\n            </Grouping>\n          </TableGroup>\n        </TableGroups>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox1\">\n                      <Value>Company</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>OrderID</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>OrderDate</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>ProductName</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value>Cost</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <Visibility>\n            <Hidden>true</Hidden>\n            <ToggleItem>OrdToggle</ToggleItem>\n          </Visibility>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>\n                      </Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox11\">\n                      <Value>\n                      </Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox12\">\n                      <Value>\n                      </Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"ProductName\">\n                      <Value>=Fields!ProductName.Value</Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Cost\">\n                      <Value>=Fields!Cost.Value</Value>\n                      <Style>\n                        <TextAlign>Right</TextAlign>\n                        <Format>$#,##0.00</Format>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n        <Left>5.8pt</Left>\n        <Top>3.3pt</Top>\n      </Table>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>8in</Width>\n  <PageWidth>8.5in</PageWidth>\n  <PageHeight>11in</PageHeight>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/EmployeeOrg.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Report>\n  <PageHeader>\n    <Height>27.4pt</Height>\n    <ReportItems>\n      <Textbox Name=\"textbox1\">\n        <Style>\n          <PaddingLeft>2pt</PaddingLeft>\n          <FontSize>14pt</FontSize>\n          <PaddingBottom>2pt</PaddingBottom>\n          <PaddingTop>2pt</PaddingTop>\n          <PaddingRight>2pt</PaddingRight>\n          <FontWeight>700</FontWeight>\n        </Style>\n        <Height>0.375in</Height>\n        <Width>4in</Width>\n        <CanGrow>true</CanGrow>\n        <Value>Employee Organization Chart</Value>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <ReportItems>\n      <Table Name=\"tablex\">\n        <Height>0.75in</Height>\n        <ZIndex>2</ZIndex>\n        <Style />\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>0.25in</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"textbox2\">\n                      <Style>\n                        <BorderStyle>\n                          <Bottom>Solid</Bottom>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <BorderWidth>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <PaddingBottom>2pt</PaddingBottom>\n                        <PaddingTop>2pt</PaddingTop>\n                        <PaddingRight>2pt</PaddingRight>\n                        <FontWeight>700</FontWeight>\n                      </Style>\n                      <ZIndex>8</ZIndex>\n                      <CanGrow>true</CanGrow>\n                      <Value>Employee Name</Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"textbox3\">\n                      <Style>\n                        <BorderStyle>\n                          <Bottom>Solid</Bottom>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <BorderWidth>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingBottom>2pt</PaddingBottom>\n                        <PaddingTop>2pt</PaddingTop>\n                        <PaddingRight>2pt</PaddingRight>\n                        <FontWeight>700</FontWeight>\n                      </Style>\n                      <ZIndex>7</ZIndex>\n                      <CanGrow>true</CanGrow>\n                      <Value>Level</Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"textbox4\">\n                      <Style>\n                        <BorderStyle>\n                          <Bottom>Solid</Bottom>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <BorderWidth>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingBottom>2pt</PaddingBottom>\n                        <PaddingTop>2pt</PaddingTop>\n                        <PaddingRight>2pt</PaddingRight>\n                        <FontWeight>700</FontWeight>\n                      </Style>\n                      <ZIndex>6</ZIndex>\n                      <CanGrow>true</CanGrow>\n                      <Value>Employees</Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>MgrID<Textbox Name=\"Textbox1\"><Value>Group Salary</Value><Style><BorderStyle><Bottom>Solid</Bottom></BorderStyle><TextAlign>Right</TextAlign><PaddingLeft>2pt</PaddingLeft><BorderWidth><Bottom>1pt</Bottom></BorderWidth><PaddingBottom>2pt</PaddingBottom><PaddingTop>2pt</PaddingTop><PaddingRight>2pt</PaddingRight><FontWeight>700</FontWeight></Style></Textbox></ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>0.25in</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"EmployeeName\">\n                      <Style>\n                        <PaddingLeft>=Level(\"OrgChart_Recursive\") * 15 &amp; \"pt\"</PaddingLeft>\n                        <PaddingBottom>2pt</PaddingBottom>\n                        <PaddingTop>2pt</PaddingTop>\n                        <PaddingRight>2pt</PaddingRight>\n                      </Style>\n                      <ZIndex>2</ZIndex>\n                      <CanGrow>true</CanGrow>\n                      <Value>=First(Fields!EmployeeName.Value)</Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"textbox6\">\n                      <Style>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingBottom>2pt</PaddingBottom>\n                        <PaddingTop>2pt</PaddingTop>\n                        <PaddingRight>2pt</PaddingRight>\n                      </Style>\n                      <ZIndex>1</ZIndex>\n                      <CanGrow>true</CanGrow>\n                      <Value>=Level(\"OrgChart_Recursive\") + 1</Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"textbox7\">\n                      <Style>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingBottom>2pt</PaddingBottom>\n                        <PaddingTop>2pt</PaddingTop>\n                        <PaddingRight>2pt</PaddingRight>\n                      </Style>\n                      <CanGrow>true</CanGrow>\n                      <Value>=Count(Fields!EmployeeID.Value, \"OrgChart_Recursive\", Recursive)</Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>=Sum(Fields!Salary.Value, \"OrgChart_Recursive\", Recursive)</Value>\n                      <Style>\n                        <Format>$#,##0</Format>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <PaddingBottom>2pt</PaddingBottom>\n                        <PaddingTop>2pt</PaddingTop>\n                        <PaddingRight>2pt</PaddingRight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <Grouping Name=\"OrgChart_Recursive\">\n            <GroupExpressions>\n              <GroupExpression>=Fields!EmployeeID.Value</GroupExpression>\n            </GroupExpressions>\n            <Parent>=Fields!ManagerID.Value</Parent>\n          </Grouping>\n          <Sorting>\n            <SortBy>\n              <SortExpression>=Fields!EmployeeName.Value</SortExpression>\n              <Direction>Ascending</Direction>\n            </SortBy>\n          </Sorting>\n        </Details>\n        <DataSetName>EmployeesAndManagers</DataSetName>\n        <Top>0.325in</Top>\n        <Footer>\n          <TableRows>\n            <TableRow>\n              <Height>0.25in</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"textbox8\">\n                      <Style>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <PaddingBottom>2pt</PaddingBottom>\n                        <PaddingTop>2pt</PaddingTop>\n                        <PaddingRight>2pt</PaddingRight>\n                      </Style>\n                      <ZIndex>5</ZIndex>\n                      <CanGrow>true</CanGrow>\n                      <Value />\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"textbox9\">\n                      <Style>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingBottom>2pt</PaddingBottom>\n                        <PaddingTop>2pt</PaddingTop>\n                        <PaddingRight>2pt</PaddingRight>\n                      </Style>\n                      <ZIndex>4</ZIndex>\n                      <CanGrow>true</CanGrow>\n                      <Value />\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"textbox10\">\n                      <Style>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingBottom>2pt</PaddingBottom>\n                        <PaddingTop>2pt</PaddingTop>\n                        <PaddingRight>2pt</PaddingRight>\n                      </Style>\n                      <ZIndex>3</ZIndex>\n                      <CanGrow>true</CanGrow>\n                      <Value />\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>\n                      </Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Footer>\n        <TableColumns>\n          <TableColumn>\n            <Width>2in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n        </TableColumns>\n      </Table>\n    </ReportItems>\n    <Style />\n    <Height>70.6pt</Height>\n  </Body>\n  <TopMargin>.1in</TopMargin>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <!--\t\t\t<DataProvider>SQL</DataProvider>    use this line when connecting to SQL Server -->\n        <DataProvider>xxx</DataProvider>\n        <!-- Use this line when using xml data -->\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <Width>7in</Width>\n  <DataSets>\n    <DataSet Name=\"EmployeesAndManagers\">\n      <Fields>\n        <Field Name=\"EmployeeID\">\n          <DataField>EmployeeID</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n        <Field Name=\"EmployeeName\">\n          <DataField>EmployeeName</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"ManagerID\">\n          <DataField>ManagerID</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n        <Field Name=\"Salary\">\n          <DataField>Salary</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <Rows>\n        <Row>\n          <EmployeeID>1</EmployeeID>\n          <EmployeeName>Linda</EmployeeName>\n          <ManagerID>9</ManagerID>\n          <Salary>34000</Salary>\n        </Row>\n        <Row>\n          <EmployeeID>2</EmployeeID>\n          <EmployeeName>Harry</EmployeeName>\n          <ManagerID>15</ManagerID>\n          <Salary>56000</Salary>\n        </Row>\n        <Row>\n          <EmployeeID>3</EmployeeID>\n          <EmployeeName>Tim</EmployeeName>\n          <ManagerID>9</ManagerID>\n          <Salary>43000</Salary>\n        </Row>\n        <Row>\n          <EmployeeID>4</EmployeeID>\n          <EmployeeName>Buddy</EmployeeName>\n          <ManagerID>15</ManagerID>\n          <Salary>76000</Salary>\n        </Row>\n        <Row>\n          <EmployeeID>5</EmployeeID>\n          <EmployeeName>Kim</EmployeeName>\n          <ManagerID>12</ManagerID>\n          <Salary>5000</Salary>\n        </Row>\n        <Row>\n          <EmployeeID>6</EmployeeID>\n          <EmployeeName>Howard</EmployeeName>\n          <ManagerID>12</ManagerID>\n          <Salary>82000</Salary>\n        </Row>\n        <Row>\n          <EmployeeID>7</EmployeeID>\n          <EmployeeName>Emma</EmployeeName>\n          <ManagerID>\n          </ManagerID>\n          <Salary>103000</Salary>\n        </Row>\n        <Row>\n          <EmployeeID>8</EmployeeID>\n          <EmployeeName>Evan</EmployeeName>\n          <ManagerID>12</ManagerID>\n          <Salary>125000</Salary>\n        </Row>\n        <Row>\n          <EmployeeID>9</EmployeeID>\n          <EmployeeName>George</EmployeeName>\n          <ManagerID>6</ManagerID>\n          <Salary>67000</Salary>\n        </Row>\n        <Row>\n          <EmployeeID>10</EmployeeID>\n          <EmployeeName>Daisy</EmployeeName>\n          <ManagerID>6</ManagerID>\n          <Salary>34000</Salary>\n        </Row>\n        <Row>\n          <EmployeeID>11</EmployeeID>\n          <EmployeeName>Lynn</EmployeeName>\n          <ManagerID>7</ManagerID>\n          <Salary>57000</Salary>\n        </Row>\n        <Row>\n          <EmployeeID>12</EmployeeID>\n          <EmployeeName>Joseph</EmployeeName>\n          <ManagerID>7</ManagerID>\n          <Salary>24000</Salary>\n        </Row>\n        <Row>\n          <EmployeeID>13</EmployeeID>\n          <EmployeeName>Alec</EmployeeName>\n          <ManagerID>6</ManagerID>\n          <Salary>67000</Salary>\n        </Row>\n        <Row>\n          <EmployeeID>14</EmployeeID>\n          <EmployeeName>Holly</EmployeeName>\n          <ManagerID>4</ManagerID>\n          <Salary>89000</Salary>\n        </Row>\n        <Row>\n          <EmployeeID>15</EmployeeID>\n          <EmployeeName>William</EmployeeName>\n          <ManagerID>7</ManagerID>\n          <Salary>34000</Salary>\n        </Row>\n        <Row>\n          <EmployeeID>16</EmployeeID>\n          <EmployeeName>Lily</EmployeeName>\n          <ManagerID>4</ManagerID>\n          <Salary>123000</Salary>\n        </Row>\n      </Rows>\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <!--    <CommandText>SELECT EmployeeID, FirstName + ' ' + LastName AS EmployeeName, ReportsTo AS ManagerID FROM Employees ORDER BY 2</CommandText> -->\n      </Query>\n    </DataSet>\n  </DataSets>\n  <LeftMargin>1in</LeftMargin>\n  <BottomMargin>1in</BottomMargin>\n  <PageFooter>\n    <Height>0pt</Height>\n  </PageFooter>\n</Report>"
  },
  {
    "path": "Examples/Examples/FileDirectoryTest.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>11in</PageHeight>\n  <PageWidth>14in</PageWidth>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>FileDirectory</DataProvider>\n        <ConnectString>\n        </ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <Width>13in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>Directory=c:\\temp</CommandText>\n        <QueryParameters>\n          <QueryParameter Name=\"FilePattern\">\n            <Value>=Parameters!FilePattern.Value</Value>\n          </QueryParameter>\n          <QueryParameter Name=\"DirectoryPattern\">\n            <Value>=Parameters!DirPattern.Value</Value>\n          </QueryParameter>\n          <QueryParameter Name=\"Directory\">\n            <Value>=Parameters!Directory.Value</Value>\n          </QueryParameter>\n        </QueryParameters>\n      </Query>\n      <Fields>\n        <Field Name=\"Name\">\n          <DataField>Name</DataField>\n        </Field>\n        <Field Name=\"Size\">\n          <DataField>Size</DataField>\n        </Field>\n        <Field Name=\"CreationTime\">\n          <DataField>CreationTime</DataField>\n        </Field>\n        <Field Name=\"LastAccessTime\">\n          <DataField>LastAccessTime</DataField>\n        </Field>\n        <Field Name=\"LastWriteTime\">\n          <DataField>LastWriteTime</DataField>\n        </Field>\n        <Field Name=\"ID\">\n          <DataField>ID</DataField>\n        </Field>\n        <Field Name=\"ParentID\">\n          <DataField>ParentID</DataField>\n        </Field>\n        <Field Name=\"IsDirectory\">\n          <DataField>IsDirectory</DataField>\n        </Field>\n        <Field Name=\"Extension\">\n          <DataField>Extension</DataField>\n        </Field>\n        <Field Name=\"FullName\">\n          <DataField>FullName</DataField>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <Body>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>181.1pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>62.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.5in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>87.9pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>82.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>31.9pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>38.7pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>36.1pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>58.9pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>284.1pt</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox1\">\n                      <Value>Name</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                        <FontSize>8pt</FontSize>\n                      </Style>\n                      <CanGrow>False</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>Size</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                        <FontSize>8pt</FontSize>\n                      </Style>\n                      <CanGrow>False</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>CreationTime</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                        <FontSize>8pt</FontSize>\n                      </Style>\n                      <CanGrow>False</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>LastAccessTime</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                        <FontSize>8pt</FontSize>\n                      </Style>\n                      <CanGrow>False</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value>LastWriteTime</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                        <FontSize>8pt</FontSize>\n                      </Style>\n                      <CanGrow>False</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox6\">\n                      <Value>ID</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                        <FontSize>8pt</FontSize>\n                      </Style>\n                      <CanGrow>False</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox7\">\n                      <Value>ParentID</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                        <FontSize>8pt</FontSize>\n                      </Style>\n                      <CanGrow>False</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox8\">\n                      <Value>IsDirectory</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                        <FontSize>8pt</FontSize>\n                      </Style>\n                      <CanGrow>False</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox9\">\n                      <Value>Extension</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                        <FontSize>8pt</FontSize>\n                      </Style>\n                      <CanGrow>False</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>FullName</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                        <FontSize>8pt</FontSize>\n                      </Style>\n                      <CanGrow>False</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Name\">\n                      <Value>=Fields!Name.Value</Value>\n                      <CanGrow>False</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>=Level(\"dir_group\") * 15 &amp; \"pt\"</PaddingLeft>\n                        <BorderColor />\n                        <BorderWidth />\n                        <FontSize>8pt</FontSize>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Size\">\n                      <Value>=Fields!Size.Value</Value>\n                      <CanGrow>False</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>0 pt</PaddingLeft>\n                        <BorderColor />\n                        <BorderWidth />\n                        <Format>#,##0</Format>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingRight>2pt</PaddingRight>\n                        <FontSize>8pt</FontSize>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"CreationTime\">\n                      <Value>=Fields!CreationTime.Value</Value>\n                      <CanGrow>False</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderColor />\n                        <BorderWidth />\n                        <FontSize>8pt</FontSize>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"LastAccessTime\">\n                      <Value>=Fields!LastAccessTime.Value</Value>\n                      <CanGrow>False</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderColor />\n                        <BorderWidth />\n                        <FontSize>8pt</FontSize>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"LastWriteTime\">\n                      <Value>=Fields!LastWriteTime.Value</Value>\n                      <CanGrow>False</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderColor />\n                        <BorderWidth />\n                        <FontSize>8pt</FontSize>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"ID\">\n                      <Value>=Fields!ID.Value</Value>\n                      <CanGrow>False</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                        <BorderColor />\n                        <BorderWidth />\n                        <FontSize>8pt</FontSize>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"ParentID\">\n                      <Value>=Fields!ParentID.Value</Value>\n                      <CanGrow>False</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                        <BorderColor />\n                        <BorderWidth />\n                        <FontSize>8pt</FontSize>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"IsDirectory\">\n                      <Value>=Fields!IsDirectory.Value</Value>\n                      <CanGrow>False</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderColor />\n                        <BorderWidth />\n                        <FontSize>8pt</FontSize>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Extension\">\n                      <Value>=Fields!Extension.Value</Value>\n                      <CanGrow>False</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderColor />\n                        <BorderWidth />\n                        <FontSize>8pt</FontSize>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"FullName\">\n                      <Value>=Fields!FullName.Value</Value>\n                      <CanGrow>False</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderColor />\n                        <BorderWidth />\n                        <FontSize>8pt</FontSize>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <Grouping Name=\"dir_group\">\n            <PageBreakAtStart>False</PageBreakAtStart>\n            <PageBreakAtEnd>False</PageBreakAtEnd>\n            <GroupExpressions>\n              <GroupExpression>=Fields!ID.Value</GroupExpression>\n            </GroupExpressions>\n            <Parent>=Fields!ParentID.Value</Parent>\n          </Grouping>\n        </Details>\n      </Table>\n    </ReportItems>\n    <Height>36pt</Height>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>14 pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox11\">\n        <Top>1 pt</Top>\n        <Left>10 pt</Left>\n        <Height>12 pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber.Value + ' of ' + Globals!TotalPages.Value</Value>\n        <Style>\n          <FontSize>8pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <CanGrow>False</CanGrow>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <PageHeader>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n  <ReportParameters>\n    <ReportParameter Name=\"Directory\">\n      <DataType>String</DataType>\n      <DefaultValue>\n        <Values>\n          <Value>c:\\fyiReporting</Value>\n        </Values>\n      </DefaultValue>\n      <Nullable>False</Nullable>\n      <AllowBlank>False</AllowBlank>\n      <Prompt>Enter a Directory</Prompt>\n    </ReportParameter>\n    <ReportParameter Name=\"FilePattern\">\n      <DataType>String</DataType>\n      <DefaultValue>\n        <Values>\n          <Value>*.rdl</Value>\n        </Values>\n      </DefaultValue>\n      <Nullable>False</Nullable>\n      <AllowBlank>False</AllowBlank>\n      <Prompt>Enter a file search pattern (e.g. *.rdl)</Prompt>\n    </ReportParameter>\n    <ReportParameter Name=\"DirPattern\">\n      <DataType>String</DataType>\n      <DefaultValue>\n        <Values>\n          <Value>*</Value>\n        </Values>\n      </DefaultValue>\n      <Nullable>False</Nullable>\n      <AllowBlank>False</AllowBlank>\n      <Prompt>Enter a directory pattern (e.g *)</Prompt>\n    </ReportParameter>\n  </ReportParameters>\n</Report>"
  },
  {
    "path": "Examples/Examples/FinancialFunctions.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n      </Query>\n      <Fields>\n        <Field Name=\"Work\">\n          <DataField>Work</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n      </Fields>\n      <Rows>\n        <Row>\n          <Work>a</Work>\n        </Row>\n      </Rows>\n    </DataSet>\n  </DataSets>\n  <Body>\n    <Height>6 in</Height>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>3.25 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox1\">\n                      <Value>Expression</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>Result</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>String.Format(\"{0}...{1}\", \"a1\", \"a2\")</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>=String.Format(\"{0}...{1}\", \"a1\", \"a2\")</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value>Math.Sqrt(10)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox6\">\n                      <Value>=Math.Sqrt(10)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox7\">\n                      <Value>FV(.005, 10, -200, -500, false)=2581.4</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox8\">\n                      <Value>=Financial.FV(.005, 10, -200, -500, false)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox9\">\n                      <Value>FV(.01, 12, -1000, 0, true)=12682.5</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>=Financial.FV(.01, 12, -1000, 0, true)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox11\">\n                      <Value>FV(.11/12, 35, -2000, 0, false)=82846.25</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox12\">\n                      <Value>=Financial.FV(.11/12, 35, -2000, 0, false)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox13\">\n                      <Value>FV(.005, 12, -100, -1000, false)=2301.4</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox14\">\n                      <Value>=Financial.FV(.005, 12, -100, -1000, false)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox15\">\n                      <Value>SLN(30000, 7500, 10)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox16\">\n                      <Value>=Financial.SLN(30000, 7500,10)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox17\">\n                      <Value>SYD(30000, 7500, 10, 1)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox18\">\n                      <Value>=Financial.SYD(30000, 7500,10,1)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox19\">\n                      <Value>DDB(2400,300,3650,1)=1.32</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox20\">\n                      <Value>=Financial.DDB(2400,300,3650,1)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox21\">\n                      <Value>DDB(2400,300,120,1,2)=40</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox22\">\n                      <Value>=Financial.DDB(2400,300,120,1,2)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox23\">\n                      <Value>DDB(2400,300,10,1,2)=480</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox24\">\n                      <Value>=Financial.DDB(2400,300,10,1,2)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox25\">\n                      <Value>DDB(2400,300,10,2,1.5)=306</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox26\">\n                      <Value>=Financial.DDB(2400,300,10,2,Convert.ToDouble(1.5))</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox27\">\n                      <Value>DDB(2400,300,10,10)=22.12</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox28\">\n                      <Value>=Financial.DDB(2400,300,10,10)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox29\">\n                      <Value>PV(0.08/12,12*20,500,0,true)=-59777.15</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox30\">\n                      <Value>=Financial.PV(0.08/12,Convert.ToInt32(12*20),500,0,true)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox31\">\n                      <Value>Pmt(0.08/12,10,10000,0,true)=-1037.03</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox32\">\n                      <Value>=Financial.Pmt(0.08/12,10,10000,0,true)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox33\">\n                      <Value>Pmt(0.08/12,10,10000,0,false)=-1030.16</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox34\">\n                      <Value>=Financial.Pmt(0.08/12,10,10000,0,false)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox35\">\n                      <Value>Pmt(0.12/12,5,-5000,0,true)=-1030.20</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox36\">\n                      <Value>=Financial.Pmt(0.12/12,5,-5000,0,true)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox37\">\n                      <Value>Pmt(0.06/12,18*12,0,50000,true)=-129.08</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox38\">\n                      <Value>=Financial.Pmt(0.06/12,216,0,50000,true)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox39\">\n                      <Value>NPer(.12/12,-100,-1000, 10000, false)=59.67386567</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox40\">\n                      <Value>=Financial.NPer(.12/12,-100,-1000, 10000, false)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox41\">\n                      <Value>NPer(.01, -100, 1000, 0, true)=10.5886444594232</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox42\">\n                      <Value>=Financial.NPer(.01, -100, 1000, 0, true)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox43\">\n                      <Value>Rate(48, -200, 8000, 0, true, .1/1)=.0077</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox44\">\n                      <Value>=Financial.Rate(48, -200, 8000, 0, true, .1/1)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox45\">\n                      <Value>Rate(12, -200, 8000, 0, true, .1/1)=-0.1494855</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox46\">\n                      <Value>=Financial.Rate(12, -200, 8000, 0, true, .1/1)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox47\">\n                      <Value>Choose(2,\"a\", \"b\", \"c\")</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox48\">\n                      <Value>=Choose(2,\"a\", \"b\", \"c\")</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox49\">\n                      <Value>Switch(1=2,\"a\", 2=2,\"b\",3=3, \"c\")</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox50\">\n                      <Value>=Switch(1=2,\"a\", 2=2,\"b\",3=3, \"c\")</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox51\">\n                      <Value>IPmt(.1/12,1,36,8000,0,true)=-66.67</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox52\">\n                      <Value>=Financial.IPmt(.1/12,1,36,8000,0,true)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox55\">\n                      <Value>IPmt(.1,3,3,8000,0,true)=-292.45</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox56\">\n                      <Value>=Financial.IPmt(.1,3,3,8000,0,true)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <Format>#,##0.0000</Format>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n      </Table>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageHeader>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>8in</Width>\n  <PageWidth>8.5in</PageWidth>\n  <PageHeight>11in</PageHeight>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/ListReport.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"EmployeeReport\">\n  <Description>This is the very first report</Description>\n  <Author>Kim A, Sheffield</Author>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>Select EmployeeID, LastName, FirstName from Employees</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"EmployeeID\">\n          <DataField>EmployeeID</DataField>\n        </Field>\n        <Field Name=\"LastName\">\n          <DataField>LastName</DataField>\n        </Field>\n        <Field Name=\"FirstName\">\n          <DataField>FirstName</DataField>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>31.7pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox8\">\n        <Height>20.4pt</Height>\n        <Width>320.1pt</Width>\n        <Value>List Report Showing Absolute Positioning</Value>\n        <Left>31.5pt</Left>\n        <Top>5.25pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <FontStyle>Normal</FontStyle>\n          <FontFamily>Arial</FontFamily>\n          <FontWeight>Bold</FontWeight>\n          <FontSize>14pt</FontSize>\n          <TextDecoration>None</TextDecoration>\n          <TextAlign>General</TextAlign>\n          <VerticalAlign>Top</VerticalAlign>\n          <Color>Black</Color>\n          <Direction>LTR</Direction>\n          <WritingMode>lr-tb</WritingMode>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>96.9pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Top>0 in</Top>\n        <Left>.5 in</Left>\n        <Width>1 in</Width>\n        <Height>.25 in</Height>\n        <Value>Employee ID </Value>\n        <Action>\n          <Hyperlink>http://www.fyireporting.com</Hyperlink>\n        </Action>\n      </Textbox>\n      <Textbox Name=\"Textbox2\">\n        <Top>0 in</Top>\n        <Left>1.5 in</Left>\n        <Width>1 in</Width>\n        <Height>.25 in</Height>\n        <Value>Last Name </Value>\n      </Textbox>\n      <Textbox Name=\"Textbox3\">\n        <Top>.25 in</Top>\n        <Left>2.5 in</Left>\n        <Width>1 in</Width>\n        <Height>.25 in</Height>\n        <Value>First Name --</Value>\n      </Textbox>\n      <List Name=\"List1\">\n        <Top>.75 in</Top>\n        <Height>.5 in</Height>\n        <ReportItems>\n          <Textbox Name=\"Textbox4\">\n            <Top>0 in</Top>\n            <Left>.5 in</Left>\n            <Width>1 in</Width>\n            <Height>.25 in</Height>\n            <Value>=Fields!EmployeeID.Value</Value>\n          </Textbox>\n          <Textbox Name=\"Textbox5\">\n            <Top>0 in</Top>\n            <Left>1.5 in</Left>\n            <Width>1 in</Width>\n            <Height>.25 in</Height>\n            <Value>=Fields!LastName.Value</Value>\n            <Action>\n              <Hyperlink>=\"http://www.google.com/search?q=\" + Fields!LastName.Value</Hyperlink>\n            </Action>\n          </Textbox>\n          <Textbox Name=\"Textbox6\">\n            <Top>0 in</Top>\n            <Left>2.5 in</Left>\n            <Width>1 in</Width>\n            <Height>.25 in</Height>\n            <Value>=Fields!FirstName.Value</Value>\n          </Textbox>\n          <Textbox Name=\"Textbox7\">\n            <Top>.25 in</Top>\n            <Left>.5 in</Left>\n            <Width>2 in</Width>\n            <Height>.25 in</Height>\n            <Value>=Fields!FirstName.Value+\" \"+Fields!LastName.Value</Value>\n          </Textbox>\n        </ReportItems>\n      </List>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>8in</Width>\n  <PageWidth>8.5in</PageWidth>\n  <PageHeight>11in</PageHeight>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/MatrixExample.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>8.5 in</PageHeight>\n  <PageWidth>11 in</PageWidth>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n      </Query>\n      <Fields>\n        <Field Name=\"Region\">\n          <DataField>Region</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"State\">\n          <DataField>State</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Year\">\n          <DataField>Year</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Qtr\">\n          <DataField>Qtr</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Sales\">\n          <DataField>Sales</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <Rows>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>50</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>36</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>42</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>27</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>19</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>10</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>34</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>32</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>28</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>9</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>20</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>11</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>16</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>47</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>37</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>5</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>48</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>5</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>44</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>7</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>43</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>31</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>41</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>45</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>24</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>30</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>43</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>27</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>18</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>34</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>6</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>33</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>20</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>16</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>22</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>34</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>12</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>20</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>10</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>15</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>30</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>32</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>13</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>11</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>50</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>39</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>13</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>9</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>24</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>15</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>36</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>25</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>11</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>22</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>13</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>18</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>25</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>28</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>49</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>7</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>8</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>24</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>37</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>32</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>36</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>10</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>26</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>18</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>26</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>15</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>44</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>22</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>48</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>30</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>24</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>25</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>16</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>5</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>32</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>5</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>6</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>28</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>39</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>42</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>39</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>28</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>39</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>40</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>41</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>9</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>25</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>37</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>16</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>40</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>40</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>45</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>27</Sales>\n        </Row>\n      </Rows>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>0.7pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>6 in</Height>\n    <ReportItems>\n      <Matrix Name=\"Matrix1\">\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor>\n            <Default>blue</Default>\n          </BorderColor>\n          <BackgroundColor>yellow</BackgroundColor>\n        </Style>\n        <Corner>\n          <ReportItems>\n            <Textbox Name=\"Corner\">\n              <Value>Region\\Year</Value>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Left>0pt</Left>\n                  <Right>1pt</Right>\n                  <Top>0pt</Top>\n                  <Bottom>1pt</Bottom>\n                </BorderWidth>\n                <FontWeight>bold</FontWeight>\n              </Style>\n            </Textbox>\n          </ReportItems>\n        </Corner>\n        <ColumnGroupings>\n          <ColumnGrouping>\n            <Height>24.5pt</Height>\n            <DynamicColumns>\n              <Grouping Name=\"DynamicColumnsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Year\">\n                  <Value>=\"\" + Fields!Year.Value + \" = \"+ Sum(Fields!Sales.Value)</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox1\">\n                    <Value>Column Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n        </ColumnGroupings>\n        <RowGroupings>\n          <RowGrouping>\n            <Width>1 in</Width>\n            <DynamicRows>\n              <Grouping Name=\"DynamicRowsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Region\">\n                  <Value>=Fields!Region.Value</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox2\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n        </RowGroupings>\n        <MatrixRows>\n          <MatrixRow>\n            <Height>0.25in</Height>\n            <MatrixCells>\n              <MatrixCell>\n                <ReportItems>\n                  <Textbox Name=\"SumSales\">\n                    <Value>=sum(Fields!Sales.Value)</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </MatrixCell>\n            </MatrixCells>\n          </MatrixRow>\n        </MatrixRows>\n        <MatrixColumns>\n          <MatrixColumn>\n            <Width>1 in</Width>\n          </MatrixColumn>\n        </MatrixColumns>\n        <Left>7.1pt</Left>\n        <Top>4.7pt</Top>\n      </Matrix>\n      <Matrix Name=\"Matrix2\">\n        <Corner>\n          <ReportItems>\n            <Textbox Name=\"ACorner\">\n              <Value>=\"Total: \" + sum(Fields!Sales.Value)</Value>\n              <Style>\n                <BorderStyle />\n                <BorderColor />\n                <BorderWidth />\n              </Style>\n            </Textbox>\n          </ReportItems>\n        </Corner>\n        <ColumnGroupings>\n          <ColumnGrouping>\n            <Height>23.8pt</Height>\n            <DynamicColumns>\n              <Grouping Name=\"DynamicColumnsGroup2\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Textbox3\">\n                  <Value>=Fields!Year.Value</Value>\n                  <Style>\n                    <BorderStyle />\n                    <BorderColor />\n                    <BorderWidth />\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox4\">\n                    <Value>=\"Total= \" + sum(Fields!Sales.Value)</Value>\n                    <Style>\n                      <BorderStyle />\n                      <BorderColor />\n                      <BorderWidth />\n                    </Style>\n                    <CanGrow>True</CanGrow>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n          <ColumnGrouping>\n            <Height>22.0pt</Height>\n            <DynamicColumns>\n              <Grouping Name=\"DynamicColumnsGroup3\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Qtr.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Textbox5\">\n                  <Value>=Fields!Qtr.Value</Value>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox6\">\n                    <Value>Total</Value>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n        </ColumnGroupings>\n        <RowGroupings>\n          <RowGrouping>\n            <Width>1 in</Width>\n            <DynamicRows>\n              <Grouping Name=\"DynamicRowsGroup2\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Textbox7\">\n                  <Value>=Fields!Region.Value</Value>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox8\">\n                    <Value>=\" Total \" + sum(Fields!Sales.Value)</Value>\n                    <Style>\n                      <BorderStyle />\n                      <BorderColor />\n                      <BorderWidth />\n                    </Style>\n                    <CanGrow>True</CanGrow>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n          <RowGrouping>\n            <Width>1 in</Width>\n            <DynamicRows>\n              <Grouping Name=\"DynamicRowsGroup3\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!State.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Textbox9\">\n                  <Value>=Fields!State.Value</Value>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox10\">\n                    <Value>Total</Value>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n        </RowGroupings>\n        <MatrixRows>\n          <MatrixRow>\n            <Height>0.25in</Height>\n            <MatrixCells>\n              <MatrixCell>\n                <ReportItems>\n                  <Textbox Name=\"Textbox11\">\n                    <Value>=sum(Fields!Sales.Value)</Value>\n                  </Textbox>\n                </ReportItems>\n              </MatrixCell>\n            </MatrixCells>\n          </MatrixRow>\n        </MatrixRows>\n        <MatrixColumns>\n          <MatrixColumn>\n            <Width>45.7pt</Width>\n          </MatrixColumn>\n        </MatrixColumns>\n        <Left>17.8pt</Left>\n        <Top>87.2pt</Top>\n      </Matrix>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>11in</Width>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/MatrixStaticTest.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\" xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>11in</PageHeight>\n  <PageWidth>43.5in</PageWidth>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>iAnywhere.NET</DataProvider>\n        <ConnectString>Data Source=ASA 9.0 Sample;UID=DBA;PWD=SQL</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT year, quarter, code, amount FROM \"fin_data\"</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"year\">\n          <DataField>year</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"quarter\">\n          <DataField>quarter</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"code\">\n          <DataField>code</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"amount\">\n          <DataField>amount</DataField>\n          <rd:TypeName>System.Decimal</rd:TypeName>\n        </Field>\n      </Fields>\n      <fyi:Rows xmlns:fyi=\"http://www.fyireporting.com/schemas\">\n        <Row>\n          <year>1999</year>\n          <quarter>Q1</quarter>\n          <code>e1</code>\n          <amount>101</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q1</quarter>\n          <code>e2</code>\n          <amount>403</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q1</quarter>\n          <code>e3</code>\n          <amount>1437</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q1</quarter>\n          <code>e4</code>\n          <amount>623</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q1</quarter>\n          <code>e5</code>\n          <amount>381</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q1</quarter>\n          <code>r1</code>\n          <amount>1023</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q1</quarter>\n          <code>r2</code>\n          <amount>234</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q2</quarter>\n          <code>e1</code>\n          <amount>93</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q2</quarter>\n          <code>e2</code>\n          <amount>459</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q2</quarter>\n          <code>e3</code>\n          <amount>2033</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q2</quarter>\n          <code>e4</code>\n          <amount>784</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q2</quarter>\n          <code>e5</code>\n          <amount>402</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q2</quarter>\n          <code>r1</code>\n          <amount>2033</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q2</quarter>\n          <code>r2</code>\n          <amount>459</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q3</quarter>\n          <code>e1</code>\n          <amount>129</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q3</quarter>\n          <code>e2</code>\n          <amount>609</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q3</quarter>\n          <code>e3</code>\n          <amount>2184</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q3</quarter>\n          <code>e4</code>\n          <amount>856</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q3</quarter>\n          <code>e5</code>\n          <amount>412</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q3</quarter>\n          <code>r1</code>\n          <amount>2998</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q3</quarter>\n          <code>r2</code>\n          <amount>601</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q4</quarter>\n          <code>e1</code>\n          <amount>145</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q4</quarter>\n          <code>e2</code>\n          <amount>632</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q4</quarter>\n          <code>e3</code>\n          <amount>2145</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q4</quarter>\n          <code>e4</code>\n          <amount>1043</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q4</quarter>\n          <code>e5</code>\n          <amount>467</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q4</quarter>\n          <code>r1</code>\n          <amount>3014</amount>\n        </Row>\n        <Row>\n          <year>1999</year>\n          <quarter>Q4</quarter>\n          <code>r2</code>\n          <amount>944</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q1</quarter>\n          <code>e1</code>\n          <amount>153</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q1</quarter>\n          <code>e2</code>\n          <amount>643</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q1</quarter>\n          <code>e3</code>\n          <amount>2478</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q1</quarter>\n          <code>e4</code>\n          <amount>1051</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q1</quarter>\n          <code>e5</code>\n          <amount>523</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q1</quarter>\n          <code>r1</code>\n          <amount>3114</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q1</quarter>\n          <code>r2</code>\n          <amount>992</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q2</quarter>\n          <code>e1</code>\n          <amount>149</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q2</quarter>\n          <code>e2</code>\n          <amount>687</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q2</quarter>\n          <code>e3</code>\n          <amount>2998</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q2</quarter>\n          <code>e4</code>\n          <amount>1158</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q2</quarter>\n          <code>e5</code>\n          <amount>749</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q2</quarter>\n          <code>r1</code>\n          <amount>3998</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q2</quarter>\n          <code>r2</code>\n          <amount>1195</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q3</quarter>\n          <code>e1</code>\n          <amount>157</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q3</quarter>\n          <code>e2</code>\n          <amount>898</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q3</quarter>\n          <code>e3</code>\n          <amount>3702</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q3</quarter>\n          <code>e4</code>\n          <amount>1459</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q3</quarter>\n          <code>e5</code>\n          <amount>723</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q3</quarter>\n          <code>r1</code>\n          <amount>6523</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q3</quarter>\n          <code>r2</code>\n          <amount>1704</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q4</quarter>\n          <code>e1</code>\n          <amount>163</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q4</quarter>\n          <code>e2</code>\n          <amount>923</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q4</quarter>\n          <code>e3</code>\n          <amount>3600</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q4</quarter>\n          <code>e4</code>\n          <amount>1439</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q4</quarter>\n          <code>e5</code>\n          <amount>748</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q4</quarter>\n          <code>r1</code>\n          <amount>7267</amount>\n        </Row>\n        <Row>\n          <year>2000</year>\n          <quarter>Q4</quarter>\n          <code>r2</code>\n          <amount>1823</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q1</quarter>\n          <code>e1</code>\n          <amount>198</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q1</quarter>\n          <code>e2</code>\n          <amount>921</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q1</quarter>\n          <code>e3</code>\n          <amount>4139</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q1</quarter>\n          <code>e4</code>\n          <amount>1462</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q1</quarter>\n          <code>e5</code>\n          <amount>798</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q1</quarter>\n          <code>r1</code>\n          <amount>9144</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q1</quarter>\n          <code>r2</code>\n          <amount>1839</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q2</quarter>\n          <code>e1</code>\n          <amount>204</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q2</quarter>\n          <code>e2</code>\n          <amount>975</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q2</quarter>\n          <code>e3</code>\n          <amount>4500</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q2</quarter>\n          <code>e4</code>\n          <amount>1472</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q2</quarter>\n          <code>e5</code>\n          <amount>983</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q2</quarter>\n          <code>r1</code>\n          <amount>10988</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q2</quarter>\n          <code>r2</code>\n          <amount>2011</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q3</quarter>\n          <code>e1</code>\n          <amount>214</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q3</quarter>\n          <code>e2</code>\n          <amount>984</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q3</quarter>\n          <code>e3</code>\n          <amount>4532</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q3</quarter>\n          <code>e4</code>\n          <amount>1439</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q3</quarter>\n          <code>e5</code>\n          <amount>956</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q3</quarter>\n          <code>r1</code>\n          <amount>13567</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q3</quarter>\n          <code>r2</code>\n          <amount>2897</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q4</quarter>\n          <code>e1</code>\n          <amount>231</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q4</quarter>\n          <code>e2</code>\n          <amount>982</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q4</quarter>\n          <code>e3</code>\n          <amount>5298</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q4</quarter>\n          <code>e4</code>\n          <amount>1498</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q4</quarter>\n          <code>e5</code>\n          <amount>963</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q4</quarter>\n          <code>r1</code>\n          <amount>15199</amount>\n        </Row>\n        <Row>\n          <year>2001</year>\n          <quarter>Q4</quarter>\n          <code>r2</code>\n          <amount>4129</amount>\n        </Row>\n      </fyi:Rows>\n    </DataSet>\n  </DataSets>\n  <Body>\n    <Height>71.1pt</Height>\n    <ReportItems>\n      <Matrix Name=\"Matrix1\">\n        <Corner>\n          <ReportItems>\n            <Textbox Name=\"Corner\">\n              <Value>Year/Qtr</Value>\n              <Style>\n                <BorderStyle>\n                  <Default>None</Default>\n                  <Left>None</Left>\n                  <Right>None</Right>\n                  <Top>None</Top>\n                  <Bottom>None</Bottom>\n                </BorderStyle>\n                <BorderWidth>\n                  <Left>0pt</Left>\n                  <Right>1pt</Right>\n                  <Top>0pt</Top>\n                  <Bottom>1pt</Bottom>\n                </BorderWidth>\n                <FontWeight>bold</FontWeight>\n                <BorderColor />\n              </Style>\n            </Textbox>\n          </ReportItems>\n        </Corner>\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <ColumnGroupings>\n          <ColumnGrouping>\n            <Height>14.2pt</Height>\n            <DynamicColumns>\n              <Grouping Name=\"DynamicColumnsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!quarter.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Textbox1\">\n                  <Value>=Fields!quarter.Value</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox2\">\n                    <Value>Quarter Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n          <ColumnGrouping>\n            <Height>15.8pt</Height>\n            <StaticColumns>\n              <StaticColumn>\n                <ReportItems>\n                  <Textbox Name=\"textbox3x\">\n                    <Style>\n                      <PaddingLeft>2pt</PaddingLeft>\n                      <TextDecoration>Underline</TextDecoration>\n                      <BorderStyle>\n                        <Bottom>Solid</Bottom>\n                        <Left>Solid</Left>\n                        <Default>Solid</Default>\n                        <Right>Solid</Right>\n                        <Top>Solid</Top>\n                      </BorderStyle>\n                      <TextAlign>Center</TextAlign>\n                      <PaddingBottom>2pt</PaddingBottom>\n                      <PaddingTop>2pt</PaddingTop>\n                      <PaddingRight>2pt</PaddingRight>\n                      <BorderColor />\n                      <BorderWidth />\n                    </Style>\n                    <ZIndex>5</ZIndex>\n                    <CanGrow>true</CanGrow>\n                    <Value>Sum Amount</Value>\n                  </Textbox>\n                </ReportItems>\n              </StaticColumn>\n              <StaticColumn>\n                <ReportItems>\n                  <Textbox Name=\"textbox5x\">\n                    <Style>\n                      <PaddingLeft>2pt</PaddingLeft>\n                      <TextDecoration>Underline</TextDecoration>\n                      <BorderStyle>\n                        <Bottom>None</Bottom>\n                        <Left>Solid</Left>\n                      </BorderStyle>\n                      <TextAlign>Center</TextAlign>\n                      <PaddingBottom>2pt</PaddingBottom>\n                      <PaddingTop>2pt</PaddingTop>\n                      <PaddingRight>2pt</PaddingRight>\n                      <BorderColor />\n                      <BorderWidth />\n                    </Style>\n                    <ZIndex>4</ZIndex>\n                    <CanGrow>true</CanGrow>\n                    <Value>% of Column</Value>\n                  </Textbox>\n                </ReportItems>\n              </StaticColumn>\n            </StaticColumns>\n          </ColumnGrouping>\n        </ColumnGroupings>\n        <RowGroupings>\n          <RowGrouping>\n            <Width>58.2pt</Width>\n            <DynamicRows>\n              <Grouping Name=\"DynamicRowsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Textbox3\">\n                  <Value>=Fields!year.Value</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox4\">\n                    <Value>Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n        </RowGroupings>\n        <MatrixColumns>\n          <MatrixColumn>\n            <Width>71.5pt</Width>\n          </MatrixColumn>\n          <MatrixColumn>\n            <Width>64.3pt</Width>\n          </MatrixColumn>\n        </MatrixColumns>\n        <MatrixRows>\n          <MatrixRow>\n            <Height>12pt</Height>\n            <MatrixCells>\n              <MatrixCell>\n                <ReportItems>\n                  <Textbox Name=\"Textbox6\">\n                    <Value>=Sum(Fields!amount.Value)</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderColor />\n                      <BorderWidth />\n                      <Format>#,##0</Format>\n                      <TextAlign>Right</TextAlign>\n                      <PaddingRight>6pt</PaddingRight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </MatrixCell>\n              <MatrixCell>\n                <ReportItems>\n                  <Textbox Name=\"Textbox5\">\n                    <Value>=Sum(Fields!amount.Value)/Sum(Fields!amount.Value, \"DynamicColumnsGroup1\")</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderColor />\n                      <BorderWidth />\n                      <Format>0%</Format>\n                      <TextAlign>Right</TextAlign>\n                      <PaddingRight>6pt</PaddingRight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </MatrixCell>\n            </MatrixCells>\n          </MatrixRow>\n        </MatrixRows>\n        <Left>0.0pt</Left>\n        <Top>0.0pt</Top>\n      </Matrix>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>14 pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox7\">\n        <Top>1 pt</Top>\n        <Left>10 pt</Left>\n        <Height>12 pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber.Value + ' of ' + Globals!TotalPages.Value</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n  <PageHeader>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageHeader>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/MatrixTest.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>8.5 in</PageHeight>\n  <PageWidth>11 in</PageWidth>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued, ct.CategoryID, CategoryName, Description, s.SupplierID, s.CompanyName  \nFROM Products p, Categories ct, Suppliers s\nWHERE ct.CategoryID = p.CategoryID and s.SupplierID = p.SupplierID</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"ProductID\">\n          <DataField>ProductID</DataField>\n        </Field>\n        <Field Name=\"ProductName\">\n          <DataField>ProductName</DataField>\n        </Field>\n        <Field Name=\"QuantityPerUnit\">\n          <DataField>QuantityPerUnit</DataField>\n        </Field>\n        <Field Name=\"UnitPrice\">\n          <DataField>UnitPrice</DataField>\n        </Field>\n        <Field Name=\"UnitsInStock\">\n          <DataField>UnitsInStock</DataField>\n        </Field>\n        <Field Name=\"UnitsOnOrder\">\n          <DataField>UnitsOnOrder</DataField>\n        </Field>\n        <Field Name=\"ReorderLevel\">\n          <DataField>ReorderLevel</DataField>\n        </Field>\n        <Field Name=\"Discontinued\">\n          <DataField>Discontinued</DataField>\n        </Field>\n        <Field Name=\"CategoryID\">\n          <DataField>CategoryID</DataField>\n        </Field>\n        <Field Name=\"CategoryName\">\n          <DataField>CategoryName</DataField>\n        </Field>\n        <Field Name=\"Description\">\n          <DataField>Description</DataField>\n        </Field>\n        <Field Name=\"SupplierID\">\n          <DataField>SupplierID</DataField>\n        </Field>\n        <Field Name=\"CompanyName\">\n          <DataField>CompanyName</DataField>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>8.7pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>6 in</Height>\n    <ReportItems>\n      <Matrix Name=\"Matrix1\">\n        <ColumnGroupings>\n          <ColumnGrouping>\n            <Height>0.25in</Height>\n            <DynamicColumns>\n              <Grouping Name=\"DynamicColumnsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!CategoryName.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"CategoryName\">\n                  <Value>=Fields!CategoryName.Value</Value>\n                  <Style>\n                    <BorderStyle />\n                    <BorderColor />\n                    <BorderWidth />\n                  </Style>\n                  <CanGrow>True</CanGrow>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox1\">\n                    <Value>Column Grand Total</Value>\n                    <Style>\n                      <BorderStyle />\n                      <BorderColor />\n                      <BorderWidth />\n                    </Style>\n                    <CanGrow>True</CanGrow>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n        </ColumnGroupings>\n        <RowGroupings>\n          <RowGrouping>\n            <Width>1.5 in</Width>\n            <DynamicRows>\n              <Grouping Name=\"DynamicRowsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!CompanyName.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"CompanyName\">\n                  <Value>=Fields!CompanyName.Value</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderColor />\n                    <BorderWidth />\n                  </Style>\n                  <CanGrow>True</CanGrow>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox2\">\n                    <Value>Grand Total</Value>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n        </RowGroupings>\n        <MatrixRows>\n          <MatrixRow>\n            <Height>0.25in</Height>\n            <MatrixCells>\n              <MatrixCell>\n                <ReportItems>\n                  <Textbox Name=\"CountSuppliers\">\n                    <Value>=count(Fields!SupplierID.Value)</Value>\n                    <Style>\n                      <Format>#</Format>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </MatrixCell>\n            </MatrixCells>\n          </MatrixRow>\n        </MatrixRows>\n        <MatrixColumns>\n          <MatrixColumn>\n            <Width>1 in</Width>\n          </MatrixColumn>\n        </MatrixColumns>\n      </Matrix>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>11in</Width>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/RssShort.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>RSS Reporting</Description>\n  <Author>\n  </Author>\n  <PageHeight>5in</PageHeight>\n  <PageWidth>5.2in</PageWidth>\n  <Width>5.2in</Width>\n  <TopMargin>.1in</TopMargin>\n  <LeftMargin>.1in</LeftMargin>\n  <RightMargin>.1in</RightMargin>\n  <BottomMargin>.1in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>Url=http://rss.news.yahoo.com/rss/us;RowsXPath=rss/channel/item;ColumnsXPath=title,link,pubDate,description,../title,../copyright,../image/url,../image/width,../image/height,../link</CommandText>\n        <QueryParameters>\n          <QueryParameter Name=\"@Url\">\n            <Value>=Parameters!RSSFeed.Value</Value>\n          </QueryParameter>\n        </QueryParameters>\n      </Query>\n      <Fields>\n        <Field Name=\"title\">\n          <DataField>title</DataField>\n        </Field>\n        <Field Name=\"link\">\n          <DataField>link</DataField>\n        </Field>\n        <Field Name=\"pubDate\">\n          <DataField>pubDate</DataField>\n        </Field>\n        <Field Name=\"description\">\n          <DataField>description</DataField>\n        </Field>\n        <Field Name=\"title_1\">\n          <DataField>title_1</DataField>\n        </Field>\n        <Field Name=\"copyright\">\n          <DataField>copyright</DataField>\n        </Field>\n        <Field Name=\"url\">\n          <DataField>url</DataField>\n        </Field>\n        <Field Name=\"width\">\n          <DataField>width</DataField>\n        </Field>\n        <Field Name=\"height\">\n          <DataField>height</DataField>\n        </Field>\n        <Field Name=\"link_main\">\n          <DataField>link_1</DataField>\n        </Field>\n      </Fields>\n    </DataSet>\n    <DataSet Name=\"RSSFeeds\">\n      <Query>\n        <DataSourceName>NullDS</DataSourceName>\n        <CommandText>\n        </CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"Name\">\n          <DataField>Name</DataField>\n        </Field>\n        <Field Name=\"Url\">\n          <DataField>Url</DataField>\n        </Field>\n      </Fields>\n      <Rows>\n        <Row>\n          <Name>US News</Name>\n          <Url>http://rss.news.yahoo.com/rss/us</Url>\n        </Row>\n        <Row>\n          <Name>Nasa</Name>\n          <Url>http://rss.news.yahoo.com/rss/nasashuttle</Url>\n        </Row>\n        <Row>\n          <Name>Business</Name>\n          <Url>http://rss.news.yahoo.com/rss/business</Url>\n        </Row>\n      </Rows>\n    </DataSet>\n  </DataSets>\n  <Body>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>179.6pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>173.8pt</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox1\">\n                      <Value>=First(Fields!title_1.Value, \"Data\")</Value>\n                      <Style>\n                        <TextAlign>Left</TextAlign>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>None</Right>\n                          <Top>None</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor>\n                          <Default>Lightgrey</Default>\n                          <Left>Lightgrey</Left>\n                          <Right>Lightgrey</Right>\n                          <Top>Lightgrey</Top>\n                          <Bottom>Lightgrey</Bottom>\n                        </BorderColor>\n                        <BorderWidth />\n                        <BackgroundColor>Lightblue</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>=Globals!ExecutionTime.Value</Value>\n                      <Style>\n                        <TextAlign>Right</TextAlign>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>None</Right>\n                          <Top>None</Top>\n                          <Bottom>None</Bottom>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor>\n                          <Default>Lightgrey</Default>\n                          <Left>Lightgrey</Left>\n                          <Right>Lightgrey</Right>\n                          <Top>Lightgrey</Top>\n                          <Bottom>Lightgrey</Bottom>\n                        </BorderColor>\n                        <BorderWidth />\n                        <BackgroundColor>Lightblue</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>14.1pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"title\">\n                      <Value>=Fields!title.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderColor>\n                          <Default>Lightgrey</Default>\n                          <Left>Lightgrey</Left>\n                          <Right>Lightgrey</Right>\n                          <Top>Lightgrey</Top>\n                          <Bottom>Lightgrey</Bottom>\n                        </BorderColor>\n                        <BorderWidth />\n                        <TextDecoration>Underline</TextDecoration>\n                        <Color>Blue</Color>\n                      </Style>\n                      <Action>\n                        <Hyperlink>=Fields!link.Value</Hyperlink>\n                      </Action>\n                      <ToolTip>=\"Time \" + Fields!pubDate.Value</ToolTip>\n                    </Textbox>\n                  </ReportItems>\n                  <ColSpan>2</ColSpan>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n        <Left>3.6pt</Left>\n        <Top>35.5pt</Top>\n      </Table>\n      <Textbox Name=\"Textbox6\">\n        <Height>14.30pt</Height>\n        <Width>258.97pt</Width>\n        <Value>=First(Fields!copyright.Value, \"Data\")</Value>\n        <Left>2.9pt</Left>\n        <Top>64.5pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <FontSize>8pt</FontSize>\n        </Style>\n      </Textbox>\n      <Image Name=\"Image1\">\n        <Height>31.07pt</Height>\n        <Width>194.54pt</Width>\n        <Left>2.13pt</Left>\n        <Top>0.00pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Source>External</Source>\n        <Value>=First(Fields!url.Value, \"Data\")</Value>\n        <Action>\n          <Hyperlink>=First(Fields!link_main.Value, \"Data\")</Hyperlink>\n        </Action>\n      </Image>\n    </ReportItems>\n    <Height>80.1pt</Height>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0.0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <PageHeader>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>XML</DataProvider>\n        <ConnectString>\n        </ConnectString>\n        <IntegratedSecurity>false</IntegratedSecurity>\n      </ConnectionProperties>\n    </DataSource>\n    <DataSource Name=\"NullDS\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString />\n        <IntegratedSecurity>false</IntegratedSecurity>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <ReportParameters>\n    <ReportParameter Name=\"RSSFeed\">\n      <DataType>String</DataType>\n      <DefaultValue>\n        <Values>\n          <Value>http://rss.news.yahoo.com/rss/business</Value>\n        </Values>\n      </DefaultValue>\n      <Nullable>False</Nullable>\n      <AllowBlank>False</AllowBlank>\n      <Prompt>Pick your RSS Feed</Prompt>\n      <ValidValues>\n        <DataSetReference>\n          <DataSetName>RSSFeeds</DataSetName>\n          <ValueField>Url</ValueField>\n          <LabelField>Name</LabelField>\n        </DataSetReference>\n      </ValidValues>\n    </ReportParameter>\n  </ReportParameters>\n</Report>"
  },
  {
    "path": "Examples/Examples/SalesData.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<Rows>\n\t<Row><Category>Component</Category><Year>2002</Year><Sales>525</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2004</Year><Sales>227</Sales></Row>\n\t<Row><Category>Bike</Category><Year>2002</Year><Sales>892</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2004</Year><Sales>487</Sales></Row>\n\t<Row><Category>Bike</Category><Year>2004</Year><Sales>873</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2002</Year><Sales>782</Sales></Row>\n\t<Row><Category>Bike</Category><Year>2002</Year><Sales>848</Sales></Row>\n\t<Row><Category>Bike</Category><Year>2002</Year><Sales>402</Sales></Row>\n\t<Row><Category>Bike</Category><Year>2003</Year><Sales>245</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2004</Year><Sales>897</Sales></Row>\n\t<Row><Category>Component</Category><Year>2002</Year><Sales>273</Sales></Row>\n\t<Row><Category>Component</Category><Year>2002</Year><Sales>652</Sales></Row>\n\t<Row><Category>Bike</Category><Year>2002</Year><Sales>408</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2004</Year><Sales>881</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2004</Year><Sales>448</Sales></Row>\n\t<Row><Category>Component</Category><Year>2003</Year><Sales>500</Sales></Row>\n\t<Row><Category>Component</Category><Year>2002</Year><Sales>220</Sales></Row>\n\t<Row><Category>Bike</Category><Year>2004</Year><Sales>806</Sales></Row>\n\t<Row><Category>Component</Category><Year>2002</Year><Sales>798</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2004</Year><Sales>953</Sales></Row>\n\t<Row><Category>Bike</Category><Year>2003</Year><Sales>685</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2004</Year><Sales>470</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2003</Year><Sales>265</Sales></Row>\n\t<Row><Category>Component</Category><Year>2003</Year><Sales>775</Sales></Row>\n\t<Row><Category>Bike</Category><Year>2003</Year><Sales>773</Sales></Row>\n\t<Row><Category>Bike</Category><Year>2004</Year><Sales>706</Sales></Row>\n\t<Row><Category>Component</Category><Year>2004</Year><Sales>777</Sales></Row>\n\t<Row><Category>Component</Category><Year>2002</Year><Sales>231</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2002</Year><Sales>415</Sales></Row>\n\t<Row><Category>Bike</Category><Year>2004</Year><Sales>868</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2003</Year><Sales>781</Sales></Row>\n\t<Row><Category>Bike</Category><Year>2004</Year><Sales>887</Sales></Row>\n\t<Row><Category>Component</Category><Year>2002</Year><Sales>310</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2002</Year><Sales>633</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2004</Year><Sales>789</Sales></Row>\n\t<Row><Category>Component</Category><Year>2004</Year><Sales>533</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2004</Year><Sales>510</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2002</Year><Sales>380</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2003</Year><Sales>567</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2004</Year><Sales>439</Sales></Row>\n\t<Row><Category>Bike</Category><Year>2004</Year><Sales>927</Sales></Row>\n\t<Row><Category>Bike</Category><Year>2002</Year><Sales>287</Sales></Row>\n\t<Row><Category>Bike</Category><Year>2003</Year><Sales>900</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2003</Year><Sales>474</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2002</Year><Sales>455</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2002</Year><Sales>228</Sales></Row>\n\t<Row><Category>Component</Category><Year>2002</Year><Sales>828</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2002</Year><Sales>442</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2004</Year><Sales>323</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2004</Year><Sales>684</Sales></Row>\n\t<Row><Category>Component</Category><Year>2004</Year><Sales>339</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2002</Year><Sales>329</Sales></Row>\n\t<Row><Category>Bike</Category><Year>2002</Year><Sales>619</Sales></Row>\n\t<Row><Category>Bike</Category><Year>2003</Year><Sales>326</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2002</Year><Sales>246</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2003</Year><Sales>651</Sales></Row>\n\t<Row><Category>Bike</Category><Year>2004</Year><Sales>744</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2003</Year><Sales>911</Sales></Row>\n\t<Row><Category>Clothing</Category><Year>2004</Year><Sales>649</Sales></Row>\n\t<Row><Category>Component</Category><Year>2003</Year><Sales>743</Sales></Row>\n\t<Row><Category>Bike</Category><Year>2002</Year><Sales>870</Sales></Row>\n\t<Row><Category>Bike</Category><Year>2002</Year><Sales>664</Sales></Row>\n</Rows>\n"
  },
  {
    "path": "Examples/Examples/Suppliers.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"Suppliers\">\n  <PageHeight>8.5 in</PageHeight>\n  <PageWidth>11 in</PageWidth>\n  <Description>Suppliers List for My Company</Description>\n  <Author>Alfred P. Sloan</Author>\n  <DataElementName>MySuppliers</DataElementName>\n  <DataElementStyle>ElementNormal</DataElementStyle>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT SupplierID, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone, Fax, HomePage FROM Suppliers</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"SupplierID\">\n          <DataField>SupplierID</DataField>\n        </Field>\n        <Field Name=\"CompanyName\">\n          <DataField>CompanyName</DataField>\n        </Field>\n        <Field Name=\"ContactName\">\n          <DataField>ContactName</DataField>\n        </Field>\n        <Field Name=\"ContactTitle\">\n          <DataField>ContactTitle</DataField>\n        </Field>\n        <Field Name=\"Address\">\n          <DataField>Address</DataField>\n        </Field>\n        <Field Name=\"City\">\n          <DataField>City</DataField>\n        </Field>\n        <Field Name=\"Region\">\n          <DataField>Region</DataField>\n        </Field>\n        <Field Name=\"PostalCode\">\n          <DataField>PostalCode</DataField>\n        </Field>\n        <Field Name=\"Country\">\n          <DataField>Country</DataField>\n        </Field>\n        <Field Name=\"Phone\">\n          <DataField>Phone</DataField>\n        </Field>\n        <Field Name=\"Fax\">\n          <DataField>Fax</DataField>\n        </Field>\n        <Field Name=\"HomePage\">\n          <DataField>HomePage</DataField>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>6.0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>31.1pt</Height>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DetailDataCollectionName>suppliers</DetailDataCollectionName>\n        <DetailDataElementName>supplier</DetailDataElementName>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox1\">\n                      <Value>SupplierID</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>CompanyName</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>ContactName</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>ContactTitle</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value>Address</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox6\">\n                      <Value>City</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox7\">\n                      <Value>Region</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox8\">\n                      <Value>PostalCode</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox9\">\n                      <Value>Country</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>Phone</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox11\">\n                      <Value>Fax</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox12\">\n                      <Value>HomePage</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"SupplierID\">\n                      <Value>=Fields!SupplierID.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"CompanyName\">\n                      <Value>=Fields!CompanyName.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"ContactName\">\n                      <Value>=Fields!ContactName.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"ContactTitle\">\n                      <Value>=Fields!ContactTitle.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Address\">\n                      <Value>=Fields!Address.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"City\">\n                      <Value>=Fields!City.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Region\">\n                      <Value>=Fields!Region.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"PostalCode\">\n                      <Value>=Fields!PostalCode.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Country\">\n                      <Value>=Fields!Country.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Phone\">\n                      <Value>=Fields!Phone.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Fax\">\n                      <Value>=Fields!Fax.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"HomePage\">\n                      <Value>=Fields!HomePage.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n      </Table>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>11in</Width>\n</Report>"
  },
  {
    "path": "Examples/Examples/SuppliersStyled.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"Suppliers\">\n  <PageHeight>8.5 in</PageHeight>\n  <PageWidth>11 in</PageWidth>\n  <Description>Suppliers List for My Company</Description>\n  <Author>Alfred P. Sloan</Author>\n  <DataElementName>MySuppliers</DataElementName>\n  <DataElementStyle>ElementNormal</DataElementStyle>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT SupplierID, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone, Fax, HomePage FROM Suppliers</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"SupplierID\">\n          <DataField>SupplierID</DataField>\n        </Field>\n        <Field Name=\"CompanyName\">\n          <DataField>CompanyName</DataField>\n        </Field>\n        <Field Name=\"ContactName\">\n          <DataField>ContactName</DataField>\n        </Field>\n        <Field Name=\"ContactTitle\">\n          <DataField>ContactTitle</DataField>\n        </Field>\n        <Field Name=\"Address\">\n          <DataField>Address</DataField>\n        </Field>\n        <Field Name=\"City\">\n          <DataField>City</DataField>\n        </Field>\n        <Field Name=\"Region\">\n          <DataField>Region</DataField>\n        </Field>\n        <Field Name=\"PostalCode\">\n          <DataField>PostalCode</DataField>\n        </Field>\n        <Field Name=\"Country\">\n          <DataField>Country</DataField>\n        </Field>\n        <Field Name=\"Phone\">\n          <DataField>Phone</DataField>\n        </Field>\n        <Field Name=\"Fax\">\n          <DataField>Fax</DataField>\n        </Field>\n        <Field Name=\"HomePage\">\n          <DataField>HomePage</DataField>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>0.0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>33.7pt</Height>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <Custom>\n          <HTML>\n            <SortAble>True</SortAble>\n          </HTML>\n        </Custom>\n        <DetailDataCollectionName>suppliers</DetailDataCollectionName>\n        <DetailDataElementName>supplier</DetailDataElementName>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor>\n            <Default>blue</Default>\n          </BorderColor>\n          <BackgroundColor>yellow</BackgroundColor>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox1\">\n                      <Value>SupplierID</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <FontWeight>bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>CompanyName</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <FontWeight>bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>ContactName</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <FontWeight>bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>ContactTitle</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <FontWeight>bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value>Address</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <FontWeight>bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox6\">\n                      <Value>City</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <FontWeight>bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox7\">\n                      <Value>Region</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <FontWeight>bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox8\">\n                      <Value>PostalCode</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <FontWeight>bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox9\">\n                      <Value>Country</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <FontWeight>bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>Phone</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <FontWeight>bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox11\">\n                      <Value>Fax</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <FontWeight>bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox12\">\n                      <Value>HomePage</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <FontWeight>bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"SupplierID\">\n                      <Value>=Fields!SupplierID.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <Color>=iif(Fields!SupplierID.Value % 2 = 0, \"red\",\"blue\")</Color>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"CompanyName\">\n                      <Value>=Fields!CompanyName.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <Color>=iif(Fields!SupplierID.Value % 2 = 0, \"red\",\"blue\")</Color>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"ContactName\">\n                      <Value>=Fields!ContactName.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <Color>=iif(Fields!SupplierID.Value % 2 = 0, \"red\",\"blue\")</Color>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"ContactTitle\">\n                      <Value>=Fields!ContactTitle.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <Color>=iif(Fields!SupplierID.Value % 2 = 0, \"red\",\"blue\")</Color>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Address\">\n                      <Value>=Fields!Address.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <Color>=iif(Fields!SupplierID.Value % 2 = 0, \"red\",\"blue\")</Color>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"City\">\n                      <Value>=Fields!City.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <Color>=iif(Fields!SupplierID.Value % 2 = 0, \"red\",\"blue\")</Color>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Region\">\n                      <Value>=Fields!Region.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <Color>=iif(Fields!SupplierID.Value % 2 = 0, \"red\",\"blue\")</Color>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"PostalCode\">\n                      <Value>=Fields!PostalCode.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <Color>=iif(Fields!SupplierID.Value % 2 = 0, \"red\",\"blue\")</Color>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Country\">\n                      <Value>=Fields!Country.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <Color>=iif(Fields!SupplierID.Value % 2 = 0, \"red\",\"blue\")</Color>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Phone\">\n                      <Value>=Fields!Phone.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <Color>=iif(Fields!SupplierID.Value % 2 = 0, \"red\",\"blue\")</Color>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Fax\">\n                      <Value>=Fields!Fax.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <Color>=iif(Fields!SupplierID.Value % 2 = 0, \"red\",\"blue\")</Color>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"HomePage\">\n                      <Value>=Fields!HomePage.Value</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderWidth>\n                          <Left>0pt</Left>\n                          <Right>1pt</Right>\n                          <Top>0pt</Top>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                        <Color>=iif(Fields!SupplierID.Value % 2 = 0, \"red\",\"blue\")</Color>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n      </Table>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>11in</Width>\n</Report>"
  },
  {
    "path": "Examples/Examples/TableThreeColumns.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Report>\n  <RightMargin>0.25in</RightMargin>\n  <Body>\n    <ReportItems>\n      <Table Name=\"table1\">\n        <Style />\n        <DataSetName>Data</DataSetName>\n        <TableColumns>\n          <TableColumn>\n            <Width>1.25in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n        </TableColumns>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>.25in</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"ContactName\">\n                      <Style>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <PaddingBottom>2pt</PaddingBottom>\n                        <PaddingTop>2pt</PaddingTop>\n                        <PaddingRight>2pt</PaddingRight>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                      <Width>1.25in</Width>\n                      <CanGrow>true</CanGrow>\n                      <Value>=Fields!ContactName.Value</Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Phone\">\n                      <Style>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <PaddingBottom>2pt</PaddingBottom>\n                        <PaddingTop>2pt</PaddingTop>\n                        <PaddingRight>2pt</PaddingRight>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                      <CanGrow>true</CanGrow>\n                      <Value>=Fields!Phone.Value</Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n      </Table>\n    </ReportItems>\n    <Height>.25 in</Height>\n    <Style />\n    <ColumnSpacing>0.25in</ColumnSpacing>\n    <Columns>3</Columns>\n  </Body>\n  <TopMargin>0.5in</TopMargin>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <!--\t\t\t\t<DataProvider>SQL</DataProvider>   change to this for sql server -->\n        <DataProvider>xxx</DataProvider>\n        <!--  just for xml example data -->\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT ContactName, Phone FROM Customers ORDER BY 1</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"ContactName\">\n          <DataField>ContactName</DataField>\n        </Field>\n        <Field Name=\"Phone\">\n          <DataField>Phone</DataField>\n        </Field>\n      </Fields>\n      <Rows File=\"Contacts.xml\" />\n    </DataSet>\n  </DataSets>\n  <LeftMargin>0.25in</LeftMargin>\n  <BottomMargin>0.5in</BottomMargin>\n  <Width>2.5in</Width>\n  <PageHeader>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Author>fyiReporting Software, LLC</Author>\n  <Description>\n  </Description>\n  <PageWidth>8.5in</PageWidth>\n  <PageHeight>11in</PageHeight>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/TabularCountriesFromWizard.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>fyiReporting Software, LLC</Author>\n  <PageHeight>11 in</PageHeight>\n  <PageWidth>8.5in</PageWidth>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>ODBC</DataProvider>\n        <ConnectString>dsn=world;UID=root;PWD=anydaynow;</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <TopMargin>.25 in</TopMargin>\n  <LeftMargin>.25 in</LeftMargin>\n  <RightMargin>.25 in</RightMargin>\n  <BottomMargin>.25 in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT Code, Name, Continent, Region, SurfaceArea, IndepYear, Population, LifeExpectancy, GNP, GNPOld, LocalName, GovernmentForm, HeadOfState, Capital, Code2 FROM country WHERE Population &gt; @pop</CommandText>\n        <Timeout>10</Timeout>\n        <RowLimit>10000</RowLimit>\n        <QueryParameters>\n          <QueryParameter Name=\"pop\">\n            <Value>=Parameters!pop</Value>\n          </QueryParameter>\n        </QueryParameters>\n      </Query>\n      <Fields>\n        <Field Name=\"Code\">\n          <DataField>Code</DataField>\n        </Field>\n        <Field Name=\"Name\">\n          <DataField>Name</DataField>\n        </Field>\n        <Field Name=\"Continent\">\n          <DataField>Continent</DataField>\n        </Field>\n        <Field Name=\"Region\">\n          <DataField>Region</DataField>\n        </Field>\n        <Field Name=\"SurfaceArea\">\n          <DataField>SurfaceArea</DataField>\n        </Field>\n        <Field Name=\"IndepYear\">\n          <DataField>IndepYear</DataField>\n        </Field>\n        <Field Name=\"Population\">\n          <DataField>Population</DataField>\n        </Field>\n        <Field Name=\"LifeExpectancy\">\n          <DataField>LifeExpectancy</DataField>\n        </Field>\n        <Field Name=\"GNP\">\n          <DataField>GNP</DataField>\n        </Field>\n        <Field Name=\"GNPOld\">\n          <DataField>GNPOld</DataField>\n        </Field>\n        <Field Name=\"LocalName\">\n          <DataField>LocalName</DataField>\n        </Field>\n        <Field Name=\"GovernmentForm\">\n          <DataField>GovernmentForm</DataField>\n        </Field>\n        <Field Name=\"HeadOfState\">\n          <DataField>HeadOfState</DataField>\n        </Field>\n        <Field Name=\"Capital\">\n          <DataField>Capital</DataField>\n        </Field>\n        <Field Name=\"Code2\">\n          <DataField>Code2</DataField>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <Body>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>1.125 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.375 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.25 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.75 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.75 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.375 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox1\">\n                      <Value>Continent</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>Code</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>Name</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>Region</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value>SurfaceArea</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox6\">\n                      <Value>IndepYear</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox7\">\n                      <Value>Population</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox8\">\n                      <Value>LifeExpectancy</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox9\">\n                      <Value>GNP</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>GNPOld</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox11\">\n                      <Value>LocalName</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox12\">\n                      <Value>GovernmentForm</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox13\">\n                      <Value>HeadOfState</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox14\">\n                      <Value>Capital</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox15\">\n                      <Value>Code2</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <TableGroups>\n          <TableGroup>\n            <Header>\n              <TableRows>\n                <TableRow>\n                  <Height>12 pt</Height>\n                  <TableCells>\n                    <TableCell>\n                      <ColSpan>15</ColSpan>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox16\">\n                          <Value>=Fields.Continent.Value</Value>\n                          <Style>\n                            <PaddingLeft>2 pt</PaddingLeft>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                            <FontWeight>Bold</FontWeight>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                  </TableCells>\n                </TableRow>\n              </TableRows>\n              <RepeatOnNewPage>true</RepeatOnNewPage>\n            </Header>\n            <Footer>\n              <TableRows>\n                <TableRow>\n                  <Height>12 pt</Height>\n                  <TableCells>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox17\">\n                          <Value>\n                          </Value>\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox18\">\n                          <Value>\n                          </Value>\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"gf_Name\">\n                          <Value>=Count(Fields!Name.Value)</Value>\n                          <CanGrow>false</CanGrow>\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                            <PaddingRight>2 pt</PaddingRight>\n                            <TextAlign>Right</TextAlign>\n                            <FontStyle>Normal</FontStyle>\n                            <FontFamily>Arial</FontFamily>\n                            <FontWeight>Normal</FontWeight>\n                            <FontSize>9.99978pt</FontSize>\n                            <TextDecoration>None</TextDecoration>\n                            <VerticalAlign>Top</VerticalAlign>\n                            <Color>Black</Color>\n                            <Format>#,##0</Format>\n                            <Direction>LTR</Direction>\n                            <WritingMode>lr-tb</WritingMode>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox19\">\n                          <Value>\n                          </Value>\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"gf_SurfaceArea\">\n                          <Value>=Sum(Fields!SurfaceArea.Value)</Value>\n                          <CanGrow>false</CanGrow>\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                            <PaddingRight>2 pt</PaddingRight>\n                            <TextAlign>Right</TextAlign>\n                            <FontStyle>Normal</FontStyle>\n                            <FontFamily>Arial</FontFamily>\n                            <FontWeight>Normal</FontWeight>\n                            <FontSize>9.99978pt</FontSize>\n                            <TextDecoration>None</TextDecoration>\n                            <VerticalAlign>Top</VerticalAlign>\n                            <Color>Black</Color>\n                            <Format>#,##0</Format>\n                            <Direction>LTR</Direction>\n                            <WritingMode>lr-tb</WritingMode>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox20\">\n                          <Value>\n                          </Value>\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"gf_Population\">\n                          <Value>=Sum(Fields!Population.Value)</Value>\n                          <CanGrow>false</CanGrow>\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                            <PaddingRight>2 pt</PaddingRight>\n                            <TextAlign>Right</TextAlign>\n                            <FontStyle>Normal</FontStyle>\n                            <FontFamily>Arial</FontFamily>\n                            <FontWeight>Normal</FontWeight>\n                            <FontSize>9.99978pt</FontSize>\n                            <TextDecoration>None</TextDecoration>\n                            <VerticalAlign>Top</VerticalAlign>\n                            <Color>Black</Color>\n                            <Format>#,##0</Format>\n                            <Direction>LTR</Direction>\n                            <WritingMode>lr-tb</WritingMode>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox21\">\n                          <Value>\n                          </Value>\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox22\">\n                          <Value>\n                          </Value>\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox23\">\n                          <Value>\n                          </Value>\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox24\">\n                          <Value>\n                          </Value>\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox25\">\n                          <Value>\n                          </Value>\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox26\">\n                          <Value>\n                          </Value>\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox27\">\n                          <Value>\n                          </Value>\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox28\">\n                          <Value>\n                          </Value>\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                  </TableCells>\n                </TableRow>\n              </TableRows>\n            </Footer>\n            <Grouping Name=\"ContinentGroup\">\n              <GroupExpressions>\n                <GroupExpression>=Fields!Continent.Value</GroupExpression>\n              </GroupExpressions>\n            </Grouping>\n          </TableGroup>\n        </TableGroups>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox29\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>Solid</Left>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Code\">\n                      <Value>=Fields!Code.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Name\">\n                      <Value>=Fields!Name.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Region\">\n                      <Value>=Fields!Region.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"SurfaceArea\">\n                      <Value>=Fields!SurfaceArea.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>Right</TextAlign>\n                        <FontStyle>Normal</FontStyle>\n                        <FontFamily>Arial</FontFamily>\n                        <FontWeight>Normal</FontWeight>\n                        <FontSize>9.99978pt</FontSize>\n                        <TextDecoration>None</TextDecoration>\n                        <VerticalAlign>Top</VerticalAlign>\n                        <Color>Black</Color>\n                        <Format>#,##0</Format>\n                        <Direction>LTR</Direction>\n                        <WritingMode>lr-tb</WritingMode>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"IndepYear\">\n                      <Value>=iif(Fields!IndepYear.Value &gt;= 0, Fields!IndepYear.Value + \" AD\", -Fields!IndepYear.Value + \" BC\")</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>Right</TextAlign>\n                        <FontStyle>Normal</FontStyle>\n                        <FontFamily>Arial</FontFamily>\n                        <FontWeight>Normal</FontWeight>\n                        <FontSize>9.99978pt</FontSize>\n                        <TextDecoration>None</TextDecoration>\n                        <VerticalAlign>Top</VerticalAlign>\n                        <Color>Black</Color>\n                        <Format>\n                        </Format>\n                        <Direction>LTR</Direction>\n                        <WritingMode>lr-tb</WritingMode>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Population\">\n                      <Value>=Fields!Population.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>Right</TextAlign>\n                        <FontStyle>Normal</FontStyle>\n                        <FontFamily>Arial</FontFamily>\n                        <FontWeight>Normal</FontWeight>\n                        <FontSize>9.99978pt</FontSize>\n                        <TextDecoration>None</TextDecoration>\n                        <VerticalAlign>Top</VerticalAlign>\n                        <Color>Black</Color>\n                        <Format>#,##0</Format>\n                        <Direction>LTR</Direction>\n                        <WritingMode>lr-tb</WritingMode>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"LifeExpectancy\">\n                      <Value>=Fields!LifeExpectancy.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"GNP\">\n                      <Value>=Fields!GNP.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"GNPOld\">\n                      <Value>=Fields!GNPOld.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"LocalName\">\n                      <Value>=Fields!LocalName.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"GovernmentForm\">\n                      <Value>=Fields!GovernmentForm.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"HeadOfState\">\n                      <Value>=Fields!HeadOfState.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Capital\">\n                      <Value>=Fields!Capital.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Code2\">\n                      <Value>=Fields!Code2.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n        <Footer>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox30\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox31\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"tf_Name\">\n                      <Value>=Count(Fields!Name.Value)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>Right</TextAlign>\n                        <FontStyle>Normal</FontStyle>\n                        <FontFamily>Arial</FontFamily>\n                        <FontWeight>Normal</FontWeight>\n                        <FontSize>9.99978pt</FontSize>\n                        <TextDecoration>None</TextDecoration>\n                        <VerticalAlign>Top</VerticalAlign>\n                        <Color>Black</Color>\n                        <Format>#,##0</Format>\n                        <Direction>LTR</Direction>\n                        <WritingMode>lr-tb</WritingMode>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox32\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"tf_SurfaceArea\">\n                      <Value>=Sum(Fields!SurfaceArea.Value)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>Right</TextAlign>\n                        <FontStyle>Normal</FontStyle>\n                        <FontFamily>Arial</FontFamily>\n                        <FontWeight>Normal</FontWeight>\n                        <FontSize>9.99978pt</FontSize>\n                        <TextDecoration>None</TextDecoration>\n                        <VerticalAlign>Top</VerticalAlign>\n                        <Color>Black</Color>\n                        <Format>#,##0</Format>\n                        <Direction>LTR</Direction>\n                        <WritingMode>lr-tb</WritingMode>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox33\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"tf_Population\">\n                      <Value>=Sum(Fields!Population.Value)</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>Right</TextAlign>\n                        <FontStyle>Normal</FontStyle>\n                        <FontFamily>Arial</FontFamily>\n                        <FontWeight>Normal</FontWeight>\n                        <FontSize>9.99978pt</FontSize>\n                        <TextDecoration>None</TextDecoration>\n                        <VerticalAlign>Top</VerticalAlign>\n                        <Color>Black</Color>\n                        <Format>#,##0</Format>\n                        <Direction>LTR</Direction>\n                        <WritingMode>lr-tb</WritingMode>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox34\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox35\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox36\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox37\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox38\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox39\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox40\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox41\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Footer>\n      </Table>\n    </ReportItems>\n    <Height>84pt</Height>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>14 pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox42\">\n        <Top>1 pt</Top>\n        <Left>10 pt</Left>\n        <Height>12 pt</Height>\n        <Value>='Page ' + Globals!PageNumber.Value + ' of ' + Globals!TotalPages.Value</Value>\n        <Style>\n          <FontSize>9.99978pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n          <FontStyle>Normal</FontStyle>\n          <FontFamily>Arial</FontFamily>\n          <TextDecoration>None</TextDecoration>\n          <TextAlign>General</TextAlign>\n          <VerticalAlign>Top</VerticalAlign>\n          <Color>Black</Color>\n          <Format>\n          </Format>\n          <Direction>LTR</Direction>\n          <WritingMode>lr-tb</WritingMode>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <PageHeader>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Width>7in</Width>\n  <ReportParameters>\n    <ReportParameter Name=\"pop\">\n      <DataType>Integer</DataType>\n      <DefaultValue>\n        <Values>\n          <Value>0</Value>\n        </Values>\n      </DefaultValue>\n      <Nullable>False</Nullable>\n      <AllowBlank>False</AllowBlank>\n      <Prompt>Enter a minimum population</Prompt>\n    </ReportParameter>\n  </ReportParameters>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/TextProviderTest.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>11in</PageHeight>\n  <PageWidth>8.5in</PageWidth>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>Text</DataProvider>\n        <ConnectString>\n        </ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>Url=c:\\temp\\todo.csv;Header=yes</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"Category\">\n          <DataField>Category</DataField>\n        </Field>\n        <Field Name=\"Importance\">\n          <DataField>Importance</DataField>\n        </Field>\n        <Field Name=\"Description\">\n          <DataField>Description</DataField>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <Body>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>63.8pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>426.4pt</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox1\">\n                      <Value>Category</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>Description</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                  <ColSpan>2</ColSpan>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <TableGroups>\n          <TableGroup>\n            <Header>\n              <TableRows>\n                <TableRow>\n                  <Height>12 pt</Height>\n                  <TableCells>\n                    <TableCell>\n                      <ColSpan>3</ColSpan>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox4\">\n                          <Value>=Fields.Category.Value</Value>\n                          <Style>\n                            <PaddingLeft>2 pt</PaddingLeft>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                            <FontWeight>Bold</FontWeight>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                  </TableCells>\n                </TableRow>\n              </TableRows>\n              <RepeatOnNewPage>true</RepeatOnNewPage>\n            </Header>\n            <Grouping Name=\"CategoryGroup\">\n              <GroupExpressions>\n                <GroupExpression>=Fields!Category.Value</GroupExpression>\n              </GroupExpressions>\n            </Grouping>\n          </TableGroup>\n        </TableGroups>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>=Fields!Importance.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox11\">\n                      <Value>=Fields!Description.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                  <ColSpan>2</ColSpan>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n      </Table>\n    </ReportItems>\n    <Height>72pt</Height>\n  </Body>\n  <PageFooter>\n    <Height>14 pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox9\">\n        <Top>1 pt</Top>\n        <Left>10 pt</Left>\n        <Height>12 pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber.Value + ' of ' + Globals!TotalPages.Value</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n  </PageFooter>\n  <PageHeader>\n    <Height>0pt</Height>\n  </PageHeader>\n</Report>"
  },
  {
    "path": "Examples/Examples/ThreeColumns.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2003/10/reportdefinition\" xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <RightMargin>0.25in</RightMargin>\n  <Body>\n    <ReportItems>\n      <List Name=\"list1\">\n        <Style>\n          <BorderStyle xmlns=\"\" />\n          <BorderColor xmlns=\"\" />\n          <BorderWidth xmlns=\"\" />\n        </Style>\n        <DataSetName>Data</DataSetName>\n        <ReportItems>\n          <Textbox Name=\"Phone\">\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n              <PaddingBottom>2pt</PaddingBottom>\n              <PaddingTop>2pt</PaddingTop>\n              <PaddingRight>2pt</PaddingRight>\n              <BorderStyle xmlns=\"\" />\n              <BorderColor xmlns=\"\" />\n              <BorderWidth xmlns=\"\" />\n            </Style>\n            <ZIndex>1</ZIndex>\n            <CanGrow>false</CanGrow>\n            <Value>=Fields!Phone.Value</Value>\n            <Left>115.8pt</Left>\n            <Width xmlns=\"\">144.00pt</Width>\n            <Height xmlns=\"\">15.99pt</Height>\n            <Top xmlns=\"\">0.0pt</Top>\n          </Textbox>\n          <Textbox Name=\"ContactName\">\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n              <PaddingBottom>2pt</PaddingBottom>\n              <PaddingTop>2pt</PaddingTop>\n              <PaddingRight>2pt</PaddingRight>\n              <BorderStyle xmlns=\"\" />\n              <BorderColor xmlns=\"\" />\n              <BorderWidth xmlns=\"\" />\n            </Style>\n            <Width>116.18pt</Width>\n            <CanGrow>True</CanGrow>\n            <Value>=Fields!ContactName.Value</Value>\n            <Height xmlns=\"\">15.17pt</Height>\n            <Left xmlns=\"\">0.00pt</Left>\n            <Top xmlns=\"\">0.00pt</Top>\n          </Textbox>\n        </ReportItems>\n        <Sorting xmlns=\"\">\n          <SortBy>\n            <SortExpression>=Fields!ContactName.Value</SortExpression>\n            <Direction>Ascending</Direction>\n          </SortBy>\n        </Sorting>\n      </List>\n    </ReportItems>\n    <Style />\n    <Height>16.5pt</Height>\n    <ColumnSpacing>0.25in</ColumnSpacing>\n    <Columns>3</Columns>\n  </Body>\n  <TopMargin>0.5in</TopMargin>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT ContactName, Phone FROM Customers</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"ContactName\">\n          <DataField>ContactName</DataField>\n        </Field>\n        <Field Name=\"Phone\">\n          <DataField>Phone</DataField>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <LeftMargin>0.25in</LeftMargin>\n  <BottomMargin>0.5in</BottomMargin>\n  <Width>2.5in</Width>\n  <PageHeader xmlns=\"\">\n    <Height>23.8pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Height>10.35pt</Height>\n        <Width>114.55pt</Width>\n        <Value>=First(ReportItems!ContactName)</Value>\n        <Left>0.0pt</Left>\n        <Top>0.0pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <FontWeight>Bold</FontWeight>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox2\">\n        <Height>12.44pt</Height>\n        <Width>124.11pt</Width>\n        <Value>=Last(ReportItems!ContactName)</Value>\n        <Left>460.1pt</Left>\n        <Top>0.0pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <FontWeight>Bold</FontWeight>\n          <TextAlign>Right</TextAlign>\n        </Style>\n      </Textbox>\n    </ReportItems>\n  </PageHeader>\n  <PageFooter xmlns=\"\">\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Author xmlns=\"\">\n  </Author>\n  <Description xmlns=\"\">\n  </Description>\n  <PageWidth xmlns=\"\">8.5in</PageWidth>\n  <PageHeight xmlns=\"\">4in</PageHeight>\n  <DataElementName xmlns=\"\">Report</DataElementName>\n  <DataElementStyle xmlns=\"\">AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/WebLogHitCount.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>8.5in</PageHeight>\n  <PageWidth>11in</PageWidth>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>WebLog</DataProvider>\n        <ConnectString>\n        </ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <Width>10in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>Url=c:\\temp\\access103105.log;Domain=www.fyireporting.com;IndexFile=index.html</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"host\">\n          <DataField>host</DataField>\n        </Field>\n        <Field Name=\"client_identifier\">\n          <DataField>client_identifier</DataField>\n        </Field>\n        <Field Name=\"user\">\n          <DataField>user</DataField>\n        </Field>\n        <Field Name=\"datetime\">\n          <DataField>datetime</DataField>\n        </Field>\n        <Field Name=\"request_cmd\">\n          <DataField>request_cmd</DataField>\n        </Field>\n        <Field Name=\"request_url\">\n          <DataField>request_url</DataField>\n        </Field>\n        <Field Name=\"request_type\">\n          <DataField>request_type</DataField>\n        </Field>\n        <Field Name=\"request_parameters\">\n          <DataField>request_parameters</DataField>\n        </Field>\n        <Field Name=\"status_code\">\n          <DataField>status_code</DataField>\n        </Field>\n        <Field Name=\"bytes\">\n          <DataField>bytes</DataField>\n        </Field>\n        <Field Name=\"referrer\">\n          <DataField>referrer</DataField>\n        </Field>\n        <Field Name=\"user_agent\">\n          <DataField>user_agent</DataField>\n        </Field>\n        <Field Name=\"cookie\">\n          <DataField>cookie</DataField>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <Body>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>397.7pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>60.8pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>112.4pt</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox1\">\n                      <Value>URL</Value>\n                      <Style>\n                        <TextAlign>Left</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>Lightblue</BackgroundColor>\n                      </Style>\n                      <CanGrow>False</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>Hit Count</Value>\n                      <Style>\n                        <TextAlign>Left</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>Lightblue</BackgroundColor>\n                      </Style>\n                      <CanGrow>False</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox27\">\n                      <Value>Bytes Downloaded</Value>\n                      <Style>\n                        <TextAlign>Left</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>Lightblue</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <TableGroups>\n          <TableGroup>\n            <Grouping Name=\"group_url\">\n              <PageBreakAtStart>False</PageBreakAtStart>\n              <PageBreakAtEnd>False</PageBreakAtEnd>\n              <GroupExpressions>\n                <GroupExpression>=Fields!request_url.Value</GroupExpression>\n              </GroupExpressions>\n            </Grouping>\n            <Header>\n              <RepeatOnNewPage>False</RepeatOnNewPage>\n              <TableRows>\n                <TableRow>\n                  <Height>.2in</Height>\n                  <TableCells>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox14\">\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                            <BorderColor />\n                            <BorderWidth />\n                            <BackgroundColor>Lightcyan</BackgroundColor>\n                          </Style>\n                          <Value>=Fields!request_url.Value</Value>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox15\">\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                            <BorderColor />\n                            <BorderWidth />\n                            <BackgroundColor>Lightcyan</BackgroundColor>\n                          </Style>\n                          <Value>=Count(Fields!request_url.Value)</Value>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox29\">\n                          <Value>=Sum(Fields!bytes.Value)/1024</Value>\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                            <BorderColor />\n                            <BorderWidth />\n                            <TextAlign>Right</TextAlign>\n                            <Format>#,##0.0</Format>\n                            <BackgroundColor>Lightcyan</BackgroundColor>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                  </TableCells>\n                </TableRow>\n              </TableRows>\n            </Header>\n          </TableGroup>\n        </TableGroups>\n        <Footer>\n          <TableRows>\n            <TableRow>\n              <Height>.2in</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox13\">\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                      <Value>\n                      </Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox26\">\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                      <Value>=Count(Fields!request_url.Value)</Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox28\">\n                      <Value>=Sum(Fields!bytes.Value)/1024</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <TextAlign>Right</TextAlign>\n                        <Format>#,##0.0</Format>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Footer>\n      </Table>\n    </ReportItems>\n    <Height>47.1pt</Height>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0.0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <PageHeader>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/Examples/WorldFacts.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"WorldFacts\">\n  <Description>Worlds Facts - test data from MySQL World database</Description>\n  <Author>fyiReporting Software, LLC</Author>\n  <DataElementStyle>ElementNormal</DataElementStyle>\n  <LeftMargin>.4in</LeftMargin>\n  <RightMargin>.4in</RightMargin>\n  <TopMargin>.5in</TopMargin>\n  <BottomMargin>.5in</BottomMargin>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <!--\t\t\t<DataProvider>ODBC</DataProvider>   Use this line when using ODBC driver-->\n        <DataProvider>xxx</DataProvider>\n        <!-- Use this line when using xml data -->\n        <ConnectString>dsn=world;UID=uuu;PWD=ppp;</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <!--\t\t\t<CommandText>SELECT Code, Name, Continent, Region, Population, IndepYear, SurfaceArea FROM Country</CommandText> -->\n      </Query>\n      <Fields>\n        <Field Name=\"Code\">\n          <DataField>Code</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Name\">\n          <DataField>Name</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Continent\">\n          <DataField>Continent</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Region\">\n          <DataField>Region</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Population\">\n          <DataField>Population</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n        <Field Name=\"IndependenceYear\">\n          <DataField>IndependenceYear</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n        <Field Name=\"SurfaceArea\">\n          <DataField>SurfaceArea</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <Rows File=\"WorldFacts.xml\" />\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>.5 in</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Top>.1 in</Top>\n        <Left>.1 in</Left>\n        <Height>.25 in</Height>\n        <Value>The World's Countries</Value>\n        <Style>\n          <FontSize>15pt</FontSize>\n          <FontWeight>Bold</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>64.4pt</Height>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DetailDataElementName>Row</DetailDataElementName>\n        <DetailDataCollectionName>Rows</DetailDataCollectionName>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>.75 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>.5 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>2.5 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>Continent</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>Code</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>Name</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value>Region</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox6\">\n                      <Value>Population</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox7\">\n                      <Value>Independence</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox8\">\n                      <Value>Surface Area</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <TableGroups>\n          <TableGroup>\n            <Header>\n              <TableRows>\n                <TableRow>\n                  <Height>12 pt</Height>\n                  <TableCells>\n                    <TableCell>\n                      <ColSpan>7</ColSpan>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox9\">\n                          <Value>=Fields.Continent.Value</Value>\n                          <Style>\n                            <PaddingLeft>2 pt</PaddingLeft>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                            <FontWeight>Bold</FontWeight>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                  </TableCells>\n                </TableRow>\n              </TableRows>\n              <RepeatOnNewPage>true</RepeatOnNewPage>\n            </Header>\n            <Footer>\n              <TableRows>\n                <TableRow>\n                  <Height>12 pt</Height>\n                  <TableCells>\n                    <TableCell>\n                      <ColSpan>7</ColSpan>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox14\">\n                          <Value>=\"Count of countries in \" + Fields.Continent.Value + \" = \" +Count(Fields.Name.Value)</Value>\n                          <Style>\n                            <PaddingLeft>2 pt</PaddingLeft>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                            <FontWeight>Bold</FontWeight>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                  </TableCells>\n                </TableRow>\n              </TableRows>\n            </Footer>\n            <Grouping Name=\"ContinentGroup\">\n              <GroupExpressions>\n                <GroupExpression>=Fields!Continent.Value</GroupExpression>\n              </GroupExpressions>\n            </Grouping>\n          </TableGroup>\n        </TableGroups>\n        <Details>\n          <Sorting>\n            <SortBy>\n              <SortExpression>=Fields!Name.Value</SortExpression>\n            </SortBy>\n          </Sorting>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                          <Bottom>None</Bottom>\n                          <Top>None</Top>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Code\">\n                      <Value>=Fields!Code.Value</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Name\">\n                      <CanGrow>true</CanGrow>\n                      <Value>=Fields!Name.Value</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Region\">\n                      <CanGrow>true</CanGrow>\n                      <Value>=Fields!Region.Value</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox11\">\n                      <Value>=Fields!Population.Value</Value>\n                      <Style>\n                        <Format>#,##0</Format>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox12\">\n                      <Value>=switch(Fields!IndependenceYear.Value = 0, \"\", Fields!IndependenceYear.Value &gt; 0, Fields!IndependenceYear.Value, true, -Fields!IndependenceYear.Value + \" BC\")</Value>\n                      <Style>\n                        <Format>0000</Format>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox13\">\n                      <Value>=Fields!SurfaceArea.Value</Value>\n                      <Style>\n                        <Format>#,##0</Format>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n        <Footer>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ColSpan>4</ColSpan>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox15\">\n                      <Value>=CountDistinct(Fields.Continent.Value) + \" continents.  \" + Count(Fields.Name.Value)+ \" countries.\" </Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ColSpan>1</ColSpan>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox16\">\n                      <Value>=Sum(Fields.Population.Value)</Value>\n                      <Style>\n                        <Format>#,##0</Format>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ColSpan>1</ColSpan>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox17\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <Format>#,##0</Format>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ColSpan>1</ColSpan>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox18\">\n                      <Value>=Sum(Fields.SurfaceArea.Value)</Value>\n                      <Style>\n                        <Format>#,##0</Format>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Footer>\n      </Table>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>7in</Width>\n  <PageWidth>8.5in</PageWidth>\n  <PageHeight>11in</PageHeight>\n  <DataElementName>Report</DataElementName>\n</Report>"
  },
  {
    "path": "Examples/Examples/WorldFacts.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<Rows>\n<Row><Code>DZA</Code><Continent>Africa</Continent><Name>Algeria</Name><Region>Northern Africa</Region><Population>31,471,000</Population><IndependenceYear>1962</IndependenceYear><SurfaceArea>2,381,741</SurfaceArea></Row>\n<Row><Code>AGO</Code><Continent>Africa</Continent><Name>Angola</Name><Region>Central Africa</Region><Population>12,878,000</Population><IndependenceYear>1975</IndependenceYear><SurfaceArea>1,246,700</SurfaceArea></Row>\n<Row><Code>BEN</Code><Continent>Africa</Continent><Name>Benin</Name><Region>Western Africa</Region><Population>6,097,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>112,622</SurfaceArea></Row>\n<Row><Code>BWA</Code><Continent>Africa</Continent><Name>Botswana</Name><Region>Southern Africa</Region><Population>1,622,000</Population><IndependenceYear>1966</IndependenceYear><SurfaceArea>581,730</SurfaceArea></Row>\n<Row><Code>IOT</Code><Continent>Africa</Continent><Name>British Indian Ocean Territory</Name><Region>Eastern Africa</Region><Population>0</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>78</SurfaceArea></Row>\n<Row><Code>BFA</Code><Continent>Africa</Continent><Name>Burkina Faso</Name><Region>Western Africa</Region><Population>11,937,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>274,000</SurfaceArea></Row>\n<Row><Code>BDI</Code><Continent>Africa</Continent><Name>Burundi</Name><Region>Eastern Africa</Region><Population>6,695,000</Population><IndependenceYear>1962</IndependenceYear><SurfaceArea>27,834</SurfaceArea></Row>\n<Row><Code>CMR</Code><Continent>Africa</Continent><Name>Cameroon</Name><Region>Central Africa</Region><Population>15,085,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>475,442</SurfaceArea></Row>\n<Row><Code>CPV</Code><Continent>Africa</Continent><Name>Cape Verde</Name><Region>Western Africa</Region><Population>428,000</Population><IndependenceYear>1975</IndependenceYear><SurfaceArea>4,033</SurfaceArea></Row>\n<Row><Code>CAF</Code><Continent>Africa</Continent><Name>Central African Republic</Name><Region>Central Africa</Region><Population>3,615,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>622,984</SurfaceArea></Row>\n<Row><Code>TCD</Code><Continent>Africa</Continent><Name>Chad</Name><Region>Central Africa</Region><Population>7,651,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>1,284,000</SurfaceArea></Row>\n<Row><Code>COM</Code><Continent>Africa</Continent><Name>Comoros</Name><Region>Eastern Africa</Region><Population>578,000</Population><IndependenceYear>1975</IndependenceYear><SurfaceArea>1,862</SurfaceArea></Row>\n<Row><Code>COG</Code><Continent>Africa</Continent><Name>Congo</Name><Region>Central Africa</Region><Population>2,943,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>342,000</SurfaceArea></Row>\n<Row><Code>COD</Code><Continent>Africa</Continent><Name>Congo, The Democratic Republic of the</Name><Region>Central Africa</Region><Population>51,654,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>2,344,858</SurfaceArea></Row>\n<Row><Code>CIV</Code><Continent>Africa</Continent><Name>C&#244;te d&#8217;Ivoire</Name><Region>Western Africa</Region><Population>14,786,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>322,463</SurfaceArea></Row>\n<Row><Code>DJI</Code><Continent>Africa</Continent><Name>Djibouti</Name><Region>Eastern Africa</Region><Population>638,000</Population><IndependenceYear>1977</IndependenceYear><SurfaceArea>23,200</SurfaceArea></Row>\n<Row><Code>EGY</Code><Continent>Africa</Continent><Name>Egypt</Name><Region>Northern Africa</Region><Population>68,470,000</Population><IndependenceYear>1922</IndependenceYear><SurfaceArea>1,001,449</SurfaceArea></Row>\n<Row><Code>GNQ</Code><Continent>Africa</Continent><Name>Equatorial Guinea</Name><Region>Central Africa</Region><Population>453,000</Population><IndependenceYear>1968</IndependenceYear><SurfaceArea>28,051</SurfaceArea></Row>\n<Row><Code>ERI</Code><Continent>Africa</Continent><Name>Eritrea</Name><Region>Eastern Africa</Region><Population>3,850,000</Population><IndependenceYear>1993</IndependenceYear><SurfaceArea>117,600</SurfaceArea></Row>\n<Row><Code>ETH</Code><Continent>Africa</Continent><Name>Ethiopia</Name><Region>Eastern Africa</Region><Population>62,565,000</Population><IndependenceYear>-1000</IndependenceYear><SurfaceArea>1,104,300</SurfaceArea></Row>\n<Row><Code>GAB</Code><Continent>Africa</Continent><Name>Gabon</Name><Region>Central Africa</Region><Population>1,226,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>267,668</SurfaceArea></Row>\n<Row><Code>GMB</Code><Continent>Africa</Continent><Name>Gambia</Name><Region>Western Africa</Region><Population>1,305,000</Population><IndependenceYear>1965</IndependenceYear><SurfaceArea>11,295</SurfaceArea></Row>\n<Row><Code>GHA</Code><Continent>Africa</Continent><Name>Ghana</Name><Region>Western Africa</Region><Population>20,212,000</Population><IndependenceYear>1957</IndependenceYear><SurfaceArea>238,533</SurfaceArea></Row>\n<Row><Code>GIN</Code><Continent>Africa</Continent><Name>Guinea</Name><Region>Western Africa</Region><Population>7,430,000</Population><IndependenceYear>1958</IndependenceYear><SurfaceArea>245,857</SurfaceArea></Row>\n<Row><Code>GNB</Code><Continent>Africa</Continent><Name>Guinea-Bissau</Name><Region>Western Africa</Region><Population>1,213,000</Population><IndependenceYear>1974</IndependenceYear><SurfaceArea>36,125</SurfaceArea></Row>\n<Row><Code>KEN</Code><Continent>Africa</Continent><Name>Kenya</Name><Region>Eastern Africa</Region><Population>30,080,000</Population><IndependenceYear>1963</IndependenceYear><SurfaceArea>580,367</SurfaceArea></Row>\n<Row><Code>LSO</Code><Continent>Africa</Continent><Name>Lesotho</Name><Region>Southern Africa</Region><Population>2,153,000</Population><IndependenceYear>1966</IndependenceYear><SurfaceArea>30,355</SurfaceArea></Row>\n<Row><Code>LBR</Code><Continent>Africa</Continent><Name>Liberia</Name><Region>Western Africa</Region><Population>3,154,000</Population><IndependenceYear>1847</IndependenceYear><SurfaceArea>111,369</SurfaceArea></Row>\n<Row><Code>LBY</Code><Continent>Africa</Continent><Name>Libyan Arab Jamahiriya</Name><Region>Northern Africa</Region><Population>5,605,000</Population><IndependenceYear>1951</IndependenceYear><SurfaceArea>1,759,540</SurfaceArea></Row>\n<Row><Code>MDG</Code><Continent>Africa</Continent><Name>Madagascar</Name><Region>Eastern Africa</Region><Population>15,942,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>587,041</SurfaceArea></Row>\n<Row><Code>MWI</Code><Continent>Africa</Continent><Name>Malawi</Name><Region>Eastern Africa</Region><Population>10,925,000</Population><IndependenceYear>1964</IndependenceYear><SurfaceArea>118,484</SurfaceArea></Row>\n<Row><Code>MLI</Code><Continent>Africa</Continent><Name>Mali</Name><Region>Western Africa</Region><Population>11,234,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>1,240,192</SurfaceArea></Row>\n<Row><Code>MRT</Code><Continent>Africa</Continent><Name>Mauritania</Name><Region>Western Africa</Region><Population>2,670,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>1,025,520</SurfaceArea></Row>\n<Row><Code>MUS</Code><Continent>Africa</Continent><Name>Mauritius</Name><Region>Eastern Africa</Region><Population>1,158,000</Population><IndependenceYear>1968</IndependenceYear><SurfaceArea>2,040</SurfaceArea></Row>\n<Row><Code>MYT</Code><Continent>Africa</Continent><Name>Mayotte</Name><Region>Eastern Africa</Region><Population>149,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>373</SurfaceArea></Row>\n<Row><Code>MAR</Code><Continent>Africa</Continent><Name>Morocco</Name><Region>Northern Africa</Region><Population>28,351,000</Population><IndependenceYear>1956</IndependenceYear><SurfaceArea>446,550</SurfaceArea></Row>\n<Row><Code>MOZ</Code><Continent>Africa</Continent><Name>Mozambique</Name><Region>Eastern Africa</Region><Population>19,680,000</Population><IndependenceYear>1975</IndependenceYear><SurfaceArea>801,590</SurfaceArea></Row>\n<Row><Code>NAM</Code><Continent>Africa</Continent><Name>Namibia</Name><Region>Southern Africa</Region><Population>1,726,000</Population><IndependenceYear>1990</IndependenceYear><SurfaceArea>824,292</SurfaceArea></Row>\n<Row><Code>NER</Code><Continent>Africa</Continent><Name>Niger</Name><Region>Western Africa</Region><Population>10,730,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>1,267,000</SurfaceArea></Row>\n<Row><Code>NGA</Code><Continent>Africa</Continent><Name>Nigeria</Name><Region>Western Africa</Region><Population>111,506,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>923,768</SurfaceArea></Row>\n<Row><Code>REU</Code><Continent>Africa</Continent><Name>R&#233;union</Name><Region>Eastern Africa</Region><Population>699,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>2,510</SurfaceArea></Row>\n<Row><Code>RWA</Code><Continent>Africa</Continent><Name>Rwanda</Name><Region>Eastern Africa</Region><Population>7,733,000</Population><IndependenceYear>1962</IndependenceYear><SurfaceArea>26,338</SurfaceArea></Row>\n<Row><Code>SHN</Code><Continent>Africa</Continent><Name>Saint Helena</Name><Region>Western Africa</Region><Population>6,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>314</SurfaceArea></Row>\n<Row><Code>STP</Code><Continent>Africa</Continent><Name>Sao Tome and Principe</Name><Region>Central Africa</Region><Population>147,000</Population><IndependenceYear>1975</IndependenceYear><SurfaceArea>964</SurfaceArea></Row>\n<Row><Code>SEN</Code><Continent>Africa</Continent><Name>Senegal</Name><Region>Western Africa</Region><Population>9,481,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>196,722</SurfaceArea></Row>\n<Row><Code>SYC</Code><Continent>Africa</Continent><Name>Seychelles</Name><Region>Eastern Africa</Region><Population>77,000</Population><IndependenceYear>1976</IndependenceYear><SurfaceArea>455</SurfaceArea></Row>\n<Row><Code>SLE</Code><Continent>Africa</Continent><Name>Sierra Leone</Name><Region>Western Africa</Region><Population>4,854,000</Population><IndependenceYear>1961</IndependenceYear><SurfaceArea>71,740</SurfaceArea></Row>\n<Row><Code>SOM</Code><Continent>Africa</Continent><Name>Somalia</Name><Region>Eastern Africa</Region><Population>10,097,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>637,657</SurfaceArea></Row>\n<Row><Code>ZAF</Code><Continent>Africa</Continent><Name>South Africa</Name><Region>Southern Africa</Region><Population>40,377,000</Population><IndependenceYear>1910</IndependenceYear><SurfaceArea>1,221,037</SurfaceArea></Row>\n<Row><Code>SDN</Code><Continent>Africa</Continent><Name>Sudan</Name><Region>Northern Africa</Region><Population>29,490,000</Population><IndependenceYear>1956</IndependenceYear><SurfaceArea>2,505,813</SurfaceArea></Row>\n<Row><Code>SWZ</Code><Continent>Africa</Continent><Name>Swaziland</Name><Region>Southern Africa</Region><Population>1,008,000</Population><IndependenceYear>1968</IndependenceYear><SurfaceArea>17,364</SurfaceArea></Row>\n<Row><Code>TZA</Code><Continent>Africa</Continent><Name>Tanzania</Name><Region>Eastern Africa</Region><Population>33,517,000</Population><IndependenceYear>1961</IndependenceYear><SurfaceArea>883,749</SurfaceArea></Row>\n<Row><Code>TGO</Code><Continent>Africa</Continent><Name>Togo</Name><Region>Western Africa</Region><Population>4,629,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>56,785</SurfaceArea></Row>\n<Row><Code>TUN</Code><Continent>Africa</Continent><Name>Tunisia</Name><Region>Northern Africa</Region><Population>9,586,000</Population><IndependenceYear>1956</IndependenceYear><SurfaceArea>163,610</SurfaceArea></Row>\n<Row><Code>UGA</Code><Continent>Africa</Continent><Name>Uganda</Name><Region>Eastern Africa</Region><Population>21,778,000</Population><IndependenceYear>1962</IndependenceYear><SurfaceArea>241,038</SurfaceArea></Row>\n<Row><Code>ESH</Code><Continent>Africa</Continent><Name>Western Sahara</Name><Region>Northern Africa</Region><Population>293,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>266,000</SurfaceArea></Row>\n<Row><Code>ZMB</Code><Continent>Africa</Continent><Name>Zambia</Name><Region>Eastern Africa</Region><Population>9,169,000</Population><IndependenceYear>1964</IndependenceYear><SurfaceArea>752,618</SurfaceArea></Row>\n<Row><Code>ZWE</Code><Continent>Africa</Continent><Name>Zimbabwe</Name><Region>Eastern Africa</Region><Population>11,669,000</Population><IndependenceYear>1980</IndependenceYear><SurfaceArea>390,757</SurfaceArea></Row>\n<Row><Code>ATA</Code><Continent>Antarctica</Continent><Name>Antarctica</Name><Region>Antarctica</Region><Population>0</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>13,120,000</SurfaceArea></Row>\n<Row><Code>BVT</Code><Continent>Antarctica</Continent><Name>Bouvet Island</Name><Region>Antarctica</Region><Population>0</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>59</SurfaceArea></Row>\n<Row><Code>ATF</Code><Continent>Antarctica</Continent><Name>French Southern territories</Name><Region>Antarctica</Region><Population>0</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>7,780</SurfaceArea></Row>\n<Row><Code>HMD</Code><Continent>Antarctica</Continent><Name>Heard Island and McDonald Islands</Name><Region>Antarctica</Region><Population>0</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>359</SurfaceArea></Row>\n<Row><Code>SGS</Code><Continent>Antarctica</Continent><Name>South Georgia and the South Sandwich Islands</Name><Region>Antarctica</Region><Population>0</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>3,903</SurfaceArea></Row>\n<Row><Code>AFG</Code><Continent>Asia</Continent><Name>Afghanistan</Name><Region>Southern and Central Asia</Region><Population>22,720,000</Population><IndependenceYear>1919</IndependenceYear><SurfaceArea>652,090</SurfaceArea></Row>\n<Row><Code>ARM</Code><Continent>Asia</Continent><Name>Armenia</Name><Region>Middle East</Region><Population>3,520,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>29,800</SurfaceArea></Row>\n<Row><Code>AZE</Code><Continent>Asia</Continent><Name>Azerbaijan</Name><Region>Middle East</Region><Population>7,734,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>86,600</SurfaceArea></Row>\n<Row><Code>BHR</Code><Continent>Asia</Continent><Name>Bahrain</Name><Region>Middle East</Region><Population>617,000</Population><IndependenceYear>1971</IndependenceYear><SurfaceArea>694</SurfaceArea></Row>\n<Row><Code>BGD</Code><Continent>Asia</Continent><Name>Bangladesh</Name><Region>Southern and Central Asia</Region><Population>129,155,000</Population><IndependenceYear>1971</IndependenceYear><SurfaceArea>143,998</SurfaceArea></Row>\n<Row><Code>BTN</Code><Continent>Asia</Continent><Name>Bhutan</Name><Region>Southern and Central Asia</Region><Population>2,124,000</Population><IndependenceYear>1910</IndependenceYear><SurfaceArea>47,000</SurfaceArea></Row>\n<Row><Code>BRN</Code><Continent>Asia</Continent><Name>Brunei</Name><Region>Southeast Asia</Region><Population>328,000</Population><IndependenceYear>1984</IndependenceYear><SurfaceArea>5,765</SurfaceArea></Row>\n<Row><Code>KHM</Code><Continent>Asia</Continent><Name>Cambodia</Name><Region>Southeast Asia</Region><Population>11,168,000</Population><IndependenceYear>1953</IndependenceYear><SurfaceArea>181,035</SurfaceArea></Row>\n<Row><Code>CHN</Code><Continent>Asia</Continent><Name>China</Name><Region>Eastern Asia</Region><Population>1,277,558,000</Population><IndependenceYear>-1523</IndependenceYear><SurfaceArea>9,572,900</SurfaceArea></Row>\n<Row><Code>CYP</Code><Continent>Asia</Continent><Name>Cyprus</Name><Region>Middle East</Region><Population>754,700</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>9,251</SurfaceArea></Row>\n<Row><Code>TMP</Code><Continent>Asia</Continent><Name>East Timor</Name><Region>Southeast Asia</Region><Population>885,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>14,874</SurfaceArea></Row>\n<Row><Code>GEO</Code><Continent>Asia</Continent><Name>Georgia</Name><Region>Middle East</Region><Population>4,968,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>69,700</SurfaceArea></Row>\n<Row><Code>HKG</Code><Continent>Asia</Continent><Name>Hong Kong</Name><Region>Eastern Asia</Region><Population>6,782,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>1,075</SurfaceArea></Row>\n<Row><Code>IND</Code><Continent>Asia</Continent><Name>India</Name><Region>Southern and Central Asia</Region><Population>1,013,662,000</Population><IndependenceYear>1947</IndependenceYear><SurfaceArea>3,287,263</SurfaceArea></Row>\n<Row><Code>IDN</Code><Continent>Asia</Continent><Name>Indonesia</Name><Region>Southeast Asia</Region><Population>212,107,000</Population><IndependenceYear>1945</IndependenceYear><SurfaceArea>1,904,569</SurfaceArea></Row>\n<Row><Code>IRN</Code><Continent>Asia</Continent><Name>Iran</Name><Region>Southern and Central Asia</Region><Population>67,702,000</Population><IndependenceYear>1906</IndependenceYear><SurfaceArea>1,648,195</SurfaceArea></Row>\n<Row><Code>IRQ</Code><Continent>Asia</Continent><Name>Iraq</Name><Region>Middle East</Region><Population>23,115,000</Population><IndependenceYear>1932</IndependenceYear><SurfaceArea>438,317</SurfaceArea></Row>\n<Row><Code>ISR</Code><Continent>Asia</Continent><Name>Israel</Name><Region>Middle East</Region><Population>6,217,000</Population><IndependenceYear>1948</IndependenceYear><SurfaceArea>21,056</SurfaceArea></Row>\n<Row><Code>JPN</Code><Continent>Asia</Continent><Name>Japan</Name><Region>Eastern Asia</Region><Population>126,714,000</Population><IndependenceYear>-0660</IndependenceYear><SurfaceArea>377,829</SurfaceArea></Row>\n<Row><Code>JOR</Code><Continent>Asia</Continent><Name>Jordan</Name><Region>Middle East</Region><Population>5,083,000</Population><IndependenceYear>1946</IndependenceYear><SurfaceArea>88,946</SurfaceArea></Row>\n<Row><Code>KAZ</Code><Continent>Asia</Continent><Name>Kazakstan</Name><Region>Southern and Central Asia</Region><Population>16,223,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>2,724,900</SurfaceArea></Row>\n<Row><Code>KWT</Code><Continent>Asia</Continent><Name>Kuwait</Name><Region>Middle East</Region><Population>1,972,000</Population><IndependenceYear>1961</IndependenceYear><SurfaceArea>17,818</SurfaceArea></Row>\n<Row><Code>KGZ</Code><Continent>Asia</Continent><Name>Kyrgyzstan</Name><Region>Southern and Central Asia</Region><Population>4,699,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>199,900</SurfaceArea></Row>\n<Row><Code>LAO</Code><Continent>Asia</Continent><Name>Laos</Name><Region>Southeast Asia</Region><Population>5,433,000</Population><IndependenceYear>1953</IndependenceYear><SurfaceArea>236,800</SurfaceArea></Row>\n<Row><Code>LBN</Code><Continent>Asia</Continent><Name>Lebanon</Name><Region>Middle East</Region><Population>3,282,000</Population><IndependenceYear>1941</IndependenceYear><SurfaceArea>10,400</SurfaceArea></Row>\n<Row><Code>MAC</Code><Continent>Asia</Continent><Name>Macao</Name><Region>Eastern Asia</Region><Population>473,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>18</SurfaceArea></Row>\n<Row><Code>MYS</Code><Continent>Asia</Continent><Name>Malaysia</Name><Region>Southeast Asia</Region><Population>22,244,000</Population><IndependenceYear>1957</IndependenceYear><SurfaceArea>329,758</SurfaceArea></Row>\n<Row><Code>MDV</Code><Continent>Asia</Continent><Name>Maldives</Name><Region>Southern and Central Asia</Region><Population>286,000</Population><IndependenceYear>1965</IndependenceYear><SurfaceArea>298</SurfaceArea></Row>\n<Row><Code>MNG</Code><Continent>Asia</Continent><Name>Mongolia</Name><Region>Eastern Asia</Region><Population>2,662,000</Population><IndependenceYear>1921</IndependenceYear><SurfaceArea>1,566,500</SurfaceArea></Row>\n<Row><Code>MMR</Code><Continent>Asia</Continent><Name>Myanmar</Name><Region>Southeast Asia</Region><Population>45,611,000</Population><IndependenceYear>1948</IndependenceYear><SurfaceArea>676,578</SurfaceArea></Row>\n<Row><Code>NPL</Code><Continent>Asia</Continent><Name>Nepal</Name><Region>Southern and Central Asia</Region><Population>23,930,000</Population><IndependenceYear>1769</IndependenceYear><SurfaceArea>147,181</SurfaceArea></Row>\n<Row><Code>PRK</Code><Continent>Asia</Continent><Name>North Korea</Name><Region>Eastern Asia</Region><Population>24,039,000</Population><IndependenceYear>1948</IndependenceYear><SurfaceArea>120,538</SurfaceArea></Row>\n<Row><Code>OMN</Code><Continent>Asia</Continent><Name>Oman</Name><Region>Middle East</Region><Population>2,542,000</Population><IndependenceYear>1951</IndependenceYear><SurfaceArea>309,500</SurfaceArea></Row>\n<Row><Code>PAK</Code><Continent>Asia</Continent><Name>Pakistan</Name><Region>Southern and Central Asia</Region><Population>156,483,000</Population><IndependenceYear>1947</IndependenceYear><SurfaceArea>796,095</SurfaceArea></Row>\n<Row><Code>PSE</Code><Continent>Asia</Continent><Name>Palestine</Name><Region>Middle East</Region><Population>3,101,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>6,257</SurfaceArea></Row>\n<Row><Code>PHL</Code><Continent>Asia</Continent><Name>Philippines</Name><Region>Southeast Asia</Region><Population>75,967,000</Population><IndependenceYear>1946</IndependenceYear><SurfaceArea>300,000</SurfaceArea></Row>\n<Row><Code>QAT</Code><Continent>Asia</Continent><Name>Qatar</Name><Region>Middle East</Region><Population>599,000</Population><IndependenceYear>1971</IndependenceYear><SurfaceArea>11,000</SurfaceArea></Row>\n<Row><Code>SAU</Code><Continent>Asia</Continent><Name>Saudi Arabia</Name><Region>Middle East</Region><Population>21,607,000</Population><IndependenceYear>1932</IndependenceYear><SurfaceArea>2,149,690</SurfaceArea></Row>\n<Row><Code>SGP</Code><Continent>Asia</Continent><Name>Singapore</Name><Region>Southeast Asia</Region><Population>3,567,000</Population><IndependenceYear>1965</IndependenceYear><SurfaceArea>618</SurfaceArea></Row>\n<Row><Code>KOR</Code><Continent>Asia</Continent><Name>South Korea</Name><Region>Eastern Asia</Region><Population>46,844,000</Population><IndependenceYear>1948</IndependenceYear><SurfaceArea>99,434</SurfaceArea></Row>\n<Row><Code>LKA</Code><Continent>Asia</Continent><Name>Sri Lanka</Name><Region>Southern and Central Asia</Region><Population>18,827,000</Population><IndependenceYear>1948</IndependenceYear><SurfaceArea>65,610</SurfaceArea></Row>\n<Row><Code>SYR</Code><Continent>Asia</Continent><Name>Syria</Name><Region>Middle East</Region><Population>16,125,000</Population><IndependenceYear>1941</IndependenceYear><SurfaceArea>185,180</SurfaceArea></Row>\n<Row><Code>TWN</Code><Continent>Asia</Continent><Name>Taiwan</Name><Region>Eastern Asia</Region><Population>22,256,000</Population><IndependenceYear>1945</IndependenceYear><SurfaceArea>36,188</SurfaceArea></Row>\n<Row><Code>TJK</Code><Continent>Asia</Continent><Name>Tajikistan</Name><Region>Southern and Central Asia</Region><Population>6,188,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>143,100</SurfaceArea></Row>\n<Row><Code>THA</Code><Continent>Asia</Continent><Name>Thailand</Name><Region>Southeast Asia</Region><Population>61,399,000</Population><IndependenceYear>1350</IndependenceYear><SurfaceArea>513,115</SurfaceArea></Row>\n<Row><Code>TUR</Code><Continent>Asia</Continent><Name>Turkey</Name><Region>Middle East</Region><Population>66,591,000</Population><IndependenceYear>1923</IndependenceYear><SurfaceArea>774,815</SurfaceArea></Row>\n<Row><Code>TKM</Code><Continent>Asia</Continent><Name>Turkmenistan</Name><Region>Southern and Central Asia</Region><Population>4,459,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>488,100</SurfaceArea></Row>\n<Row><Code>ARE</Code><Continent>Asia</Continent><Name>United Arab Emirates</Name><Region>Middle East</Region><Population>2,441,000</Population><IndependenceYear>1971</IndependenceYear><SurfaceArea>83,600</SurfaceArea></Row>\n<Row><Code>UZB</Code><Continent>Asia</Continent><Name>Uzbekistan</Name><Region>Southern and Central Asia</Region><Population>24,318,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>447,400</SurfaceArea></Row>\n<Row><Code>VNM</Code><Continent>Asia</Continent><Name>Vietnam</Name><Region>Southeast Asia</Region><Population>79,832,000</Population><IndependenceYear>1945</IndependenceYear><SurfaceArea>331,689</SurfaceArea></Row>\n<Row><Code>YEM</Code><Continent>Asia</Continent><Name>Yemen</Name><Region>Middle East</Region><Population>18,112,000</Population><IndependenceYear>1918</IndependenceYear><SurfaceArea>527,968</SurfaceArea></Row>\n<Row><Code>ALB</Code><Continent>Europe</Continent><Name>Albania</Name><Region>Southern Europe</Region><Population>3,401,200</Population><IndependenceYear>1912</IndependenceYear><SurfaceArea>28,748</SurfaceArea></Row>\n<Row><Code>AND</Code><Continent>Europe</Continent><Name>Andorra</Name><Region>Southern Europe</Region><Population>78,000</Population><IndependenceYear>1278</IndependenceYear><SurfaceArea>468</SurfaceArea></Row>\n<Row><Code>AUT</Code><Continent>Europe</Continent><Name>Austria</Name><Region>Western Europe</Region><Population>8,091,800</Population><IndependenceYear>1918</IndependenceYear><SurfaceArea>83,859</SurfaceArea></Row>\n<Row><Code>BLR</Code><Continent>Europe</Continent><Name>Belarus</Name><Region>Eastern Europe</Region><Population>10,236,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>207,600</SurfaceArea></Row>\n<Row><Code>BEL</Code><Continent>Europe</Continent><Name>Belgium</Name><Region>Western Europe</Region><Population>10,239,000</Population><IndependenceYear>1830</IndependenceYear><SurfaceArea>30,518</SurfaceArea></Row>\n<Row><Code>BIH</Code><Continent>Europe</Continent><Name>Bosnia and Herzegovina</Name><Region>Southern Europe</Region><Population>3,972,000</Population><IndependenceYear>1992</IndependenceYear><SurfaceArea>51,197</SurfaceArea></Row>\n<Row><Code>BGR</Code><Continent>Europe</Continent><Name>Bulgaria</Name><Region>Eastern Europe</Region><Population>8,190,900</Population><IndependenceYear>1908</IndependenceYear><SurfaceArea>110,994</SurfaceArea></Row>\n<Row><Code>HRV</Code><Continent>Europe</Continent><Name>Croatia</Name><Region>Southern Europe</Region><Population>4,473,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>56,538</SurfaceArea></Row>\n<Row><Code>CZE</Code><Continent>Europe</Continent><Name>Czech Republic</Name><Region>Eastern Europe</Region><Population>10,278,100</Population><IndependenceYear>1993</IndependenceYear><SurfaceArea>78,866</SurfaceArea></Row>\n<Row><Code>DNK</Code><Continent>Europe</Continent><Name>Denmark</Name><Region>Nordic Countries</Region><Population>5,330,000</Population><IndependenceYear>0800</IndependenceYear><SurfaceArea>43,094</SurfaceArea></Row>\n<Row><Code>EST</Code><Continent>Europe</Continent><Name>Estonia</Name><Region>Baltic Countries</Region><Population>1,439,200</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>45,227</SurfaceArea></Row>\n<Row><Code>FRO</Code><Continent>Europe</Continent><Name>Faroe Islands</Name><Region>Nordic Countries</Region><Population>43,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>1,399</SurfaceArea></Row>\n<Row><Code>FIN</Code><Continent>Europe</Continent><Name>Finland</Name><Region>Nordic Countries</Region><Population>5,171,300</Population><IndependenceYear>1917</IndependenceYear><SurfaceArea>338,145</SurfaceArea></Row>\n<Row><Code>FRA</Code><Continent>Europe</Continent><Name>France</Name><Region>Western Europe</Region><Population>59,225,700</Population><IndependenceYear>0843</IndependenceYear><SurfaceArea>551,500</SurfaceArea></Row>\n<Row><Code>DEU</Code><Continent>Europe</Continent><Name>Germany</Name><Region>Western Europe</Region><Population>82,164,700</Population><IndependenceYear>1955</IndependenceYear><SurfaceArea>357,022</SurfaceArea></Row>\n<Row><Code>GIB</Code><Continent>Europe</Continent><Name>Gibraltar</Name><Region>Southern Europe</Region><Population>25,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>6</SurfaceArea></Row>\n<Row><Code>GRC</Code><Continent>Europe</Continent><Name>Greece</Name><Region>Southern Europe</Region><Population>10,545,700</Population><IndependenceYear>1830</IndependenceYear><SurfaceArea>131,626</SurfaceArea></Row>\n<Row><Code>VAT</Code><Continent>Europe</Continent><Name>Holy See (Vatican City State)</Name><Region>Southern Europe</Region><Population>1,000</Population><IndependenceYear>1929</IndependenceYear><SurfaceArea>0</SurfaceArea></Row>\n<Row><Code>HUN</Code><Continent>Europe</Continent><Name>Hungary</Name><Region>Eastern Europe</Region><Population>10,043,200</Population><IndependenceYear>1918</IndependenceYear><SurfaceArea>93,030</SurfaceArea></Row>\n<Row><Code>ISL</Code><Continent>Europe</Continent><Name>Iceland</Name><Region>Nordic Countries</Region><Population>279,000</Population><IndependenceYear>1944</IndependenceYear><SurfaceArea>103,000</SurfaceArea></Row>\n<Row><Code>IRL</Code><Continent>Europe</Continent><Name>Ireland</Name><Region>British Islands</Region><Population>3,775,100</Population><IndependenceYear>1921</IndependenceYear><SurfaceArea>70,273</SurfaceArea></Row>\n<Row><Code>ITA</Code><Continent>Europe</Continent><Name>Italy</Name><Region>Southern Europe</Region><Population>57,680,000</Population><IndependenceYear>1861</IndependenceYear><SurfaceArea>301,316</SurfaceArea></Row>\n<Row><Code>LVA</Code><Continent>Europe</Continent><Name>Latvia</Name><Region>Baltic Countries</Region><Population>2,424,200</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>64,589</SurfaceArea></Row>\n<Row><Code>LIE</Code><Continent>Europe</Continent><Name>Liechtenstein</Name><Region>Western Europe</Region><Population>32,300</Population><IndependenceYear>1806</IndependenceYear><SurfaceArea>160</SurfaceArea></Row>\n<Row><Code>LTU</Code><Continent>Europe</Continent><Name>Lithuania</Name><Region>Baltic Countries</Region><Population>3,698,500</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>65,301</SurfaceArea></Row>\n<Row><Code>LUX</Code><Continent>Europe</Continent><Name>Luxembourg</Name><Region>Western Europe</Region><Population>435,700</Population><IndependenceYear>1867</IndependenceYear><SurfaceArea>2,586</SurfaceArea></Row>\n<Row><Code>MKD</Code><Continent>Europe</Continent><Name>Macedonia</Name><Region>Southern Europe</Region><Population>2,024,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>25,713</SurfaceArea></Row>\n<Row><Code>MLT</Code><Continent>Europe</Continent><Name>Malta</Name><Region>Southern Europe</Region><Population>380,200</Population><IndependenceYear>1964</IndependenceYear><SurfaceArea>316</SurfaceArea></Row>\n<Row><Code>MDA</Code><Continent>Europe</Continent><Name>Moldova</Name><Region>Eastern Europe</Region><Population>4,380,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>33,851</SurfaceArea></Row>\n<Row><Code>MCO</Code><Continent>Europe</Continent><Name>Monaco</Name><Region>Western Europe</Region><Population>34,000</Population><IndependenceYear>1861</IndependenceYear><SurfaceArea>2</SurfaceArea></Row>\n<Row><Code>NLD</Code><Continent>Europe</Continent><Name>Netherlands</Name><Region>Western Europe</Region><Population>15,864,000</Population><IndependenceYear>1581</IndependenceYear><SurfaceArea>41,526</SurfaceArea></Row>\n<Row><Code>NOR</Code><Continent>Europe</Continent><Name>Norway</Name><Region>Nordic Countries</Region><Population>4,478,500</Population><IndependenceYear>1905</IndependenceYear><SurfaceArea>323,877</SurfaceArea></Row>\n<Row><Code>POL</Code><Continent>Europe</Continent><Name>Poland</Name><Region>Eastern Europe</Region><Population>38,653,600</Population><IndependenceYear>1918</IndependenceYear><SurfaceArea>323,250</SurfaceArea></Row>\n<Row><Code>PRT</Code><Continent>Europe</Continent><Name>Portugal</Name><Region>Southern Europe</Region><Population>9,997,600</Population><IndependenceYear>1143</IndependenceYear><SurfaceArea>91,982</SurfaceArea></Row>\n<Row><Code>ROM</Code><Continent>Europe</Continent><Name>Romania</Name><Region>Eastern Europe</Region><Population>22,455,500</Population><IndependenceYear>1878</IndependenceYear><SurfaceArea>238,391</SurfaceArea></Row>\n<Row><Code>RUS</Code><Continent>Europe</Continent><Name>Russian Federation</Name><Region>Eastern Europe</Region><Population>146,934,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>17,075,400</SurfaceArea></Row>\n<Row><Code>SMR</Code><Continent>Europe</Continent><Name>San Marino</Name><Region>Southern Europe</Region><Population>27,000</Population><IndependenceYear>0885</IndependenceYear><SurfaceArea>61</SurfaceArea></Row>\n<Row><Code>SVK</Code><Continent>Europe</Continent><Name>Slovakia</Name><Region>Eastern Europe</Region><Population>5,398,700</Population><IndependenceYear>1993</IndependenceYear><SurfaceArea>49,012</SurfaceArea></Row>\n<Row><Code>SVN</Code><Continent>Europe</Continent><Name>Slovenia</Name><Region>Southern Europe</Region><Population>1,987,800</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>20,256</SurfaceArea></Row>\n<Row><Code>ESP</Code><Continent>Europe</Continent><Name>Spain</Name><Region>Southern Europe</Region><Population>39,441,700</Population><IndependenceYear>1492</IndependenceYear><SurfaceArea>505,992</SurfaceArea></Row>\n<Row><Code>SJM</Code><Continent>Europe</Continent><Name>Svalbard and Jan Mayen</Name><Region>Nordic Countries</Region><Population>3,200</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>62,422</SurfaceArea></Row>\n<Row><Code>SWE</Code><Continent>Europe</Continent><Name>Sweden</Name><Region>Nordic Countries</Region><Population>8,861,400</Population><IndependenceYear>0836</IndependenceYear><SurfaceArea>449,964</SurfaceArea></Row>\n<Row><Code>CHE</Code><Continent>Europe</Continent><Name>Switzerland</Name><Region>Western Europe</Region><Population>7,160,400</Population><IndependenceYear>1499</IndependenceYear><SurfaceArea>41,284</SurfaceArea></Row>\n<Row><Code>UKR</Code><Continent>Europe</Continent><Name>Ukraine</Name><Region>Eastern Europe</Region><Population>50,456,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>603,700</SurfaceArea></Row>\n<Row><Code>GBR</Code><Continent>Europe</Continent><Name>United Kingdom</Name><Region>British Islands</Region><Population>59,623,400</Population><IndependenceYear>1066</IndependenceYear><SurfaceArea>242,900</SurfaceArea></Row>\n<Row><Code>YUG</Code><Continent>Europe</Continent><Name>Yugoslavia</Name><Region>Southern Europe</Region><Population>10,640,000</Population><IndependenceYear>1918</IndependenceYear><SurfaceArea>102,173</SurfaceArea></Row>\n<Row><Code>AIA</Code><Continent>North America</Continent><Name>Anguilla</Name><Region>Caribbean</Region><Population>8,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>96</SurfaceArea></Row>\n<Row><Code>ATG</Code><Continent>North America</Continent><Name>Antigua and Barbuda</Name><Region>Caribbean</Region><Population>68,000</Population><IndependenceYear>1981</IndependenceYear><SurfaceArea>442</SurfaceArea></Row>\n<Row><Code>ABW</Code><Continent>North America</Continent><Name>Aruba</Name><Region>Caribbean</Region><Population>103,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>193</SurfaceArea></Row>\n<Row><Code>BHS</Code><Continent>North America</Continent><Name>Bahamas</Name><Region>Caribbean</Region><Population>307,000</Population><IndependenceYear>1973</IndependenceYear><SurfaceArea>13,878</SurfaceArea></Row>\n<Row><Code>BRB</Code><Continent>North America</Continent><Name>Barbados</Name><Region>Caribbean</Region><Population>270,000</Population><IndependenceYear>1966</IndependenceYear><SurfaceArea>430</SurfaceArea></Row>\n<Row><Code>BLZ</Code><Continent>North America</Continent><Name>Belize</Name><Region>Central America</Region><Population>241,000</Population><IndependenceYear>1981</IndependenceYear><SurfaceArea>22,696</SurfaceArea></Row>\n<Row><Code>BMU</Code><Continent>North America</Continent><Name>Bermuda</Name><Region>North America</Region><Population>65,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>53</SurfaceArea></Row>\n<Row><Code>CAN</Code><Continent>North America</Continent><Name>Canada</Name><Region>North America</Region><Population>31,147,000</Population><IndependenceYear>1867</IndependenceYear><SurfaceArea>9,970,610</SurfaceArea></Row>\n<Row><Code>CYM</Code><Continent>North America</Continent><Name>Cayman Islands</Name><Region>Caribbean</Region><Population>38,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>264</SurfaceArea></Row>\n<Row><Code>CRI</Code><Continent>North America</Continent><Name>Costa Rica</Name><Region>Central America</Region><Population>4,023,000</Population><IndependenceYear>1821</IndependenceYear><SurfaceArea>51,100</SurfaceArea></Row>\n<Row><Code>CUB</Code><Continent>North America</Continent><Name>Cuba</Name><Region>Caribbean</Region><Population>11,201,000</Population><IndependenceYear>1902</IndependenceYear><SurfaceArea>110,861</SurfaceArea></Row>\n<Row><Code>DMA</Code><Continent>North America</Continent><Name>Dominica</Name><Region>Caribbean</Region><Population>71,000</Population><IndependenceYear>1978</IndependenceYear><SurfaceArea>751</SurfaceArea></Row>\n<Row><Code>DOM</Code><Continent>North America</Continent><Name>Dominican Republic</Name><Region>Caribbean</Region><Population>8,495,000</Population><IndependenceYear>1844</IndependenceYear><SurfaceArea>48,511</SurfaceArea></Row>\n<Row><Code>SLV</Code><Continent>North America</Continent><Name>El Salvador</Name><Region>Central America</Region><Population>6,276,000</Population><IndependenceYear>1841</IndependenceYear><SurfaceArea>21,041</SurfaceArea></Row>\n<Row><Code>GRL</Code><Continent>North America</Continent><Name>Greenland</Name><Region>North America</Region><Population>56,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>2,166,090</SurfaceArea></Row>\n<Row><Code>GRD</Code><Continent>North America</Continent><Name>Grenada</Name><Region>Caribbean</Region><Population>94,000</Population><IndependenceYear>1974</IndependenceYear><SurfaceArea>344</SurfaceArea></Row>\n<Row><Code>GLP</Code><Continent>North America</Continent><Name>Guadeloupe</Name><Region>Caribbean</Region><Population>456,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>1,705</SurfaceArea></Row>\n<Row><Code>GTM</Code><Continent>North America</Continent><Name>Guatemala</Name><Region>Central America</Region><Population>11,385,000</Population><IndependenceYear>1821</IndependenceYear><SurfaceArea>108,889</SurfaceArea></Row>\n<Row><Code>HTI</Code><Continent>North America</Continent><Name>Haiti</Name><Region>Caribbean</Region><Population>8,222,000</Population><IndependenceYear>1804</IndependenceYear><SurfaceArea>27,750</SurfaceArea></Row>\n<Row><Code>HND</Code><Continent>North America</Continent><Name>Honduras</Name><Region>Central America</Region><Population>6,485,000</Population><IndependenceYear>1838</IndependenceYear><SurfaceArea>112,088</SurfaceArea></Row>\n<Row><Code>JAM</Code><Continent>North America</Continent><Name>Jamaica</Name><Region>Caribbean</Region><Population>2,583,000</Population><IndependenceYear>1962</IndependenceYear><SurfaceArea>10,990</SurfaceArea></Row>\n<Row><Code>MTQ</Code><Continent>North America</Continent><Name>Martinique</Name><Region>Caribbean</Region><Population>395,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>1,102</SurfaceArea></Row>\n<Row><Code>MEX</Code><Continent>North America</Continent><Name>Mexico</Name><Region>Central America</Region><Population>98,881,000</Population><IndependenceYear>1810</IndependenceYear><SurfaceArea>1,958,201</SurfaceArea></Row>\n<Row><Code>MSR</Code><Continent>North America</Continent><Name>Montserrat</Name><Region>Caribbean</Region><Population>11,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>102</SurfaceArea></Row>\n<Row><Code>ANT</Code><Continent>North America</Continent><Name>Netherlands Antilles</Name><Region>Caribbean</Region><Population>217,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>800</SurfaceArea></Row>\n<Row><Code>NIC</Code><Continent>North America</Continent><Name>Nicaragua</Name><Region>Central America</Region><Population>5,074,000</Population><IndependenceYear>1838</IndependenceYear><SurfaceArea>130,000</SurfaceArea></Row>\n<Row><Code>PAN</Code><Continent>North America</Continent><Name>Panama</Name><Region>Central America</Region><Population>2,856,000</Population><IndependenceYear>1903</IndependenceYear><SurfaceArea>75,517</SurfaceArea></Row>\n<Row><Code>PRI</Code><Continent>North America</Continent><Name>Puerto Rico</Name><Region>Caribbean</Region><Population>3,869,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>8,875</SurfaceArea></Row>\n<Row><Code>KNA</Code><Continent>North America</Continent><Name>Saint Kitts and Nevis</Name><Region>Caribbean</Region><Population>38,000</Population><IndependenceYear>1983</IndependenceYear><SurfaceArea>261</SurfaceArea></Row>\n<Row><Code>LCA</Code><Continent>North America</Continent><Name>Saint Lucia</Name><Region>Caribbean</Region><Population>154,000</Population><IndependenceYear>1979</IndependenceYear><SurfaceArea>622</SurfaceArea></Row>\n<Row><Code>SPM</Code><Continent>North America</Continent><Name>Saint Pierre and Miquelon</Name><Region>North America</Region><Population>7,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>242</SurfaceArea></Row>\n<Row><Code>VCT</Code><Continent>North America</Continent><Name>Saint Vincent and the Grenadines</Name><Region>Caribbean</Region><Population>114,000</Population><IndependenceYear>1979</IndependenceYear><SurfaceArea>388</SurfaceArea></Row>\n<Row><Code>TTO</Code><Continent>North America</Continent><Name>Trinidad and Tobago</Name><Region>Caribbean</Region><Population>1,295,000</Population><IndependenceYear>1962</IndependenceYear><SurfaceArea>5,130</SurfaceArea></Row>\n<Row><Code>TCA</Code><Continent>North America</Continent><Name>Turks and Caicos Islands</Name><Region>Caribbean</Region><Population>17,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>430</SurfaceArea></Row>\n<Row><Code>USA</Code><Continent>North America</Continent><Name>United States</Name><Region>North America</Region><Population>278,357,000</Population><IndependenceYear>1776</IndependenceYear><SurfaceArea>9,363,520</SurfaceArea></Row>\n<Row><Code>VGB</Code><Continent>North America</Continent><Name>Virgin Islands, British</Name><Region>Caribbean</Region><Population>21,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>151</SurfaceArea></Row>\n<Row><Code>VIR</Code><Continent>North America</Continent><Name>Virgin Islands, U.S.</Name><Region>Caribbean</Region><Population>93,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>347</SurfaceArea></Row>\n<Row><Code>ASM</Code><Continent>Oceania</Continent><Name>American Samoa</Name><Region>Polynesia</Region><Population>68,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>199</SurfaceArea></Row>\n<Row><Code>AUS</Code><Continent>Oceania</Continent><Name>Australia</Name><Region>Australia and New Zealand</Region><Population>18,886,000</Population><IndependenceYear>1901</IndependenceYear><SurfaceArea>7,741,220</SurfaceArea></Row>\n<Row><Code>CXR</Code><Continent>Oceania</Continent><Name>Christmas Island</Name><Region>Australia and New Zealand</Region><Population>2,500</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>135</SurfaceArea></Row>\n<Row><Code>CCK</Code><Continent>Oceania</Continent><Name>Cocos (Keeling) Islands</Name><Region>Australia and New Zealand</Region><Population>600</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>14</SurfaceArea></Row>\n<Row><Code>COK</Code><Continent>Oceania</Continent><Name>Cook Islands</Name><Region>Polynesia</Region><Population>20,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>236</SurfaceArea></Row>\n<Row><Code>FJI</Code><Continent>Oceania</Continent><Name>Fiji Islands</Name><Region>Melanesia</Region><Population>817,000</Population><IndependenceYear>1970</IndependenceYear><SurfaceArea>18,274</SurfaceArea></Row>\n<Row><Code>PYF</Code><Continent>Oceania</Continent><Name>French Polynesia</Name><Region>Polynesia</Region><Population>235,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>4,000</SurfaceArea></Row>\n<Row><Code>GUM</Code><Continent>Oceania</Continent><Name>Guam</Name><Region>Micronesia</Region><Population>168,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>549</SurfaceArea></Row>\n<Row><Code>KIR</Code><Continent>Oceania</Continent><Name>Kiribati</Name><Region>Micronesia</Region><Population>83,000</Population><IndependenceYear>1979</IndependenceYear><SurfaceArea>726</SurfaceArea></Row>\n<Row><Code>MHL</Code><Continent>Oceania</Continent><Name>Marshall Islands</Name><Region>Micronesia</Region><Population>64,000</Population><IndependenceYear>1990</IndependenceYear><SurfaceArea>181</SurfaceArea></Row>\n<Row><Code>FSM</Code><Continent>Oceania</Continent><Name>Micronesia, Federated States of</Name><Region>Micronesia</Region><Population>119,000</Population><IndependenceYear>1990</IndependenceYear><SurfaceArea>702</SurfaceArea></Row>\n<Row><Code>NRU</Code><Continent>Oceania</Continent><Name>Nauru</Name><Region>Micronesia</Region><Population>12,000</Population><IndependenceYear>1968</IndependenceYear><SurfaceArea>21</SurfaceArea></Row>\n<Row><Code>NCL</Code><Continent>Oceania</Continent><Name>New Caledonia</Name><Region>Melanesia</Region><Population>214,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>18,575</SurfaceArea></Row>\n<Row><Code>NZL</Code><Continent>Oceania</Continent><Name>New Zealand</Name><Region>Australia and New Zealand</Region><Population>3,862,000</Population><IndependenceYear>1907</IndependenceYear><SurfaceArea>270,534</SurfaceArea></Row>\n<Row><Code>NIU</Code><Continent>Oceania</Continent><Name>Niue</Name><Region>Polynesia</Region><Population>2,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>260</SurfaceArea></Row>\n<Row><Code>NFK</Code><Continent>Oceania</Continent><Name>Norfolk Island</Name><Region>Australia and New Zealand</Region><Population>2,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>36</SurfaceArea></Row>\n<Row><Code>MNP</Code><Continent>Oceania</Continent><Name>Northern Mariana Islands</Name><Region>Micronesia</Region><Population>78,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>464</SurfaceArea></Row>\n<Row><Code>PLW</Code><Continent>Oceania</Continent><Name>Palau</Name><Region>Micronesia</Region><Population>19,000</Population><IndependenceYear>1994</IndependenceYear><SurfaceArea>459</SurfaceArea></Row>\n<Row><Code>PNG</Code><Continent>Oceania</Continent><Name>Papua New Guinea</Name><Region>Melanesia</Region><Population>4,807,000</Population><IndependenceYear>1975</IndependenceYear><SurfaceArea>462,840</SurfaceArea></Row>\n<Row><Code>PCN</Code><Continent>Oceania</Continent><Name>Pitcairn</Name><Region>Polynesia</Region><Population>50</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>49</SurfaceArea></Row>\n<Row><Code>WSM</Code><Continent>Oceania</Continent><Name>Samoa</Name><Region>Polynesia</Region><Population>180,000</Population><IndependenceYear>1962</IndependenceYear><SurfaceArea>2,831</SurfaceArea></Row>\n<Row><Code>SLB</Code><Continent>Oceania</Continent><Name>Solomon Islands</Name><Region>Melanesia</Region><Population>444,000</Population><IndependenceYear>1978</IndependenceYear><SurfaceArea>28,896</SurfaceArea></Row>\n<Row><Code>TKL</Code><Continent>Oceania</Continent><Name>Tokelau</Name><Region>Polynesia</Region><Population>2,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>12</SurfaceArea></Row>\n<Row><Code>TON</Code><Continent>Oceania</Continent><Name>Tonga</Name><Region>Polynesia</Region><Population>99,000</Population><IndependenceYear>1970</IndependenceYear><SurfaceArea>650</SurfaceArea></Row>\n<Row><Code>TUV</Code><Continent>Oceania</Continent><Name>Tuvalu</Name><Region>Polynesia</Region><Population>12,000</Population><IndependenceYear>1978</IndependenceYear><SurfaceArea>26</SurfaceArea></Row>\n<Row><Code>UMI</Code><Continent>Oceania</Continent><Name>United States Minor Outlying Islands</Name><Region>Micronesia/Caribbean</Region><Population>0</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>16</SurfaceArea></Row>\n<Row><Code>VUT</Code><Continent>Oceania</Continent><Name>Vanuatu</Name><Region>Melanesia</Region><Population>190,000</Population><IndependenceYear>1980</IndependenceYear><SurfaceArea>12,189</SurfaceArea></Row>\n<Row><Code>WLF</Code><Continent>Oceania</Continent><Name>Wallis and Futuna</Name><Region>Polynesia</Region><Population>15,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>200</SurfaceArea></Row>\n<Row><Code>ARG</Code><Continent>South America</Continent><Name>Argentina</Name><Region>South America</Region><Population>37,032,000</Population><IndependenceYear>1816</IndependenceYear><SurfaceArea>2,780,400</SurfaceArea></Row>\n<Row><Code>BOL</Code><Continent>South America</Continent><Name>Bolivia</Name><Region>South America</Region><Population>8,329,000</Population><IndependenceYear>1825</IndependenceYear><SurfaceArea>1,098,581</SurfaceArea></Row>\n<Row><Code>BRA</Code><Continent>South America</Continent><Name>Brazil</Name><Region>South America</Region><Population>170,115,000</Population><IndependenceYear>1822</IndependenceYear><SurfaceArea>8,547,403</SurfaceArea></Row>\n<Row><Code>CHL</Code><Continent>South America</Continent><Name>Chile</Name><Region>South America</Region><Population>15,211,000</Population><IndependenceYear>1810</IndependenceYear><SurfaceArea>756,626</SurfaceArea></Row>\n<Row><Code>COL</Code><Continent>South America</Continent><Name>Colombia</Name><Region>South America</Region><Population>42,321,000</Population><IndependenceYear>1810</IndependenceYear><SurfaceArea>1,138,914</SurfaceArea></Row>\n<Row><Code>ECU</Code><Continent>South America</Continent><Name>Ecuador</Name><Region>South America</Region><Population>12,646,000</Population><IndependenceYear>1822</IndependenceYear><SurfaceArea>283,561</SurfaceArea></Row>\n<Row><Code>FLK</Code><Continent>South America</Continent><Name>Falkland Islands</Name><Region>South America</Region><Population>2,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>12,173</SurfaceArea></Row>\n<Row><Code>GUF</Code><Continent>South America</Continent><Name>French Guiana</Name><Region>South America</Region><Population>181,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>90,000</SurfaceArea></Row>\n<Row><Code>GUY</Code><Continent>South America</Continent><Name>Guyana</Name><Region>South America</Region><Population>861,000</Population><IndependenceYear>1966</IndependenceYear><SurfaceArea>214,969</SurfaceArea></Row>\n<Row><Code>PRY</Code><Continent>South America</Continent><Name>Paraguay</Name><Region>South America</Region><Population>5,496,000</Population><IndependenceYear>1811</IndependenceYear><SurfaceArea>406,752</SurfaceArea></Row>\n<Row><Code>PER</Code><Continent>South America</Continent><Name>Peru</Name><Region>South America</Region><Population>25,662,000</Population><IndependenceYear>1821</IndependenceYear><SurfaceArea>1,285,216</SurfaceArea></Row>\n<Row><Code>SUR</Code><Continent>South America</Continent><Name>Suriname</Name><Region>South America</Region><Population>417,000</Population><IndependenceYear>1975</IndependenceYear><SurfaceArea>163,265</SurfaceArea></Row>\n<Row><Code>URY</Code><Continent>South America</Continent><Name>Uruguay</Name><Region>South America</Region><Population>3,337,000</Population><IndependenceYear>1828</IndependenceYear><SurfaceArea>175,016</SurfaceArea></Row>\n<Row><Code>VEN</Code><Continent>South America</Continent><Name>Venezuela</Name><Region>South America</Region><Population>24,170,000</Population><IndependenceYear>1811</IndependenceYear><SurfaceArea>912,050</SurfaceArea></Row>\n</Rows>\n"
  },
  {
    "path": "Examples/Examples/WorldFactsQueryArgs.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"WorldFacts\">\n  <Description>Worlds Facts - test data from MySQL World database</Description>\n  <Author>fyiReporting Software, LLC</Author>\n  <DataElementStyle>ElementNormal</DataElementStyle>\n  <LeftMargin>.4in</LeftMargin>\n  <RightMargin>.4in</RightMargin>\n  <TopMargin>.5in</TopMargin>\n  <BottomMargin>.5in</BottomMargin>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>ODBC</DataProvider>\n        <ConnectString>dsn=world;UID=root;PWD=anydaynow;</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Continents\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT DISTINCT Continent, Continent as \"DContinent\" FROM Country UNION SELECT \"^*\", \"All\" From Country</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"Continent\">\n          <DataField>Continent</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"DContinent\">\n          <DataField>DContinent</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n      </Fields>\n      <fyi:Rows xmlns:fyi=\"http://www.fyireporting.com/schemas\">\n        <Row>\n          <Continent>Africa</Continent>\n          <DContinent>Africa</DContinent>\n        </Row>\n        <Row>\n          <Continent>Antarctica</Continent>\n          <DContinent>Antarctica</DContinent>\n        </Row>\n        <Row>\n          <Continent>Asia</Continent>\n          <DContinent>Asia</DContinent>\n        </Row>\n        <Row>\n          <Continent>Europe</Continent>\n          <DContinent>Europe</DContinent>\n        </Row>\n        <Row>\n          <Continent>Oceania</Continent>\n          <DContinent>Oceania</DContinent>\n        </Row>\n        <Row>\n          <Continent>South America</Continent>\n          <DContinent>South America</DContinent>\n        </Row>\n        <Row>\n          <Continent>North America</Continent>\n          <DContinent>North America</DContinent>\n        </Row>\n        <Row>\n          <Continent>^*</Continent>\n          <DContinent>All</DContinent>\n        </Row>\n      </fyi:Rows>\n    </DataSet>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT Code, Name, Continent, Region, Population, IndepYear, SurfaceArea FROM Country</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"Code\">\n          <DataField>Code</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Name\">\n          <DataField>Name</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Continent\">\n          <DataField>Continent</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Region\">\n          <DataField>Region</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Population\">\n          <DataField>Population</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n        <Field Name=\"IndependenceYear\">\n          <DataField>IndepYear</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n        <Field Name=\"SurfaceArea\">\n          <DataField>SurfaceArea</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <Filters>\n        <Filter>\n          <FilterExpression>=Fields!Continent</FilterExpression>\n          <Operator>Like</Operator>\n          <FilterValues>\n            <FilterValue>=Parameters!Continent</FilterValue>\n          </FilterValues>\n        </Filter>\n        <Filter>\n          <FilterExpression>=Fields!Population</FilterExpression>\n          <Operator>GreaterThanOrEqual</Operator>\n          <FilterValues>\n            <FilterValue>=Parameters!Population</FilterValue>\n          </FilterValues>\n        </Filter>\n      </Filters>\n      <fyi:Rows File=\"WorldFacts.xml\" xmlns:fyi=\"http://www.fyireporting.com/schemas\" />\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>.5 in</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Top>7.2pt</Top>\n        <Left>0.0pt</Left>\n        <Height>17.62pt</Height>\n        <Value>=\"Countries = \" + Parameters!Continent.Label + \"   Population &gt;= \" + Parameters!Population.Label</Value>\n        <Style>\n          <FontSize>15pt</FontSize>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Width>384.72pt</Width>\n      </Textbox>\n      <Textbox Name=\"Textbox2\">\n        <Top>7.20pt</Top>\n        <Left>396.0pt</Left>\n        <Height>17.3pt</Height>\n        <Value>=Globals!ExecutionTime</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Width>116.0pt</Width>\n      </Textbox>\n      <Textbox Name=\"Textbox3\">\n        <Top>7.20pt</Top>\n        <Left>518.2pt</Left>\n        <Height>18.8pt</Height>\n        <Value>=Globals!PageNumber + \" of \" + Globals!TotalPages</Value>\n        <Style>\n          <FontSize>12pt</FontSize>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Width>52.2pt</Width>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <DetailDataElementName>Row</DetailDataElementName>\n        <DetailDataCollectionName>Rows</DetailDataCollectionName>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>.75 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>.5 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>2.5 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>Continent</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value>Code</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox6\">\n                      <Value>Name</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox7\">\n                      <Value>Region</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox8\">\n                      <Value>Population</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox9\">\n                      <Value>Independence</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>Surface Area</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <TableGroups>\n          <TableGroup>\n            <Header>\n              <TableRows>\n                <TableRow>\n                  <Height>12 pt</Height>\n                  <TableCells>\n                    <TableCell>\n                      <ColSpan>7</ColSpan>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox11\">\n                          <Value>=Fields.Continent.Value</Value>\n                          <Style>\n                            <PaddingLeft>2 pt</PaddingLeft>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                            <FontWeight>Bold</FontWeight>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                  </TableCells>\n                </TableRow>\n              </TableRows>\n              <RepeatOnNewPage>true</RepeatOnNewPage>\n            </Header>\n            <Footer>\n              <TableRows>\n                <TableRow>\n                  <Height>12 pt</Height>\n                  <TableCells>\n                    <TableCell>\n                      <ColSpan>7</ColSpan>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox12\">\n                          <Value>=\"Count of countries in \" + Fields.Continent.Value + \" = \" +Count(Fields.Name.Value)</Value>\n                          <Style>\n                            <PaddingLeft>2 pt</PaddingLeft>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                            <FontWeight>Bold</FontWeight>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                  </TableCells>\n                </TableRow>\n              </TableRows>\n            </Footer>\n            <Grouping Name=\"TableGroupGroup1\">\n              <GroupExpressions>\n                <GroupExpression>=Fields!Continent.Value</GroupExpression>\n              </GroupExpressions>\n            </Grouping>\n          </TableGroup>\n        </TableGroups>\n        <Details>\n          <Sorting>\n            <SortBy>\n              <SortExpression>=Fields!Name.Value</SortExpression>\n            </SortBy>\n          </Sorting>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox13\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                          <Bottom>None</Bottom>\n                          <Top>None</Top>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Code\">\n                      <Value>=Fields!Code.Value</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Name\">\n                      <CanGrow>true</CanGrow>\n                      <Value>=Fields!Name.Value</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Region\">\n                      <CanGrow>true</CanGrow>\n                      <Value>=Fields!Region.Value</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox14\">\n                      <Value>=Fields!Population.Value</Value>\n                      <Style>\n                        <Format>#,##0</Format>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox15\">\n                      <Value>=switch(Fields!IndependenceYear.Value = 0, \"\", Fields!IndependenceYear.Value &gt; 0, Fields!IndependenceYear.Value, true, -Fields!IndependenceYear.Value + \" BC\")</Value>\n                      <Style>\n                        <Format>0000</Format>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox16\">\n                      <Value>=Fields!SurfaceArea.Value</Value>\n                      <Style>\n                        <Format>#,##0</Format>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n        <Footer>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ColSpan>4</ColSpan>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox17\">\n                      <Value>=CountDistinct(Fields.Continent.Value) + \" continents.  \" + Count(Fields.Name.Value)+ \" countries.\" </Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ColSpan>1</ColSpan>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox18\">\n                      <Value>=Sum(Fields.Population.Value)</Value>\n                      <Style>\n                        <Format>#,##0</Format>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ColSpan>1</ColSpan>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox19\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <Format>#,##0</Format>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ColSpan>1</ColSpan>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox20\">\n                      <Value>=Sum(Fields.SurfaceArea.Value)</Value>\n                      <Style>\n                        <Format>#,##0</Format>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Footer>\n      </Table>\n    </ReportItems>\n    <Height>66.3pt</Height>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>8.5in</Width>\n  <PageWidth>8.5 in</PageWidth>\n  <PageHeight>11 in</PageHeight>\n  <ReportParameters>\n    <ReportParameter Name=\"Continent\">\n      <DataType>String</DataType>\n      <DefaultValue>\n        <Values>\n          <Value>^*</Value>\n        </Values>\n      </DefaultValue>\n      <ValidValues>\n        <DataSetReference>\n          <DataSetName>Continents</DataSetName>\n          <ValueField>Continent</ValueField>\n          <LabelField>DContinent</LabelField>\n        </DataSetReference>\n      </ValidValues>\n      <Nullable>False</Nullable>\n      <AllowBlank>False</AllowBlank>\n      <Prompt>Please provide a continent</Prompt>\n    </ReportParameter>\n    <ReportParameter Name=\"Population\">\n      <DataType>Integer</DataType>\n      <DefaultValue>\n        <Values>\n          <Value>0</Value>\n        </Values>\n      </DefaultValue>\n      <Nullable>False</Nullable>\n      <AllowBlank>False</AllowBlank>\n      <Prompt>Specify minimum population of country wanted</Prompt>\n    </ReportParameter>\n  </ReportParameters>\n  <DataTransform>\n  </DataTransform>\n  <DataSchema>\n  </DataSchema>\n  <DataElementName>Report</DataElementName>\n</Report>"
  },
  {
    "path": "Examples/Examples/iTunes.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\" xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>8.5in</PageHeight>\n  <PageWidth>47in</PageWidth>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>iTunes</DataProvider>\n        <ConnectString>\n        </ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <Width>46.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>\n        </CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"Track_ID\">\n          <DataField>Track_ID</DataField>\n          <rd:TypeName>System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"Name\">\n          <DataField>Name</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Artist\">\n          <DataField>Artist</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Composer\">\n          <DataField>Composer</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Album\">\n          <DataField>Album</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Album_Artist\">\n          <DataField>Album Artist</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Genre\">\n          <DataField>Genre</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Category\">\n          <DataField>Category</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Kind\">\n          <DataField>Kind</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Size\">\n          <DataField>Size</DataField>\n          <rd:TypeName>System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"Total_Time\">\n          <DataField>Total_Time</DataField>\n          <rd:TypeName>System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"Track_Number\">\n          <DataField>Track_Number</DataField>\n          <rd:TypeName>System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"Year\">\n          <DataField>Year</DataField>\n          <rd:TypeName>System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"Date_Modified\">\n          <DataField>Date_Modified</DataField>\n          <rd:TypeName>System.DateTime</rd:TypeName>\n        </Field>\n        <Field Name=\"Date_Added\">\n          <DataField>Date_Added</DataField>\n          <rd:TypeName>System.DateTime</rd:TypeName>\n        </Field>\n        <Field Name=\"Beats_Per_Minute\">\n          <DataField>Beats_Per_Minute</DataField>\n          <rd:TypeName>System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"Bit_Rate\">\n          <DataField>Bit_Rate</DataField>\n          <rd:TypeName>System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"Sample_Rate\">\n          <DataField>Sample_Rate</DataField>\n          <rd:TypeName>System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"Comments\">\n          <DataField>Comments</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Skip_Count\">\n          <DataField>Skip_Count</DataField>\n          <rd:TypeName>System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"Skip_Date\">\n          <DataField>Skip_Date</DataField>\n          <rd:TypeName>System.DateTime</rd:TypeName>\n        </Field>\n        <Field Name=\"Artwork_Count\">\n          <DataField>Artwork_Count</DataField>\n          <rd:TypeName>System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"Persistent_ID\">\n          <DataField>Persistent_ID</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Track_Type\">\n          <DataField>Track_Type</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Location\">\n          <DataField>Location</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"File_Folder_Count\">\n          <DataField>File_Folder_Count</DataField>\n          <rd:TypeName>System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"Library_Folder_Count\">\n          <DataField>Library_Folder_Count</DataField>\n          <rd:TypeName>System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"Has_Video\">\n          <DataField>Has_Video</DataField>\n          <rd:TypeName>System.Boolean</rd:TypeName>\n        </Field>\n        <Field Name=\"Movie\">\n          <DataField>Movie</DataField>\n          <rd:TypeName>System.Boolean</rd:TypeName>\n        </Field>\n        <Field Name=\"Play_Count\">\n          <DataField>Play_Count</DataField>\n          <rd:TypeName>System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"Play_Date\">\n          <DataField>Play_Date</DataField>\n          <rd:TypeName>System.Int64</rd:TypeName>\n        </Field>\n        <Field Name=\"Play_Date_UTC\">\n          <DataField>Play_Date_UTC</DataField>\n          <rd:TypeName>System.DateTime</rd:TypeName>\n        </Field>\n        <Field Name=\"Disc_Number\">\n          <DataField>Disc_Number</DataField>\n          <rd:TypeName>System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"Disc_Count\">\n          <DataField>Disc_Count</DataField>\n          <rd:TypeName>System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"Compilation\">\n          <DataField>Compilation</DataField>\n          <rd:TypeName>System.Boolean</rd:TypeName>\n        </Field>\n        <Field Name=\"Track_Count\">\n          <DataField>Track_Count</DataField>\n          <rd:TypeName>System.Int32</rd:TypeName>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <Body>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>106.3pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>139.8pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.25in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.5in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.625in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.25in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>2in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.375in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.25in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.625in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.625in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.25in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>2.125in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>2.5in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.25in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.625in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.375in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.25in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.375in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.375in</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox1\">\n                      <Value>Track_ID</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>Name</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>Artist</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>Composer</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value>Album</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox7\">\n                      <Value>Genre</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox8\">\n                      <Value>Category</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox9\">\n                      <Value>Kind</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>Size</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox11\">\n                      <Value>Total_Time</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox12\">\n                      <Value>Track_Number</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox13\">\n                      <Value>Year</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox14\">\n                      <Value>Date_Modified</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox15\">\n                      <Value>Date_Added</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox16\">\n                      <Value>Beats_Per_Minute</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox17\">\n                      <Value>Bit_Rate</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox18\">\n                      <Value>Sample_Rate</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox19\">\n                      <Value>Comments</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox20\">\n                      <Value>Skip_Count</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox21\">\n                      <Value>Skip_Date</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox22\">\n                      <Value>Artwork_Count</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox23\">\n                      <Value>Persistent_ID</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox24\">\n                      <Value>Track_Type</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox25\">\n                      <Value>Location</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox26\">\n                      <Value>File_Folder_Count</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox27\">\n                      <Value>Library_Folder_Count</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox28\">\n                      <Value>Has_Video</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox29\">\n                      <Value>Movie</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox30\">\n                      <Value>Play_Count</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox31\">\n                      <Value>Play_Date</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox32\">\n                      <Value>Play_Date_UTC</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox33\">\n                      <Value>Disc_Number</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox34\">\n                      <Value>Disc_Count</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox35\">\n                      <Value>Compilation</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox36\">\n                      <Value>Track_Count</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                      <CanGrow>false</CanGrow>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Track_ID\">\n                      <Value>=Fields!Track_ID.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Name\">\n                      <Value>=Fields!Name.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Artist\">\n                      <Value>=Fields!Artist.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Composer\">\n                      <Value>=Fields!Composer.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Album\">\n                      <Value>=Fields!Album.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Genre\">\n                      <Value>=Fields!Genre.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Category\">\n                      <Value>=Fields!Category.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Kind\">\n                      <Value>=Fields!Kind.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Size\">\n                      <Value>=Fields!Size.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                        <Format>#,##0</Format>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Total_Time\">\n                      <Value>=Fields!Total_Time.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Track_Number\">\n                      <Value>=Fields!Track_Number.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Year\">\n                      <Value>=Fields!Year.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Date_Modified\">\n                      <Value>=Fields!Date_Modified.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Date_Added\">\n                      <Value>=Fields!Date_Added.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Beats_Per_Minute\">\n                      <Value>=Fields!Beats_Per_Minute.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Bit_Rate\">\n                      <Value>=Fields!Bit_Rate.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Sample_Rate\">\n                      <Value>=Fields!Sample_Rate.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Comments\">\n                      <Value>=Fields!Comments.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Skip_Count\">\n                      <Value>=Fields!Skip_Count.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Skip_Date\">\n                      <Value>=Fields!Skip_Date.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Artwork_Count\">\n                      <Value>=Fields!Artwork_Count.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Persistent_ID\">\n                      <Value>=Fields!Persistent_ID.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Track_Type\">\n                      <Value>=Fields!Track_Type.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Location\">\n                      <Value>=Fields!Location.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"File_Folder_Count\">\n                      <Value>=Fields!File_Folder_Count.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Library_Folder_Count\">\n                      <Value>=Fields!Library_Folder_Count.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Has_Video\">\n                      <Value>=Fields!Has_Video.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Movie\">\n                      <Value>=Fields!Movie.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Play_Count\">\n                      <Value>=Fields!Play_Count.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Play_Date\">\n                      <Value>=Fields!Play_Date.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Play_Date_UTC\">\n                      <Value>=Fields!Play_Date_UTC.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Disc_Number\">\n                      <Value>=Fields!Disc_Number.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Disc_Count\">\n                      <Value>=Fields!Disc_Count.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Compilation\">\n                      <Value>=Fields!Compilation.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Track_Count\">\n                      <Value>=Fields!Track_Count.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <TextAlign>right</TextAlign>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n      </Table>\n    </ReportItems>\n    <Height>36pt</Height>\n  </Body>\n  <PageFooter>\n    <Height>14 pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox37\">\n        <Top>1 pt</Top>\n        <Left>10 pt</Left>\n        <Height>12 pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber.Value + ' of ' + Globals!TotalPages.Value</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n        <CanGrow>false</CanGrow>\n      </Textbox>\n    </ReportItems>\n  </PageFooter>\n  <PageHeader>\n    <Height>0pt</Height>\n  </PageHeader>\n</Report>"
  },
  {
    "path": "Examples/Examples.416/HIDERIGA_ON_COMMAND.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\" xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description></Description>\n  <Author></Author>\n  <PageHeight>11in</PageHeight>\n  <PageWidth>8.5in</PageWidth>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <PageHeader>\n    <Height>33.9pt</Height>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>114.3pt</Height>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DataSetName>DS</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>140.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>142.1pt</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12.0pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>VALORE</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value></Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>18pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>={VALORE}</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox6\">\n                      <Value></Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>8.8pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"BOXRIGA\">\n                      <Value>-----------------------------------------------------------------------------</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <VerticalAlign>Middle</VerticalAlign>\n                      </Style>\n                      <Visibility>\n                        <Hidden></Hidden>\n                        <ToggleItem></ToggleItem>\n                      </Visibility>\n                      <CanShrink>true</CanShrink>\n                    </Textbox>\n                  </ReportItems>\n                  <ColSpan>2</ColSpan>\n                </TableCell>\n              </TableCells>\n              <Visibility>\n                <Hidden>=iIF(UCase({?RIGAPRESENTE})='S',False,True)</Hidden>\n              </Visibility>\n            </TableRow>\n          </TableRows>\n        </Details>\n        <Left>41.9pt</Left>\n        <Top>13.5pt</Top>\n        <Footer>\n          <TableRows>\n            <TableRow>\n              <Height>.2in</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                      <Value></Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox7\">\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                      <Value></Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Footer>\n      </Table>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>148.4pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Top>1pt</Top>\n        <Left>10pt</Left>\n        <Height>12pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n  <DataSources>\n    <DataSource Name=\"XML\">\n      <ConnectionProperties>\n        <DataProvider />\n        <ConnectString />\n        <IntegratedSecurity>false</IntegratedSecurity>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"DS\">\n      <Query>\n        <DataSourceName>XML</DataSourceName>\n        <CommandText></CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"VALORE\">\n          <DataField>VALORE</DataField>\n          <TypeName>System.String</TypeName>\n        </Field>\n      </Fields>\n      <fyi:Rows File=\"HIDERIGA_ON_COMMAND.xml\" xmlns:fyi=\"http://www.fyireporting.com/schemas\" />\n    </DataSet>\n  </DataSets>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n  <ReportParameters>\n    <ReportParameter Name=\"RIGAPRESENTE\">\n      <DataType>String</DataType>\n      <Nullable>false</Nullable>\n      <AllowBlank>false</AllowBlank>\n      <MultiValue>false</MultiValue>\n      <Prompt>RIGA PRESENTE 1 ?</Prompt>\n    </ReportParameter>\n  </ReportParameters>\n</Report>"
  },
  {
    "path": "Examples/Examples.416/HIDERIGA_ON_COMMAND.xml",
    "content": "<Rows>\n<Row><VALORE>A</VALORE></Row>\n<Row><VALORE>B</VALORE></Row>\n<Row><VALORE>C</VALORE></Row>\n<Row><VALORE>D</VALORE></Row>\n\n</Rows>\n"
  },
  {
    "path": "Examples/Examples.416/STAMPA_TABELLONE_RADIO_CON_DATI.RDL",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\" xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description>turni di un anno</Description>\n  <Author>alberti</Author>\n  <PageHeight>8.3in</PageHeight>\n  <PageWidth>11.7in</PageWidth>\n  <Width>18.0in</Width>\n  <TopMargin>0.5in</TopMargin>\n  <LeftMargin>0.25in</LeftMargin>\n  <RightMargin>0.25in</RightMargin>\n  <BottomMargin>0.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText></CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"CBASEGIORNI1\">\n          <DataField>CBASEGIORNI1</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI1\">\n          <DataField>CBASETURNI1</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE1\">\n          <DataField>CBASECOLORE1</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI2\">\n          <DataField>CBASEGIORNI2</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI2\">\n          <DataField>CBASETURNI2</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE2\">\n          <DataField>CBASECOLORE2</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI3\">\n          <DataField>CBASEGIORNI3</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI3\">\n          <DataField>CBASETURNI3</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE3\">\n          <DataField>CBASECOLORE3</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI4\">\n          <DataField>CBASEGIORNI4</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI4\">\n          <DataField>CBASETURNI4</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE4\">\n          <DataField>CBASECOLORE4</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI5\">\n          <DataField>CBASEGIORNI5</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI5\">\n          <DataField>CBASETURNI5</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE5\">\n          <DataField>CBASECOLORE5</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI6\">\n          <DataField>CBASEGIORNI6</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI6\">\n          <DataField>CBASETURNI6</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE6\">\n          <DataField>CBASECOLORE6</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI7\">\n          <DataField>CBASEGIORNI7</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI7\">\n          <DataField>CBASETURNI7</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE7\">\n          <DataField>CBASECOLORE7</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI8\">\n          <DataField>CBASEGIORNI8</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI8\">\n          <DataField>CBASETURNI8</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE8\">\n          <DataField>CBASECOLORE8</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI9\">\n          <DataField>CBASEGIORNI9</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI9\">\n          <DataField>CBASETURNI9</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE9\">\n          <DataField>CBASECOLORE9</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI10\">\n          <DataField>CBASEGIORNI10</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI10\">\n          <DataField>CBASETURNI10</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE10\">\n          <DataField>CBASECOLORE10</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI11\">\n          <DataField>CBASEGIORNI11</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI11\">\n          <DataField>CBASETURNI11</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE11\">\n          <DataField>CBASECOLORE11</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI12\">\n          <DataField>CBASEGIORNI12</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI12\">\n          <DataField>CBASETURNI12</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE12\">\n          <DataField>CBASECOLORE12</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI13\">\n          <DataField>CBASEGIORNI13</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI13\">\n          <DataField>CBASETURNI13</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE13\">\n          <DataField>CBASECOLORE13</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI14\">\n          <DataField>CBASEGIORNI14</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI14\">\n          <DataField>CBASETURNI14</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE14\">\n          <DataField>CBASECOLORE14</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI15\">\n          <DataField>CBASEGIORNI15</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI15\">\n          <DataField>CBASETURNI15</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE15\">\n          <DataField>CBASECOLORE15</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI16\">\n          <DataField>CBASEGIORNI16</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI16\">\n          <DataField>CBASETURNI16</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE16\">\n          <DataField>CBASECOLORE16</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI17\">\n          <DataField>CBASEGIORNI17</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI17\">\n          <DataField>CBASETURNI17</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE17\">\n          <DataField>CBASECOLORE17</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI18\">\n          <DataField>CBASEGIORNI18</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI18\">\n          <DataField>CBASETURNI18</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE18\">\n          <DataField>CBASECOLORE18</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI19\">\n          <DataField>CBASEGIORNI19</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI19\">\n          <DataField>CBASETURNI19</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE19\">\n          <DataField>CBASECOLORE19</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI20\">\n          <DataField>CBASEGIORNI20</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI20\">\n          <DataField>CBASETURNI20</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE20\">\n          <DataField>CBASECOLORE20</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI21\">\n          <DataField>CBASEGIORNI21</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI21\">\n          <DataField>CBASETURNI21</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE21\">\n          <DataField>CBASECOLORE21</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI22\">\n          <DataField>CBASEGIORNI22</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI22\">\n          <DataField>CBASETURNI22</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE22\">\n          <DataField>CBASECOLORE22</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI23\">\n          <DataField>CBASEGIORNI23</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI23\">\n          <DataField>CBASETURNI23</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE23\">\n          <DataField>CBASECOLORE23</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI24\">\n          <DataField>CBASEGIORNI24</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI24\">\n          <DataField>CBASETURNI24</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE24\">\n          <DataField>CBASECOLORE24</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI25\">\n          <DataField>CBASEGIORNI25</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI25\">\n          <DataField>CBASETURNI25</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE25\">\n          <DataField>CBASECOLORE25</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI26\">\n          <DataField>CBASEGIORNI26</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI26\">\n          <DataField>CBASETURNI26</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE26\">\n          <DataField>CBASECOLORE26</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI27\">\n          <DataField>CBASEGIORNI27</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI27\">\n          <DataField>CBASETURNI27</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE27\">\n          <DataField>CBASECOLORE27</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI28\">\n          <DataField>CBASEGIORNI28</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI28\">\n          <DataField>CBASETURNI28</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE28\">\n          <DataField>CBASECOLORE28</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI29\">\n          <DataField>CBASEGIORNI29</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI29\">\n          <DataField>CBASETURNI29</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE29\">\n          <DataField>CBASECOLORE29</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI30\">\n          <DataField>CBASEGIORNI30</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI30\">\n          <DataField>CBASETURNI30</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE30\">\n          <DataField>CBASECOLORE30</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASEGIORNI31\">\n          <DataField>CBASEGIORNI31</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASETURNI31\">\n          <DataField>CBASETURNI31</DataField>\n          <rd:TypeName> System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CBASECOLORE31\">\n          <DataField>CBASECOLORE31</DataField>\n          <rd:TypeName> System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"GPIANIF\">\n          <DataField>GPIANIF</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"MATRICOLA\">\n          <DataField>MATRICOLA</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"NOME\">\n          <DataField>NOME</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"TIPOCOLONNA\">\n          <DataField>TIPOCOLONNA</DataField>\n          <rd:TypeName>System.Int32</rd:TypeName>\n        </Field>\n        <Field Name=\"NUMLP\">\n          <DataField>NUMLP</DataField>\n          <rd:TypeName>System.Int32</rd:TypeName>\n        </Field>\n      </Fields>\n      <fyi:Rows File=\"datI_RADIO.xml\" xmlns:fyi=\"http://www.fyireporting.com/schemas\" />\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>51.6pt</Height>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n    <ReportItems>\n      <Textbox Name=\"Textbox74\">\n        <Height>46.41pt</Height>\n        <Width>161.91pt</Width>\n        <Value>=\"Stampato il \" &amp; \"\\r\\n\" &amp; {@ExecutionTime}</Value>\n        <ZIndex>1</ZIndex>\n        <Left>601.70pt</Left>\n        <Top>2.20pt</Top>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n            <Left>Solid</Left>\n            <Right>Solid</Right>\n            <Top>Solid</Top>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth />\n          <TextAlign>Center</TextAlign>\n          <VerticalAlign>Middle</VerticalAlign>\n          <Format>MM/dd/yyyy</Format>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox31\">\n        <Height>20.99pt</Height>\n        <Width>476.54pt</Width>\n        <Value>TABELLONE MENSILE</Value>\n        <ZIndex>1</ZIndex>\n        <Left>108.4pt</Left>\n        <Top>3.8pt</Top>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n            <Left>Solid</Left>\n            <Right>Solid</Right>\n            <Top>Solid</Top>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth />\n          <FontSize>14pt</FontSize>\n          <TextAlign>Center</TextAlign>\n          <VerticalAlign>Middle</VerticalAlign>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox33\">\n        <Height>20.99pt</Height>\n        <Width>476.54pt</Width>\n        <Value>={?REPARTO}</Value>\n        <ZIndex>1</ZIndex>\n        <Left>108.4pt</Left>\n        <Top>24.79pt</Top>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n            <Left>Solid</Left>\n            <Right>Solid</Right>\n            <Top>Solid</Top>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth>\n            <Default>1pt</Default>\n            <Left>1pt</Left>\n            <Right>1pt</Right>\n            <Top>1pt</Top>\n            <Bottom>1pt</Bottom>\n          </BorderWidth>\n          <FontSize>14pt</FontSize>\n          <TextAlign>Center</TextAlign>\n          <VerticalAlign>Middle</VerticalAlign>\n        </Style>\n      </Textbox>\n    </ReportItems>\n  </PageHeader>\n  <Body>\n    <Height>49.3pt</Height>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>98.9pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>21.5pt</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>19.4pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox67\">\n                      <Value>Dipendenti</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox69\">\n                      <Value>Lp</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE1}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox1\">\n                      <Value>=1 + \"\\r\\n\" + {CBASEGIORNI1}</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE1}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox2\">\n                      <Value>=\"2\" +  \"\\r\\n\" + {CBASEGIORNI2}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE2}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox3\">\n                      <Value>=\"3\" +  \"\\r\\n\" + {CBASEGIORNI3}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE3}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox4\">\n                      <Value>=\"4\" +  \"\\r\\n\" + {CBASEGIORNI4}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE4}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox5\">\n                      <Value>=\"5\" +  \"\\r\\n\" + {CBASEGIORNI5}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE5}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox6\">\n                      <Value>=\"6\" +  \"\\r\\n\" + {CBASEGIORNI6}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE6}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox7\">\n                      <Value>=\"7\" +  \"\\r\\n\" + {CBASEGIORNI7}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE7}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox8\">\n                      <Value>=\"8\" +  \"\\r\\n\" + {CBASEGIORNI8}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE8}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox9\">\n                      <Value>=\"9\" +  \"\\r\\n\" + {CBASEGIORNI9}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE9}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox10\">\n                      <Value>=\"10\" +  \"\\r\\n\" + {CBASEGIORNI10}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE10}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox11\">\n                      <Value>=\"11\" +  \"\\r\\n\" + {CBASEGIORNI11}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE11}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox12\">\n                      <Value>=\"12\" +  \"\\r\\n\" + {CBASEGIORNI12}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE12}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox13\">\n                      <Value>=\"13\" +  \"\\r\\n\" + {CBASEGIORNI13}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE13}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox14\">\n                      <Value>=\"14\" +  \"\\r\\n\" + {CBASEGIORNI14}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE14}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox15\">\n                      <Value>=\"15\" +  \"\\r\\n\" + {CBASEGIORNI15}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE15}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox16\">\n                      <Value>=\"16\" +  \"\\r\\n\" + {CBASEGIORNI16}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE16}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox17\">\n                      <Value>=\"17\" +  \"\\r\\n\" + {CBASEGIORNI17}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE17}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox18\">\n                      <Value>=\"18\" +  \"\\r\\n\" + {CBASEGIORNI18}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE18}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox19\">\n                      <Value>=\"19\" +  \"\\r\\n\" + {CBASEGIORNI19}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE19}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox20\">\n                      <Value>=\"20\" +  \"\\r\\n\" + {CBASEGIORNI20}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE20}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox21\">\n                      <Value>=\"21\" +  \"\\r\\n\" + {CBASEGIORNI21}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE21}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox22\">\n                      <Value>=\"22\" +  \"\\r\\n\" + {CBASEGIORNI22}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE22}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox23\">\n                      <Value>=\"23\" +  \"\\r\\n\" + {CBASEGIORNI23}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE23}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox24\">\n                      <Value>=\"24\" +  \"\\r\\n\" + {CBASEGIORNI24}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE24}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox25\">\n                      <Value>=\"25\" +  \"\\r\\n\" + {CBASEGIORNI25}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE25}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox26\">\n                      <Value>=\"26\" +  \"\\r\\n\" + {CBASEGIORNI26}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE26}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox27\">\n                      <Value>=\"27\" +  \"\\r\\n\" + {CBASEGIORNI27}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE27}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox28\">\n                      <Value>=\"28\" +  \"\\r\\n\" + {CBASEGIORNI28}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE28}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox29\">\n                      <Value>=\"29\" +  \"\\r\\n\" + {CBASEGIORNI29}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE29}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TextBox30\">\n                      <Value>=\"30\" +  \"\\r\\n\" + {CBASEGIORNI30}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE30}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox32\">\n                      <Value>=\"31\" +  \"\\r\\n\" + {CBASEGIORNI31}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE31}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>11.5pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox68\">\n                      <Value>={NOME}</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Left</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox70\">\n                      <Value>={NUMLP}</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <Format>#</Format>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox34\">\n                      <Value>={CBASETURNI1}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE1}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox35\">\n                      <Value>={CBASETURNI2}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE2}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox36\">\n                      <Value>={CBASETURNI3}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE3}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox37\">\n                      <Value>={CBASETURNI4}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE4}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox38\">\n                      <Value>={CBASETURNI5}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE5}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox39\">\n                      <Value>={CBASETURNI6}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE6}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox40\">\n                      <Value>={CBASETURNI7}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE7}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox41\">\n                      <Value>={CBASETURNI8}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE8}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox42\">\n                      <Value>={CBASETURNI9}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE9}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox43\">\n                      <Value>={CBASETURNI10}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE10}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox44\">\n                      <Value>={CBASETURNI11}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE11}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox45\">\n                      <Value>={CBASETURNI12}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE12}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox46\">\n                      <Value>={CBASETURNI13}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE13}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox47\">\n                      <Value>={CBASETURNI14}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE14}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox48\">\n                      <Value>={CBASETURNI15}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE15}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox49\">\n                      <Value>={CBASETURNI16}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE16}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox50\">\n                      <Value>={CBASETURNI17}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE17}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox51\">\n                      <Value>={CBASETURNI18}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE18}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox52\">\n                      <Value>={CBASETURNI19}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE19}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox53\">\n                      <Value>={CBASETURNI20}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE20}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox54\">\n                      <Value>={CBASETURNI21}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE21}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox55\">\n                      <Value>={CBASETURNI22}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE22}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox56\">\n                      <Value>={CBASETURNI23}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE23}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox57\">\n                      <Value>={CBASETURNI24}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE24}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox58\">\n                      <Value>={CBASETURNI25}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE25}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox59\">\n                      <Value>={CBASETURNI26}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE26}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox60\">\n                      <Value>={CBASETURNI27}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE27}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox61\">\n                      <Value>={CBASETURNI28}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE28}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox62\">\n                      <Value>={CBASETURNI29}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE29}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox63\">\n                      <Value>={CBASETURNI30}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE30}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox64\">\n                      <Value>={CBASETURNI31}</Value>\n                      <Style>\n                        <FontFamily>Arial Narrow</FontFamily>\n                        <FontSize>8pt</FontSize>\n                        <TextAlign>Center</TextAlign>\n                        <VerticalAlign>Middle</VerticalAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <BackgroundColor>={CBASECOLORE31}</BackgroundColor>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n        <Left>1.6pt</Left>\n        <Top>0.0pt</Top>\n        <TableGroups>\n          <TableGroup>\n            <Grouping Name=\"TIPO_COLONNA\">\n              <PageBreakAtStart>true</PageBreakAtStart>\n              <PageBreakAtEnd>false</PageBreakAtEnd>\n              <GroupExpressions>\n                <GroupExpression>={TIPOCOLONNA}</GroupExpression>\n              </GroupExpressions>\n              <PageBreakCondition>=Iif({TIPOCOLONNA}&lt;&gt;3,false,true)</PageBreakCondition>\n            </Grouping>\n          </TableGroup>\n          <TableGroup>\n            <Grouping Name=\"GPIANIF\">\n              <PageBreakAtStart>true</PageBreakAtStart>\n              <PageBreakAtEnd>false</PageBreakAtEnd>\n              <GroupExpressions>\n                <GroupExpression>={GPIANIF}</GroupExpression>\n              </GroupExpressions>\n              <PageBreakCondition>=false</PageBreakCondition>\n            </Grouping>\n            <Header>\n              <RepeatOnNewPage>false</RepeatOnNewPage>\n              <TableRows>\n                <TableRow>\n                  <Height>11.6pt</Height>\n                  <TableCells>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox104\">\n                          <Value>={GPIANIF}</Value>\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                            <BorderColor />\n                            <BorderWidth />\n                            <VerticalAlign>Middle</VerticalAlign>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox71\">\n                          <Value></Value>\n                          <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                            <BorderColor />\n                            <BorderWidth />\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                    <TableCell>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox105\">\n                          <Style>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                            <BorderColor />\n                            <BorderWidth />\n                          </Style>\n                          <Value></Value>\n                        </Textbox>\n                      </ReportItems>\n                      <ColSpan>31</ColSpan>\n                    </TableCell>\n                  </TableCells>\n                </TableRow>\n              </TableRows>\n            </Header>\n          </TableGroup>\n        </TableGroups>\n        <DetailDataElementOutput>NoOutput</DetailDataElementOutput>\n      </Table>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>30.8pt</Height>\n    <PrintOnFirstPage>false</PrintOnFirstPage>\n    <PrintOnLastPage>false</PrintOnLastPage>\n  </PageFooter>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n  <Code>Function GetRagName(F as string) as string\nif F=\"zJ1\" then\n\tgetRagName=\"JOLLY\"\nelseif trim(F)=\"\" then\n\tgetRagName=\"TOTALI\"\nelse\n\tgetRagName=F\nend if\nend function\n\n\n\nFUNCTION CONTEGGIO_VERO(C AS STRING) AS BOOLEAN\nSTATIC CONTEGGIO AS INTEGER=0\nCONTEGGIO_VERO=TRUE\nif C=\"C\" then\n    if CONTEGGIO=0 then\n        CONTEGGIO_VERO=FALSE\n    end if\n    CONTEGGIO = CONTEGGIO+1\nend if\nEND FUNCTION</Code>\n  <ReportParameters>\n    <ReportParameter Name=\"PICTURE\">\n      <DataType>String</DataType>\n      <Nullable>false</Nullable>\n      <AllowBlank>false</AllowBlank>\n      <MultiValue>false</MultiValue>\n      <Prompt>IMMAGINE</Prompt>\n    </ReportParameter>\n    <ReportParameter Name=\"REPARTO\">\n      <DataType>String</DataType>\n      <Nullable>false</Nullable>\n      <AllowBlank>false</AllowBlank>\n      <MultiValue>false</MultiValue>\n      <Prompt></Prompt>\n    </ReportParameter>\n  </ReportParameters>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider></DataProvider>\n        <ConnectString />\n        <IntegratedSecurity>false</IntegratedSecurity>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n</Report>"
  },
  {
    "path": "Examples/Examples.416/TESTRIG.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\" xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description></Description>\n  <Author></Author>\n  <PageHeight>11in</PageHeight>\n  <PageWidth>8.5in</PageWidth>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <PageHeader>\n    <Height>33.9pt</Height>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>114.3pt</Height>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DataSetName>DS</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>142.1pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>142.1pt</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>11.2pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>VALORE</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value></Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>18pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>={VALORE}</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox6\">\n                      <Value></Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>8.8pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"BOXRIGA\">\n                      <Value>-----------------------------------------------------------------------------</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <VerticalAlign>Middle</VerticalAlign>\n                      </Style>\n                      <Visibility>\n                        <Hidden></Hidden>\n                        <ToggleItem></ToggleItem>\n                      </Visibility>\n                      <CanShrink>true</CanShrink>\n                    </Textbox>\n                  </ReportItems>\n                  <ColSpan>2</ColSpan>\n                </TableCell>\n              </TableCells>\n              <Visibility>\n                <Hidden>=iIF(UCase({?RIGAPRESENTE})='S',False,True)</Hidden>\n              </Visibility>\n            </TableRow>\n          </TableRows>\n        </Details>\n        <Left>62.48pt</Left>\n        <Top>11.92pt</Top>\n        <Footer>\n          <TableRows>\n            <TableRow>\n              <Height>.2in</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                      <Value></Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox7\">\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                      <Value></Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Footer>\n      </Table>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>148.4pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Top>1pt</Top>\n        <Left>10pt</Left>\n        <Height>12pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n  <DataSources>\n    <DataSource Name=\"XML\">\n      <ConnectionProperties>\n        <DataProvider />\n        <ConnectString />\n        <IntegratedSecurity>false</IntegratedSecurity>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"DS\">\n      <Query>\n        <DataSourceName>XML</DataSourceName>\n        <CommandText></CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"VALORE\">\n          <DataField>VALORE</DataField>\n          <TypeName>System.String</TypeName>\n        </Field>\n      </Fields>\n      <fyi:Rows File=\"TESTRIGA.xml\" xmlns:fyi=\"http://www.fyireporting.com/schemas\" />\n    </DataSet>\n  </DataSets>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n  <ReportParameters>\n    <ReportParameter Name=\"RIGAPRESENTE\">\n      <DataType>String</DataType>\n      <Nullable>false</Nullable>\n      <AllowBlank>false</AllowBlank>\n      <MultiValue>false</MultiValue>\n      <Prompt>RIGA PRESENTE 1 ?</Prompt>\n    </ReportParameter>\n  </ReportParameters>\n</Report>"
  },
  {
    "path": "Examples/Examples.416/TESTXGRUPPO.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\" xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>11in</PageHeight>\n  <PageWidth>8.5in</PageWidth>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>XML</DataSourceName>\n        <CommandText>SELECT * FROM TBL_TEST</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"K\">\n          <DataField>K</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"D1\">\n          <DataField>D1</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"D2\">\n          <DataField>D2</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"GRUPPO\">\n          <DataField>GRUPPO</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"LIVELLO\">\n          <DataField>LIVELLO</DataField>\n          <rd:TypeName>System.Int32</rd:TypeName>\n        </Field>\n      </Fields>\n      <fyi:Rows File=\"TESTXGRUPPO.XML\" xmlns:fyi=\"http://www.fyireporting.com/schemas\" />\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>46.4pt</Height>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n    <ReportItems>\n      <Textbox Name=\"Textbox4\">\n        <Height>31.56pt</Height>\n        <Width>515.71pt</Width>\n        <Value>=\"TEST FOR PAGE BREAK\" + \"CHANGE FORMULA\"</Value>\n        <ZIndex>1</ZIndex>\n        <Style>\n          <BorderStyle>\n            <Default> Solid </Default>\n            <Left> Solid </Left>\n            <Right> Solid </Right>\n            <Top> Solid </Top>\n            <Bottom> Solid </Bottom>\n          </BorderStyle>\n          <TextAlign> Center </TextAlign>\n          <VerticalAlign> Middle </VerticalAlign>\n          <Format> MM / dd / yyyy </Format>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Left>15.82pt</Left>\n        <Top>5.26pt</Top>\n      </Textbox>\n    </ReportItems>\n  </PageHeader>\n  <Body>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>132.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>212.9pt</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>11.2pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox13\">\n                      <Value>LIVELLO</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>GRUPPO</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox1\">\n                      <Value>K</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>D1</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>D2</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox14\">\n                      <Value>={LIVELLO}</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox11\">\n                      <Value>={GRUPPO}</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                      <HideDuplicates>LIVELLO</HideDuplicates>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"K\">\n                      <Value>=   {K} </Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                      <HideDuplicates>Data</HideDuplicates>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"D1\">\n                      <Value>=Fields!D1.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"D2\">\n                      <Value>=add(Fields!D2.Value)</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n        <Left>11.0pt</Left>\n        <Top>10.7pt</Top>\n        <PageBreakAtStart>false</PageBreakAtStart>\n        <PageBreakAtEnd>false</PageBreakAtEnd>\n        <TableGroups>\n          <TableGroup>\n            <Grouping Name=\"LIVELLO\">\n              <PageBreakAtStart>true</PageBreakAtStart>\n              <PageBreakAtEnd>false</PageBreakAtEnd>\n              <GroupExpressions>\n                <GroupExpression >={LIVELLO}</GroupExpression>\n              </GroupExpressions>\n              <PageBreakCondition>\n              </PageBreakCondition>\n            </Grouping>\n          </TableGroup>\n          <TableGroup>\n            <Grouping Name=\"agruppo\">\n              <PageBreakCondition>=false</PageBreakCondition>\n              <PageBreakAtStart>false</PageBreakAtStart>\n              <PageBreakAtEnd>false</PageBreakAtEnd>\n              <GroupExpressions>\n                <GroupExpression>={GRUPPO}</GroupExpression>\n              </GroupExpressions>\n            </Grouping>\n          </TableGroup>\n        </TableGroups>\n      </Table>\n    </ReportItems>\n    <Height>66.4pt</Height>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>43.2pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox5\">\n        <Top>5.4pt</Top>\n        <Left>8.6pt</Left>\n        <Height>12pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n  <Code>public function add(x as string) as string\n\tadd = x + \" addedde \"\nend function</Code>\n  <DataSources>\n    <DataSource Name=\"XML\">\n      <ConnectionProperties>\n        <DataProvider />\n        <ConnectString />\n        <IntegratedSecurity>false</IntegratedSecurity>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n</Report>"
  },
  {
    "path": "Examples/Examples.416/TESTXGRUPPO_Break3.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\" xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description></Description>\n  <Author></Author>\n  <PageHeight>11in</PageHeight>\n  <PageWidth>8.5in</PageWidth>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>XML</DataSourceName>\n        <CommandText>SELECT * FROM TBL_TEST</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"K\">\n          <DataField>K</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"D1\">\n          <DataField>D1</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"D2\">\n          <DataField>D2</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"GRUPPO\">\n          <DataField>GRUPPO</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"LIVELLO\">\n          <DataField>LIVELLO</DataField>\n          <rd:TypeName>System.Int32</rd:TypeName>\n        </Field>\n      </Fields>\n      <fyi:Rows File=\"TESTXGRUPPO.XML\" xmlns:fyi=\"http://www.fyireporting.com/schemas\" />\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>46.4pt</Height>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n    <ReportItems>\n      <Textbox Name=\"Textbox4\">\n        <Height>31.56pt</Height>\n        <Width>392.19pt</Width>\n        <Value>=\"TEST FOR PAGE BREAK AT LEVEL 3\" + crlf() + \" CHANGE FORMULA FOR TESTS\"</Value>\n        <ZIndex>1</ZIndex>\n        <Style>\n          <BorderStyle>\n            <Default> Solid </Default>\n            <Left> Solid </Left>\n            <Right> Solid </Right>\n            <Top> Solid </Top>\n            <Bottom> Solid </Bottom>\n          </BorderStyle>\n          <TextAlign> Center </TextAlign>\n          <VerticalAlign> Middle </VerticalAlign>\n          <Format> MM / dd / yyyy </Format>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Left>15.82pt</Left>\n        <Top>5.26pt</Top>\n      </Textbox>\n    </ReportItems>\n  </PageHeader>\n  <Body>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>132.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>212.9pt</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>11.2pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox13\">\n                      <Value>LIVELLO</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>GRUPPO</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox1\">\n                      <Value>K</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>D1</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>D2</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox14\">\n                      <Value>={LIVELLO}</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox11\">\n                      <Value>={GRUPPO}</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                      <HideDuplicates>LIVELLO</HideDuplicates>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"K\">\n                      <Value>=   {K} </Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                      <HideDuplicates>Data</HideDuplicates>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"D1\">\n                      <Value>=Fields!D1.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"D2\">\n                      <Value>=add(Fields!D2.Value)</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n        <Left>11.0pt</Left>\n        <Top>10.7pt</Top>\n        <PageBreakAtStart>false</PageBreakAtStart>\n        <PageBreakAtEnd>false</PageBreakAtEnd>\n        <TableGroups>\n          <TableGroup>\n            <Grouping Name=\"LIVELLO\">\n              <PageBreakAtStart>true</PageBreakAtStart>\n              <PageBreakAtEnd>false</PageBreakAtEnd>\n              <GroupExpressions>\n                <GroupExpression>={LIVELLO}</GroupExpression>\n              </GroupExpressions>\n              <PageBreakCondition>=Iif({LIVELLO} &lt;&gt; 3 , false , true)</PageBreakCondition>\n            </Grouping>\n          </TableGroup>\n          <TableGroup>\n            <Grouping Name=\"agruppo\">\n              <PageBreakCondition>=false</PageBreakCondition>\n              <PageBreakAtStart>false</PageBreakAtStart>\n              <PageBreakAtEnd>false</PageBreakAtEnd>\n              <GroupExpressions>\n                <GroupExpression>={GRUPPO}</GroupExpression>\n              </GroupExpressions>\n            </Grouping>\n          </TableGroup>\n        </TableGroups>\n      </Table>\n    </ReportItems>\n    <Height>45.4pt</Height>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>29.4pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox5\">\n        <Top>5.4pt</Top>\n        <Left>8.6pt</Left>\n        <Height>12pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n  <Code>public function add(x as string) as string\n\tadd = x + \" addedde \"\nend function\npublic function crlf() as string\n\tcrlf = vbcrlf\nend function</Code>\n  <DataSources>\n    <DataSource Name=\"XML\">\n      <ConnectionProperties>\n        <DataProvider />\n        <ConnectString />\n        <IntegratedSecurity>false</IntegratedSecurity>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n</Report>"
  },
  {
    "path": "Examples/Examples.416/datI_RADIO.xml",
    "content": "﻿<Rows>\n<Row><ID>1</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>001117</MATRICOLA><NOME>Aloia Daniele</NOME><NUMLP>2</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>18</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>19</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>18</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>19</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>12+</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>20</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>21</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>22</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>15</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>19</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>03B</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>19B</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>02</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>18</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>18</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>15</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>19B</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>03C</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>03C</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>MAL</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>07+</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>03C</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>17</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>20</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>2</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>22222</MATRICOLA><NOME>Balice Giulio</NOME><NUMLP>8</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>00</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>00</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>00</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>19</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>14+</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>08C</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>03</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>20</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>21</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>22</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>12+</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>04</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>09C</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>23</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>13+</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>09C</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>09BM</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>19</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>13+</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>09+</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>00</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>00</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>00</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>00</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>3</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>000034</MATRICOLA><NOME>Bottoni Franco Maria</NOME><NUMLP>6</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>19B</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>03C</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>08+</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>18</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>09A</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>00</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>00</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>00</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>00</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>04</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>12+</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>18</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>08C</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>14+</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>00</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>00</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>00</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>00</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>00</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>06C</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>14+</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>03B</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>23</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>4</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>002220</MATRICOLA><NOME>Carbone Luca</NOME><NUMLP>0</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>00</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>00</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>00</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>19B</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>03C</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>01</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>02</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>03B</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>20</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>21</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>22</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>09BP</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>19B</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>00</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>09BM</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>09BP</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>18</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>09BP</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>00</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>19</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>19B</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>00</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>09BM</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>09BM</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>5</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>001769</MATRICOLA><NOME>Chiacchio Maria</NOME><NUMLP>0</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>MAT</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>MAT</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>MAT</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>10B</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>11</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>19</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>10</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>10B</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>18</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>10B</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>10B</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>03B</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>23</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>19</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>MD</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>11</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>11</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>10B</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>00</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>10B</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>03C</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>10B</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>23</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>18</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>6</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>001263</MATRICOLA><NOME>Colucci Luigi</NOME><NUMLP>9</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>09+</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>01</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>02</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>00</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>00</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>00</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>00</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>00</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>09BP</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>09C</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>17</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>13+</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>12+</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>20</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>21</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>22</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>06C</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>14+</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>08C</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>09+</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>19B</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>03</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>09+</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>7</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>98765</MATRICOLA><NOME>Craba Giulia</NOME><NUMLP>0</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>05R</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>05</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>05R</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>00</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>00</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>00</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>00</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>00</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>17</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>05R</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>02</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>17</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>17</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>M1</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>05R</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>17</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>05</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>15</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>17</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>05</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>17</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>15</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>05</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>8</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>002041</MATRICOLA><NOME>Cuomo Romolo</NOME><NUMLP>8</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>20</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>21</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>22</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>12+</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>13+</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>19</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>06+</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>15</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>06+</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>06+</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>20</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>21</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>22</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>03B</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>19</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>03</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>14+</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>13</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>08+</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>19</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>15</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>12+</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>18</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>19</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>9</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>123456</MATRICOLA><NOME>D'angelo Dario</NOME><NUMLP>4</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>00</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>00</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>00</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>01</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>02</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>15</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>08+</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>20</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>21</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>22</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>17C</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>08+</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>03</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>17B</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>17C</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>13</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>03F</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>08+</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>03</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>04</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>20</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>21</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>22</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>17C</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>08+</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>10</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>XXXX</MATRICOLA><NOME>Della  Rocchetta Andrea</NOME><NUMLP>0</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>01</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>02</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>17</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>00</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>00</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>00</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>00</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>00</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>00</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>00</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>00</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>00</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>00</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>17A</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>17A</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>17A</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>17B</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>01</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>01-</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>02</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>COR</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>17B</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>17</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>11</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>000003</MATRICOLA><NOME>Fabbi Riccardo</NOME><NUMLP>9</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>19</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>14+</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>20</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>21</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>22</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>09C</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>19B</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>03C</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>09+</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>13</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>14+</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>09BP</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>13+</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>20</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>21</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>22</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>19B</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>09BP</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>01</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>09BM</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>09C</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>12+</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>18</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>06C</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>23</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>06C</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>12</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>002010</MATRICOLA><NOME>Fabbri Elisa</NOME><NUMLP>3</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>05+</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>02</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>06+</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>15</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>17</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>14+</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>05R</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>PR</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>09BM</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>05</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>09BM</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>07+</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>05R</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>09BM</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>17</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>19</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>23</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>PR</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>23</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>09BM</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>09BP</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>10B</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>13</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>13</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>002184</MATRICOLA><NOME>Fasanella Incoronata Pierpaola</NOME><NUMLP>8</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>06+</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>10B</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>06+</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>20</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>21</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>22</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>12+</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>14+</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>18</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>05A</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>05A</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>05A</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>05</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>06+</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>13+</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>03C</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>12+</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>09BM</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>05</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>20</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>21</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>22</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>08</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>MAL</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>MAL</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>14</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>33333</MATRICOLA><NOME>Furfaro Nadia</NOME><NUMLP>0</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>MAT</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>MAT</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>MAT</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>16</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>16</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>16</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>16</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>16</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>16</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>16</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>16</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>16</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>16</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>16</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>16</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>16</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>16</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>16</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>16</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>16</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>16</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>16</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>15</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>001886</MATRICOLA><NOME>Gagliano Nicolo'</NOME><NUMLP>9</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>00</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>00</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>00</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>20</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>21</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>22</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>09C</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>13+</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>09C</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>01</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>02</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>14+</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>09B</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>09C</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>19</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>12+</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>09C</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>03</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>18</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>03</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>14+</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>19</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>09C</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>15</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>16</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>0006</MATRICOLA><NOME>Genta Monica</NOME><NUMLP>0</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>00</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>00</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>00</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>05P</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>05</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>05P</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>05M</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>05M</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>05M</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>05</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>05M</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>05P</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>05P</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>05P</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>05M</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>00</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>05P</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>05M</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>05P</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>05</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>05M</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>05P</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>17</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>001937</MATRICOLA><NOME>Lafergola Michele</NOME><NUMLP>0</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>03B</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>19B</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>20</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>21</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>22</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>13</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>17</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>19B</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>03C</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>03C</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>MD</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>03</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>03F</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>03F</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>15</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>02</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>01-</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>17B</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>13</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>17</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>03B</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>03F</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>19B</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>20</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>21</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>22</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>03</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>18</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>002313</MATRICOLA><NOME>Lanave Tiziano</NOME><NUMLP>0</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>00</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>00</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>00</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>05R</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>10B</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>10B</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>17</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>05</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>M2</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>05R</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>17</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>05</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>10</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>15</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>05+</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>05</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>10B</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>15</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>10</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>11</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>05R</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>15</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>00</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>17B</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>19</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>002186</MATRICOLA><NOME>Lauriola Francesco</NOME><NUMLP>0</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>05M</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>05M</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>05M</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>05+</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>11</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>05P</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>05M</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>05R</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>17</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>M1</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>00</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>00</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>00</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>00</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>00</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>05M</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>05P</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>05M</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>11</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>05P</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>05+</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>11</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>05P</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>05R</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>10</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>20</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>35148</MATRICOLA><NOME>Lucini Elisabetta</NOME><NUMLP>0</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>01-</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>04</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>03B</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>03C</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>00</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>00</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>00</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>00</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>00</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>11</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>01</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>11</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>10B</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>11</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>01</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>02</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>03B</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>10B</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>03C</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>M1</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>10B</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>01</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>02</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>03B</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>21</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>464789</MATRICOLA><NOME>Marconi Giacomo</NOME><NUMLP>6</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>00</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>00</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>00</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>03B</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>09B</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>13+</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>19B</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>17C</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>19B</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>09+</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>19</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>04</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>12+</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>03</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>14+</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>20</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>21</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>22</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>09BM</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>18</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>08+</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>09+</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>20</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>21</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>22</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>45523</MATRICOLA><NOME>Milan Antonio</NOME><NUMLP>2</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>MF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>19B</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>04</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>03B</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>18</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>04</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>20</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>21</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>22</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>19B</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>17B</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>07+</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>17B</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>04</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>20</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>21</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>22</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>03F</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>04</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>07+</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>17</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>20</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>21</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>22</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>23</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>04</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>03C</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>01</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>23</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>000020</MATRICOLA><NOME>Milano Shari</NOME><NUMLP>0</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>10B</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>05R</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>10B</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>01-</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>10</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>03F</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>05</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>19</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>11</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>05+</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>15</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>17C</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>19</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>11</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>10B</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>03C</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>10</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>05R</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>02</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>17C</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>MD</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>03B</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>11</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>11</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>03F</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>24</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>001885</MATRICOLA><NOME>Morrone Giuseppe</NOME><NUMLP>6</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>22</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>12+</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>09+</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>09+</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>03C</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>03B</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>09BM</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>09B</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>19</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>19</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>09BM</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>14+</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>09BM</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>09+</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>03C</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>20</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>21</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>22</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>12+</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>00</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>18</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>19</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>20</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>21</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>22</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>25</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>001340</MATRICOLA><NOME>Mura Antonello</NOME><NUMLP>0</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>03</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>03C</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>01</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>MF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>17B</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>05R</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>17</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>05</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>03F</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>01-</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>03C</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>17B</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>15</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>03F</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>03F</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>03B</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>05R</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>19B</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>05R</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>17B</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>03</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>03</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>19</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>03C</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>26</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>000002</MATRICOLA><NOME>Pagani Erika Rosa</NOME><NUMLP>3</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>17</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>19</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>14+</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>18</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>15</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>13</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>11</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>03B</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>MAT</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>00</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>00</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>00</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>00</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>00</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>23</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>07+</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>10</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>19</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>MAL</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>17B</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>18</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>13+</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>11</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>27</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>0007</MATRICOLA><NOME>Perco Natascia</NOME><NUMLP>0</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>00</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>00</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>00</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>05+</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>05M</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>05M</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>00</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>05P</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>05P</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>05P</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>05M</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>05R</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>05M</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>05M</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>00</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>00</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>00</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>00</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>00</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>05M</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>05M</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>05P</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>05M</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>28</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>001567</MATRICOLA><NOME>Radogna Giovanni Luca</NOME><NUMLP>9</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>00</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>00</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>00</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>08+</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>12+</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>18</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>14+</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>04</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>18</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>06+</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>03C</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>03</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>08+</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>19B</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>06+</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>18</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>01</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>04</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>14+</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>09A</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>09A</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>06+</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>12+</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>29</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>000055</MATRICOLA><NOME>Ragucci Pasquala</NOME><NUMLP>6</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>17C</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>14+</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>17C</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>FOR</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>FOR</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>00</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>00</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>00</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>00</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>00</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>00</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>00</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>00</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>17C</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>06+</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>13+</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>17C</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>06+</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>13+</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>17C</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>14+</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>17C</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>30</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>475464</MATRICOLA><NOME>Ramberti Riccardo</NOME><NUMLP>6</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>00</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>00</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>00</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>18</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>03</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>09+</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>14+</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>01</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>02</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>MAL</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>MAL</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>12+</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>MAL</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>MAL</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>08+</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>15</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>09+</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>23</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>09BP</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>19B</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>09BP</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>17B</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>12+</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>23</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>31</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>77777</MATRICOLA><NOME>Resta Patrizia</NOME><NUMLP>0</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>05</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>15</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>05</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>MF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>05</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>10</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>03F</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>11</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>19B</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>03F</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>11</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>10B</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>03B</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>05R</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>05+</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>10</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>03B</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>11</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>03F</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>15</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>01-</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>10</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>05R</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>04</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>10B</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>32</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>00001</MATRICOLA><NOME>Rojario Soshanna</NOME><NUMLP>0</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>MAT</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>MAT</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>MAT</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>MAT</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>MAT</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>MAT</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>MAT</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>MAT</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>MAT</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>MAT</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>MAT</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>MAT</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>MAT</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>MAT</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>MAT</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>MAT</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>MAT</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>MAT</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>MAT</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>MAT</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>MAT</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>MAT</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>33</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>897986</MATRICOLA><NOME>Salzano Alex</NOME><NUMLP>2</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>00</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>00</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>00</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>19</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>04</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>17C</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>17C</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>03</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>01</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>01-</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>02</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>19B</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>20</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>21</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>22</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>04</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>17B</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>02</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>07+</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>19B</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>00</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>03B</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>07+</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>04</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>34</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>001949</MATRICOLA><NOME>Sari Arianna</NOME><NUMLP>6</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>20</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>21</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>22</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>19B</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>06+</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>06+</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>03B</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>10B</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>10</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>13</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>13+</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>10</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>14+</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>19B</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>00</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>00</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>00</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>00</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>00</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>17</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>02</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>08+</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>13+</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>35</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>000111</MATRICOLA><NOME>Seggio Giovanni</NOME><NUMLP>4</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>00</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>00</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>00</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>03F</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>13+</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>10</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>17B</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>05R</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>05+</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>20</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>21</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>22</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>07+</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>05</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>19B</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>05</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>17B</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>05</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>13+</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>01</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>10</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>05</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>07+</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>36</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>00008</MATRICOLA><NOME>Stablum Stefano</NOME><NUMLP>5</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>21</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>22</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>12+</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>08+</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>17C</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>01</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>02</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>17C</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>08+</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>20</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>21</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>22</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>MAL</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>MAL</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>MAL</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>MAL</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>18</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>08+</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>17C</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>19B</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>03B</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>00</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>03F</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>19B</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>14+</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>37</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>000881</MATRICOLA><NOME>Superbi Simona</NOME><NUMLP>5</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>00</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>00</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>00</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>COO</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>COO</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>COO</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>COO</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>13+</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>COO</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>15</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>COO</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>06+</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>COO</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>COO</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>13+</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>COO</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>COO</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>07+</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>COO</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>08+</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>00</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>00</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>38</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>0005</MATRICOLA><NOME>Toscani Nicolò</NOME><NUMLP>2</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>18</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>03</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>04</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>00</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>00</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>00</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>00</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>00</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>19B</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>05P</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>05P</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>17C</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>07+</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>01-</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>02</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>17C</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>05P</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>05M</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>05R</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>05+</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>04</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>07+</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>03F</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>05R</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>39</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>78910</MATRICOLA><NOME>Totaro Silvia</NOME><NUMLP>0</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>15</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>17</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>03</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>01-</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>02</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>17B</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>04</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>03F</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>17B</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>03B</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>10</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>23</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>01</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>04</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>M2</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>10B</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>03</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>03F</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>01</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>02</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>M2</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>03F</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>COR</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>01</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>02</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>40</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>23588</MATRICOLA><NOME>Valtolina Chiara</NOME><NUMLP>6</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>08+</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>17C</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>19B</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>20</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>21</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>22</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>03</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>08+</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>18</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>12+</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>10</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>18</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>08+</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>03C</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>10</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>18</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>19</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>12+</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>20</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>21</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>22</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>19</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>17C</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>13+</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>10</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>19B</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>41</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>009</MATRICOLA><NOME>Vela Riccardo</NOME><NUMLP>2</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>00</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>00</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>00</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>FF</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>19</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>15</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>17B</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>04</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>18</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>19</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>13+</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>03C</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>01</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>19</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>17B</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>FF</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>FF</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>07+</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>23</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>04</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>20</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>21</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>22</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>00</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>00</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>00</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>00</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>42</ID><TIPOCOLONNA>0</TIPOCOLONNA><GPIANIF>TC</GPIANIF><MATRICOLA>001269</MATRICOLA><NOME>Vurro Michele</NOME><NUMLP>7</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1>FF</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2>00</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3>00</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4>00</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5>FF</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6>19B</CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7>09B</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8>18</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9>12+</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10>06C</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11>03</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12>FF</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13>FF</CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14>08C</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15>03</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>06+</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17>18</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>01</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19>20</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20>21</CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21>22</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22>23</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23>14+</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24>06+</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25>18</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26>FF</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27>FF</CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28>12+</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29>MAL</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30>MAL</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>MAL</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>43</ID><TIPOCOLONNA>1</TIPOCOLONNA><GPIANIF>Esterni</GPIANIF><MATRICOLA>1</MATRICOLA><NOME>Manutenzione</NOME><NUMLP>0</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1></CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2></CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3></CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4></CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5></CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6></CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7></CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8></CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9></CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10></CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11></CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12></CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13></CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14></CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15></CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16>man</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17></CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18>13</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19></CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20></CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21></CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22></CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23></CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24></CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25></CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26></CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27></CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28></CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29></CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30></CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31>15</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>44</ID><TIPOCOLONNA>1</TIPOCOLONNA><GPIANIF>Esterni</GPIANIF><MATRICOLA>2</MATRICOLA><NOME>Manutenzione</NOME><NUMLP>0</NUMLP><CBASEGIORNI1>MAR</CBASEGIORNI1><CBASETURNI1></CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2>MER</CBASEGIORNI2><CBASETURNI2></CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3>GIO</CBASEGIORNI3><CBASETURNI3></CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4>VEN</CBASEGIORNI4><CBASETURNI4></CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5>SAB</CBASEGIORNI5><CBASETURNI5></CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6>DOM</CBASEGIORNI6><CBASETURNI6></CBASETURNI6><CBASECOLORE6>-7278960</CBASECOLORE6><CBASEGIORNI7>LUN</CBASEGIORNI7><CBASETURNI7></CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8>MAR</CBASEGIORNI8><CBASETURNI8></CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9>MER</CBASEGIORNI9><CBASETURNI9></CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10>GIO</CBASEGIORNI10><CBASETURNI10></CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11>VEN</CBASEGIORNI11><CBASETURNI11></CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12>SAB</CBASEGIORNI12><CBASETURNI12></CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13>DOM</CBASEGIORNI13><CBASETURNI13></CBASETURNI13><CBASECOLORE13>-7278960</CBASECOLORE13><CBASEGIORNI14>LUN</CBASEGIORNI14><CBASETURNI14></CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15>MAR</CBASEGIORNI15><CBASETURNI15></CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16>MER</CBASEGIORNI16><CBASETURNI16></CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17>GIO</CBASEGIORNI17><CBASETURNI17></CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18>VEN</CBASEGIORNI18><CBASETURNI18></CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19>SAB</CBASEGIORNI19><CBASETURNI19></CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20>DOM</CBASEGIORNI20><CBASETURNI20></CBASETURNI20><CBASECOLORE20>-7278960</CBASECOLORE20><CBASEGIORNI21>LUN</CBASEGIORNI21><CBASETURNI21></CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22>MAR</CBASEGIORNI22><CBASETURNI22></CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23>MER</CBASEGIORNI23><CBASETURNI23></CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24>GIO</CBASEGIORNI24><CBASETURNI24></CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25>VEN</CBASEGIORNI25><CBASETURNI25></CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26>SAB</CBASEGIORNI26><CBASETURNI26></CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27>DOM</CBASEGIORNI27><CBASETURNI27></CBASETURNI27><CBASECOLORE27>-7278960</CBASECOLORE27><CBASEGIORNI28>LUN</CBASEGIORNI28><CBASETURNI28></CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29>MAR</CBASEGIORNI29><CBASETURNI29></CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30>MER</CBASEGIORNI30><CBASETURNI30></CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31>GIO</CBASEGIORNI31><CBASETURNI31></CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>45</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>01</MATRICOLA><NOME>REPER. RADIO</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>46</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>01-</MATRICOLA><NOME>REP S/D</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>1</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>1</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>1</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>0</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>0</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>0</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>0</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>0</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>1</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>1</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>0</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>0</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>0</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>0</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>0</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>1</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>1</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>0</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>0</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>0</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>0</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>0</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>1</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>1</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>0</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>0</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>0</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>0</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>47</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>02</MATRICOLA><NOME>POM. RADIOL.</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>48</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>03</MATRICOLA><NOME>SALA OPERATORIA 1</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>49</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>03B</MATRICOLA><NOME>SALA OPERATORIA 2</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>50</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>03C</MATRICOLA><NOME>SALA OPERATORIA 3</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>51</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>03F</MATRICOLA><NOME>SALA OPER.BOG</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>52</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>04</MATRICOLA><NOME>POMERIGGIO S.O.</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>53</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>05</MATRICOLA><NOME>ANGIO</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>54</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>05+</MATRICOLA><NOME>REP ANGIO S/D</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>1</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>1</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>1</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>0</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>0</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>0</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>0</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>0</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>1</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>1</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>0</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>0</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>0</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>0</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>0</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>1</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>1</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>0</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>0</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>0</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>0</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>0</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>1</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>1</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>0</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>0</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>0</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>0</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>55</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>05A</MATRICOLA><NOME>ANGIO AFF.</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>0</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>0</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>0</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>0</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>0</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>0</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>0</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>0</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>0</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>0</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>0</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>0</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>0</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>0</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>0</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>0</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>56</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>05M</MATRICOLA><NOME>EMO MATTINO</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>57</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>05P</MATRICOLA><NOME>EMO POMERIGGIO</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>58</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>05R</MATRICOLA><NOME>REP ANGIO</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>59</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>06+</MATRICOLA><NOME>RM 3.0 T LP</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>0</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>0</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>0</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>0</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>0</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>60</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>06C</MATRICOLA><NOME>RM 3T COORD.</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>0</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>0</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>0</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>0</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>0</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>0</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>0</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>0</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>0</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>0</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>0</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>0</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>0</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>0</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>61</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>07+</MATRICOLA><NOME>RM 1T LP</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>0</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>0</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>0</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>0</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>0</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>0</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>62</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>08</MATRICOLA><NOME>RM 1,5 GE</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>0</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>0</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>0</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>0</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>0</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>0</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>0</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>0</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>0</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>0</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>0</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>0</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>0</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>0</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>0</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>0</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>0</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>0</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>63</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>08+</MATRICOLA><NOME>RM 1.5 GE LP</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>0</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>0</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>0</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>0</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>64</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>08C</MATRICOLA><NOME>RM 1.5 GE COOR</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>0</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>0</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>0</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>0</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>0</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>0</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>0</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>0</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>0</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>0</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>0</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>0</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>0</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>0</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>0</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>65</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>09+</MATRICOLA><NOME>RM 1.5 SIEM LP</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>0</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>0</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>0</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>0</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>0</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>0</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>0</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>0</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>0</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>0</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>66</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>09A</MATRICOLA><NOME>RM 1,5 SIEM. AFF.</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>0</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>0</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>0</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>0</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>0</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>0</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>0</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>0</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>0</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>0</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>0</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>0</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>0</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>0</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>0</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>0</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>67</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>09B</MATRICOLA><NOME>RM 1.5 CCP LP</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>0</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>0</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>0</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>0</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>0</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>0</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>0</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>0</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>0</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>0</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>0</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>0</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>0</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>0</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>0</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>68</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>09BM</MATRICOLA><NOME>RM 1.5 CCP LP</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>0</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>0</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>0</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>0</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>0</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>69</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>09BP</MATRICOLA><NOME>RM 1.5 CCP LP</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>0</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>0</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>0</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>0</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>0</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>0</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>0</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>0</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>0</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>0</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>70</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>09C</MATRICOLA><NOME>RM 1.5 SIEM. COOR</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>0</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>0</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>0</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>0</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>0</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>0</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>0</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>0</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>0</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>71</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>10</MATRICOLA><NOME>MAMMO SCREENING</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>0</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>72</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>10B</MATRICOLA><NOME>MAMMO CDH</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>73</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>11</MATRICOLA><NOME>MAMMO</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>74</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>12+</MATRICOLA><NOME>TAC PHIL. LP</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>75</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>13</MATRICOLA><NOME>TAC EVO</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>0</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>0</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>0</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>0</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>0</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>0</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>0</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>0</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>0</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>0</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>0</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>76</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>13+</MATRICOLA><NOME>TAC EVO LP</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>77</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>14+</MATRICOLA><NOME>TAC 256</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>78</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>15</MATRICOLA><NOME>RX03 INTERNI</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>79</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>16</MATRICOLA><NOME>RX04 ESTERNI</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>80</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>17</MATRICOLA><NOME>RX06 ESTERNI</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>81</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>17A</MATRICOLA><NOME>RX OSSA AFF</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>0</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>0</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>0</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>0</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>0</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>0</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>0</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>0</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>0</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>0</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>0</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>0</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>0</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>0</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>0</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>0</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>82</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>17B</MATRICOLA><NOME>RX PRERIC.</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>0</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>0</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>0</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>83</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>17C</MATRICOLA><NOME>EOS</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>0</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>0</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>0</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>0</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>0</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>0</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>0</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>0</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>0</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>0</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>84</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>18</MATRICOLA><NOME>1° MATTINA PS</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>1</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>1</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>1</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>1</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>1</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>1</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>1</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>1</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>1</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>85</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>19</MATRICOLA><NOME>1° POMER. PS</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>1</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>1</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>1</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>1</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>1</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>1</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>1</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>1</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>1</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>86</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>19B</MATRICOLA><NOME>2° POMER. PS</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>1</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>1</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>1</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>1</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>1</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>1</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>1</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>1</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>1</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>87</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>20</MATRICOLA><NOME>PS NOTTE</NOME><NUMLP></NUMLP><CBASEGIORNI1></CBASEGIORNI1><CBASETURNI1>1</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2></CBASEGIORNI2><CBASETURNI2>1</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3></CBASEGIORNI3><CBASETURNI3>1</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4></CBASEGIORNI4><CBASETURNI4>1</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5></CBASEGIORNI5><CBASETURNI5>1</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6></CBASEGIORNI6><CBASETURNI6>1</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7></CBASEGIORNI7><CBASETURNI7>1</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8></CBASEGIORNI8><CBASETURNI8>1</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9></CBASEGIORNI9><CBASETURNI9>1</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10></CBASEGIORNI10><CBASETURNI10>1</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11></CBASEGIORNI11><CBASETURNI11>1</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12></CBASEGIORNI12><CBASETURNI12>1</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13></CBASEGIORNI13><CBASETURNI13>1</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14></CBASEGIORNI14><CBASETURNI14>1</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15></CBASEGIORNI15><CBASETURNI15>1</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16></CBASEGIORNI16><CBASETURNI16>1</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17></CBASEGIORNI17><CBASETURNI17>1</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18></CBASEGIORNI18><CBASETURNI18>1</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19></CBASEGIORNI19><CBASETURNI19>1</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20></CBASEGIORNI20><CBASETURNI20>1</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21></CBASEGIORNI21><CBASETURNI21>1</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22></CBASEGIORNI22><CBASETURNI22>1</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23></CBASEGIORNI23><CBASETURNI23>1</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24></CBASEGIORNI24><CBASETURNI24>1</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25></CBASEGIORNI25><CBASETURNI25>1</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26></CBASEGIORNI26><CBASETURNI26>1</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27></CBASEGIORNI27><CBASETURNI27>1</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28></CBASEGIORNI28><CBASETURNI28>1</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29></CBASEGIORNI29><CBASETURNI29>1</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30></CBASEGIORNI30><CBASETURNI30>1</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31></CBASEGIORNI31><CBASETURNI31>1</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n<Row><ID>88</ID><TIPOCOLONNA>3</TIPOCOLONNA><GPIANIF>Totali </GPIANIF><MATRICOLA>Op</MATRICOLA><NOME>Turni Operativi</NOME><NUMLP></NUMLP><CBASEGIORNI1> </CBASEGIORNI1><CBASETURNI1>6</CBASETURNI1><CBASECOLORE1>-1</CBASECOLORE1><CBASEGIORNI2> </CBASEGIORNI2><CBASETURNI2>22</CBASETURNI2><CBASECOLORE2>-1</CBASECOLORE2><CBASEGIORNI3> </CBASEGIORNI3><CBASETURNI3>22</CBASETURNI3><CBASECOLORE3>-1</CBASECOLORE3><CBASEGIORNI4> </CBASEGIORNI4><CBASETURNI4>22</CBASETURNI4><CBASECOLORE4>-1</CBASECOLORE4><CBASEGIORNI5> </CBASEGIORNI5><CBASETURNI5>6</CBASETURNI5><CBASECOLORE5>-1</CBASECOLORE5><CBASEGIORNI6> </CBASEGIORNI6><CBASETURNI6>6</CBASETURNI6><CBASECOLORE6>-1</CBASECOLORE6><CBASEGIORNI7> </CBASEGIORNI7><CBASETURNI7>32</CBASETURNI7><CBASECOLORE7>-1</CBASECOLORE7><CBASEGIORNI8> </CBASEGIORNI8><CBASETURNI8>31</CBASETURNI8><CBASECOLORE8>-1</CBASECOLORE8><CBASEGIORNI9> </CBASEGIORNI9><CBASETURNI9>30</CBASETURNI9><CBASECOLORE9>-1</CBASECOLORE9><CBASEGIORNI10> </CBASEGIORNI10><CBASETURNI10>30</CBASETURNI10><CBASECOLORE10>-1</CBASECOLORE10><CBASEGIORNI11> </CBASEGIORNI11><CBASETURNI11>31</CBASETURNI11><CBASECOLORE11>-1</CBASECOLORE11><CBASEGIORNI12> </CBASEGIORNI12><CBASETURNI12>6</CBASETURNI12><CBASECOLORE12>-1</CBASECOLORE12><CBASEGIORNI13> </CBASEGIORNI13><CBASETURNI13>6</CBASETURNI13><CBASECOLORE13>-1</CBASECOLORE13><CBASEGIORNI14> </CBASEGIORNI14><CBASETURNI14>33</CBASETURNI14><CBASECOLORE14>-1</CBASECOLORE14><CBASEGIORNI15> </CBASEGIORNI15><CBASETURNI15>33</CBASETURNI15><CBASECOLORE15>-1</CBASECOLORE15><CBASEGIORNI16> </CBASEGIORNI16><CBASETURNI16>32</CBASETURNI16><CBASECOLORE16>-1</CBASECOLORE16><CBASEGIORNI17> </CBASEGIORNI17><CBASETURNI17>31</CBASETURNI17><CBASECOLORE17>-1</CBASECOLORE17><CBASEGIORNI18> </CBASEGIORNI18><CBASETURNI18>31</CBASETURNI18><CBASECOLORE18>-1</CBASECOLORE18><CBASEGIORNI19> </CBASEGIORNI19><CBASETURNI19>6</CBASETURNI19><CBASECOLORE19>-1</CBASECOLORE19><CBASEGIORNI20> </CBASEGIORNI20><CBASETURNI20>6</CBASETURNI20><CBASECOLORE20>-1</CBASECOLORE20><CBASEGIORNI21> </CBASEGIORNI21><CBASETURNI21>34</CBASETURNI21><CBASECOLORE21>-1</CBASECOLORE21><CBASEGIORNI22> </CBASEGIORNI22><CBASETURNI22>34</CBASETURNI22><CBASECOLORE22>-1</CBASECOLORE22><CBASEGIORNI23> </CBASEGIORNI23><CBASETURNI23>33</CBASETURNI23><CBASECOLORE23>-1</CBASECOLORE23><CBASEGIORNI24> </CBASEGIORNI24><CBASETURNI24>32</CBASETURNI24><CBASECOLORE24>-1</CBASECOLORE24><CBASEGIORNI25> </CBASEGIORNI25><CBASETURNI25>31</CBASETURNI25><CBASECOLORE25>-1</CBASECOLORE25><CBASEGIORNI26> </CBASEGIORNI26><CBASETURNI26>6</CBASETURNI26><CBASECOLORE26>-1</CBASECOLORE26><CBASEGIORNI27> </CBASEGIORNI27><CBASETURNI27>6</CBASETURNI27><CBASECOLORE27>-1</CBASECOLORE27><CBASEGIORNI28> </CBASEGIORNI28><CBASETURNI28>33</CBASETURNI28><CBASECOLORE28>-1</CBASECOLORE28><CBASEGIORNI29> </CBASEGIORNI29><CBASETURNI29>33</CBASETURNI29><CBASECOLORE29>-1</CBASECOLORE29><CBASEGIORNI30> </CBASEGIORNI30><CBASETURNI30>31</CBASETURNI30><CBASECOLORE30>-1</CBASECOLORE30><CBASEGIORNI31> </CBASEGIORNI31><CBASETURNI31>32</CBASETURNI31><CBASECOLORE31>-1</CBASECOLORE31></Row>\n</Rows>\n"
  },
  {
    "path": "Examples/Examples.418/Test for Alignment.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\" xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description></Description>\n  <Author></Author>\n  <PageHeight>11in</PageHeight>\n  <PageWidth>8.5in</PageWidth>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <PageHeader>\n    <Height>196.2pt</Height>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n    <ReportItems>\n      <Rectangle Name=\"Rectangle2\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>55.68pt</Height>\n        <Width>158.93pt</Width>\n        <Left>68.0pt</Left>\n        <Top>12.2pt</Top>\n        <Style>\n          <BorderStyle>\n            <Default>Outset</Default>\n            <Left>Outset</Left>\n            <Right>Outset</Right>\n            <Top>Outset</Top>\n            <Bottom>Outset</Bottom>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth>\n            <Default>6pt</Default>\n            <Left>6pt</Left>\n            <Right>6pt</Right>\n            <Top>6pt</Top>\n            <Bottom>6pt</Bottom>\n          </BorderWidth>\n          <BackgroundColor>Lightgreen</BackgroundColor>\n        </Style>\n        <ReportItems>\n          <Textbox Name=\"Textbox4\">\n            <Height>32.31pt</Height>\n            <Width>111.66pt</Width>\n            <Value>=\"TESTO 1 IN\"  + vbcrlf() +  \"BIANCO\"</Value>\n            <ZIndex>2</ZIndex>\n            <Left>23.6pt</Left>\n            <Top>11.0pt</Top>\n            <Style>\n              <BorderStyle>\n                <Default>Solid</Default>\n                <Left>Solid</Left>\n                <Right>Solid</Right>\n                <Top>Solid</Top>\n                <Bottom>Solid</Bottom>\n              </BorderStyle>\n              <BorderColor />\n              <BorderWidth />\n              <TextAlign>Center</TextAlign>\n              <VerticalAlign>Middle</VerticalAlign>\n              <BackgroundColor>White</BackgroundColor>\n              <Color>Black</Color>\n              <PaddingLeft>0pt</PaddingLeft>\n            </Style>\n            <CanGrow>true</CanGrow>\n            <CanShrink>false</CanShrink>\n          </Textbox>\n        </ReportItems>\n        <ZIndex>1</ZIndex>\n      </Rectangle>\n      <Rectangle Name=\"Rectangle1\">\n        <Height>112.82pt</Height>\n        <Width>230.31pt</Width>\n        <Left>168.30pt</Left>\n        <Top>63.46pt</Top>\n        <Style>\n          <BorderStyle>\n            <Default>Double</Default>\n            <Left>Double</Left>\n            <Right>Double</Right>\n            <Top>Double</Top>\n            <Bottom>Double</Bottom>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <ReportItems>\n          <Rectangle Name=\"Rectangle3\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n            <Height>55.68pt</Height>\n            <Width>158.93pt</Width>\n            <Left>35.69pt</Left>\n            <Top>28.57pt</Top>\n            <Style>\n              <BorderStyle>\n                <Default>Solid</Default>\n                <Left>Solid</Left>\n                <Right>Solid</Right>\n                <Top>Solid</Top>\n                <Bottom>Solid</Bottom>\n              </BorderStyle>\n              <BorderColor />\n              <BorderWidth />\n              <BackgroundColor>Lightgreen</BackgroundColor>\n            </Style>\n            <ReportItems>\n              <Textbox Name=\"Textbox2\">\n                <Height>32.31pt</Height>\n                <Width>140pt</Width>\n                <Value>=\"TESTO IN\" + VbCrlf() +\"BIANCO\"</Value>\n                <ZIndex>2</ZIndex>\n                <Left>9.46pt</Left>\n                <Top>11.69pt</Top>\n                <Style>\n                  <BorderStyle>\n                    <Default>Solid</Default>\n                    <Left>Solid</Left>\n                    <Right>Solid</Right>\n                    <Top>Solid</Top>\n                    <Bottom>Solid</Bottom>\n                  </BorderStyle>\n                  <BorderColor />\n                  <BorderWidth />\n                  <TextAlign>Center</TextAlign>\n                  <VerticalAlign>Middle</VerticalAlign>\n                  <BackgroundColor>White</BackgroundColor>\n                  <Color>Black</Color>\n                  <PaddingLeft>0pt</PaddingLeft>\n                </Style>\n              </Textbox>\n            </ReportItems>\n            <ZIndex>1</ZIndex>\n          </Rectangle>\n          <Line Name=\"Line1\">\n            <Height>0.00pt</Height>\n            <Width>72.27pt</Width>\n            <Style>\n              <BorderStyle>\n                <Default>Solid</Default>\n              </BorderStyle>\n            </Style>\n            <Left>73.40pt</Left>\n            <Top>15.4pt</Top>\n          </Line>\n        </ReportItems>\n      </Rectangle>\n      <Textbox Name=\"Textbox5\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>40.57pt</Height>\n        <Width>153.53pt</Width>\n        <Value>=\"TESTO IN\" + VbCrlf() +\"BIANCO\"</Value>\n        <ZIndex>2</ZIndex>\n        <Left>419.3pt</Left>\n        <Top>17.2pt</Top>\n        <Style>\n          <BorderStyle>\n            <Default>None</Default>\n            <Left>Solid</Left>\n            <Right>WindowInset</Right>\n            <Top>Solid</Top>\n            <Bottom>WindowInset</Bottom>\n          </BorderStyle>\n          <BorderColor>\n            <Default>Black</Default>\n            <Left>Black</Left>\n            <Right>Black</Right>\n            <Top>Black</Top>\n            <Bottom>Black</Bottom>\n          </BorderColor>\n          <BorderWidth>\n            <Default>6pt</Default>\n            <Left>1pt</Left>\n            <Right>4pt</Right>\n            <Top>1pt</Top>\n            <Bottom>4pt</Bottom>\n          </BorderWidth>\n          <TextAlign>Center</TextAlign>\n          <VerticalAlign>Middle</VerticalAlign>\n          <BackgroundColor>White</BackgroundColor>\n          <Color>Black</Color>\n          <PaddingLeft>0pt</PaddingLeft>\n          <Format>None</Format>\n          <FontSize>14pt</FontSize>\n        </Style>\n      </Textbox>\n      <Rectangle Name=\"Rectangle5\" >\n        <Height>82.13pt</Height>\n        <Width>103.91pt</Width>\n        <Left>440.40pt</Left>\n        <Top>75.28pt</Top>\n        <Style>\n          <BorderStyle>\n            <Default>Double</Default>\n            <Left>Double</Left>\n            <Right>Double</Right>\n            <Top>Double</Top>\n            <Bottom>Double</Bottom>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <ReportItems>\n          <Line Name=\"Line2\">\n            <Height>0.00pt</Height>\n            <Width>72.27pt</Width>\n            <Style>\n              <BorderStyle>\n                <Default>Solid</Default>\n              </BorderStyle>\n            </Style>\n            <Left>15.82pt</Left>\n            <Top>41.07pt</Top>\n          </Line>\n        </ReportItems>\n      </Rectangle>\n    </ReportItems>\n  </PageHeader>\n  <Body>\n    <Height>140.3pt</Height>\n    <ReportItems>\n      <Rectangle Name=\"Rectangle4\" >\n        <Height>88.88pt</Height>\n        <Width>327.41pt</Width>\n        <Left>125.38pt</Left>\n        <Top>16.8pt</Top>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n            <Left>Solid</Left>\n            <Right>Solid</Right>\n            <Top>Solid</Top>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <ReportItems>\n          <Textbox Name=\"Textbox6\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n            <Height>44.50pt</Height>\n            <Width>229.38pt</Width>\n            <Value>TESTO IN BIANCO</Value>\n            <ZIndex>2</ZIndex>\n            <Left>49.02pt</Left>\n            <Top>22.19pt</Top>\n            <Style>\n              <BorderStyle>\n                <Default>Solid</Default>\n                <Left>Solid</Left>\n                <Right>Solid</Right>\n                <Top>Solid</Top>\n                <Bottom>Solid</Bottom>\n              </BorderStyle>\n              <BorderColor />\n              <BorderWidth />\n              <TextAlign>Center</TextAlign>\n              <VerticalAlign>Middle</VerticalAlign>\n              <BackgroundColor>#FFD7EB</BackgroundColor>\n              <Color>Black</Color>\n              <PaddingLeft>8.00pt</PaddingLeft>\n            </Style>\n          </Textbox>\n        </ReportItems>\n      </Rectangle>\n    </ReportItems>\n  </Body>\n  <PageFooter>\n    <Height>73.2pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Top>12.8pt</Top>\n        <Left>5.2pt</Left>\n        <Height>12.00pt</Height>\n        <Width>216.81pt</Width>\n        <Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n</Report>"
  },
  {
    "path": "Examples/Examples.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.12.35527.113 d17.12\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{F184B08F-C81C-45F6-A57F-5ABD9991F28F}\") = \"SampleReportApp\", \"SampleApp\\SampleReportApp\\SampleReportApp.vbproj\", \"{A542F20D-0395-4969-975F-3DA1033BD433}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"SampleApp2-SetData\", \"SampleApp2-SetData\\SampleApp2-SetData\\SampleApp2-SetData.csproj\", \"{02BB9820-AA69-4581-9A20-6E0B3A08534D}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"HyperLinkExample\", \"SampleAppHyperLinkCustomAction\\HyperLinkExample\\HyperLinkExample.csproj\", \"{AEBA50E8-F52B-47C7-AF9C-13C9FD5DFBC2}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"SampleDesignerControl\", \"SampleDesignerControl\\SampleDesignerControl\\SampleDesignerControl.csproj\", \"{4988BD65-C990-43F2-89C7-2F5327E9D3E5}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"SampleDesignerControlWPF\", \"SampleDesignerControl\\SampleDesignerControlWPF\\SampleDesignerControlWPF.csproj\", \"{19497534-1C33-4D8E-8F43-F36DEA443EFC}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"SampleReportViewer\", \"Sample-Report-Viewer\\Sample-Report-Viewer\\SampleReportViewer.csproj\", \"{57E9CF37-94B6-4101-BBFC-A713077143B8}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{9E457B53-9B98-48CE-AEF0-101051735725}\"\n\tProjectSection(SolutionItems) = preProject\n\t\t.editorconfig = .editorconfig\n\tEndProjectSection\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{A542F20D-0395-4969-975F-3DA1033BD433}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A542F20D-0395-4969-975F-3DA1033BD433}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A542F20D-0395-4969-975F-3DA1033BD433}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A542F20D-0395-4969-975F-3DA1033BD433}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{02BB9820-AA69-4581-9A20-6E0B3A08534D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{02BB9820-AA69-4581-9A20-6E0B3A08534D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{02BB9820-AA69-4581-9A20-6E0B3A08534D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{02BB9820-AA69-4581-9A20-6E0B3A08534D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{AEBA50E8-F52B-47C7-AF9C-13C9FD5DFBC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{AEBA50E8-F52B-47C7-AF9C-13C9FD5DFBC2}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{AEBA50E8-F52B-47C7-AF9C-13C9FD5DFBC2}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{AEBA50E8-F52B-47C7-AF9C-13C9FD5DFBC2}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4988BD65-C990-43F2-89C7-2F5327E9D3E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4988BD65-C990-43F2-89C7-2F5327E9D3E5}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4988BD65-C990-43F2-89C7-2F5327E9D3E5}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4988BD65-C990-43F2-89C7-2F5327E9D3E5}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{19497534-1C33-4D8E-8F43-F36DEA443EFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{19497534-1C33-4D8E-8F43-F36DEA443EFC}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{19497534-1C33-4D8E-8F43-F36DEA443EFC}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{19497534-1C33-4D8E-8F43-F36DEA443EFC}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{57E9CF37-94B6-4101-BBFC-A713077143B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{57E9CF37-94B6-4101-BBFC-A713077143B8}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{57E9CF37-94B6-4101-BBFC-A713077143B8}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{57E9CF37-94B6-4101-BBFC-A713077143B8}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Examples/JsonExamples/JsonReport.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\" xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description></Description>\n  <Author></Author>\n  <PageHeight>11in</PageHeight>\n  <PageWidth>8.5in</PageWidth>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>Json</DataProvider>\n        <ConnectString>file=C:\\Users\\peter\\source\\repos\\My-FyiReporting\\RdlCreator.Tests\\NestedJsonData.json</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>columns=EmployeeID,FirstName,LastName,ContactInfo_Phone,ContactInfo_Email</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"EmployeeID\">\n          <DataField>EmployeeID</DataField>\n          <rd:TypeName>System.Text.Json.JsonElement</rd:TypeName>\n        </Field>\n        <Field Name=\"FirstName\">\n          <DataField>FirstName</DataField>\n          <rd:TypeName>System.Text.Json.JsonElement</rd:TypeName>\n        </Field>\n        <Field Name=\"LastName\">\n          <DataField>LastName</DataField>\n          <rd:TypeName>System.Text.Json.JsonElement</rd:TypeName>\n        </Field>\n        <Field Name=\"ContactInfo_Phone\">\n          <DataField>ContactInfo_Phone</DataField>\n          <rd:TypeName>System.Text.Json.JsonElement</rd:TypeName>\n        </Field>\n        <Field Name=\"ContactInfo_Email\">\n          <DataField>ContactInfo_Email</DataField>\n          <rd:TypeName>System.Text.Json.JsonElement</rd:TypeName>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>.5in</Height>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>70.2pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>148.5pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>214.1pt</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox1\">\n                      <Value>EmployeeID</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>FirstName</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>LastName</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>Phone</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value>Email</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"EmployeeID\">\n                      <Value>=Fields!EmployeeID.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"FirstName\">\n                      <Value>=Fields!FirstName.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"LastName\">\n                      <Value>=Fields!LastName.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"ContactInfo_Phone\">\n                      <Value>=Fields!ContactInfo_Phone.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"ContactInfo_Email\">\n                      <Value>=Fields!ContactInfo_Email.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n      </Table>\n    </ReportItems>\n    <Height>36pt</Height>\n  </Body>\n  <PageFooter>\n    <Height>14pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox510\">\n        <Top>1pt</Top>\n        <Left>10pt</Left>\n        <Height>12pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n</Report>"
  },
  {
    "path": "Examples/RdlEngineConfig.xml",
    "content": "<?xml version='1.0' encoding='UTF-8' ?>\n<config>\n\t<DataSources>\n\t\t<DataSource>\n\t\t\t<DataProvider>SQL</DataProvider>\n\t\t\t<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>ODBC</DataProvider>\n\t\t\t<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t\t<ReplaceParameters>true</ReplaceParameters>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>OLEDB</DataProvider>\n\t\t\t<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>Oracle</DataProvider>\n\t\t\t<CodeModule>Oracle.DataAccess.dll</CodeModule>\n\t\t\t<ClassName>Oracle.DataAccess.Client.OracleConnection</ClassName>\n\t\t\t<TableSelect>select OWNER || '.' || TABLE_NAME from ALL_TABLES WHERE TABLESPACE_NAME NOT IN ('SYSTEM', 'SYSAUX')</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>MySQL.NET</DataProvider>\n\t\t\t<CodeModule>MySql.Data.dll</CodeModule>\n\t\t\t<ClassName>MySql.Data.MySqlClient.MySqlConnection</ClassName>\n\t\t\t<TableSelect>show tables</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t\t<ReplaceParameters>true</ReplaceParameters>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>Firebird.NET</DataProvider>\n\t\t\t<CodeModule>FirebirdSql.Data.Firebird.dll</CodeModule>\n\t\t\t<ClassName>FirebirdSql.Data.Firebird.FbConnection</ClassName>\n\t\t\t<TableSelect>SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$RELATION_NAME NOT LIKE 'RDB$%' ORDER BY 1</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>Firebird.NET 2.0</DataProvider> \n\t\t    \t<CodeModule>FirebirdSql.Data.FirebirdClient.dll</CodeModule> \n\t\t    \t<ClassName>FirebirdSql.Data.FirebirdClient.FbConnection</ClassName> \n\t\t    \t<TableSelect>SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0 ORDER BY 1</TableSelect> \n\t\t    \t<Interface>SQL</Interface> \n\t\t</DataSource> \n\t\t<DataSource> \n    \t\t\t<DataProvider>SQLite</DataProvider> \n\t\t    \t<CodeModule>System.Data.SQLite.DLL</CodeModule> \n\t\t    \t<ClassName>System.Data.SQLite.SQLiteConnection</ClassName> \n\t\t    \t<TableSelect>SELECT name FROM sqlite_master WHERE type = \"table\"</TableSelect> \n\t\t    \t<Interface>SQL</Interface> \n\t\t</DataSource> \n\t\t<DataSource>\n\t\t\t<DataProvider>iAnywhere.NET</DataProvider>\n\t\t\t<CodeModule>iAnywhere.Data.AsaClient.dll</CodeModule>\n\t\t\t<ClassName>iAnywhere.Data.AsaClient.AsaConnection</ClassName>\n\t\t\t<TableSelect>select table_name from systable \n\t\t\t\t\twhere table_type = 'BASE' and table_name not like 'SYS%' \n\t\t\t\t\t\t\tand table_name not like 'ix_%' \n\t\t\t\t\t\t\tand table_name not like 'ml_%'\n\t\t\t\t\t\t\tand table_name not like 'ul_%'\n\t\t\t\t\t\t\tand table_name not like 'rl_%'\n\t\t\t\t\t\t\tand table_name not like 'rs_%'\n\t\t\t\t\t\t\tand table_name not like 'migrate_%'\n\t\t\t\t\t\t\tand table_name not like 'spt_%'\n\t\t\t\t\t\t\tand table_name not like 'jdbc_%'\n\t\t\t\t\t\t\tand table_name not in ('DUMMY', 'RowGenerator', 'EXCLUDEOBJECT') \n\t\t\t</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>XML</DataProvider>\n\t\t\t<CodeModule>DataProviders.dll</CodeModule>\n\t\t\t<ClassName>fyiReporting.Data.XmlConnection</ClassName>\n\t\t\t<TableSelect></TableSelect>\n\t\t\t<Interface>File</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>WebService</DataProvider>\n\t\t\t<CodeModule>DataProviders.dll</CodeModule>\n\t\t\t<ClassName>fyiReporting.Data.WebServiceConnection</ClassName>\n\t\t\t<TableSelect></TableSelect>\n\t\t\t<Interface>WebService</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>WebLog</DataProvider>\n\t\t\t<CodeModule>DataProviders.dll</CodeModule>\n\t\t\t<ClassName>fyiReporting.Data.LogConnection</ClassName>\n\t\t\t<TableSelect></TableSelect>\n\t\t\t<Interface>File</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>Text</DataProvider>\n\t\t\t<CodeModule>DataProviders.dll</CodeModule>\n\t\t\t<ClassName>fyiReporting.Data.TxtConnection</ClassName>\n\t\t\t<TableSelect></TableSelect>\n\t\t\t<Interface>File</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>iTunes</DataProvider>\n\t\t\t<CodeModule>DataProviders.dll</CodeModule>\n\t\t\t<ClassName>fyiReporting.Data.iTunesConnection</ClassName>\n\t\t\t<TableSelect></TableSelect>\n\t\t\t<Interface>File</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>FileDirectory</DataProvider>\n\t\t\t<CodeModule>DataProviders.dll</CodeModule>\n\t\t\t<ClassName>fyiReporting.Data.FileDirConnection</ClassName>\n\t\t\t<TableSelect></TableSelect>\n\t\t\t<Interface>File</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>OracleSp</DataProvider>\n\t\t\t<CodeModule>OracleSp.dll</CodeModule>\n\t\t\t<ClassName>fyiReporting.OracleSp.OracleSpConnection</ClassName>\n\t\t\t<TableSelect>select OWNER || '.' || TABLE_NAME from ALL_TABLES WHERE TABLESPACE_NAME NOT IN ('SYSTEM', 'SYSAUX')</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n    <DataSource> \n      <DataProvider>PostgreSQL</DataProvider> \n      <CodeModule>Npgsql.dll</CodeModule> \n      <ClassName>Npgsql.NpgsqlConnection</ClassName> \n      <TableSelect>SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE 'pg_%' ORDER BY 1</TableSelect> \n      <Interface>SQL</Interface> \n    </DataSource>\n\t</DataSources>\n\t<Compression>\n\t\t<CodeModule>ICSharpCode.SharpZipLib.dll</CodeModule>\n\t\t<ClassName>ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream</ClassName>\n\t\t<Finish>Finish</Finish>\n\t\t<Enable>true</Enable>\n\t</Compression>\n  <CustomReportItems>\n    <CustomReportItem>\n      <Type>BarCode EAN-13</Type>\n      <CodeModule>RdlCri.dll</CodeModule>\n      <ClassName>fyiReporting.CRI.BarCodeEAN13</ClassName>\n    </CustomReportItem>\n    <CustomReportItem>\n      <Type>BarCode Bookland</Type>\n      <CodeModule>RdlCri.dll</CodeModule>\n      <ClassName>fyiReporting.CRI.BarCodeBookland</ClassName>\n    </CustomReportItem>\n  </CustomReportItems>\n</config>"
  },
  {
    "path": "Examples/Readme.txt",
    "content": "northwindEF.db is a sqlite 3 sample database."
  },
  {
    "path": "Examples/Sample-Report-Viewer/Sample-Report-Viewer/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.8\"/>\n    </startup>\n</configuration>\n"
  },
  {
    "path": "Examples/Sample-Report-Viewer/Sample-Report-Viewer/Form1.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\nusing System.Drawing.Printing;\nusing Microsoft.Data.Sqlite;\n\nnamespace SampleApp2_SetData\n{\n    public class Form1 : Form\n    {\n        private Majorsilence.Reporting.RdlViewer.RdlViewer rdlViewer1;\n        private Majorsilence.Reporting.RdlViewer.ViewerToolstrip reportStrip;\n\n        public Form1()\n        {\n            InitializeComponent();\n        }\n\n        private void InitializeViewer()\n        {\n            this.rdlViewer1 = new Majorsilence.Reporting.RdlViewer.RdlViewer();\n            this.rdlViewer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)\n            | System.Windows.Forms.AnchorStyles.Left)\n            | System.Windows.Forms.AnchorStyles.Right)));\n\n            this.rdlViewer1.Location = new System.Drawing.Point(40, 69);\n            this.rdlViewer1.Name = \"rdlViewer1\";\n\n            this.rdlViewer1.Size = new System.Drawing.Size(731, 381);\n        }\n\n        private void InitializeComponent()\n        {\n            InitializeViewer();\n\n            reportStrip = new Majorsilence.Reporting.RdlViewer.ViewerToolstrip(rdlViewer1);\n            //reportStrip.Location = new Point(0, 0);\n            this.Controls.Add(reportStrip);\n\n            this.SuspendLayout();\n\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(852, 462);\n            this.Controls.Add(this.rdlViewer1);\n            this.Name = \"Form1\";\n            this.Text = \"Form1\";\n            this.ResumeLayout(false);\n        }\n    }\n}\n"
  },
  {
    "path": "Examples/Sample-Report-Viewer/Sample-Report-Viewer/Form1.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Examples/Sample-Report-Viewer/Sample-Report-Viewer/GlobalSuppressions.cs",
    "content": "﻿// This file is used by Code Analysis to maintain SuppressMessage\n// attributes that are applied to this project.\n// Project-level suppressions either have no target or are given\n// a specific target and scoped to a namespace, type, member, etc.\n\nusing System.Diagnostics.CodeAnalysis;\n\n#if !DRAWINGCOMPAT\n[assembly: SuppressMessage(\"Interoperability\", \"CA1416:Validate platform compatibility\",\n    Justification = \"System.Drawing usage is intentional\")]\n#endif\n"
  },
  {
    "path": "Examples/Sample-Report-Viewer/Sample-Report-Viewer/Program.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\n\nnamespace SampleApp2_SetData\n{\n    static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            Application.EnableVisualStyles();\n            Application.SetCompatibleTextRenderingDefault(false);\n            Application.Run(new Form1());\n        }\n    }\n}\n"
  },
  {
    "path": "Examples/Sample-Report-Viewer/Sample-Report-Viewer/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace SampleApp2_SetData.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"SampleApp2_SetData.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Examples/Sample-Report-Viewer/Sample-Report-Viewer/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Examples/Sample-Report-Viewer/Sample-Report-Viewer/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace SampleApp2_SetData.Properties {\n    \n    \n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"17.9.0.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\n        \n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n        \n        public static Settings Default {\n            get {\n                return defaultInstance;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Examples/Sample-Report-Viewer/Sample-Report-Viewer/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>\n"
  },
  {
    "path": "Examples/Sample-Report-Viewer/Sample-Report-Viewer/SampleApp2-TestReport.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\" xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>11in</PageHeight>\n  <PageWidth>8.5in</PageWidth>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQLite</DataProvider>\n        <ConnectString>Data Source=C:\\Path\\Does\\Not\\Exist\\northwindEF.db;Version=3;Pooling=True;Max Pool Size=100;</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT CategoryID, CategoryName, Description FROM Categories</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"CategoryID\">\n          <DataField>CategoryID</DataField>\n          <rd:TypeName>System.Int64</rd:TypeName>\n        </Field>\n        <Field Name=\"CategoryName\">\n          <DataField>CategoryName</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Description\">\n          <DataField>Description</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>.5in</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Top>.1in</Top>\n        <Left>.1in</Left>\n        <Width>6in</Width>\n        <Height>.25in</Height>\n        <Value>Test Data Set Report</Value>\n        <Style>\n          <FontSize>15pt</FontSize>\n          <FontWeight>Bold</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>1.25in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.5in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.375in</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>CategoryID</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>CategoryName</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>Description</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"CategoryID\">\n                      <Value>=Fields!CategoryID.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"CategoryName\">\n                      <Value>=Fields!CategoryName.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Description\">\n                      <Value>=Fields!Description.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n      </Table>\n    </ReportItems>\n    <Height>36pt</Height>\n  </Body>\n  <PageFooter>\n    <Height>14pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox5\">\n        <Top>1pt</Top>\n        <Left>10pt</Left>\n        <Height>12pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n</Report>"
  },
  {
    "path": "Examples/Sample-Report-Viewer/Sample-Report-Viewer/SampleReportViewer.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net8.0-windows</TargetFramework>\n    <OutputType>WinExe</OutputType>\n    <RootNamespace>SampleApp2_SetData</RootNamespace>\n    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>\n    <UseWindowsForms>true</UseWindowsForms>\n    <ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>\n  </PropertyGroup>\n  <ItemGroup>\n    <None Update=\"SampleApp2-TestReport.rdl\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n\t<ItemGroup>\n\t\t<Content Include=\"..\\..\\..\\RdlEngine\\RdlEngineConfig.xml\" Link=\"RdlEngineConfig.xml\">\n\t\t\t<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t\t</Content>\n\t</ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Data.Sqlite\" />\n\t<PackageReference Include=\"Majorsilence.Reporting.RdlViewer\" />\n\t<PackageReference Include=\"Majorsilence.Reporting.RdlCri\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Examples/Sample-Report-Viewer/SampleApp2-SetData.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Express 2012 for Windows Desktop\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"SampleApp2-SetData\", \"SampleApp2-SetData\\SampleApp2-SetData.csproj\", \"{8711F55E-AC2F-496C-B316-3A5AA9FD0824}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DataProviders\", \"..\\..\\DataProviders\\DataProviders.csproj\", \"{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlCri\", \"..\\..\\RdlCri\\RdlCri.csproj\", \"{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlEngine\", \"..\\..\\RdlEngine\\RdlEngine.csproj\", \"{C97E91F4-B310-44E2-9B6C-96775395722D}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlViewer\", \"..\\..\\RdlViewer\\RdlViewer.csproj\", \"{D99145B1-CB6C-41F5-BA86-723325145FB5}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|x86.Build.0 = Debug|x86\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x64.Build.0 = Debug|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.Build.0 = Debug|x86\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x64.ActiveCfg = Release|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x64.Build.0 = Release|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.ActiveCfg = Release|x86\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.Build.0 = Release|x86\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x64.Build.0 = Debug|x64\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x86.Build.0 = Debug|x86\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x64.ActiveCfg = Release|x64\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x64.Build.0 = Release|x64\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x86.ActiveCfg = Release|x86\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x86.Build.0 = Release|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.Build.0 = Debug|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.Build.0 = Debug|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.ActiveCfg = Release|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.Build.0 = Release|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.ActiveCfg = Release|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.Build.0 = Release|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x64.Build.0 = Debug|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x86.Build.0 = Debug|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x64.ActiveCfg = Release|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x64.Build.0 = Release|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x86.ActiveCfg = Release|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x86.Build.0 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Examples/SampleApp/SampleReportApp/Form1.Designer.vb",
    "content": "﻿<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _\nPartial Class Form1\n    Inherits System.Windows.Forms.Form\n\n    'Form overrides dispose to clean up the component list.\n    <System.Diagnostics.DebuggerNonUserCode()> _\n    Protected Overrides Sub Dispose(ByVal disposing As Boolean)\n        Try\n            If disposing AndAlso components IsNot Nothing Then\n                components.Dispose()\n            End If\n        Finally\n            MyBase.Dispose(disposing)\n        End Try\n    End Sub\n\n    'Required by the Windows Form Designer\n    Private components As System.ComponentModel.IContainer\n\n    'NOTE: The following procedure is required by the Windows Form Designer\n    'It can be modified using the Windows Form Designer.  \n    'Do not modify it using the code editor.\n    <System.Diagnostics.DebuggerStepThrough()> _\n    Private Sub InitializeComponent()\n        Me.RdlViewer1 = New Majorsilence.Reporting.RdlViewer.RdlViewer()\n        Me.Label1 = New System.Windows.Forms.Label()\n        Me.TextBox1 = New System.Windows.Forms.TextBox()\n        Me.ButtonSelectReport = New System.Windows.Forms.Button()\n        Me.ButtonReloadReport = New System.Windows.Forms.Button()\n        Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog()\n        Me.SuspendLayout()\n        '\n        'RdlViewer1\n        '\n        Me.RdlViewer1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _\n            Or System.Windows.Forms.AnchorStyles.Left) _\n            Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)\n        Me.RdlViewer1.Cursor = System.Windows.Forms.Cursors.Default\n        Me.RdlViewer1.Folder = Nothing\n        Me.RdlViewer1.HighlightAll = False\n        Me.RdlViewer1.HighlightAllColor = System.Drawing.Color.Fuchsia\n        Me.RdlViewer1.HighlightCaseSensitive = False\n        Me.RdlViewer1.HighlightItemColor = System.Drawing.Color.Aqua\n        Me.RdlViewer1.HighlightPageItem = Nothing\n        Me.RdlViewer1.HighlightText = Nothing\n        Me.RdlViewer1.Location = New System.Drawing.Point(15, 86)\n        Me.RdlViewer1.Name = \"RdlViewer1\"\n        Me.RdlViewer1.PageCurrent = 1\n        Me.RdlViewer1.Parameters = \"\"\n        Me.RdlViewer1.ReportName = Nothing\n        Me.RdlViewer1.ScrollMode = Majorsilence.Reporting.RdlViewer.ScrollModeEnum.Continuous\n        Me.RdlViewer1.SelectTool = False\n        Me.RdlViewer1.ShowFindPanel = False\n        Me.RdlViewer1.ShowParameterPanel = True\n        Me.RdlViewer1.ShowWaitDialog = True\n        Me.RdlViewer1.Size = New System.Drawing.Size(642, 295)\n        Me.RdlViewer1.TabIndex = 0\n        Me.RdlViewer1.UseTrueMargins = True\n        Me.RdlViewer1.Zoom = 0.7681401!\n        Me.RdlViewer1.ZoomMode = Majorsilence.Reporting.RdlViewer.ZoomEnum.FitWidth\n        '\n        'Label1\n        '\n        Me.Label1.AutoSize = True\n        Me.Label1.Location = New System.Drawing.Point(12, 13)\n        Me.Label1.Name = \"Label1\"\n        Me.Label1.Size = New System.Drawing.Size(110, 13)\n        Me.Label1.TabIndex = 1\n        Me.Label1.Text = \"Set Connection String\"\n        '\n        'TextBox1\n        '\n        Me.TextBox1.Location = New System.Drawing.Point(157, 10)\n        Me.TextBox1.Name = \"TextBox1\"\n        Me.TextBox1.Size = New System.Drawing.Size(470, 20)\n        Me.TextBox1.TabIndex = 2\n        '\n        'ButtonSelectReport\n        '\n        Me.ButtonSelectReport.Location = New System.Drawing.Point(12, 47)\n        Me.ButtonSelectReport.Name = \"ButtonSelectReport\"\n        Me.ButtonSelectReport.Size = New System.Drawing.Size(141, 23)\n        Me.ButtonSelectReport.TabIndex = 3\n        Me.ButtonSelectReport.Text = \"Select Report\"\n        Me.ButtonSelectReport.UseVisualStyleBackColor = True\n        '\n        'ButtonReloadReport\n        '\n        Me.ButtonReloadReport.Location = New System.Drawing.Point(176, 47)\n        Me.ButtonReloadReport.Name = \"ButtonReloadReport\"\n        Me.ButtonReloadReport.Size = New System.Drawing.Size(141, 23)\n        Me.ButtonReloadReport.TabIndex = 4\n        Me.ButtonReloadReport.Text = \"Reload Report\"\n        Me.ButtonReloadReport.UseVisualStyleBackColor = True\n        '\n        'OpenFileDialog1\n        '\n        Me.OpenFileDialog1.FileName = \"OpenFileDialog1\"\n        '\n        'Form1\n        '\n        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)\n        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font\n        Me.ClientSize = New System.Drawing.Size(669, 393)\n        Me.Controls.Add(Me.ButtonReloadReport)\n        Me.Controls.Add(Me.ButtonSelectReport)\n        Me.Controls.Add(Me.TextBox1)\n        Me.Controls.Add(Me.Label1)\n        Me.Controls.Add(Me.RdlViewer1)\n        Me.Name = \"Form1\"\n        Me.Text = \"Sample Report App\"\n        Me.ResumeLayout(False)\n        Me.PerformLayout()\n\n    End Sub\n    Friend WithEvents RdlViewer1 As Majorsilence.Reporting.RdlViewer.RdlViewer\n    Friend WithEvents Label1 As System.Windows.Forms.Label\n    Friend WithEvents TextBox1 As System.Windows.Forms.TextBox\n    Friend WithEvents ButtonSelectReport As System.Windows.Forms.Button\n    Friend WithEvents ButtonReloadReport As System.Windows.Forms.Button\n    Friend WithEvents OpenFileDialog1 As System.Windows.Forms.OpenFileDialog\n\nEnd Class\n"
  },
  {
    "path": "Examples/SampleApp/SampleReportApp/Form1.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"OpenFileDialog1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "Examples/SampleApp/SampleReportApp/Form1.vb",
    "content": "﻿Public Class Form1\n\n    Private file As String\n\n    Private Sub ButtonSelectReport_Click(sender As Object, e As EventArgs) Handles ButtonSelectReport.Click\n\n        If OpenFileDialog1.ShowDialog = System.Windows.Forms.DialogResult.OK Then\n\n            file = OpenFileDialog1.FileName\n\n        End If\n\n    End Sub\n\n    Private Async Sub ButtonReloadReport_Click(sender As Object, e As EventArgs) Handles ButtonReloadReport.Click\n        Await RdlViewer1.SetSourceFile(New Uri(file))\n        RdlViewer1.Parameters = \"ConnectionString=\" & TextBox1.Text\n        Await RdlViewer1.Rebuild()\n    End Sub\n\n\n    Private Sub RdlViewer1_PageNavigation(sender As Object, e As Majorsilence.Reporting.RdlViewer.PageNavigationEventArgs) Handles RdlViewer1.PageNavigation\n        MessageBox.Show(e.NewPage)\n    End Sub\nEnd Class\n"
  },
  {
    "path": "Examples/SampleApp/SampleReportApp/GlobalSuppressions.vb",
    "content": "﻿' This file is used by Code Analysis to maintain SuppressMessage\n' attributes that are applied to this project.\n' Project-level suppressions either have no target or are given\n' a specific target and scoped to a namespace, type, member, etc.\n\nImports System.Diagnostics.CodeAnalysis\n\n<Assembly: SuppressMessage(\"Interoperability\", \"CA1416:Validate platform compatibility\", Justification:=\"System.Drawing usage is intentional\")>\n"
  },
  {
    "path": "Examples/SampleApp/SampleReportApp/My Project/Application.Designer.vb",
    "content": "﻿'------------------------------------------------------------------------------\n' <auto-generated>\n'     This code was generated by a tool.\n'     Runtime Version:4.0.30319.42000\n'\n'     Changes to this file may cause incorrect behavior and will be lost if\n'     the code is regenerated.\n' </auto-generated>\n'------------------------------------------------------------------------------\n\nOption Strict On\nOption Explicit On\n\n\nNamespace My\n    \n    'NOTE: This file is auto-generated; do not modify it directly.  To make changes,\n    ' or if you encounter build errors in this file, go to the Project Designer\n    ' (go to Project Properties or double-click the My Project node in\n    ' Solution Explorer), and make changes on the Application tab.\n    '\n    Partial Friend Class MyApplication\n        \n        <Global.System.Diagnostics.DebuggerStepThroughAttribute()>  _\n        Public Sub New()\n            MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)\n            Me.IsSingleInstance = false\n            Me.EnableVisualStyles = true\n            Me.SaveMySettingsOnExit = true\n            Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses\n        End Sub\n        \n        <Global.System.Diagnostics.DebuggerStepThroughAttribute()>  _\n        Protected Overrides Sub OnCreateMainForm()\n            Me.MainForm = Global.SampleReportApp.Form1\n        End Sub\n        \n        <Global.System.Diagnostics.DebuggerStepThroughAttribute()>  _\n        Protected Overrides Function OnInitialize(ByVal commandLineArgs As System.Collections.ObjectModel.ReadOnlyCollection(Of String)) As Boolean\n            Me.MinimumSplashScreenDisplayTime = 0\n            Return MyBase.OnInitialize(commandLineArgs)\n        End Function\n    End Class\nEnd Namespace\n"
  },
  {
    "path": "Examples/SampleApp/SampleReportApp/My Project/Application.myapp",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<MyApplicationData xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <MySubMain>true</MySubMain>\n  <MainForm>Form1</MainForm>\n  <SingleInstance>false</SingleInstance>\n  <ShutdownMode>0</ShutdownMode>\n  <EnableVisualStyles>true</EnableVisualStyles>\n  <AuthenticationMode>0</AuthenticationMode>\n  <ApplicationType>0</ApplicationType>\n  <SaveMySettingsOnExit>true</SaveMySettingsOnExit>\n</MyApplicationData>\n"
  },
  {
    "path": "Examples/SampleApp/SampleReportApp/My Project/AssemblyInfo.vb",
    "content": "﻿Imports System\nImports System.Reflection\nImports System.Runtime.InteropServices\n\n' General Information about an assembly is controlled through the following \n' set of attributes. Change these attribute values to modify the information\n' associated with an assembly.\n\n' Review the values of the assembly attributes\n\n<Assembly: AssemblyTitle(\"SampleReportApp\")> \n<Assembly: AssemblyDescription(\"\")> \n<Assembly: AssemblyCompany(\"\")> \n<Assembly: AssemblyProduct(\"SampleReportApp\")> \n<Assembly: AssemblyCopyright(\"Copyright ©  2012\")> \n<Assembly: AssemblyTrademark(\"\")> \n\n<Assembly: ComVisible(False)>\n\n'The following GUID is for the ID of the typelib if this project is exposed to COM\n<Assembly: Guid(\"5c3a73b8-b185-4826-8b75-1551e317b80c\")> \n\n' Version information for an assembly consists of the following four values:\n'\n'      Major Version\n'      Minor Version \n'      Build Number\n'      Revision\n'\n' You can specify all the values or you can default the Build and Revision Numbers \n' by using the '*' as shown below:\n' <Assembly: AssemblyVersion(\"1.0.*\")> \n\n<Assembly: AssemblyVersion(\"1.0.0.0\")> \n<Assembly: AssemblyFileVersion(\"1.0.0.0\")> \n"
  },
  {
    "path": "Examples/SampleApp/SampleReportApp/My Project/Resources.Designer.vb",
    "content": "﻿'------------------------------------------------------------------------------\n' <auto-generated>\n'     This code was generated by a tool.\n'     Runtime Version:4.0.30319.42000\n'\n'     Changes to this file may cause incorrect behavior and will be lost if\n'     the code is regenerated.\n' </auto-generated>\n'------------------------------------------------------------------------------\n\nOption Strict On\nOption Explicit On\n\nImports System\n\nNamespace My.Resources\n    \n    'This class was auto-generated by the StronglyTypedResourceBuilder\n    'class via a tool like ResGen or Visual Studio.\n    'To add or remove a member, edit your .ResX file then rerun ResGen\n    'with the /str option, or rebuild your VS project.\n    '''<summary>\n    '''  A strongly-typed resource class, for looking up localized strings, etc.\n    '''</summary>\n    <Global.System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\"),  _\n     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _\n     Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(),  _\n     Global.Microsoft.VisualBasic.HideModuleNameAttribute()>  _\n    Friend Module Resources\n        \n        Private resourceMan As Global.System.Resources.ResourceManager\n        \n        Private resourceCulture As Global.System.Globalization.CultureInfo\n        \n        '''<summary>\n        '''  Returns the cached ResourceManager instance used by this class.\n        '''</summary>\n        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _\n        Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager\n            Get\n                If Object.ReferenceEquals(resourceMan, Nothing) Then\n                    Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager(\"SampleReportApp.Resources\", GetType(Resources).Assembly)\n                    resourceMan = temp\n                End If\n                Return resourceMan\n            End Get\n        End Property\n        \n        '''<summary>\n        '''  Overrides the current thread's CurrentUICulture property for all\n        '''  resource lookups using this strongly typed resource class.\n        '''</summary>\n        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _\n        Friend Property Culture() As Global.System.Globalization.CultureInfo\n            Get\n                Return resourceCulture\n            End Get\n            Set\n                resourceCulture = value\n            End Set\n        End Property\n    End Module\nEnd Namespace\n"
  },
  {
    "path": "Examples/SampleApp/SampleReportApp/My Project/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Examples/SampleApp/SampleReportApp/My Project/Settings.Designer.vb",
    "content": "﻿'------------------------------------------------------------------------------\n' <auto-generated>\n'     This code was generated by a tool.\n'     Runtime Version:4.0.30319.42000\n'\n'     Changes to this file may cause incorrect behavior and will be lost if\n'     the code is regenerated.\n' </auto-generated>\n'------------------------------------------------------------------------------\n\nOption Strict On\nOption Explicit On\n\n\nNamespace My\n    \n    <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(),  _\n     Global.System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"17.9.0.0\"),  _\n     Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _\n    Partial Friend NotInheritable Class MySettings\n        Inherits Global.System.Configuration.ApplicationSettingsBase\n        \n        Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)\n        \n#Region \"My.Settings Auto-Save Functionality\"\n#If _MyType = \"WindowsForms\" Then\n    Private Shared addedHandler As Boolean\n\n    Private Shared addedHandlerLockObject As New Object\n\n    <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _\n    Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs)\n        If My.Application.SaveMySettingsOnExit Then\n            My.Settings.Save()\n        End If\n    End Sub\n#End If\n#End Region\n        \n        Public Shared ReadOnly Property [Default]() As MySettings\n            Get\n                \n#If _MyType = \"WindowsForms\" Then\n               If Not addedHandler Then\n                    SyncLock addedHandlerLockObject\n                        If Not addedHandler Then\n                            AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings\n                            addedHandler = True\n                        End If\n                    End SyncLock\n                End If\n#End If\n                Return defaultInstance\n            End Get\n        End Property\n    End Class\nEnd Namespace\n\nNamespace My\n    \n    <Global.Microsoft.VisualBasic.HideModuleNameAttribute(),  _\n     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _\n     Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()>  _\n    Friend Module MySettingsProperty\n        \n        <Global.System.ComponentModel.Design.HelpKeywordAttribute(\"My.Settings\")>  _\n        Friend ReadOnly Property Settings() As Global.SampleReportApp.My.MySettings\n            Get\n                Return Global.SampleReportApp.My.MySettings.Default\n            End Get\n        End Property\n    End Module\nEnd Namespace\n"
  },
  {
    "path": "Examples/SampleApp/SampleReportApp/My Project/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\" UseMySettingsClassName=\"true\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>\n"
  },
  {
    "path": "Examples/SampleApp/SampleReportApp/SampleReportApp.vbproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net8.0-windows</TargetFramework>\n    <OutputType>WinExe</OutputType>\n    <StartupObject>SampleReportApp.My.MyApplication</StartupObject>\n    <MyType>WindowsForms</MyType>\n    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>\n    <UseWindowsForms>true</UseWindowsForms>\n    <ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>\n  </PropertyGroup>\n  <ItemGroup>\n    <Import Include=\"System.Drawing\" />\n    <Import Include=\"System.Windows.Forms\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Update=\"My Project\\Application.Designer.vb\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Application.myapp</DependentUpon>\n      <DesignTime>True</DesignTime>\n    </Compile>\n    <Compile Update=\"My Project\\Resources.Designer.vb\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n    <Compile Update=\"My Project\\Settings.Designer.vb\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Settings.settings</DependentUpon>\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Update=\"My Project\\Application.myapp\">\n      <Generator>MyApplicationCodeGenerator</Generator>\n      <LastGenOutput>Application.Designer.vb</LastGenOutput>\n    </None>\n  </ItemGroup>\n\t<ItemGroup>\n\t\t<Content Include=\"..\\..\\..\\RdlEngine\\RdlEngineConfig.xml\" Link=\"RdlEngineConfig.xml\">\n\t\t\t<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t\t</Content>\n\t</ItemGroup>\n  <ItemGroup>\n\t<PackageReference Include=\"Majorsilence.Reporting.RdlViewer\" />\n    <PackageReference Include=\"Microsoft.Data.Sqlite\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Examples/SampleApp/SampleReportApp/app.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <configSections>\n    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->\n    <section name=\"entityFramework\" type=\"System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" requirePermission=\"false\"/>\n  </configSections>\n  <system.data>\n    <!--\n        NOTE: The extra \"remove\" element below is to prevent the design-time\n              support components within EF6 from selecting the legacy ADO.NET\n              provider for SQLite (i.e. the one without any EF6 support).  It\n              appears to only consider the first ADO.NET provider in the list\n              within the resulting \"app.config\" or \"web.config\" file.\n    -->\n    <DbProviderFactories>\n      <add name=\"SQLite Data Provider\" invariant=\"System.Data.SQLite\" description=\".NET Framework Data Provider for SQLite\" type=\"System.Data.SQLite.SQLiteFactory, System.Data.SQLite\"/>\n      <remove invariant=\"System.Data.SQLite\"/>\n      <remove invariant=\"System.Data.SQLite.EF6\"/>\n      <add name=\"SQLite Data Provider (Entity Framework 6)\" invariant=\"System.Data.SQLite.EF6\" description=\".NET Framework Data Provider for SQLite (Entity Framework 6)\" type=\"System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6\"/>\n    </DbProviderFactories>\n  </system.data>\n  <entityFramework>\n    <defaultConnectionFactory type=\"System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework\">\n      <parameters>\n        <parameter value=\"mssqllocaldb\"/>\n      </parameters>\n    </defaultConnectionFactory>\n    <providers>\n      <provider invariantName=\"System.Data.SqlClient\" type=\"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer\"/>\n      <provider invariantName=\"System.Data.SQLite.EF6\" type=\"System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6\"/>\n    </providers>\n  </entityFramework>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"zxing\" publicKeyToken=\"4e88037ac681fe60\" culture=\"neutral\"/>\n        <bindingRedirect oldVersion=\"0.0.0.0-0.14.0.0\" newVersion=\"0.14.0.0\"/>\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.8\"/></startup></configuration>\n"
  },
  {
    "path": "Examples/SampleApp/SampleReportApp.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nVisualStudioVersion = 12.0.31101.0\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{F184B08F-C81C-45F6-A57F-5ABD9991F28F}\") = \"SampleReportApp\", \"SampleReportApp\\SampleReportApp.vbproj\", \"{A542F20D-0395-4969-975F-3DA1033BD433}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{A542F20D-0395-4969-975F-3DA1033BD433}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A542F20D-0395-4969-975F-3DA1033BD433}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A542F20D-0395-4969-975F-3DA1033BD433}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{A542F20D-0395-4969-975F-3DA1033BD433}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{A542F20D-0395-4969-975F-3DA1033BD433}.Debug|x86.Build.0 = Debug|x86\n\t\t{A542F20D-0395-4969-975F-3DA1033BD433}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A542F20D-0395-4969-975F-3DA1033BD433}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{A542F20D-0395-4969-975F-3DA1033BD433}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{A542F20D-0395-4969-975F-3DA1033BD433}.Release|x86.ActiveCfg = Release|x86\n\t\t{A542F20D-0395-4969-975F-3DA1033BD433}.Release|x86.Build.0 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Examples/SampleApp2-SetData/SampleApp2-SetData/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.8\"/>\n    </startup>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"zxing\" publicKeyToken=\"4e88037ac681fe60\" culture=\"neutral\"/>\n        <bindingRedirect oldVersion=\"0.0.0.0-0.14.0.0\" newVersion=\"0.14.0.0\"/>\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>\n"
  },
  {
    "path": "Examples/SampleApp2-SetData/SampleApp2-SetData/Form1.Designer.cs",
    "content": "﻿namespace SampleApp2_SetData\n{\n    partial class Form1\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            SuspendLayout();\n            // \n            // Form1\n            // \n            AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);\n            AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            ClientSize = new System.Drawing.Size(994, 533);\n            Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);\n            Name = \"Form1\";\n            Text = \"Form1\";\n            Load += Form1_Load;\n            ResumeLayout(false);\n        }\n\n        #endregion\n    }\n}\n\n"
  },
  {
    "path": "Examples/SampleApp2-SetData/SampleApp2-SetData/Form1.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\nusing Microsoft.Data.Sqlite;\n\nnamespace SampleApp2_SetData\n{\n    public partial class Form1 : Form\n    {\n        private Majorsilence.Reporting.RdlViewer.RdlViewer rdlViewerSourceRdlNoLoad;\n        private Majorsilence.Reporting.RdlViewer.RdlViewer rdlViewerSetSource;\n\n        public Form1()\n        {\n            InitializeComponent();\n            var split = new SplitContainer();\n            split.Dock = DockStyle.Fill;\n            this.Controls.Add(split);\n\n            rdlViewerSourceRdlNoLoad = new Majorsilence.Reporting.RdlViewer.RdlViewer();\n            rdlViewerSourceRdlNoLoad.Dock = DockStyle.Fill;\n            split.Panel1.Controls.Add(rdlViewerSourceRdlNoLoad);\n            rdlViewerSetSource = new Majorsilence.Reporting.RdlViewer.RdlViewer();\n            rdlViewerSetSource.Dock = DockStyle.Fill;\n            split.Panel2.Controls.Add(rdlViewerSetSource);\n            \n            // 50% left, 50% right\n            split.SplitterDistance = split.Width / 2;\n        }\n\n        private async void Form1_Load(object sender, EventArgs e)\n        {\n            // TODO: You must change this connection string to match where your database is\n            string sqlFile = System.IO.Path.Combine(AppContext.BaseDirectory, @\"..\\\", @\"..\\\", @\"..\\\",\n                @\"..\\\", @\"..\\\", \"northwindEF.db\");\n            string connectionString = $\"Data Source={sqlFile}\";\n\n            using SqliteConnection cn = new SqliteConnection(connectionString);\n            using SqliteCommand cmd = new SqliteCommand();\n            cmd.CommandType = CommandType.Text;\n            cmd.CommandText = \"SELECT CategoryID, CategoryName, Description FROM Categories;\";\n            cmd.Connection = cn;\n            DataTable dt = await GetTable(cmd);\n\n            string filepath =\n                System.IO.Path.Combine(AppContext.BaseDirectory, \"SampleApp2-TestReport.rdl\");\n\n            await ExampleViaSourceRdlNoLoad(filepath, dt);\n            await ExampleViaSetSourceFile(filepath, dt);\n        }\n\n        private async Task ExampleViaSourceRdlNoLoad(string filepath, DataTable dt)\n        {\n            rdlViewerSourceRdlNoLoad.SourceRdlNoLoad = await System.IO.File.ReadAllTextAsync(filepath);\n            rdlViewerSourceRdlNoLoad.Parameters = \"\";\n            var rpt = await rdlViewerSourceRdlNoLoad.Report();\n            await rpt.DataSets[\"Data\"].SetData(dt);\n            await rdlViewerSourceRdlNoLoad.Rebuild();\n        }\n\n        private async Task ExampleViaSetSourceFile(string filepath, DataTable dt)\n        {\n            await rdlViewerSetSource.SetSourceFile(new Uri(filepath));\n            var rpt = await rdlViewerSetSource.Report();\n            await rpt.DataSets[\"Data\"].SetData(dt);\n            await rdlViewerSetSource.Rebuild();\n        }\n\n\n        private async Task<DataTable> GetTable(SqliteCommand cmd)\n        {\n            System.Data.ConnectionState original = cmd.Connection.State;\n            if (cmd.Connection.State == ConnectionState.Closed)\n            {\n                await cmd.Connection.OpenAsync();\n            }\n\n            DataTable dt = new DataTable();\n            await using var dr = await cmd.ExecuteReaderAsync();\n            dt.Load(dr);\n            dr.Close();\n\n            if (original == ConnectionState.Closed)\n            {\n                cmd.Connection.Close();\n            }\n\n            return dt;\n        }\n    }\n}"
  },
  {
    "path": "Examples/SampleApp2-SetData/SampleApp2-SetData/Form1.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Examples/SampleApp2-SetData/SampleApp2-SetData/GlobalSuppressions.cs",
    "content": "﻿// This file is used by Code Analysis to maintain SuppressMessage\n// attributes that are applied to this project.\n// Project-level suppressions either have no target or are given\n// a specific target and scoped to a namespace, type, member, etc.\n\nusing System.Diagnostics.CodeAnalysis;\n\n#if !DRAWINGCOMPAT\n[assembly: SuppressMessage(\"Interoperability\", \"CA1416:Validate platform compatibility\",\n    Justification = \"System.Drawing usage is intentional\")]\n#endif\n"
  },
  {
    "path": "Examples/SampleApp2-SetData/SampleApp2-SetData/Program.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\n\nnamespace SampleApp2_SetData\n{\n    static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            Application.EnableVisualStyles();\n            Application.SetCompatibleTextRenderingDefault(false);\n            Application.Run(new Form1());\n        }\n    }\n}\n"
  },
  {
    "path": "Examples/SampleApp2-SetData/SampleApp2-SetData/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace SampleApp2_SetData.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"SampleApp2_SetData.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Examples/SampleApp2-SetData/SampleApp2-SetData/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Examples/SampleApp2-SetData/SampleApp2-SetData/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace SampleApp2_SetData.Properties {\n    \n    \n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"17.9.0.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\n        \n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n        \n        public static Settings Default {\n            get {\n                return defaultInstance;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Examples/SampleApp2-SetData/SampleApp2-SetData/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>\n"
  },
  {
    "path": "Examples/SampleApp2-SetData/SampleApp2-SetData/SampleApp2-SetData.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net8.0-windows</TargetFramework>\n    <OutputType>WinExe</OutputType>\n    <RootNamespace>SampleApp2_SetData</RootNamespace>\n    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>\n    <UseWindowsForms>true</UseWindowsForms>\n    <ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>\n  </PropertyGroup>\n  <ItemGroup>\n    <None Update=\"SampleApp2-TestReport.rdl\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n\t  <Content Include=\"..\\..\\..\\RdlEngine\\RdlEngineConfig.xml\" Link=\"RdlEngineConfig.xml\">\n\t\t  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t  </Content>\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Data.Sqlite\" />\n\t<PackageReference Include=\"Majorsilence.Reporting.RdlViewer\" />\n\t<PackageReference Include=\"Majorsilence.Reporting.RdlCri\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Examples/SampleApp2-SetData/SampleApp2-SetData/SampleApp2-TestReport.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\" xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>11in</PageHeight>\n  <PageWidth>8.5in</PageWidth>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>Microsoft.Data.Sqlite</DataProvider>\n        <ConnectString>Data Source=C:\\Path\\Does\\Not\\Exist\\northwindEF.db</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT CategoryID, CategoryName, Description FROM Categories</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"CategoryID\">\n          <DataField>CategoryID</DataField>\n          <rd:TypeName>System.Int64</rd:TypeName>\n        </Field>\n        <Field Name=\"CategoryName\">\n          <DataField>CategoryName</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Description\">\n          <DataField>Description</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>.5in</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Top>.1in</Top>\n        <Left>.1in</Left>\n        <Width>6in</Width>\n        <Height>.25in</Height>\n        <Value>Test Data Set Report</Value>\n        <Style>\n          <FontSize>15pt</FontSize>\n          <FontWeight>Bold</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>1.25in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.5in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.375in</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>CategoryID</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>CategoryName</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>Description</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"CategoryID\">\n                      <Value>=Fields!CategoryID.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"CategoryName\">\n                      <Value>=Fields!CategoryName.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Description\">\n                      <Value>=Fields!Description.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n      </Table>\n    </ReportItems>\n    <Height>36pt</Height>\n  </Body>\n  <PageFooter>\n    <Height>14pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox5\">\n        <Top>1pt</Top>\n        <Left>10pt</Left>\n        <Height>12pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n</Report>"
  },
  {
    "path": "Examples/SampleApp2-SetData/SampleApp2-SetData.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nVisualStudioVersion = 12.0.31101.0\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"SampleApp2-SetData\", \"SampleApp2-SetData\\SampleApp2-SetData.csproj\", \"{8711F55E-AC2F-496C-B316-3A5AA9FD0824}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|x64.Build.0 = Debug|x64\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|x86.Build.0 = Debug|x86\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|x86.ActiveCfg = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.8\"/>\n    </startup>\n</configuration>\n"
  },
  {
    "path": "Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/Form1.Designer.cs",
    "content": "﻿namespace HyperLinkExample\n{\n    partial class Form1\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.rdlViewer1 = new Majorsilence.Reporting.RdlViewer.RdlViewer();\n            this.ButtonReloadReport = new System.Windows.Forms.Button();\n            this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();\n            this.SuspendLayout();\n            // \n            // rdlViewer1\n            // \n            this.rdlViewer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.rdlViewer1.Cursor = System.Windows.Forms.Cursors.Default;\n            this.rdlViewer1.Folder = null;\n            this.rdlViewer1.HighlightAll = false;\n            this.rdlViewer1.HighlightAllColor = System.Drawing.Color.Fuchsia;\n            this.rdlViewer1.HighlightCaseSensitive = false;\n            this.rdlViewer1.HighlightItemColor = System.Drawing.Color.Aqua;\n            this.rdlViewer1.HighlightPageItem = null;\n            this.rdlViewer1.HighlightText = null;\n            this.rdlViewer1.Location = new System.Drawing.Point(58, 77);\n            this.rdlViewer1.Name = \"rdlViewer1\";\n            this.rdlViewer1.PageCurrent = 1;\n            this.rdlViewer1.Parameters = \"\";\n            this.rdlViewer1.ReportName = null;\n            this.rdlViewer1.ScrollMode = Majorsilence.Reporting.RdlViewer.ScrollModeEnum.Continuous;\n            this.rdlViewer1.SelectTool = false;\n            this.rdlViewer1.ShowFindPanel = false;\n            this.rdlViewer1.ShowParameterPanel = true;\n            this.rdlViewer1.ShowWaitDialog = true;\n            this.rdlViewer1.Size = new System.Drawing.Size(558, 323);\n            this.rdlViewer1.TabIndex = 0;\n            this.rdlViewer1.UseTrueMargins = true;\n            this.rdlViewer1.Zoom = 0.664902F;\n            this.rdlViewer1.ZoomMode = Majorsilence.Reporting.RdlViewer.ZoomEnum.FitWidth;\n            this.rdlViewer1.Hyperlink += new Majorsilence.Reporting.RdlViewer.RdlViewer.HyperlinkEventHandler(this.rdlViewer1_Hyperlink);\n            // \n            // ButtonReloadReport\n            // \n            this.ButtonReloadReport.Location = new System.Drawing.Point(222, 33);\n            this.ButtonReloadReport.Name = \"ButtonReloadReport\";\n            this.ButtonReloadReport.Size = new System.Drawing.Size(141, 23);\n            this.ButtonReloadReport.TabIndex = 6;\n            this.ButtonReloadReport.Text = \"Load Report\";\n            this.ButtonReloadReport.UseVisualStyleBackColor = true;\n            this.ButtonReloadReport.Click += new System.EventHandler(this.ButtonReloadReport_Click);\n            // \n            // openFileDialog1\n            // \n            this.openFileDialog1.FileName = \"openFileDialog1\";\n            // \n            // Form1\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(672, 412);\n            this.Controls.Add(this.ButtonReloadReport);\n            this.Controls.Add(this.rdlViewer1);\n            this.Name = \"Form1\";\n            this.Text = \"Form1\";\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private Majorsilence.Reporting.RdlViewer.RdlViewer rdlViewer1;\n        internal System.Windows.Forms.Button ButtonReloadReport;\n        private System.Windows.Forms.OpenFileDialog openFileDialog1;\n    }\n}\n\n"
  },
  {
    "path": "Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/Form1.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Linq;\nusing System.Reflection;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\n\nnamespace HyperLinkExample\n{\n    public partial class Form1 : Form\n    {\n        private string file = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory,\n            @\"..\\\", @\"..\\\", @\"..\\\", @\"..\\\", @\"..\\\",  @\"SqliteExamples\\SimpleTest1.rdl\");\n\n        public Form1()\n        {\n            InitializeComponent();\n        }\n\n        private async void ButtonReloadReport_Click(object sender, EventArgs e)\n        {\n           await LoadReport();\n        }\n\n        private async Task LoadReport()\n        {\n            await rdlViewer1.SetSourceFile(new Uri(file));\n            await rdlViewer1.Rebuild();\n        }\n\n        private void rdlViewer1_Hyperlink(object source, Majorsilence.Reporting.RdlViewer.HyperlinkEventArgs e)\n        {\n            // report LastName field as HyperLink action\n            var url = new Uri(e.Hyperlink);\n            if (url.Scheme == \"lastname\" )\n            {\n                e.Cancel = true;\n                MessageBox.Show(url.ToString());\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/Form1.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"openFileDialog1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/GlobalSuppressions.cs",
    "content": "﻿// This file is used by Code Analysis to maintain SuppressMessage\n// attributes that are applied to this project.\n// Project-level suppressions either have no target or are given\n// a specific target and scoped to a namespace, type, member, etc.\n\nusing System.Diagnostics.CodeAnalysis;\n\n#if !DRAWINGCOMPAT\n[assembly: SuppressMessage(\"Interoperability\", \"CA1416:Validate platform compatibility\",\n    Justification = \"System.Drawing usage is intentional\")]\n#endif\n"
  },
  {
    "path": "Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/HyperLinkExample.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net8.0-windows</TargetFramework>\n    <OutputType>WinExe</OutputType>\n    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>\n    <UseWindowsForms>true</UseWindowsForms>\n    <ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>\n  </PropertyGroup>\n  <ItemGroup>\n    <Content Include=\"..\\..\\..\\RdlEngine\\RdlEngineConfig.xml\" Link=\"RdlEngineConfig.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n\t<ItemGroup>\n\t\t<PackageReference Include=\"Majorsilence.Reporting.RdlViewer\" />\n\t\t<PackageReference Include=\"Majorsilence.Reporting.RdlCri\" />\n\t\t<PackageReference Include=\"Microsoft.Data.Sqlite\" />\n\t</ItemGroup>\n</Project>"
  },
  {
    "path": "Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/Program.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\n\nnamespace HyperLinkExample\n{\n    static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            Application.EnableVisualStyles();\n            Application.SetCompatibleTextRenderingDefault(false);\n            Application.Run(new Form1());\n        }\n    }\n}\n"
  },
  {
    "path": "Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace HyperLinkExample.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"HyperLinkExample.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace HyperLinkExample.Properties {\n    \n    \n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"17.9.0.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\n        \n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n        \n        public static Settings Default {\n            get {\n                return defaultInstance;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Examples/SampleAppHyperLinkCustomAction/HyperLinkExample/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>\n"
  },
  {
    "path": "Examples/SampleAppHyperLinkCustomAction/SampleReportApp.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.9.34723.18\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"DataProviders\", \"..\\..\\DataProviders\\DataProviders.csproj\", \"{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RdlCri\", \"..\\..\\RdlCri\\RdlCri.csproj\", \"{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RdlEngine\", \"..\\..\\RdlEngine\\RdlEngine.csproj\", \"{C97E91F4-B310-44E2-9B6C-96775395722D}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RdlViewer\", \"..\\..\\RdlViewer\\RdlViewer.csproj\", \"{D99145B1-CB6C-41F5-BA86-723325145FB5}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"HyperLinkExample\", \"HyperLinkExample\\HyperLinkExample.csproj\", \"{1612FA9D-48BD-4866-B8CF-F871D3A61380}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1612FA9D-48BD-4866-B8CF-F871D3A61380}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1612FA9D-48BD-4866-B8CF-F871D3A61380}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1612FA9D-48BD-4866-B8CF-F871D3A61380}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1612FA9D-48BD-4866-B8CF-F871D3A61380}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControl/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.8\"/>\n    </startup>\n</configuration>\n"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControl/GlobalSuppressions.cs",
    "content": "﻿// This file is used by Code Analysis to maintain SuppressMessage\n// attributes that are applied to this project.\n// Project-level suppressions either have no target or are given\n// a specific target and scoped to a namespace, type, member, etc.\n\nusing System.Diagnostics.CodeAnalysis;\n\n#if !DRAWINGCOMPAT\n[assembly: SuppressMessage(\"Interoperability\", \"CA1416:Validate platform compatibility\",\n    Justification = \"System.Drawing usage is intentional\")]\n#endif\n"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControl/Program.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\n\nnamespace SampleApp2_SetData\n{\n    static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            Application.EnableVisualStyles();\n            Application.SetCompatibleTextRenderingDefault(false);\n            Form frm = new Form();\n            var ctl = new Majorsilence.Reporting.RdlDesign.RdlUserControl();\n            ctl.OpenFile(@\"C:\\Users\\peter\\source\\repos\\My-FyiReporting\\Examples\\Examples\\FileDirectoryTest.rdl\");\n            ctl.Dock = DockStyle.Fill;\n            frm.Controls.Add(ctl);\n\n            Application.Run(frm);\n\n        }\n    }\n}\n"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControl/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace SampleApp2_SetData.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"SampleApp2_SetData.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControl/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControl/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace SampleApp2_SetData.Properties {\n    \n    \n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"17.9.0.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\n        \n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n        \n        public static Settings Default {\n            get {\n                return defaultInstance;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControl/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>\n"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControl/SampleApp2-TestReport.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\" xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>11in</PageHeight>\n  <PageWidth>8.5in</PageWidth>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>Microsoft.Data.Sqlite</DataProvider>\n        <ConnectString>Data Source=C:\\Path\\Does\\Not\\Exist\\northwindEF.db</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT CategoryID, CategoryName, Description FROM Categories</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"CategoryID\">\n          <DataField>CategoryID</DataField>\n          <rd:TypeName>System.Int64</rd:TypeName>\n        </Field>\n        <Field Name=\"CategoryName\">\n          <DataField>CategoryName</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Description\">\n          <DataField>Description</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>.5in</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Top>.1in</Top>\n        <Left>.1in</Left>\n        <Width>6in</Width>\n        <Height>.25in</Height>\n        <Value>Test Data Set Report</Value>\n        <Style>\n          <FontSize>15pt</FontSize>\n          <FontWeight>Bold</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>1.25in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.5in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.375in</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>CategoryID</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>CategoryName</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>Description</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"CategoryID\">\n                      <Value>=Fields!CategoryID.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"CategoryName\">\n                      <Value>=Fields!CategoryName.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Description\">\n                      <Value>=Fields!Description.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n      </Table>\n    </ReportItems>\n    <Height>36pt</Height>\n  </Body>\n  <PageFooter>\n    <Height>14pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox5\">\n        <Top>1pt</Top>\n        <Left>10pt</Left>\n        <Height>12pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n</Report>"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControl/SampleDesignerControl.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net8.0-windows</TargetFramework>\n    <OutputType>WinExe</OutputType>\n    <RootNamespace>SampleApp2_SetData</RootNamespace>\n    <AssemblyName>SampleApp2-SetData</AssemblyName>\n    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>\n    <UseWindowsForms>true</UseWindowsForms>\n    <ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>\n  </PropertyGroup>\n  <ItemGroup>\n    <None Update=\"SampleApp2-TestReport.rdl\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n\t<ItemGroup>\n\t\t<Content Include=\"..\\..\\..\\RdlEngine\\RdlEngineConfig.xml\" Link=\"RdlEngineConfig.xml\">\n\t\t\t<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t\t</Content>\n\t</ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Data.Sqlite\" />\n\t<PackageReference Include=\"Majorsilence.Reporting.ReportDesigner\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControl.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Express 2012 for Windows Desktop\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"SampleDesignerControl\", \"SampleDesignerControl\\SampleDesignerControl.csproj\", \"{8711F55E-AC2F-496C-B316-3A5AA9FD0824}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DataProviders\", \"..\\..\\DataProviders\\DataProviders.csproj\", \"{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlCri\", \"..\\..\\RdlCri\\RdlCri.csproj\", \"{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlEngine\", \"..\\..\\RdlEngine\\RdlEngine.csproj\", \"{C97E91F4-B310-44E2-9B6C-96775395722D}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ReportDesigner\", \"..\\..\\RdlDesign\\ReportDesigner.csproj\", \"{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlViewer\", \"..\\..\\RdlViewer\\RdlViewer.csproj\", \"{D99145B1-CB6C-41F5-BA86-723325145FB5}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"SampleDesignerControlWPF\", \"SampleDesignerControlWPF\\SampleDesignerControlWPF.csproj\", \"{24171317-5C8C-4583-AF20-8C67EF9032EE}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Debug|x86.Build.0 = Debug|x86\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{8711F55E-AC2F-496C-B316-3A5AA9FD0824}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x64.Build.0 = Debug|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.Build.0 = Debug|x86\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x64.ActiveCfg = Release|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x64.Build.0 = Release|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.ActiveCfg = Release|x86\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.Build.0 = Release|x86\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x64.Build.0 = Debug|x64\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x86.Build.0 = Debug|x86\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x64.ActiveCfg = Release|x64\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x64.Build.0 = Release|x64\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x86.ActiveCfg = Release|x86\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x86.Build.0 = Release|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.Build.0 = Debug|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.Build.0 = Debug|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.ActiveCfg = Release|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.Build.0 = Release|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.ActiveCfg = Release|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.Build.0 = Release|x86\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug|x64.Build.0 = Debug|x64\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug|x86.Build.0 = Debug|x86\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release|x64.ActiveCfg = Release|x64\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release|x64.Build.0 = Release|x64\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release|x86.ActiveCfg = Release|x86\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release|x86.Build.0 = Release|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x64.Build.0 = Debug|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x86.Build.0 = Debug|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x64.ActiveCfg = Release|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x64.Build.0 = Release|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x86.ActiveCfg = Release|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x86.Build.0 = Release|x86\n\t\t{24171317-5C8C-4583-AF20-8C67EF9032EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{24171317-5C8C-4583-AF20-8C67EF9032EE}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{24171317-5C8C-4583-AF20-8C67EF9032EE}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{24171317-5C8C-4583-AF20-8C67EF9032EE}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{24171317-5C8C-4583-AF20-8C67EF9032EE}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{24171317-5C8C-4583-AF20-8C67EF9032EE}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{24171317-5C8C-4583-AF20-8C67EF9032EE}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{24171317-5C8C-4583-AF20-8C67EF9032EE}.Release|x86.ActiveCfg = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControlWPF/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.8\"/>\n    </startup>\n</configuration>\n"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControlWPF/App.xaml",
    "content": "﻿<Application x:Class=\"SampleDesignerControlWPF.App\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             StartupUri=\"MainWindow.xaml\">\n    <Application.Resources>\n         \n    </Application.Resources>\n</Application>\n"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControlWPF/App.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Configuration;\nusing System.Data;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows;\n\nnamespace SampleDesignerControlWPF\n{\n    /// <summary>\n    /// Interaction logic for App.xaml\n    /// </summary>\n    public partial class App : Application\n    {\n    }\n}\n"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControlWPF/GlobalSuppressions.cs",
    "content": "﻿// This file is used by Code Analysis to maintain SuppressMessage\n// attributes that are applied to this project.\n// Project-level suppressions either have no target or are given\n// a specific target and scoped to a namespace, type, member, etc.\n\nusing System.Diagnostics.CodeAnalysis;\n\n#if !DRAWINGCOMPAT\n[assembly: SuppressMessage(\"Interoperability\", \"CA1416:Validate platform compatibility\",\n    Justification = \"System.Drawing usage is intentional\")]\n#endif\n"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControlWPF/MainWindow.xaml",
    "content": "﻿<Window x:Class=\"SampleDesignerControlWPF.MainWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:wf=\"clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms\"\n        xmlns:myctrl=\"clr-namespace:Majorsilence.Reporting.RdlDesign;assembly=RdlDesigner\"\n        Title=\"MainWindow\" Loaded=\"Window_Loaded_1\" Height=\"auto\" Width=\"auto\">\n\n\n    <DockPanel >\n        <WindowsFormsHost Margin=\"0\"  Name=\"windowsFormsHost1\" DockPanel.Dock=\"Top\">\n            <myctrl:RdlUserControl x:Name=\"reportDesigner\"  />\n        </WindowsFormsHost>\n      \n    </DockPanel>\n\n</Window>\n"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControlWPF/MainWindow.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace SampleDesignerControlWPF\n{\n    /// <summary>\n    /// Interaction logic for MainWindow.xaml\n    /// </summary>\n    public partial class MainWindow : Window\n    {\n        public MainWindow()\n        {\n            InitializeComponent();\n        }\n\n        private void Window_Loaded_1(object sender, RoutedEventArgs e)\n        {\n            System.Windows.Forms.Application.EnableVisualStyles();\n            reportDesigner.OpenFile(@\"C:\\Users\\Peter\\Projects\\My-FyiReporting\\Examples\\Examples\\FileDirectoryTest.rdl\");\n\n        }\n    }\n}\n"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControlWPF/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace SampleDesignerControlWPF.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"SampleDesignerControlWPF.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControlWPF/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControlWPF/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace SampleDesignerControlWPF.Properties {\n    \n    \n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"17.9.0.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\n        \n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n        \n        public static Settings Default {\n            get {\n                return defaultInstance;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControlWPF/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"uri:settings\" CurrentProfile=\"(Default)\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>"
  },
  {
    "path": "Examples/SampleDesignerControl/SampleDesignerControlWPF/SampleDesignerControlWPF.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net8.0-windows</TargetFramework>\n    <OutputType>WinExe</OutputType>\n    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>true</UseWPF>\n    <ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>\n  </PropertyGroup>\n  <ItemGroup>\n    <AppDesigner Include=\"Properties\\\" />\n  </ItemGroup>\n\t<ItemGroup>\n\t\t<Content Include=\"..\\..\\..\\RdlEngine\\RdlEngineConfig.xml\" Link=\"RdlEngineConfig.xml\">\n\t\t\t<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t\t</Content>\n\t</ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Majorsilence.Reporting.ReportDesigner\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Examples/SqliteExamples/SimpleTest1.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\"\n  xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>279.4mm</PageHeight>\n  <PageWidth>431.8mm</PageWidth>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>Microsoft.Data.Sqlite</DataProvider>\n        <ConnectString>Data Source=C:\\Users\\peter\\source\\repos\\My-FyiReporting\\Examples\\SqliteExamples\\sqlitetestdb2.db</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT EmployeeID, LastName, FirstName, Title, TitleOfCourtesy, BirthDate, HireDate, Address, City, Region, PostalCode, Country, HomePhone, Extension, Photo, Notes, PhotoPath FROM Employees</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"EmployeeID\">\n          <DataField>EmployeeID</DataField>\n          <rd:TypeName>System.Int64</rd:TypeName>\n        </Field>\n        <Field Name=\"LastName\">\n          <DataField>LastName</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"FirstName\">\n          <DataField>FirstName</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Title\">\n          <DataField>Title</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"TitleOfCourtesy\">\n          <DataField>TitleOfCourtesy</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"BirthDate\">\n          <DataField>BirthDate</DataField>\n          <rd:TypeName>System.DateTime</rd:TypeName>\n        </Field>\n        <Field Name=\"HireDate\">\n          <DataField>HireDate</DataField>\n          <rd:TypeName>System.DateTime</rd:TypeName>\n        </Field>\n        <Field Name=\"Address\">\n          <DataField>Address</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"City\">\n          <DataField>City</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Region\">\n          <DataField>Region</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"PostalCode\">\n          <DataField>PostalCode</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Country\">\n          <DataField>Country</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"HomePhone\">\n          <DataField>HomePhone</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Extension\">\n          <DataField>Extension</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Photo\">\n          <DataField>Photo</DataField>\n          <rd:TypeName>System.Byte[]</rd:TypeName>\n        </Field>\n        <Field Name=\"Notes\">\n          <DataField>Notes</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"PhotoPath\">\n          <DataField>PhotoPath</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>.5in</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Top>.1in</Top>\n        <Left>.1in</Left>\n        <Width>6in</Width>\n        <Height>.25in</Height>\n        <Value>Simple Test</Value>\n        <Style>\n          <FontSize>15pt</FontSize>\n          <FontWeight>Bold</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>1.25in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.875in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.25in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>EmployeeID</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>LastName</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>FirstName</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value>Title</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox6\">\n                      <Value>TitleOfCourtesy</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox7\">\n                      <Value>BirthDate</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox8\">\n                      <Value>HireDate</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox9\">\n                      <Value>Address</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>City</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox11\">\n                      <Value>Region</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox12\">\n                      <Value>PostalCode</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox13\">\n                      <Value>Country</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox14\">\n                      <Value>HomePhone</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox15\">\n                      <Value>Extension</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox16\">\n                      <Value>Photo</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox17\">\n                      <Value>Notes</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox18\">\n                      <Value>PhotoPath</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"EmployeeID\">\n                      <Value>=Fields!EmployeeID.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"LastName\">\n                      <Value>=Fields!LastName.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                      <Action>\n                        <Hyperlink>=\"lastname:\" &amp; {LastName}</Hyperlink>\n                      </Action>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"FirstName\">\n                      <Value>=Fields!FirstName.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Title\">\n                      <Value>=Fields!Title.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TitleOfCourtesy\">\n                      <Value>=Fields!TitleOfCourtesy.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"BirthDate\">\n                      <Value>=Fields!BirthDate.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"HireDate\">\n                      <Value>=Fields!HireDate.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Address\">\n                      <Value>=Fields!Address.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"City\">\n                      <Value>=Fields!City.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Region\">\n                      <Value>=Fields!Region.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"PostalCode\">\n                      <Value>=Fields!PostalCode.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Country\">\n                      <Value>=Fields!Country.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"HomePhone\">\n                      <Value>=Fields!HomePhone.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Extension\">\n                      <Value>=Fields!Extension.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Photo\">\n                      <Value>=Fields!Photo.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Notes\">\n                      <Value>=Fields!Notes.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"PhotoPath\">\n                      <Value>=Fields!PhotoPath.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n      </Table>\n      <Textbox Name=\"Textbox20\">\n        <Height>12pt</Height>\n        <Width>1in</Width>\n        <Value>Hello World</Value>\n        <ZIndex>1</ZIndex>\n        <Left>122.5pt</Left>\n        <Top>94.15pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <Height>242.0pt</Height>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>14pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox19\">\n        <Top>1pt</Top>\n        <Left>10pt</Left>\n        <Height>12pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/SqliteExamples/SimpleTest2.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\"\n  xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>11in</PageHeight>\n  <PageWidth>8.5in</PageWidth>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>Microsoft.Data.Sqlite</DataProvider>\n        <ConnectString>Data Source=C:\\Users\\Peter\\Projects\\My-FyiReporting\\Examples\\northwindEF.db</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued, DiscontinuedDate FROM Products</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"ProductID\">\n          <DataField>ProductID</DataField>\n          <rd:TypeName>System.Int64</rd:TypeName>\n        </Field>\n        <Field Name=\"ProductName\">\n          <DataField>ProductName</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"SupplierID\">\n          <DataField>SupplierID</DataField>\n          <rd:TypeName>System.Int64</rd:TypeName>\n        </Field>\n        <Field Name=\"CategoryID\">\n          <DataField>CategoryID</DataField>\n          <rd:TypeName>System.Int64</rd:TypeName>\n        </Field>\n        <Field Name=\"QuantityPerUnit\">\n          <DataField>QuantityPerUnit</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"UnitPrice\">\n          <DataField>UnitPrice</DataField>\n          <rd:TypeName>System.Decimal</rd:TypeName>\n        </Field>\n        <Field Name=\"UnitsInStock\">\n          <DataField>UnitsInStock</DataField>\n          <rd:TypeName>System.Int16</rd:TypeName>\n        </Field>\n        <Field Name=\"UnitsOnOrder\">\n          <DataField>UnitsOnOrder</DataField>\n          <rd:TypeName>System.Int16</rd:TypeName>\n        </Field>\n        <Field Name=\"ReorderLevel\">\n          <DataField>ReorderLevel</DataField>\n          <rd:TypeName>System.Int16</rd:TypeName>\n        </Field>\n        <Field Name=\"Discontinued\">\n          <DataField>Discontinued</DataField>\n          <rd:TypeName>System.Boolean</rd:TypeName>\n        </Field>\n        <Field Name=\"DiscontinuedDate\">\n          <DataField>DiscontinuedDate</DataField>\n          <rd:TypeName>System.DateTime</rd:TypeName>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>.5in</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Top>.02in</Top>\n        <Left>.1in</Left>\n        <Width>6in</Width>\n        <Height>.25in</Height>\n        <Value>Simple Test 2</Value>\n        <Style>\n          <FontSize>15pt</FontSize>\n          <FontWeight>Bold</FontWeight>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox2\">\n        <Top>.3in</Top>\n        <Left>0.0in</Left>\n        <Width>1.125in</Width>\n        <Height>.2in</Height>\n        <Value>ProductID</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox3\">\n        <Top>.3in</Top>\n        <Left>1.125in</Left>\n        <Width>1.375in</Width>\n        <Height>.2in</Height>\n        <Value>ProductName</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox4\">\n        <Top>.3in</Top>\n        <Left>2.500in</Left>\n        <Width>1.25in</Width>\n        <Height>.2in</Height>\n        <Value>SupplierID</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox5\">\n        <Top>.3in</Top>\n        <Left>3.750in</Left>\n        <Width>1.25in</Width>\n        <Height>.2in</Height>\n        <Value>CategoryID</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox6\">\n        <Top>.3in</Top>\n        <Left>5.000in</Left>\n        <Width>1.875in</Width>\n        <Height>.2in</Height>\n        <Value>QuantityPerUnit</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox7\">\n        <Top>.3in</Top>\n        <Left>6.875in</Left>\n        <Width>1.125in</Width>\n        <Height>.2in</Height>\n        <Value>UnitPrice</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox8\">\n        <Top>.3in</Top>\n        <Left>8.000in</Left>\n        <Width>1.5in</Width>\n        <Height>.2in</Height>\n        <Value>UnitsInStock</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox9\">\n        <Top>.3in</Top>\n        <Left>9.500in</Left>\n        <Width>1.5in</Width>\n        <Height>.2in</Height>\n        <Value>UnitsOnOrder</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox10\">\n        <Top>.3in</Top>\n        <Left>11.000in</Left>\n        <Width>1.5in</Width>\n        <Height>.2in</Height>\n        <Value>ReorderLevel</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox11\">\n        <Top>.3in</Top>\n        <Left>12.500in</Left>\n        <Width>1.5in</Width>\n        <Height>.2in</Height>\n        <Value>Discontinued</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox12\">\n        <Top>.3in</Top>\n        <Left>14.000in</Left>\n        <Width>2in</Width>\n        <Height>.2in</Height>\n        <Value>DiscontinuedDate</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>25pt</Height>\n    <ReportItems>\n      <List Name=\"List1\">\n        <DataSetName>Data</DataSetName>\n        <Height>24pt</Height>\n        <NoRows>Query returned no rows!</NoRows>\n        <ReportItems>\n          <Textbox Name=\"ProductID\">\n            <Top>.1in</Top>\n            <Left>0.0in</Left>\n            <Width>1.125in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!ProductID.Value</Value>\n            <CanGrow>false</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"ProductName\">\n            <Top>.1in</Top>\n            <Left>1.125in</Left>\n            <Width>1.375in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!ProductName.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"SupplierID\">\n            <Top>.1in</Top>\n            <Left>2.500in</Left>\n            <Width>1.25in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!SupplierID.Value</Value>\n            <CanGrow>false</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"CategoryID\">\n            <Top>.1in</Top>\n            <Left>3.750in</Left>\n            <Width>1.25in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!CategoryID.Value</Value>\n            <CanGrow>false</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"QuantityPerUnit\">\n            <Top>.1in</Top>\n            <Left>5.000in</Left>\n            <Width>1.875in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!QuantityPerUnit.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"UnitPrice\">\n            <Top>.1in</Top>\n            <Left>6.875in</Left>\n            <Width>1.125in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!UnitPrice.Value</Value>\n            <CanGrow>false</CanGrow>\n            <Style>\n              <PaddingRight>2pt</PaddingRight>\n              <TextAlign>Right</TextAlign>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"UnitsInStock\">\n            <Top>.1in</Top>\n            <Left>8.000in</Left>\n            <Width>1.5in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!UnitsInStock.Value</Value>\n            <CanGrow>false</CanGrow>\n            <Style>\n              <PaddingRight>2pt</PaddingRight>\n              <TextAlign>Right</TextAlign>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"UnitsOnOrder\">\n            <Top>.1in</Top>\n            <Left>9.500in</Left>\n            <Width>1.5in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!UnitsOnOrder.Value</Value>\n            <CanGrow>false</CanGrow>\n            <Style>\n              <PaddingRight>2pt</PaddingRight>\n              <TextAlign>Right</TextAlign>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"ReorderLevel\">\n            <Top>.1in</Top>\n            <Left>11.000in</Left>\n            <Width>1.5in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!ReorderLevel.Value</Value>\n            <CanGrow>false</CanGrow>\n            <Style>\n              <PaddingRight>2pt</PaddingRight>\n              <TextAlign>Right</TextAlign>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"Discontinued\">\n            <Top>.1in</Top>\n            <Left>12.500in</Left>\n            <Width>1.5in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!Discontinued.Value</Value>\n            <CanGrow>false</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"DiscontinuedDate\">\n            <Top>.1in</Top>\n            <Left>14.000in</Left>\n            <Width>2in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!DiscontinuedDate.Value</Value>\n            <CanGrow>false</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n        </ReportItems>\n        <Width>16.000in</Width>\n      </List>\n    </ReportItems>\n  </Body>\n  <PageFooter>\n    <Height>14pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox13\">\n        <Top>1pt</Top>\n        <Left>10pt</Left>\n        <Height>12pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n</Report>"
  },
  {
    "path": "Examples/SqliteExamples/SimpleTest3WithParameters.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\"\n  xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>11in</PageHeight>\n  <PageWidth>8.5in</PageWidth>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>Microsoft.Data.Sqlite</DataProvider>\n        <ConnectString>Data Source=C:\\Users\\Peter\\Projects\\My-FyiReporting\\Examples\\northwindEF.db</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <ReportParameters>\n    <ReportParameter Name=\"TestParam1\">\n      <DataType>String</DataType>\n      <Nullable>False</Nullable>\n      <AllowBlank>False</AllowBlank>\n    </ReportParameter>\n    <ReportParameter Name=\"TestParam2\">\n      <DataType>String</DataType>\n      <Nullable>False</Nullable>\n      <DefaultValue>\n        <Values>\n          <Value>Hello World</Value>\n        </Values>\n      </DefaultValue>\n      <AllowBlank>False</AllowBlank>\n    </ReportParameter>\n  </ReportParameters>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone, Fax FROM Customers</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"CustomerID\">\n          <DataField>CustomerID</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CompanyName\">\n          <DataField>CompanyName</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"ContactName\">\n          <DataField>ContactName</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"ContactTitle\">\n          <DataField>ContactTitle</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Address\">\n          <DataField>Address</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"City\">\n          <DataField>City</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Region\">\n          <DataField>Region</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"PostalCode\">\n          <DataField>PostalCode</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Country\">\n          <DataField>Country</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Phone\">\n          <DataField>Phone</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Fax\">\n          <DataField>Fax</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>.5in</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Top>.02in</Top>\n        <Left>.1in</Left>\n        <Width>6in</Width>\n        <Height>.25in</Height>\n        <Value>Simple Parameter Test 3</Value>\n        <Style>\n          <FontSize>15pt</FontSize>\n          <FontWeight>Bold</FontWeight>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox2\">\n        <Top>.3in</Top>\n        <Left>0.0in</Left>\n        <Width>1.25in</Width>\n        <Height>.2in</Height>\n        <Value>CustomerID</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox3\">\n        <Top>.3in</Top>\n        <Left>1.25in</Left>\n        <Width>1.375in</Width>\n        <Height>.2in</Height>\n        <Value>CompanyName</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox4\">\n        <Top>.3in</Top>\n        <Left>2.625in</Left>\n        <Width>1.375in</Width>\n        <Height>.2in</Height>\n        <Value>ContactName</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox5\">\n        <Top>.3in</Top>\n        <Left>4.000in</Left>\n        <Width>1.5in</Width>\n        <Height>.2in</Height>\n        <Value>ContactTitle</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox6\">\n        <Top>.3in</Top>\n        <Left>5.500in</Left>\n        <Width>1in</Width>\n        <Height>.2in</Height>\n        <Value>Address</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox7\">\n        <Top>.3in</Top>\n        <Left>6.500in</Left>\n        <Width>1in</Width>\n        <Height>.2in</Height>\n        <Value>City</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox8\">\n        <Top>.3in</Top>\n        <Left>7.500in</Left>\n        <Width>1in</Width>\n        <Height>.2in</Height>\n        <Value>Region</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox9\">\n        <Top>.3in</Top>\n        <Left>8.500in</Left>\n        <Width>1.25in</Width>\n        <Height>.2in</Height>\n        <Value>PostalCode</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox10\">\n        <Top>.3in</Top>\n        <Left>9.750in</Left>\n        <Width>1in</Width>\n        <Height>.2in</Height>\n        <Value>Country</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox11\">\n        <Top>.3in</Top>\n        <Left>10.750in</Left>\n        <Width>1in</Width>\n        <Height>.2in</Height>\n        <Value>Phone</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox12\">\n        <Top>.3in</Top>\n        <Left>11.750in</Left>\n        <Width>1in</Width>\n        <Height>.2in</Height>\n        <Value>Fax</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>25pt</Height>\n    <ReportItems>\n      <List Name=\"List1\">\n        <DataSetName>Data</DataSetName>\n        <Height>24pt</Height>\n        <NoRows>Query returned no rows!</NoRows>\n        <ReportItems>\n          <Textbox Name=\"CustomerID\">\n            <Top>.1in</Top>\n            <Left>0.0in</Left>\n            <Width>1.25in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!CustomerID.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"CompanyName\">\n            <Top>.1in</Top>\n            <Left>1.25in</Left>\n            <Width>1.375in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!CompanyName.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"ContactName\">\n            <Top>.1in</Top>\n            <Left>2.625in</Left>\n            <Width>1.375in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!ContactName.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"ContactTitle\">\n            <Top>.1in</Top>\n            <Left>4.000in</Left>\n            <Width>1.5in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!ContactTitle.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"Address\">\n            <Top>.1in</Top>\n            <Left>5.500in</Left>\n            <Width>1in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!Address.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"City\">\n            <Top>.1in</Top>\n            <Left>6.500in</Left>\n            <Width>1in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!City.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"Region\">\n            <Top>.1in</Top>\n            <Left>7.500in</Left>\n            <Width>1in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!Region.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"PostalCode\">\n            <Top>.1in</Top>\n            <Left>8.500in</Left>\n            <Width>1.25in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!PostalCode.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"Country\">\n            <Top>.1in</Top>\n            <Left>9.750in</Left>\n            <Width>1in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!Country.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"Phone\">\n            <Top>.1in</Top>\n            <Left>10.750in</Left>\n            <Width>1in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!Phone.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"Fax\">\n            <Top>.1in</Top>\n            <Left>11.750in</Left>\n            <Width>1in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!Fax.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n        </ReportItems>\n        <Width>12.750in</Width>\n      </List>\n    </ReportItems>\n  </Body>\n  <PageFooter>\n    <Height>14pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox13\">\n        <Top>1pt</Top>\n        <Left>10pt</Left>\n        <Height>12pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n</Report>"
  },
  {
    "path": "Examples/SqliteExamples/SimpleTestConnectionString.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\"\n  xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>11in</PageHeight>\n  <PageWidth>8.5in</PageWidth>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT EmployeeID, LastName, FirstName, Title, TitleOfCourtesy, BirthDate, HireDate, Address, City, Region, PostalCode, Country, HomePhone, Extension, Photo, Notes, PhotoPath FROM Employees</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"EmployeeID\">\n          <DataField>EmployeeID</DataField>\n          <rd:TypeName>System.Int64</rd:TypeName>\n        </Field>\n        <Field Name=\"LastName\">\n          <DataField>LastName</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"FirstName\">\n          <DataField>FirstName</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Title\">\n          <DataField>Title</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"TitleOfCourtesy\">\n          <DataField>TitleOfCourtesy</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"BirthDate\">\n          <DataField>BirthDate</DataField>\n          <rd:TypeName>System.DateTime</rd:TypeName>\n        </Field>\n        <Field Name=\"HireDate\">\n          <DataField>HireDate</DataField>\n          <rd:TypeName>System.DateTime</rd:TypeName>\n        </Field>\n        <Field Name=\"Address\">\n          <DataField>Address</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"City\">\n          <DataField>City</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Region\">\n          <DataField>Region</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"PostalCode\">\n          <DataField>PostalCode</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Country\">\n          <DataField>Country</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"HomePhone\">\n          <DataField>HomePhone</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Extension\">\n          <DataField>Extension</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Photo\">\n          <DataField>Photo</DataField>\n          <rd:TypeName>System.Byte[]</rd:TypeName>\n        </Field>\n        <Field Name=\"Notes\">\n          <DataField>Notes</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"PhotoPath\">\n          <DataField>PhotoPath</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>.5in</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Top>.1in</Top>\n        <Left>.1in</Left>\n        <Width>6in</Width>\n        <Height>.25in</Height>\n        <Value>Simple Test</Value>\n        <Style>\n          <FontSize>15pt</FontSize>\n          <FontWeight>Bold</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>1.25in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.875in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.25in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>EmployeeID</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>LastName</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>FirstName</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value>Title</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox6\">\n                      <Value>TitleOfCourtesy</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox7\">\n                      <Value>BirthDate</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox8\">\n                      <Value>HireDate</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox9\">\n                      <Value>Address</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>City</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox11\">\n                      <Value>Region</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox12\">\n                      <Value>PostalCode</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox13\">\n                      <Value>Country</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox14\">\n                      <Value>HomePhone</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox15\">\n                      <Value>Extension</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox16\">\n                      <Value>Photo</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox17\">\n                      <Value>Notes</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox18\">\n                      <Value>PhotoPath</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"EmployeeID\">\n                      <Value>=Fields!EmployeeID.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"LastName\">\n                      <Value>=Fields!LastName.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"FirstName\">\n                      <Value>=Fields!FirstName.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Title\">\n                      <Value>=Fields!Title.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TitleOfCourtesy\">\n                      <Value>=Fields!TitleOfCourtesy.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"BirthDate\">\n                      <Value>=Fields!BirthDate.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"HireDate\">\n                      <Value>=Fields!HireDate.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Address\">\n                      <Value>=Fields!Address.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"City\">\n                      <Value>=Fields!City.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Region\">\n                      <Value>=Fields!Region.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"PostalCode\">\n                      <Value>=Fields!PostalCode.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Country\">\n                      <Value>=Fields!Country.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"HomePhone\">\n                      <Value>=Fields!HomePhone.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Extension\">\n                      <Value>=Fields!Extension.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Photo\">\n                      <Value>=Fields!Photo.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Notes\">\n                      <Value>=Fields!Notes.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"PhotoPath\">\n                      <Value>=Fields!PhotoPath.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n      </Table>\n    </ReportItems>\n    <Height>36pt</Height>\n  </Body>\n  <PageFooter>\n    <Height>14pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox19\">\n        <Top>1pt</Top>\n        <Left>10pt</Left>\n        <Height>12pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n  <DataSources >\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>Microsoft.Data.Sqlite</DataProvider>\n        <ConnectString>={?ConnectionString}</ConnectString>\n        <IntegratedSecurity>false</IntegratedSecurity>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <ReportParameters >\n    <ReportParameter Name=\"ConnectionString\">\n      <DataType>String</DataType>\n      <Nullable>false</Nullable>\n      <AllowBlank>false</AllowBlank>\n      <MultiValue>false</MultiValue>\n      <Prompt>\n      </Prompt>\n    </ReportParameter>\n  </ReportParameters>\n</Report>"
  },
  {
    "path": "Examples/SqliteExamples/barcode.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\" xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description></Description>\n  <Author></Author>\n  <PageHeight>279.4mm</PageHeight>\n  <PageWidth>431.8mm</PageWidth>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>Microsoft.Data.Sqlite</DataProvider>\n        <ConnectString>Data Source=C:\\Users\\peter\\source\\repos\\My-FyiReporting\\Examples\\SqliteExamples\\sqlitetestdb2.db</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT EmployeeID, LastName, FirstName, Title, TitleOfCourtesy, BirthDate, HireDate, Address, City, Region, PostalCode, Country, HomePhone, Extension, Photo, Notes, PhotoPath FROM Employees</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"EmployeeID\">\n          <DataField>EmployeeID</DataField>\n          <rd:TypeName>System.Int64</rd:TypeName>\n        </Field>\n        <Field Name=\"LastName\">\n          <DataField>LastName</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"FirstName\">\n          <DataField>FirstName</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Title\">\n          <DataField>Title</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"TitleOfCourtesy\">\n          <DataField>TitleOfCourtesy</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"BirthDate\">\n          <DataField>BirthDate</DataField>\n          <rd:TypeName>System.DateTime</rd:TypeName>\n        </Field>\n        <Field Name=\"HireDate\">\n          <DataField>HireDate</DataField>\n          <rd:TypeName>System.DateTime</rd:TypeName>\n        </Field>\n        <Field Name=\"Address\">\n          <DataField>Address</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"City\">\n          <DataField>City</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Region\">\n          <DataField>Region</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"PostalCode\">\n          <DataField>PostalCode</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Country\">\n          <DataField>Country</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"HomePhone\">\n          <DataField>HomePhone</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Extension\">\n          <DataField>Extension</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Photo\">\n          <DataField>Photo</DataField>\n          <rd:TypeName>System.Byte[]</rd:TypeName>\n        </Field>\n        <Field Name=\"Notes\">\n          <DataField>Notes</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"PhotoPath\">\n          <DataField>PhotoPath</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>41.4pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Top>.1in</Top>\n        <Left>.1in</Left>\n        <Width>6in</Width>\n        <Height>.25in</Height>\n        <Value>Simple Test</Value>\n        <Style>\n          <FontSize>15pt</FontSize>\n          <FontWeight>Bold</FontWeight>\n          <BackgroundColor>Bisque</BackgroundColor>\n        </Style>\n      </Textbox>\n      <Image Name=\"Image1\">\n        <Height>28.25pt</Height>\n        <Width>103.12pt</Width>\n        <Left>462.70pt</Left>\n        <Top>4.80pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <MIMEType>image/png</MIMEType>\n        <Source>Database</Source>\n        <Value>=Convert.FromBase64String({?Logo})</Value>\n      </Image>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>150.4pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.875in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.25in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>EmployeeID</Value>\n                      <Style>\n                        <TextAlign>Right</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>LastName</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>FirstName</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor>\n                          <Bottom>Green</Bottom>\n                        </BorderColor>\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value>Title</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox6\">\n                      <Value>TitleOfCourtesy</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox7\">\n                      <Value>BirthDate</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox8\">\n                      <Value>HireDate</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox9\">\n                      <Value>Address</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>City</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox11\">\n                      <Value>Region</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox12\">\n                      <Value>PostalCode</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox13\">\n                      <Value>Country</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox14\">\n                      <Value>HomePhone</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox15\">\n                      <Value>Extension</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox16\">\n                      <Value>Photo</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox17\">\n                      <Value>Notes</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox18\">\n                      <Value>PhotoPath</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <CustomReportItem Name=\"EmployeeID\">\n                      <Type>={?BarcodeType}</Type>\n                      <Height>30.91mm</Height>\n                      <Width>60.91mm</Width>\n                      <CustomProperties>\n                        <CustomProperty>\n                          <Name>Code</Name>\n                          <Value>=Fields!EmployeeID.Value + Fields!LastName.Value</Value>\n                        </CustomProperty>\n                      </CustomProperties>\n                      <Left>1.13pt</Left>\n                      <Top>0.75pt</Top>\n                      <Source>Embedded</Source>\n                    </CustomReportItem>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"LastName\">\n                      <Value>=Fields!LastName.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                      <Action>\n                        <Hyperlink>=\"lastname:\" &amp; {LastName}</Hyperlink>\n                      </Action>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"FirstName\">\n                      <Value>=Fields!FirstName.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>None</Default>\n                          <Left>None</Left>\n                          <Right>None</Right>\n                          <Top>Solid</Top>\n                          <Bottom>Solid</Bottom>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                        <BorderColor>\n                          <Bottom>Gray</Bottom>\n                          <Top>Gray</Top>\n                        </BorderColor>\n                        <BorderWidth>\n                          <Bottom>1pt</Bottom>\n                        </BorderWidth>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Title\">\n                      <Value>=Fields!Title.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TitleOfCourtesy\">\n                      <Value>=Fields!TitleOfCourtesy.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"BirthDate\">\n                      <Value>=Fields!BirthDate.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"HireDate\">\n                      <Value>=Fields!HireDate.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Address\">\n                      <Value>=Fields!Address.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"City\">\n                      <Value>=Fields!City.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Region\">\n                      <Value>=Fields!Region.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"PostalCode\">\n                      <Value>=Fields!PostalCode.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Country\">\n                      <Value>=Fields!Country.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"HomePhone\">\n                      <Value>=Fields!HomePhone.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Extension\">\n                      <Value>=Fields!Extension.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Photo\">\n                      <Value>=Fields!Photo.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Notes\">\n                      <Value>=Fields!Notes.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"PhotoPath\">\n                      <Value>=Fields!PhotoPath.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n      </Table>\n    </ReportItems>\n    <Height>242.0pt</Height>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>14pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox19\">\n        <Top>1pt</Top>\n        <Left>10pt</Left>\n        <Height>12pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n  <ReportParameters>\n    <ReportParameter Name=\"BarcodeType\">\n      <DataType>String</DataType>\n      <DefaultValue>\n        <Values>\n          <Value>QrCode</Value>\n        </Values>\n      </DefaultValue>\n      <Nullable>false</Nullable>\n      <AllowBlank>false</AllowBlank>\n      <MultiValue>false</MultiValue>\n      <Prompt></Prompt>\n      <ValidValues>\n        <ParameterValues>\n          <ParameterValue>\n            <Value>QrCde</Value>\n          </ParameterValue>\n          <ParameterValue>\n            <Value>AztecCode</Value>\n          </ParameterValue>\n          <ParameterValue>\n            <Value>DataMatrix</Value>\n          </ParameterValue>\n          <ParameterValue>\n            <Value>Pdf417</Value>\n          </ParameterValue>\n        </ParameterValues>\n      </ValidValues>\n    </ReportParameter>\n    <ReportParameter Name=\"Logo\">\n      <DataType>String</DataType>\n      <Nullable>true</Nullable>\n      <AllowBlank>true</AllowBlank>\n      <MultiValue>false</MultiValue>\n      <Prompt />\n      <DefaultValue>\n        <Values>\n          <Value></Value>\n        </Values>\n      </DefaultValue>\n    </ReportParameter>\n  </ReportParameters>\n</Report>"
  },
  {
    "path": "Examples/SqliteExamples/chart.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\" xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description></Description>\n  <Author></Author>\n  <PageHeight>279.4mm</PageHeight>\n  <PageWidth>431.8mm</PageWidth>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>Microsoft.Data.Sqlite</DataProvider>\n        <ConnectString>Data Source=C:\\Users\\peter\\source\\repos\\My-FyiReporting\\Examples\\SqliteExamples\\sqlitetestdb2.db</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT EmployeeID, LastName, FirstName, Title, TitleOfCourtesy, BirthDate, HireDate, Address, City, Region, PostalCode, Country, HomePhone, Extension, Photo, Notes, PhotoPath FROM Employees</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"EmployeeID\">\n          <DataField>EmployeeID</DataField>\n          <rd:TypeName>System.Int64</rd:TypeName>\n        </Field>\n        <Field Name=\"LastName\">\n          <DataField>LastName</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"FirstName\">\n          <DataField>FirstName</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Title\">\n          <DataField>Title</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"TitleOfCourtesy\">\n          <DataField>TitleOfCourtesy</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"BirthDate\">\n          <DataField>BirthDate</DataField>\n          <rd:TypeName>System.DateTime</rd:TypeName>\n        </Field>\n        <Field Name=\"HireDate\">\n          <DataField>HireDate</DataField>\n          <rd:TypeName>System.DateTime</rd:TypeName>\n        </Field>\n        <Field Name=\"Address\">\n          <DataField>Address</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"City\">\n          <DataField>City</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Region\">\n          <DataField>Region</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"PostalCode\">\n          <DataField>PostalCode</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Country\">\n          <DataField>Country</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"HomePhone\">\n          <DataField>HomePhone</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Extension\">\n          <DataField>Extension</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Photo\">\n          <DataField>Photo</DataField>\n          <rd:TypeName>System.Byte[]</rd:TypeName>\n        </Field>\n        <Field Name=\"Notes\">\n          <DataField>Notes</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"PhotoPath\">\n          <DataField>PhotoPath</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>.5in</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Top>.1in</Top>\n        <Left>.1in</Left>\n        <Width>6in</Width>\n        <Height>.25in</Height>\n        <Value>Chart Test</Value>\n        <Style>\n          <FontSize>15pt</FontSize>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <ReportItems>\n      <Chart Name=\"Chart1\">\n        <Height>385.47pt</Height>\n        <Width>604.52pt</Width>\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BackgroundColor>White</BackgroundColor>\n          <BackgroundGradientType>LeftRight</BackgroundGradientType>\n          <BackgroundGradientEndColor>Azure</BackgroundGradientEndColor>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Type>Column</Type>\n        <Subtype>Plain</Subtype>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"DynamicCategoriesGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Country.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <CategoryAxis>\n          <Axis>\n            <Visible>true</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>true</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>true</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Country</Caption>\n            </Title>\n          </Axis>\n        </CategoryAxis>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"DynamicSeriesGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Region.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Count(Fields!City.Value)</Value>\n                  </DataValue>\n                </DataValues>\n                <DataLabel>\n                  <Value></Value>\n                  <Visible>False</Visible>\n                </DataLabel>\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <ValueAxis>\n          <Axis>\n            <Visible>true</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>true</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <FontSize>8pt</FontSize>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>true</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>City</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n              </Style>\n            </Title>\n            <Style>\n              <BackgroundColor>Aquamarine</BackgroundColor>\n            </Style>\n          </Axis>\n        </ValueAxis>\n        <Legend>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <PaddingLeft>5pt</PaddingLeft>\n            <FontSize>8pt</FontSize>\n          </Style>\n          <Visible>true</Visible>\n          <Position>RightCenter</Position>\n        </Legend>\n        <Title>\n          <Style>\n            <FontWeight>Bold</FontWeight>\n            <FontSize>14pt</FontSize>\n            <TextAlign>Center</TextAlign>\n            <BackgroundColor>Aqua</BackgroundColor>\n          </Style>\n          <Caption>Country Region Chart</Caption>\n        </Title>\n        <Left>521.9pt</Left>\n        <Top>6.3pt</Top>\n        <fyi:RenderAsVector xmlns:fyi=\"http://www.fyireporting.com/schemas\">False</fyi:RenderAsVector>\n        <Palette>EarthTones</Palette>\n        <PointWidth>10</PointWidth>\n      </Chart>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>EmployeeID</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>LastName</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>FirstName</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value>Title</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox6\">\n                      <Value>TitleOfCourtesy</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox7\">\n                      <Value>Country</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox8\">\n                      <Value>Region</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox9\">\n                      <Value>=Fields!EmployeeID.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>=Fields!LastName.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox11\">\n                      <Value>=Fields!FirstName.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox12\">\n                      <Value>=Fields!Title.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox13\">\n                      <Value>=Fields!TitleOfCourtesy.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox14\">\n                      <Value>=Fields!Country.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox15\">\n                      <Value>=Fields!Region.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n        <Left>0.0pt</Left>\n        <Top>7.3pt</Top>\n      </Table>\n    </ReportItems>\n    <Height>424.5pt</Height>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>14pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox19\">\n        <Top>1pt</Top>\n        <Left>10pt</Left>\n        <Height>12pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/SqliteExamples/functions.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\" xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description></Description>\n  <Author></Author>\n  <PageHeight>279.4mm</PageHeight>\n  <PageWidth>431.8mm</PageWidth>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>Microsoft.Data.Sqlite</DataProvider>\n        <ConnectString>Data Source=C:\\Users\\peter\\source\\repos\\My-FyiReporting\\Examples\\SqliteExamples\\sqlitetestdb2.db</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT EmployeeID, LastName, FirstName, Title, TitleOfCourtesy, BirthDate, HireDate, Address, City, Region, PostalCode, Country, HomePhone, Extension, Photo, Notes, PhotoPath FROM Employees</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"EmployeeID\">\n          <DataField>EmployeeID</DataField>\n          <rd:TypeName>System.Int64</rd:TypeName>\n        </Field>\n        <Field Name=\"LastName\">\n          <DataField>LastName</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"FirstName\">\n          <DataField>FirstName</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Title\">\n          <DataField>Title</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"TitleOfCourtesy\">\n          <DataField>TitleOfCourtesy</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"BirthDate\">\n          <DataField>BirthDate</DataField>\n          <rd:TypeName>System.DateTime</rd:TypeName>\n        </Field>\n        <Field Name=\"HireDate\">\n          <DataField>HireDate</DataField>\n          <rd:TypeName>System.DateTime</rd:TypeName>\n        </Field>\n        <Field Name=\"Address\">\n          <DataField>Address</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"City\">\n          <DataField>City</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Region\">\n          <DataField>Region</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"PostalCode\">\n          <DataField>PostalCode</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Country\">\n          <DataField>Country</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"HomePhone\">\n          <DataField>HomePhone</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Extension\">\n          <DataField>Extension</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Photo\">\n          <DataField>Photo</DataField>\n          <rd:TypeName>System.Byte[]</rd:TypeName>\n        </Field>\n        <Field Name=\"Notes\">\n          <DataField>Notes</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"PhotoPath\">\n          <DataField>PhotoPath</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>.5in</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Top>.1in</Top>\n        <Left>.1in</Left>\n        <Width>6in</Width>\n        <Height>.25in</Height>\n        <Value>Simple Test</Value>\n        <Style>\n          <FontSize>15pt</FontSize>\n          <FontWeight>Bold</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>1.25in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.875in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1.125in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>EmployeeID</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>LastName</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>FirstName</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value>Title</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox6\">\n                      <Value>TitleOfCourtesy</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox7\">\n                      <Value>BirthDate</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox8\">\n                      <Value>HireDate</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox9\">\n                      <Value>Address</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>City</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox11\">\n                      <Value>Region</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"EmployeeID\">\n                      <Value>=Fields!EmployeeID.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"LastName\">\n                      <Value>=Trim(Fields!LastName.Value)</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                      <Action>\n                        <Hyperlink>=\"lastname:\" &amp; {LastName}</Hyperlink>\n                      </Action>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"FirstName\">\n                      <Value>=Fields!FirstName.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Title\">\n                      <Value>=Fields!Title.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"TitleOfCourtesy\">\n                      <Value>=Fields!TitleOfCourtesy.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"BirthDate\">\n                      <Value>=Fields!BirthDate.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"HireDate\">\n                      <Value>=Fields!HireDate.Value</Value>\n                      <CanGrow>false</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Address\">\n                      <Value>=Fields!Address.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"City\">\n                      <Value>=Fields!City.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Region\">\n                      <Value>=Fields!Region.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <PaddingLeft>2pt</PaddingLeft>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n      </Table>\n      <Textbox Name=\"Textbox20\">\n        <Height>12pt</Height>\n        <Width>1in</Width>\n        <Value>Hello World</Value>\n        <ZIndex>1</ZIndex>\n        <Left>851.8pt</Left>\n        <Top>1.6pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <Height>242.0pt</Height>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>14pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox19\">\n        <Top>1pt</Top>\n        <Left>10pt</Left>\n        <Height>12pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "Examples/config.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<config> \n\t<localhostonly>true</localhostonly>\t<!-- change to 'false' if you want other machine to access -->\n\t<port>8080</port>\n\t<serverroot>Examples</serverroot>\n\t<cachedirectory>tempreports</cachedirectory>\n\t<tracelevel>0</tracelevel>\n\t<maxreadcache>100</maxreadcache>\n\t<mimetypes>   <!-- If a mimetype doesn't show in this list; the server won't show it\n\t\t\t\t\t\tin directory lists and gets on the file will get a 404 not found.\n\t\t\t\t\t\tThis can be used as an additional layer of security by eliminating\n\t\t\t\t\t\tfiles types that shouldn't be served.   Note: html, gif, png, rdl, xml, pdf\n\t\t\t\t\t\tshould always be in this list. -->\n\t\t<mimetype>\n\t\t\t<extension>html</extension>\n\t\t\t<type>text/html</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>htm</extension>\n\t\t\t<type>text/html</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>mht</extension>\n\t\t\t<type>message/rfc822</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>mhtml</extension>\n\t\t\t<type>message/rfc822</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>xml</extension>\n\t\t\t<type>application/xml</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>pdf</extension>\n\t\t\t<type>application/pdf</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>xhtml</extension>\n\t\t\t<type>application/xhtml+xml</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>gif</extension>\n\t\t\t<type>image/gif</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>jpeg</extension>\n\t\t\t<type>image/jpeg</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>jpg</extension>\n\t\t\t<type>image/jpeg</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>jpe</extension>\n\t\t\t<type>image/jpeg</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>png</extension>\n\t\t\t<type>image/png</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>txt</extension>\n\t\t\t<type>text/plain</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>rtf</extension>\n\t\t\t<type>text/richtext</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>tiff</extension>\n\t\t\t<type>image/tiff</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>tif</extension>\n\t\t\t<type>image/tiff</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>rdl</extension>\n\t\t\t<type>application/rdl</type>\n\t\t</mimetype>\n\t</mimetypes>\n</config>"
  },
  {
    "path": "Examples/designerstate.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<designerstate>\n  <CurrentFiles>\n  </CurrentFiles>\n  <RecentFilesMax>5</RecentFilesMax>\n  <RecentFiles>\n  </RecentFiles>\n  <Help>https://github.com/majorsilence/My-FyiReporting/wiki/_pages</Help>\n  <MapSubtypes>usa_map, world_map</MapSubtypes>\n  <EditLines>true</EditLines>\n  <OutlineReportItems>true</OutlineReportItems>\n  <ShowTabbedInterface>true</ShowTabbedInterface>\n  <PropertiesAutoHide>true</PropertiesAutoHide>\n  <PropertiesLocation>right</PropertiesLocation>\n  <Toolbar>\n    <item>New</item>\n    <item>Open</item>\n    <item>Save</item>\n    <item>Space</item>\n    <item>Cut</item>\n    <item>Copy</item>\n    <item>Paste</item>\n    <item>Undo</item>\n    <item>Space</item>\n    <item>Textbox</item>\n    <item>Chart</item>\n    <item>Table</item>\n    <item>List</item>\n    <item>Image</item>\n    <item>Matrix</item>\n    <item>Subreport</item>\n    <item>Rectangle</item>\n    <item>Line</item>\n    <item>Space</item>\n    <item>Edit</item>\n    <item>Newline</item>\n    <item>Bold</item>\n    <item>Italic</item>\n    <item>Underline</item>\n    <item>Space</item>\n    <item>Align</item>\n    <item>Space</item>\n    <item>Font</item>\n    <item>FontSize</item>\n    <item>Space</item>\n    <item>ForeColor</item>\n    <item>BackColor</item>\n    <item>Space</item>\n    <item>Print</item>\n    <item>Space</item>\n    <item>Zoom</item>\n    <item>SelectTool</item>\n    <item>Space</item>\n    <item>PDF</item>\n    <item>HTML</item>\n    <item>Excel</item>\n    <item>XML</item>\n    <item>MHT</item>\n    <item>CSV</item>\n    <item>RTF</item>\n    <item>TIF</item>\n  </Toolbar>\n  <CustomColors>16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215</CustomColors>\n</designerstate>"
  },
  {
    "path": "Examples/mostly-empty.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Report xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n  xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"\n  xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <PageHeader>\n    <Height>.5in</Height>\n    <ReportItems>\n      <Textbox Name=\"Header\">\n        <Value>Test Header</Value>\n        <Style>\n          <FontSize>15pt</FontSize>\n          <FontWeight>Bold</FontWeight>\n        </Style>\n        <Top>.1in</Top>\n        <Left>.1in</Left>\n        <Width>6in</Width>\n        <Height>.25in</Height>\n        <CanGrow>false</CanGrow>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Value>Text Area 1</Value>\n        <Style>\n          <FontSize>12pt</FontSize>\n          <FontWeight>Bold</FontWeight>\n        </Style>\n        <Top>.1in</Top>\n        <Left>.1in</Left>\n        <Width>6in</Width>\n        <Height>.25in</Height>\n        <CanGrow>false</CanGrow>\n      </Textbox>\n      <Textbox Name=\"Textbox2\">\n        <Value>Lorem ipsum.</Value>\n        <Style>\n          <FontSize>12pt</FontSize>\n          <BackgroundColor>gray</BackgroundColor>\n        </Style>\n        <Top>1in</Top>\n        <Left>1in</Left>\n        <Width>6in</Width>\n        <Height>4in</Height>\n        <CanGrow>false</CanGrow>\n      </Textbox>\n    </ReportItems>\n    <Height>10in</Height>\n    <Width>7.5in</Width>\n  </Body>\n  <PageFooter>\n    <Height>14pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Footer\">\n        <Value>0</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n        <Top>1pt</Top>\n        <Left>10pt</Left>\n        <Width>3in</Width>\n        <Height>12pt</Height>\n        <CanGrow>false</CanGrow>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n</Report>"
  },
  {
    "path": "Examples/readerstate.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<readerstate>\n  <CurrentFiles />\n  <RecentFiles>\n  </RecentFiles>\n</readerstate> "
  },
  {
    "path": "Examples/usa_map.xml",
    "content": "<MapData>\n  <Polygon>\n    <Points>32,4,30,9,32,16,32,24,30,32,30,36,39,42,40,50,53,52,61,55,71,55,82,54,92,58,100,58,100,52,109,14,54,2,53,7,53,12,54,17,50,22,46,27,45,21,49,15,48,12,32,4</Points>\n    <Keys>WA,Washington</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>8,99,8,91,8,86,31,39,39,42,39,50,51,51,58,55,81,55,100,58,105,65,99,76,93,83,95,87,86,119,8,99</Points>\n    <Keys>OR,Oregon</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>7,99,55,112,43,156,92,231,96,237,96,244,92,247,91,253,87,257,88,263,84,266,55,261,54,260,53,251,46,242,43,241,43,237,38,234,30,227,20,221,21,212,17,210,10,191,11,186,13,183,9,171,13,171,12,168,12,164,9,164,5,161,2,149,3,139,1,127,2,118,7,111,7,99</Points>\n    <Keys>CA,California</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>110,12,120,16,116,31,119,38,123,45,127,53,131,56,127,63,125,71,127,72,132,71,134,78,134,84,138,87,139,93,154,92,156,90,159,94,153,132,87,119,96,87,94,84,105,66,100,58,100,52,110,12</Points>\n    <Keys>ID,Idaho</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>120,17,178,27,241,34,235,94,198,91,161,87,159,94,155,90,153,92,144,92,139,92,138,87,134,84,132,70,128,71,125,70,127,63,131,55,126,53,119,39,116,30,120,17</Points>\n    <Keys>MN,Montana</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>236,95,231,156,152,147,153,132,159,93,161,87,236,95</Points>\n    <Keys>WY,Wyoming</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>241,34,311,37,311,50,314,58,314,68,315,76,317,78,317,83,272,83,237,81,241,34</Points>\n    <Keys>ND,North Dakota</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>237,81,275,83,316,84,313,90,318,93,318,121,317,125,317,128,317,136,308,132,302,131,301,133,294,129,272,128,244,126,238,127,233,125,237,81</Points>\n    <Keys>SD,South Dakota</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>233,125,237,127,246,126,270,127,293,129,301,133,304,132,316,136,319,142,321,145,322,151,323,157,325,167,330,176,253,174,253,158,230,156,233,125</Points>\n    <Keys>NE,Nebraska</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>253,174,329,176,336,178,334,181,336,186,339,189,339,221,339,222,291,221,249,220,253,174</Points>\n    <Keys>KS,Kansas</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>238,220,339,222,340,233,341,241,342,273,342,274,335,271,332,270,331,272,326,270,323,271,319,272,315,271,311,270,309,272,308,270,305,271,302,268,300,271,296,267,292,267,287,266,282,262,278,262,274,259,274,230,238,227,238,220</Points>\n    <Keys>OK,Oklahoma</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>238,227,231,296,186,292,185,296,188,298,191,301,198,309,207,318,208,323,209,329,214,335,219,339,224,342,228,342,231,338,234,332,238,332,239,330,242,332,247,332,252,334,259,341,265,353,273,366,275,367,276,371,276,376,278,377,282,385,285,386,288,387,293,391,299,391,304,394,307,392,305,385,302,379,304,373,301,370,305,370,306,367,304,364,308,364,309,360,312,358,313,354,315,356,317,354,319,354,326,350,333,346,334,343,337,341,336,335,339,334,339,339,344,337,350,335,354,330,354,326,353,320,355,315,352,306,352,302,347,297,348,276,347,275,344,275,341,273,336,271,332,270,330,271,326,269,319,272,311,269,309,272,308,269,304,271,302,268,300,271,296,267,289,266,284,264,281,261,277,261,274,258,273,230,238,227</Points>\n    <Keys>TX,Texas</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>165,212,237,220,238,227,230,296,186,292,184,296,171,294,165,294,164,300,153,299,165,212</Points>\n    <Keys>NM,New Mexico</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>106,202,103,214,102,217,96,214,95,222,94,230,92,231,95,237,96,244,92,247,91,252,87,256,88,263,84,265,83,269,129,296,153,298,165,213,106,202</Points>\n    <Keys>AR,Arizona</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>54,111,42,156,92,231,94,230,96,214,102,216,106,202,120,126,54,111</Points>\n    <Keys>NV,Nevada</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>120,125,153,132,151,146,174,150,166,211,163,213,106,202,120,125</Points>\n    <Keys>UT,Utah</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>325,167,341,166,372,165,375,168,375,175,378,181,384,185,385,190,387,190,392,192,391,197,390,201,400,209,402,216,404,218,406,220,406,226,403,226,402,231,400,235,393,236,395,230,393,228,340,229,338,222,338,189,335,186,334,181,336,178,329,175,325,167</Points>\n    <Keys>MO,Missouri</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>57,321,54,323,48,329,46,329,45,331,51,337,50,338,48,337,46,337,42,338,43,341,46,344,50,344,52,343,52,346,49,348,47,348,46,350,44,353,45,355,47,356,46,359,47,360,50,358,50,360,50,364,53,362,55,364,59,363,58,365,57,368,54,371,52,373,49,374,47,376,45,377,50,375,52,375,52,376,54,374,56,373,57,370,60,369,63,365,64,362,64,360,66,356,68,355,68,358,69,360,71,358,72,356,71,354,75,354,80,356,86,355,88,356,91,356,93,358,98,362,102,361,104,361,103,363,106,365,106,363,107,361,109,364,108,360,103,358,94,351,92,354,89,353,84,352,75,323,62,323,57,321</Points>\n    <Keys>AK,Alaska</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>165,377,164,379,163,380,164,381,164,383,166,384,168,383,171,382,170,379,165,377</Points>\n    <Keys>HI,Hawaii</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>155,370,159,370,161,372,163,373,160,374,157,373,155,370</Points>\n    <Keys>HI,Hawaii</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>148,367,151,367,152,369,148,367</Points>\n    <Keys>HI,Hawaii</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>141,363,139,364,142,365,141,363</Points>\n    <Keys>HI,Hawaii</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>136,365,136,365,137,364,136,365</Points>\n    <Keys>HI,Hawaii</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>348,283,384,283,386,287,388,293,384,299,382,304,380,301,381,306,381,309,380,313,384,313,399,312,404,312,404,315,404,318,407,322,406,327,407,328,409,326,410,330,407,332,408,334,411,337,415,340,412,342,407,339,404,336,401,335,403,338,401,338,402,340,401,341,398,339,396,339,392,342,391,339,389,341,386,337,382,335,381,332,379,334,378,332,374,333,375,335,372,337,363,334,359,333,359,330,357,333,351,334,354,330,354,325,352,320,354,315,352,306,352,302,347,296,348,283</Points>\n    <Keys>LA,Louisiana</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>394,251,395,252,392,255,391,260,387,262,387,264,385,268,385,271,383,275,385,279,383,282,386,287,388,293,384,298,381,303,379,300,381,306,380,312,389,312,398,312,403,312,404,318,406,322,405,326,407,327,409,324,411,322,415,321,416,320,419,321,423,321,422,314,421,249,394,251</Points>\n    <Keys>MS,Mississippi</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>339,228,393,227,395,230,392,236,400,235,400,237,398,239,399,241,396,245,397,248,394,251,394,251,391,254,391,259,387,262,386,263,384,267,385,271,382,274,384,278,382,282,347,282,348,275,346,275,343,274,341,274,341,240,339,228</Points>\n    <Keys>AR,Arkansas</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>317,122,344,121,371,121,375,119,376,122,376,125,377,130,379,133,382,133,383,136,385,138,388,142,388,144,386,146,386,149,383,151,380,152,379,155,381,158,379,163,376,164,375,167,372,164,324,166,321,145,317,136,317,122</Points>\n    <Keys>IA,Iowa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>311,37,311,50,314,58,313,68,314,75,316,78,316,83,313,89,318,92,318,121,344,120,371,121,374,119,374,114,368,109,363,106,359,103,358,97,357,91,357,89,356,88,358,84,362,80,362,71,374,61,378,55,385,53,388,50,383,48,376,48,375,47,371,50,369,50,367,49,365,48,363,48,362,45,359,47,356,42,349,42,347,44,344,42,340,42,339,41,336,40,336,34,333,31,332,31,331,36,330,37,311,37</Points>\n    <Keys>MI,Minnesota</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>362,70,364,70,367,71,371,69,377,66,377,68,377,72,380,71,383,72,385,75,388,77,395,77,399,79,405,80,407,82,410,83,410,87,410,89,412,90,413,92,413,95,411,97,410,100,412,100,413,97,414,96,416,94,417,91,419,90,419,94,417,97,416,101,414,103,414,107,414,114,413,118,413,121,412,124,415,127,414,132,408,133,396,134,385,135,383,136,382,133,379,132,377,130,376,125,376,122,374,118,373,113,367,108,359,102,356,91,357,89,355,87,357,83,362,80,362,70</Points>\n    <Keys>WI,Wisconsin</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>383,136,385,135,405,133,414,132,415,137,418,142,420,146,420,158,421,160,421,172,421,174,422,185,423,190,422,193,421,197,419,201,418,205,418,206,418,209,419,211,416,211,414,212,414,215,415,217,412,217,408,215,404,218,401,216,400,208,390,200,392,192,386,190,384,189,384,185,378,180,375,175,374,167,376,164,379,163,381,157,378,155,380,152,382,151,386,148,386,146,388,144,388,141,383,136</Points>\n    <Keys>IL,Illinois</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>383,72,384,74,387,77,395,76,398,78,405,79,406,81,409,82,409,88,412,89,413,91,417,84,419,81,420,82,421,81,423,80,423,81,423,83,426,81,426,78,432,77,434,75,437,75,440,76,442,78,443,75,444,75,447,75,451,74,450,73,448,71,447,67,445,69,439,69,438,64,433,66,427,66,422,71,419,70,418,69,416,70,414,70,409,65,405,65,404,64,403,66,402,63,404,62,408,57,405,56,399,61,398,63,392,67,389,67,383,72</Points>\n    <Keys>MI,Michigan</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>427,143,430,140,430,136,432,133,431,124,429,118,427,113,427,108,427,105,428,104,429,97,430,96,430,93,432,92,435,89,436,90,435,93,435,95,437,94,438,91,437,88,438,86,441,85,440,82,441,79,442,78,444,80,446,81,449,81,450,83,453,83,454,84,457,84,459,86,460,87,459,87,457,89,461,92,460,99,459,101,458,103,456,105,455,108,456,110,459,110,462,106,462,106,465,103,467,103,471,110,472,115,473,119,473,123,470,124,469,128,467,131,466,134,465,137,465,139,463,141,457,141,450,142,449,141,427,143</Points>\n    <Keys>MI,Michigan</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>419,146,423,145,426,143,436,142,449,141,450,142,451,146,451,155,452,164,453,172,454,182,453,185,454,186,453,187,451,187,448,188,447,190,448,191,446,194,444,196,443,198,442,199,440,199,438,197,437,199,436,202,436,203,433,202,431,201,429,204,426,203,424,203,423,204,420,204,418,204,419,201,420,196,423,190,421,174,420,159,420,156,420,148,419,146</Points>\n    <Keys>IN,Indiana</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>406,226,406,219,404,218,407,214,412,217,415,217,413,215,413,212,416,210,418,211,418,208,417,204,422,204,424,203,425,203,428,204,431,201,435,203,435,201,437,197,439,198,439,198,442,198,443,196,445,194,447,191,446,190,447,188,451,187,453,187,454,185,453,184,454,181,459,181,461,184,461,185,465,185,466,186,469,186,471,186,473,186,477,184,480,186,482,189,482,192,487,199,490,201,490,202,485,207,485,207,481,213,479,214,478,215,472,218,469,219,460,220,442,221,426,223,420,223,420,225,413,226,406,226</Points>\n    <Keys>KY,Kentucky</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>402,226,413,226,420,225,419,222,426,222,442,220,457,220,470,219,474,217,485,217,497,214,497,218,495,219,494,222,491,222,487,226,485,226,482,231,479,230,476,234,473,235,470,237,471,239,470,239,467,240,467,244,451,246,439,247,428,248,393,251,396,248,395,245,399,241,398,239,400,237,400,235,402,231,402,226</Points>\n    <Keys>TN,Tennessee</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>421,248,440,247,451,246,459,272,465,286,464,287,464,292,462,293,463,296,464,298,465,303,466,306,450,308,439,309,433,310,432,312,435,314,436,319,434,319,433,321,430,322,431,319,429,317,428,314,427,316,426,319,426,321,425,320,422,320,422,313,421,294,421,248</Points>\n    <Keys>AL,Alabama</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>435,319,434,314,432,312,433,309,441,308,450,307,466,306,469,310,473,310,487,309,503,308,504,311,505,310,506,304,508,304,509,305,512,304,513,307,513,309,512,310,514,310,516,312,517,314,517,317,517,319,519,320,521,324,523,327,526,330,527,332,529,334,530,336,530,341,534,346,537,352,540,356,543,362,543,375,542,378,541,377,541,379,541,382,541,384,542,385,541,387,540,388,538,391,536,392,537,389,539,386,537,387,535,387,531,387,528,381,524,378,520,377,519,375,518,372,514,368,514,364,513,363,512,363,512,365,508,362,505,356,506,352,506,350,504,348,503,352,502,351,501,345,503,340,501,334,499,331,496,330,491,326,482,318,477,319,477,322,475,322,471,325,467,326,464,326,462,323,459,320,459,318,456,319,454,318,450,316,448,317,445,317,443,317,440,317,439,316,438,318,435,319</Points>\n    <Keys>FL,Florida</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>451,245,467,244,476,243,482,243,482,244,481,247,483,248,487,250,487,252,493,258,495,258,496,260,498,262,501,263,503,267,506,268,507,269,508,270,508,273,513,278,514,282,515,282,515,285,513,286,514,289,513,290,514,291,513,293,512,295,512,297,511,298,512,300,512,301,512,304,509,305,507,304,505,303,505,309,504,310,502,308,484,308,475,309,468,309,465,305,464,298,462,292,464,291,464,286,465,285,459,272,451,245</Points>\n    <Keys>GA,Georgia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>467,243,467,240,469,239,471,239,470,237,472,235,475,234,479,230,482,231,485,225,486,226,491,222,493,222,494,219,496,218,497,214,512,213,525,211,541,208,565,204,567,204,568,205,569,208,567,208,565,208,565,210,563,211,561,210,561,212,561,213,558,211,558,214,559,215,560,214,562,213,565,212,567,213,568,215,568,213,570,211,571,210,573,212,574,214,575,216,575,218,575,220,572,222,573,220,573,218,571,215,571,215,569,218,568,220,566,221,561,221,559,222,562,223,562,225,562,227,565,227,567,227,569,226,568,227,566,230,564,232,563,232,559,234,554,236,549,244,549,247,545,248,541,249,525,238,522,238,521,240,514,240,514,241,513,240,508,236,506,236,497,237,491,238,487,239,482,243,467,243</Points>\n    <Keys>NC,North Carolina</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>541,249,541,250,537,256,536,257,536,259,534,260,534,260,535,262,534,264,531,266,529,269,528,270,524,272,525,273,524,275,520,275,517,276,518,277,517,280,515,281,514,281,513,277,508,273,507,269,505,268,503,266,501,263,497,262,495,259,494,258,487,252,487,250,481,246,482,242,487,238,492,237,504,236,507,236,508,236,514,240,514,239,521,240,521,238,525,237,541,249</Points>\n    <Keys>SC,South Carolina</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>474,217,485,216,497,214,511,212,517,212,538,208,553,205,565,203,566,203,566,200,565,199,563,197,561,197,560,199,559,199,556,196,554,196,549,195,554,194,555,193,553,190,556,192,559,191,558,188,557,185,557,183,555,180,551,180,547,178,543,177,544,174,545,170,541,169,540,165,536,165,535,167,532,166,529,165,529,168,528,171,526,174,523,176,522,177,522,181,521,183,517,186,516,189,512,192,511,195,511,196,511,199,507,200,504,201,502,203,499,204,496,205,492,204,490,201,490,201,488,203,484,207,480,213,479,214,474,217</Points>\n    <Keys>VA,Virgina</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>450,142,457,141,462,141,464,139,468,140,470,141,471,143,473,142,475,143,479,141,482,139,483,140,490,135,496,131,498,137,499,143,500,148,501,151,500,153,501,156,500,157,499,161,499,163,499,167,496,170,493,172,491,174,489,177,487,181,485,184,485,186,484,187,482,188,480,186,476,183,473,185,466,185,465,185,461,184,461,183,458,180,453,180,452,165,451,154,451,145,450,142</Points>\n    <Keys>OH,Ohio</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>482,188,484,186,485,183,488,178,492,173,492,172,495,170,499,167,499,160,499,157,500,156,501,154,502,157,503,160,502,164,503,165,511,164,514,163,515,166,516,169,520,166,524,164,526,164,528,162,530,162,532,162,534,163,536,165,535,167,529,165,529,168,526,173,524,175,522,177,522,180,519,184,517,186,516,188,512,192,511,195,510,198,504,201,502,202,496,204,492,203,490,201,487,199,482,192,482,188</Points>\n    <Keys>WV,West Virgina</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>495,131,505,125,505,126,506,128,524,125,542,122,554,119,558,121,560,125,563,127,563,129,562,131,561,133,561,135,561,138,561,139,568,145,562,152,559,152,556,155,545,156,532,159,520,161,514,162,511,164,503,164,502,164,502,159,501,154,500,152,501,151,498,137,495,131</Points>\n    <Keys>PA,Pennsylvania</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>505,125,506,124,513,115,512,113,510,110,511,107,517,105,527,105,528,104,533,104,535,102,540,98,539,94,539,90,538,90,540,85,549,73,567,68,568,79,570,89,572,90,575,102,575,113,578,126,577,127,577,129,576,130,578,131,580,130,583,129,586,128,588,127,589,126,591,124,591,126,593,125,595,124,595,126,593,128,590,129,586,131,583,133,580,134,578,135,577,136,574,135,575,133,574,131,570,129,563,127,560,124,557,120,553,118,541,122,506,127,505,125</Points>\n    <Keys>NY,New York</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>563,126,569,128,574,131,574,133,574,134,574,137,573,139,575,140,575,146,577,148,574,155,572,161,570,163,569,161,566,161,563,160,560,157,561,152,567,144,561,138,561,132,563,129,563,126</Points>\n    <Keys>NJ,New Jersey</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>513,162,529,159,545,156,555,155,558,155,559,158,560,163,561,168,563,173,568,172,570,174,569,176,569,179,568,179,567,182,566,185,564,189,564,193,562,186,564,183,565,180,563,182,561,178,559,176,557,177,555,174,556,172,554,169,555,165,553,162,555,160,554,158,553,161,550,163,549,164,551,166,552,170,552,173,552,175,553,177,555,180,550,180,546,177,542,177,545,169,541,168,539,165,535,164,533,162,532,161,528,161,526,164,523,163,520,166,515,169,513,162</Points>\n    <Keys>MD,Maryland</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>557,154,559,152,561,151,560,156,563,160,564,163,566,166,567,166,568,167,569,168,569,170,569,171,569,171,567,171,562,172,561,168,559,158,557,154</Points>\n    <Keys>DE,Delaware</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>563,127,574,131,574,134,573,136,573,138,575,140,574,145,576,148,574,153,572,160,570,163,569,161,565,160,563,159,560,157,562,152,568,144,561,138,561,131,563,127</Points>\n    <Keys>NJ,New Jersey</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>575,113,580,112,587,111,593,109,594,111,594,114,595,115,595,119,590,121,585,123,582,125,577,128,576,126,578,125,575,113</Points>\n    <Keys>CT,Connecticut</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>593,109,594,111,593,114,594,115,594,118,595,119,597,119,598,118,599,116,599,113,600,112,601,114,602,115,602,113,601,112,600,110,597,108,593,109</Points>\n    <Keys>RI,Rhode Island</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>575,103,580,102,583,101,588,100,594,98,596,97,598,94,601,94,601,95,603,96,602,98,602,99,601,102,602,103,605,103,606,106,607,107,608,108,610,109,613,108,613,106,612,104,610,104,611,103,614,103,614,105,615,107,615,109,613,110,612,110,611,111,608,112,607,111,605,112,604,114,602,112,600,110,596,108,592,108,586,110,581,111,575,112,575,103</Points>\n    <Keys>MA,Massachusetts</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>567,68,576,65,585,64,585,67,586,71,586,73,583,75,582,85,582,92,582,100,575,103,572,90,569,88,568,78,567,68</Points>\n    <Keys>VT,Vermont</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>585,64,586,61,586,59,589,59,596,85,599,88,601,91,601,94,597,93,596,96,588,100,582,100,583,85,582,75,586,73,586,71,584,67,585,64</Points>\n    <Keys>NH,New Hampshire</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>589,59,590,57,592,55,592,52,593,49,593,42,593,34,598,22,600,20,601,22,602,23,604,23,608,19,609,20,615,22,620,37,620,41,621,43,624,43,627,48,630,50,631,52,633,53,631,55,628,58,626,59,624,63,622,61,621,64,618,63,618,65,617,65,615,63,615,66,615,70,614,72,612,73,611,73,611,74,608,75,608,75,607,78,607,76,604,77,603,79,603,80,604,82,603,83,603,84,602,85,601,87,602,89,601,90,596,85,589,59</Points>\n    <Keys>ME,Maine</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>174,150,230,156,253,158,253,173,248,220,237,220,166,212,174,150</Points>\n    <Keys>CO,Colorado</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>364,69,374,61,377,55,384,53,388,50,392,47,393,43,396,41,397,44,398,41,399,38,399,42,403,39,403,36,403,33,407,35,420,36,423,39,426,46,430,47,435,46,438,46,437,49,437,51,442,55,442,56,440,57,441,61,444,61,445,62,444,63,444,65,444,69,439,68,438,64,433,65,427,65,422,70,418,68,416,69,413,69,409,64,405,65,404,63,402,62,404,61,408,56,404,55,401,59,400,60,398,63,392,66,389,67,383,72,380,70,377,72,376,66,367,71,364,69</Points>\n    <FillColor>Azure</FillColor>\n  </Polygon>\n  <Polygon>\n    <Points>409,100,410,96,413,95,412,91,419,81,420,82,422,80,423,83,426,80,426,78,432,77,433,75,437,75,440,76,441,78,440,81,440,84,438,86,437,88,438,91,437,94,434,95,435,91,436,90,435,89,432,92,429,93,429,96,429,97,427,104,427,105,427,113,430,124,432,132,429,136,430,139,427,142,426,143,423,144,419,145,415,137,414,132,415,126,411,124,413,120,414,114,414,103,416,100,418,95,418,90,416,90,415,94,413,96,409,100</Points>\n    <FillColor>Azure</FillColor>\n  </Polygon>\n  <Polygon>\n    <Points>447,66,449,66,450,69,461,70,475,69,476,70,482,70,484,69,492,78,492,78,494,78,494,81,498,85,498,86,495,85,495,88,497,89,496,90,494,91,491,91,488,89,487,91,482,86,481,83,481,82,477,82,477,84,480,87,482,90,482,94,479,96,479,99,479,104,480,112,473,118,471,110,466,103,465,102,459,109,456,109,454,108,456,105,459,99,461,92,456,89,460,86,457,83,454,83,452,82,450,82,448,80,446,80,442,77,443,75,446,75,451,74,447,70,447,66</Points>\n    <FillColor>Azure</FillColor>\n  </Polygon>\n  <Polygon>\n    <Points>465,139,464,137,467,130,469,128,470,124,472,123,474,124,474,126,474,127,472,128,470,130,468,133,471,134,473,133,475,134,480,129,482,129,485,123,488,122,497,121,500,121,498,119,500,117,504,115,508,114,511,113,512,115,504,125,495,131,483,139,482,139,474,142,473,141,471,142,470,140,465,139</Points>\n    <FillColor>Azure</FillColor>\n  </Polygon>\n  <Polygon>\n    <Points>509,110,504,110,503,108,504,104,507,100,517,96,523,94,525,94,528,94,530,92,534,88,537,85,539,85,537,89,539,90,538,94,540,98,533,104,527,103,527,105,517,104,510,107,509,110</Points>\n    <FillColor>Azure</FillColor>\n  </Polygon>\n  <Text>\n    <Value>Washington</Value>\n    <Location>39,30</Location>\n  </Text>\n  <Text>\n    <Value>Oregon</Value>\n    <Location>34,75</Location>\n  </Text>\n  <Text>\n    <Value>Idaho</Value>\n    <Location>104,97</Location>\n  </Text>\n  <Text>\n    <Value>Montana</Value>\n    <Location>162,54</Location>\n  </Text>\n  <Text>\n    <Value>California</Value>\n    <Location>17,197</Location>\n  </Text>\n  <Text>\n    <Value>Nevada</Value>\n    <Location>63,152</Location>\n  </Text>\n  <Text>\n    <Value>Utah</Value>\n    <Location>129,165</Location>\n  </Text>\n  <Text>\n    <Value>Arizona</Value>\n    <Location>107,246</Location>\n  </Text>\n  <Text>\n    <Value>New Mexico</Value>\n    <Location>168,254</Location>\n  </Text>\n  <Text>\n    <Value>Colorado</Value>\n    <Location>187,180</Location>\n  </Text>\n  <Text>\n    <Value>Wyoming</Value>\n    <Location>172,119</Location>\n  </Text>\n  <Text>\n    <Value>North Dakota</Value>\n    <Location>242,59</Location>\n  </Text>\n  <Text>\n    <Value>South Dakota</Value>\n    <Location>244,102</Location>\n  </Text>\n  <Text>\n    <Value>Nebraska</Value>\n    <Location>258,143</Location>\n  </Text>\n  <Text>\n    <Value>Kansas</Value>\n    <Location>272,193</Location>\n  </Text>\n  <Text>\n    <Value>Texas</Value>\n    <Location>267,301</Location>\n  </Text>\n  <Text>\n    <Value>Oklahoma</Value>\n    <Location>282,239</Location>\n  </Text>\n  <Text>\n    <Value>Minnesota</Value>\n    <Location>316,54</Location>\n  </Text>\n  <Text>\n    <Value>Iowa</Value>\n    <Location>337,139</Location>\n  </Text>\n  <Text>\n    <Value>Wisconsin</Value>\n    <Location>365,99</Location>\n  </Text>\n  <Text>\n    <Value>MI</Value>\n    <Location>399,68</Location>\n  </Text>\n  <Text>\n    <Value>Michigan</Value>\n    <Location>428,112</Location>\n  </Text>\n  <Text>\n    <Value>Illinois</Value>\n    <Location>382,167</Location>\n  </Text>\n  <Text>\n    <Value>Indiana</Value>\n    <Location>420,170</Location>\n  </Text>\n  <Text>\n    <Value>Kentucky</Value>\n    <Location>425,204</Location>\n  </Text>\n  <Text>\n    <Value>Ohio</Value>\n    <Location>462,156</Location>\n  </Text>\n  <Text>\n    <Value>Tennessee</Value>\n    <Location>409,230</Location>\n  </Text>\n  <Text>\n    <Value>Mississippi</Value>\n    <Location>378,296</Location>\n  </Text>\n  <Text>\n    <Value>Louisiana</Value>\n    <Location>352,317</Location>\n  </Text>\n  <Text>\n    <Value>Alabama</Value>\n    <Location>420,277</Location>\n  </Text>\n  <Text>\n    <Value>Florida</Value>\n    <Location>505,344</Location>\n  </Text>\n  <Text>\n    <Value>Georgia</Value>\n    <Location>464,287</Location>\n  </Text>\n  <Text>\n    <Value>South</Value>\n    <Location>489,240</Location>\n  </Text>\n  <Text>\n    <Value>Carolina</Value>\n    <Location>493,249</Location>\n  </Text>\n  <Text>\n    <Value>North Carolina</Value>\n    <Location>485,224</Location>\n  </Text>\n  <Text>\n    <Value>Virginia</Value>\n    <Location>512,194</Location>\n  </Text>\n  <Text>\n    <Value>West</Value>\n    <Location>491,172</Location>\n  </Text>\n  <Text>\n    <Value>Virgina</Value>\n    <Location>484,180</Location>\n  </Text>\n  <Text>\n    <Value>Pennsylvania</Value>\n    <Location>499,138</Location>\n  </Text>\n  <Text>\n    <Value>New York</Value>\n    <Location>516,106</Location>\n  </Text>\n  <Text>\n    <Value>VT</Value>\n    <Location>567,71</Location>\n  </Text>\n  <Text>\n    <Value>NH</Value>\n    <Location>581,83</Location>\n  </Text>\n  <Text>\n    <Value>Maine</Value>\n    <Location>593,46</Location>\n  </Text>\n  <Text>\n    <Value>Mass</Value>\n    <Location>612,91</Location>\n  </Text>\n  <Text>\n    <Value>RI</Value>\n    <Location>600,114</Location>\n  </Text>\n  <Text>\n    <Value>CT</Value>\n    <Location>577,111</Location>\n  </Text>\n  <Text>\n    <Value>New</Value>\n    <Location>576,139</Location>\n  </Text>\n  <Text>\n    <Value>Jersey</Value>\n    <Location>576,147</Location>\n  </Text>\n  <Text>\n    <Value>Delaware</Value>\n    <Location>571,162</Location>\n  </Text>\n  <Text>\n    <Value>Maryland</Value>\n    <Location>571,173</Location>\n  </Text>\n  <Text>\n    <Value>Missouri</Value>\n    <Location>344,205</Location>\n  </Text>\n  <Text>\n    <Value>Arkansas</Value>\n    <Location>342,242</Location>\n  </Text>\n  <Text>\n    <Value>Alaska</Value>\n    <Location>54,333</Location>\n  </Text>\n  <Text>\n    <Value>Hawaii</Value>\n    <Location>127,371</Location>\n  </Text>\n</MapData>"
  },
  {
    "path": "Examples/world_map.xml",
    "content": "<MapData>\n  <Polygon>\n    <Points>736,139,736,138,737,138,738,139,739,138,740,138,741,138,741,139,742,139,743,139,744,140,744,139,745,139,746,139,747,139,748,139,748,138,749,138,750,138,750,137,751,136,751,135,752,135,753,135,754,136,753,136,753,137,754,137,754,139,754,140,755,140,756,140,757,140,757,139,758,139,759,139,759,138,761,138,761,139,760,139,761,139,763,138,764,138,764,139,763,139,763,140,763,139,763,140,762,140,761,140,759,140,757,140,756,140,756,141,755,141,754,141,753,142,753,143,754,143,754,144,754,145,754,146,753,146,753,147,752,147,753,147,753,148,752,148,752,149,751,149,749,148,749,149,750,149,750,150,750,151,749,151,748,151,748,152,748,153,747,153,747,154,748,155,747,156,746,156,746,155,745,155,744,155,743,156,742,156,743,156,741,157,740,157,739,158,738,159,739,159,738,160,739,161,738,161,736,162,735,162,734,162,732,162,730,162,728,162,727,162,725,162,722,161,723,160,725,158,725,157,725,156,724,156,722,156,722,155,722,154,722,153,721,151,722,150,721,150,721,149,721,148,722,148,722,147,723,146,723,145,723,144,724,144,725,144,726,144,726,145,727,145,729,144,729,143,730,143,731,142,732,142,733,142,733,141,734,140,734,139,735,139,736,139</Points>\n    <Keys>Afghanistan, AFG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>598,124,598,123,599,123,600,123,600,124,601,124,601,125,601,126,601,127,602,127,602,128,603,128,603,129,602,129,601,130,601,131,600,131,601,131,600,131,599,131,600,131,599,130,598,130,597,129,598,130,598,129,597,129,598,128,598,127,598,128,598,127,598,126,598,125,598,124,597,124,598,124</Points>\n    <Keys>Albania, ALB, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>536,154,536,153,535,152,535,151,535,150,534,149,535,148,534,147,534,146,533,145,534,145,535,145,536,144,537,143,538,143,539,143,540,143,540,142,541,142,542,141,543,141,545,141,546,141,547,141,548,140,549,140,550,140,551,140,553,140,555,140,555,141,556,141,557,140,558,140,559,139,559,140,560,140,561,140,561,139,562,139,562,140,563,140,564,140,565,140,565,141,564,141,565,141,564,143,565,143,565,144,564,144,565,145,564,146,564,147,563,147,563,148,562,148,562,149,563,150,563,151,564,151,564,152,565,153,567,154,567,156,568,160,567,160,568,161,569,162,569,164,569,166,569,167,569,168,569,169,569,170,569,171,568,171,568,172,570,174,570,176,570,177,571,177,572,177,574,178,575,180,571,183,566,185,562,188,557,192,552,193,549,194,549,193,549,192,549,191,548,191,547,190,546,190,545,190,544,189,543,188,543,187,539,185,535,182,530,179,525,175,524,175,519,172,513,169,513,167,513,164,514,164,515,163,517,162,518,162,520,162,520,161,521,161,523,161,524,160,525,159,526,159,527,158,529,158,529,157,528,157,528,156,528,155,529,155,531,155,531,154,533,154,535,154,536,154</Points>\n    <Keys>Algeria, DZA, NorthAfrica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>545,123,544,123,545,123</Points>\n    <Keys>Andorra, AND, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>576,266,576,265,577,264,578,264,579,264,579,265,578,265,577,266,577,268,576,268,576,267,576,266</Points>\n    <Keys>Angola, AGO, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>579,268,580,268,581,268,583,268,585,268,587,268,589,268,589,269,590,269,590,270,590,271,590,272,591,272,591,273,591,274,592,274,592,275,593,275,594,275,595,274,596,274,598,274,598,273,598,272,598,271,600,271,601,271,601,272,603,272,605,272,605,273,605,274,605,275,605,276,605,277,605,278,605,279,606,280,606,282,606,283,606,284,607,284,608,284,609,284,610,283,611,284,611,283,612,285,611,286,611,287,612,287,612,288,611,289,612,289,612,290,609,290,607,290,605,290,605,294,606,299,606,300,609,303,610,303,608,304,604,305,603,304,602,304,602,305,601,304,600,304,599,304,598,304,596,304,595,303,591,303,586,303,582,303,581,303,580,302,580,301,578,302,577,302,576,302,575,302,575,301,575,299,575,298,576,297,576,296,577,294,576,293,577,292,577,291,577,290,578,290,578,289,579,288,580,288,580,287,581,286,581,285,581,284,581,283,581,282,580,282,580,281,579,280,579,279,578,278,579,277,579,278,579,277,580,277,580,276,579,274,578,272,578,271,577,271,577,270,576,269,578,269,578,268,579,268</Points>\n    <Keys>Angola, AGO, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1032,453,1033,453,1032,453</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>341,448,342,447,343,447,343,448,342,448,341,448</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>365,444,365,443,364,443,365,442,366,442,366,443,367,443,368,443,367,443,367,444,366,444,365,444</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>332,454,332,453,331,453,332,453,332,452,333,452,334,451,335,451,336,451,335,452,336,452,335,452,335,453,334,453,334,454,333,454,332,454</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>376,434,375,434,374,434,373,434,374,434,375,434,376,434</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>402,432,403,432,404,432,404,433,403,433,403,432,402,432</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>347,445,347,444,348,444,349,444,349,443,350,443,350,444,349,444,350,444,351,444,350,444,350,445,349,445,348,445,347,445</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>363,437,364,437,365,436,366,436,367,437,366,437,365,437,364,437,363,437</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>268,457,268,458,267,458,267,457,268,457</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>352,444,352,443,353,443,353,444,352,444</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>315,461,314,460,313,460,312,460,311,460,312,460,313,460,314,459,315,459,315,460,316,460,316,461,315,461</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>356,439,357,438,358,438,359,438,360,439,359,439,358,439,357,439,356,439</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>102,476,102,477,101,477,100,477,99,477,98,477,99,477,101,477,102,476</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>401,484,400,484,397,484,395,483,397,483,399,483,401,483,402,483,401,484</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1048,470,1048,471,1048,470</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>225,470,226,470,227,470,227,471,226,471,225,471,225,470</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>540,458,539,458,540,458,540,459,541,459,542,460,543,460,544,461,545,460,546,460,547,461,548,461,549,461,550,461,552,461,554,460,555,461,556,461,557,461,558,461,559,461,558,461,559,461,560,460,561,460,562,460,563,460,564,460,566,460,566,461,567,461,567,460,569,460,570,460,571,460,572,460,573,461,574,461,575,461,576,461,577,461,578,460,579,460,580,459,581,459,582,459,583,459,584,459,585,459,585,460,586,460,589,460,590,460,592,460,593,460,595,460,596,460,597,461,598,460,600,460,601,461,603,461,604,461,603,461,602,461,603,461,605,461,607,461,609,461,609,462,611,462,613,461,614,461,615,461,616,461,617,461,618,461,618,460,619,460,621,460,622,461,622,460,623,460,625,460,626,460,627,460,627,459,628,459,629,458,630,458,631,458,632,458,633,458,634,458,635,458,636,459,637,459,638,459,639,459,639,458,638,458,639,457,641,457,642,457,643,458,645,458,646,459,647,459,648,459,649,460,650,460,651,459,652,460,653,460,654,461,655,460,656,460,658,459,657,459,658,459,657,458,658,458,658,457,659,457,660,457,661,457,663,456,664,456,665,456,666,456,667,455,668,455,669,454,671,454,672,454,674,453,675,453,675,454,676,454,677,453,678,452,680,453,681,453,680,453,681,454,682,454,683,454,684,454,685,453,684,453,686,453,687,453,686,453,685,453,685,452,684,452,685,452,686,452,687,452,688,452,689,452,688,453,689,452,690,452,691,452,690,452,691,452,691,451,690,451,689,450,690,450,691,450,692,450,693,449,694,449,696,449,697,449,698,449,700,448,701,449,702,449,703,449,705,449,706,449,707,450,708,450,709,450,710,450,711,451,710,451,709,451,709,452,710,452,711,452,712,452,713,452,714,452,715,452,716,453,715,453,716,453,717,453,718,453,719,453,720,453,722,453,723,453,724,453,725,453,726,454,727,454,728,454,729,453,730,453,732,454,734,454,735,454,736,454,739,454,741,454,743,454,745,454,747,454,748,454,749,455,750,455,750,456,751,456,752,456,754,457,756,456,757,456,759,456,760,456,759,457,760,457,761,457,763,457,763,458,764,459,762,459,761,459,761,460,762,460,763,460,764,459,766,458,767,458,766,459,767,459,768,459,769,459,771,458,772,458,773,458,773,457,773,456,774,456,776,455,779,455,781,454,783,454,784,453,785,453,786,452,787,451,785,451,784,450,784,449,785,448,786,448,787,449,788,449,789,450,790,450,791,450,793,450,794,450,795,450,797,450,798,449,800,449,802,449,804,449,805,449,806,451,808,451,810,451,812,451,815,450,816,450,817,450,819,450,820,450,822,450,824,450,825,450,825,449,826,449,826,447,827,446,829,446,831,447,834,448,835,448,836,448,837,448,838,448,839,448,840,448,841,447,842,447,843,447,844,447,845,448,846,448,847,448,848,447,848,446,849,446,850,447,852,447,853,447,854,447,855,448,855,449,853,448,852,448,853,449,854,449,856,449,857,449,859,450,861,450,862,450,863,450,864,450,865,451,866,451,867,451,868,450,869,450,870,450,871,450,872,450,871,450,871,449,872,449,874,448,875,448,876,448,877,448,878,448,879,448,880,448,881,449,882,449,883,449,883,450,884,450,885,450,887,450,889,450,890,450,890,451,892,451,893,451,894,451,895,451,897,451,898,451,900,451,901,451,902,451,903,450,904,450,903,450,902,449,902,448,903,448,904,448,905,449,906,450,907,450,908,451,909,451,910,450,911,450,910,450,909,450,910,449,911,449,912,449,914,449,916,449,917,449,918,450,919,450,920,450,921,450,922,450,922,451,923,451,924,452,926,451,927,452,928,451,928,450,929,450,929,449,929,448,930,448,931,449,932,449,933,449,935,449,936,449,937,449,938,449,940,449,941,449,943,449,943,448,944,447,944,446,945,446,946,446,946,447,946,448,945,448,944,449,945,449,947,449,948,449,949,449,951,449,952,450,956,450,958,450,959,450,961,451,964,451,965,451,966,451,967,451,968,451,969,451,970,452,971,452,972,452,973,452,974,451,976,452,977,452,976,453,975,453,976,453,977,454,978,454,979,454,981,454,982,455,984,455,983,456,984,456,985,456,986,456,987,456,988,456,989,456,990,456,991,456,993,456,994,456,996,456,998,456,1000,456,1002,456,1003,456,1003,457,1004,458,1004,457,1006,457,1009,458,1010,458,1010,457,1011,458,1013,458,1014,458,1016,458,1017,459,1019,459,1020,460,1020,461,1022,461,1023,462,1023,461,1024,462,1025,462,1026,462,1026,463,1028,463,1030,463,1032,463,1033,463,1035,463,1037,462,1038,462,1038,463,1039,463,1040,463,1042,463,1042,464,1044,464,1045,464,1047,465,1048,465,1049,465,1050,465,1051,466,1050,467,1049,467,1049,468,1048,469,1047,470,1046,470,1045,470,1044,471,1042,471,1041,472,1040,472,1039,473,1038,473,1036,473,1034,473,1035,474,1036,474,1034,474,1032,475,1031,475,1030,476,1031,477,1033,477,1032,477,1030,477,1028,477,1027,478,1028,479,1030,479,1029,479,1027,479,1028,480,1027,481,1028,481,1027,481,1026,481,1027,481,1029,482,1030,483,1031,484,1033,484,1035,484,1037,484,1038,484,1036,483,1037,483,1038,482,1039,482,1040,482,1041,482,1042,482,1044,483,1046,483,1047,483,1048,483,1049,483,1050,483,1051,483,1056,483,1060,484,1063,484,1065,484,1069,484,1072,485,1075,485,1079,485,1080,485,1080,495,0,495,0,485,3,486,6,486,11,486,14,486,18,486,19,486,24,486,28,486,31,486,34,486,39,486,41,486,45,486,46,486,47,485,49,485,52,485,55,485,58,484,61,484,64,484,64,483,63,482,64,482,67,482,71,482,75,482,76,482,78,482,80,482,81,482,84,482,85,482,87,481,88,481,89,481,89,480,91,480,93,479,95,479,98,480,102,480,101,479,100,478,104,477,111,476,114,476,118,476,127,475,134,475,136,475,138,475,139,475,141,474,143,474,145,473,148,473,150,473,154,473,158,472,162,472,163,471,167,471,169,471,172,472,176,472,178,472,179,472,180,472,181,472,183,473,185,473,187,473,188,473,190,473,192,473,193,473,195,473,197,472,198,473,197,473,198,473,199,473,200,473,202,473,203,474,204,473,205,473,206,473,208,473,209,473,210,474,212,475,215,475,217,476,218,476,218,475,217,474,218,473,220,473,223,473,225,473,225,474,224,474,223,475,224,475,225,475,226,475,228,475,231,475,233,476,235,476,236,475,235,475,234,474,234,473,233,472,234,472,235,472,236,472,237,472,237,471,236,471,235,471,233,471,231,471,230,471,230,470,229,470,230,469,231,469,231,468,230,468,229,468,230,468,232,468,233,467,234,467,236,467,237,467,239,466,240,467,239,467,240,467,241,467,242,467,243,467,244,467,245,467,244,467,245,466,246,467,245,467,246,467,247,467,248,467,249,467,250,466,250,467,252,467,251,468,252,468,251,468,252,468,253,469,254,469,255,469,256,469,257,468,258,469,260,469,261,469,262,469,264,468,265,468,267,468,269,468,270,468,271,468,273,468,275,468,276,468,278,468,280,468,281,469,282,469,284,469,286,469,288,469,291,469,293,469,294,470,296,469,298,470,299,470,301,469,303,470,305,471,306,471,306,470,305,470,304,470,303,469,305,469,306,469,307,469,306,468,305,468,306,468,308,468,309,468,310,468,310,469,310,468,311,468,311,469,312,470,312,469,313,469,314,469,316,469,318,469,318,470,319,470,320,470,321,471,322,471,321,470,323,470,324,470,322,470,322,469,323,469,323,468,322,468,322,467,321,467,320,467,319,467,318,467,316,467,315,466,314,466,313,465,314,465,315,465,316,465,317,464,319,464,320,464,318,463,317,463,315,463,314,463,313,463,314,463,314,462,316,463,317,462,316,462,316,461,316,460,317,460,318,460,319,460,320,460,321,460,322,460,322,459,321,459,322,459,323,459,324,459,324,458,323,458,324,458,325,458,325,457,326,457,328,457,329,457,329,458,330,459,331,459,331,460,332,460,332,461,333,460,334,460,334,459,333,459,334,459,335,458,334,458,335,458,337,458,337,457,338,457,338,456,339,456,338,455,339,455,338,455,339,454,340,454,340,453,339,453,338,453,337,453,336,453,337,453,337,452,338,452,338,451,339,451,339,452,340,453,341,452,341,451,343,451,343,450,342,450,342,449,343,449,344,449,344,448,345,448,345,449,346,449,346,448,347,448,346,448,347,448,347,447,348,447,349,447,348,447,347,447,347,446,348,446,350,446,351,446,350,446,351,445,352,445,352,444,352,445,353,445,354,444,355,444,356,444,357,443,358,442,359,442,360,442,361,442,362,442,363,441,364,441,365,441,366,441,367,441,368,440,368,441,369,441,368,441,367,441,366,441,366,442,365,442,364,442,363,443,363,444,363,445,362,446,361,447,360,448,359,449,358,450,357,451,357,452,357,453,357,454,357,455,357,456,358,457,358,458,359,459,358,459,358,460,357,461,357,462,358,463,358,464,359,465,358,466,359,466,358,467,359,467,360,467,359,468,358,468,359,469,360,469,362,470,361,471,359,471,358,471,357,471,357,472,358,473,356,473,357,473,358,474,357,474,355,475,354,475,355,476,358,476,361,477,363,477,365,478,368,478,371,479,373,480,375,480,377,480,379,481,381,481,382,481,386,482,387,482,389,482,388,482,387,482,387,483,389,483,390,484,392,483,396,484,397,484,399,484,402,485,405,485,406,485,409,485,411,484,412,484,414,483,417,484,421,484,423,484,427,484,431,484,434,484,433,484,435,483,438,483,441,482,444,482,445,482,446,481,447,481,449,481,450,480,452,480,453,480,454,479,456,479,457,479,458,479,459,478,460,478,459,477,461,477,463,476,464,476,465,476,466,476,467,475,468,475,469,474,470,473,472,473,473,473,474,473,475,473,476,473,477,472,478,472,479,471,480,470,481,470,482,469,483,469,483,468,484,468,486,468,487,468,488,468,489,468,490,468,491,468,492,467,493,467,494,467,496,467,497,466,498,466,499,467,500,467,501,467,501,466,500,466,501,466,502,466,503,465,504,464,505,464,506,464,507,464,508,463,509,463,510,463,511,462,512,462,513,462,514,462,515,463,516,463,517,462,518,462,519,462,520,462,521,462,523,462,524,462,525,462,526,462,527,462,528,461,529,461,530,461,531,461,532,461,533,461,534,461,535,461,535,460,536,460,537,460,537,459,536,458,537,458,538,458,539,458,540,458</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>354,198,354,197,354,198,354,197,354,198</Points>\n    <Keys>Antigua and Barbuda, ATG, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>354,200,354,199,354,200,354,199,355,199,354,199,354,200</Points>\n    <Keys>Antigua and Barbuda, ATG, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>334,414,334,412,334,410,334,408,335,409,335,410,335,409,334,410,335,410,335,411,336,412,337,412,339,413,340,414,342,415,344,414,344,415,343,415,342,415,341,415,340,415,340,416,338,415,335,415,334,415,334,414</Points>\n    <Keys>Argentina, ARG, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>345,415,346,415,347,415,348,415,347,415,346,415,345,415</Points>\n    <Keys>Argentina, ARG, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>340,317,341,316,342,316,342,317,343,317,345,317,346,317,346,318,346,319,347,319,347,318,348,317,351,316,351,317,352,317,353,318,353,319,354,319,355,320,356,321,356,322,358,322,359,323,361,323,361,324,362,324,363,325,364,325,365,325,366,326,367,326,367,327,366,328,365,329,365,330,365,331,364,331,365,331,364,331,364,332,365,332,366,332,367,333,368,333,369,333,370,333,371,333,371,332,372,333,373,333,373,332,373,331,374,331,375,331,375,330,376,329,376,328,376,327,376,328,376,327,377,327,378,327,378,328,379,329,378,330,378,331,378,332,377,332,377,333,376,333,375,333,375,334,374,334,373,334,373,335,372,335,372,336,371,336,371,337,370,337,370,338,369,339,368,340,367,341,366,342,366,343,366,344,366,345,365,345,366,345,365,346,365,347,365,348,365,349,365,350,364,350,364,351,364,352,364,353,364,354,365,354,366,355,368,356,368,357,367,358,368,359,369,360,369,359,369,360,370,361,369,361,369,362,368,363,367,364,367,365,366,366,364,366,362,367,360,367,358,367,356,367,354,367,353,367,352,367,353,367,353,368,352,368,353,368,353,369,353,368,353,369,353,370,352,371,352,372,353,372,352,372,353,373,353,372,353,373,352,373,351,374,349,374,348,374,347,374,345,373,344,373,344,374,345,375,344,376,345,376,344,376,344,377,345,377,346,377,346,378,347,378,347,377,348,377,349,378,349,379,348,379,347,379,347,378,346,378,345,379,344,379,346,379,347,379,346,380,345,380,344,380,344,381,344,382,344,383,344,384,343,384,344,384,343,384,342,385,343,385,343,386,342,385,342,386,341,385,340,386,339,386,338,387,337,388,337,389,337,390,338,391,339,392,342,392,342,393,342,394,342,395,341,395,340,395,341,396,339,396,338,397,337,397,337,398,336,398,336,399,337,398,336,400,335,401,334,401,334,400,334,401,333,401,333,402,332,402,332,403,332,404,333,405,332,405,331,405,332,405,332,406,332,405,333,405,333,406,334,407,334,408,334,407,332,407,331,407,330,406,327,406,324,406,323,406,323,405,322,405,323,404,322,404,323,404,323,403,322,403,323,402,322,402,322,403,321,402,320,403,320,402,320,401,319,401,319,400,319,399,319,398,320,398,321,397,322,397,322,396,323,396,323,395,322,394,323,393,322,393,323,393,323,392,324,392,324,391,324,390,324,389,325,388,324,388,324,387,325,387,326,386,325,386,325,385,323,385,324,385,325,385,326,385,326,384,324,384,324,383,324,382,325,382,324,382,324,381,324,380,323,380,323,379,323,378,323,377,324,377,324,375,324,374,324,373,324,372,325,371,324,371,325,370,324,370,324,369,325,369,325,368,325,367,326,367,327,367,327,366,326,364,326,363,326,362,326,361,326,360,327,360,327,359,328,359,328,358,328,357,328,356,329,355,329,354,329,353,330,353,330,352,330,351,330,350,329,350,330,349,329,349,329,348,329,347,328,347,329,347,329,346,328,346,328,345,328,344,329,344,329,343,329,342,330,342,330,341,330,340,329,339,329,338,330,338,330,336,331,336,331,335,332,335,332,334,332,333,333,333,333,332,334,332,335,332,335,331,334,330,334,329,334,328,334,327,334,326,334,325,334,324,335,324,337,323,338,321,338,320,338,319,338,318,339,318,339,317,340,317</Points>\n    <Keys>Argentina, ARG, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>670,127,671,127,672,127,673,127,674,127,675,127,676,127,676,128,676,129,677,130,678,130,677,130,676,130,676,131,677,131,678,131,678,132,679,132,679,133,679,134,678,134,678,133,677,133,678,133,677,133,677,132,676,132,675,132,675,131,674,131,673,131,672,130,670,130,671,130,670,129,671,128,670,128,670,127</Points>\n    <Keys>Armenia, ARM, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>879,329,878,328,878,327,879,327,878,327,879,328,879,329</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>985,372,984,372,983,372,984,372,984,371,985,372</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>993,322,993,321,993,322</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>950,293,949,293,949,292,950,291,950,292,950,293</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,410,759,409,760,410,760,409,760,410,761,410,760,410</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>999,328,998,328,998,327,999,327,999,326,999,325,1000,326,999,327,999,328</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>971,371,971,370,971,369,972,369,972,371,971,371</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>984,371,983,371,983,370,984,370,984,371,985,371,984,371</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>931,286,930,286,930,285,931,284,931,285,931,286</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>932,286,931,285,931,284,931,285,931,284,932,285,932,284,933,285,933,284,933,285,933,284,934,284,934,285,933,286,932,286</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>952,359,951,358,951,359,950,359,950,358,949,358,950,358,951,357,952,357,952,358,953,358,954,358,953,358,952,358,952,359</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>957,301,957,300,958,300,959,300,958,300,958,301,957,301</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>974,375,973,373,974,373,974,372,974,373,975,373,977,373,977,374,978,374,979,374,980,374,982,373,982,374,982,373,983,373,984,373,984,374,985,374,984,375,984,376,984,377,985,377,984,377,985,377,984,377,984,376,984,377,983,378,984,377,983,378,983,379,983,380,984,380,983,380,982,380,983,379,983,380,983,379,982,379,982,380,982,379,981,379,982,379,981,380,980,380,981,380,980,381,981,381,980,381,981,381,980,381,979,381,978,381,977,381,978,381,978,380,978,381,978,380,977,380,976,379,975,378,975,377,976,378,976,377,975,377,975,376,974,376,974,375</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>939,285,939,286,940,286,939,286,940,286,941,286,942,286,942,287,942,286,943,287,944,286,944,287,945,287,946,287,945,287,946,287,946,286,947,286,947,287,947,286,947,287,948,287,947,287,948,287,947,288,948,288,949,287,948,287,949,286,949,287,950,287,950,288,950,289,949,289,949,290,949,289,949,290,948,290,947,290,947,291,947,292,948,292,948,291,948,292,947,292,947,293,947,294,946,295,946,296,947,296,948,297,949,297,949,298,950,298,952,299,953,299,954,300,954,301,956,301,957,301,957,302,957,303,958,303,959,303,959,304,960,304,961,303,962,303,962,302,963,300,964,299,964,298,964,297,964,296,964,295,964,294,964,293,964,292,964,291,965,290,964,290,964,289,965,289,965,288,964,288,965,287,965,286,965,287,966,287,965,286,966,284,966,283,967,283,968,283,967,284,968,283,968,284,968,285,968,286,969,286,969,287,969,288,970,288,970,289,970,290,970,291,970,292,971,293,971,294,972,294,972,293,973,293,973,294,974,294,975,295,976,295,975,296,976,296,975,297,976,298,976,299,976,300,976,301,977,301,977,302,978,303,978,304,978,305,978,306,979,306,978,306,978,307,979,308,980,308,981,308,981,309,982,309,982,310,983,310,984,310,984,311,985,311,986,311,986,312,985,312,986,313,987,313,987,314,987,315,988,315,988,316,988,317,989,318,988,318,989,318,990,318,989,318,989,317,990,317,990,318,991,318,992,318,992,319,992,320,992,321,993,321,993,322,994,322,994,323,994,322,994,323,995,323,994,323,994,322,995,323,996,324,996,325,997,325,997,326,998,326,998,327,998,328,999,328,999,329,999,330,999,331,999,332,999,333,1000,334,1000,335,1000,336,1000,337,1000,338,1000,339,999,340,999,341,999,342,999,343,999,344,998,344,998,345,998,346,997,346,997,347,997,348,996,348,996,349,995,349,994,350,994,351,993,351,993,352,994,351,993,352,993,353,993,352,993,353,992,353,992,354,992,355,992,356,991,356,991,357,990,358,990,359,990,360,989,361,989,362,990,362,989,362,989,363,988,364,987,364,985,364,984,364,983,364,981,365,980,366,980,367,980,366,979,367,978,367,979,367,979,368,978,368,979,368,978,367,977,367,977,366,977,367,977,366,976,367,976,366,976,365,975,365,975,366,974,366,973,365,974,366,975,365,974,364,973,365,974,365,973,365,972,366,971,367,970,367,969,367,969,366,968,366,967,366,966,366,965,365,964,365,964,366,963,365,962,365,961,364,960,363,959,362,959,361,959,360,958,359,958,358,956,357,958,358,958,359,959,359,958,359,957,358,957,357,957,358,958,357,957,357,958,357,957,357,957,356,956,357,957,357,956,357,955,357,954,357,954,358,954,357,955,357,955,356,955,355,955,354,954,353,954,354,953,354,953,355,953,356,952,356,951,356,950,356,950,355,951,355,952,355,952,354,952,353,952,352,953,351,953,350,954,350,953,350,953,349,953,348,953,349,952,349,952,350,952,351,951,352,950,352,949,352,949,353,948,353,948,354,947,354,947,355,948,355,947,355,948,355,947,356,947,355,946,355,945,355,946,354,945,354,946,354,946,353,945,353,945,352,944,351,944,350,943,350,942,350,942,349,942,348,941,348,941,347,940,347,941,347,940,347,939,347,938,347,938,346,937,346,937,347,936,347,935,346,933,345,932,345,931,345,929,345,927,345,926,346,925,346,923,347,922,347,920,347,919,347,918,347,917,347,916,348,915,348,914,349,913,349,912,350,911,351,911,352,910,352,909,353,909,352,908,352,907,352,906,352,906,353,906,352,905,352,904,352,903,352,901,352,900,352,899,352,898,353,898,354,897,354,896,354,895,355,894,355,894,356,894,355,893,356,894,356,893,356,892,356,891,356,890,356,889,356,889,355,888,355,887,355,886,354,885,353,885,354,885,353,884,352,884,351,885,351,884,351,885,351,886,351,886,350,887,350,886,350,887,349,886,349,887,348,886,348,887,349,886,348,887,348,887,347,887,345,886,344,885,343,885,342,885,341,884,341,884,340,884,339,884,338,883,337,883,336,882,335,882,334,882,332,881,331,880,330,879,330,879,329,880,330,880,329,880,330,880,329,880,330,881,330,881,329,880,329,880,328,880,327,881,328,881,329,881,328,881,329,882,330,882,329,882,328,882,329,882,328,882,327,881,326,880,325,880,324,880,323,880,321,881,321,881,320,881,319,880,319,881,318,881,317,881,316,882,316,882,317,882,318,882,317,882,318,883,318,883,317,883,316,883,317,884,316,885,315,886,315,887,314,888,314,888,313,890,312,890,313,891,312,891,313,892,313,892,312,893,312,894,312,895,311,896,311,897,310,898,311,899,310,900,310,902,310,903,309,904,308,904,307,905,307,905,306,906,306,906,305,907,305,906,304,906,305,906,304,906,303,906,302,907,301,908,301,908,300,909,300,908,300,909,300,909,301,909,302,910,302,910,303,910,302,910,301,911,302,911,301,910,300,911,300,910,300,911,300,910,299,911,299,911,300,911,299,912,299,912,300,913,300,914,300,913,299,913,300,913,299,913,298,914,298,913,298,913,297,914,297,913,296,914,296,914,297,915,297,915,296,914,297,914,296,915,296,914,296,915,296,915,295,915,296,916,296,915,295,915,294,916,294,916,293,917,293,916,294,917,294,916,294,917,294,918,294,917,294,918,294,918,293,917,293,917,292,918,293,918,292,918,293,918,292,918,293,919,293,918,293,919,292,919,293,920,293,920,292,921,292,922,292,922,293,923,294,924,294,924,295,924,296,924,297,924,296,924,297,924,296,924,295,925,295,925,296,925,295,927,295,927,296,927,295,928,296,929,296,928,295,929,295,928,295,928,294,929,294,928,294,928,293,929,293,929,292,929,291,930,291,930,290,930,291,930,290,930,289,931,289,931,288,931,289,932,289,931,289,931,288,932,288,932,287,933,288,932,287,933,287,934,287,935,287,936,287,937,287,937,288,937,287,938,287,937,287,937,286,938,285,937,285,936,285,935,285,935,284,936,284,936,285,936,284,936,285,936,284,937,284,937,285,938,285,939,285</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>590,104,590,105,590,106,591,106,591,107,590,107,589,107,589,108,590,108,589,108,589,109,588,110,587,110,588,111,586,110,586,111,585,111,584,111,583,111,582,111,581,111,580,111,578,111,577,110,576,110,576,109,575,110,574,109,574,110,573,110,572,110,571,110,571,109,570,110,569,110,569,109,568,109,568,108,569,108,570,108,570,109,571,108,572,108,573,108,574,108,575,108,576,108,576,107,577,107,577,108,578,107,578,108,579,108,579,107,578,107,579,107,578,106,580,105,581,105,581,104,582,104,582,105,583,105,584,105,584,104,584,103,585,103,585,104,586,104,587,104,588,104,589,104,590,104</Points>\n    <Keys>Austria, AUT, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>674,132,674,131,675,131,675,132,676,132,677,132,677,133,678,133,677,133,678,133,678,134,677,134,676,133,675,133,674,132</Points>\n    <Keys>Azerbaijan, AZE, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>679,125,680,125,681,126,681,127,682,127,683,127,683,126,684,126,685,126,685,125,686,126,687,127,687,128,688,128,688,129,689,129,690,129,691,129,691,130,690,130,690,129,689,129,688,130,688,131,687,132,688,132,688,133,687,132,687,133,687,134,687,133,686,133,686,134,686,135,685,135,684,134,684,133,685,132,683,131,683,132,682,132,681,133,680,133,679,134,679,133,679,132,678,132,678,131,677,131,676,131,676,130,677,130,678,130,677,130,676,129,676,128,676,127,675,127,675,126,676,126,677,126,677,127,678,127,679,127,680,127,679,126,678,126,679,126,678,126,679,126,678,126,678,125,679,125</Points>\n    <Keys>Azerbaijan, AZE, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>317,184,317,183,318,183,317,183,317,182,318,182,318,183,317,184</Points>\n    <Keys>Bahamas, The, BHS, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>308,173,307,172,308,172,308,171,307,171,307,170,306,170,307,170,308,171,308,172,308,173</Points>\n    <Keys>Bahamas, The, BHS, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>307,179,306,179,307,179,306,179,306,178,307,178,306,178,307,178,307,179</Points>\n    <Keys>Bahamas, The, BHS, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>313,178,313,177,312,177,312,176,313,177,313,178,314,178,313,178</Points>\n    <Keys>Bahamas, The, BHS, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>305,178,305,177,304,177,305,176,305,177,305,176,305,175,306,175,306,176,306,177,305,178</Points>\n    <Keys>Bahamas, The, BHS, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>311,177,311,176,311,175,310,174,309,174,310,174,311,175,311,176,311,177</Points>\n    <Keys>Bahamas, The, BHS, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>303,171,304,170,305,170,306,170,306,171,305,171,303,171</Points>\n    <Keys>Bahamas, The, BHS, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>315,182,315,181,314,181,314,180,314,179,314,181,315,181,315,182</Points>\n    <Keys>Bahamas, The, BHS, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>691,173,691,172,691,173</Points>\n    <Keys>Bahrain, BHR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>811,185,811,184,812,183,811,183,811,182,812,182,812,183,812,184,811,185</Points>\n    <Keys>Bangladesh, BGD, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>807,172,806,171,807,171,807,172,808,173,808,172,808,173,808,172,809,172,809,173,809,174,809,175,810,175,811,175,812,175,813,175,814,175,816,175,817,175,817,176,816,176,816,177,815,177,815,178,815,177,815,178,814,178,814,179,813,179,813,180,814,181,814,182,815,181,815,180,815,179,816,179,816,180,816,179,816,180,816,179,816,180,817,181,817,182,817,184,817,185,817,186,818,187,817,187,817,186,816,186,816,187,816,188,816,187,815,186,816,186,815,186,815,185,815,184,815,183,814,182,813,182,813,183,813,182,813,183,812,183,812,182,811,181,811,180,812,180,811,180,810,180,811,180,811,181,811,182,811,183,811,184,810,185,810,184,810,185,809,185,810,184,809,185,809,184,809,183,810,183,809,183,809,184,809,185,808,185,809,185,808,185,808,184,808,185,808,184,808,185,807,185,807,186,807,185,807,184,806,183,806,182,806,181,806,180,805,180,805,179,806,179,806,178,805,178,804,177,804,176,805,175,806,175,807,175,806,175,806,174,805,174,804,173,804,172,805,172,805,171,806,171,806,172,807,172</Points>\n    <Keys>Bangladesh, BGD, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>361,211,361,211</Points>\n    <Keys>Barbados, BRB, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>550,96,550,97,551,97,552,97,552,96,552,97,552,96,553,96,554,96,555,96,555,97,556,97,557,97,557,98,558,98,558,99,559,99,559,100,558,100,557,100,557,101,557,102,556,102,555,102,555,101,554,101,554,100,554,101,553,101,552,101,552,100,551,99,551,100,551,99,550,99,549,99,549,98,548,98,547,98,547,97,548,97,550,96</Points>\n    <Keys>Belgium, BEL, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>274,196,274,195,275,195,274,195,275,195,274,196,275,195,275,196,275,197,275,198,275,199,275,200,274,201,274,202,273,202,273,203,272,203,272,202,272,201,272,200,272,199,272,198,272,197,272,196,273,197,273,196,274,196</Points>\n    <Keys>Belize, BLZ, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>547,215,547,214,548,214,548,213,549,214,549,215,550,215,550,216,551,217,551,218,551,219,550,219,550,220,551,220,550,221,549,221,550,221,549,222,549,223,548,223,548,225,548,226,548,227,548,228,548,229,548,230,548,231,546,232,545,232,544,232,545,232,545,231,544,230,544,229,544,225,544,224,544,223,544,222,544,221,542,219,542,218,542,217,543,217,544,216,545,216,546,216,546,215,547,215</Points>\n    <Keys>Benin, BEN, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>345,154,345,153,345,154</Points>\n    <Keys>Bermuda, BMU, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>806,169,806,168,807,168,807,167,808,167,808,166,809,166,811,166,812,166,813,167,813,166,814,166,814,167,815,167,814,167,814,168,815,168,816,168,816,169,816,170,815,170,814,170,813,170,812,170,811,170,810,170,809,170,808,170,807,170,806,170,806,169</Points>\n    <Keys>Bhutan, BTN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>333,299,332,299,331,297,332,297,332,296,331,295,332,295,332,294,333,294,332,294,333,293,333,292,332,292,332,291,333,291,333,289,333,288,333,287,332,285,331,283,332,283,333,284,334,284,335,283,335,282,336,282,336,283,336,282,338,281,339,281,340,280,341,280,342,280,343,280,344,280,343,281,344,281,343,282,343,283,344,283,343,284,344,284,343,285,344,285,344,286,345,286,344,286,345,287,346,287,346,288,348,288,350,289,350,288,351,289,351,290,351,289,352,290,353,290,353,291,354,291,355,291,356,291,357,292,358,292,358,293,358,294,358,295,358,296,359,297,359,299,361,299,363,299,364,299,365,299,364,300,364,301,364,302,365,303,366,303,367,305,366,307,366,308,365,310,366,310,365,311,365,310,362,309,360,308,358,309,354,309,354,311,353,312,353,314,352,317,351,317,351,316,348,317,347,318,347,319,346,319,346,318,346,317,345,317,343,317,342,317,342,316,341,316,340,317,339,317,339,318,338,318,338,319,337,319,336,319,336,318,336,317,335,316,335,315,335,314,334,313,334,312,333,312,333,311,334,311,334,310,333,310,334,309,333,308,333,307,332,307,332,306,332,305,332,304,331,304,331,303,331,302,331,301,332,301,332,300,333,300,333,299</Points>\n    <Keys>Bolivia, BOL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>592,122,593,122,592,121,591,121,591,120,590,120,590,119,589,118,588,118,588,117,587,116,587,115,588,115,589,115,590,115,591,115,592,115,593,115,594,115,595,115,596,115,596,116,597,116,598,116,597,116,597,117,597,118,598,118,598,119,597,118,597,119,598,119,598,120,597,120,596,120,597,120,597,121,596,121,596,120,596,121,595,121,595,122,595,123,594,123,594,122,593,122,592,122</Points>\n    <Keys>Bosnia and Herzegovina, BIH, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>602,305,604,305,609,304,610,305,610,306,611,305,613,304,613,305,614,304,615,304,615,305,616,305,616,306,617,307,617,308,618,309,619,309,618,309,619,310,620,311,621,311,621,312,622,312,623,312,623,313,623,314,624,315,625,315,627,316,627,317,628,317,627,317,626,317,626,318,625,318,624,319,623,319,623,320,622,320,622,321,621,321,620,321,620,322,620,323,619,324,617,325,617,326,616,327,616,328,615,328,614,328,613,328,612,328,612,327,611,327,610,327,610,326,609,326,608,327,608,328,607,329,606,330,605,331,604,331,603,331,602,331,601,331,601,330,602,330,602,329,602,328,602,327,601,327,602,327,601,327,601,326,600,325,599,321,599,317,602,316,602,312,602,308,602,305</Points>\n    <Keys>Botswana, BWA, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>386,253,387,252,387,253,386,253</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>394,334,394,333,394,334</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>388,250,388,249,389,250,388,250</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>390,251,389,250,388,250,390,249,391,250,390,250,390,251</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>387,251,386,251,387,251,388,251,387,251</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>385,252,386,252,386,251,385,252</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>384,255,384,254,385,254,385,253,385,252,386,252,386,253,386,254,384,255</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>389,249,389,249</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>390,251,391,250,391,251,390,251</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>388,256,388,255,387,255,387,254,388,254,387,254,387,253,387,252,388,253,388,252,387,252,388,251,389,251,391,251,392,251,394,251,394,252,394,253,394,254,393,254,393,255,392,255,391,255,391,256,390,256,390,255,390,256,389,256,388,256,389,256,388,256</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>357,235,358,235,359,235,360,235,359,236,359,237,360,237,360,238,361,238,361,239,360,240,360,241,360,242,360,243,360,244,360,245,361,245,360,245,361,245,362,246,362,247,363,247,364,247,364,246,365,246,366,246,366,245,367,245,368,245,368,244,368,245,369,245,370,245,372,245,372,244,371,244,371,243,372,243,373,243,374,243,375,243,375,244,376,244,377,244,378,244,378,243,379,244,379,243,380,244,381,244,382,243,382,242,382,241,383,240,384,239,384,238,385,238,385,237,386,238,386,239,386,241,387,242,387,243,387,244,388,244,388,245,389,245,390,245,390,246,390,247,389,247,390,247,389,248,388,248,388,249,387,250,386,251,385,252,384,253,384,254,384,255,383,255,381,255,383,255,383,256,383,255,384,255,385,254,387,253,386,253,387,253,387,254,387,255,388,256,387,256,386,256,385,255,385,256,385,257,385,258,385,257,385,256,386,256,387,257,386,257,387,258,386,257,387,257,387,256,388,256,389,256,390,256,390,257,390,256,391,256,392,256,391,256,391,257,391,258,392,257,392,256,393,256,393,255,394,255,395,255,394,255,394,254,395,254,395,253,396,253,396,252,396,253,397,253,397,252,397,253,397,252,397,253,397,252,398,252,398,253,399,253,400,253,399,253,400,253,400,254,400,253,400,254,401,254,401,253,401,254,402,254,402,255,403,255,403,254,403,255,403,254,403,255,403,254,404,255,403,255,403,256,404,256,404,255,405,255,405,256,406,256,406,257,405,257,406,257,405,258,406,257,406,258,406,259,405,259,405,260,406,260,405,260,406,260,406,259,406,258,407,258,407,259,408,258,409,258,410,258,411,258,412,259,413,259,414,259,413,259,414,259,415,259,416,259,416,260,416,259,417,259,418,259,420,259,420,260,421,260,422,261,423,261,424,262,425,263,426,264,427,264,428,265,429,265,429,266,430,266,431,266,432,266,433,266,434,267,434,268,434,269,435,271,435,273,435,274,435,275,435,276,434,277,434,278,433,278,432,280,432,279,432,280,432,279,432,280,431,281,430,282,429,283,428,283,428,284,428,285,427,285,428,284,427,284,427,285,427,286,426,287,426,288,425,289,424,290,424,289,423,288,423,289,423,290,423,291,422,291,423,292,422,292,423,292,422,292,423,292,423,293,422,293,423,293,423,292,423,293,422,294,422,296,423,297,423,298,423,299,422,300,422,302,422,303,422,304,421,304,421,305,420,307,420,308,420,309,419,310,419,311,418,311,419,311,419,312,418,313,417,313,417,314,416,315,417,316,416,317,414,317,414,318,414,319,413,319,412,319,410,319,409,320,407,320,408,320,409,320,408,319,407,319,407,320,407,319,407,320,406,319,407,319,406,319,406,320,405,320,406,320,405,320,406,320,405,321,404,321,403,321,403,322,402,322,401,322,401,323,401,322,400,322,400,323,399,323,399,324,398,324,397,325,396,325,396,326,395,326,396,326,395,326,395,327,395,326,395,327,395,326,394,326,394,327,393,327,394,327,394,328,393,328,394,328,394,329,393,329,394,330,393,331,394,331,394,332,394,333,394,334,394,335,393,336,392,337,391,338,390,339,390,340,389,341,388,342,387,343,386,345,385,346,384,346,383,347,383,346,384,346,385,346,385,345,386,345,386,344,387,344,387,343,387,342,388,342,388,341,387,341,388,341,387,341,387,342,386,342,386,341,386,342,386,343,386,342,385,342,385,343,385,344,384,344,384,345,383,345,383,346,383,347,383,348,382,349,382,350,381,351,379,352,379,351,379,350,380,349,380,348,379,348,378,347,378,346,377,346,376,346,376,345,375,345,374,344,373,343,372,343,372,344,371,344,371,343,372,343,371,343,371,342,370,341,369,341,368,341,367,341,368,340,369,339,370,338,370,337,371,337,371,336,372,336,372,335,373,335,373,334,374,334,375,334,375,333,376,333,377,333,377,332,378,332,378,331,378,330,379,329,378,328,378,327,377,327,376,327,376,328,376,327,376,326,376,325,377,324,377,323,376,322,375,322,374,323,373,322,373,321,373,320,373,319,372,318,372,317,371,317,370,317,369,317,368,317,367,317,366,317,366,316,366,315,366,314,366,313,366,312,365,312,365,311,366,310,365,310,366,308,366,307,367,305,366,303,365,303,364,302,364,301,364,300,365,299,364,299,363,299,361,299,359,299,359,297,358,296,358,295,358,294,358,293,358,292,357,292,356,291,355,291,354,291,353,291,353,290,352,290,351,289,351,290,351,289,350,288,350,289,348,288,346,288,346,287,345,287,344,286,345,286,344,286,344,285,343,285,344,284,343,284,344,283,343,283,343,282,344,281,343,281,344,280,343,280,342,280,341,280,340,280,339,281,338,281,336,282,336,283,336,282,335,282,335,283,334,284,333,284,332,283,331,283,330,283,329,283,329,284,328,284,328,283,328,284,328,282,328,280,328,279,327,279,327,280,326,280,325,281,323,281,323,280,323,279,322,279,320,279,321,278,321,277,320,277,320,276,319,276,319,275,318,274,317,273,318,273,318,272,318,271,319,270,320,270,320,269,321,267,321,266,322,266,322,265,323,265,324,264,325,264,326,264,327,264,327,263,328,263,329,263,329,264,330,263,330,261,330,259,331,257,331,255,331,254,331,253,331,252,330,251,329,251,329,249,330,249,330,248,331,249,331,248,332,249,332,248,332,247,331,247,330,247,330,245,331,245,335,245,335,244,335,245,336,245,337,244,338,245,338,246,338,247,339,247,341,248,342,248,343,248,343,249,343,248,344,248,344,247,345,247,346,246,347,246,347,245,348,245,349,244,349,243,347,243,348,243,347,242,347,241,347,240,346,239,345,238,346,238,347,238,347,239,348,239,349,239,350,239,351,240,351,239,351,238,352,238,353,238,354,238,355,238,355,237,356,237,357,237,357,236,358,236,358,235,357,235</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>885,236,885,237,886,238,885,237,885,236</Points>\n    <Keys>Brunei, BRN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>885,236,884,236,884,237,884,238,883,238,882,238,882,237,883,236,884,236,885,235,884,236,885,236</Points>\n    <Keys>Brunei, BRN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>621,118,622,118,623,119,623,118,623,119,624,119,625,119,625,120,624,120,624,121,623,121,623,122,622,123,623,123,623,124,624,124,624,125,623,124,623,125,622,125,621,124,620,125,619,125,618,125,619,125,618,125,618,126,617,126,616,127,615,127,614,126,613,126,612,126,611,126,609,126,609,127,608,126,609,125,608,125,608,124,607,124,607,123,607,122,608,122,608,121,609,121,608,121,608,120,607,120,607,119,607,118,608,118,609,118,608,118,608,119,609,119,610,119,611,119,613,119,615,119,616,120,617,119,618,119,619,118,620,118,621,118</Points>\n    <Keys>Bulgaria, BGR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>531,210,531,209,531,208,532,208,533,208,534,207,536,206,537,205,538,205,539,205,540,206,540,207,541,208,541,209,542,209,542,210,543,210,543,211,543,210,542,210,542,211,543,211,544,213,545,213,545,212,546,212,546,213,547,215,546,215,546,216,545,216,544,216,543,217,542,217,542,218,541,218,541,217,539,217,538,217,538,218,537,218,533,217,531,217,531,218,531,219,531,220,531,221,531,222,531,221,530,221,528,221,527,221,527,222,526,222,526,221,525,221,525,220,524,220,523,220,523,219,523,218,523,217,524,217,524,216,524,215,523,215,524,215,525,214,526,214,526,213,526,214,526,213,526,212,527,212,526,211,527,211,527,210,528,210,529,211,530,211,530,209,530,210,531,210</Points>\n    <Keys>Burkina Faso, BFA, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>628,264,628,263,627,262,627,261,627,260,627,259,626,259,627,259,627,258,628,259,629,259,629,258,629,257,629,258,630,258,631,258,631,257,631,258,631,259,631,258,631,259,632,259,632,260,631,261,631,262,630,262,630,263,629,264,628,264</Points>\n    <Keys>Burundi, BDI, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>624,82,625,82,626,82,626,83,627,82,628,83,629,83,630,83,631,83,631,84,632,84,632,85,633,85,632,85,633,85,632,85,632,86,633,86,633,87,633,88,634,88,635,88,635,89,636,89,637,89,637,90,638,90,637,90,638,90,637,91,636,91,635,91,634,91,633,91,634,92,634,93,634,94,635,94,634,94,633,94,632,94,632,95,631,95,632,95,631,95,631,96,631,97,631,96,630,96,629,96,628,96,627,96,626,96,625,96,624,96,623,96,622,96,621,96,621,95,620,95,619,95,618,95,617,95,616,95,615,95,614,95,613,95,612,95,612,96,611,96,610,96,610,95,610,94,609,94,610,93,611,92,611,91,610,90,610,89,611,89,612,89,613,89,614,88,614,89,614,88,615,88,616,88,617,88,616,88,616,87,617,87,617,86,618,86,618,85,619,85,620,85,619,85,619,84,619,83,620,83,621,83,622,83,623,83,623,82,624,82</Points>\n    <Keys>Byelarus, BLR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>852,220,851,220,851,219,852,219,852,220</Points>\n    <Keys>Cambodia, KHM, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>858,207,859,207,860,207,860,208,860,207,861,207,862,207,862,206,862,207,862,208,862,209,862,210,862,211,862,212,862,213,862,214,861,214,860,214,860,215,859,215,859,216,858,215,857,216,857,217,858,217,858,218,857,218,857,217,856,218,855,218,854,219,853,219,852,219,851,219,851,218,851,219,850,219,850,218,851,218,850,217,850,218,849,218,849,217,849,216,848,216,849,216,848,215,849,215,848,215,848,216,848,215,848,214,848,213,847,213,847,212,847,211,847,210,847,209,848,209,848,208,849,208,850,207,851,207,852,207,853,207,854,207,855,207,855,208,855,207,855,208,856,208,857,208,857,209,858,209,858,208,857,207,858,207</Points>\n    <Keys>Cambodia, KHM, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>582,211,583,211,583,212,584,212,584,213,584,212,584,213,584,214,585,214,585,215,585,216,585,217,585,218,585,219,586,220,587,221,586,221,585,221,584,221,583,221,582,221,581,222,583,223,584,224,585,225,586,227,586,228,585,229,585,230,584,230,584,231,584,232,583,232,583,233,583,234,583,235,584,235,584,236,584,237,585,237,585,238,585,239,587,241,588,242,588,243,588,244,588,245,588,246,588,245,587,245,586,245,585,245,585,244,585,245,584,244,583,244,581,244,579,244,578,244,577,244,576,244,574,244,572,244,570,244,569,244,569,243,569,242,569,241,569,240,568,240,569,240,568,240,568,239,569,239,568,239,569,238,568,238,568,239,568,238,568,239,567,239,567,238,567,239,567,238,566,238,566,237,565,236,566,237,565,237,565,236,566,235,566,234,566,233,567,233,567,232,568,232,568,231,569,231,569,230,570,229,570,230,571,230,571,229,572,230,573,230,573,231,574,231,574,230,575,229,575,228,576,228,576,227,576,225,577,225,578,225,578,224,578,223,578,222,579,222,579,221,579,220,580,220,580,218,581,217,582,217,583,216,583,215,583,214,584,214,583,214,583,213,582,213,582,211</Points>\n    <Keys>Cameroon, CMR, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>306,61,305,61,304,60,305,60,307,60,307,61,306,61</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>355,81,355,80,355,81</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>309,60,308,60,307,60,307,59,308,59,309,60,310,60,309,60,310,60,309,60</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>300,83,301,82,300,83,299,83,300,82,301,82,301,81,301,82,302,81,303,81,303,82,302,82,302,83,303,82,303,81,302,81,302,82,302,83,302,82,301,83,300,83</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>299,82,300,81,301,81,300,82,299,82</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>303,82,303,81,304,81,303,82</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>165,103,165,104,164,104,164,103,163,103,163,104,162,103,163,103,162,103,162,102,162,103,161,103,162,103,162,102,161,103,161,102,160,102,161,102,161,101,160,101,159,101,158,101,158,100,157,100,156,100,156,99,157,99,156,99,157,99,155,99,154,98,156,98,157,98,158,99,159,99,161,99,162,99,163,99,163,100,164,100,164,101,165,101,165,102,165,101,165,102,166,102,168,103,168,104,169,104,169,105,169,104,169,105,170,105,169,105,169,106,168,106,168,105,166,105,164,104,165,103</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>282,59,281,60,280,59,280,60,279,60,278,60,278,59,279,59,281,58,280,58,280,57,281,56,281,55,281,54,281,53,282,53,283,53,284,53,284,54,284,55,285,55,286,54,287,54,287,55,289,55,290,56,292,56,293,56,294,57,294,58,295,58,294,58,294,59,295,58,297,59,297,58,298,59,297,59,298,59,299,59,298,59,297,60,296,60,295,60,294,60,293,59,293,60,292,59,290,59,290,58,291,58,290,58,289,58,288,58,289,59,288,59,287,60,286,60,286,61,284,61,283,61,283,60,283,59,282,59</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>285,54,285,53,284,53,284,52,285,53,286,54,285,54</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>289,54,289,53,289,54,288,53,287,53,286,52,287,52,288,52,288,53,289,53,290,53,290,54,289,54</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>160,99,160,98,161,98,161,99,160,99</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>365,86,366,86,365,86</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>319,47,317,47,316,47,315,47,315,46,316,46,317,46,319,46,319,47</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>278,6,275,6,271,6,268,6,267,6,271,6,269,6,269,5,268,5,269,6,267,5,267,6,266,6,267,6,265,6,264,6,264,5,265,5,266,5,270,5,271,5,272,5,271,5,272,5,273,5,272,5,274,4,275,4,277,4,278,4,278,5,279,5,278,5,279,5,278,4,279,4,281,4,282,4,283,5,282,5,283,4,284,5,285,5,286,5,285,5,285,4,280,4,279,4,283,4,283,3,282,3,284,3,286,3,285,3,286,3,287,3,288,3,289,4,290,4,291,4,290,4,294,4,293,4,292,4,290,4,291,4,292,4,297,4,299,5,301,5,302,5,300,5,300,4,298,4,297,4,295,4,292,3,291,3,292,3,294,3,292,3,293,2,295,3,297,3,298,3,297,3,295,2,298,2,299,2,300,3,300,2,303,3,304,2,302,2,300,2,299,2,298,2,301,2,302,2,303,2,304,2,305,2,306,2,308,2,309,2,310,3,312,3,311,3,313,3,311,2,312,2,310,2,307,2,308,1,310,1,311,1,316,1,318,2,321,2,322,2,321,2,319,2,321,1,325,1,324,1,325,2,327,2,325,1,326,1,328,1,330,1,331,1,332,1,333,1,333,2,334,1,335,2,336,2,338,2,341,2,340,2,339,2,334,3,339,2,342,2,343,2,344,2,343,2,344,2,345,2,346,2,347,2,349,2,348,2,349,2,350,3,349,3,351,3,350,3,352,3,353,3,355,3,356,3,356,4,355,4,354,4,353,4,348,5,347,5,346,5,344,5,343,5,341,5,342,5,343,5,342,6,341,6,336,6,335,6,332,5,334,6,333,6,335,6,338,6,339,6,340,6,333,7,329,7,331,7,329,7,331,7,341,6,345,6,346,6,343,7,342,7,340,7,338,8,337,8,333,8,333,9,332,9,331,9,329,9,328,9,327,9,328,9,330,10,329,10,327,10,325,10,324,10,323,10,322,10,324,10,322,10,323,10,327,10,328,10,327,11,325,11,326,11,327,11,326,11,323,12,321,11,320,11,317,11,315,11,319,11,320,11,320,12,319,12,318,12,316,12,315,12,314,12,315,12,314,12,312,12,311,12,308,12,311,12,312,12,311,13,309,12,308,12,307,12,308,13,306,12,305,12,306,13,308,13,311,13,313,13,316,13,315,13,316,13,315,13,313,13,312,13,311,13,308,13,307,13,304,13,303,13,306,13,305,14,306,14,310,13,312,14,311,14,310,14,312,14,315,14,315,15,316,15,313,15,311,15,314,15,314,16,313,16,310,16,309,16,313,16,312,17,311,16,310,17,309,17,306,17,305,17,304,17,305,17,306,17,305,17,306,17,305,17,306,18,305,18,303,19,303,18,302,19,301,19,300,19,297,19,296,18,294,17,294,18,295,18,296,18,296,19,294,19,293,19,294,19,296,19,299,19,298,19,299,19,300,19,302,19,301,20,303,20,304,20,304,19,305,19,306,20,306,21,305,21,304,21,303,21,302,21,302,22,300,22,296,22,297,22,296,22,297,21,296,21,295,21,294,21,293,21,294,21,293,21,294,20,293,21,292,20,291,20,292,20,292,21,293,21,291,21,290,21,289,20,290,21,288,21,287,21,286,21,285,21,284,21,285,21,286,22,283,22,280,21,281,21,280,21,281,21,280,21,279,21,278,21,277,21,276,21,274,21,274,20,273,20,274,20,274,21,273,21,274,21,273,21,272,21,271,21,270,21,271,21,271,20,274,19,277,19,279,19,278,19,279,18,278,18,277,19,276,18,277,18,276,18,275,18,275,17,278,17,280,17,282,17,282,18,283,18,285,18,285,19,286,19,286,18,288,18,289,18,291,17,292,17,292,16,293,16,292,16,291,16,291,17,290,17,288,18,285,18,286,17,285,18,284,18,284,17,283,17,285,17,284,17,283,17,284,17,285,17,286,17,287,17,286,17,284,17,283,17,282,17,283,17,284,16,285,16,287,16,286,16,285,16,284,16,285,16,286,16,287,16,286,16,285,16,285,15,286,15,285,15,283,16,281,16,282,16,282,15,281,16,280,16,279,16,278,16,277,16,278,16,277,16,277,15,278,15,279,15,278,15,280,14,284,14,289,14,292,15,293,15,292,14,293,14,290,14,294,14,295,14,294,14,295,14,295,13,294,14,293,14,292,14,291,14,287,14,285,13,286,13,287,13,288,13,289,13,288,13,287,13,288,13,287,13,286,13,286,12,285,12,284,12,283,11,280,11,281,11,283,11,284,11,280,11,280,10,281,9,288,10,289,10,292,11,293,11,294,11,295,12,294,12,295,12,298,12,300,12,300,11,297,12,295,11,293,10,290,10,299,9,305,9,304,9,300,9,305,8,310,8,309,8,305,8,303,8,303,7,304,7,309,6,306,6,304,7,303,7,301,7,302,7,301,8,302,8,301,8,296,9,291,9,290,9,293,8,294,8,290,8,289,8,290,8,289,8,288,8,288,9,287,9,282,9,283,9,282,9,281,9,280,9,279,9,280,9,282,8,285,7,286,7,292,7,290,7,284,7,283,7,281,8,278,9,277,9,272,8,271,8,273,8,275,7,279,7,282,7,285,7,282,7,280,7,271,7,269,7,268,7,269,7,273,7,271,7,270,7,273,6,276,6,278,6</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>279,47,279,46,280,46,280,47,279,47</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>309,49,308,49,308,48,308,47,309,46,310,46,311,46,312,45,312,46,314,46,314,47,314,48,313,48,311,49,309,49</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>159,102,159,101,160,102,159,102</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>226,45,225,45,224,45,225,45,226,45</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>315,46,314,45,313,45,314,44,315,45,315,46</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>234,45,232,44,233,44,234,44,234,45</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>268,13,262,13,261,13,262,13,266,12,264,12,262,12,263,12,262,12,261,12,260,12,259,12,260,12,259,12,259,13,258,13,257,13,257,12,258,12,256,12,255,13,254,13,254,12,253,12,252,12,256,12,257,11,256,11,257,11,256,11,254,12,252,12,250,11,251,11,250,11,249,10,250,10,252,10,256,11,255,10,256,10,257,10,256,10,255,10,254,10,253,10,252,10,253,10,252,10,250,10,249,9,250,9,251,9,253,9,251,9,252,9,251,9,255,9,258,9,256,9,255,9,256,8,257,8,254,8,255,8,254,8,253,8,254,8,253,8,254,8,254,7,255,7,256,7,256,8,258,7,256,7,260,7,259,7,258,7,256,7,257,6,259,7,259,6,260,6,263,7,264,7,266,8,267,8,268,9,267,9,269,9,270,9,271,9,272,9,272,10,274,10,275,10,274,10,273,10,274,10,273,9,274,9,276,9,277,10,276,10,275,10,276,10,278,10,278,11,277,11,278,11,279,11,278,11,278,12,277,12,278,12,279,12,280,12,281,12,282,12,283,12,284,12,285,13,280,13,280,14,279,14,279,13,279,14,278,14,277,14,277,15,276,14,275,14,276,14,276,13,275,14,275,15,276,15,275,15,274,15,273,15,274,15,273,16,272,16,271,15,270,15,269,15,270,15,271,16,270,16,269,16,267,16,269,16,268,16,269,16,268,16,265,16,264,16,263,16,262,16,262,15,261,15,260,15,259,15,259,14,258,14,259,14,260,14,258,14,257,14,259,13,260,13,264,13,268,13</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>142,91,141,91,142,91,142,90,141,91,141,90,142,91,142,90,141,90,140,89,141,89,140,89,140,88,142,88,141,89,142,89,142,88,143,88,143,89,142,89,142,90,142,89,142,90,143,90,143,89,143,90,143,89,143,88,144,88,145,88,144,88,144,89,144,90,144,91,143,91,142,91</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>238,44,238,43,239,44,238,44</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>148,89,147,89,148,89,147,89,148,88,149,89,148,89</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>302,44,301,44,302,44,302,43,303,43,304,43,303,43,304,42,305,42,305,43,304,43,303,44,302,44</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>269,43,268,43,268,42,269,42,269,43</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>309,43,308,43,307,43,307,42,308,42,309,42,310,42,309,43</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>251,42,250,42,251,42</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>236,42,235,42,236,42,237,42,236,42</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>151,91,150,90,149,90,150,90,149,90,149,89,150,90,151,90,151,91</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>252,43,252,42,253,42,252,42,251,42,252,42,253,42,253,43,252,43</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>137,44,136,44,135,44,133,44,132,44,132,43,132,44,132,43,133,43,132,43,133,43,133,42,134,43,134,42,135,42,136,42,136,41,137,41,136,41,137,41,137,42,138,42,137,42,136,43,135,43,136,44,137,44</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>303,42,304,42,304,41,305,41,305,42,305,41,306,41,306,42,305,42,303,42</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>300,42,299,42,298,42,297,41,298,41,299,41,300,41,301,41,302,41,301,41,301,42,300,42,299,42,300,42</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>250,45,248,45,247,45,246,45,245,44,244,44,243,44,242,44,241,43,243,43,244,43,244,42,245,42,244,42,245,41,246,41,247,41,247,42,248,41,248,42,249,42,251,43,252,43,252,44,253,44,254,44,253,44,252,44,252,45,251,45,250,45</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>152,90,152,89,153,89,153,90,152,90</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>150,91,149,90,148,90,150,90,150,91</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>270,21,269,21,268,20,269,20,270,20,270,21</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>353,109,354,108,355,108,354,108,354,109,353,109</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>153,93,153,92,154,92,153,92,154,92,153,92,153,93,153,92,153,93,152,92,153,91,152,91,153,91,152,92,152,91,153,91,154,91,154,92,154,93,153,93</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>297,92,296,92,295,92,294,92,293,91,294,91,295,91,296,91,297,92</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>153,93,152,93,152,92,153,93</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>146,94,145,93,143,92,144,92,143,92,142,92,143,92,142,91,143,91,144,91,145,91,144,91,144,92,144,91,145,91,145,92,144,92,145,92,144,92,144,93,145,93,146,93,145,93,146,94</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>154,93,154,92,155,93,154,93</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>239,39,238,39,237,39,238,39,237,38,238,39,239,39,238,39,239,39</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>156,95,156,94,157,94,157,93,158,93,158,94,157,94,156,95</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>223,32,222,31,221,31,220,30,218,30,220,29,221,29,222,29,223,29,224,29,226,30,226,31,224,32,223,32</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>228,22,226,22,226,21,227,21,226,21,225,21,227,20,228,21,227,21,228,21,229,21,230,21,228,22</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>356,114,355,113,355,112,356,112,356,111,357,110,358,110,358,109,358,110,358,109,358,110,359,110,358,110,358,111,358,112,357,112,356,113,357,113,357,112,357,113,356,113,357,113,356,113,357,113,357,114,357,113,358,113,357,113,357,112,358,112,359,112,358,112,359,112,360,112,360,113,359,113,358,114,357,114,356,114</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>301,95,301,94,302,94,302,95,301,95</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>155,95,155,94,156,94,155,95</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>243,11,242,11,241,11,242,11,241,11,239,11,239,10,240,10,242,10,243,10,243,11,244,11,243,11</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>351,113,351,112,350,112,351,112,350,112,351,112,350,112,349,112,348,112,348,111,347,111,346,111,346,110,348,109,347,110,348,110,348,111,349,111,350,111,351,111,352,111,354,111,353,111,352,111,352,112,352,113,351,113</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>230,22,228,22,226,22,228,22,232,22,230,22</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>156,96,155,96,155,95,156,95,156,96</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>178,23,178,22,178,23,177,22,178,22,177,22,178,22,177,22,176,22,177,23,176,23,177,23,176,23,174,22,173,22,173,23,172,23,171,23,172,22,171,22,170,22,171,22,172,22,172,21,173,21,175,21,176,21,176,20,178,20,181,19,182,19,184,18,187,19,188,19,188,18,189,19,190,18,189,18,188,18,189,18,190,18,192,18,193,18,193,19,192,19,190,19,191,19,192,20,191,20,190,20,192,20,191,21,189,21,188,21,189,21,188,21,189,21,188,22,187,22,185,21,186,21,185,21,186,21,186,20,185,20,184,20,185,21,184,21,183,21,184,21,184,22,183,22,182,22,181,22,181,21,180,22,181,22,180,22,181,22,180,22,181,22,180,22,181,22,181,23,180,23,181,23,180,23,179,23,178,23</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>301,23,300,23,301,23,303,22,302,23,303,23,302,23,301,23</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>202,22,204,23,203,23,205,23,205,24,206,24,207,24,208,24,209,24,212,24,213,24,212,24,213,24,213,23,210,23,211,23,210,23,209,23,211,22,212,22,211,22,212,22,211,22,210,22,209,22,208,22,208,21,210,21,211,20,212,20,213,20,214,20,213,20,214,20,214,21,213,21,214,21,215,21,215,22,214,22,216,22,217,22,217,23,215,23,216,23,218,23,219,23,219,24,219,23,220,23,219,23,220,22,221,22,222,23,223,23,223,24,222,24,223,24,222,24,223,24,222,25,221,25,222,25,221,25,219,26,218,26,217,26,216,25,215,26,216,26,214,26,214,25,213,25,212,26,211,26,207,26,208,26,206,27,205,27,203,27,201,27,199,27,197,27,196,27,196,26,197,26,200,26,201,26,204,26,205,25,206,25,207,25,206,25,205,25,204,25,202,25,203,25,202,25,201,25,200,25,198,25,200,24,198,24,197,24,197,25,196,25,197,25,196,25,195,26,194,26,194,25,193,25,193,26,192,26,191,25,190,25,189,25,187,25,186,25,188,24,191,24,193,24,194,24,195,23,194,23,190,24,188,24,189,23,192,23,193,23,195,23,190,23,189,23,190,23,190,22,189,22,190,22,194,22,195,22,194,22,192,22,192,21,193,21,194,21,195,21,197,21,197,22,198,22,200,22,201,22,202,22</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>373,96,373,97,371,96,371,97,372,97,371,98,371,99,370,99,370,100,369,100,369,101,369,102,370,101,371,100,371,101,371,100,372,100,372,101,373,100,373,101,371,101,371,102,372,101,372,102,371,102,372,102,373,102,374,102,373,102,373,103,374,102,373,102,374,103,374,102,374,103,373,103,374,103,373,103,374,103,374,102,375,103,374,103,375,103,375,102,375,103,376,102,376,103,376,102,377,102,378,102,379,103,378,103,378,104,377,104,378,104,377,104,378,104,378,105,378,104,378,105,378,104,378,105,379,104,378,105,377,105,378,105,379,105,378,105,379,105,380,105,380,104,381,105,380,105,379,105,379,106,378,106,378,107,379,106,378,107,378,108,378,107,378,108,379,108,379,107,380,106,381,106,381,107,380,107,380,108,381,108,381,107,382,108,381,108,382,108,381,109,381,110,380,111,380,110,379,110,379,111,379,110,379,109,377,110,377,109,378,109,378,108,378,107,377,107,377,108,376,108,375,108,374,109,374,110,373,110,372,110,372,109,373,109,374,109,374,108,375,108,375,107,375,108,374,108,375,107,374,108,373,108,373,107,373,108,372,108,371,108,373,107,372,108,372,107,371,107,371,108,370,108,369,108,368,108,367,108,366,108,365,107,364,108,365,107,364,107,364,108,362,108,362,107,361,107,363,106,364,105,365,105,364,105,362,105,363,104,363,105,364,104,364,103,365,103,365,104,366,104,365,104,365,103,366,103,365,103,366,103,365,103,365,102,366,102,366,101,367,100,367,99,368,99,367,98,368,98,369,98,368,97,369,98,369,97,369,96,371,96,372,96,373,96,372,96,373,96</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>345,65,344,65,345,65</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>300,66,299,65,299,64,299,63,300,63,301,63,302,64,301,65,300,66</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>345,66,344,66,343,66,344,65,345,66,346,66,345,66</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>346,70,345,69,346,69,346,70</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>328,63,327,63,327,62,326,62,328,62,328,63,329,63,328,63</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>334,70,335,69,336,69,336,70,335,70,334,70</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>288,64,288,63,289,62,290,62,291,62,292,62,293,62,294,62,293,63,292,63,290,64,289,64,288,64</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>317,63,316,62,317,62,317,63,318,63,317,63</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>346,63,345,63,346,63</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>230,23,229,23,230,23,231,23,233,23,234,23,232,23,231,23,230,23</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>248,17,249,17,246,16,247,16,246,16,247,16,249,16,248,16,246,16,245,16,245,15,244,15,245,15,244,14,245,14,244,14,246,14,248,14,251,15,252,15,254,15,255,15,253,16,254,16,255,16,254,17,253,17,251,17,249,17,248,17</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>302,32,301,32,300,32,299,31,298,31,297,31,297,30,297,29,298,29,301,30,305,29,308,30,309,31,310,31,311,31,311,32,308,32,306,32,305,32,302,32</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>269,19,268,19,266,18,267,18,269,18,270,18,271,19,270,19,269,19</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>240,29,241,29,242,29,243,29,245,29,246,29,247,29,248,29,249,29,249,30,248,30,247,30,246,30,247,30,248,30,246,31,244,31,244,32,245,32,246,31,248,32,247,32,248,32,248,33,249,32,250,32,250,33,251,33,249,34,250,34,249,34,250,34,250,35,249,35,250,35,249,35,248,35,247,36,246,36,245,36,244,35,245,35,244,35,245,36,243,37,243,36,242,36,241,36,240,35,239,35,238,34,237,34,236,34,236,33,235,34,234,33,232,32,231,32,232,32,232,31,233,31,234,31,234,32,235,32,236,32,237,32,238,32,239,32,238,32,238,31,239,31,238,31,238,32,239,32,239,31,238,31,239,31,240,31,239,31,238,30,238,31,237,31,236,31,235,30,236,30,237,30,238,30,237,30,236,29,237,29,239,29,240,29,239,29,240,29</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>244,29,241,29,242,29,246,28,247,28,246,29,245,29,244,29</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>227,25,225,25,226,24,227,24,228,24,228,25,229,25,228,25,227,25</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>257,35,255,34,254,35,254,34,254,33,253,32,252,32,253,32,252,32,253,31,252,31,253,31,253,30,252,30,253,30,252,30,253,30,252,30,252,29,253,29,254,29,256,30,256,29,255,29,254,29,255,29,254,29,254,28,257,28,258,28,259,28,261,28,262,28,263,29,264,28,267,29,269,29,268,29,268,30,267,30,266,31,265,31,264,32,263,32,260,32,259,32,257,32,258,32,258,33,259,33,258,34,257,34,257,35</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>205,16,204,16,204,15,202,15,200,16,200,15,203,15,205,15,208,14,211,15,212,15,211,16,207,16,206,15,206,16,205,16</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>203,19,202,18,201,18,200,18,200,17,202,17,206,16,207,16,210,16,211,16,210,17,209,17,207,17,208,17,209,17,209,18,208,18,207,18,206,18,203,19</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>235,21,234,21,237,20,239,20,236,21,235,21</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>197,17,196,17,194,17,195,17,196,16,197,16,196,16,199,17,198,17,197,17</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>164,33,165,33,164,33,165,32,164,32,166,32,165,31,166,31,165,31,166,30,167,30,168,29,167,29,166,28,165,28,166,28,165,28,165,27,171,27,173,27,175,27,176,27,177,27,181,28,180,28,181,28,182,28,182,29,183,28,185,28,187,28,189,28,192,29,193,30,194,30,192,30,189,31,188,31,187,32,183,32,182,33,180,34,179,34,178,35,178,36,177,36,175,36,174,36,173,37,172,37,171,37,170,37,169,37,169,36,167,35,165,35,163,35,162,35,162,34,163,34,162,34,163,34,164,33</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>289,32,288,32,284,31,285,30,286,31,286,30,287,30,288,30,288,31,289,31,289,30,288,30,290,30,291,29,294,29,295,29,296,30,296,31,298,31,298,32,299,32,298,33,297,33,296,33,295,34,296,34,297,33,298,33,297,33,297,34,298,34,297,34,296,34,297,34,297,35,298,34,299,34,300,34,299,34,299,33,300,33,301,33,300,34,301,34,301,33,302,33,302,34,303,34,302,34,302,35,303,35,304,35,303,35,303,34,304,34,304,35,305,35,306,35,305,35,306,35,305,35,304,35,304,34,303,34,304,33,304,34,306,34,307,34,309,34,308,34,307,34,304,33,307,32,308,32,309,32,310,32,309,33,311,33,312,33,314,33,315,34,314,34,312,34,311,34,311,35,310,35,311,34,312,34,313,34,314,34,313,34,313,35,312,35,311,35,312,35,313,35,314,34,315,34,317,34,317,35,316,35,314,35,315,35,315,36,314,36,313,36,314,36,315,35,316,35,316,36,315,36,314,36,315,36,314,37,315,37,316,36,315,36,316,36,317,35,317,36,317,35,318,35,318,36,317,36,317,37,318,37,318,36,319,36,318,37,319,37,318,37,319,37,319,36,320,37,319,37,319,38,320,37,321,37,321,36,322,36,325,36,326,37,325,37,324,37,323,37,323,38,322,38,323,38,322,38,322,39,323,38,326,38,326,37,327,37,328,37,328,38,327,38,326,39,325,39,324,39,324,40,324,39,325,39,326,39,326,40,325,40,326,40,326,39,327,39,330,38,329,39,328,39,329,39,328,39,329,39,330,39,330,38,331,38,335,39,334,39,333,40,332,40,329,40,330,40,330,41,329,41,328,41,329,41,330,41,330,40,331,40,332,40,333,40,334,40,333,40,331,41,330,41,329,42,330,42,330,41,331,41,332,41,333,41,334,40,335,40,334,40,335,40,336,40,338,41,336,41,335,41,335,42,334,42,332,42,330,42,329,42,330,42,332,42,333,42,334,42,336,42,338,42,339,42,339,43,340,43,339,43,338,43,337,43,335,43,332,42,332,43,335,43,334,43,333,43,332,43,333,43,332,44,333,44,333,43,334,43,336,43,335,44,335,43,334,44,335,44,336,44,334,44,336,44,334,44,333,44,332,44,331,44,332,44,331,44,333,44,334,44,335,44,335,45,333,45,334,45,335,45,336,45,337,45,338,45,339,45,340,45,338,45,336,45,336,46,337,46,338,45,338,46,337,46,338,46,339,46,339,47,340,46,341,46,340,46,341,46,340,47,339,47,340,47,341,47,342,46,341,47,342,47,341,48,342,47,343,47,343,48,344,48,343,47,344,47,344,46,345,47,344,47,344,48,344,47,345,47,346,47,346,48,347,47,347,48,346,48,348,48,348,49,345,48,347,49,346,49,345,49,348,49,347,49,346,49,345,49,346,49,349,49,348,49,348,50,348,49,349,49,350,49,351,49,350,49,350,50,349,50,348,50,349,50,350,50,349,50,351,50,351,51,351,50,352,50,353,50,352,50,353,50,353,49,353,50,354,50,353,50,354,50,355,50,354,50,355,50,356,50,356,51,355,51,354,51,353,50,353,51,354,51,355,51,354,51,355,51,354,52,353,52,353,51,352,51,351,51,352,51,353,52,352,52,351,52,351,51,351,52,352,52,353,52,353,53,351,52,350,52,351,52,352,53,353,53,352,53,351,53,352,53,351,53,352,53,352,54,351,54,352,54,351,54,351,53,351,54,350,54,349,53,349,54,350,54,349,54,350,54,349,54,349,55,349,56,349,55,348,56,348,55,349,55,348,55,347,55,346,55,347,54,346,55,345,55,345,54,346,54,345,54,344,54,345,54,344,54,345,53,344,53,344,54,343,53,344,53,345,52,345,53,345,52,346,52,345,52,344,52,343,53,342,53,342,52,343,52,343,51,342,52,341,52,340,52,340,51,339,51,338,51,339,51,338,51,337,51,336,51,338,51,337,51,338,52,337,52,337,51,336,51,336,52,338,52,338,53,337,53,336,53,335,53,336,52,335,52,334,52,335,52,335,53,335,52,335,53,334,52,335,52,335,53,334,53,335,53,336,53,336,54,335,54,336,54,337,53,338,54,337,54,338,54,337,54,338,54,337,54,338,55,339,55,338,55,339,55,339,56,340,56,339,56,339,55,340,55,340,56,341,56,340,56,341,56,342,56,342,57,342,56,343,56,342,56,343,56,343,57,342,57,343,57,344,57,344,58,343,58,344,58,343,58,344,58,345,58,345,59,345,58,346,59,345,59,346,59,346,60,346,61,345,60,344,59,344,60,345,60,344,60,345,60,345,61,344,61,345,61,344,61,345,61,345,62,346,62,345,62,344,62,344,61,344,62,345,62,345,63,344,63,344,62,343,62,344,62,343,62,344,62,343,62,344,62,343,62,342,62,342,61,342,62,342,61,342,62,341,62,341,61,341,62,340,61,339,61,339,60,339,61,340,61,340,62,339,61,338,61,339,61,338,61,339,60,338,60,338,61,337,60,336,60,336,59,336,60,335,60,335,59,335,60,334,60,334,59,333,59,333,60,335,61,336,61,337,61,336,61,336,62,336,61,337,61,337,62,338,62,339,62,339,63,339,62,339,63,340,63,341,63,340,63,341,64,340,64,341,63,341,64,342,64,341,64,342,65,341,65,340,65,339,64,338,64,337,64,336,64,334,64,333,64,333,63,332,63,331,63,331,62,330,62,329,62,328,62,327,62,326,62,327,62,327,61,326,62,326,61,327,61,326,61,325,61,324,61,325,61,324,61,325,61,324,61,324,60,323,60,324,60,325,60,326,60,325,60,325,59,325,60,324,59,323,59,324,59,324,60,324,59,323,60,323,59,322,59,323,59,322,59,322,58,321,58,322,59,321,59,321,58,320,58,319,58,319,57,320,57,319,57,320,57,319,57,320,57,319,57,320,57,319,57,318,57,318,58,317,57,318,57,317,57,317,56,317,57,317,56,317,57,316,57,315,56,316,56,315,56,316,57,315,57,314,57,313,57,312,57,313,57,312,57,311,57,310,57,311,58,310,58,309,58,310,58,309,58,308,58,307,58,307,57,307,58,306,57,305,57,306,57,305,57,305,56,307,55,308,55,307,55,307,54,308,54,307,54,308,54,309,54,312,55,313,55,313,56,314,56,313,56,314,55,313,55,312,55,313,54,313,55,314,55,314,54,315,54,316,55,316,54,317,54,318,54,319,54,318,53,317,53,316,52,317,52,319,51,320,51,320,50,324,51,325,51,326,51,326,52,326,53,327,52,328,52,329,52,330,52,331,52,332,51,331,51,330,51,331,51,332,51,331,51,330,51,328,50,327,50,326,49,326,50,325,50,325,51,321,50,320,50,321,50,321,49,322,49,323,49,322,49,322,48,322,47,321,47,322,47,321,47,321,46,320,46,319,46,320,46,320,45,319,46,318,46,318,45,318,44,317,44,318,45,317,45,316,45,315,44,316,44,315,44,316,44,315,44,314,44,315,44,314,44,315,43,315,44,316,43,315,43,314,44,313,43,313,44,310,44,309,44,310,44,310,43,311,43,312,43,313,43,312,43,311,42,310,42,311,42,310,41,310,42,309,42,308,42,308,41,309,41,308,41,307,41,306,40,305,40,304,40,304,39,303,39,302,39,303,39,302,38,302,39,301,39,302,40,302,39,303,40,304,41,303,41,300,41,299,41,299,40,299,41,298,40,296,40,294,40,296,40,297,41,295,41,294,41,294,40,290,40,291,40,294,41,293,41,292,41,291,41,290,40,289,41,287,41,285,40,283,40,282,40,283,40,284,41,282,40,281,40,280,40,280,39,281,39,280,39,280,40,279,40,279,39,278,39,279,39,279,40,276,40,277,40,276,40,275,40,275,39,276,40,275,39,274,39,273,39,272,39,272,38,271,38,272,38,271,37,272,37,273,37,274,37,274,38,275,38,277,38,278,37,276,37,271,37,270,36,269,36,270,36,269,36,270,35,269,35,270,34,271,34,270,34,270,33,271,33,271,32,272,32,271,32,272,32,271,32,271,31,272,31,273,31,272,31,273,31,273,30,274,30,276,30,277,29,281,29,284,29,285,29,285,30,284,30,282,30,280,32,279,32,279,33,280,33,281,33,280,34,281,35,283,36,285,36,285,37,284,37,283,37,282,37,281,37,279,38,280,38,283,37,284,37,285,37,284,37,285,37,285,38,285,37,286,37,285,37,285,36,286,36,286,35,285,35,285,36,284,35,283,35,281,35,281,34,282,34,283,34,285,34,287,34,287,35,287,34,286,34,285,34,285,33,284,33,283,33,282,33,282,32,283,32,282,32,283,32,284,32,284,31,283,31,284,31,285,31,287,31,289,32</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>259,18,252,18,251,18,251,17,253,17,254,17,255,17,258,17,259,17,260,17,260,18,259,18</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>184,24,183,24,181,24,183,23,184,23,185,23,185,22,187,22,187,23,186,23,185,24,184,24</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>353,103,350,103,349,102,348,102,346,101,347,101,349,101,351,101,353,102,354,103,355,103,354,103,353,103</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>199,20,195,20,196,20,197,20,198,20,199,20</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>167,102,166,101,167,102</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>240,17,238,17,237,17,237,16,236,16,234,16,233,16,232,16,231,16,232,15,231,15,228,16,226,16,225,15,224,15,225,15,226,15,229,15,227,15,228,15,229,14,230,14,229,14,228,14,227,14,228,14,227,14,226,14,225,14,224,14,225,14,225,13,223,13,224,13,228,12,231,13,232,13,232,14,231,14,232,14,232,13,234,13,235,13,236,14,238,14,239,14,240,14,239,15,241,15,240,15,240,16,241,16,243,16,243,17,242,17,241,17,240,17</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>263,21,265,20,266,21,268,21,267,21,265,21,267,21,272,22,271,22,269,22,268,22,269,22,266,22,265,22,267,22,268,22,269,22,266,23,267,23,266,23,267,23,268,23,269,23,270,22,270,23,271,23,272,23,272,24,271,24,272,24,273,24,273,23,274,24,275,24,276,24,277,24,278,24,279,24,280,24,281,24,282,24,284,24,286,23,287,23,288,23,290,23,292,23,293,23,296,23,296,24,299,24,300,24,299,24,298,24,299,24,300,24,301,24,301,25,300,25,298,25,299,26,300,25,301,26,302,26,301,26,300,26,299,26,298,26,299,26,299,27,296,27,294,27,293,27,292,27,291,27,290,27,290,26,289,26,290,26,289,27,288,27,286,27,285,27,285,26,284,27,283,27,283,26,283,27,281,27,280,27,279,27,280,27,279,27,278,27,277,27,278,27,277,27,276,27,274,27,274,26,275,26,274,26,273,26,273,27,273,26,272,26,272,27,270,27,269,27,268,27,267,26,266,26,267,26,266,26,266,27,266,26,265,26,266,26,265,27,264,26,265,26,264,26,263,26,263,25,262,25,263,24,262,24,263,24,263,23,262,22,260,22,260,21,259,22,258,22,257,22,256,22,254,22,253,22,254,22,255,22,255,21,252,21,251,21,252,21,253,21,252,21,250,21,250,20,249,20,250,20,251,20,249,20,250,20,249,20,250,19,252,19,256,20,257,20,258,20,259,20,260,20,260,21,259,21,260,21,263,21</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>379,106,378,106,379,106</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>240,26,239,25,238,25,239,25,238,25,239,25,238,25,237,24,238,24,240,24,239,24,240,24,236,24,232,24,231,24,232,24,231,23,232,23,233,23,232,23,233,23,234,23,235,23,236,23,235,23,236,23,235,23,235,22,235,23,234,22,235,22,233,22,233,21,234,21,233,21,234,21,235,21,236,22,237,22,238,22,237,22,238,22,239,23,240,23,241,23,240,23,239,22,240,22,241,22,240,22,239,22,238,22,239,22,239,21,237,21,238,21,239,21,241,21,242,21,243,21,242,21,243,21,243,20,244,20,244,21,246,21,247,21,246,21,247,21,246,22,247,22,247,23,246,23,247,23,247,24,248,24,247,24,246,24,245,24,246,24,245,24,246,24,245,24,245,25,246,25,247,25,246,25,245,25,246,25,243,26,243,25,241,26,241,25,242,25,241,25,241,26,240,26</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>249,32,248,32,248,31,249,31,250,31,250,32,249,32</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>225,19,223,19,224,19,223,19,223,18,222,18,223,18,222,18,221,17,223,17,224,18,225,18,224,18,226,19,225,19</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>233,17,232,17,234,17,236,17,237,17,233,17</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>257,27,254,26,253,26,252,26,251,26,251,25,251,26,250,26,251,26,251,25,250,26,250,25,251,25,252,24,251,24,252,24,253,24,255,24,256,24,257,24,258,24,259,25,259,26,259,27,257,27</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>196,33,197,33,199,32,199,33,198,33,199,32,200,32,200,31,202,32,206,32,206,33,205,33,204,33,204,34,204,33,205,34,204,34,205,34,205,33,206,33,205,33,206,33,206,34,206,33,207,33,206,33,207,33,208,33,209,33,210,33,209,33,210,33,209,33,209,32,210,33,210,32,209,32,208,32,207,32,207,31,208,31,210,32,211,32,210,32,211,32,213,32,213,33,212,33,213,33,214,33,214,34,214,35,215,35,216,36,216,35,217,35,218,35,217,35,218,35,217,35,217,34,216,34,216,33,215,33,216,33,215,33,215,32,215,31,216,31,215,31,215,30,217,31,218,31,219,31,220,31,221,31,222,31,222,32,223,32,224,32,223,32,224,33,225,34,224,34,225,35,226,35,226,36,227,36,226,36,226,37,226,38,227,38,229,39,230,39,231,39,230,39,230,38,230,39,231,39,233,39,234,40,235,40,236,40,237,40,236,40,237,41,236,42,236,41,235,41,235,42,234,41,233,41,232,41,231,41,232,41,232,42,231,42,230,42,230,41,229,41,229,42,230,42,231,42,230,43,231,42,232,42,233,42,234,42,233,42,233,43,234,43,234,44,232,44,231,44,230,44,229,44,227,44,226,44,225,44,224,44,225,43,224,43,223,43,222,43,221,43,220,43,221,43,221,42,220,42,219,42,219,43,218,43,217,44,215,44,214,44,213,44,209,45,208,45,207,45,205,45,206,45,205,45,201,45,200,45,199,45,199,44,198,44,199,44,198,44,199,43,198,43,197,43,195,43,194,43,192,43,190,42,189,42,188,41,187,41,188,40,190,40,194,40,197,40,198,40,200,40,202,40,203,40,204,40,205,40,205,39,204,39,203,39,202,39,201,39,200,39,198,38,197,39,196,38,195,39,191,39,190,39,189,39,187,39,186,39,186,38,185,38,184,38,186,37,189,37,191,36,192,36,191,36,193,36,194,36,193,36,188,36,187,36,186,36,185,36,186,36,186,35,185,36,184,36,183,36,182,36,182,35,183,35,183,34,184,34,185,34,185,33,184,33,185,32,186,32,187,32,192,31,196,30,197,31,198,31,197,32,198,32,197,32,196,32,197,32,196,33</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>312,117,311,117,310,118,309,120,306,120,303,120,302,120,302,121,303,122,302,122,299,123,296,124,295,124,292,125,291,125,290,125,290,124,291,123,292,123,292,122,292,121,293,120,293,119,292,117,292,114,291,114,289,113,289,112,288,112,287,112,287,111,286,111,285,111,285,110,283,109,280,108,277,107,274,106,273,106,271,107,271,106,270,106,270,107,270,106,269,106,268,106,267,106,266,106,265,106,264,106,263,105,263,106,262,106,262,105,261,105,262,105,260,105,259,105,258,105,257,104,256,104,255,104,255,103,254,102,254,103,254,104,248,104,238,104,228,104,218,104,209,104,199,104,189,104,179,104,171,104,171,103,170,103,170,104,170,103,171,103,171,102,171,103,170,103,170,102,170,101,170,102,169,102,168,102,167,102,167,101,168,101,168,102,169,101,168,102,168,101,168,100,168,101,167,101,166,101,165,101,165,100,165,101,165,100,166,100,165,100,166,99,165,99,165,100,165,99,164,100,164,99,165,99,165,98,165,99,164,99,163,99,163,98,163,99,162,99,161,99,162,99,161,99,162,98,163,98,163,97,163,98,162,98,163,98,162,98,161,99,161,98,160,98,161,98,160,98,160,97,160,98,159,98,158,98,159,98,158,98,157,98,157,97,156,97,157,97,158,97,158,96,158,97,157,97,157,96,156,97,156,96,157,96,158,95,159,96,160,95,159,96,157,95,157,96,156,96,157,96,156,96,156,95,157,94,158,94,159,94,159,93,158,93,159,92,158,92,159,92,158,93,156,94,156,93,156,94,156,93,156,94,155,93,156,93,155,93,155,94,154,94,155,93,155,92,154,92,154,91,153,91,153,90,154,90,155,90,156,91,155,90,154,90,153,90,153,89,154,89,153,89,154,88,153,88,153,89,152,89,152,90,151,90,150,89,149,89,149,88,150,88,151,88,150,88,149,88,149,87,148,87,149,87,148,87,148,86,149,86,149,87,150,87,149,86,150,86,150,85,150,86,150,85,150,84,149,85,149,86,149,85,150,85,149,84,149,83,150,83,149,83,149,82,148,82,147,81,146,81,145,81,144,81,144,80,143,80,143,79,142,79,143,79,142,78,140,76,139,75,138,75,138,74,137,74,136,74,136,73,135,73,134,72,135,72,134,72,133,71,130,72,131,72,130,72,130,73,129,73,127,74,127,73,126,72,124,71,123,71,122,71,122,70,122,69,120,69,120,70,118,70,117,70,116,60,116,50,117,42,118,42,120,42,122,42,123,42,124,43,125,43,128,44,129,44,130,44,131,44,133,44,134,44,133,44,134,44,135,44,136,44,137,44,136,44,136,43,137,43,138,43,138,42,140,42,141,42,142,42,143,41,142,41,142,42,142,41,143,41,144,41,145,41,146,41,146,40,147,40,146,40,147,40,148,40,149,40,150,40,151,40,149,41,148,41,147,42,146,42,143,42,142,43,143,43,142,43,141,43,141,44,141,43,140,43,140,44,139,44,140,44,141,44,140,44,139,44,140,44,141,44,142,44,141,44,141,43,142,43,143,43,144,43,144,42,145,42,144,42,145,42,145,43,145,42,146,42,145,43,146,42,146,43,146,42,147,42,146,42,146,43,147,42,147,43,146,43,147,43,147,42,148,42,147,42,148,41,150,41,152,41,153,41,152,41,153,41,155,41,155,40,154,40,155,40,157,40,156,40,155,40,155,39,156,39,155,39,156,39,158,40,159,40,159,41,162,42,163,43,163,42,164,42,163,42,164,42,163,42,163,41,164,41,165,41,165,42,165,41,164,41,165,41,166,41,165,40,165,41,165,40,164,41,164,40,165,40,166,40,165,40,166,40,166,41,167,41,167,42,166,42,167,42,168,42,167,42,168,42,169,42,170,42,170,41,171,41,173,41,174,41,177,42,179,42,180,42,183,43,184,43,187,44,189,44,190,44,191,44,192,44,191,44,192,44,193,44,195,44,196,44,196,45,197,45,198,45,197,46,195,46,194,46,194,47,193,47,194,47,196,47,197,47,199,47,202,47,203,47,204,47,205,47,206,47,207,47,208,47,209,47,209,46,210,47,209,47,210,47,211,47,210,47,211,47,212,47,213,48,212,48,213,48,214,48,215,49,216,49,215,49,214,49,215,50,216,50,216,51,216,50,217,51,218,51,217,51,216,50,216,49,217,50,216,49,217,49,217,50,216,50,217,50,218,50,218,49,217,49,218,49,217,49,216,48,217,48,216,48,216,47,215,47,216,47,217,47,216,47,216,46,216,47,217,46,218,46,219,46,220,46,220,45,221,45,222,45,223,45,221,45,220,45,220,46,219,45,218,45,218,46,216,45,216,46,217,46,216,46,215,46,214,46,215,46,214,46,213,46,214,45,215,45,218,44,219,44,220,44,221,44,222,44,223,44,223,45,224,45,223,45,224,45,224,46,225,45,225,46,226,46,225,46,226,46,228,46,229,46,232,47,233,47,234,47,235,47,237,47,238,47,240,47,242,47,243,47,244,47,243,47,243,46,244,46,245,47,246,47,246,48,247,48,248,47,247,47,247,46,246,46,246,47,245,47,244,46,245,46,243,45,244,45,245,46,245,45,246,45,245,45,246,45,247,45,248,45,248,46,249,46,250,46,249,46,250,46,249,46,250,46,251,46,252,46,251,46,251,47,251,48,251,47,250,48,251,48,250,48,251,48,251,49,252,48,252,49,253,48,253,49,252,49,253,49,254,49,253,50,252,50,252,49,251,49,251,50,251,49,250,49,250,50,251,50,252,50,252,51,253,50,252,50,251,50,253,50,254,50,253,49,254,49,253,49,254,49,253,48,254,48,253,48,252,47,253,47,253,46,254,46,255,46,257,46,257,45,259,45,258,45,258,44,259,44,258,44,258,43,258,44,257,44,256,44,256,43,257,43,257,42,258,42,259,42,258,43,259,42,258,42,257,42,256,42,256,41,255,42,252,41,251,41,250,40,250,39,251,39,252,39,251,39,250,38,250,37,251,37,251,36,252,36,253,37,253,36,252,36,253,35,254,35,255,35,256,35,254,35,255,35,256,35,256,36,257,35,258,35,258,36,260,36,261,36,261,37,261,38,260,38,261,38,262,38,261,38,262,38,263,39,264,39,263,40,264,40,264,39,264,40,265,40,263,40,262,40,263,40,264,40,263,41,262,41,261,41,262,41,262,42,263,42,264,42,265,42,266,42,265,42,266,42,267,42,268,42,267,42,268,42,267,42,267,43,266,43,267,42,266,43,268,43,267,43,267,44,268,44,268,45,269,45,269,46,269,45,270,45,270,44,270,45,270,44,270,43,272,43,273,43,275,44,276,44,276,46,275,46,275,45,274,46,275,46,274,46,274,47,275,47,275,48,276,48,277,49,278,49,279,49,278,48,279,49,279,48,280,48,280,47,281,47,281,46,281,47,282,46,282,45,283,44,284,44,285,44,284,44,285,44,284,44,285,44,285,43,286,44,286,43,284,43,285,43,284,43,283,43,283,42,283,41,284,41,283,41,284,41,285,41,286,41,287,41,288,41,289,41,290,41,291,41,293,42,292,42,291,42,292,42,290,42,291,42,293,42,292,42,293,43,294,43,295,43,296,43,295,43,295,44,294,44,295,44,296,44,296,45,295,45,294,45,293,45,292,45,292,46,293,46,292,46,293,46,294,46,293,46,293,47,294,47,295,48,296,48,295,49,295,50,294,50,293,50,292,50,292,51,290,51,289,51,288,51,287,51,287,50,288,50,288,51,288,50,287,50,286,50,287,50,286,50,285,49,286,50,284,50,285,50,286,50,285,50,286,50,285,50,286,50,287,50,286,50,287,50,287,51,288,51,288,52,287,52,286,52,286,51,286,52,285,52,284,52,284,51,283,51,282,51,281,51,280,51,279,51,280,51,279,51,280,52,282,52,281,52,282,52,281,53,280,53,279,54,278,54,277,55,276,55,275,54,274,54,272,53,271,53,270,53,269,53,268,53,269,53,268,53,266,53,265,53,266,53,269,53,270,53,271,54,272,54,272,55,276,55,278,55,279,55,278,56,277,56,277,57,276,57,275,58,276,58,275,58,274,58,273,58,273,59,272,58,272,59,272,58,272,59,271,58,271,59,270,58,269,58,270,58,270,59,269,59,269,58,269,59,270,59,269,59,269,60,268,60,268,59,267,60,268,60,268,59,268,60,267,60,265,59,264,59,263,59,262,59,261,59,259,58,258,58,259,58,259,59,258,59,259,59,260,59,259,59,262,59,263,59,263,60,262,60,263,60,264,59,265,60,267,60,267,61,268,61,267,62,266,62,265,62,263,62,262,62,263,63,264,63,263,63,262,63,261,63,262,64,261,64,260,64,261,64,260,64,260,65,259,64,260,65,259,65,260,65,259,65,260,65,259,65,260,65,258,66,258,67,257,67,258,67,257,68,256,68,256,69,255,69,256,69,255,69,256,69,255,70,255,71,255,72,256,72,255,73,255,74,256,74,257,74,257,75,256,76,257,75,257,74,258,74,259,74,260,74,260,75,261,76,261,77,262,78,262,79,261,80,262,79,263,79,262,80,263,80,263,79,265,79,267,79,268,79,270,80,273,80,275,81,276,81,277,82,277,83,278,83,280,83,281,83,282,84,283,84,284,84,284,85,283,85,284,85,286,85,287,85,288,85,289,85,288,85,290,85,291,85,292,85,293,85,292,85,293,85,293,86,292,88,293,88,293,89,293,90,293,91,293,92,294,92,295,93,295,94,294,94,295,94,297,94,297,95,298,95,298,96,298,97,297,97,298,97,298,96,299,97,302,98,301,98,301,97,300,97,300,96,301,96,302,96,303,97,303,96,303,95,302,95,303,95,303,94,304,94,304,93,303,93,303,92,303,91,303,90,302,90,303,90,302,90,303,90,302,90,302,89,303,89,302,89,303,89,302,89,303,89,302,88,301,88,301,87,300,87,301,86,302,86,303,86,304,85,306,85,307,84,308,84,308,83,309,82,310,82,310,80,310,79,309,78,309,77,308,76,306,76,305,75,304,75,305,75,304,75,304,74,305,74,305,73,306,73,306,72,306,71,307,72,307,71,308,71,307,71,308,71,308,70,307,70,306,69,307,69,306,69,307,68,306,68,307,68,306,68,305,68,306,67,306,66,307,66,306,66,307,66,306,66,306,65,305,64,305,63,306,63,307,63,310,63,312,64,313,64,314,64,315,64,316,64,315,64,316,64,318,63,319,63,321,64,322,64,322,65,321,65,322,65,323,65,324,65,323,66,324,66,324,65,324,66,325,66,324,66,325,66,324,66,325,67,324,67,325,67,326,67,327,67,328,67,329,67,329,68,330,68,331,68,330,68,331,67,331,68,330,68,331,69,330,69,330,70,331,70,330,70,330,71,328,70,329,71,330,71,331,71,331,72,330,72,331,72,330,72,330,73,331,72,331,73,332,73,331,73,331,74,330,74,330,73,330,74,329,74,330,74,330,75,331,74,332,74,333,74,334,74,334,75,335,75,334,76,333,77,332,77,331,77,333,77,334,76,335,76,335,75,336,75,336,76,335,76,336,76,336,75,336,76,337,76,336,76,336,77,337,76,338,75,339,75,340,75,340,74,341,74,341,75,342,75,341,75,342,75,341,75,342,75,341,74,342,74,342,73,342,74,342,73,343,73,344,73,343,73,342,73,343,73,343,72,344,72,345,72,343,72,343,71,344,71,344,70,345,70,345,69,346,70,345,70,346,70,345,70,345,71,346,70,346,71,347,71,347,70,347,71,348,72,347,72,348,72,347,72,348,72,348,73,349,72,349,73,348,73,347,73,348,73,348,74,348,73,350,73,349,73,350,73,350,74,351,74,350,74,351,74,350,74,351,74,351,75,350,75,349,75,349,76,350,75,351,75,352,75,352,76,351,76,352,76,350,76,349,77,350,76,351,76,352,76,353,76,352,77,352,76,352,77,353,77,354,78,353,78,352,78,353,78,354,78,354,79,353,79,354,79,355,79,354,79,355,79,355,80,354,80,355,81,354,81,354,80,353,81,352,80,353,80,352,80,353,81,354,81,355,81,354,81,353,81,354,81,355,82,354,82,355,82,354,82,353,82,354,82,355,82,356,82,355,82,355,83,356,83,357,83,358,83,358,84,358,83,359,83,358,83,358,84,359,84,358,84,359,84,358,84,358,85,357,85,357,86,359,85,360,85,361,85,360,86,361,85,362,85,361,86,362,85,363,85,362,86,363,85,363,86,364,86,365,86,366,86,366,87,367,87,366,87,365,88,364,88,363,88,361,88,361,89,363,88,364,88,363,88,363,89,360,89,359,89,359,90,358,89,357,89,358,89,358,90,359,90,358,90,358,91,359,90,359,91,358,91,359,91,360,90,361,90,362,89,363,89,365,88,366,88,365,88,364,88,365,88,367,88,368,89,367,90,368,90,367,90,368,90,368,89,369,89,370,89,369,89,370,90,371,90,372,90,371,90,372,90,371,90,372,90,372,91,371,92,372,92,371,92,372,92,372,93,371,93,372,93,371,93,372,93,373,93,372,93,372,94,373,94,372,94,372,95,372,94,372,95,370,95,370,96,369,96,368,96,367,96,366,96,365,97,364,97,363,97,364,97,363,97,363,98,363,97,362,97,363,98,362,98,361,99,360,99,360,100,359,100,357,100,356,100,355,100,354,100,353,100,352,100,351,100,349,100,348,100,347,100,346,100,345,100,344,100,342,100,341,100,340,100,339,100,339,101,338,101,338,102,337,103,335,103,334,103,333,104,334,104,333,104,332,104,332,105,331,106,330,106,329,106,328,105,327,105,327,106,328,105,328,106,329,106,330,106,330,107,329,108,328,108,328,109,327,109,326,110,327,110,328,110,328,109,329,109,329,108,331,107,332,106,334,105,336,104,338,104,340,103,342,103,343,103,345,103,347,104,346,104,347,105,345,105,345,106,344,106,343,106,342,106,341,106,340,106,339,106,339,107,340,106,342,107,343,107,342,108,343,108,344,107,345,107,345,108,345,109,343,109,344,109,345,109,345,110,345,111,346,111,346,112,346,111,346,112,347,112,348,112,347,112,348,113,349,113,350,113,349,113,350,113,351,113,352,113,351,114,352,113,352,114,352,113,354,113,354,114,355,114,355,113,356,114,355,114,356,114,357,115,356,115,355,115,354,115,355,115,354,115,353,115,353,116,352,116,351,116,350,116,350,117,349,117,349,116,349,117,349,116,349,117,348,117,348,116,347,117,346,117,347,117,346,118,347,118,346,118,345,118,346,118,345,119,344,119,344,120,344,119,343,119,344,119,343,120,342,120,342,119,342,120,342,119,341,119,341,118,341,117,342,117,341,117,342,116,342,117,343,117,343,116,342,116,344,116,345,115,346,115,346,114,346,115,347,115,346,115,347,115,347,116,347,115,348,115,349,115,349,114,348,114,347,114,346,114,345,114,345,115,345,114,345,115,345,114,346,113,347,113,346,113,347,113,346,113,345,112,345,113,346,113,345,114,344,114,343,114,342,115,341,115,341,114,342,114,341,114,341,115,340,115,339,115,338,115,337,115,337,114,336,113,336,111,336,109,335,109,335,108,334,108,334,109,333,109,332,109,332,108,331,109,329,110,329,111,329,112,329,113,328,113,327,114,328,114,327,114,327,115,327,114,326,114,326,115,325,115,324,115,321,115,320,115,319,115,318,115,315,115,314,116,313,116,312,117</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>464,200,464,199,463,199,464,199,465,199,464,200</Points>\n    <Keys>Cape Verde, CPV, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>469,206,468,205,469,205,469,206</Points>\n    <Keys>Cape Verde, CPV, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>466,206,466,205,467,205,467,206,466,206</Points>\n    <Keys>Cape Verde, CPV, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>471,203,471,202,471,203</Points>\n    <Keys>Cape Verde, CPV, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>608,218,609,218,609,219,611,221,610,222,610,223,610,224,610,223,610,224,612,224,612,225,612,226,613,226,614,226,615,227,615,228,616,228,618,230,619,231,618,231,619,232,620,233,621,233,621,234,621,235,622,235,621,235,620,235,619,235,618,235,617,235,616,234,616,235,615,235,615,236,614,236,613,235,612,236,611,236,610,237,609,237,609,236,608,236,608,237,607,237,607,238,606,238,605,238,604,238,603,237,603,238,602,237,601,237,601,236,600,236,599,235,598,235,597,235,597,236,596,237,595,237,595,238,595,239,595,240,594,240,593,240,592,240,592,239,592,240,591,240,590,240,589,240,589,241,589,242,588,244,588,243,588,242,587,241,585,239,585,238,585,237,584,237,584,236,584,235,583,235,583,234,583,233,583,232,584,232,584,231,584,230,585,230,585,229,586,228,587,228,588,228,589,227,590,228,591,227,592,227,593,227,594,226,595,226,596,226,597,225,597,224,596,224,597,223,598,224,599,223,600,223,601,223,602,223,601,222,602,222,602,221,603,221,604,221,604,220,605,220,605,219,606,218,607,217,608,218</Points>\n    <Keys>Central African Republic, CAF, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>585,181,588,180,595,183,604,188,611,192,611,194,611,203,610,203,609,203,608,204,608,205,608,206,607,207,607,208,606,209,606,210,606,211,605,211,605,212,605,213,606,213,606,212,607,213,607,214,607,216,608,216,608,217,608,218,607,217,606,218,605,219,605,220,604,220,604,221,603,221,602,221,602,222,601,222,602,223,601,223,600,223,599,223,598,224,597,223,596,224,597,224,597,225,596,226,595,226,594,226,593,227,592,227,591,227,590,228,589,227,588,228,587,228,586,228,586,227,585,225,584,224,583,223,581,222,582,221,583,221,584,221,585,221,586,221,587,221,586,220,585,219,585,218,585,217,585,216,585,215,585,214,584,214,584,213,584,212,584,213,584,212,583,212,583,211,582,211,581,211,581,210,580,209,580,207,581,207,580,207,581,206,581,205,583,203,586,200,586,198,586,195,587,191,587,189,586,188,585,186,585,185,585,181</Points>\n    <Keys>Chad, TCD, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>316,394,317,394,318,394,316,394</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>318,382,317,382,318,382</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>314,405,314,404,314,405,314,404,314,405</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>330,416,330,415,331,415,332,415,330,416</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>313,397,313,396,312,396,313,396,314,396,313,397</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>315,389,314,389,315,389,315,388,314,388,315,388,315,389</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>315,398,314,398,315,398</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>338,416,337,416,336,416,335,416,335,415,334,415,337,415,338,415,338,416</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>328,416,327,416,327,415,326,415,327,415,328,415,327,416,329,416,328,416</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>334,408,334,410,334,412,334,414,334,415,333,415,332,415,331,415,330,415,329,415,330,415,329,415,328,415,327,415,328,414,327,415,326,415,327,414,326,414,326,415,326,414,325,414,325,415,325,414,324,414,323,414,324,414,323,414,324,414,325,414,324,414,325,414,326,414,325,414,326,414,327,414,327,413,328,414,327,414,328,414,327,414,328,414,329,414,328,414,328,413,327,413,329,414,329,413,330,413,330,414,330,413,331,414,332,414,331,414,331,415,332,414,330,413,329,413,329,412,331,411,330,411,329,411,328,411,328,410,328,409,328,410,329,410,329,409,328,409,329,409,330,409,331,408,332,408,332,409,333,408,334,408</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>317,403,316,403,316,402,315,402,316,402,317,403</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>314,397,314,396,313,396,313,395,314,396,314,397</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>324,414,324,413,323,413,323,412,324,412,325,412,324,412,324,413,324,412,324,413,325,413,324,413,324,414</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>315,404,315,403,315,404,315,403,316,403,316,404,315,404</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>317,386,316,386,316,385,317,385,318,385,317,385,317,386</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>317,406,317,405,318,405,317,406,318,406,317,406</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>328,413,327,413,327,412,328,412,327,412,328,411,328,412,328,413,327,412,328,412,328,413</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>317,408,317,407,316,407,317,407,318,407,318,408,317,408</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>318,381,317,380,316,380,317,379,317,378,317,377,317,376,318,376,317,376,318,376,319,376,319,377,319,378,318,378,319,378,318,378,319,379,318,379,319,380,318,380,318,381</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>320,385,319,385,320,385,319,385,319,384,320,384,321,384,321,385,320,385</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>319,388,318,388,318,387,319,387,318,387,319,387,319,388</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>314,405,315,404,315,405,315,404,316,404,316,405,315,404,315,405,314,405</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>316,397,315,396,314,396,315,396,315,395,316,396,315,396,316,396,316,397</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>315,407,314,407,315,407,314,406,315,406,315,405,315,406,315,407</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>314,400,313,400,313,399,314,400</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>321,413,320,413,321,413,321,412,322,412,321,412,320,412,320,413,320,412,319,412,319,411,320,411,321,412,321,411,320,411,319,411,320,411,321,411,320,411,321,411,321,412,321,411,321,412,322,412,322,411,321,411,322,411,322,412,323,412,322,412,323,412,323,413,322,413,322,412,322,413,321,413</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>314,398,314,397,313,398,313,397,314,397,314,398</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>318,407,317,406,318,407</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>318,386,317,386,318,385,318,386</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>335,418,335,417,334,417,333,417,333,416,332,416,331,416,332,416,331,416,332,417,331,417,330,416,331,416,330,416,329,416,330,416,331,416,332,415,333,415,334,415,334,416,335,416,334,416,333,416,332,416,334,416,335,416,334,416,333,416,334,417,334,416,334,417,335,417,336,417,335,417,336,418,335,418</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>315,401,315,400,315,401,315,400,316,400,315,400,315,399,316,399,315,399,314,399,315,399,314,399,314,400,315,399,315,400,314,400,315,400,314,400,314,399,313,399,313,398,314,399,314,398,314,399,314,398,315,399,315,398,315,397,315,398,315,397,314,397,315,397,314,397,315,397,314,397,315,397,316,397,316,398,316,399,316,400,316,401,315,401</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>314,402,314,401,313,402,313,401,314,401,313,401,314,401,313,401,314,401,315,401,314,401,315,401,314,401,314,402</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>317,385,316,385,317,385,316,385,316,384,317,384,318,384,318,385,317,385</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>316,388,316,387,317,387,317,388,316,388</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>315,403,315,402,315,403</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>314,396,314,395,315,395,315,396,314,396</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>318,409,318,408,317,408,318,408,318,409</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>315,395,314,395,314,394,314,395,314,394,315,394,315,395</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>326,414,325,413,326,413,325,413,324,413,325,413,325,412,325,413,325,412,326,413,327,413,326,413,326,414</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>314,403,313,403,313,402,314,402,313,402,314,402,314,403</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>320,411,319,410,318,410,317,410,316,409,315,409,316,409,317,409,318,409,318,410,319,410,320,410,319,410,320,411</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>328,306,329,305,330,305,330,304,330,303,331,303,331,304,332,304,332,305,332,306,332,307,333,307,333,308,334,309,333,310,334,310,334,311,333,311,333,312,334,312,334,313,335,314,335,315,335,316,336,317,336,318,336,319,337,319,338,319,338,320,338,321,337,323,335,324,334,324,334,325,334,326,334,327,334,328,334,329,334,330,335,331,335,332,334,332,333,332,333,333,332,333,332,334,332,335,331,335,331,336,330,336,330,338,329,338,329,339,330,340,330,341,330,342,329,342,329,343,329,344,328,344,328,345,328,346,329,346,329,347,328,347,329,347,329,348,329,349,330,349,329,350,330,350,330,351,330,352,330,353,329,353,329,354,329,355,328,356,328,357,328,358,328,359,327,359,327,360,326,360,326,361,326,362,326,363,326,364,327,366,327,367,326,367,325,367,325,368,325,369,324,369,324,370,325,370,324,371,325,371,324,372,324,373,324,374,324,375,324,377,323,377,323,378,323,379,323,380,324,380,324,381,324,382,325,382,324,382,324,383,324,384,326,384,326,385,325,385,324,385,323,385,325,385,325,386,326,386,325,387,324,387,324,388,325,388,324,389,324,390,324,391,324,392,323,392,323,393,322,393,323,393,322,394,323,395,323,396,322,396,322,397,321,397,320,398,319,398,319,399,319,400,319,401,320,401,320,402,320,403,321,402,322,403,322,402,323,402,322,403,323,403,323,404,322,404,323,404,322,405,323,405,323,406,324,406,327,406,330,406,331,407,332,407,334,407,334,408,334,407,333,407,332,407,331,407,331,408,330,408,329,408,328,409,328,408,328,409,327,409,327,410,327,411,327,412,326,412,324,412,323,412,322,411,322,410,323,410,323,411,323,410,324,410,324,411,323,411,324,411,324,410,325,410,326,410,326,409,325,409,324,409,323,410,322,410,323,410,322,410,322,411,321,411,320,410,321,410,322,410,321,410,321,409,322,409,321,409,322,409,323,409,324,408,324,409,325,408,323,408,322,408,321,408,321,409,321,408,321,409,320,409,321,409,321,410,320,410,319,410,319,409,320,409,319,409,320,409,320,408,320,409,319,408,320,408,319,408,319,409,318,409,319,408,318,408,319,408,318,408,319,408,319,407,318,407,319,407,320,407,321,407,320,407,321,407,321,406,321,407,322,407,322,408,321,408,322,408,322,407,322,406,321,405,320,405,321,405,321,406,322,406,321,406,320,406,320,405,320,406,321,406,320,406,321,406,320,406,320,407,320,406,319,405,320,407,319,407,319,406,319,407,319,406,318,406,318,405,319,405,318,405,318,404,317,404,317,403,317,404,317,403,318,403,318,402,319,402,319,403,319,402,318,402,319,402,318,402,318,403,317,403,317,402,318,402,317,402,317,401,316,402,316,401,315,401,316,401,317,401,318,401,317,401,318,401,317,401,316,400,317,400,318,401,317,400,318,400,317,400,316,400,317,400,317,399,318,399,318,400,318,399,317,399,317,398,318,399,318,398,317,398,318,398,317,398,318,398,317,398,317,399,316,399,316,398,316,397,317,397,316,397,316,396,317,396,318,396,317,396,318,396,317,396,317,395,316,395,316,394,316,395,317,395,317,394,318,395,319,395,320,395,319,395,319,394,320,395,320,394,319,394,318,394,319,393,318,393,318,394,317,394,316,394,315,394,316,393,316,394,316,393,316,394,317,394,317,393,316,393,317,392,317,393,317,392,318,392,317,392,318,392,317,391,316,391,315,391,314,390,315,390,314,390,313,390,313,391,312,391,313,390,314,390,314,389,314,390,314,389,315,389,315,388,316,388,316,389,316,388,317,388,317,389,317,388,318,389,317,389,316,389,317,389,318,390,318,389,317,389,318,389,318,390,319,389,318,389,319,389,319,388,320,388,320,387,319,387,319,388,319,387,320,387,320,386,320,387,321,387,320,387,320,386,319,386,320,386,319,386,319,385,320,385,321,385,321,384,322,384,321,384,321,383,320,383,320,382,321,382,320,382,321,381,320,381,320,380,321,380,321,379,321,378,322,378,321,378,321,377,322,377,322,378,322,377,322,376,322,377,321,377,321,376,322,376,322,375,323,375,322,375,322,376,321,376,321,375,320,375,320,376,319,376,318,376,319,375,318,375,318,374,318,373,318,372,318,371,319,371,318,370,319,370,320,369,320,368,319,367,319,366,319,365,319,364,318,364,318,363,319,363,318,363,319,362,320,362,320,361,320,360,320,361,321,361,321,360,321,358,322,358,322,357,322,356,323,356,323,355,323,354,324,354,323,353,324,353,324,352,325,351,324,351,324,350,325,350,325,349,325,348,325,347,325,346,325,345,325,344,324,343,324,342,325,341,325,340,326,340,326,339,325,339,326,339,325,338,325,337,326,337,326,336,326,335,326,333,326,334,327,333,327,332,327,331,327,330,328,329,327,329,328,328,327,328,328,327,328,326,328,325,328,324,328,323,328,322,328,321,328,320,329,319,329,318,329,316,329,315,329,314,329,313,329,312,329,311,329,310,329,309,329,307,329,306,328,306</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>905,156,904,156,903,155,904,155,905,156</Points>\n    <Keys>China, CHN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>906,161,906,160,906,161,905,160,906,160,906,161</Points>\n    <Keys>China, CHN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>868,196,867,196,867,195,866,195,866,194,865,194,865,193,866,193,865,193,866,192,867,191,868,191,869,190,869,191,870,191,870,190,871,190,871,191,871,190,872,190,872,191,872,190,872,191,873,192,872,192,871,193,871,194,871,195,871,194,870,195,869,195,869,196,868,196</Points>\n    <Keys>China, CHN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>897,101,897,100,898,99,897,99,898,98,899,97,899,96,900,96,900,95,901,95,902,95,902,94,901,94,902,93,901,93,900,93,900,92,901,91,902,91,904,91,906,90,908,90,909,90,911,90,912,90,913,91,914,91,915,91,916,91,917,92,916,92,917,92,918,92,917,93,918,93,919,93,918,94,919,94,918,94,919,94,919,95,920,96,920,97,921,98,922,99,921,99,922,99,921,100,922,100,922,101,923,101,923,102,924,102,925,102,926,102,927,102,928,102,928,103,929,103,930,104,931,104,932,104,931,105,932,105,932,106,931,106,932,106,932,107,933,107,934,107,934,108,936,107,937,107,938,107,938,106,939,106,940,106,942,105,943,105,943,106,944,106,943,106,943,107,944,107,944,108,943,108,942,108,942,109,942,110,942,111,941,111,941,112,940,113,940,114,939,114,939,115,938,115,936,115,935,115,935,114,935,115,934,115,934,116,933,116,932,116,933,116,933,118,933,120,933,121,933,122,932,122,931,122,931,123,930,122,929,122,929,123,928,123,927,124,926,124,925,124,924,124,924,125,924,126,923,126,922,126,921,126,921,125,920,125,919,126,918,128,917,128,916,128,917,128,916,128,916,129,915,129,914,129,913,130,912,131,911,131,910,131,909,131,908,132,907,132,906,133,905,133,905,134,905,133,905,134,904,133,904,134,905,134,903,134,904,134,903,133,904,133,905,133,904,133,905,133,905,132,904,132,903,132,904,132,904,131,905,131,905,130,906,129,906,128,905,128,904,128,903,128,902,128,903,128,902,129,901,129,901,130,900,130,898,131,897,132,896,133,895,133,894,133,893,133,893,134,892,134,892,135,893,136,894,136,895,136,896,136,897,137,896,138,896,139,898,139,899,139,899,138,900,138,900,137,901,137,902,137,903,137,903,138,904,138,905,138,904,138,905,138,906,138,908,138,907,138,907,139,907,140,907,139,907,140,906,140,906,139,906,140,905,139,905,140,904,140,903,140,903,141,902,141,902,142,901,142,902,142,901,142,900,142,901,142,900,142,900,143,900,142,900,143,899,143,899,144,898,144,898,145,897,145,897,146,898,146,898,147,899,147,900,148,901,149,901,150,902,151,902,152,902,153,903,153,904,153,904,154,905,155,904,155,903,155,902,155,902,154,901,154,900,155,899,154,898,153,899,154,898,154,899,154,899,155,900,155,901,155,901,154,902,155,903,156,904,157,905,157,905,158,904,158,902,159,901,159,901,160,900,160,901,160,902,160,901,160,902,160,903,160,904,160,905,161,906,161,905,161,905,162,904,162,905,162,905,163,905,162,905,163,904,163,905,163,905,164,904,164,903,164,904,164,904,165,904,166,904,165,904,166,903,166,903,165,903,166,902,166,902,167,902,166,901,166,902,167,901,167,902,167,901,168,902,168,901,168,901,169,900,169,901,169,900,169,900,170,900,171,899,171,900,170,899,170,899,171,899,170,898,170,898,171,899,171,898,171,899,172,899,171,899,172,898,172,898,173,897,172,897,173,898,173,898,172,899,173,898,173,898,174,897,174,897,175,897,174,897,175,898,175,897,175,896,175,897,175,896,175,896,176,897,175,896,176,895,176,896,176,895,176,896,176,895,177,895,176,895,177,894,177,893,177,894,177,894,178,894,177,894,178,893,178,893,179,893,178,892,179,891,179,891,180,891,179,891,180,890,180,889,180,889,181,890,181,889,181,889,182,888,182,887,182,886,182,886,183,886,182,885,182,884,182,884,183,884,182,883,182,883,183,882,183,881,183,881,182,880,182,880,181,880,182,880,181,881,181,880,181,880,182,879,182,880,182,880,183,880,184,879,183,880,184,879,184,878,184,879,185,878,185,877,185,876,185,875,185,875,186,874,186,873,186,872,186,871,187,871,186,872,186,871,187,871,186,871,187,870,186,871,187,870,187,870,188,871,188,870,189,871,189,871,190,870,190,869,190,869,189,870,189,869,189,869,188,868,188,869,187,869,186,868,186,869,186,868,186,868,185,868,186,867,186,866,186,866,185,866,186,866,185,865,185,865,186,865,185,864,185,864,186,863,186,863,185,863,186,862,186,861,185,860,184,860,185,860,184,859,184,859,183,860,183,860,182,859,182,858,182,857,182,857,181,856,181,855,180,855,181,854,181,854,182,853,182,852,182,852,183,851,183,850,182,850,183,850,182,849,182,849,183,848,183,848,182,847,182,847,183,846,183,845,183,844,184,845,185,845,186,845,187,844,187,843,187,843,186,843,185,842,185,842,186,841,186,840,186,840,185,839,185,839,184,838,184,837,184,837,183,838,183,837,182,838,182,838,181,837,181,836,181,836,180,836,179,836,178,835,178,834,178,832,179,833,178,832,178,832,177,833,177,832,177,832,176,833,176,833,175,834,175,834,174,835,174,835,173,836,173,835,173,835,172,836,172,835,172,836,171,836,170,836,169,836,168,835,168,835,167,835,168,834,168,834,167,834,166,833,165,832,165,832,166,831,166,831,165,830,166,830,165,829,165,828,165,829,165,829,164,829,163,828,164,828,163,829,163,828,163,828,162,826,163,825,163,824,163,823,163,822,163,822,164,821,164,820,164,819,165,818,166,817,166,818,166,818,167,817,167,816,167,815,167,814,167,815,167,814,167,814,166,813,166,813,167,812,166,811,166,809,166,808,166,808,167,807,167,807,168,806,168,806,169,806,168,806,167,806,166,805,166,804,167,803,167,802,167,801,167,800,167,800,166,799,166,799,167,798,166,798,167,797,167,797,166,797,165,796,166,795,166,795,165,794,165,792,164,792,163,791,163,790,163,790,162,789,162,788,161,787,161,786,160,786,159,784,159,784,160,784,159,784,160,783,160,781,159,780,159,780,158,779,158,778,158,777,157,777,156,776,157,776,156,776,157,776,156,776,155,776,154,775,154,775,153,776,153,777,153,778,153,778,152,778,151,777,151,776,151,776,150,777,150,777,149,776,149,777,148,778,148,778,147,779,147,780,147,780,146,780,145,781,144,780,144,779,144,778,143,776,143,775,143,774,144,773,144,772,144,770,144,769,143,768,143,768,142,767,142,768,142,768,141,767,141,767,140,766,140,765,139,764,140,764,139,763,139,764,139,765,139,765,138,764,138,764,137,764,136,764,135,763,135,763,134,762,135,761,135,761,134,760,133,760,132,761,132,761,131,761,130,762,130,763,130,764,129,764,130,764,129,765,129,766,129,767,129,766,129,767,130,768,129,769,129,769,128,770,128,770,127,771,127,772,128,774,127,775,127,775,126,776,126,777,125,778,125,779,125,779,124,780,124,780,123,780,122,781,122,781,121,782,121,782,120,781,119,781,118,781,117,781,116,780,116,779,116,780,115,782,115,784,115,785,114,785,115,786,115,787,115,787,114,786,114,787,113,787,112,788,111,788,110,789,110,789,109,790,109,792,110,793,110,794,110,795,109,796,109,797,109,797,108,796,108,796,107,797,105,798,105,799,105,800,104,800,103,801,103,802,103,803,103,803,104,804,104,804,105,803,105,805,105,805,106,806,106,807,107,808,106,809,107,810,107,811,107,811,108,811,109,812,110,813,110,813,111,812,112,813,112,812,113,812,114,812,115,813,115,814,115,815,115,816,115,817,115,819,115,820,116,822,116,822,117,823,117,824,117,825,118,826,118,826,119,827,120,827,121,829,122,831,122,835,123,838,123,840,123,840,122,842,122,845,123,846,124,847,124,848,124,850,125,851,125,852,125,853,125,853,126,854,126,855,126,855,125,856,125,858,124,860,124,861,124,861,123,862,123,865,123,866,123,867,123,868,123,869,123,870,123,870,122,871,122,872,121,874,120,875,119,874,118,874,117,874,116,875,115,877,115,877,116,879,116,880,116,881,116,882,116,883,115,883,114,884,114,887,114,888,113,889,112,890,111,891,111,892,111,893,111,894,110,895,110,896,110,897,110,898,111,899,111,899,110,899,109,898,109,897,108,898,108,897,108,896,107,895,107,893,106,893,107,892,107,892,108,891,107,890,107,889,107,888,107,887,107,886,107,886,106,887,106,887,105,888,104,890,101,891,102,893,102,895,101,896,101,897,101</Points>\n    <Keys>China, CHN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>326,215,325,215,324,216,323,217,322,217,322,218,321,219,321,221,320,222,319,223,320,223,321,223,322,225,322,226,322,227,322,228,323,228,323,229,324,230,325,229,326,230,327,229,328,229,329,230,331,232,332,232,333,232,334,232,335,232,336,232,337,232,337,233,337,234,336,234,336,235,336,237,336,238,336,239,337,239,337,240,338,240,337,241,336,242,337,242,337,243,338,243,338,244,338,245,339,245,339,247,338,247,338,246,338,245,337,244,336,245,335,245,335,244,335,245,331,245,330,245,330,247,331,247,332,247,332,248,332,249,331,248,331,249,330,248,330,249,329,249,329,251,330,251,331,252,331,253,331,254,331,255,331,257,330,259,330,261,330,263,329,262,328,262,327,262,329,259,329,258,329,259,329,258,328,258,329,258,328,258,327,257,326,257,326,258,325,258,325,257,325,258,325,257,324,257,324,258,323,258,322,258,321,258,320,258,320,257,320,256,319,256,319,255,318,254,317,254,317,253,316,252,315,252,315,251,314,251,313,251,313,250,312,250,311,249,311,250,311,249,310,249,310,250,309,250,308,249,307,249,307,248,306,248,304,247,303,246,302,246,303,245,304,245,304,244,304,245,303,244,304,243,305,243,306,243,306,242,307,242,306,242,307,242,306,242,306,241,307,241,307,240,308,240,308,239,308,238,307,239,307,238,308,238,307,238,307,237,308,237,308,236,307,236,307,234,308,234,308,233,307,232,307,231,307,230,307,231,307,230,306,230,307,230,306,229,306,228,306,227,307,227,307,228,308,227,307,227,308,227,308,226,307,226,307,225,307,224,308,225,309,226,309,227,309,226,309,225,310,224,311,224,311,223,312,222,313,222,313,221,312,221,313,221,313,220,313,219,314,218,315,217,316,218,317,218,317,217,317,216,318,217,319,217,320,216,322,215,323,215,323,214,324,214,324,213,324,214,324,213,325,213,324,213,325,213,326,214,326,215</Points>\n    <Keys>Colombia, COL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>673,288,673,287,672,287,673,287,673,288</Points>\n    <Keys>Comoros, COM, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>670,286,669,286,669,285,670,285,670,286</Points>\n    <Keys>Comoros, COM, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>595,240,595,241,595,242,595,243,594,243,594,244,594,246,593,248,593,249,593,250,593,251,593,252,592,253,591,254,590,254,589,256,588,257,588,259,588,260,587,262,586,263,585,263,585,264,584,265,583,265,583,264,583,263,581,264,581,265,580,265,579,265,579,264,578,264,577,264,576,265,576,266,575,265,575,264,574,263,573,262,574,261,575,262,575,261,575,260,574,259,574,258,574,257,575,258,575,257,576,258,577,257,577,256,578,256,578,257,579,257,579,258,580,258,581,257,581,258,582,258,582,257,582,256,583,256,583,255,583,254,583,252,582,252,582,251,581,251,581,250,581,249,582,249,583,248,583,247,582,247,582,246,581,246,580,247,579,247,579,246,579,245,579,244,581,244,583,244,584,244,585,245,585,244,585,245,586,245,587,245,588,245,588,246,588,245,588,244,589,242,589,241,589,240,590,240,591,240,592,240,592,239,592,240,593,240,594,240,595,240</Points>\n    <Keys>Congo, COG, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>282,217,283,217,284,217,285,218,285,217,286,218,287,218,288,218,289,218,289,219,290,220,291,221,291,222,292,222,291,222,291,223,291,224,291,225,290,225,291,226,290,225,290,224,289,224,290,225,289,225,288,225,289,224,288,223,287,222,286,222,285,222,286,221,285,221,285,220,284,220,284,221,285,221,284,222,284,221,283,221,282,220,282,219,283,219,283,218,282,218,282,217</Points>\n    <Keys>Costa Rica, CRI, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>583,116,583,115,584,115,584,116,583,116</Points>\n    <Keys>Croatia, HRV, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>583,117,582,116,583,116,582,115,583,115,583,116,583,117</Points>\n    <Keys>Croatia, HRV, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>592,122,593,122,594,122,594,123,595,123,594,123,593,122,592,122,591,121,592,122,593,122,592,122</Points>\n    <Keys>Croatia, HRV, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>589,111,590,112,591,112,591,113,592,113,593,113,594,113,595,113,596,113,596,114,597,114,596,114,597,114,596,114,597,114,597,115,598,115,597,115,597,116,596,116,596,115,595,115,594,115,593,115,592,115,591,115,590,115,589,115,588,115,587,115,587,116,588,117,588,118,589,118,590,119,590,120,591,120,591,121,592,121,593,122,592,122,592,121,591,121,590,120,589,120,588,120,587,120,587,119,586,119,585,118,586,118,585,117,584,117,584,116,584,115,583,115,582,114,582,115,582,116,582,115,582,116,581,116,580,115,580,114,581,114,582,114,583,114,583,113,583,114,584,114,585,114,586,114,585,114,586,114,585,114,586,114,586,113,585,113,586,113,587,113,587,112,586,112,587,112,588,112,588,111,589,111</Points>\n    <Keys>Croatia, HRV, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>291,186,290,186,291,186,290,185,291,185,292,185,292,186,291,186</Points>\n    <Keys>Cuba, CUB, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>285,185,286,184,287,184,286,184,287,183,287,182,288,182,289,182,290,182,290,181,290,182,290,181,291,182,291,181,292,181,293,181,295,181,296,181,297,181,298,181,298,182,299,182,300,182,301,182,301,183,302,183,303,183,303,184,303,183,304,184,305,184,306,185,307,185,307,186,307,185,308,186,307,186,308,186,309,186,309,187,309,186,310,186,310,187,309,187,310,187,311,187,312,187,313,187,312,188,313,188,312,188,313,188,313,189,314,188,315,189,316,189,316,190,317,190,315,190,314,191,314,190,314,191,313,191,312,191,311,191,310,191,309,191,308,191,307,191,306,191,307,190,308,190,308,189,308,188,306,188,305,188,304,187,304,186,303,186,302,186,300,185,299,185,298,184,296,184,295,184,294,184,293,183,294,183,295,183,294,182,292,182,291,182,291,183,290,183,290,184,289,184,288,184,287,184,288,184,288,185,287,185,286,185,285,185</Points>\n    <Keys>Cuba, CUB, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>639,147,638,147,637,146,636,146,636,145,637,145,638,145,638,144,640,145,640,144,642,144,643,144,643,143,643,144,642,144,641,145,642,146,641,146,640,146,639,146,639,147</Points>\n    <Keys>Cyprus, CYP, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>576,100,577,100,577,99,578,99,579,99,580,99,580,98,581,98,582,98,583,98,582,98,583,97,583,98,584,98,585,98,584,97,585,97,585,98,586,98,587,98,588,99,588,98,589,99,588,99,589,100,590,100,591,100,590,99,591,99,592,100,593,100,592,100,593,100,593,101,594,100,594,101,595,101,596,101,596,102,595,102,595,103,594,103,593,103,593,104,592,104,591,104,590,104,590,105,590,104,589,104,588,104,587,104,586,104,585,104,585,103,584,103,584,104,584,105,583,105,582,105,582,104,581,104,580,104,580,103,579,103,578,102,578,103,577,102,577,101,576,100</Points>\n    <Keys>Czech Republic, CZE, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>569,86,568,85,569,85,570,86,569,86</Points>\n    <Keys>Denmark, DNK, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>572,86,571,86,572,86,572,85,572,86</Points>\n    <Keys>Denmark, DNK, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>574,87,573,86,572,86,573,86,574,86,575,86,575,87,574,87</Points>\n    <Keys>Denmark, DNK, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>565,80,566,80,565,80</Points>\n    <Keys>Denmark, DNK, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>571,84,572,84,572,85,571,85,570,85,569,85,569,84,570,84,571,84</Points>\n    <Keys>Denmark, DNK, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>585,85,584,85,585,85</Points>\n    <Keys>Denmark, DNK, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>575,83,574,83,575,83,575,84,575,83,576,83,575,83,576,84,576,83,575,83,576,82,577,82,577,83,577,84,576,84,577,84,577,85,576,85,576,86,575,85,575,86,576,86,575,86,575,87,575,86,575,85,574,85,575,85,573,85,573,84,573,85,573,84,572,84,573,84,572,83,573,83,574,83,573,83,574,83,575,83</Points>\n    <Keys>Denmark, DNK, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>568,86,566,86,565,86,566,85,565,85,566,85,565,84,564,84,564,83,565,83,564,82,564,83,564,82,564,81,564,80,564,81,565,81,566,81,566,80,567,80,567,81,568,81,567,81,567,80,568,79,568,80,568,79,569,79,568,79,567,79,567,80,567,79,566,80,565,80,565,81,564,80,565,79,566,79,567,79,568,79,569,78,571,78,571,77,571,78,571,79,571,80,570,79,569,79,570,80,571,80,570,80,569,81,570,80,571,80,571,81,570,81,571,81,572,81,572,82,571,82,570,82,570,83,569,83,570,83,569,83,568,83,569,84,568,84,569,85,568,85,569,86,568,86</Points>\n    <Keys>Denmark, DNK, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>665,217,665,216,665,215,667,213,668,213,669,213,669,212,670,213,670,214,670,215,669,215,668,215,667,216,668,216,667,216,668,216,669,216,668,217,668,218,668,217,667,217,666,218,665,218,665,217</Points>\n    <Keys>Djibouti, DJI, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>355,205,355,204,356,204,356,205,355,205</Points>\n    <Keys>Dominica, DMA, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>324,193,325,193,324,193,324,192,324,191,325,191,326,191,327,191,328,191,329,192,330,191,330,192,330,193,332,192,332,193,331,193,332,193,333,193,334,194,334,195,335,195,334,195,334,196,333,196,333,195,332,195,331,195,330,195,329,195,329,196,328,196,328,195,327,195,327,196,326,196,326,197,325,198,325,197,324,197,325,197,324,196,324,195,324,194,324,193</Points>\n    <Keys>Dominican Republic, DOM, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>266,254,265,254,265,253,266,253,266,252,265,251,265,250,266,250,266,251,267,252,267,253,266,254</Points>\n    <Keys>Ecuador, ECU, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>265,252,265,251,265,252</Points>\n    <Keys>Ecuador, ECU, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>268,252,267,252,267,251,268,251,268,252</Points>\n    <Keys>Ecuador, ECU, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>268,253,268,252,269,252,268,253</Points>\n    <Keys>Ecuador, ECU, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>271,253,272,253,271,253</Points>\n    <Keys>Ecuador, ECU, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>299,260,299,259,299,258,300,259,299,259,299,260</Points>\n    <Keys>Ecuador, ECU, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>304,247,306,248,307,248,307,249,308,249,309,250,310,250,310,249,311,249,311,250,311,249,312,250,313,250,313,251,314,251,313,251,313,252,314,252,314,253,313,253,313,255,311,257,310,258,307,259,306,260,305,261,304,261,304,262,304,263,303,264,304,264,303,264,303,265,302,266,301,265,301,264,300,264,299,263,298,264,298,263,298,262,299,263,299,262,299,261,298,261,299,260,300,260,300,259,300,258,300,257,300,258,299,258,300,258,299,258,300,257,299,258,299,259,297,258,297,257,296,257,297,257,297,256,297,255,297,254,297,253,298,253,298,252,299,252,298,252,298,251,299,251,299,250,299,249,299,248,300,248,301,248,302,247,303,247,303,246,304,247</Points>\n    <Keys>Ecuador, ECU, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>642,157,643,158,643,159,644,160,644,161,644,162,644,163,644,164,643,164,643,165,643,166,643,167,642,167,641,167,641,166,640,166,640,165,639,165,639,164,639,163,638,163,638,162,638,161,637,161,637,162,637,163,637,164,638,164,638,165,639,165,639,166,640,166,640,167,640,168,641,168,641,169,641,170,642,170,641,170,641,171,642,171,643,173,643,174,644,175,644,176,645,176,645,177,646,178,647,178,647,179,646,179,646,181,645,182,644,182,644,184,642,184,642,185,641,185,639,184,638,184,636,184,634,185,634,184,633,185,631,184,629,185,627,184,626,185,624,184,622,185,620,185,618,185,616,185,615,184,615,183,614,179,614,175,614,171,615,167,614,163,614,162,614,161,614,160,614,159,615,158,614,157,614,156,615,156,617,156,619,156,620,156,621,156,622,156,622,157,623,157,624,157,625,157,626,158,627,158,628,158,629,157,630,157,630,156,631,156,632,156,631,156,632,156,633,156,632,156,633,156,634,156,635,156,636,156,636,157,636,156,635,156,635,157,636,157,637,157,638,157,639,157,638,157,639,157,640,157,641,157,642,157</Points>\n    <Keys>Egypt, EGY, NorthAfrica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>271,207,272,208,272,207,273,208,274,208,274,209,275,209,276,209,276,210,276,211,275,211,274,211,273,211,274,211,273,211,272,210,271,210,270,210,269,209,270,208,271,208,271,207</Points>\n    <Keys>El Salvador, SLV, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>570,244,572,244,574,244,574,246,574,247,572,247,570,247,569,247,568,247,568,246,569,246,568,246,569,245,569,244,569,243,569,244,570,244</Points>\n    <Keys>Equatorial Guinea, GNQ, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>661,204,659,204,659,203,660,204,660,203,659,203,660,203,660,204,660,203,661,204</Points>\n    <Keys>Eritrea, ERI, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>665,209,666,209,666,210,667,210,667,211,668,211,668,212,669,212,669,213,668,213,667,213,666,213,666,212,665,212,665,211,664,211,664,210,663,210,663,209,662,209,662,208,661,208,661,207,660,207,659,207,658,207,657,207,656,207,655,207,654,207,654,206,653,206,653,207,652,208,652,207,651,207,651,208,650,208,649,208,649,207,649,206,649,205,649,204,650,204,650,203,650,202,650,201,651,200,650,200,651,199,650,199,651,199,652,199,652,198,653,198,654,198,655,198,655,197,655,196,655,197,656,198,656,199,657,200,657,201,657,202,657,203,658,203,658,204,659,205,659,204,660,205,660,206,661,206,661,205,661,206,662,206,663,207,664,207,664,208,664,209,665,209</Points>\n    <Keys>Eritrea, ERI, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>606,77,605,77,606,76,605,76,605,75,605,76,605,75,606,75,605,75,606,75,607,75,608,75,609,75,608,75,608,76,607,76,606,76,606,77</Points>\n    <Keys>Estonia, EST, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>607,74,606,74,607,73,608,73,608,74,609,74,608,74,607,74</Points>\n    <Keys>Estonia, EST, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>624,72,624,73,623,73,623,74,622,74,622,75,622,76,623,76,622,76,623,76,623,77,622,77,622,78,621,78,620,78,619,78,618,78,618,77,617,77,616,77,616,76,615,76,615,77,615,76,614,76,614,77,614,76,614,77,613,77,612,77,613,76,613,75,612,75,612,76,611,76,611,75,610,75,610,74,611,74,610,74,610,73,610,74,610,73,611,73,612,73,612,72,613,72,614,72,616,72,617,72,617,71,617,72,618,72,619,72,620,72,623,72,624,72</Points>\n    <Keys>Estonia, EST, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>667,213,665,215,665,216,665,217,665,218,666,218,667,217,668,217,668,218,668,217,667,219,668,219,668,220,669,221,669,222,670,222,672,223,676,225,681,226,683,226,679,231,674,236,671,236,670,236,669,236,668,237,668,238,667,238,666,238,665,238,665,239,663,239,662,238,661,238,659,239,658,240,657,240,656,240,655,240,654,240,653,239,650,237,649,237,648,237,647,237,647,236,647,235,647,234,646,234,645,234,645,233,644,233,644,232,644,231,644,230,643,230,642,229,642,228,640,227,639,227,638,227,639,226,639,225,640,225,641,225,642,225,642,224,642,222,642,220,643,220,642,219,643,218,644,218,645,217,644,217,645,216,645,215,646,214,647,213,648,212,648,211,648,210,649,210,649,209,649,208,650,208,651,208,651,207,652,207,652,208,653,207,653,206,654,206,654,207,655,207,656,207,657,207,658,207,659,207,660,207,661,207,661,208,662,208,662,209,663,209,663,210,664,210,664,211,665,211,665,212,666,212,666,213,667,213</Points>\n    <Keys>Ethiopia, ETH, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>361,408,360,407,361,407,361,406,362,406,363,406,363,405,362,405,363,405,362,405,363,405,363,404,364,405,364,404,364,405,365,405,364,405,365,405,364,405,365,405,366,405,365,405,366,405,366,406,365,406,364,406,363,406,364,406,364,407,363,407,364,407,363,407,362,406,362,407,361,407,362,408,361,408</Points>\n    <Keys>Falkland Islands (Islas Malvinas), FLK, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>431,415,430,414,429,414,428,414,428,413,427,413,428,413,427,413,428,413,427,413,426,413,427,413,426,413,427,413,426,413,425,413,427,413,428,413,429,413,428,413,429,413,430,413,429,413,430,413,429,413,430,413,430,414,430,413,430,414,430,413,431,413,431,414,432,414,432,415,431,415,432,415,431,415</Points>\n    <Keys>Falkland Islands (Islas Malvinas), FLK, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>358,407,357,407,356,407,357,407,357,406,358,406,359,406,358,406,359,405,359,406,359,405,358,405,359,405,360,405,359,405,360,405,361,405,362,405,361,405,360,406,359,406,359,407,358,407</Points>\n    <Keys>Falkland Islands (Islas Malvinas), FLK, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>519,65,519,64,518,64,519,64,519,65</Points>\n    <Keys>Faroe Islands, FRO, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>520,64,519,64,518,64,519,64,520,64,519,64,520,64</Points>\n    <Keys>Faroe Islands, FRO, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1074,308,1073,308,1074,308,1075,307,1075,308,1074,307,1074,308</Points>\n    <Keys>Fiji, FJI, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1074,305,1073,305,1071,305,1071,304,1072,304,1072,303,1073,303,1074,302,1074,303,1075,303,1075,304,1076,305,1075,305,1074,305</Points>\n    <Keys>Fiji, FJI, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1076,302,1075,301,1075,300,1075,301,1075,300,1076,301,1076,300,1078,300,1078,299,1079,299,1079,300,1078,300,1078,301,1079,300,1079,301,1078,301,1077,301,1078,301,1077,301,1076,301,1076,302</Points>\n    <Keys>Fiji, FJI, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>599,70,598,70,599,70,599,69,599,70,599,69,600,70,599,70,600,70,599,70,600,70,599,70</Points>\n    <Keys>Finland, FIN, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>607,71,607,70,608,70,607,70,607,71</Points>\n    <Keys>Finland, FIN, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>624,40,624,41,625,41,627,41,627,42,626,43,625,44,626,44,625,45,626,46,628,46,629,47,630,47,629,48,628,49,627,49,627,50,628,50,628,51,629,52,630,53,630,54,630,53,629,54,628,55,629,55,628,55,628,56,629,56,630,56,630,57,629,57,630,57,631,58,630,59,631,60,632,60,632,61,633,61,634,62,633,63,631,64,630,65,629,66,627,67,626,67,625,68,623,69,622,69,623,69,622,69,621,69,620,69,619,69,620,69,619,69,618,69,617,69,618,69,618,70,617,69,617,70,616,70,617,69,616,70,615,70,614,70,613,70,613,71,613,70,612,71,613,70,612,70,611,71,610,71,610,70,610,71,609,71,608,71,609,71,610,70,609,70,609,71,609,70,608,70,609,70,609,69,607,70,607,69,606,69,605,69,604,69,604,68,603,68,604,68,603,67,604,67,604,66,605,66,604,66,604,65,603,65,604,64,603,63,603,64,603,63,603,62,604,62,604,61,605,61,604,61,605,61,606,61,607,61,607,60,606,60,607,60,606,60,607,60,607,59,608,59,608,60,608,59,609,59,608,59,609,59,610,59,610,58,611,58,611,57,612,57,613,56,614,56,615,56,616,56,615,56,616,56,616,55,615,55,615,54,616,54,615,54,614,54,613,53,612,53,612,52,611,52,610,51,611,51,611,50,612,50,611,50,611,49,610,49,611,49,611,48,610,48,610,47,609,46,608,45,606,45,605,45,603,44,602,44,602,43,601,43,602,43,603,43,605,43,607,44,609,44,609,45,611,44,612,44,614,44,614,45,615,45,615,44,616,44,617,43,617,42,617,41,619,41,620,41,621,41,622,40,623,40,624,40</Points>\n    <Keys>Finland, FIN, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>567,126,566,126,566,125,565,125,566,124,565,124,566,124,565,123,566,123,565,123,566,123,567,123,567,122,568,122,567,122,568,122,568,121,568,122,568,123,568,124,568,125,568,126,567,126,568,126,567,126</Points>\n    <Keys>France, FRA, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>548,98,549,98,549,99,550,99,551,99,551,100,551,99,552,100,552,101,553,101,554,101,554,100,554,101,555,101,555,102,556,102,557,102,558,102,559,102,559,103,560,103,561,103,562,103,563,103,564,104,563,104,563,105,562,106,562,107,562,108,561,108,560,108,561,108,560,108,561,108,561,109,560,109,559,110,558,110,558,111,558,112,557,112,558,112,557,112,558,112,558,111,559,111,560,111,560,112,561,113,560,113,560,114,561,114,561,115,560,115,559,115,560,115,560,116,561,116,560,117,560,118,561,118,563,118,562,119,561,120,560,120,560,121,559,121,560,121,559,121,558,121,557,121,556,121,556,120,555,120,554,120,553,120,552,120,551,120,550,121,549,121,549,122,548,122,549,122,549,123,548,123,547,123,546,123,545,123,544,123,544,122,542,122,541,122,540,122,539,122,538,122,537,122,536,121,535,121,534,120,535,120,535,119,536,118,536,117,536,116,536,117,536,116,536,115,536,114,537,114,537,115,538,115,538,116,538,115,538,116,538,115,537,115,537,114,536,113,537,113,536,113,536,112,535,111,534,111,534,110,533,110,533,109,534,109,533,109,534,109,533,109,532,109,532,108,531,108,530,108,530,107,530,108,529,107,530,107,529,107,528,107,527,107,526,107,526,106,525,106,526,106,527,106,526,106,527,106,527,105,526,106,526,105,527,105,525,105,526,105,527,104,527,105,527,104,528,104,528,105,528,104,528,105,528,104,529,104,530,104,531,104,531,105,532,105,533,104,533,105,534,105,533,105,534,104,534,105,535,105,535,104,535,103,534,102,534,101,535,101,536,101,536,102,538,102,539,103,540,102,541,102,540,102,540,101,541,101,543,101,544,100,544,99,544,98,545,98,547,97,547,98,548,98</Points>\n    <Keys>France, FRA, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>377,241,377,240,378,240,377,240,377,239,376,238,377,238,376,238,376,236,376,235,377,235,377,234,378,233,379,234,381,234,382,235,382,236,383,236,382,236,383,236,384,237,383,238,384,237,384,238,385,238,384,238,384,239,383,240,382,241,382,242,382,243,381,244,380,244,379,243,379,244,378,243,378,244,377,244,376,244,376,243,377,242,377,241</Points>\n    <Keys>French Guiana, GUF, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>92,304,91,304,91,303,92,304</Points>\n    <Keys>French Polynesia, PYF, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>574,244,576,244,577,244,578,244,579,244,579,245,579,246,579,247,580,247,581,246,582,246,582,247,583,247,583,248,582,249,581,249,581,250,581,251,582,251,582,252,583,252,583,254,583,255,583,256,582,256,582,257,582,258,581,258,581,257,580,258,579,258,579,257,578,257,578,256,577,256,577,257,576,258,575,257,575,258,574,257,574,258,574,259,575,260,575,261,575,262,574,261,573,262,572,261,571,261,571,260,570,259,569,258,570,258,569,258,568,257,567,256,568,256,568,257,568,256,567,256,567,255,566,254,567,255,567,256,568,255,568,256,568,255,567,255,568,255,567,255,567,254,566,254,566,253,566,252,566,253,567,253,567,252,568,251,567,250,568,249,568,250,569,250,570,250,569,250,568,250,568,249,567,249,568,248,568,249,568,248,569,247,570,247,572,247,574,247,574,246,574,244</Points>\n    <Keys>Gabon, GAB, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>490,210,493,210,493,209,494,209,495,209,495,210,496,210,496,209,496,210,498,210,497,211,496,211,496,210,495,210,494,210,493,210,492,210,492,211,489,211,489,210,490,210,490,211,491,211,491,210,493,210,492,210,491,210,490,210</Points>\n    <Keys>Gambia, The, GMB, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>643,156,643,157,642,157,642,156,643,156</Points>\n    <Keys>Gaza Strip, ISR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>660,120,661,120,662,120,663,120,664,120,664,121,665,121,666,121,667,121,668,121,669,121,669,122,670,122,671,122,671,123,672,123,672,122,673,122,674,122,674,123,674,122,675,122,675,123,676,123,677,123,676,124,677,124,678,124,678,125,678,124,678,125,679,125,678,125,678,126,679,126,678,126,679,126,678,126,679,126,680,127,679,127,678,127,677,127,677,126,676,126,675,126,675,127,674,127,673,127,672,127,671,127,670,127,669,127,668,126,667,126,665,126,664,126,665,125,664,124,664,123,664,122,663,122,662,121,661,121,660,121,660,120</Points>\n    <Keys>Georgia, GEO, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>582,89,581,89,582,89,581,88,582,89</Points>\n    <Keys>Germany, DEU, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>580,88,579,88,579,87,580,87,579,87,580,86,580,87,581,87,580,87,581,87,581,88,581,87,580,88</Points>\n    <Keys>Germany, DEU, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>568,86,569,86,570,86,569,86,570,86,570,87,569,87,570,87,571,87,571,88,572,88,572,87,573,87,573,88,572,88,572,89,573,88,573,89,574,89,574,88,576,88,577,88,577,87,578,87,577,87,577,88,578,87,579,87,579,88,580,88,581,88,581,89,582,89,583,90,583,91,582,92,583,93,583,94,584,94,584,95,583,95,584,96,585,97,584,97,584,98,583,98,583,97,582,98,583,98,582,98,581,98,580,98,580,99,579,99,578,99,577,99,577,100,576,100,577,101,577,102,578,103,578,102,579,103,580,103,580,104,581,104,581,105,580,105,578,106,579,107,578,107,579,107,579,108,578,108,578,107,577,108,577,107,576,107,576,108,575,108,574,108,573,108,572,108,571,108,570,109,570,108,569,108,568,108,567,108,566,108,566,107,565,107,565,108,564,108,563,108,562,108,563,108,562,108,562,107,562,106,563,105,563,104,564,104,563,103,562,103,561,103,560,103,559,103,559,102,559,101,558,101,558,100,559,100,559,99,558,99,558,98,557,98,558,98,557,98,557,97,558,97,558,96,558,95,557,95,558,95,559,95,560,95,560,94,561,94,561,93,560,93,561,93,561,92,561,91,561,90,561,89,562,89,563,89,564,89,564,90,565,90,565,89,566,89,567,89,568,89,568,90,569,90,568,90,568,89,566,89,566,88,567,88,566,88,565,88,565,87,566,87,565,87,566,87,567,87,566,87,566,86,565,86,566,86,568,86</Points>\n    <Keys>Germany, DEU, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>531,217,533,217,537,218,538,218,538,217,539,217,540,217,540,218,539,218,539,219,540,219,540,220,541,220,540,221,541,221,541,222,540,221,540,222,541,222,540,222,541,222,541,223,541,224,541,225,542,225,542,226,541,226,541,227,541,228,541,229,541,230,542,231,542,232,543,232,542,233,541,233,541,232,540,232,541,232,541,233,540,233,540,234,538,234,537,235,536,235,535,235,535,236,534,236,533,236,532,236,530,235,531,235,531,234,531,233,530,233,530,232,530,231,530,230,530,229,531,227,531,226,532,226,532,224,532,223,531,223,532,223,531,223,531,222,531,221,531,220,531,219,531,218,531,217</Points>\n    <Keys>Ghana, GHA, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>602,136,601,136,601,135,601,136,601,135,601,136,602,136</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>614,146,614,145,613,145,612,145,611,145,610,145,610,144,611,144,611,143,611,144,612,144,613,144,614,144,615,144,616,145,617,144,617,145,618,145,617,145,616,146,615,146,614,146</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>614,137,614,137</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>602,138,601,137,602,137,602,138</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>618,136,617,136,617,135,618,135,618,136</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>620,138,620,137,619,137,620,137,621,137,620,138</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>600,132,599,132,598,131,599,131,599,132,600,132</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>616,140,616,139,616,140</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>619,134,618,133,617,133,618,133,618,132,619,132,619,133,619,134</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>623,143,623,142,624,141,624,142,623,142,623,143</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>613,137,613,136,613,137,612,136,612,135,611,135,610,135,609,134,608,134,609,134,609,133,610,134,611,134,612,135,612,136,613,136,613,137</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>616,131,615,131,615,130,616,131,616,130,616,131</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>613,129,613,128,614,128,614,129,613,129</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>618,125,619,125,619,126,619,127,618,127,618,128,616,128,615,128,615,127,614,128,613,128,612,128,611,128,611,129,612,129,611,129,612,130,613,130,612,130,611,129,611,130,612,130,611,131,611,130,610,130,609,130,610,130,611,131,610,131,609,130,608,129,607,129,607,130,608,131,608,132,609,132,610,133,609,133,608,132,608,133,609,133,608,134,607,134,608,134,609,134,609,135,610,135,609,135,610,135,611,135,611,136,612,136,611,136,612,137,612,138,611,137,610,137,610,136,609,137,608,137,609,137,609,138,610,138,609,138,610,138,609,138,609,139,609,138,608,138,608,139,609,139,609,140,609,141,608,141,608,140,607,140,607,141,606,140,606,139,605,140,604,139,605,139,604,138,603,138,603,137,603,136,604,136,605,136,605,135,606,136,608,136,608,137,608,136,609,136,608,136,608,135,607,135,607,136,607,135,606,135,605,135,605,136,604,135,604,136,604,135,603,135,603,136,603,135,602,134,603,134,603,133,602,133,602,134,602,133,601,133,600,132,600,131,601,131,600,131,601,131,601,130,602,129,603,129,603,128,602,128,603,128,604,128,605,128,605,127,606,127,607,127,608,127,608,126,609,127,609,126,611,126,612,126,613,126,614,126,615,127,616,127,617,126,618,126,618,125</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>480,10,479,10,480,10,481,10,482,10,480,10</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>476,28,475,28,474,28,474,27,475,27,477,27,478,27,478,28,479,28,476,28</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>484,23,483,22,482,21,483,21,482,21,483,21,482,20,483,20,483,21,484,21,483,21,483,22,484,22,484,23</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>487,26,486,25,483,26,483,25,484,24,484,25,485,25,485,24,486,24,486,25,485,25,486,25,487,25,488,25,487,25,487,26</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>479,26,478,26,477,26,478,26,478,25,479,25,480,25,480,26,479,26,480,26,479,26</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>485,14,485,13,486,13,487,13,486,13,486,14,485,14</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>395,68,396,68,397,68,396,68,395,68</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>399,68,400,68,401,68,399,68</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>403,70,403,69,404,69,404,70,403,70</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>409,71,408,71,408,70,407,70,410,70,410,71,409,70,409,71</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>408,71,407,71,408,71,409,71,408,71</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>419,57,418,57,418,56,417,56,418,56,418,57,419,57</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>426,54,426,53,427,53,428,53,427,53,428,53,427,54,426,54,427,54,426,54</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>413,62,412,62,414,62,413,62</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>324,19,323,19,323,18,322,18,323,18,325,18,324,19</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>481,17,479,17,478,17,479,17,480,17,482,17,481,17</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>485,18,485,17,486,17,487,17,486,17,485,18</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>481,14,480,14,481,14,482,14,481,14,482,14,481,14,482,14,481,14</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>381,37,380,37,380,36,381,36,382,36,383,37,382,37,381,37</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>404,4,403,4,399,3,398,3,396,3,397,3,399,2,401,3,405,3,406,3,406,4,405,4,404,4,405,4,404,4</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>379,37,378,37,379,37</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>326,18,327,18,329,18,326,18</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>416,61,415,61,414,60,415,60,416,61</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>384,5,380,4,379,4,380,4,382,4,385,4,386,5,384,5</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>466,31,463,31,462,31,464,31,464,30,466,30,469,31,470,31,468,31,465,31,469,31,470,31,471,31,470,31,466,31</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>455,39,456,39,455,39,456,39,457,38,458,38,461,38,462,37,462,38,463,38,464,38,464,39,461,39,458,39,455,39</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>378,43,377,42,378,42,379,42,378,42,376,42,375,42,375,41,376,41,375,41,377,41,375,40,377,40,380,40,381,41,382,41,383,41,384,41,383,41,384,42,383,42,381,42,378,43</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>474,32,473,32,472,32,471,32,469,32,466,32,470,31,473,32,474,32,473,32,474,32</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>380,36,379,36,381,36,380,36</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>386,42,385,41,386,41,385,41,386,41,387,41,387,42,386,42</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>473,34,472,34,471,34,470,34,468,33,467,33,466,33,466,32,467,32,468,32,469,32,470,32,471,32,473,33,474,33,473,33,472,33,471,33,472,33,473,34</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>441,1,439,1,441,1,442,1,441,1,434,2,433,2,434,2,435,2,438,2,439,2,440,2,441,2,444,2,445,2,445,1,449,1,451,1,454,1,460,1,464,1,465,1,465,2,464,2,463,2,468,2,467,2,468,2,467,2,468,2,470,2,472,2,473,2,476,3,475,3,473,3,472,4,470,4,468,4,466,4,464,4,455,4,452,4,448,4,447,4,448,4,449,4,450,4,443,5,441,5,440,5,441,5,440,5,440,6,441,6,442,5,445,5,450,5,451,5,454,4,464,5,463,5,462,5,458,6,457,6,458,6,461,6,465,5,467,5,467,4,469,4,472,4,473,4,473,5,474,5,473,6,472,7,471,7,470,7,471,7,468,8,466,8,467,8,466,9,468,8,469,8,470,8,471,8,471,7,475,6,477,6,480,5,479,6,481,6,483,6,484,6,486,6,485,6,486,6,487,6,486,6,486,5,488,5,487,5,489,5,495,5,501,5,503,6,502,6,500,6,500,7,499,7,498,7,499,7,497,7,496,7,494,7,495,7,496,8,495,8,492,8,491,8,486,8,485,8,484,9,483,9,481,8,479,8,478,9,476,9,477,9,479,9,480,9,483,9,485,9,487,9,491,9,490,9,489,9,490,9,489,9,490,9,490,10,489,10,488,10,484,10,481,10,480,10,479,10,478,10,478,11,477,11,478,11,479,11,478,11,479,11,480,11,479,11,482,10,483,10,485,10,486,10,487,10,486,11,485,11,484,11,482,11,481,11,481,12,480,12,481,12,480,13,481,13,482,13,481,13,480,13,479,13,480,14,479,14,477,14,476,14,477,14,475,15,477,15,476,15,475,16,476,16,475,16,474,16,475,16,474,17,475,17,474,17,473,17,475,17,474,18,475,18,476,18,475,17,476,17,477,16,478,17,479,17,481,17,482,17,483,18,482,18,481,18,480,17,479,17,478,17,477,18,478,18,479,18,478,18,476,18,479,18,477,18,480,18,481,18,481,19,482,19,483,18,484,18,484,19,485,19,485,20,484,20,483,20,482,20,480,20,477,20,476,20,477,20,478,20,477,20,476,20,474,20,476,20,477,20,476,20,475,21,474,21,474,20,473,20,472,20,473,20,472,20,471,20,472,21,473,21,472,21,473,21,474,21,473,21,474,21,473,21,474,21,473,21,472,21,475,21,474,22,475,22,476,22,477,22,478,22,476,22,477,22,478,22,480,22,481,22,480,22,478,23,474,23,474,22,474,23,480,23,481,23,481,24,481,25,480,25,479,25,480,25,479,24,478,25,477,25,476,24,474,24,473,24,474,24,475,24,473,24,472,24,475,24,478,25,477,25,476,25,474,26,474,25,472,25,473,25,474,25,473,25,474,26,476,25,478,25,477,26,478,26,477,27,476,27,479,26,479,27,480,27,481,26,482,27,481,27,483,27,481,28,479,28,478,27,475,27,474,27,473,27,474,27,473,28,472,28,473,28,472,28,473,28,472,28,474,29,473,29,474,29,474,30,474,29,474,28,475,28,476,29,479,29,478,29,478,30,477,30,475,30,473,31,472,31,469,30,468,30,467,30,468,29,469,29,470,30,471,30,473,30,471,30,470,30,468,29,467,29,466,29,466,30,465,30,465,29,464,29,463,29,462,29,463,29,464,29,464,30,465,30,464,30,463,30,462,31,461,31,460,30,460,31,459,30,458,30,457,30,458,30,460,31,459,31,458,31,456,31,457,31,457,32,458,32,458,31,459,31,460,31,462,31,464,31,465,31,464,32,462,32,461,32,459,32,457,32,459,32,460,32,459,32,461,32,460,33,461,32,463,32,464,32,465,32,465,33,466,33,465,33,462,33,464,33,463,34,465,33,466,33,468,34,469,34,470,34,470,35,470,34,472,35,471,35,470,36,471,36,472,35,472,36,473,35,474,35,473,36,472,36,472,37,473,37,472,36,473,36,474,36,474,37,475,37,474,37,473,37,474,37,474,38,475,38,474,38,475,38,474,38,475,38,474,38,475,38,474,39,475,39,474,39,473,39,474,39,473,39,472,39,472,38,472,39,471,39,469,39,467,39,467,38,467,37,465,37,466,36,465,37,464,37,463,36,461,36,460,36,459,36,458,35,456,34,455,35,454,34,453,34,454,34,454,35,456,35,455,35,458,35,457,36,455,36,456,36,455,36,454,36,457,36,458,36,459,36,460,36,462,36,463,36,463,37,462,37,463,37,460,38,457,38,456,37,457,38,456,38,455,38,454,38,455,38,456,38,455,39,452,39,453,39,455,39,454,39,455,39,459,39,460,39,459,40,458,40,457,40,456,40,455,40,454,40,455,40,456,40,457,40,457,41,458,41,458,40,459,40,461,40,462,40,464,39,463,39,464,39,463,40,464,40,464,39,467,40,470,40,473,40,472,41,471,41,470,41,471,41,470,41,469,41,470,41,469,41,468,41,469,42,468,42,469,42,468,42,467,42,466,42,465,42,466,42,466,43,465,43,466,43,465,43,464,43,465,43,464,43,463,43,463,44,462,44,463,44,462,44,461,44,460,45,459,45,459,44,458,45,457,45,458,45,457,45,456,45,457,45,456,45,455,45,454,45,455,45,454,45,453,45,453,46,453,45,452,45,452,46,451,46,450,46,450,45,449,46,448,46,447,46,448,46,447,46,445,46,444,46,443,46,443,45,442,45,443,45,443,46,442,46,443,46,444,46,443,46,443,47,442,47,441,47,440,47,440,48,439,48,440,48,439,48,440,48,439,48,439,49,438,49,439,49,438,49,438,50,437,50,438,50,437,50,438,50,437,50,437,51,437,50,437,51,436,51,436,50,436,51,435,51,436,51,435,51,435,52,435,51,435,52,434,51,434,52,433,52,432,51,432,52,433,52,432,52,433,52,432,52,431,53,431,52,431,53,430,53,430,52,430,53,429,53,428,53,428,52,428,53,428,52,428,53,426,53,426,52,427,52,428,52,428,51,427,52,426,51,425,51,426,52,425,52,426,52,425,52,426,53,425,53,424,52,424,53,425,53,425,54,424,54,424,53,424,54,424,53,423,54,423,53,423,54,424,54,422,54,422,53,421,53,422,54,421,54,420,53,420,54,421,54,420,54,419,54,420,54,420,55,419,55,420,55,419,55,420,55,419,55,419,56,418,55,417,55,416,55,417,56,416,56,417,56,418,56,418,57,418,58,418,57,417,57,416,58,415,58,416,58,417,58,418,58,418,59,417,59,418,59,417,59,415,59,416,59,417,60,416,60,417,60,416,60,415,60,414,60,414,61,414,60,414,61,415,61,414,61,415,61,414,61,413,61,414,61,415,62,414,62,413,62,412,62,413,62,412,62,411,62,410,62,411,63,412,63,413,63,412,63,413,63,411,63,412,63,413,64,412,64,413,64,412,64,412,65,412,64,413,64,413,65,412,65,413,65,412,65,411,65,412,65,413,65,412,65,412,66,413,66,412,66,411,66,410,66,411,66,412,66,412,67,411,67,412,67,410,66,410,67,411,67,412,67,411,67,410,67,411,67,412,67,409,67,410,67,411,67,412,68,411,68,411,67,411,68,410,68,409,68,410,68,411,68,410,68,411,68,411,69,410,68,410,69,411,69,411,68,411,69,410,69,411,69,410,69,409,69,408,68,409,69,407,69,408,69,409,69,410,69,409,70,409,69,409,70,409,69,410,69,410,70,409,70,407,70,407,69,407,70,406,70,406,71,406,70,405,70,405,71,405,70,404,70,405,70,406,69,405,70,404,70,405,70,405,69,406,68,405,68,405,69,404,69,403,69,404,68,404,69,404,68,403,68,403,69,402,69,403,69,402,69,403,68,402,69,402,68,403,68,404,68,403,67,403,68,402,68,401,68,402,68,401,68,404,67,403,67,401,68,402,67,403,67,402,67,402,66,402,67,401,67,402,67,401,67,401,68,401,67,400,67,400,68,399,68,398,68,399,68,398,68,396,68,397,68,398,68,397,68,396,68,395,68,396,68,396,67,394,68,395,67,396,67,395,67,396,67,395,67,394,67,395,67,394,67,394,66,393,66,394,66,393,66,392,66,393,66,394,66,395,66,394,66,393,66,392,66,393,66,394,66,393,66,392,66,392,65,393,65,392,65,393,65,392,65,391,65,392,65,391,65,392,65,391,65,393,64,392,64,393,64,392,64,391,65,391,64,391,65,390,65,390,64,391,64,390,64,391,64,392,64,391,64,390,64,391,64,392,64,391,64,390,64,390,63,390,64,389,64,389,63,389,62,390,62,389,62,390,61,389,62,388,62,389,62,389,61,389,62,388,62,388,61,389,61,388,61,387,61,386,61,387,61,386,61,386,60,387,60,386,60,387,60,388,60,388,59,386,60,385,60,386,60,385,59,385,58,386,58,385,58,387,58,388,58,389,58,388,58,388,57,388,58,385,58,384,58,385,58,386,58,387,58,386,58,387,58,387,57,388,57,387,57,388,57,389,57,388,57,387,57,388,57,388,56,388,57,388,56,389,57,391,58,391,57,390,57,389,57,390,56,389,56,390,56,389,56,388,56,387,56,387,55,387,56,387,55,387,56,388,56,387,56,388,56,387,56,386,57,386,56,385,57,384,57,385,58,384,58,383,58,383,57,383,56,384,56,385,56,386,55,385,56,384,56,385,56,384,55,384,56,383,56,384,56,383,56,383,55,383,54,382,55,382,54,384,54,385,53,387,53,388,53,387,53,386,53,384,53,384,54,383,54,382,54,381,54,382,54,381,54,381,53,380,53,381,53,380,53,382,53,383,53,384,52,383,53,382,53,382,52,381,53,380,53,379,53,380,52,379,52,380,52,381,52,382,51,384,51,383,51,384,51,385,50,386,50,387,50,386,50,387,50,386,50,384,50,384,51,383,51,381,51,381,52,380,52,379,52,378,52,378,51,379,51,380,51,381,51,382,51,381,51,380,51,379,51,380,51,379,51,380,50,381,50,382,50,381,50,382,50,381,50,380,50,382,50,383,50,382,50,381,50,378,50,379,50,378,49,379,49,378,49,379,49,381,49,382,49,385,49,386,49,388,49,386,49,385,48,386,48,384,48,383,48,380,49,378,49,378,48,380,48,381,47,380,48,380,47,381,47,383,47,384,47,384,48,386,48,388,48,389,48,387,48,389,47,390,47,389,47,387,48,386,48,387,48,386,47,388,47,387,47,388,47,386,47,385,47,386,47,387,47,386,47,385,47,386,47,385,47,384,47,383,47,382,47,383,47,384,47,385,47,381,47,379,48,378,48,379,48,379,47,378,47,379,47,380,47,379,47,380,47,381,47,380,47,380,46,382,47,383,47,381,47,380,46,379,46,380,46,381,46,382,46,384,46,386,46,388,47,389,47,388,47,386,46,385,46,386,46,386,45,385,45,386,46,383,46,382,46,381,46,382,46,381,46,380,46,379,46,380,45,380,46,381,45,382,45,384,45,385,45,386,45,386,44,387,45,387,44,386,44,387,44,386,44,386,43,387,43,388,43,388,44,389,44,388,44,388,43,388,44,388,43,389,43,389,44,389,43,388,43,387,43,388,43,389,43,388,43,388,42,388,43,387,43,386,43,387,43,387,42,388,42,389,42,387,42,388,42,387,41,388,41,389,41,388,41,389,41,389,40,388,40,387,41,386,41,386,40,387,41,387,40,386,40,385,41,385,40,383,40,382,40,381,40,378,39,376,39,376,38,377,38,381,38,384,39,387,40,388,40,388,39,387,39,388,39,387,39,386,39,387,39,386,39,385,39,386,39,387,39,388,39,387,38,386,39,386,38,385,38,386,38,387,38,388,38,387,38,385,38,384,37,386,38,387,38,387,37,385,37,386,37,385,37,384,37,383,37,384,37,385,37,384,36,385,36,384,36,383,37,382,37,383,37,383,36,384,36,385,36,384,36,382,36,381,36,382,36,383,36,384,36,385,35,384,35,384,36,383,36,382,36,382,35,381,35,380,35,381,35,381,34,380,35,381,35,380,35,379,35,380,35,379,35,379,34,378,34,378,33,379,33,378,33,378,34,379,34,379,35,378,35,378,36,377,35,377,36,378,36,376,36,375,36,374,36,373,36,372,36,373,36,372,35,373,35,374,35,373,35,374,35,375,35,376,34,375,35,374,35,373,35,373,34,374,34,373,34,375,34,375,33,374,33,373,33,375,33,374,33,375,33,376,33,375,33,375,32,376,32,375,32,376,32,375,32,376,32,375,32,374,32,374,31,372,31,373,31,374,31,373,31,374,31,373,31,374,30,373,30,371,30,372,29,371,29,372,29,373,29,372,29,373,29,372,29,371,29,371,28,370,28,371,28,369,28,368,28,371,28,370,28,369,27,371,27,370,27,369,27,371,27,370,27,369,27,369,26,368,26,369,26,368,26,366,25,365,25,366,25,365,25,364,25,365,25,364,24,365,24,364,24,363,24,364,24,365,24,364,24,365,24,364,23,362,23,361,23,360,23,361,23,360,23,359,23,358,22,357,23,357,22,356,22,355,22,354,22,353,22,352,22,351,22,350,21,349,21,349,22,348,22,347,22,347,21,346,21,346,22,345,22,346,22,345,22,346,22,345,22,344,22,345,22,344,22,343,22,344,22,343,22,344,22,343,22,342,22,343,22,342,22,341,22,340,22,339,22,338,22,340,23,334,22,333,22,332,22,331,21,332,21,333,21,335,21,336,21,335,21,335,20,333,21,329,20,330,20,331,19,330,19,328,20,327,20,326,20,325,19,326,19,327,19,330,19,334,19,336,19,340,19,341,19,339,19,336,19,335,19,332,19,334,18,337,18,339,18,340,19,341,19,340,19,340,18,341,18,340,18,339,17,340,17,338,17,338,18,337,18,334,18,333,18,334,18,332,18,329,18,331,17,330,17,327,17,329,17,330,17,328,17,327,17,326,17,325,17,326,17,325,17,324,17,322,16,323,16,322,16,321,16,320,16,321,16,322,16,321,16,321,15,322,15,321,15,322,15,325,15,327,15,327,14,329,14,330,14,331,14,332,14,333,14,332,14,334,13,335,13,336,13,337,13,336,13,338,13,339,13,340,13,342,13,343,13,344,12,345,12,344,12,345,11,344,11,345,11,344,11,345,11,344,11,345,11,344,11,344,10,348,10,347,10,346,10,345,10,344,10,343,10,341,10,340,10,339,10,338,10,337,10,337,9,339,9,340,9,342,8,344,8,345,8,344,8,345,8,348,7,349,7,351,8,350,8,349,7,351,7,353,7,355,7,357,7,356,7,356,6,357,6,355,5,356,5,359,5,363,5,364,5,363,5,364,6,367,6,370,7,370,6,369,6,368,6,367,6,365,6,364,5,361,5,370,4,371,4,372,4,374,4,373,4,374,4,373,4,376,3,377,4,379,4,379,5,378,5,378,6,379,6,379,5,380,5,381,5,380,4,381,4,383,5,385,5,389,5,389,6,390,6,391,6,389,5,388,5,387,5,386,5,387,5,390,5,391,5,388,4,387,4,386,3,387,3,391,3,393,3,396,4,397,4,400,4,402,4,402,5,404,5,406,5,407,5,406,5,405,5,406,5,405,5,405,4,406,4,405,4,406,4,407,4,413,4,412,4,411,4,410,4,408,3,406,3,404,2,402,2,403,2,410,2,413,2,414,3,415,3,414,3,415,3,414,2,416,2,418,3,419,3,420,3,419,3,420,3,420,2,419,2,414,2,405,2,402,2,400,2,399,2,399,1,400,1,402,1,404,2,405,2,406,2,409,2,408,2,404,1,403,1,404,1,405,1,406,1,410,1,408,1,411,1,414,1,415,1,418,2,421,2,422,2,423,2,424,2,423,2,422,2,423,1,427,1,423,1,424,1,427,1,424,1,423,1,423,0,426,0,425,0,426,0,427,0,430,0,429,0,430,0,429,0,431,0,434,0,435,0,436,0,437,0,438,0,437,0,438,0,440,0,441,0,443,0,449,0,452,0,454,0,453,0,454,0,455,0,454,0,455,0,457,0,461,0,462,1,461,1,458,1,451,1,448,1,447,1,443,1,441,1</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>354,215,354,214,354,215,354,214,355,214,354,214,354,215,354,214,354,215</Points>\n    <Keys>Grenada, GRD, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>354,203,354,202,354,201,355,202,354,203</Points>\n    <Keys>Guadeloupe, GLP, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>355,202,355,201,356,202,355,202</Points>\n    <Keys>Guadeloupe, GLP, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>265,199,266,199,267,199,267,198,267,197,268,197,269,197,270,197,271,197,272,197,272,198,272,199,272,200,272,201,272,202,272,203,273,203,274,203,275,203,275,204,273,204,272,205,272,206,272,207,271,207,271,208,270,208,269,209,268,209,267,209,266,209,265,208,264,208,263,207,263,206,263,205,263,204,264,203,264,202,265,202,266,202,267,202,268,202,268,201,267,200,266,200,266,199,265,199</Points>\n    <Keys>Guatemala, GTM, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>565,241,565,240,566,239,566,240,565,241</Points>\n    <Keys>Guinea, GIN, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>498,213,500,213,501,213,502,213,502,214,503,213,504,213,505,213,505,214,506,215,506,214,507,214,508,215,508,214,509,214,510,214,511,214,512,213,511,213,512,213,513,213,513,214,513,216,514,216,514,217,513,218,514,218,514,217,515,217,515,219,516,219,516,220,515,220,515,221,515,222,516,222,516,223,516,224,516,225,517,225,516,225,515,225,515,226,516,226,515,226,515,228,514,228,514,227,513,227,513,228,513,229,512,229,512,228,511,228,511,227,511,226,511,225,510,225,509,225,508,225,508,226,508,225,507,226,508,225,508,224,508,223,507,223,508,223,507,222,506,221,504,221,503,221,502,221,502,222,501,222,501,223,500,223,500,222,499,223,499,222,498,222,499,221,498,221,497,220,498,220,497,220,496,220,496,219,496,218,495,219,495,218,496,218,495,218,495,217,495,218,495,217,495,218,494,218,495,217,495,216,496,216,497,215,497,216,498,215,498,214,499,213,498,213</Points>\n    <Keys>Guinea, GIN, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>489,213,490,213,491,213,492,213,493,213,494,212,498,212,498,213,499,213,498,214,498,215,497,216,497,215,496,216,495,216,495,217,494,218,494,217,494,218,494,217,493,217,493,216,494,216,493,216,494,216,494,215,494,216,493,215,493,216,493,215,493,216,493,215,494,215,495,215,494,215,495,215,494,215,493,215,492,215,492,214,492,215,491,215,490,215,490,214,491,214,490,214,489,213</Points>\n    <Keys>Guinea-Bissau, GNB, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>360,226,360,225,361,226,360,225,362,226,363,227,364,228,364,229,364,230,364,231,363,231,364,231,364,230,365,230,366,230,367,231,367,232,367,231,367,232,368,232,368,233,368,234,367,235,368,235,367,235,366,235,366,236,366,237,366,238,365,238,365,239,366,239,366,240,367,240,366,240,367,240,368,240,368,241,368,242,368,243,369,244,370,244,370,245,369,245,368,245,368,244,368,245,367,245,366,245,366,246,365,246,364,246,364,247,363,247,362,247,362,246,361,245,360,245,361,245,360,245,360,244,360,243,360,242,360,241,360,240,361,239,361,238,360,238,360,237,359,237,359,236,360,235,359,235,358,235,357,235,355,233,356,232,356,231,356,230,357,230,358,230,359,229,358,229,358,228,357,228,358,228,358,227,359,227,359,226,360,226</Points>\n    <Keys>Guyana, GUY, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>321,194,320,194,321,194</Points>\n    <Keys>Haiti, HTI, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>324,191,324,192,324,193,325,193,324,193,324,194,324,195,324,196,323,196,322,196,321,196,319,196,318,196,317,196,316,196,316,195,317,195,318,195,319,195,318,195,319,195,321,195,322,195,323,194,322,194,321,193,321,192,319,192,319,191,320,191,321,191,322,191,323,191,324,191,324,192,324,191</Points>\n    <Keys>Haiti, HTI, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>275,203,276,203,277,203,278,203,279,203,280,203,281,203,282,203,281,202,282,202,282,203,283,203,284,203,285,203,286,203,287,203,287,204,288,204,287,204,288,205,287,204,288,204,288,205,289,205,288,204,289,205,290,205,290,206,289,205,289,206,289,205,289,206,288,206,287,206,287,207,287,206,286,207,285,206,284,206,284,207,284,208,283,208,282,209,281,208,281,209,280,209,279,209,279,210,279,211,278,211,278,212,278,211,277,211,278,211,277,211,277,210,276,210,276,209,275,209,274,209,274,208,273,208,272,207,272,208,271,207,272,207,272,206,272,205,273,204,275,204,275,203</Points>\n    <Keys>Honduras, HND, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>882,183,883,183,883,184,881,184,881,183,882,183</Points>\n    <Keys>Hong Kong, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>606,105,606,106,607,106,608,106,608,107,607,107,606,107,606,108,605,108,605,109,604,109,605,109,604,110,604,111,603,111,603,112,602,112,601,112,600,112,599,112,598,112,597,113,597,112,597,113,596,113,595,113,594,113,593,113,592,113,591,113,591,112,590,112,589,111,589,110,588,110,589,110,588,110,589,109,589,108,590,108,589,108,589,107,590,107,591,107,591,106,592,107,593,107,595,107,596,107,596,106,597,106,598,106,599,106,600,106,601,106,601,105,602,105,603,105,604,105,605,105,606,105</Points>\n    <Keys>Hungary, HUN, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>475,53,476,53,475,53,474,53,475,53,475,54,476,54,475,54,476,54,476,55,476,54,477,54,477,53,478,53,478,54,479,54,479,53,478,52,479,52,480,53,481,53,481,52,482,52,483,52,484,52,484,53,485,53,485,54,485,53,485,52,486,52,487,53,487,52,488,52,489,52,490,52,489,52,490,52,490,51,491,51,492,51,492,52,493,52,494,52,495,51,496,51,494,52,495,52,494,52,495,52,496,52,496,53,495,53,496,53,497,53,496,54,497,54,498,54,499,54,498,54,498,55,499,55,497,55,499,55,498,55,499,55,499,56,498,56,497,55,498,55,498,56,497,56,498,56,497,56,496,56,497,56,497,57,496,57,495,57,496,57,495,57,495,58,494,58,493,57,493,58,492,58,491,58,490,59,489,59,488,59,489,59,487,59,486,59,486,60,486,59,486,60,485,60,483,60,481,60,480,60,479,60,478,60,478,59,478,60,478,59,479,59,478,59,477,59,476,59,475,59,474,59,473,59,471,59,472,59,471,59,471,58,472,58,472,59,474,58,473,58,474,58,473,58,474,58,474,57,475,57,474,57,474,58,473,58,473,57,474,57,473,57,474,57,475,57,474,57,473,57,472,57,473,56,472,56,473,56,472,56,471,56,470,56,469,56,468,56,467,56,468,56,470,56,470,55,470,56,471,55,471,56,472,56,472,55,474,55,473,55,472,55,473,55,474,54,473,54,472,54,473,54,472,54,471,54,470,54,469,54,468,54,467,54,466,54,467,54,468,54,467,54,468,54,467,53,469,53,469,54,470,53,469,53,470,53,469,53,468,53,470,53,468,53,468,52,469,52,470,52,471,52,471,53,471,52,472,53,472,52,471,52,472,52,471,52,472,51,471,52,471,51,471,52,470,52,470,51,471,51,472,51,473,51,473,52,474,52,475,52,474,52,475,52,476,53,475,53</Points>\n    <Keys>Iceland, ISL, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>818,214,818,215,818,216,818,215,818,216,817,216,817,215,817,214,818,214</Points>\n    <Keys>India, IND, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>821,230,821,229,820,229,821,229,821,230</Points>\n    <Keys>India, IND, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>817,219,817,218,817,219</Points>\n    <Keys>India, IND, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>773,144,774,144,775,143,776,143,778,143,779,144,780,144,781,144,780,145,780,146,780,147,779,147,778,147,778,148,777,148,776,149,777,149,777,150,776,150,776,151,777,151,778,151,778,152,778,153,777,153,776,153,775,153,775,154,776,154,776,155,776,156,776,157,776,156,776,157,777,156,777,157,778,158,779,158,780,158,780,159,781,159,783,160,782,160,781,161,781,162,780,162,780,163,780,164,781,165,781,164,782,165,783,165,783,166,784,166,785,167,786,167,787,167,788,167,788,168,789,168,790,168,791,168,792,168,793,168,794,169,793,169,794,169,794,170,795,170,796,170,797,170,797,171,798,171,800,171,801,171,802,171,803,171,804,171,804,170,803,169,804,169,804,168,804,167,805,166,806,166,806,167,806,168,806,169,806,170,807,170,808,170,809,170,810,170,811,170,812,170,813,170,814,170,815,170,816,170,816,169,816,168,815,168,814,168,814,167,815,167,816,167,817,167,818,167,818,166,817,166,818,166,819,165,820,164,821,164,822,164,822,163,823,163,824,163,825,163,826,163,828,162,828,163,829,163,828,163,828,164,829,163,829,164,829,165,828,165,829,165,830,165,830,166,831,165,831,166,832,166,831,166,832,166,832,167,831,167,830,168,831,169,830,169,830,168,829,168,829,169,828,169,827,169,827,170,826,170,825,171,825,170,825,171,825,172,825,173,824,174,823,174,823,175,824,175,823,176,823,177,822,178,822,179,820,178,820,179,820,178,819,179,820,179,820,180,820,181,819,181,819,182,819,183,819,184,818,185,818,184,818,185,818,184,817,185,817,184,817,182,817,181,816,180,816,179,816,180,816,179,816,180,816,179,815,179,815,180,815,181,814,182,814,181,813,180,813,179,814,179,814,178,815,178,815,177,815,178,815,177,816,177,816,176,817,176,817,175,816,175,814,175,813,175,812,175,811,175,810,175,809,175,809,174,809,173,809,172,808,172,808,173,808,172,808,173,807,172,807,171,806,171,807,172,806,172,806,171,805,171,805,172,804,172,804,173,805,174,806,174,806,175,807,175,806,175,805,175,804,176,804,177,805,178,806,178,806,179,805,179,805,180,806,180,806,181,806,182,806,183,807,184,807,185,806,185,807,185,807,186,806,186,806,185,806,186,806,185,806,184,806,185,805,185,805,184,806,184,805,184,805,185,805,186,805,185,805,186,805,185,805,186,804,186,804,185,804,186,804,185,804,184,803,184,803,183,803,184,804,184,804,185,803,185,803,186,801,186,800,186,800,187,800,188,801,188,800,189,799,190,799,191,798,190,798,191,799,191,798,191,797,191,796,192,796,191,795,191,795,192,796,191,796,192,795,192,796,192,795,192,794,193,793,194,792,195,792,196,791,196,790,197,789,197,789,198,788,198,787,199,786,200,787,200,786,201,785,202,784,201,783,202,782,203,783,203,782,203,782,202,782,203,781,203,780,203,780,205,780,206,780,207,780,208,780,209,780,210,780,209,780,210,780,209,780,210,781,210,780,211,780,212,780,213,780,214,779,214,779,216,779,217,779,216,779,218,779,220,778,220,777,220,777,221,776,222,777,223,778,223,777,223,776,223,775,223,774,224,774,225,773,226,772,226,771,226,770,225,769,224,769,223,769,224,769,223,768,222,768,221,769,221,769,222,769,221,768,221,768,220,767,219,767,218,767,216,766,216,766,215,765,215,766,215,765,215,765,214,764,213,764,212,764,211,763,210,764,210,764,209,763,210,763,209,763,208,763,207,762,207,762,206,761,205,761,204,760,203,760,202,759,201,760,201,759,200,759,199,759,198,759,197,758,196,759,196,758,196,758,195,759,195,758,195,758,194,759,194,758,194,759,194,758,194,758,193,758,194,758,193,759,193,758,193,758,192,758,191,757,191,758,190,758,189,758,188,758,187,757,187,758,187,757,187,757,186,758,186,757,186,758,186,759,185,757,186,757,185,758,185,757,185,757,184,758,184,757,184,757,183,756,184,756,185,755,185,756,185,756,186,756,187,755,187,754,188,753,188,752,188,750,188,750,187,749,186,748,185,747,185,746,184,747,183,747,184,748,184,748,183,749,183,750,183,750,182,751,182,751,181,751,182,750,182,749,182,747,182,745,181,745,180,745,179,746,179,745,179,744,180,744,179,745,179,746,179,746,178,747,178,748,178,749,178,750,178,751,177,751,178,752,178,752,177,753,177,752,177,753,176,752,175,752,174,751,173,750,173,750,172,750,171,749,171,748,170,748,169,750,168,750,167,751,166,751,167,752,167,753,167,754,167,755,167,755,166,756,165,756,164,757,164,758,163,759,162,760,161,760,160,761,160,761,159,762,158,763,157,764,157,763,157,763,156,763,155,764,155,764,154,765,154,766,154,765,153,764,153,763,153,764,152,763,152,762,152,763,152,763,151,762,151,762,150,761,149,762,149,762,148,761,148,762,148,761,148,761,147,762,146,763,146,764,146,765,147,766,147,767,147,768,147,768,146,769,146,770,146,770,147,770,146,771,146,771,145,772,145,773,144</Points>\n    <Keys>India, IND, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>818,212,818,213,818,214,818,213,818,212,818,211,818,210,819,210,819,211,818,211,818,212</Points>\n    <Keys>India, IND, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>952,276,953,275,953,273,954,273,955,273,956,273,957,273,956,274,956,275,955,276,954,276,953,276,952,276</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>932,255,932,254,931,253,932,253,933,253,933,254,932,255</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>837,256,836,256,835,254,835,253,836,253,836,254,837,254,837,255,837,256,837,255,837,256</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>868,254,868,253,869,254,868,254</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>840,259,839,258,840,258,840,259</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>885,277,885,276,884,276,883,276,883,275,884,275,885,275,886,275,887,276,886,276,885,277</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>839,258,838,257,839,257,839,258</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>863,260,862,260,862,259,862,258,863,258,864,258,864,259,864,260,863,260</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>909,263,908,263,909,262,909,263,909,262,909,263</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>918,258,917,258,917,257,917,256,918,257,917,257,918,258</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>929,275,928,274,929,274,929,275</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>917,275,917,274,917,273,918,274,919,273,920,274,919,274,918,274,917,274,917,275</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>948,256,947,256,946,256,946,255,947,255,948,256,949,256,950,256,949,256,948,256</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>908,283,909,282,910,282,910,283,909,283,908,283</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>905,282,905,282</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>913,257,912,256,913,256,913,255,915,256,914,256,913,257</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>901,281,900,281,899,280,898,280,897,280,896,279,897,279,898,279,899,279,899,278,900,279,901,279,901,280,902,280,902,281,901,281</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>913,278,914,278,915,277,915,276,917,276,918,276,919,276,920,275,921,276,921,275,921,276,921,277,919,277,918,277,917,278,916,278,915,279,914,279,914,280,913,280,913,281,912,281,911,282,910,282,910,281,911,281,910,281,910,280,911,279,912,278,913,278</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>909,276,909,275,910,275,909,276</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>908,268,908,267,908,268,908,267,907,268,907,267,908,266,908,265,908,264,909,264,909,265,908,266,909,266,909,267,908,267,908,268</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>859,260,859,259,857,259,857,258,857,257,856,257,855,257,855,256,856,256,856,255,857,255,856,256,857,256,857,255,858,255,858,256,858,257,859,258,860,258,860,259,859,259,860,260,859,260</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>841,260,840,259,841,260</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>889,277,888,277,887,277,888,277,888,276,888,275,889,275,890,276,889,277</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>932,262,931,261,929,261,929,260,928,260,928,261,926,261,926,260,926,261,925,261,924,260,924,261,923,261,923,260,924,260,924,259,926,259,927,259,928,259,930,259,931,260,931,261,932,261,932,262</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>912,276,911,276,912,275,912,276,912,275,912,276</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>910,276,909,276,910,276,910,275,910,276,910,275,911,275,911,276,910,276</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>956,276,955,276,955,275,956,275,956,276</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>913,276,913,275,915,275,915,276,913,276</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>924,275,923,275,924,275</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>891,278,890,278,890,277,890,276,891,276,892,276,893,276,893,277,894,276,893,276,893,275,894,275,894,276,895,275,896,276,895,276,896,276,896,275,897,276,897,277,896,277,895,277,895,276,894,277,893,277,892,278,891,278</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>907,267,907,266,907,267,907,266,907,267,906,267,906,266,907,266,906,265,907,265,908,264,908,265,907,266,907,267</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>903,277,902,277,901,277,900,277,899,277,899,276,900,276,900,275,901,275,902,275,902,276,903,276,904,276,905,276,906,276,907,276,908,276,908,275,909,275,908,276,907,277,906,277,905,277,904,277,903,277</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>853,253,852,252,853,252,853,253</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>829,243,828,243,827,243,827,242,828,242,828,243,828,242,829,243</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>854,252,854,251,853,251,853,250,853,251,854,251,855,251,854,251,854,252</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>921,252,921,251,921,252</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>835,252,834,252,835,252,835,251,835,252</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>847,248,846,247,846,246,847,247,847,248</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>920,239,919,238,920,238,920,237,920,238,920,239</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>923,253,922,253,922,252,921,252,922,251,922,252,922,251,922,252,923,252,922,252,922,253,923,253</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>905,267,905,266,906,266,906,267,905,267</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>861,269,861,268,862,269,863,269,864,270,864,269,865,270,865,271,866,271,867,271,868,271,869,271,870,271,871,271,872,270,873,270,873,271,874,271,874,270,875,271,876,271,877,271,877,272,878,272,877,272,878,272,878,273,879,274,880,274,881,274,882,273,882,274,883,274,883,276,883,277,883,276,882,276,881,276,880,276,879,275,878,276,877,276,876,276,875,275,875,276,874,275,873,275,872,275,871,275,869,274,868,274,867,274,866,274,866,273,866,274,865,274,863,274,862,273,860,273,859,273,859,272,859,271,858,272,858,271,857,271,856,271,855,271,856,271,856,270,857,270,857,269,858,268,858,269,858,268,859,269,860,269,861,269</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>901,270,901,269,901,268,901,269,901,270</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>924,262,924,261,923,262,924,261,925,261,924,261,924,262</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>930,257,929,257,929,256,930,256,931,256,931,257,931,256,930,257</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>916,256,917,256,919,256,918,256,917,256,916,256</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>933,275,933,274,933,275,933,274,933,273,934,273,934,272,935,272,934,272,934,273,935,273,934,274,934,275,933,275</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>920,262,918,261,918,260,920,260,921,260,921,261,921,262,920,262</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>846,267,846,266,847,267,846,267</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>942,271,942,270,942,269,943,270,943,271,942,271</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>938,268,937,268,938,268,937,267,938,267,938,268</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>909,255,909,254,909,255,908,255,908,254,909,254,909,255,910,254,910,255,909,255</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>922,256,922,255,923,255,924,255,924,256,923,256,922,256</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>938,268,939,267,939,266,939,267,938,268</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>888,263,888,262,888,261,888,260,888,261,888,262,888,263</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>943,270,943,269,942,269,942,268,943,268,942,268,943,268,943,267,944,267,943,267,944,267,944,268,943,268,944,269,943,270</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>924,244,925,243,926,243,925,244,924,244</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>886,241,886,240,886,239,887,238,887,237,888,238,888,237,889,237,889,238,889,237,890,238,890,237,890,238,891,237,892,238,893,239,892,239,893,239,893,240,892,240,892,239,892,240,891,240,892,240,892,241,891,241,892,241,892,242,893,242,892,242,893,242,892,242,893,242,894,244,893,244,893,245,894,245,894,246,895,246,896,247,897,247,896,248,895,248,894,248,893,247,894,248,893,248,892,250,892,251,892,252,892,253,891,253,890,254,890,255,889,255,888,256,889,256,889,257,888,257,889,257,889,258,888,258,889,258,889,259,888,260,888,259,888,260,887,261,886,262,885,262,884,263,883,263,883,261,882,261,883,260,882,261,882,260,882,261,881,261,880,261,880,260,879,260,879,259,879,260,878,260,877,261,876,260,876,261,875,261,875,260,875,259,874,260,874,259,873,259,873,260,872,260,872,259,872,260,871,260,871,259,870,260,870,259,870,258,870,257,870,256,869,256,870,256,870,255,870,254,869,254,869,253,868,253,867,253,868,253,868,252,867,252,867,251,867,250,866,250,866,249,866,248,866,247,867,247,867,246,867,247,866,247,867,246,868,245,867,245,868,245,868,244,868,245,869,245,869,246,870,247,871,248,872,248,872,247,873,247,874,247,874,248,874,247,875,248,875,247,876,247,876,246,877,246,879,246,878,246,879,246,880,247,881,247,881,246,882,246,883,246,884,245,884,244,884,243,885,243,885,242,885,241,885,242,886,241</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>847,247,846,246,845,246,846,246,847,246,847,247</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>908,248,910,248,911,248,912,247,913,247,913,246,914,246,914,245,915,245,915,246,914,248,913,249,911,249,910,250,909,250,909,249,908,249,907,249,906,249,905,249,904,249,903,249,902,249,901,249,900,250,900,251,900,252,900,253,901,253,901,254,901,255,902,255,903,255,904,254,904,253,905,253,906,253,907,253,908,253,908,252,909,252,910,252,910,253,910,254,909,254,909,253,908,253,908,254,907,254,907,255,906,255,905,256,904,256,903,256,904,256,904,257,905,257,905,258,906,258,906,259,906,260,907,260,906,260,906,261,907,261,906,261,907,262,907,263,908,263,908,264,907,264,906,264,906,265,905,265,904,264,904,263,904,262,903,262,903,261,902,261,902,260,903,260,903,259,902,259,903,259,902,258,901,259,900,259,900,260,901,260,901,261,901,262,901,264,901,265,900,265,900,266,901,267,900,267,899,267,899,268,898,267,898,266,898,265,898,264,898,263,898,262,898,261,897,261,896,261,896,260,896,259,896,258,897,258,897,257,897,256,898,256,897,256,897,255,897,254,898,253,899,253,898,253,899,252,899,253,899,252,899,251,898,251,899,250,899,251,899,250,899,249,900,249,900,248,901,248,902,248,902,247,903,247,904,247,905,247,906,247,907,247,907,248,908,248</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>932,252,932,251,931,251,931,252,931,251,930,251,931,251,930,251,931,251,932,251,933,251,934,251,933,252,933,251,932,252,932,251,931,251,932,251,932,252</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>844,245,844,244,845,244,845,245,844,245</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>833,249,832,248,832,247,831,247,831,246,832,246,833,247,833,248,833,249</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>963,258,963,260,963,262,963,264,963,266,963,268,963,269,962,270,962,271,963,271,963,273,963,275,963,277,963,278,962,278,961,277,961,276,960,275,959,275,960,275,960,274,960,275,959,275,958,275,957,275,957,274,957,275,956,275,956,274,957,273,956,273,956,272,955,272,956,272,957,272,956,272,955,271,956,271,957,271,956,271,956,270,956,271,955,270,955,269,954,269,954,268,955,268,954,268,955,268,954,268,954,267,953,267,953,266,953,267,953,266,952,266,951,266,951,265,951,266,951,265,950,265,949,265,948,264,947,264,946,264,945,264,944,263,943,263,944,263,944,262,943,262,943,263,943,262,942,262,943,262,942,263,942,262,941,262,941,261,941,262,941,261,940,261,941,261,941,260,941,259,941,260,940,260,940,261,940,262,939,263,938,263,938,262,938,261,938,260,938,261,937,260,936,259,935,259,936,259,935,259,936,259,937,259,938,259,939,258,940,258,941,258,941,259,941,258,941,257,941,258,941,257,940,257,939,257,938,257,937,257,936,257,935,256,936,256,935,256,935,255,934,255,933,255,934,255,933,255,932,255,933,254,933,253,934,253,935,253,936,252,937,252,938,252,939,252,940,253,941,253,942,253,942,255,942,256,942,257,943,259,943,258,944,259,944,260,944,261,946,261,946,260,947,260,947,259,948,258,949,258,949,257,950,257,951,257,951,256,952,255,953,255,954,255,955,256,956,256,957,257,958,257,959,258,960,258,960,257,960,258,961,258,962,258,963,258</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>864,240,864,239,863,238,864,238,865,239,864,239,864,240</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>917,240,916,240,916,239,917,239,917,240</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>849,248,848,248,847,248,847,247,847,248,848,247,849,248</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>849,248,848,248,848,247,847,247,848,247,849,247,849,248</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>853,248,853,247,852,247,853,247,854,247,853,248</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>948,254,947,254,947,253,946,253,946,252,947,253,948,254,949,254,948,254</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>924,246,923,247,922,247,922,248,923,248,923,247,924,247,924,246,925,246,926,246,926,247,924,248,925,249,926,249,926,250,925,250,925,249,924,249,923,249,923,250,923,251,924,252,925,253,924,253,923,252,922,251,923,250,922,249,922,248,922,247,922,246,922,245,923,244,924,244,923,245,924,245,923,246,924,246</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>825,234,826,234,827,234,828,235,829,235,830,235,831,235,832,235,833,236,833,237,834,237,834,238,835,238,835,239,836,239,837,240,838,241,839,241,839,242,840,243,839,242,840,242,840,243,840,242,840,243,841,244,842,244,842,245,842,244,843,244,844,245,844,246,845,245,845,246,846,246,846,247,847,248,848,248,849,249,848,249,847,250,849,249,850,249,851,250,851,251,850,251,849,251,850,251,850,252,850,253,851,253,851,254,851,253,852,254,853,254,853,255,853,256,853,257,853,256,854,257,854,256,854,257,854,258,853,258,854,258,853,258,853,259,854,258,854,257,854,258,854,257,855,258,856,258,857,259,858,260,857,261,857,262,857,263,857,264,857,265,857,266,857,267,857,268,856,268,856,267,856,268,856,267,855,267,855,268,854,267,853,267,854,268,853,268,852,267,852,266,851,266,851,265,850,265,849,265,849,264,848,264,848,263,846,262,846,261,845,261,844,260,844,259,843,259,843,258,842,257,842,256,841,255,841,254,841,253,840,253,840,252,839,251,838,250,837,250,837,249,837,248,836,247,836,246,836,245,835,245,834,244,833,244,832,243,832,242,832,241,831,241,830,240,830,239,829,239,828,238,827,238,826,237,826,236,825,235,825,234</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>705,171,706,170,707,170,708,170,707,170,705,171</Points>\n    <Keys>Iran, IRN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>674,132,675,133,676,133,677,134,678,134,679,134,680,133,681,133,682,132,683,132,683,131,685,132,684,133,684,134,685,135,686,135,686,136,687,137,687,138,688,138,690,138,690,139,692,140,693,140,695,141,697,140,699,140,701,140,702,140,700,140,701,140,702,140,701,140,702,139,701,138,702,139,703,138,704,138,704,137,705,136,706,136,707,136,708,136,709,136,708,136,709,136,710,136,711,136,712,136,712,137,713,137,714,137,715,138,715,137,716,138,716,137,717,138,718,138,718,139,719,139,720,139,721,141,723,141,723,142,723,143,723,144,723,145,723,146,722,147,722,148,721,148,721,149,721,150,722,150,721,151,722,153,722,154,722,155,722,156,724,156,725,156,725,157,725,158,723,160,722,161,724,162,724,163,724,164,726,165,727,165,727,166,728,166,728,167,728,168,728,169,729,169,730,169,729,169,729,170,729,171,728,171,727,171,726,171,726,172,725,172,725,173,724,175,723,175,721,175,721,174,721,175,720,174,720,175,720,174,719,174,718,174,717,174,716,174,715,174,714,174,713,173,713,174,713,173,711,173,711,172,711,171,711,170,710,170,710,169,709,169,708,169,706,170,705,170,704,171,703,171,702,170,701,170,700,170,699,169,698,169,697,168,698,168,697,168,696,167,694,167,693,166,693,165,693,164,692,164,692,163,691,163,692,162,691,162,690,161,690,160,689,160,688,160,687,160,686,159,687,159,686,159,687,159,686,159,686,160,685,160,685,161,685,160,684,160,684,159,684,158,683,157,683,156,683,155,682,154,682,153,681,153,680,152,679,152,678,152,678,151,677,150,676,149,676,148,676,147,677,147,676,146,677,146,677,145,678,145,677,144,678,144,678,143,679,143,677,143,676,143,676,142,676,143,676,142,675,141,675,140,674,140,674,139,673,138,673,137,672,137,673,136,673,135,672,135,672,134,672,133,672,132,673,132,673,131,674,132</Points>\n    <Keys>Iran, IRN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>667,139,668,138,668,139,669,138,669,139,670,139,671,139,672,139,672,140,673,139,674,139,674,140,675,140,675,141,676,142,676,143,676,142,676,143,677,143,679,143,678,143,678,144,677,144,678,145,677,145,677,146,676,146,677,147,676,147,676,148,676,149,677,150,678,151,678,152,679,152,680,152,681,153,682,153,682,154,683,155,683,156,683,157,684,158,684,159,684,160,685,160,685,161,684,160,683,160,682,160,681,160,681,161,680,162,679,163,677,162,676,162,674,163,672,162,670,162,670,160,670,159,669,159,668,158,667,158,663,156,660,154,657,154,657,153,657,152,656,151,656,150,660,148,663,147,663,146,663,145,663,144,664,144,664,143,663,142,663,141,664,141,665,141,667,139</Points>\n    <Keys>Iraq, IRQ, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>674,163,676,162,677,162,679,163,677,164,676,164,674,163</Points>\n    <Keys>Iraq-Saudi Arabia Neutral Zone, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>518,85,519,85,520,85,521,85,522,85,522,86,522,87,522,86,523,86,523,87,523,88,523,87,522,87,523,87,522,87,523,87,523,88,522,88,521,88,521,89,520,88,520,89,521,89,521,90,521,91,522,92,521,93,520,93,520,94,521,94,520,94,519,94,518,94,517,94,517,95,516,95,515,95,514,95,515,95,514,95,514,96,513,96,512,96,511,96,510,96,511,96,510,96,511,95,509,96,510,95,511,95,510,95,509,95,508,95,509,95,510,94,509,94,508,94,509,94,510,94,510,93,511,93,510,93,511,93,512,93,513,93,513,92,512,93,511,93,510,93,511,92,511,91,512,91,513,91,512,91,511,91,511,90,511,91,511,90,510,90,510,91,510,90,509,90,510,90,510,89,511,89,510,89,510,88,509,88,510,88,512,88,513,88,514,88,514,87,515,87,514,87,513,87,513,86,514,86,515,86,514,86,515,86,514,86,514,85,515,85,516,85,517,85,517,86,517,85,518,85,517,84,518,84,519,85,518,85</Points>\n    <Keys>Ireland, IRL, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>525,88,526,88,526,87,526,88,527,88,526,88,525,88</Points>\n    <Keys>Isle of Man, XIM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>645,151,646,151,647,151,646,151,646,152,646,153,645,153,644,154,645,155,644,155,645,155,645,156,644,156,645,156,646,156,646,157,646,158,645,158,645,159,645,160,644,162,644,161,644,160,643,159,643,158,642,157,643,157,643,156,643,155,644,155,644,154,644,153,644,152,645,152,645,151</Points>\n    <Keys>Israel, ISR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>585,141,584,140,583,140,582,139,581,139,580,139,579,138,578,138,577,137,577,136,578,136,579,136,580,136,581,137,582,136,583,136,584,136,585,136,586,136,585,137,585,138,585,139,586,139,585,140,585,141</Points>\n    <Keys>Italy, ITA, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>566,134,565,134,565,133,565,134,565,133,565,132,565,131,565,130,565,129,564,129,564,128,565,128,566,127,567,127,568,127,568,128,569,128,569,129,568,130,569,130,569,131,568,132,568,133,567,133,567,134,566,134</Points>\n    <Keys>Italy, ITA, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>571,110,572,110,573,110,574,110,574,109,575,110,576,109,576,110,577,110,578,111,580,111,581,111,580,111,580,112,580,113,581,113,581,114,580,113,579,113,579,114,578,114,577,114,576,114,576,115,577,115,577,116,576,116,576,117,577,118,578,119,579,119,580,120,581,121,581,122,582,123,583,124,584,124,586,125,587,125,588,125,587,126,588,126,589,127,590,127,591,128,592,128,593,128,593,129,594,129,595,129,595,130,595,131,594,131,593,131,594,130,593,130,592,130,591,129,590,129,590,130,589,130,589,131,589,132,590,132,591,132,591,133,591,134,590,134,589,134,589,135,588,136,588,137,587,137,586,136,587,136,587,135,587,134,588,134,588,133,588,132,587,132,587,131,586,130,586,131,585,130,584,130,584,129,584,128,583,129,582,129,583,129,583,128,582,128,581,127,580,127,579,127,578,126,577,126,577,125,576,125,575,124,574,124,574,123,573,123,572,122,571,122,571,121,570,120,570,119,570,118,569,118,568,118,567,117,567,118,566,117,565,118,564,118,564,119,563,119,562,119,563,118,561,118,560,118,560,117,561,116,560,116,560,115,559,115,560,115,561,115,561,114,560,114,560,113,561,113,562,113,563,113,563,112,564,112,565,111,565,112,566,112,566,113,567,113,566,113,567,113,567,112,567,111,568,111,568,112,569,112,569,111,569,112,570,112,570,111,571,111,571,110</Points>\n    <Keys>Italy, ITA, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>577,119,577,119</Points>\n    <Keys>Italy, ITA, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>520,218,520,219,520,218,521,218,521,219,521,220,522,220,522,219,523,219,523,220,524,220,525,220,525,221,526,221,526,222,527,222,527,221,528,221,530,221,531,221,531,222,531,223,532,223,531,223,532,223,532,224,532,226,531,226,531,227,530,229,530,230,530,231,530,232,530,233,531,233,531,234,531,235,530,235,530,234,530,235,528,235,527,235,528,235,528,234,528,235,527,235,526,235,525,235,526,235,527,235,528,235,527,235,525,235,524,235,525,235,524,235,523,235,524,235,523,235,522,235,520,236,519,237,518,237,517,237,517,236,517,235,517,234,517,233,516,233,516,232,515,232,515,231,514,231,514,230,515,229,514,229,514,228,515,228,515,226,516,226,515,226,515,225,516,225,517,225,516,225,516,224,516,223,516,222,515,222,515,221,515,220,516,220,516,219,517,219,517,220,518,220,519,220,519,219,520,219,519,219,520,218</Points>\n    <Keys>Ivory Coast, CIV, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>308,197,307,197,306,197,306,196,305,196,304,196,305,195,306,195,308,195,309,195,310,196,311,197,310,197,309,197,308,197</Points>\n    <Keys>Jamaica, JAM, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>512,38,514,37,515,37,516,37,515,37,516,37,515,38,514,38,513,38,512,38</Points>\n    <Keys>Jan Mayen, SJM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>947,150,946,150,946,149,945,149,945,148,946,147,946,146,945,146,945,147,944,147,944,146,943,146,942,146,942,147,941,147,942,147,941,147,940,147,939,148,939,147,939,148,939,147,939,148,939,147,938,148,937,148,937,147,936,148,936,149,935,149,935,148,934,149,934,148,934,149,934,148,934,149,933,149,933,148,932,149,932,148,932,147,933,147,932,147,933,147,934,147,935,146,936,146,937,145,938,144,937,144,938,144,939,144,940,144,941,144,942,144,943,144,944,144,945,143,945,144,946,144,947,144,947,143,948,143,948,144,948,143,947,143,948,142,949,141,950,140,950,139,950,138,951,138,952,138,951,138,951,139,950,139,951,139,951,140,950,140,951,140,952,140,953,139,955,138,956,138,956,137,957,137,958,136,958,135,959,134,959,133,960,133,960,132,960,131,959,131,959,130,960,130,959,129,960,128,960,127,961,128,960,127,961,127,961,128,962,128,963,128,963,127,962,127,962,126,963,126,964,126,964,127,964,129,965,130,965,131,965,132,966,132,965,132,966,132,965,132,965,133,965,132,965,133,965,134,964,134,964,135,964,136,964,135,963,135,963,136,963,135,963,136,962,136,962,137,963,138,962,140,961,141,961,142,962,143,961,144,961,145,960,145,959,146,959,145,959,144,960,144,959,144,958,144,959,144,958,144,959,145,958,145,957,145,957,146,956,147,956,146,956,145,955,145,955,146,954,146,955,146,954,147,953,147,952,147,951,147,952,146,951,146,950,146,950,145,949,146,949,147,950,147,950,148,949,148,948,148,948,149,947,150</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>928,148,928,147,927,147,928,147,927,147,928,147,928,146,928,147,928,148</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>944,148,944,147,945,147,944,147,944,148</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>928,166,927,166,927,165,928,165,929,165,928,166</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>931,152,931,151,930,151,930,152,931,152,930,153,930,152,929,152,929,153,929,152,928,152,929,151,929,152,930,152,929,151,928,151,929,151,928,151,928,150,929,150,929,151,929,150,930,150,931,150,931,149,932,149,933,149,932,149,933,150,934,150,934,149,935,150,934,150,934,151,935,151,936,151,935,151,935,152,936,152,935,152,936,152,935,152,935,153,934,153,935,153,934,153,934,155,934,156,933,156,933,157,932,157,931,158,932,157,932,156,931,156,932,156,932,155,931,155,931,156,931,157,930,157,930,156,931,156,930,155,930,154,931,153,931,152</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>960,126,959,126,960,126,960,125,960,124,959,124,959,123,960,122,961,122,961,121,960,121,961,121,961,120,962,121,963,121,964,121,964,120,964,119,964,118,965,117,965,116,964,115,964,114,965,114,966,114,966,115,968,116,969,117,970,118,971,118,972,118,973,119,974,119,974,118,975,117,976,118,975,118,975,119,976,121,975,120,975,121,976,121,976,120,977,120,977,121,976,121,975,121,974,122,974,121,974,122,973,122,972,122,971,122,970,123,970,124,969,124,969,125,968,124,966,123,965,123,964,123,963,123,962,124,962,123,961,123,960,123,960,124,961,124,962,124,963,125,962,125,961,125,961,126,960,126</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>938,152,937,152,938,152,937,152,937,151,937,150,936,150,937,150,937,149,938,149,938,148,939,148,939,149,940,149,940,148,941,148,941,147,942,147,942,148,942,147,942,148,943,148,943,149,944,149,943,149,944,149,943,150,942,150,942,151,941,150,940,150,939,151,938,152,939,152,938,152</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>954,137,955,137,954,137,954,136,955,136,955,137,954,137</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>929,154,930,154,929,154,930,154,929,153,930,153,930,154,929,154</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>931,160,931,159,931,160</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>932,159,933,158,932,159</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>926,153,925,153,925,152,926,152,926,153</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>923,172,922,172,923,172,923,171,923,170,923,171,924,171,924,170,924,171,923,171,923,172</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>645,155,644,154,645,153,646,153,646,152,647,152,648,153,649,153,650,153,650,154,651,153,652,153,652,152,653,152,654,151,655,151,656,150,656,151,657,152,657,153,657,154,656,155,655,155,654,155,653,155,652,156,651,156,651,157,652,158,653,158,654,159,653,159,652,160,651,161,650,161,649,162,648,162,648,163,647,163,646,163,645,163,644,162,645,162,644,162,645,160,645,159,645,158,646,158,646,157,646,156,645,156,644,156,645,156,645,155,644,155,645,155</Points>\n    <Keys>Jordan, JOR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>723,118,723,117,723,118,722,117,722,118,716,114,715,114,707,115,707,127,707,126,707,127,706,127,706,126,705,126,704,125,704,124,703,124,702,124,701,123,700,124,699,124,698,124,697,125,697,124,697,123,698,123,697,123,697,122,698,123,698,122,697,122,696,122,695,122,695,121,694,121,693,121,693,120,693,119,692,119,692,118,691,118,690,117,692,117,693,117,694,117,693,117,692,116,693,115,694,114,694,115,694,114,695,114,697,114,698,115,699,114,698,114,699,113,699,112,699,111,698,111,699,111,699,110,698,110,697,110,696,110,695,110,695,109,694,109,694,110,694,109,693,109,692,109,692,110,691,110,690,110,689,111,688,111,687,111,688,111,687,111,688,111,687,111,686,111,685,111,685,110,686,110,687,110,686,109,685,108,684,108,684,107,683,107,682,107,681,107,681,106,679,105,680,104,680,103,681,103,680,103,680,102,680,101,681,101,681,100,682,100,681,100,682,100,681,100,682,100,682,99,683,99,683,100,684,100,684,101,685,101,686,101,686,100,686,99,685,99,686,99,687,98,688,98,688,97,689,97,690,97,691,97,691,96,692,96,692,95,693,95,693,96,694,96,693,96,694,96,695,96,695,95,696,96,696,95,697,95,697,96,698,96,699,96,700,96,700,97,701,97,702,97,702,98,703,98,703,99,704,99,703,98,704,98,703,98,704,98,703,98,703,97,704,97,704,98,705,98,706,99,706,98,706,99,707,99,708,98,709,98,709,97,709,98,710,98,710,97,711,97,712,98,713,98,713,97,714,97,715,97,715,98,716,98,717,98,717,99,718,99,719,99,719,98,720,98,722,99,724,98,724,97,725,97,724,97,724,96,723,96,722,96,721,96,721,95,720,95,720,94,720,95,721,94,722,94,723,93,722,93,722,92,723,92,722,92,723,92,723,91,723,92,724,92,724,91,724,92,725,92,726,92,726,91,725,91,724,91,723,91,723,90,724,90,723,90,722,90,723,90,723,89,722,89,723,89,723,88,724,88,724,89,724,88,725,89,725,88,725,89,726,89,726,88,727,88,727,89,727,88,728,88,729,88,730,88,731,88,732,88,731,88,732,88,732,87,733,87,734,87,735,87,735,88,735,87,736,87,737,87,737,86,737,87,738,87,739,86,740,86,741,86,742,86,743,86,744,86,744,85,745,85,746,85,746,84,746,85,747,85,747,84,746,84,747,84,747,85,748,84,749,84,749,85,750,85,751,85,752,85,752,86,753,86,753,87,753,88,753,87,752,87,752,88,753,88,754,88,755,88,756,88,756,87,756,88,757,88,756,88,757,88,757,89,758,89,758,88,757,88,758,88,759,88,759,89,760,89,760,88,761,88,761,89,760,89,759,89,759,90,760,90,761,90,762,90,763,90,763,89,764,89,765,89,766,89,766,88,767,88,768,88,768,87,769,88,769,87,770,87,770,88,769,88,769,89,772,90,773,90,773,91,774,91,775,92,775,93,776,94,778,95,778,96,779,98,780,98,781,98,781,97,782,97,783,97,783,98,784,98,785,98,786,98,787,98,788,98,789,98,789,97,790,97,790,98,791,98,792,99,792,100,793,100,794,100,795,100,794,101,795,101,795,102,796,102,797,102,798,102,799,102,799,101,800,101,800,102,799,102,800,102,801,103,802,103,801,103,800,103,800,104,799,105,798,105,797,105,796,107,796,108,797,108,797,109,796,109,795,109,794,110,793,110,792,110,790,109,789,109,789,110,788,110,788,111,787,112,787,113,786,114,787,114,787,115,786,115,785,115,785,114,784,115,782,115,780,115,779,116,780,116,781,116,781,117,781,118,781,119,782,120,782,121,781,121,781,122,780,122,780,123,780,124,780,123,779,123,778,123,777,123,777,122,776,122,775,122,774,122,773,122,772,122,771,122,770,122,769,122,768,122,767,122,766,122,765,122,764,122,763,121,762,121,761,121,760,121,760,122,760,123,759,123,758,123,757,122,756,122,755,122,754,122,753,122,753,123,752,123,752,124,751,124,750,124,750,125,749,125,748,125,748,126,747,126,747,127,746,127,746,128,745,128,745,129,744,128,744,127,743,127,742,127,741,127,740,127,739,125,739,124,738,124,738,123,738,122,737,122,736,121,735,120,734,119,733,120,731,120,729,120,726,120,723,118</Points>\n    <Keys>Kazakhstan, KAZ, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>642,254,641,254,641,252,641,251,641,250,642,250,642,249,642,248,643,248,643,247,644,247,644,246,645,245,644,245,645,245,644,245,644,244,644,243,644,242,643,242,643,241,643,240,643,239,642,239,642,238,641,238,643,237,645,237,646,237,647,237,648,237,649,237,650,237,653,239,654,240,655,240,656,240,657,240,658,240,659,239,661,238,662,238,663,239,665,239,664,241,662,242,662,251,663,253,664,255,664,256,663,256,663,257,662,257,662,256,663,256,662,256,662,257,662,256,662,257,662,258,661,258,660,258,660,259,660,260,659,261,659,260,659,261,659,262,659,263,658,262,658,263,659,263,658,264,657,264,657,265,657,264,653,261,652,261,653,260,652,260,648,257,647,256,644,255,642,254</Points>\n    <Keys>Kenya, KEN, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>746,400,746,399,746,398,746,397,747,396,747,397,746,397,747,397,746,397,747,397,746,398,747,398,748,398,748,397,748,398,747,398,748,398,749,398,750,398,751,398,751,399,750,399,751,399,750,399,749,399,750,399,751,399,750,399,750,400,749,400,749,399,748,399,749,399,748,400,748,399,747,399,747,400,746,400</Points>\n    <Keys>Kerguelen, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>68,245,67,245,67,244,68,245,67,245,68,245</Points>\n    <Keys>Kiribati, KIR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>925,135,924,135,924,136,923,136,921,136,920,136,920,137,919,137,918,137,917,137,916,136,917,137,916,137,915,137,915,136,914,136,913,136,914,136,914,135,915,135,914,135,915,135,915,134,916,134,915,134,915,133,916,133,916,132,914,132,914,131,914,132,913,132,913,131,912,131,913,131,913,130,914,129,915,129,916,129,916,128,917,128,916,128,917,128,918,128,919,126,920,125,921,125,921,126,922,126,923,126,924,126,924,125,924,124,925,124,926,124,927,124,928,123,929,123,929,122,930,122,931,123,931,124,932,124,931,124,930,124,929,125,928,126,929,126,929,127,929,128,928,128,927,128,927,129,926,129,926,130,925,130,926,130,925,130,924,130,923,130,923,131,922,131,922,132,922,133,922,132,922,133,923,133,924,134,925,134,925,135</Points>\n    <Keys>Korea, Peoples Republic of, PRK, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>925,146,926,145,926,146,925,146</Points>\n    <Keys>Korea, Republic of, KOR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>918,151,918,150,920,150,920,151,919,151,918,151</Points>\n    <Keys>Korea, Republic of, KOR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>920,137,920,136,921,136,923,136,924,136,924,135,925,135,926,136,927,137,927,138,927,139,928,139,928,140,928,141,928,142,928,143,928,142,928,143,928,144,927,145,926,145,925,145,925,146,924,146,925,146,924,146,924,145,924,146,923,146,922,146,923,146,922,146,922,147,922,146,922,147,921,147,921,146,921,147,922,146,921,146,921,147,920,147,919,147,919,148,919,147,918,147,918,146,919,147,919,146,919,147,919,146,918,146,919,146,919,145,918,145,919,145,918,145,919,144,920,144,919,144,920,143,919,143,920,143,920,142,919,142,919,141,919,140,919,141,919,140,918,140,919,141,918,141,918,140,919,140,918,140,919,140,919,139,919,140,919,139,919,140,920,140,921,140,920,140,920,139,920,138,919,138,920,138,919,138,919,137,920,138,920,137</Points>\n    <Keys>Korea, Republic of, KOR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>684,162,684,161,685,161,684,162</Points>\n    <Keys>Kuwait, KWT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>679,163,680,162,681,161,681,160,682,160,683,160,684,161,684,162,683,162,683,163,683,162,684,162,684,163,684,164,685,164,685,165,683,165,682,164,680,163,679,163</Points>\n    <Keys>Kuwait, KWT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>752,124,752,123,753,123,753,122,754,122,755,122,756,122,757,122,758,123,759,123,760,123,760,122,760,121,761,121,762,121,763,121,764,122,765,122,766,122,767,122,768,122,769,122,770,122,771,122,772,122,773,122,774,122,775,122,776,122,777,122,777,123,778,123,779,123,780,123,780,124,779,124,779,125,778,125,777,125,776,126,775,126,775,127,774,127,772,128,771,127,770,127,770,128,769,128,769,129,768,129,767,130,766,129,767,129,766,129,765,129,764,129,764,130,764,129,763,130,762,130,761,130,761,131,761,132,760,132,759,132,758,132,757,132,756,133,756,132,755,132,755,133,755,132,754,132,753,132,752,132,751,132,750,132,749,132,748,132,747,132,747,131,748,131,748,130,750,130,751,130,751,131,751,130,752,130,753,130,754,130,755,130,756,130,755,130,756,129,757,129,758,129,758,128,759,128,758,128,757,128,757,127,756,127,755,127,755,126,754,126,754,127,754,126,754,127,753,127,752,127,752,126,751,126,750,126,751,125,752,125,752,124,753,124,752,124</Points>\n    <Keys>Kyrgyzstan, KGZ, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>843,186,843,187,844,187,845,187,845,186,845,185,844,184,845,183,846,183,846,184,847,184,847,185,848,186,848,185,848,186,848,187,849,187,849,188,850,188,851,189,851,188,852,188,853,188,853,189,854,189,854,190,854,191,853,191,853,192,853,191,852,192,852,191,852,192,852,191,852,192,851,192,851,193,852,193,853,194,854,194,855,194,855,195,855,196,856,196,856,197,857,197,857,198,858,198,858,199,859,199,859,200,859,201,860,201,860,202,861,202,862,202,862,203,861,203,861,204,862,204,863,205,862,205,862,206,862,207,861,207,860,207,860,208,860,207,859,207,858,207,857,207,858,208,858,209,857,209,857,208,856,208,855,208,855,207,856,207,856,206,856,205,856,204,856,203,856,202,855,202,854,202,854,201,854,200,854,199,854,198,853,198,853,197,852,197,852,196,851,196,851,195,850,195,849,195,849,196,849,197,848,196,848,197,847,197,846,196,845,196,845,197,844,197,843,198,842,198,842,197,843,197,843,196,843,195,843,194,844,193,843,193,843,192,842,192,841,192,841,191,841,190,841,189,840,189,840,190,840,189,841,188,841,187,842,187,843,186</Points>\n    <Keys>Laos, LAO, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>612,77,613,77,614,77,614,76,614,77,614,76,615,76,615,77,615,76,616,76,616,77,617,77,618,77,618,78,619,78,620,78,621,78,622,78,623,79,623,80,622,80,623,80,624,80,624,81,624,82,623,82,623,83,622,83,621,83,620,83,619,83,618,83,617,82,616,82,615,82,614,81,613,81,613,82,612,82,611,82,611,81,610,81,609,81,609,82,608,81,607,81,606,81,605,82,604,82,603,82,602,82,603,81,602,81,603,80,604,80,604,79,604,78,605,78,607,77,607,78,608,78,609,78,609,79,610,80,611,80,613,79,613,78,612,77</Points>\n    <Keys>Latvia, LVA, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>647,147,648,147,648,146,649,146,649,147,649,148,648,149,649,149,648,149,647,149,647,150,648,150,647,150,646,151,645,151,645,150,646,150,646,149,646,148,647,147</Points>\n    <Keys>Lebanon, LBN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>621,339,622,339,622,338,623,337,624,337,625,336,626,336,626,337,627,337,627,338,628,339,627,339,627,340,626,341,625,341,624,341,624,342,623,342,622,342,622,341,621,341,621,339</Points>\n    <Keys>Lesotho, LSO, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>509,225,510,225,511,225,511,226,511,227,511,228,512,228,512,229,513,229,513,228,513,227,514,227,514,228,514,229,515,229,514,230,514,231,515,231,515,232,516,232,516,233,517,233,517,234,517,235,517,236,517,237,516,237,515,237,514,236,513,236,511,235,511,234,510,233,509,233,508,232,507,232,507,231,506,230,505,230,505,229,506,229,506,228,507,228,507,227,508,227,508,226,509,226,509,225</Points>\n    <Keys>Liberia, LBR, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>568,160,569,159,570,158,570,156,570,155,571,155,572,154,574,153,574,151,575,151,576,152,577,152,579,152,580,152,581,152,582,152,583,153,585,153,586,154,586,155,586,156,587,156,588,157,590,157,591,157,592,157,593,158,594,158,595,159,596,160,597,160,598,160,599,159,600,158,600,157,599,156,599,155,600,154,601,153,602,152,604,152,605,152,606,152,607,152,609,153,609,154,611,154,613,155,613,154,614,155,615,155,615,156,614,156,614,157,615,158,614,159,614,160,614,161,614,162,614,163,615,167,614,171,614,175,614,179,615,183,615,184,615,189,615,191,613,191,612,190,611,192,604,188,595,183,588,180,585,181,582,183,580,181,575,180,574,178,572,177,571,177,570,177,570,176,570,174,568,172,568,171,569,171,569,170,569,169,569,168,569,167,569,166,569,164,569,162,568,161,567,160,568,160</Points>\n    <Keys>Libya, LBY, NorthAfrica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>568,109,568,109</Points>\n    <Keys>Liechtenstein, LIE, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>608,87,606,87,604,88,601,87,599,87,600,87,601,86,600,86,600,87,600,86,599,86,599,87,598,87,599,87,599,86,601,86,602,85,603,84,603,83,603,84,602,85,601,86,602,86,603,86,603,85,603,84,603,83,603,82,604,82,605,82,606,81,607,81,608,81,609,82,609,81,610,81,611,81,611,82,612,82,613,82,613,81,614,81,615,82,616,82,617,82,618,83,619,83,619,84,619,85,620,85,619,85,618,85,618,86,617,86,617,87,616,87,616,88,617,88,616,88,615,88,614,88,614,89,614,88,613,89,612,89,611,89,610,89,610,88,609,88,609,87,608,87</Points>\n    <Keys>Lithuania, LTU, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>557,102,557,101,557,100,558,100,558,101,559,101,559,102,558,102,557,102</Points>\n    <Keys>Luxembourg, LUX, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>880,184,880,184</Points>\n    <Keys>Macau, MAC, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>601,125,602,125,602,124,603,124,604,124,605,124,606,124,606,123,607,124,608,124,608,125,609,125,608,126,608,127,607,127,606,127,605,127,605,128,604,128,603,128,602,128,602,127,601,127,601,126,601,125</Points>\n    <Keys>Macedonia, MKD, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>681,295,682,294,682,295,682,296,682,295,683,294,683,295,683,294,683,295,684,295,684,294,683,294,683,293,684,293,683,293,684,293,683,293,684,292,683,292,683,291,684,291,684,292,685,292,685,291,686,291,686,290,686,289,686,288,687,287,687,286,688,287,687,287,688,287,688,288,688,289,689,289,689,290,689,291,690,291,690,294,690,295,691,296,691,297,690,298,689,297,688,297,689,298,689,299,689,300,689,301,688,301,688,302,688,304,688,306,687,308,686,310,685,312,685,313,685,314,684,316,683,318,682,321,682,322,682,323,681,323,681,324,681,325,680,326,679,326,677,326,676,327,675,327,674,327,674,326,673,326,672,326,673,326,672,326,671,324,670,323,670,322,670,321,671,321,670,320,670,319,669,318,669,317,669,316,670,316,670,315,670,314,671,314,671,313,672,313,672,312,672,311,673,310,673,309,672,308,672,307,672,306,672,304,671,303,672,302,673,301,673,300,673,299,674,299,675,298,675,299,676,299,676,298,676,299,676,298,677,298,678,298,679,298,678,298,679,298,678,298,678,297,679,297,680,296,681,297,680,297,681,297,681,296,681,295,682,295,681,295</Points>\n    <Keys>Madagascar, MDG, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>641,280,641,279,642,279,643,280,643,281,643,282,644,283,643,284,644,284,644,285,643,285,643,286,643,287,643,288,643,289,643,291,644,291,645,292,647,294,647,295,647,296,647,297,647,299,646,299,645,299,645,300,645,301,645,302,645,301,644,301,644,300,643,300,643,299,642,298,643,298,643,297,643,296,643,295,643,294,642,294,641,294,640,294,639,293,639,292,639,293,638,292,638,291,639,290,638,290,639,289,638,289,639,288,640,288,640,287,640,288,640,287,639,287,639,286,639,285,640,284,639,283,640,283,641,282,640,282,640,281,639,281,640,280,639,280,639,279,638,279,639,279,640,279,641,279,641,280</Points>\n    <Keys>Malawi, MWI, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>891,229,891,228,891,229</Points>\n    <Keys>Malaysia, MYS, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>839,232,838,231,839,231,839,232</Points>\n    <Keys>Malaysia, MYS, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>840,231,840,230,841,231,842,231,842,232,843,232,843,233,842,233,843,233,843,234,843,233,844,233,845,233,846,232,847,232,847,233,849,234,849,235,850,236,850,238,850,239,850,240,850,242,850,243,851,243,851,244,852,244,852,245,852,246,851,246,852,246,851,246,850,246,850,247,850,246,849,246,848,245,847,244,846,244,845,243,844,242,843,242,844,242,844,241,843,241,843,240,842,239,842,238,841,238,841,237,841,236,841,237,841,236,841,235,841,234,841,233,840,232,840,231</Points>\n    <Keys>Malaysia, MYS, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>885,236,885,237,886,238,885,237,885,236,886,236,886,235,886,234,887,234,887,233,888,233,888,232,888,231,889,230,890,230,890,229,890,230,890,231,891,230,891,231,892,231,893,231,893,232,892,232,893,232,893,233,892,233,893,233,894,232,894,233,893,233,894,233,895,233,895,234,896,234,897,234,897,235,896,235,895,236,895,235,894,236,895,237,893,238,892,237,892,238,891,237,890,238,890,237,890,238,889,237,889,238,889,237,888,237,888,238,887,237,887,238,886,239,886,240,886,241,885,242,885,241,885,242,885,243,884,243,884,244,884,245,883,246,882,246,881,246,881,247,880,247,879,246,878,246,879,246,877,246,876,246,876,247,875,247,875,248,874,247,874,248,874,247,873,247,872,247,872,248,871,248,870,247,869,246,869,245,868,245,868,244,868,245,869,245,870,245,871,245,871,246,872,246,873,246,873,247,874,246,873,246,873,245,873,246,873,245,873,244,874,244,873,244,873,243,874,243,874,242,875,242,876,242,878,241,879,241,879,240,880,239,881,239,881,238,881,237,882,237,882,238,883,238,884,238,884,237,884,236,885,236</Points>\n    <Keys>Malaysia, MYS, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,233,760,233</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,238,760,238</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,233,758,233</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,237,760,237</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,235,760,235</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,240,758,240</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,233,760,233</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,233,760,233</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,233,758,233</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,238,758,238</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,234,760,234</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,235,759,235</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,232,759,232</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,232,759,232</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,232,759,232</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,232,759,232</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,232,759,232</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,232,759,232</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,231,759,231</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,231,758,231</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,231,759,231</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,238,760,238</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,231,759,231</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,231,759,230,759,231</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,238,760,238</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,230,759,230</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,242,758,242</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,230,759,230</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,230,759,230</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,230,758,230</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,230,759,230</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,230,759,230</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,239,758,238,758,239</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,229,758,229</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,229,758,229</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,233,758,233</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,233,760,233</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,239,760,239</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,243,759,243</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,238,760,238</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,239,760,239</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,239,760,239</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,243,760,243</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,243,760,243</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,239,760,239</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,240,758,240</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,233,758,233</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,244,758,244</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,244,758,244</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,244,759,244</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,242,758,242</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,233,758,233</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>761,240,761,240</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,240,760,240</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,244,759,244</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,245,759,245</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,253,759,253</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,241,760,241</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,253,759,253</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,253,759,252,759,253</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,242,760,242</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,244,760,244</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,244,760,244</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,244,760,244</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,245,760,245</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,244,760,244</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,242,760,242</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,245,759,245</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,245,760,245</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,249,758,249</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,249,760,249</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,252,759,252</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,245,760,245</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,239,758,239</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,250,758,250</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,245,760,245</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,245,759,245</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,245,760,245</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,250,759,250</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,252,759,252</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,252,759,252</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,241,758,241</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,242,760,242</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,251,760,251</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,249,760,249</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,242,760,242</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,249,758,249</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,250,760,250</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,242,759,242</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,248,759,248</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,248,759,248</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,242,760,242</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,248,760,248</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,242,760,242</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,250,759,250</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,250,759,250</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>761,237,761,237</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,240,758,240</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,236,760,236</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,235,759,235</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>761,237,761,237</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,235,760,235</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,237,760,237</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,235,759,235</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,236,758,236</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,242,759,242</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,237,760,237</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,234,760,234,759,234</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,237,760,237</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,234,760,234</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,234,760,234</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>520,176,525,175,530,179,535,182,539,185,543,187,543,188,544,189,545,190,546,190,547,190,548,191,549,191,549,192,549,193,549,194,552,193,552,195,552,200,552,201,552,202,551,202,552,203,551,203,551,204,550,204,549,204,543,205,542,206,541,205,541,206,540,205,540,206,539,205,538,205,537,205,536,206,534,207,533,208,532,208,531,208,531,209,531,210,530,210,530,209,530,211,529,211,528,210,527,210,527,211,526,211,527,212,526,212,526,213,526,214,526,213,526,214,525,214,524,215,523,215,524,215,524,216,524,217,523,217,523,218,523,219,522,219,522,220,521,220,521,219,521,218,520,218,520,219,520,218,519,219,520,219,519,219,519,220,518,220,517,220,517,219,516,219,516,220,516,219,515,219,515,217,514,217,514,218,513,218,514,217,514,216,513,216,513,214,513,213,512,213,511,213,512,213,511,214,510,214,509,214,508,214,508,215,507,214,506,214,506,215,505,214,505,213,505,212,505,211,505,210,504,210,504,211,504,210,503,210,503,209,504,209,503,208,504,208,503,208,503,207,503,206,504,206,504,205,504,204,505,204,506,204,507,205,507,204,509,204,510,204,511,204,511,203,512,204,511,204,517,204,522,204,523,204,523,202,523,201,522,196,522,191,521,186,520,181,520,176</Points>\n    <Keys>Mali, MLI, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>582,142,583,142,582,142</Points>\n    <Keys>Malta, MLT, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>583,143,582,143,583,143,582,143,583,143</Points>\n    <Keys>Malta, MLT, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>357,207,356,207,357,207,356,207,356,206,357,206,357,207</Points>\n    <Keys>Martinique, MTQ, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>513,172,513,169,519,172,524,175,525,175,520,176,520,181,521,186,522,191,522,196,523,201,523,202,523,204,522,204,517,204,511,204,512,204,511,203,511,204,510,204,509,204,507,204,507,205,506,204,505,204,504,204,504,205,504,206,503,206,502,206,502,205,501,205,501,204,500,204,499,202,498,202,497,201,496,201,495,201,495,200,494,201,494,200,494,201,493,201,492,201,491,201,490,202,490,200,491,199,491,198,491,197,491,195,491,194,491,193,490,193,490,192,491,192,490,192,491,191,491,190,490,188,490,189,489,188,489,187,488,187,489,188,488,188,489,186,494,186,499,186,501,186,500,183,500,182,501,181,502,181,503,180,503,173,513,173,513,172</Points>\n    <Keys>Mauritania, MRT, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>712,312,711,312,712,312,712,311,713,311,713,312,712,312</Points>\n    <Keys>Mauritius, MUS, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>200,163,199,163,199,162,199,163,200,163</Points>\n    <Keys>Mexico, MEX, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>279,190,278,190,278,189,279,189,279,190</Points>\n    <Keys>Mexico, MEX, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>194,166,193,166,194,166,194,165,194,166</Points>\n    <Keys>Mexico, MEX, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>202,164,202,163,203,163,203,164,202,164</Points>\n    <Keys>Mexico, MEX, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>188,153,194,152,195,152,195,153,201,155,206,157,215,157,215,155,220,155,221,156,222,157,223,158,224,158,225,159,225,160,225,161,226,162,228,163,229,163,230,164,230,163,231,163,231,162,231,161,232,161,233,161,234,161,235,161,235,162,236,162,237,163,238,164,238,165,239,165,239,166,240,167,240,168,241,168,241,169,241,170,242,170,242,171,243,171,244,172,245,172,246,172,247,172,247,173,248,173,248,174,247,175,247,177,246,179,246,181,246,182,246,183,246,182,246,183,246,185,247,185,247,186,248,186,247,187,247,186,247,185,246,184,247,186,248,188,248,189,249,190,250,191,251,192,251,193,252,193,252,194,253,194,253,195,253,194,252,194,253,194,254,194,254,195,255,195,256,196,258,196,259,195,260,195,261,195,263,194,264,194,264,195,263,195,264,195,265,195,266,195,266,194,265,194,267,193,267,192,267,191,268,191,268,190,268,189,268,188,268,187,269,187,271,187,273,186,274,186,275,186,276,186,277,186,278,186,277,186,278,186,279,186,279,187,279,188,278,189,277,190,277,191,276,191,276,192,277,192,276,193,277,193,277,194,276,194,276,195,276,196,276,195,275,195,275,194,275,195,274,195,274,196,273,196,273,197,272,196,272,197,271,197,270,197,269,197,268,197,267,197,267,198,267,199,266,199,265,199,266,199,266,200,267,200,268,201,268,202,267,202,266,202,265,202,264,202,264,203,263,204,263,205,263,206,263,207,262,206,261,205,260,204,259,203,258,202,257,202,256,202,257,202,258,202,257,202,256,202,255,202,256,202,256,201,255,202,255,201,254,202,255,202,254,202,253,203,252,203,251,203,250,204,248,203,246,203,246,202,245,202,244,202,243,201,241,200,240,200,238,199,236,199,236,198,235,198,234,197,233,197,231,196,230,196,229,196,229,195,228,195,228,194,227,193,226,193,225,193,224,192,224,191,223,191,223,190,222,189,223,189,224,189,224,188,223,188,224,187,224,186,223,186,223,184,222,183,222,182,221,182,220,181,220,180,219,179,218,178,216,177,217,177,216,177,215,176,216,176,215,176,215,175,215,176,215,175,215,176,215,175,214,175,214,174,213,174,214,174,213,174,212,174,213,174,213,173,212,174,212,173,212,174,211,174,211,173,212,174,212,173,211,173,211,172,212,172,212,171,212,172,212,171,212,172,212,171,211,170,210,170,210,169,209,169,208,169,208,168,208,167,207,167,206,167,205,166,205,165,204,165,204,164,203,163,202,163,202,162,202,161,201,161,201,160,201,159,200,158,200,157,200,158,200,157,199,156,198,156,197,156,196,155,195,155,194,155,195,155,195,156,195,157,195,158,195,159,196,159,196,160,196,161,197,161,198,162,199,163,199,164,200,164,200,165,201,165,201,166,201,167,202,168,203,169,204,169,203,169,204,170,204,171,204,170,205,170,205,171,205,172,206,172,205,173,206,174,207,175,207,176,207,177,208,178,209,178,208,178,209,178,209,177,209,178,210,178,210,179,210,180,211,180,211,181,210,182,209,182,209,181,208,180,208,179,207,178,206,178,205,177,204,177,204,176,203,176,203,175,203,176,203,175,203,174,203,173,203,172,202,172,201,172,200,171,200,170,199,170,198,170,198,169,198,170,197,169,196,169,196,168,195,168,195,167,194,167,195,167,196,167,197,167,198,167,197,167,197,166,197,165,197,164,196,164,195,163,195,162,194,162,193,162,192,161,192,160,192,159,191,159,191,158,191,157,190,156,189,156,190,156,189,155,190,155,189,155,189,154,188,154,188,153</Points>\n    <Keys>Mexico, MEX, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>619,106,620,106,620,105,620,106,620,105,621,105,622,105,623,105,623,106,624,106,625,106,624,106,625,106,626,106,626,107,627,107,627,108,628,108,628,109,628,108,628,109,628,110,629,110,629,111,630,111,629,111,628,111,629,111,628,111,627,111,626,111,626,112,627,112,626,112,626,113,625,113,625,114,624,114,624,113,624,112,624,111,624,110,623,109,622,108,621,108,621,107,621,106,620,106,619,106</Points>\n    <Keys>Moldova, MDA, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>562,119,562,119</Points>\n    <Keys>Monaco, MCO, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>836,94,837,94,838,95,839,95,840,95,842,95,844,96,846,96,846,97,846,98,847,98,846,99,847,99,849,100,850,100,851,100,852,100,853,100,854,99,855,99,857,99,858,99,858,100,859,99,860,100,861,100,863,101,865,102,868,103,870,103,871,103,872,103,874,102,876,102,877,102,878,102,879,102,879,101,880,100,882,100,883,100,884,100,885,100,886,101,887,101,888,100,889,101,890,101,888,104,887,105,887,106,886,106,886,107,887,107,888,107,889,107,890,107,891,107,892,108,892,107,893,107,893,106,895,107,896,107,897,108,898,108,897,108,898,109,899,109,899,110,899,111,898,111,897,110,896,110,895,110,894,110,893,111,892,111,891,111,890,111,889,112,888,113,887,114,884,114,883,114,883,115,882,116,881,116,880,116,879,116,877,116,877,115,875,115,874,116,874,117,874,118,875,119,874,120,872,121,871,122,870,122,870,123,869,123,868,123,867,123,866,123,865,123,862,123,861,123,861,124,860,124,858,124,856,125,855,125,855,126,854,126,853,126,853,125,852,125,851,125,850,125,848,124,847,124,846,124,845,123,842,122,840,122,840,123,838,123,835,123,831,122,829,122,827,121,827,120,826,119,826,118,825,118,824,117,823,117,822,117,822,116,820,116,819,115,817,115,816,115,815,115,814,115,813,115,812,115,812,114,812,113,813,112,812,112,813,111,813,110,812,110,811,109,811,108,811,107,810,107,809,107,808,106,807,107,806,106,805,106,805,105,803,105,804,105,804,104,803,104,803,103,804,103,804,102,805,102,806,102,807,102,808,102,809,101,808,101,809,101,810,101,810,100,812,100,812,99,813,99,814,99,815,98,816,98,817,98,818,98,818,99,819,99,820,99,821,99,822,99,823,100,824,100,825,101,826,101,827,100,827,101,828,100,828,101,829,101,830,101,831,101,832,101,833,101,834,100,834,99,833,98,834,98,833,98,833,97,834,96,834,95,835,95,836,95,836,94</Points>\n    <Keys>Mongolia, MNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>533,145,534,146,534,147,535,148,534,149,535,150,535,151,535,152,536,153,536,154,535,154,533,154,531,154,531,155,529,155,528,155,528,156,528,157,529,157,529,158,527,158,526,159,525,159,524,160,523,161,521,161,520,161,520,162,518,162,517,162,515,163,514,164,513,164,513,167,510,168,500,168,500,167,501,167,503,166,505,166,505,165,506,164,508,164,509,163,509,162,510,161,511,160,511,159,510,159,510,158,510,156,510,155,511,154,512,154,512,153,513,152,514,151,515,150,517,150,517,149,518,149,519,149,519,148,520,146,521,145,522,143,523,143,524,144,525,145,526,145,528,145,529,145,530,145,531,144,531,145,532,145,533,145</Points>\n    <Keys>Morocco, MAR, NorthAfrica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>644,285,646,285,647,285,648,285,648,286,649,286,650,286,650,285,651,285,651,286,652,286,653,285,653,284,654,284,655,285,656,284,657,284,658,283,659,283,660,283,660,282,661,282,661,283,661,284,661,285,661,286,661,287,661,288,661,289,661,290,661,289,661,290,661,291,661,292,661,293,662,293,662,294,661,294,662,294,662,295,661,295,662,295,661,295,662,296,661,296,662,296,661,297,661,298,660,299,659,299,659,300,657,301,656,302,655,302,654,302,653,303,652,303,651,304,650,305,650,304,650,305,649,306,649,307,648,307,647,308,646,309,645,309,644,310,643,309,644,310,644,311,643,311,644,311,644,312,643,312,644,312,643,312,644,312,644,313,645,313,645,314,645,315,646,317,645,318,646,318,646,317,646,318,646,319,646,320,646,321,646,322,646,323,645,324,643,325,641,326,640,326,639,326,639,327,638,327,638,328,637,328,637,329,638,329,638,331,636,331,636,330,636,329,635,328,636,327,635,327,636,326,636,324,635,323,635,322,635,321,634,321,634,320,633,318,634,318,637,314,637,315,637,314,637,313,637,312,638,311,639,311,639,310,638,310,638,309,638,310,638,309,638,308,638,307,638,306,639,306,638,305,639,305,638,305,638,304,639,304,639,303,638,303,639,303,638,302,638,301,638,300,637,300,636,300,635,300,635,299,634,299,633,299,632,299,631,299,631,297,631,296,630,296,630,295,632,295,634,294,636,294,639,293,640,294,641,294,642,294,643,294,643,295,643,296,643,297,643,298,642,298,643,299,643,300,644,300,644,301,645,301,645,302,645,301,645,300,645,299,646,299,647,299,647,297,647,296,647,295,647,294,645,292,644,291,643,291,643,289,643,288,643,287,643,286,643,285,644,285</Points>\n    <Keys>Mozambique, MOZ, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>835,216,835,215,835,216</Points>\n    <Keys>Myanmar (Burma), MMR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>821,194,820,194,821,194</Points>\n    <Keys>Myanmar (Burma), MMR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>834,214,834,213,834,212,835,213,834,214</Points>\n    <Keys>Myanmar (Burma), MMR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>821,193,821,192,820,192,821,192,821,193</Points>\n    <Keys>Myanmar (Burma), MMR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>823,203,823,202,824,202,823,202,823,203</Points>\n    <Keys>Myanmar (Burma), MMR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>821,193,821,194,820,192,821,193,821,192,821,191,820,191,821,191,820,191,820,190,819,190,819,191,818,190,819,190,818,190,819,189,819,190,818,190,818,189,818,190,817,189,817,188,816,187,816,186,817,186,817,187,818,187,817,186,817,185,818,184,818,185,818,184,818,185,819,184,819,183,819,182,819,181,820,181,820,180,820,179,819,179,820,178,820,179,820,178,822,179,822,178,823,177,823,176,824,175,823,175,823,174,824,174,825,173,825,172,825,171,825,170,825,171,826,170,827,170,827,169,828,169,829,169,829,168,830,168,830,169,831,169,830,168,831,167,832,167,832,166,831,166,832,166,832,165,833,165,834,166,834,167,834,168,835,168,835,167,835,168,836,168,836,169,836,170,836,171,835,172,836,172,835,172,835,173,836,173,835,173,835,174,834,174,834,175,833,175,833,176,832,176,832,177,833,177,832,177,832,178,833,178,832,179,834,178,835,178,836,178,836,179,836,180,836,181,837,181,838,181,838,182,837,182,838,183,837,183,837,184,838,184,839,184,839,185,840,185,840,186,841,186,842,186,842,185,843,185,843,186,842,187,841,187,841,188,840,189,839,189,839,190,838,190,838,189,838,190,837,190,837,191,836,191,835,191,834,191,834,192,833,192,833,193,833,194,833,195,832,195,832,196,833,197,833,198,834,198,835,199,835,200,835,201,836,202,836,201,836,202,835,202,835,203,835,204,835,205,835,204,835,205,834,205,834,206,835,207,836,208,837,209,837,210,837,211,837,212,838,213,838,214,838,215,838,216,837,218,836,218,836,219,835,221,835,220,835,219,835,218,836,218,836,217,835,217,836,217,836,216,836,215,835,215,836,215,835,215,836,215,836,214,835,214,836,214,835,214,836,214,836,213,835,213,836,213,835,213,836,212,835,212,835,211,835,210,834,209,834,208,834,209,834,210,834,209,834,208,833,206,833,207,834,207,833,206,833,205,833,204,833,203,832,202,832,201,833,201,832,201,831,200,831,199,830,198,830,199,830,200,829,201,828,201,828,200,828,201,829,201,828,201,828,202,828,201,828,202,827,202,827,203,826,203,825,203,826,202,825,203,825,202,825,203,824,203,824,202,824,203,823,203,824,202,823,203,824,202,824,201,823,202,822,203,822,202,822,201,823,201,823,200,823,199,823,198,823,197,823,196,822,196,823,196,822,195,822,194,822,193,822,192,822,193,821,193</Points>\n    <Keys>Myanmar (Burma), MMR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>583,320,583,319,583,318,582,317,581,316,581,315,580,314,579,312,579,311,579,310,578,309,577,308,577,307,576,306,575,305,575,304,575,302,576,302,577,302,578,302,580,301,580,302,581,303,582,303,586,303,591,303,595,303,596,304,598,304,599,304,600,304,601,304,602,305,602,304,603,304,604,305,608,304,610,303,612,303,614,303,615,303,615,304,614,304,613,305,613,304,611,305,610,306,610,305,609,304,604,305,602,305,602,308,602,312,602,316,599,317,599,321,600,325,600,329,599,333,599,336,598,336,598,337,597,337,596,337,595,337,594,337,593,337,592,337,592,336,591,336,592,336,592,335,591,335,590,335,590,336,589,336,588,336,587,335,587,334,586,334,585,332,585,331,585,330,585,331,585,330,584,330,584,329,584,328,584,327,584,326,584,325,583,324,583,323,583,321,583,320</Points>\n    <Keys>Namibia, NAM, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>782,160,783,160,784,160,784,159,784,160,784,159,786,159,786,160,787,161,788,161,789,162,790,162,790,163,791,163,792,163,792,164,794,165,795,165,795,166,796,166,797,165,797,166,797,167,798,167,798,166,799,167,799,166,800,166,800,167,801,167,802,167,803,167,804,167,804,168,804,169,803,169,804,170,804,171,803,171,802,171,801,171,800,171,798,171,797,171,797,170,796,170,795,170,794,170,794,169,793,169,794,169,793,168,792,168,791,168,790,168,789,168,788,168,788,167,787,167,786,167,785,167,784,166,783,166,783,165,782,165,781,164,781,165,780,164,780,163,780,162,781,162,781,161,782,160</Points>\n    <Keys>Nepal, NPL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>552,96,552,97,551,97,550,97,550,96,551,96,552,96</Points>\n    <Keys>Netherlands, NLD, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>557,97,556,97,555,97,555,96,554,96,553,96,552,96,551,96,550,96,551,96,552,96,551,96,552,96,551,96,551,95,552,95,553,94,553,93,554,92,555,92,556,91,557,91,557,90,558,90,560,90,561,91,561,92,561,93,560,93,561,93,561,94,560,94,560,95,559,95,558,95,557,95,558,95,558,96,558,97,557,97,557,98,558,98,557,98,558,98,557,98,557,97</Points>\n    <Keys>Netherlands, NLD, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1044,315,1043,315,1044,315</Points>\n    <Keys>New Caledonia, NCL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1042,314,1041,314,1041,313,1042,313,1042,314</Points>\n    <Keys>New Caledonia, NCL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1040,318,1040,317,1040,318,1039,317,1038,317,1038,316,1037,316,1036,316,1036,315,1035,315,1034,314,1034,315,1034,314,1033,313,1032,312,1032,311,1031,311,1032,311,1031,311,1032,311,1033,311,1034,312,1035,313,1036,313,1036,314,1037,314,1037,315,1038,315,1039,316,1040,316,1040,317,1041,317,1040,318</Points>\n    <Keys>New Caledonia, NCL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>10,383,10,382,9,382,10,382,11,382,10,382,11,383,10,383</Points>\n    <Keys>New Zealand, NZL, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1038,403,1037,403,1038,403,1037,403,1038,403,1038,402,1038,403</Points>\n    <Keys>New Zealand, NZL, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1064,365,1064,364,1064,363,1064,362,1064,363,1063,362,1064,362,1064,361,1063,361,1063,362,1063,361,1062,360,1063,360,1062,360,1062,359,1063,359,1062,359,1063,359,1062,359,1061,358,1062,359,1062,360,1062,359,1060,358,1060,357,1060,356,1060,357,1059,357,1059,356,1059,357,1059,356,1059,355,1058,354,1059,354,1058,354,1059,354,1059,355,1059,356,1060,355,1060,356,1060,355,1061,356,1062,356,1062,357,1062,356,1063,356,1063,357,1063,358,1063,359,1064,359,1064,360,1064,361,1063,361,1064,361,1063,361,1064,361,1065,361,1065,362,1066,362,1066,361,1066,360,1066,361,1067,361,1067,362,1067,363,1068,363,1067,363,1068,364,1068,363,1068,364,1068,363,1068,364,1071,364,1071,365,1071,364,1072,364,1073,364,1074,363,1073,363,1074,363,1075,363,1075,364,1075,365,1074,365,1075,366,1074,367,1073,367,1073,368,1072,368,1071,368,1070,369,1070,370,1070,369,1071,369,1071,370,1070,371,1069,372,1068,373,1067,374,1066,375,1065,375,1064,375,1064,374,1064,375,1063,374,1064,374,1064,373,1065,373,1065,371,1066,371,1065,371,1064,370,1063,370,1063,369,1062,369,1061,369,1061,368,1062,367,1063,367,1064,365</Points>\n    <Keys>New Zealand, NZL, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1042,392,1043,392,1043,391,1044,391,1043,391,1044,391,1044,392,1043,392,1042,392,1043,392,1042,392</Points>\n    <Keys>New Zealand, NZL, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1048,382,1048,381,1049,381,1050,380,1050,381,1050,380,1051,380,1050,380,1051,380,1052,379,1052,380,1052,379,1053,379,1052,379,1053,379,1052,379,1053,379,1052,379,1053,378,1054,378,1053,378,1053,377,1054,377,1054,376,1055,376,1055,375,1056,375,1056,374,1056,373,1057,373,1057,372,1058,372,1057,372,1058,373,1059,373,1059,374,1060,374,1061,374,1061,373,1062,373,1061,373,1061,374,1062,374,1061,374,1062,374,1061,374,1062,373,1062,374,1062,373,1062,374,1061,374,1062,374,1062,375,1062,376,1062,375,1062,376,1061,377,1061,378,1060,378,1060,379,1059,379,1059,380,1058,380,1057,380,1056,380,1057,380,1058,380,1058,381,1057,381,1056,381,1055,380,1056,381,1057,381,1058,381,1058,382,1058,381,1058,382,1059,381,1059,382,1058,382,1057,382,1056,382,1054,381,1054,380,1053,380,1054,380,1053,380,1052,380,1054,380,1054,381,1056,382,1055,383,1055,382,1055,383,1054,383,1053,383,1052,383,1053,383,1054,383,1053,384,1053,385,1052,385,1051,385,1053,385,1052,386,1052,387,1051,388,1052,388,1051,388,1052,388,1051,388,1050,389,1049,390,1048,390,1047,390,1047,391,1046,390,1045,390,1044,390,1045,390,1044,390,1043,390,1043,389,1042,389,1040,389,1040,388,1040,389,1039,389,1040,388,1039,389,1039,388,1040,388,1041,388,1040,388,1040,387,1041,387,1040,387,1040,386,1041,387,1041,386,1041,387,1041,386,1040,386,1041,386,1041,385,1041,386,1041,385,1042,385,1043,385,1042,385,1043,384,1043,385,1043,384,1044,383,1045,383,1045,382,1046,383,1047,382,1048,381,1048,382</Points>\n    <Keys>New Zealand, NZL, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>282,209,283,208,284,208,284,207,284,206,285,206,286,207,287,206,287,207,287,206,288,206,289,206,289,205,289,206,289,205,290,206,289,206,290,206,290,207,290,208,289,208,289,209,289,210,289,211,289,212,289,213,289,212,289,213,288,213,289,213,289,214,288,215,288,214,288,215,288,216,288,217,288,218,289,218,288,218,287,218,286,218,285,217,285,218,284,217,283,217,282,217,281,216,280,215,279,214,278,213,277,212,276,212,277,212,277,211,277,212,278,212,278,211,279,211,279,210,279,209,280,209,281,209,281,208,282,209</Points>\n    <Keys>Nicaragua, NIC, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>575,180,580,181,582,183,585,181,585,185,585,186,586,188,587,189,587,191,586,195,586,198,586,200,583,203,581,205,581,206,580,207,581,207,580,207,580,209,579,209,579,210,578,210,578,211,577,211,576,211,575,211,574,210,573,210,572,210,570,211,569,211,568,212,566,212,565,212,565,211,564,211,563,210,562,211,561,211,561,212,560,212,560,211,560,210,559,210,558,209,558,210,556,209,555,209,554,209,553,209,552,210,552,212,551,212,550,213,551,215,550,215,551,215,550,215,549,215,549,214,548,213,548,214,547,214,547,215,546,213,546,212,545,212,545,213,544,213,543,211,542,211,542,210,543,210,543,211,543,210,542,210,542,209,541,209,541,208,540,207,540,206,540,205,541,206,541,205,542,206,543,205,549,204,550,204,551,204,551,203,552,203,551,202,552,202,552,201,552,200,552,195,552,193,557,192,562,188,566,185,571,183,575,180</Points>\n    <Keys>Niger, NER, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>580,209,581,210,581,211,582,211,582,213,583,213,583,214,584,214,583,214,583,215,583,216,582,217,581,217,580,218,580,220,579,220,579,221,579,222,578,222,578,223,578,224,578,225,577,225,576,225,576,227,576,228,575,228,575,229,574,230,574,231,573,231,573,230,572,230,571,229,571,230,570,230,570,229,569,230,569,231,568,231,568,232,567,232,567,233,566,233,566,234,566,235,565,236,564,236,565,237,564,237,563,237,562,237,562,236,562,237,561,237,561,236,561,237,560,236,560,237,561,237,560,237,560,236,560,237,560,238,559,238,559,237,559,238,558,238,558,237,558,238,558,237,558,238,557,238,557,237,556,237,556,236,556,235,556,234,555,234,556,234,555,234,556,233,555,234,555,233,554,232,553,232,553,231,552,231,550,231,551,231,550,231,548,231,548,230,548,229,548,228,548,227,548,226,548,225,548,223,549,223,549,222,550,221,549,221,550,221,551,220,550,220,550,219,551,219,551,218,551,217,550,216,550,215,551,215,550,215,551,215,550,213,551,212,552,212,552,210,553,209,554,209,555,209,556,209,558,210,558,209,559,210,560,210,560,211,560,212,561,212,561,211,562,211,563,210,564,211,565,211,565,212,566,212,568,212,569,211,570,211,572,210,573,210,574,210,575,211,576,211,577,211,578,211,578,210,579,210,579,209,580,209</Points>\n    <Keys>Nigeria, NGA, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>974,211,973,210,974,210,974,211</Points>\n    <Keys>Northern Mariana Islands, MNP, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>586,44,586,43,587,43,588,43,587,43,586,44,586,43,586,44</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>599,40,598,40,599,40,600,40,599,40</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>608,40,607,40,607,39,608,39,609,40,608,40</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>564,60,564,59,566,59,564,60</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>591,43,590,43,591,43,590,43,591,43,590,43,591,43,591,42,590,42,591,42,592,42,591,42,592,42,591,42,592,42,591,42,592,42,593,42,592,42,593,42,594,42,593,42,594,42,593,43,594,43,593,43,592,43,591,43</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>580,46,582,46,581,46,580,46</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>597,41,596,41,596,40,597,40,598,41,598,40,598,41,598,40,599,41,598,41,597,41</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>601,40,602,40,601,40</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>616,38,616,37,615,37,616,37,617,37,616,37,617,37,618,37,617,37,618,38,618,37,617,38,616,38</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>606,39,605,39,606,39,607,39,607,38,607,39,608,39,608,38,608,39,609,38,610,38,609,38,610,38,609,38,609,39,608,39,609,39,608,39,607,39,606,39</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>609,40,609,39,608,39,609,39,610,39,609,40</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>564,60,565,60,566,60,565,60,566,60,567,60,566,60,564,60</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>611,39,610,39,611,39,610,38,611,38,612,38,612,39,611,39</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>564,61,563,60,564,60,564,61</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>576,55,576,54,577,54,576,55</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>582,46,583,46,583,45,584,45,585,45,584,46,583,46,584,46,583,46,582,46</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>584,46,585,46,585,45,586,45,585,45,586,45,586,44,587,44,586,44,587,44,587,45,588,45,588,44,589,44,589,45,588,45,587,45,586,46,586,45,586,46,586,45,584,46</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>556,69,555,69,557,68,557,69,556,69</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>594,42,593,42,594,42,595,42,594,42,594,41,595,41,596,41,595,41,596,41,597,41,596,41,596,42,594,42</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>585,45,584,45,585,44,584,44,585,44,584,44,583,45,583,44,584,44,585,44,585,43,585,44,586,44,585,44,586,44,585,45</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>624,40,624,39,625,39,625,38,626,38,627,38,628,38,627,38,628,38,629,38,629,39,629,38,630,38,630,39,631,39,630,39,631,39,632,39,633,39,633,40,631,40,630,40,629,40,626,40,625,40,626,40,625,40,626,40,629,41,628,41,629,41,628,41,628,42,628,41,630,41,629,41,630,41,631,41,631,42,631,41,632,41,632,42,631,42,630,41,630,42,627,43,626,43,627,42,627,41,625,41,624,41,624,40</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>572,59,573,59,572,59,570,60,569,60,569,59,570,59,568,60,568,59,569,59,568,59,570,59,569,59,570,59,569,59,569,58,570,58,571,58,570,58,571,58,571,57,572,57,573,57,574,57,573,57,573,58,574,57,575,57,574,57,574,56,575,56,574,56,576,56,575,56,574,56,573,56,574,56,573,56,574,56,575,56,573,56,574,56,575,56,575,55,576,55,576,56,576,55,577,55,578,55,577,55,578,55,577,55,576,55,577,55,577,54,577,55,578,55,577,54,578,54,577,54,577,53,577,54,578,54,577,54,577,53,578,53,577,53,578,53,579,53,578,53,579,52,578,52,579,52,580,52,581,52,580,52,581,52,582,52,582,51,581,52,580,52,579,52,580,52,579,51,579,52,579,51,578,51,579,51,580,51,581,51,580,51,579,51,580,51,579,51,580,51,579,50,580,50,581,50,580,50,581,50,580,50,581,50,580,50,581,50,582,50,582,49,582,50,582,49,583,49,582,49,583,49,584,49,583,49,584,49,585,49,584,49,585,49,586,49,585,49,584,49,583,49,584,49,583,49,582,49,583,48,584,48,585,48,584,48,585,48,584,48,585,48,584,48,585,48,586,48,586,49,587,49,586,48,587,48,586,48,585,48,586,48,585,48,585,47,586,47,587,47,586,47,585,47,584,48,585,47,584,47,585,47,584,47,585,47,586,47,587,47,587,46,586,46,586,47,585,47,585,46,586,46,587,46,586,46,587,46,588,46,588,47,589,47,588,47,588,46,589,47,588,47,589,46,589,47,589,46,590,46,588,46,589,46,588,46,589,46,588,46,589,46,590,46,589,46,588,46,589,45,590,45,590,46,591,45,591,46,592,46,591,46,591,45,592,45,593,45,592,45,591,45,590,45,589,45,590,44,591,45,591,44,592,45,593,45,592,44,591,44,592,44,593,44,592,44,593,44,592,44,593,43,592,43,594,43,593,43,594,43,594,42,595,42,595,43,595,42,596,43,595,42,596,42,597,42,598,42,598,43,597,43,598,43,598,42,597,42,596,42,597,42,596,42,597,41,598,41,599,41,599,42,598,42,599,42,600,42,599,42,599,41,600,41,601,41,600,42,601,42,600,42,599,42,599,43,600,43,600,42,601,42,602,42,601,42,601,41,602,41,603,41,602,41,603,41,602,41,603,41,603,40,604,40,606,41,605,41,606,41,605,41,606,41,606,40,605,40,606,40,605,40,604,40,603,40,604,40,605,40,606,40,605,40,606,40,607,40,606,40,607,40,608,40,607,40,609,40,608,40,609,40,609,41,610,40,609,40,610,40,609,40,610,40,609,40,610,40,610,39,611,39,612,39,613,39,612,39,613,38,613,39,614,39,614,38,612,38,613,38,614,38,613,38,614,38,615,38,614,38,615,38,616,38,617,38,616,38,615,39,615,40,614,40,615,40,616,40,616,39,618,39,618,38,619,38,620,38,619,38,619,39,620,39,621,39,620,39,621,39,621,38,622,38,621,38,622,38,621,38,622,38,621,37,622,37,622,38,622,37,623,37,624,37,625,38,624,38,623,38,624,38,623,38,622,39,623,39,624,38,624,39,623,39,624,39,625,39,624,39,624,40,623,40,622,40,621,41,620,41,619,41,617,41,617,42,617,43,616,44,615,44,615,45,614,45,614,44,612,44,611,44,609,45,609,44,607,44,605,43,603,43,602,43,601,43,600,43,600,44,601,44,600,45,599,45,600,45,599,45,596,45,595,45,594,45,594,46,593,47,591,46,590,47,589,48,588,48,589,49,588,50,586,51,586,52,585,52,583,52,583,53,583,54,583,55,582,55,581,57,582,57,582,58,581,58,579,58,578,58,578,59,576,59,576,60,575,61,576,61,576,62,576,63,576,64,576,65,577,66,578,66,577,67,576,67,576,68,577,69,577,70,576,71,575,71,574,72,575,73,574,74,574,73,573,73,572,73,571,72,572,72,571,71,572,71,571,71,571,72,571,71,570,71,571,72,570,72,571,72,571,73,570,73,570,74,570,73,570,74,569,74,569,73,568,73,569,73,568,74,567,74,568,74,567,74,567,75,566,75,565,76,564,76,563,76,562,76,561,76,561,77,560,76,561,76,560,76,559,76,560,76,559,76,560,76,559,76,558,76,557,75,556,75,556,74,556,73,557,74,558,74,559,73,558,74,557,74,558,74,558,73,557,73,558,73,559,73,558,73,557,73,558,72,559,72,558,72,557,72,558,72,557,72,556,72,557,72,556,73,556,72,556,73,556,72,556,73,556,72,555,72,556,72,556,71,556,72,556,71,557,72,557,71,558,71,557,71,557,70,558,70,559,69,559,70,560,69,561,69,560,69,561,69,560,69,559,69,560,69,559,69,558,69,558,70,557,70,557,71,557,70,556,70,557,70,556,70,557,69,556,69,556,70,555,70,556,70,555,70,555,69,556,69,557,69,556,68,557,68,556,68,556,69,555,69,554,68,555,68,556,69,556,68,555,68,556,68,555,68,554,68,555,68,555,67,556,67,557,67,559,67,560,67,560,68,561,68,560,67,561,67,562,67,563,67,562,67,561,67,562,66,561,66,561,67,562,67,561,67,560,67,561,67,560,67,559,67,560,66,559,66,559,67,558,67,557,67,556,67,555,67,554,67,555,66,555,67,556,67,555,67,555,66,556,66,555,67,554,66,555,66,554,66,555,66,556,66,557,66,556,66,555,66,556,66,555,66,556,66,555,66,554,66,554,65,555,65,556,65,557,65,556,65,557,65,558,65,559,65,560,65,559,65,558,65,557,65,556,65,555,65,556,64,555,64,556,64,557,64,558,64,559,64,558,64,557,64,558,64,558,63,559,64,559,63,560,63,561,64,560,64,561,64,560,64,561,64,560,64,560,63,559,63,558,63,560,63,559,63,558,63,559,63,560,63,561,63,562,63,563,63,562,63,562,62,563,62,564,62,562,62,560,62,561,62,560,62,561,62,561,61,562,62,563,62,564,62,565,62,564,62,563,61,563,62,563,61,564,61,565,62,564,62,565,62,566,62,565,62,564,62,565,61,564,61,565,61,566,61,565,61,566,60,565,60,566,60,567,60,567,61,567,60,568,60,567,60,568,60,569,60,569,61,570,61,570,60,571,60,572,60,571,60,572,59,573,59,574,59,573,59,574,59,574,58,573,58,574,58,573,58,571,59,572,59</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>715,190,715,189,716,189,716,188,716,189,716,190,715,190</Points>\n    <Keys>Oman, OMN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>707,184,707,179,708,178,708,175,709,176,709,177,710,178,711,179,713,179,714,179,715,180,716,180,717,181,717,182,718,183,719,183,719,184,718,185,718,186,717,186,716,187,716,188,715,189,714,189,713,189,713,190,713,191,713,192,713,193,713,194,711,194,710,194,709,195,709,196,709,197,708,197,706,197,705,198,705,199,704,200,703,199,702,199,701,200,700,200,699,200,699,201,698,199,698,198,697,198,695,195,695,194,708,187,708,184,707,184</Points>\n    <Keys>Oman, OMN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>763,139,764,139,764,140,765,139,766,140,767,140,767,141,768,141,768,142,767,142,768,142,768,143,769,143,770,144,772,144,773,144,772,145,771,145,771,146,770,146,770,147,770,146,769,146,768,146,768,147,767,147,766,147,765,147,764,146,763,146,762,146,761,147,761,148,762,148,761,148,762,148,762,149,761,149,762,150,762,151,763,151,763,152,762,152,763,152,764,152,763,153,764,153,765,153,766,154,765,154,764,154,764,155,763,155,763,156,763,157,764,157,763,157,762,158,761,159,761,160,760,160,760,161,759,162,758,163,757,164,756,164,756,165,755,166,755,167,754,167,753,167,752,167,751,167,751,166,750,167,750,168,748,169,748,170,749,171,750,171,750,172,750,173,751,173,752,174,752,175,753,176,752,177,753,177,752,177,752,178,751,178,751,177,750,178,749,178,748,178,747,178,746,178,746,179,745,179,744,179,743,179,742,179,742,178,741,177,741,176,740,176,739,176,740,176,740,175,739,174,738,174,739,174,738,174,736,174,735,175,734,175,733,175,734,175,733,175,732,175,732,174,731,174,732,174,731,174,730,174,730,175,729,175,728,175,727,175,726,175,725,175,724,175,725,173,725,172,726,172,726,171,727,171,728,171,729,171,729,170,729,169,730,169,729,169,728,169,728,168,728,167,728,166,727,166,727,165,726,165,724,164,724,163,724,162,722,161,725,162,727,162,728,162,730,162,732,162,734,162,735,162,736,162,738,161,739,161,738,160,739,159,738,159,739,158,740,157,741,157,743,156,742,156,743,156,744,155,745,155,746,155,746,156,747,156,748,155,747,154,747,153,748,153,748,152,748,151,749,151,750,151,750,150,750,149,749,149,749,148,751,149,752,149,752,148,753,148,753,147,752,147,753,147,753,146,754,146,754,145,754,144,754,143,753,143,753,142,754,141,755,141,756,141,756,140,757,140,759,140,761,140,762,140,763,140,763,139,763,140,763,139</Points>\n    <Keys>Pakistan, PAK, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>295,229,294,228,295,228,295,229</Points>\n    <Keys>Panama, PAN, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>291,222,292,222,292,223,293,223,293,224,294,224,294,223,295,224,296,224,297,224,298,223,299,223,300,222,300,223,300,222,301,222,302,222,303,222,302,222,303,222,304,222,305,223,306,223,306,224,307,224,307,225,307,224,307,225,307,226,308,226,308,227,307,227,308,227,307,228,307,227,306,227,306,228,306,229,305,229,305,228,305,227,304,227,304,226,305,226,305,225,306,226,305,226,305,225,304,225,304,224,303,224,302,224,302,223,302,224,301,223,301,224,300,224,300,225,299,226,298,226,299,227,300,228,299,228,298,228,298,229,297,229,297,228,296,228,296,227,296,228,295,227,294,226,293,226,292,226,292,225,292,226,291,226,290,225,291,225,291,224,291,223,291,222</Points>\n    <Keys>Panama, PAN, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>991,279,990,279,990,278,991,278,991,279</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>992,280,992,279,991,279,992,279,992,280</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>993,281,992,281,992,280,992,281,992,280,993,280,993,281,993,280,993,281</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>979,257,980,256,981,257,982,257,982,256,982,257,981,257,980,257,979,257</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>991,259,990,259,990,258,989,258,990,258,991,258,991,259</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>990,269,989,269,988,269,987,269,986,269,986,268,985,268,984,268,985,267,986,267,987,267,989,267,990,266,990,267,991,267,992,267,993,266,993,265,994,265,995,265,994,265,994,264,994,263,995,263,995,264,996,263,995,263,996,263,997,264,997,265,996,265,995,265,995,266,996,266,996,267,995,267,994,267,994,268,993,268,993,269,992,269,991,269,990,269</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1000,285,999,285,999,284,1000,285,1001,285,1000,285</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>981,267,981,266,981,267</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>983,268,983,267,984,267,984,268,983,268</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>998,265,997,264,998,263,997,263,997,262,996,261,995,261,995,260,994,260,993,259,992,259,992,258,993,259,994,259,995,260,996,260,996,261,997,261,997,262,997,261,997,262,998,262,998,263,999,263,999,264,998,265</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>998,278,997,278,997,277,998,277,999,278,998,278</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>963,269,963,268,963,266,963,264,963,262,963,260,963,258,964,259,965,259,966,260,967,260,969,261,970,261,971,261,971,262,972,262,973,262,973,263,974,263,975,264,976,264,977,265,977,266,977,267,978,267,979,267,980,268,981,268,982,268,983,269,983,270,983,271,981,271,980,271,981,272,981,273,982,273,982,274,983,274,983,275,984,275,984,276,985,277,985,278,986,278,987,278,987,277,987,278,987,279,988,279,990,279,990,280,989,280,989,281,990,281,991,281,992,281,991,282,991,281,991,282,992,282,991,282,991,283,991,282,990,283,990,282,989,282,990,282,989,282,988,281,987,281,986,281,985,281,984,281,983,281,982,280,981,279,980,278,979,278,979,277,979,276,978,276,978,275,977,275,977,274,976,274,975,274,974,274,974,273,974,274,974,273,973,273,973,274,973,273,973,274,972,273,973,274,972,274,972,273,972,274,971,273,970,273,971,273,971,274,971,275,970,274,970,275,969,275,968,276,968,275,967,275,967,276,967,275,966,275,967,275,967,276,967,275,968,275,968,276,969,276,969,277,970,277,969,278,968,278,967,278,965,278,964,278,963,278,963,277,963,275,963,273,963,271,962,271,962,270,963,269</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>354,309,358,309,360,308,362,309,365,310,365,311,365,312,366,312,366,313,366,314,366,315,366,316,366,317,367,317,368,317,369,317,370,317,371,317,372,317,372,318,373,319,373,320,373,321,373,322,374,323,375,322,376,322,377,323,377,324,376,325,376,326,376,327,376,328,376,329,375,330,375,331,374,331,373,331,373,332,373,333,372,333,371,332,371,333,370,333,369,333,368,333,367,333,366,332,365,332,364,332,364,331,365,331,364,331,365,331,365,330,365,329,366,328,367,327,367,326,366,326,365,325,364,325,363,325,362,324,361,324,361,323,359,323,358,322,356,322,356,321,355,320,354,319,353,319,353,318,352,317,353,314,353,312,354,311,354,309</Points>\n    <Keys>Paraguay, PRY, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>331,297,332,299,333,299,333,300,332,300,332,301,331,301,331,302,331,303,330,303,330,304,330,305,329,305,328,306,327,305,327,304,326,304,325,304,325,303,325,302,324,302,323,302,323,301,322,301,321,300,320,300,319,299,318,299,317,298,316,298,315,297,314,297,314,296,313,296,313,295,312,294,311,293,311,292,310,292,311,292,311,291,310,290,310,289,309,288,309,287,308,287,308,286,308,285,307,284,306,283,306,282,305,281,305,280,304,279,304,278,304,277,303,277,303,276,303,275,302,275,302,274,301,274,301,272,300,272,300,271,299,270,298,270,296,269,296,268,297,268,297,267,296,266,296,265,295,265,296,264,296,263,297,262,298,261,299,261,299,262,299,263,298,262,298,263,298,264,299,263,300,264,301,264,301,265,302,266,303,265,303,264,304,264,303,264,304,263,304,262,304,261,305,261,306,260,307,259,310,258,311,257,313,255,313,253,314,253,314,252,313,252,313,251,314,251,315,251,315,252,316,252,317,253,317,254,318,254,319,255,319,256,320,256,320,257,320,258,321,258,322,258,323,258,324,258,324,257,325,257,325,258,325,257,325,258,326,258,326,257,327,257,328,258,329,258,328,258,329,258,329,259,329,258,329,259,327,262,328,262,329,262,330,263,329,264,329,263,328,263,327,263,327,264,326,264,325,264,324,264,323,265,322,265,322,266,321,266,321,267,320,269,320,270,319,270,318,271,318,272,318,273,317,273,318,274,319,275,319,276,320,276,320,277,321,277,321,278,320,279,322,279,323,279,323,280,323,281,325,281,326,280,327,280,327,279,328,279,328,280,328,282,328,284,328,283,328,284,329,284,329,283,330,283,331,283,332,285,333,287,333,288,333,289,333,291,332,291,332,292,333,292,333,293,332,294,333,294,332,294,332,295,331,295,332,296,332,297,331,297</Points>\n    <Keys>Peru, PER, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>899,235,900,234,900,235,899,235</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>909,223,908,223,908,222,907,221,908,220,908,219,908,218,909,218,910,218,910,219,909,220,909,221,909,222,909,223</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>909,222,910,220,910,219,911,219,911,218,911,217,912,217,911,217,912,217,912,219,911,220,910,220,910,222,909,222</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>916,221,916,220,916,219,917,219,916,220,917,221,916,221</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>911,222,911,221,912,221,912,220,913,220,913,221,913,222,912,222,911,222</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>907,219,907,218,908,218,908,219,907,219</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>906,227,907,226,908,226,909,225,910,225,910,224,910,225,911,225,911,226,910,226,910,227,911,226,912,226,912,225,913,225,914,225,914,224,914,223,914,224,915,224,915,223,915,224,916,223,916,222,916,221,916,222,917,222,917,223,918,223,918,224,918,225,919,225,919,226,918,226,919,226,919,227,919,228,919,229,919,230,918,230,919,230,918,230,918,231,918,232,918,231,918,230,917,230,917,229,917,228,916,229,916,230,916,231,916,232,917,232,916,233,916,234,915,234,915,233,915,232,915,233,914,233,913,233,912,232,912,231,912,230,911,230,912,229,912,228,911,227,910,227,910,228,909,228,909,227,909,228,908,228,908,227,907,227,907,228,906,229,906,228,906,229,906,230,905,230,905,229,906,229,906,228,906,227</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>917,217,916,217,915,217,914,217,914,216,915,215,914,215,914,214,913,214,912,213,913,213,914,213,915,213,915,214,916,214,916,215,916,216,916,217,917,217</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>915,220,914,220,914,219,914,218,913,217,913,218,913,217,913,216,912,216,913,216,913,217,914,216,914,217,915,217,915,218,915,219,915,220,915,219,914,219,915,220</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>912,215,911,215,910,214,909,215,909,214,909,213,910,213,911,214,912,215</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>897,217,898,217,898,216,898,217,898,218,898,219,899,219,898,219,897,220,896,221,895,223,894,223,893,224,892,224,892,225,891,226,891,225,892,224,892,223,893,223,894,223,894,222,895,221,896,220,897,219,896,219,897,219,898,218,897,218,898,218,897,218,897,217,898,217,897,217</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>905,231,905,230,906,230,906,231,905,231</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>903,233,902,233,902,232,903,232,903,233,904,232,904,233,903,233</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>906,214,905,214,906,214,905,214,905,213,906,213,905,213,906,212,906,213,906,214</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>900,215,900,214,900,215,900,214,900,215,899,214,899,213,899,214,900,214,901,214,900,214,901,214,900,215</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>906,211,905,211,905,210,906,210,906,211</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>907,214,907,213,908,213,907,214</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>905,207,905,206,905,205,906,206,905,206,906,206,905,207</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>913,216,913,215,913,216</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>912,210,912,209,912,208,912,209,913,209,913,210,912,210</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>900,210,901,210,902,210,903,210,903,211,904,211,904,212,904,213,904,214,903,214,903,213,903,214,902,213,902,212,902,211,901,211,901,210,900,210</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>905,219,905,218,906,217,906,216,906,215,905,215,906,215,907,215,907,216,908,216,909,216,909,217,908,217,908,218,907,218,906,219,905,219</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>900,202,901,202,900,201,901,200,901,199,901,198,901,197,901,196,901,195,902,195,903,195,904,195,904,196,905,196,904,195,905,196,906,195,906,196,906,197,906,198,907,198,907,199,907,200,907,201,906,202,905,202,904,203,904,204,904,205,904,206,905,206,904,207,905,208,906,209,906,208,907,208,908,208,908,207,908,208,909,208,909,209,909,208,910,208,910,209,911,209,910,209,910,210,911,210,911,211,912,211,912,212,912,213,911,213,911,212,912,212,911,212,910,212,910,211,909,211,909,210,908,210,908,209,907,209,907,210,908,211,907,211,907,210,906,210,906,209,905,209,904,209,904,210,903,210,903,209,902,209,901,209,902,209,901,209,901,208,902,208,902,207,902,206,901,206,901,207,900,206,900,205,899,204,899,203,899,202,899,201,899,202,900,202</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>598,87,599,87,601,87,604,88,606,87,608,87,609,87,609,88,610,88,610,89,610,90,611,91,611,92,610,93,609,94,610,94,610,95,610,96,611,96,610,97,611,97,611,98,612,98,611,98,612,99,611,99,610,100,609,100,608,101,608,102,607,102,608,103,607,103,606,103,605,103,604,102,603,102,602,103,602,102,601,102,600,103,599,103,599,102,598,102,597,102,596,102,596,101,595,101,594,101,594,100,593,101,593,100,592,100,593,100,592,100,591,99,590,99,591,100,590,100,589,100,588,99,589,99,588,98,588,99,587,98,586,98,585,98,585,97,584,97,585,98,584,98,584,97,585,97,584,96,583,95,584,95,584,94,583,94,583,93,582,92,583,91,583,90,582,89,583,89,583,90,583,89,582,89,583,89,584,88,586,88,587,88,588,88,588,87,589,87,590,87,591,86,592,86,593,86,595,86,596,87,596,86,595,86,595,87,596,87,597,87,598,87</Points>\n    <Keys>Poland, POL, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>463,137,462,137,463,137,464,137,463,137</Points>\n    <Keys>Portugal, PRT, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>455,135,454,135,455,135</Points>\n    <Keys>Portugal, PRT, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>458,135,457,134,458,134,458,135</Points>\n    <Keys>Portugal, PRT, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>489,153,488,152,489,152,489,153</Points>\n    <Keys>Portugal, PRT, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>513,125,514,124,515,124,515,125,516,125,517,125,518,125,519,125,520,125,520,126,520,125,521,126,520,127,519,127,519,128,519,129,519,130,518,130,519,130,518,131,517,132,517,131,517,132,518,132,518,133,519,133,518,134,518,135,518,136,519,136,518,136,518,137,517,138,517,139,516,139,515,139,514,139,513,140,513,139,513,138,513,137,513,136,513,135,512,135,512,134,512,135,513,134,512,134,513,134,512,134,511,134,511,133,511,132,512,132,513,130,513,129,513,128,514,128,513,127,513,126,513,125</Points>\n    <Keys>Portugal, PRT, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>339,197,338,197,338,196,338,195,340,195,341,195,342,195,343,195,343,196,342,196,342,197,341,197,340,197,339,197</Points>\n    <Keys>Puerto Rico, PRI, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>693,177,692,177,692,176,692,174,692,173,693,172,694,172,694,173,694,174,694,175,694,176,694,177,693,177,694,177,693,177</Points>\n    <Keys>Qatar, QAT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>706,315,706,314,705,314,705,313,706,313,707,313,707,314,707,315,706,315</Points>\n    <Keys>Reunion, REU, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>618,106,619,106,620,106,621,106,621,107,621,108,622,108,623,109,624,110,624,111,624,112,624,113,624,114,625,115,626,115,627,115,627,114,628,114,629,115,628,115,629,115,628,115,628,116,627,116,626,116,627,116,627,115,626,116,626,117,626,116,626,117,625,118,626,118,625,118,625,119,624,119,623,119,623,118,623,119,622,118,621,118,620,118,619,118,618,119,617,119,616,120,615,119,613,119,611,119,610,119,609,119,608,119,608,118,609,118,608,118,607,117,608,117,607,116,606,117,605,117,604,116,604,115,603,115,602,114,602,113,601,113,600,112,601,112,602,112,603,112,603,111,604,111,604,110,605,109,604,109,605,109,605,108,606,108,606,107,607,107,608,107,608,106,609,107,609,106,610,107,610,106,610,107,611,107,612,107,613,107,614,107,615,107,616,107,618,107,618,106</Points>\n    <Keys>Romania, ROM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>699,38,699,37,697,37,696,37,696,36,697,36,698,36,699,37,698,37,698,36,698,37,699,37,699,38</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>717,5,713,5,714,5,713,5,715,5,717,5,718,5,717,5,718,5,717,5</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>812,7,809,7,810,7,812,7,814,7,813,7,812,7</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1079,36,1080,36,1080,37,1079,38,1078,38,1077,38,1076,38,1075,37,1076,37,1078,36,1079,36</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>0,36,3,36,5,36,6,37,7,37,6,37,0,38,0,36</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>952,36,951,36,952,36,951,36,950,36,951,36,953,36,952,36</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1009,99,1008,98,1009,98,1009,99</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>770,34,770,33,771,33,772,33,773,33,774,33,775,33,773,34,770,34</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1006,101,1006,100,1005,100,1006,99,1007,99,1007,98,1008,98,1008,99,1007,100,1006,100,1006,101</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>926,34,925,34,924,34,923,33,922,33,920,33,919,33,920,33,921,33,923,33,926,33,927,33,928,33,927,34,928,34,927,34,928,34,926,34</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>925,33,924,33,926,32,926,33,925,33</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>921,33,923,32,924,32,928,32,927,33,925,32,924,32,921,33</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1004,103,1003,103,1003,102,1004,102,1004,103</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1030,75,1031,74,1031,73,1032,73,1033,73,1034,73,1033,74,1034,74,1033,74,1030,75</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>927,32,924,32,925,32,927,32</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>714,6,712,6,710,6,711,6,710,6,713,6,715,6,714,6</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>778,32,776,32,775,32,776,32,777,31,778,31,778,32</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>709,9,708,9,707,9,706,9,707,8,706,8,709,8,710,8,710,9,709,9</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>764,32,763,32,762,31,763,31,764,31,763,32,764,32</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>900,31,899,31,898,31,899,31,900,31</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>0,44,1,44,2,44,3,44,3,45,5,45,6,46,5,46,6,46,6,45,7,46,6,46,7,46,8,46,10,46,14,47,13,48,14,48,13,48,14,48,15,48,15,49,15,50,15,51,16,51,16,52,17,51,18,51,17,51,18,51,17,52,18,52,18,51,17,51,18,50,17,50,17,49,16,49,17,49,19,49,20,49,19,50,20,50,19,50,20,50,21,50,22,50,20,49,22,49,22,50,24,50,25,50,26,51,27,51,28,51,28,52,29,52,28,52,29,52,30,52,30,53,29,52,28,53,28,54,27,54,25,53,26,54,25,54,24,54,23,54,22,54,22,53,21,53,21,54,22,54,23,54,22,54,23,54,23,55,21,55,22,55,23,55,22,56,21,56,20,56,21,56,20,56,20,57,21,56,21,57,20,57,21,57,22,57,23,57,22,57,21,57,20,57,21,57,21,58,20,58,19,58,19,57,20,57,19,57,18,57,17,57,14,56,13,56,12,55,11,54,9,54,8,54,7,54,4,54,4,53,3,53,3,52,3,53,4,52,4,51,3,52,2,52,1,52,0,52,0,53,1,53,2,54,1,54,1,55,0,55,0,44</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>995,110,996,109,995,110</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>714,10,712,10,711,10,711,9,710,9,713,9,716,9,717,9,716,10,715,10,714,10,715,10,714,10,713,10,714,10</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>976,120,976,119,977,118,978,117,979,117,977,118,977,119,976,119,976,120</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>785,25,784,25,784,24,785,24,786,24,786,25,786,24,786,25,785,25</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>750,31,749,31,750,31,749,30,750,30,751,30,752,30,753,30,753,31,752,31,753,31,754,31,754,30,754,31,755,31,752,31,751,31,750,31</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>988,114,988,113,989,113,991,112,990,112,990,113,988,114</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>700,10,696,10,698,10,698,9,699,9,700,10,701,10,700,10</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>919,33,918,33,919,33,919,32,918,32,919,32,920,31,919,31,919,30,920,30,921,30,922,30,923,30,924,30,923,30,925,30,924,31,925,31,926,31,927,31,926,32,925,32,924,32,922,32,921,33,919,33</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>694,35,694,34,695,34,696,34,697,34,698,34,698,33,697,33,698,33,697,33,698,33,699,33,698,33,698,32,699,33,698,32,697,32,698,32,700,32,699,32,699,31,700,31,699,31,700,31,701,31,702,31,703,31,703,30,704,30,709,31,708,31,707,31,708,31,709,31,706,32,707,32,708,32,706,32,707,32,707,33,706,32,707,33,706,33,707,33,706,33,705,33,706,33,705,33,706,33,706,34,706,35,705,35,706,35,707,36,708,36,708,37,711,38,712,38,712,39,710,38,710,39,711,39,710,39,709,38,709,39,710,39,709,38,708,38,708,39,709,39,708,38,709,38,709,39,708,39,707,38,707,39,708,39,707,39,707,38,706,38,707,39,706,38,706,39,705,38,705,39,704,38,703,38,704,39,703,38,702,38,701,38,700,38,699,38,700,38,701,38,700,37,701,37,702,37,701,37,702,37,701,37,700,37,701,36,700,36,700,37,699,36,700,36,699,36,698,36,697,36,696,36,695,36,694,36,694,35</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>766,30,765,30,766,30,768,30,767,30,766,30</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>980,117,981,117,981,116,982,116,982,115,983,115,983,114,984,115,986,114,986,115,985,115,984,115,983,115,983,116,982,116,981,116,981,117,980,117</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>989,26,986,26,984,26,983,26,981,26,980,25,979,25,978,25,978,24,979,24,980,24,979,24,981,24,982,24,985,24,985,25,987,25,990,25,991,25,992,25,991,26,992,26,991,26,989,26</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>918,34,917,33,915,33,914,33,914,32,913,32,912,32,908,32,907,32,907,31,908,31,908,32,909,32,910,32,909,31,910,31,909,30,910,30,909,30,910,30,909,30,910,30,909,30,910,30,910,29,910,30,911,30,911,29,912,29,913,29,914,29,914,30,915,30,915,29,915,30,916,30,917,30,918,30,919,30,918,30,919,30,919,31,920,31,919,32,918,32,919,32,918,32,918,33,919,33,918,34</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>789,23,786,23,787,23,789,23</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>829,22,825,22,826,22,827,22,828,22,829,22,828,22,829,22</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>969,31,965,31,964,30,962,30,961,30,960,30,959,30,958,30,959,30,960,30,961,30,962,30,962,29,963,29,964,29,966,29,967,29,970,30,970,31,969,31</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>790,28,788,28,789,28,790,28</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>862,16,859,16,862,16,863,16,862,16</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>708,10,707,10,708,10,707,10,708,9,709,10,710,9,711,9,711,10,708,10</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>796,27,795,27,796,27</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>948,29,947,28,946,28,947,28,948,29</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>985,21,986,20,988,20,987,20,987,21,985,21</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>827,20,827,19,825,20,825,19,826,19,828,19,829,19,827,20</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>800,26,799,26,798,26,799,26,801,26,800,26</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>957,27,954,26,953,26,951,25,950,25,950,24,951,24,951,25,952,24,951,24,950,24,951,24,951,23,953,23,952,23,953,22,954,22,955,22,956,22,957,22,959,23,960,23,961,23,961,24,962,24,963,24,962,23,962,22,963,22,964,23,964,22,963,22,964,22,965,22,967,23,969,23,970,23,971,23,975,24,976,24,975,24,974,24,974,25,973,25,971,25,970,25,969,25,967,24,969,24,969,23,968,23,966,23,967,23,967,24,966,24,967,25,970,25,971,26,970,26,967,26,968,26,967,26,965,26,966,26,967,26,966,25,965,26,960,26,959,26,958,26,957,27</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>950,86,951,85,951,86,950,86</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>777,8,776,8,777,8,781,8,780,8,779,8,777,8</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>713,8,711,8,710,8,710,7,708,7,710,7,712,7,713,8,714,8,713,8</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>682,10,683,10,684,10,683,10,682,10,680,10,679,10,681,9,681,10,684,10,684,9,683,9,682,9,684,9,682,9,684,9,685,9,687,9,688,9,687,9,688,9,688,8,689,8,687,8,686,8,687,8,690,8,691,8,690,8,692,8,693,8,690,8,693,8,695,8,692,9,689,9,688,9,686,9,685,10,686,10,687,10,686,10,687,10,686,10,685,10,684,10,682,10</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>965,91,965,90,966,90,967,90,968,90,967,90,967,89,968,90,968,89,967,89,968,89,966,88,967,88,968,87,969,88,968,88,968,89,969,90,968,90,969,90,970,92,969,92,969,93,969,94,969,95,969,96,970,96,969,96,970,96,970,97,970,98,971,99,971,100,972,101,972,102,973,103,974,104,974,105,973,104,973,103,972,103,970,102,969,102,970,103,969,103,968,103,968,104,967,106,967,107,968,108,969,109,969,110,970,110,969,110,970,110,970,111,970,112,969,111,970,111,969,111,968,111,968,110,967,110,967,111,966,112,966,113,965,112,965,111,966,109,965,108,966,107,966,106,965,105,965,104,966,104,966,102,966,101,966,100,966,99,966,98,966,97,966,96,965,96,965,95,964,95,965,94,964,94,964,93,965,93,965,92,965,91</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>718,11,716,10,718,10,719,10,719,11,718,11</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>808,19,807,19,808,19,809,19,808,19,809,19,808,19</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>817,12,816,12,815,11,816,11,817,11,816,11,814,11,813,11,813,10,819,10,821,11,820,11,817,12</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>877,21,876,21,877,21,878,21,877,21</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>961,29,960,28,961,28,962,28,963,28,962,29,961,29</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>598,87,599,87,599,86,600,86,600,87,600,86,601,86,600,87,599,87,598,87</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>861,19,862,19,861,19,862,18,863,19,861,19</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>833,14,830,14,829,14,828,13,827,14,826,13,825,13,824,13,823,13,822,13,823,13,822,12,823,12,822,12,821,12,820,12,819,12,822,11,823,11,822,11,823,11,822,11,823,11,824,10,825,10,826,10,829,10,830,10,831,10,833,10,834,10,833,11,832,11,831,11,832,11,833,11,834,11,835,11,835,10,838,10,840,11,839,11,839,12,838,13,837,13,839,13,839,14,838,14,833,14</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>838,17,837,16,838,16,840,15,839,15,840,15,841,14,843,14,842,14,843,13,844,14,842,13,843,13,844,13,844,12,845,12,845,13,846,13,846,12,847,12,849,13,848,13,847,14,848,13,849,13,850,13,851,13,852,13,851,13,853,14,854,14,855,14,856,15,854,16,848,16,847,16,848,16,847,16,843,16,842,16,839,17,838,17</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>878,28,876,28,875,28,874,28,874,27,875,27,876,27,879,27,880,27,879,28,878,28</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>796,26,795,26,796,26,797,26,796,26</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>858,16,857,16,859,16,859,15,860,16,859,16,858,16</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>947,24,946,24,946,23,947,23,948,24,947,24,948,24,947,24</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>797,27,796,27,797,27,798,27,797,27</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>769,12,770,12,769,12,768,12,769,12,772,12,769,12</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>710,26,709,26,708,26,707,26,709,26,709,25,707,26,707,25,708,25,709,25,710,25,710,24,711,24,712,25,713,25,712,24,714,24,713,24,714,23,716,23,717,23,721,23,721,22,720,22,721,22,722,22,721,22,723,22,722,22,723,22,722,22,723,22,724,22,727,22,728,22,729,22,731,21,732,22,732,21,734,21,735,21,736,21,737,21,737,20,738,20,739,20,742,19,745,20,746,20,747,20,746,21,745,21,744,22,743,22,741,22,737,23,731,24,730,23,730,24,729,24,726,24,725,24,724,25,723,25,722,25,721,25,720,26,721,26,722,26,721,26,720,26,721,26,720,26,719,26,718,26,719,26,719,27,718,27,717,26,717,27,716,27,714,27,715,27,715,28,716,28,715,28,714,28,715,28,714,28,714,29,713,28,712,28,711,28,712,28,713,29,712,29,710,29,712,29,712,30,711,30,710,30,710,29,710,30,711,30,710,31,710,30,710,31,708,31,708,30,707,30,707,31,706,30,704,30,702,31,702,30,703,30,702,30,703,30,705,29,704,29,703,29,703,30,702,30,700,29,701,29,702,29,703,29,704,29,703,28,705,28,707,28,705,28,706,28,707,28,705,27,706,27,708,27,707,27,706,27,707,27,706,27,707,26,707,27,708,26,709,26,710,26</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>686,44,685,44,684,44,684,43,685,42,686,42,687,42,690,43,690,44,690,43,689,43,689,44,688,44,686,44</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>723,9,720,9,719,9,718,9,717,9,718,9,717,9,718,8,720,8,719,8,723,8,724,8,726,8,726,9,725,9,724,9,723,9</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>711,8,710,8,706,8,704,8,704,7,703,8,703,7,704,7,706,7,708,7,709,8,710,8,712,8,713,8,711,8</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1047,42,1046,42,1044,41,1043,41,1044,40,1048,41,1047,41,1047,42</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>729,8,727,8,729,8,731,8,732,7,733,7,734,7,735,7,736,7,735,8,736,8,733,8,729,8</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>722,8,720,8,720,7,721,7,723,7,725,7,724,7,723,8,722,8</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>704,8,702,8,701,8,702,8,704,8,705,8,707,8,706,8,704,8</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>719,41,718,41,716,41,717,41,716,41,715,40,716,40,715,40,716,39,717,39,718,40,719,40,720,40,720,41,721,41,719,41</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>678,9,676,9,674,9,680,8,681,8,682,8,684,8,685,8,686,9,685,9,683,8,682,8,681,9,682,9,681,9,679,9,680,9,679,9,678,9</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>709,7,708,7,707,7,706,7,708,7,709,7,709,6,711,6,713,7,711,7,709,7</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>953,87,952,87,952,86,951,86,952,85,953,85,953,86,953,85,954,85,954,86,953,86,953,87</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>730,6,728,6,726,5,728,5,729,5,730,5,731,5,731,6,730,6</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>647,56,647,55,646,55,647,55,647,56</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>821,11,819,10,816,10,818,10,816,10,819,10,814,10,815,9,816,9,815,9,818,9,819,8,817,8,818,8,819,8,819,7,824,7,825,7,826,7,825,7,826,7,829,7,830,7,829,8,830,8,833,8,833,9,831,9,831,8,831,9,832,10,831,10,827,10,825,10,823,10,821,11</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>630,42,630,41,631,42,632,42,632,41,634,41,633,42,634,41,635,41,636,41,635,41,636,41,637,41,638,41,639,41,639,42,638,42,636,42,636,41,636,42,635,42,636,42,637,42,636,42,637,42,638,42,639,42,638,42,638,43,638,42,639,42,640,42,639,43,640,43,639,43,640,43,639,43,639,44,639,43,640,43,643,43,645,43,647,43,649,43,653,45,654,45,655,45,656,46,655,46,655,45,657,46,658,46,659,46,660,47,661,47,660,47,661,47,662,47,663,47,663,48,662,48,663,48,663,49,664,49,663,50,662,51,661,51,657,52,655,52,653,52,652,52,646,51,644,51,643,51,642,50,641,50,640,50,639,50,638,49,637,49,636,49,635,49,636,49,637,49,637,50,638,50,639,51,640,51,639,51,638,51,639,51,640,51,641,51,640,51,640,52,639,52,640,52,641,52,642,52,643,52,644,53,644,54,643,54,644,54,643,54,643,55,644,55,643,55,644,55,644,56,645,56,644,56,644,57,645,57,645,58,646,58,646,57,647,58,648,58,651,59,652,59,653,59,654,58,653,58,654,58,653,57,652,57,651,57,650,56,649,56,650,56,650,55,651,55,653,55,653,56,654,56,655,56,654,56,654,57,654,56,655,56,656,56,658,57,659,57,659,56,661,57,661,56,660,56,660,55,659,54,661,53,662,53,663,53,664,52,666,51,667,51,668,51,667,51,669,51,670,51,670,52,671,52,669,52,670,52,670,53,670,52,671,52,672,52,672,53,672,52,672,51,673,51,673,50,672,49,673,49,672,49,671,49,671,48,672,48,672,47,672,48,672,47,672,46,673,46,672,46,672,45,669,45,669,44,670,44,671,45,672,45,673,45,675,45,677,45,678,45,677,45,678,46,679,46,679,47,680,47,676,47,675,47,676,47,676,48,675,48,674,48,676,49,677,50,678,50,679,50,681,50,682,50,683,50,683,49,683,48,684,48,685,47,685,48,686,47,687,48,687,47,686,47,685,47,686,47,687,47,689,47,691,46,692,45,693,45,694,45,696,45,697,45,696,45,696,46,697,45,698,45,697,45,696,45,699,44,701,44,703,43,703,44,700,44,701,44,702,44,701,44,701,45,700,45,701,45,701,46,700,45,699,46,700,46,701,46,702,46,703,46,704,46,704,45,705,45,707,45,709,45,710,45,711,45,712,45,712,44,713,44,714,44,715,44,714,44,715,44,717,44,716,44,717,44,718,44,717,44,717,45,719,45,719,44,720,44,721,44,722,44,722,43,721,43,721,42,720,42,720,41,721,42,722,41,721,41,722,41,724,41,729,41,732,42,734,43,735,43,737,43,741,44,742,44,743,45,744,45,744,46,745,46,745,45,746,45,747,44,746,44,747,44,746,44,745,44,744,43,744,42,743,42,742,42,740,41,740,42,740,41,740,40,741,40,740,41,741,41,741,40,741,39,742,38,741,38,740,38,739,38,740,37,739,37,740,37,741,37,743,36,744,35,745,35,746,34,746,33,746,32,747,32,748,32,749,32,748,32,754,32,755,32,756,32,758,32,758,33,758,34,757,34,757,35,756,35,757,35,756,35,756,36,755,36,756,37,757,37,758,37,757,37,758,38,758,39,757,39,757,40,757,41,758,41,757,41,757,42,757,43,757,44,758,44,760,45,759,46,759,47,758,47,758,48,757,48,757,49,756,49,755,49,756,49,755,50,754,50,753,50,754,50,754,51,754,50,753,51,752,51,750,51,752,50,751,50,750,50,749,50,748,50,747,50,746,50,747,50,747,51,748,51,749,51,751,52,752,51,754,51,756,52,757,52,757,51,756,51,757,51,758,51,759,50,760,50,761,50,761,49,762,48,764,47,764,46,763,46,763,45,763,44,764,44,767,44,769,44,770,44,769,44,770,44,771,45,771,46,772,46,771,46,771,47,773,48,777,48,776,48,775,48,775,47,775,48,774,47,774,48,773,47,772,47,772,46,773,46,774,46,773,45,773,44,772,44,770,43,766,43,765,43,762,43,761,43,761,42,760,41,761,40,762,39,762,38,761,38,761,37,760,37,759,36,760,36,760,35,761,35,763,35,764,34,765,34,765,33,764,32,765,32,766,32,767,33,766,33,767,34,766,34,766,35,765,35,766,35,766,36,765,36,766,37,768,37,770,37,771,37,773,37,773,38,775,38,777,38,777,37,776,38,776,37,776,38,775,38,775,37,774,37,773,37,774,36,773,36,773,37,772,37,771,36,770,36,768,36,768,35,769,34,770,34,771,35,772,35,773,35,774,35,774,34,773,34,772,34,773,34,775,33,778,33,779,34,782,34,781,34,783,35,784,35,785,35,788,35,789,35,789,36,788,36,789,36,786,37,787,37,786,37,786,38,787,38,786,38,786,39,786,40,787,40,786,40,786,39,787,39,787,38,788,38,789,38,789,39,788,39,789,39,787,40,788,40,789,40,788,40,790,40,791,39,790,38,790,37,789,37,790,36,790,35,789,35,787,35,786,34,783,33,782,33,781,32,782,32,782,31,781,31,780,31,781,31,780,31,780,30,781,30,782,30,781,30,782,30,784,30,790,30,794,29,795,29,796,29,800,29,801,29,797,30,797,31,798,31,799,31,800,32,800,31,799,31,797,31,797,30,798,30,801,30,802,29,801,29,802,29,801,29,800,28,801,28,802,28,801,28,800,28,799,28,798,28,797,28,797,27,798,27,798,28,798,27,799,27,800,27,800,28,800,27,801,28,801,27,800,27,799,27,800,27,798,27,797,27,798,26,799,26,798,26,799,26,799,27,800,27,800,26,801,26,802,26,801,26,802,26,803,25,800,25,801,25,803,25,804,25,805,25,806,24,807,24,806,24,807,24,808,24,809,24,808,24,810,24,809,24,812,24,813,24,814,24,814,23,821,23,822,23,820,23,819,23,818,23,819,23,818,23,818,22,819,22,820,22,821,22,823,22,824,22,823,22,824,22,826,22,828,22,827,22,828,22,827,22,828,23,826,23,827,23,829,23,828,23,829,22,829,23,830,23,831,23,832,22,831,22,831,23,832,23,833,23,833,22,832,22,833,22,834,22,833,22,834,22,835,22,836,22,837,22,838,22,839,22,839,23,838,23,837,23,837,24,839,24,839,25,840,25,839,24,837,24,837,23,838,23,837,23,838,23,839,23,839,22,838,22,837,21,836,21,838,21,840,21,842,21,845,21,846,21,842,21,843,21,843,20,842,20,843,20,843,19,846,18,847,18,848,18,849,18,850,18,852,17,853,17,852,17,853,18,853,17,854,17,854,18,857,18,858,18,857,18,856,19,852,19,856,19,857,19,856,19,856,20,857,20,858,19,859,19,860,19,859,19,860,19,861,19,861,20,862,20,861,20,862,20,861,20,860,20,860,21,859,21,860,21,862,21,863,21,864,21,863,21,863,20,864,20,867,20,869,20,871,20,872,20,873,20,874,20,874,21,875,21,876,21,875,21,876,21,878,22,877,22,878,22,877,22,878,22,877,22,879,22,878,22,879,22,878,22,879,22,880,22,880,23,881,23,881,24,880,24,879,23,877,23,878,23,878,24,879,24,878,24,879,24,880,24,881,24,880,24,881,24,880,25,878,26,876,26,875,27,874,26,872,27,873,27,871,27,870,27,871,27,870,27,868,28,869,28,868,28,867,28,865,29,864,30,861,30,860,30,860,31,858,31,857,31,857,32,856,32,855,32,856,32,857,32,858,32,858,31,859,31,860,31,863,31,864,31,865,31,864,31,865,31,867,30,868,30,867,30,868,30,870,30,871,30,872,29,871,29,870,29,869,29,869,30,868,29,869,29,870,28,873,29,873,28,874,28,873,29,875,29,876,29,877,29,878,29,880,29,880,30,879,30,880,30,880,31,880,32,879,32,880,33,882,33,881,33,879,32,880,32,880,31,881,31,882,30,881,30,880,30,884,30,885,29,889,30,891,30,894,30,896,30,895,30,895,31,898,31,898,32,899,32,901,32,899,32,899,31,903,32,904,32,905,32,906,32,910,32,911,32,913,33,914,33,915,33,918,34,919,33,919,34,920,34,921,35,921,36,921,35,920,34,920,33,921,33,922,33,923,34,925,34,925,35,926,35,927,35,927,34,927,35,928,35,926,35,926,36,927,36,928,37,929,37,928,37,930,37,930,38,931,38,932,38,933,38,934,38,935,37,936,37,935,37,936,36,937,35,938,35,939,36,941,36,942,36,943,36,944,36,943,37,944,37,944,36,945,36,946,36,947,36,949,36,950,36,951,36,952,36,952,37,953,37,952,37,953,37,954,37,953,37,954,37,953,37,955,37,954,36,953,36,954,36,955,36,956,36,957,36,958,36,959,36,960,36,959,36,959,35,958,35,959,34,960,34,958,34,957,34,957,33,958,33,961,33,963,33,962,33,963,32,962,32,961,32,964,32,965,32,969,32,975,33,980,33,977,33,976,33,974,33,973,34,972,34,973,34,974,34,980,34,977,35,978,34,979,34,978,34,977,34,976,34,977,34,976,34,977,34,977,35,975,35,974,35,975,35,974,35,976,36,976,35,977,35,978,35,981,34,983,34,986,34,989,34,990,35,989,35,988,35,987,35,986,35,987,35,986,35,987,35,988,36,989,36,990,36,989,36,990,36,991,36,990,37,991,37,991,36,992,36,991,37,992,37,993,36,994,37,996,37,996,38,995,38,994,38,997,38,1000,38,1001,38,1002,38,1006,37,1006,38,1006,37,1007,37,1010,37,1013,37,1017,38,1019,39,1020,39,1020,40,1019,40,1019,41,1020,41,1020,42,1022,42,1023,42,1022,42,1023,43,1022,43,1023,43,1024,44,1023,44,1023,45,1022,45,1023,45,1024,44,1023,44,1024,44,1024,43,1024,42,1026,42,1026,41,1028,42,1029,41,1030,41,1031,41,1032,41,1033,42,1034,42,1040,42,1042,41,1043,41,1044,41,1043,42,1044,42,1044,43,1045,43,1048,43,1048,44,1051,44,1052,44,1052,43,1053,43,1052,43,1052,42,1051,42,1050,42,1050,41,1051,41,1051,40,1057,41,1058,41,1059,41,1060,41,1059,41,1060,41,1061,41,1062,41,1063,41,1065,41,1066,41,1068,41,1069,41,1070,41,1074,42,1075,42,1076,42,1077,43,1076,43,1075,42,1076,43,1077,43,1079,43,1079,44,1078,43,1079,44,1080,44,1080,45,1080,46,1080,47,1080,48,1080,49,1080,50,1080,51,1080,52,1080,53,1080,54,1080,55,1079,55,1078,56,1077,56,1075,57,1076,57,1076,56,1075,56,1072,56,1071,56,1071,55,1070,55,1069,55,1068,55,1069,56,1070,55,1071,56,1070,56,1069,56,1068,56,1067,56,1065,56,1064,56,1063,56,1064,56,1065,56,1067,56,1068,56,1069,56,1068,57,1069,57,1069,56,1070,57,1071,56,1072,56,1072,57,1073,58,1074,58,1074,57,1075,58,1075,59,1076,59,1076,60,1075,59,1075,60,1076,60,1075,60,1074,60,1075,60,1076,60,1075,60,1076,60,1076,61,1076,60,1076,61,1077,61,1078,61,1077,61,1077,62,1078,62,1078,63,1077,63,1077,64,1076,63,1075,63,1071,63,1071,62,1072,62,1071,62,1070,62,1071,62,1070,62,1070,63,1071,63,1070,63,1069,63,1066,64,1065,64,1064,65,1063,65,1064,65,1063,65,1062,65,1061,66,1061,65,1060,65,1060,66,1059,66,1058,66,1058,67,1057,67,1058,67,1057,67,1056,67,1057,67,1056,67,1056,68,1055,68,1054,68,1054,69,1053,69,1052,69,1051,69,1051,70,1051,71,1050,71,1050,70,1049,70,1049,69,1048,69,1047,69,1048,69,1047,69,1045,69,1044,69,1043,69,1042,69,1041,69,1039,70,1038,71,1038,70,1038,69,1039,69,1038,69,1037,69,1036,70,1035,70,1034,70,1035,70,1035,71,1034,71,1033,70,1032,70,1033,70,1033,71,1032,71,1032,70,1030,70,1031,71,1030,71,1030,72,1029,72,1029,73,1028,73,1029,73,1028,74,1027,74,1026,75,1025,76,1026,77,1027,77,1028,77,1029,77,1029,78,1028,78,1028,79,1028,80,1029,80,1029,81,1030,82,1029,82,1028,82,1027,82,1028,82,1029,81,1028,81,1027,81,1027,82,1026,82,1025,84,1025,85,1026,86,1025,87,1024,87,1023,87,1022,87,1020,88,1019,88,1019,89,1019,90,1019,89,1019,90,1019,91,1020,91,1019,91,1018,91,1017,91,1016,92,1015,91,1015,92,1015,93,1015,94,1014,94,1014,95,1013,95,1012,96,1010,98,1009,98,1010,98,1010,97,1009,97,1009,96,1009,95,1009,94,1008,93,1009,93,1008,93,1008,92,1008,91,1007,89,1007,88,1006,86,1006,85,1006,84,1006,83,1007,82,1007,80,1008,80,1009,80,1009,79,1010,79,1010,78,1010,77,1011,77,1012,77,1012,76,1014,76,1014,77,1015,77,1014,76,1016,75,1017,75,1018,74,1019,74,1019,73,1020,73,1020,72,1021,72,1022,72,1023,71,1024,71,1025,70,1025,69,1026,69,1028,69,1028,68,1029,68,1030,68,1031,68,1030,67,1031,67,1032,66,1031,66,1032,65,1032,64,1033,63,1035,63,1035,64,1035,63,1036,63,1034,63,1033,62,1029,63,1030,63,1029,64,1029,65,1028,65,1029,65,1029,66,1028,66,1028,65,1027,65,1028,66,1027,66,1027,65,1026,66,1025,66,1025,67,1024,67,1023,67,1022,68,1021,68,1020,69,1020,68,1021,68,1021,67,1020,67,1019,68,1019,67,1019,66,1020,66,1020,65,1021,65,1020,65,1019,65,1018,66,1018,65,1017,65,1016,65,1015,65,1014,65,1013,65,1012,65,1011,65,1011,66,1010,66,1009,66,1009,67,1008,67,1007,68,1006,69,1004,69,1003,70,1003,71,1002,71,1003,72,1002,72,1003,72,1004,72,1005,72,1005,73,1004,73,1003,73,1002,73,1003,73,1002,73,1001,73,1000,73,1001,73,1000,73,999,73,998,73,998,74,997,74,997,73,996,73,996,74,995,74,994,74,993,74,993,73,994,73,995,73,996,73,995,73,995,72,994,72,992,72,991,72,992,72,991,72,988,71,987,72,986,72,986,73,985,73,985,72,984,72,983,72,983,73,982,73,981,73,980,72,979,72,978,72,979,73,978,73,977,73,977,72,974,72,971,72,970,72,969,72,967,73,966,73,965,74,964,75,962,75,962,76,961,77,960,77,959,77,959,78,958,79,957,79,956,79,955,80,954,81,953,81,953,82,952,82,952,83,951,83,949,84,948,84,948,85,947,85,946,85,945,86,946,87,947,87,948,87,949,87,950,86,950,87,950,88,949,89,950,89,951,89,951,88,952,88,953,88,952,88,951,88,952,89,953,89,952,89,952,90,951,90,952,90,953,90,954,89,955,89,955,90,954,90,955,90,956,88,955,88,956,88,955,88,956,88,958,88,959,88,960,88,961,89,960,89,961,89,961,90,962,90,963,90,964,91,963,91,963,92,962,91,962,92,963,92,963,93,964,94,963,94,964,95,963,95,962,96,962,97,962,96,962,97,961,97,962,97,962,98,961,98,961,99,961,100,962,100,961,100,961,101,961,102,961,103,960,103,960,104,961,103,961,104,960,104,960,105,959,106,958,106,958,107,957,108,955,109,955,110,955,111,954,111,954,112,953,112,952,113,952,114,951,114,950,115,949,116,948,116,949,116,948,116,948,117,947,117,947,118,946,118,946,119,945,119,945,120,944,120,943,121,941,122,940,122,939,122,938,122,937,122,936,122,936,121,937,121,936,121,937,121,936,121,935,121,936,121,935,121,935,120,935,121,934,121,934,122,933,122,933,123,932,123,932,122,932,123,932,124,931,124,931,123,931,122,932,122,933,122,933,121,933,120,933,118,933,116,932,116,933,116,934,116,934,115,935,115,935,114,935,115,936,115,938,115,939,115,939,114,940,114,940,113,941,112,941,111,942,111,942,110,942,109,942,108,943,108,944,108,944,107,943,107,943,106,944,106,943,106,943,105,942,105,940,106,939,106,938,106,938,107,937,107,936,107,934,108,934,107,933,107,932,107,932,106,931,106,932,106,932,105,931,105,932,104,931,104,930,104,929,103,928,103,928,102,927,102,926,102,925,102,924,102,923,102,923,101,922,101,922,100,921,100,922,99,921,99,922,99,921,98,920,97,920,96,919,95,919,94,918,94,919,94,918,94,919,93,918,93,917,93,918,92,917,92,916,92,917,92,916,91,915,91,914,91,913,91,912,90,911,90,909,90,908,90,906,90,904,91,902,91,901,91,900,92,900,93,901,93,902,93,901,94,902,94,902,95,901,95,900,95,900,96,899,96,899,97,898,98,897,99,898,99,897,100,897,101,896,101,895,101,893,102,891,102,890,101,889,101,888,100,887,101,886,101,885,100,884,100,883,100,882,100,880,100,879,101,879,102,878,102,877,102,876,102,874,102,872,103,871,103,870,103,868,103,865,102,863,101,861,100,860,100,859,99,858,100,858,99,857,99,855,99,854,99,853,100,852,100,851,100,850,100,849,100,847,99,846,99,847,98,846,98,846,97,846,96,844,96,842,95,840,95,839,95,838,95,837,94,836,94,836,95,835,95,834,95,834,96,833,97,833,98,834,98,833,98,834,99,834,100,833,101,832,101,831,101,830,101,829,101,828,101,828,100,827,101,827,100,826,101,825,101,824,100,823,100,822,99,821,99,820,99,819,99,818,99,818,98,817,98,816,98,815,98,814,99,813,99,812,99,812,100,810,100,810,101,809,101,808,101,809,101,808,102,807,102,806,102,805,102,804,102,804,103,803,103,802,103,801,103,800,102,799,102,800,102,800,101,799,101,799,102,798,102,797,102,796,102,795,102,795,101,794,101,795,100,794,100,793,100,792,100,792,99,791,98,790,98,790,97,789,97,789,98,788,98,787,98,786,98,785,98,784,98,783,98,783,97,782,97,781,97,781,98,780,98,779,98,778,96,778,95,776,94,775,93,775,92,774,91,773,91,773,90,772,90,769,89,769,88,770,88,770,87,769,87,769,88,768,87,768,88,767,88,766,88,766,89,765,89,764,89,763,89,763,90,762,90,761,90,760,90,759,90,759,89,760,89,761,89,761,88,760,88,760,89,759,89,759,88,758,88,757,88,758,88,758,89,757,89,757,88,756,88,757,88,756,88,756,87,756,88,755,88,754,88,753,88,752,88,752,87,753,87,753,88,753,87,753,86,752,86,752,85,751,85,750,85,749,85,749,84,748,84,747,85,747,84,746,84,747,84,747,85,746,85,746,84,746,85,745,85,744,85,744,86,743,86,742,86,741,86,740,86,739,86,738,87,737,87,737,86,737,87,736,87,735,87,735,88,735,87,734,87,733,87,732,87,732,88,731,88,732,88,731,88,730,88,729,88,728,88,727,88,727,89,727,88,726,88,726,89,725,89,725,88,725,89,724,88,724,89,724,88,723,88,723,89,722,89,723,89,723,90,722,90,723,90,724,90,723,90,723,91,724,91,725,91,726,91,726,92,725,92,724,92,724,91,724,92,723,92,723,91,723,92,722,92,723,92,722,92,722,93,723,93,722,94,721,94,720,95,720,94,720,95,721,95,721,96,722,96,723,96,724,96,724,97,725,97,724,97,724,98,722,99,720,98,719,98,719,99,718,99,717,99,717,98,716,98,715,98,715,97,714,97,713,97,713,98,712,98,711,97,710,97,710,98,709,98,709,97,709,98,708,98,707,99,706,99,706,98,706,99,705,98,704,98,704,97,703,97,703,98,704,98,703,98,704,98,703,98,704,99,703,99,703,98,702,98,702,97,701,97,700,97,700,96,699,96,698,96,697,96,697,95,696,95,696,96,695,95,695,96,694,96,693,96,694,96,693,96,693,95,692,95,692,96,691,96,691,97,690,97,689,97,688,97,688,98,687,98,686,99,685,99,686,99,686,100,686,101,685,101,684,101,684,100,683,100,683,99,682,99,682,100,681,100,682,100,681,100,682,100,681,100,681,101,680,101,680,102,680,103,681,103,680,103,680,104,679,105,681,106,681,107,682,107,683,107,684,107,684,108,685,108,686,109,687,110,686,110,685,110,685,111,686,111,687,111,687,112,686,112,685,112,686,112,686,113,685,113,684,113,683,113,683,114,683,113,682,113,682,114,682,113,682,114,682,115,681,115,681,116,680,116,681,116,680,116,680,117,681,117,681,118,682,119,682,120,682,119,683,119,682,119,682,120,682,121,683,122,683,123,684,124,685,125,685,126,684,126,683,126,683,127,682,127,681,127,681,126,680,125,679,125,678,125,678,124,678,125,678,124,677,124,676,124,677,123,676,123,675,123,675,122,674,122,674,123,674,122,673,122,672,122,672,123,671,123,671,122,670,122,669,122,669,121,668,121,667,121,666,121,665,121,664,121,664,120,663,120,662,120,661,120,660,120,659,120,658,119,657,118,656,118,655,117,654,117,653,117,653,116,653,117,652,116,651,116,651,115,650,115,649,115,650,115,650,114,650,115,650,114,650,115,650,114,651,115,652,115,652,114,652,115,653,115,653,114,652,114,653,114,652,113,653,113,653,112,654,112,654,113,654,112,655,112,654,112,654,111,653,111,653,110,653,111,654,110,655,111,655,110,656,110,657,109,658,109,657,109,656,109,655,109,656,109,655,109,654,109,654,108,655,108,656,107,657,107,658,107,659,107,659,106,660,106,659,106,659,105,658,105,659,104,660,104,659,104,659,103,660,103,660,102,659,102,658,102,658,101,657,101,656,101,655,101,655,100,654,100,654,101,653,100,652,100,652,99,651,99,650,99,650,100,649,100,648,100,648,99,647,99,646,99,646,98,645,98,646,97,645,97,644,97,643,97,642,97,642,96,642,95,643,95,642,95,642,94,641,94,641,93,640,94,640,93,639,93,639,94,638,94,637,94,637,93,637,94,636,94,635,94,634,94,634,93,634,92,633,91,634,91,635,91,636,91,637,91,638,90,637,90,638,90,637,90,637,89,636,89,635,89,635,88,634,88,633,88,633,87,633,86,632,86,632,85,633,85,632,85,633,85,632,85,632,84,631,84,631,83,630,83,629,83,628,83,627,82,626,83,626,82,625,82,624,82,624,81,624,80,623,80,622,80,623,80,623,79,622,78,622,77,623,77,623,76,622,76,623,76,622,76,622,75,622,74,623,74,623,73,624,73,624,72,623,71,624,71,625,72,625,71,626,71,627,71,626,71,627,70,628,71,629,71,630,71,629,70,628,70,627,70,626,69,625,69,626,69,625,69,626,69,625,69,626,69,625,68,626,68,625,68,625,69,624,69,623,69,625,68,626,67,627,67,629,66,630,65,631,64,633,63,634,62,633,61,632,61,632,60,631,60,630,59,631,58,630,57,629,57,630,57,630,56,629,56,628,56,628,55,629,55,628,55,629,54,630,53,630,54,630,53,629,52,628,51,628,50,627,50,627,49,628,49,629,48,630,47,629,47,628,46,626,46,625,45,626,44,625,44,626,43,627,43,630,42</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>631,254,631,255,632,255,632,256,632,257,632,258,631,258,631,257,631,258,630,258,629,258,629,257,629,258,629,259,628,259,627,258,627,259,626,258,626,257,627,257,627,256,628,255,629,254,629,255,630,255,630,254,631,254</Points>\n    <Keys>Rwanda, RWA, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>577,119,577,119</Points>\n    <Keys>San Marino, SMR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>559,250,559,249,560,249,560,250,559,250</Points>\n    <Keys>Sao Tome and Principe, STP, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>562,246,561,246,562,246,562,245,562,246</Points>\n    <Keys>Sao Tome and Principe, STP, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>708,174,708,173,708,172,709,172,708,172,709,171,709,172,708,172,709,172,709,173,708,173,708,174</Points>\n    <Keys>Saudi Arabia, SAU, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>657,154,660,154,663,156,667,158,668,158,669,159,670,159,670,160,670,162,672,162,674,163,676,164,677,164,679,163,680,163,682,164,683,165,685,165,685,166,686,166,686,167,686,168,687,168,687,169,687,168,687,169,688,169,689,170,690,170,689,170,690,171,690,172,689,172,689,173,690,173,690,172,690,173,690,174,690,173,691,174,691,175,691,176,692,176,692,178,694,180,696,183,706,184,707,184,708,184,708,187,695,194,682,198,676,205,673,198,672,198,671,199,671,198,670,198,669,198,669,199,669,200,669,201,668,201,668,200,667,200,667,199,666,198,665,197,664,196,664,195,663,195,663,194,663,193,662,193,662,192,662,191,661,191,661,190,660,190,659,189,658,189,658,188,657,187,657,186,657,185,656,185,657,185,657,184,657,183,656,182,657,182,656,182,656,181,655,180,655,179,654,179,653,178,652,178,652,177,651,176,651,175,651,174,650,173,649,173,650,173,650,172,649,172,648,171,648,170,647,169,646,168,646,167,645,167,645,166,644,166,643,166,644,166,644,165,644,164,644,163,644,162,645,163,646,163,647,163,648,163,648,162,649,162,650,161,651,161,652,160,653,159,654,159,653,158,652,158,651,157,651,156,652,156,653,155,654,155,655,155,656,155,657,154</Points>\n    <Keys>Saudi Arabia, SAU, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>490,202,491,201,492,201,493,201,494,201,494,200,494,201,495,200,495,201,496,201,497,201,498,202,499,202,500,204,501,204,501,205,502,205,502,206,503,206,503,207,503,208,504,208,503,208,504,209,503,209,503,210,504,210,504,211,504,210,505,210,505,211,505,212,505,213,504,213,503,213,502,214,502,213,501,213,500,213,498,213,498,212,494,212,493,213,492,213,491,213,490,213,489,213,489,214,489,213,490,213,491,213,492,213,493,213,493,212,493,213,492,213,491,212,491,213,490,213,490,212,490,213,490,212,490,213,489,213,489,212,489,211,492,211,492,210,493,210,494,210,495,210,496,210,496,211,497,211,498,210,496,210,496,209,496,210,495,210,495,209,494,209,493,209,493,210,490,210,490,209,490,210,490,209,489,209,490,209,490,208,489,208,490,208,489,208,489,209,489,208,489,207,488,207,487,206,487,207,487,206,488,206,489,205,489,204,490,203,490,202</Points>\n    <Keys>Senegal, SEN, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>707,264,707,263,707,264</Points>\n    <Keys>Seychelles, SYC, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>706,265,706,264,706,265</Points>\n    <Keys>Seychelles, SYC, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>502,228,501,228,502,228</Points>\n    <Keys>Sierra Leone, SLE, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>501,223,501,222,502,222,502,221,503,221,504,221,506,221,507,222,508,223,507,223,508,223,508,224,508,225,507,226,508,225,508,226,508,225,509,225,509,226,508,226,508,227,507,227,507,228,506,228,506,229,505,229,505,230,504,229,502,228,503,228,502,228,502,227,501,227,501,226,500,226,500,225,501,225,500,225,500,224,500,223,501,223</Points>\n    <Keys>Sierra Leone, SLE, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>851,247,850,247,851,246,851,247</Points>\n    <Keys>Singapore, SGP, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>590,105,590,104,591,104,592,104,593,104,593,103,594,103,595,103,595,102,596,102,597,102,598,102,599,102,599,103,600,103,601,102,602,102,602,103,603,102,604,102,605,103,606,103,607,103,607,104,606,104,606,105,605,105,604,105,603,105,602,105,601,105,601,106,600,106,599,106,598,106,597,106,596,106,596,107,595,107,593,107,592,107,591,106,590,106,590,105</Points>\n    <Keys>Slovakia, SVK, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>588,111,587,110,588,110,589,110,588,110,589,110,589,111,588,111,588,112,587,112,586,112,587,112,587,113,586,113,585,113,586,113,586,114,585,114,586,114,585,114,586,114,585,114,584,114,583,114,583,113,583,114,582,114,581,114,580,114,581,114,581,113,580,113,580,112,580,111,581,111,582,111,583,111,584,111,585,111,586,111,586,110,588,111</Points>\n    <Keys>Slovenia, SVN, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1011,275,1010,275,1010,274,1011,274,1011,275</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1024,279,1023,279,1022,278,1022,277,1021,276,1022,276,1021,276,1021,275,1022,276,1022,275,1022,276,1023,276,1022,277,1023,277,1023,278,1024,279</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1007,271,1006,271,1005,270,1005,269,1004,269,1004,268,1004,267,1005,267,1005,268,1006,268,1006,269,1007,269,1007,270,1007,271</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1010,274,1009,274,1009,273,1010,273,1010,274</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1027,283,1025,283,1024,282,1023,282,1023,281,1024,281,1025,282,1026,282,1026,283,1027,283</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1014,277,1013,277,1013,276,1014,276,1014,277</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1003,267,1003,266,1004,266,1004,267,1003,267</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1021,280,1020,280,1019,280,1018,279,1018,278,1019,278,1019,279,1021,279,1022,280,1021,280</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1013,276,1012,276,1012,275,1011,275,1011,276,1011,275,1012,275,1012,274,1012,275,1013,275,1013,276</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1024,280,1024,279,1024,280</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1021,286,1020,285,1019,285,1020,285,1021,286</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1012,273,1011,273,1011,272,1010,272,1009,271,1009,270,1010,271,1011,271,1011,272,1012,272,1012,273</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1019,276,1018,276,1017,275,1016,274,1015,274,1015,273,1016,273,1016,274,1018,274,1018,275,1019,275,1019,276</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>701,214,700,213,699,213,700,213,700,212,701,213,702,212,702,213,703,213,702,213,701,214</Points>\n    <Keys>Somalia, SOM, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>668,217,669,216,670,216,670,217,671,218,672,219,673,219,674,219,677,218,678,218,679,218,681,217,682,217,683,217,684,217,685,217,686,217,688,216,690,216,691,215,692,215,693,215,693,217,693,218,693,219,694,219,693,219,692,219,692,220,692,221,692,222,692,223,691,223,691,224,690,225,690,226,689,227,688,229,687,230,687,231,687,232,686,233,685,234,685,235,684,236,683,238,682,239,681,240,680,241,679,242,678,243,677,244,676,244,675,245,673,246,672,247,671,248,670,248,669,249,668,250,668,251,667,252,666,253,665,254,664,256,664,255,663,253,662,251,662,242,664,241,665,239,665,238,666,238,667,238,668,238,668,237,669,236,670,236,671,236,674,236,679,231,683,226,681,226,676,225,672,223,670,222,669,222,669,221,668,220,668,219,667,219,668,217</Points>\n    <Keys>Somalia, SOM, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>628,317,629,317,630,317,630,318,632,317,633,317,633,318,634,320,634,321,635,321,635,322,635,323,636,324,636,326,635,327,636,327,635,328,634,328,633,328,633,329,632,330,632,331,632,332,633,332,634,332,635,332,636,331,638,331,638,332,637,333,637,335,637,336,636,337,635,337,636,337,635,337,634,338,633,339,633,340,632,341,631,342,630,343,629,344,629,345,628,345,628,346,627,347,626,348,625,348,624,349,623,350,622,350,620,351,619,352,618,352,617,352,616,352,617,353,616,353,615,352,614,353,613,353,611,353,610,352,610,353,609,353,608,353,608,352,608,353,607,352,607,353,606,353,605,353,605,354,604,354,603,354,602,354,601,354,600,355,599,355,597,354,598,354,597,354,597,353,597,354,596,354,596,353,595,353,595,354,594,353,595,352,594,351,594,350,593,350,594,350,593,350,593,349,594,349,594,348,595,348,595,347,594,346,594,345,593,344,592,343,591,342,591,341,590,339,590,338,590,337,589,337,589,336,590,336,590,335,591,335,592,335,592,336,591,336,592,336,592,337,593,337,594,337,595,337,596,337,597,337,598,337,598,336,599,336,599,333,600,329,600,325,601,326,601,327,602,327,601,327,602,327,602,328,602,329,602,330,601,330,601,331,602,331,603,331,604,331,605,331,606,330,607,329,608,328,608,327,609,326,610,326,610,327,611,327,612,327,612,328,613,328,614,328,615,328,616,328,616,327,617,326,617,325,619,324,620,323,620,322,620,321,621,321,622,321,622,320,623,320,623,319,624,319,625,318,626,318,626,317,627,317,628,317</Points>\n    <Keys>South Africa, ZAF, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>626,336,625,336,624,337,623,337,622,338,622,339,621,339,621,341,622,341,622,342,623,342,624,342,624,341,625,341,626,341,627,340,627,339,628,339,627,338,627,337,626,337,626,336</Points>\n    <Keys>South Africa, ZAF, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>497,166,496,166,497,166,497,165,498,164,498,165,498,166,497,166</Points>\n    <Keys>Spain, ESP, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>549,133,548,132,547,132,547,131,548,131,549,131,550,131,550,132,549,132,549,133</Points>\n    <Keys>Spain, ESP, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>493,167,492,167,492,166,493,166,493,167</Points>\n    <Keys>Spain, ESP, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>489,167,489,166,489,165,490,165,491,165,490,165,490,166,489,167</Points>\n    <Keys>Spain, ESP, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>544,134,543,134,543,133,544,133,544,134</Points>\n    <Keys>Spain, ESP, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>498,164,498,163,499,163,499,164,498,164</Points>\n    <Keys>Spain, ESP, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>486,165,486,164,486,165</Points>\n    <Keys>Spain, ESP, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>552,131,551,131,551,130,552,130,552,131,553,131,552,131</Points>\n    <Keys>Spain, ESP, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>544,123,545,123,546,123,547,123,548,123,549,123,549,124,549,125,548,125,547,126,546,126,546,127,545,127,543,127,542,127,542,128,541,129,540,130,539,131,538,132,539,133,539,134,540,134,540,135,539,135,538,135,538,136,537,137,537,138,537,137,537,138,536,138,535,138,534,139,534,140,533,140,532,140,531,140,529,140,528,140,526,140,525,141,524,141,524,142,523,142,523,143,522,142,521,142,521,141,520,141,520,140,520,139,519,139,518,139,517,139,517,138,518,137,518,136,519,136,518,136,518,135,518,134,519,133,518,133,518,132,517,132,517,131,517,132,518,131,519,130,518,130,519,130,519,129,519,128,519,127,520,127,521,126,520,125,520,126,520,125,519,125,518,125,517,125,516,125,515,125,515,124,514,124,513,125,513,124,514,124,514,123,513,124,513,123,514,123,513,123,512,123,513,122,512,122,512,121,513,121,513,120,513,121,514,121,514,120,515,120,515,121,515,120,514,120,515,120,516,119,517,119,518,120,519,120,520,120,521,120,522,120,523,120,524,120,525,120,527,120,528,120,529,120,530,120,531,120,533,121,534,120,535,121,536,121,537,122,538,122,539,122,540,122,541,122,542,122,544,122,544,123</Points>\n    <Keys>Spain, ESP, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>779,228,779,227,779,226,779,225,779,226,779,227,779,226,779,225,779,224,780,223,780,222,781,222,780,222,779,221,780,221,781,222,780,221,781,222,782,223,782,224,783,224,783,225,784,225,784,226,784,227,785,227,784,227,785,228,785,229,785,231,784,231,783,232,781,233,780,232,779,231,779,230,779,229,779,228</Points>\n    <Keys>Sri Lanka, LKA, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>352,199,352,199</Points>\n    <Keys>St. Christopher-Nevis, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>352,199,351,199,351,198,351,199,352,199</Points>\n    <Keys>St. Christopher-Nevis, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>357,209,356,209,357,208,357,209</Points>\n    <Keys>St. Lucia, LCA, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>356,212,356,211,356,212</Points>\n    <Keys>St. Vincent and the Grenadines, VCT, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>356,212,356,212</Points>\n    <Keys>St. Vincent and the Grenadines, VCT, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>356,212,356,212</Points>\n    <Keys>St. Vincent and the Grenadines, VCT, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>356,212,356,212</Points>\n    <Keys>St. Vincent and the Grenadines, VCT, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>355,213,355,213</Points>\n    <Keys>St. Vincent and the Grenadines, VCT, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>355,213,355,213</Points>\n    <Keys>St. Vincent and the Grenadines, VCT, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>355,213,355,213</Points>\n    <Keys>St. Vincent and the Grenadines, VCT, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>356,212,355,212,356,212,355,212,356,212</Points>\n    <Keys>St. Vincent and the Grenadines, VCT, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>356,212,356,212</Points>\n    <Keys>St. Vincent and the Grenadines, VCT, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>356,211,356,210,356,211</Points>\n    <Keys>St. Vincent and the Grenadines, VCT, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>646,237,645,237,643,237,641,238,640,239,639,239,638,239,637,239,636,240,635,240,635,239,634,239,634,240,633,239,632,239,632,240,632,239,631,240,631,239,630,239,630,238,629,238,629,237,628,236,627,237,626,237,625,237,625,238,625,237,624,237,623,237,623,236,622,236,622,235,621,235,621,234,621,233,620,233,619,232,618,231,619,231,618,230,616,228,615,228,615,227,614,226,613,226,612,226,612,225,612,224,610,224,610,223,610,224,610,223,610,222,611,221,609,219,609,218,608,218,608,217,608,216,607,216,607,214,607,213,606,212,606,213,605,213,605,212,605,211,606,211,606,210,606,209,607,208,607,207,608,206,608,205,608,204,609,203,610,203,611,203,611,194,611,192,612,190,613,191,615,191,615,189,615,184,616,185,618,185,620,185,622,185,624,184,626,185,627,184,629,185,631,184,633,185,634,184,634,185,636,184,638,184,639,184,641,185,642,185,642,184,644,184,644,182,645,182,646,181,647,182,648,182,648,183,649,184,650,184,650,185,650,186,651,186,651,187,651,188,651,189,651,190,652,193,652,194,653,194,653,195,654,195,654,196,655,196,655,197,655,198,654,198,653,198,652,198,652,199,651,199,650,199,651,199,650,200,651,200,650,201,650,202,650,203,650,204,649,204,649,205,649,206,649,207,649,208,649,209,649,210,648,210,648,211,648,212,647,213,646,214,645,215,645,216,644,217,645,217,644,218,643,218,642,219,643,220,642,220,642,222,642,224,642,225,641,225,640,225,639,225,639,226,638,227,639,227,640,227,642,228,642,229,643,230,644,230,644,231,644,232,644,233,645,233,645,234,646,234,647,234,647,235,647,236,647,237,646,237</Points>\n    <Keys>Sudan, SDN, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>367,240,366,240,367,240,366,240,366,239,365,239,365,238,366,238,366,237,366,236,366,235,367,235,368,235,367,235,368,234,368,233,369,233,370,233,371,233,372,233,374,233,375,233,374,233,375,233,376,233,377,233,378,233,377,234,377,235,376,235,376,236,376,238,377,238,376,238,377,239,377,240,378,240,377,240,377,241,377,242,376,243,376,244,375,244,375,243,374,243,373,243,372,243,371,243,371,244,372,244,372,245,370,245,370,244,369,244,368,243,368,242,368,241,368,240,367,240</Points>\n    <Keys>Suriname, SUR, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>615,21,614,21,615,21,616,20,615,21</Points>\n    <Keys>Svalbard, SJM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>620,15,619,14,620,14,621,14,620,15</Points>\n    <Keys>Svalbard, SJM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>624,14,623,14,624,14,625,14,626,14,627,14,628,14,629,14,627,14,625,14,624,14</Points>\n    <Keys>Svalbard, SJM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>607,19,607,18,608,18,607,18,606,18,602,18,603,18,603,17,604,17,602,16,605,16,608,16,610,16,609,16,610,17,611,17,612,17,614,17,612,17,612,18,611,18,610,18,609,18,608,18,608,19,607,19</Points>\n    <Keys>Svalbard, SJM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>635,10,634,10,639,10,640,10,635,10</Points>\n    <Keys>Svalbard, SJM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>602,16,601,16,602,16,601,16,602,15,601,15,600,15,603,15,604,15,606,15,606,16,605,16,602,16</Points>\n    <Keys>Svalbard, SJM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>597,27,596,27,597,27</Points>\n    <Keys>Svalbard, SJM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>610,13,609,13,608,13,607,13,607,12,608,12,602,12,600,12,599,12,598,12,600,12,601,12,603,12,601,11,606,11,607,11,606,11,605,11,601,11,598,11,596,11,594,11,596,10,594,10,595,10,594,10,593,10,594,10,596,10,597,10,598,10,597,10,596,9,597,9,597,10,598,10,599,10,599,9,598,9,599,9,598,9,599,9,600,9,601,9,601,10,602,10,603,10,604,10,605,10,604,10,605,10,606,10,606,11,607,11,607,10,606,10,607,10,607,9,608,9,607,9,608,10,608,9,609,9,610,9,609,10,608,10,609,10,610,10,611,10,613,10,612,9,613,9,613,10,614,9,614,10,616,10,615,10,616,10,617,10,619,10,620,10,621,10,621,11,619,11,617,12,615,13,614,12,612,13,610,13</Points>\n    <Keys>Svalbard, SJM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>589,21,588,21,589,21,586,20,588,20,589,20,588,19,587,19,587,20,585,19,583,19,582,19,582,18,581,18,582,18,581,18,582,18,583,18,584,18,587,18,588,18,587,18,586,18,584,18,587,17,589,17,590,17,591,17,590,17,591,17,590,17,589,17,587,17,586,17,585,17,581,17,580,17,581,17,580,16,581,16,582,16,582,17,583,17,582,16,585,16,584,16,585,16,586,16,587,16,586,16,587,15,590,15,591,15,590,15,588,15,589,15,590,15,590,14,589,14,589,15,588,15,587,15,586,15,585,15,586,15,586,14,585,14,585,15,584,15,584,14,583,14,583,15,584,15,582,15,582,16,581,16,580,16,579,16,578,16,578,15,577,15,579,15,578,15,575,15,575,14,574,14,575,14,574,14,576,14,577,14,576,14,575,14,576,14,576,13,575,13,576,13,575,13,574,13,575,13,573,13,572,13,572,12,573,12,572,12,574,12,573,11,574,11,575,11,576,11,577,12,577,11,576,11,577,11,579,11,581,11,580,11,579,11,577,12,579,12,580,12,579,12,580,12,581,12,581,13,582,13,582,12,581,12,582,12,582,11,583,11,584,11,585,12,586,12,587,13,586,13,587,13,588,13,588,14,589,14,588,13,587,13,587,12,586,11,587,11,588,11,587,11,588,10,589,10,590,11,592,11,594,11,592,12,593,12,592,12,593,12,594,12,595,12,596,12,596,13,595,13,596,13,597,13,598,13,599,13,604,14,604,15,602,14,601,15,599,15,598,15,599,15,596,15,597,15,596,16,597,16,596,16,597,16,596,16,595,16,595,17,595,18,594,18,593,18,592,18,592,19,591,19,591,20,590,20,591,20,591,21,590,21,589,21</Points>\n    <Keys>Svalbard, SJM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>635,328,636,329,636,330,636,331,635,332,634,332,633,332,632,332,632,331,632,330,633,329,633,328,634,328,635,328</Points>\n    <Keys>Swaziland, SWZ, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>574,76,575,76,574,76</Points>\n    <Keys>Sweden, SWE, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>589,82,589,81,589,80,590,80,590,79,591,78,590,80,590,81,589,82</Points>\n    <Keys>Sweden, SWE, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>594,80,594,79,594,78,595,77,596,77,597,77,596,77,596,78,596,79,595,79,596,79,595,79,595,80,594,80</Points>\n    <Keys>Sweden, SWE, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>601,43,602,43,602,44,603,44,605,45,606,45,608,45,609,46,610,47,610,48,611,48,611,49,610,49,611,49,611,50,612,50,611,50,611,51,610,51,611,52,612,52,612,53,611,53,610,53,609,53,608,53,607,53,608,53,607,53,606,53,607,53,606,53,607,53,607,54,606,53,606,54,607,54,605,54,606,54,605,54,606,54,605,54,604,54,604,55,605,55,604,55,603,54,603,55,604,55,604,56,603,56,604,57,603,58,602,58,602,59,601,59,600,59,600,60,600,59,600,60,599,60,598,60,597,60,597,61,596,61,595,61,594,62,595,62,594,62,593,62,593,63,594,63,593,63,592,63,593,63,592,63,591,63,592,63,592,64,592,65,592,66,591,65,591,66,591,67,591,68,592,68,591,68,591,69,592,69,593,69,594,69,594,70,595,69,595,70,594,70,595,70,596,70,596,71,597,71,596,71,597,71,596,71,596,72,595,72,594,72,594,73,593,72,593,71,593,72,592,72,593,71,592,71,592,72,592,71,592,72,593,72,592,72,591,72,590,72,589,72,588,72,590,72,591,72,591,73,592,73,593,73,593,72,594,73,594,72,595,72,595,73,595,72,595,73,594,73,595,73,594,73,595,73,594,73,593,73,593,74,593,73,592,73,592,74,591,74,591,75,591,74,591,75,590,75,588,75,589,75,590,75,589,75,590,75,589,75,590,76,589,76,590,76,590,77,589,76,590,77,589,77,590,77,589,77,590,77,589,77,589,78,590,78,589,78,589,79,589,80,589,81,588,81,587,82,586,82,585,82,584,82,583,82,582,83,583,84,582,84,581,84,580,84,579,84,578,84,579,84,579,83,578,83,577,82,578,82,577,81,578,81,577,80,577,79,576,79,576,78,575,78,575,77,574,77,575,77,575,76,575,75,574,76,574,75,574,76,574,75,573,75,573,74,573,73,574,73,574,74,575,73,574,72,575,71,576,71,577,70,577,69,576,68,576,67,577,67,578,66,577,66,576,65,576,64,576,63,576,62,576,61,575,61,576,60,576,59,578,59,578,58,579,58,581,58,582,58,582,57,581,57,582,55,583,55,583,54,583,53,583,52,585,52,586,52,586,51,588,50,589,49,588,48,589,48,590,47,591,46,593,47,594,46,594,45,595,45,596,45,599,45,600,45,599,45,600,45,601,44,600,44,600,43,601,43</Points>\n    <Keys>Sweden, SWE, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>568,109,569,109,569,110,570,110,571,109,571,110,571,111,570,111,570,112,569,112,569,111,569,112,568,112,568,111,567,111,567,112,567,113,566,113,567,113,566,113,566,112,565,112,565,111,564,112,563,112,563,113,562,113,561,113,560,112,560,111,559,111,558,111,558,112,557,112,558,112,557,112,558,112,558,111,558,110,559,110,560,109,561,109,561,108,560,108,561,108,560,108,561,108,562,108,563,108,562,108,563,108,564,108,565,108,565,107,566,107,566,108,567,108,568,108,568,109</Points>\n    <Keys>Switzerland, CHE, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>667,139,665,141,664,141,663,141,663,142,664,143,664,144,663,144,663,145,663,146,663,147,660,148,656,150,655,151,654,151,653,152,652,152,652,153,651,153,650,154,650,153,649,153,648,153,647,152,646,152,646,151,647,151,646,151,647,150,648,150,647,150,647,149,648,149,649,149,648,149,649,148,649,147,649,146,648,146,648,147,647,147,647,146,647,145,647,144,647,143,648,143,649,142,650,142,649,141,649,140,650,140,651,140,651,141,652,141,653,140,654,140,655,140,656,140,657,141,658,140,659,140,660,140,661,140,662,139,663,139,664,139,665,139,666,139,667,139</Points>\n    <Keys>Syria, SYR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>902,185,902,184,901,183,900,183,900,182,900,181,900,180,901,178,901,177,902,177,902,176,903,175,904,175,905,175,905,176,905,177,905,178,904,178,904,179,904,181,903,182,902,183,902,184,902,185</Points>\n    <Keys>Taiwan, TWN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>752,130,751,130,751,131,751,130,750,130,748,130,748,131,747,131,747,132,748,132,749,132,750,132,751,132,752,132,753,132,754,132,755,132,755,133,755,132,756,132,756,133,757,132,758,132,759,132,760,132,761,132,760,132,760,133,761,134,761,135,762,135,763,134,763,135,764,135,764,136,764,137,764,138,765,138,765,139,764,139,764,138,763,138,761,139,760,139,761,139,761,138,759,138,759,139,758,139,757,139,757,140,756,140,755,140,754,140,754,139,754,137,753,137,753,136,754,136,753,135,752,135,751,135,751,136,750,137,750,138,749,138,748,138,748,139,747,139,746,139,745,139,744,139,744,140,743,139,743,138,744,137,744,136,745,136,744,136,744,135,744,134,743,133,743,134,743,133,742,133,742,132,743,132,744,132,745,132,745,131,746,131,746,130,747,130,746,130,745,130,746,130,747,130,748,130,747,129,748,128,749,129,749,128,750,128,751,128,751,127,751,128,752,128,751,128,752,128,751,129,751,130,752,130</Points>\n    <Keys>Tajikistan, TJK, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>658,270,658,269,657,269,657,268,658,268,658,269,658,270</Points>\n    <Keys>Tanzania, United Republic of, TZA, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>658,274,659,274,659,273,659,274,658,274</Points>\n    <Keys>Tanzania, United Republic of, TZA, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>659,267,658,267,659,267,658,266,659,266,659,265,659,266,659,267</Points>\n    <Keys>Tanzania, United Republic of, TZA, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>628,264,629,264,630,263,630,262,631,262,631,261,632,260,632,259,631,259,631,258,631,259,631,258,632,258,632,257,632,256,632,255,631,255,631,254,632,253,634,253,635,253,636,253,638,253,640,254,641,254,642,254,644,255,647,256,648,257,652,260,653,260,652,261,653,261,657,264,657,265,657,266,656,268,656,269,656,270,657,270,657,271,658,271,658,272,658,273,657,273,657,274,658,274,658,275,657,275,657,276,658,276,658,277,658,278,658,279,659,280,659,281,659,280,659,281,660,281,661,282,661,281,661,282,660,282,660,283,659,283,658,283,657,284,656,284,655,285,654,284,653,284,653,285,652,286,651,286,651,285,650,285,650,286,649,286,648,286,648,285,647,285,646,285,644,285,644,284,643,284,644,283,643,282,643,281,643,280,642,279,641,279,641,280,641,279,640,279,639,279,638,279,638,278,637,278,636,278,635,278,635,277,634,277,634,276,633,276,632,276,632,275,631,273,631,272,630,271,629,271,628,269,628,268,628,267,628,265,628,264</Points>\n    <Keys>Tanzania, United Republic of, TZA, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>834,227,834,226,835,226,835,227,834,227</Points>\n    <Keys>Thailand, THA, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>838,189,838,190,839,190,839,189,840,189,840,190,840,189,841,189,841,190,841,191,841,192,842,192,843,192,843,193,844,193,843,194,843,195,843,196,843,197,842,197,842,198,843,198,844,197,845,197,845,196,846,196,847,197,848,197,848,196,849,197,849,196,849,195,850,195,851,195,851,196,852,196,852,197,853,197,853,198,854,198,854,199,854,200,854,201,854,202,855,202,856,202,856,203,856,204,856,205,856,206,856,207,855,207,855,208,855,207,854,207,853,207,852,207,851,207,850,207,849,208,848,208,848,209,847,209,847,210,847,211,847,212,847,213,848,213,848,214,848,215,848,216,848,215,848,214,847,214,846,214,847,213,846,214,846,213,846,214,846,213,845,213,845,212,844,213,843,213,843,212,842,213,842,212,842,211,842,210,841,210,840,210,839,211,840,211,839,212,840,214,839,215,838,217,838,218,837,219,837,220,837,221,837,222,837,223,838,223,839,223,839,224,839,225,840,225,840,227,841,228,841,229,841,228,840,228,840,227,840,228,841,229,842,230,843,230,844,230,843,230,844,230,845,231,846,232,845,233,844,233,843,233,843,234,843,233,842,233,843,233,843,232,842,232,842,231,841,231,840,230,840,231,839,231,839,230,839,229,838,229,838,228,838,229,838,228,838,229,838,228,837,228,837,227,836,226,835,226,835,225,835,226,834,226,834,225,834,224,835,223,834,223,835,223,835,222,835,221,836,220,836,219,836,218,837,218,838,216,838,215,838,214,838,213,837,212,837,211,837,210,837,209,836,208,835,207,834,206,834,205,835,205,835,204,835,205,835,204,835,203,835,202,836,202,836,201,836,202,835,201,835,200,835,199,834,198,833,198,833,197,832,196,832,195,833,195,833,194,833,193,833,192,834,192,834,191,835,191,836,191,837,191,837,190,838,190,838,189</Points>\n    <Keys>Thailand, THA, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>539,217,541,217,541,218,542,218,542,219,544,221,544,222,544,223,544,224,544,225,544,229,544,230,545,231,545,232,544,232,543,232,542,232,542,231,541,230,541,229,541,228,541,227,541,226,542,226,542,225,541,225,541,224,541,223,541,222,540,222,541,222,540,222,540,221,541,222,541,221,540,221,541,220,540,220,540,219,539,219,539,218,540,218,540,217,539,217</Points>\n    <Keys>Togo, TGO, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>16,307,15,307,16,307,15,307,16,307</Points>\n    <Keys>Tonga, TON, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>14,314,13,314,14,314,13,314,14,314</Points>\n    <Keys>Tonga, TON, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>17,307,17,307</Points>\n    <Keys>Tonga, TON, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>17,309,17,309</Points>\n    <Keys>Tonga, TON, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>14,310,14,310</Points>\n    <Keys>Tonga, TON, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>17,310,17,310</Points>\n    <Keys>Tonga, TON, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>15,315,15,314,15,315</Points>\n    <Keys>Tonga, TON, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>18,307,17,307,17,306,18,306,17,306,17,307,17,306,18,306,18,307</Points>\n    <Keys>Tonga, TON, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>354,220,355,220,355,219,355,218,356,218,357,218,356,218,356,219,357,220,355,220,354,220</Points>\n    <Keys>Trinidad and Tobago, TTO, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>572,150,572,149,573,149,572,150</Points>\n    <Keys>Tunisia, TUN, NorthAfrica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>574,151,574,153,572,154,571,155,570,155,570,156,570,158,569,159,568,160,567,156,567,154,565,153,564,152,564,151,563,151,563,150,562,149,562,148,563,148,563,147,564,147,564,146,565,145,564,144,565,144,565,143,564,143,565,141,564,141,565,141,565,140,566,140,566,139,567,139,568,139,569,138,569,139,570,139,571,140,570,140,571,140,572,140,572,139,573,139,573,140,572,140,572,141,571,141,571,142,571,143,572,143,573,144,573,145,572,146,571,147,570,148,570,149,571,149,571,150,572,149,572,150,573,150,573,151,574,151</Points>\n    <Keys>Tunisia, TUN, NorthAfrica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>619,125,618,125,619,125,620,125,621,124,622,125,623,125,623,124,624,125,623,125,624,125,624,126,625,126,627,127,626,128,625,128,625,127,625,128,624,127,623,128,622,128,621,128,620,129,619,129,619,130,618,130,619,129,620,129,619,129,618,129,618,128,618,127,619,127,619,126,619,125</Points>\n    <Keys>Turkey, TUR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>664,126,665,126,667,126,668,126,669,127,670,127,670,128,671,128,670,129,671,130,670,130,672,130,673,131,674,131,674,132,673,131,673,132,672,132,672,133,672,134,672,135,673,135,673,136,672,137,673,137,673,138,674,139,673,139,672,140,672,139,671,139,670,139,669,139,669,138,668,139,668,138,667,139,666,139,665,139,664,139,663,139,662,139,661,140,660,140,659,140,658,140,657,141,656,140,655,140,654,140,653,140,652,141,651,141,651,140,650,140,649,140,649,141,650,142,649,142,648,143,647,143,647,142,647,141,648,141,648,140,647,140,646,140,647,140,646,141,644,140,643,140,642,141,642,142,641,142,640,142,639,142,638,142,637,142,636,142,636,141,634,141,633,140,632,140,631,140,631,141,631,142,630,142,629,142,628,142,627,142,627,141,627,140,626,140,626,141,626,140,625,140,624,140,624,141,623,141,624,141,624,140,623,140,624,140,623,140,623,141,622,140,622,141,622,140,623,140,624,140,624,139,623,139,622,140,621,140,621,139,622,139,622,138,621,138,621,137,621,136,620,136,619,136,618,136,618,135,619,136,619,135,619,134,619,135,620,136,620,135,621,135,620,135,620,134,621,134,620,134,620,133,619,133,620,133,620,132,619,132,618,132,618,131,618,130,619,130,620,129,621,129,622,130,623,130,623,129,624,129,623,129,625,129,626,129,627,129,626,129,628,128,629,128,628,128,627,128,627,127,629,127,630,127,632,127,633,127,634,127,635,126,636,126,636,125,637,125,639,125,640,124,642,125,643,125,644,125,645,124,645,125,646,126,647,125,648,126,649,127,649,126,650,126,650,127,651,127,652,127,653,127,654,128,655,128,656,127,657,127,658,127,659,128,660,128,661,127,662,127,663,127,664,126</Points>\n    <Keys>Turkey, TUR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>697,125,698,124,699,124,700,124,701,123,702,124,703,124,704,124,704,125,705,126,706,126,706,127,707,127,707,126,707,127,710,127,711,127,711,126,710,126,710,125,711,125,711,124,712,124,713,124,713,123,714,123,715,123,715,124,715,123,714,123,714,122,715,123,715,122,716,123,717,123,718,123,718,124,719,124,720,124,719,124,720,124,719,125,720,125,720,126,721,127,722,127,723,127,724,127,725,127,725,128,726,128,726,129,727,129,727,130,727,131,728,131,729,132,730,132,731,133,732,134,733,134,734,135,735,135,736,136,737,136,738,136,739,136,740,137,739,137,739,138,738,139,737,138,736,138,736,139,735,139,734,139,734,140,733,141,733,142,732,142,731,142,730,143,729,143,729,144,727,145,726,145,726,144,725,144,724,144,723,144,723,143,723,142,723,141,721,141,720,139,719,139,718,139,718,138,717,138,716,137,716,138,715,137,715,138,714,137,713,137,712,137,712,136,711,136,710,136,709,136,708,136,709,136,708,136,707,136,706,136,705,136,704,137,704,138,703,138,702,139,701,138,701,137,701,135,701,134,701,133,700,133,701,133,700,133,699,132,699,133,699,132,700,132,701,132,700,132,700,131,700,130,699,131,698,131,698,130,698,131,699,131,698,130,698,129,698,128,698,127,699,128,700,128,701,129,701,128,702,129,702,128,703,128,702,128,703,128,704,128,704,127,703,127,702,126,701,125,701,124,700,124,699,124,698,125,698,126,698,125,698,126,698,127,698,126,697,126,697,125</Points>\n    <Keys>Turkmenistan, TKM, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>319,188,318,187,319,187,320,187,320,188,319,188</Points>\n    <Keys>Turks and Caicos Islands, TCA, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>641,250,641,251,641,252,641,254,640,254,638,253,636,253,635,253,634,253,632,253,631,254,630,254,630,255,629,255,629,254,628,255,628,253,628,252,629,252,628,252,629,251,629,250,629,249,629,248,630,248,630,247,631,247,632,246,633,245,633,244,633,243,632,243,632,242,632,241,632,240,632,239,633,239,634,240,634,239,635,239,635,240,636,240,637,239,638,239,639,239,640,239,641,238,642,238,642,239,643,239,643,240,643,241,643,242,644,242,644,243,644,244,644,245,645,245,644,245,645,245,644,246,644,247,643,247,643,248,642,248,642,249,642,250,641,250</Points>\n    <Keys>Uganda, UGA, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>610,96,611,96,612,96,612,95,613,95,614,95,615,95,616,95,617,95,618,95,619,95,620,95,621,95,621,96,622,96,623,96,624,96,625,96,626,96,627,96,628,96,629,96,630,96,631,96,631,97,631,96,631,95,632,95,631,95,632,95,632,94,633,94,634,94,635,94,636,94,637,94,637,93,637,94,638,94,639,94,639,93,640,93,640,94,641,93,641,94,642,94,642,95,643,95,642,95,642,96,642,97,643,97,644,97,645,97,646,97,645,98,646,98,646,99,647,99,648,99,648,100,649,100,650,100,650,99,651,99,652,99,652,100,653,100,654,101,654,100,655,100,655,101,656,101,657,101,658,101,658,102,659,102,660,102,660,103,659,103,659,104,660,104,659,104,658,105,659,105,659,106,660,106,659,106,659,107,658,107,657,107,656,107,655,108,654,108,654,109,652,109,651,110,650,110,650,111,650,110,649,110,648,111,648,110,647,111,646,111,645,112,644,112,645,112,645,111,645,112,644,112,644,113,645,114,646,114,646,115,647,114,648,114,649,114,649,115,648,115,647,116,647,115,646,115,646,116,645,116,644,116,643,116,642,117,641,117,640,117,640,116,640,115,639,115,638,114,637,115,637,114,638,114,639,113,640,113,641,113,640,113,640,112,639,112,638,112,637,112,636,112,635,112,635,111,636,111,635,111,634,111,635,111,637,111,636,111,635,111,635,110,636,110,635,110,635,109,635,110,635,111,634,111,634,110,634,111,633,111,632,111,632,112,631,112,630,113,629,113,629,114,629,113,628,113,628,114,629,114,629,115,628,115,629,115,628,114,627,114,627,115,626,115,625,115,624,114,625,114,625,113,626,113,626,112,627,112,626,112,626,111,627,111,628,111,629,111,628,111,629,111,630,111,629,111,629,110,628,110,628,109,628,108,628,109,628,108,627,108,627,107,626,107,626,106,625,106,624,106,625,106,624,106,623,106,623,105,622,105,621,105,620,105,620,106,620,105,620,106,619,106,618,106,618,107,616,107,615,107,614,107,613,107,612,107,611,107,610,107,610,106,610,107,609,106,609,107,608,106,608,107,608,106,607,106,606,106,606,105,606,104,607,104,607,103,608,103,607,102,608,102,608,101,609,100,610,100,611,99,612,99,611,98,612,98,611,98,611,97,610,97,611,96,610,96</Points>\n    <Keys>Ukraine, UKR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>708,172,708,173,708,174,709,174,709,175,709,176,708,175,708,178,707,179,707,184,706,184,696,183,694,180,692,178,692,176,692,177,693,177,694,177,693,177,694,178,694,177,694,178,695,178,695,179,696,179,697,178,698,178,699,178,700,178,701,178,702,178,703,178,703,177,703,176,704,176,705,176,705,175,706,174,707,173,708,172</Points>\n    <Keys>United Arab Emirates, ARE, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>521,82,520,82,521,81,521,82,521,81,522,81,523,81,522,81,522,82,522,81,521,82</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>526,91,526,90,527,90,527,91,526,91</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>524,84,523,84,523,83,524,83,524,84</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>519,77,518,77,519,77,518,76,519,76,518,76,519,76,521,75,520,76,521,76,520,76,520,77,519,77,520,76,519,77,520,77,519,77</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>521,79,522,79,521,79,520,79,520,78,519,78,520,78,521,77,521,78,521,79,522,79,523,79,522,79,521,79</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>531,74,530,74,530,73,530,74,529,74,530,73,531,74</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>518,78,517,78,518,78,518,77,518,78</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>521,84,521,83,520,83,521,83,521,84</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>522,83,521,83,522,83,522,82,522,83</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>536,99,535,99,535,98,536,98,536,99</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>517,79,517,78,518,78,518,79,517,78,518,79,517,79</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>536,71,535,71,536,70,535,70,534,70,535,70,535,69,536,69,535,69,536,69,535,69,536,69,536,70,536,71</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>524,77,523,76,524,76,523,76,524,76,525,76,524,76,524,75,525,75,526,75,525,75,526,75,527,75,528,75,529,75,529,74,530,75,530,76,529,76,528,77,527,77,528,77,527,77,527,78,526,78,527,78,527,77,527,78,529,78,529,77,530,77,530,78,531,77,532,77,533,77,534,77,534,78,533,79,533,80,532,80,532,81,531,81,530,81,531,81,532,82,531,82,530,82,529,82,528,82,529,82,530,83,531,82,532,82,533,83,534,84,535,84,535,85,536,86,536,87,537,87,538,87,538,88,539,88,539,89,540,90,539,89,538,89,539,89,539,90,540,90,541,91,540,92,541,92,542,92,543,92,544,92,545,93,544,94,544,95,543,94,543,95,542,95,542,96,541,96,542,96,541,96,542,96,543,96,544,96,544,97,543,97,542,97,542,98,541,98,540,98,539,98,537,98,536,98,535,98,536,98,535,98,534,98,533,98,534,99,533,99,532,99,531,98,529,99,529,98,529,99,529,100,528,100,527,100,527,99,527,100,526,99,525,100,524,100,524,101,524,100,523,100,522,100,523,100,524,99,525,99,526,98,526,97,526,98,527,97,528,97,530,97,531,96,532,95,531,96,530,96,529,96,528,96,527,96,526,95,525,95,525,96,524,95,525,95,524,95,524,94,525,94,526,94,527,94,527,93,528,93,527,93,527,92,528,92,527,92,526,92,525,92,526,92,526,91,527,91,528,91,529,91,529,90,530,90,530,91,530,90,531,91,531,90,531,91,531,90,530,90,531,89,530,89,531,89,531,88,530,88,529,88,529,87,529,86,530,86,529,86,528,86,527,86,526,86,525,86,525,87,525,86,524,86,524,85,524,86,525,86,524,85,525,85,526,84,525,84,525,83,526,83,525,82,525,83,525,82,525,83,524,83,523,83,524,82,525,82,524,82,523,82,523,83,524,83,523,83,523,84,523,85,522,85,522,84,522,83,523,83,522,83,523,83,522,83,523,82,522,83,523,82,523,81,524,81,523,81,524,81,523,81,524,81,525,80,524,80,523,81,522,81,521,81,522,81,523,80,521,80,522,80,522,79,523,80,522,79,523,79,522,79,523,79,522,79,522,78,523,78,522,78,523,78,522,78,522,77,523,77,524,77,523,77,524,77</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>132,78,131,78,132,78,131,78,132,78,131,78,131,77,130,77,131,77,130,76,131,76,130,76,131,76,132,76,133,76,132,76,133,76,133,77,132,77,133,77,133,76,135,76,135,77,134,77,135,77,134,77,133,77,134,77,135,77,135,78,133,78,132,77,132,78,133,78,132,78</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>77,80,78,80,78,79,78,80,78,79,77,79,77,80,77,79,78,79,77,79,76,79,77,79,77,80,76,80,76,79,75,78,76,78,77,77,77,78,78,78,78,79,78,78,79,78,78,77,79,77,79,78,79,77,80,77,79,77,80,77,80,76,80,77,81,77,82,77,83,77,82,77,82,78,82,77,82,78,83,78,82,78,81,78,80,78,81,78,82,78,82,79,81,79,81,78,80,78,80,79,81,79,80,79,79,79,79,80,78,80,77,80</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>132,80,132,79,133,79,132,80</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>80,80,79,79,80,79,81,79,80,79,80,80</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>139,81,138,80,137,79,138,79,140,80,141,80,141,81,140,81,140,80,139,80,140,80,140,81,139,81</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>137,83,137,82,137,81,137,80,137,81,136,80,137,80,136,80,137,80,138,80,138,81,138,80,138,81,138,82,138,81,138,82,137,82,137,83</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>141,81,141,80,142,81,141,81</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>56,75,56,74,57,74,57,75,56,75</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>141,82,140,81,141,81,142,81,142,82,141,82</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>143,82,142,81,143,81,142,81,143,81,144,82,143,82</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>61,185,60,185,60,184,61,184,62,184,61,185</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>143,83,142,83,142,82,141,82,142,82,142,81,142,82,143,82,143,83</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>138,83,138,82,139,82,140,82,139,82,139,83,138,83</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>7,96,6,95,8,95,7,95,7,96</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>146,85,146,84,146,85,145,85,146,84,145,84,146,84,145,84,145,85,145,84,145,85,144,84,145,84,144,84,145,83,144,83,145,83,144,83,145,83,146,83,147,83,147,84,146,84,146,85</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>143,86,142,86,143,86,142,86,142,85,142,86,142,85,141,85,140,85,141,85,140,85,140,84,141,84,140,84,141,84,140,84,139,84,139,83,140,83,140,82,139,82,139,81,140,82,141,82,142,83,142,84,142,83,142,84,143,84,142,84,141,84,142,84,143,84,142,84,143,84,143,85,144,85,143,85,143,86,144,85,144,86,143,86,144,86,143,86</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1077,96,1076,96,1075,96,1076,96,1077,96,1078,96,1077,96</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>66,187,66,186,66,187,66,186,65,186,66,186,66,187,65,187,65,186,66,185,66,186,67,187,66,187</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>57,85,57,84,58,84,57,85,58,84,58,85,57,85</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1039,86,1038,85,1037,85,1037,84,1038,84,1038,85,1039,86</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>59,86,59,85,60,85,59,86</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>145,86,145,85,145,86</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>141,86,140,86,140,85,141,85,140,85,141,85,141,86</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>45,87,46,86,47,86,48,86,48,85,49,85,49,86,50,86,50,87,50,86,49,86,49,87,47,87,46,87,45,87</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1044,87,1043,87,1042,86,1044,87</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>42,88,41,88,42,88,43,88,42,88</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>37,91,36,91,36,90,38,90,39,90,38,90,39,90,38,89,39,89,39,90,39,89,38,89,39,88,40,89,41,89,40,89,41,89,40,90,39,90,37,91</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>32,92,33,91,34,91,34,90,35,90,36,90,35,91,34,91,33,92,32,92</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>69,187,68,187,69,187</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1058,92,1057,92,1057,91,1059,92,1060,92,1059,92,1058,92</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>19,94,18,94,17,94,19,94,21,94,20,94,19,94</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>14,94,15,94,16,94,17,94,16,94,17,93,18,94,17,94,16,94,14,94</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1071,95,1072,95,1072,94,1073,94,1072,95,1071,95</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>9,96,9,95,10,95,9,95,9,96,9,95,9,96</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>6,96,5,96,5,95,6,95,5,95,6,95,7,95,6,95,6,96</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>70,189,70,188,69,188,70,187,70,188,71,188,72,188,71,188,71,189,70,189</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>172,107,172,106,171,106,172,105,172,106,171,106,172,106,172,107</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>73,194,72,193,72,192,71,191,72,191,72,190,73,190,74,191,75,191,75,192,74,193,73,193,73,194</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>318,129,317,129,317,128,318,128,319,128,320,128,322,128,323,127,322,127,322,128,323,127,324,127,322,128,321,128,322,128,320,128,318,129</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>310,118,311,117,312,117,313,116,314,116,315,115,318,115,319,115,320,115,321,115,324,115,325,115,326,115,326,114,327,114,327,115,327,114,328,114,327,114,328,113,329,113,329,112,329,111,329,110,331,109,332,108,332,109,333,109,334,109,334,108,335,108,335,109,336,109,336,111,336,113,337,114,337,115,338,115,338,116,339,116,338,117,338,116,337,116,337,117,337,116,337,117,337,116,337,117,336,117,335,117,336,117,335,117,334,117,334,118,333,117,333,118,333,117,332,118,332,119,332,118,331,119,331,118,331,119,330,119,331,118,330,119,330,118,330,119,329,119,330,119,329,119,329,120,328,120,328,121,327,121,327,122,327,123,328,122,328,123,327,123,326,123,326,124,327,124,328,124,327,124,328,125,329,125,330,125,329,125,329,124,330,125,328,126,328,125,327,125,327,126,326,126,326,125,326,126,326,125,325,125,325,126,323,127,323,126,323,127,322,126,322,127,321,127,320,127,319,127,318,128,318,127,318,128,317,128,317,129,318,129,317,130,317,131,317,132,316,132,316,133,316,132,316,133,315,133,315,134,315,133,314,133,314,132,313,132,313,131,314,131,313,131,313,132,313,133,314,134,314,135,314,136,313,137,313,138,312,138,312,139,311,139,312,138,312,137,313,137,312,137,313,137,312,137,312,136,312,135,312,136,312,135,311,136,311,135,311,136,311,135,312,135,311,135,311,134,310,134,311,134,310,134,311,133,311,134,311,133,312,132,311,132,312,132,311,132,311,133,311,132,310,132,310,133,310,134,310,133,310,134,310,135,309,134,310,135,310,136,311,136,310,136,309,136,309,135,309,136,309,135,308,135,308,134,308,135,308,136,308,135,309,135,308,136,309,136,310,136,311,137,311,138,310,138,310,137,310,138,310,137,309,136,308,136,309,137,310,138,311,138,310,138,311,138,311,139,310,138,310,139,309,138,310,139,311,139,310,139,311,139,310,140,310,139,309,139,308,139,308,138,308,139,309,139,310,139,310,140,311,140,312,140,312,141,312,142,313,143,312,142,312,141,312,140,312,141,311,141,312,141,312,142,311,142,310,142,311,142,310,142,309,142,309,143,311,143,311,144,312,143,312,144,311,144,310,144,309,144,308,144,309,144,310,145,309,145,310,145,309,146,308,145,309,146,310,146,310,145,310,146,310,145,310,146,311,146,310,145,311,146,310,146,311,146,310,146,309,146,308,146,308,147,307,147,308,147,307,146,307,147,306,148,306,149,305,149,304,149,303,149,303,150,302,150,302,151,302,150,302,151,301,151,302,151,301,151,301,152,300,152,300,153,299,153,300,153,299,153,298,153,297,153,298,153,298,154,298,153,297,153,298,154,297,154,297,153,297,154,297,155,296,155,296,156,296,155,296,156,296,157,295,156,296,157,295,157,295,158,295,159,296,160,296,162,297,163,297,164,298,165,298,166,298,167,298,166,298,165,297,165,297,164,297,165,298,166,298,168,299,169,299,170,299,171,299,172,299,173,299,174,298,174,299,174,298,175,297,175,296,175,297,175,296,174,296,173,295,173,296,173,295,173,294,173,295,173,294,173,294,172,294,171,293,171,294,171,294,170,294,171,293,171,293,170,292,169,292,168,291,168,292,168,292,167,291,166,291,167,292,167,291,167,291,166,291,165,292,165,292,164,291,164,291,163,290,163,290,162,289,162,289,161,288,160,287,160,286,161,285,161,284,161,283,161,284,161,283,161,283,160,282,160,283,160,282,160,281,159,280,159,281,159,280,159,278,159,279,159,278,159,279,159,278,159,278,160,277,160,277,159,277,160,276,160,276,159,276,158,275,158,275,160,274,159,274,160,274,159,273,159,272,160,272,159,271,159,272,160,271,160,270,160,269,159,269,160,268,160,269,160,270,160,271,160,270,160,270,161,271,161,271,160,271,161,271,162,270,161,271,162,270,162,271,162,272,162,272,163,272,164,272,163,271,164,272,163,271,163,270,163,270,162,269,162,269,163,268,163,268,162,268,163,267,163,266,163,265,162,266,163,266,162,266,163,266,162,266,163,266,162,265,162,265,161,264,161,263,161,263,162,262,162,261,162,260,161,258,161,257,161,256,162,255,162,256,162,255,162,255,161,255,162,254,161,255,162,254,162,255,162,255,163,254,163,253,164,252,164,252,165,251,165,251,164,250,165,250,164,250,165,250,164,250,165,250,166,249,166,249,165,249,166,248,166,248,167,247,167,248,167,247,169,247,168,247,169,247,168,246,168,246,169,247,169,247,170,247,171,247,172,248,172,248,173,248,172,248,173,247,173,247,172,246,172,245,172,244,172,243,171,242,171,242,170,241,170,241,169,241,168,240,168,240,167,239,166,239,165,238,165,238,164,237,163,236,162,235,162,235,161,234,161,233,161,232,161,231,161,231,162,231,163,230,163,230,164,229,163,228,163,226,162,225,161,225,160,225,159,224,158,223,158,222,157,221,156,220,155,215,155,215,157,206,157,201,155,195,153,195,152,194,152,188,153,188,152,188,153,188,152,188,153,188,152,187,151,187,150,185,149,184,149,184,148,183,148,182,148,181,148,181,147,180,147,179,147,178,147,178,146,178,145,177,145,177,144,176,144,176,143,175,143,175,142,174,142,174,141,174,140,173,140,173,139,172,139,172,138,172,137,172,138,173,138,173,137,172,137,172,136,173,136,174,136,175,136,174,136,173,136,172,136,172,137,171,137,171,136,171,137,171,136,170,136,170,135,169,135,168,134,169,133,168,132,168,131,167,130,166,129,167,128,167,127,167,126,167,125,167,124,166,123,166,122,166,121,166,120,167,120,167,121,167,120,167,119,167,118,167,117,167,116,168,116,168,115,168,114,168,113,168,112,169,112,170,112,169,112,168,112,167,112,167,111,168,111,168,110,167,110,168,110,167,109,167,110,167,109,167,108,166,107,165,106,166,106,166,105,165,105,166,105,167,106,170,106,171,106,172,107,171,107,170,108,171,108,170,108,171,108,171,107,172,107,172,108,171,108,172,108,171,108,172,108,172,109,171,109,172,108,171,108,171,109,171,108,171,109,170,109,171,109,172,109,173,108,172,108,173,108,172,107,173,107,173,106,172,106,172,105,171,105,172,105,172,104,171,104,179,104,189,104,199,104,209,104,218,104,228,104,238,104,248,104,254,104,254,103,254,102,255,103,255,104,256,104,257,104,258,105,259,105,260,105,262,105,261,105,262,105,262,106,263,106,263,105,264,106,265,106,266,106,267,106,268,106,269,106,270,106,270,107,270,106,271,106,271,107,273,106,274,106,277,107,280,108,283,109,285,110,285,111,286,111,287,111,287,112,288,112,289,112,289,113,291,114,292,114,292,117,293,119,293,120,292,121,292,122,292,123,291,123,290,124,290,125,291,125,292,125,295,124,296,124,299,123,302,122,303,122,302,121,302,120,303,120,306,120,309,120,310,118</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>136,79,136,78,137,79,136,78,135,76,135,75,135,76,137,76,137,77,138,78,138,77,137,77,137,76,137,77,137,78,138,78,137,78,138,78,138,79,137,78,137,79,136,79</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>81,77,81,76,80,76,81,76,80,76,81,76,81,75,82,75,82,76,83,75,83,76,84,75,84,76,83,76,82,76,81,76,81,77</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>100,70,99,70,100,69,99,69,100,69,101,69,100,70</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>23,70,22,69,22,70,20,69,21,69,22,69,23,70</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>41,71,39,71,38,70,38,71,38,70,37,70,39,70,40,70,40,69,41,69,41,70,42,70,42,69,42,70,43,71,41,71</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>96,71,97,70,98,70,98,69,98,70,99,70,98,70,97,70,97,71,96,71</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>31,62,30,62,30,61,29,61,27,60,26,60,25,61,24,60,24,59,25,59,25,60,26,60,27,60,28,59,29,60,30,60,31,60,32,60,32,61,32,60,33,61,32,61,31,61,31,62</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>136,82,135,82,134,81,135,80,135,81,135,80,134,81,134,80,133,80,134,80,133,80,134,79,133,79,134,79,133,79,134,79,133,79,132,78,133,78,134,78,133,78,134,78,135,78,135,79,136,81,136,82</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>117,42,116,50,116,60,117,70,118,70,120,70,120,69,122,69,122,70,122,71,123,71,124,71,126,72,127,73,127,74,129,73,130,73,130,72,131,72,130,72,133,71,134,72,135,72,134,72,135,73,136,73,136,74,137,74,138,74,138,75,139,75,140,76,142,78,143,79,142,79,143,79,143,80,144,80,144,81,145,81,146,81,147,81,148,82,149,82,149,83,149,84,150,85,149,85,148,86,147,86,147,85,146,85,147,85,148,85,148,84,147,85,147,83,146,83,146,82,146,83,145,83,145,82,144,83,144,84,143,84,143,83,144,83,144,82,145,82,144,82,144,81,143,81,142,81,143,81,142,81,142,80,141,80,141,79,140,79,139,79,140,79,140,78,139,79,139,78,140,78,139,78,139,77,140,77,139,77,138,77,138,76,138,77,137,76,138,76,137,75,138,75,137,76,136,75,135,75,135,74,135,75,135,74,134,74,133,73,134,72,133,72,133,73,134,73,133,73,133,74,134,74,134,75,134,76,133,75,132,75,131,74,132,74,131,74,131,73,131,74,130,74,129,73,130,74,128,73,129,74,128,74,129,74,130,74,130,75,131,75,131,76,131,75,130,75,130,76,130,75,130,76,129,76,129,75,128,75,127,75,126,74,125,73,124,73,123,73,122,72,121,72,120,72,121,72,121,71,122,71,121,71,122,72,121,72,122,72,122,71,121,70,121,71,120,71,119,71,118,71,115,71,116,71,116,70,115,70,114,71,113,70,111,70,108,70,108,71,107,70,106,70,105,70,105,69,106,69,106,68,105,68,104,69,103,69,102,69,103,69,103,68,102,69,102,68,102,69,102,68,101,69,101,68,100,68,99,68,101,68,100,68,99,68,100,68,99,68,99,67,100,67,101,67,100,67,99,68,98,68,99,68,98,67,98,68,98,67,98,68,97,68,97,67,97,68,97,67,97,68,96,68,97,68,96,68,95,68,96,67,95,67,94,67,94,68,95,67,95,68,94,68,93,68,94,68,94,69,95,68,95,69,94,69,93,69,94,69,95,69,96,69,95,69,95,70,94,70,95,70,94,70,94,71,94,70,94,71,93,71,92,71,92,70,92,71,92,70,91,70,91,71,90,71,90,72,90,71,89,71,90,71,89,72,89,71,89,72,88,72,89,71,88,72,87,73,86,73,87,73,86,73,85,73,84,73,84,72,85,72,86,72,87,71,86,71,85,72,84,71,84,70,85,70,85,69,86,69,85,68,86,68,87,68,88,67,89,68,90,68,92,68,91,68,89,67,90,67,91,66,92,66,91,66,90,66,90,67,88,67,88,66,88,67,86,67,84,68,83,69,82,69,83,69,82,70,81,70,80,70,81,70,82,70,81,71,80,71,81,71,80,71,80,72,80,71,80,72,79,72,80,71,79,71,79,72,79,71,78,72,79,72,78,72,77,72,78,72,77,73,78,73,79,74,80,74,79,74,79,75,78,75,77,75,76,76,77,76,76,76,77,76,76,76,75,76,74,76,74,77,73,77,74,77,73,77,72,78,71,78,70,79,70,80,69,80,69,79,69,80,68,80,67,80,67,81,66,81,66,80,66,81,65,81,66,81,65,81,64,81,64,82,64,81,64,82,65,82,64,82,65,82,64,82,64,83,64,82,64,83,64,82,63,82,64,82,63,82,64,82,64,83,63,83,63,82,63,83,62,83,61,83,61,84,60,84,61,84,60,84,61,83,60,83,61,83,60,83,59,83,59,84,58,84,57,84,58,84,57,84,56,84,55,84,56,84,55,84,54,84,54,85,53,85,54,85,53,85,52,85,51,85,52,85,52,86,52,85,51,86,51,85,50,85,50,86,49,86,50,86,49,86,50,86,50,85,51,85,52,84,53,83,55,83,56,83,57,83,56,83,57,83,58,83,57,83,58,83,59,83,58,83,58,82,60,81,62,80,63,80,64,80,63,80,64,79,65,79,65,78,66,78,67,78,66,78,67,77,67,76,68,76,67,76,67,75,68,74,69,74,69,73,68,74,65,75,64,74,64,73,65,73,65,74,66,74,65,74,65,73,64,73,63,74,63,75,62,75,61,74,60,74,59,74,59,73,58,73,57,74,56,74,55,74,54,75,53,75,54,74,54,75,54,74,55,74,54,74,54,73,55,73,54,73,53,73,54,73,54,72,54,71,53,71,53,70,52,70,53,70,52,70,52,69,53,69,54,68,53,69,53,68,53,69,52,69,52,70,51,70,52,70,52,71,51,70,51,71,50,71,48,71,47,71,46,70,45,70,46,70,45,70,45,69,44,69,45,69,43,69,44,69,44,68,45,68,44,68,45,68,46,68,45,68,47,68,46,69,47,69,47,68,48,68,48,69,49,68,48,68,49,68,48,68,46,68,45,68,44,68,44,67,45,67,44,67,43,67,44,67,44,66,45,66,44,66,44,67,43,67,42,67,42,66,41,66,41,65,41,66,42,65,41,65,42,65,43,65,42,65,42,64,43,63,44,63,45,63,46,63,45,63,46,62,45,63,45,62,45,61,46,61,47,61,46,61,47,61,48,61,49,61,51,61,53,60,56,60,57,59,57,58,56,57,55,57,56,57,57,57,57,56,56,56,57,56,56,56,55,56,54,56,53,56,52,57,51,57,50,57,49,57,50,57,49,57,48,57,47,57,45,57,41,57,40,57,40,56,39,56,39,55,40,55,41,55,39,54,37,54,36,54,35,54,35,53,36,53,35,53,35,54,36,53,37,53,38,53,39,53,41,52,42,52,43,52,42,52,43,51,44,51,45,51,48,51,49,51,48,51,48,52,47,52,48,52,51,52,52,52,53,52,54,52,54,53,54,52,55,52,56,52,57,52,56,51,55,51,54,51,54,52,54,51,53,50,52,50,53,50,53,51,54,51,55,51,56,51,58,51,59,51,58,51,57,51,56,51,55,51,54,50,55,50,54,49,53,49,52,50,52,49,53,49,52,49,51,49,48,49,48,48,47,48,45,47,43,46,42,46,41,46,39,45,40,45,41,45,40,45,41,45,41,44,44,44,47,44,48,43,50,42,50,43,50,42,51,41,50,41,51,41,52,41,52,40,54,40,53,40,54,40,55,40,57,40,58,39,59,39,60,39,59,39,60,39,59,40,60,39,60,40,60,39,62,39,61,39,60,39,59,39,62,38,61,38,62,38,63,38,62,38,64,38,65,38,66,38,67,37,68,37,69,37,70,36,70,37,71,37,72,37,73,37,72,38,71,38,72,38,73,38,74,37,74,38,74,37,75,37,76,37,76,38,75,38,76,38,77,38,78,38,81,38,82,38,81,38,82,38,83,38,82,38,82,39,83,39,82,39,84,39,85,39,86,39,87,39,88,39,89,39,90,39,91,39,92,39,93,39,94,39,94,40,95,39,96,40,98,40,101,40,102,40,103,40,104,41,105,41,107,40,109,40,110,40,112,41,113,41,114,41,115,41,115,42,116,42,116,41,117,42</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>365,348,365,347,365,346,366,345,365,345,366,345,366,344,366,343,366,342,367,341,368,341,369,341,370,341,371,342,371,343,372,343,371,343,371,344,372,344,372,343,373,343,374,344,375,345,376,345,376,346,377,346,378,346,378,347,379,348,380,348,380,349,379,350,379,351,379,352,379,353,378,353,378,354,377,354,377,355,377,354,376,354,377,355,376,355,375,355,374,355,373,355,372,355,371,355,370,355,369,354,368,354,367,354,366,354,365,353,364,352,364,351,364,350,365,350,365,349,365,348</Points>\n    <Keys>Uruguay, URY, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>715,114,716,114,722,118,722,117,723,118,723,117,723,118,726,120,729,120,731,120,733,120,734,119,735,120,736,121,737,122,738,122,738,123,738,124,739,124,739,125,740,127,741,127,742,127,743,127,744,127,744,128,745,129,745,128,746,128,746,127,747,127,747,126,748,126,748,125,749,125,750,125,750,124,751,124,752,124,753,124,752,124,752,125,751,125,750,126,751,126,752,126,752,127,753,127,754,127,754,126,754,127,754,126,755,126,755,127,756,127,757,127,757,128,758,128,759,128,758,128,758,129,757,129,756,129,755,130,756,130,755,130,754,130,753,130,752,130,751,130,751,129,752,128,751,128,752,128,751,128,751,127,751,128,750,128,749,128,749,129,748,128,747,129,748,130,747,130,746,130,745,130,746,130,747,130,746,130,746,131,745,131,745,132,744,132,743,132,742,132,742,133,743,133,743,134,743,133,744,134,744,135,744,136,745,136,744,136,744,137,743,138,743,139,742,139,741,139,741,138,740,138,739,138,739,137,740,137,739,136,738,136,737,136,736,136,735,135,734,135,733,134,732,134,731,133,730,132,729,132,728,131,727,131,727,130,727,129,726,129,726,128,725,128,725,127,724,127,723,127,722,127,721,127,720,126,720,125,719,125,720,124,719,124,720,124,719,124,718,124,718,123,717,123,716,123,715,122,715,123,714,122,714,123,715,123,715,124,715,123,714,123,713,123,713,124,712,124,711,124,711,125,710,125,710,126,711,126,711,127,710,127,707,127,707,115,715,114</Points>\n    <Keys>Uzbekistan, UZB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1044,300,1043,299,1044,299,1044,300</Points>\n    <Keys>Vanuatu, VUT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1045,304,1044,304,1044,303,1045,303,1045,304</Points>\n    <Keys>Vanuatu, VUT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1047,308,1047,307,1046,307,1047,307,1046,307,1047,306,1047,307,1047,308</Points>\n    <Keys>Vanuatu, VUT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1045,301,1044,301,1044,300,1044,301,1045,301</Points>\n    <Keys>Vanuatu, VUT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1048,309,1047,309,1047,308,1048,308,1048,309</Points>\n    <Keys>Vanuatu, VUT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1044,298,1044,297,1044,298</Points>\n    <Keys>Vanuatu, VUT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1042,300,1042,299,1041,299,1041,298,1042,299,1043,300,1042,300</Points>\n    <Keys>Vanuatu, VUT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1043,297,1043,296,1044,296,1043,297</Points>\n    <Keys>Vanuatu, VUT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1037,283,1038,283,1037,283</Points>\n    <Keys>Vanuatu, VUT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1040,297,1039,297,1039,296,1039,295,1039,294,1040,295,1040,296,1040,295,1041,295,1041,296,1041,297,1040,297</Points>\n    <Keys>Vanuatu, VUT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>347,218,346,218,346,217,347,217,347,218,348,217,348,218,347,218</Points>\n    <Keys>Venezuela, VEN, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>320,223,319,223,320,222,321,221,321,219,322,218,322,217,323,217,324,216,325,215,326,215,325,215,324,216,324,217,325,217,325,218,324,217,325,218,325,219,324,219,323,221,324,222,323,222,324,222,323,222,324,222,324,223,325,223,326,223,326,222,326,221,325,220,325,219,325,218,326,217,327,217,328,217,329,216,330,216,330,215,329,216,329,215,329,214,330,214,330,215,330,216,331,216,332,216,333,216,334,217,335,218,334,218,335,218,335,219,336,219,338,219,339,219,341,219,342,220,343,220,344,220,345,220,346,220,346,219,347,219,348,219,349,219,348,219,347,219,347,218,347,219,348,219,348,218,348,219,349,219,350,218,351,218,352,218,353,218,354,218,354,219,353,219,351,219,350,220,351,220,351,219,351,220,352,220,351,220,351,221,351,220,351,221,351,220,352,220,352,221,353,221,353,222,353,221,353,220,353,221,354,221,355,221,355,222,356,222,357,222,357,223,356,223,357,223,356,224,356,225,355,225,356,225,357,225,358,225,359,225,360,225,360,226,359,226,359,227,358,227,358,228,357,228,358,228,358,229,359,229,358,230,357,230,356,230,356,231,356,232,355,233,357,235,358,235,358,236,357,236,357,237,356,237,355,237,355,238,354,238,353,238,352,238,351,238,351,239,351,240,350,239,349,239,348,239,347,239,347,238,346,238,345,238,346,239,347,240,347,241,347,242,348,243,347,243,349,243,349,244,348,245,347,245,347,246,346,246,345,247,344,247,344,248,343,248,343,249,343,248,342,248,341,248,339,247,339,245,338,245,338,244,338,243,337,243,337,242,336,242,337,241,338,240,337,240,337,239,336,239,336,238,336,237,336,235,336,234,337,234,337,233,337,232,336,232,335,232,334,232,333,232,332,232,331,232,329,230,328,229,327,229,326,230,325,229,324,230,323,229,323,228,322,228,322,227,322,226,322,225,321,223,320,223</Points>\n    <Keys>Venezuela, VEN, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>852,191,852,192,852,191,852,192,853,191,853,192,853,191,854,191,854,190,854,189,853,189,853,188,852,188,851,188,851,189,850,188,849,188,849,187,848,187,848,186,848,185,848,186,847,185,847,184,846,184,846,183,847,183,847,182,848,182,848,183,849,183,849,182,850,182,850,183,850,182,851,183,852,183,852,182,853,182,854,182,854,181,855,181,855,180,856,181,857,181,857,182,858,182,859,182,860,182,860,183,859,183,859,184,860,184,860,185,860,184,861,185,862,186,863,186,863,185,863,186,864,186,863,186,862,187,861,188,861,187,861,188,860,188,860,187,859,187,860,188,860,189,859,189,859,190,858,190,858,191,857,191,857,192,857,193,856,193,856,194,857,194,857,195,858,196,859,196,859,197,859,198,860,198,860,199,861,199,861,200,862,201,863,201,863,202,863,201,863,202,864,201,864,202,865,203,865,204,866,204,865,204,866,204,866,205,866,206,867,206,867,207,867,208,867,209,867,210,868,210,867,210,867,211,868,212,868,213,868,212,868,213,868,212,867,213,868,213,867,213,867,214,867,215,867,214,867,215,867,216,866,217,865,217,865,218,864,218,863,218,863,219,862,219,861,219,860,219,860,218,860,219,859,219,860,219,860,220,859,220,860,220,859,221,859,220,858,220,859,220,859,221,860,221,859,221,858,220,859,221,859,222,858,221,857,221,857,220,857,221,858,221,858,222,857,223,856,223,855,224,855,225,854,225,854,224,854,223,854,222,854,221,855,221,855,220,854,220,853,220,853,219,854,219,855,218,856,218,857,217,857,218,858,218,858,217,857,217,857,216,858,215,859,216,859,215,860,215,860,214,861,214,862,214,862,213,862,212,862,211,862,210,862,209,862,208,862,207,862,206,862,205,863,205,862,204,861,204,861,203,862,203,862,202,861,202,860,202,860,201,859,201,859,200,859,199,858,199,858,198,857,198,857,197,856,197,856,196,855,196,855,195,855,194,854,194,853,194,852,193,851,193,851,192,852,192,852,191</Points>\n    <Keys>Vietnam, VNM, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>500,168,510,168,513,167,513,169,513,172,513,173,503,173,503,180,502,181,501,181,500,182,500,183,501,186,499,186,494,186,489,186,488,188,488,187,489,185,489,184,490,184,490,183,491,182,491,181,491,180,492,179,492,180,492,179,492,178,493,178,494,177,495,176,495,175,495,174,496,173,496,172,497,172,497,171,499,170,499,169,500,169,500,168</Points>\n    <Keys>Western Sahara, ESH, NorthAfrica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>23,292,22,292,21,291,22,291,23,291,23,292</Points>\n    <Keys>Western Samoa, WSM, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>24,293,23,292,24,292,25,292,25,293,24,293</Points>\n    <Keys>Western Samoa, WSM, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>695,194,695,195,697,198,698,198,698,199,699,201,698,201,697,201,696,202,696,203,696,204,695,204,695,205,694,205,692,205,691,205,691,206,690,206,688,206,687,207,687,208,686,208,685,208,684,209,684,208,683,208,683,209,682,210,681,210,680,210,679,210,678,210,676,211,675,212,674,212,675,212,674,212,673,212,672,213,671,213,670,212,669,211,669,210,669,209,669,208,668,207,669,207,668,206,668,205,667,205,668,205,668,204,668,205,668,204,668,203,668,202,668,201,669,201,669,200,669,199,669,198,670,198,671,198,671,199,672,198,673,198,676,205,682,198,695,194</Points>\n    <Keys>Yemen, YEM, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>597,113,597,112,597,113,598,112,599,112,600,112,601,113,602,113,602,114,603,115,604,115,604,116,605,117,606,117,607,116,608,117,607,117,608,118,607,118,607,119,607,120,608,120,608,121,609,121,608,121,608,122,607,122,607,123,607,124,606,123,606,124,605,124,604,124,603,124,602,124,602,125,601,125,601,124,600,124,600,123,599,123,598,123,598,124,597,124,598,124,598,125,597,125,597,124,596,124,596,123,595,123,596,123,595,123,595,122,595,121,596,121,596,120,596,121,597,121,597,120,596,120,597,120,598,120,598,119,597,119,597,118,598,119,598,118,597,118,597,117,597,116,598,116,597,116,597,115,598,115,597,115,597,114,596,114,597,114,596,114,597,114,596,114,596,113,597,113</Points>\n    <Keys>Yugoslavia, YUG, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>633,244,633,245,632,246,631,247,630,247,630,248,629,248,629,249,629,250,629,251,628,252,629,252,628,252,628,253,628,255,627,256,627,257,626,257,626,258,627,259,626,259,627,259,627,260,627,261,627,262,628,263,628,264,628,265,628,267,628,268,628,269,629,271,630,271,631,272,631,273,632,275,631,275,630,275,628,276,626,276,626,277,625,278,625,279,626,280,625,281,626,283,625,283,625,284,625,285,625,286,626,287,627,288,628,288,628,287,629,287,629,289,629,291,628,291,629,290,628,290,627,291,626,291,626,290,626,289,625,289,625,288,624,288,623,288,623,287,622,287,622,286,621,286,621,285,620,286,620,287,619,286,618,286,617,286,616,286,616,285,615,285,616,284,615,284,614,284,614,285,613,285,612,285,613,285,613,284,612,284,612,283,611,283,611,284,610,283,609,284,608,284,607,284,606,284,606,283,606,282,606,280,605,279,605,278,605,277,605,276,605,275,605,274,605,273,605,272,603,272,601,272,601,271,600,271,598,271,598,272,598,273,598,274,596,274,595,274,594,275,593,275,592,275,592,274,591,274,591,273,591,272,590,272,590,271,590,270,590,269,589,269,589,268,587,268,585,268,583,268,581,268,580,268,579,268,578,268,577,269,577,268,576,268,577,268,577,266,578,265,579,265,579,264,579,265,580,265,581,265,581,264,583,263,583,264,583,265,584,265,585,264,585,263,586,263,587,262,588,260,588,259,588,257,589,256,590,254,591,254,592,253,593,252,593,251,593,250,593,249,593,248,594,246,594,244,594,243,595,243,595,242,595,241,595,240,595,239,595,238,595,237,596,237,597,236,597,235,598,235,599,235,600,236,601,236,601,237,602,237,603,238,603,237,604,238,605,238,606,238,607,238,607,237,608,237,608,236,609,236,609,237,610,237,611,236,612,236,613,235,614,236,615,236,615,235,616,235,616,234,617,235,618,235,619,235,620,235,621,235,622,235,622,236,623,236,623,237,624,237,625,237,625,238,625,237,626,237,627,237,628,236,629,237,629,238,630,238,630,239,631,239,631,240,632,239,632,240,632,241,632,242,632,243,633,243,633,244</Points>\n    <Keys>Congo,DRC, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>626,300,624,301,623,301,622,302,622,303,621,304,620,305,619,304,618,304,617,305,617,304,616,304,615,304,615,303,614,303,612,303,610,303,609,303,606,300,606,299,605,294,605,290,607,290,609,290,612,290,612,289,611,289,612,288,612,287,611,287,611,286,612,285,611,283,612,283,612,284,613,284,613,285,612,285,613,285,614,285,614,284,615,284,616,284,615,285,616,285,616,286,617,286,618,286,619,286,620,287,620,286,621,285,621,286,622,286,622,287,623,287,623,288,624,288,625,288,625,289,626,289,626,290,626,291,627,291,628,290,629,290,628,291,629,291,629,289,629,287,628,287,628,288,627,288,626,287,625,286,625,285,625,284,625,283,626,283,625,281,626,280,625,279,625,278,626,277,626,276,628,276,630,275,631,275,632,275,632,276,633,276,634,276,634,277,635,277,635,278,636,278,637,278,638,278,638,279,639,279,639,280,640,280,639,281,640,281,640,282,641,282,640,283,639,283,640,284,639,285,639,286,639,287,640,287,640,288,640,287,640,288,639,288,638,289,639,289,638,290,639,290,638,291,638,292,639,293,639,292,639,293,636,294,634,294,632,295,630,295,630,296,631,296,631,297,629,297,627,298,626,298,626,299,626,300</Points>\n    <Keys>Zambia, ZMB, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>626,300,626,299,626,298,627,298,629,297,631,297,631,299,632,299,633,299,634,299,635,299,635,300,636,300,637,300,638,300,638,301,638,302,639,303,638,303,639,303,639,304,638,304,638,305,639,305,638,305,639,306,638,306,638,307,638,308,638,309,638,310,638,309,638,310,639,310,639,311,638,311,637,312,637,313,637,314,637,315,637,314,634,318,633,318,633,317,632,317,630,318,630,317,629,317,628,317,627,317,627,316,625,315,624,315,623,314,623,313,623,312,622,312,621,312,621,311,620,311,619,310,618,309,619,309,618,309,617,308,617,307,616,306,616,305,615,305,615,304,616,304,617,304,617,305,618,304,619,304,620,305,621,304,622,303,622,302,623,301,624,301,626,300</Points>\n    <Keys>Zimbabwe, ZWE, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Text>\n    <Value>United States</Value>\n    <Location>196,123</Location>\n  </Text>\n  <Text>\n    <Value>Canada</Value>\n    <Location>179,69</Location>\n  </Text>\n  <Text>\n    <Value>Brazil</Value>\n    <Location>372,274</Location>\n  </Text>\n  <Text>\n    <Value>Greenland</Value>\n    <Location>395,25</Location>\n  </Text>\n  <Text>\n    <Value>Iceland</Value>\n    <Location>468,62</Location>\n  </Text>\n  <Text>\n    <Value>United</Value>\n    <Location>518,51</Location>\n  </Text>\n  <Text>\n    <Value>Kingdom</Value>\n    <Location>509,62</Location>\n  </Text>\n  <Text>\n    <Value>Ireland</Value>\n    <Location>477,94</Location>\n  </Text>\n  <Text>\n    <Value>Algeria</Value>\n    <Location>526,162</Location>\n  </Text>\n  <Text>\n    <Value>Libya</Value>\n    <Location>577,164</Location>\n  </Text>\n  <Text>\n    <Value>South Africa</Value>\n    <Location>580,357</Location>\n  </Text>\n  <Text>\n    <Value>Angola</Value>\n    <Location>566,284</Location>\n  </Text>\n  <Text>\n    <Value>Peru</Value>\n    <Location>306,280</Location>\n  </Text>\n  <Text>\n    <Value>Bolivia</Value>\n    <Location>334,296</Location>\n  </Text>\n  <Text>\n    <Value>Chile</Value>\n    <Location>295,340</Location>\n  </Text>\n  <Text>\n    <Value>Russia</Value>\n    <Location>751,63</Location>\n  </Text>\n  <Text>\n    <Value>China</Value>\n    <Location>819,140</Location>\n  </Text>\n  <Text>\n    <Value>Japan</Value>\n    <Location>966,138</Location>\n  </Text>\n  <Text>\n    <Value>Australia</Value>\n    <Location>914,321</Location>\n  </Text>\n  <Text>\n    <Value>India</Value>\n    <Location>765,178</Location>\n  </Text>\n  <Text>\n    <Value>Egypt</Value>\n    <Location>613,171</Location>\n  </Text>\n  <Text>\n    <Value>Sudan</Value>\n    <Location>609,204</Location>\n  </Text>\n  <Text>\n    <Value>Iran</Value>\n    <Location>691,148</Location>\n  </Text>\n  <Text>\n    <Value>New Zealand</Value>\n    <Location>1033,396</Location>\n  </Text>\n  <Text>\n    <Value>Philippines</Value>\n    <Location>915,203</Location>\n  </Text>\n  <Text>\n    <Value>Antarctica</Value>\n    <Location>521,472</Location>\n  </Text>\n  <Text>\n    <Value>Mexico</Value>\n    <Location>217,173</Location>\n  </Text>\n  <Text>\n    <Value>Argentina</Value>\n    <Location>331,354</Location>\n  </Text>\n  <Text>\n    <Value>Congo</Value>\n    <Location>589,256</Location>\n  </Text>\n  <Text>\n    <Value>Madagascar</Value>\n    <Location>669,331</Location>\n  </Text>\n  <Text>\n    <Value>Indonesia</Value>\n    <Location>851,278</Location>\n  </Text>\n  <Text>\n    <Value>Papua New Guinea</Value>\n    <Location>972,250</Location>\n  </Text>\n  <Text>\n    <Value> PAK</Value>\n    <Location>724,163</Location>\n  </Text>\n  <Text>\n    <Value>Colombia</Value>\n    <Location>300,234</Location>\n    <FontFamily>Arial</FontFamily>\n    <FontSize>6</FontSize>\n    <FontWeight>Normal</FontWeight>\n    <FontStyle>Normal</FontStyle>\n    <TextDecoration>None</TextDecoration>\n  </Text>\n</MapData>"
  },
  {
    "path": "LICENSE.txt",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "LICENSE_short.txt",
    "content": "Copyright (C) 2004-2008  fyiReporting Software, LLC\nCopyright (C) 2011-2025  Peter Gill <peter@majorsilence.com>\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n\nFor additional information, see LICENSE.txt or\nvisit https://github.com/majorsilence/My-FyiReporting/discussions."
  },
  {
    "path": "LanguageWrappers/php/Examples/test1.php",
    "content": "<?php\n\n// HOWTO run from command line:\n// php.exe -f test1.php\n// php.exe -f test1.php > test1.log 2>&1\n// php.exe -f \"C:\\PHP test1.php\" -- -arg1 -arg2 -arg3\n\nerror_reporting(E_ALL);\nini_set('display_errors', '1');\n\ndate_default_timezone_set('America/Los_Angeles');\n\nrequire_once(\"../report.php\");\n\n# SETUP\n$current_directory = dirname(__FILE__);\n$base_directory = realpath($current_directory . '/../../../');\n\n$db_path = realpath($current_directory . '/../../../Examples/northwindEF.db');\n$report_path = realpath($current_directory . '/../../../Examples/SqliteExamples/SimpleTest1.rdl');\n\nif (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {\n    // If self-hosted or on Windows, we do not need to set the path to dotnet, rdlcmd can be run directly\n    $path_to_dotnet = null;\n    $path_to_rdlcmd = realpath($base_directory . '/RdlCmd/bin/Release/net8.0/win-x64/publish/RdlCmd.exe');\n} else {\n    // dotnet is required to run rdlcmd\n    // if a self contained build is used, the path to dotnet is not needed and the call should be to RdlCmd instead of RdlCmd.dll directly\n    // if a self contained build is not used, the path to dotnet is needed\n    $path_to_dotnet = 'dotnet';\n    $path_to_rdlcmd = realpath($base_directory . '/RdlCmd/bin/Debug/net8.0/RdlCmd.dll');\n}\n\n$output_directory = $current_directory . '/output';\nif (!file_exists($output_directory)) {\n    mkdir($output_directory, 0777, true);\n}\n\n\n# EXAMPLE REPORT\n\n$rpt = new MajorsilenceReporting\\Report($report_path, $path_to_rdlcmd, $path_to_dotnet);\n$rpt->set_connection_string('Data Source=' . $db_path);\n$rpt->export(\"pdf\", $output_directory . '/test1.pdf');\n\n\n?>"
  },
  {
    "path": "LanguageWrappers/php/Examples/test2-connection-string-parameter.php",
    "content": "<?php\n// HOWTO run from command line:\n// php.exe -f test2-connection-string-parameter.php\n\nerror_reporting(E_ALL);\nini_set('display_errors', '1');\n\ndate_default_timezone_set('America/Los_Angeles');\n\nrequire_once(\"../report.php\");\n\n\n# SETUP\n$current_directory = dirname(__FILE__);\n$base_directory = realpath($current_directory . '/../../../');\n\n$db_path = realpath($current_directory . '/../../../Examples/northwindEF.db');\n$report_path = realpath($current_directory . '/../../../Examples/SqliteExamples/SimpleTest3WithParameters.rdl');\n\nif (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {\n    // If self-hosted or on Windows, we do not need to set the path to dotnet, rdlcmd can be run directly\n    $path_to_dotnet = null;\n    $path_to_rdlcmd = realpath($base_directory . '/RdlCmd/bin/Release/net8.0/win-x64/publish/RdlCmd.exe');\n} else {\n    // dotnet is required to run rdlcmd\n    // if a self contained build is used, the path to dotnet is not needed and the call should be to RdlCmd instead of RdlCmd.dll directly\n    // if a self contained build is not used, the path to dotnet is needed\n    $path_to_dotnet = 'dotnet';\n    $path_to_rdlcmd = realpath($base_directory . '/RdlCmd/bin/Debug/net8.0/RdlCmd.dll');\n}\n\n$output_directory = $current_directory . '/output';\nif (!file_exists($output_directory)) {\n    mkdir($output_directory, 0777, true);\n}\n\n\n# EXAMPLE REPORT\n\n$rpt = new MajorsilenceReporting\\Report($report_path, $path_to_rdlcmd, $path_to_dotnet);\n$rpt->set_parameter(\"TestParam1\", 'I am a parameter value.');\n$rpt->set_parameter(\"TestParam2\", 'The second parameter.');\n$rpt->set_connection_string('Data Source=' . $db_path);\n$rpt->export(\"pdf\", $output_directory . '/test2-parameters.pdf');\n\n\n?>"
  },
  {
    "path": "LanguageWrappers/php/Examples/test3-streaming.php",
    "content": "<?php\n// HOWTO run from command line:\n// php.exe -f test3-streaming.php\n\nerror_reporting(E_ALL);\nini_set('display_errors', '1');\n\ndate_default_timezone_set('America/Los_Angeles');\n\nrequire_once(\"../report.php\");\n\n\n# SETUP\n$current_directory = dirname(__FILE__);\n$base_directory = realpath($current_directory . '/../../../');\n\n$db_path = realpath($current_directory . '/../../../Examples/northwindEF.db');\n$report_path = realpath($current_directory . '/../../../Examples/SqliteExamples/SimpleTest1.rdl');\n\nif (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {\n    // If self-hosted or on Windows, we do not need to set the path to dotnet, rdlcmd can be run directly\n    $path_to_dotnet = null;\n    $path_to_rdlcmd = realpath($base_directory . '/RdlCmd/bin/Release/net8.0/win-x64/publish/RdlCmd.exe');\n} else {\n    // dotnet is required to run rdlcmd\n    // if a self contained build is used, the path to dotnet is not needed and the call should be to RdlCmd instead of RdlCmd.dll directly\n    // if a self contained build is not used, the path to dotnet is needed\n    $path_to_dotnet = 'dotnet';\n    $path_to_rdlcmd = realpath($base_directory . '/RdlCmd/bin/Debug/net8.0/RdlCmd.dll');\n}\n\n$output_directory = $current_directory . '/output';\nif (!file_exists($output_directory)) {\n    mkdir($output_directory, 0777, true);\n}\n\n\n# EXAMPLE REPORT\n\n$rpt = new MajorsilenceReporting\\Report($report_path, $path_to_rdlcmd, $path_to_dotnet);\n$rpt->set_parameter(\"TestParam1\", 'I am a parameter value.');\n$rpt->set_parameter(\"TestParam2\", 'The second parameter.');\n$rpt->set_connection_string('Data Source=' . $db_path);\n$data = $rpt->export_to_memory(\"pdf\");\n\nheader(\"Content-type: application/octet-stream\"); \nheader(\"Content-disposition: attachment; filename=YourFileName2.pdf\");\nheader('Expires: 0');\nheader('Cache-Control: must-revalidate, post-check=0, pre-check=0');\nob_clean();\nflush();\n\necho $data;\n\n\n?>"
  },
  {
    "path": "LanguageWrappers/php/report.php",
    "content": "<?php\nnamespace MajorsilenceReporting;\n\nclass Report {\n\n\tprivate $report_path=\"\";\n\tprivate $rdl_cmd_path=\"\";\n\tprivate $dotnet_path=\"\";\n\tprivate $connection_string=\"\";\n\tprivate $parameters = array();\n\tprivate $rdlcmd_dir = \"\";\n\t\n\tpublic function __construct($report_path, $rdl_cmd_path, $dotnet_path = null){\n\t\t$this->report_path = $report_path;\n\t\t$this->rdl_cmd_path = $rdl_cmd_path;\n\t\t$this->dotnet_path = $dotnet_path;\n\t\t\n\t\t$this->rdlcmd_dir = dirname($rdl_cmd_path);\n\t}\n\n\t/**\n\t* Set a parameters values\n\t* @param string $name - the report parameter name\n\t* @param string $value - the value of the parameter\n\t*/\n\tpublic function set_parameter($name, $value){\n\t\n\t\t$this->parameters[$name] = $value;\n\t}\n\t\n\tpublic function set_connection_string($connection_string){\n\t\t$this->connection_string = $connection_string;\n\t}\n\n\t/**\n\t* Export report to a file on the server\n\t* @param string $type - Export type \"pdf\", \"csv\", \"xslx\", \"xml\", \"rtf\", \"tif\", \"html\".  If type does not match it will default to PDF.\n\t* @param string $export_type - path on server to export file\n\t*/\n\tpublic function export($type, $export_path){\n\t\tif ($type != \"pdf\" && $type != \"csv\" && $type != \"xslx\" && $type != \"xml\" && $type != \"rtf\" && $type != \"tif\" && $type != \"html\"){\n\t\t\t$type = \"pdf\";\n\t\t}\n\n\t\t$cmd = \"\";\n\t\tif ($this->dotnet_path != null){\n\t\t\t$cmd = '\"' . $this->dotnet_path . '\" \"' . $this->rdl_cmd_path . '\" ';\n\t\t}\n\t\telse{\n\t\t\t// if self hosted or on windows we do not need to set the path to mono, rdlcmd can be run directly\n\t\t\t$cmd = '\"' . $this->rdl_cmd_path . '\" ';\n\t\t}\n\t\t\n\t\t$temp_folder = sys_get_temp_dir();\n\n\t\t\t\n\t\t$temp_name = tempnam($temp_folder, \"majorsilencereporting\");\n\t\tcopy($this->report_path, $temp_name);\n\t\t\n\t\t// add path to rdl file\n\t\t$cmd = $cmd . '\"/f' . $temp_name . '';\n\t\t\n\t\t// Add all parameters to report\n\t\t$count=0;\n\t\tforeach($this->parameters as $key => $value){\n\t\t\tif ($count == 0){\n\t\t\t\t$cmd = $cmd . '?' . $key . '=' . $value;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$cmd = $cmd . '&' . $key . '=' . $value;\n\t\t\t}\n\t\t\n\t\t\t$count = $count + 1;\n\t\t}\n\t\t$cmd = $cmd . '\" ';\n\t\n\t\t\n\t\t// set the export type\n\t\t$cmd = $cmd . '\"/t' . $type . '\" ';\n\t\t\n\t\t//set the folder that the file will be exported\n\t\t$cmd = $cmd . '\"/o' . $temp_folder . '\" ';\n\n\t\tif (!empty($this->connection_string)) {\n\t\t\t$cmd .= '\"/c' . $this->connection_string . '\" ';\n\t\t}\n\t\t\n\t\t$cdir = getcwd();\n\t\tchdir ($this->rdlcmd_dir);\n\t\t$shell_output = shell_exec($cmd);\n\t\tchdir ($cdir);\n\n\t\t$temp_pdf = $temp_folder;\n\t\t\n\t\tif ($this->endsWith($temp_pdf, DIRECTORY_SEPARATOR) == false)\n\t\t{\n\t\t\t$temp_pdf = $temp_pdf . DIRECTORY_SEPARATOR;\n\t\t}\n\t\t$temp_pdf = $temp_pdf . basename($temp_name, \".tmp\") . \".\" . $type;\n\t\t$final_pdf = $export_path;\n\t\t//echo($cmd);\n\t\tcopy($temp_pdf, $final_pdf);\n\t\tunlink($temp_name);\n\t\tunlink($temp_pdf);\n\t}\n\n\t/**\n\t* Export report to memory for direct display on page\n\t* @param string $type - Export type \"pdf\", \"csv\", \"xslx\", \"xml\", \"rtf\", \"tif\", \"html\".  If type does not match it will default to PDF.\n\t*/\n\tpublic function export_to_memory($type){\n\t\tif ($type != \"pdf\" && $type != \"csv\" && $type != \"xslx\" && $type != \"xml\" && $type != \"rtf\" && $type != \"tif\" && $type != \"html\"){\n\t\t\t$type = \"pdf\";\n\t\t}\n\t\n\t\tglobal $override_tmp_folder;\n\t\t$temp_folder = \"\";\n\t\tif ($override_tmp_folder == \"\")\n\t\t{\n\t\t\t$temp_folder = sys_get_temp_dir();\n\t\t}\n\t\telse\n\t\t{\n\t\t\t$temp_folder = $override_tmp_folder;\n\t\t}\n\t\t$temp_name = tempnam($temp_folder, \"majorsilencereporting\");\n\t\n\t\t$this->export($type, $temp_name);\n\t\t$data = file_get_contents($temp_name);\n\t\n\t\tunlink($temp_name);\n\t\n\t\treturn $data;\n\t}\n\t\n\tprivate function endsWith($haystack, $needle)\n\t{\n\t\treturn $needle === \"\" || substr($haystack, -strlen($needle)) === $needle;\n\t}\n\t\n}\n\n\n\n?>\n\n\n\n"
  },
  {
    "path": "LanguageWrappers/php/viewer.php",
    "content": "<?php\nnamespace MajorsilenceReporting;\n\nrequire_once(\"report.php\");\n\nclass Viewer {\n\n\tprivate $rpt;\n\t\n\t/**\n\t* Pass in Report object that will be viewed\n\t*/\n\tpublic function __construct($rpt){\n\t\n\t\t$this->rpt = $rpt;\n\t}\n\n\t/**\n\t* Display a pdf.js viewer with the report\n\t*/\n\tpublic function show(){\n\t\n\t}\n\t\n\t\n}\n\n\n\n?>\n"
  },
  {
    "path": "LanguageWrappers/python/Examples/test1.py",
    "content": "#! /usr/bin/env python\n\nimport sys\nsys.path.append(\"..\")\nimport report\nimport os\nimport platform\n\n# SETUP\ncurrent_directory = os.path.dirname(os.path.abspath(__file__))\nbase_directory = os.path.join(current_directory, '..', '..', '..')\nbase_directory = os.path.abspath(base_directory)\n\ndb_path = os.path.join(current_directory, '..', '..', '..', 'Examples', 'northwindEF.db')\ndb_path = os.path.abspath(db_path)\nreport_path = os.path.join(current_directory, '..', '..', '..', 'Examples', 'SqliteExamples', 'SimpleTest1.rdl')\nreport_path = os.path.abspath(report_path)\n\nif platform.system() == 'Windows':\n    # if self hosted or on windows we do not need to set the path to dotnet, rdlcmd can be run directly\n    path_to_dotnet = None\n    path_to_rdlcmd = os.path.join(base_directory, \"RdlCmd/bin/Release/net8.0/win-x64/publish/RdlCmd.exe\") \nelse:\n    # dotnet is required to run rdlcmd\n    # if a self contained build is used, the path to dotnet is not needed and the call should be to RdlCmd instead of RdlCmd.dll directly\n    # if a self contained build is not used, the path to dotnet is needed\n    path_to_dotnet= \"dotnet\"\n    path_to_rdlcmd = os.path.join(base_directory, \"RdlCmd/bin/Debug/net8.0/RdlCmd.dll\") \n\npath_to_rdlcmd = os.path.abspath(path_to_rdlcmd)\n\noutput_directory = os.path.join(current_directory, 'output')\nif not os.path.exists(output_directory):\n    os.makedirs(output_directory)\n\n# REPORT EXAMPLE\nrpt = report.Report(report_path, path_to_rdlcmd, path_to_dotnet)\nrpt.set_connection_string('Data Source=' + db_path)\nrpt.export(\"pdf\", os.path.join(output_directory, 'test1.pdf'))\n"
  },
  {
    "path": "LanguageWrappers/python/Examples/test2-parameters.py",
    "content": "#! /usr/bin/env python\n\nimport sys\nsys.path.append(\"..\")\nimport report\nimport os\nimport platform\n\n\n# SETUP\ncurrent_directory = os.path.dirname(os.path.abspath(__file__))\nbase_directory = os.path.join(current_directory, '..', '..', '..')\nbase_directory = os.path.abspath(base_directory)\n\ndb_path = os.path.join(current_directory, '..', '..', '..', 'Examples', 'northwindEF.db')\ndb_path = os.path.abspath(db_path)\nreport_path = os.path.join(current_directory, '..', '..', '..', 'Examples', 'SqliteExamples', 'SimpleTest3WithParameters.rdl')\nreport_path = os.path.abspath(report_path)\n\nif platform.system() == 'Windows':\n    # if self hosted or on windows we do not need to set the path to dotnet, rdlcmd can be run directly\n    path_to_dotnet = None\n    path_to_rdlcmd = os.path.join(base_directory, \"RdlCmd\\\\bin\\\\Debug\\\\net8.0\\\\RdlCmd.exe\") \nelse:\n    # dotnet is required to run rdlcmd\n    path_to_dotnet= \"dotnet\"\n    path_to_rdlcmd = os.path.join(base_directory, \"RdlCmd/bin/Debug/net8.0/RdlCmd.dll\") \n\npath_to_rdlcmd = os.path.abspath(path_to_rdlcmd)\n\noutput_directory = os.path.join(current_directory, 'output')\nif not os.path.exists(output_directory):\n    os.makedirs(output_directory)\n\n# REPORT EXAMPLE\n\nrpt = report.Report(report_path, path_to_rdlcmd, path_to_dotnet)\nrpt.set_parameter(\"TestParam1\", 'I am a parameter value.')\nrpt.set_parameter(\"TestParam2\", 'The second parameter.')\nrpt.set_connection_string('Data Source=' + db_path)\nrpt.export(\"pdf\", os.path.join(output_directory, 'test2-parameters.pdf'))\n\n"
  },
  {
    "path": "LanguageWrappers/python/Examples/test3-streaming.py",
    "content": "#! /usr/bin/env python\n\nimport sys\nsys.path.append(\"..\")\nimport report\nimport os\nimport platform\n\n# SETUP\ncurrent_directory = os.path.dirname(os.path.abspath(__file__))\nbase_directory = os.path.join(current_directory, '..', '..', '..')\nbase_directory = os.path.abspath(base_directory)\ndb_path = os.path.join(current_directory, '..', '..', '..', 'Examples', 'northwindEF.db')\ndb_path = os.path.abspath(db_path)\n\nreport_path = os.path.join(current_directory, '..', '..', '..', 'Examples', 'SqliteExamples', 'SimpleTest1.rdl')\n\nif platform.system() == 'Windows':\n    # if self hosted or on windows we do not need to set the path to dotnet, rdlcmd can be run directly\n    path_to_dotnet = None\n    path_to_rdlcmd = os.path.join(base_directory, \"RdlCmd\\\\bin\\\\Debug\\\\net8.0\\\\RdlCmd.exe\") \nelse:\n    # dotnet is required to run rdlcmd\n    path_to_dotnet= \"dotnet\"\n    path_to_rdlcmd = os.path.join(base_directory, \"RdlCmd/bin/Debug/net8.0/RdlCmd.dll\") \n\npath_to_rdlcmd = os.path.abspath(path_to_rdlcmd)\n\n# REPORT EXAMPLE\n\nrpt = report.Report(report_path, path_to_rdlcmd, path_to_dotnet)\nrpt.set_connection_string('Data Source=' + db_path)\ndata = rpt.export_to_memory(\"pdf\")\n\nprint(data)\n\n# This is where you output data on your site using wsgi, cgi, or whatever python framework/library you are using\n"
  },
  {
    "path": "LanguageWrappers/python/report.py",
    "content": "import tempfile\nimport os\nimport shutil\nimport subprocess\n\n\n\nclass Report :\n\t\"\"\"\n\tReport Class\n\tThis class provides functionality to generate and export reports using the RDL (Report Definition Language) command-line tool. \n\tIt supports exporting reports in various formats such as PDF, CSV, XLSX, XML, RTF, TIF, and HTML.\n\tUsage:\n\t1. Copy and paste the `report.py` file into your Python project.\n\t2. Import the `Report` class into your script:\n\t\t```python\n\t\timport report\n\t\t```\n\t3. Create an instance of the `Report` class:\n\t\t```python\n\t\trpt = report.Report(report_path=\"path_to_report.rdl\", rdl_cmd_path=\"path_to_rdl_cmd.exe\", path_to_dotnet=\"path_to_dotnet_executable\")\n\t\t```\n\t\t- `report_path`: Path to the RDL file.\n\t\t- `rdl_cmd_path`: Path to the RDL command-line executable.\n\t\t- `path_to_dotnet`: (Optional) Path to the .NET executable, if required.\n\t4. Set report parameters (if any):\n\t\t```python\n\t\trpt.set_parameter(\"ParameterName\", \"ParameterValue\")\n\t\t```\n\t5. Set the connection string (if required):\n\t\t```python\n\t\trpt.set_connection_string(\"your_connection_string\")\n\t\t```\n\t6. Export the report to a file:\n\t\t```python\n\t\trpt.export(type=\"pdf\", export_path=\"output_path.pdf\")\n\t\t```\n\t\t- `type`: The export format. Supported formats are \"pdf\", \"csv\", \"xslx\", \"xml\", \"rtf\", \"tif\", \"html\". Defaults to \"pdf\".\n\t\t- `export_path`: The path where the exported file will be saved.\n\t7. Export the report to memory (for direct display):\n\t\t```python\n\t\tdata = rpt.export_to_memory(type=\"pdf\")\n\t\t```\n\t\t- `type`: The export format. Supported formats are \"pdf\", \"csv\", \"xslx\", \"xml\", \"rtf\", \"tif\", \"html\". Defaults to \"pdf\".\n\t\t- Returns the exported report data as a string or binary, depending on the format.\n\t\"\"\"\n\t__report_path=\"\"\n\t__parameters = {}\n\t__connection_string = None\n\t__rdl_cmd_path=\"\"\n\t__path_to_dotnet = None\n\t\n\tdef __init__(self, report_path: str, rdl_cmd_path: str, path_to_dotnet :str =None):\n\t\tself.__report_path = report_path\n\t\tself.__rdl_cmd_path = rdl_cmd_path\n\t\tself.__path_to_dotnet = path_to_dotnet\n\t\n\tdef set_parameter(self, name, value):\n\t\t'''\n\t\tSet a parameters values\n\t\t name - string - the report parameter name\n\t\t value - string - the value of the parameter\n\t\t'''\n\t\t\n\t\tself.__parameters.update({name:value})\n\t\t\n\tdef set_connection_string(self, connection_string: str):\n\t\t'''\n\t\tSet the connection string for the report\n\t\t connection_string - string - the connection string to use for the report\n\t\t'''\n\t\t\n\t\tself.__connection_string = connection_string\n\n\n\tdef export(self, type : str, export_path : str):\n\t\t'''\n\t\t Export report to a file on the server\n\t\t type - string - Export type \"pdf\", \"csv\", \"xslx\", \"xml\", \"rtf\", \"tif\", \"html\".  If type does not match it will default to PDF.\n\t\t export_type - string - path on server to export file\n\t\t'''\n\t\tif (type != \"pdf\" and type != \"csv\" and type != \"xslx\" and type != \"xml\" and type != \"rtf\" and type != \"tif\" and type != \"html\"):\n\t\t\ttype = \"pdf\"\n\t\t\t\n\t\tcmd = []\n\t\tif (self.__path_to_dotnet != None):\n\t\t\tcmd.append(self.__path_to_dotnet)\n\n\t\tcmd.append(self.__rdl_cmd_path)\n\t\n\t\tfd, temp_name = tempfile.mkstemp()\n\t\tos.close(fd)\n\t\ttemp_folder = os.path.dirname(temp_name)\n\t\tshutil.copyfile(self.__report_path, temp_name)\n\t\t\n\t\t#add path to rdl file\n\t\trdl_path = \"/f\" + temp_name\n\t\t\n\t\t# Add all parameters to report\n\t\tcount=0\n\t\tfor key in self.__parameters:\n\t\t\tif (count == 0):\n\t\t\t\trdl_path = rdl_path + '?' + key + '=' + self.__parameters[key]\n\t\t\telse:\n\t\t\t\trdl_path = rdl_path + '&' + key + '=' + self.__parameters[key]\n\t\t\n\t\t\tcount = count + 1\n\t\t\n\t\tcmd.append(rdl_path)\n\t\t\n\t\t# set the export type\n\t\tcmd.append('/t' + type)\n\t\t\n\t\t#set the folder that the file will be exported\n\t\tcmd.append('/o' + temp_folder)\n\n\t\tif self.__connection_string:\n\t\t\tcmd.append('/c' + self.__connection_string+'')\n\t\t\n\t\t#print(\"Executing command:\", cmd)\n\n\t\tsubprocess.run(cmd)\n\n\t\ttemp_pdf = temp_folder + os.sep + os.path.basename(temp_name) + \".\" + type\n\t\tfinal_pdf = export_path\n\n\t\tshutil.copyfile(temp_pdf, final_pdf)\n\t\tos.remove(temp_name)\n\t\tos.remove(temp_pdf)\n\t\n\n\n\tdef export_to_memory(self, type : str) -> bytes | str :\n\t\t'''\n\t\tExport report to memory for direct display on page\n\t\ttype - string - Export type \"pdf\", \"csv\", \"xslx\", \"xml\", \"rtf\", \"tif\", \"html\".  If type does not match it will default to PDF.\n\t\t'''\n\t\tif (type != \"pdf\" and type != \"csv\" and type != \"xslx\" and type != \"xml\" and type != \"rtf\" and type != \"tif\" and type != \"html\"):\n\t\t\ttype = \"pdf\"\n\t\t\n\t\tfd, temp_name = tempfile.mkstemp()\n\t\tos.close(fd);\n\t\tself.export(type, temp_name)\n\t\tif type == \"pdf\" or type == \"tif\" or type == \"rtf\" or type == \"xslx\":\n\t\t\twith open(temp_name, 'rb') as binary_file:\n\t\t\t\tdata = binary_file.read()\n\t\telse:\n\t\t\twith open(temp_name, 'r+') as text_file:\n\t\t\t\tdata = text_file.read()\n\n\t\tos.remove(temp_name)\n\t\n\t\treturn data\n\t\n\t\n\n"
  },
  {
    "path": "LanguageWrappers/ruby/Examples/test1.rb",
    "content": "#!/usr/bin/env ruby\n\n$LOAD_PATH << '../'\nrequire 'report'\n\n# SETUP\ncurrent_directory = File.dirname(File.expand_path(__FILE__))\ndb_path = File.expand_path(File.join(current_directory, '..', '..', '..', 'Examples', 'northwindEF.db'))\nreport_path = File.expand_path(File.join(current_directory, '..', '..', '..', 'Examples', 'SqliteExamples', 'SimpleTest1.rdl'))\n\nif Gem.win_platform?\n    # If on Windows, we do not need to set the path to dotnet, RdlCmd can be run directly\n    path_to_dotnet = nil\n    path_to_rdlcmd = File.expand_path(File.join(current_directory, '..', '..', '..', 'RdlCmd', 'bin', 'Debug', 'net8.0', 'RdlCmd.exe'))\nelse\n    # dotnet is required to run RdlCmd\n    path_to_dotnet = 'dotnet'\n    path_to_rdlcmd = File.expand_path(File.join(current_directory, '..', '..', '..', 'RdlCmd', 'bin', 'Debug', 'net8.0', 'RdlCmd.dll'))\nend\n\npath_to_rdlcmd = File.absolute_path(path_to_rdlcmd)\n\noutput_directory = File.join(current_directory, 'output')\nDir.mkdir(output_directory) unless Dir.exist?(output_directory)\n\n# REPORT EXAMPLE\nrpt = Report.new(report_path, path_to_rdlcmd, path_to_dotnet)\nrpt.set_connection_string('Data Source=' + db_path)\nrpt.export(\"pdf\", File.join(output_directory, 'test1.pdf'))\n"
  },
  {
    "path": "LanguageWrappers/ruby/Examples/test2-parameters.rb",
    "content": "#!/usr/bin/env ruby\n\n$LOAD_PATH << '../'\nrequire 'report'\n\n# SETUP\ncurrent_directory = File.dirname(File.expand_path(__FILE__))\ndb_path = File.expand_path(File.join(current_directory, '..', '..', '..', 'Examples', 'northwindEF.db'))\nreport_path = File.expand_path(File.join(current_directory, '..', '..', '..', 'Examples', 'SqliteExamples', 'SimpleTest3WithParameters.rdl'))\n\nif Gem.win_platform?\n    # If on Windows, we do not need to set the path to dotnet, RdlCmd can be run directly\n    path_to_dotnet = nil\n    path_to_rdlcmd = File.expand_path(File.join(current_directory, '..', '..', '..', 'RdlCmd', 'bin', 'Debug', 'net8.0', 'RdlCmd.exe'))\nelse\n    # dotnet is required to run RdlCmd\n    path_to_dotnet = 'dotnet'\n    path_to_rdlcmd = File.expand_path(File.join(current_directory, '..', '..', '..', 'RdlCmd', 'bin', 'Debug', 'net8.0', 'RdlCmd.dll'))\nend\n\noutput_directory = File.join(current_directory, 'output')\nDir.mkdir(output_directory) unless Dir.exist?(output_directory)\n\n# REPORT EXAMPLE\n\nrpt = Report.new(report_path, path_to_rdlcmd, path_to_dotnet)\nrpt.set_parameter(\"TestParam1\", 'I am a parameter value.')\nrpt.set_parameter(\"TestParam2\", 'The second parameter.')\nrpt.set_connection_string('Data Source=' + db_path)\nrpt.export(\"pdf\", File.join(output_directory, 'test2-parameters.pdf'))\n"
  },
  {
    "path": "LanguageWrappers/ruby/Examples/test3-streaming.rb",
    "content": "#!/usr/bin/env ruby\n\n$LOAD_PATH << '../'\nrequire 'report'\n\n# SETUP\ncurrent_directory = File.dirname(File.expand_path(__FILE__))\ndb_path = File.expand_path(File.join(current_directory, '..', '..', '..', 'Examples', 'northwindEF.db'))\nreport_path = File.expand_path(File.join(current_directory, '..', '..', '..', 'Examples', 'SqliteExamples', 'SimpleTest1.rdl'))\n\nif Gem.win_platform?\n    # If on Windows, we do not need to set the path to dotnet, RdlCmd can be run directly\n    path_to_dotnet = nil\n    path_to_rdlcmd = File.expand_path(File.join(current_directory, '..', '..', '..', 'RdlCmd', 'bin', 'Debug', 'net8.0', 'RdlCmd.exe'))\nelse\n    # dotnet is required to run RdlCmd\n    path_to_dotnet = 'dotnet'\n    path_to_rdlcmd = File.expand_path(File.join(current_directory, '..', '..', '..', 'RdlCmd', 'bin', 'Debug', 'net8.0', 'RdlCmd.dll'))\nend\n\noutput_directory = File.join(current_directory, 'output')\nDir.mkdir(output_directory) unless Dir.exist?(output_directory)\n\n# REPORT EXAMPLE\n\nrpt = Report.new(report_path, path_to_rdlcmd, path_to_dotnet)\nrpt.set_connection_string('Data Source=' + db_path)\ndata = rpt.export_to_memory(\"pdf\")\n\n# show the data in the console\nprint(data)\n\n# or save it to a file\nFile.open(File.join(output_directory, 'test3-streaming.pdf'), 'wb') do |file| \n  file.write(data)\nend\n\n\n\n# This is where you output data on your site using wsgi, cgi, or whatever python framework/library you are using\n"
  },
  {
    "path": "LanguageWrappers/ruby/report.rb",
    "content": "require 'tempfile'\n\nclass Report\n\n\tdef initialize(report_path, rdl_cmd_path, path_to_dotnet = nil)\n\t\t@@report_path = report_path\n\t\t@@path_to_rdlcmd = rdl_cmd_path\n\t\t@@path_to_dotnet = path_to_dotnet\n\t\t@@parameters = {}\n\tend\n\t\n\tdef set_parameter(name, value)\n\t\t#Set a parameters values\n\t\t# name - string - the report parameter name\n\t\t# value - string - the value of the parameter\n\t\t\n\t\t@@parameters[name] = value\n\t\t\n\tend\n\n\tdef set_connection_string(connection_string)\n\t\t#Set the connection string for the report\n\t\t# connection_string - string - the connection string to use for the report\n\t\t\n\t\t@@connection_string = connection_string\n\tend\n\n\tdef export(type, export_path)\n\t\t# Export report to a file on the server\n\t\t# type - string - Export type \"pdf\", \"csv\", \"xslx\", \"xml\", \"rtf\", \"tif\", \"html\".  If type does not match it will default to PDF.\n\t\t# export_type - string - path on server to export file\n\n\t\tif (type != \"pdf\" and type != \"csv\" and type != \"xslx\" and type != \"xml\" and type != \"rtf\" and type != \"tif\" and type != \"html\")\n\t\t\ttype = \"pdf\"\n\t\tend\n\t\t\t\n\t\tcmd = []\n\t\tif @@path_to_dotnet\n\t\t\tcmd.push(@@path_to_dotnet)\n\t\tend\n\n\t\tcmd.push(@@path_to_rdlcmd)\n\t\t\n\t\ttemp_file_to_close = Tempfile.new('maj')\n\t\ttemp_name = temp_file_to_close.path\n\t\ttemp_file_to_close.close\n\t\ttemp_folder = File.dirname(temp_name)\n\t\tFileUtils.cp(@@report_path, temp_name)\n\t\t\n\t\t#add path to rdl file\n\t\trdl_path = \"/f\" + temp_name\n\t\t\n\t\t# Add all parameters to report\n\t\tcount=0\n\t\t\n\t\t@@parameters.each do |key, value|\n\t\t\tif (count == 0)\n\t\t\t\trdl_path = rdl_path + '?' + key + '=' + value\n\t\t\telse\n\t\t\t\trdl_path = rdl_path + '&' + key + '=' + value\n\t\t\tend\n\t\t\n\t\t\tcount = count + 1\n\t\tend\n\t\t\n\t\tcmd.push(rdl_path)\n\t\t\n\t\t# set the export type\n\t\tcmd.push('/t' + type)\n\t\t\n\t\t#set the folder that the file will be exported\n\t\tcmd.push('/o' + temp_folder)\n\n\t\tif @@connection_string\n\t\t\tcmd.push('/c' + @@connection_string)\n\t\tend\n\n\t\t#puts cmd.join(\" \")\n\t\t\n\t\tIO.popen(cmd) do |io|\n\t\t\t # wait until process finished\n\t\t\tio.readlines\n\t\tend \n\t\t\n\t\ttemp_pdf = temp_folder + File::SEPARATOR + File.basename(temp_name) + \".\" + type\n\t\tfinal_pdf = export_path\n\t\t#echo(cmd)\n\t\tFileUtils.cp(temp_pdf, final_pdf)\n\t\t\n\t\tFile.delete(temp_name)\n\t\tFile.delete(temp_pdf)\n\t\n\tend\n\n\n\tdef export_to_memory(type)\n\t\t# Export report to memory for direct display on page\n\t\t# type - string - Export type \"pdf\", \"csv\", \"xslx\", \"xml\", \"rtf\", \"tif\", \"html\". If type does not match it will default to PDF.\n\n\t\tif ![\"pdf\", \"csv\", \"xslx\", \"xml\", \"rtf\", \"tif\", \"html\"].include?(type)\n\t\t\ttype = \"pdf\"\n\t\tend\n\n\t\ttemp_file = Tempfile.new('export')\n\t\ttemp_name = temp_file.path\n\t\ttemp_file.close\n\t\ttemp_file.unlink\n\n\t\texport(type, temp_name)\n\n\t\tdata = nil\n\t\tif [\"pdf\", \"tif\", \"rtf\", \"xslx\"].include?(type)\n\t\t\tFile.open(temp_name, 'rb') do |binary_file|\n\t\t\t\tdata = binary_file.read\n\t\t\tend\n\t\telse\n\t\t\tFile.open(temp_name, 'r') do |text_file|\n\t\t\t\tdata = text_file.read\n\t\t\tend\n\t\tend\n\n\t\tFile.delete(temp_name) if File.exist?(temp_name)\n\n\t\tdata\n\tend\n\t\nend\n\n"
  },
  {
    "path": "LibRdlWpfViewer/LibRdlWpfViewer.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\t<PropertyGroup>\n\t\t<OutputType>Library</OutputType>\n\t\t<UseWindowsForms>true</UseWindowsForms>\n\t\t<UseWPF>true</UseWPF>\n\t\t<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>\n\t\t<GeneratePackageOnBuild>True</GeneratePackageOnBuild>\n\t\t<AssemblyTitle>RDL Data WPF Library</AssemblyTitle>\n\t\t<DelaySign>false</DelaySign>\n\t\t<PackageId>Majorsilence.Reporting.LibRdlWpfViewer</PackageId>\n\t\t<Configurations>Debug;Release;Debug-DrawingCompat;Release-DrawingCompat</Configurations>\n\t\t<TargetFrameworks>net48;net8.0-windows;net10.0-windows</TargetFrameworks>\n\t\t<WarningsAsErrors>4014</WarningsAsErrors>\n\t</PropertyGroup>\n\t<ItemGroup>\n\t\t<Reference Update=\"System.Core\">\n\t\t\t<RequiredTargetFramework>3.5</RequiredTargetFramework>\n\t\t</Reference>\n\t\t<Reference Update=\"System.Xml.Linq\">\n\t\t\t<RequiredTargetFramework>3.5</RequiredTargetFramework>\n\t\t</Reference>\n\t\t<Reference Update=\"UIAutomationProvider\">\n\t\t\t<RequiredTargetFramework>3.0</RequiredTargetFramework>\n\t\t</Reference>\n\t\t<Reference Update=\"WindowsFormsIntegration\">\n\t\t\t<RequiredTargetFramework>3.0</RequiredTargetFramework>\n\t\t</Reference>\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<AppDesigner Include=\"Properties\\\" />\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<ProjectReference Include=\"..\\DataProviders\\Majorsilence.Reporting.DataProviders.csproj\" />\n\t\t<ProjectReference Include=\"..\\RdlCri\\Majorsilence.Reporting.RdlCri.csproj\" />\n\t\t<ProjectReference Include=\"..\\RdlEngine\\Majorsilence.Reporting.RdlEngine.csproj\" />\n\t\t<ProjectReference Include=\"..\\RdlViewer\\RdlViewer.csproj\" />\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<PackageReference Include=\"System.Data.DataSetExtensions\" />\n\t</ItemGroup>\n</Project>\n"
  },
  {
    "path": "LibRdlWpfViewer/LibRdlWpfViewer.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nVisualStudioVersion = 12.0.31101.0\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlEngine\", \"..\\RdlEngine\\RdlEngine.csproj\", \"{C97E91F4-B310-44E2-9B6C-96775395722D}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DataProviders\", \"..\\DataProviders\\DataProviders.csproj\", \"{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlCri\", \"..\\RdlCri\\RdlCri.csproj\", \"{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlViewer\", \"..\\RdlViewer\\RdlViewer.csproj\", \"{D99145B1-CB6C-41F5-BA86-723325145FB5}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"LibRdlWpfViewer\", \"LibRdlWpfViewer.csproj\", \"{DA84B318-4210-4C7C-9A47-3A9356BC8D83}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.Build.0 = Debug|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.Build.0 = Debug|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.ActiveCfg = Release|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.Build.0 = Release|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.ActiveCfg = Release|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.Build.0 = Release|x86\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x64.Build.0 = Debug|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.Build.0 = Debug|x86\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x64.ActiveCfg = Release|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x64.Build.0 = Release|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.ActiveCfg = Release|x86\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.Build.0 = Release|x86\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x64.Build.0 = Debug|x64\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x86.Build.0 = Debug|x86\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x64.ActiveCfg = Release|x64\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x64.Build.0 = Release|x64\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x86.ActiveCfg = Release|x86\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x86.Build.0 = Release|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x64.Build.0 = Debug|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x86.Build.0 = Debug|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x64.ActiveCfg = Release|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x64.Build.0 = Release|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x86.ActiveCfg = Release|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x86.Build.0 = Release|x86\n\t\t{DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Debug|x64.Build.0 = Debug|x64\n\t\t{DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Debug|x86.Build.0 = Debug|x86\n\t\t{DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Release|x86.ActiveCfg = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "LibRdlWpfViewer/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace LibRdlWpfViewer.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"LibRdlWpfViewer.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "LibRdlWpfViewer/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "LibRdlWpfViewer/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace LibRdlWpfViewer.Properties {\n    \n    \n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"17.2.0.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\n        \n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n        \n        public static Settings Default {\n            get {\n                return defaultInstance;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "LibRdlWpfViewer/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"uri:settings\" CurrentProfile=\"(Default)\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>"
  },
  {
    "path": "LibRdlWpfViewer/RdlWpfViewer.xaml",
    "content": "﻿<UserControl x:Class=\"LibRdlWpfViewer.RdlWpfViewer\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:wf=\"clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms\"\n    xmlns:myctrl=\"clr-namespace:Majorsilence.Reporting.RdlViewer;assembly=RdlViewer\">\n    <Grid Width=\"auto\" Height=\"auto\">\n        <WindowsFormsHost Margin=\"12\" Name=\"windowsFormsHost1\">\n            <myctrl:RdlViewer x:Name=\"reportViewer\" Dock=\"Fill\" />\n        </WindowsFormsHost>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "LibRdlWpfViewer/RdlWpfViewer.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace LibRdlWpfViewer\n{\n    /// <summary>\n    /// Interaction logic for RdlWpfViewer.xaml\n    /// </summary>\n    public partial class RdlWpfViewer : UserControl\n    {\n        public RdlWpfViewer()\n        {\n            InitializeComponent();\n        }\n\n        public async Task Rebuild()\n        {\n            await this.reportViewer.Rebuild();\n        }\n\n        public async Task SaveAs(string FileName, Majorsilence.Reporting.Rdl.OutputPresentationType type)\n        {\n            await this.reportViewer.SaveAs(FileName, type);\n        }\n\n        public Uri SourceFile\n        {\n            get\n            {\n                return this.reportViewer.SourceFile;\n            }\n        }\n\n        public async Task SetSourceFile(Uri value)\n        {\n            await this.reportViewer.SetSourceFile(value);\n        }\n\n        public string SourceRdl\n        {\n            get\n            {\n                return this.reportViewer.SourceRdl;\n            }\n        }\n\n        public async Task SetSourceRdl(string value)\n        {\n            await this.reportViewer.SetSourceRdl(value);\n        }\n\n        public string Parameters\n        {\n            get\n            {\n                return this.reportViewer.Parameters;\n            }\n            set\n            {\n                this.reportViewer.Parameters = value;\n            }\n        }\n\n        public async Task<Majorsilence.Reporting.Rdl.Report> Report()\n        {\n            return await this.reportViewer.Report();       \n        }\n\n    }\n\n}\n\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Bitmap.cs",
    "content": "﻿using Majorsilence.Drawing.Imaging;\nusing SkiaSharp;\n\n\nnamespace Majorsilence.Drawing\n{\n    // Compatibility wrapper for Bitmap\n    public class Bitmap : Image, IDisposable\n    {\n\n        // Constructor for creating a new bitmap with width and height\n        public Bitmap(int width, int height) : base(width, height)\n        {\n        }\n\n        // Constructor for loading an image from a file\n        public Bitmap(string filename) : base(filename)\n        {\n        }\n        \n        public Bitmap(MemoryStream ms) : base(ms)\n        {\n        }\n\n        // Constructor for creating a bitmap from SKBitmap\n        public Bitmap(SKBitmap skBitmap) : base(skBitmap)\n        {\n            _skBitmap = skBitmap;\n        }\n\n        // Save method with options (e.g., quality)\n        public void Save(string filename, ImageFormat format, EncoderParameters encoderParams)\n        {\n            // This is a placeholder for implementing quality settings or other encoder options.\n            Save(filename, format);  // Basic implementation\n        }\n\n        public new void Save(Stream stream, ImageFormat format)\n        {\n            SKImage.FromBitmap(_skBitmap).Encode(format.ToSkImageEncodeFormat(), 100).SaveTo(stream);\n        }\n\n        // Convert bitmap to graphics\n        public Graphics GetGraphics()\n        {\n            return new Graphics(new SKCanvas(_skBitmap));\n        }\n\n        // Dispose of the bitmap\n        public new void Dispose()\n        {\n            base.Dispose();\n            _skBitmap?.Dispose();\n        }\n\n        // Static method to create a bitmap from file\n        public static new Bitmap FromFile(string filename)\n        {\n            return new Bitmap(filename);\n        }\n\n        public static implicit operator SKBitmap(Bitmap i)\n        {\n            return i._skBitmap;\n        }\n\n        public static implicit operator Bitmap(SKBitmap i)\n        {\n            return new Bitmap(i);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Brush.cs",
    "content": "﻿using SkiaSharp;\n\n\nnamespace Majorsilence.Drawing\n{\n    // Compatibility wrapper for Brush (only supports solid color for now)\n    public class Brush : IDisposable\n    {\n        private SKPaint _paint;\n\n        public Brush(Color color)\n        {\n            _paint = new SKPaint\n            {\n                Color = new SKColor((byte)color.R, (byte)color.G, (byte)color.B, (byte)color.A),\n                Style = SKPaintStyle.Fill\n            };\n        }\n\n        public void Dispose()\n        {\n            _paint?.Dispose();\n        }\n\n        // Convert Brush to SKPaint\n        internal SKPaint ToSkPaint()\n        {\n            return _paint;\n        }\n    }\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Brushes.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Drawing\n{\n    public static class Brushes\n    {\n        public static Brush Black => new Brush(Color.Black);\n        public static Brush White => new Brush(Color.White);\n        public static Brush Red => new Brush(Color.Red);\n        public static Brush Green => new Brush(Color.Green);\n        public static Brush Blue => new Brush(Color.Blue);\n        public static Brush Yellow => new Brush(Color.Yellow);\n        public static Brush Cyan => new Brush(Color.Cyan);\n        public static Brush Magenta => new Brush(Color.Magenta);\n        public static Brush Transparent => new Brush(Color.Transparent);\n        public static Brush Orange => new Brush(Color.Orange);\n        public static Brush Purple => new Brush(Color.Purple);\n        public static Brush Brown => new Brush(Color.Brown);\n        public static Brush Pink => new Brush(Color.Pink);\n        public static Brush Lime => new Brush(Color.Lime);\n        public static Brush Gray => new Brush(Color.Gray);\n        public static Brush Navy => new Brush(Color.Navy);\n        public static Brush Olive => new Brush(Color.Olive);\n        public static Brush Teal => new Brush(Color.Teal);\n        public static Brush Silver => new Brush(Color.Silver);\n        public static Brush Maroon => new Brush(Color.Maroon);\n        public static Brush Chocolate => new Brush(Color.Chocolate);\n        public static Brush IndianRed => new Brush(Color.IndianRed);\n        public static Brush Peru => new Brush(Color.Peru);\n        public static Brush BurlyWood => new Brush(Color.BurlyWood);\n        public static Brush AntiqueWhite => new Brush(Color.AntiqueWhite);\n        public static Brush FloralWhite => new Brush(Color.FloralWhite);\n        public static Brush Ivory => new Brush(Color.Ivory);\n        public static Brush LightCoral => new Brush(Color.LightCoral);\n        public static Brush DarkSalmon => new Brush(Color.DarkSalmon);\n        public static Brush LightSalmon => new Brush(Color.LightSalmon);\n        public static Brush PeachPuff => new Brush(Color.PeachPuff);\n        public static Brush NavajoWhite => new Brush(Color.NavajoWhite);\n        public static Brush Moccasin => new Brush(Color.Moccasin);\n        public static Brush PapayaWhip => new Brush(Color.PapayaWhip);\n        public static Brush Goldenrod => new Brush(Color.Goldenrod);\n        public static Brush DarkGoldenrod => new Brush(Color.DarkGoldenrod);\n        public static Brush DarkKhaki => new Brush(Color.DarkKhaki);\n        public static Brush Khaki => new Brush(Color.Khaki);\n        public static Brush Beige => new Brush(Color.Beige);\n        public static Brush Cornsilk => new Brush(Color.Cornsilk);\n        public static Brush DeepSkyBlue => new Brush(Color.DeepSkyBlue);\n        public static Brush Gold => new Brush(Color.Gold);\n        public static Brush SlateGray => new Brush(Color.SlateGray);\n        public static Brush DarkGray => new Brush(Color.DarkGray);\n        public static Brush LightGray => new Brush(Color.LightGray);\n        public static Brush DarkSlateGray => new Brush(Color.DarkSlateGray);\n        public static Brush DimGray => new Brush(Color.DimGray);\n        public static Brush LightSlateGray => new Brush(Color.LightSlateGray);\n        public static Brush Gainsboro => new Brush(Color.Gainsboro);\n        public static Brush LightBlue => new Brush(Color.LightBlue);\n        public static Brush LightCyan => new Brush(Color.LightCyan);\n        public static Brush LightGoldenrodYellow => new Brush(Color.LightGoldenrodYellow);\n        public static Brush LightGreen => new Brush(Color.LightGreen);\n        public static Brush LightPink => new Brush(Color.LightPink);\n        public static Brush LightSeaGreen => new Brush(Color.LightSeaGreen);\n        public static Brush LightSkyBlue => new Brush(Color.LightSkyBlue);\n        public static Brush LightSteelBlue => new Brush(Color.LightSteelBlue);\n        public static Brush LightYellow => new Brush(Color.LightYellow);\n        public static Brush CadetBlue => new Brush(Color.CadetBlue);\n        public static Brush MediumTurquoise => new Brush(Color.MediumTurquoise);\n        public static Brush Aquamarine => new Brush(Color.Aquamarine);\n        public static Brush Azure => new Brush(Color.Azure);\n        public static Brush AliceBlue => new Brush(Color.AliceBlue);\n        public static Brush MintCream => new Brush(Color.MintCream);\n        public static Brush DarkSeaGreen => new Brush(Color.DarkSeaGreen);\n        public static Brush PaleGreen => new Brush(Color.PaleGreen);\n        public static Brush MediumPurple => new Brush(Color.MediumPurple);\n        public static Brush CornflowerBlue => new Brush(Color.CornflowerBlue);\n        public static Brush Lavender => new Brush(Color.Lavender);\n        public static Brush GhostWhite => new Brush(Color.GhostWhite);\n        public static Brush PaleGoldenrod => new Brush(Color.PaleGoldenrod);\n        public static Brush LemonChiffon => new Brush(Color.LemonChiffon);\n        public static Brush Orchid => new Brush(Color.Orchid);\n        public static Brush Plum => new Brush(Color.Plum);\n        public static Brush LavenderBlush => new Brush(Color.LavenderBlush);\n        public static Brush Linen => new Brush(Color.Linen);\n        public static Brush PaleTurquoise => new Brush(Color.PaleTurquoise);\n        public static Brush OldLace => new Brush(Color.OldLace);\n        \n\n\n    }\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/CharacterRange.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Drawing\n{\n    public class CharacterRange\n    {\n        public int First { get; set; }\n        public int Length { get; set; }\n        public CharacterRange(int first, int length)\n        {\n            First = first;\n            Length = length;\n        }\n    }\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Color.cs",
    "content": "﻿using Majorsilence.Drawing.Drawing2D;\nusing SkiaSharp;\nusing System.Reflection;\n\n\nnamespace Majorsilence.Drawing\n{\n    // Compatibility wrapper for Color\n    public class Color\n    {\n        public static Color Black => new Color(0, 0, 0);\n        public static Color White => new Color(255, 255, 255);\n        public static Color Red => new Color(255, 0, 0);\n        public static Color Green => new Color(0, 255, 0);\n        public static Color Blue => new Color(0, 0, 255);\n        public static Color Yellow => new Color(255, 255, 0);\n        public static Color Cyan => new Color(0, 255, 255);\n        public static Color Magenta => new Color(255, 0, 255);\n        public static Color Transparent => new Color(0, 0, 0, 0);\n        public static Color Orange => new Color(255, 165, 0);\n        public static Color Purple => new Color(128, 0, 128);\n        public static Color Brown => new Color(165, 42, 42);\n        public static Color Pink => new Color(255, 192, 203);\n        public static Color Lime => new Color(0, 255, 0);\n        public static Color Gray => new Color(128, 128, 128);\n        public static Color Navy => new Color(0, 0, 128);\n        public static Color Olive => new Color(128, 128, 0);\n        public static Color Teal => new Color(0, 128, 128);\n        public static Color Silver => new Color(192, 192, 192);\n        public static Color Empty => new Color(0, 0, 0, 0);\n        public static Color Maroon => new Color(128, 0, 0);\n        public static Color Chocolate => new Color(210, 105, 30);\n        public static Color IndianRed => new Color(205, 92, 92);\n        public static Color Peru => new Color(205, 133, 63);\n        public static Color BurlyWood => new Color(222, 184, 135);\n        public static Color AntiqueWhite => new Color(250, 235, 215);\n        public static Color FloralWhite => new Color(255, 250, 240);\n        public static Color Ivory => new Color(255, 255, 240);\n        public static Color LightCoral => new Color(240, 128, 128);\n        public static Color DarkSalmon => new Color(233, 150, 122);\n        public static Color LightSalmon => new Color(255, 160, 122);\n        public static Color PeachPuff => new Color(255, 218, 185);\n        public static Color NavajoWhite => new Color(255, 222, 173);\n        public static Color Moccasin => new Color(255, 228, 181);\n        public static Color PapayaWhip => new Color(255, 239, 213);\n        public static Color Goldenrod => new Color(218, 165, 32);\n        public static Color DarkGoldenrod => new Color(184, 134, 11);\n        public static Color DarkKhaki => new Color(189, 183, 107);\n        public static Color Khaki => new Color(240, 230, 140);\n        public static Color Beige => new Color(245, 245, 220);\n        public static Color Cornsilk => new Color(255, 248, 220);\n        public static Color DeepSkyBlue => new Color(0, 191, 255);\n        public static Color Gold => new Color(255, 215, 0);\n\n\n        public static Color SlateGray => new Color(112, 128, 144);\n        public static Color DarkGray => new Color(169, 169, 169);\n        public static Color LightGray => new Color(211, 211, 211);\n        public static Color DarkSlateGray => new Color(47, 79, 79);\n        public static Color DimGray => new Color(105, 105, 105);\n        public static Color LightSlateGray => new Color(119, 136, 153);\n        public static Color Gainsboro => new Color(220, 220, 220);\n        public static Color LightBlue => new Color(173, 216, 230);\n        public static Color LightCyan => new Color(224, 255, 255);\n        public static Color LightGoldenrodYellow => new Color(250, 250, 210);\n        public static Color LightGreen => new Color(144, 238, 144);\n        public static Color LightPink => new Color(255, 182, 193);\n        public static Color LightSeaGreen => new Color(32, 178, 170);\n        public static Color LightSkyBlue => new Color(135, 206, 250);\n        public static Color LightSteelBlue => new Color(176, 196, 222);\n        public static Color LightYellow => new Color(255, 255, 224);\n\n\n        public static Color CadetBlue => new Color(95, 158, 160);\n        public static Color MediumTurquoise => new Color(72, 209, 204);\n        public static Color Aquamarine => new Color(127, 255, 212);\n        public static Color Azure => new Color(240, 255, 255);\n        public static Color AliceBlue => new Color(240, 248, 255);\n        public static Color MintCream => new Color(245, 255, 250);\n        public static Color DarkSeaGreen => new Color(143, 188, 143);\n        public static Color PaleGreen => new Color(152, 251, 152);\n        public static Color MediumPurple => new Color(147, 112, 219);\n        public static Color CornflowerBlue => new Color(100, 149, 237);\n        public static Color Lavender => new Color(230, 230, 250);\n        public static Color GhostWhite => new Color(248, 248, 255);\n        public static Color PaleGoldenrod => new Color(238, 232, 170);\n        public static Color LemonChiffon => new Color(255, 250, 205);\n        public static Color Orchid => new Color(218, 112, 214);\n        public static Color Plum => new Color(221, 160, 221);\n        public static Color LavenderBlush => new Color(255, 240, 245);\n        public static Color Linen => new Color(250, 240, 230);\n        public static Color PaleTurquoise => new Color(175, 238, 238);\n        public static Color OldLace => new Color(253, 245, 230);\n        public static Color Bisque => new Color(255, 228, 196);\n\n\n        public byte R { get; }\n        public byte G { get; }\n        public byte B { get; }\n        public byte A { get; }\n\n        private string _name;\n        public string Name\n        {\n            get\n            {\n                if (_name != null)\n                {\n                    return _name;\n                }\n\n                _name = GetColorName(ToSkColor());\n                return _name;\n            }\n        }\n\n        private static string GetColorName(SKColor color)\n        {\n            // Get all public static properties of the SKColors class\n            var properties = typeof(SKColors).GetFields(BindingFlags.Public | BindingFlags.Static);\n\n            foreach (var property in properties)\n            {\n                // Get the value of the property (which is an SKColor)\n                if (property.GetValue(null) is SKColor skColor)\n                {\n                    // Compare the RGBA values\n                    if (skColor.Red == color.Red &&\n                        skColor.Green == color.Green &&\n                        skColor.Blue == color.Blue &&\n                        skColor.Alpha == color.Alpha)\n                    {\n                        return property.Name; // Return the name of the matching color\n                    }\n                }\n            }\n\n            return string.Empty; // No match found\n        }\n\n\n        public bool IsEmpty => R == 0 && G == 0 && B == 0 && A == 0;\n\n\n        public Color(int r, int g, int b, int a = 255)\n        {\n            R = (byte)r;\n            G = (byte)g;\n            B = (byte)b;\n            A = (byte)a;\n            _name = GetColorName(ToSkColor());\n        }\n\n        public Color(byte r, byte g, byte b, byte a = 255)\n        {\n            R = r;\n            G = g;\n            B = b;\n            A = a;\n            _name = GetColorName(ToSkColor());\n        }\n\n        public static Color FromRgb(int a, int r, int g, int b)\n        {\n            return new Color(r, g, b, a);\n        }\n\n        public static Color FromArgb(int a, int r, int g, int b)\n        {\n            return new Color(r, g, b, a);\n        }\n\n        public static Color FromName(string name)\n        {\n            switch (name.ToLower())\n            {\n                case \"black\": return Black;\n                case \"white\": return White;\n                case \"red\": return Red;\n                case \"green\": return Green;\n                case \"blue\": return Blue;\n                case \"yellow\": return Yellow;\n                case \"cyan\": return Cyan;\n                case \"magenta\": return Magenta;\n                case \"transparent\": return Transparent;\n                case \"orange\": return Orange;\n                case \"purple\": return Purple;\n                case \"brown\": return Brown;\n                case \"pink\": return Pink;\n                case \"lime\": return Lime;\n                case \"gray\": return Gray;\n                case \"navy\": return Navy;\n                case \"olive\": return Olive;\n                case \"teal\": return Teal;\n                case \"silver\": return Silver;\n                case \"maroon\": return Maroon;\n                case \"chocolate\": return Chocolate;\n                case \"indianred\": return IndianRed;\n                case \"peru\": return Peru;\n                case \"burlywood\": return BurlyWood;\n                case \"antiquewhite\": return AntiqueWhite;\n                case \"floralwhite\": return FloralWhite;\n                case \"ivory\": return Ivory;\n                case \"lightcoral\": return LightCoral;\n                case \"darksalmon\": return DarkSalmon;\n                case \"lightsalmon\": return LightSalmon;\n                case \"peachpuff\": return PeachPuff;\n                case \"navajowhite\": return NavajoWhite;\n                case \"moccasin\": return Moccasin;\n                case \"papayawhip\": return PapayaWhip;\n                case \"goldenrod\": return Goldenrod;\n                case \"darkgoldenrod\": return DarkGoldenrod;\n                case \"darkkhaki\": return DarkKhaki;\n                case \"khaki\": return Khaki;\n                case \"beige\": return Beige;\n                case \"cornsilk\": return Cornsilk;\n                case \"deepskyblue\": return DeepSkyBlue;\n                case \"gold\": return Gold;\n                case \"slategray\": return SlateGray;\n                case \"darkgray\": return DarkGray;\n                case \"lightgray\": return LightGray;\n                case \"darkslategray\": return DarkSlateGray;\n                case \"dimgray\": return DimGray;\n                case \"lightslategray\": return LightSlateGray;\n                case \"gainsboro\": return Gainsboro;\n                case \"lightblue\": return LightBlue;\n                case \"lightcyan\": return LightCyan;\n                case \"lightgoldenrodyellow\": return LightGoldenrodYellow;\n                case \"lightgreen\": return LightGreen;\n                case \"lightpink\": return LightPink;\n                case \"lightseagreen\": return LightSeaGreen;\n                case \"lightskyblue\": return LightSkyBlue;\n                case \"lightsteelblue\": return LightSteelBlue;\n                case \"lightyellow\": return LightYellow;\n                case \"cadetblue\": return CadetBlue;\n                case \"mediumturquoise\": return MediumTurquoise;\n                case \"aquamarine\": return Aquamarine;\n                case \"azure\": return Azure;\n                case \"aliceblue\": return AliceBlue;\n                case \"mintcream\": return MintCream;\n                case \"darkseagreen\": return DarkSeaGreen;\n                case \"palegreen\": return PaleGreen;\n                case \"mediumpurple\": return MediumPurple;\n                case \"cornflowerblue\": return CornflowerBlue;\n                case \"lavender\": return Lavender;\n                case \"ghostwhite\": return GhostWhite;\n                case \"palegoldenrod\": return PaleGoldenrod;\n                case \"lemonchiffon\": return LemonChiffon;\n                case \"orchid\": return Orchid;\n                case \"plum\": return Plum;\n                case \"lavenderblush\": return LavenderBlush;\n                case \"linen\": return Linen;\n                case \"paleturquoise\": return PaleTurquoise;\n                case \"oldlace\": return OldLace;\n                case \"bisque\": return Bisque;\n                default: throw new ArgumentException($\"Unknown color name: {name}\");\n            }\n        }\n\n        // Convert to SkiaSharp's SKColor\n        public SKColor ToSkColor()\n        {\n            return new SKColor((byte)R, (byte)G, (byte)B, (byte)A);\n        }\n\n#if !DRAWINGCOMPAT\n        public static implicit operator System.Drawing.Color(Color p)\n        {\n            return System.Drawing.Color.FromArgb(p.A, p.R, p.G, p.B);\n        }\n#endif\n    }\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/ColorTranslator.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Drawing\n{\n    public class ColorTranslator\n    {\n        public ColorTranslator() { }\n\n        public static Color FromHtml(string html)\n        {\n            if (string.IsNullOrEmpty(html))\n                throw new ArgumentException(\"Invalid HTML color code\", nameof(html));\n\n            if (html[0] == '#')\n            {\n                html = html.Substring(1);\n            }\n\n            try\n            {\n                if (html.Length == 3)\n                {\n                    return new Color(\n                        Convert.ToInt32(new string(html[0], 2), 16),\n                        Convert.ToInt32(new string(html[1], 2), 16),\n                        Convert.ToInt32(new string(html[2], 2), 16)\n                    );\n                }\n                else if (html.Length == 4)\n                {\n                    return new Color(\n                        Convert.ToInt32(new string(html[0], 2), 16),\n                        Convert.ToInt32(new string(html[1], 2), 16),\n                        Convert.ToInt32(new string(html[2], 2), 16),\n                        Convert.ToInt32(new string(html[3], 2), 16)\n                    );\n                }\n                else if (html.Length == 5)\n                {\n                    return new Color(\n                        Convert.ToInt32(html.Substring(0, 2), 16),\n                        Convert.ToInt32(html.Substring(1, 2), 16),\n                        Convert.ToInt32(html.Substring(3, 2), 16),\n                        Convert.ToInt32(html.Substring(4, 2), 16)\n                    );\n                }\n                else if (html.Length == 6)\n                {\n                    return new Color(\n                        Convert.ToInt32(html.Substring(0, 2), 16),\n                        Convert.ToInt32(html.Substring(2, 2), 16),\n                        Convert.ToInt32(html.Substring(4, 2), 16)\n                    );\n                }\n                else if (html.Length == 8)\n                {\n                    return new Color(\n                        Convert.ToInt32(html.Substring(0, 2), 16),\n                        Convert.ToInt32(html.Substring(2, 2), 16),\n                        Convert.ToInt32(html.Substring(4, 2), 16),\n                        Convert.ToInt32(html.Substring(6, 2), 16)\n                    );\n                }\n            }\n            catch (FormatException)\n            {\n            }\n\n            return Color.FromName(html);\n        }\n    }\n}"
  },
  {
    "path": "Majorsilence.Drawing.Common/Drawing2D/CompositingQuality.cs",
    "content": "﻿namespace Majorsilence.Drawing.Drawing2D\n{\n    public enum CompositingQuality\n    {\n        Invalid = -1,\n        Default = 0,\n        HighSpeed = 1,\n        HighQuality = 2,\n        GammaCorrected = 3,\n        AssumedLinear = 4\n    }\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Drawing2D/DashStyle.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Drawing.Drawing2D\n{\n    public enum DashStyle\n    {\n        Solid = 0,\n        Dash = 1,\n        Dot = 2,\n        DashDot = 3,\n        DashDotDot = 4,\n        Custom = 5\n    }\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Drawing2D/GraphicsPath.cs",
    "content": "﻿using SkiaSharp;\n\n\nnamespace Majorsilence.Drawing.Drawing2D\n{\n    public class GraphicsPath\n    {\n        private SKPath _path;\n\n        public GraphicsPath()\n        {\n            _path = new SKPath();\n        }\n\n        public void AddLine(float x1, float y1, float x2, float y2)\n        {\n            _path.MoveTo(x1, y1);\n            _path.LineTo(x2, y2);\n        }\n\n        public void AddRectangle(float x, float y, float width, float height)\n        {\n            _path.AddRect(new SKRect(x, y, x + width, y + height));\n        }\n\n        public SKPath ToSKPath() => _path;\n    }\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Drawing2D/GraphicsState.cs",
    "content": "﻿using SkiaSharp;\n\n\nnamespace Majorsilence.Drawing.Drawing2D\n{\n    public class GraphicsState\n    {\n        internal SKCanvas SaveLayer { get; }\n\n        internal GraphicsState(SKCanvas canvas)\n        {\n            SaveLayer = canvas;\n        }\n    }\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Drawing2D/HatchBrush.cs",
    "content": "﻿using SkiaSharp;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Drawing.Drawing2D\n{\n    public sealed class HatchBrush : Brush\n    {\n        private readonly HatchStyle _hatchStyle;\n        public readonly Color ForegroundColor;\n        private readonly Color _backColor;\n\n        public HatchBrush(HatchStyle hatchStyle, Color foreColor, Color backColor)\n            : base(foreColor)\n        {\n            _hatchStyle = hatchStyle;\n            ForegroundColor = foreColor;\n            _backColor = backColor;\n        }\n\n        internal new SKPaint ToSkPaint()\n        {\n            var paint = base.ToSkPaint();\n            paint.Style = SKPaintStyle.Fill;\n            paint.Shader = CreateTwoColorHatchShader(_hatchStyle, ForegroundColor.ToSkColor(), _backColor.ToSkColor());\n            return paint;\n        }\n\n        private SKShader CreateTwoColorHatchShader(HatchStyle hatchStyle, SKColor foreColor, SKColor backColor)\n        {\n            // Implement the logic to create a two-color hatch shader based on the hatch style\n            // This is a placeholder implementation and should be replaced with actual logic\n            return SKShader.CreateLinearGradient(\n                new SKPoint(0, 0),\n                new SKPoint(10, 10),\n                new SKColor[] { foreColor, backColor },\n                new float[] { 0, 1 },\n                SKShaderTileMode.Repeat);\n        }\n    }\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Drawing2D/HatchStyle.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Drawing.Drawing2D\n{\n    public enum HatchStyle\n    {\n        Horizontal,\n        Vertical,\n        ForwardDiagonal,\n        BackwardDiagonal,\n        Cross,\n        DiagonalCross,\n        Percent05,\n        Percent10,\n        Percent20,\n        Percent25,\n        Percent30,\n        Percent40,\n        Percent50,\n        Percent60,\n        Percent70,\n        Percent75,\n        Percent80,\n        Percent90,\n        LightDownwardDiagonal,\n        LightUpwardDiagonal,\n        DarkDownwardDiagonal,\n        DarkUpwardDiagonal,\n        WideDownwardDiagonal,\n        WideUpwardDiagonal,\n        LightVertical,\n        LightHorizontal,\n        NarrowVertical,\n        NarrowHorizontal,\n        DarkVertical,\n        DarkHorizontal,\n        DashedDownwardDiagonal,\n        DashedUpwardDiagonal,\n        DashedHorizontal,\n        DashedVertical,\n        SmallConfetti,\n        LargeConfetti,\n        ZigZag,\n        Wave,\n        DiagonalBrick,\n        HorizontalBrick,\n        Weave,\n        Plaid,\n        Divot,\n        DottedGrid,\n        DottedDiamond,\n        Shingle,\n        Trellis,\n        Sphere,\n        SmallGrid,\n        SmallCheckerBoard,\n        LargeCheckerBoard,\n        OutlinedDiamond,\n        SolidDiamond\n    }\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Drawing2D/InterpolationMode.cs",
    "content": "﻿namespace Majorsilence.Drawing.Drawing2D\n{\n    public enum InterpolationMode\n    {\n        Invalid = -1,\n        Default = 0,\n        Low = 1,\n        High = 2,\n        Bilinear = 3,\n        Bicubic = 4,\n        NearestNeighbor = 5,\n        HighQualityBilinear = 6,\n        HighQualityBicubic = 7\n    }\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Drawing2D/LineCap.cs",
    "content": "﻿namespace Majorsilence.Drawing.Drawing2D\n{\n    public enum LineCap\n    {\n        Flat,\n        Square,\n        Round\n    }\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Drawing2D/LineJoin.cs",
    "content": "﻿namespace Majorsilence.Drawing.Drawing2D\n{\n    public enum LineJoin\n    {\n        Miter,\n        Round,\n        Bevel\n    }\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Drawing2D/LinearGradientBrush.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Drawing.Drawing2D\n{\n\n    public sealed class LinearGradientBrush : Brush\n    {\n        public LinearGradientBrush(Color color) : base(color)\n        {\n        }\n\n        public LinearGradientBrush(Color color1, Color color2, float angle) : base(color1)\n        {\n            throw new NotImplementedException();\n        }\n\n        public LinearGradientBrush(Rectangle rect, Color color1, Color color2, LinearGradientMode mode) : base(color1)\n        {\n            // Implementation for initializing with rectangle, two colors, and gradient mode\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Drawing2D/LinearGradientMode.cs",
    "content": "﻿namespace Majorsilence.Drawing.Drawing2D\n{\n    public enum LinearGradientMode\n    {\n        Horizontal,\n        Vertical,\n        ForwardDiagonal,\n        BackwardDiagonal\n    }\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Drawing2D/Matrix.cs",
    "content": "﻿using SkiaSharp;\n\n\nnamespace Majorsilence.Drawing.Drawing2D\n{\n    public class Matrix\n    {\n        private SKMatrix _matrix;\n\n        public Matrix()\n        {\n            _matrix = SKMatrix.CreateIdentity();\n        }\n\n        public void Translate(float dx, float dy)\n        {\n            _matrix = SKMatrix.Concat(_matrix, SKMatrix.CreateTranslation(dx, dy));\n        }\n\n        public void Scale(float scaleX, float scaleY)\n        {\n            _matrix = SKMatrix.Concat(_matrix, SKMatrix.CreateScale(scaleX, scaleY));\n        }\n\n        public void Rotate(float angle)\n        {\n            _matrix = SKMatrix.Concat(_matrix, SKMatrix.CreateRotationDegrees(angle));\n        }\n\n        public SKMatrix ToSKMatrix() => _matrix;\n    }\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Drawing2D/PixelOffsetMode.cs",
    "content": "﻿namespace Majorsilence.Drawing.Drawing2D\n{\n    public enum PixelOffsetMode\n    {\n        Invalid = -1,\n        Default = 0,\n        HighSpeed = 1,\n        HighQuality = 2,\n        None = 3,\n        Half = 4\n    }\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Drawing2D/SmoothingMode.cs",
    "content": "﻿namespace Majorsilence.Drawing.Drawing2D\n{\n    public enum SmoothingMode\n    {\n        Invalid = -1,\n        Default = 0,\n        HighSpeed = 1,\n        HighQuality = 2,\n        None = 3,\n        AntiAlias = 4\n    }\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Font.cs",
    "content": "﻿using SkiaSharp;\n\n\nnamespace Majorsilence.Drawing\n{\n    // Compatibility wrapper for System.Drawing.Font\n    public class Font : IDisposable\n    {\n        private static readonly Dictionary<(string, SKFontStyle), SKTypeface> TypefaceCache = new();\n        private SKTypeface _typeface;\n        private SKFont _paint;\n\n        // Properties for Family, Size, Style\n        public string FontFamily { get; }\n        public float Size { get; }\n        public FontStyle Style { get; }\n\n        public Font(string fontFamily, float size)\n            : this(fontFamily, size, FontStyle.Regular)\n        {\n        }\n\n        // Constructor to initialize the Font with family, size, and style\n        public Font(string fontFamily, float size, FontStyle style)\n        {\n            FontFamily = fontFamily;\n            Size = size;\n            Style = style;\n\n            // Determine SkiaSharp style flags based on FontStyle\n\n            var typefaceStyle = SKFontStyle.Normal;\n            if ((style & FontStyle.Bold) != 0 && (style & FontStyle.Italic) != 0)\n                typefaceStyle = SKFontStyle.BoldItalic;\n            else if ((style & FontStyle.Bold) != 0)\n                typefaceStyle = SKFontStyle.Bold;\n            else if ((style & FontStyle.Italic) != 0)\n                typefaceStyle = SKFontStyle.Italic;\n\n            // Create the SkiaSharp Typeface based on the family and style\n            var cacheKey = (fontFamily, typefaceStyle);\n            if (!TypefaceCache.TryGetValue(cacheKey, out _typeface))\n            {\n                _typeface = SKTypeface.FromFamilyName(fontFamily, typefaceStyle);\n                TypefaceCache[cacheKey] = _typeface;\n            }\n            else\n            {\n                _typeface = TypefaceCache[cacheKey];\n            }\n            \n            // Initialize the SKFont for text rendering\n            _paint = new SKFont(_typeface, size);\n\n        }\n\n        public Font(Drawing.FontFamily fontFamily, float size, FontStyle style)\n            : this(fontFamily.Name, size, style)\n        {\n        }\n\n        public double GetHeight(Graphics g)\n        {\n            if (g == null)\n            {\n                throw new ArgumentNullException(nameof(g));\n            }\n\n            // Measure the height of a sample text to determine the font height\n            using (var paint = new SKFont(_typeface, Size))\n            {\n                var metrics = paint.Metrics;\n                return Math.Ceiling(metrics.Descent - metrics.Ascent);\n            }\n        }\n\n        // Property to get SKPaint (useful for drawing text)\n        public SKFont ToSkFont()\n        {\n            return _paint;\n        }\n\n        // Dispose method to release resources\n        public void Dispose()\n        {\n            _paint?.Dispose();\n            _typeface?.Dispose();\n        }\n\n        // Override ToString to show font details\n        public override string ToString()\n        {\n            return $\"{FontFamily} {Size}pt {Style}\";\n        }\n\n    }\n\n}"
  },
  {
    "path": "Majorsilence.Drawing.Common/FontFamily.cs",
    "content": "﻿namespace Majorsilence.Drawing\n{\n    public class FontFamily\n    {\n        public static FontFamily GenericMonospace { get; } = new FontFamily(\"monospace\");\n        public static FontFamily GenericSansSerif { get; } = new FontFamily(\"sans-serif\");\n        public static FontFamily GenericSerif { get; } = new FontFamily(\"serif\");\n        public string Name { get; }\n        public FontFamily(string name)\n        {\n            Name = name;\n        }\n\n        public float GetCellDescent(FontStyle fs)\n        {\n            // Placeholder implementation, replace with actual logic\n            switch (fs)\n            {\n                case FontStyle.Bold:\n                    return 2.0f;\n                case FontStyle.Italic:\n                    return 1.5f;\n                case FontStyle.Underline:\n                    return 1.0f;\n                case FontStyle.Strikeout:\n                    return 0.5f;\n                default:\n                    return 1.0f;\n            }\n        }\n\n        public float GetEmHeight(FontStyle fs)\n        {\n            // Placeholder implementation, replace with actual logic\n            switch (fs)\n            {\n                case FontStyle.Bold:\n                    return 16.0f;\n                case FontStyle.Italic:\n                    return 14.0f;\n                case FontStyle.Underline:\n                    return 12.0f;\n                case FontStyle.Strikeout:\n                    return 10.0f;\n                default:\n                    return 12.0f;\n            }\n        }\n\n        public override string ToString()\n        {\n            return Name;\n        }\n\n    }\n\n}"
  },
  {
    "path": "Majorsilence.Drawing.Common/FontStyle.cs",
    "content": "﻿using System;\nusing System.Drawing.Imaging;\nusing System.IO;\n\n\nnamespace Majorsilence.Drawing\n{\n\n    // Enum for FontStyle (simulating System.Drawing.FontStyle)\n    [Flags]\n    public enum FontStyle\n    {\n        Regular = 0,\n        Bold = 1,\n        Italic = 2,\n        Underline = 4,\n        Strikeout = 8\n    }\n\n\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Graphics.cs",
    "content": "﻿using System.Drawing;\nusing System.Security.Cryptography;\nusing SkiaSharp;\n\n\nnamespace Majorsilence.Drawing\n{\n    // Compatibility wrapper for Graphics\n    public class Graphics : IDisposable\n    {\n        private SKCanvas _canvas;\n\n        public Text.TextRenderingHint TextRenderingHint { get; set; }\n        public Drawing.Drawing2D.InterpolationMode InterpolationMode { get; set; }\n        public Drawing.Drawing2D.SmoothingMode SmoothingMode { get; set; }\n        public Drawing.Drawing2D.PixelOffsetMode PixelOffsetMode { get; set; }\n        public Drawing.Drawing2D.CompositingQuality CompositingQuality { get; set; }\n        public Drawing.GraphicsUnit PageUnit { get; set; }\n        public float DpiX { get; set; } = 96;\n        public float DpiY { get; set; } = 96;\n        public Drawing.Drawing2D.Matrix Transform { get; set; }\n\n        public Graphics(SKCanvas canvas)\n        {\n            _canvas = canvas;\n        }\n\n        // Clear method\n\n        // Draw rectangle method\n        public void DrawRectangle(Pen pen, Rectangle rectangle)\n        {\n            _canvas.DrawRect(new SKRect(rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height), pen.ToSkPaint());\n        }\n\n        public void FillRectangle(Brush brush, Rectangle rectangle)\n        {\n            _canvas.DrawRect(new SKRect(rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height), brush.ToSkPaint());\n        }\n\n        public void FillRectangle(Brush brush, int x, int y, int width, int height)\n        {\n            _canvas.DrawRect(new SKRect(x, y, x + width, y + height), brush.ToSkPaint());\n        }\n\n        public void FillRectangle(Brush brush, float x, float y, float width, float height)\n        {\n            _canvas.DrawRect(new SKRect(x, y, x + width, y + height), brush.ToSkPaint());\n        }\n\n        public void DrawImage(Image image, Rectangle rect)\n        {\n            if (image?.SkiaBitmap != null)\n            {\n                var srcRect = new SKRect(0, 0, image.SkiaBitmap.Width, image.SkiaBitmap.Height);\n                var destRect = new SKRect(rect.X, rect.Y, rect.X + rect.Width, rect.Y + rect.Height);\n                _canvas.DrawBitmap(image.SkiaBitmap, srcRect, destRect);\n            }\n        }\n\n        public void DrawImage(Bitmap bitmap, Rectangle rect)\n        {\n            DrawImage((Image)bitmap, rect);\n        }\n\n        public void FillEllipse(Brush brush, int x, int y, int width, int height)\n        {\n            _canvas.DrawOval(new SKRect(x, y, x + width, y + height), brush.ToSkPaint());\n        }\n        public void FillEllipse(Brush brush, Point point)\n        {\n            _canvas.DrawOval(new SKRect(point.X, point.Y, point.X + 1, point.Y + 1), brush.ToSkPaint());\n        }\n\n        public void FillEllipse(Brush brush, Rectangle r)\n        {\n            _canvas.DrawOval(new SKRect(r.X, r.Y, r.X + 1, r.Y + 1), brush.ToSkPaint());\n        }\n\n        public void FillPolygon(Brush b, PointF[] points)\n        {\n            if (points == null || points.Length < 3)\n            {\n                throw new ArgumentException(\"Polygon must have at least 3 points\", nameof(points));\n            }\n\n            var skPoints = points.Select(p => new SKPoint(p.X, p.Y)).ToArray();\n            using (var path = new SKPath())\n            {\n                path.AddPoly(skPoints, true);\n                _canvas.DrawPath(path, b.ToSkPaint());\n            }\n        }\n\n        public void DrawEllipse(Pen pen, Point p)\n        {\n            _canvas.DrawOval(new SKRect(p.X, p.Y, p.X + 1, p.Y + 1), pen.ToSkPaint());\n        }\n\n        public void DrawEllipse(Pen pen, Rectangle r)\n        {\n            _canvas.DrawOval(new SKRect(r.X, r.Y, r.X + 1, r.Y + 1), pen.ToSkPaint());\n        }\n\n        public void DrawPolygon(Pen pen, PointF[] points)\n        {\n            if (points == null || points.Length < 3)\n            {\n                throw new ArgumentException(\"Polygon must have at least 3 points\", nameof(points));\n            }\n            var skPoints = points.Select(p => new SKPoint(p.X, p.Y)).ToArray();\n            using (var path = new SKPath())\n            {\n                path.AddPoly(skPoints, true);\n                _canvas.DrawPath(path, pen.ToSkPaint());\n            }\n        }\n\n        public void DrawRectangle(Pen pen, int x, int y, int width, int height)\n        {\n            _canvas.DrawRect(new SKRect(x, y, x + width, y + height), pen.ToSkPaint());\n        }\n\n        public void DrawCurve(Pen pen, Point[] points, float tension)\n        {\n            if (points == null || points.Length < 2)\n            {\n                throw new ArgumentException(\"At least two points are required to draw a curve\", nameof(points));\n            }\n\n            var skPoints = points.Select(p => new SKPoint(p.X, p.Y)).ToArray();\n            using (var path = new SKPath())\n            {\n                path.MoveTo(skPoints[0]);\n                for (int i = 1; i < skPoints.Length - 1; i++)\n                {\n                    var p0 = skPoints[i - 1];\n                    var p1 = skPoints[i];\n                    var p2 = skPoints[i + 1];\n\n                    var controlPoint1 = new SKPoint(p0.X + (p1.X - p0.X) * tension, p0.Y + (p1.Y - p0.Y) * tension);\n                    var controlPoint2 = new SKPoint(p1.X - (p2.X - p0.X) * tension, p1.Y - (p2.Y - p0.Y) * tension);\n\n                    path.CubicTo(controlPoint1, controlPoint2, p1);\n                }\n                path.LineTo(skPoints.Last());\n                _canvas.DrawPath(path, pen.ToSkPaint());\n            }\n        }\n\n        public void FillPie(Brush brush, Rectangle r, float startAngle, float endAngle)\n        {\n            using (var path = new SKPath())\n            {\n                path.MoveTo(r.X + r.Width / 2, r.Y + r.Height / 2);\n                path.ArcTo(new SKRect(r.X, r.Y, r.X + r.Width, r.Y + r.Height), startAngle, endAngle - startAngle, false);\n                path.Close();\n                _canvas.DrawPath(path, brush.ToSkPaint());\n            }\n        }\n\n        public void DrawPie(Pen p, Rectangle r, float startAngle, float endAngle)\n        {\n            using (var path = new SKPath())\n            {\n                path.MoveTo(r.X + r.Width / 2, r.Y + r.Height / 2);\n                path.ArcTo(new SKRect(r.X, r.Y, r.X + r.Width, r.Y + r.Height), startAngle, endAngle - startAngle, false);\n                path.Close();\n                _canvas.DrawPath(path, p.ToSkPaint());\n            }\n        }\n\n        public void DrawLines(Pen p, Point[] points)\n        {\n            if (points == null || points.Length < 2)\n            {\n                throw new ArgumentException(\"At least two points are required to draw lines\", nameof(points));\n            }\n            var skPoints = points.Select(p => new SKPoint(p.X, p.Y)).ToArray();\n            _canvas.DrawPoints(SKPointMode.Lines, skPoints, p.ToSkPaint());\n        }\n\n        // Draw line method\n        public void DrawLine(Pen pen, Point pt1, Point pt2)\n        {\n            _canvas.DrawLine(pt1.X, pt1.Y, pt2.X, pt2.Y, pen.ToSkPaint());\n        }\n\n        // Draw string method (you would also need to implement font compatibility here)\n        public void DrawString(string s, Font font, Brush brush, PointF point)\n        {\n            var skPaint = brush.ToSkPaint();\n            _canvas.DrawText(s, point.X, point.Y, font.ToSkFont(), skPaint);\n        }\n\n        public void DrawString(string s, Font font, Brush brush, Rectangle layoutRectangle, StringFormat format)\n        {\n            var skFont = font.ToSkFont();\n            var skPaint = brush.ToSkPaint();\n            float lineHeight = skFont.Metrics.Descent - skFont.Metrics.Ascent + skFont.Metrics.Leading;\n            float x = layoutRectangle.X;\n            float y = layoutRectangle.Y;\n            float maxWidth = layoutRectangle.Width;\n\n            var lines = s.Replace(\"\\r\\n\", \"\\n\").Split('\\n');\n            foreach (var line in lines)\n            {\n                var words = line.Split(' ');\n                string currentLine = \"\";\n                foreach (var word in words)\n                {\n                    string testLine = string.IsNullOrEmpty(currentLine) ? word : currentLine + \" \" + word;\n                    var bounds = new SKRect();\n                    skFont.MeasureText(testLine, out bounds);\n\n                    if (maxWidth > 0 && bounds.Width > maxWidth)\n                    {\n                        // Draw currentLine\n                        if (!string.IsNullOrEmpty(currentLine))\n                        {\n                            float drawX = x;\n                            if (format.Alignment == StringAlignment.Center)\n                                drawX += (maxWidth - bounds.Width) / 2;\n                            else if (format.Alignment == StringAlignment.Far)\n                                drawX += maxWidth - bounds.Width;\n\n                            _canvas.DrawText(currentLine, drawX, y - skFont.Metrics.Ascent, skFont, skPaint);\n                            y += lineHeight;\n                        }\n                        currentLine = word;\n                    }\n                    else\n                    {\n                        currentLine = testLine;\n                    }\n                }\n                // Draw last line in this paragraph\n                if (!string.IsNullOrEmpty(currentLine))\n                {\n                    var bounds = new SKRect();\n                    skFont.MeasureText(currentLine, out bounds);\n                    float drawX = x;\n                    if (format.Alignment == StringAlignment.Center)\n                        drawX += (maxWidth - bounds.Width) / 2;\n                    else if (format.Alignment == StringAlignment.Far)\n                        drawX += maxWidth - bounds.Width;\n\n                    _canvas.DrawText(currentLine, drawX, y - skFont.Metrics.Ascent, skFont, skPaint);\n                    y += lineHeight;\n                }\n            }\n        }\n\n        // Overloaded DrawString for RectangleF\n        public void DrawString(string s, Font font, Brush brush, RectangleF layoutRectangle, StringFormat format)\n        {\n            DrawString(s, font, brush, new Rectangle(\n                (int)layoutRectangle.X, (int)layoutRectangle.Y,\n                (int)layoutRectangle.Width, (int)layoutRectangle.Height), format);\n        }\n\n        // Dispose of the graphics object\n        public void Dispose()\n        {\n            _canvas?.Dispose();\n        }\n\n        public Drawing2D.GraphicsState Save()\n        {\n            var state = new Drawing2D.GraphicsState(_canvas);\n            _canvas.Save();\n            return state;\n        }\n\n        public SizeF MeasureString(string text, Font font)\n        {\n            return MeasureString(text, font, 0, StringFormat.GenericTypographic);\n        }\n\n        public SizeF MeasureString(string text, Font font, SizeF layoutArea, StringFormat stringFormat)\n        {\n            return MeasureString(text, font, (int)layoutArea.Width, stringFormat);\n        }\n\n        public SizeF MeasureString(string text, Font font, int maxWidth, StringFormat stringFormat)\n        {\n            var skFont = font.ToSkFont();\n            var lineHeightAdjustment = 1.1f;\n            float lineHeight = (skFont.Metrics.Descent - skFont.Metrics.Ascent + skFont.Metrics.Leading) * lineHeightAdjustment;\n            float maxLineWidth = 0f;\n            float totalHeight = 0f;\n\n            if (string.IsNullOrEmpty(text))\n                return new SizeF(0, lineHeight);\n\n            var lines = text.Replace(\"\\r\\n\", \"\\n\").Split('\\n');\n            foreach (var line in lines)\n            {\n                var words = line.Split(' ');\n                string currentLine = \"\";\n                foreach (var word in words)\n                {\n                    string testLine = string.IsNullOrEmpty(currentLine) ? word : currentLine + \" \" + word;\n                    var bounds = new SKRect();\n                    skFont.MeasureText(testLine, out bounds);\n\n                    if (maxWidth > 0 && bounds.Width > maxWidth)\n                    {\n                        // Commit currentLine, start new line\n                        if (!string.IsNullOrEmpty(currentLine))\n                        {\n                            var currentBounds = new SKRect();\n                            skFont.MeasureText(currentLine, out currentBounds);\n                            maxLineWidth = Math.Max(maxLineWidth, currentBounds.Width);\n                            totalHeight += lineHeight;\n                            currentLine = word; // Start new line with the current word\n                        }\n                        else\n                        {\n                            // The word itself is longer than maxWidth, commit it as its own line\n                            var wordBounds = new SKRect();\n                            skFont.MeasureText(word, out wordBounds);\n                            maxLineWidth = Math.Max(maxLineWidth, wordBounds.Width);\n                            totalHeight += lineHeight;\n                            currentLine = \"\"; // Start new line\n                        }\n                    }\n                    else\n                    {\n                        currentLine = testLine;\n                    }\n                }\n                // Commit last line in this paragraph (even if it's a single word)\n                if (!string.IsNullOrEmpty(currentLine))\n                {\n                    var currentBounds = new SKRect();\n                    skFont.MeasureText(currentLine, out currentBounds);\n                    maxLineWidth = Math.Max(maxLineWidth, currentBounds.Width);\n                    totalHeight += lineHeight;\n\n                    // If the last line is more than 60% of the maxWidth, add a new blank line of height\n                    if (maxWidth > 0 && currentBounds.Width > 0.6f * maxWidth)\n                    {\n                        totalHeight += lineHeight;\n                    }\n                }\n            }\n\n            // If at least one line, ensure totalHeight is at least one lineHeight\n            if (totalHeight < lineHeight)\n                totalHeight = lineHeight;\n\n            var padding = 1.5f;\n            return new SizeF(maxLineWidth, (totalHeight) * padding);\n        }\n\n        public Region[] MeasureCharacterRanges(string text, Font font, RectangleF layoutRect, StringFormat stringFormat)\n        {\n            var skPaint = font.ToSkFont();\n            var regions = new List<Region>();\n\n            foreach (var range in stringFormat.MeasurableCharacterRanges)\n            {\n                var substring = text.AsSpan(range.First, range.Length);\n                var bounds = new SKRect();\n                skPaint.MeasureText(substring, out bounds);\n\n                var padding = 1.2f;\n                var region = new Region(\n                    (int)(layoutRect.X + bounds.Left),\n                    (int)(layoutRect.Y + bounds.Top),\n                    (int)(bounds.Width + 2 * padding),\n                    (int)(bounds.Height + 2  * padding)\n                );\n\n                regions.Add(region);\n            }\n\n            return regions.ToArray();\n        }\n\n        public void ResetTransform()\n        {\n            // TODO: ?\n        }\n\n        public void AddMetafileComment(byte[] data)\n        {\n            // TODO: ?\n        }\n\n        // Restore the graphics state\n        public void Restore(Drawing2D.GraphicsState state)\n        {\n            _canvas.RestoreToCount(state.SaveLayer.SaveCount);\n        }\n\n        public static Graphics FromImage(Bitmap bm)\n        {\n            return bm.GetGraphics();\n        }\n    }\n}\n\n\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/GraphicsUnit.cs",
    "content": "﻿namespace Majorsilence.Drawing\n{\n    public enum GraphicsUnit\n    {\n        World = 0,\n        Display = 1,\n        Pixel = 2,\n        Point = 3,\n        Inch = 4,\n        Document = 5,\n        Millimeter = 6\n    }\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Image.cs",
    "content": "﻿using Majorsilence.Drawing.Imaging;\nusing SkiaSharp;\n\n\nnamespace Majorsilence.Drawing\n{\n    // Import the SkiaSharp library\n\n    public class Image : IDisposable\n    {\n        protected SKBitmap _skBitmap;\n\n        public int Width => _skBitmap.Width;\n        public int Height => _skBitmap.Height;\n        \n        /// <summary>\n        /// Gets the underlying SkiaSharp bitmap\n        /// </summary>\n        public SKBitmap? SkiaBitmap => _skBitmap;\n\n        public Image(SKBitmap bitmap)\n        {\n            _skBitmap = bitmap;\n        }\n\n        public Image(int width, int height)\n        {\n            _skBitmap = new SKBitmap(width, height);\n        }\n\n        // Constructor for loading an image from a file\n        public Image(string filename)\n        {\n            using (var stream = new FileStream(filename, FileMode.Open, FileAccess.Read))\n            {\n                _skBitmap = SKBitmap.Decode(stream);\n            }\n        }\n\n        public Image(MemoryStream ms)\n        {\n            ms.Position = 0;\n            _skBitmap = SKBitmap.Decode(ms);\n        }\n        \n        public static Image FromFile(string path)\n        {\n            var bitmap = SKBitmap.Decode(path);\n            if (bitmap == null)\n            {\n                throw new FileNotFoundException(\"The image file could not be found or loaded.\", path);\n            }\n            return new Image(bitmap);\n        }\n\n        public void Save(string path, ImageFormat format)\n        {\n            var skFormat = GetSkFormat(format);\n\n            using var image = SKImage.FromBitmap(_skBitmap);\n            using var data = image.Encode(skFormat, 100);\n            using var stream = File.OpenWrite(path);\n            data.SaveTo(stream);\n        }\n\n        public void Save(Stream stream, ImageFormat format)\n        {\n            var skFormat = GetSkFormat(format);\n            using var image = SKImage.FromBitmap(_skBitmap);\n            using var data = image.Encode(skFormat, 100);\n            data.SaveTo(stream);\n        }\n\n        public void Save(Stream stream, ImageFormat format, int quality)\n        {\n            var skFormat = GetSkFormat(format);\n            using var image = SKImage.FromBitmap(_skBitmap);\n            using var data = image.Encode(skFormat, quality);\n            data.SaveTo(stream);\n        }\n\n        public void Save(Stream stream, ImageCodecInfo codec, EncoderParameters encoderParams)\n        {\n            var skFormat = GetSkFormat(codec.Format);\n            using var image = SKImage.FromBitmap(_skBitmap);\n            using var data = image.Encode(skFormat, 100);\n            data.SaveTo(stream);\n        }\n\n        private SKEncodedImageFormat GetSkFormat(ImageFormat format)\n        {\n            SKEncodedImageFormat skFormat;\n            switch (format)\n            {\n                case ImageFormat.Jpeg:\n                    skFormat = SKEncodedImageFormat.Jpeg;\n                    break;\n                case ImageFormat.Png:\n                    skFormat = SKEncodedImageFormat.Png;\n                    break;\n                case ImageFormat.Gif:\n                    skFormat = SKEncodedImageFormat.Gif;\n                    break;\n                case ImageFormat.Bmp:\n                    skFormat = SKEncodedImageFormat.Bmp;\n                    break;\n                case ImageFormat.Tiff:\n                    throw new NotSupportedException(\"TIFF format is not supported.\");\n                default:\n                    throw new ArgumentException(\"Unsupported image format.\", nameof(format));\n            }\n            return skFormat;\n        }\n\n        public static Image FromStream(Stream stream)\n        {\n            var bitmap = SKBitmap.Decode(stream);\n            if (bitmap == null)\n            {\n                throw new ArgumentException(\"The stream does not contain a valid image.\", nameof(stream));\n            }\n            return new Image(bitmap);\n        }\n\n\n        public static implicit operator SKBitmap(Image i)\n        {\n            return i._skBitmap;\n        }\n\n        public static implicit operator Image(SKBitmap i)\n        {\n            return new Image(i);\n        }\n\n        public void Dispose()\n        {\n           _skBitmap?.Dispose();\n        }\n    }\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Imaging/Encoder.cs",
    "content": "﻿namespace Majorsilence.Drawing.Imaging\n{\n    // Simulates Encoder in System.Drawing.Common\n    public class Encoder\n    {\n        public static readonly Encoder Quality = new Encoder(\"Quality\");\n        public static readonly Encoder Compression = new Encoder(\"Compression\");\n\n        public string ParameterName { get; }\n\n        private Encoder(string parameterName)\n        {\n            ParameterName = parameterName;\n        }\n    }\n\n\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Imaging/EncoderParameter.cs",
    "content": "﻿namespace Majorsilence.Drawing.Imaging\n{\n    // Simulates EncoderParameter in System.Drawing.Common\n    public class EncoderParameter\n    {\n        public Encoder Encoder { get; }\n        public object Value { get; }\n\n        public EncoderParameter(Encoder encoder, object value)\n        {\n            Encoder = encoder ?? throw new ArgumentNullException(nameof(encoder));\n            Value = value ?? throw new ArgumentNullException(nameof(value));\n        }\n    }\n\n\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Imaging/EncoderParameters.cs",
    "content": "﻿namespace Majorsilence.Drawing.Imaging\n{\n    // Simulates EncoderParameters in System.Drawing.Common\n    public class EncoderParameters\n    {\n        private List<EncoderParameter> _parameters;\n\n        // Constructor\n        public EncoderParameters(int count)\n        {\n            _parameters = new List<EncoderParameter>(new EncoderParameter[count]);\n        }\n\n        // Add a parameter to the list\n        public void Add(EncoderParameter parameter)\n        {\n            _parameters.Add(parameter);\n        }\n\n        // Retrieve the list of parameters\n        public List<EncoderParameter> GetParameters() => _parameters;\n\n        // Indexer to access parameters by index\n        public EncoderParameter[] Param\n        {\n            get => _parameters.ToArray();\n            set\n            {\n                if (value.Length != _parameters.Count)\n                    throw new ArgumentException(\"Array length must match the number of parameters.\");\n                _parameters = new List<EncoderParameter>(value);\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Imaging/ImageCodecInfo.cs",
    "content": "﻿namespace Majorsilence.Drawing.Imaging\n{\n    // Simulate ImageCodecInfo (simplified)\n    public class ImageCodecInfo\n    {\n        public Guid Guid { get; set; }\n        #if NET6_0_OR_GREATER\n        public required string MimeType { get; set; }\n        #else\n        public string MimeType { get; set; }\n        #endif\n        \n        public ImageFormat Format { get; set; }\n        public string FormatDescription\n        {\n            get\n            {\n                return Format switch\n                {\n                    ImageFormat.Bmp => \"BMP\",\n                    ImageFormat.Jpeg => \"JPEG\",\n                    ImageFormat.Png => \"PNG\",\n                    ImageFormat.Gif => \"GIF\",\n                    ImageFormat.Tiff => \"TIFF\",\n                    _ => \"Unknown\"\n                };\n            }\n        }\n\n        public static ImageCodecInfo[] GetImageEncoders()\n        {\n            return new[]\n            {\n                    new ImageCodecInfo { MimeType = \"image/bmp\", Format = ImageFormat.Bmp },\n                    new ImageCodecInfo { MimeType = \"image/jpeg\", Format = ImageFormat.Jpeg },\n                    new ImageCodecInfo { MimeType = \"image/png\", Format = ImageFormat.Png },\n                    new ImageCodecInfo { MimeType = \"image/gif\", Format = ImageFormat.Gif },\n                    new ImageCodecInfo { MimeType = \"image/tiff\", Format = ImageFormat.Tiff }\n                };\n        }\n    }\n\n\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Imaging/ImageFormat.cs",
    "content": "﻿namespace Majorsilence.Drawing.Imaging\n{\n    // ImageFormat Compatibility\n    public enum ImageFormat\n    {\n        Bmp,\n        Jpeg,\n        Png,\n        Gif,\n        Tiff\n    }\n\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Imaging/ImageFormatExtensions.cs",
    "content": "﻿using SkiaSharp;\n\n\nnamespace Majorsilence.Drawing.Imaging\n{\n    // Extension method for converting ImageFormat to SkiaSharp's image encode format\n    public static class ImageFormatExtensions\n    {\n        public static SKEncodedImageFormat ToSkImageEncodeFormat(this ImageFormat format)\n        {\n            return format switch\n            {\n                ImageFormat.Jpeg => SKEncodedImageFormat.Jpeg,\n                ImageFormat.Png => SKEncodedImageFormat.Png,\n                ImageFormat.Bmp => SKEncodedImageFormat.Bmp,\n                _ => throw new ArgumentOutOfRangeException()\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Majorsilence.Drawing.Common.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n\t<PropertyGroup>\n\t\t<TargetFrameworks>net48;net8.0;net10.0</TargetFrameworks>\n        <TargetFrameworks Condition=\"'$(OS)' == 'Unix'\">net8.0;net10.0</TargetFrameworks>\n        <ImplicitUsings>enable</ImplicitUsings>\n\t\t<Nullable>enable</Nullable>\n\t\t<Configurations>Debug;Release;Debug-DrawingCompat;Release-DrawingCompat</Configurations>\n\t\t<GeneratePackageOnBuild>True</GeneratePackageOnBuild>\n\t</PropertyGroup>\n\n\t<ItemGroup>\n\t\t<PackageReference Include=\"SkiaSharp\" />\n\t\t<PackageReference Include=\"SkiaSharp.NativeAssets.Linux\" />\n\t</ItemGroup>\n</Project>\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Pen.cs",
    "content": "﻿using Majorsilence.Drawing.Drawing2D;\nusing Majorsilence.Drawing.Imaging;\nusing SkiaSharp;\nusing System.Drawing;\n\n\nnamespace Majorsilence.Drawing\n{\n\n    // Compatibility wrapper for Pen\n    public class Pen : IDisposable\n    {\n        private SKPaint _paint;\n\n        public Pen(Color color)\n        {\n            _paint = new SKPaint\n            {\n                Color = new SKColor((byte)color.R, (byte)color.G, (byte)color.B, (byte)color.A),\n                StrokeWidth = 1,\n                Style = SKPaintStyle.Stroke\n            };\n        }\n\n        public Pen(Brush brush)\n        {\n            // FIXME; what does brush do?\n            _paint = new SKPaint\n            {\n                StrokeWidth = 1,\n                Style = SKPaintStyle.Stroke\n            };\n        }\n\n        public Pen(Color color, float width)\n        {\n            _paint = new SKPaint\n            {\n                Color = new SKColor((byte)color.R, (byte)color.G, (byte)color.B, (byte)color.A),\n                StrokeWidth = width,\n                Style = SKPaintStyle.Stroke\n            };\n        }\n\n        public Pen(Brush brush, float width)\n        {\n            // FIXME; what does brush do?\n            _paint = new SKPaint\n            {\n                StrokeWidth = width,\n                Style = SKPaintStyle.Stroke\n            };\n        }\n        public LineJoin LineJoin { get; set; }\n        public LineCap LineCap { get; set; }\n        public Brush Brush { get; set; }\n        public Drawing2D.DashStyle DashStyle { get; set; }\n\n        public void Dispose()\n        {\n            _paint?.Dispose();\n        }\n\n        // Convert Pen to SKPaint\n        public SKPaint ToSkPaint()\n        {\n            _paint.StrokeJoin = LineJoin switch\n            {\n                LineJoin.Miter => SKStrokeJoin.Miter,\n                LineJoin.Round => SKStrokeJoin.Round,\n                LineJoin.Bevel => SKStrokeJoin.Bevel,\n                _ => _paint.StrokeJoin\n            };\n\n            _paint.StrokeCap = LineCap switch\n            {\n                LineCap.Flat => SKStrokeCap.Butt,\n                LineCap.Square => SKStrokeCap.Square,\n                LineCap.Round => SKStrokeCap.Round,\n                _ => _paint.StrokeCap\n            };\n\n            return _paint;\n        }\n    }\n\n\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Pens.cs",
    "content": "﻿namespace Majorsilence.Drawing\n{\n    public static class Pens\n    {\n        public static Pen Black { get; } = new Pen(Color.Black);\n        public static Pen White { get; } = new Pen(Color.White);\n        public static Pen Red { get; } = new Pen(Color.Red);\n        public static Pen Green { get; } = new Pen(Color.Green);\n        public static Pen Blue { get; } = new Pen(Color.Blue);\n    }\n\n\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Point.cs",
    "content": "﻿using System;\n\nnamespace Majorsilence.Drawing\n{\n    public struct Point : IEquatable<Point>\n    {\n        public int X { get; set; }\n        public int Y { get; set; }\n        public bool IsEmpty => X == 0 && Y == 0;\n\n        public Point(int x, int y)\n        {\n            X = x;\n            Y = y;\n        }\n\n        public override string ToString()\n        {\n            return $\"Point [X={X}, Y={Y}]\";\n        }\n\n        public static implicit operator PointF(Point p)\n        {\n            return new PointF(p.X, p.Y);\n        }\n\n        //#if !DRAWINGCOMPAT\n        public static implicit operator System.Drawing.Point(Point p)\n        {\n            return new System.Drawing.Point(p.X, p.Y);\n        }\n        //#endif\n\n        public static Point Empty => new Point(0, 0);\n\n        public override bool Equals(object? obj)\n        {\n            if (obj is Point point)\n            {\n                return X == point.X && Y == point.Y;\n            }\n\n            return false;\n        }\n\n        public static bool operator ==(Point left, Point right)\n        {\n            return left.Equals(right);\n        }\n\n        public static bool operator !=(Point left, Point right)\n        {\n            return !(left == right);\n        }\n\n        public bool Equals(Point other)\n        {\n            return X == other.X && Y == other.Y;\n        }\n\n#if NET6_0_OR_GREATER\n        public override int GetHashCode()\n        {\n            return HashCode.Combine(X, Y);\n        }\n#endif\n    }\n}"
  },
  {
    "path": "Majorsilence.Drawing.Common/PointF.cs",
    "content": "﻿\nnamespace Majorsilence.Drawing\n{\n    public class PointF\n    {\n        public float X { get; set; }\n        public float Y { get; set; }\n        public PointF() { }\n        public PointF(float x, float y)\n        {\n            X = x;\n            Y = y;\n        }\n        public override string ToString()\n        {\n            return $\"PointF [X={X}, Y={Y}]\";\n        }\n\n        public static implicit operator Point(PointF p)\n        {\n            return new Point((int)p.X, (int)p.Y);\n        }\n\n        //#if !DRAWINGCOMPAT\n        public static implicit operator System.Drawing.PointF(PointF p)\n        {\n            return new System.Drawing.PointF(p.X, p.Y);\n        }\n\n        //#endif\n    }\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Rectangle.cs",
    "content": "﻿\nnamespace Majorsilence.Drawing\n{\n    public struct Rectangle\n    {\n        public int X { get; set; }\n        public int Y { get; set; }\n        public int Width { get; set; }\n        public int Height { get; set; }\n        public int Left => X;\n        public int Top => Y;\n        public int Right => X + Width;\n        public int Bottom => Y + Height;\n        public static Rectangle Empty => new Rectangle(0, 0, 0, 0);\n        public Rectangle(int x, int y, int width, int height)\n        {\n            X = x;\n            Y = y;\n            Width = width;\n            Height = height;\n        }\n\n        public Rectangle(Point p, Size s)\n        {\n            X = p.X;\n            Y = p.Y;\n            Width = s.Width;\n            Height = s.Height;\n        }\n\n        public bool IntersectsWith(Rectangle other)\n        {\n            return !(other.Left > Right ||\n                     other.Right < Left ||\n                     other.Top > Bottom ||\n                     other.Bottom < Top);\n        }\n\n        public override bool Equals(object? obj)\n        {\n            if (obj is Rectangle)\n            {\n                var other = (Rectangle)obj;\n                return X == other.X && Y == other.Y && Width == other.Width && Height == other.Height;\n            }\n            return false;\n        }\n\n        public override int GetHashCode()\n        {\n#if NET8_0\n            return HashCode.Combine(X, Y, Width, Height);\n#else\n            unchecked\n            {\n                int hash = 17;\n                hash = hash * 23 + X.GetHashCode();\n                hash = hash * 23 + Y.GetHashCode();\n                hash = hash * 23 + Width.GetHashCode();\n                hash = hash * 23 + Height.GetHashCode();\n                return hash;\n            }\n#endif\n        }\n\n        public static bool operator ==(Rectangle left, Rectangle right)\n        {\n            return left.Equals(right);\n        }\n\n        public static bool operator !=(Rectangle left, Rectangle right)\n        {\n            return !(left == right);\n        }\n    }\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/RectangleF.cs",
    "content": "﻿\nnamespace Majorsilence.Drawing\n{\n    public struct RectangleF\n    {\n        public float X { get; set; }\n        public float Y { get; set; }\n        public float Width { get; set; }\n        public float Height { get; set; }\n\n        public RectangleF(float x, float y, float width, float height)\n        {\n            X = x;\n            Y = y;\n            Width = width;\n            Height = height;\n        }\n\n        public float Left => X;\n        public float Top => Y;\n        public float Right => X + Width;\n        public float Bottom => Y + Height;\n\n        public SizeF Size => new SizeF(Width, Height);\n\n        public bool Contains(float x, float y)\n        {\n            return x >= Left && x <= Right && y >= Top && y <= Bottom;\n        }\n\n        public bool IntersectsWith(RectangleF rect)\n        {\n            return rect.Left < Right && rect.Right > Left && rect.Top < Bottom && rect.Bottom > Top;\n        }\n\n        public static RectangleF Intersect(RectangleF a, RectangleF b)\n        {\n            if (!a.IntersectsWith(b)) return new RectangleF(0, 0, 0, 0);\n\n            float x = Math.Max(a.Left, b.Left);\n            float y = Math.Max(a.Top, b.Top);\n            float width = Math.Min(a.Right, b.Right) - x;\n            float height = Math.Min(a.Bottom, b.Bottom) - y;\n\n            return new RectangleF(x, y, width, height);\n        }\n\n        public static RectangleF Union(RectangleF a, RectangleF b)\n        {\n            float x = Math.Min(a.Left, b.Left);\n            float y = Math.Min(a.Top, b.Top);\n            float width = Math.Max(a.Right, b.Right) - x;\n            float height = Math.Max(a.Bottom, b.Bottom) - y;\n\n            return new RectangleF(x, y, width, height);\n        }\n\n        public bool IsEmpty => Width == 0 && Height == 0;\n        public static RectangleF Empty => new RectangleF(0, 0, 0, 0);\n\n        public override string ToString()\n        {\n            return $\"RectangleF [X={X}, Y={Y}, Width={Width}, Height={Height}]\";\n        }\n    }\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Region.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Drawing\n{\n    public class Region : IDisposable\n    {\n        public int X { get; set; }\n        public int Y { get; set; }\n        public int Width { get; set; }\n        public int Height { get; set; }\n\n        public Region(int x, int y, int width, int height)\n        {\n            X = x;\n            Y = y;\n            Width = width;\n            Height = height;\n        }\n\n        public int Area()\n        {\n            return Width * Height;\n        }\n\n        public bool Contains(int x, int y)\n        {\n            return x >= X && x <= X + Width && y >= Y && y <= Y + Height;\n        }\n\n        public RectangleF GetBounds(Graphics g)\n        {\n            if (g == null)\n            {\n                throw new ArgumentNullException(nameof(g));\n            }\n\n            return new RectangleF(X, Y, Width, Height);\n        }\n\n        public override string ToString()\n        {\n            return $\"Region [X={X}, Y={Y}, Width={Width}, Height={Height}]\";\n        }\n\n        public void Dispose()\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Size.cs",
    "content": "﻿\nnamespace Majorsilence.Drawing\n{\n    public struct Size\n    {\n        public int Width { get; set; }\n        public int Height { get; set; }\n        public Size(int width, int height)\n        {\n            Width = width;\n            Height = height;\n        }\n\n        public static Size Empty => new Size(0, 0);\n\n        public override string ToString()\n        {\n            return $\"Size [Width={Width}, Height={Height}]\";\n        }\n    }\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/SizeF.cs",
    "content": "﻿\nnamespace Majorsilence.Drawing\n{\n    public struct SizeF\n    {\n        public float Width { get; set; }\n        public float Height { get; set; }\n        public SizeF(float width, float height)\n        {\n            Width = width;\n            Height = height;\n        }\n\n        public static SizeF Empty => new SizeF(0, 0);\n\n        public override string ToString()\n        {\n            return $\"SizeF [Width={Width}, Height={Height}]\";\n        }\n    }\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/SkiaImageExtensions.cs",
    "content": "﻿using Majorsilence.Drawing.Imaging;\nusing SkiaSharp;\n\n\nnamespace Majorsilence.Drawing\n{\n    // Extension method to handle quality parameter for encoding\n    public static class SkiaImageExtensions\n    {\n        // Converts EncoderParameters to SkiaSharp encoding options\n        public static SKEncodedImageFormat ToSkImageEncodeOptions(this EncoderParameters encoderParams, ImageFormat format)\n        {\n            // Default Skia options\n            var encodeOptions = new SKEncodedImageFormat();\n\n            foreach (var parameter in encoderParams.GetParameters())\n            {\n                if (parameter.Encoder == Encoder.Quality)\n                {\n                    var quality = (int)parameter.Value;\n\n                    //// SkiaSharp supports quality for JPEG encoding\n                    //if (format == ImageFormat.Jpeg)\n                    //{\n                    //    encodeOptions = quality;\n                    //}\n                    //else\n                    //{\n                    //    throw new NotSupportedException(\"Quality parameter is only supported for JPEG encoding in SkiaSharp.\");\n                    //}\n                }\n                else\n                {\n                    throw new NotSupportedException($\"Encoder parameter {parameter.Encoder.ParameterName} is not supported.\");\n                }\n            }\n\n            return encodeOptions;\n        }\n    }\n\n\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/SolidBrush.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Drawing\n{\n    public sealed class SolidBrush : Brush\n    {\n        public SolidBrush(Color color) : base(color)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/StringAlignment.cs",
    "content": "﻿namespace Majorsilence.Drawing\n{\n    public enum StringAlignment\n    {\n        Near,\n        Center,\n        Far\n    }\n\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/StringFormat.cs",
    "content": "﻿namespace Majorsilence.Drawing\n{\n\n    public class StringFormat : IDisposable\n    {\n        public StringAlignment Alignment { get; set; }\n        public StringAlignment LineAlignment { get; set; }\n        public StringFormatFlags FormatFlags { get; set; }\n        public StringTrimming Trimming { get; set; }\n\n        public static readonly StringFormat GenericTypographic = new StringFormat\n        {\n            Alignment = StringAlignment.Near,\n            LineAlignment = StringAlignment.Near,\n            FormatFlags = StringFormatFlags.MeasureTrailingSpaces,\n            Trimming = StringTrimming.None\n        };\n\n        public StringFormat()\n        {\n            Alignment = StringAlignment.Near;\n            LineAlignment = StringAlignment.Near;\n            FormatFlags = StringFormatFlags.None;\n            Trimming = StringTrimming.None;\n        }\n\n        public void SetMeasurableCharacterRanges(CharacterRange[] ranges)\n        {\n            // Assuming we need to store the ranges in a private field\n            MeasurableCharacterRanges = ranges;\n        }\n\n        // Add a private field to store the character ranges\n        public CharacterRange[] MeasurableCharacterRanges { get; set; }\n\n        public object Clone()\n        {\n            return this.MemberwiseClone();\n        }\n\n        public void Dispose()\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/StringFormatFlags.cs",
    "content": "﻿namespace Majorsilence.Drawing\n{\n    [Flags]\n    public enum StringFormatFlags\n    {\n        None = 0,\n        DirectionRightToLeft = 1,\n        DirectionVertical = 2,\n        MeasureTrailingSpaces = 4,\n        NoWrap = 8\n    }\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/StringTrimming.cs",
    "content": "﻿namespace Majorsilence.Drawing\n{\n    public enum StringTrimming\n    {\n        None,\n        Character,\n        Word,\n        EllipsisCharacter,\n        EllipsisWord,\n        EllipsisPath\n    }\n}\n"
  },
  {
    "path": "Majorsilence.Drawing.Common/Text.cs",
    "content": "﻿using SkiaSharp;\n\n\nnamespace Majorsilence.Drawing\n{\n    public class Text\n    {\n        public string Content { get; set; }\n        public Color Color { get; set; }\n        public float Size { get; set; }\n        public string FontFamily { get; set; }\n        public bool Bold { get; set; }\n        public bool Italic { get; set; }\n        public enum TextRenderingHint\n        {\n            SystemDefault,\n            SingleBitPerPixel,\n            AntiAlias,\n            ClearTypeGridFit\n        }\n\n        public Text(string content, Color color, float size, string fontFamily = \"Arial\", bool bold = false, bool italic = false)\n        {\n            Content = content;\n            Color = color;\n            Size = size;\n            FontFamily = fontFamily;\n            Bold = bold;\n            Italic = italic;\n        }\n\n        public SKFont ToSkFont()\n        {\n            return new SKFont(\n                SKTypeface.FromFamilyName(FontFamily, Bold ? SKFontStyleWeight.Bold : SKFontStyleWeight.Normal,\n                    SKFontStyleWidth.Normal, Italic ? SKFontStyleSlant.Italic : SKFontStyleSlant.Upright),\n                Size, 1F, 0F);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Majorsilence.Reporting.Benchmarks/DrawingCompatJob.cs",
    "content": "using BenchmarkDotNet.Attributes;\nusing System;\nusing BenchmarkDotNet.Engines;\nusing BenchmarkDotNet.Environments;\nusing BenchmarkDotNet.Extensions;\nusing BenchmarkDotNet.Jobs;\nusing JetBrains.Annotations;\n\n\nnamespace Majorsilence.Reporting.Benchmarks\n{\n    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Assembly, AllowMultiple = true)]\n    public class DrawingCompatJob : JobConfigBaseAttribute\n    {\n        private const int DefaultValue = -1;\n\n        public DrawingCompatJob(\n            RunStrategy runStrategy,\n            int launchCount = DefaultValue,\n            int warmupCount = DefaultValue,\n            int iterationCount = DefaultValue,\n            int invocationCount = DefaultValue,\n            string? id = null,\n            bool baseline = false,\n            string buildConfiguration = \"Release-DrawingCompat\"\n        ) : base(CreateJob(id, launchCount, warmupCount, iterationCount, invocationCount, runStrategy, baseline,\n            buildConfiguration))\n        {\n        }\n\n        private static Job CreateJob(string? id, int launchCount, int warmupCount, int iterationCount,\n            int invocationCount, RunStrategy? runStrategy,\n            bool baseline, string buildConfiguration)\n        {\n            var job = new Job(id).WithCustomBuildConfiguration(buildConfiguration);\n            int manualValuesCount = 0;\n\n            if (launchCount != DefaultValue)\n            {\n                job.Run.LaunchCount = launchCount;\n                manualValuesCount++;\n            }\n\n            if (warmupCount != DefaultValue)\n            {\n                job.Run.WarmupCount = warmupCount;\n                manualValuesCount++;\n            }\n\n            if (iterationCount != DefaultValue)\n            {\n                job.Run.IterationCount = iterationCount;\n                manualValuesCount++;\n            }\n\n            if (invocationCount != DefaultValue)\n            {\n                job.Run.InvocationCount = invocationCount;\n                manualValuesCount++;\n\n                int unrollFactor =\n                    job.Run.ResolveValue(RunMode.UnrollFactorCharacteristic, EnvironmentResolver.Instance);\n                if (invocationCount % unrollFactor != 0)\n                {\n                    job.Run.UnrollFactor = 1;\n                    manualValuesCount++;\n                }\n            }\n\n            if (runStrategy != null)\n            {\n                job.Run.RunStrategy = runStrategy.Value;\n                manualValuesCount++;\n            }\n\n            if (baseline)\n                job.Meta.Baseline = true;\n            \n\n            return job.Freeze();\n        }\n    }\n}"
  },
  {
    "path": "Majorsilence.Reporting.Benchmarks/JsonDataProviderBenchmark.cs",
    "content": "﻿using BenchmarkDotNet.Attributes;\nusing BenchmarkDotNet.Engines;\nusing BenchmarkDotNet.Jobs;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Xml.Serialization;\nusing System;\nusing Majorsilence.Reporting.RdlCreator;\nusing System.Text.RegularExpressions;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Benchmarks\n{\n    [AsciiDocExporter]\n    [HtmlExporter]\n    [MemoryDiagnoser]\n    //[RPlotExporter]\n    //[SimpleJob(baseline: true)]\n    [DrawingCompatJob(runStrategy: RunStrategy.Throughput, baseline: true, buildConfiguration: \"Release-DrawingCompat\")]\n    public class JsonDataProviderBenchmark\n    {\n        DataProviders dataProvider = DataProviders.Json;\n        private string connectionString = \"file=NestedJsonData.json\";\n        \n        [Benchmark]\n        public async Task NestedJson()\n        {\n            var create = new RdlCreator.Create();\n\n            var fyiReport = await create.GenerateRdl(dataProvider,\n                connectionString,\n                \"columns=EmployeeID,LastName,FirstName,ContactInfo_Phone,ContactInfo_Email\",\n                pageHeaderText: \"DataProviderTest TestMethod1\");\n            using var ms = new Majorsilence.Reporting.Rdl.MemoryStreamGen();\n            await fyiReport.RunGetData(null);\n            await fyiReport.RunRender(ms, Majorsilence.Reporting.Rdl.OutputPresentationType.PDF);\n        }\n    }\n}"
  },
  {
    "path": "Majorsilence.Reporting.Benchmarks/Majorsilence.Reporting.Benchmarks.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n        <OutputType>Exe</OutputType>\n        <TargetFrameworks>net48;net8.0;net10.0</TargetFrameworks>\n        <TargetFrameworks Condition=\"'$(OS)' == 'Unix'\">net8.0;net10.0</TargetFrameworks>\n        <ImplicitUsings>enable</ImplicitUsings>\n        <Nullable>enable</Nullable>\n        <Configurations>Debug;Debug-DrawingCompat;Release;Release-DrawingCompat</Configurations>\n        <Platforms>AnyCPU</Platforms>\n    </PropertyGroup>\n\n    <ItemGroup>\n      <PackageReference Include=\"BenchmarkDotNet\" />\n    </ItemGroup>\n\n    <ItemGroup>\n      <ProjectReference Include=\"..\\RdlCreator\\Majorsilence.Reporting.RdlCreator.csproj\" />\n      <ProjectReference Include=\"..\\RdlCri\\Majorsilence.Reporting.RdlCri.csproj\" />\n      <ProjectReference Include=\"..\\RdlEngine\\Majorsilence.Reporting.RdlEngine.csproj\" />\n    </ItemGroup>\n\n    <ItemGroup>\n      <None Include=\"..\\RdlCreator.Tests\\NestedJsonData.json\">\n        <Link>NestedJsonData.json</Link>\n        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      </None>\n    </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Majorsilence.Reporting.Benchmarks/Program.cs",
    "content": "﻿// See https://aka.ms/new-console-template for more information\n\nusing BenchmarkDotNet.Configs;\nusing BenchmarkDotNet.Jobs;\nusing BenchmarkDotNet.Running;\nusing Majorsilence.Reporting.Benchmarks;\nusing System.Diagnostics;\n\n//var summary = BenchmarkRunner.Run(typeof(Program).Assembly, \n//    new DebugBuildConfig()\n//        .WithOptions(ConfigOptions.DisableOptimizationsValidator));\n\nvar summary = BenchmarkRunner.Run(typeof(Program).Assembly);\n\n\n//var config = DefaultConfig.Instance\n//    .AddJob(Job.Default.WithCustomBuildConfiguration(\"Release-DrawingCompat\"))\n//    .WithOptions(ConfigOptions.DisableOptimizationsValidator);\n\n//var summary = BenchmarkSwitcher\n//    .FromAssembly(typeof(Program).Assembly)\n//    .Run(args, config);\n\n\n// Run a simple multithreaded test\n\nvar jsonBp = new JsonDataProviderBenchmark();\nConsole.WriteLine(\"|Threads|Duration|Source|Calls/Sec|Total Calls|Errors|\");\nConsole.WriteLine(\"|-------|--------|------|---------:|----------:|-----:|\");\nConcurrentCallCount(jsonBp, threadCount: 1, durationInSeconds: 30);\nConcurrentCallCount(jsonBp, threadCount: 20, durationInSeconds: 30);\nConcurrentCallCount(jsonBp, threadCount: 20, durationInSeconds: 30);\nConcurrentCallCount(jsonBp, threadCount: 30, durationInSeconds: 30);\nConcurrentCallCount(jsonBp, threadCount: 40, durationInSeconds: 30);\nConcurrentCallCount(jsonBp, threadCount: 50, durationInSeconds: 30);\n\n\nvoid ConcurrentCallCount(JsonDataProviderBenchmark inst, int threadCount, int durationInSeconds)\n{\n    Stopwatch stopwatch = new Stopwatch();\n\n// Start the stopwatch\n    stopwatch.Start();\n\n    int functionCallCount = 0;\n    int errors = 0;\n\n// Create an array to hold the threads\n    Thread[] threads = new Thread[threadCount];\n\n// Create and start the threads\n    for (int i = 0; i < threadCount; i++)\n    {\n        threads[i] = new Thread(async () =>\n        {\n            while (stopwatch.Elapsed.TotalSeconds < durationInSeconds)\n            {\n                try\n                {\n                    await inst.NestedJson();\n\n                    Interlocked.Increment(ref functionCallCount);\n                }\n                catch (Exception ex)\n                {\n                    Interlocked.Increment(ref errors);\n                    Console.WriteLine(ex);\n                }\n            }\n        });\n\n        threads[i].Start();\n    }\n\n    foreach (var thread in threads)\n    {\n        thread.Join();\n    }\n\n    stopwatch.Stop();\n    double callRate = functionCallCount / stopwatch.Elapsed.TotalSeconds;\n\n    Console.WriteLine(\n        $\"|{threadCount}|{durationInSeconds}|{inst.GetType().Name}|{callRate:N0}|{functionCallCount:N0}|{errors:N0}|\");\n}"
  },
  {
    "path": "Majorsilence.Reporting.UI/.gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore\n\n# User-specific files\n*.rsuser\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# User-specific files (MonoDevelop/Xamarin Studio)\n*.userprefs\n\n# Mono auto generated files\nmono_crash.*\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\n[Ww][Ii][Nn]32/\n[Aa][Rr][Mm]/\n[Aa][Rr][Mm]64/\nbld/\n[Bb]in/\n[Oo]bj/\n[Ll]og/\n[Ll]ogs/\n\n# Visual Studio 2015/2017 cache/options directory\n.vs/\n# Uncomment if you have tasks that create the project's static files in wwwroot\n#wwwroot/\n\n# Visual Studio 2017 auto generated files\nGenerated\\ Files/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n# NUnit\n*.VisualState.xml\nTestResult.xml\nnunit-*.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n# Benchmark Results\nBenchmarkDotNet.Artifacts/\n\n# .NET Core\nproject.lock.json\nproject.fragment.lock.json\nartifacts/\n\n# Tye\n.tye/\n\n# ASP.NET Scaffolding\nScaffoldingReadMe.txt\n\n# StyleCop\nStyleCopReport.xml\n\n# Files built by Visual Studio\n*_i.c\n*_p.c\n*_h.h\n*.ilk\n*.meta\n*.obj\n*.iobj\n*.pch\n*.pdb\n*.ipdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*_wpftmp.csproj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opendb\n*.opensdf\n*.sdf\n*.cachefile\n*.VC.db\n*.VC.VC.opendb\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n*.sap\n\n# Visual Studio Trace Files\n*.e2e\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# AxoCover is a Code Coverage Tool\n.axoCover/*\n!.axoCover/settings.json\n\n# Coverlet is a free, cross platform Code Coverage Tool\ncoverage*.json\ncoverage*.xml\ncoverage*.info\n\n# Visual Studio code coverage results\n*.coverage\n*.coveragexml\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\nnCrunchTemp_*\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# Note: Comment the next line if you want to checkin your web deploy settings,\n# but database connection strings (with potential passwords) will be unencrypted\n*.pubxml\n*.publishproj\n\n# Microsoft Azure Web App publish settings. Comment the next line if you want to\n# checkin your Azure Web App publish settings, but sensitive information contained\n# in these scripts will be unencrypted\nPublishScripts/\n\n# NuGet Packages\n*.nupkg\n# NuGet Symbol Packages\n*.snupkg\n# The packages folder can be ignored because of Package Restore\n**/[Pp]ackages/*\n# except build/, which is used as an MSBuild target.\n!**/[Pp]ackages/build/\n# Uncomment if necessary however generally it will be regenerated when needed\n#!**/[Pp]ackages/repositories.config\n# NuGet v3's project.json files produces more ignorable files\n*.nuget.props\n*.nuget.targets\n\n# Microsoft Azure Build Output\ncsx/\n*.build.csdef\n\n# Microsoft Azure Emulator\necf/\nrcf/\n\n# Windows Store app package directories and files\nAppPackages/\nBundleArtifacts/\nPackage.StoreAssociation.xml\n_pkginfo.txt\n*.appx\n*.appxbundle\n*.appxupload\n\n# Visual Studio cache files\n# files ending in .cache can be ignored\n*.[Cc]ache\n# but keep track of directories ending in .cache\n!?*.[Cc]ache/\n\n# Others\nClientBin/\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.jfm\n*.pfx\n*.publishsettings\norleans.codegen.cs\n\n# Including strong name files can present a security risk\n# (https://github.com/github/gitignore/pull/2483#issue-259490424)\n#*.snk\n\n# Since there are multiple workflows, uncomment next line to ignore bower_components\n# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)\n#bower_components/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\nServiceFabricBackup/\n*.rptproj.bak\n\n# SQL Server files\n*.mdf\n*.ldf\n*.ndf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n*.rptproj.rsuser\n*- [Bb]ackup.rdl\n*- [Bb]ackup ([0-9]).rdl\n*- [Bb]ackup ([0-9][0-9]).rdl\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# GhostDoc plugin setting file\n*.GhostDoc.xml\n\n# Node.js Tools for Visual Studio\n.ntvs_analysis.dat\nnode_modules/\n\n# Visual Studio 6 build log\n*.plg\n\n# Visual Studio 6 workspace options file\n*.opt\n\n# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)\n*.vbw\n\n# Visual Studio LightSwitch build output\n**/*.HTMLClient/GeneratedArtifacts\n**/*.DesktopClient/GeneratedArtifacts\n**/*.DesktopClient/ModelManifest.xml\n**/*.Server/GeneratedArtifacts\n**/*.Server/ModelManifest.xml\n_Pvt_Extensions\n\n# Paket dependency manager\n.paket/paket.exe\npaket-files/\n\n# FAKE - F# Make\n.fake/\n\n# CodeRush personal settings\n.cr/personal\n\n# Python Tools for Visual Studio (PTVS)\n__pycache__/\n*.pyc\n\n# Cake - Uncomment if you are using it\n# tools/**\n# !tools/packages.config\n\n# Tabs Studio\n*.tss\n\n# Telerik's JustMock configuration file\n*.jmconfig\n\n# BizTalk build output\n*.btp.cs\n*.btm.cs\n*.odx.cs\n*.xsd.cs\n\n# OpenCover UI analysis results\nOpenCover/\n\n# Azure Stream Analytics local run output\nASALocalRun/\n\n# MSBuild Binary and Structured Log\n*.binlog\n\n# NVidia Nsight GPU debugger configuration file\n*.nvuser\n\n# MFractors (Xamarin productivity tool) working folder\n.mfractor/\n\n# Local History for Visual Studio\n.localhistory/\n\n# BeatPulse healthcheck temp database\nhealthchecksdb\n\n# Backup folder for Package Reference Convert tool in Visual Studio 2017\nMigrationBackup/\n\n# Ionide (cross platform F# VS Code tools) working folder\n.ionide/\n\n# Fody - auto-generated XML schema\nFodyWeavers.xsd\n\n##\n## Visual studio for Mac\n##\n\n\n# globs\nMakefile.in\n*.userprefs\n*.usertasks\nconfig.make\nconfig.status\naclocal.m4\ninstall-sh\nautom4te.cache/\n*.tar.gz\ntarballs/\ntest-results/\n\n# Mac bundle stuff\n*.dmg\n*.app\n\n# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore\n# General\n.DS_Store\n.AppleDouble\n.LSOverride\n\n# Icon must end with two \\r\nIcon\n\n\n# Thumbnails\n._*\n\n# Files that might appear in the root of a volume\n.DocumentRevisions-V100\n.fseventsd\n.Spotlight-V100\n.TemporaryItems\n.Trashes\n.VolumeIcon.icns\n.com.apple.timemachine.donotpresent\n\n# Directories potentially created on remote AFP share\n.AppleDB\n.AppleDesktop\nNetwork Trash Folder\nTemporary Items\n.apdisk\n\n# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore\n# Windows thumbnail cache files\nThumbs.db\nehthumbs.db\nehthumbs_vista.db\n\n# Dump file\n*.stackdump\n\n# Folder config file\n[Dd]esktop.ini\n\n# Recycle Bin used on file shares\n$RECYCLE.BIN/\n\n# Windows Installer files\n*.cab\n*.msi\n*.msix\n*.msm\n*.msp\n\n# Windows shortcuts\n*.lnk\n\n# JetBrains Rider\n.idea/\n*.sln.iml\n\n##\n## Visual Studio Code\n##\n.vscode/*\n!.vscode/settings.json\n!.vscode/tasks.json\n!.vscode/launch.json\n!.vscode/extensions.json\n"
  },
  {
    "path": "Majorsilence.Reporting.UI/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             x:Class=\"Majorsilence.Reporting.UI.App\">\n    <Application.Styles>\n        <FluentTheme />\n    </Application.Styles>\n</Application>\n"
  },
  {
    "path": "Majorsilence.Reporting.UI/App.axaml.cs",
    "content": "using Avalonia;\nusing Avalonia.Controls.ApplicationLifetimes;\nusing Avalonia.Markup.Xaml;\n\nnamespace Majorsilence.Reporting.UI\n{\n    public partial class App : Application\n    {\n        public override void Initialize()\n        {\n            AvaloniaXamlLoader.Load(this);\n        }\n\n        public override void OnFrameworkInitializationCompleted()\n        {\n            if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)\n            {\n                desktop.MainWindow = new MainWindow();\n            }\n\n            base.OnFrameworkInitializationCompleted();\n        }\n    }\n}"
  },
  {
    "path": "Majorsilence.Reporting.UI/MainWindow.axaml",
    "content": "<Window xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        mc:Ignorable=\"d\" d:DesignWidth=\"800\" d:DesignHeight=\"450\"\n        xmlns:viewer1=\"clr-namespace:Majorsilence.Reporting.UI.RdlAvalonia.Viewer;assembly=Majorsilence.Reporting.UI.RdlAvalonia\"\n        x:Class=\"Majorsilence.Reporting.UI.MainWindow\"\n        Title=\"Majorsilence.Reporting.UI\">\n    <viewer1:AvaloniaReportViewer />\n</Window>\n"
  },
  {
    "path": "Majorsilence.Reporting.UI/MainWindow.axaml.cs",
    "content": "using Avalonia.Controls;\n\nnamespace Majorsilence.Reporting.UI\n{\n    public partial class MainWindow : Window\n    {\n        public MainWindow()\n        {\n            InitializeComponent();\n        }\n    }\n}"
  },
  {
    "path": "Majorsilence.Reporting.UI/Majorsilence.Reporting.UI.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n    <PropertyGroup>\n        <OutputType>WinExe</OutputType>\n        <TargetFrameworks>net10.0</TargetFrameworks>\n        <Nullable>enable</Nullable>\n        <!--Avalonia doesen't support TrimMode=link currently,but we are working on that https://github.com/AvaloniaUI/Avalonia/issues/6892 -->\n        <TrimMode>copyused</TrimMode>\n        <BuiltInComInteropSupport>true</BuiltInComInteropSupport>\n        <Configurations>Debug;Release;Debug-DrawingCompat;Release-DrawingCompat</Configurations>\n        <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n        <DefineConstants>$(DefineConstants);DRAWINGCOMPAT</DefineConstants>\n    </PropertyGroup>\n    <ItemGroup>\n        <None Remove=\".gitignore\"/>\n    </ItemGroup>\n    <ItemGroup>\n        <!--This helps with theme dll-s trimming.\n        If you will publish your application in self-contained mode with p:PublishTrimmed=true and it will use Fluent theme Default theme will be trimmed from the output and vice versa.\n        https://github.com/AvaloniaUI/Avalonia/issues/5593 -->\n        <TrimmableAssembly Include=\"Avalonia.Themes.Fluent\"/>\n        <TrimmableAssembly Include=\"Avalonia.Themes.Default\"/>\n    </ItemGroup>\n    <ItemGroup>\n        <PackageReference Include=\"Avalonia\" />\n        <PackageReference Include=\"Avalonia.Desktop\" />\n        <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n        <PackageReference Condition=\"'$(Configuration)' == 'Debug'\" Include=\"Avalonia.Diagnostics\" />\n        <PackageReference Include=\"Avalonia.Themes.Fluent\" />\n        <PackageReference Include=\"Microsoft.Data.SqlClient\" />\n        <PackageReference Include=\"Microsoft.Data.Sqlite\" />\n        <PackageReference Include=\"XamlNameReferenceGenerator\" />\n        <PackageReference Include=\"SkiaSharp\" />\n    </ItemGroup>\n    <ItemGroup>\n      <ProjectReference Include=\"..\\Majorsilence.Reporting.UI.RdlAvalonia\\Majorsilence.Reporting.UI.RdlAvalonia.csproj\" />\n      <ProjectReference Include=\"..\\RdlCri\\Majorsilence.Reporting.RdlCri.csproj\" />\n      <ProjectReference Include=\"..\\RdlEngine\\Majorsilence.Reporting.RdlEngine.csproj\" />\n    </ItemGroup>\n    <ItemGroup>\n      <ProjectReference Include=\"..\\Majorsilence.Drawing.Common\\Majorsilence.Drawing.Common.csproj\" />\n    </ItemGroup>\n</Project>\n"
  },
  {
    "path": "Majorsilence.Reporting.UI/Program.cs",
    "content": "﻿using Avalonia;\nusing System;\n\nnamespace Majorsilence.Reporting.UI\n{\n    class Program\n    {\n        // Initialization code. Don't use any Avalonia, third-party APIs or any\n        // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n        // yet and stuff might break.\n        [STAThread]\n        public static void Main(string[] args) => BuildAvaloniaApp()\n            .StartWithClassicDesktopLifetime(args);\n\n        // Avalonia configuration, don't remove; also used by visual designer.\n        public static AppBuilder BuildAvaloniaApp()\n            => AppBuilder.Configure<App>()\n                .UsePlatformDetect()\n                .With(new X11PlatformOptions\n                {\n                    UseDBusMenu = false\n                })\n                .LogToTrace();\n    }\n}"
  },
  {
    "path": "Majorsilence.Reporting.UI.RdlAvalonia/Majorsilence.Reporting.UI.RdlAvalonia.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n    <PropertyGroup>\n        <OutputType>Library</OutputType>\n        <TargetFrameworks>net48;net8.0;net10.0</TargetFrameworks>\n        <TargetFrameworks Condition=\"'$(OS)' == 'Unix'\">net8.0;net10.0</TargetFrameworks>\n        <Nullable>enable</Nullable>\n        <!--Avalonia doesen't support TrimMode=link currently,but we are working on that https://github.com/AvaloniaUI/Avalonia/issues/6892 -->\n        <TrimMode>copyused</TrimMode>\n        <BuiltInComInteropSupport>true</BuiltInComInteropSupport>\n        <Configurations>Debug;Release;Debug-DrawingCompat;Release-DrawingCompat</Configurations>\n        <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n        <DefineConstants>$(DefineConstants);DRAWINGCOMPAT</DefineConstants>\n    </PropertyGroup>\n    <ItemGroup>\n        <None Remove=\".gitignore\"/>\n    </ItemGroup>\n    <ItemGroup>\n        <!--This helps with theme dll-s trimming.\n        If you will publish your application in self-contained mode with p:PublishTrimmed=true and it will use Fluent theme Default theme will be trimmed from the output and vice versa.\n        https://github.com/AvaloniaUI/Avalonia/issues/5593 -->\n        <TrimmableAssembly Include=\"Avalonia.Themes.Fluent\"/>\n        <TrimmableAssembly Include=\"Avalonia.Themes.Default\"/>\n    </ItemGroup>\n    <ItemGroup>\n        <PackageReference Include=\"Avalonia\" />\n        <PackageReference Include=\"Avalonia.Desktop\" />\n        <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n        <PackageReference Condition=\"'$(Configuration)' == 'Debug'\" Include=\"Avalonia.Diagnostics\" />\n        <PackageReference Include=\"Avalonia.Themes.Fluent\" />\n        <PackageReference Include=\"XamlNameReferenceGenerator\" />\n        <PackageReference Include=\"SkiaSharp\" />\n    </ItemGroup>\n    <ItemGroup Condition=\"'$(TargetFramework)' == 'net48'\">\n        <PackageReference Include=\"Microsoft.CSharp\" />\n    </ItemGroup>\n    <ItemGroup>\n        <ProjectReference Include=\"..\\RdlCri\\Majorsilence.Reporting.RdlCri.csproj\" />\n        <ProjectReference Include=\"..\\RdlEngine\\Majorsilence.Reporting.RdlEngine.csproj\" />\n    </ItemGroup>\n    <ItemGroup>\n        <ProjectReference Include=\"..\\Majorsilence.Drawing.Common\\Majorsilence.Drawing.Common.csproj\" />\n    </ItemGroup>\n    <ItemGroup>\n      <AdditionalFiles Include=\"Viewer\\AvaloniaReportViewer.axaml\" />\n    </ItemGroup>\n</Project>\n"
  },
  {
    "path": "Majorsilence.Reporting.UI.RdlAvalonia/Viewer/AvaloniaReportViewer.axaml",
    "content": "<UserControl xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:viewer=\"clr-namespace:Majorsilence.Reporting.UI.RdlAvalonia.Viewer\"\n             x:Class=\"Majorsilence.Reporting.UI.RdlAvalonia.Viewer.AvaloniaReportViewer\">\n    <DockPanel>\n        <StackPanel DockPanel.Dock=\"Top\" Orientation=\"Horizontal\" Spacing=\"6\" Margin=\"6\">\n            <Button x:Name=\"OpenButton\" Content=\"Open\" />\n            <Button x:Name=\"SaveButton\" Content=\"Save As\" />\n            <Button x:Name=\"PrintButton\" Content=\"Print\" />\n            <Separator Width=\"12\" />\n            <Button x:Name=\"CopyButton\" Content=\"Copy\" ToolTip.Tip=\"Copy selected text (Ctrl+C)\" />\n            <Button x:Name=\"SelectAllButton\" Content=\"Select All\" ToolTip.Tip=\"Select all text (Ctrl+A)\" />\n            <Separator Width=\"12\" />\n            <Button x:Name=\"FirstPageButton\" Content=\"&lt;&lt;\" />\n            <Button x:Name=\"PreviousPageButton\" Content=\"&lt;\" />\n            <TextBox x:Name=\"PageTextBox\" Width=\"50\" />\n            <TextBlock x:Name=\"PageCountTextBlock\" VerticalAlignment=\"Center\" />\n            <Button x:Name=\"NextPageButton\" Content=\"&gt;\" />\n            <Button x:Name=\"LastPageButton\" Content=\"&gt;&gt;\" />\n            <Separator Width=\"12\" />\n            <Button x:Name=\"ZoomInButton\" Content=\"Zoom In\" />\n            <Button x:Name=\"ZoomOutButton\" Content=\"Zoom Out\" />\n            <ComboBox x:Name=\"ZoomModeComboBox\" Width=\"120\" />\n            <Separator Width=\"12\" />\n            <ToggleButton x:Name=\"ErrorsToggleButton\" Content=\"Errors\" />\n        </StackPanel>\n        <StackPanel DockPanel.Dock=\"Top\" Orientation=\"Horizontal\" Spacing=\"6\" Margin=\"6\">\n            <TextBlock Text=\"Parameters\" VerticalAlignment=\"Center\" />\n            <TextBox x:Name=\"ParametersTextBox\" Width=\"420\" />\n            <Button x:Name=\"ApplyParametersButton\" Content=\"Apply\" />\n        </StackPanel>\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\" />\n                <ColumnDefinition Width=\"Auto\" />\n            </Grid.ColumnDefinitions>\n            <ScrollViewer x:Name=\"ReportScrollViewer\" Grid.Column=\"0\" HorizontalScrollBarVisibility=\"Auto\" VerticalScrollBarVisibility=\"Auto\">\n                <viewer:ReportCanvas x:Name=\"ReportCanvas\" />\n            </ScrollViewer>\n            <Border Grid.Column=\"1\" Background=\"#FFEFEFEF\" BorderBrush=\"#FFDDDDDD\" BorderThickness=\"1\"\n                    IsVisible=\"False\" x:Name=\"ErrorsPanel\">\n                <ListBox x:Name=\"ErrorsListBox\" Width=\"280\" />\n            </Border>\n        </Grid>\n    </DockPanel>\n</UserControl>\n\n"
  },
  {
    "path": "Majorsilence.Reporting.UI.RdlAvalonia/Viewer/AvaloniaReportViewer.axaml.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Avalonia.Controls;\nusing Avalonia.Input;\nusing Avalonia.Interactivity;\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlEngine;\n\nnamespace Majorsilence.Reporting.UI.RdlAvalonia.Viewer\n{\n    public partial class AvaloniaReportViewer : UserControl\n    {\n        private Report? _report;\n        private Pages? _pages;\n        private Uri? _sourceFile;\n        private string? _sourceRdl;\n        private IDictionary _parameters = new Dictionary<string, string>();\n        private IList? _errorMessages;\n        private int _pageCurrent = 1;\n        private double _zoom = 1.0;\n        private ZoomMode _zoomMode = ZoomMode.FitWidth;\n\n        public AvaloniaReportViewer()\n        {\n            InitializeComponent();\n            RdlEngineConfig.GetCustomReportTypes();\n            InitializeUi();\n        }\n\n        public event EventHandler<SubreportDataRetrievalEventArgs>? SubreportDataRetrieval;\n\n        public string? ConnectionStringOverride { get; private set; }\n\n        public bool OverwriteSubreportConnection { get; private set; }\n\n        public string? WorkingDirectory { get; set; }\n\n        public async Task SetSourceFileAsync(Uri fileUri)\n        {\n            _sourceFile = fileUri;\n            _sourceRdl = null;\n            WorkingDirectory = Path.GetDirectoryName(fileUri.LocalPath);\n            await RebuildAsync();\n        }\n\n        public async Task SetSourceRdlAsync(string rdl)\n        {\n            _sourceRdl = rdl;\n            _sourceFile = null;\n            await RebuildAsync();\n        }\n\n        public void SetReportParametersAmpersandSeparated(string parameterString)\n        {\n            _parameters = new Dictionary<string, string>();\n            if (string.IsNullOrEmpty(parameterString))\n            {\n                return;\n            }\n\n            string[] prms = parameterString.TrimEnd(';').Split('&');\n            foreach (string p in prms)\n            {\n                int iEq = p.IndexOf(\"=\", StringComparison.Ordinal);\n                if (iEq > 0)\n                {\n                    string name = p.Substring(0, iEq);\n                    string val = p.Substring(iEq + 1);\n                    _parameters.Add(name, val);\n                }\n            }\n        }\n\n        public async Task RebuildAsync()\n        {\n            if (_sourceFile == null && string.IsNullOrWhiteSpace(_sourceRdl))\n            {\n                return;\n            }\n\n            _report = await GetReportAsync();\n            if (_report == null)\n            {\n                return;\n            }\n\n            _pages = await BuildPagesAsync(_report);\n            _pageCurrent = 1;\n\n            ReportCanvas.SetReport(_report, _pages);\n            UpdatePageUi();\n            UpdateErrorsUi();\n        }\n\n        private void InitializeUi()\n        {\n            var zoomModes = new[] { ZoomMode.FitWidth, ZoomMode.FitPage, ZoomMode.ActualSize };\n            ZoomModeComboBox.ItemsSource = zoomModes;\n            ZoomModeComboBox.SelectedItem = _zoomMode;\n\n            OpenButton.Click += OpenButtonOnClick;\n            SaveButton.Click += SaveButtonOnClick;\n            PrintButton.Click += PrintButtonOnClick;\n            CopyButton.Click += (_, _) => ReportCanvas.CopySelection();\n            SelectAllButton.Click += (_, _) => ReportCanvas.SelectAll();\n            FirstPageButton.Click += (_, _) => SetPage(1);\n            PreviousPageButton.Click += (_, _) => SetPage(_pageCurrent - 1);\n            NextPageButton.Click += (_, _) => SetPage(_pageCurrent + 1);\n            LastPageButton.Click += (_, _) => SetPage(_pages?.PageCount ?? 1);\n            ZoomInButton.Click += (_, _) => SetZoom(_zoom + 0.25);\n            ZoomOutButton.Click += (_, _) => SetZoom(Math.Max(0.25, _zoom - 0.25));\n            ZoomModeComboBox.SelectionChanged += ZoomModeComboBoxOnSelectionChanged;\n            PageTextBox.LostFocus += PageTextBoxOnLostFocus;\n            ApplyParametersButton.Click += ApplyParametersButtonOnClick;\n            ErrorsToggleButton.IsCheckedChanged += ErrorsToggleOnChanged;\n\n            ReportScrollViewer.SizeChanged += (_, _) => ApplyZoomMode();\n            ReportScrollViewer.AddHandler(PointerWheelChangedEvent, OnScrollViewerPointerWheelChanged, handledEventsToo: false);\n        }\n\n        private void OnScrollViewerPointerWheelChanged(object? sender, PointerWheelEventArgs e)\n        {\n            if (e.KeyModifiers.HasFlag(KeyModifiers.Control))\n            {\n                // Ctrl+Wheel = zoom in/out\n                var delta = e.Delta.Y > 0 ? 0.1 : -0.1;\n                SetZoom(Math.Max(0.1, _zoom + delta));\n                e.Handled = true;\n            }\n        }\n\n        private async void OpenButtonOnClick(object? sender, RoutedEventArgs e)\n        {\n            var topLevel = TopLevel.GetTopLevel(this);\n            if (topLevel == null)\n                return;\n\n            var files = await topLevel.StorageProvider.OpenFilePickerAsync(new Avalonia.Platform.Storage.FilePickerOpenOptions\n            {\n                AllowMultiple = false,\n                Title = \"Open RDL Report\",\n                FileTypeFilter = new[]\n                {\n                    new Avalonia.Platform.Storage.FilePickerFileType(\"RDL Files\") { Patterns = new[] { \"*.rdl\" } },\n                    new Avalonia.Platform.Storage.FilePickerFileType(\"All Files\") { Patterns = new[] { \"*\" } }\n                }\n            });\n\n            if (files.Count == 0)\n            {\n                return;\n            }\n\n            await SetSourceFileAsync(files[0].Path);\n        }\n\n        private async void SaveButtonOnClick(object? sender, RoutedEventArgs e)\n        {\n            if (_report == null)\n            {\n                return;\n            }\n\n            var topLevel = TopLevel.GetTopLevel(this);\n            if (topLevel == null)\n                return;\n\n            var file = await topLevel.StorageProvider.SaveFilePickerAsync(new Avalonia.Platform.Storage.FilePickerSaveOptions\n            {\n                Title = \"Save Report\",\n                FileTypeChoices = new[]\n                {\n                    new Avalonia.Platform.Storage.FilePickerFileType(\"PDF\") { Patterns = new[] { \"*.pdf\" } },\n                    new Avalonia.Platform.Storage.FilePickerFileType(\"HTML\") { Patterns = new[] { \"*.html\", \"*.htm\" } },\n                    new Avalonia.Platform.Storage.FilePickerFileType(\"XML\") { Patterns = new[] { \"*.xml\" } },\n                    new Avalonia.Platform.Storage.FilePickerFileType(\"CSV\") { Patterns = new[] { \"*.csv\" } },\n                    new Avalonia.Platform.Storage.FilePickerFileType(\"MHTML\") { Patterns = new[] { \"*.mhtml\", \"*.mht\" } },\n                    new Avalonia.Platform.Storage.FilePickerFileType(\"RTF\") { Patterns = new[] { \"*.rtf\" } },\n                    new Avalonia.Platform.Storage.FilePickerFileType(\"Excel\") { Patterns = new[] { \"*.xlsx\" } }\n                }\n            });\n\n            if (file == null)\n            {\n                return;\n            }\n\n            var filePath = file.Path.LocalPath;\n            var outputType = OutputPresentationType.Internal;\n            var ext = Path.GetExtension(filePath).Trim('.').ToLowerInvariant();\n            switch (ext)\n            {\n                case \"pdf\":\n                    outputType = OutputPresentationType.PDF;\n                    break;\n                case \"xml\":\n                    outputType = OutputPresentationType.XML;\n                    break;\n                case \"html\":\n                case \"htm\":\n                    outputType = OutputPresentationType.HTML;\n                    break;\n                case \"csv\":\n                    outputType = OutputPresentationType.CSV;\n                    break;\n                case \"mht\":\n                case \"mhtml\":\n                    outputType = OutputPresentationType.MHTML;\n                    break;\n                case \"rtf\":\n                    outputType = OutputPresentationType.RTF;\n                    break;\n                case \"xlsx\":\n                    outputType = OutputPresentationType.Excel2007;\n                    break;\n            }\n\n            await SaveAsAsync(filePath, outputType);\n        }\n\n        private async void PrintButtonOnClick(object? sender, RoutedEventArgs e)\n        {\n            if (_report == null)\n            {\n                return;\n            }\n\n            // Avalonia does not expose a cross-platform print API yet; export to PDF for now.\n            var topLevel = TopLevel.GetTopLevel(this);\n            if (topLevel == null)\n                return;\n\n            var file = await topLevel.StorageProvider.SaveFilePickerAsync(new Avalonia.Platform.Storage.FilePickerSaveOptions\n            {\n                Title = \"Save as PDF for Printing\",\n                FileTypeChoices = new[]\n                {\n                    new Avalonia.Platform.Storage.FilePickerFileType(\"PDF\") { Patterns = new[] { \"*.pdf\" } }\n                }\n            });\n\n            if (file == null)\n            {\n                return;\n            }\n\n            var filePath = file.Path.LocalPath;\n            await SaveAsAsync(filePath, OutputPresentationType.PDF);\n        }\n\n        private async Task SaveAsAsync(string filePath, OutputPresentationType outputType)\n        {\n            if (_report == null || _pages == null)\n            {\n                return;\n            }\n\n            OneFileStreamGen? sg = null;\n            try\n            {\n                sg = new OneFileStreamGen(filePath, true);\n                switch (outputType)\n                {\n                    case OutputPresentationType.PDF:\n                        await _report.RunRender(sg, OutputPresentationType.PDF);\n                        break;\n                    case OutputPresentationType.CSV:\n                        await _report.RunRender(sg, OutputPresentationType.CSV);\n                        break;\n                    case OutputPresentationType.RTF:\n                        await _report.RunRender(sg, OutputPresentationType.RTF);\n                        break;\n                    case OutputPresentationType.Excel2007:\n                        await _report.RunRender(sg, OutputPresentationType.Excel2007);\n                        break;\n                    case OutputPresentationType.XML:\n                        await _report.RunRender(sg, OutputPresentationType.XML);\n                        break;\n                    case OutputPresentationType.HTML:\n                        await _report.RunRender(sg, OutputPresentationType.HTML);\n                        break;\n                    case OutputPresentationType.MHTML:\n                        await _report.RunRender(sg, OutputPresentationType.MHTML);\n                        break;\n                    default:\n                        throw new InvalidOperationException(\"Unsupported export format: \" + Path.GetExtension(filePath));\n                }\n            }\n            finally\n            {\n                sg?.CloseMainStream();\n            }\n        }\n\n        private async Task<Report?> GetReportAsync()\n        {\n            string source;\n            if (!string.IsNullOrWhiteSpace(_sourceRdl))\n            {\n                source = _sourceRdl;\n            }\n            else if (_sourceFile != null)\n            {\n#if NET6_0_OR_GREATER\n                source = await File.ReadAllTextAsync(_sourceFile.LocalPath);\n#else\n                source = File.ReadAllText(_sourceFile.LocalPath);\n#endif\n            }\n            else\n            {\n                return null;\n            }\n\n            var parser = new RDLParser(source)\n            {\n                Folder = WorkingDirectory,\n                OverwriteConnectionString = ConnectionStringOverride,\n                OverwriteInSubreport = OverwriteSubreportConnection\n            };\n\n            var report = await parser.Parse();\n            report.SubreportDataRetrieval += (_, args) => SubreportDataRetrieval?.Invoke(this, args);\n            return report;\n        }\n\n        private async Task<Pages?> BuildPagesAsync(Report report)\n        {\n            try\n            {\n                await report.RunGetData(_parameters);\n                var pages = await report.BuildPages();\n                if (report.ErrorMaxSeverity > 0)\n                {\n                    _errorMessages = report.ErrorItems;\n                    report.ErrorReset();\n                }\n\n                return pages;\n            }\n            catch\n            {\n                return null;\n            }\n        }\n\n        private void UpdatePageUi()\n        {\n            if (_pages == null)\n            {\n                PageTextBox.Text = \"0\";\n                PageCountTextBlock.Text = \"/0\";\n                return;\n            }\n\n            PageTextBox.Text = _pageCurrent.ToString();\n            PageCountTextBlock.Text = \"/\" + _pages.PageCount;\n            SetPage(_pageCurrent);\n        }\n\n        private void UpdateErrorsUi()\n        {\n            if (_errorMessages == null)\n            {\n                ErrorsListBox.Items.Clear();\n                return;\n            }\n\n            ErrorsListBox.Items.Clear();\n            foreach (var message in _errorMessages)\n            {\n                ErrorsListBox.Items.Add(message);\n            }\n        }\n\n        private void SetPage(int page)\n        {\n            if (_pages == null || _pages.PageCount == 0)\n            {\n                return;\n            }\n\n#if NET6_0_OR_GREATER\n            var newPage = Math.Clamp(page, 1, _pages.PageCount);\n#else\n            var newPage = Math.Max(1, Math.Min(page, _pages.PageCount));\n#endif\n            _pageCurrent = newPage;\n            PageTextBox.Text = newPage.ToString();\n            ReportCanvas.SetPage(newPage - 1);\n        }\n\n        private void SetZoom(double zoom)\n        {\n            _zoom = zoom;\n            _zoomMode = ZoomMode.ActualSize;\n            ZoomModeComboBox.SelectedItem = _zoomMode;\n            ReportCanvas.SetZoom(_zoom);\n        }\n\n        private void ApplyZoomMode()\n        {\n            if (_pages == null)\n            {\n                return;\n            }\n\n            var viewportWidth = ReportScrollViewer.Viewport.Width;\n            var viewportHeight = ReportScrollViewer.Viewport.Height;\n            if (viewportWidth <= 1 || viewportHeight <= 1)\n            {\n                return;\n            }\n\n            var pageWidth = _pages.PageWidth;\n            var pageHeight = _pages.PageHeight;\n            if (pageWidth <= 0 || pageHeight <= 0)\n            {\n                return;\n            }\n\n            switch (_zoomMode)\n            {\n                case ZoomMode.FitPage:\n                    _zoom = Math.Min(viewportWidth / pageWidth, viewportHeight / pageHeight);\n                    break;\n                case ZoomMode.FitWidth:\n                    _zoom = viewportWidth / pageWidth;\n                    break;\n                case ZoomMode.ActualSize:\n                    _zoom = 1.0;\n                    break;\n            }\n\n            ReportCanvas.SetZoom(_zoom);\n        }\n\n        private void ZoomModeComboBoxOnSelectionChanged(object? sender, SelectionChangedEventArgs e)\n        {\n            if (ZoomModeComboBox.SelectedItem is ZoomMode mode)\n            {\n                _zoomMode = mode;\n                ApplyZoomMode();\n            }\n        }\n\n        private void PageTextBoxOnLostFocus(object? sender, RoutedEventArgs e)\n        {\n            if (int.TryParse(PageTextBox.Text, out var page))\n            {\n                SetPage(page);\n            }\n        }\n\n        private async void ApplyParametersButtonOnClick(object? sender, RoutedEventArgs e)\n        {\n            SetReportParametersAmpersandSeparated(ParametersTextBox.Text ?? string.Empty);\n            await RebuildAsync();\n        }\n\n        private void ErrorsToggleOnChanged(object? sender, RoutedEventArgs e)\n        {\n            ErrorsPanel.IsVisible = ErrorsToggleButton.IsChecked == true;\n        }\n    }\n}\n\n"
  },
  {
    "path": "Majorsilence.Reporting.UI.RdlAvalonia/Viewer/ReportCanvas.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Input;\nusing Avalonia.Media;\nusing Avalonia.Media.Imaging;\nusing Avalonia.Platform;\nusing Majorsilence.Reporting.Rdl;\nusing SkiaSharp;\n\nnamespace Majorsilence.Reporting.UI.RdlAvalonia.Viewer\n{\n    /// <summary>\n    /// Represents an entry in the hit list for selection tracking\n    /// </summary>\n    public class HitListEntry\n    {\n        public Rect Rect { get; }\n        public PageItem PageItem { get; }\n        \n        public HitListEntry(Rect rect, PageItem pageItem)\n        {\n            Rect = rect;\n            PageItem = pageItem;\n        }\n        \n        public bool Contains(Point p) => Rect.Contains(p);\n    }\n    \n    public sealed class ReportCanvas : Control\n    {\n        private Pages? _pages;\n        private int _pageIndex;\n        private double _zoom = 1.0;\n        private WriteableBitmap? _bitmap;\n        private bool _needsRender = true;\n        \n        // Selection handling\n        private readonly List<HitListEntry> _hitList = new();\n        private readonly List<PageItem> _selectList = new();\n        private bool _selectToolEnabled = true;\n        private bool _isSelecting;\n        private Point _selectionStart;\n        private Point _selectionEnd;\n        private readonly Color _selectionColor = Color.FromArgb(80, 51, 153, 255);\n        private readonly Color _selectedItemColor = Color.FromArgb(100, 100, 149, 237);\n\n        public ReportCanvas()\n        {\n            Focusable = true;\n            Cursor = new Cursor(StandardCursorType.Ibeam);\n        }\n\n        /// <summary>\n        /// Event raised when the selection changes\n        /// </summary>\n        public event EventHandler? SelectionChanged;\n\n        /// <summary>\n        /// Gets or sets whether the selection tool is enabled\n        /// </summary>\n        public bool SelectToolEnabled\n        {\n            get => _selectToolEnabled;\n            set\n            {\n                _selectToolEnabled = value;\n                _selectList.Clear();\n                InvalidateVisual();\n            }\n        }\n\n        /// <summary>\n        /// Gets whether there is any selected content that can be copied\n        /// </summary>\n        public bool CanCopy => _selectToolEnabled && _selectList.Count > 0;\n\n        /// <summary>\n        /// Gets the selected text content\n        /// </summary>\n        public string? SelectedText\n        {\n            get\n            {\n                if (!_selectToolEnabled || _selectList.Count == 0)\n                    return null;\n\n                var sb = new StringBuilder();\n                float lastY = float.MinValue;\n\n                var sortedList = _selectList\n                    .OrderBy(pi => pi.Y)\n                    .ThenBy(pi => pi.X)\n                    .ToList();\n\n                foreach (var pi in sortedList)\n                {\n                    if (pi is not PageText pt)\n                        continue;\n                    if (pt.HtmlParent != null)\n                        continue;\n\n                    if (lastY != float.MinValue)\n                    {\n                        if (Math.Abs(pt.Y - lastY) < 0.1f)\n                            sb.Append('\\t');\n                        else\n                            sb.Append(Environment.NewLine);\n                    }\n\n                    if (pt is PageTextHtml pth)\n                        AppendHtmlText(pth, sb);\n                    else\n                        sb.Append(pt.Text);\n\n                    lastY = pt.Y;\n                }\n\n                return sb.ToString();\n            }\n        }\n\n        private static void AppendHtmlText(PageTextHtml pth, StringBuilder sb)\n        {\n            bool bFirst = true;\n            float lastY = float.MaxValue;\n            foreach (PageItem pi in pth)\n            {\n                if (bFirst)\n                {\n                    bFirst = false;\n                    continue;\n                }\n                if (pi is not PageText pt)\n                    continue;\n                if (pt.Y > lastY)\n                    sb.Append(' ');\n                sb.Append(pt.Text);\n                lastY = pt.Y;\n            }\n        }\n\n        /// <summary>\n        /// Copies the selected text to the clipboard\n        /// </summary>\n        public async void CopySelection()\n        {\n            var text = SelectedText;\n            if (string.IsNullOrEmpty(text))\n                return;\n\n            var clipboard = TopLevel.GetTopLevel(this)?.Clipboard;\n            if (clipboard != null)\n            {\n                await clipboard.SetTextAsync(text);\n            }\n        }\n\n        /// <summary>\n        /// Selects all text on the current page\n        /// </summary>\n        public void SelectAll()\n        {\n            _selectList.Clear();\n            foreach (var entry in _hitList)\n            {\n                if (entry.PageItem is PageText && !_selectList.Contains(entry.PageItem))\n                {\n                    _selectList.Add(entry.PageItem);\n                }\n            }\n            SelectionChanged?.Invoke(this, EventArgs.Empty);\n            InvalidateVisual();\n        }\n\n        /// <summary>\n        /// Clears the current selection\n        /// </summary>\n        public void ClearSelection()\n        {\n            _selectList.Clear();\n            SelectionChanged?.Invoke(this, EventArgs.Empty);\n            InvalidateVisual();\n        }\n\n        public void SetReport(Report? report, Pages? pages)\n        {\n            _pages = pages;\n            _pageIndex = 0;\n            _needsRender = true;\n            _selectList.Clear();\n            _hitList.Clear();\n            InvalidateMeasure();\n            InvalidateVisual();\n        }\n\n        public void SetPage(int pageIndex)\n        {\n            _pageIndex = Math.Max(0, pageIndex);\n            _needsRender = true;\n            _selectList.Clear();\n            _hitList.Clear();\n            InvalidateMeasure();\n            InvalidateVisual();\n        }\n\n        public void SetZoom(double zoom)\n        {\n            _zoom = Math.Max(0.1, zoom);\n            _needsRender = true;\n            InvalidateMeasure();\n            InvalidateVisual();\n        }\n\n        /// <summary>\n        /// Gets the logical size of the current rendered page, used by the ScrollViewer.\n        /// </summary>\n        public Size PageLogicalSize\n        {\n            get\n            {\n                if (_pages == null || _pages.PageCount == 0)\n                    return default;\n\n                var scale = VisualRoot?.RenderScaling ?? 1.0;\n                var dpi = 96.0 * scale;\n                var width = _pages.PageWidth * dpi / 72.0 * _zoom / scale;\n                var height = _pages.PageHeight * dpi / 72.0 * _zoom / scale;\n                return new Size(width, height);\n            }\n        }\n\n        protected override Size MeasureOverride(Size availableSize)\n        {\n            var size = PageLogicalSize;\n            if (size.Width <= 0 || size.Height <= 0)\n                return base.MeasureOverride(availableSize);\n            return size;\n        }\n\n        protected override void OnPointerPressed(PointerPressedEventArgs e)\n        {\n            base.OnPointerPressed(e);\n            \n            if (!_selectToolEnabled)\n                return;\n\n            var point = e.GetCurrentPoint(this);\n            if (point.Properties.IsLeftButtonPressed)\n            {\n                _isSelecting = true;\n                _selectionStart = point.Position;\n                _selectionEnd = point.Position;\n                \n                // Clear selection if Ctrl is not pressed\n                if (!e.KeyModifiers.HasFlag(KeyModifiers.Control))\n                {\n                    _selectList.Clear();\n                }\n                \n                e.Handled = true;\n                Focus();\n            }\n        }\n\n        protected override void OnPointerMoved(PointerEventArgs e)\n        {\n            base.OnPointerMoved(e);\n            \n            if (!_selectToolEnabled || !_isSelecting)\n                return;\n\n            _selectionEnd = e.GetPosition(this);\n            InvalidateVisual();\n        }\n\n        protected override void OnPointerReleased(PointerReleasedEventArgs e)\n        {\n            base.OnPointerReleased(e);\n            \n            if (!_selectToolEnabled || !_isSelecting)\n                return;\n\n            _isSelecting = false;\n            _selectionEnd = e.GetPosition(this);\n            \n            // Create selection from rectangle\n            var selectionRect = CreateRect(_selectionStart, _selectionEnd);\n            bool ctrlPressed = e.KeyModifiers.HasFlag(KeyModifiers.Control);\n            \n            UpdateSelectionFromRect(selectionRect, ctrlPressed);\n            \n            SelectionChanged?.Invoke(this, EventArgs.Empty);\n            InvalidateVisual();\n        }\n\n        protected override void OnKeyDown(KeyEventArgs e)\n        {\n            base.OnKeyDown(e);\n            \n            if (e.KeyModifiers.HasFlag(KeyModifiers.Control))\n            {\n                switch (e.Key)\n                {\n                    case Key.C:\n                        CopySelection();\n                        e.Handled = true;\n                        break;\n                    case Key.A:\n                        SelectAll();\n                        e.Handled = true;\n                        break;\n                }\n            }\n            else if (e.Key == Key.Escape)\n            {\n                ClearSelection();\n                e.Handled = true;\n            }\n        }\n\n        private void UpdateSelectionFromRect(Rect selectionRect, bool ctrlPressed)\n        {\n            foreach (var entry in _hitList)\n            {\n                if (!entry.Rect.Intersects(selectionRect))\n                    continue;\n\n                bool inList = _selectList.Contains(entry.PageItem);\n                if (ctrlPressed)\n                {\n                    if (inList)\n                        _selectList.Remove(entry.PageItem);\n                    else\n                        _selectList.Add(entry.PageItem);\n                }\n                else\n                {\n                    if (!inList)\n                        _selectList.Add(entry.PageItem);\n                }\n            }\n        }\n\n        private static Rect CreateRect(Point p1, Point p2)\n        {\n            double x = Math.Min(p1.X, p2.X);\n            double y = Math.Min(p1.Y, p2.Y);\n            double width = Math.Abs(p2.X - p1.X);\n            double height = Math.Abs(p2.Y - p1.Y);\n            return new Rect(x, y, width, height);\n        }\n\n        public override void Render(DrawingContext context)\n        {\n            base.Render(context);\n            if (_pages == null || _pages.PageCount == 0)\n            {\n                return;\n            }\n\n            if (_needsRender || _bitmap == null)\n            {\n                RenderPage();\n            }\n\n            if (_bitmap != null)\n            {\n                context.DrawImage(_bitmap, new Rect(0, 0, _bitmap.Size.Width, _bitmap.Size.Height));\n            }\n\n            // Draw selection highlights\n            DrawSelectionHighlights(context);\n            \n            // Draw selection rectangle while dragging\n            if (_isSelecting)\n            {\n                var selectionRect = CreateRect(_selectionStart, _selectionEnd);\n                var brush = new SolidColorBrush(_selectionColor);\n                var pen = new Pen(new SolidColorBrush(Color.FromRgb(51, 153, 255)));\n                context.DrawRectangle(brush, pen, selectionRect);\n            }\n        }\n\n        private void DrawSelectionHighlights(DrawingContext context)\n        {\n            if (_selectList.Count == 0)\n                return;\n\n            var brush = new SolidColorBrush(_selectedItemColor);\n            foreach (var entry in _hitList)\n            {\n                if (_selectList.Contains(entry.PageItem))\n                {\n                    context.DrawRectangle(brush, null, entry.Rect);\n                }\n            }\n        }\n\n        private void RenderPage()\n        {\n            if (_pages == null)\n            {\n                return;\n            }\n\n#if NET6_0_OR_GREATER\n            var pageIndex = Math.Clamp(_pageIndex, 0, _pages.PageCount - 1);\n#else\n            var pageIndex = Math.Max(0, Math.Min(_pageIndex, _pages.PageCount - 1));\n#endif\n            var scale = VisualRoot?.RenderScaling ?? 1.0;\n            var dpi = 96.0 * scale;\n            var pixelWidth = Math.Max(1, (int)Math.Ceiling(_pages.PageWidth * dpi / 72.0 * _zoom));\n            var pixelHeight = Math.Max(1, (int)Math.Ceiling(_pages.PageHeight * dpi / 72.0 * _zoom));\n\n            _bitmap = new WriteableBitmap(\n                new PixelSize(pixelWidth, pixelHeight),\n                new Vector(dpi, dpi),\n                PixelFormats.Bgra8888,\n                AlphaFormat.Premul);\n\n            using var framebuffer = _bitmap.Lock();\n            var info = new SKImageInfo(framebuffer.Size.Width, framebuffer.Size.Height, SKColorType.Bgra8888, SKAlphaType.Premul);\n            using var surface = SKSurface.Create(info, framebuffer.Address, framebuffer.RowBytes);\n            if (surface == null)\n            {\n                return;\n            }\n\n            var canvas = surface.Canvas;\n            canvas.Clear(SKColors.White);\n\n            using var g = new Majorsilence.Drawing.Graphics(canvas)\n            {\n                DpiX = (float)dpi,\n                DpiY = (float)dpi,\n                PageUnit = Majorsilence.Drawing.GraphicsUnit.Pixel\n            };\n\n            var renderer = new SkiaPageDrawing(_pages, (float)_zoom);\n            renderer.Draw(g, pageIndex);\n\n            // Build hit list for selection\n            BuildHitList(pageIndex, dpi);\n\n            surface.Flush();\n            _needsRender = false;\n        }\n\n        private void BuildHitList(int pageIndex, double dpi)\n        {\n            _hitList.Clear();\n            \n            if (_pages == null || pageIndex < 0 || pageIndex >= _pages.PageCount)\n                return;\n\n            var page = _pages[pageIndex];\n            // The renderer (SkiaPageDrawing) draws at coordinates: points * zoom\n            // The bitmap is displayed at logical size: pixelSize * 96 / dpi\n            // So a rendered pixel at (x * zoom) maps to logical position: x * zoom * 96 / dpi\n            var scale = dpi / 96.0;\n            BuildHitListFromPage(page, scale);\n        }\n\n        private void BuildHitListFromPage(Page page, double scale)\n        {\n            foreach (var item in page)\n            {\n                if (item is not PageItem pi)\n                    continue;\n\n                // Match the renderer's coordinate conversion: points * zoom\n                // Then convert from physical pixels to logical pixels: / scale\n                var rect = new Rect(\n                    PointsToLogical(pi.X, scale),\n                    PointsToLogical(pi.Y, scale),\n                    PointsToLogical(pi.W, scale),\n                    PointsToLogical(pi.H, scale)\n                );\n\n                if (pi is PageTextHtml pth)\n                {\n                    _hitList.Add(new HitListEntry(rect, pi));\n                    // Also add child items\n                    foreach (PageItem child in pth)\n                    {\n                        if (child is PageText)\n                        {\n                            var childRect = new Rect(\n                                PointsToLogical(child.X, scale),\n                                PointsToLogical(child.Y, scale),\n                                PointsToLogical(child.W, scale),\n                                PointsToLogical(child.H, scale)\n                            );\n                            _hitList.Add(new HitListEntry(childRect, child));\n                        }\n                    }\n                }\n                else if (pi is PageText || pi is PageImage)\n                {\n                    _hitList.Add(new HitListEntry(rect, pi));\n                }\n            }\n        }\n\n        /// <summary>\n        /// Converts points to logical (device-independent) pixel coordinates,\n        /// matching the renderer's coordinate system (points * zoom) then\n        /// accounting for display scaling (physical pixels to logical pixels).\n        /// </summary>\n        private double PointsToLogical(float points, double scale)\n        {\n            // Renderer draws at: points * zoom (in physical pixels on the SKSurface)\n            // Bitmap logical size = physical size / scale\n            // So logical coordinate = points * zoom / scale\n            return points * _zoom / scale;\n        }\n    }\n}\n"
  },
  {
    "path": "Majorsilence.Reporting.UI.RdlAvalonia/Viewer/SkiaPageDrawing.cs",
    "content": "using System.Collections.Generic;\nusing Majorsilence.Reporting.Rdl;\nusing Drawing = Majorsilence.Drawing;\n\nnamespace Majorsilence.Reporting.UI.RdlAvalonia.Viewer\n{\n    /// <summary>\n    /// Renders report pages to SkiaSharp graphics surface\n    /// </summary>\n    public class SkiaPageDrawing\n    {\n        private readonly Pages _pages;\n        private readonly float _zoom;\n\n        public SkiaPageDrawing(Pages pages, float zoom = 1.0f)\n        {\n            _pages = pages;\n            _zoom = zoom;\n        }\n\n        /// <summary>\n        /// Converts a color from the RdlEngine (which may be System.Drawing.Color or Majorsilence.Drawing.Color\n        /// depending on build configuration) to Majorsilence.Drawing.Color\n        /// </summary>\n        private static Drawing.Color ToDrawingColor(dynamic color)\n        {\n            return Drawing.Color.FromArgb(color.A, color.R, color.G, color.B);\n        }\n        \n        /// <summary>\n        /// Gets a default black color\n        /// </summary>\n        private static Drawing.Color DefaultBlack => Drawing.Color.Black;\n        \n        /// <summary>\n        /// Gets a default empty/transparent color\n        /// </summary>\n        private static Drawing.Color DefaultEmpty => Drawing.Color.Empty;\n\n        public void Draw(Majorsilence.Drawing.Graphics g, int pageIndex)\n        {\n            if (_pages == null || pageIndex < 0 || pageIndex >= _pages.PageCount)\n            {\n                return;\n            }\n\n            var page = _pages[pageIndex];\n            ProcessPage(g, page);\n        }\n\n        private void ProcessPage(Drawing.Graphics g, Page page)\n        {\n            if (page == null)\n            {\n                return;\n            }\n\n            foreach (PageItem pi in page)\n            {\n                if (pi == null)\n                {\n                    continue;\n                }\n\n                if (pi is PageTextHtml)\n                {\n                    ProcessHtml(pi as PageTextHtml, g);\n                    continue;\n                }\n\n                if (pi is PageLine)\n                {\n                    var pl = pi as PageLine;\n                    DrawLine(pl, g);\n                    continue;\n                }\n\n                var rect = new Drawing.Rectangle(\n                    (int)ConvertXtoPixels(pi.X),\n                    (int)ConvertYtoPixels(pi.Y),\n                    (int)ConvertXtoPixels(pi.W),\n                    (int)ConvertYtoPixels(pi.H)\n                );\n\n                if (pi.SI?.BackgroundImage != null)\n                {\n                    DrawImage(pi.SI.BackgroundImage, g, rect);\n                }\n\n                if (pi is PageText)\n                {\n                    var pt = pi as PageText;\n                    DrawString(pt, g, rect);\n                }\n                else if (pi is PageImage)\n                {\n                    var i = pi as PageImage;\n                    DrawImage(i, g, rect);\n                }\n                else if (pi is PageRectangle)\n                {\n                    DrawBackground(g, rect, pi.SI);\n                }\n                else if (pi is PageEllipse)\n                {\n                    var pe = pi as PageEllipse;\n                    DrawEllipse(pe, g, rect);\n                }\n                else if (pi is PagePie)\n                {\n                    var pp = pi as PagePie;\n                    DrawPie(pp, g, rect);\n                }\n                else if (pi is PagePolygon)\n                {\n                    var ppo = pi as PagePolygon;\n                    DrawPolygon(ppo, g, rect);\n                }\n                else if (pi is PageCurve)\n                {\n                    var pc = pi as PageCurve;\n                    DrawCurve(pc, g, rect);\n                }\n            }\n        }\n\n        private void ProcessHtml(PageTextHtml? pth, Drawing.Graphics g)\n        {\n            if (pth == null)\n            {\n                return;\n            }\n\n            // PageTextHtml contains nested PageItems that we can process\n            // Draw the text content if available\n            if (!string.IsNullOrEmpty(pth.Text))\n            {\n                var rect = new Drawing.Rectangle(\n                    (int)ConvertXtoPixels(pth.X),\n                    (int)ConvertYtoPixels(pth.Y),\n                    (int)ConvertXtoPixels(pth.W),\n                    (int)ConvertYtoPixels(pth.H)\n                );\n                \n                var font = GetFont(pth);\n                var brush = GetBrush(pth.SI != null ? ToDrawingColor(pth.SI.Color) : DefaultBlack);\n                \n                if (font != null && brush != null)\n                {\n                    var stringFormat = GetStringFormat(pth);\n                    g.DrawString(pth.Text, font, brush, rect, stringFormat);\n                    font.Dispose();\n                    brush.Dispose();\n                }\n            }\n        }\n\n        private void DrawLine(PageLine? pl, Drawing.Graphics g)\n        {\n            if (pl == null || pl.SI == null)\n            {\n                return;\n            }\n\n            var pen = CreatePen(ToDrawingColor(pl.SI.BColorLeft), pl.SI.BStyleLeft, pl.SI.BWidthLeft);\n            if (pen != null)\n            {\n                g.DrawLine(pen,\n                    new Drawing.Point((int)ConvertXtoPixels(pl.X), (int)ConvertYtoPixels(pl.Y)),\n                    new Drawing.Point((int)ConvertXtoPixels(pl.X2), (int)ConvertYtoPixels(pl.Y2)));\n                pen.Dispose();\n            }\n        }\n\n        private void DrawString(PageText? pt, Drawing.Graphics g, Drawing.Rectangle rect)\n        {\n            if (pt == null || string.IsNullOrEmpty(pt.Text))\n            {\n                return;\n            }\n\n            var font = GetFont(pt);\n            var brush = GetBrush(pt.SI != null ? ToDrawingColor(pt.SI.Color) : DefaultBlack);\n\n            if (font != null && brush != null)\n            {\n                var stringFormat = GetStringFormat(pt);\n                g.DrawString(pt.Text, font, brush, rect, stringFormat);\n                font.Dispose();\n                brush.Dispose();\n            }\n        }\n\n        private void DrawImage(PageImage? pi, Drawing.Graphics g, Drawing.Rectangle rect)\n        {\n            if (pi == null)\n            {\n                return;\n            }\n\n            try\n            {\n                var imageData = pi.GetImageData();\n                if (imageData != null && imageData.Length > 0)\n                {\n                    using var ms = new System.IO.MemoryStream(imageData);\n                    using var bitmap = new Drawing.Bitmap(ms);\n                    // Draw the image in the specified rectangle\n                    g.DrawImage(bitmap, rect);\n                }\n            }\n            catch\n            {\n                // Silently ignore image drawing errors\n            }\n        }\n\n        private void DrawBackground(Drawing.Graphics g, Drawing.Rectangle rect, StyleInfo? si)\n        {\n            if (si == null)\n            {\n                return;\n            }\n\n            var brush = GetBrush(ToDrawingColor(si.BackgroundColor));\n            if (brush != null)\n            {\n                g.FillRectangle(brush, rect);\n                brush.Dispose();\n            }\n\n            // Draw border\n            var pen = CreatePen(ToDrawingColor(si.BColorLeft), si.BStyleLeft, si.BWidthLeft);\n            if (pen != null)\n            {\n                g.DrawRectangle(pen, rect.X, rect.Y, rect.Width, rect.Height);\n                pen.Dispose();\n            }\n        }\n\n        private void DrawEllipse(PageEllipse? pe, Drawing.Graphics g, Drawing.Rectangle rect)\n        {\n            if (pe == null || pe.SI == null)\n            {\n                return;\n            }\n\n            var brush = GetBrush(ToDrawingColor(pe.SI.BackgroundColor));\n            if (brush != null)\n            {\n                g.FillEllipse(brush, rect);\n                brush.Dispose();\n            }\n\n            var pen = CreatePen(ToDrawingColor(pe.SI.BColorLeft), pe.SI.BStyleLeft, pe.SI.BWidthLeft);\n            if (pen != null)\n            {\n                g.DrawEllipse(pen, rect);\n                pen.Dispose();\n            }\n        }\n\n        private void DrawPie(PagePie? pp, Drawing.Graphics g, Drawing.Rectangle rect)\n        {\n            if (pp == null || pp.SI == null)\n            {\n                return;\n            }\n\n            var brush = GetBrush(ToDrawingColor(pp.SI.BackgroundColor));\n            if (brush != null)\n            {\n                g.FillPie(brush, rect, pp.StartAngle, pp.SweepAngle);\n                brush.Dispose();\n            }\n\n            var pen = CreatePen(ToDrawingColor(pp.SI.BColorLeft), pp.SI.BStyleLeft, pp.SI.BWidthLeft);\n            if (pen != null)\n            {\n                g.DrawPie(pen, rect, pp.StartAngle, pp.SweepAngle);\n                pen.Dispose();\n            }\n        }\n\n        private void DrawPolygon(PagePolygon? ppo, Drawing.Graphics g, Drawing.Rectangle rect)\n        {\n            if (ppo == null || ppo.Points == null || ppo.Points.Length < 3)\n            {\n                return;\n            }\n\n            var points = new List<Drawing.PointF>();\n            foreach (var pt in ppo.Points)\n            {\n                points.Add(new Drawing.PointF(\n                    ConvertXtoPixels(pt.X),\n                    ConvertYtoPixels(pt.Y)\n                ));\n            }\n\n            var brush = GetBrush(ppo.SI != null ? ToDrawingColor(ppo.SI.BackgroundColor) : DefaultEmpty);\n            if (brush != null)\n            {\n                g.FillPolygon(brush, points.ToArray());\n                brush.Dispose();\n            }\n\n            var pen = CreatePen(ppo.SI != null ? ToDrawingColor(ppo.SI.BColorLeft) : DefaultBlack, ppo.SI?.BStyleLeft, ppo.SI?.BWidthLeft ?? 1f);\n            if (pen != null)\n            {\n                g.DrawPolygon(pen, points.ToArray());\n                pen.Dispose();\n            }\n        }\n\n        private void DrawCurve(PageCurve? pc, Drawing.Graphics g, Drawing.Rectangle rect)\n        {\n            if (pc == null || pc.Points == null || pc.Points.Length < 2)\n            {\n                return;\n            }\n\n            var points = new List<Drawing.Point>();\n            foreach (var pt in pc.Points)\n            {\n                points.Add(new Drawing.Point(\n                    (int)ConvertXtoPixels(pt.X),\n                    (int)ConvertYtoPixels(pt.Y)\n                ));\n            }\n\n            var pen = CreatePen(pc.SI != null ? ToDrawingColor(pc.SI.BColorLeft) : DefaultBlack, pc.SI?.BStyleLeft, pc.SI?.BWidthLeft ?? 1f);\n            if (pen != null)\n            {\n                g.DrawCurve(pen, points.ToArray(), 0.5f);\n                pen.Dispose();\n            }\n        }\n\n        private float ConvertXtoPixels(float x)\n        {\n            return x * _zoom;\n        }\n\n        private float ConvertYtoPixels(float y)\n        {\n            return y * _zoom;\n        }\n\n        private Drawing.Pen? CreatePen(Drawing.Color color, BorderStyleEnum? style, float width)\n        {\n            if (color == Drawing.Color.Empty)\n            {\n                return null;\n            }\n\n            // width is already in points\n            float penWidth = width > 0 ? width : 1f;\n\n            var pen = new Drawing.Pen(color, penWidth);\n            \n            // Apply line style\n            var styleStr = style?.ToString()?.ToLower() ?? \"solid\";\n            switch (styleStr)\n            {\n                case \"dashed\":\n                    break;  // Default dash style\n                case \"dotted\":\n                    break;\n                case \"dashdot\":\n                    break;\n                case \"solid\":\n                default:\n                    break;\n            }\n\n            return pen;\n        }\n\n        private Drawing.Brush? GetBrush(Drawing.Color color)\n        {\n            if (color == Drawing.Color.Empty)\n            {\n                return null;\n            }\n\n            return new Drawing.SolidBrush(color);\n        }\n\n        private Drawing.Font? GetFont(PageText? pt)\n        {\n            if (pt == null || pt.SI == null)\n            {\n                return null;\n            }\n\n            var fontFamily = new Drawing.FontFamily(pt.SI.FontFamily ?? \"Arial\");\n            var fontSize = pt.SI.FontSize > 0 ? pt.SI.FontSize : 12f;\n            var fontStyle = Drawing.FontStyle.Regular;\n\n            if (pt.SI.FontWeight == FontWeightEnum.Bold)\n            {\n                fontStyle |= Drawing.FontStyle.Bold;\n            }\n\n            if (pt.SI.FontStyle == FontStyleEnum.Italic)\n            {\n                fontStyle |= Drawing.FontStyle.Italic;\n            }\n\n            return new Drawing.Font(fontFamily, fontSize, fontStyle);\n        }\n\n        private Drawing.StringFormat GetStringFormat(PageText pt)\n        {\n            var format = new Drawing.StringFormat();\n\n            if (pt?.SI?.TextAlign != null)\n            {\n                switch (pt.SI.TextAlign.ToString().ToLower())\n                {\n                    case \"right\":\n                        format.Alignment = Drawing.StringAlignment.Far;\n                        break;\n                    case \"center\":\n                        format.Alignment = Drawing.StringAlignment.Center;\n                        break;\n                    case \"left\":\n                    default:\n                        format.Alignment = Drawing.StringAlignment.Near;\n                        break;\n                }\n            }\n\n            if (pt?.SI?.VerticalAlign != null)\n            {\n                switch (pt.SI.VerticalAlign.ToString().ToLower())\n                {\n                    case \"bottom\":\n                        format.LineAlignment = Drawing.StringAlignment.Far;\n                        break;\n                    case \"middle\":\n                        format.LineAlignment = Drawing.StringAlignment.Center;\n                        break;\n                    case \"top\":\n                    default:\n                        format.LineAlignment = Drawing.StringAlignment.Near;\n                        break;\n                }\n            }\n\n\n            return format;\n        }\n    }\n}\n\n"
  },
  {
    "path": "Majorsilence.Reporting.UI.RdlAvalonia/Viewer/ZoomMode.cs",
    "content": "namespace Majorsilence.Reporting.UI.RdlAvalonia.Viewer\n{\n    public enum ZoomMode\n    {\n        FitPage,\n        FitWidth,\n        ActualSize\n    }\n}\n\n"
  },
  {
    "path": "Majorsilence.Reporting.WebExample/Controllers/HomeController.cs",
    "content": "using System.Diagnostics;\nusing Microsoft.AspNetCore.Mvc;\nusing Majorsilence.Reporting.WebExample.Models;\n\nnamespace Majorsilence.Reporting.WebExample.Controllers;\n\npublic class HomeController : Controller\n{\n    private readonly ILogger<HomeController> _logger;\n\n    public HomeController(ILogger<HomeController> logger)\n    {\n        _logger = logger;\n    }\n\n    public IActionResult Index()\n    {\n        return View();\n    }\n\n    public IActionResult Privacy()\n    {\n        return View();\n    }\n\n    [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]\n    public IActionResult Error()\n    {\n        return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });\n    }\n}"
  },
  {
    "path": "Majorsilence.Reporting.WebExample/Majorsilence.Reporting.WebExample.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n    <PropertyGroup>\n        <TargetFramework>net10.0</TargetFramework>\n        <Nullable>enable</Nullable>\n        <ImplicitUsings>enable</ImplicitUsings>\n        <Configurations>Debug;Release;Debug-DrawingCompat;Release-DrawingCompat</Configurations>\n        <Platforms>AnyCPU</Platforms>\n    </PropertyGroup>\n\n    <ItemGroup>\n      <ProjectReference Include=\"..\\RdlAsp.Mvc\\Majorsilence.Reporting.RdlAsp.Mvc.csproj\" />\n    </ItemGroup>\n\n    <ItemGroup>\n      <None Include=\"..\\Examples\\mostly-empty.rdl\">\n        <Link>mostly-empty.rdl</Link>\n        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      </None>\n    </ItemGroup>\n\n    <ItemGroup>\n      <Folder Include=\"Views\\Shared\\\" />\n    </ItemGroup>\n\n    <ItemGroup>\n      <None Include=\"..\\RdlEngine\\RdlEngineConfig.xml\">\n        <Link>RdlEngineConfig.xml</Link>\n        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      </None>\n    </ItemGroup>\n    \n</Project>\n"
  },
  {
    "path": "Majorsilence.Reporting.WebExample/Models/ErrorViewModel.cs",
    "content": "namespace Majorsilence.Reporting.WebExample.Models;\n\npublic class ErrorViewModel\n{\n    public string? RequestId { get; set; }\n\n    public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);\n}"
  },
  {
    "path": "Majorsilence.Reporting.WebExample/Program.cs",
    "content": "using Majorsilence.Reporting.RdlAsp;\n\nvar builder = WebApplication.CreateBuilder(args);\n\n// Add services to the container.\nbuilder.Services.AddControllersWithViews();\n\nbuilder.Services.AddSingleton<Settings>(sp =>\n{\n    var settings = new Settings();\n    builder.Configuration.Bind(\"Settings\", settings);\n    return settings;\n});\n\nvar app = builder.Build();\n\n// Configure the HTTP request pipeline.\nif (!app.Environment.IsDevelopment())\n{\n    app.UseExceptionHandler(\"/Home/Error\");\n    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.\n    app.UseHsts();\n}\n\napp.UseHttpsRedirection();\napp.UseStaticFiles();\n\napp.UseRouting();\n\napp.UseAuthorization();\n\napp.MapControllerRoute(\n    name: \"default\",\n    pattern: \"{controller=Home}/{action=Index}/{id?}\");\n\napp.Run();"
  },
  {
    "path": "Majorsilence.Reporting.WebExample/Properties/launchSettings.json",
    "content": "﻿{\n  \"$schema\": \"http://json.schemastore.org/launchsettings.json\",\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:42140\",\n      \"sslPort\": 44306\n    }\n  },\n  \"profiles\": {\n    \"http\": {\n      \"commandName\": \"Project\",\n      \"dotnetRunMessages\": true,\n      \"launchBrowser\": true,\n      \"applicationUrl\": \"http://localhost:5275\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"https\": {\n      \"commandName\": \"Project\",\n      \"dotnetRunMessages\": true,\n      \"launchBrowser\": true,\n      \"applicationUrl\": \"https://localhost:7240;http://localhost:5275\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "Majorsilence.Reporting.WebExample/Views/Home/Index.cshtml",
    "content": "﻿<html lang=\"en-US\">\n<head>\n    <title></title>\n</head>\n<body>\n    <h1>Welcome</h1>\n    <ol>\n        <li><a href=\"/msr/RdlReport/ShowFile/mostly-empty/html\">Mostly Empty - html</a></li>\n        <li><a href=\"/msr/RdlReport/ShowFile/mostly-empty/pdf\">Mostly Empty - pdf</a></li>\n        <li><a href=\"/msr/RdlList\">Report Folder List</a></li>\n    </ol>\n</body>\n</html>"
  },
  {
    "path": "Majorsilence.Reporting.WebExample/appsettings.Development.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft.AspNetCore\": \"Warning\"\n    }\n  }\n}\n"
  },
  {
    "path": "Majorsilence.Reporting.WebExample/appsettings.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft.AspNetCore\": \"Warning\"\n    }\n  },\n  \"AllowedHosts\": \"*\",\n  \"Settings\": {\n    \"ReportsFolder\": \"Reports/\"\n  }\n}\n"
  },
  {
    "path": "Majorsilence.WinformUtils/FormExtensions.cs",
    "content": "﻿using System.ComponentModel;\n\nnamespace Majorsilence.WinformUtils;\n\npublic static class FormExtensions\n{\n    private static bool isOpen = false;\n\n    public static void ShowWaiter(this UserControl parent)\n    {\n        if (parent.FindForm() is Form form)\n        {\n            form.ShowWaiter();\n        }\n    }\n\n    public static void ShowWaiter(this ContainerControl parent)\n    {\n        if (isOpen) return;\n\n        isOpen = true;\n        var waitForm = new WaitForm\n        {\n            StartPosition = FormStartPosition.Manual,\n            Size = parent.Size,\n            Width = parent.Width,\n            Height = parent.Height,\n            ShowInTaskbar = false,\n            Location = parent.PointToScreen(System.Drawing.Point.Empty)\n        };\n        if (parent is Form)\n        {\n            waitForm.Owner = parent as Form;\n        }\n        parent.SizeChanged += Parent_SizeChanged;\n        if (parent is Form form)\n        {\n            form.Closed += Parent_Closed;\n        }\n\n        parent.Move += Parent_Move;\n        waitForm.Show();\n        waitForm.BringToFront();\n        waitForm.Refresh();\n        Application.DoEvents();\n    }\n\n    private static void Parent_SizeChanged(object? sender, EventArgs e)\n    {\n        if (sender is Form parent)\n        {\n            var waitForm = parent.OwnedForms.OfType<WaitForm>().FirstOrDefault();\n            if (waitForm != null)\n            {\n                waitForm.Width = parent.Width;\n                waitForm.Height = parent.Height;\n            }\n        }\n    }\n\n    private static void Parent_Closed(object? sender, EventArgs e)\n    {\n        if (sender is Form parent)\n        {\n            var waitForm = parent.OwnedForms.OfType<WaitForm>().FirstOrDefault();\n            waitForm?.Close();\n        }\n    }\n\n    private static void Parent_Move(object? sender, EventArgs e)\n    {\n        if (sender is Form parent)\n        {\n            var waitForm = parent.OwnedForms.OfType<WaitForm>().FirstOrDefault();\n            if (waitForm != null)\n            {\n                waitForm.Location = parent.Location;\n            }\n        }\n    }\n\n    public static void HideWaiter(this UserControl parent)\n    {\n        if (parent.FindForm() is Form form)\n        {\n            // find the owner of type WaitForm\n            form.HideWaiter();\n        }\n    }\n\n    public static void HideWaiter(this ContainerControl parent)\n    {\n        WaitForm waitForm = null;\n        if (parent is Form form)\n        {\n            waitForm = form.OwnedForms.OfType<WaitForm>().FirstOrDefault();\n        }\n\n        if (waitForm == null)\n        {\n            // Search application wide\n            waitForm = Application.OpenForms.OfType<WaitForm>().FirstOrDefault();\n        }\n\n        if (waitForm != null)\n        {\n            parent.SizeChanged -= Parent_SizeChanged;\n            if (parent is Form form2)\n            {\n                form2.Closed -= Parent_Closed;\n            }\n\n            parent.Move -= Parent_Move;\n            waitForm.Close();\n            waitForm.Dispose();\n        }\n\n        isOpen = false;\n    }\n}"
  },
  {
    "path": "Majorsilence.WinformUtils/Majorsilence.WinformUtils.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n        <TargetFrameworks>net48;net8.0-windows;net10.0-windows</TargetFrameworks>\n        <Nullable>enable</Nullable>\n        <UseWindowsForms>true</UseWindowsForms>\n        <ImplicitUsings>enable</ImplicitUsings>\n        <GeneratePackageOnBuild>True</GeneratePackageOnBuild>\n    </PropertyGroup>\n\n    <ItemGroup>\n      <EmbeddedResource Update=\"Strings.resx\">\n        <Generator>ResXFileCodeGenerator</Generator>\n        <LastGenOutput>Strings.Designer.cs</LastGenOutput>\n      </EmbeddedResource>\n    </ItemGroup>\n\n    <ItemGroup>\n      <Compile Update=\"Strings.Designer.cs\">\n        <DesignTime>True</DesignTime>\n        <AutoGen>True</AutoGen>\n        <DependentUpon>Strings.resx</DependentUpon>\n      </Compile>\n    </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Majorsilence.WinformUtils/Strings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Majorsilence.WinformUtils {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Strings {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Strings() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Majorsilence.WinformUtils.Strings\", typeof(Strings).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please Wait While Report is Rendered!.\n        /// </summary>\n        internal static string label1 {\n            get {\n                return ResourceManager.GetString(\"label1\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Time Elapsed:.\n        /// </summary>\n        internal static string label2 {\n            get {\n                return ResourceManager.GetString(\"label2\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Minutes.\n        /// </summary>\n        internal static string WaitForm_Minutes {\n            get {\n                return ResourceManager.GetString(\"WaitForm_Minutes\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Seconds.\n        /// </summary>\n        internal static string WaitForm_Seconds {\n            get {\n                return ResourceManager.GetString(\"WaitForm_Seconds\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Majorsilence.WinformUtils/Strings.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<root>\n    <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n        <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n            \n        </xsd:element>\n    </xsd:schema>\n    <resheader name=\"resmimetype\">\n        <value>text/microsoft-resx</value>\n    </resheader>\n    <resheader name=\"version\">\n        <value>1.3</value>\n    </resheader>\n    <resheader name=\"reader\">\n        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n    </resheader>\n    <resheader name=\"writer\">\n        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n    </resheader>\n    <data name=\"WaitForm_Seconds\" xml:space=\"preserve\">\n        <value>Seconds</value>\n    </data>\n    <data name=\"WaitForm_Minutes\" xml:space=\"preserve\">\n        <value>Minutes</value>\n    </data>\n    <data name=\"label1\" xml:space=\"preserve\">\n        <value>Please Wait While Report is Rendered!</value>\n    </data>\n    <data name=\"label2\" xml:space=\"preserve\">\n        <value>Time Elapsed:</value>\n    </data>\n</root>"
  },
  {
    "path": "Majorsilence.WinformUtils/WaitForm.cs",
    "content": "﻿namespace Majorsilence.WinformUtils\n{\n    internal class WaitForm : Form\n    {\n        private DateTime Started;\n        private System.Windows.Forms.ProgressBar progressBar1;\n        private System.Windows.Forms.Label lblTimeTaken;\n        private System.Threading.Timer timer1;\n        public delegate bool CheckStopWaitDialog();\n\n        public WaitForm()\n        {\n            FormBorderStyle = FormBorderStyle.None;\n            InitializeComponent();\n            this.Opacity = 0.50;\n            this.BackColor = Color.Black;\n\n            Started = DateTime.Now;\n            this.HandleCreated += (_, __) =>\n            {\n                timer1 = new System.Threading.Timer(_ =>\n                {\n                    if (!IsHandleCreated || IsDisposed) return;\n                    try\n                    {\n                        this.BeginInvoke(new Action(async () =>\n                        {\n                            await timer1_Tick(null, null);\n                        }));\n                    }\n                    catch (ObjectDisposedException) { }\n                }, null, 0, 50);\n            };\n\n            this.SizeChanged += WaitForm_SizeChanged;\n            this.Move += WaitForm_Move;\n        }\n\n        \n        private void PlaceControls()\n        {\n            progressBar1.Location = new Point((this.Width - this.progressBar1.Width) / 2,\n                (this.Height - this.progressBar1.Height) / 2);\n            lblTimeTaken.Location = new Point((this.Width - this.lblTimeTaken.Width) / 2 + 20,\n                (this.Height - this.lblTimeTaken.Height) / 2 + 50);\n        }\n        \n        private void WaitForm_Move(object? sender, EventArgs e)\n        {\n            PlaceControls();\n        }\n\n        private void WaitForm_SizeChanged(object? sender, EventArgs e)\n        {\n            PlaceControls();\n        }\n\n        private async Task timer1_Tick(object sender, EventArgs e)\n        {\n            System.ComponentModel.ComponentResourceManager resources =\n                new System.ComponentModel.ComponentResourceManager(typeof(Strings));\n            var time = DateTime.Now - Started;\n            if (time.TotalMinutes < 1)\n                lblTimeTaken.Text = string.Format(\"{0} {1}\", time.Seconds, resources.GetString(\"WaitForm_Seconds\"));\n            else\n                lblTimeTaken.Text = string.Format(\"{0} {1} {2} {3}\", (int)time.TotalMinutes,\n                    resources.GetString(\"WaitForm_Minutes\"),\n                    time.Seconds, resources.GetString(\"WaitForm_Seconds\"));\n            \n            Application.DoEvents();\n        }\n\n        private System.ComponentModel.IContainer components = null;\n\n        protected override void Dispose(bool disposing)\n        {\n            timer1?.Dispose();\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        private void InitializeComponent()\n        {\n            this.DoubleBuffered = true;\n            this.components = new System.ComponentModel.Container();\n            System.ComponentModel.ComponentResourceManager resources =\n                new System.ComponentModel.ComponentResourceManager(typeof(Strings));\n            this.progressBar1 = new System.Windows.Forms.ProgressBar();\n            this.lblTimeTaken = new System.Windows.Forms.Label();\n            this.SuspendLayout();\n\n            this.progressBar1.Name = \"progressBar1\";\n            this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee;\n            this.progressBar1.UseWaitCursor = true;\n            this.progressBar1.Location = new Point((this.Width - this.progressBar1.Width) / 2,\n                (this.Height - this.progressBar1.Height) / 2);\n\n            this.lblTimeTaken.Name = \"lblTimeTaken\";\n            this.lblTimeTaken.ForeColor = Color.White;\n            this.lblTimeTaken.UseWaitCursor = true;\n            this.lblTimeTaken.Location = new Point((this.Width - this.lblTimeTaken.Width) / 2 + 20,\n                (this.Height - this.lblTimeTaken.Height) / 2 + 50);\n\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ControlBox = false;\n            this.Controls.Add(this.lblTimeTaken);\n            this.Controls.Add(this.progressBar1);\n            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n            this.ResumeLayout(false);\n            this.PerformLayout();\n        }\n    }\n}"
  },
  {
    "path": "MajorsilenceReporting-Linux-GtkViewer.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.9.34723.18\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Majorsilence.Reporting.RdlGtk3\", \"RdlGtk3\\Majorsilence.Reporting.RdlGtk3.csproj\", \"{921488F1-F4FC-4438-920E-86E57442B253}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Majorsilence.Reporting.DataProviders\", \"DataProviders\\Majorsilence.Reporting.DataProviders.csproj\", \"{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Majorsilence.Reporting.RdlEngine\", \"RdlEngine\\Majorsilence.Reporting.RdlEngine.csproj\", \"{C97E91F4-B310-44E2-9B6C-96775395722D}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Majorsilence.Reporting.RdlCri\", \"RdlCri\\Majorsilence.Reporting.RdlCri.csproj\", \"{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RdlGtk3Viewer\", \"RdlGtk3Viewer\\RdlGtk3Viewer.csproj\", \"{72133ED0-23A1-47BB-B811-EF87C5D188C7}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Majorsilence.Drawing.Common\", \"Majorsilence.Drawing.Common\\Majorsilence.Drawing.Common.csproj\", \"{882E5F2E-4F0E-419E-9170-AD72B200FC06}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|x86 = Debug|x86\n\t\tDebug-DrawingCompat|Any CPU = Debug-DrawingCompat|Any CPU\n\t\tDebug-DrawingCompat|x86 = Debug-DrawingCompat|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|x86 = Release|x86\n\t\tRelease-DrawingCompat|Any CPU = Release-DrawingCompat|Any CPU\n\t\tRelease-DrawingCompat|x86 = Release-DrawingCompat|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{921488F1-F4FC-4438-920E-86E57442B253}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{921488F1-F4FC-4438-920E-86E57442B253}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{921488F1-F4FC-4438-920E-86E57442B253}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{921488F1-F4FC-4438-920E-86E57442B253}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{921488F1-F4FC-4438-920E-86E57442B253}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{921488F1-F4FC-4438-920E-86E57442B253}.Debug-DrawingCompat|Any CPU.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{921488F1-F4FC-4438-920E-86E57442B253}.Debug-DrawingCompat|x86.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{921488F1-F4FC-4438-920E-86E57442B253}.Debug-DrawingCompat|x86.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{921488F1-F4FC-4438-920E-86E57442B253}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{921488F1-F4FC-4438-920E-86E57442B253}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{921488F1-F4FC-4438-920E-86E57442B253}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{921488F1-F4FC-4438-920E-86E57442B253}.Release|x86.Build.0 = Release|Any CPU\n\t\t{921488F1-F4FC-4438-920E-86E57442B253}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{921488F1-F4FC-4438-920E-86E57442B253}.Release-DrawingCompat|Any CPU.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{921488F1-F4FC-4438-920E-86E57442B253}.Release-DrawingCompat|x86.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{921488F1-F4FC-4438-920E-86E57442B253}.Release-DrawingCompat|x86.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug-DrawingCompat|Any CPU.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug-DrawingCompat|x86.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug-DrawingCompat|x86.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.Build.0 = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release-DrawingCompat|Any CPU.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release-DrawingCompat|x86.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release-DrawingCompat|x86.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug-DrawingCompat|Any CPU.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug-DrawingCompat|x86.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug-DrawingCompat|x86.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.Build.0 = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release-DrawingCompat|Any CPU.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release-DrawingCompat|x86.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release-DrawingCompat|x86.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug-DrawingCompat|Any CPU.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug-DrawingCompat|x86.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug-DrawingCompat|x86.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x86.Build.0 = Release|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release-DrawingCompat|Any CPU.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release-DrawingCompat|x86.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release-DrawingCompat|x86.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{72133ED0-23A1-47BB-B811-EF87C5D188C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{72133ED0-23A1-47BB-B811-EF87C5D188C7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{72133ED0-23A1-47BB-B811-EF87C5D188C7}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{72133ED0-23A1-47BB-B811-EF87C5D188C7}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{72133ED0-23A1-47BB-B811-EF87C5D188C7}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{72133ED0-23A1-47BB-B811-EF87C5D188C7}.Debug-DrawingCompat|Any CPU.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{72133ED0-23A1-47BB-B811-EF87C5D188C7}.Debug-DrawingCompat|x86.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{72133ED0-23A1-47BB-B811-EF87C5D188C7}.Debug-DrawingCompat|x86.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{72133ED0-23A1-47BB-B811-EF87C5D188C7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{72133ED0-23A1-47BB-B811-EF87C5D188C7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{72133ED0-23A1-47BB-B811-EF87C5D188C7}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{72133ED0-23A1-47BB-B811-EF87C5D188C7}.Release|x86.Build.0 = Release|Any CPU\n\t\t{72133ED0-23A1-47BB-B811-EF87C5D188C7}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{72133ED0-23A1-47BB-B811-EF87C5D188C7}.Release-DrawingCompat|Any CPU.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{72133ED0-23A1-47BB-B811-EF87C5D188C7}.Release-DrawingCompat|x86.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{72133ED0-23A1-47BB-B811-EF87C5D188C7}.Release-DrawingCompat|x86.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{882E5F2E-4F0E-419E-9170-AD72B200FC06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{882E5F2E-4F0E-419E-9170-AD72B200FC06}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{882E5F2E-4F0E-419E-9170-AD72B200FC06}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{882E5F2E-4F0E-419E-9170-AD72B200FC06}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{882E5F2E-4F0E-419E-9170-AD72B200FC06}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{882E5F2E-4F0E-419E-9170-AD72B200FC06}.Debug-DrawingCompat|Any CPU.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{882E5F2E-4F0E-419E-9170-AD72B200FC06}.Debug-DrawingCompat|x86.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{882E5F2E-4F0E-419E-9170-AD72B200FC06}.Debug-DrawingCompat|x86.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{882E5F2E-4F0E-419E-9170-AD72B200FC06}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{882E5F2E-4F0E-419E-9170-AD72B200FC06}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{882E5F2E-4F0E-419E-9170-AD72B200FC06}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{882E5F2E-4F0E-419E-9170-AD72B200FC06}.Release|x86.Build.0 = Release|Any CPU\n\t\t{882E5F2E-4F0E-419E-9170-AD72B200FC06}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{882E5F2E-4F0E-419E-9170-AD72B200FC06}.Release-DrawingCompat|Any CPU.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{882E5F2E-4F0E-419E-9170-AD72B200FC06}.Release-DrawingCompat|x86.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{882E5F2E-4F0E-419E-9170-AD72B200FC06}.Release-DrawingCompat|x86.Build.0 = Release-DrawingCompat|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {A5A38F5A-235D-416F-8977-03690280A98E}\n\tEndGlobalSection\n\tGlobalSection(MonoDevelopProperties) = preSolution\n\t\tStartupItem = RdlGtk3\\RdlGtk3.csproj\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "MajorsilenceReporting.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.2.32630.192\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Majorsilence.Reporting.DataProviders\", \"DataProviders\\Majorsilence.Reporting.DataProviders.csproj\", \"{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"LibRdlWpfViewer\", \"LibRdlWpfViewer\\LibRdlWpfViewer.csproj\", \"{DA84B318-4210-4C7C-9A47-3A9356BC8D83}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RdlCmd\", \"RdlCmd\\RdlCmd.csproj\", \"{3456CD50-7D14-4AA6-AAA1-AC3760BBC0F3}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Majorsilence.Reporting.RdlCri\", \"RdlCri\\Majorsilence.Reporting.RdlCri.csproj\", \"{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Majorsilence.Reporting.ReportDesigner\", \"RdlDesign\\Majorsilence.Reporting.ReportDesigner.csproj\", \"{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RdlDesktop\", \"RdlDesktop\\RdlDesktop.csproj\", \"{D605B305-BB81-441C-B909-DEA35F33C8BF}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Majorsilence.Reporting.RdlEngine\", \"RdlEngine\\Majorsilence.Reporting.RdlEngine.csproj\", \"{C97E91F4-B310-44E2-9B6C-96775395722D}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RdlMapFile\", \"RdlMapFile\\RdlMapFile.csproj\", \"{342676DA-226D-437F-AAC2-2FEA68EBC466}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RdlViewer\", \"RdlViewer\\RdlViewer.csproj\", \"{D99145B1-CB6C-41F5-BA86-723325145FB5}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RdlReader\", \"RdlReader\\RdlReader.csproj\", \"{2412E381-D3D9-4AB7-A2FA-02D9786260F0}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"ReportTests\", \"ReportTests\\ReportTests.csproj\", \"{BD5BF1A8-E24F-4F6D-91D7-074CEEF727EC}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"EncryptionProvider\", \"EncryptionProvider\\EncryptionProvider.csproj\", \"{83D67C75-CE23-4141-8BFE-3AC52F53310E}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RdlViewer.Tests\", \"RdlViewer.Tests\\RdlViewer.Tests.csproj\", \"{A46C8EBE-29FC-4EEB-99E9-6011FA2D67EE}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Majorsilence.Reporting.RdlGtk3\", \"RdlGtk3\\Majorsilence.Reporting.RdlGtk3.csproj\", \"{3B8B6B87-E6DE-441C-8BDE-8F3D6C838DEA}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RdlGtk3Viewer\", \"RdlGtk3Viewer\\RdlGtk3Viewer.csproj\", \"{669630A4-BBA7-4374-9AD1-FF9D08335D75}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Majorsilence.Reporting.RdlCreator\", \"RdlCreator\\Majorsilence.Reporting.RdlCreator.csproj\", \"{40D5AB98-0213-4E2D-95E0-596F64BAA7FD}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RdlCreator.Tests\", \"RdlCreator.Tests\\RdlCreator.Tests.csproj\", \"{9AC3B442-07B6-456D-B24A-80745EDC68DC}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Majorsilence.Reporting.RdlAsp.Mvc\", \"RdlAsp.Mvc\\Majorsilence.Reporting.RdlAsp.Mvc.csproj\", \"{8102B877-5D48-4D5B-AC8F-1FABFF56B69A}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Majorsilence.Drawing.Common\", \"Majorsilence.Drawing.Common\\Majorsilence.Drawing.Common.csproj\", \"{C4B7CC6B-FE22-48FA-B414-F96DB028F80F}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{9E2BB838-E207-4A55-B8E1-2C09C9CD32FE}\"\n\tProjectSection(SolutionItems) = preProject\n\t\t.editorconfig = .editorconfig\n\tEndProjectSection\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ReportDesigner\", \"ReportDesigner\\ReportDesigner.csproj\", \"{33525C95-7190-40FD-81E8-FCA6B1FC941F}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Tests\", \"Tests\", \"{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Majorsilence.Reporting.WebExample\", \"Majorsilence.Reporting.WebExample\\Majorsilence.Reporting.WebExample.csproj\", \"{3EED618B-59E1-4743-8701-CEBE8E636942}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Examples\", \"Examples\", \"{4FD35435-4E05-40B9-9C54-628ED02E4FE8}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Windows\", \"Windows\", \"{3450A307-F504-4A90-BB92-DCCAF16EFD45}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Majorsilence.Reporting.Benchmarks\", \"Majorsilence.Reporting.Benchmarks\\Majorsilence.Reporting.Benchmarks.csproj\", \"{3540161E-2C8A-49B5-A56F-0DA3841570E0}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ReportTests.Windows\", \"ReportTests.Windows\\ReportTests.Windows.csproj\", \"{04C73D18-6758-4AE1-877F-6A32B243F027}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Majorsilence.WinformUtils\", \"Majorsilence.WinformUtils\\Majorsilence.WinformUtils.csproj\", \"{FD0687EF-1A0B-4992-9A17-1B8ABDD1A2D2}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Majorsilence.Reporting.UI\", \"Majorsilence.Reporting.UI\\Majorsilence.Reporting.UI.csproj\", \"{A22B9EA3-4955-432E-8CBE-972F550E1753}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Majorsilence.Reporting.UI.RdlAvalonia\", \"Majorsilence.Reporting.UI.RdlAvalonia\\Majorsilence.Reporting.UI.RdlAvalonia.csproj\", \"{C228EFD4-D09C-4233-A534-132C98B38B57}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug-DrawingCompat|Any CPU = Debug-DrawingCompat|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease-DrawingCompat|Any CPU = Release-DrawingCompat|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug-DrawingCompat|Any CPU.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release-DrawingCompat|Any CPU.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{DA84B318-4210-4C7C-9A47-3A9356BC8D83}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{3456CD50-7D14-4AA6-AAA1-AC3760BBC0F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3456CD50-7D14-4AA6-AAA1-AC3760BBC0F3}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3456CD50-7D14-4AA6-AAA1-AC3760BBC0F3}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{3456CD50-7D14-4AA6-AAA1-AC3760BBC0F3}.Debug-DrawingCompat|Any CPU.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{3456CD50-7D14-4AA6-AAA1-AC3760BBC0F3}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3456CD50-7D14-4AA6-AAA1-AC3760BBC0F3}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3456CD50-7D14-4AA6-AAA1-AC3760BBC0F3}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{3456CD50-7D14-4AA6-AAA1-AC3760BBC0F3}.Release-DrawingCompat|Any CPU.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug-DrawingCompat|Any CPU.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release-DrawingCompat|Any CPU.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release-DrawingCompat|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D605B305-BB81-441C-B909-DEA35F33C8BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D605B305-BB81-441C-B909-DEA35F33C8BF}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D605B305-BB81-441C-B909-DEA35F33C8BF}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{D605B305-BB81-441C-B909-DEA35F33C8BF}.Debug-DrawingCompat|Any CPU.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{D605B305-BB81-441C-B909-DEA35F33C8BF}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D605B305-BB81-441C-B909-DEA35F33C8BF}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D605B305-BB81-441C-B909-DEA35F33C8BF}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{D605B305-BB81-441C-B909-DEA35F33C8BF}.Release-DrawingCompat|Any CPU.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug-DrawingCompat|Any CPU.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release-DrawingCompat|Any CPU.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{342676DA-226D-437F-AAC2-2FEA68EBC466}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{342676DA-226D-437F-AAC2-2FEA68EBC466}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{342676DA-226D-437F-AAC2-2FEA68EBC466}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{342676DA-226D-437F-AAC2-2FEA68EBC466}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{342676DA-226D-437F-AAC2-2FEA68EBC466}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{342676DA-226D-437F-AAC2-2FEA68EBC466}.Release-DrawingCompat|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release-DrawingCompat|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{2412E381-D3D9-4AB7-A2FA-02D9786260F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{2412E381-D3D9-4AB7-A2FA-02D9786260F0}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{2412E381-D3D9-4AB7-A2FA-02D9786260F0}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{2412E381-D3D9-4AB7-A2FA-02D9786260F0}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{2412E381-D3D9-4AB7-A2FA-02D9786260F0}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{2412E381-D3D9-4AB7-A2FA-02D9786260F0}.Release-DrawingCompat|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{BD5BF1A8-E24F-4F6D-91D7-074CEEF727EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{BD5BF1A8-E24F-4F6D-91D7-074CEEF727EC}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{BD5BF1A8-E24F-4F6D-91D7-074CEEF727EC}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{BD5BF1A8-E24F-4F6D-91D7-074CEEF727EC}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{BD5BF1A8-E24F-4F6D-91D7-074CEEF727EC}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{BD5BF1A8-E24F-4F6D-91D7-074CEEF727EC}.Debug-DrawingCompat|Any CPU.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{BD5BF1A8-E24F-4F6D-91D7-074CEEF727EC}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{BD5BF1A8-E24F-4F6D-91D7-074CEEF727EC}.Release-DrawingCompat|Any CPU.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{83D67C75-CE23-4141-8BFE-3AC52F53310E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{83D67C75-CE23-4141-8BFE-3AC52F53310E}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{83D67C75-CE23-4141-8BFE-3AC52F53310E}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{83D67C75-CE23-4141-8BFE-3AC52F53310E}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{83D67C75-CE23-4141-8BFE-3AC52F53310E}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{83D67C75-CE23-4141-8BFE-3AC52F53310E}.Release-DrawingCompat|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A46C8EBE-29FC-4EEB-99E9-6011FA2D67EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A46C8EBE-29FC-4EEB-99E9-6011FA2D67EE}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A46C8EBE-29FC-4EEB-99E9-6011FA2D67EE}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{A46C8EBE-29FC-4EEB-99E9-6011FA2D67EE}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A46C8EBE-29FC-4EEB-99E9-6011FA2D67EE}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{A46C8EBE-29FC-4EEB-99E9-6011FA2D67EE}.Release-DrawingCompat|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3B8B6B87-E6DE-441C-8BDE-8F3D6C838DEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3B8B6B87-E6DE-441C-8BDE-8F3D6C838DEA}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3B8B6B87-E6DE-441C-8BDE-8F3D6C838DEA}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{3B8B6B87-E6DE-441C-8BDE-8F3D6C838DEA}.Debug-DrawingCompat|Any CPU.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{3B8B6B87-E6DE-441C-8BDE-8F3D6C838DEA}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3B8B6B87-E6DE-441C-8BDE-8F3D6C838DEA}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3B8B6B87-E6DE-441C-8BDE-8F3D6C838DEA}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{3B8B6B87-E6DE-441C-8BDE-8F3D6C838DEA}.Release-DrawingCompat|Any CPU.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{669630A4-BBA7-4374-9AD1-FF9D08335D75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{669630A4-BBA7-4374-9AD1-FF9D08335D75}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{669630A4-BBA7-4374-9AD1-FF9D08335D75}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{669630A4-BBA7-4374-9AD1-FF9D08335D75}.Debug-DrawingCompat|Any CPU.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{669630A4-BBA7-4374-9AD1-FF9D08335D75}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{669630A4-BBA7-4374-9AD1-FF9D08335D75}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{669630A4-BBA7-4374-9AD1-FF9D08335D75}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{669630A4-BBA7-4374-9AD1-FF9D08335D75}.Release-DrawingCompat|Any CPU.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{40D5AB98-0213-4E2D-95E0-596F64BAA7FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{40D5AB98-0213-4E2D-95E0-596F64BAA7FD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{40D5AB98-0213-4E2D-95E0-596F64BAA7FD}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{40D5AB98-0213-4E2D-95E0-596F64BAA7FD}.Debug-DrawingCompat|Any CPU.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{40D5AB98-0213-4E2D-95E0-596F64BAA7FD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{40D5AB98-0213-4E2D-95E0-596F64BAA7FD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{40D5AB98-0213-4E2D-95E0-596F64BAA7FD}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{40D5AB98-0213-4E2D-95E0-596F64BAA7FD}.Release-DrawingCompat|Any CPU.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{9AC3B442-07B6-456D-B24A-80745EDC68DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9AC3B442-07B6-456D-B24A-80745EDC68DC}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9AC3B442-07B6-456D-B24A-80745EDC68DC}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{9AC3B442-07B6-456D-B24A-80745EDC68DC}.Debug-DrawingCompat|Any CPU.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{9AC3B442-07B6-456D-B24A-80745EDC68DC}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9AC3B442-07B6-456D-B24A-80745EDC68DC}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{9AC3B442-07B6-456D-B24A-80745EDC68DC}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{9AC3B442-07B6-456D-B24A-80745EDC68DC}.Release-DrawingCompat|Any CPU.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{8102B877-5D48-4D5B-AC8F-1FABFF56B69A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8102B877-5D48-4D5B-AC8F-1FABFF56B69A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8102B877-5D48-4D5B-AC8F-1FABFF56B69A}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{8102B877-5D48-4D5B-AC8F-1FABFF56B69A}.Debug-DrawingCompat|Any CPU.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{8102B877-5D48-4D5B-AC8F-1FABFF56B69A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8102B877-5D48-4D5B-AC8F-1FABFF56B69A}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8102B877-5D48-4D5B-AC8F-1FABFF56B69A}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{8102B877-5D48-4D5B-AC8F-1FABFF56B69A}.Release-DrawingCompat|Any CPU.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{C4B7CC6B-FE22-48FA-B414-F96DB028F80F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C4B7CC6B-FE22-48FA-B414-F96DB028F80F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C4B7CC6B-FE22-48FA-B414-F96DB028F80F}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{C4B7CC6B-FE22-48FA-B414-F96DB028F80F}.Debug-DrawingCompat|Any CPU.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{C4B7CC6B-FE22-48FA-B414-F96DB028F80F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C4B7CC6B-FE22-48FA-B414-F96DB028F80F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C4B7CC6B-FE22-48FA-B414-F96DB028F80F}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{C4B7CC6B-FE22-48FA-B414-F96DB028F80F}.Release-DrawingCompat|Any CPU.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{33525C95-7190-40FD-81E8-FCA6B1FC941F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{33525C95-7190-40FD-81E8-FCA6B1FC941F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{33525C95-7190-40FD-81E8-FCA6B1FC941F}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{33525C95-7190-40FD-81E8-FCA6B1FC941F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{33525C95-7190-40FD-81E8-FCA6B1FC941F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{33525C95-7190-40FD-81E8-FCA6B1FC941F}.Release-DrawingCompat|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3EED618B-59E1-4743-8701-CEBE8E636942}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3EED618B-59E1-4743-8701-CEBE8E636942}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3EED618B-59E1-4743-8701-CEBE8E636942}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3EED618B-59E1-4743-8701-CEBE8E636942}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3EED618B-59E1-4743-8701-CEBE8E636942}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug-DrawingCompat|Any CPU\n\t\t{3EED618B-59E1-4743-8701-CEBE8E636942}.Debug-DrawingCompat|Any CPU.Build.0 = Debug-DrawingCompat|Any CPU\n\t\t{3EED618B-59E1-4743-8701-CEBE8E636942}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{3EED618B-59E1-4743-8701-CEBE8E636942}.Release-DrawingCompat|Any CPU.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{3540161E-2C8A-49B5-A56F-0DA3841570E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3540161E-2C8A-49B5-A56F-0DA3841570E0}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3540161E-2C8A-49B5-A56F-0DA3841570E0}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3540161E-2C8A-49B5-A56F-0DA3841570E0}.Debug-DrawingCompat|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3540161E-2C8A-49B5-A56F-0DA3841570E0}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3540161E-2C8A-49B5-A56F-0DA3841570E0}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3540161E-2C8A-49B5-A56F-0DA3841570E0}.Release-DrawingCompat|Any CPU.ActiveCfg = Release-DrawingCompat|Any CPU\n\t\t{3540161E-2C8A-49B5-A56F-0DA3841570E0}.Release-DrawingCompat|Any CPU.Build.0 = Release-DrawingCompat|Any CPU\n\t\t{04C73D18-6758-4AE1-877F-6A32B243F027}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{04C73D18-6758-4AE1-877F-6A32B243F027}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{04C73D18-6758-4AE1-877F-6A32B243F027}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{04C73D18-6758-4AE1-877F-6A32B243F027}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{04C73D18-6758-4AE1-877F-6A32B243F027}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{04C73D18-6758-4AE1-877F-6A32B243F027}.Release-DrawingCompat|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{FD0687EF-1A0B-4992-9A17-1B8ABDD1A2D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{FD0687EF-1A0B-4992-9A17-1B8ABDD1A2D2}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{FD0687EF-1A0B-4992-9A17-1B8ABDD1A2D2}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{FD0687EF-1A0B-4992-9A17-1B8ABDD1A2D2}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{FD0687EF-1A0B-4992-9A17-1B8ABDD1A2D2}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{FD0687EF-1A0B-4992-9A17-1B8ABDD1A2D2}.Release-DrawingCompat|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A22B9EA3-4955-432E-8CBE-972F550E1753}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A22B9EA3-4955-432E-8CBE-972F550E1753}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A22B9EA3-4955-432E-8CBE-972F550E1753}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A22B9EA3-4955-432E-8CBE-972F550E1753}.Debug-DrawingCompat|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A22B9EA3-4955-432E-8CBE-972F550E1753}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A22B9EA3-4955-432E-8CBE-972F550E1753}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{A22B9EA3-4955-432E-8CBE-972F550E1753}.Release-DrawingCompat|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A22B9EA3-4955-432E-8CBE-972F550E1753}.Release-DrawingCompat|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C228EFD4-D09C-4233-A534-132C98B38B57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C228EFD4-D09C-4233-A534-132C98B38B57}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C228EFD4-D09C-4233-A534-132C98B38B57}.Debug-DrawingCompat|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C228EFD4-D09C-4233-A534-132C98B38B57}.Debug-DrawingCompat|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C228EFD4-D09C-4233-A534-132C98B38B57}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C228EFD4-D09C-4233-A534-132C98B38B57}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C228EFD4-D09C-4233-A534-132C98B38B57}.Release-DrawingCompat|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C228EFD4-D09C-4233-A534-132C98B38B57}.Release-DrawingCompat|Any CPU.Build.0 = Debug|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{BD5BF1A8-E24F-4F6D-91D7-074CEEF727EC} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}\n\t\t{A46C8EBE-29FC-4EEB-99E9-6011FA2D67EE} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}\n\t\t{9AC3B442-07B6-456D-B24A-80745EDC68DC} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}\n\t\t{3EED618B-59E1-4743-8701-CEBE8E636942} = {4FD35435-4E05-40B9-9C54-628ED02E4FE8}\n\t\t{DA84B318-4210-4C7C-9A47-3A9356BC8D83} = {3450A307-F504-4A90-BB92-DCCAF16EFD45}\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7} = {3450A307-F504-4A90-BB92-DCCAF16EFD45}\n\t\t{342676DA-226D-437F-AAC2-2FEA68EBC466} = {3450A307-F504-4A90-BB92-DCCAF16EFD45}\n\t\t{2412E381-D3D9-4AB7-A2FA-02D9786260F0} = {3450A307-F504-4A90-BB92-DCCAF16EFD45}\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5} = {3450A307-F504-4A90-BB92-DCCAF16EFD45}\n\t\t{33525C95-7190-40FD-81E8-FCA6B1FC941F} = {3450A307-F504-4A90-BB92-DCCAF16EFD45}\n\t\t{83D67C75-CE23-4141-8BFE-3AC52F53310E} = {3450A307-F504-4A90-BB92-DCCAF16EFD45}\n\t\t{3540161E-2C8A-49B5-A56F-0DA3841570E0} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}\n\t\t{04C73D18-6758-4AE1-877F-6A32B243F027} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}\n\t\t{FD0687EF-1A0B-4992-9A17-1B8ABDD1A2D2} = {3450A307-F504-4A90-BB92-DCCAF16EFD45}\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {926406B1-6334-4091-963D-93DEB6837CCB}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "OracleSp/AssemblyInfo.cs",
    "content": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Security;\n\n//\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n//\n[assembly: AssemblyTitle(\"RDL Data Providers\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"fyiReporting Software, LLC\")]\n[assembly: AssemblyProduct(\"RDL Project\")]\n[assembly: AssemblyCopyright(\"Copyright (C) 2004-2008  fyiReporting Software, LLC\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\t\t\n\n//\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n\n[assembly: AssemblyVersion(\"3.0.0\")]\n[assembly: AllowPartiallyTrustedCallers]\n\n//\n// In order to sign your assembly you must specify a key to use. Refer to the \n// Microsoft .NET Framework documentation for more information on assembly signing.\n//\n// Use the attributes below to control which key is used for signing. \n//\n// Notes: \n//   (*) If no key is specified, the assembly is not signed.\n//   (*) KeyName refers to a key that has been installed in the Crypto Service\n//       Provider (CSP) on your machine. KeyFile refers to a file which contains\n//       a key.\n//   (*) If the KeyFile and the KeyName values are both specified, the \n//       following processing occurs:\n//       (1) If the KeyName can be found in the CSP, that key is used.\n//       (2) If the KeyName does not exist and the KeyFile does exist, the key \n//           in the KeyFile is installed into the CSP and used.\n//   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.\n//       When specifying the KeyFile, the location of the KeyFile should be\n//       relative to the project output directory which is\n//       %Project Directory%\\obj\\<configuration>. For example, if your KeyFile is\n//       located in the project directory, you would specify the AssemblyKeyFile \n//       attribute as [assembly: AssemblyKeyFile(\"..\\\\..\\\\mykey.snk\")]\n//   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework\n//       documentation for more information on this.\n//\n[assembly: AssemblyDelaySign(false)]\n[assembly: AssemblyKeyName(\"\")]\n"
  },
  {
    "path": "OracleSp/DataParameter.cs",
    "content": "/* ====================================================================\n   Copyright (C) 2004-2008  fyiReporting Software, LLC\n   Copyright (C) 2011  Peter Gill <peter@majorsilence.com>\n\n   This file is part of the fyiReporting RDL project.\n\t\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n\n   For additional information, email info@fyireporting.com or visit\n   the website www.fyiReporting.com.\n*/\nusing System;\nusing System.Xml;\nusing System.Data;\n\nnamespace fyiReporting.OracleSp\n{\n\t/// <summary>\n\t/// BaseDataParameter is the base class for handling parameters\n\t/// </summary>\n\tpublic class DataParameter : IDbDataParameter\n\t{\n\t\tstring _Name;\t\t\t// parameter name\n\t\tobject _Value;\t\t\t// parameter value\n\n\t\tpublic DataParameter()\n\t\t{\n\t\t}\n\n\n\t\t#region IDbDataParameter Members\n\n\t\tpublic byte Precision\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Precision setting is not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic byte Scale\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Scale setting is not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic int Size\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Size setting is not implemented\");\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDataParameter Members\n\n\t\tpublic System.Data.ParameterDirection Direction\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn System.Data.ParameterDirection.Input;\t// only support input parameter\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tif (value != ParameterDirection.Input)\n\t\t\t\t\tthrow new Exception(\"Parameter Direction must be Input\");\n\t\t\t}\n\t\t}\n\n\t\tpublic System.Data.DbType DbType\n\t\t{\n\t\t\tget\n\t\t\t{\t\t\t  \n\t\t\t\treturn DbType.String;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tif (value != DbType.String)\n\t\t\t\t\tthrow new Exception(\"DbType must always be String\");\n\t\t\t}\n\t\t}\n\n\t\tpublic object Value\n\t\t{\n\t\t\tget {return _Value;}\n            set { _Value = value; }\n\t\t}\n\n\t\tpublic bool IsNullable\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tpublic System.Data.DataRowVersion SourceVersion\n\t\t{\n\t\t\tget\n\t\t\t{\t\t\t\t\t\t\t\t\t   \n\t\t\t\treturn DataRowVersion.Current;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Setting DataRowVersion is not implemented.\");\n\t\t\t}\n\t\t}\n\n\t\tpublic string ParameterName\n\t\t{\n\t\t\tget {return _Name;}\n\t\t\tset {_Name = value;}\n\t\t}\n\n\t\tpublic string SourceColumn\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Setting SourceColumn is not implemented.\");\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "OracleSp/DataParameterCollection.cs",
    "content": "/* ====================================================================\n   Copyright (C) 2004-2008  fyiReporting Software, LLC\n   Copyright (C) 2011  Peter Gill <peter@majorsilence.com>\n\n   This file is part of the fyiReporting RDL project.\n\t\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n\n   For additional information, email info@fyireporting.com or visit\n   the website www.fyiReporting.com.\n*/\nusing System;\nusing System.Collections;\nusing System.Data;\n\nnamespace fyiReporting.OracleSp\n{\n\t/// <summary>\n\t/// DataParameterCollection\n\t/// </summary>\n\tpublic class DataParameterCollection : IDataParameterCollection\n\t{\n\t\tArrayList _List;\t\t// parameter collection\n\n\t\tpublic DataParameterCollection()\n\t\t{\n\t\t\t_List = new ArrayList();\n\t\t}\n\t\t#region IDataParameterCollection Members\n\n\t\tpublic object this[string parameterName]\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tint index = IndexOf(parameterName);\n\t\t\t\tif (index < 0)\n\t\t\t\t\treturn null;\n\t\t\t\treturn _List[index];\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tIDbDataParameter dp = value as IDbDataParameter;\n\t\t\t\tif (dp == null)\n\t\t\t\t\tthrow new ArgumentException(\"Object must be an IDbDataParameter\");\n\n\t\t\t\t_List[this.IndexOf(parameterName)] = dp;\t\t\t\t\n\t\t\t}\n\t\t}\n\n\t\tpublic void RemoveAt(string parameterName)\n\t\t{\n\t\t\t_List.RemoveAt(this.IndexOf(parameterName));\n\t\t}\n\n\t\tpublic bool Contains(string parameterName)\n\t\t{\n\t\t\treturn IndexOf(parameterName) < 0? false: true;\n\t\t}\n\n\t\tpublic int IndexOf(string parameterName)\n\t\t{\n\t\t\tint i=0;\n\t\t\tforeach (IDbDataParameter dp in _List)\n\t\t\t{\n\t\t\t\tif (dp.ParameterName == parameterName)\n\t\t\t\t\treturn i;\n\t\t\t\ti++;\n\t\t\t}\n\t\t\treturn -1;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IList Members\n\n\t\tpublic bool IsReadOnly\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _List.IsReadOnly;\n\t\t\t}\n\t\t}\n\n\t\tobject System.Collections.IList.this[int index]\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _List[index];\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t_List[index] = value;\n\t\t\t}\n\t\t}\n\n\t\tvoid System.Collections.IList.RemoveAt(int index)\n\t\t{\n\t\t\t_List.RemoveAt(index);\n\t\t}\n\n\t\tpublic void Insert(int index, object value)\n\t\t{\n\t\t\t_List.Insert(index, value);\n\t\t}\n\n\t\tpublic void Remove(object value)\n\t\t{\n\t\t\t_List.Remove(value);\n\t\t}\n\n\t\tbool System.Collections.IList.Contains(object value)\n\t\t{\n\t\t\treturn _List.Contains(value);\n\t\t}\n\n\t\tpublic void Clear()\n\t\t{\n\t\t\t_List.Clear();\n\t\t}\n\n\t\tint System.Collections.IList.IndexOf(object value)\n\t\t{\n\t\t\treturn _List.IndexOf(value);\n\t\t}\n\n\t\tpublic int Add(object value)\n\t\t{\n\t\t\treturn _List.Add(value);\n\t\t}\n\n\t\tpublic bool IsFixedSize\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _List.IsFixedSize;\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region ICollection Members\n\n\t\tpublic bool IsSynchronized\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _List.IsSynchronized;\n\t\t\t}\n\t\t}\n\n\t\tpublic int Count\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _List.Count;\n\t\t\t}\n\t\t}\n\n\t\tpublic void CopyTo(Array array, int index)\n\t\t{\n\t\t\t_List.CopyTo(array, index);\n\t\t}\n\n\t\tpublic object SyncRoot\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _List.SyncRoot;\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IEnumerable Members\n\n\t\tpublic System.Collections.IEnumerator GetEnumerator()\n\t\t{\n\t\t\treturn _List.GetEnumerator();\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "OracleSp/OracleSP.csproj",
    "content": "﻿<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"3.5\">\n  <PropertyGroup>\n    <ProjectType>Local</ProjectType>\n    <ProductVersion>9.0.30729</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}</ProjectGuid>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ApplicationIcon>\n    </ApplicationIcon>\n    <AssemblyKeyContainerName>\n    </AssemblyKeyContainerName>\n    <AssemblyName>OracleSp</AssemblyName>\n    <AssemblyOriginatorKeyFile>\n    </AssemblyOriginatorKeyFile>\n    <DefaultClientScript>JScript</DefaultClientScript>\n    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>\n    <DefaultTargetSchema>IE50</DefaultTargetSchema>\n    <DelaySign>false</DelaySign>\n    <OutputType>Library</OutputType>\n    <RootNamespace>fyiReporting.OracleSp</RootNamespace>\n    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>\n    <StartupObject>\n    </StartupObject>\n    <FileUpgradeFlags>\n    </FileUpgradeFlags>\n    <UpgradeBackupLocation>\n    </UpgradeBackupLocation>\n    <SignAssembly>false</SignAssembly>\n    <OldToolsVersion>2.0</OldToolsVersion>\n    <PublishUrl>publish\\</PublishUrl>\n    <Install>true</Install>\n    <InstallFrom>Disk</InstallFrom>\n    <UpdateEnabled>false</UpdateEnabled>\n    <UpdateMode>Foreground</UpdateMode>\n    <UpdateInterval>7</UpdateInterval>\n    <UpdateIntervalUnits>Days</UpdateIntervalUnits>\n    <UpdatePeriodically>false</UpdatePeriodically>\n    <UpdateRequired>false</UpdateRequired>\n    <MapFileExtensions>true</MapFileExtensions>\n    <ApplicationRevision>0</ApplicationRevision>\n    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\n    <IsWebBootstrapper>false</IsWebBootstrapper>\n    <UseApplicationTrust>false</UseApplicationTrust>\n    <BootstrapperEnabled>true</BootstrapperEnabled>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\n    <BaseAddress>285212672</BaseAddress>\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\n    <ConfigurationOverrideFile>\n    </ConfigurationOverrideFile>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <DocumentationFile>\n    </DocumentationFile>\n    <DebugSymbols>true</DebugSymbols>\n    <FileAlignment>4096</FileAlignment>\n    <NoStdLib>false</NoStdLib>\n    <NoWarn>\n    </NoWarn>\n    <Optimize>false</Optimize>\n    <RegisterForComInterop>false</RegisterForComInterop>\n    <RemoveIntegerChecks>false</RemoveIntegerChecks>\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\n    <WarningLevel>4</WarningLevel>\n    <DebugType>full</DebugType>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <OutputPath>bin\\Release\\</OutputPath>\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\n    <BaseAddress>285212672</BaseAddress>\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\n    <ConfigurationOverrideFile>\n    </ConfigurationOverrideFile>\n    <DefineConstants>TRACE</DefineConstants>\n    <DocumentationFile>\n    </DocumentationFile>\n    <DebugSymbols>false</DebugSymbols>\n    <FileAlignment>4096</FileAlignment>\n    <NoStdLib>false</NoStdLib>\n    <NoWarn>\n    </NoWarn>\n    <Optimize>true</Optimize>\n    <RegisterForComInterop>false</RegisterForComInterop>\n    <RemoveIntegerChecks>false</RemoveIntegerChecks>\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\n    <WarningLevel>4</WarningLevel>\n    <DebugType>none</DebugType>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x64' \">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x64\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <BaseAddress>285212672</BaseAddress>\n    <FileAlignment>4096</FileAlignment>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x64' \">\n    <OutputPath>bin\\x64\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <BaseAddress>285212672</BaseAddress>\n    <Optimize>true</Optimize>\n    <FileAlignment>4096</FileAlignment>\n    <PlatformTarget>x64</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <BaseAddress>285212672</BaseAddress>\n    <FileAlignment>4096</FileAlignment>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <BaseAddress>285212672</BaseAddress>\n    <Optimize>true</Optimize>\n    <FileAlignment>4096</FileAlignment>\n    <PlatformTarget>x86</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Oracle.DataAccess, Version=10.2.0.100, Culture=neutral, PublicKeyToken=89b483f429c47342\" />\n    <Reference Include=\"System\">\n      <Name>System</Name>\n    </Reference>\n    <Reference Include=\"System.Data\">\n      <Name>System.Data</Name>\n    </Reference>\n    <Reference Include=\"System.Web.Services\">\n      <Name>System.Web.Services</Name>\n    </Reference>\n    <Reference Include=\"System.Xml\">\n      <Name>System.XML</Name>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"AssemblyInfo.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"DataParameter.cs\" />\n    <Compile Include=\"DataParameterCollection.cs\" />\n    <Compile Include=\"OracleSpCommand.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"OracleSpConnection.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework Client Profile</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.2.0\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>\n      <Install>true</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.0\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <PropertyGroup>\n    <PreBuildEvent>\n    </PreBuildEvent>\n    <PostBuildEvent>\n    </PostBuildEvent>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "OracleSp/OracleSp.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 10.00\n# Visual Studio 2008\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OracleSP\", \"OracleSP.csproj\", \"{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x64.Build.0 = Debug|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.Build.0 = Debug|x86\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x64.ActiveCfg = Release|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x64.Build.0 = Release|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.ActiveCfg = Release|x86\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.Build.0 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "OracleSp/OracleSpCommand.cs",
    "content": "/* ====================================================================\n   Copyright (C) 2004-2008  fyiReporting Software, LLC\n   Copyright (C) 2011  Peter Gill <peter@majorsilence.com>\n\n   This file is part of the fyiReporting RDL project.\n\t\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n\n   For additional information, email info@fyireporting.com or visit\n   the website www.fyiReporting.com.\n*/\nusing System;\nusing System.Xml;\nusing System.Data;\nusing System.Collections;\nusing System.Collections.Generic;\nusing Oracle.DataAccess.Client;\n\nnamespace fyiReporting.OracleSp\n{\n\t/// <summary>\n\t/// OracleSpCommand allows specifying the command for the web log.\n\t/// </summary>\n\tpublic class OracleSpCommand : IDbCommand\n\t{\n\t\tOracleSpConnection _oc;\t\t// connection we're running under\n        OracleCommand _cmd;\n        DataParameterCollection _Parameters = new DataParameterCollection();\n\n\t\tpublic OracleSpCommand(OracleSpConnection conn)\n\t\t{\n\t\t\t_oc = conn;\n            _cmd = _oc.InternalConnection.CreateCommand();\n\t\t}\n\n\t\t#region IDbCommand Members\n\n\t\tpublic void Cancel()\n\t\t{\n            _cmd.Cancel();\n\t\t}\n\n\t\tpublic void Prepare()\n\t\t{\n            _cmd.Prepare();\n\t\t}\n\n\t\tpublic System.Data.CommandType CommandType\n\t\t{\n\t\t\tget\n\t\t\t{\n                return _cmd.CommandType;\n\t\t\t}\n\t\t\tset\n            {\n                _cmd.CommandType = value;\n            }     \n\t\t}\n\n\t\tpublic IDataReader ExecuteReader(System.Data.CommandBehavior behavior)\n\t\t{\n\t\t\tif (!(behavior == CommandBehavior.SingleResult || \n\t\t\t\t  behavior == CommandBehavior.SchemaOnly))\n\t\t\t\tthrow new ArgumentException(\"ExecuteReader supports SingleResult and SchemaOnly only.\");\n\n            foreach (DataParameter dp in _Parameters)\n            {\n                OracleParameter op = _cmd.CreateParameter();\n                op.ParameterName = dp.ParameterName;\n                if (_cmd.CommandType == CommandType.StoredProcedure &&\n                    dp.ParameterName.ToLower().Contains(\"cursor\"))\n                {\n                    op.OracleDbType = OracleDbType.RefCursor;\n                    op.Direction = ParameterDirection.Output;\n                }\n                else\n                {\n                    op.Value = dp.Value;\n                }\n                _cmd.Parameters.Add(op);\n            }\n\n            return _cmd.ExecuteReader(behavior);\n\t\t}\n\n\t\tIDataReader System.Data.IDbCommand.ExecuteReader()\n\t\t{\n\t\t\treturn ExecuteReader(System.Data.CommandBehavior.SingleResult);\n\t\t}\n\n\t\tpublic object ExecuteScalar()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ExecuteScalar not implemented\");\n\t\t}\n\n\t\tpublic int ExecuteNonQuery()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ExecuteNonQuery not implemented\");\n\t\t}\n\n\t\tpublic int CommandTimeout\n\t\t{\n\t\t\tget { return _cmd.CommandTimeout; }\n\t\t\tset\t{ _cmd.CommandTimeout = value;}\n\t\t}\n\n\t\tpublic IDbDataParameter CreateParameter()\n\t\t{\n            DataParameter dp = new DataParameter();\n            return dp;\n\t\t}\n\n\t\tpublic IDbConnection Connection\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._oc;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Setting Connection not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic System.Data.UpdateRowSource UpdatedRowSource\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"UpdatedRowSource not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"UpdatedRowSource not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic string CommandText\n\t\t{\n\t\t\tget\t{\treturn _cmd.CommandText;\t}\n            set { _cmd.CommandText = value; }\n\t\t}\n\n\t\tpublic IDataParameterCollection Parameters\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Parameters;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbTransaction Transaction\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Transaction not implemented\");\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"Transaction not implemented\");\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n            _cmd.Dispose();\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "OracleSp/OracleSpConnection.cs",
    "content": "/* ====================================================================\n   Copyright (C) 2004-2008  fyiReporting Software, LLC\n   Copyright (C) 2011  Peter Gill <peter@majorsilence.com>\n\n   This file is part of the fyiReporting RDL project.\n\t\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n\n   For additional information, email info@fyireporting.com or visit\n   the website www.fyiReporting.com.\n*/\nusing System;\nusing System.Xml;\nusing System.Data;\nusing Oracle.DataAccess.Client;\n\nnamespace fyiReporting.OracleSp\n{\n\t/// <summary>\n\t/// LogConnection handles connections to web log.\n\t/// </summary>\n\tpublic class OracleSpConnection : IDbConnection\n\t{\n        OracleConnection _OC;           // the Oracle connection\n\n        public OracleSpConnection(string conn)\n\t\t{\n            _OC = new OracleConnection(conn);\n\t\t}\n\n        internal OracleConnection InternalConnection\n        {\n            get { return _OC; }\n        }\n\n\t\t#region IDbConnection Members\n\n\t\tpublic void ChangeDatabase(string databaseName)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"ChangeDatabase method not supported.\");\n\t\t}\n\n\t\tpublic IDbTransaction BeginTransaction(System.Data.IsolationLevel il)\n\t\t{\n\t\t\tthrow new NotImplementedException(\"BeginTransaction method not supported.\");\n\t\t}\n\n\t\tIDbTransaction System.Data.IDbConnection.BeginTransaction()\n\t\t{\n\t\t\tthrow new NotImplementedException(\"BeginTransaction method not supported.\");\n\t\t}\n\n\t\tpublic System.Data.ConnectionState State\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException(\"State not implemented\");\n\t\t\t}\n\t\t}\n\n\t\tpublic string ConnectionString\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _OC.ConnectionString;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n                _OC.ConnectionString = value;\n\t\t\t}\n\t\t}\n\n\t\tpublic IDbCommand CreateCommand()\n\t\t{\n\t\t\treturn new OracleSpCommand(this);\n\t\t}\n\n\t\tpublic void Open()\n\t\t{\n            _OC.Open();\n\t\t}\n\n\t\tpublic void Close()\n\t\t{\n\t\t\t_OC.Close();\n\t\t}\n\n\t\tpublic string Database\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _OC.DataSource;\t\t\t// don't really have a database\n\t\t\t}\n\t\t}\n\n\t\tpublic int ConnectionTimeout\n\t\t{\n\t\t\tget { return _OC.ConnectionTimeout;\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\t_OC.Dispose();\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlAsp.Mvc/Majorsilence.Reporting.RdlAsp.Mvc.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <ProjectType>Local</ProjectType>\n    <AssemblyKeyContainerName>\n    </AssemblyKeyContainerName>\n    <DelaySign>false</DelaySign>\n    <OutputType>Library</OutputType>\n    <RootNamespace>Majorsilence.Reporting.RdlAsp</RootNamespace>\n    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>\n    <GeneratePackageOnBuild>True</GeneratePackageOnBuild>\n    <AssemblyTitle>RDL ASP</AssemblyTitle>\n    <Description>\n    </Description>\n    <DelaySign>false</DelaySign>\n    <PackageId>Majorsilence.Reporting.RdlAsp.Mvc</PackageId>\n\t<Configurations>Debug;Release;Debug-DrawingCompat;Release-DrawingCompat</Configurations>\n\t<TargetFrameworks>net8.0;net10.0</TargetFrameworks>\n\t<WarningsAsErrors>4014</WarningsAsErrors>\n\t<Platforms>AnyCPU</Platforms>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Update=\"System.Data\">\n      <Name>System.Data</Name>\n    </Reference>\n    <Reference Update=\"System.Xml\">\n      <Name>System.XML</Name>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\RdlCri\\Majorsilence.Reporting.RdlCri.csproj\" />\n    <ProjectReference Include=\"..\\RdlEngine\\Majorsilence.Reporting.RdlEngine.csproj\" />\n  </ItemGroup>\n  <PropertyGroup />\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.AspNetCore.SystemWebAdapters\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Remove=\"ShowReport.cshtml\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "RdlAsp.Mvc/RdlListReports.cs",
    "content": "using System;\nusing System.Web;\nusing System.IO;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.Web.Caching;\nusing Majorsilence.Reporting.Rdl;\nusing Microsoft.AspNetCore.Mvc;\nusing System.Text;\n\nnamespace Majorsilence.Reporting.RdlAsp\n{\n    /// <summary>\n    /// Summary description for RdlListReports.\n    /// </summary>\n    public class RdlListReports : Controller\n    {\n        /// <summary>\n        /// RdlListReports generates a list of reports available on the server\n        /// </summary>\n        /// \n        public string Frame = null;\n        \n        private readonly Settings _settings;\n\n        public RdlListReports(Settings settings)\n        {\n            _settings = settings;\n        }\n\n        [HttpGet]\n        [Route(\"msr/RdlList\")]\n        public ContentResult Index()\n        {\n            var html = new StringBuilder();\n\n            DirectoryInfo di;\n            FileSystemInfo[] afsi;\n            try\n            {\n                di = new DirectoryInfo(_settings.ReportsFolder);\n                afsi = di.GetFileSystemInfos();\n            }\n            catch (Exception ex)\n            {\n                html.AppendLine($\"<p> No reports!  Exception={ex.Message}\");\n                return Content(html.ToString(), \"text/html\");\n            }\n\n            html.AppendLine(\"<table>\");\n            foreach (FileSystemInfo fsi in afsi)\n            {\n                if ((fsi.Attributes & FileAttributes.Directory) == 0 &&\n                    fsi.Extension.ToLower() != \".rdl\") // only show report files\n                    continue;\n\n                string name = fsi.Name.Replace(\" \", \"%20\");\n\n                if ((fsi.Attributes & FileAttributes.Directory) == 0) // handle files\n                {\n                    string target = this.Frame == null ? \"_self\" : Frame;\n                    html.AppendLine(\n                        $\"<tr><td><a href=\\\"/msr/RdlReport/ShowFile/{name}/html\\\" target={target}>{Path.GetFileNameWithoutExtension(fsi.Name)}</a></td></tr>\");\n                }\n                else // handle directories\n                    html.AppendLine($\"<tr><td><a href=\\\"{name}\\\">{fsi.Name}<a></td><td></td><td></td></tr>\");\n            }\n\n            html.AppendLine(\"</table>\");\n\n            return Content(html.ToString(), \"text/html\");\n        }\n    }\n}"
  },
  {
    "path": "RdlAsp.Mvc/RdlReport.cs",
    "content": "using System;\nusing System.IO;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.Text;\nusing Majorsilence.Reporting.Rdl;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Caching.Memory;\nusing System.Reflection;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.RdlAsp\n{\n    /// <summary>\n    /// Summary description for Class1.\n    /// </summary>\n    public class RdlReport : Controller\n    {\n        /// <summary>\n        /// RdlReport generates an HTML report from a RDL file.\n        /// </summary>\n        /// \n        private const string STATISTICS = \"statistics\";\n\n        private string _ReportFile = null;\n        private ArrayList _Errors = null;\n        private int _MaxSeverity = 0;\n        private string _CSS = null;\n        private string _JavaScript = null;\n        private string _Html = null;\n        private string _Xml = null;\n        private string _Csv = null;\n        private byte[] _Object = null;\n        private string _ParameterHtml = null;\n        private OutputPresentationType _RenderType = OutputPresentationType.HTML;\n        private string contentType = \"text/html\";\n        private string _PassPhrase = null;\n        private bool _NoShow;\n        private readonly IWebHostEnvironment _webHostEnvironment;\n        private readonly IMemoryCache _cache;\n        private readonly Settings _settings;\n\n        public RdlReport(IWebHostEnvironment webHostEnvironment, IMemoryCache cache,\n            Settings settings)\n        {\n            _webHostEnvironment = webHostEnvironment;\n            _cache = cache;\n            _settings = settings;\n        }\n\n        [HttpGet]\n        [Route(\"msr/RdlReport/ShowFile/{reportFile}/{type?}\")]\n        public async Task<IActionResult> Render(string reportFile, string type = \"html\")\n        {\n            this.RenderType = type;\n            await SetReportFile(reportFile);\n\n            var htmlContent = new StringBuilder();\n            if (_ReportFile == null)\n            {\n                this.AddError(8, \"ReportFile not specified.\");\n                return Content(\"\", contentType);\n            }\n            else if (_ReportFile == STATISTICS)\n            {\n                DoStatistics(ref htmlContent);\n                return Content(htmlContent.ToString());\n            }\n            else if (_Html != null)\n                htmlContent.AppendLine(_Html);\n            else if (_Object != null)\n            {\n                return File(_Object, contentType);\n            }\n            else // we never generated anything!\n            {\n                if (_Errors != null)\n                {\n                    htmlContent.AppendLine(\"<table>\");\n                    htmlContent.AppendLine(\"<tr>\");\n                    htmlContent.AppendLine(\"<td>\");\n                    htmlContent.AppendLine(\"Errors\");\n                    htmlContent.AppendLine(\"</td>\");\n                    htmlContent.AppendLine(\"</tr>\");\n\n                    foreach (string e in _Errors)\n                    {\n                        htmlContent.AppendLine(\"<tr>\");\n                        htmlContent.AppendLine(\"<td>\");\n                        htmlContent.AppendLine(e);\n                        htmlContent.AppendLine(\"</td>\");\n                        htmlContent.AppendLine(\"</tr>\");\n                    }\n\n                    htmlContent.AppendLine(\"</table>\");\n                }\n            }\n\n            return Content(htmlContent.ToString(), contentType);\n        }\n\n        /// <summary>\n        /// When true report won't be shown but parameters (if any) will be\n        /// </summary>\n        public bool NoShow\n        {\n            get { return _NoShow; }\n            set { _NoShow = value; }\n        }\n\n        public string RenderType\n        {\n            get\n            {\n                switch (_RenderType)\n                {\n                    case OutputPresentationType.ASPHTML:\n                    case OutputPresentationType.HTML:\n                        return \"html\";\n                    case OutputPresentationType.PDF:\n                        return \"pdf\";\n                    case OutputPresentationType.XML:\n                        return \"xml\";\n                    case OutputPresentationType.CSV:\n                        return \"csv\";\n                    case OutputPresentationType.ExcelTableOnly:\n                    case OutputPresentationType.Excel2007:\n                        return \"xlsx\";\n                    case OutputPresentationType.RTF:\n                        return \"rtf\";\n                    default:\n                        return \"html\";\n                }\n            }\n            set\n            {\n                _RenderType = this.GetRenderType(value);\n            }\n        }\n\n        public string ReportFile\n        {\n            get { return _ReportFile; }\n        }\n\n        private async Task SetReportFile(string value)\n        {\n            if (!value.EndsWith(\".rdl\"))\n            {\n                value += \".rdl\"; // assume it's a rdl file\n            }\n\n            _ReportFile = FindReportFile(value);\n            // Clear out old report information (if any)\n            this._Errors = null;\n            this._MaxSeverity = 0;\n            _CSS = null;\n            _JavaScript = null;\n            _Html = null;\n            _ParameterHtml = null;\n\n            if (_ReportFile == STATISTICS)\n            {\n                var sb = new StringBuilder();\n\n                DoStatistics(ref sb);\n                _Html = sb.ToString();\n\n                return;\n            }\n\n            // Build the new report\n            string contentRootPath = _webHostEnvironment.ContentRootPath;\n            string pfile = Path.Combine(contentRootPath, _ReportFile);\n            \n            await DoRender(pfile);\n        }\n\n\n        public string PassPhrase\n        {\n            set\n            {\n                _PassPhrase = value;\n            }\n        }\n\n        private string GetPassword()\n        {\n            return _PassPhrase;\n        }\n\n\n        public string Html\n        {\n            get\n            {\n                return _Html;\n            }\n        }\n\n        public string Xml\n        {\n            get\n            {\n                return _Xml;\n            }\n        }\n\n        public string CSV\n        {\n            get\n            {\n                return _Csv;\n            }\n        }\n\n        public byte[] Object\n        {\n            get\n            {\n                return _Object;\n            }\n        }\n\n        public ArrayList Errors\n        {\n            get { return _Errors; }\n        }\n\n        public int MaxErrorSeverity\n        {\n            get\n            {\n                return _MaxSeverity;\n            }\n        }\n\n        public string CSS\n        {\n            get\n            {\n                return _CSS;\n            }\n        }\n\n        public string JavaScript\n        {\n            get\n            {\n                return _JavaScript;\n            }\n        }\n\n        public string ParameterHtml\n        {\n            get\n            {\n                return _ParameterHtml;\n            }\n        }\n\n\n        // Render the report files with the requested types\n        private async Task DoRender(string file)\n        {\n            string source;\n            Report report = null;\n\n            var nvc = this.HttpContext.Request.Query; // parameters\n            ListDictionary ld = new ListDictionary();\n            try\n            {\n                foreach (var kvp in nvc)\n                {\n                    ld.Add(kvp.Key, kvp.Value);\n                }\n                \n                report = ReportHelper.GetCachedReport(file, _cache);\n\n                if (report == null) // couldn't obtain report definition from cache\n                {\n                    // Obtain the source\n                    source = ReportHelper.GetSource(file);\n                    if (source == null)\n                        return; // GetSource reported the error\n\n                    // Compile the report\n                    report = await this.GetReport(source, file);\n                    if (report == null)\n                        return;\n\n                    ReportHelper.SaveCachedReport(report, file, _cache);\n                }\n\n                // Set the user context information: ID, language\n                ReportHelper.SetUserContext(report, this.HttpContext, new Rdl.NeedPassword(GetPassword));\n\n                // Obtain the data if report is being generated\n                if (!_NoShow)\n                {\n                    await report.RunGetData(ld);\n                    await Generate(report);\n                }\n            }\n            catch (Exception exe)\n            {\n                AddError(8, \"Error: {0}\", exe.Message);\n            }\n\n            if (_ParameterHtml == null)\n                _ParameterHtml =\n                    ReportHelper.GetParameterHtml(report, ld, this.HttpContext, _ReportFile,\n                        _NoShow); // build the parameter html\n        }\n\n        private void AddError(int severity, string err, params object[] args)\n        {\n            if (_MaxSeverity < severity)\n                _MaxSeverity = severity;\n\n            string error = string.Format(err, args);\n            if (_Errors == null)\n                _Errors = new ArrayList();\n            _Errors.Add(error);\n        }\n\n        private void AddError(int severity, IList errors)\n        {\n            if (_MaxSeverity < severity)\n                _MaxSeverity = severity;\n            if (_Errors == null)\n            {\n                // if we don't have any we can just start with this list\n                _Errors = new ArrayList(errors);\n                return;\n            }\n\n            // Need to copy all items in the errors array\n            foreach (string err in errors)\n                _Errors.Add(err);\n        }\n\n        private void DoStatistics(ref StringBuilder htmlContent)\n        {\n            RdlSession rs = _cache.Get(RdlSession.SessionStat) as RdlSession;\n            ReportHelper s = ReportHelper.Get(_cache);\n            IMemoryCache c = _cache;\n\n            int sessions = 0;\n            if (rs != null)\n                sessions = rs.Count;\n\n\n            var cacheEntries = GetCacheEntries(c);\n            htmlContent.AppendLine($\"<p>{sessions} sessions\");\n            htmlContent.AppendLine($\"<p>{cacheEntries.Count} items are in the cache\");\n            htmlContent.AppendLine($\"<p>{s.CacheHits} cache hits\");\n            htmlContent.AppendLine($\"<p>{s.CacheMisses} cache misses\");\n            \n        }\n\n        private List<string> GetCacheEntries(IMemoryCache cache)\n        {\n            var field = cache.GetType()\n                .GetProperty(\"EntriesCollection\", BindingFlags.NonPublic | BindingFlags.Instance);\n            var collection = field.GetValue(cache) as ICollection;\n            var items = new List<string>();\n            if (collection != null)\n                foreach (var item in collection)\n                {\n                    var methodInfo = item.GetType().GetProperty(\"Key\");\n                    var val = methodInfo.GetValue(item);\n                    items.Add(val.ToString());\n                }\n\n            return items;\n        }\n\n        private async Task Generate(Report report)\n        {\n            MemoryStreamGen sg = null;\n            try\n            {\n                sg = new MemoryStreamGen(\"ShowFile?type=\", null, this.RenderType);\n\n                await report.RunRender(sg, _RenderType, Guid.NewGuid().ToString());\n                _CSS = \"\";\n                _JavaScript = \"\";\n                switch (_RenderType)\n                {\n                    case OutputPresentationType.ASPHTML:\n                    case OutputPresentationType.HTML:\n                        _CSS = report.CSS; //.Replace(\"position: relative;\", \"position: absolute;\");\n                        _JavaScript = report.JavaScript;\n                        _Html = sg.GetText();\n                        break;\n                    case OutputPresentationType.XML:\n                        _Xml = sg.GetText();\n                        break;\n                    case OutputPresentationType.CSV:\n                        _Csv = sg.GetText();\n                        break;\n                    case OutputPresentationType.PDF:\n                        {\n                            MemoryStream ms = sg.MemoryList[0] as MemoryStream;\n                            _Object = ms.ToArray();\n                            break;\n                        }\n                }\n\n                // Now save off the other streams in the session context for later use\n                IList strms = sg.MemoryList;\n                IList names = sg.MemoryNames;\n                for (int i = 1; i < sg.MemoryList.Count; i++) // we skip the first one\n                {\n                    string n = names[i] as string;\n                    MemoryStream ms = strms[i] as MemoryStream;\n                    HttpContext.Session.Set(n, ms.ToArray());\n                }\n            }\n            catch (Exception e)\n            {\n                Console.WriteLine(e.Message);\n            }\n            finally\n            {\n                if (sg != null)\n                {\n                    sg.CloseMainStream();\n                }\n            }\n\n            if (report.ErrorMaxSeverity > 0)\n            {\n                AddError(report.ErrorMaxSeverity, report.ErrorItems);\n                report.ErrorReset();\n            }\n\n            return;\n        }\n\n        private OutputPresentationType GetRenderType(string type)\n        {\n            switch (type.ToLower())\n            {\n                case \"htm\":\n                case \"html\":\n                    contentType = \"text/html\";\n                    return OutputPresentationType.HTML;\n                case \"pdf\":\n                    contentType = \"application/pdf\";\n                    return OutputPresentationType.PDF;\n                case \"xml\":\n                    contentType = \"text/xml\";\n                    return OutputPresentationType.XML;\n                case \"csv\":\n                    contentType = \"text/csv\";\n                    return OutputPresentationType.CSV;\n                case \"xlsx\":\n                    contentType = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n                    return OutputPresentationType.ExcelTableOnly;\n                case \"rtf\":\n                    contentType = \"application/rtf\";\n                    return OutputPresentationType.RTF;\n                default:\n                    contentType = \"text/html\";\n                    return OutputPresentationType.HTML;\n            }\n        }\n\n        private string FindReportFile(string file)\n        {\n            string foundFile = null;\n            foundFile = Path.Combine(_settings.ReportsFolder, file);\n            \n            if (!System.IO.File.Exists(foundFile))\n            {\n                // recursively search for the file in the content root path\n                // This is a workaround for the case where the file might be in a subdirectory\n                // of the content root path, but the path provided is not absolute.\n                // TODO: read search directory from configuration\n                var di = new DirectoryInfo(_webHostEnvironment.ContentRootPath);\n                FileInfo[] files = di.GetFiles(file, SearchOption.AllDirectories);\n                if (files.Length > 0)\n                {\n                    foundFile = files[0].FullName;\n                }\n            }\n\n            // If the file exists, return the full path\n            if (!System.IO.File.Exists(foundFile))\n            {\n                AddError(8, \"Report file '{0}' does not exist.\", foundFile);\n                return null;\n            }\n\n            return foundFile;\n        }\n\n        private async Task<Report> GetReport(string prog, string file)\n        {\n            // Now parse the file\n            RDLParser rdlp;\n            Report r;\n            try\n            {\n                // Make sure RdlEngine is configured before we ever parse a program\n                //   The config file must exist in the Bin directory.\n                string[] searchDir =\n                [\n                    this.ReportFile.StartsWith(\"~\") ? \"~/Bin\" : \"/Bin\" + Path.DirectorySeparatorChar,\n                    System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)\n                ];\n                RdlEngineConfig.RdlEngineConfigInit(searchDir);\n\n                rdlp = new RDLParser(prog);\n                string folder = Path.GetDirectoryName(file);\n                if (folder == \"\")\n                    folder = Environment.CurrentDirectory;\n                rdlp.Folder = folder;\n                rdlp.DataSourceReferencePassword = new NeedPassword(this.GetPassword);\n\n                r = await rdlp.Parse();\n                if (r.ErrorMaxSeverity > 0)\n                {\n                    AddError(r.ErrorMaxSeverity, r.ErrorItems);\n                    if (r.ErrorMaxSeverity >= 8)\n                        r = null;\n                    r.ErrorReset();\n                }\n\n                // If we've loaded the report; we should tell it where it got loaded from\n                if (r != null)\n                {\n                    r.Folder = folder;\n                    r.Name = Path.GetFileNameWithoutExtension(file);\n                    r.GetDataSourceReferencePassword = new Rdl.NeedPassword(GetPassword);\n                }\n            }\n            catch (Exception e)\n            {\n                r = null;\n                AddError(8, \"Exception parsing report {0}.  {1}\", file, e.Message);\n            }\n\n            return r;\n        }\n    }\n}"
  },
  {
    "path": "RdlAsp.Mvc/RdlSession.cs",
    "content": "\n\nusing System;\nusing System.Web;\nusing System.Collections;\nusing Majorsilence.Reporting.Rdl;\n\nnamespace Majorsilence.Reporting.RdlAsp\n{\n\t/// <summary>\n\t/// RdlSession holds some session specific information\n\t/// </summary>\n\tpublic class RdlSession\n\t{\n\t\tpublic static readonly string SessionStat=\"SessionStat\";\n\t\tpublic int Count;\n\t\tpublic RdlSession()\n\t\t{\n\t\t\tCount = 0;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlAsp.Mvc/ReportHelper.cs",
    "content": "﻿\n\nusing System;\nusing System.Web;\nusing System.IO;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.Text;\nusing System.Web.Caching;\nusing Majorsilence.Reporting.Rdl;\nusing Microsoft.Extensions.Caching.Memory;\n\nnamespace Majorsilence.Reporting.RdlAsp\n{\n    internal class ReportHelper\n    {\n        static internal bool DoCaching = true;\n        internal int CacheHits;\n        internal int CacheMisses;\n\n        private ReportHelper()\n        {\n            CacheHits = 0;\n            CacheMisses = 0;\n        }\n\n        static internal ReportHelper Get(IMemoryCache app)\n        {\n            ReportHelper s = app.Get(\"fyistats\") as ReportHelper;\n            if (s == null)\n            {\n                s = new ReportHelper();\n                app.Set(\"fyistats\", s);\n            }\n            return s;\n        }\n        static internal void IncrHits(IMemoryCache app)\n        {\n            ReportHelper s = Get(app);\n            lock (s)\n            {\n                s.CacheHits++;\n            }\n        }\n        static internal void IncrMisses(IMemoryCache app)\n        {\n            ReportHelper s = Get(app);\n            lock (s)\n            {\n                s.CacheMisses++;\n            }\n        }\n\n        static internal Report GetCachedReport(string file, IMemoryCache c)\n        {\n            if (!ReportHelper.DoCaching)\t\t\t// caching is disabled\n            {\n                ReportHelper.IncrMisses(c);\n                return null;\n            }\n\n        //    Cache c = this.Context.Cache;\n            ReportDefn rd = c.Get(file) as ReportDefn;\n            if (rd == null)\n            {\n                ReportHelper.IncrMisses(c);\n                return null;\n            }\n            ReportHelper.IncrHits(c);\n            Report r = new Report(rd);\n\n            return r;\n        }\n\n        static internal void SaveCachedReport(Report r, string file, IMemoryCache c)\n        {\n            if (!ReportHelper.DoCaching)\t\t\t// caching is disabled\n                return;\n\n            c.Set(file, r.ReportDefinition);\n            return;\n        }\n        \n        static internal ListDictionary GetParameters(string parms)\n        {\n            ListDictionary ld = new ListDictionary();\n            if (parms == null)\n                return ld;\t\t\t\t// dictionary will be empty in this case\n\n            // parms are separated by &\n            char[] breakChars = new char[] { '&' };\n            string[] ps = parms.Split(breakChars);\n            foreach (string p in ps)\n            {\n                int iEq = p.IndexOf(\"=\");\n                if (iEq > 0)\n                {\n                    string name = p.Substring(0, iEq);\n                    string val = p.Substring(iEq + 1);\n                    ld.Add(name, val);\n                }\n            }\n            return ld;\n        }\n\n        static internal string GetSource(string file)\n        {\n            StreamReader fs = null;\n            string prog = null;\n            try\n            {\n                fs = new StreamReader(file);\n                prog = fs.ReadToEnd();\n            }\n            finally\n            {\n                if (fs != null)\n                    fs.Close();\n            }\n            return prog;\n        }\n\n        static internal void SetUserContext(Report r, HttpContext context, NeedPassword np)\n        {\n            r.GetDataSourceReferencePassword = np;\n            if (context == null)                // may not always have a context\n                return;\n\n            HttpRequest req = context.Request;\n            if (req != null && req.UserLanguages!= null && req.UserLanguages.Length > 0)\n            {\n                string l = req.UserLanguages[0];\n                r.ClientLanguage = l;\n            }\n\n            if (context.User != null && context.User.Identity != null)\n            {\n                System.Security.Principal.IIdentity id = context.User.Identity;\n                if (id.IsAuthenticated)\n                {\n                    r.UserID = id.Name;\n                }\n            }\n            return;\n        }\n        /// <summary>\n        /// Returns the HTML needed to represent the parameters of a report.\n        /// </summary>\n        static internal string GetParameterHtml(Report rpt, IDictionary pd, HttpContext context, string reportFile, bool bShow)\n        {\n            if (rpt == null)\n                return \"\";\n\n            StringBuilder pHtml = new StringBuilder();\n\n            pHtml.AppendFormat(\"<form target=\\\"_self\\\" method=get action=\\\"{0}\\\">\", context.Request.Url);\n            // hidden field\n            pHtml.AppendFormat(\"<input type=hidden name=\\\"rs:url\\\" value=\\\"{0}\\\" />\",\n                reportFile);\n            pHtml.AppendFormat(\"<table width=\\\"100%\\\">\");\n\n            int row = 0;\n            foreach (UserReportParameter rp in rpt.UserReportParameters)\n            {\n                if (rp.Prompt == null)\t\t// skip parameters that don't have a prompt\n                    continue;\n\n                pHtml.Append(\"<tr>\");\t\t// Create a row for each parameter\n\n                // Create the label\n                pHtml.Append(\"<td>\");\t\t// Label definition\n                pHtml.Append(rp.Prompt);\n\n                pHtml.Append(\"</td><td>\");\t// end of label; start of control\n\n                // Create the control\n                string defaultValue;\n                if (rp.DefaultValue != null)\n                {\n                    StringBuilder sb = new StringBuilder();\n                    for (int i = 0; i < rp.DefaultValue.Length; i++)\n                    {\n                        if (i > 0)\n                            sb.Append(\", \");\n                        sb.Append(rp.DefaultValue[i].ToString());\n                    }\n                    defaultValue = sb.ToString();\n                }\n                else\n                    defaultValue = \"\";\n\n                if (rp.DisplayValues == null)\n                {\n                    string pv = (string)pd[rp.Name];\n\n                    switch (rp.dt)\n                    {\n                        case TypeCode.Int32:\n                        case TypeCode.Int16:\n                        case TypeCode.Int64:\n                        case TypeCode.UInt32:\n                        case TypeCode.UInt16:\n                        case TypeCode.UInt64:\n                            pHtml.AppendFormat(\"<input type=text name=\\\"{0}\\\" value=\\\"{1}\\\" tabindex=\\\"{2}\\\" size=32 onKeyPress=\\\"javascript:return limitinput(event, '0123456789', true);\\\"/></td>\",\n                            rp.Name,\t\t// name\n                            pv == null ? defaultValue : pv,\t\t// provide actual value if passed as parm otherwise default\n                            row + 1);    //use the row to set the tab order\n                            break;\n                        case TypeCode.Double:\n                        case TypeCode.Decimal:\n                        case TypeCode.Single:\n                            pHtml.AppendFormat(\"<input type=text name=\\\"{0}\\\" value=\\\"{1}\\\" tabindex=\\\"{2}\\\" size=32 onKeyPress=\\\"javascript:return limitinput(event, '0123456789.', true);\\\"/></td>\",\n                        rp.Name,\t\t// name\n                        pv == null ? defaultValue : pv,\t\t// provide actual value if passed as parm otherwise default\n                        row + 1);    //use the row to set the tab order\n                            break;\n                        default:\n                            pHtml.AppendFormat(\"<input type=text name=\\\"{0}\\\" value=\\\"{1}\\\" tabindex=\\\"{2}\\\" size=32/></td>\",\n                            rp.Name,\t\t// name\n                            pv == null ? defaultValue : pv,\t\t// provide actual value if passed as parm otherwise default\n                            row + 1);    //use the row to set the tab order\n                            break;\n                    }\n\n                    /* pHtml.AppendFormat(\"<input type=text name=\\\"{0}\\\" value=\\\"{1}\\\" tabindex=\\\"{2}\\\" size=32/></td>\", \n                         rp.Name,\t\t// name\n                         pv == null? defaultValue: pv,\t\t// provide actual value if passed as parm otherwise default\n                         row + 1);    //use the row to set the tab order*/\n\n                    if (rp.dt == TypeCode.DateTime)\n                    {\n                        //pHtml.AppendFormat(\"<td><input id=\\\"{0}\\\" type=\\\"button\\\" value=\\\"Date\\\" />\", rp.Name + \"Dtbtn /><td>\");\n                        pHtml.AppendFormat(\"<td><A id=\\\"lnk\" + rp.Name + \"\\\" href=\\\"javascript:NewCal('{0}','ddmmmyyyy',true,24)\\\" runat=\\\"server\\\"><IMG height=\\\"16\\\" alt=\\\"Pick a date\\\" src=\\\"SmallCalendar.gif\\\" width=\\\"16\\\" border=\\\"0\\\"/></td>\", rp.Name);\n                    }\n\n                }\n                else\n                {\n                    pHtml.AppendFormat(\"<select name=\\\"{0}\\\" tabindex=\\\"{1}\\\"size=1>\", rp.Name, row + 1);\n                    string pv = (string)pd[rp.Name];\n                    if (pv == null)\n                        pv = defaultValue;\n                    string selected;\n                    for (int i = 0; i < rp.DisplayValues.Length; i++)\n                    {\n                        if (pv.CompareTo(rp.DataValues[i].ToString()) == 0)\n                            selected = \" selected\";\n                        else\n                            selected = \"\";\n\n                        if (rp.DataValues[i] is String &&\n                            rp.DisplayValues[i].CompareTo(rp.DataValues[i]) == 0)\t// When display and data values are same don't put out a value tag\n                            pHtml.AppendFormat(\"<option{1}>{0}</option>\", XmlUtil.XmlAnsi(rp.DisplayValues[i]), selected);\n                        else\n                            pHtml.AppendFormat(\"<option value=\\\"{0}\\\"{2}>{1}</option>\", XmlUtil.XmlAnsi(rp.DataValues[i].ToString()), XmlUtil.XmlAnsi(rp.DisplayValues[i]), selected);\n                    }\n                    pHtml.Append(\"</select></td>\");\n                }\n\n\n\n                if (row == 0)\n                {\t// On the first row add a column that will be the submit button\n                    pHtml.AppendFormat(\"<td rowspan=2><table><tr><td align=right><input type=\\\"submit\\\" value=\\\"Run Report\\\" style=\\\"font-family:Ariel; color: black; font-size=10pt; background: gainsboro;\\\" tabindex=\\\"{0}\\\"/></td></tr>\", rpt.UserReportParameters.Count + 1);\n                    if (!bShow) { ReportHelper.AppendExports(pHtml, context, reportFile); } else { pHtml.AppendFormat(\"<tr><td align=right></td><td align=right>&nbsp;</td></tr></table></td>\"); }\n                }\n\n                pHtml.Append(\"</tr>\");\t\t// End of row for each parameter\n                row++;\n            }\n            if (row == 0)\n            {\n                pHtml.AppendFormat(\"<tr><td><table><tr><td align=right><input type=\\\"submit\\\" value=\\\"Run Report\\\" style=\\\"font-family:Ariel; color: white; font-size=10pt; background: lightblue;\\\" tabindex=\\\"{0}\\\"/></td></tr>\", rpt.UserReportParameters.Count + 1);\n                if (!bShow) { ReportHelper.AppendExports(pHtml, context, reportFile); } else { pHtml.AppendFormat(\"<tr><td align=right></td><td align=right>&nbsp;</td></tr></table></td>\"); }\n            }\n            pHtml.Append(\"</table></form>\");\t\t// End of table, form, html\n            return pHtml.ToString();\n        }\n\n        static private void AppendExports(StringBuilder pHtml, HttpContext context, string reportFile)\n        {\n            StringBuilder args = new StringBuilder();\n            NameValueCollection nvc;\n\n            nvc = context.Request.QueryString;\t\t// parameters\n            foreach (var key in nvc.AllKeys)\n            {\n                if (!key.StartsWith(\"rs:\"))\n                    args.AppendFormat(\"&{0}={1}\",\n                        System.Web.HttpUtility.UrlEncode(key), System.Web.HttpUtility.UrlEncode(nvc[key]));\n            }\n            string sargs = args.ToString();\n\n            string lpdf =\n                $\"<a href=\\\"/msr/RdlReport/ShowFile/{reportFile}/pdf{sargs}\\\" target=_blank>PDF</a>\";\n            string lxml =\n                $\"<a href=\\\"/msr/RdlReport/ShowFile/{reportFile}/xml{sargs}\\\" target=_blank>XML</a>\";\n            string lcsv =\n                $\"<a href=\\\"/msr/RdlReport/ShowFile/{reportFile}/csv{sargs}\\\" target=_blank>CSV</a>\";\n\n            pHtml.AppendFormat(\"<tr><td align=right>{0}</td><td align=right>{1}&nbsp;{2}</td></tr></table></td>\",\n                lpdf, lxml, lcsv);\n        }\n\n    }\n}\n"
  },
  {
    "path": "RdlAsp.Mvc/Settings.cs",
    "content": "namespace Majorsilence.Reporting.RdlAsp\n{\n    public class Settings\n    {\n        public string ReportsFolder { get; set; } = \"Reports/\";\n    }\n}"
  },
  {
    "path": "RdlCmd/GlobalSuppressions.cs",
    "content": "﻿// This file is used by Code Analysis to maintain SuppressMessage\n// attributes that are applied to this project.\n// Project-level suppressions either have no target or are given\n// a specific target and scoped to a namespace, type, member, etc.\n\nusing System.Diagnostics.CodeAnalysis;\n\n#if !DRAWINGCOMPAT\n[assembly: SuppressMessage(\"Interoperability\", \"CA1416:Validate platform compatibility\",\n    Justification = \"System.Drawing usage is intentional\")]\n#endif\n"
  },
  {
    "path": "RdlCmd/RdlCmd.cs",
    "content": "using System;\nusing System.IO;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.Reflection;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\nusing Majorsilence.Drawing.Imaging;\n#else\nusing Draw2 = System.Drawing;\nusing System.Drawing.Imaging;\n#endif\n\nusing System.Text.RegularExpressions;\nusing System.Globalization;\nusing Majorsilence.Reporting.Rdl;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.RdlCmd\n{\n\t/// <summary>\n\t/// RdlCmd is a batch report generation program.  It takes a report definition\n    ///   and renders it into the requested formats.\n\t/// </summary>\n\tpublic class RdlCmd\n\t{\n\t\t/// <summary>\n\t\t/// RdlCmd takes a report definition and renders it in the specified formats.\n\t\t/// </summary>\n\t\t/// \n\t\tprivate int returnCode=0;\t\t\t\t// return code\n\t\tprivate string _DataSourcePassword;\n        private bool _ShowStats = false;        // show statistics\n\t\tprivate string _StampInfo=null;\t// PDF stamping information\n        private string _user = null; // Allow the user to be set via a command line param GJL AJM 12062008\n\n\t\t[STAThread]\n\t\tstatic public async Task<int> Main(string[] args)\n\t\t{\n\t\t\t// Handle the arguments\n\t\t\tif (args == null || args.Length==0)\n\t\t\t{\n\t\t\t\tWriteLicense();\n\t\t\t\treturn 8;\n\t\t\t}\n\n\t\t\tRdlCmd rc = new RdlCmd();\n\n\t\t\tchar[] breakChars = new char[] {'+'};\n\t\t\tstring[] files=null;\n\t\t\tstring[] types=null;\n\t\t\tstring dir=null;\n\t\t\tint returnCode=0;\n            string connectionStringOverwrite = string.Empty;\n\t\t\tforeach(string s in args)\n\t\t\t{\n\t\t\t\tstring t = s.Substring(0,2);\n\t\t\t\tswitch (t)\n\t\t\t\t{\n\t\t\t\t\tcase \"/l\":\n\t\t\t\t\tcase \"-l\":\n\t\t\t\t\t\tWriteLicense();\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\tcase \"/f\":\n\t\t\t\t\tcase \"-f\":\n\t\t\t\t\t\tfiles = s.Substring(2).Split(breakChars);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"/o\":\n\t\t\t\t\tcase \"-o\":\n\t\t\t\t\t\tdir = s.Substring(2);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"/p\":\n\t\t\t\t\tcase \"-p\":\n\t\t\t\t\t\trc._DataSourcePassword = s.Substring(2);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"/t\":\n\t\t\t\t\tcase \"-t\":\n\t\t\t\t\t\ttypes = s.Substring(2).Split(breakChars);\n\t\t\t\t\t\tbreak;\n                    case \"--help\":\n                    case \"-help\":\n                    case \"-h\":\n                    case \"--h\":\n\t\t\t\t\tcase \"/?\":\n\t\t\t\t\tcase \"-?\":\n\t\t\t\t\t\tWriteHelp();\n\t\t\t\t\t\treturn 0;\n                    case \"/s\":\n                    case \"-s\":\n                        rc._ShowStats = true;\n                        break;\n\t\t\t\t\tcase \"/i\":\n\t\t\t\t\tcase \"-i\":\n\t\t\t\t\t\trc._StampInfo = s.Substring(2);\n\t\t\t\t\t\tbreak;\n                    case \"/u\":\n                    case \"-u\":\n                        rc._user = s.Substring(2); // Allow the user to be set via a command line param (u) GJL AJM 12062008\n                        break;\n                    case \"/c\":\n                    case \"-c\":\n                        connectionStringOverwrite = s.Substring(2);\n                        break;\n                    default:\n\t\t\t\t\t\tConsole.WriteLine(\"Unknown command '{0}' ignored.\", s);\n\t\t\t\t\t\treturnCode = 4;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (files == null)\n\t\t\t{\n\t\t\t\tConsole.WriteLine(\"/f parameter is required.\");\n\t\t\t\treturn 8;\n\t\t\t}\n\n\t\t\tif (types == null)\n\t\t\t{\n\t\t\t\tConsole.WriteLine(\"/t parameter is required.\");\n\t\t\t\treturn 8;\n\t\t\t}\n\n\t\t\tif (dir == null)\n\t\t\t{\n\t\t\t\tdir = Environment.CurrentDirectory;\n\t\t\t}\n\n\t\t\tif (dir[dir.Length-1] != Path.DirectorySeparatorChar)\n\t\t\t\tdir += Path.DirectorySeparatorChar;\n\n\t\t\trc.returnCode = returnCode;\n\n            await rc.DoRender(dir, files, types, connectionStringOverwrite);\t\t\t\t\n\n\t\t\treturn rc.returnCode;\n\t\t}\n\n\t\tprivate string GetPassword()\n\t\t{\n\t\t\treturn this._DataSourcePassword;\n\t\t}\n\n\t\t// Render the report files with the requested types\n\t\tprivate async Task DoRender(string dir, string[] files, string[] types, string connectionStringOverwrite)\n\t\t{\n\t\t\tstring source;\n\t\t\tReport report;\n\t\t\tint index;\n\t\t\tListDictionary ld;\n\t\t\tstring file;\n\n            DateTime start = DateTime.Now;\n\t\t\tforeach (string filename in files)\n\t\t\t{\n                DateTime startF = DateTime.Now;\n\n\t\t\t\t// Any parameters?  e.g.  file1.rdl?ordid=5\n\t\t\t\tindex = filename.LastIndexOf('?');\n\t\t\t\tif (index >= 0)\n\t\t\t\t{\n\t\t\t\t\tld = this.GetParameters(filename.Substring(index+1));\n\t\t\t\t\tfile = filename.Substring(0, index);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tld = null;\n\t\t\t\t\tfile = filename;\n\t\t\t\t}\n\n\t\t\t\t// Obtain the source\n\t\t\t\tsource = this.GetSource(file);\n                if (this._ShowStats)\n                {\n                    DateTime temp = DateTime.Now;\n                    Console.WriteLine(\"load file {0}: {1}\", file, temp - startF);\n                    startF = DateTime.Now;\n                }\n\n\t\t\t\tif (source == null)\n\t\t\t\t\tcontinue;\t\t\t\t\t// error: process the rest of the files\n\n\t\t\t\t// Compile the report\n\t\t\t\treport = await this.GetReport(source, file, connectionStringOverwrite);\n                report.UserID = _user; //Set the user of the report based on the parameter passed in GJL AJM 12062008\n                if (this._ShowStats)\n                {\n                    DateTime temp = DateTime.Now;\n                    Console.WriteLine(\"Compile: {0}\", temp - startF);\n                    startF = DateTime.Now;\n                }\n\n                if (report == null)\n                    continue;\t\t\t\t\t// error: process the rest of the files\n\n\t\t\t\t// Obtain the data\n\t\t\t\tstring fileNoExt=null;\n\t\t\t\tif (ld != null)\n\t\t\t\t{\n\t\t\t\t\tfileNoExt = ld[\"rc:ofile\"] as string;\n\t\t\t\t\tif (fileNoExt != null)\n\t\t\t\t\t\tld.Remove(\"rc:ofile\");\t// don't pass this as an argument to the report\n\t\t\t\t}\n\n                await report.RunGetData(ld);\n                if (this._ShowStats)\n                {\n                    DateTime temp = DateTime.Now;\n                    Console.WriteLine(\"Get Data: {0}\", temp - startF);\n                    startF = DateTime.Now;\n                }\n\n\t\t\t\t// Render the report in each of the requested types\n\t\t\t\tif (fileNoExt != null)\n\t\t\t\t\tfileNoExt = dir + fileNoExt;\n\t\t\t\telse\n\t\t\t\t\tfileNoExt = dir + Path.GetFileNameWithoutExtension(file);\n\n\t\t\t\tforeach (string stype in types)\n\t\t\t\t{\n                    await SaveAs(report, fileNoExt+\".\"+stype, stype);\n                    if (this._ShowStats)\n                    {\n                        DateTime temp = DateTime.Now;\n                        Console.WriteLine(\"Render {0}: {1}\", stype, temp - startF);\n                        startF = DateTime.Now;\n                    }\n                }\t\n\t\t\t}\t// end foreach files\n            if (this._ShowStats)\n            {\n                DateTime end = DateTime.Now;\n                Console.WriteLine(\"Total time: {0}\", end - start);\n            }\n\n        }\n\n\t\tprivate ListDictionary GetParameters(string parms)\n\t\t{\n\t\t\tListDictionary ld= new ListDictionary();\n\t\t\tif (parms == null)\n\t\t\t\treturn ld;\t\t\t\t// dictionary will be empty in this case\n\n\t\t\t// parms are separated by &\n\t\t\tchar[] breakChars = new char[] {'&'};\n\t\t\tstring[] ps = parms.Split(breakChars);\n            foreach (string p in ps)\n            {\n                int iEq = p.IndexOf(\"=\");\n                if (iEq > 0)\n                {\n                    string name = p.Substring(0, iEq);\n                    string val = p.Substring(iEq + 1);\n                    ld.Add(name, val);\n                }\n            }\n\t\t\treturn ld;\n\t\t}\n\n\t\tprivate string GetSource(string file)\n\t\t{\n\t\t\tStreamReader fs=null;\n\t\t\tstring prog=null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tfs = new StreamReader(file);\n\t\t\t\tprog = fs.ReadToEnd();\n\t\t\t}\n\t\t\tcatch(Exception e)\n\t\t\t{\n\t\t\t\tprog = null;\n\t\t\t\tConsole.WriteLine(e.Message);\n\t\t\t\treturnCode = 8;\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (fs != null)\n\t\t\t\t\tfs.Close();\n\t\t\t}\n\t\t\treturn prog;\n\t\t}\n\n\t\tprivate async Task<Report> GetReport(string prog, string file, string connectionStringOverwrite)\n\t\t{\n\t\t\t// Now parse the file\n\t\t\tRDLParser rdlp;\n\t\t\tReport r;\n\t\t\ttry\n\t\t\t{\n\t\t\t\trdlp =  new RDLParser(prog);\n\t\t\t\tstring folder = Path.GetDirectoryName(file);\n\t\t\t\tif (folder == \"\")\n\t\t\t\t\tfolder = Environment.CurrentDirectory;\n\t\t\t\trdlp.Folder = folder;\n\t\t\t\trdlp.DataSourceReferencePassword = new NeedPassword(this.GetPassword);\n                if (!string.IsNullOrWhiteSpace(connectionStringOverwrite))\n                {\n                    rdlp.OverwriteConnectionString = connectionStringOverwrite;\n                }\n                \n\n\t\t\t\tr = await rdlp.Parse();\n\t\t\t\tif (r.ErrorMaxSeverity > 0) \n\t\t\t\t{\n\t\t\t\t\t// have errors fill out the msgs \n\t\t\t\t\tConsole.WriteLine(\"{0} has the following errors:\", file);\n\t\t\t\t\tforeach (string emsg in r.ErrorItems)\n\t\t\t\t\t{\n\t\t\t\t\t\tConsole.WriteLine(emsg);\t\t// output message to console\n\t\t\t\t\t}\n\t\t\t\t\tint severity = r.ErrorMaxSeverity;\n\t\t\t\t\tr.ErrorReset();\n\t\t\t\t\tif (severity > 4)\n\t\t\t\t\t{\n\t\t\t\t\t\tr = null;\t\t\t// don't return when severe errors\n\t\t\t\t\t\treturnCode = 8;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If we've loaded the report; we should tell it where it got loaded from\n\t\t\t\tif (r != null)\n\t\t\t\t{\n\t\t\t\t\tr.Folder = folder;\n\t\t\t\t\tr.Name = Path.GetFileNameWithoutExtension(file);\n\t\t\t\t\tr.GetDataSourceReferencePassword = new Rdl.NeedPassword(GetPassword);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch(Exception e)\n\t\t\t{\n\t\t\t\tr = null;\n\t\t\t\tConsole.WriteLine(e.Message);\n\t\t\t\treturnCode = 8;\n\t\t\t}\n\t\t\treturn r;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Save the file.  The extension determines the type of file to save.\n\t\t/// </summary>\n\t\t/// <param name=\"FileName\">Name of the file to be saved to.</param>\n\t\t/// <param name=\"ext\">Type of file to save.  Should be \"pdf\", \"xml\", \"html\", mht.</param>\n\t\tprivate async Task SaveAs(Report report, string FileName, string type)\n\t\t{\n\t\t\tstring ext = type.ToLower();\n\t\t\tOneFileStreamGen sg=null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tbool isOldPdf = false;\n\t\t\t\tif (System.Environment.OSVersion.Platform == PlatformID.Unix && type==\"pdf\" ) {\n\n                    if (System.IO.Directory.Exists(\"/usr/share/fonts/truetype/msttcorefonts\")==false)\n                    {\n\t\t\t\t\t\tisOldPdf = true;\n                    }\n                   \n                }\n\n\n\n                if (ext == \"tifb\")\n                    FileName = FileName.Substring(0, FileName.Length - 1);      // get rid of the 'b'\n\t\t\t\tsg = new OneFileStreamGen(FileName, true);\t// overwrite with this name\n\t\t\t\tswitch(ext)\n\t\t\t\t{\n\t\t\t\t\tcase \"pdf\":\t\n\t\t\t\t\t\tif (this._StampInfo == null)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (isOldPdf)\n\t\t\t\t\t\t\t{\n                                await report.RunRender(sg, OutputPresentationType.PDFOldStyle);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n                                await report.RunRender(sg, OutputPresentationType.PDF);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n                            await SaveAsPdf(report, sg);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"xml\":\n                        await report.RunRender(sg, OutputPresentationType.XML);\n\t\t\t\t\t\tbreak;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t  \n\t\t\t\t\tcase \"mht\":\n                        await report.RunRender(sg, OutputPresentationType.MHTML);\n\t\t\t\t\t\tbreak;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t  \n\t\t\t\t\tcase \"html\": case \"htm\":\n                        await report.RunRender(sg, OutputPresentationType.HTML);\n\t\t\t\t\t\tbreak;\n                    case \"csv\":\n                        await report.RunRender(sg, OutputPresentationType.CSV);\n                        break;\n                    case \"xlsx_table\":\n                        await report.RunRender(sg, OutputPresentationType.ExcelTableOnly);\n                        break;\n                    case \"xlsx\":\n                        await report.RunRender(sg, OutputPresentationType.Excel2007);\n                        break;\n                    case \"rtf\":\n                        await report.RunRender(sg, OutputPresentationType.RTF);\n                        break;\n                    case \"tif\": case \"tiff\":\n                        await report.RunRender(sg, OutputPresentationType.TIF);\n                        break;\n                    case \"tifb\":\n                        await report.RunRender(sg, OutputPresentationType.TIFBW);\n                        break;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tConsole.WriteLine(\"Unsupported file extension '{0}'.  Must be 'pdf', 'xml', 'mht', 'csv', 'xslx', 'xlsx_table', 'rtf', 'tif', 'tifb' or 'html'\", type);\n\t\t\t\t\t\treturnCode = 8;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch(Exception e)\n\t\t\t{\n\t\t\t\tConsole.WriteLine(e.Message);\n\t\t\t\treturnCode = 8;\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (sg != null)\n\t\t\t\t{\n\t\t\t\t\tsg.CloseMainStream();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (report.ErrorMaxSeverity > 0) \n\t\t\t{\n\t\t\t\t// have errors fill out the msgs \n\t\t\t\tConsole.WriteLine(\"{0} has the following runtime errors:\", FileName);\n\t\t\t\tforeach (string emsg in report.ErrorItems)\n\t\t\t\t{\n\t\t\t\t\tConsole.WriteLine(emsg);\t\t// output message to console\n\t\t\t\t}\n\t\t\t\treport.ErrorReset();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\t\tprivate async Task SaveAsPdf(Report report, OneFileStreamGen sg)\n\t\t{\n\t\t\tPages pgs = await report.BuildPages();\n\t\t\tFileStream strm=null;\n\t\t\tDraw2.Image im=null;\n\n\t\t\t// Handle any parameters\n\t\t\tfloat x = 0;\t\t// x position of image\n\t\t\tfloat y = 0;\t\t// y position of image\n\t\t\tfloat h = 0;\t\t// height of image\n\t\t\tfloat w = 0;\t\t// width position of image\n\t\t\tstring fname=null;\n\t\t\tint index = _StampInfo.LastIndexOf('?');\n\t\t\tbool bClip=false;\t// we force clip if either height or width not specified\n\n\t\t\tif (index >= 0)\n\t\t\t{\n\t\t\t\t// Get all the arguments for sizing the image\n\t\t\t\tListDictionary ld = this.GetParameters(_StampInfo.Substring(index+1));\n\t\t\t\tfname = _StampInfo.Substring(0, index);\n\t\t\t\tstring ws = (string)ld[\"x\"];\n\t\t\t\tx = Size(ws);\n\t\t\t\tws = (string)ld[\"y\"];\n\t\t\t\ty = Size(ws);\n\t\t\t\tws = (string)ld[\"h\"];\n\t\t\t\tif (ws == null)\n\t\t\t\t{\n\t\t\t\t\tbClip = true;\n\t\t\t\t\tws = \"12in\";\t// just give it a big value\t\n\t\t\t\t}\n\t\t\t\th = Size(ws);\n\t\t\t\tws = (string)ld[\"w\"];\n\t\t\t\tif (ws == null)\n\t\t\t\t{\n\t\t\t\t\tbClip = true;\n\t\t\t\t\tws = \"12in\";\t// just give it a big value\n\t\t\t\t}\n\t\t\t\tw = Size(ws);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfname = _StampInfo;\n\t\t\t\t// force size\n\t\t\t\tbClip = true;\n\t\t\t\th = Size(\"12in\");\n\t\t\t\tw = Size(\"12in\");\n\t\t\t}\n\n\t\t\t// Stamp the first page\n\t\t\tforeach (Page p in pgs)\t\t// we loop then break after obtaining one\n\t\t\t{\n\t\t\t\ttry \n\t\t\t\t{\n\t\t\t\t\tstrm = new FileStream(fname, System.IO.FileMode.Open, FileAccess.Read);\t\t\n\t\t\t\t\tim = Draw2.Image.FromStream(strm);\n\t\t\t\t\tint height = im.Height;\n\t\t\t\t\tint width = im.Width;\n\t\t\t\t\tMemoryStream ostrm = new MemoryStream();\n\t\t\t\t\t\n                    /* Replaced with high quality JPEG encoder \n                      * 06122007AJM */\n \t\t\t\t\tImageFormat imf = ImageFormat.Jpeg;\n \t\t\t\t\t//im.Save(ostrm, imf);\n                    Draw2.Imaging.ImageCodecInfo[] info;\n                    info = ImageCodecInfo.GetImageEncoders();\n                    EncoderParameters encoderParameters;\n                    encoderParameters = new EncoderParameters(1);\n                    encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L);\n                    Draw2.Imaging.ImageCodecInfo codec = null;\n                    for (int i = 0; i < info.Length; i++)\n                    {\n                        if (info[i].FormatDescription == \"JPEG\")\n                        {\n                            codec = info[i];\n                            break;\n                        }\n                    }\n                    im.Save(ostrm, codec, encoderParameters);\n                    // end change\n                    byte[] ba = ostrm.ToArray();\n\t\t\t\t\tostrm.Close();\n\t\t\t\t\tPageImage pi = new PageImage(imf, ba, width, height);\n\t\t\t\t\tpi.SI = new StyleInfo();\t\t\t// defaults are ok; don't want border, etc\n\t\t\t\t\t// Set location, height and width\n\t\t\t\t\tpi.X = x;\n\t\t\t\t\tpi.Y = y;\n\t\t\t\t\tpi.H = h;\n\t\t\t\t\tpi.W = w;\n\t\t\t\t\tpi.Sizing = bClip? ImageSizingEnum.Clip: ImageSizingEnum.FitProportional;\n\n\t\t\t\t\tp.InsertObject(pi);\n\t\t\t\t}\n\t\t\t\tcatch (Exception e)\n\t\t\t\t{\t\n\t\t\t\t\t// image failed to load, continue processing\n\t\t\t\t\tConsole.WriteLine(\"Stamping image failed.  {0}\", e.Message);\n\t\t\t\t}\n\t\t\t\tfinally\n\t\t\t\t{\n\t\t\t\t\tif (strm != null)\n\t\t\t\t\t\tstrm.Close();\n\t\t\t\t\tif (im != null)\n\t\t\t\t\t\tim.Dispose();\n\t\t\t\t}\n\t\t\t\tbreak;\t\t\t// only stamp the first page\n\t\t\t}\n\n\t\t\t// Now create the PDF\n\t\t\tawait report.RunRenderPdf(sg, pgs);\n\t\t}\n\n\t\tprivate float Size(string t)\n\t\t{\n\t\t\tif (t == null)\n\t\t\t\treturn 0;\n\t\t\t// Size is specified in CSS Length Units\n\t\t\t// format is <decimal number nnn.nnn><optional space><unit>\n\t\t\t// in -> inches (1 inch = 2.54 cm)\n\t\t\t// cm -> centimeters (.01 meters)\n\t\t\t// mm -> millimeters (.001 meters)\n\t\t\t// pt -> points (1 point = 1/72.27 inches)\n\t\t\t// pc -> Picas (1 pica = 12 points)\n\t\t\tint size=0;\n\t\t\tt = t.Trim();\n\t\t\tint space = t.LastIndexOf(' '); \n\t\t\tstring n;\t\t\t\t\t\t// number string\n\t\t\tstring u;\t\t\t\t\t\t// unit string\n\t\t\tdecimal d;\t\t\t\t\t\t// initial number\n\t\t\ttry\t\t// Convert.ToDecimal can be very picky\n\t\t\t{\n\t\t\t\tif (space != -1)\t// any spaces\n\t\t\t\t{\n\t\t\t\t\tn = t.Substring(0,space).Trim();\t// number string\n\t\t\t\t\tu = t.Substring(space).Trim();\t// unit string\n\t\t\t\t}\n\t\t\t\telse if (t.Length >= 3)\n\t\t\t\t{\n\t\t\t\t\tn = t.Substring(0, t.Length-2).Trim();\n\t\t\t\t\tu = t.Substring(t.Length-2).Trim();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// Illegal unit\n\t\t\t\t\tConsole.WriteLine(string.Format(\"Illegal size '{0}' specified, assuming 0 length.\", t));\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\tif (!Regex.IsMatch(n, @\"\\A[ ]*[-]?[0-9]*[.]?[0-9]*[ ]*\\Z\"))\n\t\t\t\t{\n\t\t\t\t\tConsole.WriteLine(string.Format(\"Unknown characters in '{0}' specified.  Number must be of form '###.##'.  Local conversion will be attempted.\", t));\n\t\t\t\t\td = Convert.ToDecimal(n, NumberFormatInfo.InvariantInfo);\t\t// initial number\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\td = Convert.ToDecimal(n, NumberFormatInfo.InvariantInfo);\t\t// initial number\n\t\t\t}\n\t\t\tcatch (Exception ex) \n\t\t\t{\n\t\t\t\t// Illegal unit\n\t\t\t\tConsole.WriteLine(\"Illegal size '\" + t + \"' specified, assuming 0 length.\\r\\n\"+ex.Message);\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tswitch(u)\t\t\t// convert to millimeters\n\t\t\t{\n\t\t\t\tcase \"in\":\n\t\t\t\t\tsize = (int) (d * 2540m);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"cm\":\n\t\t\t\t\tsize = (int) (d * 1000m);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"mm\":\n\t\t\t\t\tsize = (int) (d * 100m);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"pt\":\n\t\t\t\t\tsize = (int) (d * (2540m / 72.27m));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"pc\":\n\t\t\t\t\tsize = (int) (d * (2540m / 72.27m * 12m));\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t \n\t\t\t\t\t// Illegal unit\n\t\t\t\t\tConsole.WriteLine(\"Unknown sizing unit '\" + u + \"' specified, assuming inches.\");\n\t\t\t\t\tsize = (int) (d * 2540m);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn (float) ((double) size / 2540.0 * 72.27f);\n\t\t}\n\n\t\tstatic private void WriteHelp()\n\t\t{\n\t\t\tConsole.WriteLine(\"\");\n\t\t\tConsole.WriteLine(\"Runs a RDL report file and creates a file for each type specified.\");\n\t\t\tConsole.WriteLine(\"RdlCmd /ffile.rdl /tpdf [/ooutputdir]\");\n\t\t\tConsole.WriteLine(\"/f is followed by a file or file list.  e.g. /ffile1.rdl+file2.rdl\");\n\t\t\tConsole.WriteLine(\"  Report arguments can optionally be passed by using '?' after the file.\");\n\t\t\tConsole.WriteLine(\"  Multiple report arguments are separated by '&'.\");\n\t\t\tConsole.WriteLine(\"  For example, /ffile1.rdl?parm1=XYZ Inc.&parm2=1000\");\n\t\t\tConsole.WriteLine(\"  One special argument is 'rc:ofile' which names the output file.\");\n\t\t\tConsole.WriteLine(\"  For example, /ffile1.rdl?parm1=XYZ Inc.&parm2=1000&rc:ofile=xyzfile\");\n\t\t\tConsole.WriteLine(\"/t is followed by the type of output file: pdf, html, mht, xml, csv,\");\n            Console.WriteLine(\"  xslx, xlsx_table, rtf, tif, tifb   e.g /tpdf+xml\");\n\t\t\tConsole.WriteLine(\"/o is followed by the output directory.   The file name is the same as the\");\n\t\t\tConsole.WriteLine(\"  input (or the rc:ofile parameter) except with the type as the extension.\");\n            Console.WriteLine(\"/c is followed by the connection string\");\n            Console.WriteLine(\"  This will overwrite the connection string in the report definition.\");\n            Console.WriteLine(\"/p is followed by the pass phrase needed by reports using a shared data source.\");\n\t\t\tConsole.WriteLine(\"/s displays elapsed time statistics\");\n\t\t\tConsole.WriteLine(\"/i is followed by an image filename to be stamped onto first page of the PDF.\");\n\t\t\tConsole.WriteLine(\"  Location arguments x, y, h, w can optionally be passed using '?'\");\n\t\t\tConsole.WriteLine(\"  Arguments are separated by '&'.  Only pdf files support this option.\");\n\t\t\tConsole.WriteLine(\"  For example, /i\\\"copyright.gif?x=4in&y=3in&w=7cm&h=16pt\\\"\");\n            Console.WriteLine(\"/u is followed by the report user ID.\");\n            Console.WriteLine(\"/l outputs the license and warranty\");\n            Console.WriteLine(\"/? outputs this text\");\n\t\t}\n\n\t\tstatic private void WriteLicense()\n\t\t{\n\t\t\tConsole.WriteLine(string.Format(\"RdlCmd Version {0}, Copyright (C) 2004-2008 fyiReporting Software, LLC\",\n\t\t\t\t\t\t\tAssembly.GetExecutingAssembly().GetName().Version.ToString()));\n\t\t\tConsole.WriteLine(\"\");\n\t\t\tConsole.WriteLine(\"RdlCmd comes with ABSOLUTELY NO WARRANTY.  This is free software,\");\n\t\t\tConsole.WriteLine(\"and you are welcome to redistribute it under certain conditions.\");\n\t\t\tConsole.WriteLine(\"\");\n\t\t\tConsole.WriteLine(\"For help, type RdlCmd /?\");\n\n\t\t\treturn;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlCmd/RdlCmd.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\t<PropertyGroup>\n\t\t<ApplicationIcon>App.ico</ApplicationIcon>\n\t\t<DelaySign>false</DelaySign>\n\t\t<OutputType>Exe</OutputType>\n\t\t<RootNamespace>Majorsilence.Reporting.RdlCmd</RootNamespace>\n\t\t<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>\n\t\t<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>\n\t\t<Configurations>Debug;Release;Debug-DrawingCompat;Release-DrawingCompat</Configurations>\n\t\t<TargetFrameworks>net48;net8.0;net10.0</TargetFrameworks>\n        <TargetFrameworks Condition=\"'$(OS)' == 'Unix'\">net8.0;net10.0</TargetFrameworks>\n\t\t<WarningsAsErrors>4014</WarningsAsErrors>\n\t</PropertyGroup>\n\t<ItemGroup>\n\t\t<Reference Update=\"System\">\n\t\t\t<Name>System</Name>\n\t\t</Reference>\n\t\t<Reference Update=\"System.Data\">\n\t\t\t<Name>System.Data</Name>\n\t\t</Reference>\n\t\t<Reference Update=\"System.Xml\">\n\t\t\t<Name>System.XML</Name>\n\t\t</Reference>\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<Content Include=\"App.ico\" />\n\t</ItemGroup>\n\t<ItemGroup>\n\t  <PackageReference Include=\"Microsoft.Data.SqlClient\" />\n\t  <PackageReference Include=\"Microsoft.Data.Sqlite\" />\n\t  <PackageReference Include=\"MySql.Data\" />\n\t  <PackageReference Include=\"Npgsql\" />\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<ProjectReference Include=\"..\\DataProviders\\Majorsilence.Reporting.DataProviders.csproj\" />\n\t\t<ProjectReference Include=\"..\\RdlCri\\Majorsilence.Reporting.RdlCri.csproj\" />\n\t\t<ProjectReference Include=\"..\\RdlEngine\\Majorsilence.Reporting.RdlEngine.csproj\" />\n\t</ItemGroup>\n\t<PropertyGroup />\n</Project>\n"
  },
  {
    "path": "RdlCmd/runtimeconfig.template.json",
    "content": "{\n    \"properties\": {\n      \"runtimeOptions\": {\n        \n      }\n    },\n    \"configProperties\": {\n      \"System.Drawing.EnableUnixSupport\": true\n    }\n  }"
  },
  {
    "path": "RdlCreator/Body.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Xml.Serialization;\nusing System;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n\n    public class Body\n    {\n        [XmlElement(\"ReportItems\", typeof(ReportItemsBody))]\n        public ReportItemsBody ReportItems { get; set; }\n\n        [XmlElement(ElementName = \"Height\")]\n        public ReportItemSize Height { get; set; }\n\n        [XmlElement(ElementName = \"Width\")]\n        public ReportItemSize Width { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/BorderColor.cs",
    "content": "﻿using System.Xml.Serialization;\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class BorderColor\n    {\n        [XmlElement(ElementName = \"Bottom\")]\n        public string Bottom { get; set; }\n\n        [XmlElement(ElementName = \"Top\")]\n        public string Top { get; set; }\n\n        [XmlElement(ElementName = \"Left\")]\n        public string Left { get; set; }\n\n        [XmlElement(ElementName = \"Right\")]\n        public string Right { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/BorderStyle.cs",
    "content": "﻿using System.Xml.Serialization;\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class BorderStyle\n    {\n        [XmlElement(ElementName = \"Default\")]\n        public BorderStyleType Default { get; set; }\n\n        [XmlElement(ElementName = \"Left\")]\n        public BorderStyleType Left { get; set; }\n\n        [XmlElement(ElementName = \"Right\")]\n        public BorderStyleType Right { get; set; }\n\n        [XmlElement(ElementName = \"Top\")]\n        public BorderStyleType Top { get; set; }\n\n        [XmlElement(ElementName = \"Bottom\")]\n        public BorderStyleType Bottom { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/BorderStyleType.cs",
    "content": "﻿namespace Majorsilence.Reporting.RdlCreator\n{\n    public class BorderStyleType\n    {\n        private string _value;\n\n        public BorderStyleType()\n        {\n            _value = \"None\";\n        }\n        public BorderStyleType(string value)\n        {\n            _value = value;\n        }\n        public static BorderStyleType None => new BorderStyleType(\"None\");\n        public static BorderStyleType Solid => new BorderStyleType(\"Solid\");\n        public static BorderStyleType Dashed => new BorderStyleType(\"Dashed\");\n\n        public static implicit operator string(BorderStyleType borderStyleType)\n        {\n            return borderStyleType.ToString();\n        }\n\n        public override string ToString()\n        {\n            return _value;\n        }\n    }\n}"
  },
  {
    "path": "RdlCreator/BorderWidth.cs",
    "content": "﻿using System.Xml.Serialization;\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class BorderWidth\n    {\n        [XmlElement(ElementName = \"Top\")]\n        public ReportItemSize Top { get; set; }\n\n        [XmlElement(ElementName = \"Bottom\")]\n        public ReportItemSize Bottom { get; set; }\n\n        [XmlElement(ElementName = \"Left\")]\n        public ReportItemSize Left { get; set; }\n\n        [XmlElement(ElementName = \"Right\")]\n        public ReportItemSize Right { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/Card.cs",
    "content": "﻿using System;\nusing System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class Card\n    {\n        private readonly Report _rpt = null;\n\n        public Card() { }\n\n        public Card(Report rpt)\n        {\n            _rpt = rpt;\n        }\n\n        [XmlElement(ElementName = \"Value\")] public Value Value { get; set; }\n\n        [XmlElement(ElementName = \"Style\")] public Style Style { get; set; }\n\n        [XmlAttribute(AttributeName = \"Name\")] public string Name { get; set; }\n\n        [XmlElement(ElementName = \"Top\")] public ReportItemSize Top { get; set; }\n\n        [XmlElement(ElementName = \"Left\")] public ReportItemSize Left { get; set; }\n\n        [XmlElement(ElementName = \"Width\")] public ReportItemSize Width { get; set; }\n\n        [XmlElement(ElementName = \"Height\")] public ReportItemSize Height { get; set; }\n\n        [XmlElement(ElementName = \"CanGrow\")] public bool CanGrow { get; set; }\n\n        public bool PageBreakAtEnd { get; set; }\n\n        public bool PageBreakAtStart { get; set; }\n\n        public void Add(Text text)\n        {\n            // Calculate the relative position of the Text\n            // TODO: Handle units other than \"pt\"\n            float relativeTop = this.Top.Value + text.Top.Value;\n            float relativeLeft = this.Left.Value + text.Left.Value;\n\n            // Set the Text's position relative to the Card\n            text.Top = relativeTop.ToString();\n            text.Left = relativeLeft.ToString();\n\n            _rpt?.Body?.ReportItems?.Text?.Add(text);\n        }\n\n        public void Add(CustomReportItems cri)\n        {\n            // Calculate the relative position of the Text\n            // TODO: Handle units other than \"pt\"\n            float relativeTop = this.Top.Value + cri.Top.Value;\n            float relativeLeft = this.Left.Value + cri.Left.Value;\n\n            // Set the Text's position relative to the Card\n            cri.Top = relativeTop.ToString();\n            cri.Left = relativeLeft.ToString();\n\n            _rpt?.Body?.ReportItems?.CustomReportItems?.Add(cri);\n        }\n    }\n}"
  },
  {
    "path": "RdlCreator/ConnectionProperties.cs",
    "content": "﻿using System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class ConnectionProperties\n    {\n        [XmlElement(ElementName = \"DataProvider\")]\n        public string DataProvider { get; set; }\n\n        [XmlElement(ElementName = \"ConnectString\")]\n        public string ConnectString { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/Create.cs",
    "content": "﻿using Majorsilence.Reporting.Rdl;\nusing MathNet.Numerics;\nusing System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Data.Common;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Xml.Serialization;\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class Create\n    {\n        public async Task<Rdl.Report> GenerateRdl(Report report)\n        {\n            var serializer = new XmlSerializer(typeof(Report));\n            string xml;\n            \n            #if NET6_OR_GREATER\n            await using (var writer = new Utf8StringWriter())\n            {\n                serializer.Serialize(writer, report);\n                xml = writer.ToString();\n            }\n            #else\n            using (var writer = new Utf8StringWriter())\n            {\n                serializer.Serialize(writer, report);\n                xml = writer.ToString();\n            }\n#endif\n\n            var rdlp = new RDLParser(xml);\n            var fyiReport = await rdlp.Parse();\n\n            ValidateReport(fyiReport);\n\n            return fyiReport;\n        }\n\n        private static void ValidateReport(Rdl.Report fyiReport)\n        {\n            if (fyiReport.ErrorMaxSeverity > 0)\n            {\n                if (fyiReport.ErrorMaxSeverity > 4)\n                {\n                    var errorMessages = string.Join(Environment.NewLine, fyiReport.ErrorItems.Cast<string>());\n                    int severity = fyiReport.ErrorMaxSeverity;\n                    fyiReport.ErrorReset();\n                    throw new Exception($\"Errors encountered with severity {severity}:{Environment.NewLine}{errorMessages}\");\n                }\n            }\n        }\n\n        public async Task<Rdl.Report> GenerateRdl(DataTable data,\n            string description = \"\",\n            string author = \"\",\n            string pageHeight = \"11in\",\n            string pageWidth = \"8.5in\",\n            string width = \"7.5in\",\n            string topMargin = \".25in\",\n            string leftMargin = \".25in\",\n            string rightMargin = \".25in\",\n            string bottomMargin = \".25in\",\n            string pageHeaderText = \"\",\n            string name=\"\")\n        {\n            var headerTableCells = new List<TableCell>();\n            var bodyTableCells = new List<TableCell>();\n            var fields = new List<Field>();\n\n            for (int i = 0; i < data.Columns.Count; i++)\n            {\n                string colName = data.Columns[i].ColumnName;\n                TypeCode colType = Type.GetTypeCode(data.Columns[i].DataType);\n                headerTableCells.Add(new TableCell\n                {\n                    ReportItems = new TableCellReportItems()\n                    {\n                        ReportItem = new Text\n                        {\n                            Name = $\"TextboxH{colName}\",\n                            Value = new Value { Text = colName },\n                            Style = new Style { TextAlign = \"Center\", FontWeight = \"Bold\" }\n                        }\n                    }\n                });\n\n                bodyTableCells.Add(new TableCell\n                {\n                    ReportItems = new TableCellReportItems()\n                    {\n                        ReportItem = new Text\n                        {\n                            Name = $\"TextBoxB{colName}\",\n                            Value = new Value { Text = $\"=Fields!{colName}.Value\" },\n                            CanGrow = true\n                        }\n                    }\n                });\n\n                fields.Add(new Field\n                {\n                    Name = colName,\n                    DataField = colName,\n                    TypeName = colType.ToString()\n                });\n            }\n\n            var xml = InternalReportCreation(\"\", \"\",\n                \"\", description, author, pageHeight, pageWidth, width, topMargin, leftMargin,\n                rightMargin, bottomMargin, pageHeaderText, headerTableCells, bodyTableCells, fields, name);\n\n            var rdlp = new RDLParser(xml);\n            var fyiReport = await rdlp.Parse();\n            ValidateReport(fyiReport);\n            await fyiReport.DataSets[\"Data\"].SetData(data);\n            return fyiReport;\n        }\n\n        public async Task<Rdl.Report> GenerateRdl<T>(IEnumerable<T> data,\n            string description = \"\",\n            string author = \"\",\n            string pageHeight = \"11in\",\n            string pageWidth = \"8.5in\",\n            string width = \"7.5in\",\n            string topMargin = \".25in\",\n            string leftMargin = \".25in\",\n            string rightMargin = \".25in\",\n            string bottomMargin = \".25in\",\n            string pageHeaderText = \"\",\n            string name=\"\")\n        {\n            var headerTableCells = new List<TableCell>();\n            var bodyTableCells = new List<TableCell>();\n            var fields = new List<Field>();\n\n            var properties = typeof(T).GetProperties();\n\n            for (int i = 0; i < properties.Length; i++)\n            {\n                string colName = properties[i].Name;\n                TypeCode colType = Type.GetTypeCode(properties[i].PropertyType);\n                headerTableCells.Add(new TableCell\n                {\n                    ReportItems = new TableCellReportItems()\n                    {\n                        ReportItem = new Text\n                        {\n                            Name = $\"TextboxH{colName}\",\n                            Value = new Value { Text = colName },\n                            Style = new Style { TextAlign = \"Center\", FontWeight = \"Bold\" }\n                        }\n                    }\n                });\n\n                bodyTableCells.Add(new TableCell\n                {\n                    ReportItems = new TableCellReportItems()\n                    {\n                        ReportItem = new Text\n                        {\n                            Name = $\"TextBoxB{colName}\",\n                            Value = new Value { Text = $\"=Fields!{colName}.Value\" },\n                            CanGrow = true\n                        }\n                    }\n                });\n\n                fields.Add(new Field\n                {\n                    Name = colName,\n                    DataField = colName,\n                    TypeName = colType.ToString()\n                });\n            }\n\n            var xml = InternalReportCreation(\"\", \"\",\n                \"\", description, author, pageHeight, pageWidth, width, topMargin, leftMargin,\n                rightMargin, bottomMargin, pageHeaderText, headerTableCells, bodyTableCells, fields, name);\n\n            var rdlp = new RDLParser(xml);\n\n            var fyiReport = await rdlp.Parse();\n            ValidateReport(fyiReport);\n            await fyiReport.DataSets[\"Data\"].SetData(data);\n            return fyiReport;\n        }\n\n        \n        \n        private string GetDataProviderString(DataProviders dataProvider)\n        {\n            return dataProvider switch\n            {\n                DataProviders.SqlServer_MicrosoftDataSqlClient => \"Microsoft.Data.SqlClient\",\n                DataProviders.Oracle => \"Oracle\",\n#if WINDOWS\n                DataProviders.OleDb => \"OLEDB\",\n#endif\n                DataProviders.Odbc => \"ODBC\",\n                DataProviders.Xml => \"XML\",\n                DataProviders.Text => \"Text\",\n                DataProviders.MySql => \"MySQL.NET\",\n                DataProviders.PostgreSQL => \"PostgreSQL\",\n                DataProviders.SqlServer_SystemData => \"SQL\",\n                DataProviders.Firebird => \"Firebird.NET 2.0\",\n                DataProviders.SQLite_MicrosoftData => \"Microsoft.Data.Sqlite\",\n                DataProviders.SQLite_SystemData => \"SQLite\",\n                DataProviders.Json => \"Json\",\n                DataProviders.FileDirectory => \"FileDirectory\",\n                DataProviders.PostgreSQL_Devart => \"PostgreSQL_Devart\",\n                _ => throw new ArgumentOutOfRangeException(nameof(dataProvider), dataProvider, null)\n            };\n        }\n        \n        public async Task<Rdl.Report> GenerateRdl(DataProviders dataProvider,\n            string connectionString,\n            string commandText,\n            CommandType commandType = CommandType.Text,\n            string description = \"\",\n            string author = \"\",\n            string pageHeight = \"11in\",\n            string pageWidth = \"8.5in\",\n            string width = \"7.5in\",\n            string topMargin = \".25in\",\n            string leftMargin = \".25in\",\n            string rightMargin = \".25in\",\n            string bottomMargin = \".25in\",\n            string pageHeaderText = \"\",\n            string name = \"\")\n        {\n            string providerString = GetDataProviderString(dataProvider);\n            return await GenerateRdl(providerString, \n                connectionString, \n                commandText, \n                commandType, \n                description, \n                author, \n                pageHeight, \n                pageWidth, \n                width,\n                topMargin,\n                leftMargin,\n                rightMargin,\n                bottomMargin,\n                pageHeaderText,\n                name);\n        }\n        \n        public async Task<Rdl.Report> GenerateRdl(string dataProvider,\n            string connectionString,\n            string commandText,\n            CommandType commandType = CommandType.Text,\n            string description = \"\",\n            string author = \"\",\n            string pageHeight = \"11in\",\n            string pageWidth = \"8.5in\",\n            string width = \"7.5in\",\n            string topMargin = \".25in\",\n            string leftMargin = \".25in\",\n            string rightMargin = \".25in\",\n            string bottomMargin = \".25in\",\n            string pageHeaderText = \"\",\n            string name = \"\")\n        {\n\n            var headerTableCells = new List<TableCell>();\n            var bodyTableCells = new List<TableCell>();\n            var fields = new List<Field>();\n\n            using (var cn = RdlEngineConfig.GetConnection(dataProvider, connectionString))\n            {\n                cn.ConnectionString = connectionString;\n                cn.Open();\n                using (var cmd = cn.CreateCommand())\n                {\n                    cmd.CommandText = commandText;\n                    cmd.CommandType = commandType;\n                    using (var dr = cmd.ExecuteReader(CommandBehavior.SchemaOnly))\n                    {\n                        for (int i = 0; i < dr.FieldCount; i++)\n                        {\n                            string colName = dr.GetName(i);\n                            TypeCode colType = Type.GetTypeCode(dr.GetFieldType(i));\n                            headerTableCells.Add(new TableCell\n                            {\n                                ReportItems = new TableCellReportItems()\n                                {\n                                    ReportItem = new Text\n                                    {\n                                        Name = $\"TextboxH{colName}\",\n                                        Value = new Value { Text = colName },\n                                        Style = new Style { TextAlign = \"Center\", FontWeight = \"Bold\" }\n                                    }\n                                }\n                            });\n\n                            bodyTableCells.Add(new TableCell\n                            {\n                                ReportItems = new TableCellReportItems()\n                                {\n                                    ReportItem = new Text\n                                    {\n                                        Name = $\"TextBoxB{colName}\",\n                                        Value = new Value { Text = $\"=Fields!{colName}.Value\" },\n                                        CanGrow = true\n                                    }\n                                }\n                            });\n\n                            fields.Add(new Field\n                            {\n                                Name = colName,\n                                DataField = colName,\n                                TypeName = colType.ToString()\n                            });\n\n                        }\n                    }\n\n                }\n            }\n\n            var xml = InternalReportCreation(dataProvider, connectionString,\n                commandText, description, author, pageHeight, pageWidth, width, topMargin, leftMargin,\n                rightMargin, bottomMargin, pageHeaderText, headerTableCells, bodyTableCells, fields, name);\n\n            var rdlp = new RDLParser(xml);\n            var fyiReport = await rdlp.Parse();\n            ValidateReport(fyiReport);\n            return fyiReport;\n        }\n\n        private static string InternalReportCreation(string dataProvider, string connectionString,\n            string commandText, string description, string author, string pageHeight, string pageWidth,\n            string width, string topMargin, string leftMargin, string rightMargin, string bottomMargin,\n            string pageHeaderText, List<TableCell> headerTableCells, List<TableCell> bodyTableCells, List<Field> fields,\n            string name)\n        {\n            // Create a new instance of the Report class\n            var report = new Report\n            {\n                Description = description,\n                Author = author,\n                Name=name,\n                PageHeight = pageHeight,\n                PageWidth = pageWidth,\n                Width = width,\n                TopMargin = topMargin,\n                LeftMargin = leftMargin,\n                RightMargin = rightMargin,\n                BottomMargin = bottomMargin,\n                DataSources = new DataSources\n                {\n                    DataSource = new DataSource\n                    {\n                        Name = \"DS1\",\n                        ConnectionProperties = new ConnectionProperties\n                        {\n                            DataProvider = dataProvider,\n                            ConnectString = connectionString\n                        }\n                    }\n                },\n                DataSets = new DataSets\n                {\n                    DataSet = new DataSet\n                    {\n                        Name = \"Data\",\n                        Query = new Query\n                        {\n                            DataSourceName = \"DS1\",\n                            CommandText = commandText\n                        },\n                        Fields = new Fields\n                        {\n                            Field = fields\n                        }\n                    }\n                },\n                PageHeader = new PageHeader\n                {\n                    Height = \".5in\",\n                    ReportItems = new ReportItemsHeader\n                    {\n                        Textbox = new Text\n                        {\n                            Name = \"Textbox1\",\n                            Top = \".1in\",\n                            Left = \".1in\",\n                            Width = \"6in\",\n                            Height = \".25in\",\n                            Value = new Value { Text = pageHeaderText },\n                            Style = new Style { FontSize = \"15pt\", FontWeight = \"Bold\" }\n                        }\n                    },\n                    PrintOnFirstPage = \"true\",\n                    PrintOnLastPage = \"true\"\n                },\n                Body = new Body\n                {\n                    ReportItems = new ReportItemsBody\n                    {\n                        Table = new Table\n                        {\n                            TableName = \"Table1\",\n                            DataSetName = \"Data\",\n                            NoRows = \"Query returned no rows!\",\n                            TableColumns = new TableColumns\n                            {\n                                TableColumn = fields.Select(f => new TableColumn\n                                {\n                                    Width = \"1in\" // You can adjust the width as needed\n                                }).ToList()\n                            },\n                            Header = new Header\n                            {\n                                TableRows = new TableRows\n                                {\n                                    TableRow = new TableRow\n                                    {\n                                        Height = \"12pt\",\n                                        TableCells = new TableCells()\n                                        {\n                                            TableCell = headerTableCells\n                                        }\n                                    }\n                                },\n                                RepeatOnNewPage = \"true\"\n                            },\n                            Details = new Details\n                            {\n                                TableRows = new TableRows\n                                {\n                                    TableRow = new TableRow\n                                    {\n                                        Height = \"12pt\",\n                                        TableCells = new TableCells()\n                                        {\n                                            TableCell = bodyTableCells\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    Height = \"36pt\"\n                },\n                PageFooter = new PageFooter\n                {\n                    Height = \"14pt\",\n                    ReportItems = new ReportItemsFooter\n                    {\n                        Textbox = new Text\n                        {\n                            Name = \"Textbox5\",\n                            Top = \"1pt\",\n                            Left = \"10pt\",\n                            Height = \"12pt\",\n                            Width = \"3in\",\n                            Value = new Value { Text = \"=Globals!PageNumber + ' of ' + Globals!TotalPages\" },\n                            Style = new Style { FontSize = \"10pt\", FontWeight = \"Normal\" }\n                        }\n                    },\n                    PrintOnFirstPage = \"true\",\n                    PrintOnLastPage = \"true\"\n                }\n            };\n\n            var serializer = new XmlSerializer(typeof(Report));\n            string xml;\n            using (var writer = new Utf8StringWriter())\n            {\n                serializer.Serialize(writer, report);\n                xml = writer.ToString();\n            }\n\n            return xml;\n        }\n    }\n\n    public class Utf8StringWriter : StringWriter\n    {\n        public override Encoding Encoding => Encoding.UTF8;\n    }\n\n}\n"
  },
  {
    "path": "RdlCreator/CustomProperties.cs",
    "content": "﻿using System.Xml.Serialization;\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n\n    public class CustomProperties\n    {\n        [XmlElement(ElementName = \"CustomProperty\")]\n        public CustomProperty CustomProperty { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/CustomProperty.cs",
    "content": "﻿using System.Xml.Serialization;\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class CustomProperty\n    {\n        [XmlElement(ElementName = \"Name\")]\n        public string Name { get; set; }\n\n        [XmlElement(ElementName = \"Value\")]\n        public string Value { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/CustomReportItems.cs",
    "content": "﻿using System.Xml.Serialization;\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class CustomReportItems\n    {\n        public string Type { get; set; }\n        public ReportItemSize Height { get; set; }\n        public ReportItemSize Width { get; set; }\n        public ReportItemSize Left { get; set; }\n        public ReportItemSize Top { get; set; }\n\n        [XmlAttribute(AttributeName = \"Name\")]\n        public string Name { get; set; }\n\n        [XmlElement(ElementName = \"CustomProperties\")]\n        public CustomProperties CustomProperties { get; set; }\n        [XmlElement(ElementName = \"Style\")]\n        public Style Style { get; set; }\n        [XmlElement(ElementName = \"CanGrow\")]\n        public string CanGrow { get; set; }\n        [XmlElement(ElementName = \"Source\")]\n        public string Source { get; set; } = \"Embedded\";\n    }\n}"
  },
  {
    "path": "RdlCreator/DataProviders.cs",
    "content": "namespace Majorsilence.Reporting.RdlCreator\n{\n    public enum DataProviders\n    {\n        /// <summary>\n        /// Microsoft.Data.SqlClient provider\n        /// </summary>\n        SqlServer_MicrosoftDataSqlClient = 1,\n        Oracle = 2,\n#if WINDOWS\n        OleDb = 3,\n#endif\n        Odbc = 4,\n        \n        /// <summary>\n        /// Majorsilence.Reporting.DataProviders XML provider\n        /// </summary>\n        Xml = 5,\n        \n        /// <summary>\n        /// Majorsilence.Reporting.DataProviders Text provider\n        /// </summary>\n        Text = 6,\n        MySql = 7,\n        /// <summary>\n        /// Npgsql provider\n        /// </summary>\n        PostgreSQL = 8,\n        /// <summary>\n        /// System.Data.SqlClient provider\n        /// </summary>\n        SqlServer_SystemData = 9,\n        \n        Firebird = 10,\n        \n        /// <summary>\n        /// Microsoft.Data.Sqlite provider\n        /// </summary>\n        SQLite_MicrosoftData = 11,\n        \n        /// <summary>\n        /// System.Data.SQLite provider\n        /// </summary>\n        SQLite_SystemData = 12,\n        \n        /// <summary>\n        /// Majorsilence.Reporting.DataProviders Json provider\n        /// </summary>\n        Json = 13,\n        \n        /// <summary>\n        /// Majorsilence.Reporting.DataProviders FileDirectory provider\n        /// </summary>\n        FileDirectory = 14,\n        \n        /// <summary>\n        /// PostgreSQL Devart dotConnect provider\n        /// </summary>\n        PostgreSQL_Devart = 15\n    }\n}"
  },
  {
    "path": "RdlCreator/DataSet.cs",
    "content": "﻿using System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class DataSet\n    {\n        [XmlElement(ElementName = \"Query\")]\n        public Query Query { get; set; }\n\n        [XmlElement(ElementName = \"Fields\")]\n        public Fields Fields { get; set; }\n\n        [XmlAttribute(AttributeName = \"Name\")]\n        public string Name { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/DataSets.cs",
    "content": "﻿using System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class DataSets\n    {\n        [XmlElement(ElementName = \"DataSet\")]\n        public DataSet DataSet { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/DataSource.cs",
    "content": "﻿using System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class DataSource\n    {\n        [XmlElement(ElementName = \"ConnectionProperties\")]\n        public ConnectionProperties ConnectionProperties { get; set; }\n\n        [XmlAttribute(AttributeName = \"Name\")]\n        public string Name { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/DataSources.cs",
    "content": "﻿using System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class DataSources\n    {\n        [XmlElement(ElementName = \"DataSource\")]\n        public DataSource DataSource { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/Details.cs",
    "content": "﻿using System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class Details\n    {\n        [XmlElement(ElementName = \"TableRows\")]\n        public TableRows TableRows { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/Document.cs",
    "content": "﻿using iTextSharp.text.pdf;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Xml.Serialization;\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    /// <summary>\n    /// Programmatically create PDFs.\n    /// </summary>\n    /// <remarks>Internally it is a combination of RDL and https://github.com/VahidN/iTextSharp.LGPLv2.Core</remarks>\n    [XmlRoot(ElementName = \"Report\", Namespace = \"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\")]\n    public class Document\n    {\n        public List<Page> Pages { get; private set; } = new List<Page>();\n\n        [XmlElement(ElementName = \"Description\")]\n        public string Description { get; set; }\n\n        [XmlElement(ElementName = \"Author\")]\n        public string Author { get; set; }\n\n        [XmlElement(ElementName = \"Name\")]\n        public string Name { get; set; }\n\n        [XmlElement(ElementName = \"PageHeight\")]\n        public ReportItemSize PageHeight { get; set; }\n\n        [XmlElement(ElementName = \"PageWidth\")]\n        public ReportItemSize PageWidth { get; set; }\n\n        [XmlElement(ElementName = \"DataSources\")]\n        public DataSources DataSources { get; set; }\n\n        //[XmlElement(ElementName = \"Width\")]\n        //public string Width { get; set; }\n\n        [XmlElement(ElementName = \"TopMargin\")]\n        public ReportItemSize TopMargin { get; set; }\n\n        [XmlElement(ElementName = \"LeftMargin\")]\n        public ReportItemSize LeftMargin { get; set; }\n\n        [XmlElement(ElementName = \"RightMargin\")]\n        public ReportItemSize RightMargin { get; set; }\n\n        [XmlElement(ElementName = \"BottomMargin\")]\n        public ReportItemSize BottomMargin { get; set; }\n\n\n        public PageFooter PageFooter { get; set; }\n\n        public Document WithDescription(string description)\n        {\n            Description = description;\n            return this;\n        }\n        public Document WithAuthor(string author)\n        {\n            Author = author;\n            return this;\n        }\n\n        public Document WithName(string name)\n        {\n            Name = name;\n            return this;\n        }\n\n        public Document WithPageHeight(string pageHeight)\n        {\n            PageHeight = pageHeight;\n            return this;\n        }\n\n        public Document WithPageWidth(string pageWidth)\n        {\n            PageWidth = pageWidth;\n            return this;\n        }\n\n        //public Document WithWidth(string width)\n        //{\n        //    Width = width;\n        //    return this;\n        //}\n\n        public Document WithTopMargin(string topMargin)\n        {\n            TopMargin = topMargin;\n            return this;\n        }\n\n        public Document WithLeftMargin(string leftMargin)\n        {\n            LeftMargin = leftMargin;\n            return this;\n        }\n\n        public Document WithRightMargin(string rightMargin)\n        {\n            RightMargin = rightMargin;\n            return this;\n        }\n\n        public Document WithBottomMargin(string bottomMargin)\n        {\n            BottomMargin = bottomMargin;\n            return this;\n        }\n\n        public Document WithPage(Page page)\n        {\n            Pages.Add(page);\n            return this;\n        }\n\n        public Document WithPage(Action<Page> options)\n        {\n            var p = new Page();\n            options(p);\n            Pages.Add(p);\n            return this;\n        }\n\n        public async Task<byte[]>Create()\n        {\n            using var ms = new MemoryStream();\n            await Create(ms);\n            return ms.ToArray();\n        }\n\n        public async Task Create(Stream output)\n        {\n            using var itextDocument = new iTextSharp.text.Document();\n            using var iTextCopy = new PdfCopy(itextDocument, output);\n            itextDocument.Open();\n\n            foreach (var page in Pages)\n            {\n                var report = new Report();\n                report\n                    //.WithWidth(Width)\n                    .WithTopMargin(TopMargin)\n                    .WithLeftMargin(LeftMargin)\n                    .WithRightMargin(RightMargin)\n                    .WithBottomMargin(BottomMargin)\n                    .WithPageHeader(page.PageHeader)\n                    .WithPageFooter(page.PageFooter)\n                    .WithBody(page.Body);\n\n                var create = new RdlCreator.Create();\n                var fyiReport = await create.GenerateRdl(report);\n                using var ms = new Majorsilence.Reporting.Rdl.MemoryStreamGen();\n                await fyiReport.RunGetData(null);\n                await fyiReport.RunRender(ms, Majorsilence.Reporting.Rdl.OutputPresentationType.PDF);\n                var pdf = ms.GetStream();\n                pdf.Position = 0;\n\n                using var reader = new PdfReader(pdf);\n                for (int i = 1; i <= reader.NumberOfPages; i++)\n                {\n                    iTextCopy.AddPage(iTextCopy.GetImportedPage(reader, i));\n                }\n                iTextCopy.FreeReader(reader);\n                reader.Close();\n            }\n\n            itextDocument.AddAuthor(Author);\n            itextDocument.AddCreationDate();\n            itextDocument.AddCreator(\"Majorsilence Reporting - RenderPdf_iTextSharp\");\n            itextDocument.AddSubject(Description);\n            itextDocument.AddTitle(Name);\n            itextDocument.Close();\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "RdlCreator/Field.cs",
    "content": "﻿using System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class Field\n    {\n        [XmlElement(ElementName = \"DataField\")]\n        public string DataField { get; set; }\n\n        [XmlElement(ElementName = \"TypeName\", Namespace = \"rd\")]\n        public string TypeName { get; set; }\n\n        [XmlAttribute(AttributeName = \"Name\")]\n        public string Name { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/Fields.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class Fields\n    {\n        [XmlElement(ElementName = \"Field\")]\n        public List<Field> Field { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/Header.cs",
    "content": "﻿using System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class Header\n    {\n        [XmlElement(ElementName = \"TableRows\")]\n        public TableRows TableRows { get; set; }\n\n        [XmlElement(ElementName = \"RepeatOnNewPage\")]\n        public string RepeatOnNewPage { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/Majorsilence.Reporting.RdlCreator.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\t<PropertyGroup>\n\t\t<OutputType>Library</OutputType>\n\t\t<AssemblyName>RdlCreator</AssemblyName>\n\t\t<GeneratePackageOnBuild>True</GeneratePackageOnBuild>\n\t\t<PackageId>Majorsilence.Reporting.RdlCreator</PackageId>\n\t\t<Configurations>Debug;Release;Debug-DrawingCompat;Release-DrawingCompat</Configurations>\n\t\t<TargetFrameworks>net48;net8.0;net10.0</TargetFrameworks>\n        <TargetFrameworks Condition=\"'$(OS)' == 'Unix'\">net8.0;net10.0</TargetFrameworks>\n\t\t<WarningsAsErrors>4014</WarningsAsErrors>\n\t</PropertyGroup>\n\t<PropertyGroup Condition=\"'$(Configuration)' == 'Debug-DrawingCompat' Or '$(Configuration)' == 'Release-DrawingCompat'\">\n\t\t<PackageId>Majorsilence.Reporting.RdlCreator.SkiaSharp</PackageId>\n\t</PropertyGroup>\n\t<ItemGroup>\n\t\t<ProjectReference Include=\"..\\DataProviders\\Majorsilence.Reporting.DataProviders.csproj\" />\n\t\t<ProjectReference Include=\"..\\RdlCri\\Majorsilence.Reporting.RdlCri.csproj\" />\n\t\t<ProjectReference Include=\"..\\RdlEngine\\Majorsilence.Reporting.RdlEngine.csproj\" />\n\t</ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "RdlCreator/Page.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Xml.Serialization;\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class Page\n    {\n        [XmlElement(ElementName = \"PageHeader\")]\n        public PageHeader PageHeader { get; set; }\n\n        [XmlElement(ElementName = \"Body\")]\n        public Body Body { get; set; }\n\n        [XmlElement(ElementName = \"PageFooter\")]\n        public PageFooter PageFooter { get; set; }\n\n        public Page WithHeight(ReportItemSize height)\n        {\n            if (this.Body == null)\n            {\n                this.Body = new Body();\n            }\n            this.Body.Height = height;\n            return this;\n        }\n\n        public Page WithWidth(ReportItemSize width)\n        {\n            if (this.Body == null)\n            {\n                this.Body = new Body();\n            }\n            this.Body.Width = width;\n            return this;\n        }\n\n        public Page WithPageHeader(PageHeader pageHeader)\n        {\n            PageHeader = pageHeader;\n            return this;\n        }\n        public Page WithPageFooter(PageFooter pageFooter)\n        {\n            PageFooter = pageFooter;\n            return this;\n        }\n\n        public Page WithText(Text textbox)\n        {\n\n            InitReportItemBody(false);\n            this.Body.ReportItems.Text.Add(textbox);\n\n            return this;\n        }\n\n        public Page WithCard(Card card)\n        {\n            InitReportItemBody(false);\n\n            this.Body.ReportItems.Cards.Add(card);\n\n            return this;\n        }\n\n        public Page WithTableColumns(TableColumns tableColumns)\n        {\n            InitReportItemBody(true);\n            this.Body.ReportItems.Table.TableColumns = tableColumns;\n            return this;\n        }\n\n        public Page WithTableHeader(TableRow header, string repeatOnNewPage = \"true\")\n        {\n            InitReportItemBody(true);\n            this.Body.ReportItems.Table.Header = new Header()\n            {\n                TableRows = new TableRows()\n                {\n                    TableRow = header\n                },\n                RepeatOnNewPage = repeatOnNewPage\n            };\n            return this;\n        }\n\n        public Page WithTableDetails(TableRow row)\n        {\n            InitReportItemBody(true);\n            this.Body.ReportItems.Table.Details = new Details();\n            this.Body.ReportItems.Table.Details.TableRows = new TableRows()\n            {\n                TableRow = row\n            };\n            return this;\n        }\n\n        public Page WithTableNoRows(string noRows)\n        {\n            InitReportItemBody(true);\n\n            this.Body.ReportItems.Table.NoRows = noRows;\n            return this;\n        }\n\n        public Page WithTableName(string tableName)\n        {\n            InitReportItemBody(true);\n            this.Body.ReportItems.Table.TableName = tableName;\n            return this;\n        }\n\n        public Page WithImage(ReportItemImage image)\n        {\n            InitReportItemBody(false);\n            if (this.Body.ReportItems.Images == null)\n            {\n                this.Body.ReportItems.Images = new List<ReportItemImage>();\n            }\n            this.Body.ReportItems.Images.Add(image);\n            return this;\n        }\n\n        private void InitReportItemBody(bool includeTable)\n        {\n            if (this.Body == null)\n            {\n                this.Body = new Body();\n            }\n\n            if (this.Body.ReportItems == null)\n            {\n                this.Body.ReportItems = new ReportItemsBody()\n                {\n                    Text = new List<Text>(),\n                    Cards = new List<Card>(),\n                    CustomReportItems = new List<CustomReportItems>()\n                };\n            }\n\n            if (includeTable && this.Body.ReportItems.Table == null)\n            {\n                this.Body.ReportItems.Table = new Table();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlCreator/PageFooter.cs",
    "content": "﻿using System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class PageFooter\n    {\n        [XmlElement(ElementName = \"Height\")]\n        public ReportItemSize Height { get; set; }\n\n        [XmlElement(ElementName = \"ReportItems\")]\n        public ReportItemsFooter ReportItems { get; set; }\n\n        [XmlElement(ElementName = \"PrintOnFirstPage\")]\n        public string PrintOnFirstPage { get; set; }\n\n        [XmlElement(ElementName = \"PrintOnLastPage\")]\n        public string PrintOnLastPage { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/PageHeader.cs",
    "content": "﻿using System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class PageHeader\n    {\n        [XmlElement(ElementName = \"Height\")]\n        public ReportItemSize Height { get; set; }\n\n        [XmlElement(ElementName = \"ReportItems\")]\n        public ReportItemsHeader ReportItems { get; set; }\n\n        [XmlElement(ElementName = \"PrintOnFirstPage\")]\n        public string PrintOnFirstPage { get; set; }\n\n        [XmlElement(ElementName = \"PrintOnLastPage\")]\n        public string PrintOnLastPage { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/Query.cs",
    "content": "﻿using System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class Query\n    {\n        [XmlElement(ElementName = \"DataSourceName\")]\n        public string DataSourceName { get; set; }\n\n        [XmlElement(ElementName = \"CommandText\")]\n        public string CommandText { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/Report.cs",
    "content": "﻿using Majorsilence.Reporting.Rdl;\nusing System;\nusing System.Collections.Generic;\nusing System.Xml.Serialization;\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    // Report class representing the root element\n    [XmlRoot(ElementName = \"Report\", Namespace = \"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\")]\n    public class Report\n    {\n        [XmlElement(ElementName = \"Description\")]\n        public string Description { get; set; }\n\n        [XmlElement(ElementName = \"Author\")]\n        public string Author { get; set; }\n\n        [XmlElement(ElementName = \"Name\")]\n        public string Name { get; set; }\n\n        [XmlElement(ElementName = \"PageHeight\")]\n        public ReportItemSize PageHeight { get; set; }\n\n        [XmlElement(ElementName = \"PageWidth\")]\n        public ReportItemSize PageWidth { get; set; }\n\n        [XmlElement(ElementName = \"DataSources\")]\n        public DataSources DataSources { get; set; }\n\n        [XmlElement(ElementName = \"Width\")]\n        public ReportItemSize Width { get; set; }\n\n        [XmlElement(ElementName = \"TopMargin\")]\n        public ReportItemSize TopMargin { get; set; }\n\n        [XmlElement(ElementName = \"LeftMargin\")]\n        public ReportItemSize LeftMargin { get; set; }\n\n        [XmlElement(ElementName = \"RightMargin\")]\n        public ReportItemSize RightMargin { get; set; }\n\n        [XmlElement(ElementName = \"BottomMargin\")]\n        public ReportItemSize BottomMargin { get; set; }\n\n        [XmlElement(ElementName = \"DataSets\")]\n        public DataSets DataSets { get; set; }\n\n        [XmlElement(ElementName = \"PageHeader\")]\n        public PageHeader PageHeader { get; set; }\n\n        [XmlElement(ElementName = \"Body\")]\n        public Body Body { get; set; }\n\n        [XmlElement(ElementName = \"PageFooter\")]\n        public PageFooter PageFooter { get; set; }\n\n        // Fluid style methods\n\n        public Report WithDescription(string description)\n        {\n            Description = description;\n            return this;\n        }\n\n        public Report WithAuthor(string author)\n        {\n            Author = author;\n            return this;\n        }\n\n        public Report WithName(string name)\n        {\n            Name = name;\n            return this;\n        }\n\n        public Report WithPageHeight(ReportItemSize pageHeight)\n        {\n            PageHeight = pageHeight;\n            return this;\n        }\n\n        public Report WithPageWidth(ReportItemSize pageWidth)\n        {\n            PageWidth = pageWidth;\n            return this;\n        }\n\n        public Report WithDataSources(DataSources dataSources)\n        {\n            DataSources = dataSources;\n            return this;\n        }\n\n        public Report WithWidth(ReportItemSize width)\n        {\n            Width = width;\n            return this;\n        }\n\n        public Report WithTopMargin(ReportItemSize topMargin)\n        {\n            TopMargin = topMargin;\n            return this;\n        }\n\n        public Report WithLeftMargin(ReportItemSize leftMargin)\n        {\n            LeftMargin = leftMargin;\n            return this;\n        }\n\n        public Report WithRightMargin(ReportItemSize rightMargin)\n        {\n            RightMargin = rightMargin;\n            return this;\n        }\n\n        public Report WithBottomMargin(ReportItemSize bottomMargin)\n        {\n            BottomMargin = bottomMargin;\n            return this;\n        }\n\n        public Report WithDataSets(DataSets dataSets)\n        {\n            DataSets = dataSets;\n            return this;\n        }\n\n        public Report WithPageHeader(PageHeader pageHeader)\n        {\n            PageHeader = pageHeader;\n            return this;\n        }\n\n        public Report WithBody(ReportItemSize height)\n        {\n            Body = new Body()\n            {\n                Height = height\n            };\n            return this;\n        }\n\n        public Report WithBody(Body body)\n        {\n            Body = body;\n            return this;\n        }\n\n        public Report WithPageBreak()\n        {\n            return WithPageBreak(\"1pt\");\n        }\n        \n        public Report WithPageBreak(ReportItemSize yPos)\n        {\n            var pageBreakCard = new Card(this)\n            {\n                CanGrow = false,\n                Height = \"0pt\",\n                Width = \"1pt\",\n                PageBreakAtEnd = true,\n                Top=yPos\n            };\n            this.Body.ReportItems.Cards.Add(pageBreakCard);\n            return this;\n        }\n\n        public Report WithPageFooter(PageFooter pageFooter)\n        {\n            PageFooter = pageFooter;\n            return this;\n        }\n\n        public Report WithTable()\n        {\n            InitReportItemBody(true);\n            return this;\n        }\n\n        public Report WithReportText(Text textbox)\n        {\n            InitReportItemBody(false);\n            this.Body.ReportItems.Text.Add(textbox);\n\n            return this;\n        }\n\n        private void InitReportItemBody(bool includeTable)\n        {\n            if (this.Body.ReportItems == null)\n            {\n                this.Body.ReportItems = new ReportItemsBody()\n                {\n                    Text = new List<Text>(),\n                    Cards = new List<Card>(),\n                    CustomReportItems = new List<CustomReportItems>()\n                };\n            }\n\n            if (includeTable && this.Body.ReportItems.Table == null)\n            {\n                this.Body.ReportItems.Table = new Table();\n            }\n        }\n\n        public Report WithCard(Card card)\n        {\n            InitReportItemBody(false);\n\n            this.Body.ReportItems.Cards.Add(card);\n\n            return this;\n        }\n\n        public Report WithTableColumns(TableColumns tableColumns)\n        {\n            this.Body.ReportItems.Table.TableColumns = tableColumns;\n            return this;\n        }\n\n        public Report WithTableHeader(TableRow header, string repeatOnNewPage = \"true\")\n        {\n            this.Body.ReportItems.Table.Header = new Header()\n            {\n                TableRows = new TableRows()\n                {\n                    TableRow = header\n                },\n                RepeatOnNewPage = repeatOnNewPage\n            };\n            return this;\n        }\n\n        public Report WithTableDetails(TableRow row)\n        {\n            this.Body.ReportItems.Table.Details = new Details();\n            this.Body.ReportItems.Table.Details.TableRows = new TableRows()\n            {\n                TableRow = row\n            };\n            return this;\n        }\n\n        public Report WithTableDataSetName(string dataSetName)\n        {\n            this.Body.ReportItems.Table.DataSetName = dataSetName;\n            return this;\n        }\n\n        public Report WithTableNoRows(string noRows)\n        {\n            this.Body.ReportItems.Table.NoRows = noRows;\n            return this;\n        }\n\n        public Report WithTableName(string tableName)\n        {\n            this.Body.ReportItems.Table.TableName = tableName;\n            return this;\n        }\n\n        public Report WithImage(ReportItemImage image)\n        {\n            InitReportItemBody(false);\n            if (this.Body.ReportItems.Images == null)\n            {\n                this.Body.ReportItems.Images = new List<ReportItemImage>();\n            }\n            this.Body.ReportItems.Images.Add(image);\n            return this;\n        }\n\n    }\n}"
  },
  {
    "path": "RdlCreator/ReportItemImage.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Xml.Serialization;\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class ReportItemImage\n    {\n        [XmlAttribute(AttributeName = \"Name\")]\n        public string Name { get; set; }\n\n        [XmlElement(ElementName = \"Height\")]\n        public ReportItemSize Height { get; set; }\n\n        [XmlElement(ElementName = \"Width\")]\n        public ReportItemSize Width { get; set; }\n\n        [XmlElement(ElementName = \"Left\")]\n        public ReportItemSize Left { get; set; }\n\n        [XmlElement(ElementName = \"Top\")]\n        public ReportItemSize Top { get; set; }\n\n        [XmlElement(ElementName = \"Source\")]\n        public string Source { get; set; }\n\n        [XmlElement(ElementName = \"Value\")]\n        public string Value { get; set; }\n\n        [XmlElement(ElementName = \"Sizing\")]\n        public string Sizing { get; set; }\n\n        [XmlElement(ElementName = \"Style\")]\n        public Style ImageStyle { get; set; }\n    }\n}\n"
  },
  {
    "path": "RdlCreator/ReportItemSize.cs",
    "content": "using System;\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class ReportItemSize : System.Xml.Serialization.IXmlSerializable\n    {\n        // implicitly convert from ReportItemSize to string\n        public static implicit operator string(ReportItemSize size)\n        {\n            return size.ToString();\n        }\n\n        // implicitly convert from string to ReportItemSize\n        public static implicit operator ReportItemSize(string sizeString)\n        {\n            ReportItemSize size = new ReportItemSize();\n            if (sizeString.EndsWith(\"in\", StringComparison.OrdinalIgnoreCase))\n            {\n                size.Unit = SizeUnit.Inches;\n#if NET6_0_OR_GREATER\n                size.Value = float.Parse(sizeString.Replace(\"in\", \"\", StringComparison.OrdinalIgnoreCase));\n#else\n                size.Value = float.Parse(sizeString.Replace(\"in\", \"\"));\n#endif\n            }\n            else if (sizeString.EndsWith(\"cm\", StringComparison.OrdinalIgnoreCase))\n            {\n                size.Unit = SizeUnit.Centimeters;\n#if NET6_0_OR_GREATER\n                size.Value = float.Parse(sizeString.Replace(\"cm\", \"\", StringComparison.OrdinalIgnoreCase));\n#else\n                size.Value = float.Parse(sizeString.Replace(\"cm\", \"\"));\n#endif\n            }\n            else if (sizeString.EndsWith(\"pt\", StringComparison.OrdinalIgnoreCase))\n            {\n                size.Unit = SizeUnit.Points;\n#if NET6_0_OR_GREATER\n                size.Value = float.Parse(sizeString.Replace(\"pt\", \"\", StringComparison.OrdinalIgnoreCase));\n#else\n                size.Value = float.Parse(sizeString.Replace(\"pt\", \"\"));\n#endif\n            }\n            else if (sizeString.EndsWith(\"pc\", StringComparison.OrdinalIgnoreCase))\n            {\n                size.Unit = SizeUnit.Picas;\n#if NET6_0_OR_GREATER\n                size.Value = float.Parse(sizeString.Replace(\"pc\", \"\", StringComparison.OrdinalIgnoreCase));\n#else\n                size.Value = float.Parse(sizeString.Replace(\"pc\", \"\"));\n#endif\n            }\n            else if (sizeString.EndsWith(\"mm\", StringComparison.OrdinalIgnoreCase))\n            {\n                size.Unit = SizeUnit.Millimeters;\n#if NET6_0_OR_GREATER\n                size.Value = float.Parse(sizeString.Replace(\"mm\", \"\", StringComparison.OrdinalIgnoreCase));\n#else\n                size.Value = float.Parse(sizeString.Replace(\"mm\", \"\"));\n#endif\n            }\n            else\n            {\n                // default to inches\n                size.Unit = SizeUnit.Inches;\n                size.Value = float.Parse(sizeString);\n            }\n\n            return size;\n        }\n\n        // this class is a strongly typed object to hold size information for report items\n        // that will then output to rdl text compatible strings formats\n\n        public float Value { get; set; }\n        public SizeUnit Unit { get; set; }\n\n        public override string ToString()\n        {\n            return Value.ToString(\"0.00\") +\n                   (Unit == SizeUnit.Inches ? \"in\" :\n                       Unit == SizeUnit.Centimeters ? \"cm\" :\n                       Unit == SizeUnit.Points ? \"pt\" :\n                       Unit == SizeUnit.Picas ? \"pc\" :\n                       Unit == SizeUnit.Millimeters ? \"mm\" : \"in\");\n        }\n\n        public static ReportItemSize FromInches(float inches)\n        {\n            return new ReportItemSize() { Value = inches, Unit = SizeUnit.Inches };\n        }\n\n        public static ReportItemSize FromCentimeters(float centimeters)\n        {\n            return new ReportItemSize() { Value = centimeters, Unit = SizeUnit.Centimeters };\n        }\n\n        public static ReportItemSize FromPoints(float points)\n        {\n            return new ReportItemSize() { Value = points, Unit = SizeUnit.Points };\n        }\n\n        public static ReportItemSize FromPicas(float picas)\n        {\n            return new ReportItemSize() { Value = picas, Unit = SizeUnit.Picas };\n        }\n\n        public static ReportItemSize FromMillimeters(float millimeters)\n        {\n            return new ReportItemSize() { Value = millimeters, Unit = SizeUnit.Millimeters };\n        }\n\n        System.Xml.Schema.XmlSchema System.Xml.Serialization.IXmlSerializable.GetSchema()\n        {\n            return null;\n        }\n\n        void System.Xml.Serialization.IXmlSerializable.ReadXml(System.Xml.XmlReader reader)\n        {\n            var s = reader.ReadElementContentAsString();\n            var tmp = (ReportItemSize)s;\n            this.Value = tmp.Value;\n            this.Unit = tmp.Unit;\n        }\n\n        void System.Xml.Serialization.IXmlSerializable.WriteXml(System.Xml.XmlWriter writer)\n        {\n            writer.WriteString(this.ToString());\n        }\n    }\n}"
  },
  {
    "path": "RdlCreator/ReportItemsBody.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class ReportItemsBody\n    {\n      \n        [XmlElement(ElementName = \"Table\")]\n        public Table Table { get; set; }\n\n        [XmlElement(\"Textbox\", typeof(Text))]\n        public List<Text> Text { get; set; }\n\n        [XmlElement(\"CustomReportItem\", typeof(CustomReportItems))]\n        public List<CustomReportItems> CustomReportItems { get; set; }\n\n        [XmlElement(\"Rectangle\", typeof(Card))]\n        public List<Card> Cards { get; set; }\n\n        [XmlElement(\"Image\", typeof(ReportItemImage))]\n        public List<ReportItemImage> Images { get; set; }\n\n    }\n}"
  },
  {
    "path": "RdlCreator/ReportItemsFooter.cs",
    "content": "﻿using System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class ReportItemsFooter\n    {\n        [XmlElement(ElementName = \"Textbox\")]\n        public Text Textbox { get; set; }\n\n    }\n}"
  },
  {
    "path": "RdlCreator/ReportItemsHeader.cs",
    "content": "﻿using System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class ReportItemsHeader\n    {\n        [XmlElement(ElementName = \"Textbox\")]\n        public Text Textbox { get; set; }\n\n    }\n}"
  },
  {
    "path": "RdlCreator/SizeUnit.cs",
    "content": "namespace Majorsilence.Reporting.RdlCreator\n{\n    public enum SizeUnit\n    {\n        Inches = 1,\n        Centimeters = 2,\n        Points = 3,\n        Picas = 4,\n        Millimeters = 5\n    }\n}"
  },
  {
    "path": "RdlCreator/Style.cs",
    "content": "﻿using System.Xml.Serialization;\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class Style\n    {\n        [XmlElement(ElementName = \"FontSize\")]\n        public ReportItemSize FontSize { get; set; }\n\n        [XmlElement(ElementName = \"FontWeight\")]\n        public string FontWeight { get; set; }\n\n        [XmlElement(ElementName = \"TextAlign\")]\n        public string TextAlign { get; set; }\n\n        [XmlElement(ElementName = \"BorderStyle\")]\n        public BorderStyle BorderStyle { get; set; }\n\n        [XmlElement(ElementName = \"BorderColor\")]\n        public BorderColor BorderColor { get; set; }\n\n        [XmlElement(ElementName = \"BorderWidth\")]\n        public BorderWidth BorderWidth { get; set; }\n\n        [XmlElement(ElementName = \"BackgroundColor\")]\n        public string BackgroundColor { get; set; }\n\n    }\n}"
  },
  {
    "path": "RdlCreator/Table.cs",
    "content": "﻿using System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class Table\n    {\n        [XmlElement(ElementName = \"DataSetName\")]\n        public string DataSetName { get; set; }\n\n        [XmlElement(ElementName = \"NoRows\")]\n        public string NoRows { get; set; }\n\n        [XmlElement(ElementName = \"TableColumns\")]\n        public TableColumns TableColumns { get; set; }\n\n        [XmlElement(ElementName = \"Header\")]\n        public Header Header { get; set; }\n\n        [XmlElement(ElementName = \"Details\")]\n        public Details Details { get; set; }\n\n        [XmlAttribute(AttributeName = \"Name\")]\n        public string TableName { get; set; }\n\n    }\n}"
  },
  {
    "path": "RdlCreator/TableCell.cs",
    "content": "﻿using System.Xml.Serialization;\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n\n    public class TableCell\n    {\n        [XmlElement(ElementName = \"ReportItems\")]\n        public TableCellReportItems ReportItems { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/TableCellReportItems.cs",
    "content": "﻿using System.Xml.Serialization;\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class TableCellReportItems\n    {\n        [XmlElement(\"Textbox\", typeof(Text))]\n        [XmlElement(\"CustomReportItem\", typeof(CustomReportItems))]\n        public object ReportItem { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/TableCells.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Xml.Serialization;\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class TableCells\n    {\n        [XmlElement(ElementName = \"TableCell\")]\n        public List<TableCell> TableCell { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/TableColumn.cs",
    "content": "﻿using System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class TableColumn\n    {\n        [XmlElement(ElementName = \"Width\")]\n        public ReportItemSize Width { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/TableColumns.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class TableColumns\n    {\n        [XmlElement(ElementName = \"TableColumn\")]\n        public List<TableColumn> TableColumn { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/TableRow.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class TableRow\n    {\n        [XmlElement(ElementName = \"Height\")]\n        public ReportItemSize Height { get; set; }\n\n        [XmlElement(ElementName = \"TableCells\")]\n        public TableCells TableCells { get; set; }\n\n    }\n}"
  },
  {
    "path": "RdlCreator/TableRows.cs",
    "content": "﻿using System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class TableRows\n    {\n        [XmlElement(ElementName = \"TableRow\")]\n        public TableRow TableRow { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/Text.cs",
    "content": "﻿using System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class Text\n    {\n        [XmlElement(ElementName = \"Value\")]\n        public Value Value { get; set; }\n\n        [XmlElement(ElementName = \"Style\")]\n        public Style Style { get; set; }\n\n        [XmlAttribute(AttributeName = \"Name\")]\n        public string Name { get; set; }\n\n        [XmlElement(ElementName = \"Top\")]\n        public ReportItemSize Top { get; set; }\n\n        [XmlElement(ElementName = \"Left\")]\n        public ReportItemSize Left { get; set; }\n\n        [XmlElement(ElementName = \"Width\")]\n        public ReportItemSize Width { get; set; }\n\n        [XmlElement(ElementName = \"Height\")]\n        public ReportItemSize Height { get; set; }\n\n        [XmlElement(ElementName = \"CanGrow\")]\n        public bool CanGrow { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator/Value.cs",
    "content": "﻿using System.Xml.Serialization;\n\n\nnamespace Majorsilence.Reporting.RdlCreator\n{\n    public class Value\n    {\n        [XmlText]\n        public string Text { get; set; }\n    }\n}"
  },
  {
    "path": "RdlCreator.Tests/Document_Test.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.IO;\nusing System.Xml.Serialization;\nusing System;\nusing Majorsilence.Reporting.RdlCreator;\nusing NUnit.Framework;\nusing System.Text.RegularExpressions;\nusing Microsoft.Identity.Client;\nusing System.Threading.Tasks;\nusing UglyToad.PdfPig;\nusing System.Linq;\n\nnamespace Majorsilence.Reporting.RdlCreator.Tests\n{\n    [TestFixture]\n    public class Document_Test\n    {\n        [Test]\n        public async Task SinglePagePdfDiskExport()\n        {\n            var document = GenerateData(1);\n            using var fileStream = new FileStream(\"SinglePagePdf.pdf\", FileMode.Create, FileAccess.Write);\n            await document.Create(fileStream);\n            await fileStream.DisposeAsync();\n\n            using var pdfDocument = PdfDocument.Open(\"SinglePagePdf.pdf\");\n            var text = string.Join(\" \", pdfDocument.GetPages().SelectMany(page => page.GetWords()).Select(word => word.Text));\n\n            Assert.That(text, Is.Not.Null);\n            Assert.That(pdfDocument.NumberOfPages, Is.EqualTo(1));\n            Assert.That(text, Is.EqualTo(\"Test Header Text Area 1 Lorem ipsum. 0\"));\n        }\n\n        [Test]\n        public async Task MultiPagePdfTest()\n        {\n            var document = GenerateData(2);\n            using var fileStream = new FileStream(\"MultiPagePdf.pdf\", FileMode.Create, FileAccess.Write);\n            await document.Create(fileStream);\n            await fileStream.DisposeAsync();\n\n            using var pdfDocument = PdfDocument.Open(\"MultiPagePdf.pdf\");\n            var text = string.Join(\" \", pdfDocument.GetPages().SelectMany(page => page.GetWords()).Select(word => word.Text));\n\n            Assert.That(text, Is.Not.Null);\n            Assert.That(pdfDocument.NumberOfPages, Is.EqualTo(2));\n            Assert.That(text, Is.EqualTo(\"Test Header Text Area 1 Lorem ipsum. 0 Test Header Text Area 1 Lorem ipsum. 1\"));\n        }\n\n        [Test]\n        [Ignore(\"This test is slow.  Remove the ignore when you want to run it.\")]\n        public async Task LoadTest()\n        {\n            var document = GenerateData(10000);\n            using var fileStream = new FileStream(\"LoadTestDocument.pdf\", FileMode.Create, FileAccess.Write);\n            await document.Create(fileStream);\n            await fileStream.DisposeAsync();\n\n            using var pdfDocument = PdfDocument.Open(\"LoadTestDocument.pdf\");\n            Assert.That(pdfDocument.NumberOfPages, Is.EqualTo(10000));\n        }\n\n        [Test]\n        public async Task ImageTestPdfDiskExport()\n        {\n            var document = GenerateImageDocument();\n            using var fileStream = new FileStream(\"ImageTestPdfDiskExport.pdf\", FileMode.Create, FileAccess.Write);\n            await document.Create(fileStream);\n            await fileStream.DisposeAsync();\n\n            using var pdfDocument = PdfDocument.Open(\"ImageTestPdfDiskExport.pdf\");\n            var text = string.Join(\" \", pdfDocument.GetPages().SelectMany(page => page.GetWords()).Select(word => word.Text));\n\n            Assert.That(text, Is.Not.Null);\n            Assert.That(pdfDocument.NumberOfPages, Is.EqualTo(1));\n            Assert.That(text, Is.EqualTo(\"Test Header Text Area 1 Lorem ipsum. Hello World\"));\n        }\n\n        [Test]\n        public async Task PdfInfoAddedTest()\n        {\n            var document = GenerateData(2);\n            document.Author = \"Test Author\";\n            document.Name = \"Test Name\";\n            document.Description = \"Test Description\";\n\n            using var fileStream = new FileStream(\"PdfInfoAddedTest.pdf\", FileMode.Create, FileAccess.Write);\n            await document.Create(fileStream);\n            await fileStream.DisposeAsync();\n            // Majorsilence Reporting - RenderPdf_iTextSharp\n\n            using var pdfDocument = PdfDocument.Open(\"PdfInfoAddedTest.pdf\");\n            var text = string.Join(\" \", pdfDocument.GetPages().SelectMany(page => page.GetWords()).Select(word => word.Text));\n\n            Assert.Multiple(() =>\n            {\n                Assert.That(pdfDocument.Information.Author, Is.EqualTo(\"Test Author\"));\n                Assert.That(pdfDocument.Information.Title, Is.EqualTo(\"Test Name\"));\n                Assert.That(pdfDocument.Information.Subject, Is.EqualTo(\"Test Description\"));\n                Assert.That(pdfDocument.Information.Creator, Is.EqualTo(\"Majorsilence Reporting - RenderPdf_iTextSharp\"));\n                Assert.That(text, Is.Not.Null);\n                Assert.That(pdfDocument.NumberOfPages, Is.EqualTo(2));\n            });\n        }\n\n        private RdlCreator.Document GenerateData(int pageCount = 1)\n        {\n            var document = new Document\n            {\n                Description = \"Sample report\",\n                Author = \"John Doe\",\n                PageHeight = \"11in\",\n                PageWidth = \"8.5in\",\n                //Width = \"7.5in\",\n                TopMargin = \".25in\",\n                LeftMargin = \".25in\",\n                RightMargin = \".25in\",\n                BottomMargin = \".25in\"\n            };\n\n            for (int i = 0; i < pageCount; i++)\n            {\n                document.WithPage((option) =>\n                {\n                    option.WithHeight(\"10in\")\n                    .WithWidth(\"7.5in\")\n                    .WithText(new Text\n                    {\n                        Name = \"Textbox1\",\n                        Top = \".1in\",\n                        Left = \".1in\",\n                        Width = \"6in\",\n                        Height = \".25in\",\n                        Value = new Value { Text = \"Text Area 1\" },\n                        Style = new Style { FontSize = \"12pt\", FontWeight = \"Bold\" }\n                    })\n                    .WithText(new Text\n                    {\n                        Name = \"Textbox2\",\n                        Top = \"1in\",\n                        Left = \"1in\",\n                        Width = \"6in\",\n                        Height = \"4in\",\n                        Value = new Value { Text = \"Lorem ipsum.\" },\n                        Style = new Style\n                        {\n                            FontSize = \"12pt\",\n                            BackgroundColor = \"gray\"\n                        }\n                    });\n\n                    option.WithPageFooter(new PageFooter\n                    {\n                        Height = \"14pt\",\n                        ReportItems = new ReportItemsFooter\n                        {\n                            Textbox = new Text\n                            {\n                                Name = \"Footer\",\n                                Top = \"1pt\",\n                                Left = \"10pt\",\n                                Height = \"12pt\",\n                                Width = \"3in\",\n                                Value = new Value { Text = $\"{i}\" },\n                                Style = new Style { FontSize = \"10pt\", FontWeight = \"Normal\" }\n                            }\n                        },\n                        PrintOnFirstPage = \"true\",\n                        PrintOnLastPage = \"true\"\n                    });\n\n                    option.WithPageHeader(\n                        new PageHeader\n                        {\n                            Height = \".5in\",\n                            ReportItems = new ReportItemsHeader\n                            {\n                                Textbox = new Text\n                                {\n                                    Name = \"Header\",\n                                    Top = \".1in\",\n                                    Left = \".1in\",\n                                    Width = \"6in\",\n                                    Height = \".25in\",\n                                    Value = new Value { Text = \"Test Header\" },\n                                    Style = new Style { FontSize = \"15pt\", FontWeight = \"Bold\" }\n                                }\n                            },\n                            PrintOnFirstPage = \"true\",\n                            PrintOnLastPage = \"true\"\n                        });\n                });\n            }\n\n            return document;\n        }\n\n        private RdlCreator.Document GenerateImageDocument()\n        {\n            var document = new Document\n            {\n                Description = \"Sample report\",\n                Author = \"John Doe\",\n                PageHeight = \"11in\",\n                PageWidth = \"8.5in\",\n                //Width = \"7.5in\",\n                TopMargin = \".25in\",\n                LeftMargin = \".25in\",\n                RightMargin = \".25in\",\n                BottomMargin = \".25in\"\n            };\n\n\n            document.WithPage((option) =>\n            {\n                option.WithHeight(\"10in\")\n                .WithWidth(\"7.5in\")\n                .WithText(new Text\n                {\n                    Name = \"Textbox1\",\n                    Top = \".1in\",\n                    Left = \".1in\",\n                    Width = \"6in\",\n                    Height = \".25in\",\n                    Value = new Value { Text = \"Text Area 1\" },\n                    Style = new Style { FontSize = \"12pt\", FontWeight = \"Bold\" }\n                })\n                .WithText(new Text\n                {\n                    Name = \"Textbox2\",\n                    Top = \"1in\",\n                    Left = \"1in\",\n                    Width = \"6in\",\n                    Height = \"1in\",\n                    Value = new Value { Text = \"Lorem ipsum.\" },\n                    Style = new Style\n                    {\n                        FontSize = \"12pt\",\n                        BackgroundColor = \"gray\"\n                    }\n                });\n\n                option.WithImage(new ReportItemImage\n                {\n                    Name = \"Image1\",\n                    Top = \"1in\",\n                    Left = \"1in\",\n                    Width = \"6in\",\n                    Height = \"6in\",\n                    Value = \"test-image.jpg\",\n                    Source = \"External\",\n                    Sizing = \"Fit\"\n                });\n\n                option.WithPageFooter(new PageFooter\n                {\n                    Height = \"14pt\",\n                    ReportItems = new ReportItemsFooter\n                    {\n                        Textbox = new Text\n                        {\n                            Name = \"Footer\",\n                            Top = \"1pt\",\n                            Left = \"10pt\",\n                            Height = \"12pt\",\n                            Width = \"3in\",\n                            Value = new Value { Text = $\"Hello World\" },\n                            Style = new Style { FontSize = \"10pt\", FontWeight = \"Normal\" }\n                        }\n                    },\n                    PrintOnFirstPage = \"true\",\n                    PrintOnLastPage = \"true\"\n                });\n\n                option.WithPageHeader(\n                    new PageHeader\n                    {\n                        Height = \".5in\",\n                        ReportItems = new ReportItemsHeader\n                        {\n                            Textbox = new Text\n                            {\n                                Name = \"Header\",\n                                Top = \".1in\",\n                                Left = \".1in\",\n                                Width = \"6in\",\n                                Height = \".25in\",\n                                Value = new Value { Text = \"Test Header\" },\n                                Style = new Style { FontSize = \"15pt\", FontWeight = \"Bold\" }\n                            }\n                        },\n                        PrintOnFirstPage = \"true\",\n                        PrintOnLastPage = \"true\"\n                    });\n            });\n\n\n            return document;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlCreator.Tests/NestedJsonData.json",
    "content": "[\n  {\n    \"EmployeeID\": 1,\n    \"FirstName\": \"Nancy\",\n    \"LastName\": \"Davolio\",\n    \"ContactInfo\": {\n      \"Email\": \"nancy.davolio@example.com\",\n      \"Phone\": \"(206) 555-9857\",\n      \"Address\": {\n        \"Street\": \"507 - 20th Ave. E. Apt. 2A\",\n        \"City\": \"Seattle\",\n        \"Region\": \"WA\",\n        \"PostalCode\": \"98122\",\n        \"Country\": \"USA\"\n      }\n    },\n    \"Dependents\": [\n      {\n        \"Name\": \"John Davolio\",\n        \"Relationship\": \"Son\",\n        \"BirthDate\": \"2005-06-15\"\n      },\n      {\n        \"Name\": \"Lisa Davolio\",\n        \"Relationship\": \"Daughter\",\n        \"BirthDate\": \"2008-09-23\"\n      }\n    ]\n  },\n  {\n    \"EmployeeID\": 2,\n    \"FirstName\": \"Andrew\",\n    \"LastName\": \"Fuller\",\n    \"ContactInfo\": {\n      \"Email\": null,\n      \"Phone\": \"(206) 555-9482\",\n      \"Address\": {\n        \"Street\": \"908 W. Capital Way\",\n        \"City\": \"Tacoma\",\n        \"Region\": \"WA\",\n        \"PostalCode\": \"98401\",\n        \"Country\": \"USA\"\n      }\n    },\n    \"Dependents\": []\n  },\n  {\n    \"EmployeeID\": 3,\n    \"FirstName\": \"Janet\",\n    \"LastName\": \"Leverling\",\n    \"ContactInfo\": {\n      \"Email\": null,\n      \"Phone\": \"(206) 555-3412\",\n      \"Address\": {\n        \"Street\": \"722 Moss Bay Blvd.\",\n        \"City\": \"Kirkland\",\n        \"Region\": \"WA\",\n        \"PostalCode\": \"98033\",\n        \"Country\": \"USA\"\n      }\n    },\n    \"Dependents\": []\n  },\n  {\n    \"EmployeeID\": 4,\n    \"FirstName\": \"Margaret\",\n    \"LastName\": \"Peacock\",\n    \"ContactInfo\": {\n      \"Email\": null,\n      \"Phone\": \"(206) 555-8122\",\n      \"Address\": {\n        \"Street\": \"4110 Old Redmond Rd.\",\n        \"City\": \"Redmond\",\n        \"Region\": \"WA\",\n        \"PostalCode\": \"98052\",\n        \"Country\": \"USA\"\n      }\n    },\n    \"Dependents\": []\n  },\n  {\n    \"EmployeeID\": 5,\n    \"FirstName\": \"Steven\",\n    \"LastName\": \"Buchanan\",\n    \"ContactInfo\": {\n      \"Email\": null,\n      \"Phone\": \"(71) 555-4848\",\n      \"Address\": {\n        \"Street\": \"14 Garrett Hill\",\n        \"City\": \"London\",\n        \"Region\": null,\n        \"PostalCode\": \"SW1 8JR\",\n        \"Country\": \"UK\"\n      }\n    },\n    \"Dependents\": []\n  },\n  {\n    \"EmployeeID\": 6,\n    \"FirstName\": \"Michael\",\n    \"LastName\": \"Suyama\",\n    \"ContactInfo\": {\n      \"Email\": null,\n      \"Phone\": \"(71) 555-7773\",\n      \"Address\": {\n        \"Street\": \"Coventry House\\r\\nMiner Rd.\",\n        \"City\": \"London\",\n        \"Region\": null,\n        \"PostalCode\": \"EC2 7JR\",\n        \"Country\": \"UK\"\n      }\n    },\n    \"Dependents\": []\n  },\n  {\n    \"EmployeeID\": 8,\n    \"FirstName\": \"Laura\",\n    \"LastName\": \"Callahan\",\n    \"ContactInfo\": {\n      \"Email\": null,\n      \"Phone\": \"(206) 555-1189\",\n      \"Address\": {\n        \"Street\": \"4726 - 11th Ave. N.E.\",\n        \"City\": \"Seattle\",\n        \"Region\": \"WA\",\n        \"PostalCode\": \"98105\",\n        \"Country\": \"USA\"\n      }\n    },\n    \"Dependents\": []\n  },\n  {\n    \"EmployeeID\": 9,\n    \"FirstName\": \"Anne\",\n    \"LastName\": \"Dodsworth\",\n    \"ContactInfo\": {\n      \"Email\": null,\n      \"Phone\": \"(71) 555-4444\",\n      \"Address\": {\n        \"Street\": \"7 Houndstooth Rd.\",\n        \"City\": \"London\",\n        \"Region\": null,\n        \"PostalCode\": \"WG2 7LT\",\n        \"Country\": \"UK\"\n      }\n    },\n    \"Dependents\": []\n  }\n]"
  },
  {
    "path": "RdlCreator.Tests/RdlCreator.Tests.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n\t<PropertyGroup>\n\t\t<RootNamespace>Majorsilence.Reporting.RdlCreator.Tests</RootNamespace>\n\t\t<AssemblyName>RdlCreator.Tests</AssemblyName>\n\t\t<Configurations>Debug;Release;Debug-DrawingCompat;Release-DrawingCompat</Configurations>\n\t\t<TargetFrameworks>net8.0;net10.0</TargetFrameworks>\n\t\t<WarningsAsErrors>4014</WarningsAsErrors>\n\t\t<Platforms>AnyCPU</Platforms>\n\t</PropertyGroup>\n\n\t<ItemGroup>\n\t\t<None Include=\"..\\Examples\\SqliteExamples\\sqlitetestdb2.db\" Link=\"sqlitetestdb2.db\">\n\t\t\t<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t\t</None>\n\t</ItemGroup>\n\n\t<ItemGroup>\n\t\t<PackageReference Include=\"Microsoft.Data.SqlClient\" />\n\t\t<PackageReference Include=\"Microsoft.Data.Sqlite\" />\n\t\t<PackageReference Include=\"Microsoft.NET.Test.Sdk\" />\n\t\t<PackageReference Include=\"NUnit\" />\n\t\t<PackageReference Include=\"NUnit3TestAdapter\" />\n\t\t<PackageReference Include=\"coverlet.collector\" />\n\t\t<PackageReference Include=\"PdfPig\" />\n\t</ItemGroup>\n\n\t<ItemGroup>\n\t\t<ProjectReference Include=\"..\\RdlCreator\\Majorsilence.Reporting.RdlCreator.csproj\" />\n\t</ItemGroup>\n\n\t<ItemGroup>\n\t  <None Update=\"test-image.jpg\">\n\t    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t  </None>\n\t  <None Update=\"*.json\">\n\t    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t  </None>\n\t</ItemGroup>\n</Project>\n"
  },
  {
    "path": "RdlCreator.Tests/Reports_ChainedTest.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.IO;\nusing System.Xml.Serialization;\nusing System;\nusing Majorsilence.Reporting.RdlCreator;\nusing NUnit.Framework;\nusing System.Text.RegularExpressions;\nusing System.Threading.Tasks;\nusing UglyToad.PdfPig;\nusing System.Linq;\n\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\n\n#else\nusing System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.RdlCreator.Tests\n{\n    [TestFixture]\n    public class Reports_ChainedTest\n    {\n        string connectionString = \"Data Source=sqlitetestdb2.db;\";\n        string dataProvider = \"Microsoft.Data.Sqlite\";\n\n        [Test]\n        public async Task PdfStreamExport()\n        {\n            var create = new RdlCreator.Create();\n            var report = GenerateTestData();\n            report.Author = \"Test Author\";\n            report.Name = \"Test Name\";\n            report.Description = \"Test Description\";\n\n            var fyiReport = await create.GenerateRdl(report);\n            using var ms = new Majorsilence.Reporting.Rdl.MemoryStreamGen();\n            await fyiReport.RunGetData(null);\n            await fyiReport.RunRender(ms, Majorsilence.Reporting.Rdl.OutputPresentationType.PDF);\n            var pdfStream = ms.GetStream();\n\n            pdfStream.Position = 0;\n            using var pdfDocument = PdfDocument.Open(pdfStream);\n            var text = string.Join(\" \",\n                pdfDocument.GetPages().SelectMany(page => page.GetWords()).Select(word => word.Text));\n\n            Assert.Multiple(() =>\n            {\n                Assert.That(pdfDocument.Information.Author, Is.EqualTo(\"Test Author\"));\n                Assert.That(pdfDocument.Information.Title, Is.EqualTo(\"Test Name\"));\n                Assert.That(pdfDocument.Information.Subject, Is.EqualTo(\"Test Description\"));\n                Assert.That(pdfDocument.Information.Creator,\n                    Is.EqualTo(\"Majorsilence Reporting - RenderPdf_iTextSharp\"));\n                Assert.That(text, Is.Not.Null);\n                Assert.That(text,\n                    Is.EqualTo(\n                        \"Test Data Set Report CategoryID CategoryName Description Beverages Soft drinks, coffees, teas, beers, and ales Condiments Sweet and savory sauces, relishes, spreads, and seasonings Confections Desserts, candies, and sweet breads Dairy Products Cheeses Grains/Cereals Breads, crackers, pasta, and cereal Meat/Poultry Prepared meats Produce Dried fruit and bean curd Seafood Seaweed and fish 1 of 1\"));\n            });\n        }\n\n        [Test]\n        public async Task PdfDiskExport()\n        {\n            var create = new RdlCreator.Create();\n            var report = GenerateTestData();\n            var fyiReport = await create.GenerateRdl(report);\n            using var ms = new Majorsilence.Reporting.Rdl.MemoryStreamGen();\n            await fyiReport.RunGetData(null);\n            await fyiReport.RunRender(ms, Majorsilence.Reporting.Rdl.OutputPresentationType.PDF);\n            var pdfStream = ms.GetStream();\n            pdfStream.Position = 0;\n\n            using var fileStream = new FileStream(\"PdfChainedDiskExport.pdf\", FileMode.Create, FileAccess.Write);\n            pdfStream.CopyTo(fileStream);\n            await fileStream.DisposeAsync();\n\n            using var pdfDocument = PdfDocument.Open(\"PdfChainedDiskExport.pdf\");\n            var text = string.Join(\" \",\n                pdfDocument.GetPages().SelectMany(page => page.GetWords()).Select(word => word.Text));\n\n            Assert.That(text, Is.Not.Null);\n            Assert.That(text,\n                Is.EqualTo(\n                    \"Test Data Set Report CategoryID CategoryName Description Beverages Soft drinks, coffees, teas, beers, and ales Condiments Sweet and savory sauces, relishes, spreads, and seasonings Confections Desserts, candies, and sweet breads Dairy Products Cheeses Grains/Cereals Breads, crackers, pasta, and cereal Meat/Poultry Prepared meats Produce Dried fruit and bean curd Seafood Seaweed and fish 1 of 1\"));\n        }\n\n        [Test]\n        public async Task HtmlDiskExport()\n        {\n            var create = new RdlCreator.Create();\n            var report = GenerateTestData();\n            var fyiReport = await create.GenerateRdl(report);\n            using var ms = new Majorsilence.Reporting.Rdl.MemoryStreamGen();\n            await fyiReport.RunGetData(null);\n            await fyiReport.RunRender(ms, Majorsilence.Reporting.Rdl.OutputPresentationType.HTML);\n            var pdfStream = ms.GetStream();\n            pdfStream.Position = 0;\n\n            using var fileStream = new FileStream(\"HtmlChainedDiskExport.html\", FileMode.Create, FileAccess.Write);\n            pdfStream.CopyTo(fileStream);\n            await fileStream.DisposeAsync();\n\n            var text = await System.IO.File.ReadAllTextAsync(\"HtmlChainedDiskExport.html\");\n            Assert.That(text.Contains(\"seasonings\"));\n            Assert.That(text.Contains(\"bean curd\"));\n        }\n\n        private RdlCreator.Report GenerateTestData()\n        {\n            var report = new Report\n                {\n                    Description = \"Sample report\",\n                    Author = \"John Doe\",\n                    PageHeight = \"11in\",\n                    PageWidth = \"8.5in\",\n                    Width = \"7.5in\",\n                    TopMargin = \".25in\",\n                    LeftMargin = \".25in\",\n                    RightMargin = \".25in\",\n                    BottomMargin = \".25in\"\n                }\n                .WithDataSources(\n                    new DataSources\n                    {\n                        DataSource = new DataSource\n                        {\n                            Name = \"DS1\",\n                            ConnectionProperties = new ConnectionProperties\n                            {\n                                DataProvider = dataProvider, ConnectString = connectionString\n                            }\n                        }\n                    }\n                )\n                .WithDataSets(\n                    new DataSets\n                    {\n                        DataSet = new DataSet\n                        {\n                            Name = \"Data\",\n                            Query = new Query\n                            {\n                                DataSourceName = \"DS1\",\n                                CommandText = \"SELECT CategoryID, CategoryName, Description FROM Categories\"\n                            },\n                            Fields = new Fields\n                            {\n                                Field = new List<Field>\n                                {\n                                    new Field\n                                    {\n                                        Name = \"CategoryID\",\n                                        DataField = \"CategoryID\",\n                                        TypeName = \"System.Int64\"\n                                    },\n                                    new Field\n                                    {\n                                        Name = \"CategoryName\",\n                                        DataField = \"CategoryName\",\n                                        TypeName = \"System.String\"\n                                    },\n                                    new Field\n                                    {\n                                        Name = \"Description\",\n                                        DataField = \"Description\",\n                                        TypeName = \"System.String\"\n                                    }\n                                }\n                            }\n                        }\n                    }\n                )\n                .WithPageHeader(\n                    new PageHeader\n                    {\n                        Height = \".5in\",\n                        ReportItems = new ReportItemsHeader\n                        {\n                            Textbox = new Text\n                            {\n                                Name = \"Textbox1\",\n                                Top = ReportItemSize.FromInches(0.1f),\n                                Left = ReportItemSize.FromInches(0.1f),\n                                Width = ReportItemSize.FromInches(6.0f),\n                                Height = ReportItemSize.FromInches(0.25f),\n                                Value = new Value { Text = \"Test Data Set Report\" },\n                                Style = new Style { FontSize = ReportItemSize.FromPoints(15), FontWeight = \"Bold\" }\n                            }\n                        },\n                        PrintOnFirstPage = \"true\",\n                        PrintOnLastPage = \"true\"\n                    })\n                .WithPageFooter(new PageFooter\n                {\n                    Height = \"14pt\",\n                    ReportItems = new ReportItemsFooter\n                    {\n                        Textbox = new Text\n                        {\n                            Name = \"Textbox5\",\n                            Top = \"1pt\",\n                            Left = \"10pt\",\n                            Height = \"12pt\",\n                            Width = \"3in\",\n                            Value = new Value { Text = \"=Globals!PageNumber + ' of ' + Globals!TotalPages\" },\n                            Style = new Style { FontSize = \"10pt\", FontWeight = \"Normal\" }\n                        }\n                    },\n                    PrintOnFirstPage = \"true\",\n                    PrintOnLastPage = \"true\"\n                });\n\n            // Add a body to the report\n\n            report\n                .WithBody(\"36pt\")\n                .WithTable()\n                .WithTableName(\"Table1\")\n                .WithTableDataSetName(\"Data\")\n                .WithTableNoRows(\"Query returned no rows!\")\n                .WithTableHeader(\n                    new TableRow\n                    {\n                        Height = \"12pt\",\n                        TableCells = new TableCells()\n                        {\n                            TableCell = new List<TableCell>\n                            {\n                                new TableCell\n                                {\n                                    ReportItems = new TableCellReportItems()\n                                    {\n                                        ReportItem = new Text\n                                        {\n                                            Name = \"Textbox2\",\n                                            Value = new Value { Text = \"CategoryID\" },\n                                            Style =\n                                                new Style { TextAlign = \"Center\", FontWeight = \"Bold\" }\n                                        }\n                                    }\n                                },\n                                new TableCell\n                                {\n                                    ReportItems = new TableCellReportItems()\n                                    {\n                                        ReportItem = new Text\n                                        {\n                                            Name = \"Textbox3\",\n                                            Value = new Value { Text = \"CategoryName\" },\n                                            Style =\n                                                new Style { TextAlign = \"Center\", FontWeight = \"Bold\" }\n                                        }\n                                    }\n                                },\n                                new TableCell\n                                {\n                                    ReportItems = new TableCellReportItems()\n                                    {\n                                        ReportItem = new Text\n                                        {\n                                            Name = \"Textbox4\",\n                                            Value = new Value { Text = \"Description\" },\n                                            Style = new Style { TextAlign = \"Center\", FontWeight = \"Bold\" }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }, repeatOnNewPage: \"true\")\n                .WithTableColumns(new TableColumns\n                {\n                    TableColumn = new List<TableColumn>\n                    {\n                        new TableColumn { Width = \"1.25in\" },\n                        new TableColumn { Width = \"1.5in\" },\n                        new TableColumn { Width = \"1.375in\" }\n                    }\n                })\n                .WithTableDetails(new TableRow\n                {\n                    Height = \"12pt\",\n                    TableCells = new TableCells()\n                    {\n                        TableCell = new List<TableCell>\n                        {\n                            new TableCell\n                            {\n                                ReportItems = new TableCellReportItems()\n                                {\n                                    ReportItem = new CustomReportItems()\n                                    {\n                                        Name = \"QrCode\",\n                                        Type = \"QR Code\",\n                                        Width = \"35.91mm\",\n                                        Height = \"35.91mm\",\n                                        CustomProperties =\n                                            new CustomProperties\n                                            {\n                                                CustomProperty = new CustomProperty()\n                                                {\n                                                    Name = \"QrCode\", Value = \"=Fields!CategoryID.Value\"\n                                                }\n                                            },\n                                        CanGrow = \"false\",\n                                        Style =\n                                            new Style\n                                            {\n                                                BorderStyle =\n                                                    new BorderStyle\n                                                    {\n                                                        Default = BorderStyleType.None,\n                                                        Bottom = BorderStyleType.Solid\n                                                    },\n                                                BorderColor =\n                                                    new BorderColor { Bottom = Color.Green.Name },\n                                                BorderWidth =\n                                                    new BorderWidth { Bottom = \"1pt\" }\n                                            },\n                                        Source = \"Embedded\"\n                                    }\n                                }\n                            },\n                            new TableCell\n                            {\n                                ReportItems = new TableCellReportItems()\n                                {\n                                    ReportItem = new Text\n                                    {\n                                        Name = \"CategoryName\",\n                                        Value =\n                                            new Value { Text = \"=Fields!CategoryName.Value\" },\n                                        CanGrow = true,\n                                        Style = new Style\n                                        {\n                                            BorderStyle =\n                                                new BorderStyle\n                                                {\n                                                    Default = BorderStyleType.None, Bottom = BorderStyleType.Solid\n                                                },\n                                            BorderColor =\n                                                new BorderColor { Bottom = Color.Green.Name },\n                                            BorderWidth = new BorderWidth { Bottom = \"1pt\" }\n                                        }\n                                    }\n                                }\n                            },\n                            new TableCell\n                            {\n                                ReportItems = new TableCellReportItems()\n                                {\n                                    ReportItem = new Text\n                                    {\n                                        Name = \"Description\",\n                                        Value =\n                                            new Value { Text = \"=Fields!Description.Value\" },\n                                        CanGrow = true,\n                                        Style = new Style\n                                        {\n                                            BorderStyle =\n                                                new BorderStyle\n                                                {\n                                                    Default = BorderStyleType.None, Bottom = BorderStyleType.Solid\n                                                },\n                                            BorderColor = new BorderColor { Bottom = Color.Green.Name },\n                                            BorderWidth = new BorderWidth { Bottom = \"1pt\" }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                });\n\n            return report;\n        }\n    }\n}"
  },
  {
    "path": "RdlCreator.Tests/Reports_DataProviderTest.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.IO;\nusing System.Xml.Serialization;\nusing System;\nusing Majorsilence.Reporting.RdlCreator;\nusing NUnit.Framework;\nusing System.Text.RegularExpressions;\nusing Microsoft.Identity.Client;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.RdlCreator.Tests\n{\n    [TestFixture]\n    public class Reports_DataProviderTest\n    {\n        string connectionString = \"Data Source=sqlitetestdb2.db;\";\n        DataProviders dataProvider = DataProviders.SQLite_MicrosoftData;\n\n        [SetUp]\n        public void Setup()\n        {\n            var files = new[]\n            {\n                \"TestMethodExcelLegacy.xls\",\n                \"TestMethodExcel.xlsx\",\n                \"TestMethodExcelDataOnly.xlsx\",\n                \"TestMethodPdf.pdf\"\n            };\n\n            foreach (var file in files)\n            {\n                var filepath = System.IO.Path.Combine(Environment.CurrentDirectory, file);\n                if (System.IO.File.Exists(filepath))\n                {\n                    System.IO.File.Delete(filepath);\n                }\n            }\n        }\n\n        [Test]\n        public async Task TestMethodCsv()\n        {\n            var create = new RdlCreator.Create();\n\n            var fyiReport = await create.GenerateRdl(dataProvider,\n                connectionString,\n                \"SELECT CategoryID, CategoryName, Description FROM Categories\",\n                pageHeaderText: \"DataProviderTest TestMethod1\");\n            var ms = new Majorsilence.Reporting.Rdl.MemoryStreamGen();\n            await fyiReport.RunGetData(null);\n            await fyiReport.RunRender(ms, Majorsilence.Reporting.Rdl.OutputPresentationType.CSV);\n            var text = ms.GetText();\n\n            Assert.That(text, Is.Not.Null);\n            Assert.That(NormalizeEOL(text), Is.EqualTo(NormalizeEOL(@\"\"\"DataProviderTest TestMethod1\"\"\n\"\"CategoryID\"\",\"\"CategoryName\"\",\"\"Description\"\"\n1,\"\"Beverages\"\",\"\"Soft drinks, coffees, teas, beers, and ales\"\"\n2,\"\"Condiments\"\",\"\"Sweet and savory sauces, relishes, spreads, and seasonings\"\"\n3,\"\"Confections\"\",\"\"Desserts, candies, and sweet breads\"\"\n4,\"\"Dairy Products\"\",\"\"Cheeses\"\"\n5,\"\"Grains/Cereals\"\",\"\"Breads, crackers, pasta, and cereal\"\"\n6,\"\"Meat/Poultry\"\",\"\"Prepared meats\"\"\n7,\"\"Produce\"\",\"\"Dried fruit and bean curd\"\"\n8,\"\"Seafood\"\",\"\"Seaweed and fish\"\"\n\"\"1 of 1\"\"\n\")));\n        }\n\n        [Test]\n        public async Task TestMethodExcelLegacy()\n        {\n            var create = new RdlCreator.Create();\n\n            var fyiReport = await create.GenerateRdl(dataProvider,\n                connectionString,\n                \"SELECT CategoryID, CategoryName, Description FROM Categories\",\n                pageHeaderText: \"DataProviderTest TestMethod1\");\n\n            string filepath = System.IO.Path.Combine(Environment.CurrentDirectory, \"TestMethodExcelLegacy.xls\");\n            var ofs = new Majorsilence.Reporting.Rdl.OneFileStreamGen(filepath, true);\n            await fyiReport.RunGetData(null);\n            await fyiReport.RunRender(ofs, Majorsilence.Reporting.Rdl.OutputPresentationType.ExcelTableOnly);\n\n            Assert.Multiple(() =>\n            {\n                Assert.That(System.IO.File.Exists(filepath), Is.True);\n                Assert.That(new FileInfo(filepath).Length, Is.GreaterThan(0));\n            });\n        }\n\n        [Test]\n        public async Task TestMethodExcel2007()\n        {\n            var create = new RdlCreator.Create();\n\n            var fyiReport = await create.GenerateRdl(dataProvider,\n                connectionString,\n                \"SELECT CategoryID, CategoryName, Description FROM Categories\",\n                pageHeaderText: \"DataProviderTest TestMethod1\");\n\n            string filepath = System.IO.Path.Combine(Environment.CurrentDirectory, \"TestMethodExcel.xlsx\");\n            var ofs = new Majorsilence.Reporting.Rdl.OneFileStreamGen(filepath, true);\n            await fyiReport.RunGetData(null);\n            await fyiReport.RunRender(ofs, Majorsilence.Reporting.Rdl.OutputPresentationType.Excel2007);\n\n            Assert.That(System.IO.File.Exists(filepath), Is.True);\n        }\n\n        [Test]\n        public async Task TestMethodExcel2007DataOnly()\n        {\n            var create = new RdlCreator.Create();\n\n            var fyiReport = await create.GenerateRdl(dataProvider,\n                connectionString,\n                \"SELECT CategoryID, CategoryName, Description FROM Categories\",\n                pageHeaderText: \"DataProviderTest TestMethod1\");\n\n            string filepath = System.IO.Path.Combine(Environment.CurrentDirectory, \"TestMethodExcelDataOnly.xlsx\");\n            var ofs = new Majorsilence.Reporting.Rdl.OneFileStreamGen(filepath, true);\n            await fyiReport.RunGetData(null);\n            await fyiReport.RunRender(ofs, Majorsilence.Reporting.Rdl.OutputPresentationType.Excel2007DataOnly);\n\n            Assert.That(System.IO.File.Exists(filepath), Is.True);\n        }\n\n        [Test]\n        public async Task TestMethodPdf()\n        {\n            var create = new RdlCreator.Create();\n\n            var fyiReport = await create.GenerateRdl(dataProvider,\n                connectionString,\n                \"SELECT CategoryID, CategoryName, Description FROM Categories\",\n                pageHeaderText: \"DataProviderTest TestMethod1\");\n\n            string filepath = System.IO.Path.Combine(Environment.CurrentDirectory, \"TestMethodPdf.pdf\");\n            var ofs = new Majorsilence.Reporting.Rdl.OneFileStreamGen(filepath, true);\n            await fyiReport.RunGetData(null);\n            await fyiReport.RunRender(ofs, Majorsilence.Reporting.Rdl.OutputPresentationType.PDF);\n\n            Assert.Multiple(() =>\n            {\n                Assert.That(System.IO.File.Exists(filepath), Is.True);\n                Assert.That(new FileInfo(filepath).Length, Is.GreaterThan(0));\n            });\n        }\n\n        [Test]\n        public async Task TestReportFromDataTable()\n        {\n            var dt = new System.Data.DataTable();\n            dt.Columns.Add(\"CategoryID\", typeof(int));\n            dt.Columns.Add(\"CategoryName\", typeof(string));\n            dt.Columns.Add(\"Description\", typeof(string));\n            dt.Rows.Add(1, \"Beverages\", \"Soft drinks, coffees, teas, beers, and ales\");\n            dt.Rows.Add(2, \"Condiments\", \"Sweet and savory sauces, relishes, spreads, and seasonings\");\n            dt.Rows.Add(3, \"Confections\", \"Desserts, candies, and sweet breads\");\n            dt.Rows.Add(4, \"Dairy Products\", \"Cheeses\");\n            dt.Rows.Add(5, \"Grains/Cereals\", \"Breads, crackers, pasta, and cereal\");\n            dt.Rows.Add(6, \"Meat/Poultry\", \"Prepared meats\");\n            dt.Rows.Add(7, \"Produce\", \"Dried fruit and bean curd\");\n            dt.Rows.Add(8, \"Seafood\", \"Seaweed and fish\");\n\n            var create = new RdlCreator.Create();\n            var fyiReport = await create.GenerateRdl(dt,\n                pageHeaderText: \"DataProviderTest TestMethod1\");\n            var ms = new Majorsilence.Reporting.Rdl.MemoryStreamGen();\n            await fyiReport.RunGetData(null);\n            await fyiReport.RunRender(ms, Majorsilence.Reporting.Rdl.OutputPresentationType.CSV);\n            var text = ms.GetText();\n\n            Assert.That(text, Is.Not.Null);\n            Assert.That(NormalizeEOL(text), Is.EqualTo(NormalizeEOL(@\"\"\"DataProviderTest TestMethod1\"\"\n\"\"CategoryID\"\",\"\"CategoryName\"\",\"\"Description\"\"\n1,\"\"Beverages\"\",\"\"Soft drinks, coffees, teas, beers, and ales\"\"\n2,\"\"Condiments\"\",\"\"Sweet and savory sauces, relishes, spreads, and seasonings\"\"\n3,\"\"Confections\"\",\"\"Desserts, candies, and sweet breads\"\"\n4,\"\"Dairy Products\"\",\"\"Cheeses\"\"\n5,\"\"Grains/Cereals\"\",\"\"Breads, crackers, pasta, and cereal\"\"\n6,\"\"Meat/Poultry\"\",\"\"Prepared meats\"\"\n7,\"\"Produce\"\",\"\"Dried fruit and bean curd\"\"\n8,\"\"Seafood\"\",\"\"Seaweed and fish\"\"\n\"\"1 of 1\"\"\n\")));\n        }\n\n        class Category\n        {\n            public int CategoryID { get; set; }\n            public string CategoryName { get; set; }\n            public string Description { get; set; }\n        }\n\n        [Test]\n        public async Task TestReportFromEnumerable()\n        {\n            var data = new List<Category>\n            {\n                new Category { CategoryID = 1, CategoryName = \"Beverages\", Description = \"Soft drinks, coffees, teas, beers, and ales\" },\n                new Category { CategoryID = 2, CategoryName = \"Condiments\", Description = \"Sweet and savory sauces, relishes, spreads, and seasonings\" },\n                new Category { CategoryID = 3, CategoryName = \"Confections\", Description = \"Desserts, candies, and sweet breads\" },\n                new Category { CategoryID = 4, CategoryName = \"Dairy Products\", Description = \"Cheeses\" },\n                new Category { CategoryID = 5, CategoryName = \"Grains/Cereals\", Description = \"Breads, crackers, pasta, and cereal\" },\n                new Category { CategoryID = 6, CategoryName = \"Meat/Poultry\", Description = \"Prepared meats\" },\n                new Category { CategoryID = 7, CategoryName = \"Produce\", Description = \"Dried fruit and bean curd\" },\n                new Category { CategoryID = 8, CategoryName = \"Seafood\", Description = \"Seaweed and fish\" }\n            };\n\n            var create = new RdlCreator.Create();\n            var fyiReport = await create.GenerateRdl(data,\n                pageHeaderText: \"DataProviderTest TestMethod1\");\n            var ms = new Majorsilence.Reporting.Rdl.MemoryStreamGen();\n            await fyiReport.RunGetData(null);\n            await fyiReport.RunRender(ms, Majorsilence.Reporting.Rdl.OutputPresentationType.CSV);\n            var text = ms.GetText();\n\n            Assert.That(text, Is.Not.Null);\n            Assert.That(NormalizeEOL(text), Is.EqualTo(NormalizeEOL(@\"\"\"DataProviderTest TestMethod1\"\"\n\"\"CategoryID\"\",\"\"CategoryName\"\",\"\"Description\"\"\n1,\"\"Beverages\"\",\"\"Soft drinks, coffees, teas, beers, and ales\"\"\n2,\"\"Condiments\"\",\"\"Sweet and savory sauces, relishes, spreads, and seasonings\"\"\n3,\"\"Confections\"\",\"\"Desserts, candies, and sweet breads\"\"\n4,\"\"Dairy Products\"\",\"\"Cheeses\"\"\n5,\"\"Grains/Cereals\"\",\"\"Breads, crackers, pasta, and cereal\"\"\n6,\"\"Meat/Poultry\"\",\"\"Prepared meats\"\"\n7,\"\"Produce\"\",\"\"Dried fruit and bean curd\"\"\n8,\"\"Seafood\"\",\"\"Seaweed and fish\"\"\n\"\"1 of 1\"\"\n\")));\n        }\n\n        private string NormalizeEOL(string input)\n        {\n            return Regex.Replace(input, @\"\\r\\n|\\n\\r|\\n|\\r\", \"\\r\\n\");\n        }\n    }\n}\n"
  },
  {
    "path": "RdlCreator.Tests/Reports_JsonDataProviderTest.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.IO;\nusing System.Xml.Serialization;\nusing System;\nusing Majorsilence.Reporting.RdlCreator;\nusing NUnit.Framework;\nusing System.Text.RegularExpressions;\nusing Microsoft.Identity.Client;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.RdlCreator.Tests\n{\n    [TestFixture]\n    public class Reports_JsonDataProviderTest\n    {\n        DataProviders dataProvider = DataProviders.Json;\n\n        // Add this inside your Reports_JsonDataProviderTest class\n\n        // This property provides test cases for the Test1 method\n        private static IEnumerable<string> ConnectionStrings\n        {\n            get\n            {\n                yield return \"file=TestData.json\";\n                yield return \"url=TestData.json;auth=Basic: PLACEHOLDER\";\n                yield return \"url=https://raw.githubusercontent.com/majorsilence/My-FyiReporting/refs/heads/master/RdlCreator.Tests/TestData.json;auth=basic: Placeholder\";\n            }\n        }\n        \n        private static IEnumerable<string> NestedDataConnectionStrings\n        {\n            get\n            {\n                yield return \"file=NestedJsonData.json\";\n                yield return \"url=NestedJsonData.json;auth=Basic: PLACEHOLDER\";\n                yield return \"url=https://raw.githubusercontent.com/majorsilence/My-FyiReporting/refs/heads/master/RdlCreator.Tests/NestedJsonData.json;auth=basic: Placeholder\";\n            }\n        }\n\n        [SetUp]\n        public void Setup()\n        {\n            var files = new[]\n            {\n                \"TestJsonMethodPdf.pdf\"\n            };\n\n            foreach (var file in files)\n            {\n                var filepath = System.IO.Path.Combine(Environment.CurrentDirectory, file);\n                if (System.IO.File.Exists(filepath))\n                {\n                    System.IO.File.Delete(filepath);\n                }\n            }\n        }\n\n        [Test]\n        [TestCaseSource(nameof(ConnectionStrings))]\n        public async Task TestConnectionStrings(string connectionString)\n        {\n            var create = new RdlCreator.Create();\n\n            var fyiReport = await create.GenerateRdl(dataProvider,\n                connectionString,\n                \"columns=EmployeID,LastName,FirstName,Title\",\n                pageHeaderText: \"DataProviderTest TestMethod1\");\n            var ms = new Majorsilence.Reporting.Rdl.MemoryStreamGen();\n            await fyiReport.RunGetData(null);\n            await fyiReport.RunRender(ms, Majorsilence.Reporting.Rdl.OutputPresentationType.CSV);\n            var text = ms.GetText();\n\n            Assert.That(text, Is.Not.Null);\n            Assert.That(NormalizeEOL(text), Is.EqualTo(NormalizeEOL(@\"\"\"DataProviderTest TestMethod1\"\"\n\"\"EmployeID\"\",\"\"LastName\"\",\"\"FirstName\"\",\"\"Title\"\"\n1,\"\"Davolio\"\",\"\"Nancy\"\",\"\"Sales Representative\"\"\n2,\"\"Fuller\"\",\"\"Andrew\"\",\"\"Vice President, Sales\"\"\n3,\"\"Leverling\"\",\"\"Janet\"\",\"\"Sales Representative\"\"\n4,\"\"Peacock\"\",\"\"Margaret\"\",\"\"Sales Representative\"\"\n5,\"\"Buchanan\"\",\"\"Steven\"\",\"\"Sales Manager\"\"\n6,\"\"Suyama\"\",\"\"Michael\"\",\"\"Sales Representative\"\"\n8,\"\"Callahan\"\",\"\"Laura\"\",\"\"Inside Sales Coordinator\"\"\n9,\"\"Dodsworth\"\",\"\"Anne\"\",\"\"Sales Representative\"\"\n\"\"1 of 1\"\"\n\")));\n        }\n\n        [Test]\n        [TestCaseSource(nameof(NestedDataConnectionStrings))]\n        public async Task NestedJson(string connectionString)\n        {\n            var create = new RdlCreator.Create();\n\n            var fyiReport = await create.GenerateRdl(dataProvider,\n                connectionString,\n                \"columns=EmployeeID,LastName,FirstName,ContactInfo_Phone,ContactInfo_Email\",\n                pageHeaderText: \"DataProviderTest TestMethod1\");\n            var ms = new Majorsilence.Reporting.Rdl.MemoryStreamGen();\n            await fyiReport.RunGetData(null);\n            await fyiReport.RunRender(ms, Majorsilence.Reporting.Rdl.OutputPresentationType.CSV);\n            var text = ms.GetText();\n\n            Assert.That(text, Is.Not.Null);\n            Assert.That(NormalizeEOL(text), Is.EqualTo(NormalizeEOL(@\"\"\"DataProviderTest TestMethod1\"\"\n\"\"EmployeeID\"\",\"\"LastName\"\",\"\"FirstName\"\",\"\"ContactInfo_Phone\"\",\"\"ContactInfo_Email\"\"\n1,\"\"Davolio\"\",\"\"Nancy\"\",\"\"(206) 555-9857\"\",\"\"nancy.davolio@example.com\"\"\n2,\"\"Fuller\"\",\"\"Andrew\"\",\"\"(206) 555-9482\"\",\"\"\"\"\n3,\"\"Leverling\"\",\"\"Janet\"\",\"\"(206) 555-3412\"\",\"\"\"\"\n4,\"\"Peacock\"\",\"\"Margaret\"\",\"\"(206) 555-8122\"\",\"\"\"\"\n5,\"\"Buchanan\"\",\"\"Steven\"\",\"\"(71) 555-4848\"\",\"\"\"\"\n6,\"\"Suyama\"\",\"\"Michael\"\",\"\"(71) 555-7773\"\",\"\"\"\"\n8,\"\"Callahan\"\",\"\"Laura\"\",\"\"(206) 555-1189\"\",\"\"\"\"\n9,\"\"Dodsworth\"\",\"\"Anne\"\",\"\"(71) 555-4444\"\",\"\"\"\"\n\"\"1 of 1\"\"\n\")));\n        }\n        \n\n        private string NormalizeEOL(string input)\n        {\n            return Regex.Replace(input, @\"\\r\\n|\\n\\r|\\n|\\r\", \"\\r\\n\");\n        }\n    }\n}\n"
  },
  {
    "path": "RdlCreator.Tests/Reports_ManualDefinitionTest.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.IO;\nusing System.Xml.Serialization;\nusing System;\nusing Majorsilence.Reporting.RdlCreator;\nusing NUnit.Framework;\nusing System.Text.RegularExpressions;\nusing System.Threading.Tasks;\nusing UglyToad.PdfPig;\nusing System.Linq;\n\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\n#else\nusing System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.RdlCreator.Tests\n{\n    [TestFixture]\n    public class Reports_ManualDefinitionTest\n    {\n        string connectionString = \"Data Source=sqlitetestdb2.db;\";\n        string dataProvider = \"Microsoft.Data.Sqlite\";\n\n        [Test]\n        public async Task CsvExport()\n        {\n            var create = new RdlCreator.Create();\n            var report = GenerateTestData();\n            var fyiReport = await create.GenerateRdl(report);\n            using var ms = new Majorsilence.Reporting.Rdl.MemoryStreamGen();\n            await fyiReport.RunGetData(null);\n            await fyiReport.RunRender(ms, Majorsilence.Reporting.Rdl.OutputPresentationType.CSV);\n            var text = ms.GetText();\n\n            Assert.That(text, Is.Not.Null);\n            Assert.That(NormalizeEOL(text), Is.EqualTo(NormalizeEOL(@\"\"\"Test Data Set Report\"\"\n\"\"CategoryID\"\",\"\"CategoryName\"\",\"\"Description\"\"\n\"\"Beverages\"\",\"\"Soft drinks, coffees, teas, beers, and ales\"\"\n\"\"Condiments\"\",\"\"Sweet and savory sauces, relishes, spreads, and seasonings\"\"\n\"\"Confections\"\",\"\"Desserts, candies, and sweet breads\"\"\n\"\"Dairy Products\"\",\"\"Cheeses\"\"\n\"\"Grains/Cereals\"\",\"\"Breads, crackers, pasta, and cereal\"\"\n\"\"Meat/Poultry\"\",\"\"Prepared meats\"\"\n\"\"Produce\"\",\"\"Dried fruit and bean curd\"\"\n\"\"Seafood\"\",\"\"Seaweed and fish\"\"\n\"\"1 of 1\"\"\n\")));\n        }\n        \n        [Test]\n        public async Task HtmlExport()\n        {\n            var create = new RdlCreator.Create();\n            var report = GenerateTestData();\n            var fyiReport = await create.GenerateRdl(report);\n            using var ms = new Majorsilence.Reporting.Rdl.MemoryStreamGen();\n            await fyiReport.RunGetData(null);\n            await fyiReport.RunRender(ms, Majorsilence.Reporting.Rdl.OutputPresentationType.HTML);\n            var text = ms.GetText();\n\n            Assert.That(text, Is.Not.Null);\n            Assert.That(NormalizeEOL(text).Contains(NormalizeEOL(@\"Dairy Products\")));\n        }\n        \n\n        [Test]\n        public async Task PdfStreamExport()\n        {\n            var create = new RdlCreator.Create();\n            var report = GenerateTestData();\n            var fyiReport = await create.GenerateRdl(report);\n            using var ms = new Majorsilence.Reporting.Rdl.MemoryStreamGen();\n            await fyiReport.RunGetData(null);\n            await fyiReport.RunRender(ms, Majorsilence.Reporting.Rdl.OutputPresentationType.PDF);\n            var pdfStream = ms.GetStream();\n\n            pdfStream.Position = 0;\n            using var pdfDocument = PdfDocument.Open(pdfStream);\n            var text = string.Join(\" \", pdfDocument.GetPages().SelectMany(page => page.GetWords()).Select(word => word.Text));\n\n            Assert.That(text, Is.Not.Null);\n            Assert.That(text, Is.EqualTo(\"Test Data Set Report CategoryID CategoryName Description Beverages Soft drinks, coffees, teas, beers, and ales Condiments Sweet and savory sauces, relishes, spreads, and seasonings Confections Desserts, candies, and sweet breads Dairy Products Cheeses Grains/Cereals Breads, crackers, pasta, and cereal Meat/Poultry Prepared meats Produce Dried fruit and bean curd Seafood Seaweed and fish 1 of 1\"));\n        }\n\n        [Test]\n        public async Task PdfDiskExport()\n        {\n            var create = new RdlCreator.Create();\n            var report = GenerateTestData();\n            var fyiReport = await create.GenerateRdl(report);\n            using var ms = new Majorsilence.Reporting.Rdl.MemoryStreamGen();\n            await fyiReport.RunGetData(null);\n            await fyiReport.RunRender(ms, Majorsilence.Reporting.Rdl.OutputPresentationType.PDF);\n            var pdfStream = ms.GetStream();\n            pdfStream.Position = 0;\n\n            using var fileStream = new FileStream(\"PdfDiskExport.pdf\", FileMode.Create, FileAccess.Write);\n            pdfStream.CopyTo(fileStream);\n            await fileStream.DisposeAsync();\n\n            using var pdfDocument = PdfDocument.Open(\"PdfDiskExport.pdf\");\n            var text = string.Join(\" \", pdfDocument.GetPages().SelectMany(page => page.GetWords()).Select(word => word.Text));\n\n            Assert.That(text, Is.Not.Null);\n            Assert.That(text, Is.EqualTo(\"Test Data Set Report CategoryID CategoryName Description Beverages Soft drinks, coffees, teas, beers, and ales Condiments Sweet and savory sauces, relishes, spreads, and seasonings Confections Desserts, candies, and sweet breads Dairy Products Cheeses Grains/Cereals Breads, crackers, pasta, and cereal Meat/Poultry Prepared meats Produce Dried fruit and bean curd Seafood Seaweed and fish 1 of 1\"));\n        }\n\n        private string NormalizeEOL(string input)\n        {\n            return Regex.Replace(input, @\"\\r\\n|\\n\\r|\\n|\\r\", \"\\r\\n\");\n        }\n\n        private RdlCreator.Report GenerateTestData()\n        {\n\n            // Create an instance of the Report class\n            var report = new Report\n            {\n                Description = \"Sample report\",\n                Author = \"John Doe\",\n                PageHeight = \"11in\",\n                PageWidth = new ReportItemSize()\n                {\n                    Value = 8.5f,\n                    Unit = SizeUnit.Inches\n                },\n                Width = ReportItemSize.FromInches(7.5f),\n                TopMargin = \".25in\",\n                LeftMargin = \".25in\",\n                RightMargin = \".25in\",\n                BottomMargin = \".25in\",\n                DataSources = new DataSources\n                {\n                    DataSource = new DataSource\n                    {\n                        Name = \"DS1\",\n                        ConnectionProperties = new ConnectionProperties\n                        {\n                            DataProvider = dataProvider,\n                            ConnectString = connectionString\n                        }\n                    }\n                },\n                DataSets = new DataSets\n                {\n                    DataSet = new DataSet\n                    {\n                        Name = \"Data\",\n                        Query = new Query\n                        {\n                            DataSourceName = \"DS1\",\n                            CommandText = \"SELECT CategoryID, CategoryName, Description FROM Categories\"\n                        },\n                        Fields = new Fields\n                        {\n                            Field = new List<Field>\n                            {\n                                new Field { Name = \"CategoryID\", DataField = \"CategoryID\", TypeName = \"System.Int64\" },\n                                new Field { Name = \"CategoryName\", DataField = \"CategoryName\", TypeName = \"System.String\" },\n                                new Field { Name = \"Description\", DataField = \"Description\", TypeName = \"System.String\" }\n                            }\n                        }\n                    }\n                },\n                PageHeader = new PageHeader\n                {\n                    Height = \".5in\",\n                    ReportItems = new ReportItemsHeader\n                    {\n                        Textbox = new Text\n                        {\n                            Name = \"Textbox1\",\n                            Top = \".1in\",\n                            Left = \".1in\",\n                            Width = \"6in\",\n                            Height = \".25in\",\n                            Value = new Value { Text = \"Test Data Set Report\" },\n                            Style = new Style { FontSize = \"15pt\", FontWeight = \"Bold\" }\n                        }\n                    },\n                    PrintOnFirstPage = \"true\",\n                    PrintOnLastPage = \"true\"\n                },\n                Body = new Body\n                {\n                    ReportItems = new ReportItemsBody\n                    {\n                        Table = new Table\n                        {\n                            TableName = \"Table1\",\n                            DataSetName = \"Data\",\n                            NoRows = \"Query returned no rows!\",\n                            TableColumns = new TableColumns\n                            {\n                                TableColumn = new List<TableColumn>\n                            {\n                                new TableColumn { Width = \"1.25in\" },\n                                new TableColumn { Width = \"1.5in\" },\n                                new TableColumn { Width = \"1.375in\" }\n                            }\n                            },\n                            Header = new Header\n                            {\n                                TableRows = new TableRows\n                                {\n                                    TableRow = new TableRow\n                                    {\n                                        Height = \"12pt\",\n                                        TableCells = new TableCells()\n                                        {\n                                            TableCell = new List<TableCell>\n                                            {\n                                                new TableCell {  ReportItems= new TableCellReportItems(){ ReportItem = new Text { Name = \"Textbox2\",\n                                                    Value = new Value { Text = \"CategoryID\" },\n                                                    Style = new Style { TextAlign = \"Center\", FontWeight = \"Bold\" } } } },\n                                                new TableCell { ReportItems= new TableCellReportItems(){ReportItem = new Text { Name = \"Textbox3\",\n                                                    Value = new Value { Text = \"CategoryName\" },\n                                                    Style = new Style { TextAlign = \"Center\", FontWeight = \"Bold\" } } } },\n                                                new TableCell { ReportItems= new TableCellReportItems(){ReportItem = new Text { Name = \"Textbox4\",\n                                                    Value = new Value { Text = \"Description\" },\n                                                    Style = new Style { TextAlign = \"Center\", FontWeight = \"Bold\" } } } }\n                                            }\n                                        }\n                                    }\n                                },\n                                RepeatOnNewPage = \"true\"\n                            },\n                            Details = new Details\n                            {\n                                TableRows = new TableRows\n                                {\n                                    TableRow = new TableRow\n                                    {\n                                        Height = \"12pt\",\n                                        TableCells = new TableCells()\n                                        {\n                                            TableCell = new List<TableCell>\n                                            {\n                                                new TableCell {\n                                                    ReportItems= new TableCellReportItems()\n                                                    {\n                                                         ReportItem = new CustomReportItems()\n                                                         {\n                                                             Name = \"QrCode\",\n                                                             Type = \"QR Code\",\n                                                             Width = \"35.91mm\",\n                                                             Height = \"35.91mm\",\n                                                             CustomProperties = new CustomProperties\n                                                             {\n                                                                 CustomProperty = new CustomProperty()\n                                                                 {\n                                                                    Name = \"QrCode\",\n                                                                    Value = \"=Fields!CategoryID.Value\"\n                                                                 }\n                                                             },\n                                                            CanGrow=\"true\",\n                                                            Style = new Style\n                                                            {\n                                                                BorderStyle= new BorderStyle\n                                                                {\n                                                                    Default=BorderStyleType.None,\n                                                                    Bottom=BorderStyleType.Solid\n                                                                },\n                                                                BorderColor=new BorderColor\n                                                                {\n                                                                    Bottom = Color.Green.Name\n                                                                },\n                                                                BorderWidth= new BorderWidth\n                                                                {\n                                                                    Bottom=\"1pt\"\n                                                                }\n\n                                                            }\n                                                         }\n                                                    }\n                                                },\n                                                new TableCell\n                                                {\n                                                    ReportItems = new TableCellReportItems()\n                                                    {\n                                                        ReportItem = new Text {\n                                                            Name = \"CategoryName\",\n                                                            Value = new Value\n                                                             {\n                                                                Text = \"=Fields!CategoryName.Value\"\n                                                            },\n                                                            CanGrow = true,\n                                                            Style = new Style\n                                                            {\n                                                                BorderStyle= new BorderStyle\n                                                                {\n                                                                    Default=BorderStyleType.None,\n                                                                    Bottom=BorderStyleType.Solid\n                                                                },\n                                                                BorderColor=new BorderColor\n                                                                {\n                                                                    Bottom = Color.Green.Name\n                                                                },\n                                                                BorderWidth= new BorderWidth\n                                                                {\n                                                                    Bottom=\"1pt\"\n                                                                }\n\n                                                            }\n                                                        }\n                                                    }\n                                                },\n                                                new TableCell\n                                                {\n                                                    ReportItems= new TableCellReportItems()\n                                                    {\n                                                        ReportItem = new Text\n                                                        {\n                                                            Name = \"Description\",\n                                                            Value = new Value\n                                                            {\n                                                                Text = \"=Fields!Description.Value\"\n                                                            },\n                                                            CanGrow = true,\n                                                            Style = new Style\n                                                            {\n                                                                BorderStyle= new BorderStyle\n                                                                {\n                                                                    Default=BorderStyleType.None,\n                                                                    Bottom=BorderStyleType.Solid\n                                                                },\n                                                                BorderColor=new BorderColor\n                                                                {\n                                                                    Bottom = Color.Green.Name\n                                                                },\n                                                                BorderWidth= new BorderWidth\n                                                                {\n                                                                    Bottom=\"1pt\"\n                                                                }\n\n                                                            }\n                                                        }\n                                                    }\n                                                }\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    Height = \"36pt\"\n                },\n                PageFooter = new PageFooter\n                {\n                    Height = \"14pt\",\n                    ReportItems = new ReportItemsFooter\n                    {\n                        Textbox = new Text\n                        {\n                            Name = \"Textbox5\",\n                            Top = \"1pt\",\n                            Left = \"10pt\",\n                            Height = \"12pt\",\n                            Width = \"3in\",\n                            Value = new Value { Text = \"=Globals!PageNumber + ' of ' + Globals!TotalPages\" },\n                            Style = new Style { FontSize = \"10pt\", FontWeight = \"Normal\" }\n                        }\n                    },\n                    PrintOnFirstPage = \"true\",\n                    PrintOnLastPage = \"true\"\n                }\n            };\n\n            return report;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlCreator.Tests/TestData.json",
    "content": "[\n  {\n    \"EmployeID\": 1,\n    \"LastName\": \"Davolio\",\n    \"FirstName\": \"Nancy\",\n    \"Title\": \"Sales Representative\",\n    \"TitleOfCourtesy\": \"Ms.\",\n    \"BirthDate\": \"1948-12-08 00:00:00\",\n    \"HireDate\": \"1992-05-01 00:00:00\",\n    \"Address\": \"507 - 20th Ave. E.\\r\\nApt. 2A\",\n    \"City\": \"Seattle\",\n    \"Region\": \"WA\",\n    \"PostalCode\": \"98122\",\n    \"Country\": \"USA\",\n    \"HomePhone\": \"(206) 555-9857\",\n    \"Extension\": \"5467\",\n    \"Notes\": \"Education includes a BA in psychology from Colorado State University in 1970.  She also completed \\\"The Art of the Cold Call.\\\"  Nancy is a member of Toastmasters International.\",\n    \"PhotoPath\": \"http://accweb/emmployees/davolio.bmp\"\n  },\n  {\n    \"EmployeID\": 2,\n    \"LastName\": \"Fuller\",\n    \"FirstName\": \"Andrew\",\n    \"Title\": \"Vice President, Sales\",\n    \"TitleOfCourtesy\": \"Dr.\",\n    \"BirthDate\": \"1952-02-19 00:00:00\",\n    \"HireDate\": \"1992-08-14 00:00:00\",\n    \"Address\": \"908 W. Capital Way\",\n    \"City\": \"Tacoma\",\n    \"Region\": \"WA\",\n    \"PostalCode\": \"98401\",\n    \"Country\": \"USA\",\n    \"HomePhone\": \"(206) 555-9482\",\n    \"Extension\": \"3457\",\n    \"Notes\": \"Andrew received his BTS commercial in 1974 and a Ph.D. in international marketing from the University of Dallas in 1981.  He is fluent in French and Italian and reads German.  He joined the company as a sales representative, was promoted to sales manager in January 1992 and to vice president of sales in March 1993.  Andrew is a member of the Sales Management Roundtable, the Seattle Chamber of Commerce, and the Pacific Rim Importers Association.\",\n    \"PhotoPath\": \"http://accweb/emmployees/fuller.bmp\"\n  },\n  {\n    \"EmployeID\": 3,\n    \"LastName\": \"Leverling\",\n    \"FirstName\": \"Janet\",\n    \"Title\": \"Sales Representative\",\n    \"TitleOfCourtesy\": \"Ms.\",\n    \"BirthDate\": \"1963-08-30 00:00:00\",\n    \"HireDate\": \"1992-04-01 00:00:00\",\n    \"Address\": \"722 Moss Bay Blvd.\",\n    \"City\": \"Kirkland\",\n    \"Region\": \"WA\",\n    \"PostalCode\": \"98033\",\n    \"Country\": \"USA\",\n    \"HomePhone\": \"(206) 555-3412\",\n    \"Extension\": \"3355\",\n    \"Notes\": \"Janet has a BS degree in chemistry from Boston College (1984).  She has also completed a certificate program in food retailing management.  Janet was hired as a sales associate in 1991 and promoted to sales representative in February 1992.\",\n    \"PhotoPath\": \"http://accweb/emmployees/leverling.bmp\"\n  },\n  {\n    \"EmployeID\": 4,\n    \"LastName\": \"Peacock\",\n    \"FirstName\": \"Margaret\",\n    \"Title\": \"Sales Representative\",\n    \"TitleOfCourtesy\": \"Mrs.\",\n    \"BirthDate\": \"1937-09-19 00:00:00\",\n    \"HireDate\": \"1993-05-03 00:00:00\",\n    \"Address\": \"4110 Old Redmond Rd.\",\n    \"City\": \"Redmond\",\n    \"Region\": \"WA\",\n    \"PostalCode\": \"98052\",\n    \"Country\": \"USA\",\n    \"HomePhone\": \"(206) 555-8122\",\n    \"Extension\": \"5176\",\n    \"Notes\": \"Margaret holds a BA in English literature from Concordia College (1958) and an MA from the American Institute of Culinary Arts (1966).  She was assigned to the London office temporarily from July through November 1992.\",\n    \"PhotoPath\": \"http://accweb/emmployees/peacock.bmp\"\n  },\n  {\n    \"EmployeID\": 5,\n    \"LastName\": \"Buchanan\",\n    \"FirstName\": \"Steven\",\n    \"Title\": \"Sales Manager\",\n    \"TitleOfCourtesy\": \"Mr.\",\n    \"BirthDate\": \"1955-03-04 00:00:00\",\n    \"HireDate\": \"1993-10-17 00:00:00\",\n    \"Address\": \"14 Garrett Hill\",\n    \"City\": \"London\",\n    \"Region\": null,\n    \"PostalCode\": \"SW1 8JR\",\n    \"Country\": \"UK\",\n    \"HomePhone\": \"(71) 555-4848\",\n    \"Extension\": \"3453\",\n    \"Notes\": \"Steven Buchanan graduated from St. Andrews University, Scotland, with a BSC degree in 1976.  Upon joining the company as a sales representative in 1992, he spent 6 months in an orientation program at the Seattle office and then returned to his permanent post in London.  He was promoted to sales manager in March 1993.  Mr. Buchanan has completed the courses \\\"Successful Telemarketing\\\" and \\\"International Sales Management.\\\"  He is fluent in French.\",\n    \"PhotoPath\": \"http://accweb/emmployees/buchanan.bmp\"\n  },\n  {\n    \"EmployeID\": 6,\n    \"LastName\": \"Suyama\",\n    \"FirstName\": \"Michael\",\n    \"Title\": \"Sales Representative\",\n    \"TitleOfCourtesy\": \"Mr.\",\n    \"BirthDate\": \"1963-07-02 00:00:00\",\n    \"HireDate\": \"1993-10-17 00:00:00\",\n    \"Address\": \"Coventry House\\r\\nMiner Rd.\",\n    \"City\": \"London\",\n    \"Region\": null,\n    \"PostalCode\": \"EC2 7JR\",\n    \"Country\": \"UK\",\n    \"HomePhone\": \"(71) 555-7773\",\n    \"Extension\": \"428\",\n    \"Notes\": \"Michael is a graduate of Sussex University (MA, economics, 1983) and the University of California at Los Angeles (MBA, marketing, 1986).  He has also taken the courses \\\"Multi-Cultural Selling\\\" and \\\"Time Management for the Sales Professional.\\\"  He is fluent in Japanese and can read and write French, Portuguese, and Spanish.\",\n    \"PhotoPath\": \"http://accweb/emmployees/davolio.bmp\"\n  },\n  {\n    \"EmployeID\": 8,\n    \"LastName\": \"Callahan\",\n    \"FirstName\": \"Laura\",\n    \"Title\": \"Inside Sales Coordinator\",\n    \"TitleOfCourtesy\": \"Ms.\",\n    \"BirthDate\": \"1958-01-09 00:00:00\",\n    \"HireDate\": \"1994-03-05 00:00:00\",\n    \"Address\": \"4726 - 11th Ave. N.E.\",\n    \"City\": \"Seattle\",\n    \"Region\": \"WA\",\n    \"PostalCode\": \"98105\",\n    \"Country\": \"USA\",\n    \"HomePhone\": \"(206) 555-1189\",\n    \"Extension\": \"2344\",\n    \"Notes\": \"Laura received a BA in psychology from the University of Washington.  She has also completed a course in business French.  She reads and writes French.\",\n    \"PhotoPath\": \"http://accweb/emmployees/davolio.bmp\"\n  },\n  {\n    \"EmployeID\": 9,\n    \"LastName\": \"Dodsworth\",\n    \"FirstName\": \"Anne\",\n    \"Title\": \"Sales Representative\",\n    \"TitleOfCourtesy\": \"Ms.\",\n    \"BirthDate\": \"1966-01-27 00:00:00\",\n    \"HireDate\": \"1994-11-15 00:00:00\",\n    \"Address\": \"7 Houndstooth Rd.\",\n    \"City\": \"London\",\n    \"Region\": null,\n    \"PostalCode\": \"WG2 7LT\",\n    \"Country\": \"UK\",\n    \"HomePhone\": \"(71) 555-4444\",\n    \"Extension\": \"452\",\n    \"Notes\": \"Anne has a BA degree in English from St. Lawrence College.  She is fluent in French and German.\",\n    \"PhotoPath\": \"http://accweb/emmployees/davolio.bmp\"\n  }\n]"
  },
  {
    "path": "RdlCri/AztecCode.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\nusing Majorsilence.Reporting.Rdl;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\nusing System.ComponentModel;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Cri\n{\n    public class AztecCode : ZxingBarcodes\n    {\n        public AztecCode() : base(35.91f, 35.91f) // Optimal width at mag 1\n        {\n            format = ZXing.BarcodeFormat.AZTEC;\n        }\n    }\n}"
  },
  {
    "path": "RdlCri/BarCode128.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\nusing Majorsilence.Reporting.Rdl;\nusing System.Text;\nusing System.Xml;\nusing System.ComponentModel;\n\nnamespace Majorsilence.Reporting.Cri\n{\n    public class BarCode128 : ZxingBarcodes\n    {\n        public BarCode128() : base(35.91f, 65.91f) // Optimal width at mag 1\n        {\n            format = ZXing.BarcodeFormat.CODE_128;\n        }\n    }\n}"
  },
  {
    "path": "RdlCri/BarCode39.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\nusing Majorsilence.Reporting.Rdl;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\nusing System.ComponentModel;\nusing System.Runtime.CompilerServices;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Cri\n{\n    public class BarCode39 : ZxingBarcodes\n    {\n        public BarCode39() : base(35.91f, 65.91f) // Optimal width at mag 1\n        {\n            format = ZXing.BarcodeFormat.CODE_39;\n        }\n    }\n}"
  },
  {
    "path": "RdlCri/BarCodeBookland.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Xml;\nusing System.Text.RegularExpressions;\n\nusing Majorsilence.Reporting.Rdl;\n\nnamespace Majorsilence.Reporting.Cri\n{\n    /// <summary>\n    /// BarCodeBookland: create Bookland compatible BarCode images.\n    ///     See http://www.barcodeisland.com/bookland.phtml for description of how to\n    ///     construct a Bookland compatible barcode.  In essence, Bookland is simply \n    ///     EAN-13 barcode with a number system of 978.\n    /// </summary>\n    public class BarCodeBookland: ICustomReportItem\n    {\n        string _ISBN;               // ISBN number\n        BarCodeEAN13 _Ean13;        // the EAN-13 barcode object\n\n        public BarCodeBookland()        // Need to be able to create an instance\n        {\n            _Ean13 = new BarCodeEAN13();\n        }\n\n        #region ICustomReportItem Members\n        /// <summary>\n        /// Runtime: Draw the BarCode\n        /// </summary>\n        /// <param name=\"bm\">Bitmap to draw the barcode in.</param>\n        public void DrawImage(ref Draw2.Bitmap bm)\n        {\n            _Ean13.DrawImage(ref bm);\n        }\n\n        /// <summary>\n        /// Design time: Draw a hard coded BarCode for design time;  Parameters can't be\n        /// relied on since they aren't available.\n        /// </summary>\n        /// <param name=\"bm\"></param>\n        public void DrawDesignerImage(ref Draw2.Bitmap bm)\n        {\n            _Ean13.DrawImage(bm, \"978015602732\");    // Yann Martel-Life of Pi\n        }\n        \n        /// <summary>\n        /// BarCode isn't a DataRegion\n        /// </summary>\n        /// <returns></returns>\n        public bool IsDataRegion()\n        {\n            return false;\n        }\n\n        /// <summary>\n        /// Set the properties;  No validation is done at this time.\n        /// </summary>\n        /// <param name=\"props\"></param>\n        public void SetProperties(IDictionary<string, object> props)\n        {\n            try\n            {\n                string p;\n                if (props.TryGetValue(\"ISBN\", out object codeValue))\n                {\n                    // Backwards Compatibility: if the property is present, use it\n                    p = codeValue.ToString();\n                }\n                else {\n                    // fallback to standard \"Code\" property\n                    p = props[\"Code\"].ToString();\n                }\n                if (p == null)\n                    throw new Exception(\"ISBN property must be a string.\");\n\n                // remove any dashes\n                p = p.Replace(\"-\", \"\");\n                if (p.Length > 9)           // get rid of the ISBN checksum digit\n                    p = p.Substring(0, 9);\n\n                if (!Regex.IsMatch(p, \"^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$\"))\n                    throw new Exception(\"ISBN must have at least nine digits.\");\n\n                _ISBN = p;\n\n                // Now set the properties of the EAN-13\n                IDictionary<string, object> ean13_props = new Dictionary<string, object>();\n                ean13_props.Add(\"NumberSystem\", \"97\");\n                ean13_props.Add(\"ManufacturerCode\", \"8\" + _ISBN.Substring(0, 4));\n                ean13_props.Add(\"ProductCode\", _ISBN.Substring(4,5));\n                _Ean13.SetProperties(ean13_props);\n            }\n            catch (KeyNotFoundException )\n            { \n                throw new Exception(\"ISBN property must be specified\"); \n            }\n\n            return;\n        }\n        /// <summary>\n        /// Design time call: return string with <CustomReportItem> ... </CustomReportItem> syntax for \n        /// the insert.  The string contains a variable {0} which will be substituted with the\n        /// configuration name.  This allows the name to be completely controlled by\n        /// the configuration file.\n        /// </summary>\n        /// <returns></returns>\n        public string GetCustomReportItemXml()              \n        {\n            return \"<CustomReportItem><Type>{0}</Type>\" +\n                string.Format(\"<Height>{0}mm</Height><Width>{1}mm</Width>\", BarCodeEAN13.OptimalHeight, BarCodeEAN13.OptimalWidth) + \n                \"<CustomProperties>\" +\n                \"<CustomProperty>\" +\n                \"<Name>ISBN</Name>\" +\n                \"<Value>0-15-602732-1</Value>\" +    // Yann Martel- Life of Pi\n                \"</CustomProperty>\" +\n                \"</CustomProperties>\" +\n                \"</CustomReportItem>\";\n        }\n\n        /// <summary>\n        /// Return an instance of the class representing the properties.\n        /// This method is called at design time;\n        /// </summary>\n        /// <returns></returns>\n        public object GetPropertiesInstance(XmlNode iNode)\n        {\n            BarCodeBooklandProperties bcp = new BarCodeBooklandProperties(this, iNode);\n            foreach (XmlNode n in iNode.ChildNodes)\n            {\n                if (n.Name != \"CustomProperty\") \n                    continue;\n                string pname = this.GetNamedElementValue(n, \"Name\", \"\");\n                switch (pname)\n                {\n                    case \"ISBN\":\n                        bcp.SetISBN(GetNamedElementValue(n, \"Value\", \"0-15-602732-1\"));\n                        break;\n                    default:\n                        break;\n                }\n            }\n\n            return bcp;\n        }\n    \n        /// <summary>\n        /// Set the custom properties given the properties object\n        /// </summary>\n        /// <param name=\"node\"></param>\n        /// <param name=\"inst\"></param>\n        public void SetPropertiesInstance(XmlNode node, object inst)\n        {\n            node.RemoveAll();       // Get rid of all properties\n\n            BarCodeBooklandProperties bcp = inst as BarCodeBooklandProperties;\n            if (bcp == null)\n                return;\n\n            // ISBN\n            CreateChild(node, \"ISBN\", bcp.ISBN);\n        }\n\n        void CreateChild(XmlNode node, string nm, string val)\n        {\n            XmlDocument xd = node.OwnerDocument;\n            XmlNode cp = xd.CreateElement(\"CustomProperty\");\n            node.AppendChild(cp);\n\n            XmlNode name = xd.CreateElement(\"Name\");\n            name.InnerText = nm;\n            cp.AppendChild(name);\n\n            XmlNode v = xd.CreateElement(\"Value\");\n            v.InnerText = val;\n            cp.AppendChild(v);\n        }\n\n        public void Dispose()\n        {\n            _Ean13.Dispose();\n            return;\n        }\n\n        #endregion\n\n        /// <summary>\n        /// Get the child element with the specified name.  Return the InnerText\n        /// value if found otherwise return the passed default.\n        /// </summary>\n        /// <param name=\"xNode\">Parent node</param>\n        /// <param name=\"name\">Name of child node to look for</param>\n        /// <param name=\"def\">Default value to use if not found</param>\n        /// <returns>Value the named child node</returns>\n        string GetNamedElementValue(XmlNode xNode, string name, string def)\n        {\n            if (xNode == null)\n                return def;\n\n            foreach (XmlNode cNode in xNode.ChildNodes)\n            {\n                if (cNode.NodeType == XmlNodeType.Element &&\n                    cNode.Name == name)\n                    return cNode.InnerText;\n            }\n            return def;\n        }\n\n        /// <summary>\n        /// BarCodeProperties- All properties are type string to allow for definition of\n        /// a runtime expression.\n        /// </summary>\n        public class BarCodeBooklandProperties\n        {\n            BarCodeBookland _bcbl;\n            XmlNode _node;\n            string _ISBN;\n\n            internal BarCodeBooklandProperties(BarCodeBookland bcbl, XmlNode node)\n            {\n                _bcbl = bcbl;\n                _node = node;\n            }\n\n\n            internal void SetISBN(string isbn)\n            {\n                _ISBN = isbn;\n            }\n\n            [Category(\"BarCode\"),\n               Description(\"ISBN is the book's ISBN number.\")]\n            public string ISBN\n            {\n                get { return _ISBN; }\n                set \n                { \n                    _ISBN = value;\n                    _bcbl.SetPropertiesInstance(_node, this);\n                }\n            }\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "RdlCri/BarCodeEAN13.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\nusing System.ComponentModel; // need this for the properties metadata\nusing System.Xml;\nusing System.Text.RegularExpressions;\nusing Majorsilence.Reporting.Rdl;\n\nnamespace Majorsilence.Reporting.Cri\n{\n    /// <summary>\n    /// BarCode: create EAN-13 compatible BarCode images.\n    ///     See http://www.barcodeisland.com/ean13.phtml for description of how to\n    ///     construct a EAN-13 compatible barcode\n    ///     See http://194.203.97.138/eanucc/ for the specification.\n    /// </summary>\n    public class BarCodeEAN13 : ICustomReportItem\n    {\n        // Encoding arrays: digit encoding depends on whether it is on the \n        // right hand (product code side) or the left hand (manufacturer side).\n        // When on the left hand the first number of the system digit (country)\n        // determines the even/odd parity order.\n\n        // index RightHandEncoding when doing the product code side\n        static readonly string[] RightHandEncoding =\n        {\n            \"1110010\", \"1100110\", \"1101100\", \"1000010\", \"1011100\", \"1001110\", \"1010000\", \"1000100\", \"1001000\",\n            \"1110100\"\n        };\n\n        // index LeftHandEncodingOdd when the ParityOrdering char is odd '1'\n        static readonly string[] LeftHandEncodingOdd =\n        {\n            \"0001101\", \"0011001\", \"0010011\", \"0111101\", \"0100011\", \"0110001\", \"0101111\", \"0111011\", \"0110111\",\n            \"0001011\"\n        };\n\n        // index LeftHandEncodingEven when the ParityOrdering char is even '0'\n        static readonly string[] LeftHandEncodingEven =\n        {\n            \"0100111\", \"0110011\", \"0011011\", \"0100001\", \"0011101\", \"0111001\", \"0000101\", \"0010001\", \"0001001\",\n            \"0010111\"\n        };\n\n        // index ParityOrdering using the first number of the system digit\n        static readonly string[] ParityOrdering = // Convention: 1 is considered Odd, 0 is considered even\n        {\n            \"111111\", \"110100\", \"110010\", \"110001\", \"101100\", \"100110\", \"100011\", \"101010\", \"101001\", \"100101\"\n        };\n\n        string _NumberSystem; // Number system\n        string _ManufacturerCode; // Manufacturer code (assigned by number system authority)\n        string _ProductCode; // Product code (assigned by company)\n\n//  The EAN-13 Bar Code Symbol shall be made up as follows, reading from left to right: \n//�  A left Quiet Zone\n//�  A normal Guard Bar Pattern\n//�  Six symbol characters from number sets A and B (each 7 modules long)\n//�  A centre Guard Bar Pattern\n//�  Six symbol characters from number set C (each 7 modules long)\n//�  A normal Guard Bar Pattern\n//�  A right Quiet Zone\n\n        static public readonly float OptimalHeight = 25.91f; // Optimal height at magnification 1    \n        static public readonly float OptimalWidth = 37.29f; // Optimal width at mag 1\n        static readonly float ModuleWidth = 0.33f; // module width in mm at mag factor 1\n        static readonly float FontHeight = 8; // Font height at mag factor 1\n        static readonly int LeftQuietZoneModules = 11; // # of modules in left quiet zone  \n        static readonly int RightQuietZoneModules = 7; // # of modules in left quiet zone  \n        static readonly int GuardModules = 3; // # of modules in left and right guard\n        static readonly int ManufacturingModules = 7 * 6; // # of modules in manufacturing\n        static readonly int CenterBarModules = 5; // # of modules in center bar\n        static readonly int ProductModules = 7 * 6; // # of modules in product + checksum\n\n        static readonly int ModulesToManufacturingStart =\n            LeftQuietZoneModules + GuardModules;\n\n        static readonly int ModulesToManufacturingEnd =\n            ModulesToManufacturingStart + ManufacturingModules;\n\n        static readonly int ModulesToProductStart =\n            ModulesToManufacturingEnd + CenterBarModules;\n\n        static readonly int ModulesToProductEnd =\n            ModulesToProductStart + ProductModules;\n\n        static readonly int TotalModules = ModulesToProductEnd + GuardModules + RightQuietZoneModules;\n\n        public BarCodeEAN13() // Need to be able to create an instance\n        {\n        }\n\n        #region ICustomReportItem Members\n\n        /// <summary>\n        /// Runtime: Draw the BarCode\n        /// </summary>\n        /// <param name=\"bm\">Bitmap to draw the barcode in.</param>\n        public void DrawImage(ref Draw2.Bitmap bm)\n        {\n            string upcode = _NumberSystem + _ManufacturerCode + _ProductCode;\n\n            DrawImage(bm, upcode);\n        }\n\n        /// <summary>\n        /// Design time: Draw a hard coded BarCode for design time;  Parameters can't be\n        /// relied on since they aren't available.\n        /// </summary>\n        /// <param name=\"bm\"></param>\n        public void DrawDesignerImage(ref Draw2.Bitmap bm)\n        {\n            DrawImage(bm, \"00\" + \"12345\" + \"12345\");\n        }\n\n        /// <summary>\n        /// DrawImage given a Bitmap and a upcode does all the drawing work.\n        /// </summary>\n        /// <param name=\"bm\"></param>\n        /// <param name=\"upcode\"></param>\n        internal void DrawImage(Draw2.Bitmap bm, string upcode)\n        {\n            string barPattern = this.GetEncoding(upcode);\n            using Draw2.Graphics g = Draw2.Graphics.FromImage(bm);\n            float mag = PixelConversions.GetMagnification(g, bm.Width, bm.Height, OptimalHeight, OptimalWidth);\n\n            float barWidth = ModuleWidth * mag;\n            float barHeight = OptimalHeight * mag;\n            float fontHeight = FontHeight * mag;\n            float fontHeightMM = fontHeight / 72.27f * 25.4f;\n\n            g.PageUnit = Draw2.GraphicsUnit.Millimeter;\n\n            // Fill in the background with white\n            g.FillRectangle(Draw2.Brushes.White, 0, 0, bm.Width, bm.Height);\n\n            // Draw the bars\n            int barCount = LeftQuietZoneModules;\n            foreach (char bar in barPattern)\n            {\n                if (bar == '1')\n                {\n                    float bh = ((barCount > ModulesToManufacturingStart && barCount < ModulesToManufacturingEnd) ||\n                                (barCount > ModulesToProductStart && barCount < ModulesToProductEnd))\n                        ? barHeight - fontHeightMM\n                        : barHeight;\n\n                    g.FillRectangle(Draw2.Brushes.Black, barWidth * barCount, 0, barWidth, bh);\n                }\n\n                barCount++;\n            }\n\n            // Draw the human readable portion of the barcode\n            using var f = new Draw2.Font(\"Arial\", fontHeight);\n\n            // Draw the left guard text (i.e. 2nd digit of the NumberSystem)\n            string wc = upcode.Substring(0, 1);\n            g.DrawString(wc, f, Draw2.Brushes.Black,\n                new Draw2.PointF(barWidth * LeftQuietZoneModules - g.MeasureString(wc, f).Width,\n                    barHeight - fontHeightMM));\n\n            // Draw the manufacturing digits\n            wc = upcode.Substring(1, 6);\n            g.DrawString(wc, f, Draw2.Brushes.Black,\n                new Draw2.PointF(barWidth * ModulesToManufacturingEnd - g.MeasureString(wc, f).Width,\n                    barHeight - fontHeightMM));\n\n            // Draw the product code + the checksum digit\n            wc = upcode.Substring(7, 5) + CheckSum(upcode).ToString();\n            g.DrawString(wc, f, Draw2.Brushes.Black,\n                new Draw2.PointF(barWidth * ModulesToProductEnd - g.MeasureString(wc, f).Width,\n                    barHeight - fontHeightMM));\n        }\n\n        /// <summary>\n        /// BarCode isn't a DataRegion\n        /// </summary>\n        /// <returns></returns>\n        public bool IsDataRegion()\n        {\n            return false;\n        }\n\n        /// <summary>\n        /// Set the properties;  No validation is done at this time.\n        /// </summary>\n        /// <param name=\"props\"></param>\n        public void SetProperties(IDictionary<string, object> props)\n        {\n            object pv;\n            try\n            {\n                pv = props[\"NumberSystem\"];\n                if (pv is int || pv is long || pv is float || pv is double)\n                    _NumberSystem = string.Format(\"{0:00}\", pv);\n                else\n                    _NumberSystem = pv.ToString();\n            }\n            catch (KeyNotFoundException)\n            {\n                throw new Exception(\"NumberSystem property must be specified\");\n            }\n\n            if (!Regex.IsMatch(_NumberSystem, \"^[0-9][0-9]$\"))\n                throw new Exception(\"NumberSystem must be a 2 digit string.\");\n\n            try\n            {\n                pv = props[\"ManufacturerCode\"];\n                if (pv is int || pv is long || pv is float || pv is double)\n                    _ManufacturerCode = string.Format(\"{0:00000}\", pv);\n                else\n                    _ManufacturerCode = pv.ToString();\n            }\n            catch (KeyNotFoundException)\n            {\n                throw new Exception(\"ManufacturerCode property must be specified\");\n            }\n\n            if (!Regex.IsMatch(_ManufacturerCode, \"^[0-9][0-9][0-9][0-9][0-9]$\"))\n                throw new Exception(\"ManufacturerCode must be a 5 digit string.\");\n\n            try\n            {\n                pv = props[\"ProductCode\"];\n                if (pv is int || pv is long || pv is float || pv is double)\n                    _ProductCode = string.Format(\"{0:00000}\", pv);\n                else\n                    _ProductCode = pv.ToString();\n            }\n            catch (KeyNotFoundException)\n            {\n                throw new Exception(\"ProductCode property must be specified.\");\n            }\n\n            if (!Regex.IsMatch(_ProductCode, \"^[0-9][0-9][0-9][0-9][0-9]$\"))\n                throw new Exception(\"ProductCode must be a 5 digit string.\");\n\n            return;\n        }\n\n        /// <summary>\n        /// Design time call: return string with <CustomReportItem> ... </CustomReportItem> syntax for \n        /// the insert.  The string contains a variable {0} which will be substituted with the\n        /// configuration name.  This allows the name to be completely controlled by\n        /// the configuration file.\n        /// </summary>\n        /// <returns></returns>\n        public string GetCustomReportItemXml()\n        {\n            return \"<CustomReportItem><Type>{0}</Type>\" +\n                   string.Format(\"<Height>{0}mm</Height><Width>{1}mm</Width>\", OptimalHeight, OptimalWidth) +\n                   \"<CustomProperties>\" +\n                   \"<CustomProperty>\" +\n                   \"<Name>NumberSystem</Name>\" +\n                   \"<Value>00</Value>\" +\n                   \"</CustomProperty>\" +\n                   \"<CustomProperty>\" +\n                   \"<Name>ManufacturerCode</Name>\" +\n                   \"<Value>12345</Value>\" +\n                   \"</CustomProperty>\" +\n                   \"<CustomProperty>\" +\n                   \"<Name>ProductCode</Name>\" +\n                   \"<Value>12345</Value>\" +\n                   \"</CustomProperty>\" +\n                   \"</CustomProperties>\" +\n                   \"</CustomReportItem>\";\n        }\n\n        /// <summary>\n        /// Return an instance of the class representing the properties.\n        /// This method is called at design time;\n        /// </summary>\n        /// <returns></returns>\n        public object GetPropertiesInstance(XmlNode iNode)\n        {\n            BarCodeProperties bcp = new BarCodeProperties(this, iNode);\n            foreach (XmlNode n in iNode.ChildNodes)\n            {\n                if (n.Name != \"CustomProperty\")\n                    continue;\n                string pname = this.GetNamedElementValue(n, \"Name\", \"\");\n                switch (pname)\n                {\n                    case \"ProductCode\":\n                        bcp.SetProductCode(GetNamedElementValue(n, \"Value\", \"00000\"));\n                        break;\n                    case \"ManufacturerCode\":\n                        bcp.SetManufacturerCode(GetNamedElementValue(n, \"Value\", \"00000\"));\n                        break;\n                    case \"NumberSystem\":\n                        bcp.SetNumberSystem(GetNamedElementValue(n, \"Value\", \"00\"));\n                        break;\n                    default:\n                        break;\n                }\n            }\n\n            return bcp;\n        }\n\n        /// <summary>\n        /// Set the custom properties given the properties object\n        /// </summary>\n        /// <param name=\"node\"></param>\n        /// <param name=\"inst\"></param>\n        public void SetPropertiesInstance(XmlNode node, object inst)\n        {\n            node.RemoveAll(); // Get rid of all properties\n\n            BarCodeProperties bcp = inst as BarCodeProperties;\n            if (bcp == null)\n                return;\n\n            // NumberSystem\n            CreateChild(node, \"NumberSystem\", bcp.NumberSystem);\n\n            // ManufacturerCode\n            CreateChild(node, \"ManufacturerCode\", bcp.ManufacturerCode);\n\n            // ProductCode\n            CreateChild(node, \"ProductCode\", bcp.ProductCode);\n        }\n\n        void CreateChild(XmlNode node, string nm, string val)\n        {\n            XmlDocument xd = node.OwnerDocument;\n            XmlNode cp = xd.CreateElement(\"CustomProperty\");\n            node.AppendChild(cp);\n\n            XmlNode name = xd.CreateElement(\"Name\");\n            name.InnerText = nm;\n            cp.AppendChild(name);\n\n            XmlNode v = xd.CreateElement(\"Value\");\n            v.InnerText = val;\n            cp.AppendChild(v);\n        }\n\n        public void Dispose()\n        {\n            return;\n        }\n\n        #endregion\n\n\n        /// <summary>\n        /// GetEncoding returns a string representing the on/off bars.  It should be passed\n        /// a string of 12 characters: Country code 2 chars + Manufacturers code 5 chars +\n        /// Product code 5 chars.   \n        /// </summary>\n        /// <param name=\"upccode\"></param>\n        /// <returns></returns>\n        string GetEncoding(string upccode)\n        {\n            if (upccode == null)\n                throw new ArgumentNullException(\"upccode\");\n            else if (upccode.Length != 12)\n                throw new ArgumentException(\n                    \"UPC code must be 12 characters: country code 2 chars, mfg code 5 chars, product code 5 chars\");\n\n            StringBuilder sb = new StringBuilder();\n\n            // Left guard bars\n            sb.Append(\"101\");\n\n            int cc1digit = (int)Char.GetNumericValue(upccode[0]); // country code first digit\n            int digit;\n            string encode;\n\n            // 2nd Country code & Manufacturing code:\n            //    loop thru second character of country code and 5 digits of manufacturers code\n            string parity = BarCodeEAN13.ParityOrdering[cc1digit];\n            for (int i = 1; i < 7; i++)\n            {\n                digit = (int)Char.GetNumericValue(upccode[i]); // get the current digit\n                if (parity[i - 1] == '1')\n                    encode = BarCodeEAN13.LeftHandEncodingOdd[digit];\n                else\n                    encode = BarCodeEAN13.LeftHandEncodingEven[digit];\n                sb.Append(encode);\n            }\n\n            // Centerbars\n            sb.Append(\"01010\");\n\n            // Product code encoding: loop thru the 5 digits of the product code\n            for (int i = 7; i < 12; i++)\n            {\n                digit = (int)Char.GetNumericValue(upccode[i]); // get the current digit\n                encode = BarCodeEAN13.RightHandEncoding[digit];\n                sb.Append(encode);\n            }\n\n            // Checksum of the bar code\n            digit = CheckSum(upccode);\n            encode = BarCodeEAN13.RightHandEncoding[digit];\n            sb.Append(encode);\n\n            // Right guard bars\n            sb.Append(\"101\");\n\n            return sb.ToString();\n        }\n\n\n        /// <summary>\n        /// Calculate the checksum: (sum odd digits * 3 + sum even digits ) \n        ///   Checksum is the number that must be added to sum to make it \n        ///   evenly divisible by 10\n        /// </summary>\n        /// <param name=\"upccode\"></param>\n        /// <returns></returns>\n        int CheckSum(string upccode)\n        {\n            int sum = 0;\n            bool bOdd = false;\n            foreach (char c in upccode)\n            {\n                int digit = (int)Char.GetNumericValue(c);\n                sum += (bOdd ? digit * 3 : digit);\n                bOdd = !bOdd; // switch every other character\n            }\n\n            int cs = 10 - (sum % 10);\n\n            return cs == 10 ? 0 : cs;\n        }\n\n        /// <summary>\n        /// Get the child element with the specified name.  Return the InnerText\n        /// value if found otherwise return the passed default.\n        /// </summary>\n        /// <param name=\"xNode\">Parent node</param>\n        /// <param name=\"name\">Name of child node to look for</param>\n        /// <param name=\"def\">Default value to use if not found</param>\n        /// <returns>Value the named child node</returns>\n        string GetNamedElementValue(XmlNode xNode, string name, string def)\n        {\n            if (xNode == null)\n                return def;\n\n            foreach (XmlNode cNode in xNode.ChildNodes)\n            {\n                if (cNode.NodeType == XmlNodeType.Element &&\n                    cNode.Name == name)\n                    return cNode.InnerText;\n            }\n\n            return def;\n        }\n\n        /// <summary>\n        /// BarCodeProperties- All properties are type string to allow for definition of\n        /// a runtime expression.\n        /// </summary>\n        public class BarCodeProperties\n        {\n            string _NumberSystem;\n            string _ManufacturerCode;\n            string _ProductCode;\n            BarCodeEAN13 _bc;\n            XmlNode _node;\n\n            internal BarCodeProperties(BarCodeEAN13 bc, XmlNode node)\n            {\n                _bc = bc;\n                _node = node;\n            }\n\n            internal void SetNumberSystem(string ns)\n            {\n                _NumberSystem = ns;\n            }\n\n            [Category(\"BarCode\"),\n             Description(\n                 \"The Number System consists of two (sometimes three) digits which identifies the country or region numbering authority which assigned the manufacturer code.\")]\n            public string NumberSystem\n            {\n                get { return _NumberSystem; }\n                set\n                {\n                    _NumberSystem = value;\n                    _bc.SetPropertiesInstance(_node, this);\n                }\n            }\n\n            internal void SetManufacturerCode(string mc)\n            {\n                _ManufacturerCode = mc;\n            }\n\n            [Category(\"BarCode\"),\n             Description(\n                 \"Manufacturer Code is a unique 5 digit code assiged by numbering authority indicated by the number system code.\")]\n            public string ManufacturerCode\n            {\n                get { return _ManufacturerCode; }\n                set\n                {\n                    _ManufacturerCode = value;\n                    _bc.SetPropertiesInstance(_node, this);\n                }\n            }\n\n            internal void SetProductCode(string pc)\n            {\n                _ProductCode = pc;\n            }\n\n            [Category(\"BarCode\"),\n             Description(\"Product Code is a unique 5 digit code assigned by the manufacturer.\")]\n            public string ProductCode\n            {\n                get { return _ProductCode; }\n                set\n                {\n                    _ProductCode = value;\n                    _bc.SetPropertiesInstance(_node, this);\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "RdlCri/BarCodeEAN8.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\nusing Majorsilence.Reporting.Rdl;\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\n#else\nusing System.Drawing;\n#endif\nusing System.ComponentModel;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Cri\n{\n    public class BarCodeEAN8 : ZxingBarcodes\n    {\n        public BarCodeEAN8() : base(35.91f, 65.91f) // Optimal width at mag 1\n        {\n            format = ZXing.BarcodeFormat.EAN_8;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlCri/BarCodeITF14.cs",
    "content": "﻿using Majorsilence.Reporting.Rdl;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nusing System.Text;\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\n#else\nusing System.Drawing;\n#endif\nusing System.Xml;\nusing System.Xml.XPath;\nusing System.ComponentModel;\nusing SkiaSharp;\nusing System.IO;\n\nnamespace Majorsilence.Reporting.Cri\n{\n    public class BarCodeITF14 : ICustomReportItem\n    {\n\n        static public readonly float OptimalWidth = 78f;                    // Optimal width at mag 1\n        static public readonly float OptimalHeight = 39f;        // use ratio of 2.5\n        private string _Itf14Data;\n\n        public void Dispose()\n        {\n            return;\n        }\n\n        public void DrawDesignerImage(ref Bitmap bm)\n        {\n            InternalDraw(ref bm, \"1234567891011\");\n        }\n\n        public void DrawImage(ref Bitmap bm)\n        {\n            InternalDraw(ref bm, _Itf14Data);\n        }\n\n        private void InternalDraw(ref Bitmap bm, string value)\n        {\n            var barcode = new BarcodeStandard.Barcode()\n            {\n                EncodedType = BarcodeStandard.Type.Itf14,\n                IncludeLabel = true,\n               // Width = (int)OptimalWidth,\n               // Height = (int)OptimalHeight\n            };\n            var v = barcode.Encode(value);\n \n            var img = Image.FromStream(v.Encode().AsStream());\n\n            bm = new Bitmap(img);\n        }\n\n        public string GetCustomReportItemXml()\n        {\n            return \"<CustomReportItem><Type>{0}</Type>\" +\n               string.Format(\"<Height>{0}mm</Height><Width>{1}mm</Width>\", OptimalHeight, OptimalWidth) +\n               \"<CustomProperties>\" +\n               \"<CustomProperty>\" +\n               \"<Name>ITF14</Name>\" +\n               \"<Value>Enter Your Value</Value>\" +\n               \"</CustomProperty>\" +\n               \"</CustomProperties>\" +\n               \"</CustomReportItem>\";\n        }\n\n        public object GetPropertiesInstance(XmlNode iNode)\n        {\n            BarCodePropertiesItf14 bcp = new BarCodePropertiesItf14(this, iNode);\n\n            foreach (XmlNode n in iNode.ChildNodes)\n            {\n                if (n.Name != \"CustomProperty\")\n                    continue;\n                string pname = XmlHelpers.GetNamedElementValue(n, \"Name\", \"\");\n                switch (pname)\n                {\n                    case \"ITF14\":\n                        bcp.SetITF14(XmlHelpers.GetNamedElementValue(n, \"Value\", \"\"));\n                        break;\n                    default:\n                        break;\n                }\n            }\n\n            return bcp;\n        }\n\n        public bool IsDataRegion()\n        {\n            return false;\n        }\n\n        public void SetProperties(IDictionary<string, object> props)\n        {\n            try\n            {\n                _Itf14Data = props[\"ITF14\"].ToString();\n                if (_Itf14Data.Length < 13 || _Itf14Data.Length > 14)\n                    throw new Exception(\"ITF 14 data must be of length 13 or 14\");\n\n            }\n            catch (KeyNotFoundException)\n            {\n                throw new Exception(\"ITF14 property must be specified\");\n            }\n\n        }\n\n        public void SetPropertiesInstance(XmlNode node, object inst)\n        {\n            node.RemoveAll();       // Get rid of all properties\n\n            var itfCode = inst as BarCodePropertiesItf14;\n            if (itfCode == null)\n                return;\n\n            XmlHelpers.CreateChild(node, \"ITF14\", itfCode.Itf24);\n        }\n\n\n        /// <summary>\n        /// BarCodeProperties- All properties are type string to allow for definition of\n        /// a runtime expression.\n        /// </summary>\n        public class BarCodePropertiesItf14\n        {\n            string _itf14Data;\n            BarCodeITF14 _itf14;\n            XmlNode _node;\n\n            internal BarCodePropertiesItf14(BarCodeITF14 bc, XmlNode node)\n            {\n                _itf14 = bc;\n                _node = node;\n            }\n\n            internal void SetITF14(string ns)\n            {\n                _itf14Data = ns;\n            }\n\n            [Category(\"ITF14\"), Description(\"The text string to be encoded as a ITF14 Code.\")]\n            public string Itf24\n            {\n                get { return _itf14Data; }\n                set { _itf14Data = value; _itf14.SetPropertiesInstance(_node, this); }\n            }\n\n\n        }\n    }\n}\n"
  },
  {
    "path": "RdlCri/DataMatrix.cs",
    "content": "﻿namespace Majorsilence.Reporting.Cri\n{\n    public class DataMatrix : ZxingBarcodes\n    {\n        public DataMatrix() : base(35.91f, 65.91f) // Optimal width at mag 1\n        {\n            format = ZXing.BarcodeFormat.DATA_MATRIX;\n        }       \n    }\n}"
  },
  {
    "path": "RdlCri/GlobalSuppressions.cs",
    "content": "﻿// This file is used by Code Analysis to maintain SuppressMessage\n// attributes that are applied to this project.\n// Project-level suppressions either have no target or are given\n// a specific target and scoped to a namespace, type, member, etc.\n\nusing System.Diagnostics.CodeAnalysis;\n\n#if !DRAWINGCOMPAT\n[assembly: SuppressMessage(\"Interoperability\", \"CA1416:Validate platform compatibility\",\n    Justification = \"System.Drawing usage is intentional\")]\n#endif\n"
  },
  {
    "path": "RdlCri/Majorsilence.Reporting.RdlCri.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n    <PropertyGroup>\n        <OutputType>Library</OutputType>\n        <RootNamespace>Majorsilence.Reporting.Cri</RootNamespace>\n        <GeneratePackageOnBuild>True</GeneratePackageOnBuild>\n        <AssemblyTitle>RdlCri</AssemblyTitle>\n        <Description>RDL Project CustomReportItem Library</Description>\n        <DelaySign>false</DelaySign>\n        <PackageId>Majorsilence.Reporting.RdlCri</PackageId>\n        <Configurations>Debug;Release;Debug-DrawingCompat;Release-DrawingCompat</Configurations>\n\t\t<TargetFrameworks>net48;net8.0;net10.0</TargetFrameworks>\n        <TargetFrameworks Condition=\"'$(OS)' == 'Unix'\">net8.0;net10.0</TargetFrameworks>\n\t\t<WarningsAsErrors>4014</WarningsAsErrors>\n    </PropertyGroup>\n\t<PropertyGroup Condition=\"'$(Configuration)' == 'Debug-DrawingCompat' Or '$(Configuration)' == 'Release-DrawingCompat'\">\n\t\t<PackageId>Majorsilence.Reporting.RdlCri.SkiaSharp</PackageId>\n\t</PropertyGroup>\n    <ItemGroup>\n        <ProjectReference Include=\"..\\RdlEngine\\Majorsilence.Reporting.RdlEngine.csproj\" />\n    </ItemGroup>\n    <ItemGroup>\n        <PackageReference Include=\"BarcodeLib\" />\n        <PackageReference Include=\"ZXing.Net\" />\n    </ItemGroup>\n\t<ItemGroup Condition=\"'$(Configuration)' != 'Debug-DrawingCompat' And '$(Configuration)' != 'Release-DrawingCompat'\">\n\t\t<PackageReference Include=\"ZXing.Net.Bindings.Windows.Compatibility\" />\n\t</ItemGroup>\n\t<ItemGroup Condition=\"'$(Configuration)' == 'Debug-DrawingCompat' Or '$(Configuration)' == 'Release-DrawingCompat'\">\n\t\t<PackageReference Include=\"ZXing.Net.Bindings.SkiaSharp\" />\n\t</ItemGroup>\n\t\t\n    <ItemGroup>\n        <Folder Include=\"Properties\\\" />\n    </ItemGroup>\n</Project>\n"
  },
  {
    "path": "RdlCri/Pdf417Barcode.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\nusing Majorsilence.Reporting.Rdl;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\nusing System.ComponentModel;\nusing System.Xml;\nusing ZXing;\n\nnamespace Majorsilence.Reporting.Cri\n{\n    public class Pdf417Barcode : ZxingBarcodes\n    {\n        public Pdf417Barcode() : base(35.91f, 65.91f) // Optimal width at mag 1\n        {\n            format = ZXing.BarcodeFormat.PDF_417;\n        }\n    }\n}"
  },
  {
    "path": "RdlCri/PixelConversions.cs",
    "content": "﻿#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\n#else\nusing System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Cri\n{\n    internal class PixelConversions\n    {\n        static public int MmXFromPixel(Graphics g, float x)\n        {\n            int mm = (int)(x / g.DpiX * 25.4f);\t// convert to pixels\n\n            return mm;\n        }\n\n        static public int MmYFromPixel(Graphics g, float y)\n        {\n            int mm = (int)(y / g.DpiY * 25.4f);\t// convert to pixels\n\n            return mm;\n        }\n\n        static public int PixelXFromMm(Graphics g, float x)\n        {\n            int pixels = (int)((x * g.DpiX) / 25.4f);\t// convert to pixels\n\n            return pixels;\n        }\n\n        static public int PixelYFromMm(Graphics g, float y)\n        {\n            int pixel = (int)((y * g.DpiY) / 25.4f);\t// convert to pixels\n\n            return pixel;\n        }\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"g\"></param>\n        /// <param name=\"width\"></param>\n        /// <param name=\"height\"></param>\n        /// <param name=\"OptimalHeight\"></param>\n        /// <param name=\"OptimalWidth\"></param>\n        /// <returns></returns>\n        static public float GetMagnification(Graphics g, int width, int height, float OptimalHeight, float OptimalWidth)\n        {\n\n            float AspectRatio = OptimalHeight / OptimalWidth;\n            float r = (float)height / (float)width;\n            if (r <= AspectRatio)\n            {   // height is the limiting value\n                return MmYFromPixel(g, height) / OptimalHeight;\n            }\n            else\n            {   // width is the limiting value\n                return MmXFromPixel(g, width) / OptimalWidth;\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "RdlCri/QrCode.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\nusing Majorsilence.Reporting.Rdl;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\nusing System.ComponentModel;\nusing System.Xml;\nusing ZXing;\n\nnamespace Majorsilence.Reporting.Cri\n{\n    public class QrCode : ZxingBarcodes\n    {\n        public QrCode() : base(35.91f, 35.91f) // Optimal width at mag 1\n        {\n            format = ZXing.BarcodeFormat.QR_CODE;\n        }\n    }\n}"
  },
  {
    "path": "RdlCri/RdlCri.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Express 2012 for Web\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlCri\", \"RdlCri.csproj\", \"{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlEngine\", \"..\\RdlEngine\\RdlEngine.csproj\", \"{C97E91F4-B310-44E2-9B6C-96775395722D}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x64.Build.0 = Debug|x64\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x86.Build.0 = Debug|x86\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x64.ActiveCfg = Release|x64\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x64.Build.0 = Release|x64\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x86.ActiveCfg = Release|x86\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x86.Build.0 = Release|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.Build.0 = Debug|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.Build.0 = Debug|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.ActiveCfg = Release|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.Build.0 = Release|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.ActiveCfg = Release|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.Build.0 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "RdlCri/XmlHelpers.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Cri\n{\n    public class XmlHelpers\n    {\n\n        /// <summary>\n        /// Get the child element with the specified name.  Return the InnerText\n        /// value if found otherwise return the passed default.\n        /// </summary>\n        /// <param name=\"xNode\">Parent node</param>\n        /// <param name=\"name\">Name of child node to look for</param>\n        /// <param name=\"def\">Default value to use if not found</param>\n        /// <returns>Value the named child node</returns>\n        public static string GetNamedElementValue(XmlNode xNode, string name, string def)\n        {\n            if (xNode == null)\n                return def;\n\n            foreach (XmlNode cNode in xNode.ChildNodes)\n            {\n                if (cNode.NodeType == XmlNodeType.Element &&\n                    cNode.Name == name)\n                    return cNode.InnerText;\n            }\n            return def;\n        }\n\n        public static void CreateChild(XmlNode node, string nm, string val)\n        {\n            XmlDocument xd = node.OwnerDocument;\n            XmlNode cp = xd.CreateElement(\"CustomProperty\");\n            node.AppendChild(cp);\n\n            XmlNode name = xd.CreateElement(\"Name\");\n            name.InnerText = nm;\n            cp.AppendChild(name);\n\n            XmlNode v = xd.CreateElement(\"Value\");\n            v.InnerText = val;\n            cp.AppendChild(v);\n        }\n    }\n}\n"
  },
  {
    "path": "RdlCri/ZxingBarcodes.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\nusing Majorsilence.Reporting.Rdl;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\nusing System.ComponentModel;\nusing System.Xml;\nusing ZXing;\n\nnamespace Majorsilence.Reporting.Cri\n{\n    public class ZxingBarcodes : ICustomReportItem\n    {\n        private readonly float OptimalHeight;  \n        private readonly float OptimalWidth;\n        protected ZXing.BarcodeFormat format;\n        \n        // special chars for datamatrix, gs1 128\n        protected string FrontMatter = \"\";\n        protected string EndMatter = \"\";\n\n        #region ICustomReportItem Members\n\n        // optimal height and width are set to 35.91mm, which is the default for most barcodes.\n        public ZxingBarcodes() : this(35.91f, 65.91f) \n        {\n        }\n\n        public ZxingBarcodes(float optimalHeight, float optimalWidth)\n        {\n            OptimalHeight = optimalHeight;\n            OptimalWidth = optimalWidth;\n        }\n        \n        bool ICustomReportItem.IsDataRegion()\n        {\n            return false;\n        }\n\n        void ICustomReportItem.DrawImage(ref Draw2.Bitmap bm)\n        {\n            DrawImage(ref bm, _code);\n        }\n\n        /// <summary>\n        /// Does the actual drawing of the image.\n        /// </summary>\n        /// <param name=\"bm\"></param>\n        /// <param name=\"qrcode\"></param>\n        internal void DrawImage(ref Draw2.Bitmap bm, string qrcode)\n        {\n#if DRAWINGCOMPAT\n            var writer = new ZXing.SkiaSharp.BarcodeWriter();\n#elif NETSTANDARD2_0 || NET5_0_OR_GREATER\n            var writer = new ZXing.Windows.Compatibility.BarcodeWriter();\n#else\n            var writer = new ZXing.BarcodeWriter();\n#endif\n            writer.Format = format;\n            writer.Options.Hints[EncodeHintType.CHARACTER_SET] = \"UTF-8\";\n\n            using Draw2.Graphics g = Draw2.Graphics.FromImage(bm);\n            float mag = PixelConversions.GetMagnification(g, bm.Width, bm.Height, OptimalHeight, OptimalWidth);\n\n            int barHeight = PixelConversions.PixelXFromMm(g, OptimalHeight * mag);\n            int barWidth = PixelConversions.PixelYFromMm(g, OptimalWidth * mag);\n\n            writer.Options.Height = barHeight;\n            writer.Options.Width = barWidth;\n\n            try\n            {\n                // TODO: move to program startup\n                System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);\n            }\n            catch (InvalidOperationException)\n            {\n                // The provider has already been registered.\n            }\n\n            bm = writer.Write(qrcode);\n        }\n\n        /// <summary>\n        /// Design time: Draw a hard coded BarCode for design time;  Parameters can't be\n        /// relied on since they aren't available.\n        /// </summary>\n        /// <param name=\"bm\"></param>\n        void ICustomReportItem.DrawDesignerImage(ref Draw2.Bitmap bm)\n        {\n            DrawImage(ref bm, \"https://github.com/majorsilence/My-FyiReporting\");\n        }\n\n        private string _code = \"\";\n\n        void ICustomReportItem.SetProperties(IDictionary<string, object> props)\n        {\n            try\n            {\n                if (props.TryGetValue(\"AztecCode\", out object codeValueA))\n                {\n                    // Backwards Compatibility: if the property is present, use it\n                    _code = codeValueA.ToString();\n                }\n                else  if (props.TryGetValue(\"QrCode\", out object codeValueQ))\n                {\n                    // Backwards Compatibility: if the property is present, use it\n                    _code = codeValueQ.ToString();\n                }\n                else {\n                    // fallback to standard \"Code\" property\n                    _code = props[\"Code\"].ToString();\n                }\n            }\n            catch (KeyNotFoundException)\n            {\n                throw new Exception(\"Code property must be specified\");\n            }\n        }\n\n        object ICustomReportItem.GetPropertiesInstance(System.Xml.XmlNode iNode)\n        {\n            ZxingBarCodeProperties bcp = new ZxingBarCodeProperties(this, iNode);\n            foreach (XmlNode n in iNode.ChildNodes)\n            {\n                if (n.Name != \"CustomProperty\")\n                    continue;\n                string pname = XmlHelpers.GetNamedElementValue(n, \"Name\", \"\");\n                switch (pname)\n                {\n                    case \"Code\":\n                        bcp.SetCode(XmlHelpers.GetNamedElementValue(n, \"Value\", \"\"));\n                        break;\n                    default:\n                        break;\n                }\n            }\n\n            return bcp;\n        }\n\n        public void SetPropertiesInstance(System.Xml.XmlNode node, object inst)\n        {\n            node.RemoveAll(); // Get rid of all properties\n\n            ZxingBarCodeProperties bcp = inst as ZxingBarCodeProperties;\n            if (bcp == null)\n                return;\n\n\n            XmlHelpers.CreateChild(node, \"Code\", bcp.Code);\n        }\n\n\n        /// <summary>\n        /// Design time call: return string with <CustomReportItem> ... </CustomReportItem> syntax for \n        /// the insert.  The string contains a variable {0} which will be substituted with the\n        /// configuration name.  This allows the name to be completely controlled by\n        /// the configuration file.\n        /// </summary>\n        /// <returns></returns>\n        string ICustomReportItem.GetCustomReportItemXml()\n        {\n            return \"<CustomReportItem><Type>{0}</Type>\" +\n                   string.Format(\"<Height>{0}mm</Height><Width>{1}mm</Width>\", OptimalHeight, OptimalWidth) +\n                   \"<CustomProperties>\" +\n                   \"<CustomProperty>\" +\n                   \"<Name>Code</Name>\" +\n                   \"<Value>Enter Your Value</Value>\" +\n                   \"</CustomProperty>\" +\n                   \"</CustomProperties>\" +\n                   \"</CustomReportItem>\";\n        }\n\n        #endregion\n\n        #region IDisposable Members\n\n        void IDisposable.Dispose()\n        {\n            return;\n        }\n\n        #endregion\n\n        /// <summary>\n        /// BarCodeProperties- All properties are type string to allow for definition of\n        /// a runtime expression.\n        /// </summary>\n        public class ZxingBarCodeProperties\n        {\n            string _Code;\n            ZxingBarcodes _bc;\n            XmlNode _node;\n\n            internal ZxingBarCodeProperties(ZxingBarcodes bc, XmlNode node)\n            {\n                _bc = bc;\n                _node = node;\n            }\n\n            internal void SetCode(string ns)\n            {\n                _Code = ns;\n            }\n\n            [Category(\"Code\"),\n             Description(\"The text string to be encoded as a PDF417 barcode.\")]\n            public string Code\n            {\n                get { return _Code; }\n                set\n                {\n                    _Code = value;\n                    _bc.SetPropertiesInstance(_node, this);\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "RdlDesign/AssemblyInfo.cs",
    "content": "using System.Runtime.CompilerServices;\n\n[assembly: InternalsVisibleTo(\"ReportTests\")]\n[assembly: InternalsVisibleTo(\"ReportTests.Windows\")]\n"
  },
  {
    "path": "RdlDesign/BackgroundCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for StyleCtl.\n\t/// </summary>\n\tinternal class BackgroundCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n        private List<XmlNode> _ReportItems;\n\t\tprivate DesignXmlDraw _Draw;\n\t\t// flags for controlling whether syntax changed for a particular property\n\t\tprivate bool fEndColor, fBackColor, fGradient, fBackImage;\n\t\tprivate System.Windows.Forms.GroupBox groupBox1;\n\t\tprivate System.Windows.Forms.Label label3;\n\t\tprivate System.Windows.Forms.Button bBackColor;\n\t\tprivate System.Windows.Forms.Label label10;\n\t\tprivate System.Windows.Forms.Label label15;\n\t\tprivate System.Windows.Forms.ComboBox cbEndColor;\n\t\tprivate System.Windows.Forms.ComboBox cbBackColor;\n\t\tprivate System.Windows.Forms.Button bEndColor;\n        private System.Windows.Forms.ComboBox cbGradient;\n\t\tprivate System.Windows.Forms.Button bGradient;\n\t\tprivate System.Windows.Forms.Button bExprBackColor;\n        private System.Windows.Forms.Button bExprEndColor;\n        private GroupBox groupBox2;\n        private Button bExternalExpr;\n        private Button bEmbeddedExpr;\n        private Button bMimeExpr;\n        private Button bDatabaseExpr;\n        private Button bEmbedded;\n        private Button bExternal;\n        private TextBox tbValueExternal;\n        private ComboBox cbValueDatabase;\n        private ComboBox cbMIMEType;\n        private ComboBox cbValueEmbedded;\n        private RadioButton rbDatabase;\n        private RadioButton rbEmbedded;\n        private RadioButton rbExternal;\n        private RadioButton rbNone;\n        private ComboBox cbRepeat;\n        private Label label1;\n        private Button bRepeatExpr;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n        private string[] _names;\n\n        internal BackgroundCtl(DesignXmlDraw dxDraw, string[] names, List<XmlNode> reportItems)\n\t\t{\n\t\t\t_ReportItems = reportItems;\n\t\t\t_Draw = dxDraw;\n            _names = names;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues(_ReportItems[0]);\t\t\t\n\t\t}\n\n\t\tprivate void InitValues(XmlNode node)\n\t\t{\n            cbEndColor.Items.AddRange(StaticLists.ColorList);\n            cbBackColor.Items.AddRange(StaticLists.ColorList);\n            cbGradient.Items.AddRange(StaticLists.GradientList);\n\n            if (_names != null)\n            {\n                node = _Draw.FindCreateNextInHierarchy(node, _names);\n            }\n\n            XmlNode sNode = _Draw.GetNamedChildNode(node, \"Style\");\n\n\t\t\tthis.cbBackColor.Text = _Draw.GetElementValue(sNode, \"BackgroundColor\", \"\");\n\t\t\tthis.cbEndColor.Text = _Draw.GetElementValue(sNode, \"BackgroundGradientEndColor\", \"\");\n\t\t\tthis.cbGradient.Text = _Draw.GetElementValue(sNode, \"BackgroundGradientType\", \"None\");\n\t\t\tif (node.Name != \"Chart\")\n\t\t\t{   // only chart support gradients\n\t\t\t\tthis.cbEndColor.Enabled = bExprEndColor.Enabled =\n\t\t\t\t\tcbGradient.Enabled = bGradient.Enabled = \n\t\t\t\t\tthis.bEndColor.Enabled = bExprEndColor.Enabled = false;\n\t\t\t}\n\n            cbValueEmbedded.Items.AddRange(_Draw.ReportNames.EmbeddedImageNames);\n            string[] flds = _Draw.GetReportItemDataRegionFields(node, true);\n            if (flds != null)\n                this.cbValueDatabase.Items.AddRange(flds);\n\n            XmlNode iNode = _Draw.GetNamedChildNode(sNode, \"BackgroundImage\");\n            if (iNode != null)\n            {\n                string source = _Draw.GetElementValue(iNode, \"Source\", \"Embedded\");\n                string val = _Draw.GetElementValue(iNode, \"Value\", \"\");\n                switch (source)\n                {\n                    case \"Embedded\":\n                        this.rbEmbedded.Checked = true;\n                        this.cbValueEmbedded.Text = val;\n                        break;\n                    case \"Database\":\n                        this.rbDatabase.Checked = true;\n                        this.cbValueDatabase.Text = val;\n                        this.cbMIMEType.Text = _Draw.GetElementValue(iNode, \"MIMEType\", \"image/png\");\n                        break;\n                    case \"External\":\n                    default:\n                        this.rbExternal.Checked = true;\n                        this.tbValueExternal.Text = val;\n                        break;\n                }\n                this.cbRepeat.Text = _Draw.GetElementValue(iNode, \"BackgroundRepeat\", \"Repeat\");\n            }\n            else\n                this.rbNone.Checked = true;\n\n            rbSource_CheckedChanged(null, null);\n\n\t\t\t// nothing has changed now\n\t\t\tfEndColor = fBackColor = fGradient = fBackImage = false;\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BackgroundCtl));\n\t\t\tthis.groupBox1 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.bGradient = new System.Windows.Forms.Button();\n\t\t\tthis.bExprBackColor = new System.Windows.Forms.Button();\n\t\t\tthis.bExprEndColor = new System.Windows.Forms.Button();\n\t\t\tthis.bEndColor = new System.Windows.Forms.Button();\n\t\t\tthis.cbBackColor = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbEndColor = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label15 = new System.Windows.Forms.Label();\n\t\t\tthis.cbGradient = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label10 = new System.Windows.Forms.Label();\n\t\t\tthis.bBackColor = new System.Windows.Forms.Button();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.groupBox2 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.bRepeatExpr = new System.Windows.Forms.Button();\n\t\t\tthis.rbNone = new System.Windows.Forms.RadioButton();\n\t\t\tthis.cbRepeat = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.bExternalExpr = new System.Windows.Forms.Button();\n\t\t\tthis.bEmbeddedExpr = new System.Windows.Forms.Button();\n\t\t\tthis.bMimeExpr = new System.Windows.Forms.Button();\n\t\t\tthis.bDatabaseExpr = new System.Windows.Forms.Button();\n\t\t\tthis.bEmbedded = new System.Windows.Forms.Button();\n\t\t\tthis.bExternal = new System.Windows.Forms.Button();\n\t\t\tthis.tbValueExternal = new System.Windows.Forms.TextBox();\n\t\t\tthis.cbValueDatabase = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbMIMEType = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbValueEmbedded = new System.Windows.Forms.ComboBox();\n\t\t\tthis.rbDatabase = new System.Windows.Forms.RadioButton();\n\t\t\tthis.rbEmbedded = new System.Windows.Forms.RadioButton();\n\t\t\tthis.rbExternal = new System.Windows.Forms.RadioButton();\n\t\t\tthis.groupBox1.SuspendLayout();\n\t\t\tthis.groupBox2.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// groupBox1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox1, \"groupBox1\");\n\t\t\tthis.groupBox1.Controls.Add(this.bGradient);\n\t\t\tthis.groupBox1.Controls.Add(this.bExprBackColor);\n\t\t\tthis.groupBox1.Controls.Add(this.bExprEndColor);\n\t\t\tthis.groupBox1.Controls.Add(this.bEndColor);\n\t\t\tthis.groupBox1.Controls.Add(this.cbBackColor);\n\t\t\tthis.groupBox1.Controls.Add(this.cbEndColor);\n\t\t\tthis.groupBox1.Controls.Add(this.label15);\n\t\t\tthis.groupBox1.Controls.Add(this.cbGradient);\n\t\t\tthis.groupBox1.Controls.Add(this.label10);\n\t\t\tthis.groupBox1.Controls.Add(this.bBackColor);\n\t\t\tthis.groupBox1.Controls.Add(this.label3);\n\t\t\tthis.groupBox1.Name = \"groupBox1\";\n\t\t\tthis.groupBox1.TabStop = false;\n\t\t\t// \n\t\t\t// bGradient\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bGradient, \"bGradient\");\n\t\t\tthis.bGradient.Name = \"bGradient\";\n\t\t\tthis.bGradient.Tag = \"bgradient\";\n\t\t\tthis.bGradient.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bExprBackColor\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bExprBackColor, \"bExprBackColor\");\n\t\t\tthis.bExprBackColor.Name = \"bExprBackColor\";\n\t\t\tthis.bExprBackColor.Tag = \"bcolor\";\n\t\t\tthis.bExprBackColor.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bExprEndColor\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bExprEndColor, \"bExprEndColor\");\n\t\t\tthis.bExprEndColor.Name = \"bExprEndColor\";\n\t\t\tthis.bExprEndColor.Tag = \"bendcolor\";\n\t\t\tthis.bExprEndColor.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bEndColor\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bEndColor, \"bEndColor\");\n\t\t\tthis.bEndColor.Name = \"bEndColor\";\n\t\t\tthis.bEndColor.Click += new System.EventHandler(this.bColor_Click);\n\t\t\t// \n\t\t\t// cbBackColor\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbBackColor, \"cbBackColor\");\n\t\t\tthis.cbBackColor.Name = \"cbBackColor\";\n\t\t\tthis.cbBackColor.SelectedIndexChanged += new System.EventHandler(this.cbBackColor_SelectedIndexChanged);\n\t\t\tthis.cbBackColor.TextChanged += new System.EventHandler(this.cbBackColor_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// cbEndColor\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbEndColor, \"cbEndColor\");\n\t\t\tthis.cbEndColor.Name = \"cbEndColor\";\n\t\t\tthis.cbEndColor.SelectedIndexChanged += new System.EventHandler(this.cbEndColor_SelectedIndexChanged);\n\t\t\tthis.cbEndColor.TextChanged += new System.EventHandler(this.cbEndColor_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// label15\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label15, \"label15\");\n\t\t\tthis.label15.Name = \"label15\";\n\t\t\t// \n\t\t\t// cbGradient\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbGradient, \"cbGradient\");\n\t\t\tthis.cbGradient.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbGradient.Name = \"cbGradient\";\n\t\t\tthis.cbGradient.SelectedIndexChanged += new System.EventHandler(this.cbGradient_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// label10\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label10, \"label10\");\n\t\t\tthis.label10.Name = \"label10\";\n\t\t\t// \n\t\t\t// bBackColor\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bBackColor, \"bBackColor\");\n\t\t\tthis.bBackColor.Name = \"bBackColor\";\n\t\t\tthis.bBackColor.Click += new System.EventHandler(this.bColor_Click);\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// groupBox2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox2, \"groupBox2\");\n\t\t\tthis.groupBox2.Controls.Add(this.bRepeatExpr);\n\t\t\tthis.groupBox2.Controls.Add(this.rbNone);\n\t\t\tthis.groupBox2.Controls.Add(this.cbRepeat);\n\t\t\tthis.groupBox2.Controls.Add(this.label1);\n\t\t\tthis.groupBox2.Controls.Add(this.bExternalExpr);\n\t\t\tthis.groupBox2.Controls.Add(this.bEmbeddedExpr);\n\t\t\tthis.groupBox2.Controls.Add(this.bMimeExpr);\n\t\t\tthis.groupBox2.Controls.Add(this.bDatabaseExpr);\n\t\t\tthis.groupBox2.Controls.Add(this.bEmbedded);\n\t\t\tthis.groupBox2.Controls.Add(this.bExternal);\n\t\t\tthis.groupBox2.Controls.Add(this.tbValueExternal);\n\t\t\tthis.groupBox2.Controls.Add(this.cbValueDatabase);\n\t\t\tthis.groupBox2.Controls.Add(this.cbMIMEType);\n\t\t\tthis.groupBox2.Controls.Add(this.cbValueEmbedded);\n\t\t\tthis.groupBox2.Controls.Add(this.rbDatabase);\n\t\t\tthis.groupBox2.Controls.Add(this.rbEmbedded);\n\t\t\tthis.groupBox2.Controls.Add(this.rbExternal);\n\t\t\tthis.groupBox2.Name = \"groupBox2\";\n\t\t\tthis.groupBox2.TabStop = false;\n\t\t\t// \n\t\t\t// bRepeatExpr\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bRepeatExpr, \"bRepeatExpr\");\n\t\t\tthis.bRepeatExpr.Name = \"bRepeatExpr\";\n\t\t\tthis.bRepeatExpr.Tag = \"repeat\";\n\t\t\t// \n\t\t\t// rbNone\n\t\t\t// \n\t\t\tresources.ApplyResources(this.rbNone, \"rbNone\");\n\t\t\tthis.rbNone.Name = \"rbNone\";\n\t\t\tthis.rbNone.CheckedChanged += new System.EventHandler(this.rbSource_CheckedChanged);\n\t\t\t// \n\t\t\t// cbRepeat\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbRepeat, \"cbRepeat\");\n\t\t\tthis.cbRepeat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbRepeat.Items.AddRange(new object[] {\n            resources.GetString(\"cbRepeat.Items\"),\n            resources.GetString(\"cbRepeat.Items1\"),\n            resources.GetString(\"cbRepeat.Items2\"),\n            resources.GetString(\"cbRepeat.Items3\")});\n\t\t\tthis.cbRepeat.Name = \"cbRepeat\";\n\t\t\tthis.cbRepeat.SelectedIndexChanged += new System.EventHandler(this.BackImage_Changed);\n\t\t\tthis.cbRepeat.TextChanged += new System.EventHandler(this.BackImage_Changed);\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// bExternalExpr\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bExternalExpr, \"bExternalExpr\");\n\t\t\tthis.bExternalExpr.Name = \"bExternalExpr\";\n\t\t\tthis.bExternalExpr.Tag = \"external\";\n\t\t\tthis.bExternalExpr.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bEmbeddedExpr\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bEmbeddedExpr, \"bEmbeddedExpr\");\n\t\t\tthis.bEmbeddedExpr.Name = \"bEmbeddedExpr\";\n\t\t\tthis.bEmbeddedExpr.Tag = \"embedded\";\n\t\t\tthis.bEmbeddedExpr.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bMimeExpr\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bMimeExpr, \"bMimeExpr\");\n\t\t\tthis.bMimeExpr.Name = \"bMimeExpr\";\n\t\t\tthis.bMimeExpr.Tag = \"mime\";\n\t\t\tthis.bMimeExpr.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bDatabaseExpr\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bDatabaseExpr, \"bDatabaseExpr\");\n\t\t\tthis.bDatabaseExpr.Name = \"bDatabaseExpr\";\n\t\t\tthis.bDatabaseExpr.Tag = \"database\";\n\t\t\tthis.bDatabaseExpr.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bEmbedded\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bEmbedded, \"bEmbedded\");\n\t\t\tthis.bEmbedded.Name = \"bEmbedded\";\n\t\t\tthis.bEmbedded.Click += new System.EventHandler(this.bEmbedded_Click);\n\t\t\t// \n\t\t\t// bExternal\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bExternal, \"bExternal\");\n\t\t\tthis.bExternal.Name = \"bExternal\";\n\t\t\tthis.bExternal.Click += new System.EventHandler(this.bExternal_Click);\n\t\t\t// \n\t\t\t// tbValueExternal\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbValueExternal, \"tbValueExternal\");\n\t\t\tthis.tbValueExternal.Name = \"tbValueExternal\";\n\t\t\tthis.tbValueExternal.TextChanged += new System.EventHandler(this.BackImage_Changed);\n\t\t\t// \n\t\t\t// cbValueDatabase\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbValueDatabase, \"cbValueDatabase\");\n\t\t\tthis.cbValueDatabase.Name = \"cbValueDatabase\";\n\t\t\tthis.cbValueDatabase.SelectedIndexChanged += new System.EventHandler(this.BackImage_Changed);\n\t\t\tthis.cbValueDatabase.TextChanged += new System.EventHandler(this.BackImage_Changed);\n\t\t\t// \n\t\t\t// cbMIMEType\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbMIMEType, \"cbMIMEType\");\n\t\t\tthis.cbMIMEType.Items.AddRange(new object[] {\n            resources.GetString(\"cbMIMEType.Items\"),\n            resources.GetString(\"cbMIMEType.Items1\"),\n            resources.GetString(\"cbMIMEType.Items2\"),\n            resources.GetString(\"cbMIMEType.Items3\"),\n            resources.GetString(\"cbMIMEType.Items4\")});\n\t\t\tthis.cbMIMEType.Name = \"cbMIMEType\";\n\t\t\tthis.cbMIMEType.SelectedIndexChanged += new System.EventHandler(this.BackImage_Changed);\n\t\t\tthis.cbMIMEType.TextChanged += new System.EventHandler(this.BackImage_Changed);\n\t\t\t// \n\t\t\t// cbValueEmbedded\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbValueEmbedded, \"cbValueEmbedded\");\n\t\t\tthis.cbValueEmbedded.Name = \"cbValueEmbedded\";\n\t\t\tthis.cbValueEmbedded.SelectedIndexChanged += new System.EventHandler(this.BackImage_Changed);\n\t\t\tthis.cbValueEmbedded.TextChanged += new System.EventHandler(this.BackImage_Changed);\n\t\t\t// \n\t\t\t// rbDatabase\n\t\t\t// \n\t\t\tresources.ApplyResources(this.rbDatabase, \"rbDatabase\");\n\t\t\tthis.rbDatabase.Name = \"rbDatabase\";\n\t\t\tthis.rbDatabase.CheckedChanged += new System.EventHandler(this.rbSource_CheckedChanged);\n\t\t\t// \n\t\t\t// rbEmbedded\n\t\t\t// \n\t\t\tresources.ApplyResources(this.rbEmbedded, \"rbEmbedded\");\n\t\t\tthis.rbEmbedded.Name = \"rbEmbedded\";\n\t\t\tthis.rbEmbedded.CheckedChanged += new System.EventHandler(this.rbSource_CheckedChanged);\n\t\t\t// \n\t\t\t// rbExternal\n\t\t\t// \n\t\t\tresources.ApplyResources(this.rbExternal, \"rbExternal\");\n\t\t\tthis.rbExternal.Name = \"rbExternal\";\n\t\t\tthis.rbExternal.CheckedChanged += new System.EventHandler(this.rbSource_CheckedChanged);\n\t\t\t// \n\t\t\t// BackgroundCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.groupBox2);\n\t\t\tthis.Controls.Add(this.groupBox1);\n\t\t\tthis.Name = \"BackgroundCtl\";\n\t\t\tthis.groupBox1.ResumeLayout(false);\n\t\t\tthis.groupBox2.ResumeLayout(false);\n\t\t\tthis.groupBox2.PerformLayout();\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n        \n\t\tpublic bool IsValid()\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// take information in control and apply to all the style nodes\n\t\t\t//  Only change information that has been marked as modified;\n\t\t\t//   this way when group is selected it is possible to change just\n\t\t\t//   the items you want and keep the rest the same.\n\n\t\t\tforeach (XmlNode riNode in this._ReportItems)\n\t\t\t\tApplyChanges(riNode);\n\n\t\t\t// nothing has changed now\n            fEndColor = fBackColor = fGradient = fBackImage = false;\n\t\t}\n\n\t\tprivate void bColor_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tColorDialog cd = new ColorDialog();\n\t\t\tcd.AnyColor = true;\n\t\t\tcd.FullOpen = true;\n\t\t\tcd.CustomColors = RdlDesigner.GetCustomColors();\n\n            try\n            {\n                if (cd.ShowDialog() != DialogResult.OK)\n                    return;\n\n                RdlDesigner.SetCustomColors(cd.CustomColors);\n                if (sender == this.bEndColor)\n                    cbEndColor.Text = ColorTranslator.ToHtml(cd.Color);\n                else if (sender == this.bBackColor)\n                    cbBackColor.Text = ColorTranslator.ToHtml(cd.Color);\n            }\n            finally\n            {\n                cd.Dispose();\n            }\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void cbBackColor_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfBackColor = true;\n\t\t}\n\n\t\tprivate void cbGradient_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfGradient = true;\n\t\t}\n\n\t\tprivate void cbEndColor_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfEndColor = true;\n\t\t}\n\n        private void BackImage_Changed(object sender, System.EventArgs e)\n        {\n            fBackImage = true;\n        }\n\n        private void rbSource_CheckedChanged(object sender, System.EventArgs e)\n        {\n            fBackImage = true;\n            this.cbValueDatabase.Enabled = this.cbMIMEType.Enabled =\n                this.bDatabaseExpr.Enabled = this.rbDatabase.Checked;\n            this.cbValueEmbedded.Enabled = this.bEmbeddedExpr.Enabled =\n                this.bEmbedded.Enabled = this.rbEmbedded.Checked;\n            this.tbValueExternal.Enabled = this.bExternalExpr.Enabled =\n                this.bExternal.Enabled = this.rbExternal.Checked;\n        }\n\t\t\n\t\tprivate void ApplyChanges(XmlNode rNode)\n\t\t{\n            if (_names != null)\n            {\n                rNode = _Draw.FindCreateNextInHierarchy(rNode, _names);\n            }\n            \n            XmlNode xNode = _Draw.GetNamedChildNode(rNode, \"Style\");\n            if (xNode == null)\n            {\n                _Draw.SetElement(rNode, \"Style\", \"\");\n                xNode = _Draw.GetNamedChildNode(rNode, \"Style\");\n            } \n\t\t\tif (fEndColor)\n\t\t\t{ _Draw.SetElement(xNode, \"BackgroundGradientEndColor\", cbEndColor.Text); }\n\t\t\tif (fBackColor)\n\t\t\t{ _Draw.SetElement(xNode, \"BackgroundColor\", cbBackColor.Text); }\n\t\t\tif (fGradient)\n\t\t\t{ _Draw.SetElement(xNode, \"BackgroundGradientType\", cbGradient.Text); }\n            if (fBackImage)\n            {\n                _Draw.RemoveElement(xNode, \"BackgroundImage\");\n                if (!rbNone.Checked)\n                {\n                    XmlNode bi = _Draw.CreateElement(xNode, \"BackgroundImage\", null);\n                    if (rbDatabase.Checked)\n                    {\n                        _Draw.SetElement(bi, \"Source\", \"Database\");\n                        _Draw.SetElement(bi, \"Value\", cbValueDatabase.Text);\n                        _Draw.SetElement(bi, \"MIMEType\", cbMIMEType.Text);\n                    }\n                    else if (rbExternal.Checked)\n                    {\n                        _Draw.SetElement(bi, \"Source\", \"External\");\n                        _Draw.SetElement(bi, \"Value\", tbValueExternal.Text);\n                    }\n                    else if (rbEmbedded.Checked)\n                    {\n                        _Draw.SetElement(bi, \"Source\", \"Embedded\");\n                        _Draw.SetElement(bi, \"Value\", cbValueEmbedded.Text);\n                    }\n                    _Draw.SetElement(bi, \"BackgroundRepeat\", cbRepeat.Text);\n                }\n            }\n\t\t}\n\n        private void bExternal_Click(object sender, System.EventArgs e)\n        {\n            OpenFileDialog ofd = new OpenFileDialog();\n            ofd.Filter = Strings.BackgroundCtl_bExternal_Click_ImageFilesFilter;\n            ofd.FilterIndex = 6;\n            ofd.CheckFileExists = true;\n            try\n            {\n                if (ofd.ShowDialog(this) == DialogResult.OK)\n                {\n                    tbValueExternal.Text = ofd.FileName;\n                }\n            }\n            finally\n            {\n                ofd.Dispose();\n            }\n        }\n\n        private void bEmbedded_Click(object sender, System.EventArgs e)\n        {\n            DialogEmbeddedImages dlgEI = new DialogEmbeddedImages(this._Draw);\n            dlgEI.StartPosition = FormStartPosition.CenterParent;\n            try\n            {\n                DialogResult dr = dlgEI.ShowDialog();\n                if (dr != DialogResult.OK)\n                    return;\n\n                // Populate the EmbeddedImage names\n                cbValueEmbedded.Items.Clear();\n                cbValueEmbedded.Items.AddRange(_Draw.ReportNames.EmbeddedImageNames);\n            }\n            finally\n            {\n                dlgEI.Dispose();\n            }\n        }\n\n\t\tprivate void bExpr_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tButton b = sender as Button;\n\t\t\tif (b == null)\n\t\t\t\treturn;\n\t\t\tControl c = null;\n\t\t\tbool bColor=false;\n\t\t\tswitch (b.Tag as string)\n\t\t\t{\n\t\t\t\tcase \"bcolor\":\n\t\t\t\t\tc = cbBackColor;\n\t\t\t\t\tbColor = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"bgradient\":\n\t\t\t\t\tc = cbGradient;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"bendcolor\":\n\t\t\t\t\tc = cbEndColor;\n\t\t\t\t\tbColor = true;\n\t\t\t\t\tbreak;\n                case \"database\":\n                    c = cbValueDatabase;\n                    break;\n                case \"embedded\":\n                    c = cbValueEmbedded;\n                    break;\n                case \"external\":\n                    c = tbValueExternal;\n                    break;\n                case \"repeat\":\n                    c = cbRepeat;\n                    break;\n                case \"mime\":\n                    c = cbMIMEType;\n                    break;\n            }\n\n\t\t\tif (c == null)\n\t\t\t\treturn;\n\n\t\t\tXmlNode sNode = _ReportItems[0];\n\n\t\t\tDialogExprEditor ee = new DialogExprEditor(_Draw, c.Text, sNode, bColor);\n\t\t\tDialogResult dr = ee.ShowDialog();\n\t\t\tif (dr == DialogResult.OK)\n\t\t\t\tc.Text = ee.Expression;\n\t\t\treturn;\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/BackgroundCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"&gt;&gt;bExternal.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;bMimeExpr.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bExternalExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;bEmbedded.Name\" xml:space=\"preserve\">\n    <value>bEmbedded</value>\n  </data>\n  <data name=\"&gt;&gt;cbMIMEType.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;cbRepeat.Name\" xml:space=\"preserve\">\n    <value>cbRepeat</value>\n  </data>\n  <data name=\"bGradient.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;bExternal.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"bRepeatExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;bDatabaseExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbDatabase.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bRepeatExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>16</value>\n  </data>\n  <data name=\"cbMIMEType.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"bExprBackColor.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"bRepeatExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"rbEmbedded.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>6, 87</value>\n  </data>\n  <data name=\"&gt;&gt;rbExternal.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"bEmbedded.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"bExternal.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"cbGradient.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>161, 40</value>\n  </data>\n  <data name=\"&gt;&gt;cbValueEmbedded.ZOrder\" xml:space=\"preserve\">\n    <value>13</value>\n  </data>\n  <data name=\"bEndColor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"cbValueEmbedded.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"label15.Text\" xml:space=\"preserve\">\n    <value>End Color</value>\n  </data>\n  <data name=\"cbRepeat.Items\" xml:space=\"preserve\">\n    <value>Repeat</value>\n  </data>\n  <data name=\"bMimeExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbRepeat.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>87, 184</value>\n  </data>\n  <data name=\"bExprBackColor.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;bGradient.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"bEmbedded.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbValueExternal.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>284, 20</value>\n  </data>\n  <data name=\"&gt;&gt;rbEmbedded.Name\" xml:space=\"preserve\">\n    <value>rbEmbedded</value>\n  </data>\n  <data name=\"&gt;&gt;bExprEndColor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"bEmbedded.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>402, 88</value>\n  </data>\n  <data name=\"&gt;&gt;rbNone.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 16</value>\n  </data>\n  <data name=\"bDatabaseExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;rbDatabase.Name\" xml:space=\"preserve\">\n    <value>rbDatabase</value>\n  </data>\n  <data name=\"&gt;&gt;bEndColor.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bEmbeddedExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;bBackColor.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;cbMIMEType.Name\" xml:space=\"preserve\">\n    <value>cbMIMEType</value>\n  </data>\n  <data name=\"&gt;&gt;bEmbeddedExpr.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"cbValueDatabase.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>86, 151</value>\n  </data>\n  <data name=\"&gt;&gt;rbDatabase.ZOrder\" xml:space=\"preserve\">\n    <value>14</value>\n  </data>\n  <data name=\"bExternalExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"label10.Text\" xml:space=\"preserve\">\n    <value>Gradient</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"bEndColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>404, 42</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"cbRepeat.Items1\" xml:space=\"preserve\">\n    <value>NoRepeat</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bExternalExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbValueExternal.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>86, 55</value>\n  </data>\n  <data name=\"&gt;&gt;bMimeExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bBackColor.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"bBackColor.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Name\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"bRepeatExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"cbEndColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>286, 40</value>\n  </data>\n  <data name=\"&gt;&gt;bExternal.Name\" xml:space=\"preserve\">\n    <value>bExternal</value>\n  </data>\n  <data name=\"bBackColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>128, 42</value>\n  </data>\n  <data name=\"cbValueDatabase.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>284, 21</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Color</value>\n  </data>\n  <data name=\"&gt;&gt;bEndColor.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;bEndColor.Name\" xml:space=\"preserve\">\n    <value>bEndColor</value>\n  </data>\n  <data name=\"&gt;&gt;bExternalExpr.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"bDatabaseExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"cbValueEmbedded.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>86, 87</value>\n  </data>\n  <data name=\"&gt;&gt;bExprEndColor.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"bMimeExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"bBackColor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"bMimeExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"bExprBackColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>102, 42</value>\n  </data>\n  <data name=\"bEmbeddedExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;bExternalExpr.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"rbExternal.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>6, 55</value>\n  </data>\n  <data name=\"groupBox1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;cbRepeat.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbEmbedded.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;rbExternal.ZOrder\" xml:space=\"preserve\">\n    <value>16</value>\n  </data>\n  <data name=\"&gt;&gt;cbEndColor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbMIMEType.ZOrder\" xml:space=\"preserve\">\n    <value>12</value>\n  </data>\n  <data name=\"&gt;&gt;cbEndColor.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;rbNone.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;bExprBackColor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"rbExternal.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 24</value>\n  </data>\n  <data name=\"bDatabaseExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"cbEndColor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"rbEmbedded.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;tbValueExternal.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"bExprEndColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>377, 42</value>\n  </data>\n  <data name=\"&gt;&gt;cbValueEmbedded.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bExternal.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>402, 56</value>\n  </data>\n  <data name=\"&gt;&gt;cbBackColor.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"cbMIMEType.Items\" xml:space=\"preserve\">\n    <value>image/bmp</value>\n  </data>\n  <data name=\"bExprEndColor.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;label15.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;cbValueEmbedded.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Name\" xml:space=\"preserve\">\n    <value>label10</value>\n  </data>\n  <data name=\"&gt;&gt;rbDatabase.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bEmbeddedExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;tbValueExternal.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbValueExternal.Name\" xml:space=\"preserve\">\n    <value>tbValueExternal</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Name\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"bDatabaseExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>376, 152</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bEmbedded.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;cbValueEmbedded.Name\" xml:space=\"preserve\">\n    <value>cbValueEmbedded</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbEndColor.Name\" xml:space=\"preserve\">\n    <value>cbEndColor</value>\n  </data>\n  <data name=\"&gt;&gt;cbValueDatabase.Name\" xml:space=\"preserve\">\n    <value>cbValueDatabase</value>\n  </data>\n  <data name=\"&gt;&gt;bEmbedded.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbRepeat.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;bExprEndColor.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"bRepeatExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>213, 184</value>\n  </data>\n  <data name=\"bGradient.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bEmbeddedExpr.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"cbBackColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 40</value>\n  </data>\n  <data name=\"&gt;&gt;bMimeExpr.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"cbValueDatabase.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"bGradient.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>253, 42</value>\n  </data>\n  <data name=\"tbValueExternal.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"rbDatabase.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"rbNone.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 24</value>\n  </data>\n  <data name=\"&gt;&gt;cbMIMEType.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbMIMEType.Text\" xml:space=\"preserve\">\n    <value>image/jpeg</value>\n  </data>\n  <data name=\"&gt;&gt;bRepeatExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbEndColor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 21</value>\n  </data>\n  <data name=\"groupBox1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 8</value>\n  </data>\n  <data name=\"label15.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"cbRepeat.Items2\" xml:space=\"preserve\">\n    <value>RepeatX</value>\n  </data>\n  <data name=\"&gt;&gt;cbBackColor.Name\" xml:space=\"preserve\">\n    <value>cbBackColor</value>\n  </data>\n  <data name=\"label10.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>161, 24</value>\n  </data>\n  <data name=\"&gt;&gt;bRepeatExpr.Name\" xml:space=\"preserve\">\n    <value>bRepeatExpr</value>\n  </data>\n  <data name=\"rbExternal.Text\" xml:space=\"preserve\">\n    <value>External</value>\n  </data>\n  <data name=\"bExprEndColor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;cbValueDatabase.ZOrder\" xml:space=\"preserve\">\n    <value>11</value>\n  </data>\n  <data name=\"rbDatabase.Text\" xml:space=\"preserve\">\n    <value>Database</value>\n  </data>\n  <data name=\"&gt;&gt;bExprEndColor.Name\" xml:space=\"preserve\">\n    <value>bExprEndColor</value>\n  </data>\n  <data name=\"&gt;&gt;cbValueDatabase.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bBackColor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"rbDatabase.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>6, 119</value>\n  </data>\n  <data name=\"&gt;&gt;bDatabaseExpr.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>13</value>\n  </data>\n  <data name=\"&gt;&gt;bBackColor.Name\" xml:space=\"preserve\">\n    <value>bBackColor</value>\n  </data>\n  <data name=\"cbRepeat.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>14</value>\n  </data>\n  <data name=\"&gt;&gt;label10.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 24</value>\n  </data>\n  <data name=\"&gt;&gt;cbEndColor.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"bBackColor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbGradient.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"cbMIMEType.Items4\" xml:space=\"preserve\">\n    <value>image/x-png</value>\n  </data>\n  <data name=\"cbMIMEType.Items3\" xml:space=\"preserve\">\n    <value>image/png</value>\n  </data>\n  <data name=\"cbMIMEType.Items2\" xml:space=\"preserve\">\n    <value>image/gif</value>\n  </data>\n  <data name=\"cbMIMEType.Items1\" xml:space=\"preserve\">\n    <value>image/jpeg</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>472, 351</value>\n  </data>\n  <data name=\"bExprBackColor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbGradient.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"bExternal.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"&gt;&gt;bDatabaseExpr.Name\" xml:space=\"preserve\">\n    <value>bDatabaseExpr</value>\n  </data>\n  <data name=\"bExternal.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bDatabaseExpr.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"groupBox2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"cbBackColor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 21</value>\n  </data>\n  <data name=\"&gt;&gt;bGradient.Name\" xml:space=\"preserve\">\n    <value>bGradient</value>\n  </data>\n  <data name=\"cbBackColor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"bExternalExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>376, 56</value>\n  </data>\n  <data name=\"&gt;&gt;cbGradient.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bExprEndColor.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"cbValueEmbedded.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>284, 21</value>\n  </data>\n  <data name=\"&gt;&gt;cbGradient.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;rbNone.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"&gt;&gt;cbGradient.Name\" xml:space=\"preserve\">\n    <value>cbGradient</value>\n  </data>\n  <data name=\"label10.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 16</value>\n  </data>\n  <data name=\"bDatabaseExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;bExternalExpr.Name\" xml:space=\"preserve\">\n    <value>bExternalExpr</value>\n  </data>\n  <data name=\"bDatabaseExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;bGradient.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;label15.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;bExprBackColor.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;cbBackColor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bExternal.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bEmbedded.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"label15.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>286, 24</value>\n  </data>\n  <data name=\"&gt;&gt;rbEmbedded.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>59, 23</value>\n  </data>\n  <data name=\"groupBox2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 109</value>\n  </data>\n  <data name=\"bExprBackColor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;tbValueExternal.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"cbRepeat.Items3\" xml:space=\"preserve\">\n    <value>RepeatY</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Repeat</value>\n  </data>\n  <data name=\"&gt;&gt;bEmbeddedExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bEmbeddedExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>376, 88</value>\n  </data>\n  <data name=\"&gt;&gt;bEmbedded.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"bExprBackColor.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;rbExternal.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bRepeatExpr.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bEmbeddedExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"bExternalExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"label10.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"rbNone.Text\" xml:space=\"preserve\">\n    <value>None</value>\n  </data>\n  <data name=\"&gt;&gt;cbBackColor.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"rbExternal.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;rbExternal.Name\" xml:space=\"preserve\">\n    <value>rbExternal</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Background</value>\n  </data>\n  <data name=\"cbGradient.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 21</value>\n  </data>\n  <data name=\"bGradient.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;bExprBackColor.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"bEmbeddedExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"bExprEndColor.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;bGradient.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 80</value>\n  </data>\n  <data name=\"bExprEndColor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbRepeat.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;bRepeatExpr.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"bGradient.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"bMimeExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"bExternalExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bMimeExpr.Name\" xml:space=\"preserve\">\n    <value>bMimeExpr</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;label15.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bEndColor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;rbEmbedded.ZOrder\" xml:space=\"preserve\">\n    <value>15</value>\n  </data>\n  <data name=\"cbMIMEType.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>86, 119</value>\n  </data>\n  <data name=\"&gt;&gt;bEmbeddedExpr.Name\" xml:space=\"preserve\">\n    <value>bEmbeddedExpr</value>\n  </data>\n  <data name=\"rbEmbedded.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 24</value>\n  </data>\n  <data name=\"&gt;&gt;bEndColor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bExprBackColor.Name\" xml:space=\"preserve\">\n    <value>bExprBackColor</value>\n  </data>\n  <data name=\"bMimeExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>182, 121</value>\n  </data>\n  <data name=\"groupBox2.Text\" xml:space=\"preserve\">\n    <value>Background Image Source</value>\n  </data>\n  <data name=\"rbEmbedded.Text\" xml:space=\"preserve\">\n    <value>Embedded</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>BackgroundCtl</value>\n  </data>\n  <data name=\"label15.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 16</value>\n  </data>\n  <data name=\"cbMIMEType.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 21</value>\n  </data>\n  <data name=\"rbDatabase.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 24</value>\n  </data>\n  <data name=\"groupBox2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 219</value>\n  </data>\n  <data name=\"&gt;&gt;label15.Name\" xml:space=\"preserve\">\n    <value>label15</value>\n  </data>\n  <data name=\"bExternalExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"rbNone.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>15</value>\n  </data>\n  <data name=\"&gt;&gt;rbNone.Name\" xml:space=\"preserve\">\n    <value>rbNone</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>22, 184</value>\n  </data>\n  <data name=\"bEndColor.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"&gt;&gt;cbValueDatabase.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"rbNone.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>6, 25</value>\n  </data>\n  <data name=\"bGradient.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"bMimeExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"bRepeatExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"cbRepeat.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>120, 21</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/BackgroundCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label15.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 16</value>\n  </data>\n  <data name=\"label15.Text\" xml:space=\"preserve\">\n    <value>Конечний цвет</value>\n  </data>\n  <data name=\"label10.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>74, 16</value>\n  </data>\n  <data name=\"label10.Text\" xml:space=\"preserve\">\n    <value>Градиент</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Цвет</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Фон</value>\n  </data>\n  <data name=\"groupBox2.Text\" xml:space=\"preserve\">\n    <value>Источник фонового изображения</value>\n  </data>\n  <data name=\"bRepeatExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>228, 184</value>\n  </data>\n  <data name=\"rbNone.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>90, 24</value>\n  </data>\n  <data name=\"rbNone.Text\" xml:space=\"preserve\">\n    <value>Отсутствует</value>\n  </data>\n  <data name=\"cbRepeat.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>102, 184</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>74, 23</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Повторение</value>\n  </data>\n  <data name=\"bMimeExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>198, 121</value>\n  </data>\n  <data name=\"tbValueExternal.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>102, 55</value>\n  </data>\n  <data name=\"tbValueExternal.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>268, 20</value>\n  </data>\n  <data name=\"cbValueDatabase.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>102, 151</value>\n  </data>\n  <data name=\"cbValueDatabase.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>268, 21</value>\n  </data>\n  <data name=\"cbMIMEType.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>102, 119</value>\n  </data>\n  <data name=\"cbValueEmbedded.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>102, 87</value>\n  </data>\n  <data name=\"cbValueEmbedded.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>268, 21</value>\n  </data>\n  <data name=\"rbDatabase.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>90, 24</value>\n  </data>\n  <data name=\"rbDatabase.Text\" xml:space=\"preserve\">\n    <value>База данных</value>\n  </data>\n  <data name=\"rbEmbedded.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>90, 24</value>\n  </data>\n  <data name=\"rbEmbedded.Text\" xml:space=\"preserve\">\n    <value>Встроенный</value>\n  </data>\n  <data name=\"rbExternal.Text\" xml:space=\"preserve\">\n    <value>Внешний</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/BodyCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for BodyCtl.\n\t/// </summary>\n\tinternal class BodyCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n\t\tprivate DesignXmlDraw _Draw;\n\t\tprivate System.Windows.Forms.Label label1;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\tprivate System.Windows.Forms.Label label3;\n\t\tprivate System.Windows.Forms.TextBox tbHeight;\n\t\tprivate System.Windows.Forms.TextBox tbColumns;\n\t\tprivate System.Windows.Forms.TextBox tbColumnSpacing;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n\t\tinternal BodyCtl(DesignXmlDraw dxDraw)\n\t\t{\n\t\t\t_Draw = dxDraw;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues();\t\t\t\n\t\t}\n\n\t\tprivate void InitValues()\n\t\t{\n\t\t\tXmlNode rNode = _Draw.GetReportNode();\n\t\t\tXmlNode bNode = _Draw.GetNamedChildNode(rNode, \"Body\");\n\t\t\ttbHeight.Text = _Draw.GetElementValue(bNode, \"Height\", \"\");\n\t\t\ttbColumns.Text = _Draw.GetElementValue(bNode, \"Columns\", \"1\");\n\t\t\ttbColumnSpacing.Text = _Draw.GetElementValue(bNode, \"ColumnSpacing\", \"\");\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BodyCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.tbHeight = new System.Windows.Forms.TextBox();\n\t\t\tthis.tbColumns = new System.Windows.Forms.TextBox();\n\t\t\tthis.tbColumnSpacing = new System.Windows.Forms.TextBox();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// tbHeight\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbHeight, \"tbHeight\");\n\t\t\tthis.tbHeight.Name = \"tbHeight\";\n\t\t\t// \n\t\t\t// tbColumns\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbColumns, \"tbColumns\");\n\t\t\tthis.tbColumns.Name = \"tbColumns\";\n\t\t\t// \n\t\t\t// tbColumnSpacing\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbColumnSpacing, \"tbColumnSpacing\");\n\t\t\tthis.tbColumnSpacing.Name = \"tbColumnSpacing\";\n\t\t\t// \n\t\t\t// BodyCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.tbColumnSpacing);\n\t\t\tthis.Controls.Add(this.tbColumns);\n\t\t\tthis.Controls.Add(this.tbHeight);\n\t\t\tthis.Controls.Add(this.label3);\n\t\t\tthis.Controls.Add(this.label2);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Name = \"BodyCtl\";\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n        \n\t\tpublic bool IsValid()\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\tXmlNode rNode = _Draw.GetReportNode();\n\t\t\tXmlNode bNode = _Draw.GetNamedChildNode(rNode, \"Body\");\n\t\t\t_Draw.SetElement(bNode, \"Height\", tbHeight.Text);\n\t\t\t_Draw.SetElement(bNode, \"Columns\", tbColumns.Text);\n\t\t\tif (tbColumnSpacing.Text.Length > 0)\n\t\t\t\t_Draw.SetElement(bNode, \"ColumnSpacing\", tbColumnSpacing.Text);\n\t\t\telse\n\t\t\t\t_Draw.RemoveElement(bNode, \"ColumnSpacing\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/BodyCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Columns</value>\n  </data>\n  <data name=\"&gt;&gt;tbColumnSpacing.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbColumns.Name\" xml:space=\"preserve\">\n    <value>tbColumns</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;tbColumnSpacing.Name\" xml:space=\"preserve\">\n    <value>tbColumnSpacing</value>\n  </data>\n  <data name=\"tbColumnSpacing.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 23</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>40, 60</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Height</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>BodyCtl</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbHeight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>104, 25</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>40, 24</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 23</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;tbColumns.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Column Spacing</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"&gt;&gt;tbColumnSpacing.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"tbColumnSpacing.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 20</value>\n  </data>\n  <data name=\"&gt;&gt;tbColumns.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbColumnSpacing.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>104, 96</value>\n  </data>\n  <data name=\"&gt;&gt;tbHeight.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 23</value>\n  </data>\n  <data name=\"tbHeight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 20</value>\n  </data>\n  <data name=\"&gt;&gt;tbColumnSpacing.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;tbHeight.Name\" xml:space=\"preserve\">\n    <value>tbHeight</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbHeight.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;tbHeight.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 96</value>\n  </data>\n  <data name=\"tbColumns.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 20</value>\n  </data>\n  <data name=\"tbColumns.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"tbHeight.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"tbColumns.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>104, 61</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbColumns.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>472, 288</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/BodyCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>119, 25</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Высота</value>\n  </data>\n  <data name=\"label1.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>TopRight</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>119, 61</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Столбцы</value>\n  </data>\n  <data name=\"label2.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>TopRight</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label3.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>3, 96</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>172, 23</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Расстояние между колонками</value>\n  </data>\n  <data name=\"label3.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>TopRight</value>\n  </data>\n  <data name=\"tbHeight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>181, 22</value>\n  </data>\n  <data name=\"tbColumns.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>181, 58</value>\n  </data>\n  <data name=\"tbColumnSpacing.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>181, 93</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/ChartAxisCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for ChartCtl.\n\t/// </summary>\n\tinternal class ChartAxisCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n        private List<XmlNode> _ReportItems;\n\t\tprivate DesignXmlDraw _Draw;\n\t\t// change flags\n\t\tbool fMonth, fVisible, fMajorTickMarks, fMargin,fReverse,fInterlaced;\n\t\tbool fMajorGLWidth,fMajorGLColor,fMajorGLStyle;\n\t\tbool fMinorGLWidth,fMinorGLColor,fMinorGLStyle;\n\t\tbool fMajorInterval, fMinorInterval,fMax,fMin;\n\t\tbool fMinorTickMarks,fScalar,fLogScale,fMajorGLShow, fMinorGLShow, fCanOmit;\n\t\t\n\t\tprivate System.Windows.Forms.Label label1;\n\t\tprivate System.Windows.Forms.Label label2;\n        private System.Windows.Forms.CheckBox chkMonth;\n\t\tprivate System.Windows.Forms.CheckBox chkVisible;\n\t\tprivate System.Windows.Forms.ComboBox cbMajorTickMarks;\n\t\tprivate System.Windows.Forms.CheckBox chkMargin;\n\t\tprivate System.Windows.Forms.CheckBox chkReverse;\n\t\tprivate System.Windows.Forms.CheckBox chkInterlaced;\n\t\tprivate System.Windows.Forms.GroupBox groupBox1;\n\t\tprivate System.Windows.Forms.TextBox tbMajorGLWidth;\n\t\tprivate System.Windows.Forms.Button bMajorGLColor;\n\t\tprivate System.Windows.Forms.ComboBox cbMajorGLColor;\n\t\tprivate System.Windows.Forms.ComboBox cbMajorGLStyle;\n\t\tprivate System.Windows.Forms.Label label7;\n\t\tprivate System.Windows.Forms.Label label6;\n\t\tprivate System.Windows.Forms.Label label3;\n\t\tprivate System.Windows.Forms.GroupBox groupBox2;\n\t\tprivate System.Windows.Forms.TextBox tbMinorGLWidth;\n\t\tprivate System.Windows.Forms.Button bMinorGLColor;\n\t\tprivate System.Windows.Forms.ComboBox cbMinorGLColor;\n\t\tprivate System.Windows.Forms.ComboBox cbMinorGLStyle;\n\t\tprivate System.Windows.Forms.Label label4;\n\t\tprivate System.Windows.Forms.Label label5;\n\t\tprivate System.Windows.Forms.Label label8;\n\t\tprivate System.Windows.Forms.Label label9;\n\t\tprivate System.Windows.Forms.TextBox tbMajorInterval;\n\t\tprivate System.Windows.Forms.TextBox tbMinorInterval;\n\t\tprivate System.Windows.Forms.Label label10;\n\t\tprivate System.Windows.Forms.TextBox tbMax;\n\t\tprivate System.Windows.Forms.Label label11;\n\t\tprivate System.Windows.Forms.TextBox tbMin;\n\t\tprivate System.Windows.Forms.Label label12;\n\t\tprivate System.Windows.Forms.ComboBox cbMinorTickMarks;\n\t\tprivate System.Windows.Forms.CheckBox chkScalar;\n\t\tprivate System.Windows.Forms.CheckBox chkLogScale;\n\t\tprivate System.Windows.Forms.CheckBox chkMajorGLShow;\n\t\tprivate System.Windows.Forms.CheckBox chkMinorGLShow;\n\t\tprivate System.Windows.Forms.Button bMinorIntervalExpr;\n\t\tprivate System.Windows.Forms.Button bMajorIntervalExpr;\n\t\tprivate System.Windows.Forms.Button bMinExpr;\n\t\tprivate System.Windows.Forms.Button bMaxExpr;\n        private CheckBox chkCanOmit;\n        \n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n        internal ChartAxisCtl(DesignXmlDraw dxDraw, List<XmlNode> ris)\n\t\t{\n\t\t\t_ReportItems = ris;\n\t\t\t_Draw = dxDraw;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues();\t\t\t\n\t\t}\n\t\tprivate void InitValues()\n\t\t{\n            cbMajorGLColor.Items.AddRange(StaticLists.ColorList);\n            cbMinorGLColor.Items.AddRange(StaticLists.ColorList);\n\n\t\t\tXmlNode node = _ReportItems[0];\n            chkMonth.Checked = _Draw.GetElementValue(node, \"fyi:Month\", \"false\").ToLower() == \"true\" ? true : false; //added checkbox for month category axis WP 12 may 2008\n\t\t\tchkVisible.Checked = _Draw.GetElementValue(node, \"Visible\", \"false\").ToLower() == \"true\"? true: false;\n\t\t\tchkMargin.Checked = _Draw.GetElementValue(node, \"Margin\", \"false\").ToLower() == \"true\"? true: false;\n\t\t\tchkReverse.Checked = _Draw.GetElementValue(node, \"Reverse\", \"false\").ToLower() == \"true\"? true: false;\n\t\t\tchkInterlaced.Checked = _Draw.GetElementValue(node, \"Interlaced\", \"false\").ToLower() == \"true\"? true: false;\n\t\t\tchkScalar.Checked = _Draw.GetElementValue(node, \"Scalar\", \"false\").ToLower() == \"true\"? true: false;\n\t\t\tchkLogScale.Checked = _Draw.GetElementValue(node, \"LogScale\", \"false\").ToLower() == \"true\"? true: false;\n            chkCanOmit.Checked = _Draw.GetElementValue(node, \"fyi:CanOmit\", \"false\").ToLower() == \"true\" ? true : false;\n            cbMajorTickMarks.Text = _Draw.GetElementValue(node, \"MajorTickMarks\", \"None\");\n\t\t\tcbMinorTickMarks.Text = _Draw.GetElementValue(node, \"MinorTickMarks\", \"None\");\n\t\t\t// Major Grid Lines\n\t\t\tInitGridLines(node, \"MajorGridLines\", chkMajorGLShow, cbMajorGLColor, cbMajorGLStyle, tbMajorGLWidth);\n\t\t\t// Minor Grid Lines\n\t\t\tInitGridLines(node, \"MinorGridLines\", chkMinorGLShow, cbMinorGLColor, cbMinorGLStyle, tbMinorGLWidth);\n\n\t\t\ttbMajorInterval.Text = _Draw.GetElementValue(node, \"MajorInterval\", \"\");\n\t\t\ttbMinorInterval.Text = _Draw.GetElementValue(node, \"MinorInterval\", \"\");\n\t\t\ttbMax.Text = _Draw.GetElementValue(node, \"Max\", \"\");\n\t\t\ttbMin.Text = _Draw.GetElementValue(node, \"Min\", \"\");\n\n\t\t\t    fMonth = fVisible = fMajorTickMarks = fMargin=fReverse=fInterlaced=\n\t\t\t\tfMajorGLWidth=fMajorGLColor=fMajorGLStyle=\n\t\t\t\tfMinorGLWidth=fMinorGLColor=fMinorGLStyle=\n\t\t\t\tfMajorInterval= fMinorInterval=fMax=fMin=\n\t\t\t\tfMinorTickMarks=fScalar=fLogScale=fMajorGLShow=fMinorGLShow=fCanOmit=false;\n\t\t}\n\n\t\tprivate void InitGridLines(XmlNode node, string type, CheckBox show, ComboBox color, ComboBox style, TextBox width)\n\t\t{\n\t\t\tXmlNode m = _Draw.GetNamedChildNode(node, type);\n\t\t\tif (m != null)\n\t\t\t{\n\t\t\t\tshow.Checked = _Draw.GetElementValue(m, \"ShowGridLines\", \"false\").ToLower() == \"true\"? true: false;\n\t\t\t\tXmlNode st = _Draw.GetNamedChildNode(m, \"Style\");\n\t\t\t\tif (st != null)\n\t\t\t\t{\n\t\t\t\t\tXmlNode work = _Draw.GetNamedChildNode(st, \"BorderColor\");\n\t\t\t\t\tif (work != null)\n\t\t\t\t\t\tcolor.Text = _Draw.GetElementValue(work, \"Default\", \"Black\");\n\t\t\t\t\twork = _Draw.GetNamedChildNode(st, \"BorderStyle\");\n\t\t\t\t\tif (work != null)\n\t\t\t\t\t\tstyle.Text = _Draw.GetElementValue(work, \"Default\", \"Solid\");\n\t\t\t\t\twork = _Draw.GetNamedChildNode(st, \"BorderWidth\");\n\t\t\t\t\tif (work != null)\n\t\t\t\t\t\twidth.Text = _Draw.GetElementValue(work, \"Default\", \"1pt\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (color.Text.Length == 0)\n\t\t\t\tcolor.Text = \"Black\";\n\t\t\tif (style.Text.Length == 0)\n\t\t\t\tstyle.Text = \"Solid\";\n\t\t\tif (width.Text.Length == 0)\n\t\t\t\twidth.Text = \"1pt\";\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ChartAxisCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.cbMajorTickMarks = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbMinorTickMarks = new System.Windows.Forms.ComboBox();\n\t\t\tthis.chkVisible = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkMargin = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkReverse = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkInterlaced = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkScalar = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkLogScale = new System.Windows.Forms.CheckBox();\n\t\t\tthis.groupBox1 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.chkMajorGLShow = new System.Windows.Forms.CheckBox();\n\t\t\tthis.tbMajorGLWidth = new System.Windows.Forms.TextBox();\n\t\t\tthis.bMajorGLColor = new System.Windows.Forms.Button();\n\t\t\tthis.cbMajorGLColor = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbMajorGLStyle = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label7 = new System.Windows.Forms.Label();\n\t\t\tthis.label6 = new System.Windows.Forms.Label();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.groupBox2 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.chkMinorGLShow = new System.Windows.Forms.CheckBox();\n\t\t\tthis.tbMinorGLWidth = new System.Windows.Forms.TextBox();\n\t\t\tthis.bMinorGLColor = new System.Windows.Forms.Button();\n\t\t\tthis.cbMinorGLColor = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbMinorGLStyle = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label4 = new System.Windows.Forms.Label();\n\t\t\tthis.label5 = new System.Windows.Forms.Label();\n\t\t\tthis.label8 = new System.Windows.Forms.Label();\n\t\t\tthis.label9 = new System.Windows.Forms.Label();\n\t\t\tthis.tbMajorInterval = new System.Windows.Forms.TextBox();\n\t\t\tthis.tbMinorInterval = new System.Windows.Forms.TextBox();\n\t\t\tthis.label10 = new System.Windows.Forms.Label();\n\t\t\tthis.tbMax = new System.Windows.Forms.TextBox();\n\t\t\tthis.label11 = new System.Windows.Forms.Label();\n\t\t\tthis.tbMin = new System.Windows.Forms.TextBox();\n\t\t\tthis.label12 = new System.Windows.Forms.Label();\n\t\t\tthis.bMinorIntervalExpr = new System.Windows.Forms.Button();\n\t\t\tthis.bMajorIntervalExpr = new System.Windows.Forms.Button();\n\t\t\tthis.bMinExpr = new System.Windows.Forms.Button();\n\t\t\tthis.bMaxExpr = new System.Windows.Forms.Button();\n\t\t\tthis.chkCanOmit = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkMonth = new System.Windows.Forms.CheckBox();\n\t\t\tthis.groupBox1.SuspendLayout();\n\t\t\tthis.groupBox2.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// cbMajorTickMarks\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbMajorTickMarks, \"cbMajorTickMarks\");\n\t\t\tthis.cbMajorTickMarks.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbMajorTickMarks.Items.AddRange(new object[] {\n            resources.GetString(\"cbMajorTickMarks.Items\"),\n            resources.GetString(\"cbMajorTickMarks.Items1\"),\n            resources.GetString(\"cbMajorTickMarks.Items2\"),\n            resources.GetString(\"cbMajorTickMarks.Items3\")});\n\t\t\tthis.cbMajorTickMarks.Name = \"cbMajorTickMarks\";\n\t\t\tthis.cbMajorTickMarks.SelectedIndexChanged += new System.EventHandler(this.cbMajorTickMarks_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// cbMinorTickMarks\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbMinorTickMarks, \"cbMinorTickMarks\");\n\t\t\tthis.cbMinorTickMarks.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbMinorTickMarks.Items.AddRange(new object[] {\n            resources.GetString(\"cbMinorTickMarks.Items\"),\n            resources.GetString(\"cbMinorTickMarks.Items1\"),\n            resources.GetString(\"cbMinorTickMarks.Items2\"),\n            resources.GetString(\"cbMinorTickMarks.Items3\")});\n\t\t\tthis.cbMinorTickMarks.Name = \"cbMinorTickMarks\";\n\t\t\tthis.cbMinorTickMarks.SelectedIndexChanged += new System.EventHandler(this.cbMinorTickMarks_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// chkVisible\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkVisible, \"chkVisible\");\n\t\t\tthis.chkVisible.Name = \"chkVisible\";\n\t\t\tthis.chkVisible.CheckedChanged += new System.EventHandler(this.chkVisible_CheckedChanged);\n\t\t\t// \n\t\t\t// chkMargin\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkMargin, \"chkMargin\");\n\t\t\tthis.chkMargin.Name = \"chkMargin\";\n\t\t\tthis.chkMargin.CheckedChanged += new System.EventHandler(this.chkMargin_CheckedChanged);\n\t\t\t// \n\t\t\t// chkReverse\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkReverse, \"chkReverse\");\n\t\t\tthis.chkReverse.Name = \"chkReverse\";\n\t\t\tthis.chkReverse.CheckedChanged += new System.EventHandler(this.chkReverse_CheckedChanged);\n\t\t\t// \n\t\t\t// chkInterlaced\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkInterlaced, \"chkInterlaced\");\n\t\t\tthis.chkInterlaced.Name = \"chkInterlaced\";\n\t\t\tthis.chkInterlaced.CheckedChanged += new System.EventHandler(this.chkInterlaced_CheckedChanged);\n\t\t\t// \n\t\t\t// chkScalar\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkScalar, \"chkScalar\");\n\t\t\tthis.chkScalar.Name = \"chkScalar\";\n\t\t\tthis.chkScalar.CheckedChanged += new System.EventHandler(this.chkScalar_CheckedChanged);\n\t\t\t// \n\t\t\t// chkLogScale\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkLogScale, \"chkLogScale\");\n\t\t\tthis.chkLogScale.Name = \"chkLogScale\";\n\t\t\tthis.chkLogScale.CheckedChanged += new System.EventHandler(this.chkLogScale_CheckedChanged);\n\t\t\t// \n\t\t\t// groupBox1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox1, \"groupBox1\");\n\t\t\tthis.groupBox1.Controls.Add(this.cbMajorGLStyle);\n\t\t\tthis.groupBox1.Controls.Add(this.label3);\n\t\t\tthis.groupBox1.Controls.Add(this.chkMajorGLShow);\n\t\t\tthis.groupBox1.Controls.Add(this.tbMajorGLWidth);\n\t\t\tthis.groupBox1.Controls.Add(this.bMajorGLColor);\n\t\t\tthis.groupBox1.Controls.Add(this.cbMajorGLColor);\n\t\t\tthis.groupBox1.Controls.Add(this.label7);\n\t\t\tthis.groupBox1.Controls.Add(this.label6);\n\t\t\tthis.groupBox1.Name = \"groupBox1\";\n\t\t\tthis.groupBox1.TabStop = false;\n\t\t\t// \n\t\t\t// chkMajorGLShow\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkMajorGLShow, \"chkMajorGLShow\");\n\t\t\tthis.chkMajorGLShow.Name = \"chkMajorGLShow\";\n\t\t\tthis.chkMajorGLShow.CheckedChanged += new System.EventHandler(this.chkMajorGLShow_CheckedChanged);\n\t\t\t// \n\t\t\t// tbMajorGLWidth\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbMajorGLWidth, \"tbMajorGLWidth\");\n\t\t\tthis.tbMajorGLWidth.Name = \"tbMajorGLWidth\";\n\t\t\tthis.tbMajorGLWidth.TextChanged += new System.EventHandler(this.tbMajorGLWidth_TextChanged);\n\t\t\t// \n\t\t\t// bMajorGLColor\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bMajorGLColor, \"bMajorGLColor\");\n\t\t\tthis.bMajorGLColor.Name = \"bMajorGLColor\";\n\t\t\tthis.bMajorGLColor.Click += new System.EventHandler(this.bMajorGLColor_Click);\n\t\t\t// \n\t\t\t// cbMajorGLColor\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbMajorGLColor, \"cbMajorGLColor\");\n\t\t\tthis.cbMajorGLColor.Name = \"cbMajorGLColor\";\n\t\t\tthis.cbMajorGLColor.SelectedIndexChanged += new System.EventHandler(this.cbMajorGLColor_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// cbMajorGLStyle\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbMajorGLStyle, \"cbMajorGLStyle\");\n\t\t\tthis.cbMajorGLStyle.Items.AddRange(new object[] {\n            resources.GetString(\"cbMajorGLStyle.Items\"),\n            resources.GetString(\"cbMajorGLStyle.Items1\"),\n            resources.GetString(\"cbMajorGLStyle.Items2\"),\n            resources.GetString(\"cbMajorGLStyle.Items3\"),\n            resources.GetString(\"cbMajorGLStyle.Items4\"),\n            resources.GetString(\"cbMajorGLStyle.Items5\"),\n            resources.GetString(\"cbMajorGLStyle.Items6\"),\n            resources.GetString(\"cbMajorGLStyle.Items7\"),\n            resources.GetString(\"cbMajorGLStyle.Items8\"),\n            resources.GetString(\"cbMajorGLStyle.Items9\")});\n\t\t\tthis.cbMajorGLStyle.Name = \"cbMajorGLStyle\";\n\t\t\tthis.cbMajorGLStyle.SelectedIndexChanged += new System.EventHandler(this.cbMajorGLStyle_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// label7\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label7, \"label7\");\n\t\t\tthis.label7.Name = \"label7\";\n\t\t\t// \n\t\t\t// label6\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label6, \"label6\");\n\t\t\tthis.label6.Name = \"label6\";\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// groupBox2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox2, \"groupBox2\");\n\t\t\tthis.groupBox2.Controls.Add(this.cbMinorGLStyle);\n\t\t\tthis.groupBox2.Controls.Add(this.label8);\n\t\t\tthis.groupBox2.Controls.Add(this.chkMinorGLShow);\n\t\t\tthis.groupBox2.Controls.Add(this.tbMinorGLWidth);\n\t\t\tthis.groupBox2.Controls.Add(this.bMinorGLColor);\n\t\t\tthis.groupBox2.Controls.Add(this.cbMinorGLColor);\n\t\t\tthis.groupBox2.Controls.Add(this.label4);\n\t\t\tthis.groupBox2.Controls.Add(this.label5);\n\t\t\tthis.groupBox2.Name = \"groupBox2\";\n\t\t\tthis.groupBox2.TabStop = false;\n\t\t\t// \n\t\t\t// chkMinorGLShow\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkMinorGLShow, \"chkMinorGLShow\");\n\t\t\tthis.chkMinorGLShow.Name = \"chkMinorGLShow\";\n\t\t\tthis.chkMinorGLShow.CheckedChanged += new System.EventHandler(this.chkMinorGLShow_CheckedChanged);\n\t\t\t// \n\t\t\t// tbMinorGLWidth\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbMinorGLWidth, \"tbMinorGLWidth\");\n\t\t\tthis.tbMinorGLWidth.Name = \"tbMinorGLWidth\";\n\t\t\tthis.tbMinorGLWidth.TextChanged += new System.EventHandler(this.tbMinorGLWidth_TextChanged);\n\t\t\t// \n\t\t\t// bMinorGLColor\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bMinorGLColor, \"bMinorGLColor\");\n\t\t\tthis.bMinorGLColor.Name = \"bMinorGLColor\";\n\t\t\tthis.bMinorGLColor.Click += new System.EventHandler(this.bMinorGLColor_Click);\n\t\t\t// \n\t\t\t// cbMinorGLColor\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbMinorGLColor, \"cbMinorGLColor\");\n\t\t\tthis.cbMinorGLColor.Name = \"cbMinorGLColor\";\n\t\t\tthis.cbMinorGLColor.SelectedIndexChanged += new System.EventHandler(this.cbMinorGLColor_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// cbMinorGLStyle\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbMinorGLStyle, \"cbMinorGLStyle\");\n\t\t\tthis.cbMinorGLStyle.Items.AddRange(new object[] {\n            resources.GetString(\"cbMinorGLStyle.Items\"),\n            resources.GetString(\"cbMinorGLStyle.Items1\"),\n            resources.GetString(\"cbMinorGLStyle.Items2\"),\n            resources.GetString(\"cbMinorGLStyle.Items3\"),\n            resources.GetString(\"cbMinorGLStyle.Items4\"),\n            resources.GetString(\"cbMinorGLStyle.Items5\"),\n            resources.GetString(\"cbMinorGLStyle.Items6\"),\n            resources.GetString(\"cbMinorGLStyle.Items7\"),\n            resources.GetString(\"cbMinorGLStyle.Items8\"),\n            resources.GetString(\"cbMinorGLStyle.Items9\")});\n\t\t\tthis.cbMinorGLStyle.Name = \"cbMinorGLStyle\";\n\t\t\tthis.cbMinorGLStyle.SelectedIndexChanged += new System.EventHandler(this.cbMinorGLStyle_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// label4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label4, \"label4\");\n\t\t\tthis.label4.Name = \"label4\";\n\t\t\t// \n\t\t\t// label5\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label5, \"label5\");\n\t\t\tthis.label5.Name = \"label5\";\n\t\t\t// \n\t\t\t// label8\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label8, \"label8\");\n\t\t\tthis.label8.Name = \"label8\";\n\t\t\t// \n\t\t\t// label9\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label9, \"label9\");\n\t\t\tthis.label9.Name = \"label9\";\n\t\t\t// \n\t\t\t// tbMajorInterval\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbMajorInterval, \"tbMajorInterval\");\n\t\t\tthis.tbMajorInterval.Name = \"tbMajorInterval\";\n\t\t\tthis.tbMajorInterval.TextChanged += new System.EventHandler(this.tbMajorInterval_TextChanged);\n\t\t\t// \n\t\t\t// tbMinorInterval\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbMinorInterval, \"tbMinorInterval\");\n\t\t\tthis.tbMinorInterval.Name = \"tbMinorInterval\";\n\t\t\tthis.tbMinorInterval.TextChanged += new System.EventHandler(this.tbMinorInterval_TextChanged);\n\t\t\t// \n\t\t\t// label10\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label10, \"label10\");\n\t\t\tthis.label10.Name = \"label10\";\n\t\t\t// \n\t\t\t// tbMax\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbMax, \"tbMax\");\n\t\t\tthis.tbMax.Name = \"tbMax\";\n\t\t\tthis.tbMax.TextChanged += new System.EventHandler(this.tbMax_TextChanged);\n\t\t\t// \n\t\t\t// label11\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label11, \"label11\");\n\t\t\tthis.label11.Name = \"label11\";\n\t\t\t// \n\t\t\t// tbMin\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbMin, \"tbMin\");\n\t\t\tthis.tbMin.Name = \"tbMin\";\n\t\t\tthis.tbMin.TextChanged += new System.EventHandler(this.tbMin_TextChanged);\n\t\t\t// \n\t\t\t// label12\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label12, \"label12\");\n\t\t\tthis.label12.Name = \"label12\";\n\t\t\t// \n\t\t\t// bMinorIntervalExpr\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bMinorIntervalExpr, \"bMinorIntervalExpr\");\n\t\t\tthis.bMinorIntervalExpr.Name = \"bMinorIntervalExpr\";\n\t\t\tthis.bMinorIntervalExpr.Tag = \"minorinterval\";\n\t\t\tthis.bMinorIntervalExpr.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bMajorIntervalExpr\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bMajorIntervalExpr, \"bMajorIntervalExpr\");\n\t\t\tthis.bMajorIntervalExpr.Name = \"bMajorIntervalExpr\";\n\t\t\tthis.bMajorIntervalExpr.Tag = \"majorinterval\";\n\t\t\tthis.bMajorIntervalExpr.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bMinExpr\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bMinExpr, \"bMinExpr\");\n\t\t\tthis.bMinExpr.Name = \"bMinExpr\";\n\t\t\tthis.bMinExpr.Tag = \"min\";\n\t\t\tthis.bMinExpr.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bMaxExpr\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bMaxExpr, \"bMaxExpr\");\n\t\t\tthis.bMaxExpr.Name = \"bMaxExpr\";\n\t\t\tthis.bMaxExpr.Tag = \"max\";\n\t\t\tthis.bMaxExpr.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// chkCanOmit\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkCanOmit, \"chkCanOmit\");\n\t\t\tthis.chkCanOmit.Name = \"chkCanOmit\";\n\t\t\tthis.chkCanOmit.CheckedChanged += new System.EventHandler(this.chkCanOmit_CheckedChanged);\n\t\t\t// \n\t\t\t// chkMonth\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkMonth, \"chkMonth\");\n\t\t\tthis.chkMonth.Name = \"chkMonth\";\n\t\t\tthis.chkMonth.CheckedChanged += new System.EventHandler(this.chkMonth_CheckedChanged);\n\t\t\t// \n\t\t\t// ChartAxisCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.chkReverse);\n\t\t\tthis.Controls.Add(this.chkMonth);\n\t\t\tthis.Controls.Add(this.chkCanOmit);\n\t\t\tthis.Controls.Add(this.bMaxExpr);\n\t\t\tthis.Controls.Add(this.bMinExpr);\n\t\t\tthis.Controls.Add(this.bMajorIntervalExpr);\n\t\t\tthis.Controls.Add(this.bMinorIntervalExpr);\n\t\t\tthis.Controls.Add(this.tbMax);\n\t\t\tthis.Controls.Add(this.label11);\n\t\t\tthis.Controls.Add(this.tbMin);\n\t\t\tthis.Controls.Add(this.label12);\n\t\t\tthis.Controls.Add(this.tbMinorInterval);\n\t\t\tthis.Controls.Add(this.label10);\n\t\t\tthis.Controls.Add(this.groupBox2);\n\t\t\tthis.Controls.Add(this.groupBox1);\n\t\t\tthis.Controls.Add(this.chkLogScale);\n\t\t\tthis.Controls.Add(this.chkScalar);\n\t\t\tthis.Controls.Add(this.chkInterlaced);\n\t\t\tthis.Controls.Add(this.chkMargin);\n\t\t\tthis.Controls.Add(this.chkVisible);\n\t\t\tthis.Controls.Add(this.cbMinorTickMarks);\n\t\t\tthis.Controls.Add(this.cbMajorTickMarks);\n\t\t\tthis.Controls.Add(this.label2);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Controls.Add(this.tbMajorInterval);\n\t\t\tthis.Controls.Add(this.label9);\n\t\t\tthis.Name = \"ChartAxisCtl\";\n\t\t\tthis.groupBox1.ResumeLayout(false);\n\t\t\tthis.groupBox1.PerformLayout();\n\t\t\tthis.groupBox2.ResumeLayout(false);\n\t\t\tthis.groupBox2.PerformLayout();\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n       \tpublic bool IsValid()\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// take information in control and apply to all the style nodes\n\t\t\t//  Only change information that has been marked as modified;\n\t\t\t//   this way when group is selected it is possible to change just\n\t\t\t//   the items you want and keep the rest the same.\n\t\t\t\t\n\t\t\tforeach (XmlNode riNode in this._ReportItems)\n\t\t\t\tApplyChanges(riNode);\n\n\t\t\t    fMonth = fVisible = fMajorTickMarks = fMargin=fReverse=fInterlaced=\n\t\t\t\tfMajorGLWidth=fMajorGLColor=fMajorGLStyle=\n\t\t\t\tfMinorGLWidth=fMinorGLColor=fMinorGLStyle=\n\t\t\t\tfMajorInterval= fMinorInterval=fMax=fMin=\n\t\t\t\tfMinorTickMarks=fScalar=fLogScale=fMajorGLShow=fMinorGLShow=fCanOmit=false;\n\t\t}\n\n\t\tpublic void ApplyChanges(XmlNode node)\n\t\t{\n            if (fMonth)\n            {\n                _Draw.SetElement(node, \"fyi:Month\", this.chkMonth.Checked? \"true\" : \"false\");\n            }\n\t\t\tif (fVisible)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"Visible\", this.chkVisible.Checked? \"true\": \"false\");\n\t\t\t}\n\t\t\tif (fMajorTickMarks)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"MajorTickMarks\", this.cbMajorTickMarks.Text);\n\t\t\t}\n\t\t\tif (fMargin)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"Margin\", this.chkMargin.Checked? \"true\": \"false\");\n\t\t\t}\n\t\t\tif (fReverse)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"Reverse\", this.chkReverse.Checked? \"true\": \"false\");\n\t\t\t}\n\t\t\tif (fInterlaced)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"Interlaced\", this.chkInterlaced.Checked? \"true\": \"false\");\n\t\t\t}\n\t\t\tif (fMajorGLShow || fMajorGLWidth || fMajorGLColor || fMajorGLStyle)\n\t\t\t{\n\t\t\t\tApplyGridLines(node, \"MajorGridLines\", chkMajorGLShow, cbMajorGLColor, cbMajorGLStyle, tbMajorGLWidth);\n\t\t\t}\n\t\t\tif (fMinorGLShow || fMinorGLWidth || fMinorGLColor || fMinorGLStyle)\n\t\t\t{\n\t\t\t\tApplyGridLines(node, \"MinorGridLines\", chkMinorGLShow, cbMinorGLColor, cbMinorGLStyle, tbMinorGLWidth);\n\t\t\t}\n\t\t\tif (fMajorInterval)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"MajorInterval\", this.tbMajorInterval.Text);\n\t\t\t}\n\t\t\tif (fMinorInterval)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"MinorInterval\", this.tbMinorInterval.Text);\n\t\t\t}\n\t\t\tif (fMax)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"Max\", this.tbMax.Text);\n\t\t\t}\n\t\t\tif (fMin)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"Min\", this.tbMin.Text);\n\t\t\t}\n\t\t\tif (fMinorTickMarks)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"MinorTickMarks\", this.cbMinorTickMarks.Text);\n\t\t\t}\n\t\t\tif (fScalar)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"Scalar\", this.chkScalar.Checked? \"true\": \"false\");\n\t\t\t}\n\t\t\tif (fLogScale)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"LogScale\", this.chkLogScale.Checked? \"true\": \"false\");\n\t\t\t}\n            if (fCanOmit)\n            {\n                _Draw.SetElement(node, \"fyi:CanOmit\", this.chkCanOmit.Checked ? \"true\" : \"false\");\n            }\n        }\n\n\t\tprivate void ApplyGridLines(XmlNode node, string type, CheckBox show, ComboBox color, ComboBox style, TextBox width)\n\t\t{\n\t\t\tXmlNode m = _Draw.GetNamedChildNode(node, type);\n\t\t\tif (m == null)\n\t\t\t{\n\t\t\t\tm = _Draw.CreateElement(node, type, null);\n\t\t\t}\n\n\t\t\t_Draw.SetElement(m, \"ShowGridLines\", show.Checked? \"true\": \"false\");\n\t\t\tXmlNode st = _Draw.GetNamedChildNode(m, \"Style\");\n\t\t\tif (st == null)\n\t\t\t\tst = _Draw.CreateElement(m, \"Style\", null);\n\n\t\t\tXmlNode work = _Draw.GetNamedChildNode(st, \"BorderColor\");\n\t\t\tif (work == null)\n\t\t\t\twork = _Draw.CreateElement(st, \"BorderColor\", null);\n\t\t\t_Draw.SetElement(work, \"Default\", color.Text);\n\n\t\t\twork = _Draw.GetNamedChildNode(st, \"BorderStyle\");\n\t\t\tif (work == null)\n\t\t\t\twork = _Draw.CreateElement(st, \"BorderStyle\", null);\n\t\t\t_Draw.SetElement(work, \"Default\", style.Text);\n\t\t\t\n\t\t\twork = _Draw.GetNamedChildNode(st, \"BorderWidth\");\n\t\t\tif (work == null)\n\t\t\t\twork = _Draw.CreateElement(st, \"BorderWidth\", null);\n\t\t\t_Draw.SetElement(work, \"Default\", width.Text);\n\t\t}\n\n\t\tprivate void cbMajorTickMarks_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfMajorTickMarks = true;\n\t\t}\n\n\t\tprivate void cbMinorTickMarks_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfMinorTickMarks = true;\n\t\t}\n\n\t\tprivate void cbMajorGLStyle_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfMajorGLStyle = true;\n\t\t}\n\n\t\tprivate void cbMajorGLColor_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfMajorGLColor = true;\n\t\t}\n\n\t\tprivate void tbMajorGLWidth_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfMajorGLWidth = true;\n\t\t}\n\n\t\tprivate void cbMinorGLStyle_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfMinorGLStyle = true;\n\t\t}\n\n\t\tprivate void cbMinorGLColor_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfMinorGLColor = true;\n\t\t}\n\n\t\tprivate void tbMinorGLWidth_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfMinorGLWidth = true;\n\t\t}\n\n\t\tprivate void tbMajorInterval_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfMajorInterval = true;\n\t\t}\n\n\t\tprivate void tbMinorInterval_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfMinorInterval = true;\n\t\t}\n\n\t\tprivate void tbMin_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfMin = true;\n\t\t}\n\n\t\tprivate void tbMax_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfMax = true;\n\t\t}\n\n        private void chkMonth_CheckedChanged(object sender, System.EventArgs e)\n        {\n            fMonth = true;\n        }\n\n\t\tprivate void chkVisible_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfVisible = true;\n\t\t}\n\n\t\tprivate void chkLogScale_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfLogScale = true;\n\t\t}\n\n        private void chkCanOmit_CheckedChanged(object sender, System.EventArgs e)\n        {\n            fCanOmit = true;\n        }\n\n\t\tprivate void chkMargin_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfMargin = true;\n\t\t}\n\n\t\tprivate void chkScalar_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfScalar = true;\n\t\t}\n\n\t\tprivate void chkReverse_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfReverse = true;\n\t\t}\n\n\t\tprivate void chkInterlaced_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfInterlaced = true;\n\t\t}\n\n\t\tprivate void chkMajorGLShow_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfMajorGLShow = true;\n\t\t}\n\n\t\tprivate void chkMinorGLShow_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfMinorGLShow = true;\n\t\t}\n\n\t\tprivate void bMajorGLColor_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tSetColor(this.cbMajorGLColor);\t\t\n\t\t}\n\n\t\tprivate void bMinorGLColor_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tSetColor(this.cbMinorGLColor);\t\t\n\t\t}\n\n\t\tprivate void SetColor(ComboBox cbColor)\n\t\t{\n\t\t\tColorDialog cd = new ColorDialog();\n\t\t\tcd.AnyColor = true;\n\t\t\tcd.FullOpen = true;\n\t\t\t\n\t\t\tcd.CustomColors = RdlDesigner.GetCustomColors();\n\t\t\tcd.Color = DesignerUtility.ColorFromHtml(cbColor.Text, System.Drawing.Color.Empty);\n\n            try\n            {\n                if (cd.ShowDialog() != DialogResult.OK)\n                    return;\n\n                RdlDesigner.SetCustomColors(cd.CustomColors);\n                cbColor.Text = ColorTranslator.ToHtml(cd.Color);\n            }\n            finally\n            {\n                cd.Dispose();\n            }\n\n\t\t\treturn;\n\t\t}\n\t\tprivate void bExpr_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tButton b = sender as Button;\n\t\t\tif (b == null)\n\t\t\t\treturn;\n\t\t\tControl c = null;\n\t\t\tbool bColor=false;\n\t\t\tswitch (b.Tag as string)\n\t\t\t{\n\t\t\t\tcase \"min\":\n\t\t\t\t\tc = this.tbMin;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"max\":\n\t\t\t\t\tc = this.tbMax;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"majorinterval\":\n\t\t\t\t\tc = this.tbMajorInterval;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"minorinterval\":\n\t\t\t\t\tc = this.tbMinorInterval;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (c == null)\n\t\t\t\treturn;\n\n\t\t\tXmlNode sNode = _ReportItems[0];\n\n\t\t\tDialogExprEditor ee = new DialogExprEditor(_Draw, c.Text, sNode, bColor);\n            try\n            {\n                DialogResult dr = ee.ShowDialog();\n                if (dr == DialogResult.OK)\n                    c.Text = ee.Expression;\n            }\n            finally\n            {\n                ee.Dispose();\n            }\n\t\t\treturn;\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/ChartAxisCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"&gt;&gt;chkMargin.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bMinorIntervalExpr.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;tbMajorInterval.Name\" xml:space=\"preserve\">\n    <value>tbMajorInterval</value>\n  </data>\n  <data name=\"&gt;&gt;label4.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;label6.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.ZOrder\" xml:space=\"preserve\">\n    <value>14</value>\n  </data>\n  <data name=\"&gt;&gt;cbMajorTickMarks.ZOrder\" xml:space=\"preserve\">\n    <value>21</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Color</value>\n  </data>\n  <data name=\"&gt;&gt;label5.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bMajorIntervalExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;tbMax.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbMinorGLStyle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 21</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"tbMinorInterval.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>302, 152</value>\n  </data>\n  <data name=\"bMaxExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"cbMinorGLColor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"label4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"chkScalar.Text\" xml:space=\"preserve\">\n    <value>Scalar</value>\n  </data>\n  <data name=\"&gt;&gt;bMajorIntervalExpr.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;cbMajorGLStyle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbMinorGLWidth.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"label10.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"bMinExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>15</value>\n  </data>\n  <data name=\"&gt;&gt;chkReverse.Name\" xml:space=\"preserve\">\n    <value>chkReverse</value>\n  </data>\n  <data name=\"bMinExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bMajorIntervalExpr.Name\" xml:space=\"preserve\">\n    <value>bMajorIntervalExpr</value>\n  </data>\n  <data name=\"cbMinorTickMarks.Items3\" xml:space=\"preserve\">\n    <value>Cross</value>\n  </data>\n  <data name=\"&gt;&gt;cbMajorGLStyle.Name\" xml:space=\"preserve\">\n    <value>cbMajorGLStyle</value>\n  </data>\n  <data name=\"chkCanOmit.Text\" xml:space=\"preserve\">\n    <value>Can Omit Values on Truncation</value>\n  </data>\n  <data name=\"&gt;&gt;cbMajorGLStyle.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"chkMargin.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>21</value>\n  </data>\n  <data name=\"label11.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>16</value>\n  </data>\n  <data name=\"&gt;&gt;bMinExpr.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"tbMinorInterval.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>400, 48</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>64, 18</value>\n  </data>\n  <data name=\"label10.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 16</value>\n  </data>\n  <data name=\"cbMajorTickMarks.Items3\" xml:space=\"preserve\">\n    <value>Cross</value>\n  </data>\n  <data name=\"&gt;&gt;chkMinorGLShow.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label12.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbMinorTickMarks.Name\" xml:space=\"preserve\">\n    <value>cbMinorTickMarks</value>\n  </data>\n  <data name=\"&gt;&gt;tbMajorGLWidth.Name\" xml:space=\"preserve\">\n    <value>tbMajorGLWidth</value>\n  </data>\n  <data name=\"tbMin.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>65, 20</value>\n  </data>\n  <data name=\"&gt;&gt;chkInterlaced.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"bMajorIntervalExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"cbMinorGLStyle.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 16</value>\n  </data>\n  <data name=\"&gt;&gt;tbMax.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"label6.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>320, 18</value>\n  </data>\n  <data name=\"label11.Text\" xml:space=\"preserve\">\n    <value>Maximum Value</value>\n  </data>\n  <data name=\"&gt;&gt;chkReverse.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Name\" xml:space=\"preserve\">\n    <value>label10</value>\n  </data>\n  <data name=\"groupBox2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>400, 48</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;chkLogScale.ZOrder\" xml:space=\"preserve\">\n    <value>15</value>\n  </data>\n  <data name=\"&gt;&gt;cbMinorGLStyle.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;chkLogScale.Name\" xml:space=\"preserve\">\n    <value>chkLogScale</value>\n  </data>\n  <data name=\"chkInterlaced.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 24</value>\n  </data>\n  <data name=\"&gt;&gt;bMinorIntervalExpr.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbMajorTickMarks.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>128, 8</value>\n  </data>\n  <data name=\"&gt;&gt;tbMinorGLWidth.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"chkCanOmit.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>24</value>\n  </data>\n  <data name=\"&gt;&gt;tbMajorInterval.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"groupBox2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;label11.Name\" xml:space=\"preserve\">\n    <value>label11</value>\n  </data>\n  <data name=\"chkVisible.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 224</value>\n  </data>\n  <data name=\"chkMonth.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>145, 24</value>\n  </data>\n  <data name=\"&gt;&gt;chkMargin.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bMinorIntervalExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.ZOrder\" xml:space=\"preserve\">\n    <value>13</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"bMajorIntervalExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bMaxExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbMajorGLColor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 21</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>112, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbMajorTickMarks.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bMinorIntervalExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;chkMajorGLShow.Name\" xml:space=\"preserve\">\n    <value>chkMajorGLShow</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>22</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>23</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>36, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbMajorGLColor.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;bMajorIntervalExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label11.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label9.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;chkVisible.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label8.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"bMinorGLColor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"chkCanOmit.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>93, 48</value>\n  </data>\n  <data name=\"&gt;&gt;cbMinorTickMarks.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"chkInterlaced.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>23</value>\n  </data>\n  <data name=\"chkMajorGLShow.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 24</value>\n  </data>\n  <data name=\"&gt;&gt;cbMinorGLColor.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;chkMargin.Name\" xml:space=\"preserve\">\n    <value>chkMargin</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>224, 8</value>\n  </data>\n  <data name=\"bMaxExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"chkMonth.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>25</value>\n  </data>\n  <data name=\"cbMajorGLStyle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 21</value>\n  </data>\n  <data name=\"bMinorIntervalExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 16</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbMin.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"bMajorIntervalExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>177, 154</value>\n  </data>\n  <data name=\"cbMinorGLStyle.Items4\" xml:space=\"preserve\">\n    <value>Double</value>\n  </data>\n  <data name=\"chkMinorGLShow.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 14</value>\n  </data>\n  <data name=\"tbMin.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>14</value>\n  </data>\n  <data name=\"label11.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>84, 16</value>\n  </data>\n  <data name=\"&gt;&gt;tbMajorGLWidth.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"bMajorGLColor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 24</value>\n  </data>\n  <data name=\"bMajorGLColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>288, 14</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Name\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbMajorGLStyle.Items\" xml:space=\"preserve\">\n    <value>None</value>\n  </data>\n  <data name=\"chkCanOmit.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>334, 224</value>\n  </data>\n  <data name=\"&gt;&gt;bMinorGLColor.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"bMajorIntervalExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"chkMajorGLShow.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"chkMinorGLShow.Text\" xml:space=\"preserve\">\n    <value>Show</value>\n  </data>\n  <data name=\"&gt;&gt;label12.Name\" xml:space=\"preserve\">\n    <value>label12</value>\n  </data>\n  <data name=\"tbMinorGLWidth.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>352, 16</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Color</value>\n  </data>\n  <data name=\"label12.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 184</value>\n  </data>\n  <data name=\"&gt;&gt;bMaxExpr.Name\" xml:space=\"preserve\">\n    <value>bMaxExpr</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label11.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>216, 184</value>\n  </data>\n  <data name=\"&gt;&gt;tbMin.Name\" xml:space=\"preserve\">\n    <value>tbMin</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbMax.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>302, 182</value>\n  </data>\n  <data name=\"chkReverse.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>120, 24</value>\n  </data>\n  <data name=\"&gt;&gt;tbMajorInterval.ZOrder\" xml:space=\"preserve\">\n    <value>24</value>\n  </data>\n  <data name=\"&gt;&gt;chkMajorGLShow.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bMinorGLColor.Name\" xml:space=\"preserve\">\n    <value>bMinorGLColor</value>\n  </data>\n  <data name=\"&gt;&gt;chkScalar.ZOrder\" xml:space=\"preserve\">\n    <value>16</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Name\" xml:space=\"preserve\">\n    <value>label8</value>\n  </data>\n  <data name=\"bMaxExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"label9.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 154</value>\n  </data>\n  <data name=\"&gt;&gt;chkCanOmit.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bMajorGLColor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Name\" xml:space=\"preserve\">\n    <value>label9</value>\n  </data>\n  <data name=\"cbMajorGLColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>208, 16</value>\n  </data>\n  <data name=\"cbMinorGLStyle.Items5\" xml:space=\"preserve\">\n    <value>Groove</value>\n  </data>\n  <data name=\"chkScalar.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 24</value>\n  </data>\n  <data name=\"chkInterlaced.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>240, 248</value>\n  </data>\n  <data name=\"chkReverse.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>23</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"cbMinorTickMarks.Items1\" xml:space=\"preserve\">\n    <value>Inside</value>\n  </data>\n  <data name=\"cbMinorTickMarks.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 21</value>\n  </data>\n  <data name=\"label7.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"bMinExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label12.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkVisible.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbMinorGLStyle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bMajorIntervalExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"tbMinorInterval.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>65, 20</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbMajorInterval.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>104, 152</value>\n  </data>\n  <data name=\"&gt;&gt;chkMinorGLShow.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"cbMajorGLColor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Major Tick Marks</value>\n  </data>\n  <data name=\"&gt;&gt;chkMonth.Name\" xml:space=\"preserve\">\n    <value>chkMonth</value>\n  </data>\n  <data name=\"&gt;&gt;chkInterlaced.ZOrder\" xml:space=\"preserve\">\n    <value>17</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>36, 16</value>\n  </data>\n  <data name=\"cbMinorGLStyle.Items\" xml:space=\"preserve\">\n    <value>None</value>\n  </data>\n  <data name=\"&gt;&gt;chkMinorGLShow.Name\" xml:space=\"preserve\">\n    <value>chkMinorGLShow</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;tbMinorGLWidth.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbMajorTickMarks.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"groupBox1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 32</value>\n  </data>\n  <data name=\"bMinExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>177, 184</value>\n  </data>\n  <data name=\"&gt;&gt;chkScalar.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkScalar.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 248</value>\n  </data>\n  <data name=\"&gt;&gt;bMinorGLColor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label11.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>Width</value>\n  </data>\n  <data name=\"&gt;&gt;tbMax.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkReverse.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>108, 248</value>\n  </data>\n  <data name=\"&gt;&gt;chkMajorGLShow.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;bMajorGLColor.Name\" xml:space=\"preserve\">\n    <value>bMajorGLColor</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>36, 16</value>\n  </data>\n  <data name=\"label5.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>320, 18</value>\n  </data>\n  <data name=\"&gt;&gt;label10.ZOrder\" xml:space=\"preserve\">\n    <value>12</value>\n  </data>\n  <data name=\"&gt;&gt;bMinExpr.Name\" xml:space=\"preserve\">\n    <value>bMinExpr</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"&gt;&gt;chkLogScale.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bMaxExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"label8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 16</value>\n  </data>\n  <data name=\"cbMajorTickMarks.Items1\" xml:space=\"preserve\">\n    <value>Inside</value>\n  </data>\n  <data name=\"&gt;&gt;bMaxExpr.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"label3.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;cbMajorGLColor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbMinorGLColor.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"cbMinorTickMarks.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;label11.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Minor Tick Marks</value>\n  </data>\n  <data name=\"chkMargin.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>240, 224</value>\n  </data>\n  <data name=\"&gt;&gt;chkInterlaced.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbMajorInterval.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"cbMajorGLStyle.Items3\" xml:space=\"preserve\">\n    <value>Solid</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkMonth.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbMinorInterval.Name\" xml:space=\"preserve\">\n    <value>tbMinorInterval</value>\n  </data>\n  <data name=\"bMinExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;cbMinorGLStyle.Name\" xml:space=\"preserve\">\n    <value>cbMinorGLStyle</value>\n  </data>\n  <data name=\"cbMinorTickMarks.Items2\" xml:space=\"preserve\">\n    <value>Outside</value>\n  </data>\n  <data name=\"bMinorIntervalExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>375, 154</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;cbMinorGLColor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkMonth.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbMajorGLWidth.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;chkCanOmit.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Style</value>\n  </data>\n  <data name=\"&gt;&gt;chkMargin.ZOrder\" xml:space=\"preserve\">\n    <value>18</value>\n  </data>\n  <data name=\"&gt;&gt;bMinExpr.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbMinorGLColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>208, 16</value>\n  </data>\n  <data name=\"&gt;&gt;tbMinorInterval.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"groupBox2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 88</value>\n  </data>\n  <data name=\"tbMin.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>104, 182</value>\n  </data>\n  <data name=\"&gt;&gt;bMinorGLColor.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;tbMin.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label8.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"chkScalar.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>22</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 8</value>\n  </data>\n  <data name=\"cbMinorTickMarks.Items\" xml:space=\"preserve\">\n    <value>None</value>\n  </data>\n  <data name=\"chkMargin.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>60, 24</value>\n  </data>\n  <data name=\"cbMinorTickMarks.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>336, 8</value>\n  </data>\n  <data name=\"bMinorIntervalExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;bMinorIntervalExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbMinorGLWidth.Name\" xml:space=\"preserve\">\n    <value>tbMinorGLWidth</value>\n  </data>\n  <data name=\"cbMajorGLStyle.Items8\" xml:space=\"preserve\">\n    <value>WindowInset</value>\n  </data>\n  <data name=\"cbMajorGLStyle.Items9\" xml:space=\"preserve\">\n    <value>Outset</value>\n  </data>\n  <data name=\"chkLogScale.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>108, 224</value>\n  </data>\n  <data name=\"&gt;&gt;label12.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbMajorTickMarks.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 21</value>\n  </data>\n  <data name=\"cbMajorGLStyle.Items1\" xml:space=\"preserve\">\n    <value>Dotted</value>\n  </data>\n  <data name=\"cbMajorGLStyle.Items2\" xml:space=\"preserve\">\n    <value>Dashed</value>\n  </data>\n  <data name=\"chkVisible.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 24</value>\n  </data>\n  <data name=\"cbMajorGLStyle.Items4\" xml:space=\"preserve\">\n    <value>Double</value>\n  </data>\n  <data name=\"chkMinorGLShow.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 24</value>\n  </data>\n  <data name=\"cbMajorGLStyle.Items6\" xml:space=\"preserve\">\n    <value>Ridge</value>\n  </data>\n  <data name=\"cbMajorGLStyle.Items7\" xml:space=\"preserve\">\n    <value>Inset</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbMajorGLWidth.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 20</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>ChartAxisCtl</value>\n  </data>\n  <data name=\"tbMinorGLWidth.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 20</value>\n  </data>\n  <data name=\"&gt;&gt;tbMin.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbMax.Name\" xml:space=\"preserve\">\n    <value>tbMax</value>\n  </data>\n  <data name=\"&gt;&gt;chkReverse.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbMajorTickMarks.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;chkCanOmit.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Major Grid Lines</value>\n  </data>\n  <data name=\"&gt;&gt;bMinorIntervalExpr.Name\" xml:space=\"preserve\">\n    <value>bMinorIntervalExpr</value>\n  </data>\n  <data name=\"&gt;&gt;tbMinorGLWidth.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"label5.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;label12.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"cbMajorTickMarks.Items\" xml:space=\"preserve\">\n    <value>None</value>\n  </data>\n  <data name=\"bMajorGLColor.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"label7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 16</value>\n  </data>\n  <data name=\"groupBox2.Text\" xml:space=\"preserve\">\n    <value>Minor Grid Lines</value>\n  </data>\n  <data name=\"&gt;&gt;chkScalar.Name\" xml:space=\"preserve\">\n    <value>chkScalar</value>\n  </data>\n  <data name=\"&gt;&gt;cbMajorGLColor.Name\" xml:space=\"preserve\">\n    <value>cbMajorGLColor</value>\n  </data>\n  <data name=\"chkMajorGLShow.Text\" xml:space=\"preserve\">\n    <value>Show</value>\n  </data>\n  <data name=\"chkLogScale.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>120, 24</value>\n  </data>\n  <data name=\"&gt;&gt;cbMinorTickMarks.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkLogScale.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>20</value>\n  </data>\n  <data name=\"&gt;&gt;cbMajorGLColor.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;tbMajorGLWidth.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbMinorGLColor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 21</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Width</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Name\" xml:space=\"preserve\">\n    <value>label7</value>\n  </data>\n  <data name=\"&gt;&gt;chkCanOmit.Name\" xml:space=\"preserve\">\n    <value>chkCanOmit</value>\n  </data>\n  <data name=\"cbMajorGLStyle.Items5\" xml:space=\"preserve\">\n    <value>Groove</value>\n  </data>\n  <data name=\"&gt;&gt;tbMajorGLWidth.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;label7.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"bMaxExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>376, 184</value>\n  </data>\n  <data name=\"cbMinorGLStyle.Items8\" xml:space=\"preserve\">\n    <value>WindowInset</value>\n  </data>\n  <data name=\"cbMinorGLStyle.Items9\" xml:space=\"preserve\">\n    <value>Outset</value>\n  </data>\n  <data name=\"&gt;&gt;chkReverse.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Name\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;tbMajorInterval.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbMinorGLStyle.Items6\" xml:space=\"preserve\">\n    <value>Ridge</value>\n  </data>\n  <data name=\"cbMinorGLStyle.Items7\" xml:space=\"preserve\">\n    <value>Inset</value>\n  </data>\n  <data name=\"cbMinorGLStyle.Items1\" xml:space=\"preserve\">\n    <value>Dotted</value>\n  </data>\n  <data name=\"label12.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>13</value>\n  </data>\n  <data name=\"cbMinorGLStyle.Items3\" xml:space=\"preserve\">\n    <value>Solid</value>\n  </data>\n  <data name=\"label6.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"bMaxExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>18</value>\n  </data>\n  <data name=\"&gt;&gt;label8.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Style</value>\n  </data>\n  <data name=\"&gt;&gt;bMajorGLColor.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;bMajorIntervalExpr.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label9.ZOrder\" xml:space=\"preserve\">\n    <value>25</value>\n  </data>\n  <data name=\"&gt;&gt;chkInterlaced.Name\" xml:space=\"preserve\">\n    <value>chkInterlaced</value>\n  </data>\n  <data name=\"chkMonth.Text\" xml:space=\"preserve\">\n    <value>Month Category Scale</value>\n  </data>\n  <data name=\"bMinorGLColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>288, 14</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"label9.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bMinorGLColor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 24</value>\n  </data>\n  <data name=\"&gt;&gt;tbMinorInterval.ZOrder\" xml:space=\"preserve\">\n    <value>11</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label6.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;bMinExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>440, 303</value>\n  </data>\n  <data name=\"tbMax.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>17</value>\n  </data>\n  <data name=\"chkMonth.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 272</value>\n  </data>\n  <data name=\"cbMajorGLStyle.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;cbMinorTickMarks.ZOrder\" xml:space=\"preserve\">\n    <value>20</value>\n  </data>\n  <data name=\"cbMinorGLStyle.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"label10.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>217, 154</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label10.Text\" xml:space=\"preserve\">\n    <value>Minor Interval</value>\n  </data>\n  <data name=\"tbMajorGLWidth.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>352, 16</value>\n  </data>\n  <data name=\"&gt;&gt;tbMinorInterval.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbMajorInterval.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>65, 20</value>\n  </data>\n  <data name=\"label7.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"label9.Text\" xml:space=\"preserve\">\n    <value>Major Interval</value>\n  </data>\n  <data name=\"label4.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Name\" xml:space=\"preserve\">\n    <value>label4</value>\n  </data>\n  <data name=\"&gt;&gt;bMajorGLColor.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;cbMajorGLStyle.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"chkInterlaced.Text\" xml:space=\"preserve\">\n    <value>Interlaced</value>\n  </data>\n  <data name=\"&gt;&gt;cbMinorGLColor.Name\" xml:space=\"preserve\">\n    <value>cbMinorGLColor</value>\n  </data>\n  <data name=\"label8.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>64, 18</value>\n  </data>\n  <data name=\"&gt;&gt;chkLogScale.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbMajorGLStyle.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 16</value>\n  </data>\n  <data name=\"tbMax.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>65, 20</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Name\" xml:space=\"preserve\">\n    <value>label5</value>\n  </data>\n  <data name=\"&gt;&gt;chkMonth.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;cbMajorTickMarks.Name\" xml:space=\"preserve\">\n    <value>cbMajorTickMarks</value>\n  </data>\n  <data name=\"label5.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"chkMajorGLShow.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 14</value>\n  </data>\n  <data name=\"chkVisible.Text\" xml:space=\"preserve\">\n    <value>Visible</value>\n  </data>\n  <data name=\"&gt;&gt;chkVisible.Name\" xml:space=\"preserve\">\n    <value>chkVisible</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>176, 18</value>\n  </data>\n  <data name=\"chkMinorGLShow.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;chkScalar.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;chkMinorGLShow.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"chkReverse.Text\" xml:space=\"preserve\">\n    <value>Reverse Direction</value>\n  </data>\n  <data name=\"&gt;&gt;cbMinorGLStyle.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"label12.Text\" xml:space=\"preserve\">\n    <value>Minimum Value</value>\n  </data>\n  <data name=\"cbMinorGLStyle.Items2\" xml:space=\"preserve\">\n    <value>Dashed</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkVisible.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>19</value>\n  </data>\n  <data name=\"cbMajorTickMarks.Items2\" xml:space=\"preserve\">\n    <value>Outside</value>\n  </data>\n  <data name=\"label7.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>176, 18</value>\n  </data>\n  <data name=\"groupBox1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;bMaxExpr.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bMajorGLColor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bMinorGLColor.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"bMinExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Name\" xml:space=\"preserve\">\n    <value>label6</value>\n  </data>\n  <data name=\"chkMargin.Text\" xml:space=\"preserve\">\n    <value>Margin</value>\n  </data>\n  <data name=\"&gt;&gt;chkMajorGLShow.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkVisible.ZOrder\" xml:space=\"preserve\">\n    <value>19</value>\n  </data>\n  <data name=\"bMinorIntervalExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"chkLogScale.Text\" xml:space=\"preserve\">\n    <value>Log Scale</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/ChartAxisCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>115, 16</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Основные деления</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>230, 8</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>148, 21</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Дополнительные деления</value>\n  </data>\n  <data name=\"cbMajorTickMarks.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>137, 8</value>\n  </data>\n  <data name=\"cbMinorTickMarks.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>384, 8</value>\n  </data>\n  <data name=\"chkVisible.Text\" xml:space=\"preserve\">\n    <value>Видимые</value>\n  </data>\n  <data name=\"chkMargin.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>266, 224</value>\n  </data>\n  <data name=\"chkMargin.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>92, 24</value>\n  </data>\n  <data name=\"chkMargin.Text\" xml:space=\"preserve\">\n    <value>Отступ</value>\n  </data>\n  <data name=\"chkReverse.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 24</value>\n  </data>\n  <data name=\"chkReverse.Text\" xml:space=\"preserve\">\n    <value>Обратное направление</value>\n  </data>\n  <data name=\"chkInterlaced.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>266, 248</value>\n  </data>\n  <data name=\"chkInterlaced.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>92, 24</value>\n  </data>\n  <data name=\"chkInterlaced.Text\" xml:space=\"preserve\">\n    <value>Переплетать</value>\n  </data>\n  <data name=\"chkScalar.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 24</value>\n  </data>\n  <data name=\"chkScalar.Text\" xml:space=\"preserve\">\n    <value>Скалярные</value>\n  </data>\n  <data name=\"chkLogScale.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>108, 220</value>\n  </data>\n  <data name=\"chkLogScale.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 32</value>\n  </data>\n  <data name=\"chkLogScale.Text\" xml:space=\"preserve\">\n    <value>Логарифмическая шкала</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>448, 48</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Основные линии сетки</value>\n  </data>\n  <data name=\"chkMajorGLShow.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 17</value>\n  </data>\n  <data name=\"chkMajorGLShow.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 24</value>\n  </data>\n  <data name=\"chkMajorGLShow.Text\" xml:space=\"preserve\">\n    <value>Показывать</value>\n  </data>\n  <data name=\"tbMajorGLWidth.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>402, 16</value>\n  </data>\n  <data name=\"bMajorGLColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>329, 14</value>\n  </data>\n  <data name=\"cbMajorGLColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>251, 17</value>\n  </data>\n  <data name=\"cbMajorGLStyle.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>142, 17</value>\n  </data>\n  <data name=\"label7.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>218, 18</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Цвет</value>\n  </data>\n  <data name=\"label6.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>354, 17</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>46, 16</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Ширина</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>101, 20</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 16</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Стиль</value>\n  </data>\n  <data name=\"groupBox2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>448, 48</value>\n  </data>\n  <data name=\"groupBox2.Text\" xml:space=\"preserve\">\n    <value>Дополнительные линии сетки</value>\n  </data>\n  <data name=\"chkMinorGLShow.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 16</value>\n  </data>\n  <data name=\"chkMinorGLShow.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 24</value>\n  </data>\n  <data name=\"chkMinorGLShow.Text\" xml:space=\"preserve\">\n    <value>Показывать</value>\n  </data>\n  <data name=\"tbMinorGLWidth.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>402, 18</value>\n  </data>\n  <data name=\"bMinorGLColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>329, 15</value>\n  </data>\n  <data name=\"cbMinorGLColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>251, 18</value>\n  </data>\n  <data name=\"cbMinorGLStyle.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>142, 18</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>218, 19</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 16</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Цвет</value>\n  </data>\n  <data name=\"label5.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>354, 19</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>46, 16</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>Ширина</value>\n  </data>\n  <data name=\"label8.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>101, 19</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Стиль</value>\n  </data>\n  <data name=\"label9.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>115, 16</value>\n  </data>\n  <data name=\"label9.Text\" xml:space=\"preserve\">\n    <value>Основной интервал</value>\n  </data>\n  <data name=\"tbMajorInterval.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>137, 152</value>\n  </data>\n  <data name=\"tbMinorInterval.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>365, 151</value>\n  </data>\n  <data name=\"label10.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>237, 146</value>\n  </data>\n  <data name=\"label10.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>122, 30</value>\n  </data>\n  <data name=\"label10.Text\" xml:space=\"preserve\">\n    <value>Дополнительный интервал</value>\n  </data>\n  <data name=\"label10.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleRight</value>\n  </data>\n  <data name=\"tbMax.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>365, 181</value>\n  </data>\n  <data name=\"label11.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>237, 176</value>\n  </data>\n  <data name=\"label11.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>122, 30</value>\n  </data>\n  <data name=\"label11.Text\" xml:space=\"preserve\">\n    <value>Максимальное значение</value>\n  </data>\n  <data name=\"label11.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleRight</value>\n  </data>\n  <data name=\"tbMin.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>137, 182</value>\n  </data>\n  <data name=\"label12.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 177</value>\n  </data>\n  <data name=\"label12.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>115, 30</value>\n  </data>\n  <data name=\"label12.Text\" xml:space=\"preserve\">\n    <value>Минимальное значение</value>\n  </data>\n  <data name=\"label12.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleRight</value>\n  </data>\n  <data name=\"bMinorIntervalExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>435, 154</value>\n  </data>\n  <data name=\"bMajorIntervalExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>208, 154</value>\n  </data>\n  <data name=\"bMinExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>208, 184</value>\n  </data>\n  <data name=\"bMaxExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>436, 184</value>\n  </data>\n  <data name=\"chkCanOmit.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>364, 224</value>\n  </data>\n  <data name=\"chkCanOmit.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>93, 72</value>\n  </data>\n  <data name=\"chkCanOmit.Text\" xml:space=\"preserve\">\n    <value>Можно пропускать значения на усечении</value>\n  </data>\n  <data name=\"chkMonth.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>160, 24</value>\n  </data>\n  <data name=\"chkMonth.Text\" xml:space=\"preserve\">\n    <value>Шкала категории месяца</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>480, 303</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/ChartCtl - Copy.cs",
    "content": "/* ====================================================================\n   Copyright (C) 2004-2008  fyiReporting Software, LLC\n   Copyright (C) 2011  Peter Gill <peter@majorsilence.com>\n\n   This file is part of the fyiReporting RDL project.\n\t\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n\n   For additional information, email info@fyireporting.com or visit\n   the website www.fyiReporting.com.\n*/\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\n\nnamespace fyiReporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for ChartCtl.\n\t/// </summary>\n\tinternal class ChartCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n        private List<XmlNode> _ReportItems;\n\t\tprivate DesignXmlDraw _Draw;\n\t\t//AJM GJL 14082008 Adding more flags\n\t\tbool fChartType, fVector, fSubtype, fPalette, fRenderElement, fPercentWidth;\n\t\tbool fNoRows, fDataSet, fPageBreakStart, fPageBreakEnd;\n\t\tbool fChartData;\n\t\tprivate System.Windows.Forms.Label label1;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\tprivate System.Windows.Forms.Label label3;\n\t\tprivate System.Windows.Forms.Label label4;\n\t\tprivate System.Windows.Forms.ComboBox cbChartType;\n\t\tprivate System.Windows.Forms.ComboBox cbSubType;\n\t\tprivate System.Windows.Forms.ComboBox cbPalette;\n\t\tprivate System.Windows.Forms.ComboBox cbRenderElement;\n\t\tprivate System.Windows.Forms.Label label5;\n\t\tprivate System.Windows.Forms.NumericUpDown tbPercentWidth;\n\t\tprivate System.Windows.Forms.Label label6;\n\t\tprivate System.Windows.Forms.TextBox tbNoRows;\n\t\tprivate System.Windows.Forms.Label label7;\n\t\tprivate System.Windows.Forms.ComboBox cbDataSet;\n\t\tprivate System.Windows.Forms.CheckBox chkPageBreakStart;\n\t\tprivate System.Windows.Forms.CheckBox chkPageBreakEnd;\n        private System.Windows.Forms.ComboBox cbChartData;\n        private ComboBox cbDataLabel;\n        private CheckBox chkDataLabel;\n        private Button bDataLabelExpr;\n\t\tprivate System.Windows.Forms.Label lData1;\n        private ComboBox cbChartData2;\n        private Label lData2;\n        private ComboBox cbChartData3;\n        private Label lData3;\n        private Button bDataExpr;\n        private Button bDataExpr3;\n        private Button bDataExpr2;\n        private ComboBox cbVector;\n        private Button btnVectorExp;\n        private Label label8;\n        private Button button1;\n        private Button button2;\n        private Button button3;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n        internal ChartCtl(DesignXmlDraw dxDraw, List<XmlNode> ris)\n\t\t{\n\t\t\t_ReportItems = ris;\n\t\t\t_Draw = dxDraw;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues();\t\t\t\n\t\t}\n\n\t\tprivate void InitValues()\n\t\t{\n\t\t\tXmlNode node = _ReportItems[0];\n\n            string type = _Draw.GetElementValue(node, \"Type\", \"Column\");\n            this.cbChartType.Text = type;\n            type = type.ToLowerInvariant();\n\n            lData2.Enabled = cbChartData2.Enabled = bDataExpr2.Enabled = (type == \"scatter\" || type == \"bubble\");\n            lData3.Enabled = cbChartData3.Enabled = bDataExpr3.Enabled = (type == \"bubble\");\n\t\t\t//AJM GJL 14082008\n            this.cbVector.Text = _Draw.GetElementValue(node, \"fyi:RenderAsVector\", \"False\");\n\t\t\tthis.cbSubType.Text = _Draw.GetElementValue(node, \"Subtype\", \"Plain\");\n\t\t\tthis.cbPalette.Text = _Draw.GetElementValue(node, \"Palette\", \"Default\");\n\t\t\tthis.cbRenderElement.Text = _Draw.GetElementValue(node, \"ChartElementOutput\", \"Output\");\n\t\t\tthis.tbPercentWidth.Text = _Draw.GetElementValue(node, \"PointWidth\", \"0\");\n\t\t\tthis.tbNoRows.Text = _Draw.GetElementValue(node, \"NoRows\", \"\");\n\t\t\t// Handle the dataset for this dataregion\n\t\t\tobject[] dsNames = _Draw.DataSetNames;\n\t\t\tstring defName=\"\";\n\t\t\tif (dsNames != null && dsNames.Length > 0)\n\t\t\t{\n\t\t\t\tthis.cbDataSet.Items.AddRange(_Draw.DataSetNames);\n\t\t\t\tdefName = (string) dsNames[0];\n\t\t\t}\n\t\t\tcbDataSet.Text = _Draw.GetDataSetNameValue(node);\n\t\t\tif (_Draw.GetReportItemDataRegionContainer(node) != null)\n\t\t\t\tcbDataSet.Enabled = false;\n\t\t\t// page breaks\n\t\t\tthis.chkPageBreakStart.Checked = _Draw.GetElementValue(node, \"PageBreakAtStart\", \"false\").ToLower() == \"true\"? true: false;\n\t\t\tthis.chkPageBreakEnd.Checked = _Draw.GetElementValue(node, \"PageBreakAtEnd\", \"false\").ToLower() == \"true\"? true: false;\n\n\t\t\t// Chart data-- this is a simplification of what is possible (TODO) \n\t\t\tstring cdata=string.Empty;\n            string cdata2 = string.Empty;\n            string cdata3 = string.Empty;\n//        <ChartData>\n//          <ChartSeries>\n//            <DataPoints>\n//              <DataPoint>\n            //<DataValues>\n            //      <DataValue>\n            //        <Value>=Sum(Fields!Sales.Value)</Value>\n            //      </DataValue>\n            //      <DataValue>\n            //        <Value>=Fields!Year.Value</Value>         ----- only scatter and bubble\n            //      </DataValue>\n            //      <DataValue>\n            //        <Value>=Sum(Fields!Sales.Value)</Value>   ----- only bubble\n            //      </DataValue>\n            //    </DataValues>\n//                <DataLabel>\n//                  <Style>\n//                    <Format>c</Format>\n//                  </Style>\n//                </DataLabel>\n//                <Marker />\n//              </DataPoint>\n//            </DataPoints>\n//          </ChartSeries>\n//        </ChartData>\n\n          \n            //Determine if we have a static series or not... We are not allowing this to be changed here. That decision is taken when creating the chart. 05122007GJL\n            XmlNode ss = DesignXmlDraw.FindNextInHierarchy(node, \"SeriesGroupings\", \"SeriesGrouping\", \"StaticSeries\");\n            bool StaticSeries = ss != null;    \n                                  \n            XmlNode dvs = DesignXmlDraw.FindNextInHierarchy(node,\n                \"ChartData\", \"ChartSeries\", \"DataPoints\", \"DataPoint\", \"DataValues\");\n            int iter = 0;\n            XmlNode cnode;\n            foreach (XmlNode dv in dvs.ChildNodes)\n            {\n                if (dv.Name != \"DataValue\")\n                    continue;\n                iter++;\n                cnode = DesignXmlDraw.FindNextInHierarchy(dv, \"Value\");\n                if (cnode == null)\n                    continue;\n                switch (iter)\n                {\n                    case 1:\n                        cdata = cnode.InnerText;\n                        break;\n                    case 2:\n                        cdata2 = cnode.InnerText;\n                        break;\n                    case 3:\n                        cdata3 = cnode.InnerText;\n                        break;\n                    default:\n                        break;\n                }\n            }\n\t\t\tthis.cbChartData.Text = cdata;\n            this.cbChartData2.Text = cdata2;\n            this.cbChartData3.Text = cdata3;\n \n            //If the chart doesn't have a static series then dont show the datalabel values. 05122007GJL\n            if (!StaticSeries) \n            {     \n                //GJL 131107 Added data labels\n                XmlNode labelExprNode = DesignXmlDraw.FindNextInHierarchy(node,\n                    \"ChartData\", \"ChartSeries\", \"DataPoints\", \"DataPoint\", \"DataLabel\", \"Value\");\n                if (labelExprNode != null)\n                    this.cbDataLabel.Text = labelExprNode.InnerText;\n                XmlNode labelVisNode = DesignXmlDraw.FindNextInHierarchy(node,\n                    \"ChartData\", \"ChartSeries\", \"DataPoints\", \"DataPoint\", \"DataLabel\", \"Visible\");\n                if (labelVisNode != null)\n                    this.chkDataLabel.Checked = labelVisNode.InnerText.ToUpper().Equals(\"TRUE\");\n            }\n\n            chkDataLabel.Enabled = bDataLabelExpr.Enabled = cbDataLabel.Enabled = \n                bDataExpr.Enabled = cbChartData.Enabled = !StaticSeries; \n            // Don't allow the datalabel OR datavalues to be changed here if we have a static series GJL\n\n\n\t\t\tfChartType = fSubtype = fPalette = fRenderElement = fPercentWidth =\n\t\t\t\tfNoRows = fDataSet = fPageBreakStart = fPageBreakEnd = fChartData = false;           \n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n            this.label1 = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.label4 = new System.Windows.Forms.Label();\n            this.cbChartType = new System.Windows.Forms.ComboBox();\n            this.cbSubType = new System.Windows.Forms.ComboBox();\n            this.cbPalette = new System.Windows.Forms.ComboBox();\n            this.cbRenderElement = new System.Windows.Forms.ComboBox();\n            this.label5 = new System.Windows.Forms.Label();\n            this.tbPercentWidth = new System.Windows.Forms.NumericUpDown();\n            this.label6 = new System.Windows.Forms.Label();\n            this.tbNoRows = new System.Windows.Forms.TextBox();\n            this.label7 = new System.Windows.Forms.Label();\n            this.cbDataSet = new System.Windows.Forms.ComboBox();\n            this.chkPageBreakStart = new System.Windows.Forms.CheckBox();\n            this.chkPageBreakEnd = new System.Windows.Forms.CheckBox();\n            this.cbChartData = new System.Windows.Forms.ComboBox();\n            this.cbDataLabel = new System.Windows.Forms.ComboBox();\n            this.chkDataLabel = new System.Windows.Forms.CheckBox();\n            this.bDataLabelExpr = new System.Windows.Forms.Button();\n            this.lData1 = new System.Windows.Forms.Label();\n            this.cbChartData2 = new System.Windows.Forms.ComboBox();\n            this.lData2 = new System.Windows.Forms.Label();\n            this.cbChartData3 = new System.Windows.Forms.ComboBox();\n            this.lData3 = new System.Windows.Forms.Label();\n            this.bDataExpr = new System.Windows.Forms.Button();\n            this.bDataExpr3 = new System.Windows.Forms.Button();\n            this.bDataExpr2 = new System.Windows.Forms.Button();\n            this.cbVector = new System.Windows.Forms.ComboBox();\n            this.btnVectorExp = new System.Windows.Forms.Button();\n            this.label8 = new System.Windows.Forms.Label();\n            this.button1 = new System.Windows.Forms.Button();\n            this.button2 = new System.Windows.Forms.Button();\n            this.button3 = new System.Windows.Forms.Button();\n            ((System.ComponentModel.ISupportInitialize)(this.tbPercentWidth)).BeginInit();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.Location = new System.Drawing.Point(16, 12);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(72, 16);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Chart Type\";\n            // \n            // label2\n            // \n            this.label2.Location = new System.Drawing.Point(16, 37);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(72, 16);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Palette\";\n            // \n            // label3\n            // \n            this.label3.Location = new System.Drawing.Point(16, 62);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(128, 16);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Render XML Element\";\n            // \n            // label4\n            // \n            this.label4.Location = new System.Drawing.Point(16, 84);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(340, 19);\n            this.label4.TabIndex = 3;\n            this.label4.Text = \"Percent width for Bars/Columns (>100% will cause overlap of columns)\";\n            // \n            // cbChartType\n            // \n            this.cbChartType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbChartType.Items.AddRange(new object[] {\n            \"Area\",\n            \"Bar\",\n            \"Column\",\n            \"Doughnut\",\n            \"Line\",\n            \"Map\",\n            \"Pie\",\n            \"Bubble\",\n            \"Scatter\"});\n            this.cbChartType.Location = new System.Drawing.Point(126, 9);\n            this.cbChartType.Name = \"cbChartType\";\n            this.cbChartType.Size = new System.Drawing.Size(121, 21);\n            this.cbChartType.TabIndex = 0;\n            this.cbChartType.SelectedIndexChanged += new System.EventHandler(this.cbChartType_SelectedIndexChanged);\n            // \n            // cbSubType\n            // \n            this.cbSubType.Location = new System.Drawing.Point(331, 9);\n            this.cbSubType.Name = \"cbSubType\";\n            this.cbSubType.Size = new System.Drawing.Size(80, 21);\n            this.cbSubType.TabIndex = 1;\n            this.cbSubType.SelectedIndexChanged += new System.EventHandler(this.cbSubType_SelectedIndexChanged);\n            this.cbSubType.TextUpdate += new System.EventHandler(this.cbSubType_SelectedIndexChanged);\n            this.cbSubType.TextChanged += new System.EventHandler(this.cbSubType_SelectedIndexChanged);\n            // \n            // cbPalette\n            // \n            this.cbPalette.Items.AddRange(new object[] {\n            \"Default\",\n            \"EarthTones\",\n            \"Excel\",\n            \"GrayScale\",\n            \"Light\",\n            \"Pastel\",\n            \"SemiTransparent\",\n            \"Patterned\",\n            \"PatternedBlack\"});\n            this.cbPalette.Location = new System.Drawing.Point(126, 34);\n            this.cbPalette.Name = \"cbPalette\";\n            this.cbPalette.Size = new System.Drawing.Size(121, 21);\n            this.cbPalette.TabIndex = 2;\n            this.cbPalette.SelectedIndexChanged += new System.EventHandler(this.cbPalette_SelectedIndexChanged);\n            // \n            // cbRenderElement\n            // \n            this.cbRenderElement.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbRenderElement.Items.AddRange(new object[] {\n            \"Output\",\n            \"NoOutput\"});\n            this.cbRenderElement.Location = new System.Drawing.Point(126, 59);\n            this.cbRenderElement.Name = \"cbRenderElement\";\n            this.cbRenderElement.Size = new System.Drawing.Size(121, 21);\n            this.cbRenderElement.TabIndex = 3;\n            this.cbRenderElement.SelectedIndexChanged += new System.EventHandler(this.cbRenderElement_SelectedIndexChanged);\n            // \n            // label5\n            // \n            this.label5.Location = new System.Drawing.Point(275, 12);\n            this.label5.Name = \"label5\";\n            this.label5.Size = new System.Drawing.Size(53, 23);\n            this.label5.TabIndex = 8;\n            this.label5.Text = \"Sub-type\";\n            // \n            // tbPercentWidth\n            // \n            this.tbPercentWidth.Location = new System.Drawing.Point(363, 80);\n            this.tbPercentWidth.Name = \"tbPercentWidth\";\n            this.tbPercentWidth.Size = new System.Drawing.Size(48, 20);\n            this.tbPercentWidth.TabIndex = 4;\n            this.tbPercentWidth.ValueChanged += new System.EventHandler(this.tbPercentWidth_ValueChanged);\n            // \n            // label6\n            // \n            this.label6.Location = new System.Drawing.Point(16, 106);\n            this.label6.Name = \"label6\";\n            this.label6.Size = new System.Drawing.Size(100, 23);\n            this.label6.TabIndex = 10;\n            this.label6.Text = \"No Rows Message\";\n            // \n            // tbNoRows\n            // \n            this.tbNoRows.Location = new System.Drawing.Point(156, 106);\n            this.tbNoRows.Name = \"tbNoRows\";\n            this.tbNoRows.Size = new System.Drawing.Size(255, 20);\n            this.tbNoRows.TabIndex = 5;\n            this.tbNoRows.TextChanged += new System.EventHandler(this.tbNoRows_TextChanged);\n            // \n            // label7\n            // \n            this.label7.Location = new System.Drawing.Point(16, 135);\n            this.label7.Name = \"label7\";\n            this.label7.Size = new System.Drawing.Size(100, 23);\n            this.label7.TabIndex = 12;\n            this.label7.Text = \"Data Set Name\";\n            // \n            // cbDataSet\n            // \n            this.cbDataSet.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbDataSet.Location = new System.Drawing.Point(156, 133);\n            this.cbDataSet.Name = \"cbDataSet\";\n            this.cbDataSet.Size = new System.Drawing.Size(255, 21);\n            this.cbDataSet.TabIndex = 6;\n            this.cbDataSet.SelectedIndexChanged += new System.EventHandler(this.cbDataSet_SelectedIndexChanged);\n            // \n            // chkPageBreakStart\n            // \n            this.chkPageBreakStart.Location = new System.Drawing.Point(20, 260);\n            this.chkPageBreakStart.Name = \"chkPageBreakStart\";\n            this.chkPageBreakStart.Size = new System.Drawing.Size(136, 24);\n            this.chkPageBreakStart.TabIndex = 13;\n            this.chkPageBreakStart.Text = \"Page Break at Start\";\n            this.chkPageBreakStart.CheckedChanged += new System.EventHandler(this.chkPageBreakStart_CheckedChanged);\n            // \n            // chkPageBreakEnd\n            // \n            this.chkPageBreakEnd.Location = new System.Drawing.Point(280, 260);\n            this.chkPageBreakEnd.Name = \"chkPageBreakEnd\";\n            this.chkPageBreakEnd.Size = new System.Drawing.Size(136, 24);\n            this.chkPageBreakEnd.TabIndex = 14;\n            this.chkPageBreakEnd.Text = \"Page Break at End\";\n            this.chkPageBreakEnd.CheckedChanged += new System.EventHandler(this.chkPageBreakEnd_CheckedChanged);\n            // \n            // cbChartData\n            // \n            this.cbChartData.Location = new System.Drawing.Point(156, 157);\n            this.cbChartData.Name = \"cbChartData\";\n            this.cbChartData.Size = new System.Drawing.Size(255, 21);\n            this.cbChartData.TabIndex = 7;\n            this.cbChartData.TextChanged += new System.EventHandler(this.cbChartData_Changed);\n            // \n            // cbDataLabel\n            // \n            this.cbDataLabel.Enabled = false;\n            this.cbDataLabel.Location = new System.Drawing.Point(156, 237);\n            this.cbDataLabel.Name = \"cbDataLabel\";\n            this.cbDataLabel.Size = new System.Drawing.Size(254, 21);\n            this.cbDataLabel.TabIndex = 17;\n            this.cbDataLabel.TextChanged += new System.EventHandler(this.cbChartData_Changed);\n            // \n            // chkDataLabel\n            // \n            this.chkDataLabel.AutoSize = true;\n            this.chkDataLabel.Location = new System.Drawing.Point(20, 240);\n            this.chkDataLabel.Name = \"chkDataLabel\";\n            this.chkDataLabel.Size = new System.Drawing.Size(75, 17);\n            this.chkDataLabel.TabIndex = 19;\n            this.chkDataLabel.Text = \"DataLabel\";\n            this.chkDataLabel.UseVisualStyleBackColor = true;\n            this.chkDataLabel.CheckedChanged += new System.EventHandler(this.chkDataLabel_CheckedChanged);\n            // \n            // bDataLabelExpr\n            // \n            this.bDataLabelExpr.Enabled = false;\n            this.bDataLabelExpr.Font = new System.Drawing.Font(\"Arial\", 8.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))));\n            this.bDataLabelExpr.Location = new System.Drawing.Point(415, 237);\n            this.bDataLabelExpr.Name = \"bDataLabelExpr\";\n            this.bDataLabelExpr.Size = new System.Drawing.Size(22, 21);\n            this.bDataLabelExpr.TabIndex = 20;\n            this.bDataLabelExpr.Text = \"fx\";\n            this.bDataLabelExpr.UseVisualStyleBackColor = true;\n            this.bDataLabelExpr.Click += new System.EventHandler(this.bDataLabelExpr_Click);\n            // \n            // lData1\n            // \n            this.lData1.Location = new System.Drawing.Point(16, 157);\n            this.lData1.Name = \"lData1\";\n            this.lData1.Size = new System.Drawing.Size(137, 23);\n            this.lData1.TabIndex = 16;\n            this.lData1.Text = \"Chart Data (X Coordinate)\";\n            // \n            // cbChartData2\n            // \n            this.cbChartData2.Location = new System.Drawing.Point(156, 182);\n            this.cbChartData2.Name = \"cbChartData2\";\n            this.cbChartData2.Size = new System.Drawing.Size(255, 21);\n            this.cbChartData2.TabIndex = 9;\n            this.cbChartData2.TextChanged += new System.EventHandler(this.cbChartData_Changed);\n            // \n            // lData2\n            // \n            this.lData2.Location = new System.Drawing.Point(16, 182);\n            this.lData2.Name = \"lData2\";\n            this.lData2.Size = new System.Drawing.Size(100, 23);\n            this.lData2.TabIndex = 18;\n            this.lData2.Text = \"Y Coordinate\";\n            // \n            // cbChartData3\n            // \n            this.cbChartData3.Location = new System.Drawing.Point(156, 207);\n            this.cbChartData3.Name = \"cbChartData3\";\n            this.cbChartData3.Size = new System.Drawing.Size(255, 21);\n            this.cbChartData3.TabIndex = 11;\n            this.cbChartData3.TextChanged += new System.EventHandler(this.cbChartData_Changed);\n            // \n            // lData3\n            // \n            this.lData3.Location = new System.Drawing.Point(16, 207);\n            this.lData3.Name = \"lData3\";\n            this.lData3.Size = new System.Drawing.Size(100, 23);\n            this.lData3.TabIndex = 20;\n            this.lData3.Text = \"Bubble Size\";\n            // \n            // bDataExpr\n            // \n            this.bDataExpr.Font = new System.Drawing.Font(\"Arial\", 8.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.bDataExpr.Location = new System.Drawing.Point(415, 157);\n            this.bDataExpr.Name = \"bDataExpr\";\n            this.bDataExpr.Size = new System.Drawing.Size(22, 21);\n            this.bDataExpr.TabIndex = 8;\n            this.bDataExpr.Tag = \"d1\";\n            this.bDataExpr.Text = \"fx\";\n            this.bDataExpr.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\n            this.bDataExpr.Click += new System.EventHandler(this.bDataExpr_Click);\n            // \n            // bDataExpr3\n            // \n            this.bDataExpr3.Font = new System.Drawing.Font(\"Arial\", 8.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.bDataExpr3.Location = new System.Drawing.Point(415, 207);\n            this.bDataExpr3.Name = \"bDataExpr3\";\n            this.bDataExpr3.Size = new System.Drawing.Size(22, 21);\n            this.bDataExpr3.TabIndex = 12;\n            this.bDataExpr3.Tag = \"d3\";\n            this.bDataExpr3.Text = \"fx\";\n            this.bDataExpr3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\n            this.bDataExpr3.Click += new System.EventHandler(this.bDataExpr_Click);\n            // \n            // bDataExpr2\n            // \n            this.bDataExpr2.Font = new System.Drawing.Font(\"Arial\", 8.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.bDataExpr2.Location = new System.Drawing.Point(415, 182);\n            this.bDataExpr2.Name = \"bDataExpr2\";\n            this.bDataExpr2.Size = new System.Drawing.Size(22, 21);\n            this.bDataExpr2.TabIndex = 10;\n            this.bDataExpr2.Tag = \"d2\";\n            this.bDataExpr2.Text = \"fx\";\n            this.bDataExpr2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\n            this.bDataExpr2.Click += new System.EventHandler(this.bDataExpr_Click);\n            // \n            // cbVector\n            // \n            this.cbVector.Items.AddRange(new object[] {\n            \"False\",\n            \"True\"});\n            this.cbVector.Location = new System.Drawing.Point(330, 36);\n            this.cbVector.Name = \"cbVector\";\n            this.cbVector.Size = new System.Drawing.Size(80, 21);\n            this.cbVector.TabIndex = 21;\n            this.cbVector.SelectedIndexChanged += new System.EventHandler(this.cbVector_SelectedIndexChanged);\n            // \n            // btnVectorExp\n            // \n            this.btnVectorExp.Font = new System.Drawing.Font(\"Arial\", 8.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.btnVectorExp.Location = new System.Drawing.Point(415, 36);\n            this.btnVectorExp.Name = \"btnVectorExp\";\n            this.btnVectorExp.Size = new System.Drawing.Size(22, 21);\n            this.btnVectorExp.TabIndex = 22;\n            this.btnVectorExp.Tag = \"d4\";\n            this.btnVectorExp.Text = \"fx\";\n            this.btnVectorExp.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\n            this.btnVectorExp.Click += new System.EventHandler(this.bDataExpr_Click);\n            // \n            // label8\n            // \n            this.label8.Location = new System.Drawing.Point(275, 32);\n            this.label8.Name = \"label8\";\n            this.label8.Size = new System.Drawing.Size(53, 27);\n            this.label8.TabIndex = 23;\n            this.label8.Text = \"Render As Vector\";\n            // \n            // button1\n            // \n            this.button1.Font = new System.Drawing.Font(\"Arial\", 8.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.button1.Location = new System.Drawing.Point(415, 9);\n            this.button1.Name = \"button1\";\n            this.button1.Size = new System.Drawing.Size(22, 21);\n            this.button1.TabIndex = 24;\n            this.button1.Tag = \"d7\";\n            this.button1.Text = \"fx\";\n            this.button1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\n            this.button1.Click += new System.EventHandler(this.bDataExpr_Click);\n            // \n            // button2\n            // \n            this.button2.Font = new System.Drawing.Font(\"Arial\", 8.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.button2.Location = new System.Drawing.Point(251, 9);\n            this.button2.Name = \"button2\";\n            this.button2.Size = new System.Drawing.Size(22, 21);\n            this.button2.TabIndex = 25;\n            this.button2.Tag = \"d5\";\n            this.button2.Text = \"fx\";\n            this.button2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\n            this.button2.Visible = false;\n            this.button2.Click += new System.EventHandler(this.bDataExpr_Click);\n            // \n            // button3\n            // \n            this.button3.Font = new System.Drawing.Font(\"Arial\", 8.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.button3.Location = new System.Drawing.Point(251, 32);\n            this.button3.Name = \"button3\";\n            this.button3.Size = new System.Drawing.Size(22, 21);\n            this.button3.TabIndex = 26;\n            this.button3.Tag = \"d6\";\n            this.button3.Text = \"fx\";\n            this.button3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\n            this.button3.Click += new System.EventHandler(this.bDataExpr_Click);\n            // \n            // ChartCtl\n            // \n            this.Controls.Add(this.button3);\n            this.Controls.Add(this.button2);\n            this.Controls.Add(this.button1);\n            this.Controls.Add(this.label8);\n            this.Controls.Add(this.btnVectorExp);\n            this.Controls.Add(this.cbVector);\n            this.Controls.Add(this.bDataExpr2);\n            this.Controls.Add(this.bDataExpr3);\n            this.Controls.Add(this.bDataExpr);\n            this.Controls.Add(this.cbChartData3);\n            this.Controls.Add(this.lData3);\n            this.Controls.Add(this.cbChartData2);\n            this.Controls.Add(this.lData2);\n            this.Controls.Add(this.bDataLabelExpr);\n            this.Controls.Add(this.chkDataLabel);\n            this.Controls.Add(this.cbDataLabel);\n            this.Controls.Add(this.cbChartData);\n            this.Controls.Add(this.lData1);\n            this.Controls.Add(this.chkPageBreakEnd);\n            this.Controls.Add(this.chkPageBreakStart);\n            this.Controls.Add(this.cbDataSet);\n            this.Controls.Add(this.label7);\n            this.Controls.Add(this.tbNoRows);\n            this.Controls.Add(this.label6);\n            this.Controls.Add(this.tbPercentWidth);\n            this.Controls.Add(this.label5);\n            this.Controls.Add(this.cbRenderElement);\n            this.Controls.Add(this.cbPalette);\n            this.Controls.Add(this.cbSubType);\n            this.Controls.Add(this.cbChartType);\n            this.Controls.Add(this.label4);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.label1);\n            this.Name = \"ChartCtl\";\n            this.Size = new System.Drawing.Size(440, 288);\n            ((System.ComponentModel.ISupportInitialize)(this.tbPercentWidth)).EndInit();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\t\tpublic bool IsValid()\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// take information in control and apply to all the style nodes\n\t\t\t//  Only change information that has been marked as modified;\n\t\t\t//   this way when group is selected it is possible to change just\n\t\t\t//   the items you want and keep the rest the same.\n\t\t\t\t\n\t\t\tforeach (XmlNode riNode in this._ReportItems)\n\t\t\t\tApplyChanges(riNode);\n\n\t\t\t// No more changes\n\t\t\t//AJM GJL 14082008\n\t\t\tfChartType = fVector = fSubtype = fPalette = fRenderElement = fPercentWidth =\n\t\t\t\tfNoRows = fDataSet = fPageBreakStart = fPageBreakEnd = fChartData = false;\n\t\t}\n\n\t\tpublic void ApplyChanges(XmlNode node)\n\t\t{\n\t\t\tif (fChartType)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"Type\", this.cbChartType.Text);\n\t\t\t}\n            if (fVector) //AJM GJL 14082008\n            {\n                _Draw.SetElement(node, \"fyi:RenderAsVector\", this.cbVector.Text);\n            }\n\t\t\tif (fSubtype)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"Subtype\", this.cbSubType.Text);\n\t\t\t}\n\t\t\tif (fPalette)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"Palette\", this.cbPalette.Text);\n\t\t\t}\n\t\t\tif (fRenderElement)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"ChartElementOutput\", this.cbRenderElement.Text);\n\t\t\t}\n\t\t\tif (fPercentWidth)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"PointWidth\", this.tbPercentWidth.Text);\n\t\t\t}\n\t\t\tif (fNoRows)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"NoRows\", this.tbNoRows.Text);\n\t\t\t}\n\t\t\tif (fDataSet)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"DataSetName\", this.cbDataSet.Text);\n\t\t\t}\n\t\t\tif (fPageBreakStart)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"PageBreakAtStart\", this.chkPageBreakStart.Checked? \"true\": \"false\");\n\t\t\t}\n\t\t\tif (fPageBreakEnd)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"PageBreakAtEnd\", this.chkPageBreakEnd.Checked? \"true\": \"false\");\n\t\t\t}\n\t\t\tif (fChartData)\n\t\t\t{\n\t\t\t\t//        <ChartData>\n\t\t\t\t//          <ChartSeries>\n\t\t\t\t//            <DataPoints>\n\t\t\t\t//              <DataPoint>\n\t\t\t\t//                <DataValues>\n\t\t\t\t//                  <DataValue>\n\t\t\t\t//                    <Value>=Sum(Fields!Sales.Value)</Value>\n\t\t\t\t//                  </DataValue>   --- you can have up to 3 DataValue elements\n\t\t\t\t//                </DataValues>\n\t\t\t\t//                <DataLabel>\n\t\t\t\t//                  <Style>\n\t\t\t\t//                    <Format>c</Format>\n\t\t\t\t//                  </Style>\n\t\t\t\t//                </DataLabel>\n\t\t\t\t//                <Marker />\n\t\t\t\t//              </DataPoint>\n\t\t\t\t//            </DataPoints>\n\t\t\t\t//          </ChartSeries>\n\t\t\t\t//        </ChartData>\n\t\t\t\tXmlNode chartdata = _Draw.SetElement(node, \"ChartData\", null);\n\t\t\t\tXmlNode chartseries = _Draw.SetElement(chartdata, \"ChartSeries\", null);\n\t\t\t\tXmlNode datapoints = _Draw.SetElement(chartseries, \"DataPoints\", null);\n\t\t\t\tXmlNode datapoint = _Draw.SetElement(datapoints, \"DataPoint\", null);\n\t\t\t\tXmlNode datavalues = _Draw.SetElement(datapoint, \"DataValues\", null);\n                _Draw.RemoveElementAll(datavalues, \"DataValue\");\n                XmlNode datalabel = _Draw.SetElement(datapoint, \"DataLabel\", null);\n\t\t\t\tXmlNode datavalue = _Draw.SetElement(datavalues, \"DataValue\", null);\n\t\t\t\t_Draw.SetElement(datavalue, \"Value\", this.cbChartData.Text);\n\n                string type = cbChartType.Text.ToLowerInvariant();\n                if (type == \"scatter\" || type == \"bubble\")\n                {\n                    datavalue = _Draw.CreateElement(datavalues, \"DataValue\", null);\n                    _Draw.SetElement(datavalue, \"Value\", this.cbChartData2.Text);\n                    if (type == \"bubble\")\n                    {\n                        datavalue = _Draw.CreateElement(datavalues, \"DataValue\", null);\n                        _Draw.SetElement(datavalue, \"Value\", this.cbChartData3.Text);\n                    }\n                }\n                _Draw.SetElement(datalabel, \"Value\", this.cbDataLabel.Text);\n                _Draw.SetElement(datalabel, \"Visible\", this.chkDataLabel.Checked.ToString());\n\t\t\t}\n\t\t}\n\n\t\tprivate void cbChartType_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfChartType = true;\n\t\t\t// Change the potential sub-types\n\t\t\tstring savesub = cbSubType.Text;\n\t\t\tstring[] subItems = new string [] {\"Plain\"};\n            bool bEnableY = false;\n            bool bEnableBubble = false;\n\t\t\tswitch (cbChartType.Text)\n\t\t\t{\n\t\t\t\tcase \"Column\":\n\t\t\t\t\tsubItems = new string [] {\"Plain\", \"Stacked\", \"PercentStacked\"};\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Bar\":\n\t\t\t\t\tsubItems = new string [] {\"Plain\", \"Stacked\", \"PercentStacked\"};\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Line\":\n\t\t\t\t\tsubItems = new string [] {\"Plain\", \"Smooth\"};\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Pie\":\n\t\t\t\t\tsubItems = new string [] {\"Plain\", \"Exploded\"};\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Area\":\n\t\t\t\t\tsubItems = new string [] {\"Plain\", \"Stacked\"};\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Doughnut\":\n\t\t\t\t\tbreak;\n                case \"Map\":\n                    subItems = RdlDesigner.MapSubtypes;\n                    break;\n\t\t\t\tcase \"Scatter\":\n\t\t\t\t\tsubItems = new string [] {\"Plain\", \"Line\", \"SmoothLine\"};\n                    bEnableY = true;\n                    break;\n\t\t\t\tcase \"Stock\":\n                    break;\n\t\t\t\tcase \"Bubble\":\n                    bEnableY = bEnableBubble = true;\n                    break;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcbSubType.Items.Clear();\n\t\t\tcbSubType.Items.AddRange(subItems);\n\n            lData2.Enabled = cbChartData2.Enabled = bDataExpr2.Enabled = bEnableY;\n            lData3.Enabled = cbChartData3.Enabled = bDataExpr3.Enabled = bEnableBubble;\n            \n            int i=0;\n\t\t\tforeach (string s in subItems)\n\t\t\t{\n\t\t\t\tif (s == savesub)\n\t\t\t\t{\n\t\t\t\t\tcbSubType.SelectedIndex = i;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\t\t\t// Didn't match old style\n\t\t\tcbSubType.SelectedIndex = 0;\n\t\t}\n\n\t\t//AJM GJL 14082008\n        private void cbVector_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            fVector = true;\n        }\n\n\t\tprivate void cbSubType_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfSubtype = true;\n\t\t}\n\n\t\tprivate void cbPalette_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPalette = true;\n\t\t}\n\n\t\tprivate void cbRenderElement_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfRenderElement = true;\n\t\t}\n\n\t\tprivate void tbPercentWidth_ValueChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPercentWidth = true;\n\t\t}\n\n\t\tprivate void tbNoRows_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfNoRows = true;\n\t\t}\n\n\t\tprivate void cbDataSet_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfDataSet = true;\n\t\t}\n\n\t\tprivate void chkPageBreakStart_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPageBreakStart = true;\n\t\t}\n\n\t\tprivate void chkPageBreakEnd_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPageBreakEnd = true;\n\t\t}\n\n\t\tprivate void cbChartData_Changed(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfChartData = true;\t\t\n\t\t}\n        private void bDataExpr_Click(object sender, System.EventArgs e)\n        {\n            Button bs = sender as Button;\n            if (bs == null)\n                return;\n            Control ctl = null; \n            switch (bs.Tag as string)\n            {\n                case \"d1\":\n                    ctl = cbChartData;\n                    break;\n                case \"d2\":\n                    ctl = cbChartData2;\n                    break;\n                case \"d3\":\n                    ctl = cbChartData3;\n                    break;\n\t\t\t\t//AJM GJL 14082008\n                case \"d4\":\n                    ctl = cbVector;\n                    fVector = true;\n                    break;\n                case \"d5\":\n                    ctl = cbChartType;\n                    fChartType = true;\n                    break;\n                case \"d6\":\n                    ctl = cbPalette;\n                    fPalette = true;\n                    break;\n                case \"d7\":\n                    ctl = cbSubType;\n                    fSubtype = true;\n                    break;\n                default:\n                    return;\n            }\n            DialogExprEditor ee = new DialogExprEditor(_Draw, ctl.Text, _ReportItems[0], false);\n            try\n            {\n                DialogResult dlgr = ee.ShowDialog();\n                if (dlgr == DialogResult.OK)\n                {\n                    ctl.Text = ee.Expression;\n                    fChartData = true;\n                }\n            }\n            finally\n            {\n                ee.Dispose();\n            }\n        }\n\n        private void chkDataLabel_CheckedChanged(object sender, EventArgs e)\n        {\n            cbDataLabel.Enabled = bDataLabelExpr.Enabled = chkDataLabel.Checked; \n        }\n\n        private void bDataLabelExpr_Click(object sender, EventArgs e)\n        {\n            DialogExprEditor ee = new DialogExprEditor(_Draw, cbDataLabel.Text,_ReportItems[0] , false);\n            try\n            {\n                if (ee.ShowDialog() == DialogResult.OK)\n                {                 \n                    cbDataLabel.Text = ee.Expression;\n                }\n\n            }\n            finally\n            {\n                ee.Dispose();\n            }\n            return;\n        }\n\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/ChartCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for ChartCtl.\n\t/// </summary>\n\tinternal class ChartCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n        private List<XmlNode> _ReportItems;\n\t\tprivate DesignXmlDraw _Draw;\n\t\t//AJM GJL 14082008 Adding more flags\n        bool fChartType, fVector, fSubtype, fPalette, fRenderElement, fPercentWidth, ftooltip,ftooltipX;\n        bool fNoRows, fDataSet, fPageBreakStart, fPageBreakEnd, tooltipYFormat, tooltipXFormat;\n\t\tbool fChartData;\n        \n\t\tprivate System.Windows.Forms.Label label1;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\tprivate System.Windows.Forms.Label label3;\n\t\tprivate System.Windows.Forms.Label label4;\n\t\tprivate System.Windows.Forms.ComboBox cbChartType;\n\t\tprivate System.Windows.Forms.ComboBox cbSubType;\n\t\tprivate System.Windows.Forms.ComboBox cbPalette;\n\t\tprivate System.Windows.Forms.ComboBox cbRenderElement;\n\t\tprivate System.Windows.Forms.Label label5;\n\t\tprivate System.Windows.Forms.NumericUpDown tbPercentWidth;\n\t\tprivate System.Windows.Forms.Label label6;\n\t\tprivate System.Windows.Forms.TextBox tbNoRows;\n\t\tprivate System.Windows.Forms.Label label7;\n\t\tprivate System.Windows.Forms.ComboBox cbDataSet;\n\t\tprivate System.Windows.Forms.CheckBox chkPageBreakStart;\n\t\tprivate System.Windows.Forms.CheckBox chkPageBreakEnd;\n        private System.Windows.Forms.ComboBox cbChartData;\n        private ComboBox cbDataLabel;\n        private CheckBox chkDataLabel;\n        private Button bDataLabelExpr;\n\t\tprivate System.Windows.Forms.Label lData1;\n        private ComboBox cbChartData2;\n        private Label lData2;\n        private ComboBox cbChartData3;\n        private Label lData3;\n        private Button bDataExpr;\n        private Button bDataExpr3;\n        private Button bDataExpr2;\n        private ComboBox cbVector;\n        private Button btnVectorExp;\n        private Label label8;\n        private Button button1;\n        private Button button2;\n        private Button button3;\n        private CheckBox chkToolTip;\n        private CheckBox checkBox1;\n        private TextBox txtYToolFormat;\n        private TextBox txtXToolFormat;\n        private Label label9;\n        private Label label10;\n\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n        internal ChartCtl(DesignXmlDraw dxDraw, List<XmlNode> ris)\n\t\t{\n\t\t\t_ReportItems = ris;\n\t\t\t_Draw = dxDraw;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues();\t\t\t\n\t\t}\n\n\t\tprivate void InitValues()\n\t\t{\n\t\t\tXmlNode node = _ReportItems[0];\n\n            string type = _Draw.GetElementValue(node, \"Type\", \"Column\");\n            this.cbChartType.Text = type;\n            type = type.ToLowerInvariant();\n\n            lData2.Enabled = cbChartData2.Enabled = bDataExpr2.Enabled = (type == \"scatter\" || type == \"bubble\");\n            lData3.Enabled = cbChartData3.Enabled = bDataExpr3.Enabled = (type == \"bubble\");\n\t\t\t//AJM GJL 14082008\n\n            this.chkToolTip.Checked = _Draw.GetElementValue(node, \"fyi:Tooltip\", \"false\").ToLower() == \"true\" ? true : false;\n            this.checkBox1.Checked = _Draw.GetElementValue(node, \"fyi:TooltipX\", \"false\").ToLower() == \"true\" ? true : false;\n\n            this.txtXToolFormat.Text = _Draw.GetElementValue(node, \"fyi:TooltipXFormat\",\"\");\n            this.txtYToolFormat.Text = _Draw.GetElementValue(node, \"fyi:TooltipYFormat\",\"\");\n\n            this.cbVector.Text = _Draw.GetElementValue(node, \"fyi:RenderAsVector\", \"False\");\n\t\t\tthis.cbSubType.Text = _Draw.GetElementValue(node, \"Subtype\", \"Plain\");\n\t\t\tthis.cbPalette.Text = _Draw.GetElementValue(node, \"Palette\", \"Default\");\n\t\t\tthis.cbRenderElement.Text = _Draw.GetElementValue(node, \"ChartElementOutput\", \"Output\");\n\t\t\tthis.tbPercentWidth.Text = _Draw.GetElementValue(node, \"PointWidth\", \"0\");\n\t\t\tthis.tbNoRows.Text = _Draw.GetElementValue(node, \"NoRows\", \"\");\n\n\t\t\t// Handle the dataset for this dataregion\n\t\t\tobject[] dsNames = _Draw.DataSetNames;\n\t\t\tstring defName=\"\";\n\t\t\tif (dsNames != null && dsNames.Length > 0)\n\t\t\t{\n\t\t\t\tthis.cbDataSet.Items.AddRange(_Draw.DataSetNames);\n\t\t\t\tdefName = (string) dsNames[0];\n\t\t\t}\n\t\t\tcbDataSet.Text = _Draw.GetDataSetNameValue(node);\n\t\t\tif (_Draw.GetReportItemDataRegionContainer(node) != null)\n\t\t\t\tcbDataSet.Enabled = false;\n\t\t\t// page breaks\n\t\t\tthis.chkPageBreakStart.Checked = _Draw.GetElementValue(node, \"PageBreakAtStart\", \"false\").ToLower() == \"true\"? true: false;\n\t\t\tthis.chkPageBreakEnd.Checked = _Draw.GetElementValue(node, \"PageBreakAtEnd\", \"false\").ToLower() == \"true\"? true: false;\n\n\t\t\t// Chart data-- this is a simplification of what is possible (TODO) \n\t\t\tstring cdata=string.Empty;\n            string cdata2 = string.Empty;\n            string cdata3 = string.Empty;\n//        <ChartData>\n//          <ChartSeries>\n//            <DataPoints>\n//              <DataPoint>\n            //<DataValues>\n            //      <DataValue>\n            //        <Value>=Sum(Fields!Sales.Value)</Value>\n            //      </DataValue>\n            //      <DataValue>\n            //        <Value>=Fields!Year.Value</Value>         ----- only scatter and bubble\n            //      </DataValue>\n            //      <DataValue>\n            //        <Value>=Sum(Fields!Sales.Value)</Value>   ----- only bubble\n            //      </DataValue>\n            //    </DataValues>\n//                <DataLabel>\n//                  <Style>\n//                    <Format>c</Format>\n//                  </Style>\n//                </DataLabel>\n//                <Marker />\n//              </DataPoint>\n//            </DataPoints>\n//          </ChartSeries>\n//        </ChartData>\n\n          \n            //Determine if we have a static series or not... We are not allowing this to be changed here. That decision is taken when creating the chart. 05122007GJL\n            XmlNode ss = DesignXmlDraw.FindNextInHierarchy(node, \"SeriesGroupings\", \"SeriesGrouping\", \"StaticSeries\");\n            bool StaticSeries = ss != null;    \n                                  \n            XmlNode dvs = DesignXmlDraw.FindNextInHierarchy(node,\n                \"ChartData\", \"ChartSeries\", \"DataPoints\", \"DataPoint\", \"DataValues\");\n            int iter = 0;\n            XmlNode cnode;\n            foreach (XmlNode dv in dvs.ChildNodes)\n            {\n                if (dv.Name != \"DataValue\")\n                    continue;\n                iter++;\n                cnode = DesignXmlDraw.FindNextInHierarchy(dv, \"Value\");\n                if (cnode == null)\n                    continue;\n                switch (iter)\n                {\n                    case 1:\n                        cdata = cnode.InnerText;\n                        break;\n                    case 2:\n                        cdata2 = cnode.InnerText;\n                        break;\n                    case 3:\n                        cdata3 = cnode.InnerText;\n                        break;\n                    default:\n                        break;\n                }\n            }\n\t\t\tthis.cbChartData.Text = cdata;\n            this.cbChartData2.Text = cdata2;\n            this.cbChartData3.Text = cdata3;\n \n            //If the chart doesn't have a static series then dont show the datalabel values. 05122007GJL\n            if (!StaticSeries) \n            {     \n                //GJL 131107 Added data labels\n                XmlNode labelExprNode = DesignXmlDraw.FindNextInHierarchy(node,\n                    \"ChartData\", \"ChartSeries\", \"DataPoints\", \"DataPoint\", \"DataLabel\", \"Value\");\n                if (labelExprNode != null)\n                    this.cbDataLabel.Text = labelExprNode.InnerText;\n                XmlNode labelVisNode = DesignXmlDraw.FindNextInHierarchy(node,\n                    \"ChartData\", \"ChartSeries\", \"DataPoints\", \"DataPoint\", \"DataLabel\", \"Visible\");\n                if (labelVisNode != null)\n                    this.chkDataLabel.Checked = labelVisNode.InnerText.ToUpper().Equals(\"TRUE\");\n            }\n\n            chkDataLabel.Enabled = bDataLabelExpr.Enabled = cbDataLabel.Enabled = \n                bDataExpr.Enabled = cbChartData.Enabled = !StaticSeries; \n            // Don't allow the datalabel OR datavalues to be changed here if we have a static series GJL\n\n\n\t\t\tfChartType = fSubtype = fPalette = fRenderElement = fPercentWidth =\n\t\t\t\tfNoRows = fDataSet = fPageBreakStart = fPageBreakEnd = fChartData = false;           \n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ChartCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.label4 = new System.Windows.Forms.Label();\n\t\t\tthis.cbChartType = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbSubType = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbPalette = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbRenderElement = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label5 = new System.Windows.Forms.Label();\n\t\t\tthis.tbPercentWidth = new System.Windows.Forms.NumericUpDown();\n\t\t\tthis.label6 = new System.Windows.Forms.Label();\n\t\t\tthis.tbNoRows = new System.Windows.Forms.TextBox();\n\t\t\tthis.label7 = new System.Windows.Forms.Label();\n\t\t\tthis.cbDataSet = new System.Windows.Forms.ComboBox();\n\t\t\tthis.chkPageBreakStart = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkPageBreakEnd = new System.Windows.Forms.CheckBox();\n\t\t\tthis.cbChartData = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbDataLabel = new System.Windows.Forms.ComboBox();\n\t\t\tthis.chkDataLabel = new System.Windows.Forms.CheckBox();\n\t\t\tthis.bDataLabelExpr = new System.Windows.Forms.Button();\n\t\t\tthis.lData1 = new System.Windows.Forms.Label();\n\t\t\tthis.cbChartData2 = new System.Windows.Forms.ComboBox();\n\t\t\tthis.lData2 = new System.Windows.Forms.Label();\n\t\t\tthis.cbChartData3 = new System.Windows.Forms.ComboBox();\n\t\t\tthis.lData3 = new System.Windows.Forms.Label();\n\t\t\tthis.bDataExpr = new System.Windows.Forms.Button();\n\t\t\tthis.bDataExpr3 = new System.Windows.Forms.Button();\n\t\t\tthis.bDataExpr2 = new System.Windows.Forms.Button();\n\t\t\tthis.cbVector = new System.Windows.Forms.ComboBox();\n\t\t\tthis.btnVectorExp = new System.Windows.Forms.Button();\n\t\t\tthis.label8 = new System.Windows.Forms.Label();\n\t\t\tthis.button1 = new System.Windows.Forms.Button();\n\t\t\tthis.button2 = new System.Windows.Forms.Button();\n\t\t\tthis.button3 = new System.Windows.Forms.Button();\n\t\t\tthis.chkToolTip = new System.Windows.Forms.CheckBox();\n\t\t\tthis.checkBox1 = new System.Windows.Forms.CheckBox();\n\t\t\tthis.txtYToolFormat = new System.Windows.Forms.TextBox();\n\t\t\tthis.txtXToolFormat = new System.Windows.Forms.TextBox();\n\t\t\tthis.label9 = new System.Windows.Forms.Label();\n\t\t\tthis.label10 = new System.Windows.Forms.Label();\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.tbPercentWidth)).BeginInit();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// label4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label4, \"label4\");\n\t\t\tthis.label4.Name = \"label4\";\n\t\t\t// \n\t\t\t// cbChartType\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbChartType, \"cbChartType\");\n\t\t\tthis.cbChartType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbChartType.Items.AddRange(new object[] {\n            resources.GetString(\"cbChartType.Items\"),\n            resources.GetString(\"cbChartType.Items1\"),\n            resources.GetString(\"cbChartType.Items2\"),\n            resources.GetString(\"cbChartType.Items3\"),\n            resources.GetString(\"cbChartType.Items4\"),\n            resources.GetString(\"cbChartType.Items5\"),\n            resources.GetString(\"cbChartType.Items6\"),\n            resources.GetString(\"cbChartType.Items7\"),\n            resources.GetString(\"cbChartType.Items8\")});\n\t\t\tthis.cbChartType.Name = \"cbChartType\";\n\t\t\tthis.cbChartType.SelectedIndexChanged += new System.EventHandler(this.cbChartType_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// cbSubType\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbSubType, \"cbSubType\");\n\t\t\tthis.cbSubType.Name = \"cbSubType\";\n\t\t\tthis.cbSubType.SelectedIndexChanged += new System.EventHandler(this.cbSubType_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// cbPalette\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbPalette, \"cbPalette\");\n\t\t\tthis.cbPalette.Items.AddRange(new object[] {\n            resources.GetString(\"cbPalette.Items\"),\n            resources.GetString(\"cbPalette.Items1\"),\n            resources.GetString(\"cbPalette.Items2\"),\n            resources.GetString(\"cbPalette.Items3\"),\n            resources.GetString(\"cbPalette.Items4\"),\n            resources.GetString(\"cbPalette.Items5\"),\n            resources.GetString(\"cbPalette.Items6\"),\n            resources.GetString(\"cbPalette.Items7\"),\n            resources.GetString(\"cbPalette.Items8\"),\n            resources.GetString(\"cbPalette.Items9\")});\n\t\t\tthis.cbPalette.Name = \"cbPalette\";\n\t\t\tthis.cbPalette.SelectedIndexChanged += new System.EventHandler(this.cbPalette_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// cbRenderElement\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbRenderElement, \"cbRenderElement\");\n\t\t\tthis.cbRenderElement.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbRenderElement.Items.AddRange(new object[] {\n            resources.GetString(\"cbRenderElement.Items\"),\n            resources.GetString(\"cbRenderElement.Items1\")});\n\t\t\tthis.cbRenderElement.Name = \"cbRenderElement\";\n\t\t\tthis.cbRenderElement.SelectedIndexChanged += new System.EventHandler(this.cbRenderElement_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// label5\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label5, \"label5\");\n\t\t\tthis.label5.Name = \"label5\";\n\t\t\t// \n\t\t\t// tbPercentWidth\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbPercentWidth, \"tbPercentWidth\");\n\t\t\tthis.tbPercentWidth.Name = \"tbPercentWidth\";\n\t\t\tthis.tbPercentWidth.ValueChanged += new System.EventHandler(this.tbPercentWidth_ValueChanged);\n\t\t\t// \n\t\t\t// label6\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label6, \"label6\");\n\t\t\tthis.label6.Name = \"label6\";\n\t\t\t// \n\t\t\t// tbNoRows\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbNoRows, \"tbNoRows\");\n\t\t\tthis.tbNoRows.Name = \"tbNoRows\";\n\t\t\tthis.tbNoRows.TextChanged += new System.EventHandler(this.tbNoRows_TextChanged);\n\t\t\t// \n\t\t\t// label7\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label7, \"label7\");\n\t\t\tthis.label7.Name = \"label7\";\n\t\t\t// \n\t\t\t// cbDataSet\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbDataSet, \"cbDataSet\");\n\t\t\tthis.cbDataSet.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbDataSet.Name = \"cbDataSet\";\n\t\t\tthis.cbDataSet.SelectedIndexChanged += new System.EventHandler(this.cbDataSet_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// chkPageBreakStart\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkPageBreakStart, \"chkPageBreakStart\");\n\t\t\tthis.chkPageBreakStart.Name = \"chkPageBreakStart\";\n\t\t\tthis.chkPageBreakStart.CheckedChanged += new System.EventHandler(this.chkPageBreakStart_CheckedChanged);\n\t\t\t// \n\t\t\t// chkPageBreakEnd\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkPageBreakEnd, \"chkPageBreakEnd\");\n\t\t\tthis.chkPageBreakEnd.Name = \"chkPageBreakEnd\";\n\t\t\tthis.chkPageBreakEnd.CheckedChanged += new System.EventHandler(this.chkPageBreakEnd_CheckedChanged);\n\t\t\t// \n\t\t\t// cbChartData\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbChartData, \"cbChartData\");\n\t\t\tthis.cbChartData.Name = \"cbChartData\";\n\t\t\tthis.cbChartData.TextChanged += new System.EventHandler(this.cbChartData_Changed);\n\t\t\t// \n\t\t\t// cbDataLabel\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbDataLabel, \"cbDataLabel\");\n\t\t\tthis.cbDataLabel.Name = \"cbDataLabel\";\n\t\t\tthis.cbDataLabel.TextChanged += new System.EventHandler(this.cbChartData_Changed);\n\t\t\t// \n\t\t\t// chkDataLabel\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkDataLabel, \"chkDataLabel\");\n\t\t\tthis.chkDataLabel.Name = \"chkDataLabel\";\n\t\t\tthis.chkDataLabel.UseVisualStyleBackColor = true;\n\t\t\tthis.chkDataLabel.CheckedChanged += new System.EventHandler(this.chkDataLabel_CheckedChanged);\n\t\t\t// \n\t\t\t// bDataLabelExpr\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bDataLabelExpr, \"bDataLabelExpr\");\n\t\t\tthis.bDataLabelExpr.Name = \"bDataLabelExpr\";\n\t\t\tthis.bDataLabelExpr.UseVisualStyleBackColor = true;\n\t\t\tthis.bDataLabelExpr.Click += new System.EventHandler(this.bDataLabelExpr_Click);\n\t\t\t// \n\t\t\t// lData1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lData1, \"lData1\");\n\t\t\tthis.lData1.Name = \"lData1\";\n\t\t\t// \n\t\t\t// cbChartData2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbChartData2, \"cbChartData2\");\n\t\t\tthis.cbChartData2.Name = \"cbChartData2\";\n\t\t\tthis.cbChartData2.TextChanged += new System.EventHandler(this.cbChartData_Changed);\n\t\t\t// \n\t\t\t// lData2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lData2, \"lData2\");\n\t\t\tthis.lData2.Name = \"lData2\";\n\t\t\t// \n\t\t\t// cbChartData3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbChartData3, \"cbChartData3\");\n\t\t\tthis.cbChartData3.Name = \"cbChartData3\";\n\t\t\tthis.cbChartData3.TextChanged += new System.EventHandler(this.cbChartData_Changed);\n\t\t\t// \n\t\t\t// lData3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lData3, \"lData3\");\n\t\t\tthis.lData3.Name = \"lData3\";\n\t\t\t// \n\t\t\t// bDataExpr\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bDataExpr, \"bDataExpr\");\n\t\t\tthis.bDataExpr.Name = \"bDataExpr\";\n\t\t\tthis.bDataExpr.Tag = \"d1\";\n\t\t\tthis.bDataExpr.Click += new System.EventHandler(this.bDataExpr_Click);\n\t\t\t// \n\t\t\t// bDataExpr3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bDataExpr3, \"bDataExpr3\");\n\t\t\tthis.bDataExpr3.Name = \"bDataExpr3\";\n\t\t\tthis.bDataExpr3.Tag = \"d3\";\n\t\t\tthis.bDataExpr3.Click += new System.EventHandler(this.bDataExpr_Click);\n\t\t\t// \n\t\t\t// bDataExpr2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bDataExpr2, \"bDataExpr2\");\n\t\t\tthis.bDataExpr2.Name = \"bDataExpr2\";\n\t\t\tthis.bDataExpr2.Tag = \"d2\";\n\t\t\tthis.bDataExpr2.Click += new System.EventHandler(this.bDataExpr_Click);\n\t\t\t// \n\t\t\t// cbVector\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbVector, \"cbVector\");\n\t\t\tthis.cbVector.Items.AddRange(new object[] {\n            resources.GetString(\"cbVector.Items\"),\n            resources.GetString(\"cbVector.Items1\")});\n\t\t\tthis.cbVector.Name = \"cbVector\";\n\t\t\tthis.cbVector.SelectedIndexChanged += new System.EventHandler(this.cbVector_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// btnVectorExp\n\t\t\t// \n\t\t\tresources.ApplyResources(this.btnVectorExp, \"btnVectorExp\");\n\t\t\tthis.btnVectorExp.Name = \"btnVectorExp\";\n\t\t\tthis.btnVectorExp.Tag = \"d4\";\n\t\t\tthis.btnVectorExp.Click += new System.EventHandler(this.bDataExpr_Click);\n\t\t\t// \n\t\t\t// label8\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label8, \"label8\");\n\t\t\tthis.label8.Name = \"label8\";\n\t\t\t// \n\t\t\t// button1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.button1, \"button1\");\n\t\t\tthis.button1.Name = \"button1\";\n\t\t\tthis.button1.Tag = \"d7\";\n\t\t\tthis.button1.Click += new System.EventHandler(this.bDataExpr_Click);\n\t\t\t// \n\t\t\t// button2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.button2, \"button2\");\n\t\t\tthis.button2.Name = \"button2\";\n\t\t\tthis.button2.Tag = \"d5\";\n\t\t\tthis.button2.Click += new System.EventHandler(this.bDataExpr_Click);\n\t\t\t// \n\t\t\t// button3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.button3, \"button3\");\n\t\t\tthis.button3.Name = \"button3\";\n\t\t\tthis.button3.Tag = \"d6\";\n\t\t\tthis.button3.Click += new System.EventHandler(this.bDataExpr_Click);\n\t\t\t// \n\t\t\t// chkToolTip\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkToolTip, \"chkToolTip\");\n\t\t\tthis.chkToolTip.Name = \"chkToolTip\";\n\t\t\tthis.chkToolTip.UseVisualStyleBackColor = true;\n\t\t\tthis.chkToolTip.CheckedChanged += new System.EventHandler(this.chkToolTip_CheckedChanged);\n\t\t\t// \n\t\t\t// checkBox1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.checkBox1, \"checkBox1\");\n\t\t\tthis.checkBox1.Name = \"checkBox1\";\n\t\t\tthis.checkBox1.UseVisualStyleBackColor = true;\n\t\t\tthis.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);\n\t\t\t// \n\t\t\t// txtYToolFormat\n\t\t\t// \n\t\t\tresources.ApplyResources(this.txtYToolFormat, \"txtYToolFormat\");\n\t\t\tthis.txtYToolFormat.Name = \"txtYToolFormat\";\n\t\t\tthis.txtYToolFormat.TextChanged += new System.EventHandler(this.txtYToolFormat_TextChanged);\n\t\t\t// \n\t\t\t// txtXToolFormat\n\t\t\t// \n\t\t\tresources.ApplyResources(this.txtXToolFormat, \"txtXToolFormat\");\n\t\t\tthis.txtXToolFormat.Name = \"txtXToolFormat\";\n\t\t\tthis.txtXToolFormat.TextChanged += new System.EventHandler(this.txtXToolFormat_TextChanged);\n\t\t\t// \n\t\t\t// label9\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label9, \"label9\");\n\t\t\tthis.label9.Name = \"label9\";\n\t\t\t// \n\t\t\t// label10\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label10, \"label10\");\n\t\t\tthis.label10.Name = \"label10\";\n\t\t\t// \n\t\t\t// ChartCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.cbDataLabel);\n\t\t\tthis.Controls.Add(this.chkPageBreakStart);\n\t\t\tthis.Controls.Add(this.chkDataLabel);\n\t\t\tthis.Controls.Add(this.label10);\n\t\t\tthis.Controls.Add(this.label9);\n\t\t\tthis.Controls.Add(this.txtXToolFormat);\n\t\t\tthis.Controls.Add(this.txtYToolFormat);\n\t\t\tthis.Controls.Add(this.checkBox1);\n\t\t\tthis.Controls.Add(this.chkToolTip);\n\t\t\tthis.Controls.Add(this.button3);\n\t\t\tthis.Controls.Add(this.button2);\n\t\t\tthis.Controls.Add(this.button1);\n\t\t\tthis.Controls.Add(this.label8);\n\t\t\tthis.Controls.Add(this.btnVectorExp);\n\t\t\tthis.Controls.Add(this.cbVector);\n\t\t\tthis.Controls.Add(this.bDataExpr2);\n\t\t\tthis.Controls.Add(this.bDataExpr3);\n\t\t\tthis.Controls.Add(this.bDataExpr);\n\t\t\tthis.Controls.Add(this.cbChartData3);\n\t\t\tthis.Controls.Add(this.lData3);\n\t\t\tthis.Controls.Add(this.cbChartData2);\n\t\t\tthis.Controls.Add(this.lData2);\n\t\t\tthis.Controls.Add(this.bDataLabelExpr);\n\t\t\tthis.Controls.Add(this.cbChartData);\n\t\t\tthis.Controls.Add(this.lData1);\n\t\t\tthis.Controls.Add(this.chkPageBreakEnd);\n\t\t\tthis.Controls.Add(this.cbDataSet);\n\t\t\tthis.Controls.Add(this.label7);\n\t\t\tthis.Controls.Add(this.tbNoRows);\n\t\t\tthis.Controls.Add(this.label6);\n\t\t\tthis.Controls.Add(this.tbPercentWidth);\n\t\t\tthis.Controls.Add(this.label5);\n\t\t\tthis.Controls.Add(this.cbRenderElement);\n\t\t\tthis.Controls.Add(this.cbPalette);\n\t\t\tthis.Controls.Add(this.cbSubType);\n\t\t\tthis.Controls.Add(this.cbChartType);\n\t\t\tthis.Controls.Add(this.label4);\n\t\t\tthis.Controls.Add(this.label3);\n\t\t\tthis.Controls.Add(this.label2);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Name = \"ChartCtl\";\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.tbPercentWidth)).EndInit();\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\t\tpublic bool IsValid()\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// take information in control and apply to all the style nodes\n\t\t\t//  Only change information that has been marked as modified;\n\t\t\t//   this way when group is selected it is possible to change just\n\t\t\t//   the items you want and keep the rest the same.\n\t\t\t\t\n\t\t\tforeach (XmlNode riNode in this._ReportItems)\n\t\t\t\tApplyChanges(riNode);\n\n\t\t\t// No more changes\n\t\t\t//AJM GJL 14082008\n\t\t\tfChartType = fVector = fSubtype = fPalette = fRenderElement = fPercentWidth =\n                fNoRows = fDataSet = fPageBreakStart = fPageBreakEnd = fChartData = ftooltip = ftooltipX = ftooltip = ftooltipX = false;\n\t\t}\n\n\t\tpublic void ApplyChanges(XmlNode node)\n\t\t{\n\t\t\tif (fChartType)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"Type\", this.cbChartType.Text);\n\t\t\t}\n            if (ftooltip)//now controls the displaying of Y value\n            {\n                _Draw.SetElement(node, \"fyi:Tooltip\", this.chkToolTip.Checked.ToString());\n            }\n            if (ftooltipX)// controls the displaying of X value\n            {\n                _Draw.SetElement(node, \"fyi:TooltipX\", this.chkToolTip.Checked.ToString());\n            }\n            if (tooltipXFormat)\n            {\n                _Draw.SetElement(node, \"fyi:TooltipXFormat\", this.txtXToolFormat.Text);\n            }\n            if (tooltipYFormat)\n            {\n                _Draw.SetElement(node, \"fyi:TooltipYFormat\", this.txtYToolFormat.Text);\n            }\n\n            if (fVector) //AJM GJL 14082008\n            {\n                _Draw.SetElement(node, \"fyi:RenderAsVector\", this.cbVector.Text);\n            }\n\t\t\tif (fSubtype)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"Subtype\", this.cbSubType.Text);\n\t\t\t}\n\t\t\tif (fPalette)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"Palette\", this.cbPalette.Text);\n\t\t\t}\n\t\t\tif (fRenderElement)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"ChartElementOutput\", this.cbRenderElement.Text);\n\t\t\t}\n\t\t\tif (fPercentWidth)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"PointWidth\", this.tbPercentWidth.Text);\n\t\t\t}\n\t\t\tif (fNoRows)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"NoRows\", this.tbNoRows.Text);\n\t\t\t}\n\t\t\tif (fDataSet)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"DataSetName\", this.cbDataSet.Text);\n\t\t\t}\n\t\t\tif (fPageBreakStart)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"PageBreakAtStart\", this.chkPageBreakStart.Checked? \"true\": \"false\");\n\t\t\t}\n\t\t\tif (fPageBreakEnd)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"PageBreakAtEnd\", this.chkPageBreakEnd.Checked? \"true\": \"false\");\n\t\t\t}\n\t\t\tif (fChartData)\n\t\t\t{\n\t\t\t\t//        <ChartData>\n\t\t\t\t//          <ChartSeries>\n\t\t\t\t//            <DataPoints>\n\t\t\t\t//              <DataPoint>\n\t\t\t\t//                <DataValues>\n\t\t\t\t//                  <DataValue>\n\t\t\t\t//                    <Value>=Sum(Fields!Sales.Value)</Value>\n\t\t\t\t//                  </DataValue>   --- you can have up to 3 DataValue elements\n\t\t\t\t//                </DataValues>\n\t\t\t\t//                <DataLabel>\n\t\t\t\t//                  <Style>\n\t\t\t\t//                    <Format>c</Format>\n\t\t\t\t//                  </Style>\n\t\t\t\t//                </DataLabel>\n\t\t\t\t//                <Marker />\n\t\t\t\t//              </DataPoint>\n\t\t\t\t//            </DataPoints>\n\t\t\t\t//          </ChartSeries>\n\t\t\t\t//        </ChartData>\n\t\t\t\tXmlNode chartdata = _Draw.SetElement(node, \"ChartData\", null);\n\t\t\t\tXmlNode chartseries = _Draw.SetElement(chartdata, \"ChartSeries\", null);\n\t\t\t\tXmlNode datapoints = _Draw.SetElement(chartseries, \"DataPoints\", null);\n\t\t\t\tXmlNode datapoint = _Draw.SetElement(datapoints, \"DataPoint\", null);\n\t\t\t\tXmlNode datavalues = _Draw.SetElement(datapoint, \"DataValues\", null);\n                _Draw.RemoveElementAll(datavalues, \"DataValue\");\n                XmlNode datalabel = _Draw.SetElement(datapoint, \"DataLabel\", null);\n\t\t\t\tXmlNode datavalue = _Draw.SetElement(datavalues, \"DataValue\", null);\n\t\t\t\t_Draw.SetElement(datavalue, \"Value\", this.cbChartData.Text);\n\n                string type = cbChartType.Text.ToLowerInvariant();\n                if (type == \"scatter\" || type == \"bubble\")\n                {\n                    datavalue = _Draw.CreateElement(datavalues, \"DataValue\", null);\n                    _Draw.SetElement(datavalue, \"Value\", this.cbChartData2.Text);\n                    if (type == \"bubble\")\n                    {\n                        datavalue = _Draw.CreateElement(datavalues, \"DataValue\", null);\n                        _Draw.SetElement(datavalue, \"Value\", this.cbChartData3.Text);\n                    }\n                }\n                _Draw.SetElement(datalabel, \"Value\", this.cbDataLabel.Text);\n                _Draw.SetElement(datalabel, \"Visible\", this.chkDataLabel.Checked.ToString());\n\t\t\t}\n\t\t}\n\n\t\tprivate void cbChartType_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfChartType = true;\n\t\t\t// Change the potential sub-types\n\t\t\tstring savesub = cbSubType.Text;\n\t\t\tstring[] subItems = new string [] {\"Plain\"};\n            bool bEnableY = false;\n            bool bEnableBubble = false;\n\t\t\tswitch (cbChartType.Text)\n\t\t\t{\n\t\t\t\tcase \"Column\":\n\t\t\t\t\tsubItems = new string [] {\"Plain\", \"Stacked\", \"PercentStacked\"};\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Bar\":\n\t\t\t\t\tsubItems = new string [] {\"Plain\", \"Stacked\", \"PercentStacked\"};\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Line\":\n\t\t\t\t\tsubItems = new string [] {\"Plain\", \"Smooth\"};\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Pie\":\n\t\t\t\t\tsubItems = new string [] {\"Plain\", \"Exploded\"};\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Area\":\n\t\t\t\t\tsubItems = new string [] {\"Plain\", \"Stacked\"};\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Doughnut\":\n\t\t\t\t\tbreak;\n                case \"Map\":\n                    subItems = RdlDesigner.MapSubtypes;\n                    break;\n\t\t\t\tcase \"Scatter\":\n\t\t\t\t\tsubItems = new string [] {\"Plain\", \"Line\", \"SmoothLine\"};\n                    bEnableY = true;\n                    break;\n\t\t\t\tcase \"Stock\":\n                    break;\n\t\t\t\tcase \"Bubble\":\n                    bEnableY = bEnableBubble = true;\n                    break;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcbSubType.Items.Clear();\n\t\t\tcbSubType.Items.AddRange(subItems);\n\n            lData2.Enabled = cbChartData2.Enabled = bDataExpr2.Enabled = bEnableY;\n            lData3.Enabled = cbChartData3.Enabled = bDataExpr3.Enabled = bEnableBubble;\n            \n            int i=0;\n\t\t\tforeach (string s in subItems)\n\t\t\t{\n\t\t\t\tif (s == savesub)\n\t\t\t\t{\n\t\t\t\t\tcbSubType.SelectedIndex = i;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\t\t\t// Didn't match old style\n\t\t\tcbSubType.SelectedIndex = 0;\n\t\t}\n\n\t\t//AJM GJL 14082008\n        private void cbVector_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            fVector = true;\n        }\n\n\t\tprivate void cbSubType_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfSubtype = true;\n\t\t}\n\n\t\tprivate void cbPalette_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPalette = true;\n\t\t}\n\n\t\tprivate void cbRenderElement_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfRenderElement = true;\n\t\t}\n\n\t\tprivate void tbPercentWidth_ValueChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPercentWidth = true;\n\t\t}\n\n\t\tprivate void tbNoRows_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfNoRows = true;\n\t\t}\n\n\t\tprivate void cbDataSet_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfDataSet = true;\n\t\t}\n\n\t\tprivate void chkPageBreakStart_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPageBreakStart = true;\n\t\t}\n\n\t\tprivate void chkPageBreakEnd_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPageBreakEnd = true;\n\t\t}\n\n\t\tprivate void cbChartData_Changed(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfChartData = true;\t\t\n\t\t}\n        private void bDataExpr_Click(object sender, System.EventArgs e)\n        {\n            Button bs = sender as Button;\n            if (bs == null)\n                return;\n            Control ctl = null; \n            switch (bs.Tag as string)\n            {\n                case \"d1\":\n                    ctl = cbChartData;\n                    break;\n                case \"d2\":\n                    ctl = cbChartData2;\n                    break;\n                case \"d3\":\n                    ctl = cbChartData3;\n                    break;\n\t\t\t\t//AJM GJL 14082008\n                case \"d4\":\n                    ctl = cbVector;\n                    fVector = true;\n                    break;\n                case \"d5\":\n                    ctl = cbChartType;\n                    fChartType = true;\n                    break;\n                case \"d6\":\n                    ctl = cbPalette;\n                    fPalette = true;\n                    break;\n                case \"d7\":\n                    ctl = cbSubType;\n                    fSubtype = true;\n                    break;\n                default:\n                    return;\n            }\n            DialogExprEditor ee = new DialogExprEditor(_Draw, ctl.Text, _ReportItems[0], false);\n            try\n            {\n                DialogResult dlgr = ee.ShowDialog();\n                if (dlgr == DialogResult.OK)\n                {\n                    ctl.Text = ee.Expression;\n                    fChartData = true;\n                }\n            }\n            finally\n            {\n                ee.Dispose();\n            }\n        }\n\n        private void chkDataLabel_CheckedChanged(object sender, EventArgs e)\n        {\n            cbDataLabel.Enabled = bDataLabelExpr.Enabled = chkDataLabel.Checked; \n        }\n\n        private void bDataLabelExpr_Click(object sender, EventArgs e)\n        {\n            DialogExprEditor ee = new DialogExprEditor(_Draw, cbDataLabel.Text,_ReportItems[0] , false);\n            try\n            {\n                if (ee.ShowDialog() == DialogResult.OK)\n                {                 \n                    cbDataLabel.Text = ee.Expression;\n                }\n\n            }\n            finally\n            {\n                ee.Dispose();\n            }\n            return;\n        }       \n\n        private void chkToolTip_CheckedChanged(object sender, EventArgs e)\n        {\n            ftooltip = true;\n        }\n\n        private void checkBox1_CheckedChanged(object sender, EventArgs e)\n        {\n            ftooltipX = true;\n        }\n\n        private void txtYToolFormat_TextChanged(object sender, EventArgs e)\n        {\n            tooltipYFormat = true;\n        }\n\n        private void txtXToolFormat_TextChanged(object sender, EventArgs e)\n        {\n            tooltipXFormat = true;\n        }\n\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/ChartCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"cbPalette.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;txtXToolFormat.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataLabel.Name\" xml:space=\"preserve\">\n    <value>cbDataLabel</value>\n  </data>\n  <data name=\"&gt;&gt;button1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSet.ZOrder\" xml:space=\"preserve\">\n    <value>26</value>\n  </data>\n  <data name=\"&gt;&gt;label6.ZOrder\" xml:space=\"preserve\">\n    <value>29</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Data Set Name</value>\n  </data>\n  <data name=\"&gt;&gt;label5.ZOrder\" xml:space=\"preserve\">\n    <value>31</value>\n  </data>\n  <data name=\"bDataExpr2.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"button2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>25</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartType.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"lData3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 23</value>\n  </data>\n  <data name=\"chkPageBreakStart.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>19, 249</value>\n  </data>\n  <data name=\"&gt;&gt;bDataLabelExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bDataExpr.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;chkDataLabel.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"cbChartData3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>255, 21</value>\n  </data>\n  <data name=\"chkPageBreakEnd.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>14</value>\n  </data>\n  <data name=\"label10.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>32</value>\n  </data>\n  <data name=\"&gt;&gt;chkPageBreakEnd.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bDataExpr3.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"bDataExpr3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 21</value>\n  </data>\n  <data name=\"&gt;&gt;lData3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkDataLabel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 17</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"button2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>251, 9</value>\n  </data>\n  <data name=\"&gt;&gt;checkBox1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lData2.ZOrder\" xml:space=\"preserve\">\n    <value>21</value>\n  </data>\n  <data name=\"cbChartType.Items8\" xml:space=\"preserve\">\n    <value>Scatter</value>\n  </data>\n  <data name=\"&gt;&gt;lData1.Name\" xml:space=\"preserve\">\n    <value>lData1</value>\n  </data>\n  <data name=\"checkBox1.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"tbNoRows.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>156, 104</value>\n  </data>\n  <data name=\"cbRenderElement.Items\" xml:space=\"preserve\">\n    <value>Output</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 12</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 62</value>\n  </data>\n  <data name=\"label10.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>42, 19</value>\n  </data>\n  <data name=\"cbDataLabel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>17</value>\n  </data>\n  <data name=\"&gt;&gt;lData3.Name\" xml:space=\"preserve\">\n    <value>lData3</value>\n  </data>\n  <data name=\"bDataExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>415, 153</value>\n  </data>\n  <data name=\"&gt;&gt;btnVectorExp.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"txtYToolFormat.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>331, 253</value>\n  </data>\n  <data name=\"&gt;&gt;cbPalette.Name\" xml:space=\"preserve\">\n    <value>cbPalette</value>\n  </data>\n  <data name=\"lData2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 182</value>\n  </data>\n  <data name=\"&gt;&gt;chkToolTip.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbPercentWidth.ZOrder\" xml:space=\"preserve\">\n    <value>30</value>\n  </data>\n  <data name=\"chkPageBreakEnd.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>134, 24</value>\n  </data>\n  <data name=\"cbChartData2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>255, 21</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Name\" xml:space=\"preserve\">\n    <value>label10</value>\n  </data>\n  <data name=\"cbChartType.Items5\" xml:space=\"preserve\">\n    <value>Map</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbPercentWidth.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 20</value>\n  </data>\n  <data name=\"bDataExpr3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"lData1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>137, 23</value>\n  </data>\n  <data name=\"lData3.Text\" xml:space=\"preserve\">\n    <value>Bubble Size</value>\n  </data>\n  <data name=\"bDataLabelExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 21</value>\n  </data>\n  <data name=\"cbDataSet.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>255, 21</value>\n  </data>\n  <data name=\"label8.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>275, 31</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Percent width for Bars/Columns (&gt;100% causes column overlap)</value>\n  </data>\n  <data name=\"&gt;&gt;cbPalette.ZOrder\" xml:space=\"preserve\">\n    <value>33</value>\n  </data>\n  <data name=\"&gt;&gt;bDataExpr2.ZOrder\" xml:space=\"preserve\">\n    <value>15</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"txtYToolFormat.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>78, 20</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbDataLabel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>156, 228</value>\n  </data>\n  <data name=\"cbChartType.Items6\" xml:space=\"preserve\">\n    <value>Pie</value>\n  </data>\n  <data name=\"&gt;&gt;bDataExpr3.ZOrder\" xml:space=\"preserve\">\n    <value>16</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData.Name\" xml:space=\"preserve\">\n    <value>cbChartData</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbVector.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 21</value>\n  </data>\n  <data name=\"chkDataLabel.Text\" xml:space=\"preserve\">\n    <value>DataLabel</value>\n  </data>\n  <data name=\"chkDataLabel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>19, 231</value>\n  </data>\n  <data name=\"button2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 21</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>38</value>\n  </data>\n  <data name=\"button1.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>39</value>\n  </data>\n  <data name=\"chkPageBreakStart.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>13</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>53, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bDataExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bDataLabelExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>415, 228</value>\n  </data>\n  <data name=\"label9.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>31</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>128, 16</value>\n  </data>\n  <data name=\"&gt;&gt;tbPercentWidth.Name\" xml:space=\"preserve\">\n    <value>tbPercentWidth</value>\n  </data>\n  <data name=\"cbSubType.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>331, 9</value>\n  </data>\n  <data name=\"cbChartType.Items4\" xml:space=\"preserve\">\n    <value>Line</value>\n  </data>\n  <data name=\"cbChartType.Items3\" xml:space=\"preserve\">\n    <value>Doughnut</value>\n  </data>\n  <data name=\"&gt;&gt;cbSubType.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbPalette.Items\" xml:space=\"preserve\">\n    <value>Default</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 37</value>\n  </data>\n  <data name=\"chkDataLabel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>19</value>\n  </data>\n  <data name=\"tbNoRows.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;chkDataLabel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>340, 19</value>\n  </data>\n  <data name=\"cbVector.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>21</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkPageBreakEnd.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>19, 272</value>\n  </data>\n  <data name=\"lData3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 207</value>\n  </data>\n  <data name=\"button2.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"cbDataLabel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>254, 21</value>\n  </data>\n  <data name=\"&gt;&gt;cbRenderElement.Name\" xml:space=\"preserve\">\n    <value>cbRenderElement</value>\n  </data>\n  <data name=\"chkPageBreakStart.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>134, 24</value>\n  </data>\n  <data name=\"&gt;&gt;txtXToolFormat.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbPercentWidth.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"label9.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>286, 256</value>\n  </data>\n  <data name=\"button1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 21</value>\n  </data>\n  <data name=\"bDataExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 21</value>\n  </data>\n  <data name=\"&gt;&gt;lData3.ZOrder\" xml:space=\"preserve\">\n    <value>19</value>\n  </data>\n  <data name=\"label6.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 104</value>\n  </data>\n  <data name=\"checkBox1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>28</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkDataLabel.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"bDataExpr3.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;cbPalette.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bDataExpr2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"button3.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;bDataLabelExpr.Name\" xml:space=\"preserve\">\n    <value>bDataLabelExpr</value>\n  </data>\n  <data name=\"chkToolTip.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"&gt;&gt;txtYToolFormat.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbPercentWidth.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>363, 80</value>\n  </data>\n  <data name=\"&gt;&gt;tbPercentWidth.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbPalette.Items6\" xml:space=\"preserve\">\n    <value>SemiTransparent</value>\n  </data>\n  <data name=\"&gt;&gt;chkPageBreakStart.Name\" xml:space=\"preserve\">\n    <value>chkPageBreakStart</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Name\" xml:space=\"preserve\">\n    <value>label8</value>\n  </data>\n  <data name=\"&gt;&gt;lData1.ZOrder\" xml:space=\"preserve\">\n    <value>24</value>\n  </data>\n  <data name=\"txtXToolFormat.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>30</value>\n  </data>\n  <data name=\"button3.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSet.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"button2.Visible\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"&gt;&gt;bDataExpr.ZOrder\" xml:space=\"preserve\">\n    <value>17</value>\n  </data>\n  <data name=\"lData2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 23</value>\n  </data>\n  <data name=\"button1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>24</value>\n  </data>\n  <data name=\"cbPalette.Items1\" xml:space=\"preserve\">\n    <value>EarthTones</value>\n  </data>\n  <data name=\"button3.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;cbVector.ZOrder\" xml:space=\"preserve\">\n    <value>14</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSet.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"lData2.Text\" xml:space=\"preserve\">\n    <value>Y Coordinate</value>\n  </data>\n  <data name=\"label7.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"cbVector.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>330, 34</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Name\" xml:space=\"preserve\">\n    <value>label7</value>\n  </data>\n  <data name=\"cbChartData2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;lData2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbDataLabel.Enabled\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Chart Type</value>\n  </data>\n  <data name=\"chkToolTip.Text\" xml:space=\"preserve\">\n    <value>Y Tooltips?</value>\n  </data>\n  <data name=\"bDataExpr2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>415, 178</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 23</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbSubType.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"button1.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;button1.ZOrder\" xml:space=\"preserve\">\n    <value>11</value>\n  </data>\n  <data name=\"cbPalette.Items3\" xml:space=\"preserve\">\n    <value>GrayScale</value>\n  </data>\n  <data name=\"&gt;&gt;tbNoRows.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbVector.Items1\" xml:space=\"preserve\">\n    <value>True</value>\n  </data>\n  <data name=\"checkBox1.Text\" xml:space=\"preserve\">\n    <value>X Tooltips?</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>Sub-type</value>\n  </data>\n  <data name=\"cbRenderElement.Items1\" xml:space=\"preserve\">\n    <value>NoOutput</value>\n  </data>\n  <data name=\"txtXToolFormat.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>78, 20</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData.ZOrder\" xml:space=\"preserve\">\n    <value>23</value>\n  </data>\n  <data name=\"&gt;&gt;tbNoRows.ZOrder\" xml:space=\"preserve\">\n    <value>28</value>\n  </data>\n  <data name=\"cbChartData2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>156, 178</value>\n  </data>\n  <data name=\"bDataLabelExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"button2.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"label5.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>275, 12</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label10.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"label4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"&gt;&gt;button2.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"cbPalette.Items9\" xml:space=\"preserve\">\n    <value>Custom</value>\n  </data>\n  <data name=\"&gt;&gt;btnVectorExp.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"btnVectorExp.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>22</value>\n  </data>\n  <data name=\"label8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>53, 27</value>\n  </data>\n  <data name=\"lData1.Text\" xml:space=\"preserve\">\n    <value>Chart Data (X Coordinate)</value>\n  </data>\n  <data name=\"&gt;&gt;bDataLabelExpr.ZOrder\" xml:space=\"preserve\">\n    <value>22</value>\n  </data>\n  <data name=\"chkToolTip.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>79, 17</value>\n  </data>\n  <data name=\"&gt;&gt;cbSubType.Name\" xml:space=\"preserve\">\n    <value>cbSubType</value>\n  </data>\n  <data name=\"&gt;&gt;cbVector.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbVector.Items\" xml:space=\"preserve\">\n    <value>False</value>\n  </data>\n  <data name=\"cbRenderElement.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>126, 59</value>\n  </data>\n  <data name=\"btnVectorExp.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Palette</value>\n  </data>\n  <data name=\"&gt;&gt;chkToolTip.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;txtYToolFormat.Name\" xml:space=\"preserve\">\n    <value>txtYToolFormat</value>\n  </data>\n  <data name=\"&gt;&gt;button3.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;cbSubType.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkDataLabel.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"button1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>415, 9</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData3.ZOrder\" xml:space=\"preserve\">\n    <value>18</value>\n  </data>\n  <data name=\"&gt;&gt;lData2.Name\" xml:space=\"preserve\">\n    <value>lData2</value>\n  </data>\n  <data name=\"&gt;&gt;lData2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"chkToolTip.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>201, 255</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"cbChartType.Items7\" xml:space=\"preserve\">\n    <value>Bubble</value>\n  </data>\n  <data name=\"&gt;&gt;button1.Name\" xml:space=\"preserve\">\n    <value>button1</value>\n  </data>\n  <data name=\"chkPageBreakEnd.Text\" xml:space=\"preserve\">\n    <value>Page Break at End</value>\n  </data>\n  <data name=\"&gt;&gt;bDataExpr3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkDataLabel.Name\" xml:space=\"preserve\">\n    <value>chkDataLabel</value>\n  </data>\n  <data name=\"&gt;&gt;txtYToolFormat.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbChartData.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>156, 153</value>\n  </data>\n  <data name=\"cbChartData.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>255, 21</value>\n  </data>\n  <data name=\"button1.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"cbChartType.Items\" xml:space=\"preserve\">\n    <value>Area</value>\n  </data>\n  <data name=\"lData2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>18</value>\n  </data>\n  <data name=\"chkPageBreakStart.Text\" xml:space=\"preserve\">\n    <value>Page Break at Start</value>\n  </data>\n  <data name=\"&gt;&gt;button2.Name\" xml:space=\"preserve\">\n    <value>button2</value>\n  </data>\n  <data name=\"btnVectorExp.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;chkToolTip.Name\" xml:space=\"preserve\">\n    <value>chkToolTip</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bDataExpr2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbSubType.ZOrder\" xml:space=\"preserve\">\n    <value>34</value>\n  </data>\n  <data name=\"checkBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>79, 17</value>\n  </data>\n  <data name=\"&gt;&gt;button2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"button2.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label8.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>23</value>\n  </data>\n  <data name=\"checkBox1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>201, 274</value>\n  </data>\n  <data name=\"bDataLabelExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>20</value>\n  </data>\n  <data name=\"&gt;&gt;button3.Name\" xml:space=\"preserve\">\n    <value>button3</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Render As Vector</value>\n  </data>\n  <data name=\"&gt;&gt;chkToolTip.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSet.Name\" xml:space=\"preserve\">\n    <value>cbDataSet</value>\n  </data>\n  <data name=\"&gt;&gt;txtXToolFormat.Name\" xml:space=\"preserve\">\n    <value>txtXToolFormat</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartType.Name\" xml:space=\"preserve\">\n    <value>cbChartType</value>\n  </data>\n  <data name=\"&gt;&gt;button2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbRenderElement.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"txtYToolFormat.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>29</value>\n  </data>\n  <data name=\"&gt;&gt;button3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bDataExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;txtXToolFormat.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"bDataExpr2.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>ChartCtl</value>\n  </data>\n  <data name=\"&gt;&gt;cbRenderElement.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData2.Name\" xml:space=\"preserve\">\n    <value>cbChartData2</value>\n  </data>\n  <data name=\"&gt;&gt;button3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbPalette.Items4\" xml:space=\"preserve\">\n    <value>Light</value>\n  </data>\n  <data name=\"cbChartData3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataLabel.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label5.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartType.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;chkPageBreakEnd.ZOrder\" xml:space=\"preserve\">\n    <value>25</value>\n  </data>\n  <data name=\"bDataExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"cbChartData.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 23</value>\n  </data>\n  <data name=\"btnVectorExp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 21</value>\n  </data>\n  <data name=\"button3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>251, 34</value>\n  </data>\n  <data name=\"&gt;&gt;bDataExpr3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData3.Name\" xml:space=\"preserve\">\n    <value>cbChartData3</value>\n  </data>\n  <data name=\"bDataExpr2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 21</value>\n  </data>\n  <data name=\"btnVectorExp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>415, 33</value>\n  </data>\n  <data name=\"&gt;&gt;checkBox1.Name\" xml:space=\"preserve\">\n    <value>checkBox1</value>\n  </data>\n  <data name=\"&gt;&gt;tbNoRows.Name\" xml:space=\"preserve\">\n    <value>tbNoRows</value>\n  </data>\n  <data name=\"lData3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>20</value>\n  </data>\n  <data name=\"&gt;&gt;txtYToolFormat.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;chkPageBreakStart.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>No Rows Message</value>\n  </data>\n  <data name=\"&gt;&gt;bDataLabelExpr.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label7.ZOrder\" xml:space=\"preserve\">\n    <value>27</value>\n  </data>\n  <data name=\"&gt;&gt;cbPalette.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbSubType.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 21</value>\n  </data>\n  <data name=\"&gt;&gt;chkPageBreakEnd.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbVector.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbDataSet.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"lData1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 157</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lData3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label6.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;label8.ZOrder\" xml:space=\"preserve\">\n    <value>12</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Render XML Element</value>\n  </data>\n  <data name=\"&gt;&gt;button1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbPalette.Items2\" xml:space=\"preserve\">\n    <value>Excel</value>\n  </data>\n  <data name=\"&gt;&gt;label9.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"label10.Text\" xml:space=\"preserve\">\n    <value>Format</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label9.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>42, 19</value>\n  </data>\n  <data name=\"&gt;&gt;chkPageBreakEnd.Name\" xml:space=\"preserve\">\n    <value>chkPageBreakEnd</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbPalette.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>126, 34</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"btnVectorExp.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>440, 303</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData2.ZOrder\" xml:space=\"preserve\">\n    <value>20</value>\n  </data>\n  <data name=\"cbChartType.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>126, 9</value>\n  </data>\n  <data name=\"&gt;&gt;lData1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"chkToolTip.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>27</value>\n  </data>\n  <data name=\"&gt;&gt;bDataExpr2.Name\" xml:space=\"preserve\">\n    <value>bDataExpr2</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartType.ZOrder\" xml:space=\"preserve\">\n    <value>35</value>\n  </data>\n  <data name=\"cbPalette.Items8\" xml:space=\"preserve\">\n    <value>PatternedBlack</value>\n  </data>\n  <data name=\"cbChartData3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>156, 203</value>\n  </data>\n  <data name=\"label10.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>286, 276</value>\n  </data>\n  <data name=\"&gt;&gt;chkPageBreakStart.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbNoRows.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>255, 20</value>\n  </data>\n  <data name=\"bDataExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"cbPalette.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 21</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bDataExpr3.Name\" xml:space=\"preserve\">\n    <value>bDataExpr3</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;chkPageBreakStart.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbRenderElement.ZOrder\" xml:space=\"preserve\">\n    <value>32</value>\n  </data>\n  <data name=\"label9.Text\" xml:space=\"preserve\">\n    <value>Format</value>\n  </data>\n  <data name=\"&gt;&gt;cbVector.Name\" xml:space=\"preserve\">\n    <value>cbVector</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Name\" xml:space=\"preserve\">\n    <value>label4</value>\n  </data>\n  <data name=\"txtXToolFormat.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>331, 273</value>\n  </data>\n  <data name=\"lData1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>16</value>\n  </data>\n  <data name=\"cbChartType.Items1\" xml:space=\"preserve\">\n    <value>Bar</value>\n  </data>\n  <data name=\"&gt;&gt;bDataExpr.Name\" xml:space=\"preserve\">\n    <value>bDataExpr</value>\n  </data>\n  <data name=\"&gt;&gt;label4.ZOrder\" xml:space=\"preserve\">\n    <value>36</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Name\" xml:space=\"preserve\">\n    <value>label5</value>\n  </data>\n  <data name=\"bDataExpr2.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"cbChartType.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataLabel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbRenderElement.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lData1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bDataLabelExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 84</value>\n  </data>\n  <data name=\"&gt;&gt;tbPercentWidth.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bDataLabelExpr.Enabled\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"bDataExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"cbChartType.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 21</value>\n  </data>\n  <data name=\"bDataExpr3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>415, 203</value>\n  </data>\n  <data name=\"cbChartType.Items2\" xml:space=\"preserve\">\n    <value>Column</value>\n  </data>\n  <data name=\"cbPalette.Items5\" xml:space=\"preserve\">\n    <value>Pastel</value>\n  </data>\n  <data name=\"cbPalette.Items7\" xml:space=\"preserve\">\n    <value>Patterned</value>\n  </data>\n  <data name=\"bDataExpr3.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;btnVectorExp.ZOrder\" xml:space=\"preserve\">\n    <value>13</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"button3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>26</value>\n  </data>\n  <data name=\"&gt;&gt;checkBox1.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"label7.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 130</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>37</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataLabel.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;checkBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbNoRows.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"button3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 21</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Name\" xml:space=\"preserve\">\n    <value>label6</value>\n  </data>\n  <data name=\"cbDataSet.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>156, 128</value>\n  </data>\n  <data name=\"&gt;&gt;btnVectorExp.Name\" xml:space=\"preserve\">\n    <value>btnVectorExp</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Name\" xml:space=\"preserve\">\n    <value>label9</value>\n  </data>\n  <data name=\"bDataExpr2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"cbRenderElement.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 21</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/ChartCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 10</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 16</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Тип диаграммы</value>\n  </data>\n  <data name=\"label1.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 35</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 16</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Палитра</value>\n  </data>\n  <data name=\"label2.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 53</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 31</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Выводить XML-элемент</value>\n  </data>\n  <data name=\"label3.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>364, 19</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>% ширины бары/столбцы (&gt; 100% вызывает перекрытие столбцов)</value>\n  </data>\n  <data name=\"cbChartType.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>122, 9</value>\n  </data>\n  <data name=\"cbSubType.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>354, 9</value>\n  </data>\n  <data name=\"cbPalette.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>122, 34</value>\n  </data>\n  <data name=\"cbRenderElement.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>122, 59</value>\n  </data>\n  <data name=\"label5.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>282, 9</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>66, 19</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>Подтип</value>\n  </data>\n  <data name=\"label5.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleRight</value>\n  </data>\n  <data name=\"tbPercentWidth.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>386, 82</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>157, 23</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Сообщение, когда нет строк</value>\n  </data>\n  <data name=\"tbNoRows.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>179, 105</value>\n  </data>\n  <data name=\"label7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>157, 23</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Набор данных</value>\n  </data>\n  <data name=\"cbDataSet.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>179, 129</value>\n  </data>\n  <data name=\"chkPageBreakStart.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>176, 24</value>\n  </data>\n  <data name=\"chkPageBreakStart.Text\" xml:space=\"preserve\">\n    <value>Разрывать страницу вначале</value>\n  </data>\n  <data name=\"chkPageBreakEnd.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>176, 24</value>\n  </data>\n  <data name=\"chkPageBreakEnd.Text\" xml:space=\"preserve\">\n    <value>Разрывать страницу вконце</value>\n  </data>\n  <data name=\"cbChartData.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>179, 154</value>\n  </data>\n  <data name=\"cbDataLabel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>180, 229</value>\n  </data>\n  <data name=\"chkDataLabel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>98, 17</value>\n  </data>\n  <data name=\"chkDataLabel.Text\" xml:space=\"preserve\">\n    <value>Матка данных</value>\n  </data>\n  <data name=\"bDataLabelExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>439, 228</value>\n  </data>\n  <data name=\"lData1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 150</value>\n  </data>\n  <data name=\"lData1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>157, 29</value>\n  </data>\n  <data name=\"lData1.Text\" xml:space=\"preserve\">\n    <value>Данные диаграммы (X-координата)</value>\n  </data>\n  <data name=\"cbChartData2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>179, 179</value>\n  </data>\n  <data name=\"lData2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>157, 23</value>\n  </data>\n  <data name=\"lData2.Text\" xml:space=\"preserve\">\n    <value>Y-координата</value>\n  </data>\n  <data name=\"cbChartData3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>179, 204</value>\n  </data>\n  <data name=\"lData3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>157, 23</value>\n  </data>\n  <data name=\"lData3.Text\" xml:space=\"preserve\">\n    <value>Размер пузырька</value>\n  </data>\n  <data name=\"bDataExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>439, 153</value>\n  </data>\n  <data name=\"bDataExpr3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>439, 203</value>\n  </data>\n  <data name=\"bDataExpr2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>439, 178</value>\n  </data>\n  <data name=\"cbVector.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>353, 34</value>\n  </data>\n  <data name=\"btnVectorExp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>439, 33</value>\n  </data>\n  <data name=\"label8.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>279, 31</value>\n  </data>\n  <data name=\"label8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 27</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Выводить как вектор</value>\n  </data>\n  <data name=\"label8.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleRight</value>\n  </data>\n  <data name=\"button1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>439, 9</value>\n  </data>\n  <data name=\"button2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>249, 9</value>\n  </data>\n  <data name=\"button3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>249, 34</value>\n  </data>\n  <data name=\"chkToolTip.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 17</value>\n  </data>\n  <data name=\"chkToolTip.Text\" xml:space=\"preserve\">\n    <value>Y-подсказки?</value>\n  </data>\n  <data name=\"checkBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 17</value>\n  </data>\n  <data name=\"checkBox1.Text\" xml:space=\"preserve\">\n    <value>X-подсказки?</value>\n  </data>\n  <data name=\"txtYToolFormat.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>356, 253</value>\n  </data>\n  <data name=\"txtXToolFormat.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>356, 273</value>\n  </data>\n  <data name=\"label9.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>299, 254</value>\n  </data>\n  <data name=\"label9.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>51, 19</value>\n  </data>\n  <data name=\"label9.Text\" xml:space=\"preserve\">\n    <value>Формат</value>\n  </data>\n  <data name=\"label10.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>299, 275</value>\n  </data>\n  <data name=\"label10.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>51, 19</value>\n  </data>\n  <data name=\"label10.Text\" xml:space=\"preserve\">\n    <value>Формат</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>480, 303</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/ChartLegendCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for ChartCtl.\n\t/// </summary>\n\tinternal class ChartLegendCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n        private List<XmlNode> _ReportItems;\n\t\tprivate DesignXmlDraw _Draw;\n\t\tbool fVisible, fLayout, fPosition, fInsidePlotArea;\n\t\tprivate System.Windows.Forms.Label label1;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\tprivate System.Windows.Forms.ComboBox cbPosition;\n\t\tprivate System.Windows.Forms.ComboBox cbLayout;\n\t\tprivate System.Windows.Forms.CheckBox chkVisible;\n\t\tprivate System.Windows.Forms.CheckBox chkInsidePlotArea;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n        internal ChartLegendCtl(DesignXmlDraw dxDraw, List<XmlNode> ris)\n\t\t{\n\t\t\t_ReportItems = ris;\n\t\t\t_Draw = dxDraw;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues();\t\t\t\n\t\t}\n\n\t\tprivate void InitValues()\n\t\t{\n\t\t\tXmlNode node = _ReportItems[0];\n\n\t\t\tthis.cbPosition.Text = _Draw.GetElementValue(node, \"Position\", \"RightTop\");\n\t\t\tthis.cbLayout.Text = _Draw.GetElementValue(node, \"Layout\", \"Column\");\n\t\t\tthis.chkVisible.Checked = _Draw.GetElementValue(node, \"Visible\", \"false\").ToLower() == \"true\"? true: false;\n\t\t\tthis.chkInsidePlotArea.Checked = _Draw.GetElementValue(node, \"InsidePlotArea\", \"false\").ToLower() == \"true\"? true: false;\n\n\t\t\tfVisible = fLayout = fPosition = fInsidePlotArea = false;\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ChartLegendCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.cbPosition = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbLayout = new System.Windows.Forms.ComboBox();\n\t\t\tthis.chkVisible = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkInsidePlotArea = new System.Windows.Forms.CheckBox();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// cbPosition\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbPosition, \"cbPosition\");\n\t\t\tthis.cbPosition.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbPosition.Items.AddRange(new object[] {\n            resources.GetString(\"cbPosition.Items\"),\n            resources.GetString(\"cbPosition.Items1\"),\n            resources.GetString(\"cbPosition.Items2\"),\n            resources.GetString(\"cbPosition.Items3\"),\n            resources.GetString(\"cbPosition.Items4\"),\n            resources.GetString(\"cbPosition.Items5\"),\n            resources.GetString(\"cbPosition.Items6\"),\n            resources.GetString(\"cbPosition.Items7\"),\n            resources.GetString(\"cbPosition.Items8\"),\n            resources.GetString(\"cbPosition.Items9\"),\n            resources.GetString(\"cbPosition.Items10\"),\n            resources.GetString(\"cbPosition.Items11\")});\n\t\t\tthis.cbPosition.Name = \"cbPosition\";\n\t\t\tthis.cbPosition.SelectedIndexChanged += new System.EventHandler(this.cbPosition_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// cbLayout\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbLayout, \"cbLayout\");\n\t\t\tthis.cbLayout.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbLayout.Items.AddRange(new object[] {\n            resources.GetString(\"cbLayout.Items\"),\n            resources.GetString(\"cbLayout.Items1\"),\n            resources.GetString(\"cbLayout.Items2\")});\n\t\t\tthis.cbLayout.Name = \"cbLayout\";\n\t\t\tthis.cbLayout.SelectedIndexChanged += new System.EventHandler(this.cbLayout_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// chkVisible\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkVisible, \"chkVisible\");\n\t\t\tthis.chkVisible.Name = \"chkVisible\";\n\t\t\tthis.chkVisible.CheckedChanged += new System.EventHandler(this.chkVisible_CheckedChanged);\n\t\t\t// \n\t\t\t// chkInsidePlotArea\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkInsidePlotArea, \"chkInsidePlotArea\");\n\t\t\tthis.chkInsidePlotArea.Name = \"chkInsidePlotArea\";\n\t\t\tthis.chkInsidePlotArea.CheckedChanged += new System.EventHandler(this.chkInsidePlotArea_CheckedChanged);\n\t\t\t// \n\t\t\t// ChartLegendCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.chkInsidePlotArea);\n\t\t\tthis.Controls.Add(this.chkVisible);\n\t\t\tthis.Controls.Add(this.cbLayout);\n\t\t\tthis.Controls.Add(this.cbPosition);\n\t\t\tthis.Controls.Add(this.label2);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Name = \"ChartLegendCtl\";\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n \n\t\tpublic bool IsValid()\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// take information in control and apply to all the style nodes\n\t\t\t//  Only change information that has been marked as modified;\n\t\t\t//   this way when group is selected it is possible to change just\n\t\t\t//   the items you want and keep the rest the same.\n\t\t\t\t\n\t\t\tforeach (XmlNode riNode in this._ReportItems)\n\t\t\t\tApplyChanges(riNode);\n\n\t\t\t// No more changes\n\t\t\tfVisible = fLayout = fPosition = fInsidePlotArea = false;\n\t\t}\n\n\t\tpublic void ApplyChanges(XmlNode node)\n\t\t{\n\t\t\tif (fVisible)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"Visible\", this.chkVisible.Checked? \"true\": \"false\");\n\t\t\t}\n\t\t\tif (fLayout)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"Layout\", this.cbLayout.Text);\n\t\t\t}\n\t\t\tif (fPosition)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"Position\", this.cbPosition.Text);\n\t\t\t}\n\t\t\tif (fInsidePlotArea)\n\t\t\t{\n\t\t\t\t_Draw.SetElement(node, \"InsidePlotArea\", this.chkInsidePlotArea.Checked? \"true\": \"false\");\n\t\t\t}\n\t\t}\n\n\t\tprivate void cbPosition_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPosition = true;\n\t\t}\n\n\t\tprivate void cbLayout_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfLayout = true;\n\t\t}\n\n\t\tprivate void chkVisible_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfVisible = true;\n\t\t}\n\n\t\tprivate void chkInsidePlotArea_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfInsidePlotArea = true;\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/ChartLegendCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"chkVisible.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 80</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Position in Chart</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbLayout.Items\" xml:space=\"preserve\">\n    <value>Column</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>ChartLegendCtl</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 50</value>\n  </data>\n  <data name=\"&gt;&gt;cbLayout.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbPosition.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbLayout.Items1\" xml:space=\"preserve\">\n    <value>Row</value>\n  </data>\n  <data name=\"&gt;&gt;chkInsidePlotArea.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbLayout.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"chkInsidePlotArea.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>15</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"chkVisible.Text\" xml:space=\"preserve\">\n    <value>Visible</value>\n  </data>\n  <data name=\"&gt;&gt;cbLayout.Name\" xml:space=\"preserve\">\n    <value>cbLayout</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbPosition.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>144, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;chkVisible.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"cbPosition.Items11\" xml:space=\"preserve\">\n    <value>BottomLeft</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 18</value>\n  </data>\n  <data name=\"chkInsidePlotArea.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>136, 24</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>112, 16</value>\n  </data>\n  <data name=\"&gt;&gt;chkVisible.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkVisible.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>14</value>\n  </data>\n  <data name=\"cbLayout.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 21</value>\n  </data>\n  <data name=\"&gt;&gt;chkVisible.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;chkInsidePlotArea.Name\" xml:space=\"preserve\">\n    <value>chkInsidePlotArea</value>\n  </data>\n  <data name=\"cbPosition.Items\" xml:space=\"preserve\">\n    <value>TopLeft</value>\n  </data>\n  <data name=\"chkVisible.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>136, 24</value>\n  </data>\n  <data name=\"chkInsidePlotArea.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 112</value>\n  </data>\n  <data name=\"cbPosition.Items8\" xml:space=\"preserve\">\n    <value>RightBottom</value>\n  </data>\n  <data name=\"cbPosition.Items9\" xml:space=\"preserve\">\n    <value>BottomRight</value>\n  </data>\n  <data name=\"cbPosition.Items4\" xml:space=\"preserve\">\n    <value>LeftCenter</value>\n  </data>\n  <data name=\"cbPosition.Items5\" xml:space=\"preserve\">\n    <value>LeftBottom</value>\n  </data>\n  <data name=\"cbPosition.Items6\" xml:space=\"preserve\">\n    <value>RightTop</value>\n  </data>\n  <data name=\"cbPosition.Items7\" xml:space=\"preserve\">\n    <value>RightCenter</value>\n  </data>\n  <data name=\"cbPosition.Items1\" xml:space=\"preserve\">\n    <value>TopCenter</value>\n  </data>\n  <data name=\"cbPosition.Items2\" xml:space=\"preserve\">\n    <value>TopRight</value>\n  </data>\n  <data name=\"cbPosition.Items3\" xml:space=\"preserve\">\n    <value>LeftTop</value>\n  </data>\n  <data name=\"cbLayout.Items2\" xml:space=\"preserve\">\n    <value>Table</value>\n  </data>\n  <data name=\"&gt;&gt;cbPosition.Name\" xml:space=\"preserve\">\n    <value>cbPosition</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>440, 288</value>\n  </data>\n  <data name=\"&gt;&gt;cbPosition.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Layout within Legend</value>\n  </data>\n  <data name=\"cbPosition.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;chkInsidePlotArea.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;chkInsidePlotArea.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbLayout.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>144, 48</value>\n  </data>\n  <data name=\"&gt;&gt;cbPosition.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"chkInsidePlotArea.Text\" xml:space=\"preserve\">\n    <value>Draw Inside Plot Area</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"cbLayout.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;chkVisible.Name\" xml:space=\"preserve\">\n    <value>chkVisible</value>\n  </data>\n  <data name=\"cbPosition.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 21</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbPosition.Items10\" xml:space=\"preserve\">\n    <value>BottomCenter</value>\n  </data>\n  <data name=\"&gt;&gt;cbLayout.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/ChartLegendCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>146, 16</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Позиция в диаграмме</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>146, 16</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Расположение в легенде</value>\n  </data>\n  <data name=\"cbPosition.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>168, 15</value>\n  </data>\n  <data name=\"cbLayout.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>168, 47</value>\n  </data>\n  <data name=\"chkVisible.Text\" xml:space=\"preserve\">\n    <value>Видимая</value>\n  </data>\n  <data name=\"chkInsidePlotArea.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>170, 24</value>\n  </data>\n  <data name=\"chkInsidePlotArea.Text\" xml:space=\"preserve\">\n    <value>Рисовать внутри участка</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/CodeCtl.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Text;\nusing System.Xml;\nusing System.IO;\nusing System.Threading;\nusing System.Reflection;\nusing System.CodeDom;\nusing System.CodeDom.Compiler;\nusing Microsoft.VisualBasic;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// Summary description for CodeCtl.\n    /// </summary>\n    internal class CodeCtl : System.Windows.Forms.UserControl, IProperty\n    {\n        static internal long Counter;\t\t\t// counter used for unique expression count\n        private DesignXmlDraw _Draw;\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.Button bCheckSyntax;\n        private System.Windows.Forms.Panel panel1;\n        private System.Windows.Forms.TextBox tbCode;\n\t\tprivate System.Windows.Forms.ListBox lbErrors;\n        private System.Windows.Forms.Label label2;\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.Container components = null;\n\n        internal CodeCtl(DesignXmlDraw dxDraw)\n        {\n            _Draw = dxDraw;\n            // This call is required by the Windows.Forms Form Designer.\n            InitializeComponent();\n\n            // Initialize form using the style node values\n            InitValues();\t\t\t\n        }\n\n        private void InitValues()\n        {\n            XmlNode rNode = _Draw.GetReportNode();\n            XmlNode cNode = _Draw.GetNamedChildNode(rNode, \"Code\");\n            tbCode.Text = \"\";\n            if (cNode == null)\n                return;\n\n            StringReader tr = new StringReader(cNode.InnerText);\n            List<string> ar = new List<string>();\n            while (tr.Peek() >= 0)\n            {\n                string line = tr.ReadLine();\n                ar.Add(line);\n            }\n            tr.Close();\n\n        //    tbCode.Lines = ar.ToArray(\"\".GetType()) as string[];\n            tbCode.Lines = ar.ToArray();\n        }\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        protected override void Dispose( bool disposing )\n        {\n            if( disposing )\n            {\n                if(components != null)\n                {\n                    components.Dispose();\n                }\n            }\n            base.Dispose( disposing );\n        }\n\n        #region Component Designer generated code\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CodeCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.bCheckSyntax = new System.Windows.Forms.Button();\n\t\t\tthis.panel1 = new System.Windows.Forms.Panel();\n\t\t\tthis.tbCode = new System.Windows.Forms.TextBox();\n\t\t\tthis.lbErrors = new System.Windows.Forms.ListBox();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.panel1.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// bCheckSyntax\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCheckSyntax, \"bCheckSyntax\");\n\t\t\tthis.bCheckSyntax.Name = \"bCheckSyntax\";\n\t\t\tthis.bCheckSyntax.Click += new System.EventHandler(this.bCheckSyntax_Click);\n\t\t\t// \n\t\t\t// panel1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.panel1, \"panel1\");\n\t\t\tthis.panel1.Controls.Add(this.tbCode);\n\t\t\tthis.panel1.Controls.Add(this.lbErrors);\n\t\t\tthis.panel1.Name = \"panel1\";\n\t\t\t// \n\t\t\t// tbCode\n\t\t\t// \n\t\t\tthis.tbCode.AcceptsReturn = true;\n\t\t\tthis.tbCode.AcceptsTab = true;\n\t\t\tresources.ApplyResources(this.tbCode, \"tbCode\");\n\t\t\tthis.tbCode.HideSelection = false;\n\t\t\tthis.tbCode.Name = \"tbCode\";\n\t\t\t// \n\t\t\t// lbErrors\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lbErrors, \"lbErrors\");\n\t\t\tthis.lbErrors.Name = \"lbErrors\";\n\t\t\tthis.lbErrors.SelectedIndexChanged += new System.EventHandler(this.lbErrors_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// CodeCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.label2);\n\t\t\tthis.Controls.Add(this.panel1);\n\t\t\tthis.Controls.Add(this.bCheckSyntax);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Name = \"CodeCtl\";\n\t\t\tthis.panel1.ResumeLayout(false);\n\t\t\tthis.panel1.PerformLayout();\n\t\t\tthis.ResumeLayout(false);\n\n        }\n        #endregion\n\n        public bool IsValid()\n        {\n            return true;\n        }\n\n        public void Apply()\n        {\n            XmlNode rNode = _Draw.GetReportNode(); \n            if (tbCode.Text.Trim().Length > 0)\n                _Draw.SetElement(rNode, \"Code\", tbCode.Text);\n            else\n                _Draw.RemoveElement(rNode, \"Code\");\n        }\n\n        private void bCheckSyntax_Click(object sender, System.EventArgs e)\n        {\n            CheckAssembly();\t\n        }\n        \n        private void CheckAssembly()\n        {\n            lbErrors.Items.Clear();\t\t\t\t\t// clear out existing items\n\n            // Generate the proxy source code\n            List<string> lines = new List<string>();\t\t// hold lines in array in case of error\n\n            VBCodeProvider vbcp =  new VBCodeProvider();\n            StringBuilder sb = new StringBuilder();\n            //  Generate code with the following general form\n\n            //Imports System\n            //Imports Microsoft.VisualBasic\n            //Imports System.Convert\n            //Imports System.Math \n            //Namespace Majorsilence.Reporting.vbgen\n            //Public Class MyClassn\t   // where n is a uniquely generated integer\n            //Sub New()\n            //End Sub\n            //  ' this is the code in the <Code> tag\n            //End Class\n            //End Namespace\n            string unique = Interlocked.Increment(ref CodeCtl.Counter).ToString();\n            lines.Add(\"Imports System\");\n            lines.Add(\"Imports Microsoft.VisualBasic\");\n            lines.Add(\"Imports System.Convert\");\n            lines.Add(\"Imports System.Math\");\n            lines.Add(\"Imports Majorsilence.Reporting.Rdl\");\n            lines.Add(\"Namespace Majorsilence.Reporting.vbgen\");\n            string classname = \"MyClass\" + unique;\n            lines.Add(\"Public Class \" + classname);\n            lines.Add(\"Private Shared _report As CodeReport\");\n            lines.Add(\"Sub New()\");\n            lines.Add(\"End Sub\");\n            lines.Add(\"Sub New(byVal def As Report)\");\n            lines.Add(classname + \"._report = New CodeReport(def)\");\n            lines.Add(\"End Sub\");\n            lines.Add(\"Public Shared ReadOnly Property Report As CodeReport\");\n            lines.Add(\"Get\");\n            lines.Add(\"Return \" + classname + \"._report\");\n            lines.Add(\"End Get\");\n            lines.Add(\"End Property\");\n            int pre_lines = lines.Count;            // number of lines prior to user VB code\n\n            // Read and write code as lines\n            StringReader tr = new StringReader(this.tbCode.Text);\n            while (tr.Peek() >= 0)\n            {\n                string line = tr.ReadLine();\n                lines.Add(line);\n            }\n            tr.Close();\n            lines.Add(\"End Class\");\n            lines.Add(\"End Namespace\");\n            foreach (string l in lines)\n            {\n                sb.Append(l);\n                sb.Append(Environment.NewLine);\n            }\n            string vbcode = sb.ToString();\n\n            // Create Assembly\n            CompilerParameters cp = new CompilerParameters();\n            cp.ReferencedAssemblies.Add(\"System.dll\");\n            string re = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"Majorsilence.Reporting.RdlEngine.dll\");  // Issue #35\n            cp.ReferencedAssemblies.Add(re);\n\n            // also allow access to classes that have been added to report\n            XmlNode rNode = _Draw.GetReportNode();\n            XmlNode cNode = _Draw.GetNamedChildNode(rNode, \"CodeModules\");\n            if (cNode != null)\n            {\n                foreach (XmlNode xn in cNode.ChildNodes)\n                {\n                    if (xn.Name != \"CodeModule\")\n                        continue;\n                    cp.ReferencedAssemblies.Add(xn.InnerText);\n                }\n            }\n\n            cp.GenerateExecutable = false;\n            cp.GenerateInMemory = true;\n            cp.IncludeDebugInformation = false; \n            \n            CompilerResults cr = vbcp.CompileAssemblyFromSource(cp, vbcode);\n            if(cr.Errors.Count > 0)\n            {\n                StringBuilder err = new StringBuilder(string.Format(\"Code has {0} error(s).\", cr.Errors.Count));\n                foreach (CompilerError ce in cr.Errors)\n                {\n                    lbErrors.Items.Add(string.Format(\"Ln {0}- {1}\", ce.Line - pre_lines, ce.ErrorText));\n                }\n            }\n            else\n                MessageBox.Show(Resources.Strings.CodeCtl_Show_NoErrors, Resources.Strings.CodeCtl_Show_CodeVerification);\n\n            return ;\n        }\n\n        private void lbErrors_SelectedIndexChanged(object sender, System.EventArgs e)\n        {\n            if (lbErrors.Items.Count == 0)\n                return;\n                         \n            string line = lbErrors.Items[lbErrors.SelectedIndex] as string;\n            if (!line.StartsWith(\"Ln\"))\n                return;\n\n            int l = line.IndexOf('-');\n            if (l < 0)\n                return;\n            line = line.Substring(3, l-3);\n            try\n            {\n                int i = Convert.ToInt32(line);\n                Goto(i);\n            }\n            catch {}\t\t// we don't care about the error\n            return;\n        }\n\n        public void Goto(int nLine)\n        {\t\n            int offset = 0; \n            nLine = Math.Min(nLine, tbCode.Lines.Length);\t\t// don't go off the end\n\n            for ( int i = 0; i < nLine - 1 && i < tbCode.Lines.Length; ++i ) \n                offset += (this.tbCode.Lines[i].Length + 2); \n\n            Control savectl = this.ActiveControl;\n            tbCode.Focus(); \n            tbCode.Select( offset, this.tbCode.Lines[nLine > 0? nLine-1: 0].Length);\n            this.ActiveControl = savectl;\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "RdlDesign/CodeCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Visual Basic Function Code</value>\n  </data>\n  <data name=\"&gt;&gt;lbErrors.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"lbErrors.HorizontalScrollbar\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"splitter1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 252</value>\n  </data>\n  <data name=\"tbCode.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Name\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"lbErrors.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Bottom, Left</value>\n  </data>\n  <data name=\"&gt;&gt;bCheckSyntax.Name\" xml:space=\"preserve\">\n    <value>bCheckSyntax</value>\n  </data>\n  <data name=\"&gt;&gt;splitter1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Splitter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"tbCode.ScrollBars\" type=\"System.Windows.Forms.ScrollBars, System.Windows.Forms\">\n    <value>Both</value>\n  </data>\n  <data name=\"tbCode.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Bottom, Left, Right</value>\n  </data>\n  <data name=\"lbErrors.IntegralHeight\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"splitter1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;tbCode.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"panel1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>439, 252</value>\n  </data>\n  <data name=\"&gt;&gt;lbErrors.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;lbErrors.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"panel1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;splitter1.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbCode.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"lbErrors.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>144, 16</value>\n  </data>\n  <data name=\"bCheckSyntax.Text\" xml:space=\"preserve\">\n    <value>Check Syntax</value>\n  </data>\n  <data name=\"&gt;&gt;splitter1.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"bCheckSyntax.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>82, 23</value>\n  </data>\n  <data name=\"bCheckSyntax.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>365, 3</value>\n  </data>\n  <data name=\"&gt;&gt;bCheckSyntax.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbCode.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>87, 0</value>\n  </data>\n  <data name=\"&gt;&gt;bCheckSyntax.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"panel1.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Bottom, Left, Right</value>\n  </data>\n  <data name=\"lbErrors.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bCheckSyntax.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"tbCode.Multiline\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbCode.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>98, 6</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>472, 288</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Msgs</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>69, 15</value>\n  </data>\n  <data name=\"bCheckSyntax.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>15, 7</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"lbErrors.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>82, 252</value>\n  </data>\n  <data name=\"splitter1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"&gt;&gt;tbCode.Name\" xml:space=\"preserve\">\n    <value>tbCode</value>\n  </data>\n  <data name=\"panel1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>13, 31</value>\n  </data>\n  <data name=\"&gt;&gt;lbErrors.Name\" xml:space=\"preserve\">\n    <value>lbErrors</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>CodeCtl</value>\n  </data>\n  <data name=\"tbCode.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>352, 252</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbCode.WordWrap\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"&gt;&gt;bCheckSyntax.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;splitter1.Name\" xml:space=\"preserve\">\n    <value>splitter1</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/CodeCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>97, 6</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>161, 16</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Код функции на Visual Basic</value>\n  </data>\n  <data name=\"bCheckSyntax.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>350, 3</value>\n  </data>\n  <data name=\"bCheckSyntax.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>97, 23</value>\n  </data>\n  <data name=\"bCheckSyntax.Text\" xml:space=\"preserve\">\n    <value>Проверить код</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Сообщения</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/ColorPicker.cs",
    "content": "using System.Drawing;\n\nusing System.Windows.Forms;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// It's very crazy control. Need replace it. TODO\n\t/// </summary>\n    public class ColorPicker : ComboBox\n    { \n        private const int RECTCOLOR_LEFT = 4;\n        private const int RECTCOLOR_TOP = 2;\n        private const int RECTCOLOR_WIDTH = 10;\n        ColorPickerPopup _DropListBox;\n\n        public ColorPicker()\n        {\n            DrawMode = DrawMode.OwnerDrawFixed;\n            DropDownStyle = ComboBoxStyle.DropDownList; // DropDownList\n            DropDownHeight = 1;\n            Font = new Font(\"Arial\", 8, FontStyle.Bold | FontStyle.Italic);\n\n            _DropListBox = new ColorPickerPopup(this);\n\n\t\t\tif (!DesignMode)\n\t\t\t{\n\t\t\t\tItems.AddRange(StaticLists.ColorList);\n\t\t\t}\n        }\n\n        public override string Text\n        {\n            get\n            {\n                return base.Text;\n            }\n            set\n            {\n                string v = value == null ? \"\" : value;\n                if (!this.Items.Contains(v))    // make sure item is always in the list\n                    this.Items.Add(v);\n                base.Text = v;\n            }\n        }\n        protected override void OnDrawItem(DrawItemEventArgs e)\n        {\n            Graphics g = e.Graphics;\n            Color BlockColor = Color.Empty;\n            int left = RECTCOLOR_LEFT;\n            if (e.State == DrawItemState.Selected || e.State == DrawItemState.None)\n                e.DrawBackground();\n            if (e.Index == -1)\n            {\n                BlockColor = SelectedIndex < 0 ? BackColor : DesignerUtility.ColorFromHtml(this.Text, Color.Empty);\n            }\n            else\n                BlockColor = DesignerUtility.ColorFromHtml((string)this.Items[e.Index], Color.Empty);\n            // Fill rectangle\n            if (BlockColor.IsEmpty && this.Text.StartsWith(\"=\"))\n            {\n                g.DrawString(\"fx\", this.Font, Brushes.Black, e.Bounds);\n            }\n            else\n            {\n                g.FillRectangle(new SolidBrush(BlockColor), left, e.Bounds.Top + RECTCOLOR_TOP, RECTCOLOR_WIDTH,\n                    ItemHeight - 2 * RECTCOLOR_TOP);\n            }\n            base.OnDrawItem(e);\n        }\n\n        protected override void OnDropDown(System.EventArgs e)\n        {\n            _DropListBox.Location = this.PointToScreen(new Point(0, this.Height));\n            _DropListBox.Show();\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/ColorPickerPopup.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    public partial class ColorPickerPopup : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tColorPicker _ColorPicker;\nprivate Label lStatus;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n            this.lStatus = new System.Windows.Forms.Label();\n            this.SuspendLayout();\n            // \n            // lStatus\n            // \n            this.lStatus.Dock = System.Windows.Forms.DockStyle.Bottom;\n            this.lStatus.Location = new System.Drawing.Point(0, 174);\n            this.lStatus.Name = \"lStatus\";\n            this.lStatus.Size = new System.Drawing.Size(233, 13);\n            this.lStatus.TabIndex = 0;\n            this.lStatus.Text = \"Color\";\n            // \n            // ColorPickerPopup\n            // \n            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);\n            this.CausesValidation = false;\n            this.ClientSize = new System.Drawing.Size(233, 187);\n            this.ControlBox = false;\n            this.Controls.Add(this.lStatus);\n            this.DoubleBuffered = true;\n            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;\n            this.MaximizeBox = false;\n            this.MinimizeBox = false;\n            this.Name = \"ColorPickerPopup\";\n            this.ShowIcon = false;\n            this.ShowInTaskbar = false;\n            this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;\n            this.TopMost = true;\n            this.Deactivate += new System.EventHandler(this.lbColors_Hide);\n            this.Load += new System.EventHandler(this.ColorPickerPopup_Load); \n            this.Shown += new System.EventHandler(this.ColorPickerPopup_Shown);\n            this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ColorPickerPopup_KeyPress);\n            this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.ColorPickerPopup_MouseMove);\n            this.Leave += new System.EventHandler(this.lbColors_Hide);\n            this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.ColorPickerPopup_MouseDown);\n            this.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/ColorPickerPopup.cs",
    "content": "\nusing System;\nusing System.Drawing;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Windows.Forms;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for DialogNew.\n\t/// </summary>\n\tpublic partial class ColorPickerPopup \n    {\n        private const int ITEM_HEIGHT = 12;\n        private const int ITEM_PAD = 2;\n        \n        public ColorPickerPopup(ColorPicker cp)\n\t\t{\n\t\t\t//\n\t\t\t// Required for Windows Form Designer support\n\t\t\t//\n\t\t\tInitializeComponent();\n\n            lStatus.Text = \"\";\n            _ColorPicker = cp;\n\t\t}\n\n        protected override void OnPaint(PaintEventArgs e)\n        {\n            Graphics g = e.Graphics;\n\n            //base.OnPaint(e);\n            int row = 0;\n            int col = 0;\n            int max_rows = MaxRows;\n            int max_cols = MaxColumns;\n            int col_width = ColumnWidth;\n\n            foreach (string c in StaticLists.ColorListColorSort)\n            {\n                Color clr = DesignerUtility.ColorFromHtml(c, Color.Empty);\n                g.FillRectangle(new SolidBrush(clr), \n                    new Rectangle((col * col_width)+ITEM_PAD, (row * ITEM_HEIGHT)+ITEM_PAD, col_width-ITEM_PAD, ITEM_HEIGHT-ITEM_PAD));\n                row++;\n                if (row >= max_rows)\n                {\n                    row = 0;\n                    col++;\n                }\n            }\n        }\n\n        private void lbColors_Hide(object sender, EventArgs e)\n        {\n            this.Hide();\n        }\n\n        private void ColorPickerPopup_MouseDown(object sender, MouseEventArgs e)\n        {\n            int col = e.Location.X / ColumnWidth;\n            int row = e.Location.Y / ITEM_HEIGHT;\n\n            int item = col * MaxRows + row;\n\n            if (item >= StaticLists.ColorListColorSort.Length)\n                return;\n\n            _ColorPicker.Text = StaticLists.ColorListColorSort[item];\n            this.Hide();\n        }\n\n        private void ColorPickerPopup_MouseMove(object sender, MouseEventArgs e)\n        {\n            string status;\n            if (e.Location.Y > this.Height - lStatus.Height)    // past bottom of rectangle\n                status = \"\";\n            else\n            {                                                   // calc position in box\n                int col = e.Location.X / ColumnWidth;\n                int row = e.Location.Y / ITEM_HEIGHT;\n\n                int item = col * MaxRows + row;\n\n                status = item >= StaticLists.ColorListColorSort.Length ? \"\" : StaticLists.ColorListColorSort[item] as string;\n            }\n            lStatus.Text = status;\n        }\n\n        private int MaxRows\n        {\n            get { return (this.Height - lStatus.Height) / ITEM_HEIGHT; }\n        }\n        private int MaxColumns\n        {\n            get\n            {\n                int max_rows = MaxRows;\n                return (StaticLists.ColorListColorSort.Length / max_rows) + (StaticLists.ColorListColorSort.Length % max_rows == 0 ? 0 : 1);\n            }\n        }\n        private int ColumnWidth\n        {\n            get { return this.Width / MaxColumns; }\n        }\n\n        private void ColorPickerPopup_Shown(object sender, EventArgs e)\n        {\n            lStatus.Text = _ColorPicker.Text;\n        }\n\n        private void ColorPickerPopup_KeyPress(object sender, KeyPressEventArgs e)\n        {\n            if ((int)e.KeyChar == (int)System.Windows.Forms.Keys.Escape)\n            {\n                Hide();\n            }\n        }\n        private void ColorPickerPopup_Load(object sender, EventArgs e)\n        {\n        }\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/ColorPickerPopup.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "RdlDesign/Conversions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\tpublic class Conversions\n\t{\n\n\t\tpublic static int MeasurementTypeAsHundrethsOfAnInch(string value)\n\t\t{\n\t\t\tstring measurementType = value.Trim().ToLower();\n\t\t\tstring measurementValue = \"0\";\n\t\t\tif (measurementType.Length >= 2)\n\t\t\t{\n\t\t\t\tmeasurementValue = measurementType.Substring(0, measurementType.Length - 2);\n\t\t\t\tmeasurementType = measurementType.Substring(measurementType.Length - 2);\n\t\t\t}\n\n\t\t\tif (measurementType == \"mm\")\n\t\t\t{\n\t\t\t\t// metric.  Convert to imperial for now\n\t\t\t\treturn (int)((decimal.Parse(measurementValue) / 25.4m) * 100);\n\t\t\t}\n\t\t\telse if(measurementType == \"in\")\n\t\t\t{\n\t\t\t\t// assume imperial\n\t\t\t\treturn (int)(decimal.Parse(measurementValue) * 100);\n\t\t\t}\n\n\t\t\tthrow new Exception(\"Invalid measurment type.  mm and in are only supported types\");\n\n\n\n\t\t}\n\n\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/CustomReportItemCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.Text;\nusing System.IO;\nusing System.Reflection;\nusing Majorsilence.Reporting.Rdl;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// CustomReportItemCtl provides property values for a CustomReportItem\n\t/// </summary>\n\tinternal class CustomReportItemCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n        private List<XmlNode> _ReportItems;\n        private DesignXmlDraw _Draw;\n        private string _Type;\n        private PropertyGrid pgProps;\n        private Button bExpr;\n        private XmlNode _RiNode;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n        internal CustomReportItemCtl(DesignXmlDraw dxDraw, List<XmlNode> reportItems)\n\t\t{\n\t\t\t_Draw = dxDraw;\n            this._ReportItems = reportItems;\n            _Type = _Draw.GetElementValue(_ReportItems[0], \"Type\", \"\");\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues();\t\t\t\n\t\t}\n\n\t\tprivate void InitValues()\n\t\t{\n            ICustomReportItem cri=null;\n            try\n            {\n                cri = RdlEngineConfig.CreateCustomReportItem(_Type);\n                _RiNode = _Draw.GetNamedChildNode(_ReportItems[0], \"CustomProperties\").Clone();\n                object props = cri.GetPropertiesInstance(_RiNode);\n                pgProps.SelectedObject = props;\n            }\n            catch\n            {\n                return;\n            }\n            finally\n            {\n                if (cri != null)\n                    cri.Dispose();\n            }\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CustomReportItemCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.pgProps = new System.Windows.Forms.PropertyGrid();\n\t\t\tthis.bExpr = new System.Windows.Forms.Button();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// pgProps\n\t\t\t// \n\t\t\tresources.ApplyResources(this.pgProps, \"pgProps\");\n\t\t\tthis.pgProps.Name = \"pgProps\";\n\t\t\t// \n\t\t\t// bExpr\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bExpr, \"bExpr\");\n\t\t\tthis.bExpr.Name = \"bExpr\";\n\t\t\tthis.bExpr.Tag = \"sd\";\n\t\t\tthis.bExpr.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// CustomReportItemCtl\n\t\t\t// \n\t\t\tthis.Controls.Add(this.bExpr);\n\t\t\tthis.Controls.Add(this.pgProps);\n\t\t\tthis.Name = \"CustomReportItemCtl\";\n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n\t\tpublic bool IsValid()\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n            ICustomReportItem cri = null;\n            try\n            {\n                cri = RdlEngineConfig.CreateCustomReportItem(_Type);\n                foreach (XmlNode node in _ReportItems)\n                {\n                    cri.SetPropertiesInstance(_Draw.GetNamedChildNode(node, \"CustomProperties\"), \n                        pgProps.SelectedObject);\n                }\n            }\n            catch\n            {\n                return;\n            }\n            finally\n            {\n                if (cri != null)\n                    cri.Dispose();\n            }\n            return;\n\t\t}\n\n        private void bExpr_Click(object sender, EventArgs e)\n        {\n            GridItem gi = this.pgProps.SelectedGridItem;\n            \n            XmlNode sNode = _ReportItems[0];\n            DialogExprEditor ee = new DialogExprEditor(_Draw, gi.Value.ToString(), sNode, false);\n            try\n            {\n                DialogResult dr = ee.ShowDialog();\n                if (dr == DialogResult.OK)\n                {\n                    // There's probably a better way without reflection but this works fine.\n                    \n                    object sel = pgProps.SelectedObject;\n                    gi.PropertyDescriptor.SetValue(sel, ee.Expression); \n                    gi.Select();\n                }\n            }\n            finally\n            {\n                ee.Dispose();\n            }\n        }\n\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/CustomReportItemCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"pgProps.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>13, 17</value>\n  </data>\n  <data name=\"pgProps.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>406, 260</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"pgProps.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;pgProps.Name\" xml:space=\"preserve\">\n    <value>pgProps</value>\n  </data>\n  <data name=\"&gt;&gt;pgProps.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.PropertyGrid, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;pgProps.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;pgProps.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"bExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"bExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>422, 57</value>\n  </data>\n  <data name=\"bExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"bExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"bExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"bExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;bExpr.Name\" xml:space=\"preserve\">\n    <value>bExpr</value>\n  </data>\n  <data name=\"&gt;&gt;bExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bExpr.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bExpr.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>464, 304</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>CustomReportItemCtl</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DataSetRowsCtl.Designer.cs",
    "content": "namespace Majorsilence.Reporting.RdlDesign\n{\n\tpartial class DataSetRowsCtl\n\t{\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\t\t\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DataSetRowsCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.dgRows = new System.Windows.Forms.DataGridView();\n\t\t\tthis.bDelete = new System.Windows.Forms.Button();\n\t\t\tthis.bUp = new System.Windows.Forms.Button();\n\t\t\tthis.bDown = new System.Windows.Forms.Button();\n\t\t\tthis.chkRowsFile = new System.Windows.Forms.CheckBox();\n\t\t\tthis.tbRowsFile = new System.Windows.Forms.TextBox();\n\t\t\tthis.bRowsFile = new System.Windows.Forms.Button();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.bLoad = new System.Windows.Forms.Button();\n\t\t\tthis.bClear = new System.Windows.Forms.Button();\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.dgRows)).BeginInit();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// dgRows\n\t\t\t// \n\t\t\tresources.ApplyResources(this.dgRows, \"dgRows\");\n\t\t\tthis.dgRows.DataMember = \"\";\n\t\t\tthis.dgRows.Name = \"dgRows\";\n\t\t\t// \n\t\t\t// bDelete\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bDelete, \"bDelete\");\n\t\t\tthis.bDelete.Name = \"bDelete\";\n\t\t\tthis.bDelete.Click += new System.EventHandler(this.bDelete_Click);\n\t\t\t// \n\t\t\t// bUp\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bUp, \"bUp\");\n\t\t\tthis.bUp.Name = \"bUp\";\n\t\t\tthis.bUp.Click += new System.EventHandler(this.bUp_Click);\n\t\t\t// \n\t\t\t// bDown\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bDown, \"bDown\");\n\t\t\tthis.bDown.Name = \"bDown\";\n\t\t\tthis.bDown.Click += new System.EventHandler(this.bDown_Click);\n\t\t\t// \n\t\t\t// chkRowsFile\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkRowsFile, \"chkRowsFile\");\n\t\t\tthis.chkRowsFile.Name = \"chkRowsFile\";\n\t\t\tthis.chkRowsFile.CheckedChanged += new System.EventHandler(this.chkRowsFile_CheckedChanged);\n\t\t\t// \n\t\t\t// tbRowsFile\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbRowsFile, \"tbRowsFile\");\n\t\t\tthis.tbRowsFile.Name = \"tbRowsFile\";\n\t\t\t// \n\t\t\t// bRowsFile\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bRowsFile, \"bRowsFile\");\n\t\t\tthis.bRowsFile.Name = \"bRowsFile\";\n\t\t\tthis.bRowsFile.Click += new System.EventHandler(this.bRowsFile_Click);\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.ForeColor = System.Drawing.Color.Maroon;\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// bLoad\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bLoad, \"bLoad\");\n\t\t\tthis.bLoad.Name = \"bLoad\";\n\t\t\tthis.bLoad.Click += new System.EventHandler(this.bLoad_Click);\n\t\t\t// \n\t\t\t// bClear\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bClear, \"bClear\");\n\t\t\tthis.bClear.Name = \"bClear\";\n\t\t\tthis.bClear.Click += new System.EventHandler(this.bClear_Click);\n\t\t\t// \n\t\t\t// DataSetRowsCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.bClear);\n\t\t\tthis.Controls.Add(this.bLoad);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Controls.Add(this.bRowsFile);\n\t\t\tthis.Controls.Add(this.tbRowsFile);\n\t\t\tthis.Controls.Add(this.chkRowsFile);\n\t\t\tthis.Controls.Add(this.bDown);\n\t\t\tthis.Controls.Add(this.bUp);\n\t\t\tthis.Controls.Add(this.bDelete);\n\t\t\tthis.Controls.Add(this.dgRows);\n\t\t\tthis.Name = \"DataSetRowsCtl\";\n\t\t\tthis.VisibleChanged += new System.EventHandler(this.DataSetRowsCtl_VisibleChanged);\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.dgRows)).EndInit();\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\t\t\n\t\tprivate System.Windows.Forms.Button bDelete;\n\t\tprivate System.Windows.Forms.Button bUp;\n\t\tprivate System.Windows.Forms.Button bDown;\n\t\tprivate System.Windows.Forms.CheckBox chkRowsFile;\n\t\tprivate System.Windows.Forms.Button bRowsFile;\n\t\tprivate System.Windows.Forms.DataGridView dgRows;\n\t\tprivate System.Windows.Forms.TextBox tbRowsFile;\n\t\tprivate System.Windows.Forms.Label label1;\n\t\tprivate System.Windows.Forms.Button bLoad;\n\t\tprivate System.Windows.Forms.Button bClear;\n\t}\n}"
  },
  {
    "path": "RdlDesign/DataSetRowsCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.Text;\nusing System.IO;\nusing System.Globalization;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Control supports the properties for DataSet/Rows elements.  This is an extension to \n\t/// the RDL specification allowing data to be defined within a report.\n\t/// </summary>\n\tinternal partial class DataSetRowsCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n\t\tprivate DesignXmlDraw _Draw;\n\t\tprivate DataSetValues _dsv;\n\t\tprivate XmlNode _dsNode;\n\t\tprivate DataTable _DataTable;\n\n\t\tinternal DataSetRowsCtl(DesignXmlDraw dxDraw, XmlNode dsNode, DataSetValues dsv)\n\t\t{\n\t\t\t_Draw = dxDraw;\n\t\t\t_dsv = dsv;\n\t\t\t_dsNode = dsNode;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues();\t\t\t\n\t\t}\n\n\t\tprivate void InitValues()\n\t\t{\n\t\t\tCreateDataTable();\t\t// create data table based on the existing fields\n\n\t\t\tXmlNode rows = _Draw.GetNamedChildNode(_dsNode, \"Rows\");\n\t\t\tif (rows == null)\n\t\t\t\trows = _Draw.GetNamedChildNode(_dsNode, \"fyi:Rows\");\n\t\t\tstring file=null;\n\t\t\tif (rows != null)\n\t\t\t{\n\t\t\t\tfile = _Draw.GetElementAttribute(rows, \"File\", null);\n\t\t\t\tPopulateRows(rows);\n\t\t\t}\n\n\t\t\tthis.dgRows.DataSource = _DataTable;\n\t\t\tif (file != null)\n\t\t\t{\n\t\t\t\ttbRowsFile.Text = file;\n\t\t\t\tthis.chkRowsFile.Checked = true;\n\t\t\t}\n\n\t\t\tchkRowsFile_CheckedChanged(this, new EventArgs());\n\t\t}\n\n\t\tprivate void CreateDataTable()\n\t\t{\n\t\t\t_DataTable = new DataTable();\n\n\t\t\tforeach (DataRow dr in _dsv.Fields.Rows)\n\t\t\t{\n\t\t\t\tif (dr[0] == DBNull.Value)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (dr[2] == DBNull.Value)\n\t\t\t\t{}\n\t\t\t\telse if (((string) dr[2]).Length > 0)\n\t\t\t\t\tcontinue;\n\t\t\t\tstring name = (string) dr[0];\n\n                string type = dr[\"TypeName\"] as string;\n                Type t = type == null || type.Length == 0? typeof(string): \n                    Majorsilence.Reporting.Rdl.DataType.GetStyleType(type);\n\t\t\t\t_DataTable.Columns.Add(new DataColumn(name,t));\n\t\t\t}\n\t\t}\n\n\t\tprivate void PopulateRows(XmlNode rows)\n\t\t{\n\t\t\tobject[] rowValues = new object[_DataTable.Columns.Count];\n\n            bool bSkipMsg = false;\n            foreach (XmlNode rNode in rows.ChildNodes)\n\t\t\t{\n\t\t\t\tif (rNode.Name != \"Row\")\n\t\t\t\t\tcontinue;\n\t\t\t\tint col=0;\n\t\t\t\tbool bBuiltRow=false;\t// if all columns will be null we won't add the row\n\t\t\t\tforeach (DataColumn dc in _DataTable.Columns)\n\t\t\t\t{\n\t\t\t\t\tXmlNode dNode = _Draw.GetNamedChildNode(rNode, dc.ColumnName);\n\t\t\t\t\tif (dNode != null)\n\t\t\t\t\t\tbBuiltRow = true;\n\n                    if (dNode == null)\n                        rowValues[col] = null;\n                    else if (dc.DataType == typeof(string))\n                        rowValues[col] = dNode.InnerText;\n                    else\n                    {\n                        object box;\n                        try\n                        {\n                            if (dc.DataType == typeof(int))\n                                box = Convert.ToInt32(dNode.InnerText, NumberFormatInfo.InvariantInfo);\n                            else if (dc.DataType == typeof(decimal))\n                                box = Convert.ToDecimal(dNode.InnerText, NumberFormatInfo.InvariantInfo);\n                            else if (dc.DataType == typeof(long))\n                                box = Convert.ToInt64(dNode.InnerText, NumberFormatInfo.InvariantInfo);\n                            else if (DesignerUtility.IsNumeric(dc.DataType))    // catch all numeric\n                                box = Convert.ToDouble(dNode.InnerText, NumberFormatInfo.InvariantInfo);\n                            else if (dc.DataType == typeof(DateTime))\n                            {\n                                box = Convert.ToDateTime(dNode.InnerText,\n                                    System.Globalization.DateTimeFormatInfo.InvariantInfo);\n                            }\n                            else\n                            {\n                                box = dNode.InnerText;\n                            }\n                            rowValues[col] = box;\n                        }\n                        catch (Exception e)\n                        {\n                            if (!bSkipMsg)\n                            {\n                                if (MessageBox.Show(string.Format(Strings.DataSetRowsCtl_ShowB_UnableConvert,\n                                        dc.DataType, dNode.InnerText, e.Message) + Environment.NewLine + Strings.DataSetRowsCtl_ShowB_WantSeeErrors,\n                                        Strings.DataSetRowsCtl_ShowB_ErrorReadingDataRows, MessageBoxButtons.YesNo) == DialogResult.No)\n                                    bSkipMsg = true;\n                            }\n                            rowValues[col] = dNode.InnerText;\n                        }\n                    }\n\t\t\t\t\tcol++;\n\t\t\t\t}\n\t\t\t\tif (bBuiltRow)\n\t\t\t\t\t_DataTable.Rows.Add(rowValues);\n\t\t\t}\n\t\t}\t\t\n\n\t\tpublic bool IsValid()\n\t\t{\n\t\t\tif (chkRowsFile.Checked && tbRowsFile.Text.Length == 0)\n\t\t\t{\n\t\t\t\tMessageBox.Show(Strings.DataSetRowsCtl_ShowC_FileNameRequired);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// Remove the old row\n\t\t\tXmlNode rows = _Draw.GetNamedChildNode(this._dsNode, \"Rows\");\n\t\t\tif (rows == null)\n\t\t\t\trows =  _Draw.GetNamedChildNode(this._dsNode, \"fyi:Rows\");\n\t\t\tif (rows != null)\n\t\t\t\t_dsNode.RemoveChild(rows);\n\t\t\t// different result if we just want the file\n\t\t\tif (this.chkRowsFile.Checked)\n\t\t\t{\n\t\t\t\trows = _Draw.GetCreateNamedChildNode(_dsNode, \"fyi:Rows\");\n\t\t\t\t_Draw.SetElementAttribute(rows, \"File\", this.tbRowsFile.Text);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\trows = GetXmlData();\n\t\t\t\tif (rows.HasChildNodes)\n\t\t\t\t\t_dsNode.AppendChild(rows);\n\t\t\t}\n\t\t}\n\n\t\tprivate void bDelete_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tthis._DataTable.Rows.RemoveAt(this.dgRows.CurrentRow.Index);\n\t\t}\n\n\t\tprivate void bUp_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cr = dgRows.CurrentRow.Index;\n\t\t\tif (cr <= 0)\t\t// already at the top\n\t\t\t\treturn;\n\t\t\t\n\t\t\tSwapRow(_DataTable.Rows[cr-1], _DataTable.Rows[cr]);\n            if (cr >= 0 && cr < dgRows.Rows.Count)\n            {\n                dgRows.CurrentCell = dgRows.Rows[cr - 1].Cells[0];\n            }\n        }\n\n\t\tprivate void bDown_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cr = dgRows.CurrentRow.Index;\n\t\t\tif (cr < 0)\t\t\t// invalid index\n\t\t\t\treturn;\n\t\t\tif (cr + 1 >= _DataTable.Rows.Count)\n\t\t\t\treturn;\t\t\t// already at end\n\t\t\t\n\t\t\tSwapRow(_DataTable.Rows[cr+1], _DataTable.Rows[cr]);\n            if (cr >= 0 && cr < dgRows.Rows.Count)\n            {\n                dgRows.CurrentCell = dgRows.Rows[cr + 1].Cells[0];\n            }\n        }\n\n\t\tprivate void SwapRow(DataRow tdr, DataRow fdr)\n\t\t{\n\t\t\t// Loop thru all the columns in a row and swap the data\n\t\t\tfor (int ci=0; ci < _DataTable.Columns.Count; ci++)\n\t\t\t{\n\t\t\t\tobject save = tdr[ci];\n\t\t\t\ttdr[ci] = fdr[ci];\n\t\t\t\tfdr[ci] = save;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void chkRowsFile_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tthis.tbRowsFile.Enabled = chkRowsFile.Checked;\n\t\t\tthis.bRowsFile.Enabled = chkRowsFile.Checked;\n\n\t\t\tthis.bDelete.Enabled = !chkRowsFile.Checked;\n\t\t\tthis.bUp.Enabled = !chkRowsFile.Checked;\n\t\t\tthis.bDown.Enabled = !chkRowsFile.Checked;\n\t\t\tthis.dgRows.Enabled = !chkRowsFile.Checked;\n\t\t}\n\n\t\tprivate void bRowsFile_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tOpenFileDialog ofd = new OpenFileDialog();\n\t\t\tofd.Filter = Strings.DataSetRowsCtl_bRowsFile_Click_XMLFilesFilter;\n\t\t\tofd.FilterIndex = 1;\n\t\t\tofd.FileName = \"*.xml\";\n\n\t\t\tofd.Title = Strings.DataSetRowsCtl_bRowsFile_Click_XMLFilesTitle;\n\t\t\tofd.DefaultExt = \"xml\";\n\t\t\tofd.AddExtension = true;\n\n            try\n            {\n                if (ofd.ShowDialog() == DialogResult.OK)\n                {\n                    string file = Path.GetFileName(ofd.FileName);\n\n                    this.tbRowsFile.Text = file;\n                }\n            }\n            finally\n            {\n                ofd.Dispose();\n            }\n\t\t}\n\n\t\tprivate bool DidFieldsChange()\n\t\t{\n\t\t\tint col=0;\n\t\t\tforeach (DataRow dr in _dsv.Fields.Rows)\n\t\t\t{\n\t\t\t\tif (col >= _DataTable.Columns.Count)\n\t\t\t\t\treturn true;\n\n\t\t\t\tif (dr[0] == DBNull.Value)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (dr[2] == DBNull.Value)\n\t\t\t\t{}\n\t\t\t\telse if (((string) dr[2]).Length > 0)\n\t\t\t\t\tcontinue;\n\t\t\t\tstring name = (string) (dr[1] == DBNull.Value? dr[0]: dr[1]);\n\t\t\t\tif (_DataTable.Columns[col].ColumnName != name)\n\t\t\t\t\treturn true;\n\t\t\t\tcol++;\n\t\t\t}\n\n\t\t\tif (col == _DataTable.Columns.Count)\n\t\t\t\treturn false;\n\t\t\telse\n\t\t\t\treturn true;\n\t\t}\n\n\t\tprivate XmlNode GetXmlData()\n\t\t{\n\t\t\tXmlDocumentFragment fDoc = _Draw.ReportDocument.CreateDocumentFragment();\n\n\t\t\tXmlNode rows = _Draw.CreateElement(fDoc, \"fyi:Rows\", null);\n\t\t\tforeach (DataRow dr in _DataTable.Rows)\n\t\t\t{\n\t\t\t\tXmlNode row = _Draw.CreateElement(rows, \"Row\", null);\n\t\t\t\tbool bRowBuilt=false;\n\t\t\t\tforeach (DataColumn dc in _DataTable.Columns)\n\t\t\t\t{\n\t\t\t\t\tif (dr[dc] == DBNull.Value)\n\t\t\t\t\t\tcontinue;\n                    string val;\n                    if (dc.DataType == typeof(DateTime))\n                    {\n                        val = Convert.ToString(dr[dc], \n                            System.Globalization.DateTimeFormatInfo.InvariantInfo);\n                    }\n                    else\n                    {\n                        val = Convert.ToString(dr[dc], NumberFormatInfo.InvariantInfo);\n                    }\n\t\t\t\t\tif (val == null)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t_Draw.CreateElement(row, dc.ColumnName, val);\n\t\t\t\t\tbRowBuilt = true;\t// we've populated at least one column; so keep row\n\t\t\t\t}\n\t\t\t\tif (!bRowBuilt)\n\t\t\t\t\trows.RemoveChild(row);\n\t\t\t}\n\t\t\treturn rows;\n\t\t}\n\n\t\tprivate void DataSetRowsCtl_VisibleChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tif (!DidFieldsChange())\t\t// did the structure of the fields change\n\t\t\t\treturn;\n\n\t\t\t// Need to reset the data; this assumes that some of the data rows are similar\n\t\t\tXmlNode rows = GetXmlData();\t// get old data\n\t\t\t\n\t\t\tCreateDataTable();\t\t\t\t// this recreates the datatable\n\n\t\t\tPopulateRows(rows);\t\t\t\t// repopulate the datatable\n\n\t\t\tthis.dgRows.DataSource = _DataTable;\t// this recreates the datatable so reset grid\n\t\t}\n\n\t\tprivate void bClear_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tthis._DataTable.Rows.Clear();\n\t\t}\n\n\t\tprivate void bLoad_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\t// Load the data from the SQL; we append the data to what already exists\n\t\t\ttry\n\t\t\t{\n\t\t\t\t// Obtain the connection information\n\t\t\t\tXmlNode rNode = _Draw.GetReportNode();\n\t\t\t\tXmlNode dsNode = _Draw.GetNamedChildNode(rNode, \"DataSources\");\n\t\t\t\tif (dsNode == null)\n\t\t\t\t\treturn;\n\t\t\t\tXmlNode datasource=null;\n\t\t\t\tforeach (XmlNode dNode in dsNode)\n\t\t\t\t{\t\n\t\t\t\t\tif (dNode.Name != \"DataSource\")\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tXmlAttribute nAttr = dNode.Attributes[\"Name\"];\n\t\t\t\t\tif (nAttr == null)\t// shouldn't really happen\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tif (nAttr.Value != _dsv.DataSourceName)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tdatasource = dNode;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (datasource == null)\n\t\t\t\t{\n\t\t\t\t\tMessageBox.Show(string.Format(Strings.DataSetRowsCtl_Show_DatasourceNotFound, _dsv.DataSourceName), Strings.DataSetRowsCtl_Show_LoadFailed);\n\t\t\t\t\treturn;\n\t\t\t\t}\n                // get the connection information\n                string connection = \"\";\n                string dataProvider = \"\";\n\n                string dataSourceReference = _Draw.GetElementValue(datasource, \"DataSourceReference\", null);\n                if (dataSourceReference != null)\n                {\n                    //  This is not very pretty code since it is assuming the structure of the windows parenting.\n                    //    But there isn't any other way to get this information from here.\n                    Control p = _Draw;\n                    MDIChild mc = null;\n                    while (p != null && !(p is RdlDesigner))\n                    {\n                        if (p is MDIChild)\n                            mc = (MDIChild)p;\n\n                        p = p.Parent;\n                    }\n                    if (p == null || mc == null || mc.SourceFile == null)\n                    {\n                        MessageBox.Show(Strings.DataSetRowsCtl_ShowC_UnableLocateDSR);\n                        return;\n                    }\n                    Uri filename = new Uri(Path.GetDirectoryName(mc.SourceFile.LocalPath) + Path.DirectorySeparatorChar + dataSourceReference);\n                    if (!DesignerUtility.GetSharedConnectionInfo((RdlDesigner)p, filename.LocalPath, out dataProvider, out connection))\n                    {\n                        return;\n                    }\n                }\n                else\n                {\n                    XmlNode cpNode = DesignXmlDraw.FindNextInHierarchy(datasource, \"ConnectionProperties\", \"ConnectString\");\n                    connection = cpNode == null ? \"\" : cpNode.InnerText;\n\n                    XmlNode datap = DesignXmlDraw.FindNextInHierarchy(datasource, \"ConnectionProperties\", \"DataProvider\");\n                    dataProvider = datap == null ? \"\" : datap.InnerText;\n                }\n\t\t\t\t// Populate the data table\t\t\t\t\n\t\t\t\tDesignerUtility.GetSqlData(dataProvider, connection, _dsv.CommandText, null, _DataTable);\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\tMessageBox.Show(ex.Message, Strings.DataSetRowsCtl_Show_LoadFailed);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/DataSetRowsCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label1.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Microsoft Sans Serif, 8pt</value>\n  </data>\n  <data name=\"tbRowsFile.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>144, 10</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bRowsFile.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"bDown.Text\" xml:space=\"preserve\">\n    <value>Down</value>\n  </data>\n  <data name=\"&gt;&gt;bClear.Name\" xml:space=\"preserve\">\n    <value>bClear</value>\n  </data>\n  <data name=\"&gt;&gt;tbRowsFile.Name\" xml:space=\"preserve\">\n    <value>tbRowsFile</value>\n  </data>\n  <data name=\"bLoad.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>430, 212</value>\n  </data>\n  <data name=\"bClear.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>430, 135</value>\n  </data>\n  <data name=\"&gt;&gt;bRowsFile.Name\" xml:space=\"preserve\">\n    <value>bRowsFile</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bClear.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"dgRows.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 48</value>\n  </data>\n  <data name=\"bRowsFile.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"bLoad.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"chkRowsFile.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 10</value>\n  </data>\n  <data name=\"&gt;&gt;tbRowsFile.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bUp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>430, 77</value>\n  </data>\n  <data name=\"&gt;&gt;chkRowsFile.Name\" xml:space=\"preserve\">\n    <value>chkRowsFile</value>\n  </data>\n  <data name=\"bUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkRowsFile.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"tbRowsFile.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>240, 20</value>\n  </data>\n  <data name=\"bUp.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.Name\" xml:space=\"preserve\">\n    <value>bUp</value>\n  </data>\n  <data name=\"&gt;&gt;dgTableStyle.Name\" xml:space=\"preserve\">\n    <value>dgTableStyle</value>\n  </data>\n  <data name=\"bClear.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;dgRows.Name\" xml:space=\"preserve\">\n    <value>dgRows</value>\n  </data>\n  <data name=\"bDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 23</value>\n  </data>\n  <data name=\"tbRowsFile.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Left, Right</value>\n  </data>\n  <data name=\"&gt;&gt;dgRows.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>421, 32</value>\n  </data>\n  <data name=\"bRowsFile.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 23</value>\n  </data>\n  <data name=\"bUp.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"dgRows.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;dgRows.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGrid, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bDown.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>430, 106</value>\n  </data>\n  <data name=\"bDelete.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>430, 48</value>\n  </data>\n  <data name=\"bUp.Text\" xml:space=\"preserve\">\n    <value>Up</value>\n  </data>\n  <data name=\"bDelete.Text\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;bLoad.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"bDown.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"bLoad.Text\" xml:space=\"preserve\">\n    <value>Load From SQL</value>\n  </data>\n  <data name=\"&gt;&gt;tbRowsFile.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dgRows.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Name\" xml:space=\"preserve\">\n    <value>bDelete</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;bLoad.Name\" xml:space=\"preserve\">\n    <value>bLoad</value>\n  </data>\n  <data name=\"&gt;&gt;bRowsFile.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dgTableStyle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGridTableStyle, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbRowsFile.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;bLoad.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bRowsFile.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>3, 272</value>\n  </data>\n  <data name=\"bDelete.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"&gt;&gt;bLoad.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bDown.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"bLoad.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 36</value>\n  </data>\n  <data name=\"label1.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Bottom, Left</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bLoad.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"bClear.Text\" xml:space=\"preserve\">\n    <value>Clear</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkRowsFile.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>136, 20</value>\n  </data>\n  <data name=\"bDelete.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"chkRowsFile.Text\" xml:space=\"preserve\">\n    <value>Use XML file for data</value>\n  </data>\n  <data name=\"bRowsFile.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>400, 9</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>505, 304</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.Name\" xml:space=\"preserve\">\n    <value>bDown</value>\n  </data>\n  <data name=\"dgRows.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Bottom, Left, Right</value>\n  </data>\n  <data name=\"dgRows.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>416, 221</value>\n  </data>\n  <data name=\"&gt;&gt;bClear.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;chkRowsFile.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bClear.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;chkRowsFile.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"chkRowsFile.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;bRowsFile.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DataSetRowsCtl</value>\n  </data>\n  <data name=\"tbRowsFile.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;bClear.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bClear.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 23</value>\n  </data>\n  <data name=\"bRowsFile.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Warning: this panel supports an extension to the RDL specification.  This information will be ignored in RDL processors other than in fyiReporting.</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/DataSetRowsCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"bDelete.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"bUp.Text\" xml:space=\"preserve\">\n    <value>Вверх</value>\n  </data>\n  <data name=\"bDown.Text\" xml:space=\"preserve\">\n    <value>Вниз</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"chkRowsFile.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>228, 20</value>\n  </data>\n  <data name=\"chkRowsFile.Text\" xml:space=\"preserve\">\n    <value>Использовать XML файл для данных</value>\n  </data>\n  <data name=\"tbRowsFile.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>242, 10</value>\n  </data>\n  <data name=\"tbRowsFile.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>230, 20</value>\n  </data>\n  <data name=\"bRowsFile.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>478, 8</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Предупреждение: эта панель поддерживает расширение к спецификации RDL. Эта информация будет игнорироваться в других RDL процессорах.</value>\n  </data>\n  <data name=\"bLoad.Text\" xml:space=\"preserve\">\n    <value>Загрузить из SQL</value>\n  </data>\n  <data name=\"bClear.Text\" xml:space=\"preserve\">\n    <value>Очистить</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DataSetsCtl.Designer.cs",
    "content": "namespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// Summary description for StyleCtl.\n    /// </summary>\n    partial class DataSetsCtl\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.Container components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (components != null)\n                {\n                    components.Dispose();\n                }\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DataSetsCtl));\n            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();\n            this.DoubleBuffered = true;\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.panel4 = new System.Windows.Forms.Panel();\n            this.scintillaSQL = new ScintillaNET.Scintilla();\n            this.panel3 = new System.Windows.Forms.Panel();\n            this.bRefresh = new System.Windows.Forms.Button();\n            this.bEditSQL = new System.Windows.Forms.Button();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.lDataSetName = new System.Windows.Forms.Label();\n            this.tbDSName = new System.Windows.Forms.TextBox();\n            this.tbTimeout = new System.Windows.Forms.NumericUpDown();\n            this.label3 = new System.Windows.Forms.Label();\n            this.label1 = new System.Windows.Forms.Label();\n            this.cbDataSource = new System.Windows.Forms.ComboBox();\n            this.lDataSource = new System.Windows.Forms.Label();\n            this.bDeleteField = new System.Windows.Forms.Button();\n            this.dgFields = new System.Windows.Forms.DataGridView();\n            this.dgtbName = new System.Windows.Forms.DataGridViewTextBoxColumn();\n            this.dgtbQueryName = new System.Windows.Forms.DataGridViewTextBoxColumn();\n            this.dgtbValue = new System.Windows.Forms.DataGridViewTextBoxColumn();\n            this.dgtbTypeName = new System.Windows.Forms.DataGridViewComboBoxColumn();\n            this.label2 = new System.Windows.Forms.Label();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.panel4.SuspendLayout();\n            this.panel3.SuspendLayout();\n            this.panel1.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.tbTimeout)).BeginInit();\n            ((System.ComponentModel.ISupportInitialize)(this.dgFields)).BeginInit();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            resources.ApplyResources(this.splitContainer1, \"splitContainer1\");\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.panel1);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.bDeleteField);\n            this.splitContainer1.Panel2.Controls.Add(this.dgFields);\n            this.splitContainer1.Panel2.Controls.Add(this.label2);\n            // \n            // panel2\n            // \n            this.panel2.Controls.Add(this.panel4);\n            this.panel2.Controls.Add(this.panel3);\n            resources.ApplyResources(this.panel2, \"panel2\");\n            this.panel2.Name = \"panel2\";\n            // \n            // panel4\n            // \n            this.panel4.Controls.Add(this.scintillaSQL);\n            resources.ApplyResources(this.panel4, \"panel4\");\n            this.panel4.Name = \"panel4\";\n            // \n            // scintillaSQL\n            // \n            resources.ApplyResources(this.scintillaSQL, \"scintillaSQL\");\n            this.scintillaSQL.Lexer = ScintillaNET.Lexer.Sql;\n            this.scintillaSQL.Name = \"scintillaSQL\";\n            this.scintillaSQL.UseTabs = false;\n            this.scintillaSQL.TextChanged += new System.EventHandler(this.tbSQL_TextChanged);\n            // \n            // panel3\n            // \n            this.panel3.Controls.Add(this.bRefresh);\n            this.panel3.Controls.Add(this.bEditSQL);\n            resources.ApplyResources(this.panel3, \"panel3\");\n            this.panel3.Name = \"panel3\";\n            // \n            // bRefresh\n            // \n            resources.ApplyResources(this.bRefresh, \"bRefresh\");\n            this.bRefresh.Name = \"bRefresh\";\n            this.bRefresh.Click += new System.EventHandler(this.bRefresh_Click);\n            // \n            // bEditSQL\n            // \n            resources.ApplyResources(this.bEditSQL, \"bEditSQL\");\n            this.bEditSQL.Name = \"bEditSQL\";\n            this.bEditSQL.Click += new System.EventHandler(this.bEditSQL_Click);\n            // \n            // panel1\n            // \n            this.panel1.Controls.Add(this.lDataSetName);\n            this.panel1.Controls.Add(this.tbDSName);\n            this.panel1.Controls.Add(this.tbTimeout);\n            this.panel1.Controls.Add(this.label3);\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Controls.Add(this.cbDataSource);\n            this.panel1.Controls.Add(this.lDataSource);\n            resources.ApplyResources(this.panel1, \"panel1\");\n            this.panel1.Name = \"panel1\";\n            // \n            // lDataSetName\n            // \n            resources.ApplyResources(this.lDataSetName, \"lDataSetName\");\n            this.lDataSetName.Name = \"lDataSetName\";\n            // \n            // tbDSName\n            // \n            resources.ApplyResources(this.tbDSName, \"tbDSName\");\n            this.tbDSName.Name = \"tbDSName\";\n            this.tbDSName.TextChanged += new System.EventHandler(this.tbDSName_TextChanged);\n            // \n            // tbTimeout\n            // \n            resources.ApplyResources(this.tbTimeout, \"tbTimeout\");\n            this.tbTimeout.Maximum = new decimal(new int[] {\n            2147483647,\n            0,\n            0,\n            0});\n            this.tbTimeout.Name = \"tbTimeout\";\n            this.tbTimeout.ValueChanged += new System.EventHandler(this.tbTimeout_ValueChanged);\n            // \n            // label3\n            // \n            resources.ApplyResources(this.label3, \"label3\");\n            this.label3.Name = \"label3\";\n            // \n            // label1\n            // \n            resources.ApplyResources(this.label1, \"label1\");\n            this.label1.Name = \"label1\";\n            // \n            // cbDataSource\n            // \n            resources.ApplyResources(this.cbDataSource, \"cbDataSource\");\n            this.cbDataSource.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbDataSource.Name = \"cbDataSource\";\n            this.cbDataSource.SelectedIndexChanged += new System.EventHandler(this.cbDataSource_SelectedIndexChanged);\n            // \n            // lDataSource\n            // \n            resources.ApplyResources(this.lDataSource, \"lDataSource\");\n            this.lDataSource.Name = \"lDataSource\";\n            // \n            // bDeleteField\n            // \n            resources.ApplyResources(this.bDeleteField, \"bDeleteField\");\n            this.bDeleteField.Name = \"bDeleteField\";\n            this.bDeleteField.Click += new System.EventHandler(this.bDeleteField_Click);\n            // \n            // dgFields\n            // \n            resources.ApplyResources(this.dgFields, \"dgFields\");\n            this.dgFields.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;\n            dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\n            dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.ControlText;\n            dataGridViewCellStyle1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));\n            dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;\n            dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;\n            dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;\n            dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;\n            this.dgFields.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;\n            this.dgFields.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {\n            this.dgtbName,\n            this.dgtbQueryName,\n            this.dgtbValue,\n            this.dgtbTypeName});\n            this.dgFields.Name = \"dgFields\";\n            // \n            // dgtbName\n            // \n            this.dgtbName.DataPropertyName = \"Name\";\n            resources.ApplyResources(this.dgtbName, \"dgtbName\");\n            this.dgtbName.Name = \"dgtbName\";\n            // \n            // dgtbQueryName\n            // \n            this.dgtbQueryName.DataPropertyName = \"QueryName\";\n            resources.ApplyResources(this.dgtbQueryName, \"dgtbQueryName\");\n            this.dgtbQueryName.Name = \"dgtbQueryName\";\n            // \n            // dgtbValue\n            // \n            this.dgtbValue.DataPropertyName = \"Value\";\n            resources.ApplyResources(this.dgtbValue, \"dgtbValue\");\n            this.dgtbValue.Name = \"dgtbValue\";\n            // \n            // dgtbTypeName\n            // \n            this.dgtbTypeName.DataPropertyName = \"TypeName\";\n            resources.ApplyResources(this.dgtbTypeName, \"dgtbTypeName\");\n            this.dgtbTypeName.Items.AddRange(new object[] {\n            \"System.String\",\n            \"System.Int16\",\n            \"System.Int32\",\n            \"System.Int64\",\n            \"System.UInt16\",\n            \"System.UInt32\",\n            \"System.UInt64\",\n            \"System.Single\",\n            \"System.Double\",\n            \"System.Decimal\",\n            \"System.DateTime\",\n            \"System.Char\",\n            \"System.Boolean\",\n            \"System.Byte\"});\n            this.dgtbTypeName.Name = \"dgtbTypeName\";\n            this.dgtbTypeName.Resizable = System.Windows.Forms.DataGridViewTriState.True;\n            this.dgtbTypeName.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;\n            // \n            // label2\n            // \n            resources.ApplyResources(this.label2, \"label2\");\n            this.label2.Name = \"label2\";\n            // \n            // DataSetsCtl\n            // \n            this.Controls.Add(this.splitContainer1);\n            resources.ApplyResources(this, \"$this\");\n            this.Name = \"DataSetsCtl\";\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel4.ResumeLayout(false);\n            this.panel3.ResumeLayout(false);\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.tbTimeout)).EndInit();\n            ((System.ComponentModel.ISupportInitialize)(this.dgFields)).EndInit();\n            this.ResumeLayout(false);\n\n        }\n        #endregion\n\n        private System.Windows.Forms.SplitContainer splitContainer1;\n        private System.Windows.Forms.NumericUpDown tbTimeout;\n        private System.Windows.Forms.Label label3;\n        private System.Windows.Forms.Button bRefresh;\n        private System.Windows.Forms.Button bEditSQL;\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.ComboBox cbDataSource;\n        private System.Windows.Forms.Label lDataSource;\n        private System.Windows.Forms.TextBox tbDSName;\n        private System.Windows.Forms.Label lDataSetName;\n        private System.Windows.Forms.Button bDeleteField;\n        private System.Windows.Forms.DataGridView dgFields;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\tprivate System.Windows.Forms.DataGridViewTextBoxColumn dgtbName;\n\t\tprivate System.Windows.Forms.DataGridViewTextBoxColumn dgtbQueryName;\n\t\tprivate System.Windows.Forms.DataGridViewTextBoxColumn dgtbValue;\n\t\tprivate System.Windows.Forms.DataGridViewComboBoxColumn dgtbTypeName;\n        private System.Windows.Forms.Panel panel2;\n        private System.Windows.Forms.Panel panel4;\n        private ScintillaNET.Scintilla scintillaSQL;\n        private System.Windows.Forms.Panel panel3;\n        private System.Windows.Forms.Panel panel1;\n    }\n}"
  },
  {
    "path": "RdlDesign/DataSetsCtl.cs",
    "content": "\nusing Majorsilence.Reporting.RdlDesign.Resources;\nusing Majorsilence.Reporting.RdlDesign.Syntax;\nusing System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// Summary description for StyleCtl.\n    /// </summary>\n    internal partial class DataSetsCtl : System.Windows.Forms.UserControl, IProperty\n    {\n        private bool _UseTypenameQualified = false;\n        private DesignXmlDraw _Draw;\n        private XmlNode _dsNode;\n        private DataSetValues _dsv;\n\n        internal DataSetsCtl(DesignXmlDraw dxDraw, XmlNode dsNode)\n        {\n            _Draw = dxDraw;\n            _dsNode = dsNode;\n            // This call is required by the Windows.Forms Form Designer.\n            InitializeComponent();\n\n            // Initialize form using the style node values\n            InitValues();\n            SetupScintilla();\n        }\n\n        internal DataSetValues DSV\n        {\n            get { return _dsv; }\n        }\n\n        private void InitValues()\n        {\n            //// cbDataSource\n            cbDataSource.Items.AddRange(_Draw.DataSourceNames);\n\n            //\n            // Obtain the existing DataSet info\n            //\n            XmlNode dNode = this._dsNode;\n            XmlAttribute nAttr = dNode.Attributes[\"Name\"];\n\n            _dsv = new DataSetValues(nAttr == null ? \"\" : nAttr.Value);\n            _dsv.Node = dNode;\n\t\t\t\t\n            XmlNode ctNode = DesignXmlDraw.FindNextInHierarchy(dNode, \"Query\", \"CommandText\");\n            _dsv.CommandText = ctNode == null ? \"\" : ctNode.InnerText;\n\t\t\t\t\n            XmlNode datasource = DesignXmlDraw.FindNextInHierarchy(dNode, \"Query\", \"DataSourceName\");\n            _dsv.DataSourceName = datasource == null ? \"\" : datasource.InnerText;\n\n            XmlNode timeout = DesignXmlDraw.FindNextInHierarchy(dNode, \"Query\", \"Timeout\");\n            try\n            {\n                _dsv.Timeout = timeout == null ? 0 : Convert.ToInt32(timeout.InnerText);\n            }\n            catch\t\t// we don't stop just because timeout isn't convertable\n            {\n                _dsv.Timeout = 0;\n            }\n\n            // Get QueryParameters; they are loaded here but used by the QueryParametersCtl\n            _dsv.QueryParameters = new DataTable();\n            _dsv.QueryParameters.Columns.Add(new DataColumn(\"Name\", typeof(string)));\n            _dsv.QueryParameters.Columns.Add(new DataColumn(\"Value\", typeof(string)));\n            XmlNode qpNode = DesignXmlDraw.FindNextInHierarchy(dNode, \"Query\", \"QueryParameters\");\n            if (qpNode != null)\n            {\n                string[] rowValues = new string[2];\n                foreach (XmlNode qNode in qpNode.ChildNodes)\n                {\n                    if (qNode.Name != \"QueryParameter\")\n                        continue;\n                    XmlAttribute xAttr = qNode.Attributes[\"Name\"];\n                    if (xAttr == null)\n                        continue;\n                    rowValues[0] = xAttr.Value;\n                    rowValues[1] = _Draw.GetElementValue(qNode, \"Value\", \"\");\n                    _dsv.QueryParameters.Rows.Add(rowValues);\n                }\n            }\n\n            // Get Fields\n            _dsv.Fields = new DataTable();\n            _dsv.Fields.Columns.Add(new DataColumn(\"Name\", typeof(string)));\n            _dsv.Fields.Columns.Add(new DataColumn(\"QueryName\", typeof(string)));\n            _dsv.Fields.Columns.Add(new DataColumn(\"Value\", typeof(string)));\n            _dsv.Fields.Columns.Add(new DataColumn(\"TypeName\", typeof(string)));\n\n            XmlNode fsNode = _Draw.GetNamedChildNode(dNode, \"Fields\");\n            if (fsNode != null)\n            {\n                string[] rowValues = new string[4];\n                foreach (XmlNode fNode in fsNode.ChildNodes)\n                {\n                    if (fNode.Name != \"Field\")\n                        continue;\n                    XmlAttribute xAttr = fNode.Attributes[\"Name\"];\n                    if (xAttr == null)\n                        continue;\n                    rowValues[0] = xAttr.Value;\n                    rowValues[1] = _Draw.GetElementValue(fNode, \"DataField\", \"\");\n                    rowValues[2] = _Draw.GetElementValue(fNode, \"Value\", \"\");\n                    string typename = null;\n                    typename = _Draw.GetElementValue(fNode, \"TypeName\", null);\n                    if (typename == null)\n                    {\n                        typename = _Draw.GetElementValue(fNode, \"rd:TypeName\", null);\n                        if (typename != null)\n                            _UseTypenameQualified = true;\t// we got it qualified so we'll generate qualified\n                    }\n                    if (typename != null && !dgtbTypeName.Items.Contains(typename))\n                    {\n                        dgtbTypeName.Items.Add(typename);\n                    }\n                    rowValues[3] = typename == null ? \"\" : typename;\n\n                    _dsv.Fields.Rows.Add(rowValues);\n                }\n            }\n            this.tbDSName.Text = _dsv.Name;\n            this.scintillaSQL.Text = _dsv.CommandText.Replace(\"\\r\\n\", \"\\n\").Replace(\"\\n\", Environment.NewLine);\n            this.cbDataSource.Text = _dsv.DataSourceName;\n\t\t\tthis.tbTimeout.Value = _dsv.Timeout;\n            dgFields.DataSource = _dsv.Fields;\n        }\n\n        private void SetupScintilla()\n        {\n            new ScintillaSqlStyle(scintillaSQL);\n        }\n\n        public bool IsValid()\n        {\n            string nerr = _Draw.NameError(this._dsNode, this.tbDSName.Text);\n            if (nerr != null)\n            {\n                MessageBox.Show(nerr, Strings.DataSetsCtl_Show_Name, MessageBoxButtons.OK,MessageBoxIcon.Error);\n                return false;\n            }\n            return true;\n        }\n\n        public void Apply()\n        {\n            XmlNode rNode = _Draw.GetReportNode();\n            XmlNode dsNode = _Draw.GetNamedChildNode(rNode, \"DataSets\");\n\n            XmlNode dNode = this._dsNode;\n            // Create the name attribute\n            _Draw.SetElementAttribute(dNode, \"Name\", _dsv.Name);\n\n            _Draw.RemoveElement(dNode, \"Query\");\t// get rid of old query\n            XmlNode qNode = _Draw.CreateElement(dNode, \"Query\", null);\n            _Draw.SetElement(qNode, \"DataSourceName\", _dsv.DataSourceName);\n            if (_dsv.Timeout > 0)\n                _Draw.SetElement(qNode, \"Timeout\", _dsv.Timeout.ToString());\n\n            _Draw.SetElement(qNode, \"CommandText\", _dsv.CommandText);\n\n            // Handle QueryParameters\n            _Draw.RemoveElement(qNode, \"QueryParameters\");\t// get rid of old QueryParameters\n            XmlNode qpsNode = _Draw.CreateElement(qNode, \"QueryParameters\", null);\n            foreach (DataRow dr in _dsv.QueryParameters.Rows)\n            {\n                if (dr[0] == DBNull.Value || dr[1] == null || dr[1] == DBNull.Value)\n                    continue;\n                string name = (string)dr[0];\n                if (name.Length <= 0)\n                    continue;\n                XmlNode qpNode = _Draw.CreateElement(qpsNode, \"QueryParameter\", null);\n                _Draw.SetElementAttribute(qpNode, \"Name\", name);\n                _Draw.SetElement(qpNode, \"Value\", (string)dr[1]);\t\n            }\n            if (!qpsNode.HasChildNodes)\t// if no parameters we don't need to define them\n\t\t\t\t_Draw.RemoveElement(qNode, \"QueryParameters\");\n\n            // Handle Fields\n            _Draw.RemoveElement(dNode, \"Fields\");\t// get rid of old Fields\n            XmlNode fsNode = _Draw.CreateElement(dNode, \"Fields\", null);\n            foreach (DataRow dr in _dsv.Fields.Rows)\n            {\n                if (dr[0] == DBNull.Value)\n                    continue;\n                if (dr[1] == DBNull.Value && dr[2] == DBNull.Value)\n                    continue;\n                XmlNode fNode = _Draw.CreateElement(fsNode, \"Field\", null);\n                _Draw.SetElementAttribute(fNode, \"Name\", (string)dr[0]);\n                if (dr[1] != DBNull.Value &&\n                    dr[1] is string &&\n                    (string)dr[1] != string.Empty)\n                    _Draw.SetElement(fNode, \"DataField\", (string)dr[1]);\n                else if (dr[2] != DBNull.Value &&\n                         dr[2] is string &&\n                         (string)dr[2] != string.Empty)\n                    _Draw.SetElement(fNode, \"Value\", (string)dr[2]);\n                else\n                    _Draw.SetElement(fNode, \"DataField\", (string)dr[0]);\t// make datafield same as name\n\n                // Handle typename if any\n                if (dr[3] != DBNull.Value &&\n                    dr[3] is string &&\n                    (string)dr[3] != string.Empty)\n                {\n                    _Draw.SetElement(fNode, _UseTypenameQualified ? \"rd:TypeName\" : \"TypeName\", (string)dr[3]);\n                }\n            }\n        }\n\n        private void tbDSName_TextChanged(object sender, System.EventArgs e)\n        {\n            _dsv.Name = tbDSName.Text;\n        }\n\n        private void cbDataSource_SelectedIndexChanged(object sender, System.EventArgs e)\n        {\n            _dsv.DataSourceName = cbDataSource.Text;\n        }\n\n        private void tbSQL_TextChanged(object sender, System.EventArgs e)\n        {\n            _dsv.CommandText = scintillaSQL.Text;\n        }\n\n        private void bDeleteField_Click(object sender, System.EventArgs e)\n        {\n            if (this.dgFields.CurrentRow.Index < 0)\n                return; \n            _dsv.Fields.Rows.RemoveAt(this.dgFields.CurrentRow.Index);\n        }\n\n        private void bRefresh_Click(object sender, System.EventArgs e)\n        {\n            // Need to clear all the fields and then replace with the columns \n            //   of the SQL statement\n\n            List<SqlColumn> cols = DesignerUtility.GetSqlColumns(_Draw, cbDataSource.Text, scintillaSQL.Text, _dsv.QueryParameters);\n            if (cols == null || cols.Count <= 0)\n                return;\t\t\t\t// something didn't work right\n\t\t\t\n            _dsv.Fields.Rows.Clear();\n            string[] rowValues = new string[4];\n            foreach (SqlColumn sc in cols)\n            {\n                rowValues[0] = sc.Name;\n                rowValues[1] = sc.Name;\n                rowValues[2] = \"\";\n                DataGridViewComboBoxColumn TypeColumn = (dgFields.Columns[3] as DataGridViewComboBoxColumn);\n                if (!TypeColumn.Items.Contains(sc.DataType.FullName))\n                {\n                    TypeColumn.Items.Add(sc.DataType.FullName);\n                }\n                rowValues[3] = sc.DataType.FullName;\n                _dsv.Fields.Rows.Add(rowValues);\n            }\n        }\n\n        private void bEditSQL_Click(object sender, System.EventArgs e)\n        {\n            SQLCtl sc = new SQLCtl(_Draw, cbDataSource.Text, this.scintillaSQL.Text, _dsv.QueryParameters);\n            try\n            {\n                DialogResult dr = sc.ShowDialog(this);\n                if (dr == DialogResult.OK)\n                {\n                    scintillaSQL.Text = sc.SQL;\n                }\n            }\n            finally\n            {\n                sc.Dispose();\n            }\n        }\n\n        private void tbTimeout_ValueChanged(object sender, System.EventArgs e)\n        {\n            _dsv.Timeout = Convert.ToInt32(tbTimeout.Value);\n        }\n    }\n\n    internal class DataSetValues\n    {\n        string _Name;\n        string _DataSourceName;\n        string _CommandText;\n        int _Timeout;\n        DataTable _QueryParameters;\n        // of type DSQueryParameter\n        DataTable _Fields;\n        XmlNode _Node;\n\n        internal DataSetValues(string name)\n        {\n            _Name = name;\n        }\n\n        internal string Name\n        {\n            get { return _Name; }\n            set { _Name = value; }\n        }\n\n        internal string DataSourceName\n        {\n            get { return _DataSourceName; }\n            set { _DataSourceName = value; }\n        }\n\n        internal string CommandText\n        {\n            get { return _CommandText; }\n            set { _CommandText = value; }\n        }\n\n        internal int Timeout\n        {\n            get { return _Timeout; }\n            set { _Timeout = value; }\n        }\n\n        internal DataTable QueryParameters\n        {\n            get { return _QueryParameters; }\n            set { _QueryParameters = value; }\n        }\n\n        internal XmlNode Node\n        {\n            get { return _Node; }\n            set { _Node = value; }\n        }\n\n        internal DataTable Fields\n        {\n            get { return _Fields; }\n            set { _Fields = value; }\n        }\n\n        override public string ToString()\n        {\n            return _Name;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/DataSetsCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"splitContainer1.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Fill</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"splitContainer1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"splitContainer1.Orientation\" type=\"System.Windows.Forms.Orientation, System.Windows.Forms\">\n    <value>Horizontal</value>\n  </data>\n  <data name=\"scintillaSQL.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Fill</value>\n  </data>\n  <data name=\"scintillaSQL.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"scintillaSQL.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>406, 120</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"scintillaSQL.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>39</value>\n  </data>\n  <data name=\"scintillaSQL.Text\" xml:space=\"preserve\">\n    <value>SQL</value>\n  </data>\n  <data name=\"&gt;&gt;scintillaSQL.Name\" xml:space=\"preserve\">\n    <value>scintillaSQL</value>\n  </data>\n  <data name=\"&gt;&gt;scintillaSQL.Type\" xml:space=\"preserve\">\n    <value>ScintillaNET.Scintilla, ScintillaNET, Version=3.5.6.0, Culture=neutral, PublicKeyToken=null</value>\n  </data>\n  <data name=\"&gt;&gt;scintillaSQL.Parent\" xml:space=\"preserve\">\n    <value>panel4</value>\n  </data>\n  <data name=\"&gt;&gt;scintillaSQL.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"panel4.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Fill</value>\n  </data>\n  <data name=\"panel4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"panel4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>406, 120</value>\n  </data>\n  <data name=\"panel4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>40</value>\n  </data>\n  <data name=\"&gt;&gt;panel4.Name\" xml:space=\"preserve\">\n    <value>panel4</value>\n  </data>\n  <data name=\"&gt;&gt;panel4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;panel4.Parent\" xml:space=\"preserve\">\n    <value>panel2</value>\n  </data>\n  <data name=\"&gt;&gt;panel4.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"bRefresh.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Top</value>\n  </data>\n  <data name=\"bRefresh.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 23</value>\n  </data>\n  <data name=\"bRefresh.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>74, 34</value>\n  </data>\n  <data name=\"bRefresh.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>33</value>\n  </data>\n  <data name=\"bRefresh.Text\" xml:space=\"preserve\">\n    <value>Refresh Fields</value>\n  </data>\n  <data name=\"&gt;&gt;bRefresh.Name\" xml:space=\"preserve\">\n    <value>bRefresh</value>\n  </data>\n  <data name=\"&gt;&gt;bRefresh.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bRefresh.Parent\" xml:space=\"preserve\">\n    <value>panel3</value>\n  </data>\n  <data name=\"&gt;&gt;bRefresh.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"bEditSQL.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Top</value>\n  </data>\n  <data name=\"bEditSQL.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"bEditSQL.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>74, 23</value>\n  </data>\n  <data name=\"bEditSQL.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>32</value>\n  </data>\n  <data name=\"bEditSQL.Text\" xml:space=\"preserve\">\n    <value>SQL...</value>\n  </data>\n  <data name=\"&gt;&gt;bEditSQL.Name\" xml:space=\"preserve\">\n    <value>bEditSQL</value>\n  </data>\n  <data name=\"&gt;&gt;bEditSQL.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bEditSQL.Parent\" xml:space=\"preserve\">\n    <value>panel3</value>\n  </data>\n  <data name=\"&gt;&gt;bEditSQL.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"panel3.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Right</value>\n  </data>\n  <data name=\"panel3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>406, 0</value>\n  </data>\n  <data name=\"panel3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>74, 120</value>\n  </data>\n  <data name=\"panel3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>39</value>\n  </data>\n  <data name=\"&gt;&gt;panel3.Name\" xml:space=\"preserve\">\n    <value>panel3</value>\n  </data>\n  <data name=\"&gt;&gt;panel3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;panel3.Parent\" xml:space=\"preserve\">\n    <value>panel2</value>\n  </data>\n  <data name=\"&gt;&gt;panel3.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"panel2.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Fill</value>\n  </data>\n  <data name=\"panel2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 59</value>\n  </data>\n  <data name=\"panel2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>480, 120</value>\n  </data>\n  <data name=\"panel2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>40</value>\n  </data>\n  <data name=\"&gt;&gt;panel2.Name\" xml:space=\"preserve\">\n    <value>panel2</value>\n  </data>\n  <data name=\"&gt;&gt;panel2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;panel2.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel1</value>\n  </data>\n  <data name=\"&gt;&gt;panel2.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"lDataSetName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>3, 7</value>\n  </data>\n  <data name=\"lDataSetName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>70, 16</value>\n  </data>\n  <data name=\"lDataSetName.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>34</value>\n  </data>\n  <data name=\"lDataSetName.Text\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"lDataSetName.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleRight</value>\n  </data>\n  <data name=\"&gt;&gt;lDataSetName.Name\" xml:space=\"preserve\">\n    <value>lDataSetName</value>\n  </data>\n  <data name=\"&gt;&gt;lDataSetName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lDataSetName.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;lDataSetName.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"tbDSName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>74, 5</value>\n  </data>\n  <data name=\"tbDSName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>144, 20</value>\n  </data>\n  <data name=\"tbDSName.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>28</value>\n  </data>\n  <data name=\"&gt;&gt;tbDSName.Name\" xml:space=\"preserve\">\n    <value>tbDSName</value>\n  </data>\n  <data name=\"&gt;&gt;tbDSName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbDSName.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;tbDSName.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"tbTimeout.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"tbTimeout.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>321, 32</value>\n  </data>\n  <data name=\"tbTimeout.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>154, 20</value>\n  </data>\n  <data name=\"tbTimeout.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>30</value>\n  </data>\n  <data name=\"tbTimeout.ThousandsSeparator\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"&gt;&gt;tbTimeout.Name\" xml:space=\"preserve\">\n    <value>tbTimeout</value>\n  </data>\n  <data name=\"&gt;&gt;tbTimeout.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbTimeout.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;tbTimeout.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"label3.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>195, 34</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>120, 15</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>37</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Timeout</value>\n  </data>\n  <data name=\"label3.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleRight</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>3, 40</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>200, 13</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>36</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>SQL Select</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"cbDataSource.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"cbDataSource.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>321, 5</value>\n  </data>\n  <data name=\"cbDataSource.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>156, 21</value>\n  </data>\n  <data name=\"cbDataSource.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>29</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSource.Name\" xml:space=\"preserve\">\n    <value>cbDataSource</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSource.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSource.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSource.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"lDataSource.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"lDataSource.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>198, 7</value>\n  </data>\n  <data name=\"lDataSource.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>118, 19</value>\n  </data>\n  <data name=\"lDataSource.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>35</value>\n  </data>\n  <data name=\"lDataSource.Text\" xml:space=\"preserve\">\n    <value>Data Source</value>\n  </data>\n  <data name=\"lDataSource.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleRight</value>\n  </data>\n  <data name=\"&gt;&gt;lDataSource.Name\" xml:space=\"preserve\">\n    <value>lDataSource</value>\n  </data>\n  <data name=\"&gt;&gt;lDataSource.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lDataSource.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;lDataSource.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"panel1.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Top</value>\n  </data>\n  <data name=\"panel1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"panel1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>480, 59</value>\n  </data>\n  <data name=\"panel1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>39</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Name\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel1</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.Name\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"splitContainer1.Panel1MinSize\" type=\"System.Int32, mscorlib\">\n    <value>120</value>\n  </data>\n  <data name=\"bDeleteField.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"bDeleteField.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>409, 16</value>\n  </data>\n  <data name=\"bDeleteField.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>71, 23</value>\n  </data>\n  <data name=\"bDeleteField.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>27</value>\n  </data>\n  <data name=\"bDeleteField.Text\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"&gt;&gt;bDeleteField.Name\" xml:space=\"preserve\">\n    <value>bDeleteField</value>\n  </data>\n  <data name=\"&gt;&gt;bDeleteField.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bDeleteField.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel2</value>\n  </data>\n  <data name=\"&gt;&gt;bDeleteField.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"dgFields.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Bottom, Left, Right</value>\n  </data>\n  <metadata name=\"dgtbName.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <data name=\"dgtbName.HeaderText\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <metadata name=\"dgtbQueryName.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <data name=\"dgtbQueryName.HeaderText\" xml:space=\"preserve\">\n    <value>Query Column Name</value>\n  </data>\n  <metadata name=\"dgtbValue.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <data name=\"dgtbValue.HeaderText\" xml:space=\"preserve\">\n    <value>Value</value>\n  </data>\n  <metadata name=\"dgtbTypeName.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <data name=\"dgtbTypeName.HeaderText\" xml:space=\"preserve\">\n    <value>TypeName</value>\n  </data>\n  <data name=\"dgFields.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>3, 16</value>\n  </data>\n  <data name=\"dgFields.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>406, 98</value>\n  </data>\n  <data name=\"dgFields.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>26</value>\n  </data>\n  <data name=\"&gt;&gt;dgFields.Name\" xml:space=\"preserve\">\n    <value>dgFields</value>\n  </data>\n  <data name=\"&gt;&gt;dgFields.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dgFields.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel2</value>\n  </data>\n  <data name=\"&gt;&gt;dgFields.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>3, 0</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 16</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>28</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Fields</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel2</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.Name\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel2</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"splitContainer1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>480, 300</value>\n  </data>\n  <data name=\"splitContainer1.SplitterDistance\" type=\"System.Int32, mscorlib\">\n    <value>179</value>\n  </data>\n  <data name=\"splitContainer1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>28</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Name\" xml:space=\"preserve\">\n    <value>splitContainer1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <data name=\"$this.MinimumSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>480, 300</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>480, 300</value>\n  </data>\n  <data name=\"&gt;&gt;dgtbName.Name\" xml:space=\"preserve\">\n    <value>dgtbName</value>\n  </data>\n  <data name=\"&gt;&gt;dgtbName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dgtbQueryName.Name\" xml:space=\"preserve\">\n    <value>dgtbQueryName</value>\n  </data>\n  <data name=\"&gt;&gt;dgtbQueryName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dgtbValue.Name\" xml:space=\"preserve\">\n    <value>dgtbValue</value>\n  </data>\n  <data name=\"&gt;&gt;dgtbValue.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dgtbTypeName.Name\" xml:space=\"preserve\">\n    <value>dgtbTypeName</value>\n  </data>\n  <data name=\"&gt;&gt;dgtbTypeName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGridViewComboBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dataGridTableStyle1.Name\" xml:space=\"preserve\">\n    <value>dataGridTableStyle1</value>\n  </data>\n  <data name=\"&gt;&gt;dataGridTableStyle1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGridTableStyle, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DataSetsCtl</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DataSetsCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Время ожидания</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bRefresh.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>405, 77</value>\n  </data>\n  <data name=\"bRefresh.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>70, 34</value>\n  </data>\n  <data name=\"bRefresh.Text\" xml:space=\"preserve\">\n    <value>Обновить поля</value>\n  </data>\n  <data name=\"bEditSQL.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>405, 46</value>\n  </data>\n  <data name=\"bEditSQL.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>70, 23</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>SQL-запрос</value>\n  </data>\n  <data name=\"lDataSource.Text\" xml:space=\"preserve\">\n    <value>Источник данных</value>\n  </data>\n  <data name=\"lDataSetName.Text\" xml:space=\"preserve\">\n    <value>Название</value>\n  </data>\n  <data name=\"bDeleteField.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>405, 16</value>\n  </data>\n  <data name=\"bDeleteField.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>70, 23</value>\n  </data>\n  <data name=\"bDeleteField.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"dgtbName.HeaderText\" xml:space=\"preserve\">\n    <value>Название</value>\n  </data>\n  <data name=\"dgtbQueryName.HeaderText\" xml:space=\"preserve\">\n    <value>Столбец запроса</value>\n  </data>\n  <data name=\"dgtbValue.HeaderText\" xml:space=\"preserve\">\n    <value>Значение</value>\n  </data>\n  <data name=\"dgtbTypeName.HeaderText\" xml:space=\"preserve\">\n    <value>Тип</value>\n  </data>\n  <data name=\"dgFields.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>7, 23</value>\n  </data>\n  <data name=\"dgFields.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>392, 121</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>9, 8</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Поля</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>480, 300</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DesignCtl.Designer.cs",
    "content": "﻿using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\tpublic partial class DesignCtl : System.Windows.Forms.UserControl\n\t{\n\t\tprivate ContextMenuStrip ContextMenuDefault;\n\t\tprivate System.ComponentModel.IContainer components;\n\t\tprivate ToolStripMenuItem MenuDefaultProperties;\n\t\tprivate ToolStripSeparator toolStripMenuItem1;\n\t\tprivate ToolStripMenuItem MenuDefaultCopy;\n\t\tprivate ToolStripMenuItem MenuDefaultPaste;\n\t\tprivate ToolStripMenuItem MenuDefaultDelete;\n\t\tprivate ToolStripSeparator toolStripMenuItem2;\n\t\tprivate ToolStripMenuItem MenuDefaultSelectAll;\n\t\tprivate ToolStripSeparator toolStripMenuItem3;\n\t\tprivate ToolStripMenuItem MenuDefaultInsert;\n\t\tprivate ToolStripMenuItem MenuInsertChart;\n\t\tprivate ToolStripMenuItem MenuInsertGrid;\n\t\tprivate ToolStripMenuItem MenuInsertImage;\n\t\tprivate ToolStripMenuItem MenuInsertLine;\n\t\tprivate ToolStripMenuItem MenuInsertList;\n\t\tprivate ToolStripMenuItem MenuInsertMatrix;\n\t\tprivate ToolStripMenuItem MenuInsertRectangle;\n\t\tprivate ToolStripMenuItem MenuInsertSubreport;\n\t\tprivate ToolStripMenuItem MenuInsertTable;\n\t\tprivate ToolStripMenuItem MenuInsertTextbox;\n\t\tprivate ContextMenuStrip ContextMenuChart;\n\t\tprivate ToolStripMenuItem MenuChartProperties;\n\t\tprivate ToolStripMenuItem MenuChartLegend;\n\t\tprivate ToolStripMenuItem MenuChartTitle;\n\t\tprivate ToolStripSeparator toolStripMenuItem4;\n\t\tprivate ToolStripMenuItem MenuChartInsertCategoryGrouping;\n\t\tprivate ToolStripMenuItem MenuChartEditCategoryGrouping;\n\t\tprivate ToolStripMenuItem MenuChartDeleteCategoryGrouping;\n\t\tprivate ToolStripSeparator toolStripMenuItem5;\n\t\tprivate ToolStripMenuItem MenuChartCategoryAxis;\n\t\tprivate ToolStripMenuItem MenuChartCategoryAxisTitle;\n\t\tprivate ToolStripSeparator toolStripMenuItem6;\n\t\tprivate ToolStripMenuItem MenuChartInsertSeriesGrouping;\n\t\tprivate ToolStripMenuItem MenuChartEditSeriesGrouping;\n\t\tprivate ToolStripMenuItem MenuChartDeleteSeriesGrouping;\n\t\tprivate ToolStripSeparator toolStripMenuItem7;\n\t\tprivate ToolStripMenuItem MenuChartValueAxis;\n\t\tprivate ToolStripMenuItem MenuChartValueAxisTitle;\n\t\tprivate ToolStripMenuItem MenuChartValueAxisRightTitle;\n\t\tprivate ToolStripSeparator toolStripMenuItem8;\n\t\tprivate ToolStripMenuItem MenuChartCopy;\n\t\tprivate ToolStripMenuItem MenuChartPaste;\n\t\tprivate ToolStripMenuItem MenuChartDelete;\n\t\tprivate ToolStripSeparator toolStripMenuItem9;\n\t\tprivate ContextMenuStrip ContextMenuMatrix;\n\t\tprivate ToolStripMenuItem MenuMatrixProperties;\n\t\tprivate ToolStripMenuItem MenuMatrixMatrixProperties;\n\t\tprivate ToolStripSeparator toolStripMenuItem10;\n\t\tprivate ToolStripMenuItem MenuMatrixInsertColumnGroup;\n\t\tprivate ToolStripMenuItem MenuMatrixEditColumnGroup;\n\t\tprivate ToolStripMenuItem MenuMatrixDeleteColumnGroup;\n\t\tprivate ToolStripSeparator toolStripMenuItem11;\n\t\tprivate ToolStripMenuItem MenuMatrixInsertRowGroup;\n\t\tprivate ToolStripMenuItem MenuMatrixEditRowGroup;\n\t\tprivate ToolStripMenuItem MenuMatrixDeleteRowGroup;\n\t\tprivate ToolStripSeparator toolStripMenuItem12;\n\t\tprivate ToolStripMenuItem MenuMatrixDeleteMatrix;\n\t\tprivate ToolStripSeparator toolStripMenuItem13;\n\t\tprivate ToolStripMenuItem MenuMatrixCopy;\n\t\tprivate ToolStripMenuItem MenuMatrixPaste;\n\t\tprivate ToolStripMenuItem MenuMatrixDelete;\n\t\tprivate ToolStripSeparator toolStripMenuItem14;\n\t\tprivate ToolStripMenuItem MenuMatrixSelectAll;\n\t\tprivate ContextMenuStrip ContextMenuSubreport;\n\t\tprivate ToolStripMenuItem MenuSubreportProperties;\n\t\tprivate ToolStripMenuItem MenuSubreportOpen;\n\t\tprivate ToolStripSeparator toolStripMenuItem15;\n\t\tprivate ToolStripMenuItem MenuSubreportCopy;\n\t\tprivate ToolStripMenuItem MenuSubreportPaste;\n\t\tprivate ToolStripMenuItem MenuSubreportDelete;\n\t\tprivate ToolStripSeparator toolStripMenuItem16;\n\t\tprivate ToolStripMenuItem MenuSubreportSelectAll;\n\t\tprivate ContextMenuStrip ContextMenuGrid;\n\t\tprivate ToolStripMenuItem MenuGridProperties;\n\t\tprivate ToolStripMenuItem MenuGridGridProperties;\n\t\tprivate ToolStripMenuItem MenuGridReplaceCell;\n\t\tprivate ToolStripMenuItem MenuGridReplaceCellChart;\n\t\tprivate ToolStripMenuItem MenuGridReplaceCellImage;\n\t\tprivate ToolStripMenuItem MenuGridReplaceCellList;\n\t\tprivate ToolStripMenuItem MenuGridReplaceCellMatrix;\n\t\tprivate ToolStripMenuItem MenuGridReplaceCellRectangle;\n\t\tprivate ToolStripMenuItem MenuGridReplaceCellSubreport;\n\t\tprivate ToolStripMenuItem MenuGridReplaceCellTable;\n\t\tprivate ToolStripMenuItem MenuGridReplaceCellTextbox;\n\t\tprivate ToolStripSeparator toolStripMenuItem17;\n\t\tprivate ToolStripMenuItem MenuGridInsertColumnBefore;\n\t\tprivate ToolStripMenuItem MenuGridInsertColumnAfter;\n\t\tprivate ToolStripSeparator toolStripMenuItem18;\n\t\tprivate ToolStripMenuItem MenuGridInsertRowBefore;\n\t\tprivate ToolStripMenuItem MenuGridInsertRowAfter;\n\t\tprivate ToolStripSeparator toolStripMenuItem19;\n\t\tprivate ToolStripMenuItem MenuGridDeleteColumn;\n\t\tprivate ToolStripMenuItem MenuGridDeleteRow;\n\t\tprivate ToolStripMenuItem MenuGridDeleteGrid;\n\t\tprivate ToolStripSeparator toolStripMenuItem20;\n\t\tprivate ToolStripMenuItem MenuGridCopy;\n\t\tprivate ToolStripMenuItem MenuGridPaste;\n\t\tprivate ToolStripMenuItem MenuGridDelete;\n\t\tprivate ToolStripSeparator toolStripMenuItem21;\n\t\tprivate ToolStripMenuItem MenuGridSelectAll;\n\t\tprivate ContextMenuStrip ContextMenuTable;\n\t\tprivate ToolStripMenuItem MenuTableProperties;\n\t\tprivate ToolStripMenuItem MenuTableTableProperties;\n\t\tprivate ToolStripMenuItem MenuTableReplaceCell;\n\t\tprivate ToolStripMenuItem MenuTableReplaceCellChart;\n\t\tprivate ToolStripMenuItem MenuTableReplaceCellImage;\n\t\tprivate ToolStripMenuItem MenuTableReplaceCellList;\n\t\tprivate ToolStripMenuItem MenuTableReplaceCellMatrix;\n\t\tprivate ToolStripMenuItem MenuTableReplaceCellRectangle;\n\t\tprivate ToolStripMenuItem MenuTableReplaceCellSubreport;\n\t\tprivate ToolStripMenuItem MenuTableReplaceCellTable;\n\t\tprivate ToolStripMenuItem MenuTableReplaceCellTextbox;\n\t\tprivate ToolStripSeparator toolStripMenuItem22;\n\t\tprivate ToolStripMenuItem MenuTableInsertColumnBefore;\n\t\tprivate ToolStripMenuItem MenuTableInsertColumnAfter;\n\t\tprivate ToolStripSeparator toolStripMenuItem23;\n\t\tprivate ToolStripMenuItem MenuTableInsertRowBefore;\n\t\tprivate ToolStripMenuItem MenuTableInsertRowAfter;\n\t\tprivate ToolStripSeparator toolStripMenuItem24;\n\t\tprivate ToolStripMenuItem MenuTableInsertGroup;\n\t\tprivate ToolStripMenuItem MenuTableEditGroup;\n\t\tprivate ToolStripMenuItem MenuTableDeleteGroup;\n\t\tprivate ToolStripSeparator toolStripMenuItem25;\n\t\tprivate ToolStripMenuItem MenuTableDeleteColumn;\n\t\tprivate ToolStripMenuItem MenuTableDeleteRow;\n\t\tprivate ToolStripMenuItem MenuTableDeleteTable;\n\t\tprivate ToolStripSeparator toolStripMenuItem26;\n\t\tprivate ToolStripMenuItem MenuTableCopy;\n\t\tprivate ToolStripMenuItem MenuTablePaste;\n\t\tprivate ToolStripMenuItem MenuTableDelete;\n\t\tprivate ToolStripSeparator toolStripMenuItem27;\n\t\tprivate ToolStripMenuItem MenuTableSelectAll;\n\t\tprivate ToolStripMenuItem MenuChartSelectAll;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tthis.components = new System.ComponentModel.Container();\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DesignCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.ContextMenuDefault = new System.Windows.Forms.ContextMenuStrip(this.components);\n\t\t\tthis.MenuDefaultProperties = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuDefaultCopy = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuDefaultPaste = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuDefaultDelete = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuDefaultSelectAll = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem3 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuDefaultInsert = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuInsertChart = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuInsertGrid = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuInsertImage = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuInsertLine = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuInsertList = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuInsertMatrix = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuInsertRectangle = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuInsertSubreport = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuInsertTable = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuInsertTextbox = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.ContextMenuChart = new System.Windows.Forms.ContextMenuStrip(this.components);\n\t\t\tthis.MenuChartProperties = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuChartLegend = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuChartTitle = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem4 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuChartInsertCategoryGrouping = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuChartEditCategoryGrouping = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuChartDeleteCategoryGrouping = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem5 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuChartCategoryAxis = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuChartCategoryAxisTitle = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem6 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuChartInsertSeriesGrouping = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuChartEditSeriesGrouping = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuChartDeleteSeriesGrouping = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem7 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuChartValueAxis = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuChartValueAxisTitle = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuChartValueAxisRightTitle = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem8 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuChartCopy = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuChartPaste = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuChartDelete = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem9 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuChartSelectAll = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.ContextMenuMatrix = new System.Windows.Forms.ContextMenuStrip(this.components);\n\t\t\tthis.MenuMatrixProperties = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuMatrixMatrixProperties = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem10 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuMatrixInsertColumnGroup = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuMatrixEditColumnGroup = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuMatrixDeleteColumnGroup = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem11 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuMatrixInsertRowGroup = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuMatrixEditRowGroup = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuMatrixDeleteRowGroup = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem12 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuMatrixDeleteMatrix = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem13 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuMatrixCopy = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuMatrixPaste = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuMatrixDelete = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem14 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuMatrixSelectAll = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.ContextMenuSubreport = new System.Windows.Forms.ContextMenuStrip(this.components);\n\t\t\tthis.MenuSubreportProperties = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuSubreportOpen = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem15 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuSubreportCopy = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuSubreportPaste = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuSubreportDelete = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem16 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuSubreportSelectAll = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.ContextMenuGrid = new System.Windows.Forms.ContextMenuStrip(this.components);\n\t\t\tthis.MenuGridProperties = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuGridGridProperties = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuGridReplaceCell = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuGridReplaceCellChart = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuGridReplaceCellImage = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuGridReplaceCellList = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuGridReplaceCellMatrix = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuGridReplaceCellRectangle = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuGridReplaceCellSubreport = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuGridReplaceCellTable = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuGridReplaceCellTextbox = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem17 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuGridInsertColumnBefore = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuGridInsertColumnAfter = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem18 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuGridInsertRowBefore = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuGridInsertRowAfter = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem19 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuGridDeleteColumn = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuGridDeleteRow = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuGridDeleteGrid = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem20 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuGridCopy = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuGridPaste = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuGridDelete = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem21 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuGridSelectAll = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.ContextMenuTable = new System.Windows.Forms.ContextMenuStrip(this.components);\n\t\t\tthis.MenuTableProperties = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuTableTableProperties = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuTableReplaceCell = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuTableReplaceCellChart = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuTableReplaceCellImage = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuTableReplaceCellList = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuTableReplaceCellMatrix = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuTableReplaceCellRectangle = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuTableReplaceCellSubreport = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuTableReplaceCellTable = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuTableReplaceCellTextbox = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem22 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuTableInsertColumnBefore = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuTableInsertColumnAfter = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem23 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuTableInsertRowBefore = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuTableInsertRowAfter = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem24 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuTableInsertGroup = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuTableEditGroup = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuTableDeleteGroup = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem25 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuTableDeleteColumn = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuTableDeleteRow = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuTableDeleteTable = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem26 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuTableCopy = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuTablePaste = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuTableDelete = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem27 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.MenuTableSelectAll = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.ContextMenuDefault.SuspendLayout();\n\t\t\tthis.ContextMenuChart.SuspendLayout();\n\t\t\tthis.ContextMenuMatrix.SuspendLayout();\n\t\t\tthis.ContextMenuSubreport.SuspendLayout();\n\t\t\tthis.ContextMenuGrid.SuspendLayout();\n\t\t\tthis.ContextMenuTable.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// ContextMenuDefault\n\t\t\t// \n\t\t\tresources.ApplyResources(this.ContextMenuDefault, \"ContextMenuDefault\");\n\t\t\tthis.ContextMenuDefault.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.MenuDefaultProperties,\n            this.toolStripMenuItem1,\n            this.MenuDefaultCopy,\n            this.MenuDefaultPaste,\n            this.MenuDefaultDelete,\n            this.toolStripMenuItem2,\n            this.MenuDefaultSelectAll,\n            this.toolStripMenuItem3,\n            this.MenuDefaultInsert});\n\t\t\tthis.ContextMenuDefault.Name = \"ContextMenuDefault\";\n\t\t\tthis.ContextMenuDefault.Opened += new System.EventHandler(this.menuContext_Popup);\n\t\t\t// \n\t\t\t// MenuDefaultProperties\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuDefaultProperties, \"MenuDefaultProperties\");\n\t\t\tthis.MenuDefaultProperties.Name = \"MenuDefaultProperties\";\n\t\t\tthis.MenuDefaultProperties.Click += new System.EventHandler(this.menuProperties_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem1, \"toolStripMenuItem1\");\n\t\t\tthis.toolStripMenuItem1.Name = \"toolStripMenuItem1\";\n\t\t\t// \n\t\t\t// MenuDefaultCopy\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuDefaultCopy, \"MenuDefaultCopy\");\n\t\t\tthis.MenuDefaultCopy.Name = \"MenuDefaultCopy\";\n\t\t\tthis.MenuDefaultCopy.Click += new System.EventHandler(this.menuCopy_Click);\n\t\t\t// \n\t\t\t// MenuDefaultPaste\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuDefaultPaste, \"MenuDefaultPaste\");\n\t\t\tthis.MenuDefaultPaste.Name = \"MenuDefaultPaste\";\n\t\t\tthis.MenuDefaultPaste.Click += new System.EventHandler(this.menuPaste_Click);\n\t\t\t// \n\t\t\t// MenuDefaultDelete\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuDefaultDelete, \"MenuDefaultDelete\");\n\t\t\tthis.MenuDefaultDelete.Name = \"MenuDefaultDelete\";\n\t\t\tthis.MenuDefaultDelete.Click += new System.EventHandler(this.menuDelete_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem2, \"toolStripMenuItem2\");\n\t\t\tthis.toolStripMenuItem2.Name = \"toolStripMenuItem2\";\n\t\t\t// \n\t\t\t// MenuDefaultSelectAll\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuDefaultSelectAll, \"MenuDefaultSelectAll\");\n\t\t\tthis.MenuDefaultSelectAll.Name = \"MenuDefaultSelectAll\";\n\t\t\tthis.MenuDefaultSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem3, \"toolStripMenuItem3\");\n\t\t\tthis.toolStripMenuItem3.Name = \"toolStripMenuItem3\";\n\t\t\t// \n\t\t\t// MenuDefaultInsert\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuDefaultInsert, \"MenuDefaultInsert\");\n\t\t\tthis.MenuDefaultInsert.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.MenuInsertChart,\n            this.MenuInsertGrid,\n            this.MenuInsertImage,\n            this.MenuInsertLine,\n            this.MenuInsertList,\n            this.MenuInsertMatrix,\n            this.MenuInsertRectangle,\n            this.MenuInsertSubreport,\n            this.MenuInsertTable,\n            this.MenuInsertTextbox});\n\t\t\tthis.MenuDefaultInsert.Name = \"MenuDefaultInsert\";\n\t\t\t// \n\t\t\t// MenuInsertChart\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuInsertChart, \"MenuInsertChart\");\n\t\t\tthis.MenuInsertChart.Name = \"MenuInsertChart\";\n\t\t\tthis.MenuInsertChart.Click += new System.EventHandler(this.menuInsertChart_Click);\n\t\t\t// \n\t\t\t// MenuInsertGrid\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuInsertGrid, \"MenuInsertGrid\");\n\t\t\tthis.MenuInsertGrid.Name = \"MenuInsertGrid\";\n\t\t\tthis.MenuInsertGrid.Click += new System.EventHandler(this.menuInsertGrid_Click);\n\t\t\t// \n\t\t\t// MenuInsertImage\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuInsertImage, \"MenuInsertImage\");\n\t\t\tthis.MenuInsertImage.Name = \"MenuInsertImage\";\n\t\t\tthis.MenuInsertImage.Click += new System.EventHandler(this.menuInsertImage_Click);\n\t\t\t// \n\t\t\t// MenuInsertLine\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuInsertLine, \"MenuInsertLine\");\n\t\t\tthis.MenuInsertLine.Name = \"MenuInsertLine\";\n\t\t\tthis.MenuInsertLine.Click += new System.EventHandler(this.menuInsertLine_Click);\n\t\t\t// \n\t\t\t// MenuInsertList\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuInsertList, \"MenuInsertList\");\n\t\t\tthis.MenuInsertList.Name = \"MenuInsertList\";\n\t\t\tthis.MenuInsertList.Click += new System.EventHandler(this.menuInsertList_Click);\n\t\t\t// \n\t\t\t// MenuInsertMatrix\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuInsertMatrix, \"MenuInsertMatrix\");\n\t\t\tthis.MenuInsertMatrix.Name = \"MenuInsertMatrix\";\n\t\t\tthis.MenuInsertMatrix.Click += new System.EventHandler(this.menuInsertMatrix_Click);\n\t\t\t// \n\t\t\t// MenuInsertRectangle\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuInsertRectangle, \"MenuInsertRectangle\");\n\t\t\tthis.MenuInsertRectangle.Name = \"MenuInsertRectangle\";\n\t\t\tthis.MenuInsertRectangle.Click += new System.EventHandler(this.menuInsertRectangle_Click);\n\t\t\t// \n\t\t\t// MenuInsertSubreport\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuInsertSubreport, \"MenuInsertSubreport\");\n\t\t\tthis.MenuInsertSubreport.Name = \"MenuInsertSubreport\";\n\t\t\tthis.MenuInsertSubreport.Click += new System.EventHandler(this.menuInsertSubreport_Click);\n\t\t\t// \n\t\t\t// MenuInsertTable\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuInsertTable, \"MenuInsertTable\");\n\t\t\tthis.MenuInsertTable.Name = \"MenuInsertTable\";\n\t\t\tthis.MenuInsertTable.Click += new System.EventHandler(this.menuInsertTable_Click);\n\t\t\t// \n\t\t\t// MenuInsertTextbox\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuInsertTextbox, \"MenuInsertTextbox\");\n\t\t\tthis.MenuInsertTextbox.Name = \"MenuInsertTextbox\";\n\t\t\tthis.MenuInsertTextbox.Click += new System.EventHandler(this.menuInsertTextbox_Click);\n\t\t\t// \n\t\t\t// ContextMenuChart\n\t\t\t// \n\t\t\tresources.ApplyResources(this.ContextMenuChart, \"ContextMenuChart\");\n\t\t\tthis.ContextMenuChart.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.MenuChartProperties,\n            this.MenuChartLegend,\n            this.MenuChartTitle,\n            this.toolStripMenuItem4,\n            this.MenuChartInsertCategoryGrouping,\n            this.MenuChartEditCategoryGrouping,\n            this.MenuChartDeleteCategoryGrouping,\n            this.toolStripMenuItem5,\n            this.MenuChartCategoryAxis,\n            this.MenuChartCategoryAxisTitle,\n            this.toolStripMenuItem6,\n            this.MenuChartInsertSeriesGrouping,\n            this.MenuChartEditSeriesGrouping,\n            this.MenuChartDeleteSeriesGrouping,\n            this.toolStripMenuItem7,\n            this.MenuChartValueAxis,\n            this.MenuChartValueAxisTitle,\n            this.MenuChartValueAxisRightTitle,\n            this.toolStripMenuItem8,\n            this.MenuChartCopy,\n            this.MenuChartPaste,\n            this.MenuChartDelete,\n            this.toolStripMenuItem9,\n            this.MenuChartSelectAll});\n\t\t\tthis.ContextMenuChart.Name = \"ContextMenuChart\";\n\t\t\tthis.ContextMenuChart.Opened += new System.EventHandler(this.menuContext_Popup);\n\t\t\t// \n\t\t\t// MenuChartProperties\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuChartProperties, \"MenuChartProperties\");\n\t\t\tthis.MenuChartProperties.Name = \"MenuChartProperties\";\n\t\t\tthis.MenuChartProperties.Click += new System.EventHandler(this.menuProperties_Click);\n\t\t\t// \n\t\t\t// MenuChartLegend\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuChartLegend, \"MenuChartLegend\");\n\t\t\tthis.MenuChartLegend.Name = \"MenuChartLegend\";\n\t\t\tthis.MenuChartLegend.Click += new System.EventHandler(this.menuPropertiesLegend_Click);\n\t\t\t// \n\t\t\t// MenuChartTitle\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuChartTitle, \"MenuChartTitle\");\n\t\t\tthis.MenuChartTitle.Name = \"MenuChartTitle\";\n\t\t\tthis.MenuChartTitle.Click += new System.EventHandler(this.menuPropertiesChartTitle_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem4, \"toolStripMenuItem4\");\n\t\t\tthis.toolStripMenuItem4.Name = \"toolStripMenuItem4\";\n\t\t\t// \n\t\t\t// MenuChartInsertCategoryGrouping\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuChartInsertCategoryGrouping, \"MenuChartInsertCategoryGrouping\");\n\t\t\tthis.MenuChartInsertCategoryGrouping.Name = \"MenuChartInsertCategoryGrouping\";\n\t\t\tthis.MenuChartInsertCategoryGrouping.Click += new System.EventHandler(this.menuChartInsertCategoryGrouping_Click);\n\t\t\t// \n\t\t\t// MenuChartEditCategoryGrouping\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuChartEditCategoryGrouping, \"MenuChartEditCategoryGrouping\");\n\t\t\tthis.MenuChartEditCategoryGrouping.Name = \"MenuChartEditCategoryGrouping\";\n\t\t\t// \n\t\t\t// MenuChartDeleteCategoryGrouping\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuChartDeleteCategoryGrouping, \"MenuChartDeleteCategoryGrouping\");\n\t\t\tthis.MenuChartDeleteCategoryGrouping.Name = \"MenuChartDeleteCategoryGrouping\";\n\t\t\t// \n\t\t\t// toolStripMenuItem5\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem5, \"toolStripMenuItem5\");\n\t\t\tthis.toolStripMenuItem5.Name = \"toolStripMenuItem5\";\n\t\t\t// \n\t\t\t// MenuChartCategoryAxis\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuChartCategoryAxis, \"MenuChartCategoryAxis\");\n\t\t\tthis.MenuChartCategoryAxis.Name = \"MenuChartCategoryAxis\";\n\t\t\tthis.MenuChartCategoryAxis.Click += new System.EventHandler(this.menuPropertiesCategoryAxis_Click);\n\t\t\t// \n\t\t\t// MenuChartCategoryAxisTitle\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuChartCategoryAxisTitle, \"MenuChartCategoryAxisTitle\");\n\t\t\tthis.MenuChartCategoryAxisTitle.Name = \"MenuChartCategoryAxisTitle\";\n\t\t\tthis.MenuChartCategoryAxisTitle.Click += new System.EventHandler(this.menuPropertiesCategoryAxisTitle_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem6\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem6, \"toolStripMenuItem6\");\n\t\t\tthis.toolStripMenuItem6.Name = \"toolStripMenuItem6\";\n\t\t\t// \n\t\t\t// MenuChartInsertSeriesGrouping\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuChartInsertSeriesGrouping, \"MenuChartInsertSeriesGrouping\");\n\t\t\tthis.MenuChartInsertSeriesGrouping.Name = \"MenuChartInsertSeriesGrouping\";\n\t\t\tthis.MenuChartInsertSeriesGrouping.Click += new System.EventHandler(this.menuChartInsertSeriesGrouping_Click);\n\t\t\t// \n\t\t\t// MenuChartEditSeriesGrouping\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuChartEditSeriesGrouping, \"MenuChartEditSeriesGrouping\");\n\t\t\tthis.MenuChartEditSeriesGrouping.Name = \"MenuChartEditSeriesGrouping\";\n\t\t\t// \n\t\t\t// MenuChartDeleteSeriesGrouping\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuChartDeleteSeriesGrouping, \"MenuChartDeleteSeriesGrouping\");\n\t\t\tthis.MenuChartDeleteSeriesGrouping.Name = \"MenuChartDeleteSeriesGrouping\";\n\t\t\t// \n\t\t\t// toolStripMenuItem7\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem7, \"toolStripMenuItem7\");\n\t\t\tthis.toolStripMenuItem7.Name = \"toolStripMenuItem7\";\n\t\t\t// \n\t\t\t// MenuChartValueAxis\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuChartValueAxis, \"MenuChartValueAxis\");\n\t\t\tthis.MenuChartValueAxis.Name = \"MenuChartValueAxis\";\n\t\t\tthis.MenuChartValueAxis.Click += new System.EventHandler(this.menuPropertiesValueAxis_Click);\n\t\t\t// \n\t\t\t// MenuChartValueAxisTitle\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuChartValueAxisTitle, \"MenuChartValueAxisTitle\");\n\t\t\tthis.MenuChartValueAxisTitle.Name = \"MenuChartValueAxisTitle\";\n\t\t\tthis.MenuChartValueAxisTitle.Click += new System.EventHandler(this.menuPropertiesValueAxisTitle_Click);\n\t\t\t// \n\t\t\t// MenuChartValueAxisRightTitle\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuChartValueAxisRightTitle, \"MenuChartValueAxisRightTitle\");\n\t\t\tthis.MenuChartValueAxisRightTitle.Name = \"MenuChartValueAxisRightTitle\";\n\t\t\tthis.MenuChartValueAxisRightTitle.Click += new System.EventHandler(this.menuPropertiesValueAxis2Title_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem8\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem8, \"toolStripMenuItem8\");\n\t\t\tthis.toolStripMenuItem8.Name = \"toolStripMenuItem8\";\n\t\t\t// \n\t\t\t// MenuChartCopy\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuChartCopy, \"MenuChartCopy\");\n\t\t\tthis.MenuChartCopy.Name = \"MenuChartCopy\";\n\t\t\tthis.MenuChartCopy.Click += new System.EventHandler(this.menuCopy_Click);\n\t\t\t// \n\t\t\t// MenuChartPaste\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuChartPaste, \"MenuChartPaste\");\n\t\t\tthis.MenuChartPaste.Name = \"MenuChartPaste\";\n\t\t\tthis.MenuChartPaste.Click += new System.EventHandler(this.menuPaste_Click);\n\t\t\t// \n\t\t\t// MenuChartDelete\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuChartDelete, \"MenuChartDelete\");\n\t\t\tthis.MenuChartDelete.Name = \"MenuChartDelete\";\n\t\t\tthis.MenuChartDelete.Click += new System.EventHandler(this.menuDelete_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem9\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem9, \"toolStripMenuItem9\");\n\t\t\tthis.toolStripMenuItem9.Name = \"toolStripMenuItem9\";\n\t\t\t// \n\t\t\t// MenuChartSelectAll\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuChartSelectAll, \"MenuChartSelectAll\");\n\t\t\tthis.MenuChartSelectAll.Name = \"MenuChartSelectAll\";\n\t\t\tthis.MenuChartSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click);\n\t\t\t// \n\t\t\t// ContextMenuMatrix\n\t\t\t// \n\t\t\tresources.ApplyResources(this.ContextMenuMatrix, \"ContextMenuMatrix\");\n\t\t\tthis.ContextMenuMatrix.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.MenuMatrixProperties,\n            this.MenuMatrixMatrixProperties,\n            this.toolStripMenuItem10,\n            this.MenuMatrixInsertColumnGroup,\n            this.MenuMatrixEditColumnGroup,\n            this.MenuMatrixDeleteColumnGroup,\n            this.toolStripMenuItem11,\n            this.MenuMatrixInsertRowGroup,\n            this.MenuMatrixEditRowGroup,\n            this.MenuMatrixDeleteRowGroup,\n            this.toolStripMenuItem12,\n            this.MenuMatrixDeleteMatrix,\n            this.toolStripMenuItem13,\n            this.MenuMatrixCopy,\n            this.MenuMatrixPaste,\n            this.MenuMatrixDelete,\n            this.toolStripMenuItem14,\n            this.MenuMatrixSelectAll});\n\t\t\tthis.ContextMenuMatrix.Name = \"ContextMenuMatrix\";\n\t\t\tthis.ContextMenuMatrix.Opened += new System.EventHandler(this.menuContext_Popup);\n\t\t\t// \n\t\t\t// MenuMatrixProperties\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuMatrixProperties, \"MenuMatrixProperties\");\n\t\t\tthis.MenuMatrixProperties.Name = \"MenuMatrixProperties\";\n\t\t\tthis.MenuMatrixProperties.Click += new System.EventHandler(this.menuProperties_Click);\n\t\t\t// \n\t\t\t// MenuMatrixMatrixProperties\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuMatrixMatrixProperties, \"MenuMatrixMatrixProperties\");\n\t\t\tthis.MenuMatrixMatrixProperties.Name = \"MenuMatrixMatrixProperties\";\n\t\t\tthis.MenuMatrixMatrixProperties.Click += new System.EventHandler(this.menuMatrixProperties_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem10\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem10, \"toolStripMenuItem10\");\n\t\t\tthis.toolStripMenuItem10.Name = \"toolStripMenuItem10\";\n\t\t\t// \n\t\t\t// MenuMatrixInsertColumnGroup\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuMatrixInsertColumnGroup, \"MenuMatrixInsertColumnGroup\");\n\t\t\tthis.MenuMatrixInsertColumnGroup.Name = \"MenuMatrixInsertColumnGroup\";\n\t\t\tthis.MenuMatrixInsertColumnGroup.Click += new System.EventHandler(this.menuMatrixInsertColumnGroup_Click);\n\t\t\t// \n\t\t\t// MenuMatrixEditColumnGroup\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuMatrixEditColumnGroup, \"MenuMatrixEditColumnGroup\");\n\t\t\tthis.MenuMatrixEditColumnGroup.Name = \"MenuMatrixEditColumnGroup\";\n\t\t\t// \n\t\t\t// MenuMatrixDeleteColumnGroup\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuMatrixDeleteColumnGroup, \"MenuMatrixDeleteColumnGroup\");\n\t\t\tthis.MenuMatrixDeleteColumnGroup.Name = \"MenuMatrixDeleteColumnGroup\";\n\t\t\t// \n\t\t\t// toolStripMenuItem11\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem11, \"toolStripMenuItem11\");\n\t\t\tthis.toolStripMenuItem11.Name = \"toolStripMenuItem11\";\n\t\t\t// \n\t\t\t// MenuMatrixInsertRowGroup\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuMatrixInsertRowGroup, \"MenuMatrixInsertRowGroup\");\n\t\t\tthis.MenuMatrixInsertRowGroup.Name = \"MenuMatrixInsertRowGroup\";\n\t\t\tthis.MenuMatrixInsertRowGroup.Click += new System.EventHandler(this.menuMatrixInsertRowGroup_Click);\n\t\t\t// \n\t\t\t// MenuMatrixEditRowGroup\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuMatrixEditRowGroup, \"MenuMatrixEditRowGroup\");\n\t\t\tthis.MenuMatrixEditRowGroup.Name = \"MenuMatrixEditRowGroup\";\n\t\t\t// \n\t\t\t// MenuMatrixDeleteRowGroup\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuMatrixDeleteRowGroup, \"MenuMatrixDeleteRowGroup\");\n\t\t\tthis.MenuMatrixDeleteRowGroup.Name = \"MenuMatrixDeleteRowGroup\";\n\t\t\t// \n\t\t\t// toolStripMenuItem12\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem12, \"toolStripMenuItem12\");\n\t\t\tthis.toolStripMenuItem12.Name = \"toolStripMenuItem12\";\n\t\t\t// \n\t\t\t// MenuMatrixDeleteMatrix\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuMatrixDeleteMatrix, \"MenuMatrixDeleteMatrix\");\n\t\t\tthis.MenuMatrixDeleteMatrix.Name = \"MenuMatrixDeleteMatrix\";\n\t\t\tthis.MenuMatrixDeleteMatrix.Click += new System.EventHandler(this.menuMatrixDelete_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem13\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem13, \"toolStripMenuItem13\");\n\t\t\tthis.toolStripMenuItem13.Name = \"toolStripMenuItem13\";\n\t\t\t// \n\t\t\t// MenuMatrixCopy\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuMatrixCopy, \"MenuMatrixCopy\");\n\t\t\tthis.MenuMatrixCopy.Name = \"MenuMatrixCopy\";\n\t\t\tthis.MenuMatrixCopy.Click += new System.EventHandler(this.menuCopy_Click);\n\t\t\t// \n\t\t\t// MenuMatrixPaste\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuMatrixPaste, \"MenuMatrixPaste\");\n\t\t\tthis.MenuMatrixPaste.Name = \"MenuMatrixPaste\";\n\t\t\tthis.MenuMatrixPaste.Click += new System.EventHandler(this.menuPaste_Click);\n\t\t\t// \n\t\t\t// MenuMatrixDelete\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuMatrixDelete, \"MenuMatrixDelete\");\n\t\t\tthis.MenuMatrixDelete.Name = \"MenuMatrixDelete\";\n\t\t\tthis.MenuMatrixDelete.Click += new System.EventHandler(this.menuDelete_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem14\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem14, \"toolStripMenuItem14\");\n\t\t\tthis.toolStripMenuItem14.Name = \"toolStripMenuItem14\";\n\t\t\t// \n\t\t\t// MenuMatrixSelectAll\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuMatrixSelectAll, \"MenuMatrixSelectAll\");\n\t\t\tthis.MenuMatrixSelectAll.Name = \"MenuMatrixSelectAll\";\n\t\t\tthis.MenuMatrixSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click);\n\t\t\t// \n\t\t\t// ContextMenuSubreport\n\t\t\t// \n\t\t\tresources.ApplyResources(this.ContextMenuSubreport, \"ContextMenuSubreport\");\n\t\t\tthis.ContextMenuSubreport.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.MenuSubreportProperties,\n            this.MenuSubreportOpen,\n            this.toolStripMenuItem15,\n            this.MenuSubreportCopy,\n            this.MenuSubreportPaste,\n            this.MenuSubreportDelete,\n            this.toolStripMenuItem16,\n            this.MenuSubreportSelectAll});\n\t\t\tthis.ContextMenuSubreport.Name = \"ContextMenuSubreport\";\n\t\t\tthis.ContextMenuSubreport.Opened += new System.EventHandler(this.menuContext_Popup);\n\t\t\t// \n\t\t\t// MenuSubreportProperties\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuSubreportProperties, \"MenuSubreportProperties\");\n\t\t\tthis.MenuSubreportProperties.Name = \"MenuSubreportProperties\";\n\t\t\tthis.MenuSubreportProperties.Click += new System.EventHandler(this.menuProperties_Click);\n\t\t\t// \n\t\t\t// MenuSubreportOpen\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuSubreportOpen, \"MenuSubreportOpen\");\n\t\t\tthis.MenuSubreportOpen.Name = \"MenuSubreportOpen\";\n\t\t\tthis.MenuSubreportOpen.Click += new System.EventHandler(this.menuOpenSubreport_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem15\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem15, \"toolStripMenuItem15\");\n\t\t\tthis.toolStripMenuItem15.Name = \"toolStripMenuItem15\";\n\t\t\t// \n\t\t\t// MenuSubreportCopy\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuSubreportCopy, \"MenuSubreportCopy\");\n\t\t\tthis.MenuSubreportCopy.Name = \"MenuSubreportCopy\";\n\t\t\tthis.MenuSubreportCopy.Click += new System.EventHandler(this.menuCopy_Click);\n\t\t\t// \n\t\t\t// MenuSubreportPaste\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuSubreportPaste, \"MenuSubreportPaste\");\n\t\t\tthis.MenuSubreportPaste.Name = \"MenuSubreportPaste\";\n\t\t\tthis.MenuSubreportPaste.Click += new System.EventHandler(this.menuPaste_Click);\n\t\t\t// \n\t\t\t// MenuSubreportDelete\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuSubreportDelete, \"MenuSubreportDelete\");\n\t\t\tthis.MenuSubreportDelete.Name = \"MenuSubreportDelete\";\n\t\t\tthis.MenuSubreportDelete.Click += new System.EventHandler(this.menuDelete_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem16\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem16, \"toolStripMenuItem16\");\n\t\t\tthis.toolStripMenuItem16.Name = \"toolStripMenuItem16\";\n\t\t\t// \n\t\t\t// MenuSubreportSelectAll\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuSubreportSelectAll, \"MenuSubreportSelectAll\");\n\t\t\tthis.MenuSubreportSelectAll.Name = \"MenuSubreportSelectAll\";\n\t\t\tthis.MenuSubreportSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click);\n\t\t\t// \n\t\t\t// ContextMenuGrid\n\t\t\t// \n\t\t\tresources.ApplyResources(this.ContextMenuGrid, \"ContextMenuGrid\");\n\t\t\tthis.ContextMenuGrid.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.MenuGridProperties,\n            this.MenuGridGridProperties,\n            this.MenuGridReplaceCell,\n            this.toolStripMenuItem17,\n            this.MenuGridInsertColumnBefore,\n            this.MenuGridInsertColumnAfter,\n            this.toolStripMenuItem18,\n            this.MenuGridInsertRowBefore,\n            this.MenuGridInsertRowAfter,\n            this.toolStripMenuItem19,\n            this.MenuGridDeleteColumn,\n            this.MenuGridDeleteRow,\n            this.MenuGridDeleteGrid,\n            this.toolStripMenuItem20,\n            this.MenuGridCopy,\n            this.MenuGridPaste,\n            this.MenuGridDelete,\n            this.toolStripMenuItem21,\n            this.MenuGridSelectAll});\n\t\t\tthis.ContextMenuGrid.Name = \"ContextMenuGrid\";\n\t\t\tthis.ContextMenuGrid.Opened += new System.EventHandler(this.menuContext_Popup);\n\t\t\t// \n\t\t\t// MenuGridProperties\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridProperties, \"MenuGridProperties\");\n\t\t\tthis.MenuGridProperties.Name = \"MenuGridProperties\";\n\t\t\tthis.MenuGridProperties.Click += new System.EventHandler(this.menuProperties_Click);\n\t\t\t// \n\t\t\t// MenuGridGridProperties\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridGridProperties, \"MenuGridGridProperties\");\n\t\t\tthis.MenuGridGridProperties.Name = \"MenuGridGridProperties\";\n\t\t\tthis.MenuGridGridProperties.Click += new System.EventHandler(this.menuTableProperties_Click);\n\t\t\t// \n\t\t\t// MenuGridReplaceCell\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridReplaceCell, \"MenuGridReplaceCell\");\n\t\t\tthis.MenuGridReplaceCell.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.MenuGridReplaceCellChart,\n            this.MenuGridReplaceCellImage,\n            this.MenuGridReplaceCellList,\n            this.MenuGridReplaceCellMatrix,\n            this.MenuGridReplaceCellRectangle,\n            this.MenuGridReplaceCellSubreport,\n            this.MenuGridReplaceCellTable,\n            this.MenuGridReplaceCellTextbox});\n\t\t\tthis.MenuGridReplaceCell.Name = \"MenuGridReplaceCell\";\n\t\t\t// \n\t\t\t// MenuGridReplaceCellChart\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridReplaceCellChart, \"MenuGridReplaceCellChart\");\n\t\t\tthis.MenuGridReplaceCellChart.Name = \"MenuGridReplaceCellChart\";\n\t\t\tthis.MenuGridReplaceCellChart.Click += new System.EventHandler(this.menuInsertChart_Click);\n\t\t\t// \n\t\t\t// MenuGridReplaceCellImage\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridReplaceCellImage, \"MenuGridReplaceCellImage\");\n\t\t\tthis.MenuGridReplaceCellImage.Name = \"MenuGridReplaceCellImage\";\n\t\t\tthis.MenuGridReplaceCellImage.Click += new System.EventHandler(this.menuInsertImage_Click);\n\t\t\t// \n\t\t\t// MenuGridReplaceCellList\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridReplaceCellList, \"MenuGridReplaceCellList\");\n\t\t\tthis.MenuGridReplaceCellList.Name = \"MenuGridReplaceCellList\";\n\t\t\tthis.MenuGridReplaceCellList.Click += new System.EventHandler(this.menuInsertList_Click);\n\t\t\t// \n\t\t\t// MenuGridReplaceCellMatrix\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridReplaceCellMatrix, \"MenuGridReplaceCellMatrix\");\n\t\t\tthis.MenuGridReplaceCellMatrix.Name = \"MenuGridReplaceCellMatrix\";\n\t\t\tthis.MenuGridReplaceCellMatrix.Click += new System.EventHandler(this.menuInsertMatrix_Click);\n\t\t\t// \n\t\t\t// MenuGridReplaceCellRectangle\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridReplaceCellRectangle, \"MenuGridReplaceCellRectangle\");\n\t\t\tthis.MenuGridReplaceCellRectangle.Name = \"MenuGridReplaceCellRectangle\";\n\t\t\tthis.MenuGridReplaceCellRectangle.Click += new System.EventHandler(this.menuInsertRectangle_Click);\n\t\t\t// \n\t\t\t// MenuGridReplaceCellSubreport\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridReplaceCellSubreport, \"MenuGridReplaceCellSubreport\");\n\t\t\tthis.MenuGridReplaceCellSubreport.Name = \"MenuGridReplaceCellSubreport\";\n\t\t\tthis.MenuGridReplaceCellSubreport.Click += new System.EventHandler(this.menuInsertSubreport_Click);\n\t\t\t// \n\t\t\t// MenuGridReplaceCellTable\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridReplaceCellTable, \"MenuGridReplaceCellTable\");\n\t\t\tthis.MenuGridReplaceCellTable.Name = \"MenuGridReplaceCellTable\";\n\t\t\tthis.MenuGridReplaceCellTable.Click += new System.EventHandler(this.menuInsertTable_Click);\n\t\t\t// \n\t\t\t// MenuGridReplaceCellTextbox\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridReplaceCellTextbox, \"MenuGridReplaceCellTextbox\");\n\t\t\tthis.MenuGridReplaceCellTextbox.Name = \"MenuGridReplaceCellTextbox\";\n\t\t\tthis.MenuGridReplaceCellTextbox.Click += new System.EventHandler(this.menuInsertTextbox_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem17\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem17, \"toolStripMenuItem17\");\n\t\t\tthis.toolStripMenuItem17.Name = \"toolStripMenuItem17\";\n\t\t\t// \n\t\t\t// MenuGridInsertColumnBefore\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridInsertColumnBefore, \"MenuGridInsertColumnBefore\");\n\t\t\tthis.MenuGridInsertColumnBefore.Name = \"MenuGridInsertColumnBefore\";\n\t\t\tthis.MenuGridInsertColumnBefore.Click += new System.EventHandler(this.menuTableInsertColumnBefore_Click);\n\t\t\t// \n\t\t\t// MenuGridInsertColumnAfter\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridInsertColumnAfter, \"MenuGridInsertColumnAfter\");\n\t\t\tthis.MenuGridInsertColumnAfter.Name = \"MenuGridInsertColumnAfter\";\n\t\t\tthis.MenuGridInsertColumnAfter.Click += new System.EventHandler(this.menuTableInsertColumnAfter_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem18\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem18, \"toolStripMenuItem18\");\n\t\t\tthis.toolStripMenuItem18.Name = \"toolStripMenuItem18\";\n\t\t\t// \n\t\t\t// MenuGridInsertRowBefore\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridInsertRowBefore, \"MenuGridInsertRowBefore\");\n\t\t\tthis.MenuGridInsertRowBefore.Name = \"MenuGridInsertRowBefore\";\n\t\t\tthis.MenuGridInsertRowBefore.Click += new System.EventHandler(this.menuTableInsertRowBefore_Click);\n\t\t\t// \n\t\t\t// MenuGridInsertRowAfter\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridInsertRowAfter, \"MenuGridInsertRowAfter\");\n\t\t\tthis.MenuGridInsertRowAfter.Name = \"MenuGridInsertRowAfter\";\n\t\t\tthis.MenuGridInsertRowAfter.Click += new System.EventHandler(this.menuTableInsertRowAfter_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem19\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem19, \"toolStripMenuItem19\");\n\t\t\tthis.toolStripMenuItem19.Name = \"toolStripMenuItem19\";\n\t\t\t// \n\t\t\t// MenuGridDeleteColumn\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridDeleteColumn, \"MenuGridDeleteColumn\");\n\t\t\tthis.MenuGridDeleteColumn.Name = \"MenuGridDeleteColumn\";\n\t\t\tthis.MenuGridDeleteColumn.Click += new System.EventHandler(this.menuTableDeleteColumn_Click);\n\t\t\t// \n\t\t\t// MenuGridDeleteRow\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridDeleteRow, \"MenuGridDeleteRow\");\n\t\t\tthis.MenuGridDeleteRow.Name = \"MenuGridDeleteRow\";\n\t\t\tthis.MenuGridDeleteRow.Click += new System.EventHandler(this.menuTableDeleteRow_Click);\n\t\t\t// \n\t\t\t// MenuGridDeleteGrid\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridDeleteGrid, \"MenuGridDeleteGrid\");\n\t\t\tthis.MenuGridDeleteGrid.Name = \"MenuGridDeleteGrid\";\n\t\t\tthis.MenuGridDeleteGrid.Click += new System.EventHandler(this.menuTableDelete_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem20\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem20, \"toolStripMenuItem20\");\n\t\t\tthis.toolStripMenuItem20.Name = \"toolStripMenuItem20\";\n\t\t\t// \n\t\t\t// MenuGridCopy\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridCopy, \"MenuGridCopy\");\n\t\t\tthis.MenuGridCopy.Name = \"MenuGridCopy\";\n\t\t\tthis.MenuGridCopy.Click += new System.EventHandler(this.menuCopy_Click);\n\t\t\t// \n\t\t\t// MenuGridPaste\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridPaste, \"MenuGridPaste\");\n\t\t\tthis.MenuGridPaste.Name = \"MenuGridPaste\";\n\t\t\tthis.MenuGridPaste.Click += new System.EventHandler(this.menuPaste_Click);\n\t\t\t// \n\t\t\t// MenuGridDelete\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridDelete, \"MenuGridDelete\");\n\t\t\tthis.MenuGridDelete.Name = \"MenuGridDelete\";\n\t\t\tthis.MenuGridDelete.Click += new System.EventHandler(this.menuDelete_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem21\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem21, \"toolStripMenuItem21\");\n\t\t\tthis.toolStripMenuItem21.Name = \"toolStripMenuItem21\";\n\t\t\t// \n\t\t\t// MenuGridSelectAll\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuGridSelectAll, \"MenuGridSelectAll\");\n\t\t\tthis.MenuGridSelectAll.Name = \"MenuGridSelectAll\";\n\t\t\tthis.MenuGridSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click);\n\t\t\t// \n\t\t\t// ContextMenuTable\n\t\t\t// \n\t\t\tresources.ApplyResources(this.ContextMenuTable, \"ContextMenuTable\");\n\t\t\tthis.ContextMenuTable.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.MenuTableProperties,\n            this.MenuTableTableProperties,\n            this.MenuTableReplaceCell,\n            this.toolStripMenuItem22,\n            this.MenuTableInsertColumnBefore,\n            this.MenuTableInsertColumnAfter,\n            this.toolStripMenuItem23,\n            this.MenuTableInsertRowBefore,\n            this.MenuTableInsertRowAfter,\n            this.toolStripMenuItem24,\n            this.MenuTableInsertGroup,\n            this.MenuTableEditGroup,\n            this.MenuTableDeleteGroup,\n            this.toolStripMenuItem25,\n            this.MenuTableDeleteColumn,\n            this.MenuTableDeleteRow,\n            this.MenuTableDeleteTable,\n            this.toolStripMenuItem26,\n            this.MenuTableCopy,\n            this.MenuTablePaste,\n            this.MenuTableDelete,\n            this.toolStripMenuItem27,\n            this.MenuTableSelectAll});\n\t\t\tthis.ContextMenuTable.Name = \"ContextMenuTable\";\n\t\t\tthis.ContextMenuTable.Opened += new System.EventHandler(this.menuContext_Popup);\n\t\t\t// \n\t\t\t// MenuTableProperties\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableProperties, \"MenuTableProperties\");\n\t\t\tthis.MenuTableProperties.Name = \"MenuTableProperties\";\n\t\t\tthis.MenuTableProperties.Click += new System.EventHandler(this.menuProperties_Click);\n\t\t\t// \n\t\t\t// MenuTableTableProperties\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableTableProperties, \"MenuTableTableProperties\");\n\t\t\tthis.MenuTableTableProperties.Name = \"MenuTableTableProperties\";\n\t\t\tthis.MenuTableTableProperties.Click += new System.EventHandler(this.menuTableProperties_Click);\n\t\t\t// \n\t\t\t// MenuTableReplaceCell\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableReplaceCell, \"MenuTableReplaceCell\");\n\t\t\tthis.MenuTableReplaceCell.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.MenuTableReplaceCellChart,\n            this.MenuTableReplaceCellImage,\n            this.MenuTableReplaceCellList,\n            this.MenuTableReplaceCellMatrix,\n            this.MenuTableReplaceCellRectangle,\n            this.MenuTableReplaceCellSubreport,\n            this.MenuTableReplaceCellTable,\n            this.MenuTableReplaceCellTextbox});\n\t\t\tthis.MenuTableReplaceCell.Name = \"MenuTableReplaceCell\";\n\t\t\t// \n\t\t\t// MenuTableReplaceCellChart\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableReplaceCellChart, \"MenuTableReplaceCellChart\");\n\t\t\tthis.MenuTableReplaceCellChart.Name = \"MenuTableReplaceCellChart\";\n\t\t\tthis.MenuTableReplaceCellChart.Click += new System.EventHandler(this.menuInsertChart_Click);\n\t\t\t// \n\t\t\t// MenuTableReplaceCellImage\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableReplaceCellImage, \"MenuTableReplaceCellImage\");\n\t\t\tthis.MenuTableReplaceCellImage.Name = \"MenuTableReplaceCellImage\";\n\t\t\tthis.MenuTableReplaceCellImage.Click += new System.EventHandler(this.menuInsertImage_Click);\n\t\t\t// \n\t\t\t// MenuTableReplaceCellList\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableReplaceCellList, \"MenuTableReplaceCellList\");\n\t\t\tthis.MenuTableReplaceCellList.Name = \"MenuTableReplaceCellList\";\n\t\t\tthis.MenuTableReplaceCellList.Click += new System.EventHandler(this.menuInsertList_Click);\n\t\t\t// \n\t\t\t// MenuTableReplaceCellMatrix\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableReplaceCellMatrix, \"MenuTableReplaceCellMatrix\");\n\t\t\tthis.MenuTableReplaceCellMatrix.Name = \"MenuTableReplaceCellMatrix\";\n\t\t\tthis.MenuTableReplaceCellMatrix.Click += new System.EventHandler(this.menuInsertMatrix_Click);\n\t\t\t// \n\t\t\t// MenuTableReplaceCellRectangle\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableReplaceCellRectangle, \"MenuTableReplaceCellRectangle\");\n\t\t\tthis.MenuTableReplaceCellRectangle.Name = \"MenuTableReplaceCellRectangle\";\n\t\t\tthis.MenuTableReplaceCellRectangle.Click += new System.EventHandler(this.menuInsertRectangle_Click);\n\t\t\t// \n\t\t\t// MenuTableReplaceCellSubreport\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableReplaceCellSubreport, \"MenuTableReplaceCellSubreport\");\n\t\t\tthis.MenuTableReplaceCellSubreport.Name = \"MenuTableReplaceCellSubreport\";\n\t\t\tthis.MenuTableReplaceCellSubreport.Click += new System.EventHandler(this.menuInsertSubreport_Click);\n\t\t\t// \n\t\t\t// MenuTableReplaceCellTable\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableReplaceCellTable, \"MenuTableReplaceCellTable\");\n\t\t\tthis.MenuTableReplaceCellTable.Name = \"MenuTableReplaceCellTable\";\n\t\t\tthis.MenuTableReplaceCellTable.Click += new System.EventHandler(this.menuInsertTable_Click);\n\t\t\t// \n\t\t\t// MenuTableReplaceCellTextbox\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableReplaceCellTextbox, \"MenuTableReplaceCellTextbox\");\n\t\t\tthis.MenuTableReplaceCellTextbox.Name = \"MenuTableReplaceCellTextbox\";\n\t\t\tthis.MenuTableReplaceCellTextbox.Click += new System.EventHandler(this.menuInsertTextbox_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem22\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem22, \"toolStripMenuItem22\");\n\t\t\tthis.toolStripMenuItem22.Name = \"toolStripMenuItem22\";\n\t\t\t// \n\t\t\t// MenuTableInsertColumnBefore\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableInsertColumnBefore, \"MenuTableInsertColumnBefore\");\n\t\t\tthis.MenuTableInsertColumnBefore.Name = \"MenuTableInsertColumnBefore\";\n\t\t\tthis.MenuTableInsertColumnBefore.Click += new System.EventHandler(this.menuTableInsertColumnBefore_Click);\n\t\t\t// \n\t\t\t// MenuTableInsertColumnAfter\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableInsertColumnAfter, \"MenuTableInsertColumnAfter\");\n\t\t\tthis.MenuTableInsertColumnAfter.Name = \"MenuTableInsertColumnAfter\";\n\t\t\tthis.MenuTableInsertColumnAfter.Click += new System.EventHandler(this.menuTableInsertColumnAfter_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem23\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem23, \"toolStripMenuItem23\");\n\t\t\tthis.toolStripMenuItem23.Name = \"toolStripMenuItem23\";\n\t\t\t// \n\t\t\t// MenuTableInsertRowBefore\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableInsertRowBefore, \"MenuTableInsertRowBefore\");\n\t\t\tthis.MenuTableInsertRowBefore.Name = \"MenuTableInsertRowBefore\";\n\t\t\tthis.MenuTableInsertRowBefore.Click += new System.EventHandler(this.menuTableInsertRowBefore_Click);\n\t\t\t// \n\t\t\t// MenuTableInsertRowAfter\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableInsertRowAfter, \"MenuTableInsertRowAfter\");\n\t\t\tthis.MenuTableInsertRowAfter.Name = \"MenuTableInsertRowAfter\";\n\t\t\tthis.MenuTableInsertRowAfter.Click += new System.EventHandler(this.menuTableInsertRowAfter_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem24\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem24, \"toolStripMenuItem24\");\n\t\t\tthis.toolStripMenuItem24.Name = \"toolStripMenuItem24\";\n\t\t\t// \n\t\t\t// MenuTableInsertGroup\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableInsertGroup, \"MenuTableInsertGroup\");\n\t\t\tthis.MenuTableInsertGroup.Name = \"MenuTableInsertGroup\";\n\t\t\tthis.MenuTableInsertGroup.Click += new System.EventHandler(this.menuTableInsertGroup_Click);\n\t\t\t// \n\t\t\t// MenuTableEditGroup\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableEditGroup, \"MenuTableEditGroup\");\n\t\t\tthis.MenuTableEditGroup.Name = \"MenuTableEditGroup\";\n\t\t\t// \n\t\t\t// MenuTableDeleteGroup\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableDeleteGroup, \"MenuTableDeleteGroup\");\n\t\t\tthis.MenuTableDeleteGroup.Name = \"MenuTableDeleteGroup\";\n\t\t\t// \n\t\t\t// toolStripMenuItem25\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem25, \"toolStripMenuItem25\");\n\t\t\tthis.toolStripMenuItem25.Name = \"toolStripMenuItem25\";\n\t\t\t// \n\t\t\t// MenuTableDeleteColumn\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableDeleteColumn, \"MenuTableDeleteColumn\");\n\t\t\tthis.MenuTableDeleteColumn.Name = \"MenuTableDeleteColumn\";\n\t\t\tthis.MenuTableDeleteColumn.Click += new System.EventHandler(this.menuTableDeleteColumn_Click);\n\t\t\t// \n\t\t\t// MenuTableDeleteRow\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableDeleteRow, \"MenuTableDeleteRow\");\n\t\t\tthis.MenuTableDeleteRow.Name = \"MenuTableDeleteRow\";\n\t\t\tthis.MenuTableDeleteRow.Click += new System.EventHandler(this.menuTableDeleteRow_Click);\n\t\t\t// \n\t\t\t// MenuTableDeleteTable\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableDeleteTable, \"MenuTableDeleteTable\");\n\t\t\tthis.MenuTableDeleteTable.Name = \"MenuTableDeleteTable\";\n\t\t\tthis.MenuTableDeleteTable.Click += new System.EventHandler(this.menuTableDelete_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem26\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem26, \"toolStripMenuItem26\");\n\t\t\tthis.toolStripMenuItem26.Name = \"toolStripMenuItem26\";\n\t\t\t// \n\t\t\t// MenuTableCopy\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableCopy, \"MenuTableCopy\");\n\t\t\tthis.MenuTableCopy.Name = \"MenuTableCopy\";\n\t\t\tthis.MenuTableCopy.Click += new System.EventHandler(this.menuCopy_Click);\n\t\t\t// \n\t\t\t// MenuTablePaste\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTablePaste, \"MenuTablePaste\");\n\t\t\tthis.MenuTablePaste.Name = \"MenuTablePaste\";\n\t\t\tthis.MenuTablePaste.Click += new System.EventHandler(this.menuPaste_Click);\n\t\t\t// \n\t\t\t// MenuTableDelete\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableDelete, \"MenuTableDelete\");\n\t\t\tthis.MenuTableDelete.Name = \"MenuTableDelete\";\n\t\t\tthis.MenuTableDelete.Click += new System.EventHandler(this.menuDelete_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem27\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem27, \"toolStripMenuItem27\");\n\t\t\tthis.toolStripMenuItem27.Name = \"toolStripMenuItem27\";\n\t\t\t// \n\t\t\t// MenuTableSelectAll\n\t\t\t// \n\t\t\tresources.ApplyResources(this.MenuTableSelectAll, \"MenuTableSelectAll\");\n\t\t\tthis.MenuTableSelectAll.Name = \"MenuTableSelectAll\";\n\t\t\tthis.MenuTableSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click);\n\t\t\t// \n\t\t\t// DesignCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Name = \"DesignCtl\";\n\t\t\tthis.ContextMenuDefault.ResumeLayout(false);\n\t\t\tthis.ContextMenuChart.ResumeLayout(false);\n\t\t\tthis.ContextMenuMatrix.ResumeLayout(false);\n\t\t\tthis.ContextMenuSubreport.ResumeLayout(false);\n\t\t\tthis.ContextMenuGrid.ResumeLayout(false);\n\t\t\tthis.ContextMenuTable.ResumeLayout(false);\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/DesignCtl.cs",
    "content": "\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlDesign.Resources;\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.Xml.Linq;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// DesignCtl is a designer view of an RDL report\n\t/// </summary>\n\tpublic partial class DesignCtl\n\t{ \n\t\tpublic delegate void OpenSubreportEventHandler(object source, SubReportEventArgs e);\n        public delegate void HeightEventHandler(object source, HeightEventArgs e);\n        public event System.EventHandler ReportChanged;\n        public event System.EventHandler SelectionChanged;\n\t\tpublic event System.EventHandler SelectionMoved;\n\t\tpublic event System.EventHandler ReportItemInserted;\n        public event System.EventHandler VerticalScrollChanged;\n        public event System.EventHandler HorizontalScrollChanged;\n        public event OpenSubreportEventHandler OpenSubreport;\n        public event HeightEventHandler HeightChanged;\n        bool _InPaint;\t\t\t\t\t\t// to prevent recursively invoking paint\n\t\t// Scrollbars\n\t\tpublic VScrollBar _vScroll;\n\t\tpublic HScrollBar _hScroll;\n\t\tprivate float _DpiX;\n\t\tprivate float _DpiY;\n\t\tprivate XmlDocument _ReportDoc;\t\t// the xml document we're editting\n\t\tprivate Undo _Undo;\t\t\t\t\t//  the undo object tied to the _ReportDoc;\n\t\tprivate string _CurrentInsert;\t\t// current object to insert; null if none\n\n\t\t// Mouse control\n\t\tprivate XmlNode _MouseDownNode;\t\t// XmlNode affected by the mouse down event\n\t\tprivate HitLocationEnum _MouseDownLoc;\t// hit location affected by the mouse down event\n\t\tprivate Point _MousePosition= new Point();\t\t// position of the mouse\n\t\tprivate Point _ptRBOriginal = new Point();\t// starting position of the mouse (rubber banding)\n\t\tprivate Point _ptRBLast = new Point();\t\t//   last position of mouse (rubber banding)\n\t\tprivate bool _bHaveMouse;\t\t\t// flag indicates we're rubber banding\n\t\tprivate bool _AdjustScroll = false;\t// when adjusting band height we may need to adjust scroll bars\n\n\t\tpublic DesignXmlDraw _DrawPanel;\t\t// the main drawing panel\n        public RdlDesigner RdlDesigner;\n\n        public float SCALEX = 1;\n        public float SCALEY = 1;\n\n        public DesignCtl()\n\t\t{\n\t\t\tInitializeComponent();\n\t\t\t// Get our graphics DPI\t\t\t\t\t   \n\t\t\tGraphics g = null;\t\t\t\n\t\t\ttry\n\t\t\t{\n\t\t\t\tg = this.CreateGraphics(); \n\t\t\t\t_DpiX = g.DpiX;\n\t\t\t\t_DpiY = g.DpiY;\n\t\t\t}\n\t\t\tcatch\n\t\t\t{\n\t\t\t\t_DpiX = _DpiY = 96;\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (g != null)\n\t\t\t\t\tg.Dispose();\n\t\t\t}\n\n\t\t\t// Handle the controls\n\t\t\t_vScroll = new VScrollBar();\n\t\t\t_vScroll.Scroll += new ScrollEventHandler(this.VerticalScroll);\n\t\t\t_vScroll.Enabled = false;\n\n\t\t\t_hScroll = new HScrollBar();\n\t\t\t_hScroll.Scroll += new ScrollEventHandler(this.HorizontalScroll);\n\t\t\t_hScroll.Enabled = false;\n\n\t\t\t_DrawPanel = new DesignXmlDraw();\n\n\t\t\t_DrawPanel.Paint += new PaintEventHandler(this.DrawPanelPaint);\n\t\t\t_DrawPanel.MouseUp += new MouseEventHandler(this.DrawPanelMouseUp);\n\t\t\t_DrawPanel.MouseDown += new MouseEventHandler(this.DrawPanelMouseDown);\n\t\t\t_DrawPanel.Resize += new EventHandler(this.DrawPanelResize); \n\t\t\t_DrawPanel.MouseWheel +=new MouseEventHandler(DrawPanelMouseWheel);\n\t\t\t_DrawPanel.KeyDown += new KeyEventHandler(DrawPanelKeyDown);\n\t\t\t_DrawPanel.MouseMove += new MouseEventHandler(DrawPanelMouseMove);\n\t\t\t_DrawPanel.DoubleClick += new EventHandler(DrawPanelDoubleClick);\n\n\t\t\tthis.Layout +=new LayoutEventHandler(DesignCtl_Layout);\n\t\t\tthis.SuspendLayout();\t\t \n\n\t\t\t// Must be added in this order for DockStyle to work correctly\n\t\t\tthis.Controls.Add(_DrawPanel);\n\t\t\tthis.Controls.Add(_vScroll);\n\t\t\tthis.Controls.Add(_hScroll);\n\n\t\t\tthis.ResumeLayout(false);\n\n\t\t\tBuildContextMenus();\n\t\t}\n\n        public void SignalReportChanged()\n        {\n            ReportChanged(this, new EventArgs());\n        }\n\n        public void SignalSelectionMoved()\n        {\n            SelectionMoved(this, new EventArgs());\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tpublic string CurrentInsert\n\t\t{\n\t\t\tget {return _CurrentInsert; }\n\t\t\tset \n\t\t\t{\n\t\t\t\t_CurrentInsert = value;\n\t\t\t}\n\t\t}\n\n        public int VerticalScrollPosition\n        {\n            get { return _vScroll.Value; }\n        }\n\n        public int HorizontalScrollPosition\n        {\n            get { return _hScroll.Value; }\n        }\n\n        internal Color SepColor\n        {\n            get { return _DrawPanel.SepColor; }\n        }\n\n        internal float SepHeight\n        {\n            get { return _DrawPanel.SepHeight; }\n        }\n\n        internal float PageHeaderHeight\n        {\n            get {return _DrawPanel.PageHeaderHeight; }\n        }\n\n        internal float PageFooterHeight\n        {\n            get { return _DrawPanel.PageFooterHeight; }\n        }\n\n        internal float BodyHeight\n        {\n            get { return _DrawPanel.BodyHeight; }\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tpublic XmlDocument ReportDocument\n\t\t{\n\t\t\tget {return _ReportDoc;}\n\t\t\tset \n\t\t\t{\n\t\t\t\t_ReportDoc = value;\n\t\t\t\tif (_ReportDoc != null)\n\t\t\t\t{\n\t\t\t\t\t_Undo = new Undo(_ReportDoc, 300);\n\t\t\t\t\t_Undo.GroupsOnly = true;\t\t\t\t// don't record changes that we don't group.\n\t\t\t\t}\n\t\t\t\tint selCount = _DrawPanel.SelectedCount;\n\t\t\t\tthis._DrawPanel.ReportDocument = _ReportDoc;\n\t\t\t\tif (selCount > 0)\t// changing report document forces change to selection\n\t\t\t\t\tSelectionChanged(this, new EventArgs());\n\t\t\t}\n\t\t}\n \n\t\tinternal DesignXmlDraw DrawCtl\n\t\t{\n\t\t\tget {return _DrawPanel;}\n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tpublic string ReportSource\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_ReportDoc == null)\n\t\t\t\t\treturn null;\n\t\t\t\tstring result=\"\";\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\t// Convert the document into a string\n\t\t\t\t\tStringWriter sw = new StringWriter();\n                    var settings = new XmlWriterSettings\n                    {\n                        NewLineChars = RdlDesigner.XmlNewLine == NewLineChar.Unix ? \"\\n\" : \"\\r\\n\",\n                        Indent = true,\n                        IndentChars = \"  \"\n                    };\n                    var xw = XmlWriter.Create(sw, settings);\n\t\t\t\n                    _ReportDoc.WriteContentTo(xw);\n                    xw.Close();\n\t\t\t\t\tsw.Close();\t\n\t\t\t\t\tresult = sw.ToString();\n\t\t\t\t\tresult = result.Replace(\"xmlns=\\\"\\\"\", \"\");\n\t\t\t\t}\n\t\t\t\tcatch (Exception ex)\n\t\t\t\t{\n\t\t\t\t\tMessageBox.Show(ex.Message, Strings.DesignCtl_Show_UnableCreateRDL);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tset \n\t\t\t{\n\t\t\t\tif (value == null || value == \"\")\n\t\t\t\t{\n\t\t\t\t\tReportDocument = null;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tXmlDocument xDoc = new XmlDocument();\n\t\t\t\t\n\t\t\t\txDoc.PreserveWhitespace = false;\n\t\t\t\txDoc.LoadXml(value);\t// this will throw an exception if invalid XML\n\t\t\t\tReportDocument = xDoc;\n\t\t\t}\n\t\t}\n\n        public void ClearUndo()\n\t\t{\n\t\t\t_Undo.Reset();\n\t\t}\n\n        internal Undo UndoObject\n        {\n            get { return _Undo; }\n        }\n\t\tpublic void Undo()\n\t\t{\n\t\t\t_Undo.undo();\n\t\t\t_DrawPanel.ReportNames = null;\t// may not be required; but if reportitem deleted/inserted it must be\n            // determine if any of the selected nodes has been affected\n            bool clearSelect = false;\n            foreach (XmlNode n in _DrawPanel.SelectedList)\n            {\n                // this is an imperfect test but it shows if the node has been unchained.\n                if (n.ParentNode == null)\n                {\n                    clearSelect = true;\n                    break;\n                }\n            }\n            if (clearSelect)\n                _DrawPanel.SelectedList.Clear();\n\n\t\t\t_DrawPanel.Invalidate();   \n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public bool ShowReportItemOutline\n        {\n            get { return _DrawPanel.ShowReportItemOutline; }\n            set \n            {\n                _DrawPanel.ShowReportItemOutline = value; \n            }\n        }\n\n\t\tpublic void Redo()\n\t\t{\n\t\t}\n\n\t\tpublic string UndoDescription\n\t\t{\n\t\t\tget { return _Undo.Description; }\n\t\t}\n\n\t\tpublic bool CanUndo\n\t\t{\n\t\t\tget { return _Undo.CanUndo; }\n\t\t}\n\n\t\tpublic void StartUndoGroup(string description)\n\t\t{\n\t\t\t_Undo.StartUndoGroup(description);\n\t\t}\n\n\t\tpublic void EndUndoGroup(bool keepChanges)\n\t\t{\n\t\t\t_Undo.EndUndoGroup(keepChanges);\n\t\t}\n\n        public void Align(TextAlignEnum ta)\n        {\n            if (_DrawPanel.SelectedCount < 1)\n                return;\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_Align);\n\n            _Undo.EndUndoGroup();\n\n            return;\n        }\n\n\t\tpublic void AlignLefts()\n\t\t{\n            if (_DrawPanel.SelectedCount < 2)\n                return;\n            \n            XmlNode model = _DrawPanel.SelectedList[0] as XmlNode;\n\t\t\tXmlNode l = _DrawPanel.GetNamedChildNode(model, \"Left\");\n\t\t\tstring left = l == null? \"0pt\": l.InnerText;\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_Align);\n\t\t\tforeach (XmlNode xNode in _DrawPanel.SelectedList)\n\t\t\t{\t// we even reset the first one; in case the attribute wasn't specified\n\t\t\t\t_DrawPanel.SetElement(xNode, \"Left\", left);\n\t\t\t}\n\t\t\t_Undo.EndUndoGroup();\n\n\t\t\tReportChanged(this, new EventArgs());\n\t\t\t_DrawPanel.Invalidate();   \n\t\t}\n\n\t\tpublic void AlignRights()\n\t\t{\n            if (_DrawPanel.SelectedCount < 2)\n                return;\n            \n            XmlNode model = _DrawPanel.SelectedList[0] as XmlNode;\n\t\t\tRectangleF mrect = _DrawPanel.GetReportItemRect(model);\t// size attributes in points\n\t\t\tif (mrect.Width == float.MinValue)\n\t\t\t\treturn;\t\t\t// model doesn't have width specified\n\n\t\t\tfloat mright = mrect.Left + mrect.Width;\t// the right side of the model\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_Align);\n\t\t\tforeach (XmlNode xNode in _DrawPanel.SelectedList)\n\t\t\t{\t\n\t\t\t\tif (xNode == model)\n\t\t\t\t\tcontinue;\n\t\t\t\tRectangleF nrect = _DrawPanel.GetReportItemRect(xNode);\n\t\t\t\tif (nrect.Width == float.MinValue)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tfloat nleft = mright - nrect.Width;\n\t\t\t\tif (nleft < 0)\n\t\t\t\t\tnleft = 0;\n\n\t\t\t\tstring left = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.00}pt\", nleft);\n\t\t\t\t_DrawPanel.SetElement(xNode, \"Left\", left);\n\t\t\t}\n\t\t\t_Undo.EndUndoGroup();\n\n\t\t\tReportChanged(this, new EventArgs());\n\t\t\t_DrawPanel.Invalidate();   \n\t\t}\n\n\t\tpublic void AlignCenters()\n\t\t{\n            if (_DrawPanel.SelectedCount < 2)\n                return;\n\t\t\tXmlNode model = _DrawPanel.SelectedList[0] as XmlNode;\n\t\t\tRectangleF mrect = _DrawPanel.GetReportItemRect(model);\t// size attributes in points\n\t\t\tif (mrect.Width == float.MinValue)\n\t\t\t\treturn;\t\t\t// model doesn't have width specified\n\n\t\t\tfloat mc = mrect.Left + mrect.Width/2;\t// the middle of the model\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_Align);\n\t\t\tforeach (XmlNode xNode in _DrawPanel.SelectedList)\n\t\t\t{\t\n\t\t\t\tif (xNode == model)\n\t\t\t\t\tcontinue;\n\t\t\t\tRectangleF nrect = _DrawPanel.GetReportItemRect(xNode);\n\t\t\t\tif (nrect.Width == float.MinValue)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tfloat nleft =  (mc - (nrect.Left + nrect.Width/2));\n\t\t\t\tnleft += nrect.Left;\n\t\t\t\tif (nleft < 0)\n\t\t\t\t\tnleft = 0;\n\n\t\t\t\tstring left = string.Format(NumberFormatInfo.InvariantInfo,\"{0:0.00}pt\", nleft);\n\t\t\t\t_DrawPanel.SetElement(xNode, \"Left\", left);\n\t\t\t}\n\t\t\t_Undo.EndUndoGroup();\n\n\t\t\tReportChanged(this, new EventArgs());\n\t\t\t_DrawPanel.Invalidate();   \n\t\t}\n\t\t\n\n\n\t\t/// <summary>\n\t\t/// Align to center in a container a selected item.\n\t\t/// Items Tested : Simple TextBox , Rectangle , TextBox inside Rectangle , Line , Table\n\t\t/// For a selected Item the container can be a Section (PageHeader,Body,PageFooter) or another item (typ. rectangle)\n\t\t/// For Table alignment select only 1 cell \n\t\t/// \n\t\t/// </summary>\n\t\tpublic void HorizontalCenterInsideContainer()\n\t\t{\n\t\t\t// Get the selected node\n            XmlNode model = _DrawPanel.SelectedList[0] as XmlNode;\n\t\t\tRectangleF mrect;\n\t\t\tfloat W;\n\t\t\t//\n\t\t\t// If item selected is inside Table\n\t\t\t//\n\t\t\tif (_DrawPanel.InTable(model) == true)\n\t\t\t{\n\t\t\t\t// Get parent table of the selected node\n\t\t\t\tXmlNode NodoTable = _DrawPanel.TMParent(model);\n\t\t\t\t// Get size of table\n                mrect = _DrawPanel.GetRectangle(NodoTable);\n                //\n                // Get the size in point of the container and its center\n                //\n                W= _DrawPanel.WidthOfContainer(NodoTable) / 2;\n                //\n                // Calculate new Left position for table\n                //\n                float nleft = W - mrect.Width / 2;\n                //\n                // Set new left position of table\n                //\n                string left = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.00}pt\", nleft);\n                _DrawPanel.SetElement(NodoTable, \"Left\", left);\n            }\n\t\t\telse\n\t\t\t{\n\t\t\t\t// Get rectangle that contains the model\n\t\t\t\tmrect = _DrawPanel.GetReportItemRect(model);\n\t\t\t\tif (mrect.Width == float.MinValue) return;\n                //\n                // Get the size in point of the container and its center\n                //\n                W = _DrawPanel.WidthOfContainer(model) / 2;\n                //\n                // Calculate new Left position for model\n                //\n                float nleft = W - mrect.Width / 2;\n                //\n                // Set new left position of model\n                //\n                string left = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.00}pt\", nleft);\n                _DrawPanel.SetElement(model, \"Left\", left);\n            }\n            ReportChanged(this, new EventArgs());\n            _DrawPanel.Invalidate();\n        }\n\n\t\t/// <summary>\n\t\t/// Vertical center alignment.\n\t\t/// Alignment can be done only on item inside a container (ie rectangle) or only PageHeader or Footer\n\t\t/// </summary>\n\t\tpublic void VerticalCenterInsideContainer()\n\t\t{\n            // Get the selected node\n            XmlNode model = _DrawPanel.SelectedList[0] as XmlNode;\n            RectangleF mrect;\n\t\t\tfloat SectionHeight;\n            float NewTop;\n            //\n            // If item selected is inside Table do nothing\n            //\n            if (_DrawPanel.InTable(model) == true)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t//\n\t\t\t// Get the Height of the model container\n\t\t\t//\n\t\t\tSectionHeight=_DrawPanel.HeightOfContainer(model);\n\t\t\t//\n\t\t\t// do nothing if invalid section Height\n\t\t\t//\n\t\t\tif(SectionHeight == 0) return;\n\t\t\t// Get rectangle that contains the model\n\t\t\tmrect = _DrawPanel.GetReportItemRect(model);\n\t\t\t// Calculate new Top for model\n\t\t\tNewTop=(SectionHeight- mrect.Height) / 2;\n\t\t\tstring top = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.00}pt\", NewTop);\n\t\t\t_DrawPanel.SetElement(model, \"Top\", top);\n\t\t\tReportChanged(this, new EventArgs());\n\t\t\t_DrawPanel.Invalidate();\n\t\t}\n\n\n\n\t\tpublic void AlignTops()\n\t\t{\n            if (_DrawPanel.SelectedCount < 2)\n                return;\n            \n            XmlNode model = _DrawPanel.SelectedList[0] as XmlNode;\n\t\t\tXmlNode t = _DrawPanel.GetNamedChildNode(model, \"Top\");\n\t\t\tstring top = t == null? \"0pt\": t.InnerText;\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_Align);\n\t\t\tforeach (XmlNode xNode in _DrawPanel.SelectedList)\n\t\t\t{\t// we even reset the first one; in case the attribute wasn't specified\n\t\t\t\t_DrawPanel.SetElement(xNode, \"Top\", top);\n\t\t\t}\n\t\t\t_Undo.EndUndoGroup();\n\n\t\t\tReportChanged(this, new EventArgs());\n\t\t\t_DrawPanel.Invalidate();   \n\t\t}\n\n\t\tpublic void AlignBottoms()\n\t\t{\n            if (_DrawPanel.SelectedCount < 2)\n                return;\n            \n            XmlNode model = _DrawPanel.SelectedList[0] as XmlNode;\n\t\t\tRectangleF mrect = _DrawPanel.GetReportItemRect(model);\t// size attributes in points\n\t\t\tif (mrect.Height == float.MinValue)\n\t\t\t\treturn;\t\t\t// model doesn't have height specified\n\n\t\t\tfloat mbottom = mrect.Top + mrect.Height;\t// the bottom side of the model\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_Align);\n\t\t\tforeach (XmlNode xNode in _DrawPanel.SelectedList)\n\t\t\t{\t\n\t\t\t\tif (xNode == model)\n\t\t\t\t\tcontinue;\n\t\t\t\tRectangleF nrect = _DrawPanel.GetReportItemRect(xNode);\n\t\t\t\tif (nrect.Height == float.MinValue)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tfloat ntop = mbottom - nrect.Height;\n\t\t\t\tif (ntop < 0)\n\t\t\t\t\tntop = 0;\n\n\t\t\t\tstring top = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.00}pt\", ntop);\n\t\t\t\t_DrawPanel.SetElement(xNode, \"Top\", top);\n\t\t\t}\n\t\t\t_Undo.EndUndoGroup();\n\n\t\t\tReportChanged(this, new EventArgs());\n\t\t\t_DrawPanel.Invalidate();   \n\t\t}\n\n\t\tpublic void AlignMiddles()\n\t\t{\n            if (_DrawPanel.SelectedCount < 2)\n                return;\n            \n            XmlNode model = _DrawPanel.SelectedList[0] as XmlNode;\n\t\t\tRectangleF mrect = _DrawPanel.GetReportItemRect(model);\t// size attributes in points\n\t\t\tif (mrect.Height == float.MinValue)\n\t\t\t\treturn;\t\t\t// model doesn't have height specified\n\n\t\t\tfloat mc = mrect.Top + mrect.Height/2;\t// the middle of the model\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_Align);\n\t\t\tforeach (XmlNode xNode in _DrawPanel.SelectedList)\n\t\t\t{\t\n\t\t\t\tif (xNode == model)\n\t\t\t\t\tcontinue;\n\t\t\t\tRectangleF nrect = _DrawPanel.GetReportItemRect(xNode);\n\t\t\t\tif (nrect.Height == float.MinValue)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tfloat ntop =  (mc - (nrect.Top + nrect.Height/2));\n\t\t\t\tntop += nrect.Top;\n\t\t\t\tif (ntop < 0)\n\t\t\t\t\tntop = 0;\n\n\t\t\t\tstring top = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.00}pt\", ntop);\n\t\t\t\t_DrawPanel.SetElement(xNode, \"Top\", top);\n\t\t\t}\n\t\t\t_Undo.EndUndoGroup();\n\n\t\t\tReportChanged(this, new EventArgs());\n\t\t\t_DrawPanel.Invalidate();   \n\t\t}\n\n\t\tpublic void SizeHeights()\n\t\t{\n\t\t\tXmlNode model = _DrawPanel.SelectedList[0] as XmlNode;\n\t\t\tXmlNode h = _DrawPanel.GetNamedChildNode(model, \"Height\");\n\t\t\tif (h == null)\n\t\t\t\treturn;\n\t\t\tstring height = h.InnerText;\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_Size);\n\t\t\tforeach (XmlNode xNode in _DrawPanel.SelectedList)\n\t\t\t{\t// we even reset the first one; in case the attribute wasn't specified\n\t\t\t\t_DrawPanel.SetElement(xNode, \"Height\", height);\n\t\t\t}\n\t\t\t_Undo.EndUndoGroup();\n\n\t\t\tReportChanged(this, new EventArgs());\n\t\t\t_DrawPanel.Invalidate();   \n\t\t}\n\n\t\tpublic void SizeWidths()\n\t\t{\n\t\t\tXmlNode model = _DrawPanel.SelectedList[0] as XmlNode;\n\t\t\tXmlNode w = _DrawPanel.GetNamedChildNode(model, \"Width\");\n\t\t\tif (w == null)\n\t\t\t\treturn;\n\t\t\tstring width = w.InnerText;\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_Size);\n\t\t\tforeach (XmlNode xNode in _DrawPanel.SelectedList)\n\t\t\t{\t// we even reset the first one; in case the attribute wasn't specified\n\t\t\t\t_DrawPanel.SetElement(xNode, \"Width\", width);\n\t\t\t}\n\t\t\t_Undo.EndUndoGroup();\n\n\t\t\tReportChanged(this, new EventArgs());\n\t\t\t_DrawPanel.Invalidate();   \n\t\t}\n\n\t\tpublic void SizeBoth()\n\t\t{\n\t\t\tXmlNode model = _DrawPanel.SelectedList[0] as XmlNode;\n\t\t\tXmlNode w = _DrawPanel.GetNamedChildNode(model, \"Width\");\n\t\t\tif (w == null)\n\t\t\t\treturn;\n\t\t\tstring width = w.InnerText;\n\n\t\t\tXmlNode h = _DrawPanel.GetNamedChildNode(model, \"Height\");\n\t\t\tif (h == null)\n\t\t\t\treturn;\n\t\t\tstring height = h.InnerText;\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_Size);\n\t\t\tforeach (XmlNode xNode in _DrawPanel.SelectedList)\n\t\t\t{\t// we even reset the first one; in case the attribute wasn't specified\n\t\t\t\t_DrawPanel.SetElement(xNode, \"Height\", height);\n\t\t\t\t_DrawPanel.SetElement(xNode, \"Width\", width);\n\t\t\t}\n\t\t\t_Undo.EndUndoGroup();\n\n\t\t\tReportChanged(this, new EventArgs());\n\t\t\t_DrawPanel.Invalidate();   \n\t\t}\n\n\t\tvoid HorzSpacing(float diff)\n\t\t{\n\t\t\tXmlNode model = _DrawPanel.SelectedList[0] as XmlNode;\n\t\t\tRectangleF rectm = _DrawPanel.GetReportItemRect(model);\n\t\t\tif (rectm.Width == float.MinValue)\n\t\t\t\treturn;\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_Spacing);\n\t\t\tfloat x = rectm.Left + rectm.Width + diff;\n\t\t\tforeach (XmlNode xNode in _DrawPanel.SelectedList)\n\t\t\t{\n\t\t\t\tif (xNode == model)\n\t\t\t\t\tcontinue;\n\t\t\t\tstring left = string.Format(NumberFormatInfo.InvariantInfo,\"{0:0.00}pt\", x);\n\t\t\t\t_DrawPanel.SetElement(xNode, \"Left\", left);\n\t\t\t\tRectangleF rectn = _DrawPanel.GetReportItemRect(xNode);\n\t\t\t\tif (rectn.Width == float.MinValue)\n\t\t\t\t\trectn.Width = 77;\n\t\t\t\tx += (rectn.Width + diff);\n\t\t\t}\n\t\t\t_Undo.EndUndoGroup();\n\n\t\t\tReportChanged(this, new EventArgs());\n\t\t\t_DrawPanel.Invalidate();   \n\t\t}\n\n\t\tfloat HorzSpacingDiff()\n\t\t{\n\t\t\tfloat diff = 0;\n\t\t\tif (_DrawPanel.SelectedList.Count < 2)\n\t\t\t\treturn diff;\n\n\t\t\tXmlNode m1 = _DrawPanel.SelectedList[0] as XmlNode;\n\t\t\tRectangleF r1 = _DrawPanel.GetReportItemRect(m1);\n\t\t\tif (r1.Width == float.MinValue)\n\t\t\t\treturn diff;\n\n\t\t\tXmlNode m2 = _DrawPanel.SelectedList[1] as XmlNode;\n\t\t\tRectangleF r2 = _DrawPanel.GetReportItemRect(m2);\n\n\t\t\tdiff = r2.Left - (r1.Left + r1.Width);\n\t\t\tif (diff < 0)\n\t\t\t\tdiff = 0;\n\t\t\treturn diff;\n\t\t}\n\n\t\tpublic void HorzSpacingMakeEqual()\n\t\t{\n\t\t\tif (_DrawPanel.SelectedList.Count < 2)\n\t\t\t\treturn;\n\n\t\t\tHorzSpacing(HorzSpacingDiff());\n\t\t}\n\n\t\tpublic void HorzSpacingIncrease()\n\t\t{\n\t\t\tfloat diff = HorzSpacingDiff() + 8;\n\t\t\tHorzSpacing(diff);\n\t\t}\n\n\t\tpublic void HorzSpacingDecrease()\n\t\t{\n\t\t\tfloat diff = HorzSpacingDiff() - 8;\n\t\t\tif (diff < 0)\n\t\t\t\tdiff = 0;\n\t\t\tHorzSpacing(diff);\n\t\t}\n\n\t\tpublic void HorzSpacingMakeZero()\n\t\t{\n\t\t\tHorzSpacing(0);\n\t\t}\n\n\t\tvoid VertSpacing(float diff)\n\t\t{\n\t\t\tXmlNode model = _DrawPanel.SelectedList[0] as XmlNode;\n\t\t\tRectangleF rectm = _DrawPanel.GetReportItemRect(model);\n\t\t\tif (rectm.Height == float.MinValue)\n\t\t\t\treturn;\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_Spacing);\n\t\t\tfloat y = rectm.Top + rectm.Height + diff;\n\t\t\tforeach (XmlNode xNode in _DrawPanel.SelectedList)\n\t\t\t{\n\t\t\t\tif (xNode == model)\n\t\t\t\t\tcontinue;\n\t\t\t\tstring top = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.00}pt\", y);\n\t\t\t\t_DrawPanel.SetElement(xNode, \"Top\", top);\n\t\t\t\tRectangleF rectn = _DrawPanel.GetReportItemRect(xNode);\n\t\t\t\tif (rectn.Height == float.MinValue)\n\t\t\t\t\trectn.Height = 16;\n\t\t\t\ty += (rectn.Height + diff);\n\t\t\t}\n\t\t\t_Undo.EndUndoGroup();\n\n\t\t\tReportChanged(this, new EventArgs());\n\t\t\t_DrawPanel.Invalidate();   \n\t\t}\n\n\t\tfloat VertSpacingDiff()\n\t\t{\n\t\t\tfloat diff = 0;\n\t\t\tif (_DrawPanel.SelectedList.Count < 2)\n\t\t\t\treturn diff;\n\n\t\t\tXmlNode m1 = _DrawPanel.SelectedList[0] as XmlNode;\n\t\t\tRectangleF r1 = _DrawPanel.GetReportItemRect(m1);\n\t\t\tif (r1.Height == float.MinValue)\n\t\t\t\treturn diff;\n\n\t\t\tXmlNode m2 = _DrawPanel.SelectedList[1] as XmlNode;\n\t\t\tRectangleF r2 = _DrawPanel.GetReportItemRect(m2);\n\n\t\t\tdiff = r2.Top - (r1.Top + r1.Height);\n\t\t\tif (diff < 0)\n\t\t\t\tdiff = 0;\n\t\t\treturn diff;\n\t\t}\n\n\t\tpublic void VertSpacingMakeEqual()\n\t\t{\n\t\t\tif (_DrawPanel.SelectedList.Count < 2)\n\t\t\t\treturn;\n\n\t\t\tVertSpacing(VertSpacingDiff());\n\t\t}\n\n\t\tpublic void VertSpacingIncrease()\n\t\t{\n\t\t\tfloat diff = VertSpacingDiff() + 8;\n\t\t\tVertSpacing(diff);\n\t\t}\n\n\t\tpublic void VertSpacingDecrease()\n\t\t{\n\t\t\tfloat diff = VertSpacingDiff() - 8;\n\t\t\tif (diff < 0)\n\t\t\t\tdiff = 0;\n\t\t\tVertSpacing(diff);\n\t\t}\n\n\t\tpublic void VertSpacingMakeZero()\n\t\t{\n\t\t\tVertSpacing(0);\n\t\t}\n\n\t\tpublic void SetPadding(string name, int diff)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedList.Count < 1)\n\t\t\t\treturn;\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_Padding);\n\t\t\tforeach (XmlNode n in _DrawPanel.SelectedList)\n\t\t\t{\n\t\t\t\tXmlNode sNode = this._DrawPanel.GetCreateNamedChildNode(n, \"Style\");\n\t\t\t\tif (diff == 0)\n\t\t\t\t\t_DrawPanel.SetElement(sNode, name, \"0pt\");\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tfloat pns = _DrawPanel.GetSize(sNode, name);\n\t\t\t\t\tpns += diff;\n\t\t\t\t\tif (pns < 0)\n\t\t\t\t\t\tpns = 0;\n\t\t\t\t\tstring pad = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.00}pt\", pns);\n\t\t\t\t\t_DrawPanel.SetElement(sNode, name, pad);\n\t\t\t\t}\n\t\t\t}\n\t\t\t_Undo.EndUndoGroup();\n\t\t\tReportChanged(this, new EventArgs());\n\t\t\t_DrawPanel.Invalidate();   \n\t\t}\n\n\t\tpublic void Cut()\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount <= 0)\n\t\t\t\treturn;\n\n\t\t\tClipboard.SetDataObject(GetCopy(), true);\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_Cut);\n\t\t\t_DrawPanel.DeleteSelected();\n\t\t\t_Undo.EndUndoGroup();\n\t\t\tSelectionChanged(this, new EventArgs());\n\t\t}\n\n\t\tpublic void Copy()\n\t\t{\n\t\t\tClipboard.SetDataObject(GetCopy(), true);\n\t\t}\n\n\t\tpublic void Clear()\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tpublic void Delete()\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount > 0)\n\t\t\t{\n\t\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_Delete);\n\t\t\t\t_DrawPanel.DeleteSelected();\n\t\t\t\t_Undo.EndUndoGroup();\n\n\t\t\t\tReportChanged(this, new EventArgs());\n\t\t\t\tSelectionChanged(this, new EventArgs());\n\t\t\t\t_DrawPanel.Invalidate();   \n\t\t\t}\n\t\t}\n\n\t\tpublic void Paste()\n\t\t{\n\t\t\tDoPaste(null,new PointF(0,0));\n\t\t}\n\n\t\tpublic void SelectAll()\n\t\t{\n\t\t\tdoSelectAll();\n\t\t}\n\n\t\tpublic int SelectionCount\n\t\t{\n\t\t\tget { return this._DrawPanel.SelectedCount; }\n\t\t}\n\n\t\tpublic string SelectedText\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_DrawPanel.SelectedCount == 0)\n\t\t\t\t\treturn \"\";\n\t\t\t\treturn GetCopy();\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic string SelectionName\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (_DrawPanel.SelectedCount == 0)\n\t\t\t\t\treturn \"\";\n\t\t\t\tif (_DrawPanel.SelectedCount > 1)\n\t\t\t\t\treturn Strings.DesignCtl_SelectionName_GroupSelection;\n\n\t\t\t\tXmlNode xNode = _DrawPanel.SelectedList[0];\n\t\t\t\tif (xNode.Name == \"TableColumn\" || xNode.Name == \"TableRow\")\n\t\t\t\t\treturn \"\";\n\n\t\t\t\tvar xAttr = xNode.Attributes != null ? xNode.Attributes[\"Name\"] : null;\n\n\t\t\t\tif (xAttr == null)\n\t\t\t\t\treturn Strings.DesignCtl_SelectionName_Unnamed;\n\n\t\t\t\tXmlNode cNode = _DrawPanel.GetReportItemContainer(xNode);\n\t\t\t\tif (cNode == null)\n\t\t\t\t\treturn xAttr.Value;\n\n\t\t\t\tvar cAttr = cNode.Attributes != null ? cNode.Attributes[\"Name\"] : null;\n\n\t\t\t\tif (cAttr == null)\n\t\t\t\t\treturn xAttr.Value + \" \" + Strings.DesignCtl_SelectionName_in + \" \" + cNode.Name;\n\n\t\t\t\tvar title = xAttr.Value + \" \" + Strings.DesignCtl_SelectionName_in + \" \" + cNode.Name.Replace(\"fyi:\", \"\") + \" \" + cAttr.Value;\n\t\t\t\tif (!(cNode.Name == \"Table\" || cNode.Name == \"fyi:Grid\"))\n\t\t\t\t\treturn title;\n\n\t\t\t\tXmlNode pNode = xNode.ParentNode.ParentNode;\n\t\t\t\tif (pNode.Name != \"TableCell\")\n\t\t\t\t\treturn title;\n\n\t\t\t\tXmlNode trNode = pNode.ParentNode.ParentNode;\t\t// should be TableRow\n\t\t\t\tif (trNode.Name != \"TableRow\")\n\t\t\t\t\treturn title;\n\n\t\t\t\t// Find the number of the TableRow -- e.g. 1st, 2nd, 3rd, ...\n\t\t\t\tint trNumber=1;\n\t\t\t\tforeach (XmlNode n in trNode.ParentNode.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (n == trNode)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\ttrNumber++;\n\t\t\t\t}\n\n\t\t\t\tpNode = trNode.ParentNode.ParentNode;\t\t\t// Details, Header or Footer\n\n\t\t\t\tstring rowTitle = trNumber > 1? string.Format(\"{0}({1})\", pNode.Name, trNumber): pNode.Name;\n \n\t\t\t\tif (pNode.Name == \"Details\")\n\t\t\t\t\treturn title + \" \" + rowTitle;\n\n\t\t\t\t// We've got a Header or a Footer; could be a group header/footer\n\t\t\t\tpNode = pNode.ParentNode;\n\t\t\t\tif (pNode.Name != \"TableGroup\")\n\t\t\t\t\treturn title + \" \" + rowTitle;\n\n\t\t\t\t// We're in a group; find out the group name\n\t\t\t\tXmlNode gNode = this._DrawPanel.GetNamedChildNode(pNode, \"Grouping\");\n\t\t\t\tif (gNode == null)\n\t\t\t\t\treturn title + \" \" + rowTitle;\n\n\t\t\t\tXmlAttribute gAttr = gNode.Attributes[\"Name\"];\n\t\t\t\tif (gAttr == null)\n\t\t\t\t\treturn title + \" \" + rowTitle;\n\n\t\t\t\treturn title + \", \" + Strings.DesignCtl_SelectionName_Group + \" \" + gAttr.Value + \" \" + rowTitle;\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic PointF SelectionPosition\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (_DrawPanel.SelectedCount == 0)\n\t\t\t\t\treturn new PointF(float.MinValue,float.MinValue);\n\t\t\t\tXmlNode xNode = _DrawPanel.SelectedList[0];\n\t\t\t\treturn _DrawPanel.SelectionPosition(xNode);\n\t\t\t}\n\t\t}\n\n\t\tpublic SizeF SelectionSize\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (_DrawPanel.SelectedCount == 0)\n\t\t\t\t\treturn new SizeF(float.MinValue,float.MinValue);\n\t\t\t\tXmlNode xNode = _DrawPanel.SelectedList[0];\n\t\t\t\treturn _DrawPanel.SelectionSize(xNode);\n\t\t\t}\n\t\t}\n\t\t\n\t\t\n\t\tpublic StyleInfo SelectedStyle\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (_DrawPanel.SelectedCount == 0)\n\t\t\t\t\treturn null;\n\t\t\t\tXmlNode xNode = _DrawPanel.SelectedList[0];\n\t\t\t\t// HACK: async\n\t\t\t\treturn Task.Run(async () => await _DrawPanel.GetStyleInfo(xNode)).GetAwaiter().GetResult();\n\t\t\t}\n\t\t}\n\n\t\tpublic void ApplyStyleToSelected(string name, string v)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount == 0)\n\t\t\t\treturn;\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_Style);\n\t\t\t_DrawPanel.ApplyStyleToSelected(name, v);\n\t\t\t_Undo.EndUndoGroup(true);\n\t\t\tReportChanged(this, new EventArgs());\n\t\t}\n\n\t\tpublic void SetSelectedText(string v)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\n\t\t\tXmlNode tn = _DrawPanel.SelectedList[0] as XmlNode;\n\t\t\tif (tn == null || tn.Name != \"Textbox\")\n\t\t\t\treturn;\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_TextboxValue);\n\t\t\t_DrawPanel.SetElement(tn, \"Value\", v);\n\t\t\t_Undo.EndUndoGroup(true);\n\t\t\t_DrawPanel.Invalidate();\t// force a repaint\n\t\t\tReportChanged(this, new EventArgs());\n\t\t}\n\n\t\tprivate void BuildContextMenus()\n\t\t{\n\t\t\tBuildContextMenusCustom(MenuDefaultInsert);\n\t\t}\n        \n        private void BuildContextMenusCustom(ToolStripDropDownItem menuItem)\n        {\n            try\n            {\n                var sa = RdlEngineConfig.GetCustomReportTypes();\n                if (sa == null || sa.Length == 0)\n                    return;\n\n\n\t            var separator = menuItem.DropDownItems[\"CustomSeparator\"];\n\n\t\t\t\tif (separator == null)\n\t\t\t\t{\n\t\t\t\t\tseparator = new ToolStripSeparator { Name = \"CustomSeparator\" };\n\t\t\t\t\tmenuItem.DropDownItems.Add(separator);       // put a separator\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tvar index = menuItem.DropDownItems.IndexOf(separator) + 1;\n\n\t\t\t\t\twhile (menuItem.DropDownItems.Count > index)\n\t\t\t\t\t{\n\t\t\t\t\t\tmenuItem.DropDownItems.RemoveAt(index);\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\n                // Add the custom report items to the insert menu\n                foreach (var m in sa)\n                {\n\t                var mi = new ToolStripMenuItem(m + \"...\");\n\t                mi.Click += menuInsertCustomReportItem_Click;\n                    mi.Tag = m;\n\t\t\t\t\tmenuItem.DropDownItems.Add(mi);\n                }\n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show(string.Format(Strings.DesignCtl_ShowB_CustomReportItemError, ex.Message), Strings.DesignCtl_Show_Insert, MessageBoxButtons.OK);\n            }   \n        }\n\n        private Bitmap _buffer;\n        // HACK: async shenanigans\n        bool doGraphicsDraw;\n        private async void DrawPanelPaint(object sender, System.Windows.Forms.PaintEventArgs e)\n        {\n            // HACK: async shenanigans\n            if (doGraphicsDraw && _buffer != null)\n            {\n                e.Graphics.DrawImage(_buffer, 0, 0);\n                _buffer.Dispose();\n                _buffer = null;\n                doGraphicsDraw = false;\n            }\n            else\n            {\n                // HACK: async shenanigans\n                await Internal_DrawPanelPaint();\n                doGraphicsDraw = true;\n                // HACK: async shenanigans, force a repaint where e.Graphics is still valid\n                _DrawPanel.Invalidate();       \n            }\n        }\n\n        private async Task Internal_DrawPanelPaint()\n        {\n            // Only handle one paint at a time\n            lock (this)\n            {\n                if (_InPaint)\n                    return;\n                _InPaint = true;\n            }\n\n            // Create a self-contained Graphics object\n            _buffer = new Bitmap(Math.Max(1, _DrawPanel.Width), Math.Max(1, _DrawPanel.Height));\n            using (Graphics g = Graphics.FromImage(_buffer))\n            {\n                try // never want to die in here\n                {\n                    if (this._ReportDoc == null) // if no report force the simplest one\n                        CreateEmptyReportDoc();\n\n                    //g.ClipBounds;\n                    var clip = new Rectangle(PixelsX(_hScroll.Value), PixelsY(_vScroll.Value),\n                        PixelsX(_DrawPanel.Width), PixelsY(_DrawPanel.Height));\n                    // Draw the report asynchronously\n                    await _DrawPanel.Draw(g, PointsX(_hScroll.Value), PointsY(_vScroll.Value), clip);\n                }\n                catch (Exception ex)\n                { // don't want to kill process if we die -- put up some kind of error message\n                    StringFormat format = new StringFormat();\n                    string msg = string.Format(\"Error drawing report. Likely error in syntax. Switch to syntax and correct report syntax.{0}{1}{0}{2}\",\n                        Environment.NewLine, ex.Message, ex.StackTrace);\n                    g.DrawString(msg, this.Font, Brushes.Black, new Rectangle(2, 2, this.Width, this.Height), format);\n                }\n            }\n\n            lock (this)\n            {\n                _InPaint = false;\n            }\n        }\n\n        private void CreateEmptyReportDoc()\n\t\t{\n\t\t\tXmlDocument xDoc = new XmlDocument();\n\t\t\txDoc.PreserveWhitespace = false;\n\t\t\txDoc.LoadXml(\"<Report><Body><Height>0pt</Height></Body></Report>\");\n\t\t\tReportDocument = xDoc;\n\t\t}\n\n\t\tprivate void DrawPanelResize(object sender, EventArgs e)\n\t\t{\n\t\t\t_DrawPanel.Refresh();\n\t\t\tSetScrollControls();\t\t\t\n\n\t\t}\n\n\t\tinternal float PointsX(float x)\t\t// pixels to points\n\t\t{\n            return x * DesignXmlDraw.POINTSIZED / _DpiX;\n\t\t}\n\n\t\tinternal float PointsY(float y)\n\t\t{\n            return y * DesignXmlDraw.POINTSIZED / _DpiY;\n\t\t}\n\n\t\tinternal int PixelsX(float x)\t\t// points to pixels\n\t\t{\n            return (int)(x * _DpiX / DesignXmlDraw.POINTSIZED);\n\t\t}\n\n\t\tinternal int PixelsY(float y)\n\t\t{\n            return (int)(y * _DpiY / DesignXmlDraw.POINTSIZED);\n\t\t}\n\n\n\t\tinternal void SetScrollControls()\n\t\t{\n\t\t\tif (_ReportDoc == null)\t\t// nothing loaded; nothing to do\n\t\t\t{\n\t\t\t\t_vScroll.Enabled = _hScroll.Enabled = false;\n\t\t\t\t_vScroll.Value = _hScroll.Value = 0;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tSetScrollControlsV();\n\t\t\tSetScrollControlsH();\n\t\t}\n\n\t\tprivate void SetScrollControlsV()\n\t\t{\n\t\t\t// calculate the vertical scroll needed\n\t\t\tint h = PixelsY(_DrawPanel.VerticalMax);\t// size we need to show\n\t\t\tint sh = this.Height - _hScroll.Height;\n\t\t\tif (sh > h || sh < 0)\n\t\t\t{\n\t\t\t\t_vScroll.Enabled = false;\n\t\t\t\tif (_vScroll.Value != 0)\n\t\t\t\t{\n\t\t\t\t\t_vScroll.Value = 0;\n\t\t\t\t\t_DrawPanel.Invalidate();\t// force a repaint\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_vScroll.Minimum = 0;\n\t\t\t_vScroll.Maximum = h;\n\t\t\tint sValue =  Math.Min(_vScroll.Value, _vScroll.Maximum);\n\t\t\tif (_vScroll.Value != sValue)\n\t\t\t{\n\t\t\t\t_vScroll.Value = sValue;\n\t\t\t\t_DrawPanel.Invalidate();\t\t// force a repaint\n\t\t\t}\n\t\t\t_vScroll.LargeChange = sh;\n\t\t\t_vScroll.SmallChange = _vScroll.LargeChange / 5;\n\t\t\t_vScroll.Enabled = true;\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void SetScrollControlsH()\n\t\t{\n\t\t\tint w = PixelsX(_DrawPanel.HorizontalMax);\n\t\t\tint sw = this.Width - _hScroll.Width;\n\t\t\tif (sw > w)\n\t\t\t{\n\t\t\t\t_hScroll.Enabled = false;\n\t\t\t\tif (_hScroll.Value != 0)\n\t\t\t\t{\n\t\t\t\t\t_hScroll.Value = 0;\n\t\t\t\t\t_DrawPanel.Invalidate();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_hScroll.Maximum = w;\n\t\t\t_hScroll.Minimum = 0;\n\t\t\tint sValue =  Math.Min(_hScroll.Value, _hScroll.Maximum);\n\t\t\tif (_hScroll.Value != sValue)\n\t\t\t{\n\t\t\t\t_hScroll.Value = sValue;\n\t\t\t\t_DrawPanel.Invalidate();\n\t\t\t}\n\t\t\tif (sw < 0)\n\t\t\t\tsw = 0;\n\t\t\t_hScroll.LargeChange = sw;\n\t\t\t_hScroll.SmallChange = _hScroll.LargeChange / 5;\n\t\t\t_hScroll.Enabled = true;\n\t\t\t_hScroll.Visible=true;\n\t\t\treturn;\n\t\t}\n\n\t\tprivate new void HorizontalScroll(object sender, System.Windows.Forms.ScrollEventArgs e)\n\t\t{\n\t\t\tif (e.NewValue == _hScroll.Value)\t// don't need to scroll if already there\n\t\t\t\treturn;\n\n\t\t\t_DrawPanel.Invalidate();\n            if (HorizontalScrollChanged != null)\n                HorizontalScrollChanged(this, new EventArgs());\n        }\n\n\t\tprivate new void VerticalScroll(object sender, System.Windows.Forms.ScrollEventArgs e)\n\t\t{\n\t\t\tif (e.NewValue == _vScroll.Value)\t// don't need to scroll if already there\n\t\t\t\treturn;\n\n\t\t\t_DrawPanel.Invalidate();\n            if (VerticalScrollChanged != null)\n                VerticalScrollChanged(this, new EventArgs());\n\t\t}\n\n\t\tprivate void DrawPanelMouseUp(object sender, MouseEventArgs E)\n\t\t{\n            MouseEventArgsE e = new MouseEventArgsE(E, SCALEX, SCALEY);\n\n            if (e.Button == MouseButtons.Left)\n\t\t\t\t_Undo.EndUndoGroup(true);\n\n            if (_MouseDownNode != null && _MouseDownNode.Name == \"Height\")\n                HeightChanged(this, new HeightEventArgs(_MouseDownNode, null));     // reset any mousemove\n            \n\t\t\t_MouseDownNode = null;\n\t\t\t\n\t\t\tif (this._bHaveMouse)\n\t\t\t{\t// Handle the end of the rubber banding\n\t\t\t\t_bHaveMouse = false;\n\t\t\t\t// remove last rectangle if necessary\n\t\t\t\tif (this._ptRBLast.X != -1)\n\t\t\t\t{\n\t\t\t\t\tthis.DrawPanelRubberBand(this._ptRBOriginal, this._ptRBLast);\n\t\t\t\t\t// Process the rectangle\n\t\t\t\t\tRectangle r = DrawPanelRectFromPoints(this._ptRBOriginal, this._ptRBLast);\n\t\t\t\t\tif ((Control.ModifierKeys & Keys.Control) != Keys.Control)\t// we allow addition to selection\n\t\t\t\t\t\t_DrawPanel.ClearSelected();\n\t\t\t\t\t_DrawPanel.SelectInRectangle(r, PointsX(_hScroll.Value), PointsY(_vScroll.Value));\n\t\t\t\t\tSelectionChanged(this, new EventArgs());\n\t\t\t\t}\n\t\t\t\t// clear out the points for the next time\n\t\t\t\t_ptRBOriginal.X = _ptRBOriginal.Y = _ptRBLast.X = _ptRBLast.Y = -1;\n\t\t\t}\n\t\t\telse if (e.Button == MouseButtons.Right)\n\t\t\t{\n\t\t\t\tDrawPanelContextMenu(new Point(e.X, e.Y));\n\t\t\t}\n\t\t\tif (_AdjustScroll)\n\t\t\t{\n\t\t\t\tthis.SetScrollControls();\n\t\t\t\t_AdjustScroll = false;\n\t\t\t}\n\t\t}\n\n\t\tprivate void DrawPanelContextMenu(Point p)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount == 1)\n\t\t\t{\n\t\t\t\tXmlNode cNode = _DrawPanel.SelectedList[0];\n\t\t\t\tif (cNode.Name == \"Chart\")\n\t\t\t\t\tDrawPanelContextMenuChart(p, cNode);\n\t\t\t\telse if (cNode.Name == \"Subreport\")\n\t\t\t\t\tDrawPanelContextMenuSubreport(p, cNode);\n\t\t\t\telse if (_DrawPanel.InTable(cNode))\n\t\t\t\t\tDrawPanelContextMenuTable(p, cNode);\n\t\t\t\telse if (_DrawPanel.InMatrix(cNode))\n\t\t\t\t\tDrawPanelContextMenuMatrix(p, cNode);\n\t\t\t\telse\n\t\t\t\t\tDrawPanelContextMenuDefault(p);\n\t\t\t}\n\t\t\telse\n\t\t\t\tDrawPanelContextMenuDefault(p);\n\t\t}\n\n\t\tprivate void DrawPanelContextMenuChart(Point p, XmlNode riNode)\n\t\t{\n\t\t\t// Get the Category Groupings\n\t\t\tvar catGroupNames = _DrawPanel.GetChartCategoryGroupNames(riNode);\n\n\t\t\tMenuChartEditCategoryGrouping.DropDownItems.Clear();\n\t\t\tMenuChartDeleteCategoryGrouping.DropDownItems.Clear();\n\t\t\tMenuChartEditCategoryGrouping.Enabled = catGroupNames != null;\n\t\t\tMenuChartDeleteCategoryGrouping.Enabled = catGroupNames != null;\n\n\t\t\tif (catGroupNames != null)\n\t\t\t{\n\t\t\t\tforeach (var gname in catGroupNames)\n\t\t\t\t{\n\t\t\t\t\tvar em = new ToolStripMenuItem(gname);\n\t\t\t\t\tem.Click += menuChartEditGrouping_Click;\n\t\t\t\t\tMenuChartEditCategoryGrouping.DropDownItems.Add(em);\n\n\t\t\t\t\tem = new ToolStripMenuItem(gname);\n\t\t\t\t\tem.Click += menuChartDeleteGrouping_Click;\n\t\t\t\t\tMenuChartDeleteCategoryGrouping.DropDownItems.Add(em);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Get the Series Groupings\n\t\t\tvar serGroupNames = _DrawPanel.GetChartSeriesGroupNames(riNode);\n\n\t\t\tMenuChartEditSeriesGrouping.DropDownItems.Clear();\n\t\t\tMenuChartDeleteSeriesGrouping.DropDownItems.Clear();\n\t\t\tMenuChartEditSeriesGrouping.Enabled = serGroupNames != null;\n\t\t\tMenuChartDeleteSeriesGrouping.Enabled = serGroupNames != null;\n\n\t\t\tif (serGroupNames != null)\n\t\t\t{\n\t\t\t\tforeach (var gname in serGroupNames)\n\t\t\t\t{\n\t\t\t\t\tvar em = new ToolStripMenuItem(gname);\n\t\t\t\t\tem.Click += menuChartEditGrouping_Click;\n\t\t\t\t\tMenuChartEditSeriesGrouping.DropDownItems.Add(em);\n\n\t\t\t\t\tem = new ToolStripMenuItem(gname);\n\t\t\t\t\tem.Click += menuChartDeleteGrouping_Click;\n\t\t\t\t\tMenuChartDeleteSeriesGrouping.DropDownItems.Add(em);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tContextMenuChart.Show(this, p);\n\t\t}\n\n\t\tprivate void DrawPanelContextMenuDefault(Point p)\n\t\t{\n\t\t\tContextMenuDefault.Show(this, p);\n\t\t}\n\n\t\tprivate void DrawPanelContextMenuMatrix(Point p, XmlNode riNode)\n\t\t{\n\t\t\t// Get the column groupings\n\t\t\tvar colGroupNames = _DrawPanel.GetMatrixColumnGroupNames(riNode);\n\t\t\tvar rowGroupNames = _DrawPanel.GetMatrixRowGroupNames(riNode);\n\n\t\t\tMenuMatrixEditColumnGroup.DropDownItems.Clear();\n\t\t\tMenuMatrixDeleteColumnGroup.DropDownItems.Clear();\n\t\t\tMenuMatrixEditRowGroup.DropDownItems.Clear();\n\t\t\tMenuMatrixDeleteRowGroup.DropDownItems.Clear();\n\n\t\t\tMenuMatrixEditColumnGroup.Enabled = colGroupNames != null;\n\t\t\tMenuMatrixDeleteColumnGroup.Enabled = colGroupNames != null;\n\t\t\tMenuMatrixEditRowGroup.Enabled = rowGroupNames != null;\n\t\t\tMenuMatrixDeleteRowGroup.Enabled = rowGroupNames != null;\n\n\t\t\tif (colGroupNames != null)\n\t\t\t{\n\t\t\t\tforeach (var gname in colGroupNames)\n\t\t\t\t{\n\t\t\t\t\tvar em = new ToolStripMenuItem(gname);\n\t\t\t\t\tem.Click += menuMatrixEditGroup_Click;\n\t\t\t\t\tMenuMatrixEditColumnGroup.DropDownItems.Add(em);\n\n\t\t\t\t\tem = new ToolStripMenuItem(gname);\n\t\t\t\t\tem.Click += menuMatrixDeleteGroup_Click;\n\t\t\t\t\tMenuMatrixDeleteColumnGroup.DropDownItems.Add(em);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (rowGroupNames != null)\n\t\t\t{\n\t\t\t\tforeach (var gname in rowGroupNames)\n\t\t\t\t{\n\t\t\t\t\tvar em = new ToolStripMenuItem(gname);\n\t\t\t\t\tem.Click += menuMatrixEditGroup_Click;\n\t\t\t\t\tMenuMatrixEditRowGroup.DropDownItems.Add(em);\n\n\t\t\t\t\tem = new ToolStripMenuItem(gname);\n\t\t\t\t\tem.Click += menuMatrixDeleteGroup_Click;\n\t\t\t\t\tMenuMatrixDeleteRowGroup.DropDownItems.Add(em);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tContextMenuMatrix.Show(this, p);\n\t\t}\n\n\t\tprivate void DrawPanelContextMenuSubreport(Point p, XmlNode sr)\n\t\t{\n\t\t\tContextMenuSubreport.Show(this, p);\n\t\t}\n\n\t\tprivate void DrawPanelContextMenuTable(Point p, XmlNode riNode)\n\t\t{\n\t\t\tvar bTable = !_DrawPanel.InGrid(riNode);\n\t\t\tvar tblGroupNames = _DrawPanel.GetTableGroupNames(riNode);\n\n\t\t\tif (!bTable)\n\t\t\t{\n\t\t\t\tContextMenuGrid.Show(this, p);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tMenuTableEditGroup.DropDownItems.Clear();\n\t\t\t\tMenuTableDeleteGroup.DropDownItems.Clear();\n\n\t\t\t\tMenuTableEditGroup.Enabled = tblGroupNames != null;\n\t\t\t\tMenuTableDeleteGroup.Enabled = tblGroupNames != null;\n\n\t\t\t\tif (tblGroupNames != null)\n\t\t\t\t{\n\t\t\t\t\tforeach (var gname in tblGroupNames)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar em = new ToolStripMenuItem(gname);\n\t\t\t\t\t\tem.Click += menuTableEditGroup_Click;\n\t\t\t\t\t\tMenuTableEditGroup.DropDownItems.Add(em);\n\n\t\t\t\t\t\tem = new ToolStripMenuItem(gname);\n\t\t\t\t\t\tem.Click += menuTableDeleteGroup_Click;\n\t\t\t\t\t\tMenuTableDeleteGroup.DropDownItems.Add(em);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tContextMenuTable.Show(this, p);\n\t\t\t}\n\t\t}\n\n\t\tprivate void DrawPanelMouseMove(object sender, MouseEventArgs E)\n\t\t{\n            MouseEventArgsE e = new MouseEventArgsE(E, SCALEX, SCALEY);\n\n            XmlNode b=null;\t\t\t\t\t\n\t\t\tHitLocationEnum hle = HitLocationEnum.Inside;\n\t\t\tPoint newMousePosition = new Point(e.X, e.Y);\n\n\t\t\tif (_bHaveMouse)\n\t\t\t{\t// we're rubber banding\n\t\t\t\t// If we drew previously; we'll draw again to remove old rectangle\n\t\t\t\tif( this._ptRBLast.X != -1 )\n\t\t\t\t{\n\t\t\t\t\tthis.DrawPanelRubberBand( this._ptRBOriginal, _ptRBLast );\n\t\t\t\t}\n\t\t\t\t_MousePosition = newMousePosition;\n\t\t\t\t// Update last point;  but don't rubber band outside our client area\n\t\t\t\tif (newMousePosition.X < 0)\n\t\t\t\t\tnewMousePosition.X = 0;\n\t\t\t\tif (newMousePosition.X > _DrawPanel.Width)\n\t\t\t\t\tnewMousePosition.X = _DrawPanel.Width;\n\t\t\t\tif (newMousePosition.Y < 0)\n\t\t\t\t\tnewMousePosition.Y = 0;\n\t\t\t\tif (newMousePosition.Y > _DrawPanel.Height)\n\t\t\t\t\tnewMousePosition.Y = _DrawPanel.Height;\n\t\t\t\t_ptRBLast = newMousePosition;\n\t\t\t\tif (_ptRBLast.X < 0)\n\t\t\t\t\t_ptRBLast.X = 0;\n\t\t\t\tif (_ptRBLast.Y < 0)\n\t\t\t\t\t_ptRBLast.Y = 0;\n\t\t\t\t// Draw new lines.\n\t\t\t\tthis.DrawPanelRubberBand( _ptRBOriginal, newMousePosition );\n\t\t\t\tthis.Cursor = Cursors.Cross;\t\t// use cross hair to indicate drawing\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if (_MouseDownNode != null)\n\t\t\t{  \n\t\t\t\tif (e.Button != MouseButtons.Left)\n\t\t\t\t\tb = _MouseDownNode;\n\t\t\t\telse \n\t\t\t\t{\n\t\t\t\t\tb = _MouseDownNode;\n\t\t\t\t\tswitch (_MouseDownNode.Name)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase \"TableColumn\":\n\t\t\t\t\t\tcase \"RowGrouping\":\n\t\t\t\t\t\tcase \"MatrixColumn\":\n\t\t\t\t\t\t\thle = HitLocationEnum.TableColumnResize;\n\t\t\t\t\t\t\tif (e.X == _MousePosition.X)\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tif (_DrawPanel.TableColumnResize(_MouseDownNode, e.X - _MousePosition.X))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSelectionMoved(this, new EventArgs());\n\t\t\t\t\t\t\t\tReportChanged(this, new EventArgs());\n\t\t\t\t\t\t\t\t_AdjustScroll = true;\n\t\t\t\t\t\t\t\t_DrawPanel.Invalidate();   \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\t// trying to drag into invalid area; disallow\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tCursor.Position = this.PointToScreen(_MousePosition);\n\t\t\t\t\t\t\t\tnewMousePosition = this.PointToClient(Cursor.Position);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"TableRow\":\n\t\t\t\t\t\tcase \"ColumnGrouping\":\n\t\t\t\t\t\tcase \"MatrixRow\":\n\t\t\t\t\t\t\thle = HitLocationEnum.TableRowResize;\n\t\t\t\t\t\t\tif (e.Y == _MousePosition.Y)\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tif (_DrawPanel.TableRowResize(_MouseDownNode, e.Y - _MousePosition.Y))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSelectionMoved(this, new EventArgs());\n\t\t\t\t\t\t\t\tReportChanged(this, new EventArgs());\n\t\t\t\t\t\t\t\t_DrawPanel.Invalidate();   \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\t// trying to drag into invalid area; disallow\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tCursor.Position = this.PointToScreen(_MousePosition);\n\t\t\t\t\t\t\t\tnewMousePosition = this.PointToClient(Cursor.Position);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"Height\":\n\t\t\t\t\t\t\tif (e.Y == _MousePosition.Y)\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tif (_DrawPanel.ChangeHeight(_MouseDownNode, e.Y - _MousePosition.Y, 0))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tReportChanged(this, new EventArgs());\n                                HeightChanged(this, new HeightEventArgs(_MouseDownNode, b.InnerText));\n\t\t\t\t\t\t\t\t_DrawPanel.Invalidate();   \n\t\t\t\t\t\t\t\t_AdjustScroll = true;\t\t// this will force scroll bars to be adjusted on MouseUp\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\t// trying to drag into invalid area; disallow\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tCursor.Position = this.PointToScreen(_MousePosition);\n\t\t\t\t\t\t\t\tnewMousePosition = this.PointToClient(Cursor.Position);\n\t\t\t\t\t\t\t}\n                            // Force scroll when off end of page\n                            //if (e.Y > _DrawPanel.Height)\n                            //{\n                            //    int hs = _vScroll.Value + _vScroll.SmallChange;\n                            //    _vScroll.Value = Math.Min(_vScroll.Maximum, hs);\n                            //    _DrawPanel.Refresh();\n                            //}\n\n                            break;\n\t\t\t\t\t\tcase \"Textbox\":\n\t\t\t\t\t\tcase \"Image\":\n\t\t\t\t\t\tcase \"Rectangle\":\n\t\t\t\t\t\tcase \"List\":\n\t\t\t\t\t\tcase \"Table\":\n                        case \"fyi:Grid\":\n\t\t\t\t\t\tcase \"Matrix\":\n\t\t\t\t\t\tcase \"Chart\":\n\t\t\t\t\t\tcase \"Subreport\":\n\t\t\t\t\t\tcase \"Line\":\n                        case \"CustomReportItem\":\n\t\t\t\t\t\t\thle = this._MouseDownLoc;\n\t\t\t\t\t\t\tif (e.Y == _MousePosition.Y && e.X == _MousePosition.X)\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tif (_DrawPanel.MoveSelectedItems(e.X - _MousePosition.X, e.Y - _MousePosition.Y, this._MouseDownLoc))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSelectionMoved(this, new EventArgs());\n\t\t\t\t\t\t\t\tReportChanged(this, new EventArgs());\n\t\t\t\t\t\t\t\t_DrawPanel.Invalidate();   \n\t\t\t\t\t\t\t\t_AdjustScroll = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\t// trying to drag into invalid area; disallow\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tCursor.Position = this.PointToScreen(_MousePosition);\n\t\t\t\t\t\t\t\tnewMousePosition = this.PointToClient(Cursor.Position);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tHitLocation hl = _DrawPanel.HitNode(newMousePosition, PointsX(_hScroll.Value), PointsY(_vScroll.Value));\n\t\t\t\tif (hl != null)\n\t\t\t\t{\n\t\t\t\t\tb = hl.HitNode;\n\t\t\t\t\thle = hl.HitSpot;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_MousePosition = newMousePosition;\n\t\t\tDrawPanelSetCursor(b, hle);\n\t\t}\n\n\t\tprivate void DrawPanelMouseDown(object sender, MouseEventArgs E)\n\t\t{\n            MouseEventArgsE e = new MouseEventArgsE(E, SCALEX, SCALEY);\n\n            bool baseOnly = false; //Josh: Added so base form can be force selected for inserting/selecting\n            //Hold shift to select the base form instead of the control the mouse is over.\n            if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)\n            {\n                baseOnly = true;\n            } \n\n\t\t\t_MousePosition = new Point(e.X, e.Y);\n            HitLocation hl = _DrawPanel.HitNode(_MousePosition, PointsX(_hScroll.Value), PointsY(_vScroll.Value), baseOnly); \n\t\t\t_MouseDownNode = hl == null? null: hl.HitNode;\n\t\t\t_MouseDownLoc = hl == null? HitLocationEnum.Inside: hl.HitSpot;\n\n\t\t\tif (DrawPanelMouseDownInsert(hl, sender, e))\t\t// Handle ReportItem insertion\n\t\t\t\treturn;\n\n\t\t\tif (e.Button == MouseButtons.Left)\n\t\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_Move_Size);\n\n\t\t\tif (DrawPanelMouseDownRubberBand(sender, e))\t// Handle rubber banding\n\t\t\t\treturn;\n\n\t\t\tif (DrawPanelMouseDownTableColumnResize(sender, e))\t// Handle column resize\n\t\t\t\treturn;\n\n\t\t\tif (DrawPanelMouseDownTableRowResize(sender, e))\t// Handle row resize\n\t\t\t\treturn;\n\t\t\t\n\t\t\tif (_MouseDownNode.Name == \"Height\")\n\t\t\t{\n\t\t\t\t_DrawPanel.ClearSelected();\n\t\t\t\tSelectionChanged(this, new EventArgs());\n                HeightChanged(this, new HeightEventArgs(_MouseDownNode, _MouseDownNode.InnerText)); // Set the height\n            }\n\t\t\telse if ((Control.ModifierKeys & Keys.Control) == Keys.Control)\n\t\t\t{\n\t\t\t\t_DrawPanel.AddRemoveSelection(_MouseDownNode);\n\t\t\t\tSelectionChanged(this, new EventArgs());\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t_DrawPanel.SetSelection(_MouseDownNode, true);\n\t\t\t\tSelectionChanged(this, new EventArgs());\n\t\t\t}\n\n\t\t\tDrawPanelSetCursor(_MouseDownNode, hl.HitSpot);\n\t\t}\n\n        internal void SetSelection(XmlNode node)\n        {\n            if (node == null)\n                _DrawPanel.ClearSelected();\n            else\n                _DrawPanel.SetSelection(node, false);\n            SelectionChanged(this, new EventArgs());\n        }\n\n\t\tprivate bool DrawPanelMouseDownRubberBand(object sender, MouseEventArgsE e)\n\t\t{\n            if (_MouseDownLoc != HitLocationEnum.Inside)\n\t\t\t\treturn false;\t\t\t\t// must hit inside a region\n\n\t\t\t// Now determine if object hit allows for rubber banding\n\t\t\tbool bRubber = false;\n\t\t\tbool bDeselect = true;\n\t\t\tif (_MouseDownNode == null)\n\t\t\t\tbRubber = true;\n\t\t\telse if (_MouseDownNode.Name == \"List\" || _MouseDownNode.Name == \"Rectangle\")\n\t\t\t{\n\t\t\t\tif (_DrawPanel.SelectedCount == 1 && _DrawPanel.IsNodeSelected(_MouseDownNode))\n\t\t\t\t{\n\t\t\t\t\tbRubber = true;\n\t\t\t\t\tbDeselect = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (_MouseDownNode.Name == \"Body\" ||\n\t\t\t\t_MouseDownNode.Name == \"PageHeader\" ||\n\t\t\t\t_MouseDownNode.Name == \"PageFooter\")\n\t\t\t\tbRubber = true;\n\t\t\t\n\t\t\tif (!bRubber)\n\t\t\t\treturn false;\n\n\t\t\t// We have a rubber band operation\n\t\t\tif (e.Button != MouseButtons.Left)\n\t\t\t{\n\t\t\t\tif (bDeselect)\n\t\t\t\t{\n\t\t\t\t\t_DrawPanel.ClearSelected();\n\t\t\t\t\tSelectionChanged(this, new EventArgs());\n\t\t\t\t}\n\t\t\t\treturn true;\t\t// well no rubber band but it's been handled\n\t\t\t}\n\n\t\t\tif ((Control.ModifierKeys & Keys.Control) != Keys.Control)\t// we allow addition to selection\n\t\t\t{\n\t\t\t\tif (bDeselect)\n\t\t\t\t{\n\t\t\t\t\t_DrawPanel.ClearSelected();\n\t\t\t\t\tSelectionChanged(this, new EventArgs());\n\t\t\t\t}\n\t\t\t}\n\t\t\t_bHaveMouse = true;\n\t\t\t// keep the starting point of the rectangular rubber band\n\t\t\tthis._ptRBOriginal.X = e.X;\n\t\t\tthis._ptRBOriginal.Y = e.Y;\n\t\t\t// -1 indicates no previous rubber band\n\t\t\tthis._ptRBLast.X = this._ptRBLast.Y = -1;\n\t\t\tthis.Cursor = Cursors.Cross;\t\t// use cross hair to indicate drawing\n\n\t\t\treturn true;\n\t\t}\n\n\t\tprivate bool DrawPanelMouseDownTableColumnResize(object sender, MouseEventArgsE e)\n\t\t{\n            if (_MouseDownNode == null ||\t\t\t\t\t\t\t\n\t\t\t\t_MouseDownLoc != HitLocationEnum.TableColumnResize)\n\t\t\t\treturn false;\n\t\t\tthis.Cursor = Cursors.VSplit;\n\t\t\treturn true;\n\t\t}\n\n\t\tprivate bool DrawPanelMouseDownTableRowResize(object sender, MouseEventArgsE e)\n\t\t{\n            if (_MouseDownNode == null ||\t\t\t\t\t\t\t\n\t\t\t\t_MouseDownLoc != HitLocationEnum.TableRowResize)\n\t\t\t\treturn false;\n\t\t\tthis.Cursor = Cursors.HSplit;\n\t\t\treturn true;\n\t\t}\n\n\t\tprivate bool DrawPanelMouseDownInsert(HitLocation hl, object sender, MouseEventArgsE e)\n\t\t{\n            if (!(_CurrentInsert != null &&\t\t// should we be inserting?\n\t\t\t\t_MouseDownNode != null &&\t\t\t\n\t\t\t\t(_MouseDownNode.Name == \"List\" ||\n\t\t\t\t_MouseDownNode.Name == \"Rectangle\" ||\n\t\t\t\t_MouseDownNode.Name == \"Body\" ||\n\t\t\t\t_MouseDownNode.Name == \"PageHeader\" ||\n\t\t\t\t_MouseDownNode.Name == \"PageFooter\")))\n\t\t\t{\n\t\t\t\tif (_CurrentInsert == null || _CurrentInsert == \"Line\" || hl == null || \n\t\t\t\t\t\thl.HitContainer == null || (!(hl.HitContainer.Name == \"Table\" || hl.HitContainer.Name==\"fyi:Grid\")))\n\t\t\t\t   return false;\n\t\t\t\t\n\t\t\t\tif (MessageBox.Show(Strings.DesignCtl_ShowB_WantReplaceCell, Strings.DesignCtl_Show_Insert, MessageBoxButtons.YesNo) != DialogResult.Yes)\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\tswitch (_CurrentInsert)\n\t\t\t{\n\t\t\t\tcase \"Textbox\":\n\t\t\t\t\tmenuInsertTextbox_Click(sender, e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Chart\":\n\t\t\t\t\tmenuInsertChart_Click(sender, e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Rectangle\":\n\t\t\t\t\tmenuInsertRectangle_Click(sender, e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Table\":\n                case \"fyi:Grid\":\n                    menuInsertTable_Click(sender, e);\n\t\t\t\t\tbreak;\n                case \"Matrix\":\n\t\t\t\t\tmenuInsertMatrix_Click(sender, e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"List\":\n\t\t\t\t\tmenuInsertList_Click(sender, e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Line\":\n\t\t\t\t\tmenuInsertLine_Click(sender, e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Image\":\n\t\t\t\t\tmenuInsertImage_Click(sender, e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Subreport\":\n\t\t\t\t\tmenuInsertSubreport_Click(sender, e);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvar types = RdlEngineConfig.GetCustomReportTypes();\n\t\t\t\t\tif (types.Contains(_CurrentInsert))\n\t\t\t\t\t{\n\t\t\t\t\t\tmenuInsertCustomReportItem(sender, e, _CurrentInsert);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tprivate void DrawPanelDoubleClick(object sender, EventArgs e)\n\t\t{\n\t\t\tmenuProperties_Click();\t\t// treat double click like a property menu click\n\t\t}\n\n\t\tprivate void DrawPanelRubberBand(Point p1, Point p2)\n\t\t{\n\t\t\t// Convert the points to screen coordinates\n\t\t\tp1 = PointToScreen(p1);\n\t\t\tp2 = PointToScreen(p2);\n\t\t\t\n\t\t\t// Get a rectangle from the two points\n\t\t\tRectangle rc = DrawPanelRectFromPoints(p1, p2);\n\n\t\t\t// Draw reversibleFrame\n\t\t\tControlPaint.DrawReversibleFrame(rc, Color.Red,\tFrameStyle.Dashed);\n\n\t\t\treturn;\n\t\t}\n\n\t\tprivate Rectangle DrawPanelRectFromPoints(Point p1, Point p2)\n\t\t{\n\t\t\tRectangle r = new Rectangle();\n\t\t\t// set the width and x of rectangle\n\t\t\tif (p1.X < p2.X)\n\t\t\t{\n\t\t\t\tr.X = p1.X;\n\t\t\t\tr.Width = p2.X - p1.X;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tr.X = p2.X;\n\t\t\t\tr.Width = p1.X - p2.X;\n\t\t\t}\n\t\t\t// set the height and y of rectangle\n\t\t\tif (p1.Y < p2.Y)\n\t\t\t{\n\t\t\t\tr.Y = p1.Y;\n\t\t\t\tr.Height = p2.Y - p1.Y;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tr.Y = p2.Y;\n\t\t\t\tr.Height = p1.Y - p2.Y;\n\t\t\t}\n\t\t\treturn r;\n\t\t}\n\n\t\tprivate void DrawPanelSetCursor(XmlNode node, HitLocationEnum hle)\n\t\t{\n\t\t\tCursor c;\n\t\t\tif (node == null)\n\t\t\t\tc = Cursors.Arrow;\n\t\t\telse if (node.Name == \"Height\")\n\t\t\t\tc = Cursors.SizeNS;\n\t\t\telse if (hle == HitLocationEnum.TableColumnResize)\t// doesn't need to be selected\n\t\t\t\tc = Cursors.VSplit;\n\t\t\telse if (hle == HitLocationEnum.TableRowResize)\t\t// doesn't need to be selected \n\t\t\t\tc = Cursors.HSplit;\n\t\t\telse if (this._DrawPanel.IsNodeSelected(node))\n\t\t\t{\n\t\t\t\tswitch (hle)\n\t\t\t\t{\n\t\t\t\t\tcase HitLocationEnum.BottomLeft:\n\t\t\t\t\tcase HitLocationEnum.TopRight:\n\t\t\t\t\t\tc = Cursors.SizeNESW;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase HitLocationEnum.LeftMiddle:\n\t\t\t\t\tcase HitLocationEnum.RightMiddle:\n\t\t\t\t\t\tc = Cursors.SizeWE;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase HitLocationEnum.BottomRight:\n\t\t\t\t\tcase HitLocationEnum.TopLeft:\n\t\t\t\t\t\tc = Cursors.SizeNWSE;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase HitLocationEnum.TopMiddle:\n\t\t\t\t\tcase HitLocationEnum.BottomMiddle:\n\t\t\t\t\t\tc = Cursors.SizeNS;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase HitLocationEnum.Move:\n\t\t\t\t\t\tc = Cursors.SizeAll;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase HitLocationEnum.TableColumnResize:\n\t\t\t\t\t\tc = Cursors.VSplit;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase HitLocationEnum.TableRowResize:\n\t\t\t\t\t\tc = Cursors.HSplit;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase HitLocationEnum.LineLeft:\n\t\t\t\t\tcase HitLocationEnum.LineRight:\n\t\t\t\t//\t\tc = Cursors.Cross;\t\t\tbug in C# runtime? Cross doesn't work!\n\t\t\t\t\t\tc = Cursors.Hand;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase HitLocationEnum.Inside:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tc = Cursors.Arrow;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t\tc = Cursors.Arrow;\n\n\t\t\tif (c != this.Cursor)\n\t\t\t\tthis.Cursor = c;\n\t\t}\n\n\t\tprivate void DrawPanelMouseWheel(object sender, MouseEventArgs E)\n\t\t{\n            MouseEventArgsE e = new MouseEventArgsE(E, SCALEX, SCALEY);\n\n            if (!_vScroll.Enabled)\n                return;                 // scroll not enabled\n\t\t\tint wvalue;\n            bool bNotify = false;\n\t\t\tif (e.Delta < 0)\n\t\t\t{\n\t\t\t\tif (_vScroll.Value < _vScroll.Maximum)\n\t\t\t\t{\n\t\t\t\t\twvalue = _vScroll.Value + _vScroll.SmallChange;\n\n\t\t\t\t\t_vScroll.Value = Math.Min(_vScroll.Maximum, wvalue);\n                    bNotify = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse \n\t\t\t{\n\t\t\t\tif (_vScroll.Value > _vScroll.Minimum)\n\t\t\t\t{\n\t\t\t\t\twvalue = _vScroll.Value - _vScroll.SmallChange;\n\n\t\t\t\t\t_vScroll.Value = Math.Max(_vScroll.Minimum, wvalue);\n                    bNotify = true;\n\t\t\t\t}\n\t\t\t}\n            if (bNotify)\n            {\n                if (VerticalScrollChanged != null)\n                    VerticalScrollChanged(this, new EventArgs());\n                _DrawPanel.Refresh();\n            }\n\t\t}\n\n\t\tprivate void DrawPanelKeyDown(object sender, KeyEventArgs e)\n\t\t{\n\t\t\tint incX=0;\n\t\t\tint incY=0;\n\t\t\tint vScroll=_vScroll.Value;\n\t\t\tint hScroll=_hScroll.Value;\n\n\t\t\t// Force scroll up and down\n\t\t\tif (e.KeyCode == Keys.Down)  \n\t\t\t{\n\t\t\t\tincY=1;\n\t\t\t}\n\t\t\telse if (e.KeyCode == Keys.Up)\n\t\t\t{\n\t\t\t\tincY=-1;\n\t\t\t}\n\t\t\telse if (e.KeyCode == Keys.Left)\n\t\t\t{\n\t\t\t\tincX=-1;\n\t\t\t}\n\t\t\telse if (e.KeyCode == Keys.Right)\n\t\t\t{\n\t\t\t\tincX=1;\n\t\t\t}\n\t\t\telse if (e.KeyCode == Keys.PageDown)\n\t\t\t{\n\t\t\t\tvScroll = Math.Min(_vScroll.Value + _vScroll.LargeChange, _vScroll.Maximum);\n\t\t\t}\n\t\t\telse if (e.KeyCode == Keys.PageUp)\n\t\t\t{\n\t\t\t\tvScroll = Math.Max(_vScroll.Value - _vScroll.LargeChange, 0);\n\t\t\t}\n\t\t\telse if (e.KeyCode == Keys.Enter)\n\t\t\t{\n\t\t\t\te.Handled = true;\n\t\t\t\tmenuProperties_Click();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if (e.KeyCode == Keys.Tab)\n\t\t\t{\n\t\t\t\tif (_DrawPanel.SelectNext((Control.ModifierKeys & Keys.Shift) == Keys.Shift))\n\t\t\t\t{\n\t\t\t\t\tRectangleF r = _DrawPanel.GetRectangle(_DrawPanel.SelectedList[0]);\n\t\t\t\t\tRectangle nr = new Rectangle(PixelsX(r.X), PixelsY(r.Y), PixelsX(r.Width), PixelsY(r.Height));\n\t\t\t\t\tif (nr.Right > _hScroll.Value + Width - _vScroll.Width ||\n\t\t\t\t\t\tnr.Left < _hScroll.Value - _vScroll.Width)\n\t\t\t\t\t\thScroll = Math.Min(nr.Left, _hScroll.Maximum);\n\t\t\t\t\tif (nr.Bottom > _vScroll.Value + Height - _hScroll.Height ||\n\t\t\t\t\t\tnr.Top < _vScroll.Value - _hScroll.Height)\n\t\t\t\t\t\tvScroll = Math.Min(nr.Top, _vScroll.Maximum);\n\t\t\t\t\tthis.SelectionChanged(this, new EventArgs());\n\t\t\t\t\t_DrawPanel.Invalidate();   \n\t\t\t\t}\n\t\t\t\te.Handled = true;\n\t\t\t}\n\t\t\telse if (e.KeyCode == Keys.Delete)\n\t\t\t{\n\t\t\t\tthis.Delete();\n\t\t\t\te.Handled = true;\n\t\t\t}\n\t\t\t\n\t\t\tbool bRefresh = false;\n\t\t\tif (vScroll != _vScroll.Value && _vScroll.Enabled)\n\t\t\t{\n\t\t\t\t_vScroll.Value = Math.Max(vScroll, 0);\n\t\t\t\tbRefresh = true;\n\t\t\t\te.Handled = true;\n\t\t\t}\n\n\t\t\tif (hScroll != _hScroll.Value && _hScroll.Enabled)\n\t\t\t{\n\t\t\t\t_hScroll.Value = Math.Max(hScroll,0);\n\t\t\t\tbRefresh = true;\n\t\t\t\te.Handled = true;\n\t\t\t}\n\n\t\t\tif (incX != 0 || incY != 0)\n\t\t\t{\n\t\t\t\tHitLocationEnum hle = HitLocationEnum.Move;\n\t\t\t\tif ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)\t// if shift key on resize\n\t\t\t\t{\n\t\t\t\t\thle = incX != 0? HitLocationEnum.RightMiddle: HitLocationEnum.BottomMiddle;\n\t\t\t\t}\n\t\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_Move);\n\t\t\t\tif (_DrawPanel.MoveSelectedItems(incX, incY, hle))\n\t\t\t\t{\n\t\t\t\t\t_Undo.EndUndoGroup(true);\n\t\t\t\t\tSelectionMoved(this, new EventArgs());\n\t\t\t\t\tReportChanged(this, new EventArgs());\n\t\t\t\t\t_DrawPanel.Invalidate();   \n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\t_Undo.EndUndoGroup(false);\n\t\t\t\te.Handled = true;\n\t\t\t}\n\n\t\t\tif (bRefresh)\n\t\t\t\t_DrawPanel.Refresh();\n\t\t}\n\n\t\tprivate void DesignCtl_Layout(object sender, LayoutEventArgs e)\n\t\t{\n\t\t\t_DrawPanel.Location = new Point(0, 0);\n\t\t\t_DrawPanel.Width = this.Width - _vScroll.Width;\n\t\t\t_DrawPanel.Height = this.Height - _hScroll.Height;\n\t\t\t_hScroll.Location = new Point(0, this.Height - _hScroll.Height);\n\t\t\t_hScroll.Width = _DrawPanel.Width;\n\t\t\t_vScroll.Location = new Point(this.Width - _vScroll.Width, _DrawPanel.Location.Y);\n\t\t\t_vScroll.Height = _DrawPanel.Height;\n\n\t\t}\n\n\t\t\n\t\tprivate void menuCopy_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tClipboard.SetDataObject(GetCopy(), true);\n\t\t}\n\t\t\n\t\tprivate string GetCopy()\n\t\t{\n            // When copying multiple report items that are in the same table/matrix \n            //   ask if you want to instead copy the table/matrix\n            if (_DrawPanel.SelectedCount > 1)\n            {\n                XmlNode tn = _DrawPanel.TMParent(_DrawPanel.SelectedList[0]);\n                bool bTorM = tn != null;\n\n                for (int i=1; i < _DrawPanel.SelectedCount && bTorM; i++)\n                {\n                    if (tn != _DrawPanel.TMParent(_DrawPanel.SelectedList[i]))\n                        bTorM = false;\n                }\n                if (bTorM)\n                {   // all selected items are in the same table or matrix\n                    if (MessageBox.Show(string.Format(Strings.DesignCtl_ShowB_WantSelect, tn.Name),\n                        Strings.DesignCtl_ShowB_Copy, MessageBoxButtons.YesNo) == DialogResult.Yes)\n                    {\n                        StringBuilder tb = new StringBuilder();\n                        // Build XML representing the selected objects\n                        tb.Append(\"<ReportItems>\");\t\t// surround by ReportItems element\n                        tb.Append(tn.OuterXml);\n                        tb.Append(\"</ReportItems>\");\n                        return tb.ToString();\n                    }\n                }\n            }\n\n\n\t\t\tStringBuilder sb = new StringBuilder();\n\t\t\t// Build XML representing the selected objects\n\t\t\tsb.Append(\"<ReportItems>\");\t\t// surround by ReportItems element\n\t\t\tforeach (XmlNode riNode in _DrawPanel.SelectedList)\n\t\t\t{\n\t\t\t\tsb.Append(riNode.OuterXml);\t\n\t\t\t}\n\t\t\tsb.Append(\"</ReportItems>\");\n\t\t\treturn sb.ToString();\n\t\t}\n\t\t\t\t\n\t\tprivate void menuPaste_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tHitLocation hl = _DrawPanel.HitNode(_MousePosition, PointsX(_hScroll.Value), PointsY(_vScroll.Value));\n\t\t\tXmlNode lNode = hl == null? null: hl.HitNode;\n\n\t\t\tif (lNode == null)\n\t\t\t\treturn;\n\t\t\tif (!(lNode.Name == \"List\" ||\n\t\t\t\tlNode.Name == \"Body\" ||\n\t\t\t\tlNode.Name == \"Rectangle\" ||\n\t\t\t\tlNode.Name == \"PageHeader\" ||\n\t\t\t\tlNode.Name == \"PageFooter\"))\n\t\t\t{\n\t\t\t\tif (hl.HitContainer != null && (hl.HitContainer.Name == \"Table\" || hl.HitContainer.Name == \"fyi:Grid\"))\n\t\t\t\t{\n\t\t\t\t//\tWhen table we need to replace the tablecell contents; ask first\n\t\t\t\t\tif (MessageBox.Show(Strings.DesignCtl_ShowB_WantReplaceCell, Strings.DesignCtl_Show_Paste, MessageBoxButtons.YesNo) != DialogResult.Yes)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tXmlNode repItems = lNode.ParentNode;\n\t\t\t\t\tif (repItems.Name != \"ReportItems\")\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tXmlNode p = repItems.ParentNode;\n\t\t\t\t\tp.RemoveChild(repItems);\n\n\t\t\t\t\tDoPaste(p, hl.HitRelative);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tDoPaste(lNode, hl.HitRelative);\n\t\t}\n\n\t\tprivate void DoPaste(XmlNode lNode, PointF p)\n\t\t{\n\t\t\tIDataObject iData = Clipboard.GetDataObject();\n\t\t\tif (iData == null)\n\t\t\t\treturn;\n\t\t\tif (!(iData.GetDataPresent(DataFormats.Text) ||\n\t\t\t\t  iData.GetDataPresent(DataFormats.Bitmap))) \n\t\t\t\treturn;\n\n\t\t\tif (lNode == null)\n\t\t\t{\n\t\t\t\tlNode = _DrawPanel.Body;\n\t\t\t\tif (lNode == null)\n\t\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_Paste);\n\t\t\tif (iData.GetDataPresent(DataFormats.Text))\n\t\t\t{\n\t\t\t\t// Build the xml string in case it is a straight pasting of text\n\t\t\t\tstring t = (string) iData.GetData(DataFormats.Text);\n\t\t\t\tif (!(t.Length >=\t27 && t.Substring(0, 13) == \"<ReportItems>\"))\n\t\t\t\t{\n\t\t\t\t\tt = t.Replace(\"&\", \"&amp;\");\n\t\t\t\t\tt = t.Replace(\"<\", \"&lt;\");\n\t\t\t\t\t// Josh: Added a default ZIndex of 1 so that a \"Backgroud\" image can be applied to the form.\n                    t = string.Format(\"<ReportItems><Textbox><Height>12pt</Height><Width>1in</Width><Value>{0}</Value><ZIndex>1</ZIndex></Textbox></ReportItems>\", t); \n\t\t\t\t}\n\t\t\t\t// PasteReportItems throws exception when you try to paste an illegal object\n\t\t\t\ttry\t\n\t\t\t\t{\n\t\t\t\t\t_DrawPanel.PasteReportItems(lNode, t, p);\n\t\t\t\t}\n\t\t\t\tcatch (Exception e)\n\t\t\t\t{\n\t\t\t\t\tMessageBox.Show(e.Message, Strings.DesignCtl_Show_Paste);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// Build the xml string for an image; but we also need to put an\n\t\t\t\t//   embedded image into the report.\n\t\t\t\tSystem.Drawing.Bitmap bo = (System.Drawing.Bitmap) iData.GetData(DataFormats.Bitmap);\n\n\t\t\t\t_DrawPanel.PasteImage(lNode, bo, p);\n\t\t\t}\n\t\t\t_Undo.EndUndoGroup();\n\t\t\t_DrawPanel.Invalidate();\n\t\t\tReportChanged(this, new EventArgs());\n\t\t\tSelectionChanged(this, new EventArgs());\n\t\t}\n\t\t\t\t\n\t\tprivate void menuDelete_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tDelete();\n\t\t}\n\t\n\t\tprivate void menuInsertChart_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tHitLocation hl = _DrawPanel.HitContainer(_MousePosition, \n\t\t\t\tPointsX(_hScroll.Value), PointsY(_vScroll.Value));\n\t\t\tif (hl == null || hl.HitContainer == null)\n\t\t\t\treturn;\n\n\t\t\t// Charts aren't allowed in PageHeader or PageFooter\n\t\t\tif (_DrawPanel.InPageHeaderOrFooter(hl.HitContainer))\n\t\t\t{\n\t\t\t\tMessageBox.Show(Strings.DesignCtl_Show_ChartsInsert, Strings.DesignCtl_Show_Insert);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_InsertChart);\n\t\t\tDialogNewChart dnc = new DialogNewChart(this._DrawPanel, hl.HitContainer);\n            try\n            {\n                DialogResult dr = dnc.ShowDialog(this);\n                if (dr != DialogResult.OK)\n                {\n                    _Undo.EndUndoGroup(false);\n                    return;\n                }\n            }\n            finally\n            {\n                dnc.Dispose();\n            }\n\t\t\tXmlNode chart;\n\t\t\tif (hl.HitContainer.Name == \"Table\" || hl.HitContainer.Name == \"fyi:Grid\")\n\t\t\t{\n\t\t\t\tchart = _DrawPanel.ReplaceTableMatrixOrChart(hl, dnc.ChartXml);\n\t\t\t}\n\t\t\telse\n\t\t\t\tchart = _DrawPanel.PasteTableMatrixOrChart(hl.HitContainer, dnc.ChartXml, hl.HitRelative);\n\n\t\t\tif (chart == null)\n\t\t\t{\n\t\t\t\t_Undo.EndUndoGroup(false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_Undo.EndUndoGroup(true);\n\t\t\tReportChanged(this, new EventArgs());\n\t\t\tSelectionChanged(this, new EventArgs());\n\t\t\tReportItemInserted(this, new EventArgs());\n\t\t\t_DrawPanel.Invalidate();   \n\n\t\t\t// Now bring up the property dialog\n            //List<XmlNode> ar = new List<XmlNode>();\n            //ar.Add(chart);\n            //_Undo.StartUndoGroup(\"Dialog\");\n            //PropertyDialog pd = new PropertyDialog(_DrawPanel, ar, PropertyTypeEnum.ReportItems);\n            //dr = pd.ShowDialog(this);\n            //if (pd.Changed || dr == DialogResult.OK)\n            //{\n            //    _Undo.EndUndoGroup(true);\n            //    ReportChanged(this, new EventArgs());\n            //    _DrawPanel.Invalidate();   \n            //}\n            //else\n            //    _Undo.EndUndoGroup(false);\n\n\t\t\tSetFocus();\n\t\t}\n\t\n\t\tprivate void menuInsertCustomReportItem_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tvar mi = (ToolStripMenuItem)sender;\n\t\t\tmenuInsertCustomReportItem(sender, e, (string) mi.Tag);\n\t\t}\n\n\t\tprivate void menuInsertCustomReportItem(object sender, EventArgs e, string customName)\n\t\t{\n\t\t\tstring ri;\n\t\t\tICustomReportItem cri = null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tcri = RdlEngineConfig.CreateCustomReportItem(customName);\n\n\t\t\t\tvar criXml = cri.GetCustomReportItemXml().Trim();\n\n\t\t\t\tif (!(criXml.StartsWith(\"<CustomReportItem>\") && criXml.EndsWith(\"</CustomReportItem>\")))\n\t\t\t\t{\n\t\t\t\t\tMessageBox.Show(\n\t\t\t\t\t\tstring.Format(Strings.DesignCtl_Show_CustomReportItem, customName, criXml), Strings.DesignCtl_Show_Insert);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tri = \"<ReportItems>\" +\n\t\t\t\t\tstring.Format(criXml, customName) +     // substitute the type of custom report item\n\t\t\t\t\t\"</ReportItems>\";\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\tMessageBox.Show(string.Format(Strings.DesignCtl_Show_CustomReportItemException, ex.Message), Strings.DesignCtl_Show_Insert);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (cri != null)\n\t\t\t\t\tcri.Dispose();\n\t\t\t}\n\t\t\tmenuInsertReportItem(sender, e, ri);\n\t\t}\n\n        private void menuInsertGrid_Click(object sender, EventArgs e)\n        {\n            string ri = @\"<ReportItems>\"+\n\"<fyi:Grid xmlns:fyi=\\\"http://www.fyireporting.com/schemas\\\" Name=\\\"Grid1\\\">\" +\n        @\"<Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>83.7pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>92.7pt</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>93.7pt</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name='Textbox3'>\n                      <Value>Grid Column 1</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name='Textbox4'>\n                      <Value>Grid Column 2</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name='Textbox9'>\n                      <Value>Grid Column 3</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name='Textbox10'>\n                      <Value>r1c1</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name='Textbox11'>\n                      <Value>r1c2</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name='Textbox12'>\n                      <Value>r1c3</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name='Textbox13'>\n                      <Value>r2c1</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name='Textbox14'>\n                      <Value>r2c2</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name='Textbox15'>\n                      <Value>r2c3</Value>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n        <Left>515.68pt</Left>\n        <Top>11.34pt</Top>\n        <Footer>\n          <TableRows>\n            <TableRow>\n              <Height>.2in</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name='Textbox16'>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                      <Value>Footer 1</Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name='Textbox17'>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                      <Value>\n                      </Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name='Textbox18'>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                      <Value>\n                      </Value>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Footer>\n      </fyi:Grid>\n                </ReportItems>\";\n            menuInsertReportItem(sender, e, ri);\n        }\n\n\t\tprivate void menuInsertLine_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tstring ri = \"<ReportItems><Line><Height>0in</Height><Width>1in</Width><Style><BorderStyle><Default>Solid</Default></BorderStyle></Style></Line></ReportItems>\";\n\t\t\tmenuInsertReportItem(sender, e, ri);\n\t\t}\n\t\n\t\tprivate void menuInsertList_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tstring ri = \"<ReportItems><List><Height>1.5in</Height><Width>1.5in</Width></List></ReportItems>\";\n\n\t\t\t// Lists aren't allowed in PageHeader or PageFooter\n\t\t\tHitLocation hl = _DrawPanel.HitContainer(_MousePosition, \n\t\t\t\tPointsX(_hScroll.Value), PointsY(_vScroll.Value));\n\t\t\tif (hl == null || hl.HitContainer == null)\n\t\t\t\treturn;\n\t\t\tif (_DrawPanel.InPageHeaderOrFooter(hl.HitContainer))\n\t\t\t{\n\t\t\t\tMessageBox.Show(Strings.DesignCtl_Show_ListsInBody, Strings.DesignCtl_Show_Insert);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tmenuInsertReportItem(hl, ri);\n\t\t}\n\t\n\t\tprivate void menuInsertImage_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tstring ri = \"<ReportItems><Image><Height>1.5in</Height><Width>1.5in</Width></Image></ReportItems>\";\n\t\t\tmenuInsertReportItem(sender, e, ri);\n\t\t}\n\t\t\t\n\t\tprivate void menuInsertMatrix_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tHitLocation hl = _DrawPanel.HitContainer(_MousePosition, \n\t\t\t\tPointsX(_hScroll.Value), PointsY(_vScroll.Value));\n\t\t\tif (hl == null || hl.HitContainer == null)\n\t\t\t\treturn;\n\n\t\t\t// Matrixs aren't allowed in PageHeader or PageFooter\n\t\t\tif (_DrawPanel.InPageHeaderOrFooter(hl.HitContainer))\n\t\t\t{\n\t\t\t\tMessageBox.Show(Strings.DesignCtl_Show_MatrixsInBody, Strings.DesignCtl_Show_Insert);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_InsertMatrix);\n\t\t\tDialogNewMatrix dnm = new DialogNewMatrix(this._DrawPanel, hl.HitContainer);\n            try\n            {\n                DialogResult dr = dnm.ShowDialog(this);\n                if (dr != DialogResult.OK)\n                {\n                    _Undo.EndUndoGroup(false);\n                    return;\n                }\n            }\n            finally\n            {\n                dnm.Dispose();\n            }\n\t\t\tXmlNode matrix;\n\t\t\tif (hl.HitContainer.Name == \"Table\" || hl.HitContainer.Name == \"fyi:Grid\")\n\t\t\t\tmatrix = _DrawPanel.ReplaceTableMatrixOrChart(hl, dnm.MatrixXml);\n\t\t\telse\n\t\t\t\tmatrix = _DrawPanel.PasteTableMatrixOrChart(hl.HitContainer, dnm.MatrixXml, hl.HitRelative);\n\t\t\tif (matrix == null)\n\t\t\t{\n\t\t\t\t_Undo.EndUndoGroup(false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_Undo.EndUndoGroup(true);\n\t\t\tReportChanged(this, new EventArgs());\n\t\t\tSelectionChanged(this, new EventArgs());\n\t\t\tReportItemInserted(this, new EventArgs());\n\t\t\t_DrawPanel.Invalidate();   \n\n\t\t\t// Now bring up the property dialog\n            //List<XmlNode> ar = new List<XmlNode>();\n            //ar.Add(matrix);\n            //_Undo.StartUndoGroup(\"Dialog\");\n            //PropertyDialog pd = new PropertyDialog(_DrawPanel, ar, PropertyTypeEnum.ReportItems);\n            //dr = pd.ShowDialog(this);\n            //_Undo.EndUndoGroup(pd.Changed || dr == DialogResult.OK);\n            //if (pd.Changed || dr == DialogResult.OK)\n            //{\n            //    ReportChanged(this, new EventArgs());\n            //    _DrawPanel.Invalidate();   \n            //}\n\t\t\tSetFocus();\n\t\t}\n\t\t\t\n\t\tprivate void menuInsertRectangle_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tstring ri = \"<ReportItems><Rectangle><Height>1.5in</Height><Width>1.5in</Width></Rectangle></ReportItems>\";\n\t\t\tmenuInsertReportItem(sender, e, ri);\n\t\t}\n\n\t\tprivate void menuInsertReportItem(object sender, EventArgs e, string reportItem)\n\t\t{\n\t\t\tHitLocation hl = _DrawPanel.HitContainer(_MousePosition, \n\t\t\t\tPointsX(_hScroll.Value), PointsY(_vScroll.Value));\n\t\t\tif (hl == null || hl.HitContainer == null)\n\t\t\t\treturn;\n\n\t\t\tmenuInsertReportItem(hl, reportItem);\n\t\t}\t\n\t\t\n\t\tprivate void menuInsertReportItem(HitLocation hl, string reportItem)\n\t\t{\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_Insert);\n            try\n            {\n                if (hl.HitContainer.Name == \"Table\" || hl.HitContainer.Name == \"fyi:Grid\")\n                {\n                    _DrawPanel.ReplaceReportItems(hl, reportItem);\n                }\n                else\n                    _DrawPanel.PasteReportItems(hl.HitContainer, reportItem, hl.HitRelative);\n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show(Strings.DesignCtl_ShowC_IllegalInsertSyntax + Environment.NewLine + \n                    reportItem + Environment.NewLine + ex.Message);\n                return;\n            }\n            finally\n            {\n                _Undo.EndUndoGroup(true);\n            }\n\t\t\t_DrawPanel.Invalidate();\n\t\t\tReportChanged(this, new EventArgs());\n\t\t\tSelectionChanged(this, new EventArgs());\n\t\t\tReportItemInserted(this, new EventArgs());\n\n            if (reportItem.Contains(\"<Image\") || reportItem.Contains(\"<Subreport\"))\n\t    \t\tmenuProperties_Click();     // bring up report dialog for images and subreports\n\t\t}\n\t\t\t\n\t\tprivate void menuInsertSubreport_Click(object sender, EventArgs e)\n\t\t{\n\t\t\t// Subreports aren't allowed in PageHeader or PageFooter\n\t\t\tHitLocation hl = _DrawPanel.HitContainer(_MousePosition, \n\t\t\t\tPointsX(_hScroll.Value), PointsY(_vScroll.Value));\n\t\t\tif (hl == null || hl.HitContainer == null)\n\t\t\t\treturn;\n\t\t\tif (_DrawPanel.InPageHeaderOrFooter(hl.HitContainer))\n\t\t\t{\n\t\t\t\tMessageBox.Show(Strings.DesignCtl_Show_SubreportsInBody, Strings.DesignCtl_Show_Insert);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tstring ri = \"<ReportItems><Subreport><Height>1.5in</Height><Width>1.5in</Width></Subreport></ReportItems>\";\n\t\t\tmenuInsertReportItem(hl, ri);\n\t\t}\n\n\t\tprivate void menuInsertTable_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tHitLocation hl = _DrawPanel.HitContainer(_MousePosition, \n\t\t\t\tPointsX(_hScroll.Value), PointsY(_vScroll.Value));\n\t\t\tif (hl == null || hl.HitContainer == null)\n\t\t\t\treturn;\n\t\t\t\n\t\t\t// Tables aren't allowed in PageHeader or PageFooter\n\t\t\tif (_DrawPanel.InPageHeaderOrFooter(hl.HitContainer))\n\t\t\t{\n\t\t\t\tMessageBox.Show(Strings.DesignCtl_Show_TablesInBody, Strings.DesignCtl_Show_Insert);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_InsertTable);\n\t\t\tDialogNewTable dnt = new DialogNewTable(this._DrawPanel, hl.HitContainer);\n            try\n            {\n                DialogResult dr = dnt.ShowDialog(this);\n                if (dr != DialogResult.OK)\n                {\n                    _Undo.EndUndoGroup(false);\n                    return;\n                }\n            }\n            finally\n            {\n                dnt.Dispose();\n            }\n\t\t\tXmlNode table;\n\t\t\tif (hl.HitContainer.Name == \"Table\" || hl.HitContainer.Name == \"fyi:Grid\")\n\t\t\t\ttable = _DrawPanel.ReplaceTableMatrixOrChart(hl, dnt.TableXml);\n\t\t\telse\n\t\t\t\ttable = _DrawPanel.PasteTableMatrixOrChart(hl.HitContainer, dnt.TableXml, hl.HitRelative);\n\t\t\tif (table == null)\n\t\t\t{\n\t\t\t\t_Undo.EndUndoGroup(false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_Undo.EndUndoGroup(true);\n\t\t\tReportChanged(this, new EventArgs());\n\t\t\tSelectionChanged(this, new EventArgs());\n\t\t\tReportItemInserted(this, new EventArgs());\n\t\t\t_DrawPanel.Invalidate();   \n\n\t\t\t// Now bring up the property dialog\n            //List<XmlNode> ar = new List<XmlNode>();\n            //ar.Add(table);\n            //_Undo.StartUndoGroup(\"Dialog\");\n            //PropertyDialog pd = new PropertyDialog(_DrawPanel, ar, PropertyTypeEnum.ReportItems);\n            //dr = pd.ShowDialog(this);\n            //_Undo.EndUndoGroup(pd.Changed || dr == DialogResult.OK);\n            //if (pd.Changed || dr == DialogResult.OK)\n            //{\n            //    ReportChanged(this, new EventArgs());\n            //    _DrawPanel.Invalidate();   \n            //}\n\t\t\tSetFocus();\n\t\t}\n\t\n\t\tprivate void menuInsertTextbox_Click(object sender, EventArgs e)\n\t\t{\n\t\t\t// Josh: Added a default ZIndex of 1 so that a \"Backgroud\" image can be applied to the form.\n            string ri = \"<ReportItems><Textbox><Height>12pt</Height><Width>1in</Width><Value>Text</Value><ZIndex>1</ZIndex></Textbox></ReportItems>\"; \n\t\t\tmenuInsertReportItem(sender, e, ri);\n\t\t}\n\n\t\tprivate void menuOpenSubreport_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedList.Count == 0)\n\t\t\t\treturn;\n\n\t\t\tXmlNode sr = _DrawPanel.SelectedList[0];\n\t\t\tif (sr.Name != \"Subreport\")\n\t\t\t\treturn;\n\n\t\t\tstring name = _DrawPanel.GetElementValue(sr, \"ReportName\", \"\");\n\t\t\tif (name == null || name.Length == 0)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tif (OpenSubreport != null)\n\t\t\t\tOpenSubreport(this, new SubReportEventArgs(name));\n\t\t}\n\n\t\tprivate void menuSelectAll_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tdoSelectAll();\n\t\t}\n\n\t\tprivate void doSelectAll()\n\t\t{\n\t\t\tIEnumerable list = _DrawPanel.GetReportItems(null);\t\t// get all the report items\n\t\t\tif (list == null)\n\t\t\t\treturn;\n\t\t\t_DrawPanel.ClearSelected();\n\n\t\t\tforeach (XmlNode riNode in list)\n\t\t\t{\n\t\t\t\tif (riNode.Name == \"Table\" || riNode.Name == \"fyi:Grid\" || riNode.Name == \"List\" || riNode.Name == \"Rectangle\")\n\t\t\t\t\tcontinue;\t// we'll just select all the sub objects in these containers\n\t\t\t\t\n\t\t\t\t_DrawPanel.AddSelection(riNode);\n\t\t\t\tSelectionChanged(this, new EventArgs());\n\t\t\t}\n\t\t\t_DrawPanel.Invalidate();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal void menuProperties_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tmenuProperties_Click();\n\t\t}\n\t\t\n\t\tinternal void menuProperties_Click()\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount > 0)\n\t\t\t{\n\t\t\t\tDoPropertyDialog(PropertyTypeEnum.ReportItems);\n\t\t\t}\n\t\t\telse\n\t\t\t{\t// Put up the Report Property sheets\n\t\t\t\tDoPropertyDialog(PropertyTypeEnum.Report);\n\t\t\t}\n\t\t\tSelectionChanged(this, new EventArgs());\n\t\t}\n\n\t\tprivate void menuChartDeleteGrouping_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\n\t\t\tvar menu = (ToolStripMenuItem)sender;\n\n\t\t\tvar gname = menu.Text;\n\n\t\t\tXmlNode cNode = _DrawPanel.SelectedList[0];\n\t\t\t_DrawPanel.ClearSelected();\n\t\t\tthis.SelectionChanged(this, new EventArgs());\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_DeleteGrouping);\n\t\t\tbool bSuccess=false;\n\t\t\tif (_DrawPanel.DeleteChartGrouping(cNode, gname))\n\t\t\t{\n\t\t\t\tbSuccess = true;\n\t\t\t\tReportChanged(this, new EventArgs());\n\t\t\t\t_DrawPanel.Invalidate();   \n\t\t\t}\n\t\t\t_Undo.EndUndoGroup(bSuccess);\n\t\t}\n\n\t\tprivate void menuChartEditGrouping_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\n\t\t\tvar menu = (ToolStripMenuItem)sender;\n\n\t\t\tvar gname = menu.Text;\n\n\t\t\tXmlNode cNode = _DrawPanel.SelectedList[0];\n\n\t\t\tXmlNode group = _DrawPanel.GetChartGrouping(cNode, gname);\n\n\t\t\tList<XmlNode> ar = new List<XmlNode>();\t\t// need to put this is a list for dialog to handle\n\t\t\tar.Add(group.ParentNode);\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_DialogGrouping);\n\t\t\tPropertyDialog pd = new PropertyDialog(_DrawPanel, ar, PropertyTypeEnum.Grouping);\n            try\n            {\n                DialogResult dr = pd.ShowDialog(this);\n                _Undo.EndUndoGroup(pd.Changed || dr == DialogResult.OK);\n                if (pd.Changed || dr == DialogResult.OK)\n                {\n                    ReportChanged(this, new EventArgs());\n                    _DrawPanel.Invalidate();\n                }\n            }\n            finally\n            {\n                pd.Dispose();\n            }\n\t\t}\n\n\t\tprivate void menuChartInsertCategoryGrouping_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_InsertCategoryGrouping);\n\n\t\t\tXmlNode cNode = _DrawPanel.SelectedList[0];\n\t\t\tXmlNode colGroup = _DrawPanel.InsertChartCategoryGrouping(cNode);\n\t\t\tif (colGroup == null)\n\t\t\t{\n\t\t\t\t_Undo.EndUndoGroup(false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tList<XmlNode> ar = new List<XmlNode>();\t\t// need to put this is a list for dialog to handle\n\t\t\tar.Add(colGroup);\n\t\t\tPropertyDialog pd = new PropertyDialog(_DrawPanel, ar, PropertyTypeEnum.Grouping);\n            try\n            {\n                DialogResult dr = pd.ShowDialog(this);\n                if (pd.Changed || dr == DialogResult.OK)\n                {\n                    _Undo.EndUndoGroup(true);\n                    ReportChanged(this, new EventArgs());\n                    _DrawPanel.Invalidate();\n                }\n                else\n                {\n                    _DrawPanel.DeleteChartGrouping(colGroup);\n                    _Undo.EndUndoGroup(false);\n                }\n            }\n            finally\n            {\n                pd.Dispose();\n            }\n\t\t}\n\n\t\tprivate void menuChartInsertSeriesGrouping_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_InsertSeriesGrouping);\n\t\t\tXmlNode cNode = _DrawPanel.SelectedList[0];\n\t\t\tXmlNode colGroup = _DrawPanel.InsertChartSeriesGrouping(cNode);\n\t\t\tif (colGroup == null)\n\t\t\t{\n\t\t\t\t_Undo.EndUndoGroup(false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tList<XmlNode> ar = new List<XmlNode>();\t\t// need to put this is a list for dialog to handle\n\t\t\tar.Add(colGroup);\n\t\t\tPropertyDialog pd = new PropertyDialog(_DrawPanel, ar, PropertyTypeEnum.Grouping);\n            try\n            {\n                DialogResult dr = pd.ShowDialog(this);\n                if (pd.Changed || dr == DialogResult.OK)\n                {\n                    _Undo.EndUndoGroup(true);\n                    ReportChanged(this, new EventArgs());\n                    _DrawPanel.Invalidate();\n                }\n                else\n                {\n                    _DrawPanel.DeleteChartGrouping(colGroup);\n                    _Undo.EndUndoGroup(false);\n                }\n            }\n            finally\n            {\n                pd.Dispose();\n            }\n\t\t}\n\t\t\t\t\n\t\tprivate void menuPropertiesLegend_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tDoPropertyDialog(PropertyTypeEnum.ChartLegend);\n\t\t}\n\t\t\t\t\n\t\tprivate void menuPropertiesCategoryAxis_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tDoPropertyDialog(PropertyTypeEnum.CategoryAxis);\n\t\t}\n\t\t\t\t\n\t\tprivate void menuPropertiesValueAxis_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tDoPropertyDialog(PropertyTypeEnum.ValueAxis);\n\t\t}\n\t\t\t\t\n\t\tprivate void menuPropertiesCategoryAxisTitle_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tDoPropertyDialog(PropertyTypeEnum.CategoryAxisTitle);\n\t\t}\n\t\t\t\t\n\t\tprivate void menuPropertiesValueAxisTitle_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tDoPropertyDialog(PropertyTypeEnum.ValueAxisTitle);\n\t\t}\n\t\t// 20022008 AJM GJL - Second Y axis support\n        private void menuPropertiesValueAxis2Title_Click(object sender, EventArgs e)\n        {\n            DoPropertyDialog(PropertyTypeEnum.ValueAxis2Title);\n        }\n\t\t\t\t\n\t\tprivate void menuPropertiesChartTitle_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tDoPropertyDialog(PropertyTypeEnum.ChartTitle);\n\t\t}\n\n\t\tprivate void menuMatrixProperties_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\t\t\tXmlNode riNode = _DrawPanel.SelectedList[0];\n\t\t\tXmlNode table = _DrawPanel.GetMatrixFromReportItem(riNode);\n\t\t\tif (table == null)\n\t\t\t\treturn;\n\n\t\t\tList<XmlNode> ar = new List<XmlNode>();\t\t// need to put this is a list for dialog to handle\n\t\t\tar.Add(table);\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_MatrixDialog);\n\t\t\tPropertyDialog pd = new PropertyDialog(_DrawPanel, ar, PropertyTypeEnum.ReportItems);\n            try\n            {\n                DialogResult dr = pd.ShowDialog(this);\n                _Undo.EndUndoGroup(pd.Changed || dr == DialogResult.OK);\n                if (pd.Changed || dr == DialogResult.OK)\n                {\n                    ReportChanged(this, new EventArgs());\n                    _DrawPanel.Invalidate();\n                }\n            }\n            finally\n            {\n                pd.Dispose();\n            }\n\t\t}\n\n\t\tprivate void menuMatrixDelete_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_MatrixDelete);\n\t\t\tXmlNode cNode = _DrawPanel.SelectedList[0];\n\t\t\t_DrawPanel.ClearSelected();\n\t\t\tthis.SelectionChanged(this, new EventArgs());\n\t\t\tif (_DrawPanel.DeleteMatrix(cNode))\n\t\t\t{\n\t\t\t\t_Undo.EndUndoGroup(true);\n\t\t\t\tReportChanged(this, new EventArgs());\n\t\t\t\t_DrawPanel.Invalidate();   \n\t\t\t}\n\t\t\telse\n\t\t\t\t_Undo.EndUndoGroup(false);\n\t\t}\n\n\t\tprivate void menuMatrixDeleteGroup_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\n\t\t\tvar menu = (ToolStripMenuItem)sender;\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_MatrixDeleteGroup);\n\n\t\t\tvar gname = menu.Text;\n\n\t\t\tXmlNode cNode = _DrawPanel.SelectedList[0];\n\t\t\t_DrawPanel.ClearSelected();\n\t\t\tthis.SelectionChanged(this, new EventArgs());\n\t\t\tif (_DrawPanel.DeleteMatrixGroup(cNode, gname))\n\t\t\t{\n\t\t\t\t_Undo.EndUndoGroup(true);\n\t\t\t\tReportChanged(this, new EventArgs());\n\t\t\t\t_DrawPanel.Invalidate();   \n\t\t\t}\n\t\t\telse\n\t\t\t\t_Undo.EndUndoGroup(false);\n\t\t}\n\n\t\tprivate void menuMatrixEditGroup_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\n\t\t\tvar menu = (ToolStripMenuItem)sender;\n\n\t\t\tvar gname = menu.Text;\n\n\t\t\tXmlNode cNode = _DrawPanel.SelectedList[0];\n\n\t\t\tXmlNode group = _DrawPanel.GetMatrixGroup(cNode, gname);\n\n\t\t\tList<XmlNode> ar = new List<XmlNode>();\t\t// need to put this is a list for dialog to handle\n\t\t\tar.Add(group.ParentNode);\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_MatrixEdit);\n\t\t\tPropertyDialog pd = new PropertyDialog(_DrawPanel, ar, PropertyTypeEnum.Grouping);\n            try\n            {\n                DialogResult dr = pd.ShowDialog(this);\n                _Undo.EndUndoGroup(pd.Changed || dr == DialogResult.OK);\n                if (pd.Changed || dr == DialogResult.OK)\n                {\n                    ReportChanged(this, new EventArgs());\n                    _DrawPanel.Invalidate();\n                }\n            }\n            finally\n            {\n                pd.Dispose();\n            }\n\t\t}\n\n\t\tprivate void menuMatrixInsertColumnGroup_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\t\t\tXmlNode cNode = _DrawPanel.SelectedList[0];\n\t\t\tXmlNode colGroup = _DrawPanel.InsertMatrixColumnGroup(cNode);\n\t\t\tif (colGroup == null)\n\t\t\t\treturn;\n\n\t\t\tList<XmlNode> ar = new List<XmlNode>();\t\t// need to put this is a list for dialog to handle\n\t\t\tar.Add(colGroup);\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_MatrixInsertColumnGroup);\n\t\t\tPropertyDialog pd = new PropertyDialog(_DrawPanel, ar, PropertyTypeEnum.Grouping);\n            try\n            {\n                DialogResult dr = pd.ShowDialog(this);\n                if (pd.Changed || dr == DialogResult.OK)\n                {\n                    _Undo.EndUndoGroup(true);\n                    ReportChanged(this, new EventArgs());\n                    _DrawPanel.Invalidate();\n                }\n                else\n                {\n                    _DrawPanel.DeleteMatrixGroup(colGroup);\n                    _Undo.EndUndoGroup(false);\n                }\n            }\n            finally\n            {\n                pd.Dispose();\n            }\n\t\t}\n\n\t\tprivate void menuMatrixInsertRowGroup_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\t\t\tXmlNode cNode =  _DrawPanel.SelectedList[0];\n\t\t\tXmlNode rowGroup = _DrawPanel.InsertMatrixRowGroup(cNode);\n\t\t\tif (rowGroup == null)\n\t\t\t\treturn;\n\n\t\t\tList<XmlNode> ar = new List<XmlNode>();\t\t// need to put this is a list for dialog to handle\n\t\t\tar.Add(rowGroup);\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_MatrixInsertRowGroup);\n\t\t\tPropertyDialog pd = new PropertyDialog(_DrawPanel, ar, PropertyTypeEnum.Grouping);\n            try\n            {\n                DialogResult dr = pd.ShowDialog(this);\n                if (pd.Changed || dr == DialogResult.OK)\n                {\n                    _Undo.EndUndoGroup(true);\n                    ReportChanged(this, new EventArgs());\n                    _DrawPanel.Invalidate();\n                }\n                else\n                {\n                    _DrawPanel.DeleteMatrixGroup(rowGroup);\n                    _Undo.EndUndoGroup(false);\n                }\n            }\n            finally\n            {\n                pd.Dispose();\n            }\n\t\t}\n\n\t\tprivate void menuTableDeleteColumn_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\t\t\tXmlNode cNode =  _DrawPanel.SelectedList[0];\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_DeleteTableColumn);\n\n\t\t\t_DrawPanel.ClearSelected();\n\t\t\tthis.SelectionChanged(this, new EventArgs());\n\t\t\tif (_DrawPanel.DeleteTableColumn(cNode))\n\t\t\t{\n\t\t\t\t_Undo.EndUndoGroup(true);\n\t\t\t\tReportChanged(this, new EventArgs());\n\t\t\t\t_DrawPanel.Invalidate();   \n\t\t\t}\n\t\t\telse\n\t\t\t\t_Undo.EndUndoGroup(false);\n\t\t}\n\n\t\tprivate void menuTableDelete_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\t\t\tXmlNode cNode =  _DrawPanel.SelectedList[0];\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_DeleteTable);\n\t\t\t_DrawPanel.ClearSelected();\n\t\t\tthis.SelectionChanged(this, new EventArgs());\n\t\t\tif (_DrawPanel.DeleteTable(cNode))\n\t\t\t{\n\t\t\t\t_Undo.EndUndoGroup(true);\n\t\t\t\tReportChanged(this, new EventArgs());\n\t\t\t\t_DrawPanel.Invalidate();   \n\t\t\t}\n\t\t\telse\n\t\t\t\t_Undo.EndUndoGroup(false);\n\t\t}\n\n\t\tprivate void menuTableDeleteRow_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\t\t\tXmlNode cNode = _DrawPanel.SelectedList[0];\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_DeleteTableRow);\n\t\t\t_DrawPanel.ClearSelected();\n\t\t\tthis.SelectionChanged(this, new EventArgs());\n\t\t\tif (_DrawPanel.DeleteTableRow(cNode))\n\t\t\t{\n\t\t\t\t_Undo.EndUndoGroup(true);\n\t\t\t\tReportChanged(this, new EventArgs());\n\t\t\t\t_DrawPanel.Invalidate();   \n\t\t\t}\n\t\t\telse\n\t\t\t\t_Undo.EndUndoGroup(false);\n\t\t}\n\n\t\tprivate void menuTableDeleteGroup_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\n\t\t\tvar menu = (ToolStripMenuItem)sender;\n\n\t\t\tvar gname = menu.Text;\n\n\t\t\tXmlNode cNode = _DrawPanel.SelectedList[0];\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_DeleteTableGroup);\n\t\t\t_DrawPanel.ClearSelected();\n\t\t\tthis.SelectionChanged(this, new EventArgs());\n\t\t\tif (_DrawPanel.DeleteTableGroup(cNode, gname))\n\t\t\t{\n\t\t\t\t_Undo.EndUndoGroup(true);\n\t\t\t\tReportChanged(this, new EventArgs());\n\t\t\t\t_DrawPanel.Invalidate();   \n\t\t\t}\n\t\t\telse\n\t\t\t\t_Undo.EndUndoGroup(false);\n\t\t}\n\n\t\tprivate void menuTableEditGroup_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\n\t\t\tvar menu = (ToolStripMenuItem)sender;\n\n\t\t\tvar gname = menu.Text;\n\n\t\t\tXmlNode cNode = _DrawPanel.SelectedList[0];\n\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_DialogTableGroupEdit);\n\t\t\tXmlNode tblGroup = _DrawPanel.GetTableGroup(cNode, gname);\n\n\t\t\tList<XmlNode> ar = new List<XmlNode>();\t\t// need to put this is a list for dialog to handle\n\t\t\tar.Add(tblGroup);\n\t\t\tPropertyDialog pd = new PropertyDialog(_DrawPanel, ar, PropertyTypeEnum.Grouping);\n            try\n            {\n                DialogResult dr = pd.ShowDialog(this);\n                _Undo.EndUndoGroup(pd.Changed || dr == DialogResult.OK);\n                if (pd.Changed || dr == DialogResult.OK)\n                {\n                    ReportChanged(this, new EventArgs());\n                    _DrawPanel.Invalidate();\n                }\n            }\n            finally\n            {\n                pd.Dispose();\n            }\n\t\t}\n\n\t\tprivate void menuTableInsertColumnBefore_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\t\t\tXmlNode cNode = _DrawPanel.SelectedList[0];\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_InsertTableColumn);\n\t\t\tif (_DrawPanel.InsertTableColumn(cNode, true))\n\t\t\t{\n\t\t\t\t_Undo.EndUndoGroup(true);\n\t\t\t\tReportChanged(this, new EventArgs());\n\t\t\t\t_DrawPanel.Invalidate();   \n\t\t\t}\n\t\t\telse\n\t\t\t\t_Undo.EndUndoGroup(false);\n\t\t}\n\t\t\t\t\n\t\tprivate void menuTableInsertColumnAfter_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\t\t\tXmlNode cNode = _DrawPanel.SelectedList[0];\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_InsertTableColumn);\n\t\t\tif (_DrawPanel.InsertTableColumn(cNode, false))\n\t\t\t{\n\t\t\t\t_Undo.EndUndoGroup(true);\n\t\t\t\tReportChanged(this, new EventArgs());\n\t\t\t\t_DrawPanel.Invalidate();   \n\t\t\t}\n\t\t\telse\n\t\t\t\t_Undo.EndUndoGroup(false);\n\t\t}\n\t\t\t\t\n\t\tprivate void menuTableInsertGroup_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\t\t\tXmlNode cNode = _DrawPanel.SelectedList[0];\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_InsertTableGroup);\n\t\t\tXmlNode tblGroup = _DrawPanel.InsertTableGroup(cNode);\n\t\t\tif (tblGroup == null)\n\t\t\t{\n\t\t\t\t_Undo.EndUndoGroup(false);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tList<XmlNode> ar = new List<XmlNode>();\t\t// need to put this is a list for dialog to handle\n\t\t\tar.Add(tblGroup);\n\t\t\tPropertyDialog pd = new PropertyDialog(_DrawPanel, ar, PropertyTypeEnum.Grouping);\n            try\n            {\n                DialogResult dr = pd.ShowDialog(this);\n                if (pd.Changed || dr == DialogResult.OK)\n                {\n                    _Undo.EndUndoGroup(true);\n                    ReportChanged(this, new EventArgs());\n                    _DrawPanel.Invalidate();\n                }\n                else\n                {\n                    _DrawPanel.DeleteTableGroup(tblGroup);\n                    _Undo.EndUndoGroup(false);\n                }\n            }\n            finally\n            {\n                pd.Dispose();\n            }\n\t\t}\n\n\t\tprivate void menuTableInsertRowBefore_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\t\t\tXmlNode cNode =  _DrawPanel.SelectedList[0];\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_InsertTableRow);\n\n\t\t\tif (_DrawPanel.InsertTableRow(cNode, true))\n\t\t\t{\n\t\t\t\t_Undo.EndUndoGroup(true);\n\t\t\t\tReportChanged(this, new EventArgs());\n\t\t\t\t_DrawPanel.Invalidate();   \n\t\t\t}\n\t\t\telse\n\t\t\t\t_Undo.EndUndoGroup(false);\n\t\t}\n\t\t\t\t\n\t\tprivate void menuTableInsertRowAfter_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\t\t\tXmlNode cNode = _DrawPanel.SelectedList[0];\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_InsertTableRow);\n\t\t\tif (_DrawPanel.InsertTableRow(cNode, false))\n\t\t\t{\n\t\t\t\t_Undo.EndUndoGroup(true);\n\t\t\t\tReportChanged(this, new EventArgs());\n\t\t\t\t_DrawPanel.Invalidate();   \n\t\t\t}\n\t\t\telse\n\t\t\t\t_Undo.EndUndoGroup(false);\n\t\t}\n\t\t\t\t\n\t\tprivate void menuTableProperties_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_DrawPanel.SelectedCount != 1)\n\t\t\t\treturn;\n\t\t\tXmlNode riNode = _DrawPanel.SelectedList[0];\n\t\t\tXmlNode table = _DrawPanel.GetTableFromReportItem(riNode);\n\t\t\tif (table == null)\n\t\t\t\treturn;\n\t\t\tXmlNode tc = _DrawPanel.GetTableColumn(riNode);\n\t\t\tXmlNode tr = _DrawPanel.GetTableRow(riNode);\n\n\t\t\tList<XmlNode> ar = new List<XmlNode>();\t\t// need to put this is a list for dialog to handle\n\t\t\tar.Add(table);\n\t\t\t_Undo.StartUndoGroup(Strings.DesignCtl_Undo_TableDialog);\n\t\t\tPropertyDialog pd = new PropertyDialog(_DrawPanel, ar, PropertyTypeEnum.ReportItems, tc, tr);\n            try\n            {\n                DialogResult dr = pd.ShowDialog(this);\n                _Undo.EndUndoGroup(pd.Changed || dr == DialogResult.OK);\n                if (pd.Changed || dr == DialogResult.OK)\n                {\n                    ReportChanged(this, new EventArgs());\n                    _DrawPanel.Invalidate();\n                }\n            }\n            finally\n            {\n                pd.Dispose();\n            }\n\t\t}\n\n\t\tprivate void DoPropertyDialog(PropertyTypeEnum type)\n\t\t{\n\t\t\tStartUndoGroup(Strings.DesignCtl_Undo_Dialog);\n\t\t\tPropertyDialog pd = new PropertyDialog(_DrawPanel, _DrawPanel.SelectedList, type);\n            try\n            {\n                DialogResult dr = pd.ShowDialog(this);\n                this.EndUndoGroup(pd.Changed || dr == DialogResult.OK);\n                if (pd.Changed || dr == DialogResult.OK)\n                {\n                    ReportChanged(this, new EventArgs());\n                    _DrawPanel.Invalidate();\n                }\n            }\n            finally\n            {\n                pd.Dispose();\n            }\n\t\t\tSetFocus();\n\t\t}\n\n\t\tinternal void SetFocus()\n\t\t{\n\t\t\tthis._DrawPanel.Focus();\n\t\t}\n\t\t\t\t\n\t\tprivate void menuContext_Popup(object sender, EventArgs e)\n\t\t{\n\t\t\tvar bEnable = _DrawPanel.SelectedCount > 0;\n\n\t\t\tMenuDefaultCopy.Enabled = bEnable;\n\t\t\tMenuDefaultDelete.Enabled = bEnable;\n\n\t\t\tvar al = new List<XmlNode>();\n\n\t\t\tvar iData = Clipboard.GetDataObject();\n\n\t\t\tif (iData == null)\n\t\t\t\tbEnable = false;\n\t\t\telse if (iData.GetDataPresent(al.GetType()))\n\t\t\t\tbEnable = true;\n\t\t\telse if (iData.GetDataPresent(DataFormats.Text)) \n\t\t\t\tbEnable = true;\n\t\t\telse if (iData.GetDataPresent(DataFormats.Bitmap)) \n\t\t\t\tbEnable = true;\n\t\t\telse\n\t\t\t\tbEnable = false;\n\n\t\t\tMenuDefaultPaste.Enabled = bEnable;\n\t\t\tMenuChartPaste.Enabled = bEnable;\n\t\t\tMenuGridPaste.Enabled = bEnable;\n\t\t\tMenuMatrixPaste.Enabled = bEnable;\n\t\t\tMenuSubreportPaste.Enabled = bEnable;\n\t\t\tMenuTablePaste.Enabled = bEnable;\n\t\t}\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                // Dispose managed resources\n                _buffer?.Dispose();\n            }\n\n            base.Dispose(disposing);\n        }\n    }\n\n\tpublic class SubReportEventArgs : EventArgs\n\t{\n\t\tstring _name;\t\t\t// name of subreport user has requested be opened\n\t\tpublic SubReportEventArgs(string name) : base()\n\t\t{\n\t\t\t_name = name;\n\t\t}\n\n\t\tpublic string SubReportName\n\t\t{\n\t\t\tget {return _name;}\n\t\t}\n\t}\n\n    public class HeightEventArgs : EventArgs\n    {\n        XmlNode _node;          // current node\n        string _height;\t\t\t// current height\n        public HeightEventArgs(XmlNode node, string height)\n            : base()\n        {\n            _node = node;\n            _height = height;\n        }\n\n        public XmlNode Node\n        {\n            get { return _node; }\n        }\n        public string Height\n        {\n            get { return _height; }\n        }\n    }\n    /// <summary>\n    /// Nuova classe embbedded nel controllo per passare gli eventi del mouse e i fattori di scala correnti\n    /// </summary>\n\n    public class MouseEventArgsE : EventArgs\n    {\n        private MouseButtons button;\n        private int clicks;\n        private int x;\n        private int y;\n        private int delta;\n        private Point location;\n        public MouseButtons Button => button;\n        public int Clicks => clicks;\n        public int X => x;\n        public int Y => y;\n        public int Delta => delta;\n        public Point Location => location;\n\n        /// <summary>\n        /// Costruttore\n        /// </summary>\n        /// <param name=\"B\"></param>\n        /// <param name=\"ScaleX\"></param>\n        /// <param name=\"ScaleY\"></param>\n        public MouseEventArgsE(MouseEventArgs B, float ScaleX, float ScaleY)\n        {\n            this.button = B.Button;\n            this.clicks = B.Clicks;\n            this.x = (int)(B.X / ScaleX);\n            this.y = (int)(B.Y / ScaleY);\n            this.location = new Point(x, y);\n            this.delta = B.Delta;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/DesignCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"MenuGridReplaceCellMatrix.Text\" xml:space=\"preserve\">\n    <value>&amp;Matrix...</value>\n  </data>\n  <data name=\"&gt;&gt;MenuInsertTextbox.Name\" xml:space=\"preserve\">\n    <value>MenuInsertTextbox</value>\n  </data>\n  <data name=\"MenuChartLegend.Text\" xml:space=\"preserve\">\n    <value>Legend...</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"MenuInsertChart.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartSelectAll.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartCategoryAxis.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuChartEditCategoryGrouping.Text\" xml:space=\"preserve\">\n    <value>Edit Category Grouping</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableInsertColumnAfter.Name\" xml:space=\"preserve\">\n    <value>MenuTableInsertColumnAfter</value>\n  </data>\n  <data name=\"MenuTableInsertColumnBefore.Text\" xml:space=\"preserve\">\n    <value>Insert Column Before</value>\n  </data>\n  <data name=\"MenuGridReplaceCellSubreport.Text\" xml:space=\"preserve\">\n    <value>&amp;Subreport</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixDeleteMatrix.Name\" xml:space=\"preserve\">\n    <value>MenuMatrixDeleteMatrix</value>\n  </data>\n  <data name=\"MenuInsertLine.Text\" xml:space=\"preserve\">\n    <value>&amp;Line</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableEditGroup.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem18.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuChartCopy.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuInsertRectangle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridReplaceCellRectangle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuTableSelectAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"MenuTableReplaceCellChart.Text\" xml:space=\"preserve\">\n    <value>&amp;Chart...</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartProperties.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableEditGroup.Name\" xml:space=\"preserve\">\n    <value>MenuTableEditGroup</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem13.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem13</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem17.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartValueAxis.Name\" xml:space=\"preserve\">\n    <value>MenuChartValueAxis</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartProperties.Name\" xml:space=\"preserve\">\n    <value>MenuChartProperties</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem8.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableReplaceCellTextbox.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartEditCategoryGrouping.Name\" xml:space=\"preserve\">\n    <value>MenuChartEditCategoryGrouping</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableDeleteGroup.Name\" xml:space=\"preserve\">\n    <value>MenuTableDeleteGroup</value>\n  </data>\n  <data name=\"MenuGridReplaceCellChart.Text\" xml:space=\"preserve\">\n    <value>&amp;Chart...</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartEditCategoryGrouping.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartCopy.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStripMenuItem8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 6</value>\n  </data>\n  <data name=\"&gt;&gt;MenuDefaultCopy.Name\" xml:space=\"preserve\">\n    <value>MenuDefaultCopy</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem25.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem19.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixMatrixProperties.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridInsertColumnBefore.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuSubreportSelectAll.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuGridDeleteRow.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixInsertColumnGroup.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuTableInsertRowBefore.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridReplaceCellList.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuChartValueAxisRightTitle.Text\" xml:space=\"preserve\">\n    <value>Value (Y) Axis (Right) Title...</value>\n  </data>\n  <data name=\"MenuGridSelectAll.Text\" xml:space=\"preserve\">\n    <value>Select &amp;All</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableDelete.Name\" xml:space=\"preserve\">\n    <value>MenuTableDelete</value>\n  </data>\n  <data name=\"MenuTableCopy.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"MenuTableDelete.Text\" xml:space=\"preserve\">\n    <value>&amp;Delete</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixInsertRowGroup.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuDefaultDelete.Text\" xml:space=\"preserve\">\n    <value>&amp;Delete</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem18.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem18</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuChartEditCategoryGrouping.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"MenuSubreportDelete.Text\" xml:space=\"preserve\">\n    <value>&amp;Delete</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem22.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridDeleteGrid.Name\" xml:space=\"preserve\">\n    <value>MenuGridDeleteGrid</value>\n  </data>\n  <data name=\"&gt;&gt;MenuDefaultPaste.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridReplaceCellChart.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartDeleteSeriesGrouping.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuSubreportProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>158, 22</value>\n  </data>\n  <data name=\"MenuMatrixCopy.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>194, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableCopy.Name\" xml:space=\"preserve\">\n    <value>MenuTableCopy</value>\n  </data>\n  <data name=\"MenuInsertTable.Text\" xml:space=\"preserve\">\n    <value>Ta&amp;ble...</value>\n  </data>\n  <data name=\"&gt;&gt;MenuInsertRectangle.Name\" xml:space=\"preserve\">\n    <value>MenuInsertRectangle</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixEditColumnGroup.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuGridInsertRowAfter.Text\" xml:space=\"preserve\">\n    <value>Insert Row After</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTablePaste.Name\" xml:space=\"preserve\">\n    <value>MenuTablePaste</value>\n  </data>\n  <data name=\"MenuMatrixProperties.Text\" xml:space=\"preserve\">\n    <value>&amp;Properties...</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem15.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem15</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridReplaceCellTextbox.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuChartSelectAll.Text\" xml:space=\"preserve\">\n    <value>Select &amp;All</value>\n  </data>\n  <data name=\"MenuMatrixDeleteColumnGroup.Text\" xml:space=\"preserve\">\n    <value>Delete Column Group</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem12.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuInsertSubreport.Name\" xml:space=\"preserve\">\n    <value>MenuInsertSubreport</value>\n  </data>\n  <data name=\"MenuTableInsertGroup.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"MenuDefaultCopy.Text\" xml:space=\"preserve\">\n    <value>&amp;Copy</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem15.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartDelete.Name\" xml:space=\"preserve\">\n    <value>MenuChartDelete</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableInsertRowBefore.Name\" xml:space=\"preserve\">\n    <value>MenuTableInsertRowBefore</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridInsertColumnBefore.Name\" xml:space=\"preserve\">\n    <value>MenuGridInsertColumnBefore</value>\n  </data>\n  <data name=\"MenuGridReplaceCellSubreport.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"MenuSubreportSelectAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>158, 22</value>\n  </data>\n  <data name=\"MenuSubreportDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>158, 22</value>\n  </data>\n  <data name=\"MenuMatrixInsertRowGroup.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>194, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuDefaultPaste.Name\" xml:space=\"preserve\">\n    <value>MenuDefaultPaste</value>\n  </data>\n  <data name=\"MenuChartValueAxis.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem14.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuGridReplaceCellList.Text\" xml:space=\"preserve\">\n    <value>&amp;List</value>\n  </data>\n  <data name=\"MenuDefaultInsert.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>136, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixEditColumnGroup.Name\" xml:space=\"preserve\">\n    <value>MenuMatrixEditColumnGroup</value>\n  </data>\n  <data name=\"MenuMatrixSelectAll.Text\" xml:space=\"preserve\">\n    <value>Select &amp;All</value>\n  </data>\n  <data name=\"&gt;&gt;MenuSubreportPaste.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuInsertImage.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuDefaultCopy.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableDeleteColumn.Name\" xml:space=\"preserve\">\n    <value>MenuTableDeleteColumn</value>\n  </data>\n  <data name=\"&gt;&gt;MenuDefaultDelete.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStripMenuItem15.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>155, 6</value>\n  </data>\n  <data name=\"MenuMatrixEditColumnGroup.Text\" xml:space=\"preserve\">\n    <value>Edit Column Group</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableReplaceCellTextbox.Name\" xml:space=\"preserve\">\n    <value>MenuTableReplaceCellTextbox</value>\n  </data>\n  <data name=\"MenuTableReplaceCellImage.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartEditSeriesGrouping.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuChartValueAxisTitle.Text\" xml:space=\"preserve\">\n    <value>Value (Y) Axis Title...</value>\n  </data>\n  <data name=\"MenuTableReplaceCellChart.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"MenuMatrixDeleteRowGroup.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>194, 22</value>\n  </data>\n  <data name=\"MenuInsertLine.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"MenuTableDeleteGroup.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"ContextMenuDefault.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>137, 154</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableCopy.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuInsertTextbox.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuChartCategoryAxisTitle.Text\" xml:space=\"preserve\">\n    <value>Category (X) Axis Title...</value>\n  </data>\n  <data name=\"MenuGridReplaceCellChart.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridPaste.Name\" xml:space=\"preserve\">\n    <value>MenuGridPaste</value>\n  </data>\n  <data name=\"MenuTableReplaceCellImage.Text\" xml:space=\"preserve\">\n    <value>&amp;Image</value>\n  </data>\n  <data name=\"&gt;&gt;MenuSubreportOpen.Name\" xml:space=\"preserve\">\n    <value>MenuSubreportOpen</value>\n  </data>\n  <data name=\"&gt;&gt;MenuInsertLine.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridSelectAll.Name\" xml:space=\"preserve\">\n    <value>MenuGridSelectAll</value>\n  </data>\n  <data name=\"MenuMatrixEditRowGroup.Text\" xml:space=\"preserve\">\n    <value>Edit Row Group</value>\n  </data>\n  <data name=\"MenuTableCopy.Text\" xml:space=\"preserve\">\n    <value>&amp;Copy</value>\n  </data>\n  <data name=\"MenuInsertChart.Text\" xml:space=\"preserve\">\n    <value>&amp;Chart...</value>\n  </data>\n  <data name=\"&gt;&gt;ContextMenuGrid.Name\" xml:space=\"preserve\">\n    <value>ContextMenuGrid</value>\n  </data>\n  <data name=\"MenuMatrixInsertRowGroup.Text\" xml:space=\"preserve\">\n    <value>Insert Row Group...</value>\n  </data>\n  <data name=\"&gt;&gt;MenuSubreportOpen.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuSubreportCopy.Text\" xml:space=\"preserve\">\n    <value>&amp;Copy</value>\n  </data>\n  <data name=\"&gt;&gt;ContextMenuDefault.Name\" xml:space=\"preserve\">\n    <value>ContextMenuDefault</value>\n  </data>\n  <data name=\"MenuInsertList.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"MenuChartDelete.Text\" xml:space=\"preserve\">\n    <value>&amp;Delete</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTablePaste.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuChartValueAxis.Text\" xml:space=\"preserve\">\n    <value>Value (Y) Axis...</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartTitle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStripMenuItem25.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>183, 6</value>\n  </data>\n  <data name=\"MenuChartCopy.Text\" xml:space=\"preserve\">\n    <value>&amp;Copy</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridInsertRowAfter.Name\" xml:space=\"preserve\">\n    <value>MenuGridInsertRowAfter</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem25.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem25</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixDeleteColumnGroup.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridInsertRowBefore.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem9.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem9</value>\n  </data>\n  <data name=\"MenuTableReplaceCellTable.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"MenuMatrixPaste.Text\" xml:space=\"preserve\">\n    <value>Paste</value>\n  </data>\n  <data name=\"&gt;&gt;MenuInsertGrid.Name\" xml:space=\"preserve\">\n    <value>MenuInsertGrid</value>\n  </data>\n  <data name=\"&gt;&gt;MenuDefaultSelectAll.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuSubreportOpen.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>158, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem7.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem7</value>\n  </data>\n  <data name=\"MenuInsertRectangle.Text\" xml:space=\"preserve\">\n    <value>&amp;Rectangle</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixCopy.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem11.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuMatrixDeleteColumnGroup.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>194, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableDeleteColumn.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuInsertChart.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableSelectAll.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem6.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem6</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem26.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem26</value>\n  </data>\n  <data name=\"MenuGridSelectAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixEditRowGroup.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixSelectAll.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuDefaultProperties.Text\" xml:space=\"preserve\">\n    <value>&amp;Properties...</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableReplaceCellSubreport.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuGridReplaceCellTextbox.Text\" xml:space=\"preserve\">\n    <value>&amp;Textbox</value>\n  </data>\n  <data name=\"MenuTableTableProperties.Text\" xml:space=\"preserve\">\n    <value>Table Properties...</value>\n  </data>\n  <data name=\"toolStripMenuItem16.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>155, 6</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridInsertRowAfter.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixPaste.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuMatrixCopy.Text\" xml:space=\"preserve\">\n    <value>&amp;Copy</value>\n  </data>\n  <data name=\"MenuGridCopy.Text\" xml:space=\"preserve\">\n    <value>&amp;Copy</value>\n  </data>\n  <data name=\"MenuInsertTextbox.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem10.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;ContextMenuChart.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStripMenuItem19.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>183, 6</value>\n  </data>\n  <data name=\"&gt;&gt;MenuInsertSubreport.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuGridInsertColumnBefore.Text\" xml:space=\"preserve\">\n    <value>Insert Column Before</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem27.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem27</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridGridProperties.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStripMenuItem14.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>191, 6</value>\n  </data>\n  <data name=\"MenuChartCategoryAxisTitle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"MenuChartDeleteCategoryGrouping.Text\" xml:space=\"preserve\">\n    <value>Delete Category Grouping</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableInsertColumnAfter.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuTableProperties.Text\" xml:space=\"preserve\">\n    <value>&amp;Properties...</value>\n  </data>\n  <data name=\"MenuInsertTable.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixMatrixProperties.Name\" xml:space=\"preserve\">\n    <value>MenuMatrixMatrixProperties</value>\n  </data>\n  <data name=\"toolStripMenuItem1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>133, 6</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem8.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem8</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableReplaceCellTable.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuDefaultDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>136, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem20.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem20</value>\n  </data>\n  <data name=\"MenuGridDelete.Text\" xml:space=\"preserve\">\n    <value>&amp;Delete</value>\n  </data>\n  <data name=\"toolStripMenuItem26.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>183, 6</value>\n  </data>\n  <data name=\"toolStripMenuItem10.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>191, 6</value>\n  </data>\n  <data name=\"MenuGridReplaceCellTextbox.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"MenuSubreportSelectAll.Text\" xml:space=\"preserve\">\n    <value>Select &amp;All</value>\n  </data>\n  <data name=\"MenuInsertMatrix.Text\" xml:space=\"preserve\">\n    <value>&amp;Matrix...</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridReplaceCellList.Name\" xml:space=\"preserve\">\n    <value>MenuGridReplaceCellList</value>\n  </data>\n  <data name=\"MenuGridDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"&gt;&gt;ContextMenuMatrix.Name\" xml:space=\"preserve\">\n    <value>ContextMenuMatrix</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridReplaceCellTable.Name\" xml:space=\"preserve\">\n    <value>MenuGridReplaceCellTable</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableTableProperties.Name\" xml:space=\"preserve\">\n    <value>MenuTableTableProperties</value>\n  </data>\n  <data name=\"&gt;&gt;MenuInsertLine.Name\" xml:space=\"preserve\">\n    <value>MenuInsertLine</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartInsertSeriesGrouping.Name\" xml:space=\"preserve\">\n    <value>MenuChartInsertSeriesGrouping</value>\n  </data>\n  <data name=\"toolStripMenuItem24.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>183, 6</value>\n  </data>\n  <data name=\"MenuSubreportPaste.Text\" xml:space=\"preserve\">\n    <value>Paste</value>\n  </data>\n  <data name=\"MenuMatrixEditRowGroup.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>194, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuInsertList.Name\" xml:space=\"preserve\">\n    <value>MenuInsertList</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixCopy.Name\" xml:space=\"preserve\">\n    <value>MenuMatrixCopy</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem22.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem21.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem21</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridSelectAll.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuTableDeleteGroup.Text\" xml:space=\"preserve\">\n    <value>Delete Group</value>\n  </data>\n  <data name=\"MenuTableEditGroup.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableReplaceCell.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuTableReplaceCellMatrix.Text\" xml:space=\"preserve\">\n    <value>&amp;Matrix...</value>\n  </data>\n  <data name=\"MenuGridInsertRowAfter.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"MenuMatrixInsertColumnGroup.Text\" xml:space=\"preserve\">\n    <value>Insert Column Group...</value>\n  </data>\n  <data name=\"MenuSubreportProperties.Text\" xml:space=\"preserve\">\n    <value>&amp;Properties...</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableReplaceCellRectangle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableReplaceCellChart.Name\" xml:space=\"preserve\">\n    <value>MenuTableReplaceCellChart</value>\n  </data>\n  <data name=\"MenuChartValueAxisRightTitle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"MenuChartTitle.Text\" xml:space=\"preserve\">\n    <value>Title...</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem13.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartValueAxis.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableReplaceCellRectangle.Name\" xml:space=\"preserve\">\n    <value>MenuTableReplaceCellRectangle</value>\n  </data>\n  <data name=\"MenuTableReplaceCell.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"MenuSubreportPaste.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>158, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem16.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem16</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem12.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem12</value>\n  </data>\n  <data name=\"&gt;&gt;MenuInsertGrid.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixDeleteMatrix.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuTableProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"&gt;&gt;ContextMenuSubreport.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuInsertGrid.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"&gt;&gt;ContextMenuSubreport.Name\" xml:space=\"preserve\">\n    <value>ContextMenuSubreport</value>\n  </data>\n  <data name=\"&gt;&gt;MenuInsertMatrix.Name\" xml:space=\"preserve\">\n    <value>MenuInsertMatrix</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixProperties.Name\" xml:space=\"preserve\">\n    <value>MenuMatrixProperties</value>\n  </data>\n  <data name=\"MenuInsertGrid.Text\" xml:space=\"preserve\">\n    <value>&amp;Grid</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartEditSeriesGrouping.Name\" xml:space=\"preserve\">\n    <value>MenuChartEditSeriesGrouping</value>\n  </data>\n  <data name=\"MenuTableReplaceCellRectangle.Text\" xml:space=\"preserve\">\n    <value>&amp;Rectangle</value>\n  </data>\n  <data name=\"&gt;&gt;MenuInsertList.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem5.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem5</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartCategoryAxisTitle.Name\" xml:space=\"preserve\">\n    <value>MenuChartCategoryAxisTitle</value>\n  </data>\n  <data name=\"toolStripMenuItem3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>133, 6</value>\n  </data>\n  <data name=\"&gt;&gt;MenuDefaultInsert.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem24.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem24</value>\n  </data>\n  <data name=\"MenuTableInsertGroup.Text\" xml:space=\"preserve\">\n    <value>Insert Table Group...</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartCopy.Name\" xml:space=\"preserve\">\n    <value>MenuChartCopy</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem23.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem23</value>\n  </data>\n  <data name=\"MenuGridReplaceCellList.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableDeleteRow.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuMatrixDeleteRowGroup.Text\" xml:space=\"preserve\">\n    <value>Delete Row Group</value>\n  </data>\n  <data name=\"MenuGridDeleteRow.Text\" xml:space=\"preserve\">\n    <value>Delete Grid Row</value>\n  </data>\n  <data name=\"toolStripMenuItem7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 6</value>\n  </data>\n  <data name=\"MenuGridGridProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"MenuChartDeleteSeriesGrouping.Text\" xml:space=\"preserve\">\n    <value>Delete Series Grouping</value>\n  </data>\n  <data name=\"toolStripMenuItem18.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>183, 6</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartValueAxisTitle.Name\" xml:space=\"preserve\">\n    <value>MenuChartValueAxisTitle</value>\n  </data>\n  <data name=\"MenuMatrixPaste.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>194, 22</value>\n  </data>\n  <data name=\"MenuTableReplaceCellSubreport.Text\" xml:space=\"preserve\">\n    <value>&amp;Subreport</value>\n  </data>\n  <data name=\"MenuGridReplaceCell.Text\" xml:space=\"preserve\">\n    <value>&amp;Replace Cell with</value>\n  </data>\n  <data name=\"&gt;&gt;MenuSubreportPaste.Name\" xml:space=\"preserve\">\n    <value>MenuSubreportPaste</value>\n  </data>\n  <data name=\"toolStripMenuItem17.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>183, 6</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridReplaceCell.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixSelectAll.Name\" xml:space=\"preserve\">\n    <value>MenuMatrixSelectAll</value>\n  </data>\n  <data name=\"MenuInsertRectangle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"MenuChartInsertSeriesGrouping.Text\" xml:space=\"preserve\">\n    <value>Insert Series Grouping...</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableReplaceCellImage.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableInsertRowBefore.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuInsertMatrix.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"ContextMenuMatrix.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>195, 320</value>\n  </data>\n  <data name=\"MenuMatrixDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>194, 22</value>\n  </data>\n  <data name=\"MenuGridPaste.Text\" xml:space=\"preserve\">\n    <value>Paste</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableReplaceCellMatrix.Name\" xml:space=\"preserve\">\n    <value>MenuTableReplaceCellMatrix</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridReplaceCellChart.Name\" xml:space=\"preserve\">\n    <value>MenuGridReplaceCellChart</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixProperties.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuSubreportCopy.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridCopy.Name\" xml:space=\"preserve\">\n    <value>MenuGridCopy</value>\n  </data>\n  <data name=\"MenuTableTableProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartLegend.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartSelectAll.Name\" xml:space=\"preserve\">\n    <value>MenuChartSelectAll</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableReplaceCellMatrix.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStripMenuItem13.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>191, 6</value>\n  </data>\n  <data name=\"MenuChartPaste.Text\" xml:space=\"preserve\">\n    <value>Paste</value>\n  </data>\n  <data name=\"MenuTableInsertRowAfter.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixDelete.Name\" xml:space=\"preserve\">\n    <value>MenuMatrixDelete</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridReplaceCellImage.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"ContextMenuGrid.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>187, 342</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableTableProperties.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableDeleteTable.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableReplaceCellChart.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuGridDeleteGrid.Text\" xml:space=\"preserve\">\n    <value>Delete Grid</value>\n  </data>\n  <data name=\"toolStripMenuItem27.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>183, 6</value>\n  </data>\n  <data name=\"toolStripMenuItem11.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>191, 6</value>\n  </data>\n  <data name=\"&gt;&gt;ContextMenuDefault.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem27.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;ContextMenuTable.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStripMenuItem20.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>183, 6</value>\n  </data>\n  <data name=\"MenuGridProperties.Text\" xml:space=\"preserve\">\n    <value>&amp;Properties...</value>\n  </data>\n  <data name=\"MenuGridGridProperties.Text\" xml:space=\"preserve\">\n    <value>Grid Properties...</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableInsertColumnBefore.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridReplaceCellSubreport.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStripMenuItem5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 6</value>\n  </data>\n  <data name=\"MenuInsertSubreport.Text\" xml:space=\"preserve\">\n    <value>&amp;Subreport</value>\n  </data>\n  <data name=\"MenuChartCategoryAxis.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"ContextMenuChart.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>220, 436</value>\n  </data>\n  <data name=\"toolStripMenuItem23.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>183, 6</value>\n  </data>\n  <data name=\"MenuGridDeleteGrid.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuDefaultDelete.Name\" xml:space=\"preserve\">\n    <value>MenuDefaultDelete</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridReplaceCell.Name\" xml:space=\"preserve\">\n    <value>MenuGridReplaceCell</value>\n  </data>\n  <data name=\"MenuChartEditSeriesGrouping.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"MenuGridInsertColumnBefore.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem20.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridDeleteRow.Name\" xml:space=\"preserve\">\n    <value>MenuGridDeleteRow</value>\n  </data>\n  <data name=\"&gt;&gt;ContextMenuChart.Name\" xml:space=\"preserve\">\n    <value>ContextMenuChart</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem16.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStripMenuItem21.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>183, 6</value>\n  </data>\n  <data name=\"MenuTableDeleteColumn.Text\" xml:space=\"preserve\">\n    <value>Delete Table Column</value>\n  </data>\n  <data name=\"MenuTableInsertColumnAfter.Text\" xml:space=\"preserve\">\n    <value>Insert Column After</value>\n  </data>\n  <data name=\"MenuTableReplaceCellTextbox.Text\" xml:space=\"preserve\">\n    <value>&amp;Textbox</value>\n  </data>\n  <data name=\"MenuGridReplaceCellTable.Text\" xml:space=\"preserve\">\n    <value>Ta&amp;ble...</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartValueAxisRightTitle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuTableEditGroup.Text\" xml:space=\"preserve\">\n    <value>Edit Group</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridInsertColumnAfter.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuMatrixInsertColumnGroup.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>194, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridReplaceCellTable.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridDeleteColumn.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixDeleteRowGroup.Name\" xml:space=\"preserve\">\n    <value>MenuMatrixDeleteRowGroup</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableDelete.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuTableDeleteTable.Text\" xml:space=\"preserve\">\n    <value>Delete Table</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableProperties.Name\" xml:space=\"preserve\">\n    <value>MenuTableProperties</value>\n  </data>\n  <data name=\"MenuGridReplaceCellMatrix.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"MenuInsertList.Text\" xml:space=\"preserve\">\n    <value>&amp;List</value>\n  </data>\n  <data name=\"MenuTableInsertRowBefore.Text\" xml:space=\"preserve\">\n    <value>Insert Row Before</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem9.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableReplaceCell.Name\" xml:space=\"preserve\">\n    <value>MenuTableReplaceCell</value>\n  </data>\n  <data name=\"MenuGridReplaceCellRectangle.Text\" xml:space=\"preserve\">\n    <value>&amp;Rectangle</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem4.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem4</value>\n  </data>\n  <data name=\"MenuInsertSubreport.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"MenuGridCopy.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartPaste.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuGridProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"MenuSubreportCopy.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>158, 22</value>\n  </data>\n  <data name=\"MenuChartLegend.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"toolStripMenuItem12.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>191, 6</value>\n  </data>\n  <data name=\"MenuTableReplaceCellTable.Text\" xml:space=\"preserve\">\n    <value>Ta&amp;ble...</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartInsertSeriesGrouping.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuChartProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"MenuGridReplaceCellImage.Text\" xml:space=\"preserve\">\n    <value>&amp;Image</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridInsertColumnAfter.Name\" xml:space=\"preserve\">\n    <value>MenuGridInsertColumnAfter</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartValueAxisRightTitle.Name\" xml:space=\"preserve\">\n    <value>MenuChartValueAxisRightTitle</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableReplaceCellImage.Name\" xml:space=\"preserve\">\n    <value>MenuTableReplaceCellImage</value>\n  </data>\n  <data name=\"&gt;&gt;MenuDefaultInsert.Name\" xml:space=\"preserve\">\n    <value>MenuDefaultInsert</value>\n  </data>\n  <data name=\"MenuTableReplaceCellMatrix.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableReplaceCellSubreport.Name\" xml:space=\"preserve\">\n    <value>MenuTableReplaceCellSubreport</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableInsertGroup.Name\" xml:space=\"preserve\">\n    <value>MenuTableInsertGroup</value>\n  </data>\n  <data name=\"MenuTableReplaceCellSubreport.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"MenuTableSelectAll.Text\" xml:space=\"preserve\">\n    <value>Select &amp;All</value>\n  </data>\n  <data name=\"&gt;&gt;MenuInsertTable.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuGridInsertRowBefore.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"MenuChartDeleteCategoryGrouping.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuSubreportCopy.Name\" xml:space=\"preserve\">\n    <value>MenuSubreportCopy</value>\n  </data>\n  <data name=\"MenuInsertMatrix.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"&gt;&gt;ContextMenuMatrix.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuDefaultProperties.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableReplaceCellList.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartDeleteCategoryGrouping.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem23.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuMatrixDeleteMatrix.Text\" xml:space=\"preserve\">\n    <value>Delete Matrix</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridDeleteColumn.Name\" xml:space=\"preserve\">\n    <value>MenuGridDeleteColumn</value>\n  </data>\n  <data name=\"MenuTableReplaceCell.Text\" xml:space=\"preserve\">\n    <value>&amp;Replace Cell with</value>\n  </data>\n  <data name=\"MenuChartProperties.Text\" xml:space=\"preserve\">\n    <value>&amp;Properties...</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem19.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem19</value>\n  </data>\n  <data name=\"MenuGridDeleteColumn.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"ContextMenuTable.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>187, 414</value>\n  </data>\n  <data name=\"toolStripMenuItem22.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>183, 6</value>\n  </data>\n  <data name=\"MenuSubreportOpen.Text\" xml:space=\"preserve\">\n    <value>Open Subreport</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem26.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridReplaceCellMatrix.Name\" xml:space=\"preserve\">\n    <value>MenuGridReplaceCellMatrix</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableSelectAll.Name\" xml:space=\"preserve\">\n    <value>MenuTableSelectAll</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridDelete.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuTableDeleteRow.Text\" xml:space=\"preserve\">\n    <value>Delete Table Row</value>\n  </data>\n  <data name=\"MenuMatrixMatrixProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>194, 22</value>\n  </data>\n  <data name=\"MenuMatrixMatrixProperties.Text\" xml:space=\"preserve\">\n    <value>Matrix Properties...</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridReplaceCellSubreport.Name\" xml:space=\"preserve\">\n    <value>MenuGridReplaceCellSubreport</value>\n  </data>\n  <data name=\"&gt;&gt;MenuSubreportDelete.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem5.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuTableInsertRowAfter.Text\" xml:space=\"preserve\">\n    <value>Insert Row After</value>\n  </data>\n  <data name=\"MenuGridDeleteColumn.Text\" xml:space=\"preserve\">\n    <value>Delete Grid Column</value>\n  </data>\n  <data name=\"&gt;&gt;MenuInsertImage.Name\" xml:space=\"preserve\">\n    <value>MenuInsertImage</value>\n  </data>\n  <data name=\"MenuTableDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"MenuGridPaste.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"MenuGridInsertColumnAfter.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuSubreportProperties.Name\" xml:space=\"preserve\">\n    <value>MenuSubreportProperties</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridReplaceCellTextbox.Name\" xml:space=\"preserve\">\n    <value>MenuGridReplaceCellTextbox</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridReplaceCellImage.Name\" xml:space=\"preserve\">\n    <value>MenuGridReplaceCellImage</value>\n  </data>\n  <data name=\"MenuDefaultSelectAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>136, 22</value>\n  </data>\n  <data name=\"MenuTableDeleteTable.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableInsertColumnBefore.Name\" xml:space=\"preserve\">\n    <value>MenuTableInsertColumnBefore</value>\n  </data>\n  <data name=\"MenuMatrixDeleteMatrix.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>194, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuInsertTable.Name\" xml:space=\"preserve\">\n    <value>MenuInsertTable</value>\n  </data>\n  <data name=\"MenuTableDeleteColumn.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuSubreportDelete.Name\" xml:space=\"preserve\">\n    <value>MenuSubreportDelete</value>\n  </data>\n  <data name=\"toolStripMenuItem2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>133, 6</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixInsertRowGroup.Name\" xml:space=\"preserve\">\n    <value>MenuMatrixInsertRowGroup</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem6.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridProperties.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem3.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem3</value>\n  </data>\n  <data name=\"MenuDefaultCopy.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>136, 22</value>\n  </data>\n  <data name=\"toolStripMenuItem9.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 6</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixInsertColumnGroup.Name\" xml:space=\"preserve\">\n    <value>MenuMatrixInsertColumnGroup</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridCopy.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixEditRowGroup.Name\" xml:space=\"preserve\">\n    <value>MenuMatrixEditRowGroup</value>\n  </data>\n  <data name=\"MenuTableReplaceCellRectangle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem2.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem2</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableReplaceCellList.Name\" xml:space=\"preserve\">\n    <value>MenuTableReplaceCellList</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridGridProperties.Name\" xml:space=\"preserve\">\n    <value>MenuGridGridProperties</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartInsertCategoryGrouping.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuGridReplaceCellImage.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuDefaultSelectAll.Name\" xml:space=\"preserve\">\n    <value>MenuDefaultSelectAll</value>\n  </data>\n  <data name=\"MenuDefaultSelectAll.Text\" xml:space=\"preserve\">\n    <value>Select &amp;All</value>\n  </data>\n  <data name=\"MenuGridInsertColumnAfter.Text\" xml:space=\"preserve\">\n    <value>Insert Column After</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem7.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridReplaceCellRectangle.Name\" xml:space=\"preserve\">\n    <value>MenuGridReplaceCellRectangle</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem24.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartDeleteSeriesGrouping.Name\" xml:space=\"preserve\">\n    <value>MenuChartDeleteSeriesGrouping</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridDeleteGrid.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStripMenuItem4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 6</value>\n  </data>\n  <data name=\"MenuDefaultInsert.Text\" xml:space=\"preserve\">\n    <value>&amp;Insert</value>\n  </data>\n  <data name=\"MenuDefaultPaste.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>136, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem17.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem17</value>\n  </data>\n  <data name=\"MenuGridReplaceCell.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuInsertImage.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuInsertImage.Text\" xml:space=\"preserve\">\n    <value>&amp;Image</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DesignCtl</value>\n  </data>\n  <data name=\"&gt;&gt;MenuSubreportSelectAll.Name\" xml:space=\"preserve\">\n    <value>MenuSubreportSelectAll</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartCategoryAxisTitle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuTableInsertColumnBefore.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableInsertRowAfter.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableDeleteTable.Name\" xml:space=\"preserve\">\n    <value>MenuTableDeleteTable</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixPaste.Name\" xml:space=\"preserve\">\n    <value>MenuMatrixPaste</value>\n  </data>\n  <data name=\"MenuChartPaste.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem14.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem14</value>\n  </data>\n  <data name=\"MenuDefaultPaste.Text\" xml:space=\"preserve\">\n    <value>Paste</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixDeleteRowGroup.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartTitle.Name\" xml:space=\"preserve\">\n    <value>MenuChartTitle</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableDeleteRow.Name\" xml:space=\"preserve\">\n    <value>MenuTableDeleteRow</value>\n  </data>\n  <data name=\"&gt;&gt;MenuSubreportProperties.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuTablePaste.Text\" xml:space=\"preserve\">\n    <value>Paste</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableReplaceCellTable.Name\" xml:space=\"preserve\">\n    <value>MenuTableReplaceCellTable</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridProperties.Name\" xml:space=\"preserve\">\n    <value>MenuGridProperties</value>\n  </data>\n  <data name=\"MenuInsertTextbox.Text\" xml:space=\"preserve\">\n    <value>&amp;Textbox</value>\n  </data>\n  <data name=\"MenuChartTitle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"MenuChartDeleteSeriesGrouping.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"MenuTableReplaceCellList.Text\" xml:space=\"preserve\">\n    <value>&amp;List</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixDelete.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;ContextMenuTable.Name\" xml:space=\"preserve\">\n    <value>ContextMenuTable</value>\n  </data>\n  <data name=\"MenuChartInsertCategoryGrouping.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuInsertChart.Name\" xml:space=\"preserve\">\n    <value>MenuInsertChart</value>\n  </data>\n  <data name=\"MenuMatrixDelete.Text\" xml:space=\"preserve\">\n    <value>&amp;Delete</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridDeleteRow.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableInsertGroup.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuDefaultProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>136, 22</value>\n  </data>\n  <data name=\"MenuChartInsertSeriesGrouping.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridDelete.Name\" xml:space=\"preserve\">\n    <value>MenuGridDelete</value>\n  </data>\n  <data name=\"MenuMatrixSelectAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>194, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartLegend.Name\" xml:space=\"preserve\">\n    <value>MenuChartLegend</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridInsertRowBefore.Name\" xml:space=\"preserve\">\n    <value>MenuGridInsertRowBefore</value>\n  </data>\n  <data name=\"MenuChartEditSeriesGrouping.Text\" xml:space=\"preserve\">\n    <value>Edit Series Grouping</value>\n  </data>\n  <data name=\"MenuChartCategoryAxis.Text\" xml:space=\"preserve\">\n    <value>Category (X) Axis...</value>\n  </data>\n  <data name=\"MenuChartValueAxisTitle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem10.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem10</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridPaste.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartDeleteCategoryGrouping.Name\" xml:space=\"preserve\">\n    <value>MenuChartDeleteCategoryGrouping</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartInsertCategoryGrouping.Name\" xml:space=\"preserve\">\n    <value>MenuChartInsertCategoryGrouping</value>\n  </data>\n  <data name=\"MenuTableDeleteRow.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"MenuTableReplaceCellList.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem21.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartValueAxisTitle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuGridInsertRowBefore.Text\" xml:space=\"preserve\">\n    <value>Insert Row Before</value>\n  </data>\n  <data name=\"&gt;&gt;MenuDefaultProperties.Name\" xml:space=\"preserve\">\n    <value>MenuDefaultProperties</value>\n  </data>\n  <data name=\"MenuTableInsertColumnAfter.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem1.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem1</value>\n  </data>\n  <data name=\"MenuMatrixProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>194, 22</value>\n  </data>\n  <data name=\"MenuGridReplaceCellTable.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"MenuChartSelectAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartPaste.Name\" xml:space=\"preserve\">\n    <value>MenuChartPaste</value>\n  </data>\n  <data name=\"ContextMenuSubreport.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>159, 148</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem11.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem11</value>\n  </data>\n  <data name=\"MenuTableReplaceCellTextbox.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"MenuChartDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuGridReplaceCellMatrix.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;ContextMenuGrid.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuMatrixDeleteColumnGroup.Name\" xml:space=\"preserve\">\n    <value>MenuMatrixDeleteColumnGroup</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartCategoryAxis.Name\" xml:space=\"preserve\">\n    <value>MenuChartCategoryAxis</value>\n  </data>\n  <data name=\"&gt;&gt;MenuChartDelete.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuMatrixEditColumnGroup.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>194, 22</value>\n  </data>\n  <data name=\"MenuGridReplaceCellRectangle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableProperties.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableDeleteGroup.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"MenuTablePaste.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>186, 22</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTableInsertRowAfter.Name\" xml:space=\"preserve\">\n    <value>MenuTableInsertRowAfter</value>\n  </data>\n  <data name=\"toolStripMenuItem6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 6</value>\n  </data>\n  <data name=\"MenuChartInsertCategoryGrouping.Text\" xml:space=\"preserve\">\n    <value>Insert Category Grouping...</value>\n  </data>\n  <metadata name=\"ContextMenuChart.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>182, 17</value>\n  </metadata>\n  <metadata name=\"ContextMenuSubreport.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>497, 17</value>\n  </metadata>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <metadata name=\"ContextMenuMatrix.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>337, 17</value>\n  </metadata>\n  <metadata name=\"ContextMenuGrid.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>677, 17</value>\n  </metadata>\n  <metadata name=\"ContextMenuDefault.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"ContextMenuTable.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 56</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/DesignCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"MenuDefaultProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>142, 22</value>\n  </data>\n  <data name=\"MenuDefaultProperties.Text\" xml:space=\"preserve\">\n    <value>Свойства</value>\n  </data>\n  <data name=\"toolStripMenuItem1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>139, 6</value>\n  </data>\n  <data name=\"MenuDefaultCopy.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>142, 22</value>\n  </data>\n  <data name=\"MenuDefaultCopy.Text\" xml:space=\"preserve\">\n    <value>Копировать</value>\n  </data>\n  <data name=\"MenuDefaultPaste.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>142, 22</value>\n  </data>\n  <data name=\"MenuDefaultPaste.Text\" xml:space=\"preserve\">\n    <value>Вставить</value>\n  </data>\n  <data name=\"MenuDefaultDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>142, 22</value>\n  </data>\n  <data name=\"MenuDefaultDelete.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"toolStripMenuItem2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>139, 6</value>\n  </data>\n  <data name=\"MenuDefaultSelectAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>142, 22</value>\n  </data>\n  <data name=\"MenuDefaultSelectAll.Text\" xml:space=\"preserve\">\n    <value>Выбрать все</value>\n  </data>\n  <data name=\"toolStripMenuItem3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>139, 6</value>\n  </data>\n  <data name=\"MenuInsertChart.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuInsertChart.Text\" xml:space=\"preserve\">\n    <value>Диаграмму...</value>\n  </data>\n  <data name=\"MenuInsertGrid.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuInsertGrid.Text\" xml:space=\"preserve\">\n    <value>Сетку</value>\n  </data>\n  <data name=\"MenuInsertImage.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuInsertImage.Text\" xml:space=\"preserve\">\n    <value>Изображение</value>\n  </data>\n  <data name=\"MenuInsertLine.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuInsertLine.Text\" xml:space=\"preserve\">\n    <value>Линию</value>\n  </data>\n  <data name=\"MenuInsertList.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuInsertList.Text\" xml:space=\"preserve\">\n    <value>Список</value>\n  </data>\n  <data name=\"MenuInsertMatrix.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuInsertMatrix.Text\" xml:space=\"preserve\">\n    <value>Матрицу...</value>\n  </data>\n  <data name=\"MenuInsertRectangle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuInsertRectangle.Text\" xml:space=\"preserve\">\n    <value>Прямоугольник</value>\n  </data>\n  <data name=\"MenuInsertSubreport.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuInsertSubreport.Text\" xml:space=\"preserve\">\n    <value>Подотчёт</value>\n  </data>\n  <data name=\"MenuInsertTable.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuInsertTable.Text\" xml:space=\"preserve\">\n    <value>Таблицу...</value>\n  </data>\n  <data name=\"MenuInsertTextbox.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuInsertTextbox.Text\" xml:space=\"preserve\">\n    <value>Текстовое поле</value>\n  </data>\n  <data name=\"MenuDefaultInsert.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>142, 22</value>\n  </data>\n  <data name=\"MenuDefaultInsert.Text\" xml:space=\"preserve\">\n    <value>Создать</value>\n  </data>\n  <data name=\"ContextMenuDefault.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>143, 154</value>\n  </data>\n  <data name=\"MenuChartProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>276, 22</value>\n  </data>\n  <data name=\"MenuChartProperties.Text\" xml:space=\"preserve\">\n    <value>Свойства...</value>\n  </data>\n  <data name=\"MenuChartLegend.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>276, 22</value>\n  </data>\n  <data name=\"MenuChartLegend.Text\" xml:space=\"preserve\">\n    <value>Легенда...</value>\n  </data>\n  <data name=\"MenuChartTitle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>276, 22</value>\n  </data>\n  <data name=\"MenuChartTitle.Text\" xml:space=\"preserve\">\n    <value>Заголовок...</value>\n  </data>\n  <data name=\"toolStripMenuItem4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>273, 6</value>\n  </data>\n  <data name=\"MenuChartInsertCategoryGrouping.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>276, 22</value>\n  </data>\n  <data name=\"MenuChartInsertCategoryGrouping.Text\" xml:space=\"preserve\">\n    <value>Добавить группу категории...</value>\n  </data>\n  <data name=\"MenuChartEditCategoryGrouping.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>276, 22</value>\n  </data>\n  <data name=\"MenuChartEditCategoryGrouping.Text\" xml:space=\"preserve\">\n    <value>Редактировать группу категории</value>\n  </data>\n  <data name=\"MenuChartDeleteCategoryGrouping.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>276, 22</value>\n  </data>\n  <data name=\"MenuChartDeleteCategoryGrouping.Text\" xml:space=\"preserve\">\n    <value>Удалить группу категории</value>\n  </data>\n  <data name=\"toolStripMenuItem5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>273, 6</value>\n  </data>\n  <data name=\"MenuChartCategoryAxis.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>276, 22</value>\n  </data>\n  <data name=\"MenuChartCategoryAxis.Text\" xml:space=\"preserve\">\n    <value>Категория (ось X)...</value>\n  </data>\n  <data name=\"MenuChartCategoryAxisTitle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>276, 22</value>\n  </data>\n  <data name=\"MenuChartCategoryAxisTitle.Text\" xml:space=\"preserve\">\n    <value>Заголовок категории (ось X)...</value>\n  </data>\n  <data name=\"toolStripMenuItem6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>273, 6</value>\n  </data>\n  <data name=\"MenuChartInsertSeriesGrouping.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>276, 22</value>\n  </data>\n  <data name=\"MenuChartInsertSeriesGrouping.Text\" xml:space=\"preserve\">\n    <value>Добавить группу серии...</value>\n  </data>\n  <data name=\"MenuChartEditSeriesGrouping.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>276, 22</value>\n  </data>\n  <data name=\"MenuChartEditSeriesGrouping.Text\" xml:space=\"preserve\">\n    <value>Редактировать группу серии</value>\n  </data>\n  <data name=\"MenuChartDeleteSeriesGrouping.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>276, 22</value>\n  </data>\n  <data name=\"MenuChartDeleteSeriesGrouping.Text\" xml:space=\"preserve\">\n    <value>Удалить группу серии</value>\n  </data>\n  <data name=\"toolStripMenuItem7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>273, 6</value>\n  </data>\n  <data name=\"MenuChartValueAxis.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>276, 22</value>\n  </data>\n  <data name=\"MenuChartValueAxis.Text\" xml:space=\"preserve\">\n    <value>Значение (ось Y)...</value>\n  </data>\n  <data name=\"MenuChartValueAxisTitle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>276, 22</value>\n  </data>\n  <data name=\"MenuChartValueAxisTitle.Text\" xml:space=\"preserve\">\n    <value>Заголовок значения (ось Y)...</value>\n  </data>\n  <data name=\"MenuChartValueAxisRightTitle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>276, 22</value>\n  </data>\n  <data name=\"MenuChartValueAxisRightTitle.Text\" xml:space=\"preserve\">\n    <value>Заголовок значения справа (ось Y)...</value>\n  </data>\n  <data name=\"toolStripMenuItem8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>273, 6</value>\n  </data>\n  <data name=\"MenuChartCopy.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>276, 22</value>\n  </data>\n  <data name=\"MenuChartCopy.Text\" xml:space=\"preserve\">\n    <value>Копировать</value>\n  </data>\n  <data name=\"MenuChartPaste.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>276, 22</value>\n  </data>\n  <data name=\"MenuChartPaste.Text\" xml:space=\"preserve\">\n    <value>Вставить</value>\n  </data>\n  <data name=\"MenuChartDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>276, 22</value>\n  </data>\n  <data name=\"MenuChartDelete.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"toolStripMenuItem9.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>273, 6</value>\n  </data>\n  <data name=\"MenuChartSelectAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>276, 22</value>\n  </data>\n  <data name=\"MenuChartSelectAll.Text\" xml:space=\"preserve\">\n    <value>Выбрать все</value>\n  </data>\n  <data name=\"ContextMenuChart.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>277, 436</value>\n  </data>\n  <data name=\"MenuMatrixProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>260, 22</value>\n  </data>\n  <data name=\"MenuMatrixProperties.Text\" xml:space=\"preserve\">\n    <value>Свойства...</value>\n  </data>\n  <data name=\"MenuMatrixMatrixProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>260, 22</value>\n  </data>\n  <data name=\"MenuMatrixMatrixProperties.Text\" xml:space=\"preserve\">\n    <value>Свойства матрицы...</value>\n  </data>\n  <data name=\"toolStripMenuItem10.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>257, 6</value>\n  </data>\n  <data name=\"MenuMatrixInsertColumnGroup.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>260, 22</value>\n  </data>\n  <data name=\"MenuMatrixInsertColumnGroup.Text\" xml:space=\"preserve\">\n    <value>Добавить группу по столбцу...</value>\n  </data>\n  <data name=\"MenuMatrixEditColumnGroup.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>260, 22</value>\n  </data>\n  <data name=\"MenuMatrixEditColumnGroup.Text\" xml:space=\"preserve\">\n    <value>Редактировать группу по столбцу</value>\n  </data>\n  <data name=\"MenuMatrixDeleteColumnGroup.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>260, 22</value>\n  </data>\n  <data name=\"MenuMatrixDeleteColumnGroup.Text\" xml:space=\"preserve\">\n    <value>Удалить группу по столбцу</value>\n  </data>\n  <data name=\"toolStripMenuItem11.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>257, 6</value>\n  </data>\n  <data name=\"MenuMatrixInsertRowGroup.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>260, 22</value>\n  </data>\n  <data name=\"MenuMatrixInsertRowGroup.Text\" xml:space=\"preserve\">\n    <value>Добавить группу по строке...</value>\n  </data>\n  <data name=\"MenuMatrixEditRowGroup.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>260, 22</value>\n  </data>\n  <data name=\"MenuMatrixEditRowGroup.Text\" xml:space=\"preserve\">\n    <value>Редактировать группу по строке</value>\n  </data>\n  <data name=\"MenuMatrixDeleteRowGroup.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>260, 22</value>\n  </data>\n  <data name=\"MenuMatrixDeleteRowGroup.Text\" xml:space=\"preserve\">\n    <value>Удалить группу по строке</value>\n  </data>\n  <data name=\"toolStripMenuItem12.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>257, 6</value>\n  </data>\n  <data name=\"MenuMatrixDeleteMatrix.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>260, 22</value>\n  </data>\n  <data name=\"MenuMatrixDeleteMatrix.Text\" xml:space=\"preserve\">\n    <value>Удалить матрицу</value>\n  </data>\n  <data name=\"toolStripMenuItem13.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>257, 6</value>\n  </data>\n  <data name=\"MenuMatrixCopy.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>260, 22</value>\n  </data>\n  <data name=\"MenuMatrixCopy.Text\" xml:space=\"preserve\">\n    <value>Копировать</value>\n  </data>\n  <data name=\"MenuMatrixPaste.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>260, 22</value>\n  </data>\n  <data name=\"MenuMatrixPaste.Text\" xml:space=\"preserve\">\n    <value>Вставить</value>\n  </data>\n  <data name=\"MenuMatrixDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>260, 22</value>\n  </data>\n  <data name=\"MenuMatrixDelete.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"toolStripMenuItem14.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>257, 6</value>\n  </data>\n  <data name=\"MenuMatrixSelectAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>260, 22</value>\n  </data>\n  <data name=\"MenuMatrixSelectAll.Text\" xml:space=\"preserve\">\n    <value>Выбрать все</value>\n  </data>\n  <data name=\"ContextMenuMatrix.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>261, 320</value>\n  </data>\n  <data name=\"MenuSubreportProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>174, 22</value>\n  </data>\n  <data name=\"MenuSubreportProperties.Text\" xml:space=\"preserve\">\n    <value>Свойства...</value>\n  </data>\n  <data name=\"MenuSubreportOpen.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>174, 22</value>\n  </data>\n  <data name=\"MenuSubreportOpen.Text\" xml:space=\"preserve\">\n    <value>Открыть подотчёт</value>\n  </data>\n  <data name=\"toolStripMenuItem15.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>171, 6</value>\n  </data>\n  <data name=\"MenuSubreportCopy.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>174, 22</value>\n  </data>\n  <data name=\"MenuSubreportCopy.Text\" xml:space=\"preserve\">\n    <value>Копировать</value>\n  </data>\n  <data name=\"MenuSubreportPaste.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>174, 22</value>\n  </data>\n  <data name=\"MenuSubreportPaste.Text\" xml:space=\"preserve\">\n    <value>Вставить</value>\n  </data>\n  <data name=\"MenuSubreportDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>174, 22</value>\n  </data>\n  <data name=\"MenuSubreportDelete.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"toolStripMenuItem16.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>171, 6</value>\n  </data>\n  <data name=\"MenuSubreportSelectAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>174, 22</value>\n  </data>\n  <data name=\"MenuSubreportSelectAll.Text\" xml:space=\"preserve\">\n    <value>Выбрать все</value>\n  </data>\n  <data name=\"ContextMenuSubreport.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>175, 148</value>\n  </data>\n  <data name=\"MenuGridProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuGridProperties.Text\" xml:space=\"preserve\">\n    <value>Свойства...</value>\n  </data>\n  <data name=\"MenuGridGridProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuGridGridProperties.Text\" xml:space=\"preserve\">\n    <value>Свойства сетки...</value>\n  </data>\n  <data name=\"MenuGridReplaceCellChart.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuGridReplaceCellChart.Text\" xml:space=\"preserve\">\n    <value>Диаграмму...</value>\n  </data>\n  <data name=\"MenuGridReplaceCellImage.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuGridReplaceCellImage.Text\" xml:space=\"preserve\">\n    <value>Изображение</value>\n  </data>\n  <data name=\"MenuGridReplaceCellList.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuGridReplaceCellList.Text\" xml:space=\"preserve\">\n    <value>Список</value>\n  </data>\n  <data name=\"MenuGridReplaceCellMatrix.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuGridReplaceCellMatrix.Text\" xml:space=\"preserve\">\n    <value>Матрицу...</value>\n  </data>\n  <data name=\"MenuGridReplaceCellRectangle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuGridReplaceCellRectangle.Text\" xml:space=\"preserve\">\n    <value>Прямоугольник</value>\n  </data>\n  <data name=\"MenuGridReplaceCellSubreport.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuGridReplaceCellSubreport.Text\" xml:space=\"preserve\">\n    <value>Подотчёт</value>\n  </data>\n  <data name=\"MenuGridReplaceCellTable.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuGridReplaceCellTable.Text\" xml:space=\"preserve\">\n    <value>Талбицу...</value>\n  </data>\n  <data name=\"MenuGridReplaceCellTextbox.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuGridReplaceCellTextbox.Text\" xml:space=\"preserve\">\n    <value>Текстовое поле</value>\n  </data>\n  <data name=\"MenuGridReplaceCell.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuGridReplaceCell.Text\" xml:space=\"preserve\">\n    <value>Заменить ячейку на</value>\n  </data>\n  <data name=\"toolStripMenuItem17.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>203, 6</value>\n  </data>\n  <data name=\"MenuGridInsertColumnBefore.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuGridInsertColumnBefore.Text\" xml:space=\"preserve\">\n    <value>Вставить столбец перед</value>\n  </data>\n  <data name=\"MenuGridInsertColumnAfter.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuGridInsertColumnAfter.Text\" xml:space=\"preserve\">\n    <value>Вставить столбец после</value>\n  </data>\n  <data name=\"toolStripMenuItem18.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>203, 6</value>\n  </data>\n  <data name=\"MenuGridInsertRowBefore.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuGridInsertRowBefore.Text\" xml:space=\"preserve\">\n    <value>Вставить строку перед</value>\n  </data>\n  <data name=\"MenuGridInsertRowAfter.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuGridInsertRowAfter.Text\" xml:space=\"preserve\">\n    <value>Вставить строку после</value>\n  </data>\n  <data name=\"toolStripMenuItem19.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>203, 6</value>\n  </data>\n  <data name=\"MenuGridDeleteColumn.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuGridDeleteColumn.Text\" xml:space=\"preserve\">\n    <value>Удалить столбец сетки</value>\n  </data>\n  <data name=\"MenuGridDeleteRow.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuGridDeleteRow.Text\" xml:space=\"preserve\">\n    <value>Удалить строку сетки</value>\n  </data>\n  <data name=\"MenuGridDeleteGrid.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuGridDeleteGrid.Text\" xml:space=\"preserve\">\n    <value>Удалить сетку</value>\n  </data>\n  <data name=\"toolStripMenuItem20.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>203, 6</value>\n  </data>\n  <data name=\"MenuGridCopy.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuGridCopy.Text\" xml:space=\"preserve\">\n    <value>Копировать</value>\n  </data>\n  <data name=\"MenuGridPaste.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuGridPaste.Text\" xml:space=\"preserve\">\n    <value>Вставить</value>\n  </data>\n  <data name=\"MenuGridDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuGridDelete.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"toolStripMenuItem21.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>203, 6</value>\n  </data>\n  <data name=\"MenuGridSelectAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuGridSelectAll.Text\" xml:space=\"preserve\">\n    <value>Выбрать все</value>\n  </data>\n  <data name=\"ContextMenuGrid.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>207, 342</value>\n  </data>\n  <data name=\"MenuTableProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuTableProperties.Text\" xml:space=\"preserve\">\n    <value>Свойства...</value>\n  </data>\n  <data name=\"MenuTableTableProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuTableTableProperties.Text\" xml:space=\"preserve\">\n    <value>Свойства таблицы...</value>\n  </data>\n  <data name=\"MenuTableReplaceCellChart.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuTableReplaceCellChart.Text\" xml:space=\"preserve\">\n    <value>Диаграмму...</value>\n  </data>\n  <data name=\"MenuTableReplaceCellImage.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuTableReplaceCellImage.Text\" xml:space=\"preserve\">\n    <value>Изображение</value>\n  </data>\n  <data name=\"MenuTableReplaceCellList.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuTableReplaceCellList.Text\" xml:space=\"preserve\">\n    <value>Список</value>\n  </data>\n  <data name=\"MenuTableReplaceCellMatrix.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuTableReplaceCellMatrix.Text\" xml:space=\"preserve\">\n    <value>Матрицу...</value>\n  </data>\n  <data name=\"MenuTableReplaceCellRectangle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuTableReplaceCellRectangle.Text\" xml:space=\"preserve\">\n    <value>Прямоугольник</value>\n  </data>\n  <data name=\"MenuTableReplaceCellSubreport.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuTableReplaceCellSubreport.Text\" xml:space=\"preserve\">\n    <value>Подотчёт</value>\n  </data>\n  <data name=\"MenuTableReplaceCellTable.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuTableReplaceCellTable.Text\" xml:space=\"preserve\">\n    <value>Таблицу...</value>\n  </data>\n  <data name=\"MenuTableReplaceCellTextbox.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"MenuTableReplaceCellTextbox.Text\" xml:space=\"preserve\">\n    <value>Текстовое поле</value>\n  </data>\n  <data name=\"MenuTableReplaceCell.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuTableReplaceCell.Text\" xml:space=\"preserve\">\n    <value>Заменить ячейку на</value>\n  </data>\n  <data name=\"toolStripMenuItem22.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>203, 6</value>\n  </data>\n  <data name=\"MenuTableInsertColumnBefore.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuTableInsertColumnBefore.Text\" xml:space=\"preserve\">\n    <value>Вставить столбец перед</value>\n  </data>\n  <data name=\"MenuTableInsertColumnAfter.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuTableInsertColumnAfter.Text\" xml:space=\"preserve\">\n    <value>Вставить столбец после</value>\n  </data>\n  <data name=\"toolStripMenuItem23.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>203, 6</value>\n  </data>\n  <data name=\"MenuTableInsertRowBefore.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuTableInsertRowBefore.Text\" xml:space=\"preserve\">\n    <value>Вставить строку перед</value>\n  </data>\n  <data name=\"MenuTableInsertRowAfter.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuTableInsertRowAfter.Text\" xml:space=\"preserve\">\n    <value>Вставить строку после</value>\n  </data>\n  <data name=\"toolStripMenuItem24.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>203, 6</value>\n  </data>\n  <data name=\"MenuTableInsertGroup.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuTableInsertGroup.Text\" xml:space=\"preserve\">\n    <value>Добавить группу...</value>\n  </data>\n  <data name=\"MenuTableEditGroup.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuTableEditGroup.Text\" xml:space=\"preserve\">\n    <value>Редактировать группу</value>\n  </data>\n  <data name=\"MenuTableDeleteGroup.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuTableDeleteGroup.Text\" xml:space=\"preserve\">\n    <value>Удалить группу</value>\n  </data>\n  <data name=\"toolStripMenuItem25.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>203, 6</value>\n  </data>\n  <data name=\"MenuTableDeleteColumn.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuTableDeleteColumn.Text\" xml:space=\"preserve\">\n    <value>Удалить столбец</value>\n  </data>\n  <data name=\"MenuTableDeleteRow.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuTableDeleteRow.Text\" xml:space=\"preserve\">\n    <value>Удалить строку</value>\n  </data>\n  <data name=\"MenuTableDeleteTable.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuTableDeleteTable.Text\" xml:space=\"preserve\">\n    <value>Удалить таблицу</value>\n  </data>\n  <data name=\"toolStripMenuItem26.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>203, 6</value>\n  </data>\n  <data name=\"MenuTableCopy.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuTableCopy.Text\" xml:space=\"preserve\">\n    <value>Копировать</value>\n  </data>\n  <data name=\"MenuTablePaste.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuTablePaste.Text\" xml:space=\"preserve\">\n    <value>Вставить</value>\n  </data>\n  <data name=\"MenuTableDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuTableDelete.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"toolStripMenuItem27.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>203, 6</value>\n  </data>\n  <data name=\"MenuTableSelectAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>206, 22</value>\n  </data>\n  <data name=\"MenuTableSelectAll.Text\" xml:space=\"preserve\">\n    <value>Выбрать все</value>\n  </data>\n  <data name=\"ContextMenuTable.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>207, 414</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DesignEditLines.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Drawing.Drawing2D;\nusing System.Drawing.Imaging;\nusing System.Windows.Forms;\nusing System.Globalization;\nusing System.Net;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\n\t/// <summary>\n\t/// Control for providing a designer image of RDL.   Works directly off the RDL XML.\n\t/// </summary>\n    public class DesignEditLines : UserControl, System.ComponentModel.ISupportInitialize\n    {\n        System.Windows.Forms.RichTextBox editor=null;\n        int saveTbEditorLines = -1;\n        int _LineHeight = -1;\n\n        public DesignEditLines()\n            : base()\n        {\n            // force to double buffering for smoother drawing\n            this.DoubleBuffered = true;\n\n            this.Paint += new PaintEventHandler(DesignEditLinesPaint);\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        internal System.Windows.Forms.RichTextBox Editor\n        {\n            get { return editor; }\n            set \n            { \n                editor = value;\n                editor.TextChanged += new System.EventHandler(editor_TextChanged);\n                editor.Resize += new System.EventHandler(editor_Resize);\n                editor.VScroll += new System.EventHandler(editor_VScroll);\n            }\n        }\n\n\t\tprivate void DesignEditLinesPaint(object sender, System.Windows.Forms.PaintEventArgs e)\n        {\n            Lines_Draw(e.Graphics);\n        } \n        \n        private void Lines_Draw(Graphics g)\n        {\n            if (!this.Visible || editor == null)\n                return;\n            try\n            {  // its possible that there are less than 2 lines; so trap the error\n                if (_LineHeight <= 0)\n                    _LineHeight = editor.GetPositionFromCharIndex(editor.GetFirstCharIndexFromLine(2)).Y -\n                          editor.GetPositionFromCharIndex(editor.GetFirstCharIndexFromLine(1)).Y;\n            }\n            catch { return; }\n            if (_LineHeight <= 0)\n                return;\n\n            // Get the first line index and location\n            int first_index;\n            int first_line;\n            int first_line_y;\n            first_index = editor.GetCharIndexFromPosition(new\n                     Point(0, (int)(g.VisibleClipBounds.Y + _LineHeight / 3)));\n            first_line = editor.GetLineFromCharIndex(first_index);\n            first_line_y = editor.GetPositionFromCharIndex(first_index).Y;\n\n            //  Draw the lines\n            SolidBrush sb = new SolidBrush(Control.DefaultBackColor);\n            g.FillRectangle(sb, g.VisibleClipBounds);\n            sb.Dispose();\n\n            int i = first_line;\n            float y = first_line_y + _LineHeight * (i - first_line - 1);\n            int lCount = this.saveTbEditorLines < 0? editor.Lines.Length:\n                                        this.saveTbEditorLines;   // calc lines if not initialized\n            Font eFont = editor.Font;\n            float maxHeight = g.VisibleClipBounds.Y + g.VisibleClipBounds.Height;\n            while (y < maxHeight)\n            {\n                string l = i.ToString();\n                g.DrawString(l, editor.Font, Brushes.DarkBlue,\n                    this.Width - (g.MeasureString(l, eFont).Width + 4), y);\n                i += 1;\n                if (i > lCount)\n                    break;\n                y = first_line_y + _LineHeight * (i - first_line - 1);\n            }\n        }\n\n        private void editor_Resize(object sender, EventArgs e)\n        {\n            using (Graphics g = this.CreateGraphics())\n            {\n                Lines_Draw(g);\n            }\n        }\n\n        private void editor_VScroll(object sender, EventArgs e)\n        {\n            using (Graphics g = this.CreateGraphics())\n            {\n                Lines_Draw(g);\n            }\n        }\n\n\t\tprivate void editor_TextChanged(object sender, System.EventArgs e)\n        {\n            if (editor == null)\n                return;\n\n            // when # of lines change we may need to repaint the line #s\n            int eLines = editor.Lines.Length;\n            if (saveTbEditorLines != eLines)\n            {\n                saveTbEditorLines = eLines;\n                using (Graphics g = this.CreateGraphics())\n                {\n                    Lines_Draw(g);\n                }\n            }\n        }\n\n        #region ISupportInitialize Members\n\n        void System.ComponentModel.ISupportInitialize.BeginInit()\n        {\n            return;\n        }\n\n        void System.ComponentModel.ISupportInitialize.EndInit()\n        {\n            return;\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "RdlDesign/DesignEditLines.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<root>\n\t<xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n\t\t<xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n\t\t\t<xsd:complexType>\n\t\t\t\t<xsd:choice maxOccurs=\"unbounded\">\n\t\t\t\t\t<xsd:element name=\"data\">\n\t\t\t\t\t\t<xsd:complexType>\n\t\t\t\t\t\t\t<xsd:sequence>\n\t\t\t\t\t\t\t\t<xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t\t<xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n\t\t\t\t\t\t\t</xsd:sequence>\n\t\t\t\t\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" />\n\t\t\t\t\t\t\t<xsd:attribute name=\"type\" type=\"xsd:string\" />\n\t\t\t\t\t\t\t<xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n\t\t\t\t\t\t</xsd:complexType>\n\t\t\t\t\t</xsd:element>\n\t\t\t\t\t<xsd:element name=\"resheader\">\n\t\t\t\t\t\t<xsd:complexType>\n\t\t\t\t\t\t\t<xsd:sequence>\n\t\t\t\t\t\t\t\t<xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t</xsd:sequence>\n\t\t\t\t\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n\t\t\t\t\t\t</xsd:complexType>\n\t\t\t\t\t</xsd:element>\n\t\t\t\t</xsd:choice>\n\t\t\t</xsd:complexType>\n\t\t</xsd:element>\n\t</xsd:schema>\n\t<resheader name=\"ResMimeType\">\n\t\t<value>text/microsoft-resx</value>\n\t</resheader>\n\t<resheader name=\"Version\">\n\t\t<value>1.0.0.0</value>\n\t</resheader>\n\t<resheader name=\"Reader\">\n\t\t<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n\t</resheader>\n\t<resheader name=\"Writer\">\n\t\t<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n\t</resheader>\n</root>\n"
  },
  {
    "path": "RdlDesign/DesignRuler.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Drawing.Drawing2D;\nusing System.Drawing.Imaging;\nusing System.Windows.Forms;\nusing System.Globalization;\nusing System.Net;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\n\t/// <summary>\n\t/// Control for providing a designer image of RDL.   Works directly off the RDL XML.\n\t/// </summary>\n    internal class DesignRuler : UserControl, System.ComponentModel.ISupportInitialize\n    {\n        DesignCtl _Design = null;\n        bool _Vertical = false;\n        int _Offset = 0;            // offset to start with (in pixels)\n        bool _IsMetric;\n        int _Intervals;\n\n        // Background colors for gradient\n        static readonly Color BEGINCOLOR = Color.White;\n        static readonly Color ENDCOLOR = Color.FromArgb(30, Color.LightSkyBlue);\n        static readonly Color GAPCOLOR = Color.FromArgb(30, Color.LightSkyBlue);\n\n        internal DesignRuler()\n            : base()\n        {\n            // force to double buffering for smoother drawing\n            this.DoubleBuffered = true;\n\n            //editor = e;\n            //editor.TextChanged += new System.EventHandler(editor_TextChanged);\n            //editor.Resize += new System.EventHandler(editor_Resize);\n            //editor.VScroll += new System.EventHandler(editor_VScroll);\n\n            //RegionInfo rinfo = new RegionInfo(CultureInfo.CurrentCulture.Name);\n            //_IsMetric = rinfo.IsMetric;\n            //_Intervals = _IsMetric ? 4 : 8;\n\n            this.Paint += new PaintEventHandler(DesignRulerPaint);\n        }\n\n         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        internal DesignCtl Design\n        {\n            get { return _Design; }\n            set \n            { \n                _Design = value;\n                if (_Design == null)\n                    return;\n                if (_Vertical)\n                {\n                    _Design.VerticalScrollChanged += new System.EventHandler(ScrollChanged);\n                    // need to know when the various heights change as well\n                    _Design.HeightChanged += new DesignCtl.HeightEventHandler(HeightChanged);\n                }\n                else\n                    _Design.HorizontalScrollChanged += new System.EventHandler(ScrollChanged);\n            }\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public bool Vertical\n        {\n            get { return _Vertical; }\n            set { _Vertical = value; }\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public int Offset\n        {\n            get { return _Offset; }\n            set { _Offset = value; }\n        }\n\n        private int ScrollPosition\n        {\n            get \n            {\n                if (_Design == null)\n                    return 0;\n                return _Vertical ? _Design.VerticalScrollPosition : _Design.HorizontalScrollPosition; \n            }\n        }\n        \n\t\tprivate void DesignRulerPaint(object sender, System.Windows.Forms.PaintEventArgs e)\n        {\n\n            _IsMetric = RdlDesign.RdlDesigner.MeasureUnits == \"cm\" ? true : false;\n            _Intervals = _IsMetric ? 4 : 8;\n            if (_Vertical)\n                Ruler_DrawVert(e.Graphics);\n            else\n                Ruler_DrawHorz(e.Graphics);\n        }\n\n        private void HeightChanged(object sender, HeightEventArgs e)\n        {\n            if (e.Node != null)\n            {\n                // Only need to invalidate when the Body, PageHeader or PageFooter change height\n                XmlNode p = e.Node.ParentNode;\n                if (p != null &&\n                    (p.Name == \"Body\" || p.Name == \"PageHeader\" || p.Name == \"PageFooter\"))\n                {\n                    this.Invalidate();\n                }\n            }\n        }\n\n        private void ScrollChanged(object sender, System.EventArgs e)\n        {\n            this.Invalidate();\n            _Design.Invalidate();\n        }\n        \n        private void Ruler_DrawHorz(Graphics g)\n        {\n            float xoff, yoff, xinc;\n\n            StringFormat drawFormat=null;\n            Font f = null;\n            LinearGradientBrush lgb=null;\n            try\n            {\n                drawFormat = new StringFormat();\n                drawFormat.FormatFlags |= StringFormatFlags.NoWrap;\n\n                drawFormat.Alignment = StringAlignment.Near;\n                float mod;\n                yoff = this.Height/2 -2;\n                mod = g.DpiX;\n                if (_IsMetric)\n                    mod = mod / 2.54f;\n                mod *= _Design.SCALEX;\n                xinc = mod / (_Intervals * _Design.SCALEX);\n                xinc *= _Design.SCALEX;\n\n                float scroll = ScrollPosition;\n                if (scroll == 0)\n                    xoff = 0;\n                else\n                    xoff = scroll + (xinc - scroll % xinc);\n                \n                RectangleF rf;\n                if (Offset > 0) // Fill in the left gap; if any\n                {\n                    rf = new RectangleF(0, 0, Offset, this.Height);\n                    if (rf.IntersectsWith(g.ClipBounds))\n                    {\n                        lgb = new LinearGradientBrush(rf, BEGINCOLOR, ENDCOLOR, LinearGradientMode.ForwardDiagonal);\n                        g.FillRectangle(lgb, rf);\n                        lgb.Dispose();\n                        lgb = null;\n//                        g.FillRectangle(new SolidBrush(GAPCOLOR), rf);\n                    }\n                }\n\n                // Fill in the background for the entire ruler\n                rf = new RectangleF(this.Offset, 0, this.Width, this.Height);\n                if (rf.IntersectsWith(g.ClipBounds))\n                {\n                    lgb = new LinearGradientBrush(rf, BEGINCOLOR, ENDCOLOR, LinearGradientMode.Vertical);\n                    g.FillRectangle(lgb, rf);\n                    lgb.Dispose();\n                    lgb = null;\n                }\n                else      // nothing to draw\n                    return;\n\n                f = new Font(\"Arial\", 8, FontStyle.Regular);\n\n                // Loop thru and draw the ruler\n                while (xoff - scroll < this.Width-Offset)\n                {\n            //        if (xoff % mod < .001f )\n                    if (xoff % mod < .1f || Math.Abs((xoff % mod) - mod) < .1f)\n                    {\n                        if (xoff != 0)  // Don't draw the zero\n                        {\n                            string l = string.Format(\"{0:0}\", xoff / mod);\n                            SizeF sz = g.MeasureString(l, f);\n\n                            g.DrawString(l, f, Brushes.Black,\n                                Offset + xoff - (sz.Width / 2) - scroll, yoff - (sz.Height / 2), drawFormat);\n                        }\n                        g.DrawLine(Pens.Black, Offset + xoff - scroll, this.Height, Offset + xoff - scroll, this.Height - 2);\n                    }\n                    else\n                    {\n                        g.DrawLine(Pens.Black, Offset + xoff - scroll, yoff, Offset + xoff - scroll, yoff + 2);\n                    }\n                    xoff += xinc;\n                }\n            }\n            finally\n            {\n                if (lgb != null)\n                    lgb.Dispose();\n                if (drawFormat != null)\n                    drawFormat.Dispose();\n                if (f != null)\n                    f.Dispose();\n            }\n        }\n\n        private void Ruler_DrawVert(Graphics g)\n        {\n            StringFormat strFormat = null;\n            Font fontOutput = null;\n            SolidBrush sb = null;           // brush for non-ruler portions of ruler\n            SolidBrush bb = null;           // brush for drawing the areas next to band separator\n            float SectionHeigth = 0f;\n\n            g.ScaleTransform(1f, 1f);\n            g.PageUnit = GraphicsUnit.Point;\n\n            try\n            {\n                // create some drawing resources\n                strFormat = new StringFormat();\n                strFormat.FormatFlags |= StringFormatFlags.NoWrap;\n                strFormat.Alignment = StringAlignment.Near;\n                fontOutput = new Font(\"Arial\", 8, FontStyle.Regular);\n                sb = new SolidBrush(GAPCOLOR);\n                bb = new SolidBrush(Design.SepColor);\n                // Go thru the regions\n\n                float sp = Design.PointsY(this.ScrollPosition) * _Design.SCALEY;\n\n\n                // 1) Offset\n                RectangleF rf;\n                float off = 0;\n                float offset = Design.PointsY(this.Offset);\n                float width = Design.PointsX(this.Width);\n                if (this.Offset > 0)\n                {\n                    rf = new RectangleF(0, 0, width, offset); // scrolling doesn't affect offset\n                    if (rf.IntersectsWith(g.ClipBounds))\n                    {\n                        LinearGradientBrush lgb = new LinearGradientBrush(rf, BEGINCOLOR, ENDCOLOR, LinearGradientMode.ForwardDiagonal);\n                        g.FillRectangle(lgb, rf);\n                        lgb.Dispose();\n                        lgb = null;\n                    }\n                    off = offset;\n                }\n\n\n                // 2) PageHeader\n                if (Design.PageHeaderHeight > 0)\n                {\n                    SectionHeigth = Design.PageHeaderHeight * _Design.SCALEY;\n                    Ruler_DrawVertPart(g, fontOutput, strFormat, off, SectionHeigth);\n                    off += SectionHeigth;\n                }\n\n                // 3) PageHeader separator\n                SectionHeigth = Design.SepHeight * _Design.SCALEY;\n                rf = new RectangleF(0, off - sp, width, SectionHeigth);\n                if (rf.IntersectsWith(g.ClipBounds))\n                    g.FillRectangle(bb, rf);\n                off += SectionHeigth;\n\n                // 4) Body\n                if (Design.BodyHeight > 0)\n                {\n                    SectionHeigth = Design.BodyHeight * _Design.SCALEY;\n                    Ruler_DrawVertPart(g, fontOutput, strFormat, off, SectionHeigth);\n                    off += SectionHeigth;\n                }\n\n                // 5) Body separator\n                SectionHeigth = Design.SepHeight * _Design.SCALEY;\n                rf = new RectangleF(0, off - sp, width, SectionHeigth);\n                if (rf.IntersectsWith(g.ClipBounds))\n                    g.FillRectangle(bb, rf);\n                off += SectionHeigth;\n\n\n                // 6) PageFooter\n                if (Design.PageFooterHeight > 0)\n                {\n                    SectionHeigth = Design.PageFooterHeight * _Design.SCALEY;\n                    Ruler_DrawVertPart(g, fontOutput, strFormat, off, SectionHeigth);\n                    off += SectionHeigth;\n                }\n\n                // 7) PageFooter separator\n                SectionHeigth = Design.SepHeight * _Design.SCALEY;\n                rf = new RectangleF(0, off - sp, width, SectionHeigth);\n                if (rf.IntersectsWith(g.ClipBounds))\n                    g.FillRectangle(bb, rf);\n                off += SectionHeigth;\n\n                // 8) The rest to end\n                rf = new RectangleF(0, off - sp, width, Design.PointsY(this.Height) - (off - sp));\n                if (rf.IntersectsWith(g.ClipBounds))\n                    g.FillRectangle(sb, rf);\n            }\n            finally\n            {\n                if (strFormat != null)\n                    strFormat.Dispose();\n                if (fontOutput != null)\n                    fontOutput.Dispose();\n                if (sb != null)\n                    sb.Dispose();\n                if (bb != null)\n                    bb.Dispose();\n            }\n        }\n        private void Ruler_DrawVertPart(Graphics g, Font f, StringFormat df, float offset, float height)\n        {\n            float xoff, yoff, yinc, sinc;\n            float mod;\n\n            xoff = Design.PointsX(this.Width / 2 - 2);\n            mod = Design.PointsY(g.DpiY);\n            if (_IsMetric)\n                mod = Design.PointsY(g.DpiY / 2.54f);\n            mod *= _Design.SCALEY;\n\n            yinc = mod / (_Intervals * _Design.SCALEY);\n            yinc *= _Design.SCALEY;\n            \n            float scroll = Design.PointsY(ScrollPosition)*_Design.SCALEY;\n            sinc = yoff = 0;\n            if (scroll > offset)\n                sinc += (yinc - scroll % yinc);\n\n            // Fill in the background for the entire ruler\n            RectangleF rf = new RectangleF(0, yoff + offset - scroll, this.Width, height);\n        //    RectangleF rf = new RectangleF(0, offset - scroll, Design.PointsX(this.Width), height);\n            if (rf.IntersectsWith(g.ClipBounds))\n            {\n                LinearGradientBrush lgb = new LinearGradientBrush(rf, BEGINCOLOR, ENDCOLOR, LinearGradientMode.Horizontal);\n                g.FillRectangle(lgb, rf);\n                lgb.Dispose();\n            }\n            else\n                return;         // nothing to draw\n\n            // Loop thru and draw the ruler\n            float width = Design.PointsX(this.Width);\n            while (sinc + offset + yoff - scroll < (offset + height) - scroll &&\n                sinc + offset + yoff - scroll < g.ClipBounds.Bottom)\n            {\n                if (sinc + offset + yoff - scroll < g.ClipBounds.Top - 20)\n                {   // we don't need to do anything here \n                }\n                else if (yoff % mod < .1f || Math.Abs((yoff % mod) - mod) < .1f)\n                {\n                    if (yoff != 0)      // Don't draw the 0\n                    {\n                        string l = string.Format(\"{0:0}\", yoff / mod);\n                        SizeF sz = g.MeasureString(l, f);\n\n                        g.DrawString(l, f, Brushes.Black,\n                            xoff - (sz.Width / 2), sinc+offset + yoff - (sz.Height / 2) - scroll, df);\n                    }\n                    g.DrawLine(Pens.Black, width, sinc + offset + yoff - scroll, width - 2, sinc+offset + yoff - scroll);\n                }\n                else\n                {\n                    g.DrawLine(Pens.Black, xoff, sinc + offset + yoff - scroll, xoff + 2, sinc+offset + yoff - scroll);\n                }\n                yoff += yinc;\n            }\n        }\n\n        #region ISupportInitialize Members\n\n        void System.ComponentModel.ISupportInitialize.BeginInit()\n        {\n            return;\n        }\n\n        void System.ComponentModel.ISupportInitialize.EndInit()\n        {\n            return;\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "RdlDesign/DesignRuler.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<root>\n\t<xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n\t\t<xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n\t\t\t<xsd:complexType>\n\t\t\t\t<xsd:choice maxOccurs=\"unbounded\">\n\t\t\t\t\t<xsd:element name=\"data\">\n\t\t\t\t\t\t<xsd:complexType>\n\t\t\t\t\t\t\t<xsd:sequence>\n\t\t\t\t\t\t\t\t<xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t\t<xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n\t\t\t\t\t\t\t</xsd:sequence>\n\t\t\t\t\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" />\n\t\t\t\t\t\t\t<xsd:attribute name=\"type\" type=\"xsd:string\" />\n\t\t\t\t\t\t\t<xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n\t\t\t\t\t\t</xsd:complexType>\n\t\t\t\t\t</xsd:element>\n\t\t\t\t\t<xsd:element name=\"resheader\">\n\t\t\t\t\t\t<xsd:complexType>\n\t\t\t\t\t\t\t<xsd:sequence>\n\t\t\t\t\t\t\t\t<xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t</xsd:sequence>\n\t\t\t\t\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n\t\t\t\t\t\t</xsd:complexType>\n\t\t\t\t\t</xsd:element>\n\t\t\t\t</xsd:choice>\n\t\t\t</xsd:complexType>\n\t\t</xsd:element>\n\t</xsd:schema>\n\t<resheader name=\"ResMimeType\">\n\t\t<value>text/microsoft-resx</value>\n\t</resheader>\n\t<resheader name=\"Version\">\n\t\t<value>1.0.0.0</value>\n\t</resheader>\n\t<resheader name=\"Reader\">\n\t\t<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n\t</resheader>\n\t<resheader name=\"Writer\">\n\t\t<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n\t</resheader>\n</root>\n"
  },
  {
    "path": "RdlDesign/DesignXmlDraw.cs",
    "content": "using Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlDesign.Resources;\nusing Majorsilence.Reporting.Rdl.Utility;\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.Drawing.Drawing2D;\nusing System.Drawing.Imaging;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.ComponentModel;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\n\t/// <summary>\n\t/// Control for providing a designer image of RDL.   Works directly off the RDL XML.\n\t/// </summary>\n\tpublic class DesignXmlDraw: UserControl\n\t{\n\t\tstatic internal readonly float POINTSIZED = 72.27f;\n\t\tstatic internal readonly decimal POINTSIZEM = 72.27m;\n        readonly Color BANDBORDERCOLOR = Color.DimGray; //Josh: added for Band Border\n        readonly BorderStyleEnum BANDBORDERSTYLE = BorderStyleEnum.Solid; //Josh: Band Border Style\n        const float BANDBORDERWIDTH = 1f; //Josh: Band border width\n        readonly Color AREABACKCOLOR = Color.LightGray; //Josh: added for area background color (behind page)\n\t\treadonly Color OUTWORKAREACOLOR = Color.Azure; //out work area background color (on page, but in margin)\n\t\treadonly Color OUTITEMCOLOR = Color.Salmon; //color of out work area parts of item \n\n\t\tconst float RADIUS = 2.5f;\n        readonly Color BANDCOLOR = Color.LightGray;\n\t\tconst int BANDHEIGHT = 12;              // height of band (e.g. body, pageheader, pagefooter) in pts\n\t\tconst float LEFTGAP = 0f; // keep a gap on the left size of the screen\n        // Various page measurements that we keep\n        public float ReportVisualSize;\n        public float ReportVisualSizeBase;\n        // rWidth is now ReportVisualSizeBase i.e. the report real w size\n        public float pHeight, pWidth;\n\t\tpublic float lMargin, rMargin, tMargin, bMargin;\n\t\tXmlNode bodyNode;\n\t\tXmlNode phNode;\n\t\tXmlNode pfNode;\n\n\t\tprivate XmlDocument rDoc;\t\t\t// the reporting XML document\n        private List<XmlNode> _SelectedReportItems = new List<XmlNode>();\n\t\tprivate ReportNames _ReportNames;\t// holds the names of the report items\n\t\tfloat DpiX;\n\t\tfloat DpiY;\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tpublic string Folder { get; set; }\n\n\t\t// During drawing these are set\n\t\tGraphics g;\n\t\tfloat _vScroll;\n\t\tfloat _hScroll;\n\t\tRectangleF _clip;\t\t\t\t\n\n\t\t// During hit testing\n\t\tPointF _HitPoint;\n\t\tRectangleF _HitRect;\t\n\n\t\t// Durning GetRectangle \n\t\tXmlNode _RectNode;\n\t\tRectangleF _GetRect;\n\n        bool _ShowReportItemOutline=false;\n\n\n\t\t// For Scaling and AlignMent grid display\n        public float SCALAX = 1;\n        public float SCALAY = 1;\n        public bool EnableDrawGriglia = false;\n        public Size SizeGridPt = new Size(4, 4);\n        public Size SizeGridTwips = new Size(8, 8);\n\n        internal DesignXmlDraw():base()\n\t\t{\n            this.DoubleBuffered = true;\n\t\t\t// Get our graphics DPI\t\t\t\t\t   \n\t\t\tGraphics ga = null;\t\t\t\t\n\t\t\ttry\n\t\t\t{\n\t\t\t\tga = this.CreateGraphics(); \n\t\t\t\tDpiX = ga.DpiX;\n\t\t\t\tDpiY = ga.DpiY;\n\t\t\t}\n\t\t\tcatch\n\t\t\t{\n\t\t\t\tDpiX = DpiY = 96;\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (ga != null)\n\t\t\t\t\tga.Dispose();\n\t\t\t}\n\t\t\t\n\t\t\t// force to double buffering for smoother drawing\n\t\t\tthis.SetStyle(ControlStyles.DoubleBuffer | \n\t\t\t\tControlStyles.UserPaint | \n\t\t\t\tControlStyles.AllPaintingInWmPaint,\n\t\t\t\ttrue);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Need to override otherwise don't get key events for up/down/left/right\n\t\t/// </summary>\n\t\t/// <param name=\"keyData\"></param>\n\t\t/// <returns></returns>\n\t\toverride protected bool IsInputKey(Keys keyData)\n\t\t{\n            if (keyData == Keys.Escape)\n                return false;\n\t\t\treturn true;\n\t\t}\n\n        internal Color SepColor\n        {\n            get { return BANDCOLOR; }\n        }\n\n        internal float SepHeight\n        {\n            get { return BANDHEIGHT; }\n        }\n\n        internal float PageHeaderHeight\n        {\n            get \n            {\n                if (rDoc == null)\n                    return 0;\n                XmlNode r = rDoc.LastChild;\n                XmlNode ph = this.GetNamedChildNode(r, \"PageHeader\");\n                if (ph == null)\n                    return 0;\n                XmlNode h = this.GetNamedChildNode(ph, \"Height\");\n                if (h == null)\n                    return 0;\n                float height = GetSize(h.InnerText);\n                return height;\n            }\n        }\n\n        internal float PageFooterHeight\n        {\n            get\n            {\n                if (rDoc == null)\n                    return 0;\n                XmlNode r = rDoc.LastChild;\n                XmlNode ph = this.GetNamedChildNode(r, \"PageFooter\");\n                if (ph == null)\n                    return 0;\n                XmlNode h = this.GetNamedChildNode(ph, \"Height\");\n                if (h == null)\n                    return 0;\n                float height = GetSize(h.InnerText);\n                return height;\n            }\n        }\n\n        internal float BodyHeight\n        {\n            get\n            {\n                if (rDoc == null)\n                    return 0;\n                XmlNode r = rDoc.LastChild;\n                XmlNode ph = this.GetNamedChildNode(r, \"Body\");\n                if (ph == null)\n                    return 0;\n                XmlNode h = this.GetNamedChildNode(ph, \"Height\");\n                if (h == null)\n                    return 0;\n                float height = GetSize(h.InnerText);\n                return height;\n            }\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        internal bool ShowReportItemOutline\n        {\n            get { return _ShowReportItemOutline; }\n            set \n            {\n                if (value != _ShowReportItemOutline)\n                    this.Invalidate();\n\n                _ShowReportItemOutline = value; \n            }\n        }\n\n         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tinternal ReportNames ReportNames\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_ReportNames == null && ReportDocument != null)\n\t\t\t\t\t_ReportNames = new ReportNames(rDoc);\t// rebuild report names on demand\n\t\t\t\t\n\t\t\t\treturn _ReportNames;\n\t\t\t}\n\t\t\tset {_ReportNames = value;}\n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tinternal XmlDocument ReportDocument\n\t\t{\n\t\t\tget {return rDoc;}\n\t\t\tset \n\t\t\t{ \n\t\t\t\trDoc = value;\n\t\t\t\tif (rDoc != null)\n\t\t\t\t{\n\t\t\t\t\tReportNames = null;\t\t// this needs to get rebuilt\n\t\t\t\t\tProcessReport(rDoc.LastChild);\n\t\t\t\t\tthis.ClearSelected();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis._SelectedReportItems.Clear();\n\t\t\t\t\tReportNames = null;\n\t\t\t\t\tthis.ClearSelected();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinternal XmlNode Body\n\t\t{\n\t\t\tget { return bodyNode; }\n\t\t}\n\n\t\tinternal RectangleF GetRectangle(XmlNode xNode)\n\t\t{\n\t\t\t_RectNode = xNode;\t\t\t// this is the rectangle we're trying to find;\n\n\t\t\tfloat yLoc=0;\n\t\t\t_GetRect = RectangleF.Empty;\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\tyLoc += GetRectReportPrimaryRegions(phNode, LEFTGAP, yLoc);\n\t\t\t\tyLoc += GetRectReportPrimaryRegions(bodyNode, LEFTGAP, yLoc);\n\t\t\t\tyLoc += GetRectReportPrimaryRegions(pfNode, LEFTGAP, yLoc);\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\t// this is the normal exit; we throw exception when node is found\n\t\t\t\tif (e.Message == \"found it!\")\n\t\t\t\t\treturn _GetRect;\n\t\t\t}\n\t\t\treturn RectangleF.Empty;\n\t\t}\n\n\t\tprivate float GetRectReportPrimaryRegions(XmlNode xNode, float xLoc, float yLoc)\n\t\t{\n\t\t\tif (xNode == null)\n\t\t\t\treturn yLoc;\n\n\t\t\tXmlNode items=null;\n\t\t\tfloat height=0;\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Height\":\n\t\t\t\t\t\theight = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ReportItems\":\n\t\t\t\t\t\titems = xNodeLoop;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tRectangleF b = new RectangleF(xLoc, yLoc, int.MaxValue, height);\n\t\t\t\n\t\t\tGetRectReportItems(items, b);\t\t\t// now draw the report items\n\n\t\t\treturn height+BANDHEIGHT;\n\t\t}\n\n\t\tprivate void GetRectReportItems(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tif (xNode == null)\n\t\t\t\treturn;\n\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tRectangleF rir=RectangleF.Empty;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Textbox\":\n\t\t\t\t\tcase \"Image\":\n\t\t\t\t\tcase \"Subreport\":\n\t\t\t\t\tcase \"Chart\":\n\t\t\t\t\tcase \"Line\":\n                    case \"CustomReportItem\":\n\t\t\t\t\t\trir = GetRectRI(xNodeLoop, r);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Table\":\n                    case \"fyi:Grid\":\n\t\t\t\t\t\trir = GetRectTable(xNodeLoop, r);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Rectangle\":\n\t\t\t\t\tcase \"List\":\n\t\t\t\t\t\trir = GetRectListRectangle(xNodeLoop, r);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Matrix\":\n\t\t\t\t\t\trir = GetRectMatrix(xNodeLoop, r);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (xNodeLoop == _RectNode)\n\t\t\t\t{\n\t\t\t\t\t_GetRect = rir;\n\t\t\t\t\tthrow new RdlException(\"found it!\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprivate RectangleF GetRectRI(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tRectangleF ir = GetReportItemRect(xNode, r);\n\t\t\treturn ir;\n\t\t}\n\n\t\tprivate RectangleF GetRectListRectangle(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tRectangleF listR = GetReportItemRect(xNode, r);\n\n\t\t\tXmlNode items = this.GetNamedChildNode(xNode, \"ReportItems\");\n\n\t\t\tif (items != null)\n\t\t\t\tGetRectReportItems(items, listR);\n\n\t\t\treturn listR;\n\t\t}\n\n\t\tprivate RectangleF GetRectMatrix(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tRectangleF mr = GetReportItemRect(xNode, r);\t\t// get the matrix rectangle\n\t\t\treturn mr;\n\t\t}\n\n\n\n\n\n\n\t\tprivate RectangleF GetRectTable(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tRectangleF tr = GetReportItemRect(xNode, r);\t\t// get the table rectangle\n\n\t\t\t// For Table width is really defined by the table columns\n\t\t\tfloat[] colWidths;\n\t\t\tcolWidths = GetTableColumnWidths(GetNamedChildNode(xNode, \"TableColumns\"));\n\t\t\t// calc the total width\n\t\t\tfloat w=0;\n\t\t\tforeach (float cw in colWidths)\n\t\t\t\tw += cw;\n\t\t\ttr.Width = w;\n\n\t\t\t// For Table height is really defined the sum of the RowHeights\n\t\t\tList<XmlNode> trs = GetTableRows(xNode);\n\t\t\ttr.Height = GetTableRowsHeight(trs);\n\n\t\t\t// Loop thru the TableRows and the columns in each of them to get at the\n\t\t\t//  individual cell\n\t\t\tfloat yPos = tr.Y;\n\t\t\tforeach (XmlNode trow in trs)\n\t\t\t{\n\t\t\t\tXmlNode tcells=GetNamedChildNode(trow, \"TableCells\");\n\n\t\t\t\tfloat h = GetSize(GetNamedChildNode(trow, \"Height\").InnerText);\n\n\t\t\t\tfloat xPos = tr.X;\n\t\t\t\tint col=0;\n\t\t\t\tforeach (XmlNode tcell in tcells)\n\t\t\t\t{\n\t\t\t\t\tif (tcell.Name != \"TableCell\")\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t// Calculate width based on cell span\n\t\t\t\t\tfloat width = 0;\n\t\t\t\t\tint colSpan = Convert.ToInt32(GetElementValue(tcell, \"ColSpan\", \"1\"));\n\t\t\t\t\tfor (int i = 0; i < colSpan && col+i<colWidths.Length; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\twidth += colWidths[col+i];\n\t\t\t\t\t}\n\n\t\t\t\t\tRectangleF cellR = new RectangleF(xPos, yPos, width, h);\n\t\t\t\t\tGetRectReportItems(GetNamedChildNode(tcell, \"ReportItems\"), cellR);\n\t\t\t\t\txPos += width;\n\t\t\t\t\tcol+=colSpan;\n\t\t\t\t}\n\t\t\t\tyPos += h;\n\t\t\t}\n\t\t\treturn tr;\n\t\t}\n\n\t\tinternal XmlNode GetReportItemContainer(XmlNode xNode)\n\t\t{\n\t\t\tfor (XmlNode lNode = xNode.ParentNode; lNode != null; lNode = lNode.ParentNode)\n\t\t\t{\n\t\t\t\tswitch (lNode.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"List\":\n\t\t\t\t\tcase \"Body\":\n\t\t\t\t\tcase \"PageHeader\":\n\t\t\t\t\tcase \"PageFooter\":\n\t\t\t\t\tcase \"Rectangle\":\n\t\t\t\t\tcase \"Table\":\n                    case \"fyi:Grid\":\n                    case \"Matrix\":\n\t\t\t\t\t\treturn lNode;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\tinternal XmlNode GetReportItemDataRegionContainer(XmlNode xNode)\n\t\t{\n\t\t\tfor (XmlNode cont = GetReportItemContainer(xNode); \n\t\t\t\tcont != null; \n\t\t\t\tcont = GetReportItemContainer(cont))\n\t\t\t{\n\t\t\t\tif (IsDataRegion(cont))\n\t\t\t\t\treturn cont;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\tinternal bool IsDataRegion(XmlNode node)\n\t\t{\n\t\t\tif (node == null)\n\t\t\t\treturn false;\n\n\t\t\tswitch (node.Name)\n\t\t\t{\n\t\t\t\tcase \"List\":\n\t\t\t\tcase \"Table\":\n                case \"Matrix\":\n\t\t\t\tcase \"Chart\":\n\t\t\t\t\treturn true;\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tinternal string[] GetReportItemDataRegionFields(XmlNode xNode, bool bExpression)\n\t\t{\n\t\t\tXmlNode cNode = GetReportItemContainer(xNode);\n\t\t\tif (cNode == null ||\n\t\t\t\tcNode.Name == \"Body\" ||\n\t\t\t\tcNode.Name == \"PageHeader\" ||\n\t\t\t\tcNode.Name == \"PageFooter\")\n\t\t\t\treturn null;\n\n\t\t\tstring dsname = GetDataSetNameValue(cNode);\n\t\t\tstring[] f = null;\n\t\t\tif (dsname != null)\t// found it\n\t\t\t\tf = GetFields(dsname, bExpression);\n\n\t\t\treturn f;\n\t\t}\n\n\t\tinternal void ApplyStyleToSelected(string name, string v)\n\t\t{\n\t\t\tforeach (XmlNode n in _SelectedReportItems)\n\t\t\t{\n\t\t\t\tXmlNode sNode = this.GetCreateNamedChildNode(n, \"Style\");\n\t\t\t\tthis.SetElement(sNode, name, v);\n\t\t\t}\n\n\t\t\tthis.Invalidate();\n\t\t}\n \n\t\t/// <summary>\n\t\t/// Returns a collection of the DataSetNames\n\t\t/// </summary>\n\t\tinternal object[] DataSetNames\n\t\t{\n\t\t\tget {return ReportNames.DataSetNames;}\n\t\t}\n \n\t\t/// <summary>\n\t\t/// Returns a collection of the DataSourceNames\n\t\t/// </summary>\n\t\tinternal object[] DataSourceNames\n\t\t{\n\t\t\tget {return ReportNames.DataSourceNames;}\n\t\t}\n\n\t\tinternal XmlNode DataSourceName(string dsn)\n\t\t{\n\t\t\treturn ReportNames.DataSourceName(dsn);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a collection of the Groupings\n\t\t/// </summary>\n\t\tinternal object[] GroupingNames\n\t\t{\n\t\t\tget {return ReportNames.GroupingNames;}\n\t\t}\n\n\t\tinternal string[] GetFields(string dataSetName, bool asExpression)\n\t\t{\n\t\t\treturn ReportNames.GetFields(dataSetName, asExpression);\n\t\t}\n\n        internal string GetReportParameterDefaultValue(string parameterExpression)\n        {\n            return ReportNames.GetReportParameterDefaultValue(parameterExpression);\n        }\n\n        internal string[] GetReportParameters(bool asExpression)\n\t\t{\n\t\t\treturn ReportNames.GetReportParameters(asExpression);\n\t\t}\n\n        /// <summary>\n        /// EBN 30/03/2014\n        /// </summary>\n        /// <param name=\"asExpression\"></param>\n        /// <returns></returns>\n        internal string[] GetReportModules(bool asExpression)\n        {\n            return ReportNames.GetReportModules(asExpression);\n        }\n\n        /// <summary>\n        /// EBN 30/03/2014\n        /// </summary>\n        /// <param name=\"asExpression\"></param>\n        /// <returns></returns>\n        internal string[] GetReportClasses(bool asExpression)\n        {\n            return ReportNames.GetReportClasses(asExpression);\n        }\n\n\n\t\tinternal PointF SelectionPosition(XmlNode xNode)\n\t\t{\n\t\t\tRectangleF r = this.GetReportItemRect(xNode);\n\t\t\treturn new PointF(r.X, r.Y);\n\t\t}\n\n\t\tinternal SizeF SelectionSize(XmlNode xNode)\n\t\t{\n\t\t\tSizeF rs = new SizeF(float.MinValue, float.MinValue);\n\t\t\tif (this.InTable(xNode))\n\t\t\t{\n\t\t\t\tXmlNode tcol = this.GetTableColumn(xNode);\n\t\t\t\tXmlNode tcell = this.GetTableCell(xNode);\n\t\t\t\tif (tcol != null && tcell != null)\n\t\t\t\t{\n\t\t\t\t\tint colSpan = Convert.ToInt32(GetElementValue(tcell, \"ColSpan\", \"1\"));\n\t\t\t\t\tfloat width=0;\n\t\t\t\t\twhile (colSpan > 0 && tcol != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tXmlNode w = this.GetNamedChildNode(tcol, \"Width\");\n\t\t\t\t\t\tif (w != null)\n\t\t\t\t\t\t\twidth += GetSize(w.InnerText);\n\t\t\t\t\t\tcolSpan--;\n\t\t\t\t\t\ttcol = tcol.NextSibling;\n\t\t\t\t\t}\n\t\t\t\t\tif (width > 0)\t\t\t\t\t\n\t\t\t\t\t\trs.Width = width;\n\t\t\t\t}\n\t\t\t\tXmlNode tr = this.GetTableRow(xNode);\n\t\t\t\tif (tr != null)\n\t\t\t\t{\n\t\t\t\t\tXmlNode h = this.GetNamedChildNode(tr, \"Height\");\n\t\t\t\t\tif (h != null)\n\t\t\t\t\t\trs.Height = GetSize(h.InnerText);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tRectangleF r = this.GetReportItemRect(xNode);\n\t\t\t\trs.Width = r.Width;\n\t\t\t\trs.Height = r.Height;\n\t\t\t}\n\n\t\t\t// we want both values or neither\n\t\t\tif (rs.Width == float.MinValue || rs.Height == float.MinValue)\n\t\t\t\trs.Width = rs.Height = float.MinValue;\n\t\t\treturn rs;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Adds the node to the selection unless the node is already there in which case it removes it\n\t\t/// </summary>\n\t\t/// <param name=\"node\"></param>\n\t\tinternal void AddRemoveSelection(XmlNode node)\n\t\t{\n\t\t\tif (_SelectedReportItems.IndexOf(node) >= 0)\t\n\t\t\t\t_SelectedReportItems.Remove(node);\t\t\t// remove from list if already in list\n\t\t\telse\n\t\t\t\t_SelectedReportItems.Add(node);\t\t\t\t// add to list otherwise\n\t\t\tthis.Invalidate();\n\t\t}\n\n\t\tinternal void AddSelection(XmlNode node)\n\t\t{\n\t\t\tif (_SelectedReportItems.IndexOf(node) < 0)\t\n\t\t\t{\n\t\t\t\t_SelectedReportItems.Add(node);\t\t\t\t// add to list otherwise\n\t\t\t}\n\t\t}\n\n\t\tinternal void ClearSelected()\n\t\t{\n\t\t\tif (_SelectedReportItems.Count > 0)\n\t\t\t{\n\t\t\t\t_SelectedReportItems.Clear();\n\t\t\t\tthis.Invalidate();\n\t\t\t}\n\t\t}\n\n\t\tinternal void DeleteSelected()\n\t\t{\n\t\t\tif (_SelectedReportItems.Count <= 0)\n\t\t\t\treturn;\n\n\t\t\tforeach (XmlNode n in _SelectedReportItems)\n\t\t\t{\n\t\t\t\tDeleteReportItem(n);\n\t\t\t}\n\n\t\t\t_SelectedReportItems.Clear();\n\t\t\tthis.Invalidate();\n\t\t}\n\n\t\tinternal bool IsNodeSelected(XmlNode node)\n\t\t{\n\t\t\tbool bSelected=false;\n\t\t\tforeach (XmlNode lNode in this._SelectedReportItems)\n\t\t\t{\n\t\t\t\tif (lNode == node)\n\t\t\t\t{\n\t\t\t\t\tbSelected=true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn bSelected;\n\t\t}\n\n\t\tinternal void RemoveSelection(XmlNode node)\n\t\t{\n\t\t\t_SelectedReportItems.Remove(node);\n\t\t\tthis.Invalidate();\n\t\t}\n\n\t\tinternal bool SelectNext(bool bReverse)\n\t\t{\n\t\t\tXmlNode sNode;\n\t\t\tif (_SelectedReportItems.Count > 0)\n\t\t\t\tsNode = _SelectedReportItems[0];\n\t\t\telse\n\t\t\t\tsNode = null;\n\n\t\t\tXmlNode nNode = bReverse? ReportNames.FindPrior(sNode): ReportNames.FindNext(sNode);\n\t\t\tif (nNode == null)\n\t\t\t\treturn false;\n\t\t\tthis.ClearSelected();\n\t\t\tthis.AddSelection(nNode);\n\t\t\treturn true;\n\t\t}\n\n\t\tstatic internal int CountChildren(XmlNode node, params string[] names)\n\t\t{\n\t\t\treturn CountChildren(node, names, 0);\n\t\t}\n\n\t\tstatic private int CountChildren(XmlNode node, string[] names, int index)\n\t\t{\n\t\t\tint count = 0;\n\t\t\tforeach (XmlNode c in node.ChildNodes)\n\t\t\t{\n\t\t\t\tif (c.Name != names[index])\n\t\t\t\t\tcontinue;\n\t\t\t\tif (names.Length-1 == index)\n\t\t\t\t\tcount++;\n\t\t\t\telse\n\t\t\t\t\tcount += CountChildren(c, names, index+1);\n\t\t\t}\n\t\t\treturn count;\n\t\t}\n\n        internal XmlNode FindCreateNextInHierarchy(XmlNode xNode, params string[] names)\n        {\n            XmlNode rNode = xNode;\n            foreach (string name in names)\n            {\n                XmlNode node = null;\n                foreach (XmlNode cNode in rNode.ChildNodes)\n                {\n                    if (cNode.NodeType == XmlNodeType.Element &&\n                        cNode.Name == name)\n                    {\n                        node = cNode;\n                        break;\n                    }\n                }\n                if (node == null)\n                    node = this.CreateElement(rNode, name, null);\n                \n                rNode = node;\n            }\n            return rNode;\n        }\n\n\t\tstatic internal XmlNode FindNextInHierarchy(XmlNode xNode, params string [] names)\n\t\t{\n\t\t\tXmlNode rNode=xNode;\n\t\t\tforeach (string name in names)\n\t\t\t{\n\t\t\t\tXmlNode node = null;\n\t\t\t\tforeach (XmlNode cNode in rNode.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (cNode.NodeType == XmlNodeType.Element && \n\t\t\t\t\t\tcNode.Name == name)\n\t\t\t\t\t{\n\t\t\t\t\t\tnode = cNode;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\trNode = node;\n                if (rNode == null)\n                    break;\n\t\t\t}\n\t\t\treturn rNode;\n\t\t}\n\n\t\tinternal bool AllowGroupOperationOnSelected\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (_SelectedReportItems.Count <= 1)\n\t\t\t\t\treturn false;\n\t\t\t\tforeach (XmlNode xNode in SelectedList)\n\t\t\t\t{\n\t\t\t\t\tif (InMatrix(xNode) || InTable(xNode))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tinternal int SelectedCount\n\t\t{\n\t\t\tget {return _SelectedReportItems.Count;}\n\t\t}\n        /// <summary>\n        /// Changes the current selection;\n        /// </summary>\n        /// <param name=\"node\">Report item node to select</param>\n        /// <param name=\"bGroup\">When true check if node is already selected</param>\n\t\tinternal void SetSelection(XmlNode node, bool bGroup)\n\t\t{\n\t\t\tif (bGroup && _SelectedReportItems.IndexOf(node) >= 0)\t// already part of selection\n\t\t\t\treturn;\n\t\t\t_SelectedReportItems.Clear();\t\t\t\t\t// clear out all selected\n\t\t\t_SelectedReportItems.Add(node);\t\t\t\t\t//   and add in the new one\n\t\t\tthis.Invalidate();\n\t\t}\n\n\t\tinternal List<XmlNode> SelectedList\n\t\t{\n\t\t\tget {return _SelectedReportItems;}\n\t\t}\n\n\t\t// Adjust for scale\n\t\tinternal float VerticalMax\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tfloat TotaleH= GetSize(bodyNode, \"Height\") +\n\t\t\t\t\t\tGetSize(phNode, \"Height\") +\n\t\t\t\t\t\tGetSize(pfNode, \"Height\") +\n\t\t\t\t\t    BANDHEIGHT * 3 +\n\t\t\t\t\t\t3 * 10;     // plus about 3 lines\n                return TotaleH * SCALAY;\n            }\n\t\t}\n\n\t\tinternal float HorizontalMax\n\t\t{\n\t\t\tget \n\t\t\t{\n                ProcessReport(rDoc.LastChild);                      // make sure pWidth and ReportVisualSize are up to date\n\t\t\t\tfloat hm = Math.Max(pWidth, ReportVisualSize);\n\t\t\t\treturn Math.Max(hm, RightMost(rDoc.LastChild)+90);  // 90: just to give a little extra room on right\n\t\t\t}\n\t\t}\n\t\t/// <summary>\n\t\t/// Find the Right most (largest x) position of a report item\n\t\t/// </summary>\n\t\t/// <param name=\"xNode\">Should be the \"Report\" node</param>\n\t\t/// <returns>x + width of rightmost object</returns>\n\t\tprivate float RightMost(XmlNode xNode)\n\t\t{\n\t\t\tfloat rm=0;\t\t\t// current rightmost position\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Body\":\n\t\t\t\t\tcase \"PageHeader\":\n\t\t\t\t\tcase \"PageFooter\":\n\t\t\t\t\t\trm = Math.Max(rm, RightMostRI(GetNamedChildNode(xNodeLoop, \"ReportItems\")));\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn rm;\n\t\t}\n\n\t\tprivate float RightMostRI(XmlNode xNode)\n\t\t{\n\t\t\tif (xNode == null)\n\t\t\t\treturn 0;\n\n\t\t\tfloat rm = 0;\n\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tRectangleF r = GetReportItemRect(xNodeLoop);\t\t// get the ReportItem rectangle\n\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Table\":\n                    case \"fyi:Grid\":\n                        // Table width is really defined by the table columns\n\t\t\t\t\t\tfloat[] colWidths;\n\t\t\t\t\t\tcolWidths = GetTableColumnWidths(GetNamedChildNode(xNodeLoop, \"TableColumns\"));\n\t\t\t\t\t\t// calc the total width\n\t\t\t\t\t\tfloat w=0;\n\t\t\t\t\t\tforeach (float cw in colWidths)\n\t\t\t\t\t\t\tw += cw;\n\t\t\t\t\t\trm = Math.Max(rm, r.Left + w);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Matrix\":\n\t\t\t\t\t\tMatrixView matrix = new MatrixView(this, xNodeLoop);\n\t\t\t\t\t\trm = Math.Max(rm, r.Left + matrix.Width);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\trm = Math.Max(rm, r.Right);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn rm;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Delete the matrix that contains the passed node\n\t\t/// </summary>\n\t\t/// <param name=\"node\"></param>\n\t\t/// <returns>true if table is deleted</returns>\n\t\tinternal bool DeleteMatrix(XmlNode node)\n\t\t{\n\t\t\t// Get the table\n\t\t\tXmlNode matrix = this.GetMatrixFromReportItem(node);\n\t\t\tif (matrix == null)\n\t\t\t\treturn false;\n\n\t\t\treturn DeleteReportItem(matrix);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Deletes the specified ReportItem node but ensures that the report remains syntactically correct.\n\t\t/// e.g. TableCells must contain a ReportItems which must contain a ReportItem\n\t\t/// e.g. The parent ReportsItems node must be deleted if this is the only node.\n\t\t/// </summary>\n\t\t/// <param name=\"node\"></param>\n\t\t/// <returns>true when deleted; false when node is changed into Textbox with value = \"\"</returns>\n\t\tinternal bool DeleteReportItem(XmlNode node)\n\t\t{\n\t\t\tbool rc = true;\n\t\t\tbool bRebuildNames=false;\n\t\t\tif (node.Name == \"Table\" ||\n                node.Name == \"fyi:Grid\" ||\n\t\t\t\tnode.Name == \"List\" ||\n\t\t\t\tnode.Name == \"Matrix\" ||\n\t\t\t\tnode.Name == \"Rectangle\")\n\t\t\t\tbRebuildNames = true;\n\t\t\tXmlNode reportItemsNode = node.ParentNode;\n\t\t\tif (reportItemsNode == null)\n\t\t\t\treturn false;\t\t\t// can't delete this; it is already deleted\n\t\t\tXmlNode pReportItems = reportItemsNode.ParentNode;\n\t\t\tif (pReportItems.Name == \"TableCell\")\n\t\t\t{\t// Report item is part of a table; just convert it to an Textbox with no text\n\t\t\t\trc = false;\n\t\t\t\tXmlNode styleNode = GetNamedChildNode(node, \"Style\");\t// want to retain style if possible\n\t\t\t\tif (styleNode != null)\n\t\t\t\t\tstyleNode = styleNode.CloneNode(true);\n\t\t\t\treportItemsNode.RemoveChild(node);\n\t\t\t\tReportNames.RemoveName(node);\n\t\t\t\tXmlElement tbnode = this.CreateElement(reportItemsNode,\"Textbox\", null);\n\t\t\t\tReportNames.GenerateName(tbnode);\n\t\t\t\tXmlElement vnode = this.CreateElement(tbnode, \"Value\", \"\");\n\t\t\t\tif (styleNode != null)\n\t\t\t\t\ttbnode.AppendChild(styleNode);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treportItemsNode.RemoveChild(node);\n\t\t\t\tReportNames.RemoveName(node);\n\t\t\t\tif (!reportItemsNode.HasChildNodes) \n\t\t\t\t{\t// ReportItems now has no nodes and needs to be removed\n\t\t\t\t\tpReportItems.RemoveChild(reportItemsNode);\t\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (bRebuildNames)\n\t\t\t\tReportNames = null;\t\t\t// this will force a rebuild when next needed\n\n\t\t\treturn rc;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Delete the table that contains the passed node\n\t\t/// </summary>\n\t\t/// <param name=\"node\"></param>\n\t\t/// <returns>true if table is deleted</returns>\n\t\tinternal bool DeleteTable(XmlNode node)\n\t\t{\n\t\t\t// Get the table\n\t\t\tXmlNode table = this.GetTableFromReportItem(node);\n\t\t\tif (table == null)\n\t\t\t\treturn false;\n\n\t\t\treturn DeleteReportItem(table);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Draw the report definition\n\t\t/// </summary>\n\t\t/// <param name=\"g\"></param>\n\t\t/// <param name=\"hScroll\">Horizontal scroll position</param>\n\t\t/// <param name=\"vScroll\">Vertical scroll position</param>\n\t\t/// <param name=\"clipRectangle\"></param>\n\t\tinternal async Task Draw(Graphics ag, float hScroll, float vScroll, System.Drawing.Rectangle clipRectangle)\n\t\t{\n\t\t\tg = ag;\n\t\t\t\n\t\t\t_hScroll = hScroll;\n\t\t\t_vScroll = vScroll;\n\n\t\t\tg.PageUnit = GraphicsUnit.Point;\n            // Now use scale value\n            g.ScaleTransform(SCALAX, SCALAY);\n\n\t\t\t_clip = new RectangleF(PointsX(clipRectangle.X) + _hScroll, \n\t\t\t\tPointsY(clipRectangle.Y) + _vScroll, \n\t\t\t\tPointsX(clipRectangle.Width), \n\t\t\t\tPointsY(clipRectangle.Height));\n\n\t\t\tXmlNode xNode = rDoc.LastChild;\n\t\t\tif (xNode == null || xNode.Name != \"Report\")\n\t\t\t{\n\t\t\t\tthrow new Exception(Strings.DesignXmlDraw_Error_NoReport);\n\t\t\t}\n\n\t\t\tProcessReport(xNode);\n            \n\t\t\t// Render the report\n            DrawMargins(_clip); \n\n\t\t\tfloat yLoc=0;\n\t\t\t\n\t\t\tyLoc += await DrawReportPrimaryRegions(phNode, LEFTGAP, yLoc, Strings.DesignXmlDraw_PageHeaderRegion_Title);\n\t\t\tyLoc += await DrawReportPrimaryRegions(bodyNode, LEFTGAP, yLoc, Strings.DesignXmlDraw_BodyRegion_Title);\n\t\t\tyLoc += await DrawReportPrimaryRegions(pfNode, LEFTGAP, yLoc, Strings.DesignXmlDraw_PageFooterRegion_Title);\n\n\t\t}\n\n\t\t// Process the report\n\t\tprivate void ProcessReport(XmlNode xNode)\n\t\t{\n\t\t\tbodyNode=null;\n\t\t\tphNode=null;\n\t\t\tpfNode=null;\n\n\t\t\tReportVisualSize = pHeight = pWidth = lMargin = rMargin = tMargin = bMargin = 0;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Body\":\n\t\t\t\t\t\tbodyNode = xNodeLoop;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"PageHeader\":\n\t\t\t\t\t\tphNode = xNodeLoop;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"PageFooter\":\n\t\t\t\t\t\tpfNode = xNodeLoop;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Width\":\n                        ReportVisualSizeBase = GetSize(xNodeLoop.InnerText);\n                        ReportVisualSize = ReportVisualSizeBase;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"PageHeight\":\n\t\t\t\t\t\tpHeight = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"PageWidth\":\n\t\t\t\t\t\tpWidth = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"LeftMargin\":\n\t\t\t\t\t\tlMargin = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"RightMargin\":\n\t\t\t\t\t\trMargin = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"TopMargin\":\n\t\t\t\t\t\ttMargin = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"BottomMargin\":\n\t\t\t\t\t\tbMargin = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the default sizes (if not specified)\n\t\t\tif (pWidth == 0)\n\t\t\t\tpWidth = GetSize(\"8.5in\");\n\t\t\tif (pHeight == 0)\n\t\t\t\tpHeight = GetSize(\"11in\");\n\t\t\tif (ReportVisualSize == 0)\n\t\t\t\tReportVisualSize = pWidth;\n\n\t\t\tif (phNode == null)\n\t\t\t\tphNode = CreatePrimaryRegion(\"PageHeader\");\n\t\t\tif (pfNode == null)\n\t\t\t\tphNode = CreatePrimaryRegion(\"PageFooter\");\n\t\t\tif (bodyNode == null)\n\t\t\t\tbodyNode = CreatePrimaryRegion(\"Body\");\n\n\t\t\treturn;\n\t\t}\n\n\t\tprivate XmlNode CreatePrimaryRegion(string name)\n\t\t{\n\t\t\t// Create a primary region: e.g. Page Header, Body, Page Footer\n\t\t\tXmlNode xNode = rDoc.CreateElement(name);\n\t\t\t\n\t\t\t// Add in the height element\n\t\t\tXmlNode hNode = rDoc.CreateElement(\"Height\");\n\t\t\thNode.InnerText = \"0pt\";\n\t\t\txNode.AppendChild(hNode);\n\n\t\t\t// Now link it under the Report element\n\t\t\tXmlNode rNode = rDoc.LastChild;\t\n\t\t\trNode.AppendChild(xNode);\n\t\t\treturn xNode;\n\t\t}\n\n\t\tprivate async Task<float> DrawReportPrimaryRegions(XmlNode xNode, float xLoc, float yLoc, string title)\n\t\t{\n            RectangleF TempRect = new RectangleF();  // To be used on grid backgroung design\n\n            if (xNode == null)\n\t\t\t\treturn yLoc;\n\n\t\t\tXmlNode items=null;\n\t\t\tfloat CurrentSectionheight=float.MinValue;\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Height\":\n\t\t\t\t\t\tCurrentSectionheight = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ReportItems\":\n\t\t\t\t\t\titems = xNodeLoop;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (CurrentSectionheight == float.MinValue)\t\n\t\t\t{\t// Shouldn't happen with correctly defined report; so create a Height element for the region\n\t\t\t\tthis.CreateElement(xNode, \"Height\", \"0pt\");\n\t\t\t\tCurrentSectionheight = 0;\n\t\t\t}\n\n            // Josh:\n            // Added the effect of \"paper\" so that\n            // the displayed page size would not extend\n            // past the paper size selected. If a region\n            // is extended past the end of the paper\n            // the paper will no longer display and the\n            // items placed will only be shown with an outline\n            // in the \"off-paper\" area.\n            //White \"Paper\" \n\t\t\tStyleInfo si = new StyleInfo();\n\n\t\t\t// Entire Paper\n\t\t\tsi.BackgroundColor = OUTWORKAREACOLOR;\n\t\t\tRectangleF b = new RectangleF(xLoc, yLoc + 1, /*PointsX(Width)*/(pWidth) /*+ _hScroll*/, /*height*/ ((CurrentSectionheight > TotalPageHeight /* - yLoc*/) ? TotalPageHeight/* - yLoc*/ : CurrentSectionheight));//displayHeight > 0 ? displayHeight : 0);\n\t\t\tDrawBackground(b, si);\n\n\t\t\t// Work area\n\t\t\tsi.BackgroundColor = Color.White;\n\t\t\tb = new RectangleF(xLoc + lMargin, yLoc + 1, /*PointsX(Width)*/(pWidth - lMargin - rMargin) /*+ _hScroll*/, /*height*/ ((CurrentSectionheight > TotalPageHeight /* - yLoc*/) ? TotalPageHeight/* - yLoc*/ : CurrentSectionheight));//displayHeight > 0 ? displayHeight : 0);\n            DrawBackground(b, si);\n\n\t\t\t// The alignment grid is displayed on Work area \n\n            // La griglia e' disegnata sulla superficie di lavoro e deve tenere conto dei valori dello scroll\n            // perche' i valori dello scroll dei singoli items sono computati nelle varie routines che disegnano\n            // la linea o il background\n            //\n            if (EnableDrawGriglia == true)\n            {\n                TempRect = b;\n                // adjust coordinates for scrolling\n                TempRect.X -= _hScroll - 1;\n                TempRect.Y -= _vScroll - 1;\n                ControlPaint.DrawGrid(g, Rectangle.Round(TempRect), SizeGridPt, Color.White);\n            }\n\n\n            //Edge of paper\n            DrawLine(Color.Gray, BorderStyleEnum.Solid, 1, pWidth, yLoc + 1, pWidth, yLoc + CurrentSectionheight);\n            //End \"Paper\"\n\n            // Josh:\n            // Draws the items before the band\n            // so that the items will appear \"below\" the band.\n            //Items\n            await DrawReportItems(items, b); // now draw the report items\n            //End Items \n\n            //Band and Text \n\t\t\tRectangleF bm = new RectangleF(_hScroll,yLoc+CurrentSectionheight, PointsX(Width)+_hScroll, BANDHEIGHT);\n\t\t\tsi.BackgroundColor = BANDCOLOR;\n\t\t\tsi.FontFamily = \"Arial\";\n\t\t\tsi.FontSize = 8;\n\t\t\tsi.FontWeight = FontWeightEnum.Bold;\n\n            //Josh: Added border styles for the dividing bars.\n            //Makes it easier to see where page stops in a section.\n            //Added padding on the left side of the text too due to the border line\n            si.BStyleBottom = si.BStyleLeft = si.BStyleRight = si.BStyleTop = BANDBORDERSTYLE;\n            si.BWidthBottom = si.BWidthLeft = si.BWidthRight = si.BWidthTop = BANDBORDERWIDTH;\n            si.BColorBottom = si.BColorLeft = si.BColorRight = si.BColorTop = BANDBORDERCOLOR;\n            si.PaddingLeft = BANDBORDERWIDTH + SCALAY*1f; \n\t\t\tDrawString(title, si, bm);\n            //End Band and Text \n\n\t\t\treturn CurrentSectionheight+BANDHEIGHT;\n\t\t}\n\n\t\tprivate async Task DrawReportItems(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tif (xNode == null)\n\t\t\t\treturn;\n\n\t\t\tIEnumerable olist;\n\t\t\tif (xNode.ChildNodes.Count > 1)\n\t\t\t\tolist = DrawReportItemsOrdered(xNode);\t\t// Get list with ordered report items\n\t\t\telse\n\t\t\t\tolist = xNode.ChildNodes;\n\n\t\t\tforeach(XmlNode xNodeLoop in olist)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tRectangleF rir=RectangleF.Empty;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Textbox\":\n\t\t\t\t\t\trir = await DrawTextbox(xNodeLoop, r);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Table\":\n                    case \"fyi:Grid\":\n\t\t\t\t\t\trir = await DrawTable(xNodeLoop, r);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Image\":\n\t\t\t\t\t\trir = await DrawImage(xNodeLoop, r);\n\t\t\t\t\t\tbreak;\n                    case \"CustomReportItem\":\n                        rir = await DrawCustomReportItem(xNodeLoop, r);\n                        break;\n\t\t\t\t\tcase \"Rectangle\":\n\t\t\t\t\t\trir = await DrawRectangle(xNodeLoop, r);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"List\":\n\t\t\t\t\t\trir = await DrawList(xNodeLoop, r);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Matrix\":\n\t\t\t\t\t\trir = await DrawMatrix(xNodeLoop, r);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Subreport\":\n\t\t\t\t\t\trir = await DrawSubreport(xNodeLoop, r);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Chart\":\n\t\t\t\t\t\trir = await DrawChart(xNodeLoop, r);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Line\":\n\t\t\t\t\t\trir = await DrawLine(xNodeLoop, r);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n                // Josh:\n                // Draws the item \"Out of bounds\" if the item is\n                // \"off paper\".\n                if (!r.Contains(rir))\n                {\n                    await DrawOutOfBounds(xNodeLoop, r);\n                }\n\t\t\t\tif (!rir.IsEmpty)\n\t\t\t\t{\n\t\t\t\t\tif (this._SelectedReportItems.IndexOf(xNodeLoop) >= 0)\n\t\t\t\t\t\tDrawSelected(xNodeLoop, rir);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n        // Josh: Modified so that items can be returned in reverse order as well\n        // That way, items can be drawn on top of each other correctly.\n        // This is useful when attempting to have text boxes over an image for example.\n        private List<XmlNode> DrawReportItemsOrdered(XmlNode xNode)\n        {\n            return DrawReportItemsOrdered(xNode, false);\n        }\n        //Josh: Modified so that items can be returned in reverse order as well \n\t\tprivate List<XmlNode> DrawReportItemsOrdered(XmlNode xNode, bool reverse)\n\t\t{\n\t\t\t// build the array\n            List<XmlNode> al = new List<XmlNode>(xNode.ChildNodes.Count);\n            foreach (XmlNode n in xNode.ChildNodes)\n            {\n                al.Add(n);\n            }\n\n            // Josh: See above comment.\n            if (!reverse)\n            {\n                al.Sort(new ReportItemSorter(this));\n            }\n            else\n            {\n                al.Sort(new ReportItemReverseSorter(this));\n            }\n\n\t\t\treturn al;\n\t\t}\n\n\t\tpublic RectangleF GetReportItemRect(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tRectangleF rir = GetReportItemRect(xNode);\n\n\t\t\tif (rir.Width == float.MinValue)\n\t\t\t\trir.Width = r.Width - rir.Left;\n\t\t\tif (rir.Height == float.MinValue)\n\t\t\t\trir.Height = r.Height - rir.Top;\n\n\t\t\trir = new RectangleF(rir.Left + r.Left, rir.Top + r.Top , rir.Width, rir.Height);\n            //rir.Intersect(r); //Josh: Removed so that the items will still display\n            // an outline if they go farther than\n            // the edge of the page\n            return rir; \n\t\t}\n\n        // Josh: This method returns the rectangle to the Right of the paper border where the\n        // item should be outlined only.\n        private RectangleF GetOutOfBoundsRightReportItemRect(XmlNode xNode, RectangleF r)\n        {\n            RectangleF rir = GetReportItemRect(xNode);\n\n            if (rir.Right + LEFTGAP + lMargin <= r.Right)\n            {\n                return rir;\n            }\n            else\n            {\n                if (rir.Width == float.MinValue)\n                    rir.Width = r.Width - rir.Left;\n                if (rir.Height == float.MinValue)\n                    rir.Height = r.Height - rir.Top;\n\n                RectangleF ibr = new RectangleF(rir.Left + r.Left, rir.Top + r.Top, rir.Width, rir.Height);\n\n                ibr.Intersect(r);\n\n                rir = new RectangleF(ibr.X + ibr.Width, ibr.Y, rir.Width - ibr.Width, rir.Height);\n                return rir;\n            }\n        }\n\n        // Josh: This method returns the rectangle to the Bottom of the paper border where the\n        // item should be outlined only.\n        private RectangleF GetOutOfBoundsBottomReportItemRect(XmlNode xNode, RectangleF r)\n        {\n            RectangleF rir = GetReportItemRect(xNode);\n\n            if (rir.Bottom <= r.Bottom)\n            {\n                return rir;\n            }\n            else\n            {\n                if (rir.Width == float.MinValue)\n                    rir.Width = r.Width - rir.Left;\n                if (rir.Height == float.MinValue)\n                    rir.Height = r.Height - rir.Top;\n\n                RectangleF ibr = new RectangleF(rir.Left + r.Left, rir.Top + r.Top, rir.Width, rir.Height);\n\n                ibr.Intersect(r);\n\n                rir = new RectangleF(ibr.X, ibr.Y + ibr.Height, ibr.Width, rir.Height - ibr.Height);\n                return rir;\n            }\n        } \n\n\t\t/// <summary>\n\t\t/// Return the rectangle as specified by Left, Top, Height, Width elements \n\t\t/// </summary>\n\t\t/// <param name=\"xNode\"></param>\n\t\t/// <returns></returns>\n\t\tinternal RectangleF GetReportItemRect(XmlNode xNode)\n\t\t{\n\t\t\tfloat t=0;\n\t\t\tfloat l=0;\n\t\t\tfloat w=float.MinValue;\n\t\t\tfloat h=float.MinValue;\n\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Top\":\n\t\t\t\t\t\tt = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Left\":\n\t\t\t\t\t\tl = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Height\":\n\t\t\t\t\t\th = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Width\":\n\t\t\t\t\t\tw = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tRectangleF rir = new RectangleF(l, t, w, h);\n\t\t\treturn rir;\n\t\t}\n\t\n\t\tprivate void GetLineEnds(XmlNode xNode, RectangleF r, out PointF l1, out PointF l2)\n\t\t{\n\t\t\tfloat x=0;\n\t\t\tfloat y=0;\n\t\t\tfloat w=0;\n\t\t\tfloat h=0;\n\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Top\":\n\t\t\t\t\t\ty = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Left\":\n\t\t\t\t\t\tx = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Height\":\n\t\t\t\t\t\th = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Width\":\n\t\t\t\t\t\tw = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tl1 = new PointF(r.Left + x, r.Top + y);\n\t\t\tl2 = new PointF(l1.X+w, l1.Y+h);\n\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void SetReportItemHeightWidth(XmlNode xNode, float height, float width)\n\t\t{\n\t\t\tthis.SetElement(xNode, \"Height\", string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.##}pt\", height));\n\t\t\tthis.SetElement(xNode, \"Width\", string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.##}pt\", width));\n\t\t}\n\n\t\tprivate void SetReportItemXY(XmlNode xNode, float x, float y)\n\t\t{\n\t\t\tthis.SetElement(xNode, \"Left\", string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.##}pt\", x));\n\t\t\tthis.SetElement(xNode, \"Top\", string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.##}pt\", y));\n\t\t}\n\n\t\tprivate void RemoveReportItemLTHW(XmlNode ri)\n\t\t{\n\t\t\tXmlNode w = this.GetNamedChildNode(ri, \"Left\");\n\t\t\tif (w != null)\n\t\t\t\tri.RemoveChild(w);\n\t\t\tw = this.GetNamedChildNode(ri, \"Top\");\n\t\t\tif (w != null)\n\t\t\t\tri.RemoveChild(w);\n\t\t\tw = this.GetNamedChildNode(ri, \"Height\");\n\t\t\tif (w != null)\n\t\t\t\tri.RemoveChild(w);\n\t\t\tw = this.GetNamedChildNode(ri, \"Width\");\n\t\t\tif (w != null)\n\t\t\t\tri.RemoveChild(w);\n\t\t}\n\n\t\tprivate async Task<RectangleF> DrawChart(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tRectangleF ir = GetReportItemRect(xNode, r);\n\t\t\tXmlNode title = this.GetNamedChildNode(xNode, \"Title\");\n\t\t\tStyleInfo csi = await GetStyleInfo(xNode);\n\t\t\tcsi.TextAlign = TextAlignEnum.Left;\n\t\t\tif (title != null)\n\t\t\t{\n\t\t\t\tDrawString(\"\", csi, ir);\t// for the chart background\n\t\t\t\tstring caption = this.GetElementValue(title, \"Caption\", \"\");\n\t\t\t\tif (caption == \"\")\n\t\t\t\t\tcaption = \"Chart\";\n\t\t\t\telse\n\t\t\t\t\tcaption = \"Chart: \" + caption;\n\t\t\t\t// Blend the styles of the chart and the title; \n\t\t\t\tStyleInfo tsi = await GetStyleInfo(title);\n\t\t\t\tcsi.FontFamily = tsi.FontFamily;\n\t\t\t\tcsi.FontSize = tsi.FontSize;\n\t\t\t\tcsi.FontStyle = tsi.FontStyle;\n\t\t\t\tcsi.FontWeight = tsi.FontWeight;\n\t\t\t\tcsi.Color = tsi.Color;\n\t\t\t\tcsi.TextAlign = TextAlignEnum.Left;\n\t\t\t\tDrawString(caption, csi, ir, false);\n\t\t\t}\n\t\t\telse\n\t\t\t\tDrawString(xNode.Name, csi, ir, false);\n\t\t\treturn ir;\n\t\t}\n\n        internal string GetCustomReportItemType(string type)\n        {\n            // type can be the type or it can be an rdl parameter\n            // implement for both\n            if (type.StartsWith(\"={?\"))\n            {\n                // handle types like ={?BarcodeType}\n                // lookup the pareamter\n                string paramName = type.Substring(3, type.Length - 4);\n                XmlNode pNode = this.GetNamedChildNode(rDoc.LastChild, \"ReportParameters\");\n                if (pNode != null)\n                {\n                    foreach (XmlNode xNode in pNode.ChildNodes)\n                    {\n                        if (xNode.NodeType != XmlNodeType.Element || xNode.Name != \"ReportParameter\")\n                            continue;\n                        System.Xml.XmlAttribute na = xNode.Attributes[\"Name\"];\n                        if (na.Value == paramName)\n                        {\n                            XmlNode dvNode = this.GetNamedChildNode(xNode, \"DefaultValue\");\n                            if (dvNode != null)\n                            {\n                                XmlNode vNode = this.GetNamedChildNode(dvNode, \"Values\");\n                                if (vNode != null && vNode.HasChildNodes)\n                                {\n                                    type = vNode.FirstChild.InnerText;\n                                    break;\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n\n            return type;\n        }\n        \n\t\tprivate async Task<RectangleF> DrawCustomReportItem(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tRectangleF ir = GetReportItemRect(xNode, r);\n\t\t\tif (!ir.IntersectsWith(_clip))\n\t\t\t\treturn ir;\n\n\t\t\tStyleInfo si = await GetStyleInfo(xNode);\n\n\t\t\tXmlNode tNode = this.GetNamedChildNode(xNode, \"Type\");\n\t\t\tif (tNode == null)\n\t\t\t{\t// shouldn't really ever happen\n\t\t\t\tDrawString(\"CustomReportItem requires type.\", si, ir);\n\t\t\t\treturn ir;\t\t\n\t\t\t}\n            string type = GetCustomReportItemType(tNode.InnerText);\n           \n            ICustomReportItem cri = null;\n            Bitmap bm = null;\n            try\n            {\n                cri = RdlEngineConfig.CreateCustomReportItem(type);\n                int width = (int)PixelsX(ir.Width - (si.PaddingLeft + si.PaddingRight));\n                int height = (int)PixelsY(ir.Height - (si.PaddingTop + si.PaddingBottom));\n                if (width <= 0)\n                    width = 1;\n                if (height <= 0)\n                    height = 1;\n                bm = new Bitmap(width, height);\n                cri.DrawDesignerImage(ref bm);\n                DrawImageSized(xNode,ImageSizingEnum.Clip, bm, si, ir);\n                DrawBorder(si, ir);\n            }\n            catch\n            {\n                DrawString(\"CustomReportItem type is unknown.\", si, ir);\n            }\n            finally\n            {\n                if (cri != null)\n                    cri.Dispose();\n                if (bm != null)\n                    bm.Dispose();\n            }\n\n\t\t\treturn ir;\n\t\t}\n        \n        private async Task<RectangleF> DrawImage(XmlNode xNode, RectangleF r)\n        {\n            RectangleF ir = GetReportItemRect(xNode, r);\n            if (!ir.IntersectsWith(_clip))\n                return ir;\n\n            StyleInfo si = await GetStyleInfo(xNode);\n\n            XmlNode sNode = this.GetNamedChildNode(xNode, \"Source\");\n            XmlNode vNode = this.GetNamedChildNode(xNode, \"Value\");\n            if (sNode == null || vNode == null)\n            {\t// shouldn't really ever happen\n                DrawString(\"Image with invalid source or value.\", si, ir);\n                return ir;\n            }\n\n            switch (sNode.InnerText)\n            {\n                case \"External\":\n                    if (await DrawImageExternal(xNode, sNode, vNode, si, ir))\n                        ir = GetReportItemRect(xNode, r);\n\n                    DrawBorder(si, ir);\n                    break;\n                case \"Embedded\":\n                    // Josh: adds base rectangle so the \"paper\" size is known when drawing image.\n                    if (DrawImageEmbedded(xNode, sNode, vNode, si, ir, r))\n                    {\n                        ir = GetReportItemRect(xNode, r);\n                    }\n\n                    DrawBorder(si, ir);\n                    break;\n                case \"Database\":\n                    DrawString(string.Format(\"Database Image: {0}.\", vNode.InnerText), si, ir);\n                    break;\n                default:\n                    DrawString(string.Format(\"Image, invalid source={0}.\", sNode.InnerText), si, ir);\n                    break;\n            }\n            return ir;\n        }\n\n        // Josh: adds base rectangle so the \"paper\" size is known when drawing image.\n        private bool DrawImageEmbedded(XmlNode iNode, XmlNode sNode, XmlNode vNode, StyleInfo si, RectangleF r, RectangleF rBase) \n\t\t{\n\t\t\t// First we need to find the embedded image list\n\t\t\tXmlNode emNode = this.GetNamedChildNode(rDoc.LastChild, \"EmbeddedImages\");\n\t\t\tif (emNode == null)\n\t\t\t{\n\t\t\t\tDrawString(string.Format(\"Image: embedded image {0} requested but there are no embedded images defined.\",vNode.InnerText), si, r);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Next find the requested embedded image by name\n\t\t\tXmlNode eiNode=null;\n\t\t\tforeach (XmlNode xNode in emNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNode.NodeType != XmlNodeType.Element || xNode.Name != \"EmbeddedImage\")\n\t\t\t\t\tcontinue;\n\t\t\t\tSystem.Xml.XmlAttribute na = xNode.Attributes[\"Name\"];\n\t\t\t\tif (na.Value == vNode.InnerText)\n\t\t\t\t{\n\t\t\t\t\teiNode = xNode;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (eiNode == null)\n\t\t\t{\n\t\t\t\tDrawString(string.Format(\"Image: embedded image {0} not found.\",vNode.InnerText), si, r);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Get the image data out \n\t\t\tXmlNode id = this.GetNamedChildNode(eiNode, \"ImageData\");\n\t\t\tbyte[] ba = Convert.FromBase64String(id.InnerText);\n\t\t\t\n\t\t\tStream strm=null;\n\t\t\tSystem.Drawing.Image im=null;\n\t\t\tbool bResize=false;\n\t\t\ttry \n\t\t\t{\n\t\t\t\tstrm = new MemoryStream(ba);\n\t\t\t\tim = System.Drawing.Image.FromStream(strm);\t \n\t\t\t\t// Draw based on sizing options\n                // Josh: adds base rectangle so the \"paper\" size is known when drawing image.\n                bResize = DrawImageSized(iNode, im, si, r, rBase); \n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\tDrawString(string.Format(\"Image: {0}\",e.Message), si, r);\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (strm != null)\n\t\t\t\t\tstrm.Close();\n\t\t\t\tif (im != null)\n\t\t\t\t\tim.Dispose();\n\t\t\t}\n\t\t\treturn bResize;\n\t\t}\n\n        private System.Drawing.Image GetImageEmbedded(string emName)\n        {\n            // First we need to find the embedded image list\n            XmlNode emNode = this.GetNamedChildNode(rDoc.LastChild, \"EmbeddedImages\");\n            if (emNode == null)\n                return null;            // no embedded images exist\n\n            // Next find the requested embedded image by name\n            XmlNode eiNode = null;\n            foreach (XmlNode xNode in emNode.ChildNodes)\n            {\n                if (xNode.NodeType != XmlNodeType.Element || xNode.Name != \"EmbeddedImage\")\n                    continue;\n                System.Xml.XmlAttribute na = xNode.Attributes[\"Name\"];\n                if (na.Value == emName)\n                {\n                    eiNode = xNode;\n                    break;\n                }\n            }\n            if (eiNode == null)\n                return null;    // no embedded image with that name\n\n            // Get the image data out \n            XmlNode id = this.GetNamedChildNode(eiNode, \"ImageData\");\n            byte[] ba = Convert.FromBase64String(id.InnerText);\n\n            Stream strm = null;\n            System.Drawing.Image im = null;\n            try\n            {\n                strm = new MemoryStream(ba);\n                im = System.Drawing.Image.FromStream(strm);\n            }\n            catch \n            {\n                im = null;\n            }\n            finally\n            {\n                if (strm != null)\n                    strm.Close();\n            }\n            return im;\n        }\n\n        \n\n        private async Task<bool> DrawImageExternal(XmlNode iNode, XmlNode sNode, XmlNode vNode, StyleInfo si, RectangleF r)\n        {\n            Stream strm = null;\n            System.Drawing.Image im = null;\n            bool bResize = false;\n            try\n            {\n                if (vNode.InnerText[0] == '=')\n                {   // Image is an expression; can't calculate at design time\n                    DrawString(string.Format(\"Image: {0}\", vNode.InnerText), si, r);\n                }\n                else\n                {\n                    // TODO: should probably put this into cached memory: instead of reading all the time\n                    string fname = vNode.InnerText;\n                    if (fname.StartsWith(\"http:\") || fname.StartsWith(\"file:\") || fname.StartsWith(\"https:\"))\n                    {\n\n                        using HttpClient httpClient = new HttpClient();\n\t\t\t\t\t\thttpClient.AddMajorsilenceReportingUserAgent();\n                        HttpResponseMessage response =await  httpClient.GetAsync(fname);\n                        response.EnsureSuccessStatusCode();\n                        strm = await response.Content.ReadAsStreamAsync();\n                    }\n                    else\n                    {\n                        strm = new FileStream(fname, FileMode.Open, FileAccess.Read, FileShare.Read);\n                    }\n                    im = System.Drawing.Image.FromStream(strm);\n                    // Draw based on sizing options\n                    bResize = DrawImageSized(iNode, im, si, r);\n                }\n            }\n            catch (Exception e)\n            {\n                DrawString(string.Format(\"Image: {0}\", e.Message), si, r);\n            }\n            finally\n            {\n                if (strm != null)\n                    strm.Close();\n                if (im != null)\n                    im.Dispose();\n            }\n            return bResize;\n        }\n        \n        ImageSizingEnum GetSizing(XmlNode iNode)\n        {\n            XmlNode szNode = this.GetNamedChildNode(iNode, \"Sizing\");\n            ImageSizingEnum ise = szNode == null ? ImageSizingEnum.AutoSize :\n                ImageSizing.GetStyle(szNode.InnerText);\n            return ise;\n        }\n\n        // Josh: adds the base rectange so the paper size is known.\n        private bool DrawImageSized(XmlNode iNode, Image im, StyleInfo si, RectangleF r, RectangleF rBase)\n        {\n            return DrawImageSized(iNode, GetSizing(iNode), im, si, r, rBase);\n        }\n\n        private bool DrawImageSized(XmlNode iNode, ImageSizingEnum ise, Image im, StyleInfo si, RectangleF r)\n        {\n            return DrawImageSized(iNode, ise, im, si, r, r);\n        } \n\n        private bool DrawImageSized(XmlNode iNode, Image im, StyleInfo si, RectangleF r)\n        {\n            return DrawImageSized(iNode, GetSizing(iNode), im, si, r);\n        }\n\n        // Josh: adds the base rectange so the paper size is known.\n        private bool DrawImageSized(XmlNode iNode, ImageSizingEnum ise, Image im, StyleInfo si, RectangleF r, RectangleF rBase)\n        {\n\t\t\t// calculate new rectangle based on padding and scroll\n\t\t\tRectangleF r2 = new RectangleF(r.Left + si.PaddingLeft - _hScroll,\n\t\t\t\tr.Top + si.PaddingTop - _vScroll,\n\t\t\t\tr.Width - si.PaddingLeft - si.PaddingRight,\n\t\t\t\tr.Height - si.PaddingTop - si.PaddingBottom);\n\n\t\t\tbool bResize = false;\n\t\t\tfloat height, width;\t\t// some work variables\n            Rectangle ir;\t// int work rectangle\n            GraphicsUnit gu;\n\n            switch (ise)\n\t\t\t{\n\t\t\t\tcase ImageSizingEnum.AutoSize:\n                    // Note: GDI+ will stretch an image when you only provide\n                    //  the left/top coordinates.  This seems pretty stupid since\n                    //  it results in the image being out of focus even though\n                    //  you don't want the image resized.\n                    //\t\t\t\t\tg.DrawImage(im, r2.Left, r2.Top);\n                    // correct the height and width of the image: to match size of image\n\t\t\t\t\twidth = PointsX(im.Width) + si.PaddingLeft + si.PaddingRight;\n\t\t\t\t\theight = PointsY(im.Height) + si.PaddingTop + si.PaddingBottom;\n\t\t\t\t\tthis.SetReportItemHeightWidth(iNode, height, width);\n                    \n                    gu = g.PageUnit;\n                    g.PageUnit = GraphicsUnit.Pixel;\n                    ir = new Rectangle(PixelsX(r2.Left), PixelsY(r2.Top), im.Width, im.Height);\n                    g.DrawImage(im, ir);\n                    g.PageUnit = gu;\n\t\t\t\t\tbResize = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ImageSizingEnum.Clip:\n\t\t\t\t\tRegion saveRegion = g.Clip;\n\t\t\t\t\tRegion clipRegion = new Region(g.Clip.GetRegionData());\n\t\t\t\t\t//RectangleF r3 = new RectangleF(PointsX(r2.Left), PointsY(r2.Top), PointsX(r2.Width), PointsY(r2.Height));\n\t\t\t\t\tclipRegion.Intersect(r2);\n\t\t\t\t\tg.Clip = clipRegion;\n                    gu = g.PageUnit;\n                    g.PageUnit = GraphicsUnit.Pixel;\n                    ir = new Rectangle(PixelsX(r2.Left), PixelsY(r2.Top), im.Width, im.Height);\n                    g.DrawImage(im, ir);\n                    g.PageUnit = gu;\n                    g.Clip = saveRegion;\n\t\t\t\t\tbreak;\n                case ImageSizingEnum.FitProportional: //Josh: Modified to allow\n                    //accurate scaling of image\n                    //when scrolling page.\n                    // Previously, the image would\n                    // \"shrink\" as it's box was\n                    // scrolled off the page. \n\t\t\t\t\tfloat ratioIm = (float) im.Height / (float) im.Width;\n\t\t\t\t\tfloat ratioR = r2.Height / r2.Width;\n\t\t\t\t\theight = r2.Height;\n\t\t\t\t\twidth = r2.Width;\n\t\t\t\t\tif (ratioIm > ratioR)\n\t\t\t\t\t{\t// this means the rectangle width must be corrected\n\t\t\t\t\t\twidth = height * (1/ratioIm);\n\t\t\t\t\t}\n\t\t\t\t\telse if (ratioIm < ratioR)\n\t\t\t\t\t{\t// this means the ractangle height must be corrected\n\t\t\t\t\t\theight = width * ratioIm;\n\t\t\t\t\t}\n\n                    // Josh: creates another rectangle used to determine the area to draw\n                    // so that the entire image is not \"drawn\" off screen and only the\n                    // portion displayed is drawn.\n                    RectangleF r3 = new RectangleF(r2.X, r2.Y, width, height);\n\n                    width = (float)im.Width / (float)PixelsX(width);\n                    height = (float)im.Height / (float)PixelsY(height);\n                    r3.Y = rBase.Y;\n                    r3.X = rBase.X;\n                    r3.Intersect(rBase);\n                    r3.Y = r2.Y;\n                    r3.X = r2.X;\n\n                    width = PixelsX(r3.Width) * width;\n                    height = PixelsY(r3.Height) * height;\n\n                    float startingX = PixelsX(/*(_hScroll > rBase.X) ? (_hScroll - */si.PaddingLeft/* + rBase.X) : 0*/);\n                    float startingY = PixelsY(/*(_vScroll > rBase.Y) ? (_vScroll - */si.PaddingTop/* + rBase.Y) : 0*/);\n                    g.DrawImage(im, r3,\n                    new RectangleF(\n                    startingX,\n                    startingY,\n                    (width > im.Width ? im.Width : width) - startingX,\n                    (height > im.Height ? im.Height : height) - startingY),\n                    GraphicsUnit.Pixel); \n\t\t\t\t\tbreak;\n\t\t\t\tcase ImageSizingEnum.Fit:\n\t\t\t\tdefault:\n\t\t\t\t\tg.DrawImage(im, r2);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn bResize;\n\t\t}\n\n\t\tprivate async Task<RectangleF> DrawList(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tRectangleF listR = GetReportItemRect(xNode, r);\n\t\t\tStyleInfo si = await GetStyleInfo(xNode);\n\t\t\tDrawBackground(listR, si);\n\t\t\tDrawBorder(si, listR);\n\n\t\t\tXmlNode items = this.GetNamedChildNode(xNode, \"ReportItems\");\n\n\t\t\tif (items != null)\n\t\t\t\tawait DrawReportItems(items, listR);\n\n\t\t\treturn listR;\n\t\t}\n\n\t\tprivate async Task<RectangleF> DrawLine(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tPointF l1;\n\t\t\tPointF l2;\n\t\t\t\t\t\n\t\t\tGetLineEnds(xNode, r, out l1, out l2);\n\t\t\tStyleInfo si = await GetStyleInfo(xNode);\n\n\t\t\tBorderStyleEnum ls = si.BStyleLeft;\n\t\t\tif (!(ls == BorderStyleEnum.Solid ||\n\t\t\t\t  ls == BorderStyleEnum.Dashed || \t\n\t\t\t\t  ls == BorderStyleEnum.Dotted))\n\t\t\t\tls = BorderStyleEnum.Solid;\n\n\t\t\tDrawLine(si.BColorLeft, ls, si.BWidthLeft,  \n\t\t\t\tl1.X, l1.Y, l2.X, l2.Y);\n\t\t\treturn r;\n\t\t}\n\n\t\tprivate async Task<RectangleF> DrawMatrix(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tRectangleF mr = GetReportItemRect(xNode, r);\t\t// get the matrix rectangle\n\t\t\tif (mr.IsEmpty)\n\t\t\t\treturn mr;\n\n\t\t\tMatrixView matrix = new MatrixView(this, xNode);\n\t\t\tmr.Height = matrix.Height;\n\t\t\tmr.Width = matrix.Width;\n\t\t\t \n\t\t\tfloat ypos = mr.Top;\n\t\t\tfor (int row=0; row < matrix.Rows; row++)\n\t\t\t{\n\t\t\t\tfloat xpos = mr.Left;\n\t\t\t\tfor (int col=0; col <matrix.Columns; col++)\n\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\tMatrixItem mi = matrix[row, col];\n\t\t\t\t\tif (mi.ReportItem != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tRectangleF cr = new RectangleF(xpos, ypos, mi.Width, mi.Height);\n\t\t\t\t\t\tawait this.DrawReportItems(mi.ReportItem, cr);\n\t\t\t\t\t}\n\t\t\t\t\tfloat width = matrix[1,col].Width;\n\t\t\t\t\txpos += width;\n\t\t\t\t}\n\t\t\t\typos += matrix[row, 1].Height;\n\t\t\t}\n\n\t\t\treturn mr;\n\t\t}\n\n\t\tprivate async Task<RectangleF> DrawRectangle(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tStyleInfo si = await GetStyleInfo(xNode);\n\t\t\tRectangleF ri = GetReportItemRect(xNode, r);\n\t\t\tDrawBackground(ri, si);\n\t\t\tDrawBorder(si, ri);\n\n\t\t\tXmlNode items = this.GetNamedChildNode(xNode, \"ReportItems\");\n\n\t\t\tif (items != null)\n\t\t\t\tawait DrawReportItems(items, ri);\n\t\t\t\n\t\t\treturn ri;\n\t\t}\n\n\t\tprivate void DrawSelected(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tif (xNode.Name == \"Line\")\n\t\t\t{\n\t\t\t\tDrawSelectedLine(xNode, r);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tStyleInfo si = new StyleInfo();\n\n            XmlNode parent = GetReportItemDataRegionContainer(xNode);\n         \n            if (parent != null)\n            {\n                RectangleF rect = GetRectangle(parent);\n                rect.X += lMargin;\n                rect.Y += BANDBORDERWIDTH;\n                DrawSelected(parent, rect);\n            }\n            si.BStyleBottom = si.BStyleLeft = si.BStyleTop = si.BStyleRight = BorderStyleEnum.Solid;\n            si.BWidthBottom = si.BWidthLeft = si.BWidthRight = si.BWidthTop = 1;\n            // Josh: Changed to DimGray (personal preference)\n            si.BColorBottom = si.BColorLeft = si.BColorRight = si.BColorTop = Color.DimGray; //Color.LightGray; \n\n\t\t\tif (!IsDataRegion(xNode) || xNode.Name == \"List\")\n            {\n                DrawBorder(si, r);\n                DrawCircle(Color.Black, BorderStyleEnum.Solid, 1,\n                    r.X - RADIUS, r.Y - RADIUS, RADIUS * 2, true);  // top left\n                DrawCircle(Color.Black, BorderStyleEnum.Solid, 1,\n                    r.X + r.Width - RADIUS, r.Y - RADIUS, RADIUS * 2, true);  // top right\n                DrawCircle(Color.Black, BorderStyleEnum.Solid, 1,\n                    r.X - RADIUS, r.Y + r.Height - RADIUS, RADIUS * 2, true);  // bottom left\n                DrawCircle(Color.Black, BorderStyleEnum.Solid, 1,\n                    r.X + r.Width - RADIUS, r.Y + r.Height - RADIUS, RADIUS * 2, true);  // bottom right\n            }\n            else\n            {\n                if (xNode.Name == \"Table\")\n                {\n                    HighLightTableRegion(xNode, r);\n                }\n            \n            }\n\n        }\n\n        private void HighLightTableRegion(XmlNode xNode,RectangleF r)\n        {\n            Color[] defaultTableGroupColors =\n            {\n                Color.LightBlue,Color.LightGreen,Color.LightYellow,Color.Pink,Color.Orange,Color.Aquamarine\n            };\n\n            int descBandWitdh = 100;\n            int descColumnsHeight = 10;\n\n            StyleInfo siDefault = new StyleInfo();\n            siDefault.BackgroundColor = Color.Aqua;\n            siDefault.FontFamily = \"Arial\";\n            siDefault.FontSize = 8;\n            siDefault.FontWeight = FontWeightEnum.Bold;\n            siDefault.BStyleBottom = siDefault.BStyleLeft = siDefault.BStyleRight = siDefault.BStyleTop = BorderStyleEnum.Solid;\n            siDefault.BColorBottom = siDefault.BColorLeft = siDefault.BColorRight = siDefault.BColorTop =  Color.Black;\n            \n            RectangleF bandPos = r;\n            bandPos.X = r.X + r.Width;\n            bandPos.Width = descBandWitdh;\n\n\n            StyleInfo si = (StyleInfo) siDefault.Clone();\n            Dictionary<string, Color> assignedGroupColors = new Dictionary<string, Color>();\n\n            Dictionary<string, List<XmlNode>> sections = GetTableSections(xNode);\n            int colorGroupIndex = 0;\n            foreach (var s in sections)\n            {\n                foreach (var p in s.Value)\n                {\n                    float h = GetSize(GetNamedChildNode(p, \"Height\").InnerText);\n                    si = (StyleInfo)siDefault.Clone();\n\t\t\t\t\t// Scale Band Height\n                    bandPos.Height = h*SCALAY;\n                    if (s.Key.StartsWith(\"G\"))\n                    {\n                        int sepGroup = s.Key.IndexOf('_');\n                        string groupDesc = s.Key.Substring(sepGroup + 1);\n                        if (groupDesc.Length > 0)\n                        {\n                            Color groupColor;\n                            if (!assignedGroupColors.TryGetValue(groupDesc, out groupColor))\n                            {\n\n                                if (colorGroupIndex > defaultTableGroupColors.Length - 1)\n                                    groupColor = defaultTableGroupColors[defaultTableGroupColors.Length-1];\n                                else\n                                    groupColor = defaultTableGroupColors[colorGroupIndex];\n\n                                    assignedGroupColors.Add(groupDesc, groupColor);\n                                    colorGroupIndex++;\n                            }\n                            si.BackgroundColor = groupColor;\n                        }\n                    }\n                    DrawString(s.Key, si, bandPos);\n                    bandPos.Y += h;\n                }\n\n            }\n\n            //columns\n            bandPos = r;\n            bandPos.Y -= descColumnsHeight;\n            bandPos.Height = descColumnsHeight;\n            si = (StyleInfo)siDefault.Clone();\n            si.TextAlign = TextAlignEnum.Center;\n            DrawString(\"Columns\", si, bandPos);\n\n        }\n        private void DrawSelectedLine(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tPointF p1;\n\t\t\tPointF p2;\n\n\t\t\tthis.GetLineEnds(xNode, r, out p1, out p2);\n\n\t\t\tDrawCircle(Color.Black, BorderStyleEnum.Solid, 1,\n\t\t\t\tp1.X - RADIUS, p1.Y - RADIUS, RADIUS*2, true);  \n\t\t\tDrawCircle(Color.Black, BorderStyleEnum.Solid, 1,\n\t\t\t\tp2.X + - RADIUS, p2.Y - RADIUS, RADIUS*2, true);\n\t\t}\n\n        // Josh: Draws the \"out of bounds\" area of the \"off paper\" controls.\n        private async Task DrawOutOfBounds(XmlNode xNode, RectangleF r)\n        {\n            StyleInfo si = await GetStyleInfo(xNode);\n            RectangleF ri = GetOutOfBoundsRightReportItemRect(xNode, r);\n\t\t\tsi.BackgroundColor = OUTITEMCOLOR;\n\n            if (ri.Right > r.Right)//(!r.Contains(ri))\n            {\n                DrawBackground(ri, si);\n            }\n\n            ri = GetOutOfBoundsBottomReportItemRect(xNode, r);\n\n            if (ri.Bottom > r.Bottom)\n            {\n                DrawBackground(ri, si);\n            }\n            return;\n        }\n \n\n\t\tprivate async Task<RectangleF> DrawSubreport(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tRectangleF tr = GetReportItemRect(xNode, r);\t\t\n\t\t\tstring subreport = this.GetElementValue(xNode, \"ReportName\", \"<not specified>\");\n\t\t\tstring title = string.Format(\"Subreport: {0}\", subreport);\n\n\t\t\tDrawString(title, await GetStyleInfo(xNode), tr, false);\n\t\t\treturn tr;\n\t\t}\n\n\t\tprivate async Task<RectangleF> DrawTable(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tRectangleF tr = GetReportItemRect(xNode, r);\t\t// get the table rectangle\n\t\t\tif (tr.IsEmpty)\n\t\t\t\treturn tr;\n\n\t\t\t// For Table width is really defined by the table columns\n\t\t\tfloat[] colWidths;\n\t\t\tcolWidths = GetTableColumnWidths(GetNamedChildNode(xNode, \"TableColumns\"));\n\t\t\t// calc the total width\n\t\t\tfloat w=0;\n\t\t\tforeach (float cw in colWidths)\n\t\t\t\tw += cw;\n\t\t\ttr.Width = w;\n\n\t\t\t// For Table height is really defined the sum of the RowHeights\n\t\t\tList<XmlNode> trs = GetTableRows(xNode);\n\t\t\ttr.Height = GetTableRowsHeight(trs);\n\n\t\t\tDrawBackground(tr, await GetStyleInfo(xNode));\n\n\t\t\t// Loop thru the TableRows and the columns in each of them to get at the\n\t\t\t//  individual cell\n\t\t\tfloat yPos = tr.Y;\n\t\t\tforeach (XmlNode trow in trs)\n\t\t\t{\n\t\t\t\tXmlNode tcells=GetNamedChildNode(trow, \"TableCells\");\n\n\t\t\t\tfloat h = GetSize(GetNamedChildNode(trow, \"Height\").InnerText);\n\n\t\t\t\tfloat xPos = tr.X;\n\t\t\t\tint col=0;\n\t\t\t\tforeach (XmlNode tcell in tcells)\n\t\t\t\t{\n\t\t\t\t\tif (tcell.Name != \"TableCell\")\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t// Calculate width based on cell span\n\t\t\t\t\tfloat width = 0;\n\t\t\t\t\tint colSpan = Convert.ToInt32(GetElementValue(tcell, \"ColSpan\", \"1\"));\n\t\t\t\t\tfor (int i = 0; i < colSpan && col+i<colWidths.Length; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\twidth += colWidths[col+i];\n\t\t\t\t\t}\n\n\t\t\t\t\tRectangleF cellR = new RectangleF(xPos, yPos, width, h);\n\t\t\t\t\tawait DrawReportItems(GetNamedChildNode(tcell, \"ReportItems\"), cellR);\n\t\t\t\t\txPos += width;\n\t\t\t\t\tcol+=colSpan;\n\t\t\t\t}\n\t\t\t\tyPos += h;\n\t\t\t}\n\t\t\treturn tr;\n\t\t}\n\n\t\tprivate int GetTableColumnCount(XmlNode tblNode)\n\t\t{\n\t\t\tXmlNode tblCols = this.GetNamedChildNode(tblNode, \"TableColumns\");\n\t\t\tif (tblCols == null)\n\t\t\t\treturn 0;\n\t\t\tint cols=0;\n\t\t\tforeach (XmlNode cNode in tblCols.ChildNodes)\n\t\t\t{\n\t\t\t\tif (cNode.Name == \"TableColumn\")\n\t\t\t\t\tcols++;\n\t\t\t}\n\t\t\treturn cols;\n\t\t}\n        \n        private Dictionary<string, List<XmlNode>> GetTableSections(XmlNode xNode)\n        {\n            Dictionary<string, XmlNode> mainSections=new Dictionary<string, XmlNode>();\n            Dictionary<string, List<XmlNode>> resultSections = new Dictionary<string, List<XmlNode>>();\n            XmlNode tableNode;\n\n            mainSections.Add(\"Header\", null);\n            mainSections.Add(\"Details\", null);\n            mainSections.Add(\"Footer\", null);\n            mainSections.Add(\"TableGroups\", null);\n\n            foreach (XmlNode cNode in xNode)\n            {\n                if (cNode.NodeType != XmlNodeType.Element)\n                    continue;\n                if (mainSections.ContainsKey(cNode.Name))\n                {\n                    mainSections[cNode.Name] = cNode;\n                }\n           }\n\n           if (mainSections.TryGetValue(\"Header\", out tableNode) && tableNode != null)\n           {\n                resultSections.Add(\"Header\",GetTableRowsNodes(GetNamedChildNode(tableNode, \"TableRows\")));\n           }\n\n           if (mainSections.TryGetValue(\"TableGroups\", out tableNode)&&tableNode!=null)\n           {\n                foreach(var tg in GetTableGroupRowsNodes(tableNode, \"Header\", (s) => \"GH_\" + s, false))\n                    resultSections.Add(tg.Key,tg.Value);\n\n           }\n\n           if (mainSections.TryGetValue(\"Details\", out tableNode) && tableNode != null)\n           {\n                resultSections.Add(\"Details\", GetTableRowsNodes(GetNamedChildNode(tableNode, \"TableRows\")));\n           }\n\n           if (mainSections.TryGetValue(\"TableGroups\", out tableNode) && tableNode != null)\n           {\n                foreach (var tg in GetTableGroupRowsNodes(tableNode, \"Footer\", (s) => \"GF_\" + s, true))\n                    resultSections.Add(tg.Key, tg.Value);\n\n           }\n\n           if (mainSections.TryGetValue(\"Footer\", out tableNode) && tableNode != null)\n           {\n               resultSections.Add(\"Footer\", GetTableRowsNodes(GetNamedChildNode(tableNode, \"TableRows\")));\n           }\n\n\n            return resultSections;\n\n        }\n        \n        private List<XmlNode> GetTableRows(XmlNode xNode)\n        {\n            List<XmlNode> trs = new List<XmlNode>();\n\n            XmlNode tblGroups = null, header = null, footer = null, details = null;\n\n            // Find the major groups that have TableRows\n            foreach (XmlNode cNode in xNode)\n            {\n                if (cNode.NodeType != XmlNodeType.Element)\n                    continue;\n                switch (cNode.Name)\n                {\n                    case \"Header\":\n                        header = cNode;\n                        break;\n                    case \"Details\":\n                        details = cNode;\n                        break;\n                    case \"Footer\":\n                        footer = cNode;\n                        break;\n                    case \"TableGroups\":\n                        tblGroups = cNode;\n                        break;\n                }\n            }\n            GetTableRowsAdd(GetNamedChildNode(header, \"TableRows\"), trs);\n            GetTableGroupsRows(tblGroups, trs, \"Header\", false);\n            GetTableRowsAdd(GetNamedChildNode(details, \"TableRows\"), trs);\n            GetTableGroupsRows(tblGroups, trs, \"Footer\", true);\n            GetTableRowsAdd(GetNamedChildNode(footer, \"TableRows\"), trs);\n\n            return trs;\n        }\n\n        private void GetTableGroupsRows(XmlNode xNode, List<XmlNode> trs, string name, bool reverse)\n        {\n            if (xNode == null)\n                return;\n\n\t\t\tIEnumerable<XmlNode> childs;\n\t\t\tif (reverse) //Need for correct footer order in nested groups\n\t\t\t\tchilds = xNode.ChildNodes.Cast<XmlNode>().Reverse();\n\t\t\telse\n\t\t\t\tchilds = xNode.ChildNodes.Cast<XmlNode>();\n\n            foreach (XmlNode xNodeLoop in childs)\n            {\n                if (xNodeLoop.NodeType == XmlNodeType.Element &&\n                    xNodeLoop.Name == \"TableGroup\")\n                {\n                    XmlNode n = GetNamedChildNode(xNodeLoop, name);\n                    if (n == null)\n                        continue;\n                    n = GetNamedChildNode(n, \"TableRows\");\n                    if (n == null)\n                        continue;\n\n                    GetTableRowsAdd(n, trs);\n                }\n            }\n\n        }\n\n        private Dictionary<string,List<XmlNode>> GetTableGroupRowsNodes(XmlNode xNode,string sectionGroup,Func<string,string> groupNameKey, bool reverse)\n        {\n            Dictionary<string, List<XmlNode>> result = new Dictionary<string, List<XmlNode>>();\n\n\t\t\tIEnumerable<XmlNode> childs; \n\t\t\tif (reverse) //Need for correct footer order in nested groups\n\t\t\t\tchilds = xNode.ChildNodes.Cast<XmlNode>().Reverse();\n\t\t\telse\n\t\t\t\tchilds = xNode.ChildNodes.Cast<XmlNode>();\n\n            foreach (XmlNode xNodeLoop in childs)\n            {\n                if (xNodeLoop.NodeType == XmlNodeType.Element &&\n                    xNodeLoop.Name == \"TableGroup\")\n                {\n\n                    XmlNode groupNode = GetNamedChildNode(xNodeLoop, \"Grouping\");\n                    XmlAttribute groupName = groupNode.Attributes[\"Name\"];\n                    XmlNode headerNode = GetNamedChildNode(xNodeLoop, sectionGroup);\n                    if (headerNode != null)\n                    {\n                        result.Add( groupNameKey(groupName.InnerText), GetTableRowsNodes(GetNamedChildNode(headerNode, \"TableRows\")));\n                    }\n                }\n            }\n            return result;\n        }\n        private void GetTableRowsAdd(XmlNode xNode, List<XmlNode> trs)\n        {\n            if (xNode == null)\n                return;\n            foreach (XmlNode xNodeLoop in xNode.ChildNodes)\n            {\n                if (xNodeLoop.NodeType == XmlNodeType.Element &&\n                    xNodeLoop.Name == \"TableRow\")\n                {\n                    trs.Add(xNodeLoop);\n                }\n            }\n        }\n        private List<XmlNode> GetTableRowsNodes(XmlNode xNode)\n        {\n            if (xNode == null)\n                return null;\n\n            List<XmlNode> result = new List<XmlNode>();\n\n            foreach (XmlNode xNodeLoop in xNode.ChildNodes)\n            {\n                if (xNodeLoop.NodeType == XmlNodeType.Element &&\n                    xNodeLoop.Name == \"TableRow\")\n                {\n                    result.Add( xNodeLoop);\n                }\n            }\n            return result;\n        }\n\n        private float GetTableRowsHeight(List<XmlNode> trs)\n\t\t{\n\t\t\tfloat h=0;\n\t\t\tforeach (XmlNode tr in trs)\n\t\t\t{\n\t\t\t\tXmlNode cNode = GetNamedChildNode(tr, \"Height\");\n\t\t\t\tif (cNode != null)\n\t\t\t\t\th += GetSize(cNode.InnerText);\n\t\t\t}\n\t\t\treturn h;\n\t\t}\n\n\t\tprivate float[] GetTableColumnWidths(XmlNode xNode)\n\t\t{\n\t\t\tif (xNode == null)\n\t\t\t\treturn new float[0];\n\n            List<float> cl = new List<float>();\n\t\t\tforeach (XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType == XmlNodeType.Element && \n\t\t\t\t\txNodeLoop.Name == \"TableColumn\")\n\t\t\t\t{\n\t\t\t\t\tXmlNode cNode = GetNamedChildNode(xNodeLoop, \"Width\");\n\t\t\t\t\tif (cNode != null)\n\t\t\t\t\t\tcl.Add(GetSize(cNode.InnerText));\n\t\t\t\t}\n\t\t\t}\n\t\t\tfloat[] r = cl.ToArray();\n\t\t\treturn r;\n\t\t}\n\n\t\tprivate async Task<RectangleF> DrawTextbox(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tStyleInfo si = await GetStyleInfo(xNode);\n\t\t\tif (si.Color == Color.Empty)\n\t\t\t\tsi.Color = Color.Black;\n\n\t\t\tXmlNode v = GetNamedChildNode(xNode, \"Value\");\n\t\t\tstring t = v == null? \"\": v.InnerText;\n\t\t\tRectangleF ir = GetReportItemRect(xNode, r);\n\t\t\tDrawString(t, si, ir, !t.StartsWith(\"=\"));\n\t\t\treturn ir;\n\t\t}\n\n        private void DrawMargins(RectangleF behindPage)\n        {\n            StyleInfo si = new StyleInfo();\n            si.BackgroundColor = AREABACKCOLOR;\n            DrawBackground(behindPage, si);\n        } \n\n        //private void DrawMargins(float lowerEdge) //Josh: Added Lower Edge so that the area would be filled behind the page. \n        //{\n        //    // left margin\n        //    // left margin //Removed Left Margin, as right margin will fill full beind page\n        //    //RectangleF m = new RectangleF(0, 0, LEFTGAP, /*TotalPageHeight + LEFTGAP*/ lowerEdge); //Josh: Add a margin on bottom too. \n        //    StyleInfo si = new StyleInfo();\n        //    si.BackgroundColor = Color.LightGray;\n        //    si.BackgroundColor = AREABACKCOLOR; //Josh: Changed to use variable to ease page customizing. \n\n        //    //Full Margin // right margin\n        //    RectangleF m = new RectangleF(/*pWidth - rMargin*/0, 0, PointsX(Width), /*TotalPageHeight + LEFTGAP*/ lowerEdge); //Josh: Add a margin on bottom too. \n        //    DrawBackground(m, si);\n        //}\n\n\t\tprivate float TotalPageHeight\n\t\t{\n\t\t\tget {return pHeight;}\t// eventually we'll need to add in the sizes of the separating bars\n\t\t}\n\n        // \"ReportParameter\", \"Name\", pname\n        internal XmlNode GetNamedChildNode(XmlNode xNode, string elementName, string attributeName)\n        {\n            // look for the parameter\n            // e.g. <ReportParameters><ReportParameter Name=\"BarcodeType\">...\n            if (xNode == null)\n                return null;\n            foreach (XmlNode cNode in xNode.ChildNodes)\n            {\n                if (cNode.NodeType == XmlNodeType.Element &&\n                    cNode.Name == elementName)\n                {\n                    System.Xml.XmlAttribute na = cNode.Attributes[attributeName];\n                    if (na != null && na.Value == attributeName)\n                        return cNode; // found it   \n                }\n            }\n            return null;\n        }\n        \n\t\tinternal XmlNode GetNamedChildNode(XmlNode xNode, string name)\n\t\t{\n\t\t\tif (xNode == null)\n\t\t\t\treturn null;\n\n\t\t\tforeach (XmlNode cNode in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (cNode.NodeType == XmlNodeType.Element && \n\t\t\t\t\tcNode.Name == name)\n\t\t\t\t\treturn cNode;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the named child node; if not there it is created\n\t\t/// </summary>\n\t\t/// <param name=\"xNode\"></param>\n\t\t/// <param name=\"name\"></param>\n\t\t/// <returns></returns>\n\t\tinternal XmlNode GetCreateNamedChildNode(XmlNode xNode, string name)\n\t\t{\n\t\t\tif (xNode == null)\t\t// Must have parent to create\n\t\t\t\treturn null;\n\n\t\t\tXmlNode node = GetNamedChildNode(xNode, name);\n\t\t\tif (node == null)\n\t\t\t\tnode = CreateElement(xNode, name, null);\n\t\t\treturn node;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the named child node; if not there it is created and the default is applied\n\t\t/// </summary>\n\t\t/// <param name=\"xNode\"></param>\n\t\t/// <param name=\"name\"></param>\n\t\t/// <param name=\"def\"></param>\n\t\t/// <returns></returns>\n\t\tinternal XmlNode GetCreateNamedChildNode(XmlNode xNode, string name, string def)\n\t\t{\n\t\t\tif (xNode == null)\t\t// Must have parent to create\n\t\t\t\treturn null;\n\n\t\t\tXmlNode node = GetNamedChildNode(xNode, name);\n\t\t\tif (node == null)\n\t\t\t{\n\t\t\t\tnode = CreateElement(xNode, name, null);\n\t\t\t\tif (def != null)\n\t\t\t\t\tnode.InnerText = def;\n\t\t\t}\n\n\t\t\treturn node;\n\t\t}\n\n\t\tinternal async Task<StyleInfo> GetStyleInfo(XmlNode xNode)\n\t\t{\n\t\t\tStyleInfo si = new StyleInfo();\n\t\t\tXmlNode sNode= this.GetNamedChildNode(xNode, \"Style\");\n\t\t\tif (sNode == null)\n\t\t\t\treturn si;\n\n\t\t\tforeach(XmlNode xNodeLoop in sNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"BorderColor\":\n\t\t\t\t\t\tGetStyleInfoBorderColor(xNodeLoop, si);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"BorderStyle\":\n\t\t\t\t\t\tGetStyleInfoBorderStyle(xNodeLoop, si);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"BorderWidth\":\n\t\t\t\t\t\tGetStyleInfoBorderWidth(xNodeLoop, si);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"BackgroundColor\":\n\t\t\t\t\t\tsi.BackgroundColor = GetStyleColor(xNodeLoop.InnerText);\n                        if (si.BackgroundColor.IsEmpty)\n                            si.BackgroundColorText = xNodeLoop.InnerText;\n                        break;\n\t\t\t\t\tcase \"BackgroundGradientType\":\n\t\t\t\t\t\tsi.BackgroundGradientType = StyleInfo.GetBackgroundGradientType(xNodeLoop.InnerText, BackgroundGradientTypeEnum.None);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"BackgroundGradientEndColor\":\n\t\t\t\t\t\tsi.BackgroundGradientEndColor = GetStyleColor(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"BackgroundImage\":\n\t\t\t\t\t\tawait GetStyleInfoBackgroundImage(xNodeLoop, si);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"FontStyle\":\n\t\t\t\t\t\tsi.FontStyle = StyleInfo.GetFontStyle(xNodeLoop.InnerText, FontStyleEnum.Normal);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"FontFamily\":\n\t\t\t\t\t\tsi.FontFamily = xNodeLoop.InnerText[0] == '='? \"Arial\": xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"FontSize\":\n\t\t\t\t\t\tsi.FontSize = xNodeLoop.InnerText[0] == '='? 10: GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"FontWeight\":\n\t\t\t\t\t\tsi.FontWeight = StyleInfo.GetFontWeight(xNodeLoop.InnerText, FontWeightEnum.Normal);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Format\":\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"TextDecoration\":\n\t\t\t\t\t\tsi.TextDecoration = StyleInfo.GetTextDecoration(xNodeLoop.InnerText, TextDecorationEnum.None);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"TextAlign\":\n\t\t\t\t\t\tsi.TextAlign = StyleInfo.GetTextAlign(xNodeLoop.InnerText, TextAlignEnum.General);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"VerticalAlign\":\n\t\t\t\t\t\tsi.VerticalAlign = StyleInfo.GetVerticalAlign(xNodeLoop.InnerText, VerticalAlignEnum.Middle);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Color\":\n\t\t\t\t\t\tsi.Color = GetStyleColor(xNodeLoop.InnerText);\n                        if (si.Color.IsEmpty)\n                            si.ColorText = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"PaddingLeft\":\n\t\t\t\t\t\tsi.PaddingLeft = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"PaddingRight\":\n\t\t\t\t\t\tsi.PaddingRight = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"PaddingTop\":\n\t\t\t\t\t\tsi.PaddingTop = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"PaddingBottom\":\n\t\t\t\t\t\tsi.PaddingBottom = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"LineHeight\":\n\t\t\t\t\t\tsi.LineHeight = GetSize(xNodeLoop.InnerText); \n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Direction\":\n\t\t\t\t\t\tsi.Direction = StyleInfo.GetDirection(xNodeLoop.InnerText, DirectionEnum.LTR);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"WritingMode\":\n\t\t\t\t\t\tsi.WritingMode = StyleInfo.GetWritingMode(xNodeLoop.InnerText, WritingModeEnum.lr_tb);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Language\":\n\t\t\t\t\t\tsi.Language = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"UnicodeBiDi\":\n\t\t\t\t\t\tsi.UnicodeBiDirectional = StyleInfo.GetUnicodeBiDirectional(xNodeLoop.InnerText, UnicodeBiDirectionalEnum.Normal);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Calendar\":\n\t\t\t\t\t\tsi.Calendar = StyleInfo.GetCalendar(xNodeLoop.InnerText, CalendarEnum.Gregorian);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"NumeralLanguage\":\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"NumeralVariant\":\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn si;\n\t\t}\n\n\t\tprivate Color GetStyleColor(string c)\n\t\t{\n\t\t\tif (c == null || c.Length < 1 || c[0] == '=')\n\t\t\t\treturn Color.Empty;\n\t\t\tColor clr;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tclr = ColorTranslator.FromHtml(c);\n\t\t\t}\n\t\t\tcatch\n\t\t\t{\n\t\t\t\tclr = Color.White;\n\t\t\t}\n\n\t\t\treturn clr;\n\t\t}\n\n\t\tprivate void GetStyleInfoBorderColor(XmlNode xNode, StyleInfo si)\n\t\t{\n\t\t\tColor dColor=Color.Black;\n\t\t\tsi.BColorLeft = si.BColorRight = si.BColorTop = si.BColorBottom = Color.Empty;\n\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Default\":\n\t\t\t\t\t\tdColor = GetStyleColor(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Left\":\n\t\t\t\t\t\tsi.BColorLeft = GetStyleColor(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Right\":\n\t\t\t\t\t\tsi.BColorRight = GetStyleColor(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Top\":\n\t\t\t\t\t\tsi.BColorTop = GetStyleColor(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Bottom\":\n\t\t\t\t\t\tsi.BColorBottom = GetStyleColor(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (si.BColorLeft == Color.Empty)\n\t\t\t\tsi.BColorLeft = dColor;\n\t\t\tif (si.BColorRight == Color.Empty)\n\t\t\t\tsi.BColorRight = dColor;\n\t\t\tif (si.BColorTop == Color.Empty)\n\t\t\t\tsi.BColorTop = dColor;\n\t\t\tif (si.BColorBottom == Color.Empty)\n\t\t\t\tsi.BColorBottom = dColor;\n\t\t}\n\n\t\tprivate void GetStyleInfoBorderStyle(XmlNode xNode, StyleInfo si)\n\t\t{\n\t\t\tBorderStyleEnum def = BorderStyleEnum.None;\n\t\t\tstring l=null;\n\t\t\tstring r=null;\n\t\t\tstring t=null;\n\t\t\tstring b=null;\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Default\":\n\t\t\t\t\t\tdef = GetBorderStyle(xNodeLoop.InnerText, BorderStyleEnum.None);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Left\":\n\t\t\t\t\t\tl = xNodeLoop.InnerText; \n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Right\":\n\t\t\t\t\t\tr = xNodeLoop.InnerText; \n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Top\":\n\t\t\t\t\t\tt = xNodeLoop.InnerText; \n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Bottom\":\n\t\t\t\t\t\tb = xNodeLoop.InnerText; \n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tsi.BStyleLeft = l == null? def: GetBorderStyle(l, def);\n\t\t\tsi.BStyleRight = r == null? def: GetBorderStyle(r, def);\n\t\t\tsi.BStyleBottom = b == null? def: GetBorderStyle(b, def);\n\t\t\tsi.BStyleTop = t == null? def: GetBorderStyle(t, def);\n\t\t}\n\n\t\t// return the BorderStyleEnum given a particular string value\n\t\tBorderStyleEnum GetBorderStyle(string v, BorderStyleEnum def)\n\t\t{\n\t\t\tBorderStyleEnum bs;\n            try\n            {\n                bs = (BorderStyleEnum)Enum.Parse(typeof(BorderStyleEnum), v);\n            }\n            catch\n            {\n                bs = def;\n            }\n            return bs; \n\t\t}\n\n\t\tprivate void GetStyleInfoBorderWidth(XmlNode xNode, StyleInfo si)\n\t\t{\n\t\t\tstring l=null;\n\t\t\tstring r=null;\n\t\t\tstring t=null;\n\t\t\tstring b=null;\n\t\t\tfloat def= GetSize(\"1pt\");\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Default\":\n\t\t\t\t\t\tdef = GetSize(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Left\":\n\t\t\t\t\t\tl = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Right\":\n\t\t\t\t\t\tr = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Top\":\n\t\t\t\t\t\tt = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Bottom\":\n\t\t\t\t\t\tb = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tsi.BWidthTop = t == null? def: GetSize(t);\n\t\t\tsi.BWidthBottom = b == null? def: GetSize(b);\n\t\t\tsi.BWidthLeft = l == null? def: GetSize(l);\n\t\t\tsi.BWidthRight = r == null? def: GetSize(r);\n\t\t}\n\n        private async Task GetStyleInfoBackgroundImage(XmlNode xNode, StyleInfo si)\n        {\n            //  TODO: this is problematic since it require a PageImage\n            Stream strm = null;\n            System.Drawing.Image im = null;\n            ImageRepeat repeat = ImageRepeat.Repeat;\n            string source = null;\n            string val = null;\n            try\n            {\n                foreach (XmlNode xNodeLoop in xNode.ChildNodes)\n                {\n                    if (xNodeLoop.NodeType != XmlNodeType.Element)\n                        continue;\n                    switch (xNodeLoop.Name)\n                    {\t// TODO\n                        case \"Source\":\n                            if (!xNodeLoop.InnerText.StartsWith(\"=\"))\n                            {\n                                if (xNodeLoop.InnerText == \"External\" ||\n                                    xNodeLoop.InnerText == \"Embedded\")\n                                    source = xNodeLoop.InnerText;\n                            }\n                            break;\n                        case \"Value\":\n                            if (!xNodeLoop.InnerText.StartsWith(\"=\"))\n                            {\n                                val = xNodeLoop.InnerText;\n                            }\n                            break;\n                        case \"MIMEType\":    // MimeType doesn't help us\n                            break;\n                        case \"BackgroundRepeat\":\n                            switch (xNodeLoop.InnerText.ToLowerInvariant())\n                            {\n                                case \"repeat\":\n                                    repeat = ImageRepeat.Repeat;\n                                    break;\n                                case \"norepeat\":\n                                    repeat = ImageRepeat.NoRepeat;\n                                    break;\n                                case \"repeatx\":\n                                    repeat = ImageRepeat.RepeatX;\n                                    break;\n                                case \"repeaty\":\n                                    repeat = ImageRepeat.RepeatY;\n                                    break;\n                            }\n                            break;\n                    }\n                }\n                if (source == null || val == null)\n                    return;     // don't have image to show in background (at least at design time)\n                if (source == \"External\")\n                {\n                    if (val.StartsWith(\"http:\") ||\n                        val.StartsWith(\"file:\") ||\n                        val.StartsWith(\"https:\"))\n                    {\n                        using HttpClient httpClient = new HttpClient();\n\t\t\t\t\t\thttpClient.AddMajorsilenceReportingUserAgent();\n                        HttpResponseMessage response = await httpClient.GetAsync(val);\n                        response.EnsureSuccessStatusCode();\n                        strm = await response.Content.ReadAsStreamAsync();\n                    }\n                    else\n                        strm = new FileStream(val, FileMode.Open, FileAccess.Read, FileShare.Read);\n                    im = System.Drawing.Image.FromStream(strm);\n                }\n                else   // Embedded case\n                {\n                    im = GetImageEmbedded(val);\n                }\n                int height = im.Height;\t\t\t\t\t\t\t// save height and width\n                int width = im.Width;\n                MemoryStream ostrm = new MemoryStream();\n                System.Drawing.Imaging.ImageCodecInfo[] info;\n                info = ImageCodecInfo.GetImageEncoders();\n                EncoderParameters encoderParameters;\n                encoderParameters = new EncoderParameters(1);\n                encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L);\n                System.Drawing.Imaging.ImageCodecInfo codec = null;\n                for (int i = 0; i < info.Length; i++)\n                {\n                    if (info[i].FormatDescription == \"JPEG\")\n                    {\n                        codec = info[i];\n                        break;\n                    }\n                }\n                im.Save(ostrm, codec, encoderParameters);\n\n                byte[] ba = ostrm.ToArray();\n                ostrm.Close();\n                si.BackgroundImage = new PageImage(ImageFormat.Jpeg, ba, width, height);\t// Create an image\n                si.BackgroundImage.Repeat = repeat;\n            }\n            catch\n            {\n                // we just won't end up drawing the background image;\n            }\n            finally\n            {\n                if (strm != null)\n                    strm.Close();\n                if (im != null)\n                    im.Dispose();\n            }\n        }\n\n\t\tinternal float GetSize(XmlNode pNode, string name)\n\t\t{\n\t\t\tXmlNode xNode = this.GetNamedChildNode(pNode, name);\n\t\t\tif (xNode == null)\n\t\t\t\treturn 0;\n\t\t\treturn GetSize(xNode.InnerText);\n\t\t}\n\n\t\tstatic internal float GetSize(string t)\n\t\t{\n\t\t\tif (t == null || t.Length == 0 || t[0] == '=')\n\t\t\t\treturn 0;\n\n\t\t\t// Size is specified in CSS Length Units\n\t\t\t// format is <decimal number nnn.nnn><optional space><unit>\n\t\t\t// in -> inches (1 inch = 2.54 cm)\n\t\t\t// cm -> centimeters (.01 meters)\n\t\t\t// mm -> millimeters (.001 meters)\n\t\t\t// pt -> points (1 point = 1/72 inches)\n\t\t\t// pc -> Picas (1 pica = 12 points)\n\t\t\tt = t.Trim();\n\t\t\tint space = t.LastIndexOf(' '); \n\t\t\tstring n=\"\";\t\t\t\t\t// number string\n\t\t\tstring u=\"in\";\t\t\t\t\t// unit string\n\t\t\tdecimal d;\t\t\t\t\t\t// initial number\n\t\t\ttry\t\t// Convert.ToDecimal can be very picky\n\t\t\t{\n\t\t\t\tif (space != -1)\t// any spaces\n\t\t\t\t{\n\t\t\t\t\tn = t.Substring(0,space).Trim();\t// number string\n\t\t\t\t\tu = t.Substring(space).Trim();\t// unit string\n\t\t\t\t}\n\t\t\t\telse if (t.Length >= 3)\n\t\t\t\t{\n\t\t\t\t\tn = t.Substring(0, t.Length-2);\n\t\t\t\t\tu = t.Substring(t.Length-2);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// Illegal unit\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\td = Convert.ToDecimal(n, NumberFormatInfo.InvariantInfo);\n\t\t\t}\n\t\t\tcatch\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tint size;\n\t\t\tswitch(u)\t\t\t// convert to millimeters\n\t\t\t{\n\t\t\t\tcase \"in\":\n\t\t\t\t\tsize = (int) (d * 2540m);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"cm\":\n\t\t\t\t\tsize = (int) (d * 1000m);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"mm\":\n\t\t\t\t\tsize = (int) (d * 100m);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"pt\":\n\t\t\t\t\treturn Convert.ToSingle(d);\n\t\t\t\tcase \"pc\":\n\t\t\t\t\tsize = (int) (d * (2540m / POINTSIZEM * 12m));\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t \n\t\t\t\t\t// Illegal unit\n\t\t\t\t\tsize = (int) (d * 2540m);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\n\t\t\t// and return as points\n\t\t\treturn (float) ((double) size / 2540.0 * POINTSIZED);\n\t\t}\n\n\t\tprivate void DrawBackground(System.Drawing.RectangleF rect, StyleInfo si)\n\t\t{\n\t\t\tif (!rect.IntersectsWith(_clip))\n\t\t\t\treturn;\n\t\t\tRectangleF dr = new RectangleF(rect.X - _hScroll, rect.Y - _vScroll, rect.Width, rect.Height);\n\n\t\t\tLinearGradientBrush linGrBrush = null;\n\t\t\tSolidBrush sb=null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tif (si.BackgroundGradientType != BackgroundGradientTypeEnum.None &&\n\t\t\t\t\t!si.BackgroundGradientEndColor.IsEmpty &&\n\t\t\t\t\t!si.BackgroundColor.IsEmpty)\n\t\t\t\t{\n\t\t\t\t\tColor c = si.BackgroundColor;\t\n\t\t\t\t\tColor ec = si.BackgroundGradientEndColor; \t\n\n\t\t\t\t\tswitch (si.BackgroundGradientType)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase BackgroundGradientTypeEnum.LeftRight:\n\t\t\t\t\t\t\tlinGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.Horizontal); \n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase BackgroundGradientTypeEnum.TopBottom:\n\t\t\t\t\t\t\tlinGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.Vertical); \n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase BackgroundGradientTypeEnum.Center:\n\t\t\t\t\t\t\tlinGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.Horizontal); \n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase BackgroundGradientTypeEnum.DiagonalLeft:\n\t\t\t\t\t\t\tlinGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.ForwardDiagonal); \n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase BackgroundGradientTypeEnum.DiagonalRight:\n\t\t\t\t\t\t\tlinGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.BackwardDiagonal); \n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase BackgroundGradientTypeEnum.HorizontalCenter:\n\t\t\t\t\t\t\tlinGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.Horizontal); \n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase BackgroundGradientTypeEnum.VerticalCenter:\n\t\t\t\t\t\t\tlinGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.Vertical); \n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (linGrBrush != null)\n\t\t\t\t{\n\t\t\t\t\tg.FillRectangle(linGrBrush, dr);\n\t\t\t\t}\n\t\t\t\telse if (!si.BackgroundColor.IsEmpty)\n\t\t\t\t{\n\t\t\t\t\tsb = new SolidBrush(si.BackgroundColor);\n\t\t\t\t\tg.FillRectangle(sb, dr);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (linGrBrush != null)\n\t\t\t\t\tlinGrBrush.Dispose();\n\t\t\t\tif (sb != null)\n\t\t\t\t\tsb.Dispose();\n\t\t\t}\n\n            if (si.BackgroundImage == null)\n                return;\n            // Handle any background image\n            DrawImageBackground(si.BackgroundImage, si,rect);\n\t\t\treturn;\n\t\t}\n\n        private void DrawImageBackground(PageImage pi, StyleInfo si, RectangleF r)\n        {\n            Stream strm = null;\n            System.Drawing.Image im = null;\n            try\n            {\n                RectangleF r2 = new RectangleF(r.Left + si.PaddingLeft,\n                    r.Top + si.PaddingTop,\n                    r.Width - (si.PaddingLeft + si.PaddingRight),\n                    r.Height - (si.PaddingTop + si.PaddingBottom));\n\n                strm = new MemoryStream(pi.GetImageData((int)r2.Width, (int)r2.Height));\n                im = System.Drawing.Image.FromStream(strm);\n\n                int repeatX = 0;\n                int repeatY = 0;\n                float imW = PointsX(pi.SamplesW);\n                float imH = PointsY(pi.SamplesH);\n                switch (pi.Repeat)\n                {\n                    case ImageRepeat.Repeat:\n                        repeatX = (int)Math.Floor(r2.Width / imW);\n                        repeatY = (int)Math.Floor(r2.Height / imH);\n                        break;\n                    case ImageRepeat.RepeatX:\n                        repeatX = (int)Math.Floor(r2.Width / imW);\n                        repeatY = 1;\n                        break;\n                    case ImageRepeat.RepeatY:\n                        repeatY = (int)Math.Floor(r2.Height / imH);\n                        repeatX = 1;\n                        break;\n                    case ImageRepeat.NoRepeat:\n                    default:\n                        repeatX = repeatY = 1;\n                        break;\n                }\n\n                //make sure the image is drawn at least 1 times \n                repeatX = Math.Max(repeatX, 1);\n                repeatY = Math.Max(repeatY, 1);\n\n                RectangleF dr = new RectangleF(r2.X - _hScroll, r2.Y - _vScroll, r2.Width, r2.Height);\n                float startX = dr.Left;\n                float startY = dr.Top;\n\n                Region saveRegion = g.Clip;\n                Region clipRegion = new Region(g.Clip.GetRegionData());\n \n                clipRegion.Intersect(dr);\n                g.Clip = clipRegion;\n\n                for (int i = 0; i < repeatX; i++)\n                {\n                    for (int j = 0; j < repeatY; j++)\n                    {\n                        float currX = startX + i * imW;\n                        float currY = startY + j * imH;\n                        g.DrawImage(im, new RectangleF(currX, currY, imW, imH));\n                    }\n                }\n                g.Clip = saveRegion;\n            }\n            finally\n            {\n                if (strm != null)\n                    strm.Close();\n                if (im != null)\n                    im.Dispose();\n            }\n        }\n\n\t\tprivate void DrawBorder(StyleInfo si, RectangleF r)\n\t\t{\n\t\t\tif (!r.IntersectsWith(_clip))\n\t\t\t\treturn;\n\t\t\tif (r.Height <= 0 || r.Width <= 0)\t\t// no bounding box to use\n\t\t\t\treturn;\n\n\t\t\tDrawLine(si.BColorTop, si.BStyleTop, si.BWidthTop, r.X, r.Y, r.Right, r.Y);\n\n\t\t\tDrawLine(si.BColorRight, si.BStyleRight, si.BWidthRight, r.Right, r.Y, r.Right, r.Bottom);\n\t\t\t\n\t\t\tDrawLine(si.BColorLeft, si.BStyleLeft, si.BWidthLeft, r.X, r.Y, r.X, r.Bottom);\n\t\t\t\n\t\t\tDrawLine(si.BColorBottom, si.BStyleBottom, si.BWidthBottom, r.X, r.Bottom, r.Right, r.Bottom);\n\n\t\t\treturn;\n\t\t\t\n\t\t}\n\n\t\tprivate void DrawCircle(Color c, BorderStyleEnum bs, float penWidth, float x, float y, float d, bool bFill)  \n\t\t{\n\t\t\tif (bs == BorderStyleEnum.None || c.IsEmpty || d <= 0)\t// nothing to draw\n\t\t\t\treturn;\n\n\t\t\t// adjust coordinates for scrolling\n\t\t\tx -= _hScroll;\n\t\t\ty -= _vScroll;\n\n\t\t\tPen p=null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tp = new Pen(c, penWidth);\n\t\t\t\tswitch (bs)\n\t\t\t\t{\n\t\t\t\t\tcase BorderStyleEnum.Dashed:\n\t\t\t\t\t\tp.DashStyle = DashStyle.Dash;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BorderStyleEnum.Dotted:\n\t\t\t\t\t\tp.DashStyle = DashStyle.Dot;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BorderStyleEnum.Double:\n\t\t\t\t\tcase BorderStyleEnum.Groove:\n\t\t\t\t\tcase BorderStyleEnum.Inset:\n\t\t\t\t\tcase BorderStyleEnum.Solid:\n\t\t\t\t\tcase BorderStyleEnum.Outset:\n\t\t\t\t\tcase BorderStyleEnum.Ridge:\n\t\t\t\t\tcase BorderStyleEnum.WindowInset:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tp.DashStyle = DashStyle.Solid;\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (bFill)\n\t\t\t\t\tg.FillEllipse(Brushes.Black, x, y, d, d); \n\t\t\t\telse\n\t\t\t\t\tg.DrawEllipse(p, x, y, d, d);\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (p != null)\n\t\t\t\t\tp.Dispose();\n\t\t\t}\n\n\t\t}\n\n\t\tprivate void DrawLine(Color c, BorderStyleEnum bs, float w,  \n\t\t\t\t\t\t\t\tfloat x, float y, float x2, float y2)\n\t\t{\n            Color lc = c;\n            if (this.ShowReportItemOutline)\n            {   // force an outline\n                lc = (bs == BorderStyleEnum.None || c.IsEmpty)? Color.LightGray : c;\n                if (w <= 0)\n                    w = 1;\n            }\n            else if (bs == BorderStyleEnum.None || c.IsEmpty || w <= 0)\t// nothing to draw\n            {\n                return;\n            }\n\t\t\t// adjust coordinates for scrolling\n\t\t\tx -= _hScroll;\n\t\t\ty -= _vScroll;\n\t\t\tx2 -= _hScroll;\n\t\t\ty2 -= _vScroll;\n\n\t\t\tPen p=null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tp = new Pen(lc, w);\n\t\t\t\tswitch (bs)\n\t\t\t\t{\n\t\t\t\t\tcase BorderStyleEnum.Dashed:\n\t\t\t\t\t\tp.DashStyle = DashStyle.Dash;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BorderStyleEnum.Dotted:\n\t\t\t\t\t\tp.DashStyle = DashStyle.Dot;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BorderStyleEnum.Double:\n\t\t\t\t\tcase BorderStyleEnum.Groove:\n\t\t\t\t\tcase BorderStyleEnum.Inset:\n\t\t\t\t\tcase BorderStyleEnum.Solid:\n\t\t\t\t\tcase BorderStyleEnum.Outset:\n\t\t\t\t\tcase BorderStyleEnum.Ridge:\n\t\t\t\t\tcase BorderStyleEnum.WindowInset:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tp.DashStyle = DashStyle.Solid;\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tg.DrawLine(p,  x, y, x2, y2);\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (p != null)\n\t\t\t\t\tp.Dispose();\n\t\t\t}\n\n\t\t}\n\n\t\tprivate void DrawString(string text, StyleInfo si, RectangleF r, bool bWrap = true)\n\t\t{\n\t\t\tif (!r.IntersectsWith(_clip))\n\t\t\t\treturn;\n\n\t\t\tFont drawFont = null;\n\t\t\tStringFormat drawFormat = null;\n\t\t\tBrush drawBrush = null;\n\t\t\tvar graphicsState = g.Save();\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\t// STYLE\n\t\t\t\tFontStyle fs = 0;\n\t\t\t\tif (si.FontStyle == FontStyleEnum.Italic)\n\t\t\t\t\tfs |= FontStyle.Italic;\n\n\t\t\t\tswitch (si.TextDecoration)\n\t\t\t\t{\n\t\t\t\t\tcase TextDecorationEnum.Underline:\n\t\t\t\t\t\tfs |= FontStyle.Underline;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase TextDecorationEnum.LineThrough:\n\t\t\t\t\t\tfs |= FontStyle.Strikeout;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase TextDecorationEnum.Overline:\n\t\t\t\t\tcase TextDecorationEnum.None:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// WEIGHT\n\t\t\t\tswitch (si.FontWeight)\n\t\t\t\t{\n\t\t\t\t\tcase FontWeightEnum.Bold:\n\t\t\t\t\tcase FontWeightEnum.Bolder:\n\t\t\t\t\tcase FontWeightEnum.W500:\n\t\t\t\t\tcase FontWeightEnum.W600:\n\t\t\t\t\tcase FontWeightEnum.W700:\n\t\t\t\t\tcase FontWeightEnum.W800:\n\t\t\t\t\tcase FontWeightEnum.W900:\n\t\t\t\t\t\tfs |= FontStyle.Bold;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (si.FontSize <= 0) // can't have zero length font; force to default\n\t\t\t\t\tsi.FontSize = 10;\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tdrawFont = new Font(si.FontFamily, si.FontSize, fs); // si.FontSize already in points\n\t\t\t\t}\n\t\t\t\tcatch (ArgumentException ae) // fonts that don't exist can throw exception; but we don't want it to\n\t\t\t\t{\n\t\t\t\t\ttext = ae.Message; // show the error msg (allows report designer to see error)\n\t\t\t\t\tdrawFont = new Font(\"Arial\", si.FontSize, fs); // if this throws exception; we'll let it\n\t\t\t\t}\n\n\t\t\t\t// ALIGNMENT\n\t\t\t\tdrawFormat = new StringFormat();\n\t\t\t\tif (!bWrap)\n\t\t\t\t\tdrawFormat.FormatFlags |= StringFormatFlags.NoWrap;\n\t\t\t\tswitch (si.TextAlign)\n\t\t\t\t{\n\t\t\t\t\tcase TextAlignEnum.Left:\n\t\t\t\t\t\tdrawFormat.Alignment = StringAlignment.Near;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase TextAlignEnum.Center:\n\t\t\t\t\t\tdrawFormat.Alignment = StringAlignment.Center;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase TextAlignEnum.Right:\n\t\t\t\t\t\tdrawFormat.Alignment = StringAlignment.Far;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tswitch (si.VerticalAlign)\n\t\t\t\t{\n\t\t\t\t\tcase VerticalAlignEnum.Top:\n\t\t\t\t\t\tdrawFormat.LineAlignment = StringAlignment.Near;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase VerticalAlignEnum.Middle:\n\t\t\t\t\t\tdrawFormat.LineAlignment = StringAlignment.Center;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase VerticalAlignEnum.Bottom:\n\t\t\t\t\t\tdrawFormat.LineAlignment = StringAlignment.Far;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tDrawBackground(r, si);\n\n\t\t\t\tif (si.WritingMode == WritingModeEnum.tb_rl)\n\t\t\t\t{\n\t\t\t\t\tdrawFormat.FormatFlags |= StringFormatFlags.DirectionRightToLeft;\n\t\t\t\t\tdrawFormat.FormatFlags |= StringFormatFlags.DirectionVertical;\n\t\t\t\t}\n\n\t\t\t\tRectangleF drawRectangle;\n\t\t\t\tswitch(si.WritingMode)\n\t\t\t\t{\n\t\t\t\t\tcase WritingModeEnum.lr_tb:\n\t\t\t\t\tcase WritingModeEnum.tb_rl:\n\t\t\t\t\t\tdrawRectangle = new RectangleF(\n\t\t\t\t\t\t\tr.Left + si.PaddingLeft - _hScroll,\n\t\t\t\t\t\t\tr.Top + si.PaddingTop - _vScroll,\n\t\t\t\t\t\t\tr.Width - si.PaddingLeft - si.PaddingRight,\n\t\t\t\t\t\t\tr.Height - si.PaddingTop - si.PaddingBottom\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase WritingModeEnum.tb_lr:\n\t\t\t\t\t\tdrawRectangle = new RectangleF(\n\t\t\t\t\t\t\t-r.Top - r.Height + si.PaddingBottom,\n\t\t\t\t\t\t\tr.Left + si.PaddingLeft,\n\t\t\t\t\t\t\tr.Height - si.PaddingTop - si.PaddingBottom,\n\t\t\t\t\t\t\tr.Width - si.PaddingLeft - si.PaddingRight\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new NotSupportedException($\"Writing mode {si.WritingMode} is not supported\");\n\t\t\t\t}\n\n\t\t\t\tif(si.WritingMode == WritingModeEnum.tb_lr)\n\t\t\t\t{\n\t\t\t\t\tg.RotateTransform(270);\n\t\t\t\t}\n\n\t\t\t\tdrawBrush = new SolidBrush(si.Color);\n\t\t\t\tg.DrawString(text, drawFont, drawBrush, drawRectangle, drawFormat);\n\t\t\t\tg.Restore(graphicsState);\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tdrawFont?.Dispose();\n\t\t\t\tdrawFormat?.Dispose();\n\t\t\t\tdrawBrush?.Dispose();\n\t\t\t}\n\n\t\t\tDrawBorder(si, r); // Draw the border if needed\n\t\t}\n\n\t\tinternal void PasteImage(XmlNode parent, System.Drawing.Bitmap img, PointF p)\n\t\t{\n            // Josh: Adds a default ZIndex of 1 to paste above \"background\". \n\t\t\tstring t = string.Format(NumberFormatInfo.InvariantInfo,\n                \"<ReportItems><Image><Source>Embedded</Source><Height>{0:0.00}in</Height><Width>{1:0.00}in</Width><Sizing>FitProportional</Sizing><Zindex>1</ZIndex></Image></ReportItems>\", \n\t\t\t\t\t\t\t\t\tPointsY(img.Height)/POINTSIZED, PointsX(img.Width)/POINTSIZED);\n\t\t\tPasteReportItems(parent, t, p);\n\t\t\tif (_SelectedReportItems.Count != 1)\t\n\t\t\t\treturn;\t\t\t\t\t\t\t\t\t// Paste must have failed\n\t\t\tXmlNode iNode = this._SelectedReportItems[0];\t\t// Get the just pasted image\n\t\t\t\n\t\t\t// Get the name; we'll use that as the embedded image name as well\n\t\t\tXmlAttribute xAttr = iNode.Attributes[\"Name\"];\n\t\t\tif (xAttr == null)\n\t\t\t\treturn;\n\t\t\tstring name = xAttr.Value;\n\t\t\tthis.SetElement(iNode, \"Value\", name);\n\n\t\t\tXmlNode rNode = this.GetReportNode();\n\t\t\tXmlNode eimages = this.GetCreateNamedChildNode(rNode, \"EmbeddedImages\");\n\t\t\tXmlNode image = this.CreateElement(eimages, \"EmbeddedImage\", null);\n\t\t\tthis.SetElementAttribute(image, \"Name\", name);\n\t\t\tthis.CreateElement(image, \"MIMEType\", \"image/png\");\t\t// always store in PNG format\n\n\t\t\tstring imagedata=null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tMemoryStream ostrm = new MemoryStream();\n\t\t\t\tImageFormat imf = ImageFormat.Png;\n\t\t\t\timg.Save(ostrm, imf);\n\t\t\t\tbyte[] ba = ostrm.ToArray();\n\t\t\t\tostrm.Close();\n\t\t\t\timagedata = Convert.ToBase64String(ba);\n\t\t\t}\n\t\t\tcatch\n\t\t\t{\n\t\t\t\timagedata=null;\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (img != null)\n\t\t\t\t\timg.Dispose();\n\t\t\t}\n\t\t\tif (imagedata != null)\n\t\t\t\tthis.CreateElement(image, \"ImageData\", imagedata);\n\t\t\treturn;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Normally used to replace the contents of a cell in a table\n\t\t/// </summary>\n\t\t/// <param name=\"hl\"></param>\n\t\t/// <param name=\"rItems\"></param>\n\t\tinternal void ReplaceReportItems(HitLocation hl, string rItems)\n\t\t{\n\t\t\tif (hl.HitNode == null)\n\t\t\t\treturn;\n\n\t\t\tXmlNode repItems = hl.HitNode.ParentNode;\n\t\t\tif (repItems.Name != \"ReportItems\")\n\t\t\t\treturn;\n\n\t\t\tXmlNode p = repItems.ParentNode;\n\t\t\tp.RemoveChild(repItems);\n\n\t\t\tPasteReportItems(p, rItems, hl.HitRelative);\n\t\t}\n\n\t\tinternal void PasteReportItems(XmlNode parent, string rItems, PointF p)\n\t\t{\n            if (this.ReportNames == null)                       // this will force names to be created before any paste\n                return;\n\n\t\t\tbool bTableCell = parent.Name == \"TableCell\";\t\t// inside of table no size should be specified\n\n\t\t\tXmlDocumentFragment fDoc = rDoc.CreateDocumentFragment();\n\t\t\tfDoc.InnerXml = rItems;\n\n\t\t\tXmlNode priNode = GetNamedChildNode(fDoc, \"ReportItems\");\n\t\t\tif (priNode == null)\n\t\t\t\treturn;\n\n\t\t\tPasteValidate(parent, priNode);\t\t\t\t// will throw exception if problem\n\n\t\t\t// Get the ReportItems node we need to paste into\n\t\t\tXmlNode riNode = this.GetCreateNamedChildNode(parent, \"ReportItems\");\n\n\t\t\tif (priNode.ChildNodes.Count > 1 && bTableCell)\t// if we're trying to paste multiple items in a\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//   cell we need to put a rectangle over it\n\t\t\t{\n\t\t\t\tXmlNode rectNode = this.CreateElement(riNode, \"Rectangle\", null);\n\t\t\t\tReportNames.GenerateName(rectNode);\t\t// generate a new name\n\t\t\t\triNode = this.CreateElement(rectNode, \"ReportItems\", null);\n\t\t\t}\n\n\t\t\t// We need to normalize the positions in the reportitems. Simple as 1, 2, 3\n\t\t\t// 1) Find the left most object and the top most object\n\t\t\t// 2) Adjust all objects positions\n\t\t\t// 3) Move the nodes into the proper ReportItems collection\n\n\t\t\t// 1) Find the left most and top most objects\n\t\t\tfloat left = float.MaxValue;\n\t\t\tfloat top = float.MaxValue;\n\t\t\tforeach (XmlNode ri in priNode)\n\t\t\t{\n                if (ri.NodeType != XmlNodeType.Element)\n                    continue;\n                RectangleF rf = this.GetReportItemRect(ri);\n\t\t\t\tif (left > rf.Left)\n\t\t\t\t\tleft = rf.Left;\n\t\t\t\tif (top > rf.Top)\n\t\t\t\t\ttop = rf.Top;\n\t\t\t}\n\t\t\t// 2) Adjust all objects positions\n\t\t\tforeach (XmlNode ri in priNode)\n\t\t\t{\n                if (ri.NodeType != XmlNodeType.Element)\n                    continue;\n\t\t\t\tif (bTableCell)\n\t\t\t\t{\n\t\t\t\t\tRemoveReportItemLTHW(ri);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tRectangleF rf = this.GetReportItemRect(ri);\n\t\t\t\t\tSetReportItemXY(ri, rf.Left - left + p.X, rf.Top - top + p.Y);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// 3) Move the nodes into the proper ReportItems collection\n\t\t\t// Loop thru and put all the report items into the main document\n\t\t\t// This loop is a little strange because when a node is appended to\n\t\t\t//   the main document it is removed from the fragment.   Thus you\n\t\t\t//   must continually grab the first child until all the children have\n\t\t\t//   been removed.\n\t\t\tthis.ClearSelected();\t\t// the new nodes end up selected\n\t\t\tfor(XmlNode ri = priNode.FirstChild; ri != null; ri = priNode.FirstChild)\n\t\t\t{\n\t\t\t\triNode.AppendChild(ri);\n\t\t\t\tPasteNewNames(ri);\n\t\t\t\tthis.AddSelection(ri);\n\t\t\t}\n\t\t}\n\n\t\tvoid PasteValidate(XmlNode parent, XmlNode pitems)\n\t\t{\n\t\t\t// check restriction on placing DataRegion or Subreport in pageheader or footer\n\t\t\tif (!this.InPageHeaderOrFooter(parent))\n\t\t\t\treturn;\n\n\t\t\tPasteValidateRecurse(pitems);\n\t\t}\n\n\t\tvoid PasteValidateRecurse(XmlNode pitems)\n\t\t{\n\t\t\tif (!pitems.HasChildNodes)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tforeach (XmlNode item in pitems.ChildNodes)\n\t\t\t{\n\t\t\t\tif (this.IsDataRegion(item))\n\t\t\t\t\tthrow new Exception(Strings.DesignXmlDraw_Error_DataRegionIntoHeaderFooter);\n\t\t\t\tif (item.Name == \"Subreport\")\n\t\t\t\t\tthrow new Exception(Strings.DesignXmlDraw_Error_SubreportIntoHeaderFooter);\n\t\t\t\tXmlNode ritems = this.GetNamedChildNode(item, \"ReportItems\");\n\t\t\t\tif (ritems != null)\n\t\t\t\t\tPasteValidateRecurse(ritems);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Normally used to replace the contents of a cell in a table with a Table, Matrix or Chart \n\t\t/// </summary>\n\t\t/// <param name=\"hl\"></param>\n\t\t/// <param name=\"rItems\"></param>\n\t\tinternal XmlNode ReplaceTableMatrixOrChart(HitLocation hl, string rTable)\n\t\t{\n\t\t\tif (hl.HitNode == null)\n\t\t\t\treturn null;\n\n\t\t\tXmlNode repItems = hl.HitNode.ParentNode;\n\t\t\tif (repItems.Name != \"ReportItems\")\n\t\t\t\treturn null;\n\t\t\t\n\t\t\tXmlNode p = repItems.ParentNode;\n\t\t\tp.RemoveChild(repItems);\n\n\t\t\treturn PasteTableMatrixOrChart(p, rTable, hl.HitRelative);\n\t\t}\n\n\t\tinternal XmlNode PasteTableMatrixOrChart(XmlNode parent, string sTable, PointF p)\n\t\t{\n            if (this.ReportNames == null)                       // this will force names to be created before any paste\n                return null;\n\n            XmlDocumentFragment fDoc = rDoc.CreateDocumentFragment();\n\t\t\ttry \n\t\t\t{\n\t\t\t\tfDoc.InnerXml = sTable;\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\tMessageBox.Show(e.Message, Strings.DesignXmlDraw_Show_XMLInvalid);\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tstring type;\n\t\t\tif (sTable.Substring(0, 6) == \"<Table\")\n\t\t\t\ttype = \"Table\";\n            else if (sTable.Substring(0, 9) == \"<fyi:Grid\")\n                type = \"fyi:Grid\";\n            else if (sTable.Substring(0, 7) == \"<Matrix\")\n\t\t\t\ttype = \"Matrix\";\n\t\t\telse if (sTable.Substring(0, 6) == \"<Chart\")\n\t\t\t\ttype = \"Chart\";\n\t\t\telse\n\t\t\t\treturn null;\n\n\t\t\tXmlNode riNode = this.GetNamedChildNode(parent, \"ReportItems\");\n\t\t\tif (riNode == null)\t\t// Node has to have ReportItems in order to do paste\n\t\t\t\triNode = this.CreateElement(parent, \"ReportItems\", null);\n\n\t\t\tXmlNode tNode = GetNamedChildNode(fDoc, type);\n\t\t\tif (tNode == null)\n\t\t\t\treturn null;\n\n\t\t\tbool bTableCell = parent.Name == \"TableCell\";\t\t// inside of table no size should be specified\n\t\t\tif (bTableCell)\n\t\t\t\tRemoveReportItemLTHW(tNode);\n\t\t\telse\n\t\t\t\tSetReportItemXY(tNode, p.X, p.Y);\n\n\t\t\triNode.AppendChild(tNode);\t\t// move table into ReportItems collection\n\n\t\t\tthis.ClearSelected();\t\t// the new nodes end up selected\n\n\t\t\t// Need to go thru entire node regenerating all the ReportItem names in the table/matrix\n\t\t\tPasteNewNames(tNode);\n\t\t\treturn tNode;\n\t\t}\n\n\t\tprivate void PasteNewNames(XmlNode node)\n\t\t{\n\t\t\tif (node == null)\n\t\t\t\treturn;\n\t\t\tswitch (node.Name)\n\t\t\t{\n\t\t\t\tcase \"Textbox\":\n\t\t\t\tcase \"Image\":\n\t\t\t\tcase \"Subreport\":\n\t\t\t\tcase \"Line\":\n\t\t        case \"CustomReportItem\":\n\t\t\t\t\tReportNames.GenerateName(node);\t// generate a new name\n\t\t\t\t\treturn;\n\t\t\t\tcase \"Chart\":\n\t\t\t\tcase \"Rectangle\":\n\t\t\t\tcase \"Table\":\n                case \"fyi:Grid\":\n\t\t\t\tcase \"Matrix\":\n\t\t\t\tcase \"List\":\n\t\t\t\t\tReportNames.GenerateName(node);\t// generate a new name\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Style\":\t\t// just to limit some of the dead ends we might hit\n\t\t\t\tcase \"Filters\":\n\t\t\t\t\treturn;\n\t\t\t\tcase \"Grouping\":\t\t// need to assign name to groups too\n\t\t\t\t\tReportNames.GenerateGroupingName(node);\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t\tforeach (XmlNode xNodeLoop in node.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType == XmlNodeType.Element)\n\t\t\t\t\tPasteNewNames(xNodeLoop);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Every reportitem intersecting with the rectangle is added to the selection\n\t\t/// </summary>\n\t\t/// <param name=\"r\">Rectangle used to test</param>\n\t\t/// <param name=\"hScroll\">current horizontal scroll</param>\n\t\t/// <param name=\"vScroll\">current vertical scroll</param>\n\t\tinternal void SelectInRectangle(Rectangle r, float hScroll, float vScroll)\n\t\t{\n\t\t\tif (rDoc == null)\n\t\t\t\treturn;\n\n\t\t\t_hScroll = hScroll;\n\t\t\t_vScroll = vScroll;\n\t\t\tProcessReport(rDoc.LastChild);\n\n\t\t\tfloat bh = 0, hh = 0, fh = 0;\n\n\t\t\t_HitRect = new RectangleF(PointsX(r.X)+_hScroll - lMargin, PointsY(r.Y) + _vScroll,\n\t\t\t\t\t\t\t\t\t\tPointsX(r.Width), PointsY(r.Height));\n\n\t\t\t// If selected count changes then we need to repaint\n\t\t\tint selectedCount = this._SelectedReportItems.Count;\n\n\t\t\t// Check for hit in the header\n\t\t\tXmlNode hn =GetNamedChildNode(phNode, \"Height\");\n\t\t\tif (hn != null)\n\t\t\t{\n\t\t\t\thh = GetSize(hn.InnerText);\n\t\t\t\tRectangleF rf = new RectangleF(LEFTGAP, 0, PointsX(Width)+_hScroll, hh);\n\t\t\t\tif (rf.IntersectsWith(_HitRect))\n\t\t\t\t{\n\t\t\t\t\tXmlNode ri = GetNamedChildNode(phNode, \"ReportItems\");\n\t\t\t\t\tSelectInReportItems(ri, rf);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check for hit in the body\n\t\t\tXmlNode bn =GetNamedChildNode(bodyNode, \"Height\");\t \n\t\t\tif (bn != null)\n\t\t\t{\n\t\t\t\tbh = GetSize(bn.InnerText);\n\t\t\t\tRectangleF rf = new RectangleF(LEFTGAP, hh+BANDHEIGHT, PointsX(Width)+_hScroll, bh);\n\t\t\t\tif (rf.IntersectsWith(_HitRect))\n\t\t\t\t{\n\t\t\t\t\tXmlNode ri = GetNamedChildNode(bodyNode, \"ReportItems\");\n\t\t\t\t\tSelectInReportItems(ri, rf);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Check for hit in the footer\n\t\t\tXmlNode fn =GetNamedChildNode(pfNode, \"Height\");\n\t\t\tif (fn != null)\n\t\t\t{\n\t\t\t\tfh = GetSize(fn.InnerText);\n\t\t\t\tRectangleF rf = new RectangleF(LEFTGAP, hh+BANDHEIGHT+bh+BANDHEIGHT, PointsX(Width)+_hScroll, fh);\n\t\t\t\tif (rf.IntersectsWith(_HitRect))\n\t\t\t\t{\n\t\t\t\t\tXmlNode ri = GetNamedChildNode(pfNode, \"ReportItems\");\n\t\t\t\t\tSelectInReportItems(ri, rf);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (selectedCount != this._SelectedReportItems.Count)\n\t\t\t\tthis.Invalidate();\n\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void SelectInReportItems(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tif (xNode == null)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Textbox\":\n\t\t\t\t\tcase \"Chart\":\n\t\t\t\t\tcase \"Image\":\n\t\t\t\t\tcase \"Subreport\":\n                    case \"CustomReportItem\":\n\t\t\t\t\t\tRectangleF rif = GetReportItemRect(xNodeLoop, r);\n\t\t\t\t\t\tif (rif.IntersectsWith(_HitRect))\n\t\t\t\t\t\t\tthis.AddSelection(xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Line\":\n\t\t\t\t\t\t// for line a simplification is to require endpoints to be in rectangle\n                        // Josh: Done: more sophisticated line segment crosses rectangle but endpoints not in rect\n                        // Josh: Implemented formula found on http://en.wikipedia.org/wiki/Line-line_intersection\n                        // Detects collision of two lines and returns the point they intersect \n\t\t\t\t\t\tPointF p1;\n\t\t\t\t\t\tPointF p2;\n\t\t\t\t\t\tthis.GetLineEnds(xNodeLoop, r, out p1, out p2);\n                        if (_HitRect.Contains(p1) || _HitRect.Contains(p2))\n                        {\n                            this.AddSelection(xNodeLoop);\n                        }\n\n                        if (AdvancedLineCollision(p1, p2, _HitRect))\n                        {\n                            this.AddSelection(xNodeLoop);\n                        }\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Rectangle\":\n\t\t\t\t\t\tSelectInRectangle(xNodeLoop, r);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Table\":\n                    case \"fyi:Grid\":\n\t\t\t\t\t\tSelectInTable(xNodeLoop, r);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Matrix\":\n\t\t\t\t\t\tSelectInMatrix(xNodeLoop, r);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"List\":\n\t\t\t\t\t\tSelectInList(xNodeLoop, r);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        // Josh: Advanced Line Collision\n        /// <summary>\n        /// Tests each line segment of the selection rectangle against a line\n        /// Also performs pre-calculations of formula portions that are consistent among all line segment tests\n        /// </summary>\n        /// <param name=\"p1\">The beginning point of the line to test</param>\n        /// <param name=\"p2\">The ending point of the line to test</param>\n        /// <param name=\"_hr\">The HitRectangle to test for collisions with</param>\n        /// <returns>True if the line intersects the rectangle, false otherwise</returns>\n        private bool AdvancedLineCollision(PointF p1, PointF p2, RectangleF _hr)\n        {\n            //Test Top-Left to Bottom-Left\n            PointF p3 = new PointF(_hr.Left, _hr.Top);\n            PointF p4 = new PointF(_hr.Left, _hr.Bottom);\n            if (IsIntersectingLineSegments(p1, p2, p3, p4))\n                return true;\n\n            //Test Top-Left to Top-Right\n            p4 = new PointF(_hr.Right, _hr.Top);\n            if (IsIntersectingLineSegments(p1, p2, p3, p4))\n                return true;\n\n            //Test Top-Right to Bottom-Right\n            p3 = new PointF(_hr.Right, _hr.Bottom);\n            if (IsIntersectingLineSegments(p1, p2, p3, p4))\n                return true;\n\n            //Test Bottom-Right to Bottom-Left\n            p4 = new PointF(_hr.Left, _hr.Bottom);\n            if (IsIntersectingLineSegments(p1, p2, p3, p4))\n                return true;\n\n            return false;\n        }\n\n        /// <summary>\n        /// Test intersecting two lines\n        /// </summary>\n        /// <param name=\"a\">Start line1</param>\n        /// <param name=\"b\">End line1</param>\n        /// <param name=\"c\">Start line2</param>\n        /// <param name=\"d\">End line2</param>\n        /// <returns></returns>\n        static bool IsIntersectingLineSegments(PointF a, PointF b, PointF c, PointF d)\n        {\n            float denominator = ((b.X - a.X) * (d.Y - c.Y)) - ((b.Y - a.Y) * (d.X - c.X));\n            float numerator1 = ((a.Y - c.Y) * (d.X - c.X)) - ((a.X - c.X) * (d.Y - c.Y));\n            float numerator2 = ((a.Y - c.Y) * (b.X - a.X)) - ((a.X - c.X) * (b.Y - a.Y));\n\n            // Detect coincident lines (has a problem, read below)\n            if (denominator == 0) return numerator1 == 0 && numerator2 == 0;\n\n            float r = numerator1 / denominator;\n            float s = numerator2 / denominator;\n\n            return (r >= 0 && r <= 1) && (s >= 0 && s <= 1);\n        }\n\n        private void SelectInList(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tRectangleF rif = GetReportItemRect(xNode, r);\n\t\t\tif (!rif.IntersectsWith(_HitRect))\n\t\t\t\treturn;\n\n\t\t\tXmlNode ri = GetNamedChildNode(xNode, \"ReportItems\");\n\t\t\tif (ri == null)\n\t\t\t\treturn;\n\n\t\t\tSelectInReportItems(ri, rif);\n\t\t\tif (this.SelectedCount == 0)\t\t\t// if nothing inside selected select List itself\n\t\t\t\tthis.AddSelection(xNode);\n\t\t}\n\n\t\tprivate void SelectInMatrix(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tRectangleF mr = GetReportItemRect(xNode, r);\t\t// get the matrix rectangle\n\t\t\tMatrixView matrix = new MatrixView(this, xNode);\n\t\t\tmr.Height = matrix.Height;\n\t\t\tmr.Width = matrix.Width;\n\t\t\tif (!mr.IntersectsWith(_HitRect))\n\t\t\t\treturn;\n\t\t\t \n\t\t\tfloat ypos = mr.Top;\n\t\t\tfor (int row=0; row < matrix.Rows; row++)\n\t\t\t{\n\t\t\t\tfloat xpos = mr.Left;\n\t\t\t\tfor (int col=0; col <matrix.Columns; col++)\n\t\t\t\t{\n\t\t\t\t\tMatrixItem mi = matrix[row, col];\n\t\t\t\t\tif (mi.ReportItem != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tRectangleF cr = new RectangleF(xpos, ypos, mi.Width, mi.Height);\n\t\t\t\t\t\tSelectInReportItems(mi.ReportItem, cr);\n\t\t\t\t\t}\n\t\t\t\t\tfloat width = matrix[1,col].Width;\n\t\t\t\t\txpos += width;\n\t\t\t\t}\n\t\t\t\typos += matrix[row, 1].Height;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void SelectInRectangle(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tRectangleF rif = GetReportItemRect(xNode, r);\n\t\t\tif (!rif.IntersectsWith(_HitRect))\n\t\t\t\treturn;\n\n\t\t\tXmlNode ri = GetNamedChildNode(xNode, \"ReportItems\");\n\t\t\tif (ri == null)\n\t\t\t\treturn;\n\n\t\t\tSelectInReportItems(ri, rif);\n\t\t\tif (this.SelectedCount == 0)\t\t\t// if nothing inside selected select Rectangle itself\n\t\t\t\tthis.AddSelection(xNode);\n\t\t}\n\n\t\tprivate void SelectInTable(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tRectangleF tr = GetReportItemRect(xNode, r);\t\t// get the table rectangle\n\n\t\t\t// For Table width is really defined by the table columns\n\t\t\tfloat[] colWidths;\n\t\t\tcolWidths = GetTableColumnWidths(GetNamedChildNode(xNode, \"TableColumns\"));\n\t\t\t// calc the total width\n\t\t\tfloat w=0;\n\t\t\tforeach (float cw in colWidths)\n\t\t\t\tw += cw;\n\t\t\ttr.Width = w;\n\n\t\t\t// For Table height is really defined the sum of the RowHeights\n\t\t\tList<XmlNode> trs = GetTableRows(xNode);\n\t\t\ttr.Height = GetTableRowsHeight(trs);\n\n\t\t\tif (!tr.IntersectsWith(_HitRect))\n\t\t\t\treturn;\n\n\t\t\t// Loop thru the TableRows and the columns in each of them to get at the\n\t\t\t//  individual cell\n\t\t\tfloat yPos = tr.Y;\n\t\t\tforeach (XmlNode trow in trs)\n\t\t\t{\n\t\t\t\tXmlNode tcells=GetNamedChildNode(trow, \"TableCells\");\n\n\t\t\t\tfloat h = GetSize(GetNamedChildNode(trow, \"Height\").InnerText);\n\n\t\t\t\tfloat xPos = tr.X;\n\t\t\t\tint col=0;\n\t\t\t\tforeach (XmlNode tcell in tcells)\n\t\t\t\t{\n\t\t\t\t\tif (tcell.Name != \"TableCell\")\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t// Calculate width based on cell span\n\t\t\t\t\tfloat width = 0;\n\t\t\t\t\tint colSpan = Convert.ToInt32(GetElementValue(tcell, \"ColSpan\", \"1\"));\n\t\t\t\t\tfor (int i = 0; i < colSpan && col+i<colWidths.Length; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\twidth += colWidths[col+i];\n\t\t\t\t\t}\n\n\t\t\t\t\tRectangleF cellR = new RectangleF(xPos, yPos, width, h);\n\t\t\t\t\tif (cellR.IntersectsWith(_HitRect))\n\t\t\t\t\t\tthis.SelectInReportItems(GetNamedChildNode(tcell, \"ReportItems\"), cellR);\n\n\t\t\t\t\txPos += width;\n\t\t\t\t\tcol+=colSpan;\n\t\t\t\t}\n\t\t\t\tyPos += h;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tinternal bool TableColumnResize(XmlNode tcNode, int xInc)\n\t\t{\n\t\t\tif (tcNode == null || xInc == 0)\n\t\t\t\treturn false;\n\t\t\tif (!(tcNode.Name == \"TableColumn\" ||\n\t\t\t\t  tcNode.Name == \"RowGrouping\" ||\n\t\t\t\t  tcNode.Name == \"MatrixColumn\"))\n\t\t\t\treturn false;\n\n\t\t\tXmlNode w = this.GetCreateNamedChildNode(tcNode, \"Width\", \"0pt\");\n\n\t\t\treturn this.ChangeWidth(w, xInc, RADIUS);\n\t\t}\n\t\t\n\t\tinternal bool TableRowResize(XmlNode trNode, int yInc)\n\t\t{\n\t\t\tif (trNode == null || yInc == 0)\n\t\t\t\treturn false;\n\t\t\tif (!(trNode.Name == \"TableRow\" || \n\t\t\t\t  trNode.Name == \"ColumnGrouping\" ||\n\t\t\t\t  trNode.Name == \"MatrixRow\"))\n\t\t\t\treturn false;\n\n\t\t\tXmlNode h = this.GetCreateNamedChildNode(trNode, \"Height\", \"0pt\");\n\n\t\t\treturn this.ChangeHeight(h, yInc, RADIUS);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the XmlNode of the report container that has the point: PageHeader, Body, List, PageFooter\n\t\t/// </summary>\n\t\t/// <param name=\"p\">Location to look for in pixels</param>\n\t\t/// <param name=\"hScroll\">Horizontal scroll position in points</param>\n\t\t/// <param name=\"vScroll\">Vertical scroll position in points</param>\n\t\tinternal HitLocation HitContainer(Point p, float hScroll, float vScroll)\n\t\t{\n            if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift) //Josh: Added so Report can be selected below items.\n            {\n                return HitNode(p, hScroll, vScroll, true);\n            }\n            else\n            {\n                return HitNode(p, hScroll, vScroll, false);\n            }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the XmlNode of the object hit\n\t\t/// </summary>\n\t\t/// <param name=\"p\">Location to look for in pixels</param>\n\t\t/// <param name=\"hScroll\">Horizontal scroll position in points</param>\n\t\t/// <param name=\"vScroll\">Vertical scroll position in points</param>\n\t\tinternal HitLocation HitNode(Point p, float hScroll, float vScroll)\n\t\t{\n            return HitNode(p, hScroll, vScroll, false);\n        }\n\n        /// <summary>\n        /// Returns the XmlNode of the object hit\n        /// </summary>\n        /// <param name=\"p\">Location to look for in pixels</param>\n        /// <param name=\"hScroll\">Horizontal scroll position in points</param>\n        /// <param name=\"vScroll\">Vertical scroll position in points</param>\n        /// <param name=\"baseOnly\">True if base node is desired in place of report item</param>\n        internal HitLocation HitNode(Point p, float hScroll, float vScroll, bool baseOnly)\n        {\n\t\t\tif (rDoc == null)\n\t\t\t\treturn null;\n\n\t\t\t_hScroll = hScroll;\n\t\t\t_vScroll = vScroll;\n\n\t\t\tProcessReport(rDoc.LastChild);\n\n\t\t\tfloat bh = 0, hh = 0, fh = 0;\n\n\t\t\t_HitPoint = new PointF(PointsX(p.X)+_hScroll - lMargin, PointsY(p.Y) + _vScroll);\n\n\t\t\t// Check for hit in the header\n\t\t\tXmlNode hn =GetNamedChildNode(phNode, \"Height\");\n\t\t\tif (hn != null)\n\t\t\t{\n\t\t\t\thh = GetSize(hn.InnerText);\n\t\t\t\tRectangleF rf = new RectangleF(LEFTGAP, hh, PointsX(Width)+_hScroll, BANDHEIGHT);\n\t\t\t\tif (rf.Contains(_HitPoint))\n\t\t\t\t\treturn new HitLocation(hn, phNode, HitLocationEnum.Inside, new PointF(0,0));\n\t\t\t\tif (_HitPoint.Y <= hh)\n\t\t\t\t{\n\t\t\t\t\trf.Y = 0;\n\t\t\t\t\trf.Height = hh;\n                    return HitNodeTest(rf, _HitPoint, phNode, baseOnly); \n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check for hit in the body\n\t\t\tXmlNode bn =GetNamedChildNode(bodyNode, \"Height\");\t \n\t\t\tif (bn != null)\n\t\t\t{\n\t\t\t\tbh = GetSize(bn.InnerText);\n\t\t\t\tRectangleF rf = new RectangleF(LEFTGAP, hh+BANDHEIGHT+bh, PointsX(Width)+_hScroll, BANDHEIGHT);\n\t\t\t\tif (rf.Contains(_HitPoint))\n\t\t\t\t\treturn new HitLocation(bn, bodyNode, HitLocationEnum.Inside, new PointF(0,0));\n\t\t\t\tif (_HitPoint.Y <= hh+BANDHEIGHT+bh)\n\t\t\t\t{\n\t\t\t\t\trf.Y = hh+BANDHEIGHT;\n\t\t\t\t\trf.Height = bh;\n                    return HitNodeTest(rf, _HitPoint, bodyNode, baseOnly); \n\t\t\t\t}\n\t\t\t}\n\t\t\t// Check for hit in the footer\n\t\t\tXmlNode fn =GetNamedChildNode(pfNode, \"Height\");\n\t\t\tif (fn != null)\n\t\t\t{\n\t\t\t\tfh = GetSize(fn.InnerText);\n\t\t\t\tRectangleF rf = new RectangleF(LEFTGAP, hh+BANDHEIGHT+bh+BANDHEIGHT+fh, PointsX(Width)+_hScroll, BANDHEIGHT);\n\t\t\t\tif (rf.Contains(_HitPoint))\n\t\t\t\t\treturn new HitLocation(fn, pfNode, HitLocationEnum.Inside, new PointF(0,0));\n\t\t\t\tif (_HitPoint.Y <= hh+BANDHEIGHT+bh+BANDHEIGHT+fh)\n\t\t\t\t{\n\t\t\t\t\trf.Y = hh+BANDHEIGHT+bh+BANDHEIGHT;\n\t\t\t\t\trf.Height = fh;\n                    return HitNodeTest(rf, _HitPoint, pfNode, baseOnly);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n        //Josh: Added to reduce code in previous function.\n        /// <summary>\n        /// Determines if the Hit Point is located in the indicated node\n        /// and returns the report item or the base node hit.\n        /// </summary>\n        /// <param name=\"rf\">The rectangle to test for the hit</param>\n        /// <param name=\"_HitPoint\">The location of the hit to test</param>\n        /// <param name=\"node\">The node being tested for a hit</param>\n        /// <param name=\"baseOnly\">True if only the base is to be returned instead of the item hit</param>\n        /// <returns>A HitLocation if a hit was found, otherwise null</returns>\n        internal HitLocation HitNodeTest(RectangleF rf, PointF _HitPoint, XmlNode node, bool baseOnly)\n        {\n            if (rf.Contains(_HitPoint))\n            {\n                XmlNode ri = GetNamedChildNode(node, \"ReportItems\");\n                HitLocation ril = null;\n                if (!baseOnly)\n                {\n                    ril = HitReportItems(ri, rf);\n                }\n                if (ril == null)\n                {\n                    return new HitLocation(node, node, HitLocationEnum.Inside,\n                   new PointF(_HitPoint.X - rf.X, _HitPoint.Y - rf.Y));\n                }\n                else\n                {\n                    return ril;\n                }\n            }\n\n            return null;\n        }\n\n\t\t/// <summary>\n\t\t/// Changes the height of the node (if possible) using the specified increment\n\t\t/// </summary>\n\t\t/// <param name=\"b\">The XmlNode that is the height property.</param>\n\t\t/// <param name=\"inc\">The amount to increment in pixels</param>\n\t\t/// <returns>true if height was changed else false</returns>\n\t\tinternal bool ChangeHeight(XmlNode b, int inc, float minValue)\n\t\t{\n\t\t\tif (b == null || inc == 0 || b.Name != \"Height\")\n\t\t\t\treturn false;\n\n\t\t\tfloat h = GetSize(b.InnerText);\n\t\t\th += PointsY(inc);\n\t\t\tif (h < minValue)\n\t\t\t\th = minValue;\n\n\t\t\tstring nv = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.0}pt\", h);\n\t\t\tif (b.InnerText != nv)\n\t\t\t{\n\t\t\t\tb.InnerText = nv;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\telse\n\t\t\t\treturn false;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Changes the width of the node (if possible) using the specified increment\n\t\t/// </summary>\n\t\t/// <param name=\"b\">The XmlNode that is the width property.</param>\n\t\t/// <param name=\"inc\">The amount to increment in pixels</param>\n\t\t/// <returns>true if height was changed else false</returns>\n\t\tinternal bool ChangeWidth(XmlNode b, int inc, float minValue)\n\t\t{\n\t\t\tif (b == null || inc == 0 || b.Name != \"Width\")\n\t\t\t\treturn false;\n\n\t\t\tfloat w = GetSize(b.InnerText);\n\t\t\tw += PointsX(inc);\n\t\t\tif (w < minValue)\n\t\t\t\tw = minValue;\n\n\t\t\tstring nv = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.0}pt\", w);\n\t\t\tif (b.InnerText != nv)\n\t\t\t{\n\t\t\t\tb.InnerText = nv;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\telse\n\t\t\t\treturn false;\n\t\t}\n\n\t\tprivate HitLocation HitReportItems(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tif (xNode == null)\n\t\t\t\treturn null;\n\t\t\t\n\t\t\tHitLocation hnl=null;\n            HitLocation hnlLoop = null; //Josh: Added to select highest zOrder Item. \n            foreach (XmlNode xNodeLoop in DrawReportItemsOrdered(xNode, true))//xNode.ChildNodes) \n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Textbox\":\n\t\t\t\t\tcase \"Chart\":\n\t\t\t\t\tcase \"Image\":\n\t\t\t\t\tcase \"Subreport\":\n                    case \"CustomReportItem\":\n                        hnlLoop = HitReportItem(xNodeLoop, r); \n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Rectangle\":\n                        hnlLoop = HitRectangle(xNodeLoop, r);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Table\":\n                    case \"fyi:Grid\":\n                        hnlLoop = HitTable(xNodeLoop, r); \n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Matrix\":\n                        hnlLoop = HitMatrix(xNodeLoop, r); \n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"List\":\n                        hnlLoop = HitList(xNodeLoop, r); \n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Line\":\n                        hnlLoop = HitLine(xNodeLoop, r); \n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n                if (hnlLoop != null)\n                {\n                    hnl = hnlLoop;//return hnl; //Josh: Changed to allow selecting of topmost item \n                    break;\n                }\n\t\t\t}\n            return hnl; //Josh: Changed to allow selecting of topmost item\n\t\t}\n\n\t\tprivate HitLocation HitList(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\treturn HitRectangle(xNode, r);\t\t// Same logic as Rectangle\n\t\t}\n\n\t\tprivate HitLocation HitLine(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tPointF p1;\n\t\t\tPointF p2;\n\t\t\tthis.GetLineEnds(xNode, r, out p1, out p2);\n\n\t\t\tRectangleF rifLoc;\n\n\t\t\tif (this.SelectedCount == 1 &&\n\t\t\t\tthis._SelectedReportItems[0] == xNode)\n\t\t\t{\n\t\t\t\t// When selected node; we do special testing to determine if the location\n\t\t\t\t//   hits one of the special sizing locations\n\n\t\t\t\trifLoc = new RectangleF(p1.X-RADIUS, p1.Y-RADIUS, 2*RADIUS, 2*RADIUS);\n\t\t\t\tif (rifLoc.Contains(_HitPoint))\t\n\t\t\t\t\treturn new HitLocation(xNode, null, HitLocationEnum.LineLeft, new PointF(0,0));\n\n\t\t\t\trifLoc = new RectangleF(p2.X-RADIUS, p2.Y-RADIUS, 2*RADIUS, 2*RADIUS);\n\t\t\t\tif (rifLoc.Contains(_HitPoint))\t\n\t\t\t\t\treturn new HitLocation(xNode, null, HitLocationEnum.LineRight, new PointF(0,0));\n\t\t\t}\n\t\t\n\t\t\t// Construct a ploygon that surrounds the line\n\t\t\tPointF[] pg = new PointF[5];\n\t\t\tif (p1.X <= p2.X)\n\t\t\t{\n\t\t\t\tpg[0] = pg[4] = new PointF(p1.X-RADIUS, p1.Y-RADIUS);\n\t\t\t\tpg[1] = new PointF(p2.X+RADIUS, p2.Y-RADIUS);\n\t\t\t\tpg[2] = new PointF(p2.X+RADIUS, p2.Y+RADIUS);\n\t\t\t\tpg[3] = new PointF(p1.X-RADIUS, p1.Y+RADIUS);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tpg[0] = pg[4] = new PointF(p2.X-RADIUS, p2.Y-RADIUS);\n\t\t\t\tpg[1] = new PointF(p1.X+RADIUS, p1.Y-RADIUS);\n\t\t\t\tpg[2] = new PointF(p1.X+RADIUS, p1.Y+RADIUS);\n\t\t\t\tpg[3] = new PointF(p2.X-RADIUS, p2.Y+RADIUS);\n\t\t\t}\n\t\t\tif (InsidePolygon(pg, _HitPoint))\n\t\t\t{\n\t\t\t\tbool bSelected = IsNodeSelected(xNode);\n\t\t\t\tHitLocation hl = new HitLocation(xNode, null, \n\t\t\t\t\tbSelected? HitLocationEnum.Move: HitLocationEnum.Inside, new PointF(0,0));\n\t\t\t\treturn hl;\n\t\t\t}\n\t\t\telse\n\t\t\t\treturn null;\n\t\t}\n\n\t\tprivate bool InsidePolygon(PointF[] points, PointF p)\n\t\t{\n\t\t\t// see http://astronomy.swin.edu.au/~pbourke/geometry/insidepoly/ Solution 3\n\t\t\tfor (int i=0; i < points.Length-1; i++)\n\t\t\t{\n\t\t\t\tif ((p.Y - points[i].Y)*(points[i+1].X - points[i].X) - \n\t\t\t\t\t(p.X - points[i].X)*(points[i+1].Y - points[i].Y) < 0 )\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tprivate HitLocation HitMatrix(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tRectangleF mr = GetReportItemRect(xNode, r);\t\t// get the matrix rectangle\n\t\t\tMatrixView matrix = new MatrixView(this, xNode);\n\t\t\tmr.Height = matrix.Height;\n\t\t\tmr.Width = matrix.Width;\n\t\t\t \n\t\t\tif (!mr.Contains(_HitPoint))\n\t\t\t\treturn null;\n\n\t\t\t// Check to see if column resize location\n\t\t\tHitLocation hl = HitMatrixColumnResize(xNode, matrix, mr);\n\t\t\tif (hl != null)\n\t\t\t\treturn hl;\n\n\t\t\t// Check to see if Row resize location \n\t\t\thl = HitMatrixRowResize(xNode, matrix, mr);\n\t\t\tif (hl != null)\n\t\t\t\treturn hl;\n\n\t\t\tfloat ypos = mr.Top;\n\t\t\tHitLocation result = null;\n\t\t\tfor (int row=0; row < matrix.Rows && result == null; row++)\n\t\t\t{\n\t\t\t\tfloat xpos = mr.Left;\n\t\t\t\tfor (int col=0; col <matrix.Columns && result == null; col++)\n\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\tMatrixItem mi = matrix[row, col];\n\t\t\t\t\tif (mi.ReportItem != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tRectangleF cr = new RectangleF(xpos, ypos, mi.Width, mi.Height);\n\t\t\t\t\t\tresult = HitReportItems(mi.ReportItem, cr);\n\t\t\t\t\t}\n\t\t\t\t\tfloat width = matrix[1,col].Width;\n\t\t\t\t\txpos += width;\n\t\t\t\t}\n\t\t\t\typos += matrix[row, 1].Height;\n\t\t\t}\n\n\t\t\tif (result == null)\n\t\t\t\tresult = new HitLocation(xNode, xNode, HitLocationEnum.Inside, new PointF(0,0));\n\t\t\telse\n\t\t\t\tresult.HitContainer = xNode;\n\n\t\t\treturn result;\n\t\t}\n\n\t\tprivate HitLocation HitMatrixColumnResize(XmlNode xNode, MatrixView matrix, RectangleF r)\n\t\t{\n\t\t\t// Loop thru the matrix columns to see if point is over the column resize area\n\t\t\tint i;\n\t\t\tfloat xPos = r.Right-RADIUS;\n\n\t\t\t// Need to loop backwards thru the columns; so we can resize 0 length columns\n\t\t\tfor (i = matrix.Columns-1; i >= 0; i--)\n\t\t\t{\n\t\t\t\tRectangleF cr = new RectangleF(xPos, r.Top, RADIUS * 2, r.Height);\n\t\t\t\tif (cr.Contains(_HitPoint))\n\t\t\t\t\tbreak;\n\t\t\t\txPos -= matrix[1, i].Width;\n\t\t\t}\n\t\t\tif (i < 0)\n\t\t\t\treturn null;\n\n\t\t\tXmlNode hNode=null;\n\t\t\tfor (hNode=matrix[matrix.HeaderRows, i].ReportItem; hNode != null; hNode = hNode.ParentNode)\n\t\t\t{\n\t\t\t\tif (hNode.Name == \"RowGrouping\")\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tHitLocation result=null;\n\t\t\tif (hNode != null)\n\t\t\t\tresult = new HitLocation(hNode, xNode, HitLocationEnum.TableColumnResize, new PointF(0,0));\n\t\t\telse\n\t\t\t{\n\t\t\t\t// find out which column it is.\n\t\t\t\t// 1) Get the report item found\n\t\t\t\tXmlNode ri = matrix[matrix.HeaderRows, i].ReportItem;\n\t\t\t\t// 2) Find its relative location in the MatrixCells\n\t\t\t\tXmlNode mcells = DesignXmlDraw.FindNextInHierarchy(xNode, \"MatrixRows\", \"MatrixRow\", \"MatrixCells\");\n\t\t\t\tif (mcells == null)\n\t\t\t\t\treturn null;\n\t\t\t\tint offsetColumn=0;\n\t\t\t\tforeach (XmlNode mcell in mcells.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (mcell.Name != \"MatrixCell\")\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tXmlNode cri = DesignXmlDraw.FindNextInHierarchy(mcell, \"ReportItems\");\n\t\t\t\t\tif (ri == cri)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\toffsetColumn++;\n\t\t\t\t}\n\t\t\t\t// 3) Now find the same relative location in MatrixColumns\n\t\t\t\tXmlNode mcols =\tDesignXmlDraw.FindNextInHierarchy(xNode, \"MatrixColumns\");\n\t\t\t\tif (mcols == null)\n\t\t\t\t\treturn null;\n\t\t\t\tXmlNode mc=null;\n\t\t\t\tforeach (XmlNode mcol in mcols.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (offsetColumn == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tmc = mcol;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\toffsetColumn--;\n\t\t\t\t}\n\t\t\t\tif (mc == null)\t\t// Not found; just use the first one\n\t\t\t\t\tmc = DesignXmlDraw.FindNextInHierarchy(xNode, \n\t\t\t\t\t\t\t\t\t\t\"MatrixColumns\", \"MatrixColumn\");\n\t\t\t\tif (mc != null)\n\t\t\t\t\tresult = new HitLocation(mc, xNode, HitLocationEnum.TableColumnResize, new PointF(0,0));\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tprivate HitLocation HitMatrixRowResize(XmlNode xNode, MatrixView matrix, RectangleF r)\n\t\t{\n\t\t\t// Loop thru the matrix rows to see if point is over the row resize area\n\t\t\tfloat yPos = r.Bottom-RADIUS;\n\n\t\t\tint row;\n\t\t\tfor (row = matrix.Rows-1; row >= 0; row--)\n\t\t\t{\n\t\t\t\tRectangleF mr = new RectangleF(r.Left, yPos, r.Width, RADIUS * 2);\n\t\t\t\tif (mr.Contains(_HitPoint))\n\t\t\t\t\tbreak;\n\t\t\t\tyPos -= matrix[row, 0].Height;\n\t\t\t}\n\t\t\tif (row < 0)\n\t\t\t\treturn null;\n\n\t\t\tXmlNode hNode=null;\n\t\t\tfor (hNode=matrix[row, matrix.HeaderColumns].ReportItem; hNode != null; hNode = hNode.ParentNode)\n\t\t\t{\n\t\t\t\tif (hNode.Name == \"ColumnGrouping\")\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tHitLocation result=null;\n\t\t\tif (hNode != null)\n\t\t\t\tresult = new HitLocation(hNode, xNode, HitLocationEnum.TableRowResize, new PointF(0,0));\n\t\t\telse\n\t\t\t{\n\t\t\t\t// find out which row it is.\n\t\t\t\t// 1) Get the report item found\n\t\t\t\tXmlNode ri = matrix[row, matrix.HeaderColumns].ReportItem;\n\t\t\t\t// 2) Find its location in the MatrixRows\n\t\t\t\tXmlNode mrows = DesignXmlDraw.FindNextInHierarchy(xNode, \"MatrixRows\");\n\t\t\t\tif (mrows == null)\n\t\t\t\t\treturn null;\n\t\t\t\tXmlNode mr=null;\n\t\t\t\tforeach (XmlNode mrow in mrows.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (mrow.Name != \"MatrixRow\")\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t// find the report item\n\t\t\t\t\tXmlNode mcells = DesignXmlDraw.FindNextInHierarchy(mrow, \"MatrixCells\");\n\t\t\t\t\tif (mcells == null)\n\t\t\t\t\t\treturn null;\n\t\t\t\t\tforeach (XmlNode mcell in mcells.ChildNodes)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (mcell.Name != \"MatrixCell\")\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tXmlNode cri = DesignXmlDraw.FindNextInHierarchy(mcell, \"ReportItems\");\n\t\t\t\t\t\tif (ri == cri)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmr = mrow;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (mr != null)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (mr == null)\t\t// Not found; just use the first one\n\t\t\t\t{\n\t\t\t\t\tmr = DesignXmlDraw.FindNextInHierarchy(xNode, \n\t\t\t\t\t\t\"MatrixRows\", \"MatrixRow\");\n\t\t\t\t}\n\t\t\t\tif (mr != null)\n\t\t\t\t\tresult = new HitLocation(mr, xNode, HitLocationEnum.TableRowResize, new PointF(0,0));\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tprivate HitLocation HitRectangle(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tHitLocation hl = HitReportItem(xNode, r);\n\t\t\tif (hl == null)\n\t\t\t\treturn null;\n\n\t\t\tif (hl.HitSpot != HitLocationEnum.Inside)\t// if it didn't hit the inside\n\t\t\t\treturn hl;\t\t\t\t\t\t\t\t//   we just return the node (so it can be resized)\n\t\t\thl.HitContainer = xNode;\t\t\t\t\t// Rectangle is its own container\n\n\t\t\tRectangleF rif = GetReportItemRect(xNode, r);\n\t\t\thl.HitRelative = new PointF(_HitPoint.X - rif.X, _HitPoint.Y - rif.Y);\n\n\t\t\tXmlNode ri = GetNamedChildNode(xNode, \"ReportItems\");\n\t\t\tif (ri == null)\n\t\t\t\treturn hl;\n\n\t\t\tHitLocation hl2 = HitReportItems(ri, GetReportItemRect(xNode, r));\n\n\t\t\treturn hl2 != null? hl2: hl;\t\t// return either the rectangle or the embedded reportitem\n\t\t}\n\n\t\tprivate HitLocation HitReportItem(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tRectangleF rif = GetReportItemRect(xNode, r);\n\n\t\t\tif (this.SelectedCount == 1 &&\n\t\t\t\tthis._SelectedReportItems[0] == xNode)\n\t\t\t{\n\t\t\t\t// When selected node; we do special testing to determine if the location\n\t\t\t\t//   hits one of the special sizing locations\n\n\t\t\t\t// Try it in a big rectangle around all the sizing rectangles\n\t\t\t\tRectangleF rifLoc = new RectangleF(rif.X-RADIUS, rif.Y-RADIUS, rif.Width+ 2*RADIUS, rif.Height+2*RADIUS);\n\t\t\t\tif (!rifLoc.Contains(_HitPoint))\t\n\t\t\t\t\treturn null;\n\n\t\t\t\t// Top Left sizing\n\t\t\t\trifLoc = new RectangleF(rif.X-RADIUS, rif.Y-RADIUS, 2*RADIUS, 2*RADIUS);\n\t\t\t\tif (rifLoc.Contains(_HitPoint))\t\n\t\t\t\t\treturn new HitLocation(xNode, null, HitLocationEnum.TopLeft, new PointF(0,0));\n\n\t\t\t\t// Top Right sizing\n\t\t\t\trifLoc = new RectangleF(rif.X+rif.Width-RADIUS, rif.Y-RADIUS, 2*RADIUS, 2*RADIUS);\n\t\t\t\tif (rifLoc.Contains(_HitPoint))\t\n\t\t\t\t\treturn new HitLocation(xNode, null, HitLocationEnum.TopRight, new PointF(0,0));\n\n\t\t\t\t// Bottom Left sizing\n\t\t\t\trifLoc = new RectangleF(rif.X-RADIUS, rif.Y+rif.Height-RADIUS, 2*RADIUS, 2*RADIUS);\n\t\t\t\tif (rifLoc.Contains(_HitPoint))\t\n\t\t\t\t\treturn new HitLocation(xNode, null, HitLocationEnum.BottomLeft, new PointF(0,0));\n\n\t\t\t\t// Bottom Right sizing\n\t\t\t\trifLoc = new RectangleF(rif.X+rif.Width-RADIUS, rif.Y+rif.Height-RADIUS, 2*RADIUS, 2*RADIUS);\n\t\t\t\tif (rifLoc.Contains(_HitPoint))\t\n\t\t\t\t\treturn new HitLocation(xNode, null, HitLocationEnum.BottomRight, new PointF(0,0));\n\t\t\t}\n\t\t\t\n\t\t\t// ok try the point in the rectangle now\n\t\t\tif (rif.Contains(_HitPoint))\n\t\t\t{\n\t\t\t\tbool bSelected = IsNodeSelected(xNode);\n\t\t\t\tHitLocation hl = new HitLocation(xNode, null, \n\t\t\t\t\t\t\t\tbSelected? HitLocationEnum.Move: HitLocationEnum.Inside, new PointF(0,0));\n\t\t\t\t// Correct hit location (move or inside) for reportitems that contain moveable items\n\t\t\t\tif (bSelected && (xNode.Name == \"List\" || xNode.Name == \"Rectangle\"))\n\t\t\t\t{\n\t\t\t\t\tRectangleF innerRect = new RectangleF(rif.Left+RADIUS, rif.Top+RADIUS, rif.Width-RADIUS*2, rif.Height-RADIUS*2); \n\t\t\t\t\tif (innerRect.Contains(_HitPoint))\n\t\t\t\t\t\thl.HitSpot = HitLocationEnum.Inside;\n\t\t\t\t}\n\t\t\t\treturn hl;\n\t\t\t}\n\t\t\telse\n\t\t\t\treturn null;\n\t\t}\n\n\t\tprivate HitLocation HitTable(XmlNode xNode, RectangleF r)\n\t\t{\n\t\t\tRectangleF tr = GetReportItemRect(xNode, r);\t\t// get the table rectangle\n\n\t\t\t// For Table width is really defined by the table columns\n\t\t\tfloat[] colWidths;\n\t\t\tcolWidths = GetTableColumnWidths(GetNamedChildNode(xNode, \"TableColumns\"));\n\t\t\t// calc the total width\n\t\t\tfloat w=0;\n\t\t\tforeach (float cw in colWidths)\n\t\t\t\tw += cw;\n\t\t\ttr.Width = w;\n\n\t\t\t// For Table height is really defined the sum of the RowHeights\n            List<XmlNode> trs = GetTableRows(xNode);\n\t\t\ttr.Height = GetTableRowsHeight(trs);\n\n\t\t\t// If not in the bigger rectangle; its not in any smaller rectangles\n\t\t\tif (!tr.Contains(_HitPoint))\n\t\t\t\treturn null;\n\n\t\t\t// Check to see if column resize location\n\t\t\tHitLocation hl = HitTableColumnResize(xNode, tr, colWidths);\n\t\t\tif (hl != null)\n\t\t\t\treturn hl;\n\n\t\t\t// Check to see if Row resize location \n\t\t\thl = HitTableRowResize(xNode, tr, trs);\n\t\t\tif (hl != null)\n\t\t\t\treturn hl;\n\n\t\t\t// Loop thru the TableRows and the columns in each of them to get at the\n\t\t\t//  individual cell\n\t\t\tfloat yPos = tr.Y;\n\t\t\tforeach (XmlNode trow in trs)\n\t\t\t{\n\t\t\t\tXmlNode tcells=GetNamedChildNode(trow, \"TableCells\");\n\n\t\t\t\tfloat h = GetSize(GetNamedChildNode(trow, \"Height\").InnerText);\n\n\t\t\t\tfloat xPos = tr.X;\n\t\t\t\tint col=0;\n\t\t\t\tforeach (XmlNode tcell in tcells)\n\t\t\t\t{\n\t\t\t\t\tif (tcell.Name != \"TableCell\")\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t// Calculate width based on cell span\n\t\t\t\t\tfloat width = 0;\n\t\t\t\t\tint colSpan = Convert.ToInt32(GetElementValue(tcell, \"ColSpan\", \"1\"));\n\t\t\t\t\tfor (int i = 0; i < colSpan && col+i<colWidths.Length; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\twidth += colWidths[col+i];\n\t\t\t\t\t}\n\n\t\t\t\t\tRectangleF cellR = new RectangleF(xPos, yPos, width, h);\n\t\t\t\t\tif (cellR.Contains(_HitPoint))\n\t\t\t\t\t{\n\t\t\t\t\t\tHitLocation hnl = HitReportItems(GetNamedChildNode(tcell, \"ReportItems\"), cellR);\n\t\t\t\t\t\tif (hnl != null)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (hnl.HitContainer == null)\n\t\t\t\t\t\t\t\thnl.HitContainer = xNode;\t// if not already in container; put in table\n\t\t\t\t\t\t\treturn hnl;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\treturn new HitLocation(tcell, null, HitLocationEnum.Inside, new PointF(0,0));\n\t\t\t\t\t}\n\t\t\t\t\txPos += width;\n\t\t\t\t\tcol+=colSpan;\n\t\t\t\t}\n\t\t\t\tyPos += h;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\tprivate HitLocation HitTableColumnResize(XmlNode xNode, RectangleF r, float[] colWidths)\n\t\t{\n\t\t\tXmlNode tcols = this.GetNamedChildNode(xNode, \"TableColumns\");\n\t\t\tif (tcols == null)\n\t\t\t\treturn null;\n\n\t\t\t// Loop thru the table columns to see if point is over the column resize area\n\t\t\tint i;\n\t\t\tXmlNode cn=null;\n\t\t\tfloat xPos = r.Right-RADIUS;\n\n\t\t\t// Need to loop backwards thru the columns; so we can resize 0 length columns\n\t\t\tfor (i = colWidths.Length-1; i >= 0; i--)\n\t\t\t{\n\t\t\t\tRectangleF cr = new RectangleF(xPos, r.Top, RADIUS * 2, r.Height);\n\t\t\t\tif (cr.Contains(_HitPoint))\n\t\t\t\t\tbreak;\n\t\t\t\txPos -= colWidths[i];\n\t\t\t}\n\t\t\tif (i < 0)\n\t\t\t\treturn null;\n\n\t\t\t// Now find the node that matches this column\n\t\t\tint ci=0;\n\t\t\tforeach (XmlNode tcn in tcols.ChildNodes)\n\t\t\t{\n\t\t\t\tif (tcn.Name != \"TableColumn\")\n\t\t\t\t\tcontinue;\n\t\t\t\tif (ci++ == i)\n\t\t\t\t{\n\t\t\t\t\tcn = tcn;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (cn == null)\t\t\t// really shouldn't happen\n\t\t\t\treturn null;\n\t\t\t\n\t\t\tHitLocation hl = new HitLocation(cn, xNode, HitLocationEnum.TableColumnResize, new PointF(0,0));\n\t\t\treturn hl;\n\t\t}\n\n        private HitLocation HitTableRowResize(XmlNode xNode, RectangleF r, List<XmlNode> trs)\n\t\t{\n\t\t\t// Loop thru the table rows to see if point is over the row resize area\n\t\t\tXmlNode rn=null;\n\t\t\tfloat yPos = r.Bottom-RADIUS;\n\n            List<XmlNode> reverse = new List<XmlNode>(trs);\n\t\t\treverse.Reverse();\n\t\t\tforeach (XmlNode trn in reverse)\n\t\t\t{\n\t\t\t\tRectangleF tr = new RectangleF(r.Left, yPos, r.Width, RADIUS * 2);\n\t\t\t\tif (tr.Contains(_HitPoint))\n\t\t\t\t{\n\t\t\t\t\trn = trn;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tyPos -= GetSize(GetNamedChildNode(trn, \"Height\").InnerText);\n\t\t\t}\n\t\t\tif (rn == null)\n\t\t\t\treturn null;\n\t\t\t\n\t\t\tHitLocation hl = new HitLocation(rn, xNode, HitLocationEnum.TableRowResize, new PointF(0,0));\n\t\t\treturn hl;\n\t\t}\n\n\t\tinternal bool MoveReportItem(XmlNode b, int xInc, int yInc)\n\t\t{\n\t\t\tif (b == null)\n\t\t\t\treturn false;\n\t\t\tif (xInc == 0 && yInc == 0)\n\t\t\t\treturn false;\n\t\t\tif (InTable(b))\n\t\t\t{\n\t\t\t\twhile (b != null && !(b.Name == \"Table\" || b.Name == \"fyi:Grid\"))\n\t\t\t\t{\n\t\t\t\t\tb = b.ParentNode;\n\t\t\t\t}\n\t\t\t\tif (b == null)\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\telse if (InMatrix(b))\n\t\t\t{\n\t\t\t\twhile (b != null && b.Name != \"Matrix\")\n\t\t\t\t{\n\t\t\t\t\tb = b.ParentNode;\n\t\t\t\t}\n\t\t\t\tif (b == null)\n\t\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tXmlNode lNode = this.GetNamedChildNode(b, \"Left\");\n\t\t\tif (lNode == null)\n\t\t\t\tlNode = CreateElement(b, \"Left\", \"0pt\");\n\t\t\tXmlNode tNode = this.GetNamedChildNode(b, \"Top\");\n\t\t\tif (tNode == null)\n\t\t\t\ttNode = CreateElement(b, \"Top\", \"0pt\");\n\n\t\t\t// Assume nothing changed\n\t\t\tbool changed = false;\n\n\t\t\t// handle Left\n\t\t\tfloat l = GetSize(lNode.InnerText);\n\t\t\tl += PointsX(xInc);\n\t\t\tif (l < 0)\n\t\t\t\tl = 0;\n\t\t\tstring lv = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.0}pt\", l);\n\t\t\tif (lNode.InnerText != lv)\n\t\t\t{\n\t\t\t\tlNode.InnerText = lv;\n\t\t\t\tchanged = true;\n\t\t\t}\n            // handle top\n\t\t\tfloat t = GetSize(tNode.InnerText);\n\t\t\tt += PointsY(yInc);\n\t\t\tif (t < 0)\n\t\t\t\tt = 0;\n\n\t\t\tstring tv = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.0}pt\", t);\n\t\t\tif (tNode.InnerText != tv)\n\t\t\t{\n\t\t\t\ttNode.InnerText = tv;\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t\t\n\t\t\treturn changed;\n\t\t}\n\n\t\tinternal bool MoveSelectedItems(int xInc, int yInc, HitLocationEnum hle)\n\t\t{\n\t\t\tbool rc=false;\n\t\t\t// Are we just moving the selected items\n\t\t\tif (hle == HitLocationEnum.Move)\n\t\t\t{\n                List<XmlNode> ar = null;\n\t\t\t\tforeach (XmlNode ri in this._SelectedReportItems)\n\t\t\t\t{\n\t\t\t\t\t// Ensure we don't move table or matrixes multiple times depending on selection\n\t\t\t\t\tXmlNode tm = TMParent(ri);\n\t\t\t\t\tif (tm == null)\n\t\t\t\t\t{\n\t\t\t\t\t\trc |= MoveReportItem(ri, xInc, yInc);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (ar == null)\n                        ar = new List<XmlNode>();\n\t\t\t\t\telse if (ar.Contains(tm))\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tar.Add(tm);\n\t\t\t\t\trc |= MoveReportItem(tm, xInc, yInc);\n\t\t\t\t}\n\t\t\t\treturn rc;\n\t\t\t}\n\n\t\t\tif (_SelectedReportItems.Count <= 0)\n\t\t\t\treturn false;\n\t\t\t\n\t\t\t// Ok we need to resize the nodes\n\t\t\trc = false;\n\t\t\tforeach (XmlNode xNode in _SelectedReportItems)\n\t\t\t{\n\t\t\t\trc |= ResizeReportItem(xNode, xInc, yInc, hle);\n\t\t\t}\n\t\t\treturn rc;\n\t\t}\n\n\t\tinternal bool ResizeReportItem(XmlNode xNode, int xInc, int yInc, HitLocationEnum hle)\n\t\t{\n\t\t\tif (xInc == 0 && yInc == 0)\n\t\t\t\treturn false;\n\t\t\tif (InTable(xNode) || InMatrix(xNode))\n\t\t\t\treturn false;\n\n\t\t\tbool rc=false;\n\n\t\t\tfloat xIncPt = PointsX(xInc);\n\t\t\tfloat yIncPt = PointsY(yInc);\n\t\t\tXmlNode lNode = this.GetCreateNamedChildNode(xNode, \"Left\", \"0pt\");\n\t\t\tfloat l = GetSize(lNode.InnerText);\n\t\t\tXmlNode tNode = this.GetCreateNamedChildNode(xNode, \"Top\", \"0pt\");\n\t\t\tfloat t = GetSize(tNode.InnerText);\n\t\t\tXmlNode wNode = this.GetNamedChildNode(xNode, \"Width\");\n\t\t\tfloat w = wNode == null? float.MinValue: GetSize(wNode.InnerText);\n\t\t\tXmlNode hNode = this.GetNamedChildNode(xNode, \"Height\");\n\t\t\tfloat h = hNode == null? float.MinValue: GetSize(hNode.InnerText);\n\n\t\t\tswitch (hle)\n\t\t\t{\n\t\t\t\tcase HitLocationEnum.BottomLeft:\n\t\t\t\t\t// need to adjust x/y position and height/width\n\t\t\t\t\tif (wNode == null || hNode == null)\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tl += xIncPt;\n\t\t\t\t\tw -= xIncPt; \n\t\t\t\t\th += yIncPt;\n\t\t\t\t\tbreak;\n\t\t\t\tcase HitLocationEnum.BottomMiddle:\n\t\t\t\t\t// need to adjust height\n\t\t\t\t\tif (hNode == null)\n\t\t\t\t\t\treturn false;\n\t\t\t\t\th += yIncPt;\n\t\t\t\t\tbreak;\n\t\t\t\tcase HitLocationEnum.BottomRight:\n\t\t\t\t\t// need to adjust width and height\n\t\t\t\t\tif (wNode == null || hNode == null)\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tw += xIncPt; \n\t\t\t\t\th += yIncPt;\n\t\t\t\t\tbreak;\n\t\t\t\tcase HitLocationEnum.LeftMiddle:\n\t\t\t\t\t// need to adjust x position and width\n\t\t\t\t\tif (wNode == null)\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tl += xIncPt;\n\t\t\t\t\tw -= xIncPt; \n\t\t\t\t\tbreak;\n\t\t\t\tcase HitLocationEnum.RightMiddle:\n\t\t\t\t\t// need to adjust width\n\t\t\t\t\tif (wNode == null)\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tw += xIncPt; \n\t\t\t\t\tbreak;\n\t\t\t\tcase HitLocationEnum.TopLeft:\n\t\t\t\t\t// need to adjust x,y position and height\n\t\t\t\t\tif (wNode == null || hNode == null)\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tl += xIncPt;\n\t\t\t\t\tw -= xIncPt; \n\t\t\t\t\tt += yIncPt;\n\t\t\t\t\th -= yIncPt;\n\t\t\t\t\tbreak;\n\t\t\t\tcase HitLocationEnum.TopMiddle:\n\t\t\t\t\t// need to adjust y position and height\n\t\t\t\t\tif (hNode == null)\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tt += yIncPt;\n\t\t\t\t\th -= yIncPt;\n\t\t\t\t\tbreak;\n\t\t\t\tcase HitLocationEnum.TopRight:\n\t\t\t\t\t// need to adjust y position, width and height\n\t\t\t\t\tif (wNode == null || hNode == null)\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tw += xIncPt; \n\t\t\t\t\tt += yIncPt;\n\t\t\t\t\th -= yIncPt;\n\t\t\t\t\tbreak;\n\t\t\t\tcase HitLocationEnum.LineLeft:\n\t\t\t\t\tif (l + xIncPt < 0)\n\t\t\t\t\t{\n\t\t\t\t\t\txIncPt = -l;\n\t\t\t\t\t\tl = 0;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tl += xIncPt;\n\t\t\t\t\tif (t + yIncPt < 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tyIncPt = -t;\n\t\t\t\t\t\tt = 0;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tt += yIncPt;\n\t\t\t\t\tw -= xIncPt;\n\t\t\t\t\th -= yIncPt;\n\t\t\t\t\tbreak;\n\t\t\t\tcase HitLocationEnum.LineRight:\n\t\t\t\t\tw += xIncPt;\n\t\t\t\t\th += yIncPt;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Normalize results\n\t\t\tif (l < 0)\n\t\t\t{\n\t\t\t\tw -= l;\n\t\t\t\tl = 0;\n\t\t\t}\n\t\t\tif (t < 0)\n\t\t\t{\n\t\t\t\th -= t;\n\t\t\t\tt = 0;\n\t\t\t}\n\t\t\tif (xNode.Name == \"Line\")\t\n\t\t\t{ // Line height and widths allowed to go negative but overall position can't be < 0\n\t\t\t\tif (t + h < 0)\n\t\t\t\t\th = -t;\n\t\t\t\tif (l + w < 0)\n\t\t\t\t\tw = -l;\n\t\t\t}\n\t\t\telse\n\t\t\t{ // Don't let height and width go too small\n\t\t\t\tif (h < .1)\n\t\t\t\t\th = .1f;\n\t\t\t\tif (w < .1)\n\t\t\t\t\tw = .1f;\n\t\t\t}\n\t\t\tstring tv = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.00}pt\", t);\n\t\t\tif (tNode.InnerText != tv)\n\t\t\t{\n\t\t\t\ttNode.InnerText = tv;\n\t\t\t\trc = true;\n\t\t\t}\n\n\t\t\tstring lv = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.00}pt\", l);\n\t\t\tif (lNode.InnerText != lv)\n\t\t\t{\n\t\t\t\tlNode.InnerText = lv;\n\t\t\t\trc = true;\n\t\t\t}\n\n\t\t\tstring wv = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.00}pt\", w);\n\t\t\tif (wNode != null && wNode.InnerText != wv)\n\t\t\t{\n\t\t\t\twNode.InnerText = wv;\n\t\t\t\trc = true;\n\t\t\t}\n\n\t\t\tstring hv = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.00}pt\", h);\n\t\t\tif (hNode != null && hNode.InnerText != hv)\n\t\t\t{\n\t\t\t\thNode.InnerText = hv;\n\t\t\t\trc = true;\n\t\t\t}\n\n\t\t\treturn rc;\n\t\t}\n\n\t\tinternal XmlElement CreateElement(XmlNode parent, string name, string val)\n\t\t{\n\t\t\tXmlElement node;\n\t\t\tif (name.StartsWith(\"rd:\"))\t\n\t\t\t{\n\t\t\t\tstring nms = rDoc.DocumentElement.GetNamespaceOfPrefix(\"rd\");\n\t\t\t\tif (nms == null || nms.Length == 0)\n\t\t\t\t\tnms = DialogValidateRdl.SCHEMA2025;\n\n\t\t\t\tnode = rDoc.CreateElement(name, nms);\n\t\t\t}\n\t\t\telse if (name.StartsWith(\"fyi:\"))\t\n\t\t\t{\n\t\t\t\tstring nms = rDoc.DocumentElement.GetNamespaceOfPrefix(\"fyi\");\n\t\t\t\tif (nms == null || nms.Length == 0)\n\t\t\t\t\tnms = DialogValidateRdl.SCHEMA2025;\n\n\t\t\t\tnode = rDoc.CreateElement(name, nms);\n\t\t\t}\n\t\t\telse\n\t\t\t\tnode = rDoc.CreateElement(name);\n\t\t\tif (val != null)\n\t\t\t\tnode.InnerText = val;\n\t\t\tparent.AppendChild(node);\n\t\t\treturn node;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Use for testing a name for validity.  If null is return name is valid.\n\t\t/// Otherwise a string describing the error is returned.\n\t\t/// </summary>\n\t\t/// <param name=\"xNode\"></param>\n\t\t/// <param name=\"name\"></param>\n\t\t/// <returns></returns>\n\t\tinternal string NameError(XmlNode xNode, string name)\n\t\t{\n\t\t\treturn ReportNames.NameError(xNode, name);\n\t\t}\n\n\t\tinternal string GroupingNameCheck(XmlNode xNode, string name)\n\t\t{\n\t\t\treturn ReportNames.GroupingNameCheck(xNode, name);\n\t\t}\n\n\t\tinternal bool SetName(XmlNode xNode, string name)\n\t\t{\n\t\t\treturn ReportNames.ChangeName(xNode, name);\n\t\t}\n\n\t\tinternal bool SetGroupName(XmlNode xNode, string name)\n\t\t{\n\t\t\treturn ReportNames.ChangeGroupName(xNode, name);\n\t\t}\n\n\t\tinternal void SetElementAttribute(XmlNode parent, string name, string val)\n\t\t{\n\t\t\tXmlAttribute attr = parent.Attributes[name];\n\t\t\tif (attr != null)\n\t\t\t{\n\t\t\t\tattr.Value = val;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tattr = rDoc.CreateAttribute(name);\n\t\t\t\tattr.Value = val;\n\t\t\t\tparent.Attributes.Append(attr);\n\t\t\t}\n\t\t\treturn;\n\n\t\t}\n\n\t\tinternal void RemoveElement(XmlNode parent, string name)\n\t\t{\n\t\t\tXmlNode node = this.GetNamedChildNode(parent, name);\n\t\t\tif (node != null)\n\t\t\t{\n\t\t\t\tparent.RemoveChild(node);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal void RemoveElementAll(XmlNode parent, string name)\n        {\n            XmlNode node = this.GetNamedChildNode(parent, name);\n            while (node != null)\n            {\n                parent.RemoveChild(node);\n                node = this.GetNamedChildNode(parent, name);\n            }\n            return;\n        }\n\n\t\tinternal string GetDataSetNameValue(XmlNode dataRegion)\n\t\t{\n\t\t\tXmlNode dr = GetReportItemDataRegionContainer(dataRegion);\n\t\t\tif (dr != null)\t\t// dataRegion is embedded in a dataregion if not null\n\t\t\t\treturn GetDataSetNameValue(dr);\n\t\t\t\n\t\t\tXmlNode node = this.GetNamedChildNode(dataRegion, \"DataSetName\");\n\t\t\tif (node != null)\n\t\t\t\treturn node.InnerText;\n\t\t\t// Need to find the single data set specified in report\n\t\t\tXmlNode rNode = this.GetReportNode();\n\t\t\tnode = GetNamedChildNode(rNode, \"DataSets\");\n\t\t\tif (node == null)\n\t\t\t\treturn \"\";\n\t\t\tnode = GetNamedChildNode(node, \"DataSet\");\n\n\t\t\tif (node == null)\n\t\t\t\treturn \"\";\n\t\t\tXmlAttribute xAttr = node.Attributes[\"Name\"];\n\t\t\tif (xAttr == null)\n\t\t\t\treturn \"\";\n\t\t\treturn xAttr.Value;\n\t\t}\n\n\t\tinternal string GetElementAttribute(XmlNode parent, string name, string def)\n\t\t{\n\t\t\tXmlAttribute attr = parent.Attributes[name];\n\t\t\tif (attr == null)\n\t\t\t\treturn def;\n\t\t\telse\n\t\t\t\treturn attr.Value;\n\t\t}\n\n\t\tinternal string GetElementValue(XmlNode parent, string name, string defaultV)\n\t\t{\n\t\t\tXmlNode node = this.GetNamedChildNode(parent, name);\n\t\t\tif (node == null)\n\t\t\t\treturn defaultV;\n\t\t\telse\n\t\t\t\treturn node.InnerText;\n\t\t}\n\n\t\tinternal XmlNode SetElement(XmlNode parent, string name, string val)\n\t\t{\n\t\t\tXmlNode node = this.GetNamedChildNode(parent, name);\n\t\t\tif (node == null)\n\t\t\t\tnode = CreateElement(parent, name, val);\n\t\t\telse if (val != null)\n\t\t\t\tnode.InnerText = val;\n\t\t\treturn node;\n\t\t}\n\n\t\tinternal void SetTableCellColSpan(XmlNode tcell, string val)\n\t\t{\n\t\t\tstring oldval = this.GetElementValue(tcell, \"ColSpan\", \"1\");\n\t\t\tif (oldval == val)\t\t// if they're the same we're all done\n\t\t\t\treturn;\n\t\t\tint iold = Convert.ToInt32(oldval);\n\t\t\tint inew = Convert.ToInt32(val);\n\t\t\tif (inew <= 0)\t\t\n\t\t\t\tinew = 1;\n\n\t\t\t// find out the maximum column span\n\t\t\tint maxcolspan=0;\n\t\t\tfor (XmlNode n = tcell; n != null; n = n.NextSibling)\n\t\t\t{\n\t\t\t\tif (n.Name == \"TableCell\")\n\t\t\t\t{\n\t\t\t\t\tstring span = this.GetElementValue(n, \"ColSpan\", \"1\");\n\t\t\t\t\tmaxcolspan+=Convert.ToInt32(span);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (inew > maxcolspan)\n\t\t\t\tinew = maxcolspan;\n\n\t\t\tint dif = iold - inew;\n\t\t\tif (dif == 0)\t\t\t// string comparison isn't always correct; especially after correction\n\t\t\t\treturn;\n\n\t\t\tXmlNode tcells = tcell.ParentNode;\n\t\t\tif (dif < 0)\n\t\t\t{\t// we need to remove \"dif\" number of TableCell entries after this one\n\t\t\t\tfor (XmlNode n = tcell.NextSibling; n != null && dif < 0; n = tcell.NextSibling)\n\t\t\t\t{\n\t\t\t\t\tif (n.Name == \"TableCell\")\n\t\t\t\t\t{\n\t\t\t\t\t\ttcells.RemoveChild(n);\n\t\t\t\t\t\tdif++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\t// dif > 0\n\t\t\t{\t// we need to create \"dif\" number of TableCell entries after this one\n\t\t\t\twhile (dif > 0)\n\t\t\t\t{\n\t\t\t\t\tInsertTableColumn(tcells, tcell, false);\n\t\t\t\t\tdif--;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Finally set the new ColSpan value \n\t\t\tthis.SetElement(tcell, \"ColSpan\", inew.ToString());\n\n\t\t\treturn;\n\t\t}\n\n\t\tinternal XmlNode GetReportNode()\n\t\t{\n\t\t\treturn rDoc.DocumentElement;\n\t\t}\n\n\t\tinternal IEnumerable GetReportItems(string query)\n\t\t{\n\t\t\tXmlNodeList nodeList;\n\t\t\tXmlElement root = this.rDoc.DocumentElement;\n\n\t\t\tif (root.NamespaceURI != String.Empty)\n\t\t\t{\n\t\t\t\tif (query == null)\n\t\t\t\t\tquery = \"//Textbox|//Rectangle|//Image|//Subreport|//Chart|//Table|//List|//Line|//Matrix|\" +\n\t\t\t\t\t\t\"//rdl:Textbox|//rdl:Rectangle|//rdl:Image|//rdl:Subreport|//rdl:Chart|//rdl:Table|//rdl:List|//rdl:Line|//rdl:Matrix\";\n\t\t\t\telse\n\t\t\t\t{\t// need to search in the namespace as well\n\t\t\t\t\tstring mquery = query.Replace(\"//\", \"//rdl:\");\n\t\t\t\t\tquery = query + \"|\" + mquery;\n\t\t\t\t}\n\n\t\t\t\tXmlNamespaceManager nsmgr = new XmlNamespaceManager(this.rDoc.NameTable);\n\t\t\t\tnsmgr.AddNamespace(\"rdl\", root.NamespaceURI); //default namespace\n\t\t\t\tnodeList = root.SelectNodes(query, nsmgr);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (query == null)\n\t\t\t\t\tquery = \"//Textbox|//Rectangle|//Image|//Subreport|//Chart|//Table|//List|//Line|//Matrix\";\n\t\t\t\tnodeList = root.SelectNodes(query);\n\t\t\t}\n\n\t\t\treturn nodeList;\n\t\t}\n\n\t\tinternal bool DeleteChartGrouping(XmlNode dynamic)\n\t\t{\n\t\t\tif (dynamic == null)\n\t\t\t\treturn false;\n\n\t\t\tXmlNode seriesOrCategory = dynamic.ParentNode;\n\t\t\tXmlNode groupings = seriesOrCategory.ParentNode;\n\n\t\t\tgroupings.RemoveChild(seriesOrCategory);\t// Remove the Grouping from Groups\n\t\t\tif (!groupings.HasChildNodes)\t\t// If Groups has no children\n\t\t\t{\t\t\t\t\t\t\t\t\t//   remove the SeriesGroupings or CategoryGroupings from Chart\n\t\t\t\tXmlNode pgroupings = groupings.ParentNode;\n\t\t\t\tpgroupings.RemoveChild(groupings);\n\t\t\t\tif (!pgroupings.HasChildNodes)\n\t\t\t\t{\n\t\t\t\t\tpgroupings.ParentNode.RemoveChild(pgroupings);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tinternal bool DeleteChartGrouping(XmlNode chart, string gname)\n\t\t{\n\t\t\tif (chart == null || chart.Name != \"Chart\")\n\t\t\t\treturn false;\n\n\t\t\tXmlNode group;\n\t\t\tgroup = GetChartGroupName(chart, gname, \"SeriesGroupings\", \"SeriesGrouping\", \"DynamicSeries\");\n\t\t\tif (group == null)\t// if not there try the row groupings\n\t\t\t\tgroup = GetChartGroupName(chart, gname, \"CategoryGroupings\", \"CategoryGrouping\", \"DynamicCategories\");\n\n\t\t\treturn DeleteChartGrouping(group);\n\t\t}\n\n\t\tinternal string[] GetChartCategoryGroupNames(XmlNode chart)\n\t\t{\n\t\t\tif (chart == null || chart.Name != \"Chart\")\n\t\t\t\treturn null;\n\n\t\t\tXmlNode catGroups = this.GetNamedChildNode(chart, \"CategoryGroupings\");\n\t\t\tif (catGroups == null)\n\t\t\t\treturn null;\n\n\t\t\tList<string> ar = new List<string>();\n\t\t\tforeach (XmlNode cgroup in catGroups.ChildNodes)\n\t\t\t{\n\t\t\t\tif (cgroup.Name != \"CategoryGrouping\")\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlNode group = DesignXmlDraw.FindNextInHierarchy(cgroup, \"DynamicCategories\",\"Grouping\");\n\t\t\t\tif (group == null)\n\t\t\t\t\tcontinue;\n\t\t\t\tstring name = this.GetElementAttribute(group, \"Name\", null);\n\t\t\t\tif (name != null)\n\t\t\t\t\tar.Add(name);\n\t\t\t}\n\t\t\tif (ar.Count <= 0)\n\t\t\t\treturn null;\n\t\t\treturn ar.ToArray();\n\t\t}\n\n\t\tinternal string[] GetChartSeriesGroupNames(XmlNode chart)\n\t\t{\n\t\t\tif (chart == null || chart.Name != \"Chart\")\n\t\t\t\treturn null;\n\n\t\t\tXmlNode serGroups = this.GetNamedChildNode(chart, \"SeriesGroupings\");\n\t\t\tif (serGroups == null)\n\t\t\t\treturn null;\n\n            List<string> ar = new List<string>();\n\t\t\tforeach (XmlNode sgroup in serGroups.ChildNodes)\n\t\t\t{\n\t\t\t\tif (sgroup.Name != \"SeriesGrouping\")\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlNode group = DesignXmlDraw.FindNextInHierarchy(sgroup, \"DynamicSeries\",\"Grouping\");\n\t\t\t\tif (group == null)\n\t\t\t\t\tcontinue;\n\t\t\t\tstring name = this.GetElementAttribute(group, \"Name\", null);\n\t\t\t\tif (name != null)\n\t\t\t\t\tar.Add(name);\n\t\t\t}\n\t\t\tif (ar.Count <= 0)\n\t\t\t\treturn null;\n\t\t\treturn ar.ToArray();\n\t\t}\n\n\t\tinternal XmlNode GetChartGrouping(XmlNode chart, string gname)\n\t\t{\n\t\t\tif (chart == null || chart.Name != \"Chart\")\n\t\t\t\treturn null;\n\n\t\t\t// Try the series first\n\t\t\tXmlNode group;\n\t\t\tgroup = GetChartGroupName(chart, gname, \"SeriesGroupings\", \"SeriesGrouping\", \"DynamicSeries\");\n\t\t\tif (group == null)\t// if not there try the row groupings\n\t\t\t\tgroup = GetChartGroupName(chart, gname, \"CategoryGroupings\", \"CategoryGrouping\", \"DynamicCategories\");\n\t\t\treturn group;\n\t\t}\n\n\t\tXmlNode GetChartGroupName(XmlNode chart, string gname, string search1, string search2, string search3)\n\t\t{\n\t\t\tXmlNode serGroups = this.GetNamedChildNode(chart, search1);\n\t\t\tif (serGroups == null)\n\t\t\t\treturn null;\n\n\t\t\tforeach (XmlNode sgroup in serGroups.ChildNodes)\n\t\t\t{\n\t\t\t\tif (sgroup.Name != search2)\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlNode group = DesignXmlDraw.FindNextInHierarchy(sgroup, search3,\"Grouping\");\n\t\t\t\tif (group == null)\n\t\t\t\t\tcontinue;\n\t\t\t\tstring name = this.GetElementAttribute(group, \"Name\", null);\n\t\t\t\tif (name == gname)\n\t\t\t\t\treturn group;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\tinternal XmlNode InsertChartCategoryGrouping(XmlNode chart)\n\t\t{\n\t\t\tif (chart == null || chart.Name != \"Chart\")\n\t\t\t\treturn null;\n\n\t\t\tXmlNode catGroups = this.GetCreateNamedChildNode(chart, \"CategoryGroupings\");\n\t\t\tXmlElement cgrp = rDoc.CreateElement(\"CategoryGrouping\");\n\t\t\tcatGroups.AppendChild(cgrp);\n\t\t\tXmlElement dyncats = rDoc.CreateElement(\"DynamicCategories\");\n\t\t\tcgrp.AppendChild(dyncats);\n\t\t\tXmlElement grp = rDoc.CreateElement(\"Grouping\");\n\t\t\tdyncats.AppendChild(grp);\n\n\t\t\treturn dyncats;\n\t\t}\n\n\t\tinternal XmlNode InsertChartSeriesGrouping(XmlNode chart)\n\t\t{\n\t\t\tif (chart == null || chart.Name != \"Chart\")\n\t\t\t\treturn null;\n\n\t\t\tXmlNode serGroups = this.GetCreateNamedChildNode(chart, \"SeriesGroupings\");\n\t\t\tXmlElement sgrp = rDoc.CreateElement(\"SeriesGrouping\");\n\t\t\tserGroups.AppendChild(sgrp);\n\t\t\tXmlElement dynsers = rDoc.CreateElement(\"DynamicSeries\");\n\t\t\tsgrp.AppendChild(dynsers);\n\t\t\tXmlElement grp = rDoc.CreateElement(\"Grouping\");\n\t\t\tdynsers.AppendChild(grp);\n\n\t\t\treturn dynsers;\n\t\t}\n\n\t\tinternal bool InMatrix(XmlNode node)\n\t\t{\n\t\t\tXmlNode pNode = node.ParentNode;\n\t\t\tif (pNode == null || pNode.Name != \"ReportItems\")\n\t\t\t\treturn false;\n\t\t\tpNode = pNode.ParentNode;\n\t\t\tif (pNode == null)\n\t\t\t\treturn false;\n\n\t\t\tswitch (pNode.Name)\n\t\t\t{\n\t\t\t\tcase \"MatrixCell\":\n\t\t\t\tcase \"Subtotal\":\n\t\t\t\tcase \"DynamicRows\":\n\t\t\t\tcase \"DynamicColumns\":\n\t\t\t\tcase \"StaticRows\":\n\t\t\t\tcase \"StaticColumns\":\n\t\t\t\tcase \"Corner\":\n\t\t\t\t\treturn true;\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tinternal XmlNode GetMatrixFromReportItem(XmlNode riNode)\n\t\t{\n\t\t\tXmlNode matrix;\n\t\t\tfor (matrix = riNode.ParentNode; matrix != null; matrix = matrix.ParentNode)\n\t\t\t{\n\t\t\t\tif (matrix.Name == \"Matrix\")\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn matrix;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the list of column group names given a ReportItem in a matrix\n\t\t/// </summary>\n\t\t/// <param name=\"riNode\"></param>\n\t\t/// <returns></returns>\n\t\tinternal string[] GetMatrixColumnGroupNames(XmlNode riNode)\n\t\t{\n\t\t\tXmlNode matrix = GetMatrixFromReportItem(riNode);\n\t\t\tif (matrix == null)\n\t\t\t\treturn null;\n\n\t\t\tXmlNode colGroups = this.GetNamedChildNode(matrix, \"ColumnGroupings\");\n\t\t\tif (colGroups == null)\n\t\t\t\treturn null;\n\n            List<string> ar = new List<string>();\n\t\t\tforeach (XmlNode cgroup in colGroups.ChildNodes)\n\t\t\t{\n\t\t\t\tif (cgroup.Name != \"ColumnGrouping\")\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlNode group = DesignXmlDraw.FindNextInHierarchy(cgroup, \"DynamicColumns\",\"Grouping\");\n\t\t\t\tif (group == null)\n\t\t\t\t\tcontinue;\n\t\t\t\tstring name = this.GetElementAttribute(group, \"Name\", null);\n\t\t\t\tif (name != null)\n\t\t\t\t\tar.Add(name);\n\t\t\t}\n\t\t\tif (ar.Count <= 0)\n\t\t\t\treturn null;\n\t\t\treturn ar.ToArray();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the list of row group names given a ReportItem in a matrix\n\t\t/// </summary>\n\t\t/// <param name=\"riNode\"></param>\n\t\t/// <returns></returns>\n\t\tinternal string[] GetMatrixRowGroupNames(XmlNode riNode)\n\t\t{\n\t\t\tXmlNode matrix = GetMatrixFromReportItem(riNode);\n\t\t\tif (matrix == null)\n\t\t\t\treturn null;\n\n\t\t\tXmlNode colGroups = this.GetNamedChildNode(matrix, \"RowGroupings\");\n\t\t\tif (colGroups == null)\n\t\t\t\treturn null;\n\n            List<string> ar = new List<string>();\n\t\t\tforeach (XmlNode cgroup in colGroups.ChildNodes)\n\t\t\t{\n\t\t\t\tif (cgroup.Name != \"RowGrouping\")\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlNode group = DesignXmlDraw.FindNextInHierarchy(cgroup, \"DynamicRows\",\"Grouping\");\n\t\t\t\tif (group == null)\n\t\t\t\t\tcontinue;\n\t\t\t\tstring name = this.GetElementAttribute(group, \"Name\", null);\n\t\t\t\tif (name != null)\n\t\t\t\t\tar.Add(name);\n\t\t\t}\n\t\t\tif (ar.Count <= 0)\n\t\t\t\treturn null;\n\t\t\treturn ar.ToArray();\n\t\t}\n\n\t\tinternal XmlNode InsertMatrixColumnGroup(XmlNode node)\n\t\t{\n\t\t\tXmlNode matrix = this.GetMatrixFromReportItem(node);\n\t\t\tif (matrix == null)\n\t\t\t\treturn null;\n\n\t\t\tXmlNode colGroups = this.GetCreateNamedChildNode(matrix, \"ColumnGroupings\");\n\t\t\t// ColumnGrouping in ColumnGroupings\n\t\t\tXmlElement cgrp = rDoc.CreateElement(\"ColumnGrouping\");\n\t\t\tcolGroups.AppendChild(cgrp);\n\t\t\tthis.SetElement(cgrp, \"Height\", \".25in\");\n\t\t\tXmlElement dyncols = rDoc.CreateElement(\"DynamicColumns\");\n\t\t\tcgrp.AppendChild(dyncols);\n\t\t\t// Grouping in DynamicColumns\n\t\t\tXmlElement grp = rDoc.CreateElement(\"Grouping\");\n\t\t\tdyncols.AppendChild(grp);\n\n\t\t\treturn dyncols;\n\t\t}\n\n\t\tinternal XmlNode InsertMatrixRowGroup(XmlNode node)\n\t\t{\n\t\t\tXmlNode matrix = this.GetMatrixFromReportItem(node);\n\t\t\tif (matrix == null)\n\t\t\t\treturn null;\n\n\t\t\tXmlNode rowGroups = this.GetCreateNamedChildNode(matrix, \"RowGroupings\");\n\t\t\t// ColumnGrouping in ColumnGroupings\n\t\t\tXmlElement rgrp = rDoc.CreateElement(\"RowGrouping\");\n\t\t\trowGroups.AppendChild(rgrp);\n\t\t\tthis.SetElement(rgrp, \"Width\", \"1in\");\n\t\t\tXmlElement dynrows = rDoc.CreateElement(\"DynamicRows\");\n\t\t\trgrp.AppendChild(dynrows);\n\t\t\t// Grouping in DynamicRows\n\t\t\tXmlElement grp = rDoc.CreateElement(\"Grouping\");\n\t\t\tdynrows.AppendChild(grp);\n\n\t\t\treturn dynrows;\n\t\t}\n\n\t\tinternal bool DeleteMatrixGroup(XmlNode dynamic)\n\t\t{\n\t\t\tXmlNode columnOrRow = dynamic.ParentNode;\n\t\t\tXmlNode groupings = columnOrRow.ParentNode;\n\n\t\t\tgroupings.RemoveChild(columnOrRow);\t// Remove the Grouping from Groups\n\t\t\tif (!groupings.HasChildNodes)\t\t// If Groups has no children\n\t\t\t{\t\t\t\t\t\t\t\t\t//   remove the ColumnGroupings from Matrix\n\t\t\t\tgroupings.ParentNode.RemoveChild(groupings);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Delete the matrix group (ColumnGrouping or RowGrouping) given a ReportItem in a matrix and the name of the group\n\t\t/// </summary>\n\t\t/// <param name=\"riNode\"></param>\n\t\t/// <returns>true if the Group is deleted</returns>\n\t\tinternal bool DeleteMatrixGroup(XmlNode riNode, string gname)\n\t\t{\n\t\t\tXmlNode matrix=this.GetMatrixFromReportItem(riNode);\n\t\t\tif (matrix == null)\n\t\t\t\treturn false;\n\n\t\t\t// Try the column groupings first\n\t\t\tXmlNode group;\n\t\t\tgroup = GetMatrixColumnGroupFromName(matrix, gname);\n\t\t\tif (group == null)\n\t\t\t\tgroup = GetMatrixRowGroupFromName(matrix, gname);\n\t\t\tif (group == null)\n\t\t\t\treturn false;\n\n\t\t\tXmlNode dynamic = group.ParentNode;\n\t\t\tXmlNode columnOrRow = dynamic.ParentNode;\n\t\t\tXmlNode groupings = columnOrRow.ParentNode;\n\n\t\t\tgroupings.RemoveChild(columnOrRow);\t// Remove the Grouping from Groups\n\t\t\tif (!groupings.HasChildNodes)\t\t// If Groups has no children\n\t\t\t{\t\t\t\t\t\t\t\t\t//   remove the TableGroups from Table\n\t\t\t\tmatrix.RemoveChild(groupings);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tinternal XmlNode GetMatrixGroup(XmlNode riNode, string gname)\n\t\t{\n\t\t\tXmlNode matrix=this.GetMatrixFromReportItem(riNode);\n\t\t\tif (matrix == null)\n\t\t\t\treturn null;\n\n\t\t\t// Try the column groupings first\n\t\t\tXmlNode group;\n\t\t\tgroup = GetMatrixColumnGroupFromName(matrix, gname);\n\t\t\tif (group == null)\t// if not there try the row groupings\n\t\t\t\tgroup = GetMatrixRowGroupFromName(matrix, gname);\n\t\t\treturn group;\n\t\t}\n\n\t\tinternal XmlNode GetMatrixColumnGroupFromName(XmlNode matrix, string gname)\n\t\t{\n\t\t\tXmlNode colGroups = this.GetNamedChildNode(matrix, \"ColumnGroupings\");\n\t\t\tif (colGroups == null)\n\t\t\t\treturn null;\n\n\t\t\tforeach (XmlNode cgroup in colGroups.ChildNodes)\n\t\t\t{\n\t\t\t\tif (cgroup.Name != \"ColumnGrouping\")\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlNode group = DesignXmlDraw.FindNextInHierarchy(cgroup, \"DynamicColumns\",\"Grouping\");\n\t\t\t\tif (group == null)\n\t\t\t\t\tcontinue;\n\t\t\t\tstring name = this.GetElementAttribute(group, \"Name\", null);\n\t\t\t\tif (name == gname)\n\t\t\t\t\treturn group;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\tinternal XmlNode GetMatrixRowGroupFromName(XmlNode matrix, string gname)\n\t\t{\n\t\t\tXmlNode rowGroups = this.GetNamedChildNode(matrix, \"RowGroupings\");\n\t\t\tif (rowGroups == null)\n\t\t\t\treturn null;\n\n\t\t\tforeach (XmlNode cgroup in rowGroups.ChildNodes)\n\t\t\t{\n\t\t\t\tif (cgroup.Name != \"RowGrouping\")\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlNode group = DesignXmlDraw.FindNextInHierarchy(cgroup, \"DynamicRows\",\"Grouping\");\n\t\t\t\tif (group == null)\n\t\t\t\t\tcontinue;\n\t\t\t\tstring name = this.GetElementAttribute(group, \"Name\", null);\n\t\t\t\tif (name == gname)\n\t\t\t\t\treturn group;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\tinternal XmlNode GetTableFromReportItem(XmlNode riNode)\n\t\t{\n\t\t\tXmlNode table;\n\t\t\tfor (table = riNode.ParentNode; table != null; table = table.ParentNode)\n\t\t\t{\n\t\t\t\tif (table.Name == \"Table\" || table.Name == \"fyi:Grid\")\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn table;\n\t\t}\n\t\t/// <summary>\n\t\t/// Return TableCell that contains the specified reportitem\n\t\t/// </summary>\n\t\t/// <param name=\"node\">ReportItem in a table row</param>\n\t\t/// <returns>null if not found</returns>\n\t\tinternal XmlNode GetTableCell(XmlNode node)\n\t\t{\n\t\t\t// find the table cell\n\t\t\tXmlNode tcNode;\n\t\t\tfor (tcNode = node.ParentNode; tcNode != null; tcNode = tcNode.ParentNode)\n\t\t\t{\n\t\t\t\tif (tcNode.Name == \"TableCell\")\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn tcNode;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Return Table column that contains the specified reportitem\n\t\t/// </summary>\n\t\t/// <param name=\"node\">ReportItem in a table row</param>\n\t\t/// <returns>null if not found</returns>\n\t\tinternal XmlNode GetTableColumn(XmlNode node)\n\t\t{\n\t\t\t// find the table cell\n\t\t\tXmlNode tcNode = GetTableCell(node);\n\t\t\tif (tcNode == null)\n\t\t\t\treturn null;\n\n\t\t\t// Get the table\n            XmlNode table = GetTableFromReportItem(tcNode);\n\t\t\tif (table == null)\n\t\t\t\treturn null;\n\n\t\t\tint col = GetTableColumnNumber(tcNode);\n\n\t\t\tXmlNode tcs = this.GetNamedChildNode(table, \"TableColumns\");\n\t\t\tif (tcs == null)\n\t\t\t\treturn null;\n\n\t\t\tXmlNode savetc=null;\n\t\t\tforeach (XmlNode tc in tcs.ChildNodes)\n\t\t\t{\n\t\t\t\tif (tc.Name != \"TableColumn\")\n\t\t\t\t\tcontinue;\n\n\t\t\t\tif (col < 1)\n\t\t\t\t{\n\t\t\t\t\tsavetc = tc;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcol--;\n\t\t\t}\n\t\t\treturn savetc;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Return TableRow that contains the specified reportitem\n\t\t/// </summary>\n\t\t/// <param name=\"node\">ReportItem in a table row</param>\n\t\t/// <returns>null if not found</returns>\n\t\tinternal XmlNode GetTableRow(XmlNode node)\n\t\t{\n\t\t\t// find the tablerow\n\t\t\tXmlNode trNode;\n\t\t\tfor (trNode = node.ParentNode; trNode != null; trNode = trNode.ParentNode)\n\t\t\t{\n\t\t\t\tif (trNode.Name == \"TableRow\")\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn trNode;\n\t\t}\n\t\t\n\t\t/// <summary>\n\t\t/// Delete the Table column that contains the specified reportitem\n\t\t/// </summary>\n\t\t/// <param name=\"node\">ReportItem in a table row</param>\n\t\t/// <returns>true if deleted</returns>\n\t\tinternal bool DeleteTableColumn(XmlNode node)\n\t\t{\n\t\t\t// find the table cell\n\t\t\tXmlNode tcNode;\n\t\t\tfor (tcNode = node.ParentNode; tcNode != null; tcNode = tcNode.ParentNode)\n\t\t\t{\n\t\t\t\tif (tcNode.Name == \"TableCell\")\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (tcNode == null)\n\t\t\t\treturn false;\n\n\t\t\t// Get the table\n            XmlNode table = GetTableFromReportItem(tcNode);\n\t\t\tif (table == null)\n\t\t\t\treturn false;\n\n\t\t\tif (GetTableColumnCount(table) <= 1)\t// We're deleting the last column?\n\t\t\t{\n\t\t\t\tthis.DeleteReportItem(table);\t\t// yes; just get rid of the table\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// calculate the column number of this node\n\t\t\tint col = GetTableColumnNumber(tcNode);\n\t\t\tDeleteTableColumn(this.GetNamedChildNode(table, \"TableColumns\"), col);\n\t\t\tDeleteTableColumn(DesignXmlDraw.FindNextInHierarchy(table, \"Header\", \"TableRows\"), col);\n\t\t\tDeleteTableColumn(DesignXmlDraw.FindNextInHierarchy(table, \"Details\", \"TableRows\"), col);\n\t\t\tDeleteTableColumn(DesignXmlDraw.FindNextInHierarchy(table, \"Footer\", \"TableRows\"), col);\n\t\t\tXmlNode tGroups = this.GetNamedChildNode(table, \"TableGroups\");\n\t\t\tif (tGroups == null)\n\t\t\t\treturn true;\n\t\t\t// run thru the table groups\n\t\t\tforeach (XmlNode tgrp in tGroups.ChildNodes)\n\t\t\t{\n\t\t\t\tif (tgrp.Name != \"TableGroup\")\n\t\t\t\t\tcontinue;\n\t\t\t\tDeleteTableColumn(DesignXmlDraw.FindNextInHierarchy(tgrp, \"Header\", \"TableRows\"), col);\n\t\t\t\tDeleteTableColumn(DesignXmlDraw.FindNextInHierarchy(tgrp, \"Footer\", \"TableRows\"), col);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tprivate void DeleteTableColumn(XmlNode sNode, int col)\n\t\t{\n\t\t\tif (sNode == null)\n\t\t\t\treturn;\n\n\t\t\tif (sNode.Name == \"TableRows\")\n\t\t\t{\n\t\t\t\t// Loop thru all the tablerows to get at the TableCells\n\t\t\t\tforeach (XmlNode tr in sNode.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (tr.Name == \"TableRow\")\n\t\t\t\t\t\tDeleteTableColumn(this.GetNamedChildNode(tr, \"TableCells\"), col);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// We have either TableCells or TableColumns\n\t\t\tstring name = \"TableCell\";\n\t\t\tif (sNode.Name == \"TableColumns\")\n\t\t\t\tname = \"TableColumn\";\n\n\t\t\tXmlNode del=null;\n\t\t\tforeach (XmlNode cNode in sNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (cNode.Name != name)\n\t\t\t\t\tcontinue;\n\t\t\t\tint colSpan = 1;\n\t\t\t\tif (name == \"TableCell\")\n\t\t\t\t\tcolSpan = Convert.ToInt32(GetElementValue(cNode, \"ColSpan\", \"1\"));\n\n\t\t\t\tif (col - colSpan < 0)\n\t\t\t\t{\n\t\t\t\t\tif (colSpan == 1)\n\t\t\t\t\t\tdel = cNode;\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.SetElement(cNode, \"ColSpan\", (colSpan - 1).ToString());\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcol -= colSpan;\n\t\t\t}\n\t\t\tif (del == null)\n\t\t\t\treturn;\n\t\t\tsNode.RemoveChild(del);\n\t\t\treturn;\n\t\t}\n\n\t\tprivate int GetTableColumnNumber(XmlNode tcell)\n\t\t{\n\t\t\tint col=0;\n\t\t\tXmlNode tcells = tcell.ParentNode;\n\t\t\tforeach (XmlNode cell in tcells.ChildNodes)\n\t\t\t{\n\t\t\t\tif (cell.Name != \"TableCell\")\n\t\t\t\t\tcontinue;\n\t\t\t\tif (cell == tcell)\n\t\t\t\t\tbreak;\n\t\t\t\tint colSpan = Convert.ToInt32(GetElementValue(cell, \"ColSpan\", \"1\"));\n\t\t\t\tcol += colSpan;\n\t\t\t}\n\t\t\treturn col;\n\t\t}\n\t\t\n\t\t/// <summary>\n\t\t/// Delete the TableRow that contains the specified reportitem\n\t\t/// </summary>\n\t\t/// <param name=\"node\">ReportItem in a table row</param>\n\t\t/// <returns>true if deleted</returns>\n\t\tinternal bool DeleteTableRow(XmlNode node)\n\t\t{\n\t\t\tXmlNode trNode;\n\t\t\tfor (trNode = node.ParentNode; trNode != null; trNode = trNode.ParentNode)\n\t\t\t{\n\t\t\t\tif (trNode.Name == \"TableRow\")\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (trNode == null)\n\t\t\t\treturn false;\n\n\t\t\tXmlNode trows = trNode.ParentNode;\n\t\t\ttrows.RemoveChild(trNode);\n\n\t\t\t// If that was the last TableRow in TableRows we need to delete TableRows as well\n\t\t\tif (this.GetNamedChildNode(trows, \"TableRow\") != null)\n\t\t\t\treturn true;\t\t// we have another tablerow in this section\n\t\t\tXmlNode section = trows.ParentNode;  //  get the TableRows parent\n\t\t\tswitch (section.Name)\n\t\t\t{\n\t\t\t\tcase \"Footer\":\n\t\t\t\tcase \"Details\":\n\t\t\t\tcase \"Header\":\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\t// anything other than footer, details, header doesn't require tablerows\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t\tXmlNode table = section.ParentNode;\t// get the parent\n\t\t\ttable.RemoveChild(section);\n\t\t\tif (this.GetNamedChildNode(table, \"Details\") != null ||\n\t\t\t\tthis.GetNamedChildNode(table, \"Footer\") != null ||\n\t\t\t\tthis.GetNamedChildNode(table, \"Header\") != null)\n\t\t\t\treturn true;\n\n\t\t\t// Also need to delete the table since no header, footer or detail\n\t\t\tthis.DeleteReportItem(table);\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Delete the table group given a ReportItem in a table and the name of the group\n\t\t/// </summary>\n\t\t/// <param name=\"riNode\"></param>\n\t\t/// <returns>true if the TableGroup is deleted</returns>\n\t\tinternal bool DeleteTableGroup(XmlNode riNode, string gname)\n\t\t{\n\t\t\tXmlNode table=this.GetTableFromReportItem(riNode);\n\t\t\tif (table == null)\n\t\t\t\treturn false;\n\n\t\t\tXmlNode tblGroups = this.GetNamedChildNode(table, \"TableGroups\");\n\t\t\tif (tblGroups == null)\n\t\t\t\treturn false;\n\n\t\t\tXmlNode tblGroup=null;\n\t\t\tforeach (XmlNode tgroup in tblGroups.ChildNodes)\n\t\t\t{\n\t\t\t\tif (tgroup.Name != \"TableGroup\")\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlNode group = this.GetNamedChildNode(tgroup, \"Grouping\");\n\t\t\t\tif (group == null)\n\t\t\t\t\tcontinue;\n\t\t\t\tstring name = this.GetElementAttribute(group, \"Name\", null);\n\t\t\t\tif (name == gname)\n\t\t\t\t{\n\t\t\t\t\ttblGroup = tgroup;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tblGroup == null)\n\t\t\t\treturn false;\n\n\t\t\ttblGroups.RemoveChild(tblGroup);\t// Remove the TableGroup from TableGroups\n\t\t\tif (!tblGroups.HasChildNodes)\t\t// If TableGroups has no children\n\t\t\t{\t\t\t\t\t\t\t\t\t//   remove the TableGroups from Table\n\t\t\t\ttable.RemoveChild(tblGroups);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the XmlNode of the table group given a ReportItem in a table and the name of the group\n\t\t/// </summary>\n\t\t/// <param name=\"riNode\"></param>\n\t\t/// <returns></returns>\n\t\tinternal XmlNode GetTableGroup(XmlNode riNode, string gname)\n\t\t{\n            XmlNode table = GetTableFromReportItem(riNode);\n\t\t\tif (table == null)\n\t\t\t\treturn null;\n\n\t\t\tXmlNode tblGroups = this.GetNamedChildNode(table, \"TableGroups\");\n\t\t\tif (tblGroups == null)\n\t\t\t\treturn null;\n\n\t\t\tforeach (XmlNode tgroup in tblGroups.ChildNodes)\n\t\t\t{\n\t\t\t\tif (tgroup.Name != \"TableGroup\")\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlNode group = this.GetNamedChildNode(tgroup, \"Grouping\");\n\t\t\t\tif (group == null)\n\t\t\t\t\tcontinue;\n\t\t\t\tstring name = this.GetElementAttribute(group, \"Name\", null);\n\t\t\t\tif (name == gname)\n\t\t\t\t\treturn tgroup;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the list of table group names given a ReportItem in a table\n\t\t/// </summary>\n\t\t/// <param name=\"riNode\"></param>\n\t\t/// <returns></returns>\n\t\tinternal string[] GetTableGroupNames(XmlNode riNode)\n\t\t{\n            XmlNode table = GetTableFromReportItem(riNode);\n\t\t\tif (table == null)\n\t\t\t\treturn null;\n\n\t\t\tXmlNode tblGroups = this.GetNamedChildNode(table, \"TableGroups\");\n\t\t\tif (tblGroups == null)\n\t\t\t\treturn null;\n\n            List<string> ar = new List<string>();\n\t\t\tforeach (XmlNode tgroup in tblGroups.ChildNodes)\n\t\t\t{\n\t\t\t\tif (tgroup.Name != \"TableGroup\")\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlNode group = this.GetNamedChildNode(tgroup, \"Grouping\");\n\t\t\t\tif (group == null)\n\t\t\t\t\tcontinue;\n\t\t\t\tstring name = this.GetElementAttribute(group, \"Name\", null);\n\t\t\t\tif (name != null)\n\t\t\t\t\tar.Add(name);\n\t\t\t}\n\t\t\tif (ar.Count <= 0)\n\t\t\t\treturn null;\n\t\t\treturn ar.ToArray();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Insert a table column before or after the column containing the specified ReportItem\n\t\t/// </summary>\n\t\t/// <param name=\"node\">The reportitem node</param>\n\t\t/// <param name=\"before\">If true row is inserted before this column otherwise it will go after.</param>\n\t\t/// <returns>true if the column was inserted</returns>\n\t\tinternal bool InsertTableColumn(XmlNode node, bool before)\n\t\t{\n\t\t\t// find the table cell\n\t\t\tXmlNode tcNode;\n\t\t\tfor (tcNode = node.ParentNode; tcNode != null; tcNode = tcNode.ParentNode)\n\t\t\t{\n\t\t\t\tif (tcNode.Name == \"TableCell\")\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (tcNode == null)\n\t\t\t\treturn false;\n\n\t\t\t// Get the table\n            XmlNode table = GetTableFromReportItem(tcNode);\n\t\t\tif (table == null)\n\t\t\t\treturn false;\n\n\t\t\t// Get the table column \n\t\t\tXmlNode refCol=null;\n\t\t\tint col = GetTableColumnNumber(tcNode);\n\t\t\tint ci=0;\n\t\t\tXmlNode tableColumns = this.GetNamedChildNode(table, \"TableColumns\");\n\t\t\tforeach (XmlNode tbCol in tableColumns.ChildNodes)\n\t\t\t{\n\t\t\t\tif (tbCol.Name != \"TableColumn\")\n\t\t\t\t\tcontinue;\n\t\t\t\tif (ci == col)\n\t\t\t\t{\n\t\t\t\t\trefCol = tbCol;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tci++;\n\t\t\t}\n\t\t\tif (refCol == null)\n\t\t\t\treturn false;\n\n\t\t\t// insert the tablecolumn\n\t\t\tXmlElement newcol = rDoc.CreateElement(\"TableColumn\");\n\t\t\tif (before)\n\t\t\t\ttableColumns.InsertBefore(newcol, refCol);\n\t\t\telse\n\t\t\t\ttableColumns.InsertAfter(newcol, refCol);\n\t\t\tthis.SetElement(newcol, \"Width\", this.GetElementValue(refCol, \"Width\", \"1in\"));\n\n\t\t\tInsertTableColumn(DesignXmlDraw.FindNextInHierarchy(table, \"Header\", \"TableRows\"), col, before);\n\t\t\tInsertTableColumn(DesignXmlDraw.FindNextInHierarchy(table, \"Details\", \"TableRows\"), col, before);\n\t\t\tInsertTableColumn(DesignXmlDraw.FindNextInHierarchy(table, \"Footer\", \"TableRows\"), col, before);\n\t\t\tXmlNode tGroups = this.GetNamedChildNode(table, \"TableGroups\");\n\t\t\tif (tGroups == null)\n\t\t\t\treturn true;\n\t\t\t// run thru the table groups\n\t\t\tforeach (XmlNode tgrp in tGroups.ChildNodes)\n\t\t\t{\n\t\t\t\tif (tgrp.Name != \"TableGroup\")\n\t\t\t\t\tcontinue;\n\t\t\t\tInsertTableColumn(DesignXmlDraw.FindNextInHierarchy(tgrp, \"Header\", \"TableRows\"), col, before);\n\t\t\t\tInsertTableColumn(DesignXmlDraw.FindNextInHierarchy(tgrp, \"Footer\", \"TableRows\"), col, before);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tprivate void InsertTableColumn(XmlNode tcells, int col, bool before)\n\t\t{\n\t\t\tif (tcells == null)\n\t\t\t\treturn;\n\n\t\t\tif (tcells.Name == \"TableRows\")\n\t\t\t{\n\t\t\t\t// Loop thru all the tablerows to get at the TableCells\n\t\t\t\tforeach (XmlNode tr in tcells.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (tr.Name == \"TableRow\")\n\t\t\t\t\t\tInsertTableColumn(this.GetNamedChildNode(tr, \"TableCells\"), col, before);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// We have TableCells\n\t\t\tXmlNode refCell=null;\n\t\t\tforeach (XmlNode cNode in tcells.ChildNodes)\n\t\t\t{\n\t\t\t\tif (cNode.Name != \"TableCell\")\n\t\t\t\t\tcontinue;\n\t\t\t\t\n\t\t\t\tint\tcolSpan = Convert.ToInt32(GetElementValue(cNode, \"ColSpan\", \"1\"));\n\n\t\t\t\tif (col - colSpan < 0)\n\t\t\t\t{\n\t\t\t\t\tif (colSpan == 1 || (col == 0 && before))   // insert new column if very first and before\n\t\t\t\t\t\trefCell = cNode;\t\t\t\t\t\t//   or if no colSpan has been requested\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.SetElement(cNode, \"ColSpan\", (colSpan + 1).ToString());\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcol -= colSpan;\n\t\t\t}\n\t\t\tif (refCell == null)\n\t\t\t\treturn;\n\n\t\t\tInsertTableColumn(tcells, refCell, before);\n\t\t}\n\n\t\tprivate void InsertTableColumn(XmlNode tcells, XmlNode refCell, bool before)\n\t\t{\n\t\t\t// insert the TableCell\n\t\t\tXmlElement ntcell = rDoc.CreateElement(\"TableCell\");\n\t\t\tif (before)\n\t\t\t\ttcells.InsertBefore(ntcell, refCell);\n\t\t\telse\n\t\t\t\ttcells.InsertAfter(ntcell, refCell);\n\n\t\t\t// ReportItems in TableCell\n\t\t\tXmlElement ris = rDoc.CreateElement(\"ReportItems\");\n\t\t\tntcell.AppendChild(ris);\n\t\t\t// TextBox in ReportItems\n\t\t\tXmlElement tbox = rDoc.CreateElement(\"Textbox\");\n\t\t\tReportNames.GenerateName(tbox);\n\t\t\tris.AppendChild(tbox);\n\n\t\t\tXmlElement vnode = rDoc.CreateElement(\"Value\");\n\t\t\tvnode.InnerText = \"\";\n\t\t\ttbox.AppendChild(vnode);\n\t\t\t// Copy style info if refCell contains a Textbox\n\t\t\tXmlNode styleNode = DesignXmlDraw.FindNextInHierarchy(refCell, \"ReportItems\", \"Textbox\", \"Style\");\n\t\t\tif (styleNode != null)\n\t\t\t\ttbox.AppendChild(styleNode.CloneNode(true));\n\n\t\t\treturn;\n\t\t}\n\t\t/// <summary>\n\t\t/// Creates a new TableGroup and put it on the end of the chain\n\t\t/// </summary>\n\t\t/// <param name=\"node\">ReportItem this is contained in the table</param>\n\t\t/// <returns>XmlNode of the new TableGroup</returns>\n\t\tinternal XmlNode InsertTableGroup(XmlNode node)\n\t\t{\n\t\t\tXmlNode table = this.GetTableFromReportItem(node);\n\t\t\tif (table == null)\n\t\t\t\treturn null;\n\n\t\t\tXmlNode tblGroups = this.GetCreateNamedChildNode(table, \"TableGroups\");\n\t\t\t// TableGroup in TableGroups\n\t\t\tXmlElement tgrp = rDoc.CreateElement(\"TableGroup\");\n\t\t\ttblGroups.AppendChild(tgrp);\n\t\t\t// Grouping in TableGroup\n\t\t\tXmlElement grp = rDoc.CreateElement(\"Grouping\");\n\t\t\ttgrp.AppendChild(grp);\n\n\t\t\treturn tgrp;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Deletes the passed TableGroup; if last TableGroup in TableGroups then TableGroups also deleted\n\t\t/// </summary>\n\t\t/// <param name=\"node\">XmlNode of TableGroup</param>\n\t\tinternal void DeleteTableGroup(XmlNode tgrp)\n\t\t{\n\t\t\tif (tgrp == null || tgrp.Name != \"TableGroup\")\t// make sure we have valid arguments\n\t\t\t\treturn;\n\t\t\tXmlNode tblGroups = tgrp.ParentNode;\n\n\t\t\ttblGroups.RemoveChild(tgrp);\n\t\t\tif (this.GetNamedChildNode(tblGroups, \"TableGroup\") == null)\n\t\t\t{\t// this was the last tablegroup\n\t\t\t\tXmlNode table = tblGroups.ParentNode;\n\t\t\t\ttable.RemoveChild(tblGroups);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Insert a table row before or after the TableRow containing the specified ReportItem\n\t\t/// </summary>\n\t\t/// <param name=\"node\">The reportitem node</param>\n\t\t/// <param name=\"before\">If true row is inserted before this TableRow otherwise it will go after.</param>\n\t\t/// <returns>true if the TableRow was inserted</returns>\n\t\tinternal bool InsertTableRow(XmlNode node, bool before)\n\t\t{\n\t\t\tXmlNode trNode;\n\t\t\tfor (trNode = node.ParentNode; trNode != null; trNode = trNode.ParentNode)\n\t\t\t{\n\t\t\t\tif (trNode.Name == \"TableRow\")\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (trNode == null)\n\t\t\t\treturn false;\n\n\t\t\tXmlNode tcells = this.GetNamedChildNode(trNode, \"TableCells\");\n\t\t\tif (tcells == null)\n\t\t\t\treturn false;\n\n\t\t\tXmlNode trows = trNode.ParentNode;\n\t\t\tXmlElement newrow = rDoc.CreateElement(\"TableRow\");\n\t\t\tif (before)\n\t\t\t\ttrows.InsertBefore(newrow, trNode);\n\t\t\telse\n\t\t\t\ttrows.InsertAfter(newrow, trNode);\n\n\t\t\tXmlElement height = rDoc.CreateElement(\"Height\");\n\t\t\t// use same height as reference row if possible\n\t\t\tXmlNode cheight = this.GetNamedChildNode(trNode, \"Height\");\n\t\t\tif (cheight != null)\n\t\t\t\theight.InnerText = cheight.InnerText;\n\t\t\telse\n\t\t\t\theight.InnerText = \".25in\";\n\t\t\tnewrow.AppendChild(height);\n\t\t\tXmlElement tablecells = rDoc.CreateElement(\"TableCells\");\n\t\t\tnewrow.AppendChild(tablecells);\n\n\t\t\t// loop thru the TableCell children of the reference tablerow;\n\t\t\t//  create a textbox for each column\n\t\t\tforeach (XmlNode tcell in tcells.ChildNodes)\n\t\t\t{\n\t\t\t\tif (tcell.Name != \"TableCell\")\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlElement ntcell = rDoc.CreateElement(\"TableCell\");\n\t\t\t\ttablecells.AppendChild(ntcell);\n\t\t\t\tXmlElement ris = rDoc.CreateElement(\"ReportItems\");\n\t\t\t\tntcell.AppendChild(ris);\n\t\t\t\t\n\t\t\t\t// Need to create a column for each spaned column\n\t\t\t\tint colSpan = Convert.ToInt32(GetElementValue(tcell, \"ColSpan\", \"1\"));\n\n                // add ColSpan to match the source row\n                if (colSpan > 1)\n                {\n                    XmlElement colSpanNode = rDoc.CreateElement(\"ColSpan\");\n                    colSpanNode.InnerText = colSpan.ToString();\n                    ntcell.AppendChild(colSpanNode);\n                }\n\n                XmlNode styleNode = DesignXmlDraw.FindNextInHierarchy(tcell, \"ReportItems\", \"Textbox\", \"Style\");\n                XmlElement tbox = rDoc.CreateElement(\"Textbox\");\n                ReportNames.GenerateName(tbox);\n                ris.AppendChild(tbox);\n\n                XmlElement vnode = rDoc.CreateElement(\"Value\");\n                vnode.InnerText = \"\";\n                tbox.AppendChild(vnode);\n                if (styleNode != null)\n                    tbox.AppendChild(styleNode.CloneNode(true));\n\n            }\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Insert a table row given a TableRows; uses TableColumns to create proper number of rows\n\t\t/// </summary>\n\t\t/// <param name=\"node\">The reportitem node</param>\n\t\t/// <returns>true if the TableRow was inserted</returns>\n\t\tinternal bool InsertTableRow(XmlNode tblRows)\n\t\t{\n\t\t\tif (tblRows == null)\n\t\t\t\treturn false;\n\n            XmlNode table = GetTableFromReportItem(tblRows);\n\t\t\tif (table == null)\n\t\t\t\treturn false;\n\n\t\t\tXmlNode columns = this.GetNamedChildNode(table, \"TableColumns\");\n\t\t\tif (columns == null)\n\t\t\t\treturn false;\n\n\t\t\tXmlElement newrow = this.CreateElement(tblRows, \"TableRow\", null);\n\t\t\tthis.CreateElement(newrow, \"Height\", \".2in\");\t\t\t\n\n\t\t\tXmlElement tablecells = this.CreateElement(newrow, \"TableCells\", null);\n\n\t\t\t// loop thru the TableColumns children\n\t\t\t//  create a textbox for each column\n\t\t\tforeach (XmlNode col in columns.ChildNodes)\n\t\t\t{\n\t\t\t\tif (col.Name != \"TableColumn\")\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlElement ntcell = this.CreateElement(tablecells, \"TableCell\", null);\n\t\t\t\tXmlElement ris = this.CreateElement(ntcell, \"ReportItems\", null);\n\t\t\t\tXmlElement tbox = this.CreateElement(ris, \"Textbox\", null);\n\t\t\t\tReportNames.GenerateName(tbox);\n\t\t\t\tXmlElement style = this.CreateElement(tbox, \"Style\", null);\n\t\t\t\tXmlElement bstyle = this.CreateElement(style, \"BorderStyle\", null);\n\t\t\t\tthis.SetElement(bstyle, \"Default\", \"Solid\");\n\t\t\t\tthis.SetElement(tbox, \"Value\", \"\");\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tinternal bool InPageHeaderOrFooter(XmlNode node)\n\t\t{\n\t\t\tfor (XmlNode p = node; p != null; p = p.ParentNode)\n\t\t\t{\n\t\t\t\tif (node.Name == \"PageHeader\" || node.Name == \"PageFooter\")\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Checks to see if node is part of a table\n\t\t/// </summary>\n\t\t/// <param name=\"node\">Usually a ReportItem</param>\n\t\t/// <returns>true if part of a table</returns>\n\t\tinternal bool InTable(XmlNode node)\n\t\t{\n\t\t\tXmlNode pNode = node.ParentNode;\n\t\t\tif (pNode == null || pNode.Name != \"ReportItems\")\n\t\t\t\treturn false;\n\t\t\tpNode = pNode.ParentNode;\n\t\t\tif (pNode == null || pNode.Name != \"TableCell\")\n\t\t\t\treturn false;\n\t\t\telse\n\t\t\t\treturn true;\n\t\t}\n\n        /// <summary>\n        /// Checks to see if node is part of a grid\n        /// </summary>\n        /// <param name=\"node\">Usually a ReportItem</param>\n        /// <returns>true if part of a Grid</returns>\n        internal bool InGrid(XmlNode node)\n        {\n            for (XmlNode pNode = node.ParentNode; pNode != null; pNode = pNode.ParentNode)\n            {\n                if (pNode.Name == \"fyi:Grid\")\n                    return true;\n                if (pNode.Name == \"Rectangle\" || pNode.Name == \"Table\" || pNode.Name==\"Matrix\" || pNode.Name==\"List\")\n                    return false;\n            }\n            return false;\n        }\n\n\t\t/// <summary>\n\t\t/// Returns the node of the parent table (or matrix) or null\n\t\t/// </summary>\n\t\t/// <param name=\"node\"></param>\n\t\t/// <returns></returns>\n\t\tinternal XmlNode TMParent(XmlNode node)\n\t\t{\n\t\t\tfor (XmlNode pNode = node.ParentNode; pNode != null; pNode = pNode.ParentNode)\n\t\t\t{\n\t\t\t\tif (pNode.Name == \"Table\" || pNode.Name == \"Matrix\" || pNode.Name == \"fyi:Grid\")\n\t\t\t\t\treturn pNode;\n                if (pNode.Name == \"Rectangle\")\n                    return null;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\tprivate int PixelsX(float x)\t\t// points to pixels\n\t\t{\n\t\t\treturn (int) (x * DpiX / POINTSIZED);\n\t\t}\n\n\t\tprivate int PixelsY(float y)\n\t\t{\n\t\t\treturn (int) (y * DpiY / POINTSIZED);\n\t\t}\n\n        private float PointsX(float x)\t\t// pixels to points\n        {\n            return x * POINTSIZED / DpiX;\n        }\n\n        private float PointsY(float y)\n        {\n            return y * POINTSIZED / DpiY;\n        }\n\n\t\t/// <summary>\n\t\t/// Return the name of the section where item is draw\t\t\n\t\t/// </summary>\n\t\t/// <param name=\"node\"></param>\n\t\t/// <returns></returns>\n\t\tpublic string SectionBelongsTo(XmlNode node)\n\t\t{\n            var myList = new List<string>() { \"PageHeader\", \"Body\", \"PageFooter\" };\n\t\t\tnode = node.ParentNode;\n\t\t\tstring Name = node.Name;\n\t\t\twhile(!myList.Any(x => x.Contains(Name)))\n\t\t\t{\n\t\t\t\tnode = node.ParentNode;\n\t\t\t\tName=node.Name;\n\t\t\t}\n\t\t\treturn Name;\n        }\n\n\t\t/// <summary>\n\t\t/// Return the Width of the node container\n\t\t/// </summary>\n\t\t/// <param name=\"node\"></param>\n\t\t/// <returns></returns>\n\t\tpublic float WidthOfContainer(XmlNode node)\n\t\t{\n\t\t\tnode = node.ParentNode.ParentNode;\n\t\t\tstring Name = node.Name;\n\t\t\tvar myList = new List<string>() { \"PageHeader\", \"Body\", \"PageFooter\" };\n\t\t\tif (myList.Any(x => x.Contains(Name)))\n\t\t\t{\n\t\t\t\t\treturn pWidth-lMargin-rMargin;\n\t\t\t}\n\t\t\t//\n\t\t\t// Is not a section , but is a container for selection\n\t\t\t// Determine the Width\n\t\t\t//\n\t\t\treturn GetRectangle(node).Width;\t\n\t\t}\n\t\t/// <summary>\n\t\t/// Return then Height of node container\n\t\t/// </summary>\n\t\t/// <param name=\"node\"></param>\n\t\t/// <returns></returns>\n\t\tpublic float HeightOfContainer(XmlNode node)\n\t\t{\n\t\t\tnode = node.ParentNode.ParentNode;\n\t\t\tstring Name = node.Name;\n\t\t\tswitch (Name) {\n\t\t\t\tcase \"Body\":\n\t\t\t\t\treturn 0;\n\t\t\t\tcase \"PageHeader\":\n\t\t\t\t\treturn PageHeaderHeight;\n\t\t\t\tcase \"PageFooter\":\n\t\t\t\t\treturn PageFooterHeight;\n\t\t\t\tdefault:\n\t\t\t\t\treturn GetRectangle(node).Height;\n\t\t\t}\n\t\t}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t}\n\n\tinternal enum HitLocationEnum\n\t{\n\t\tInside,\n\t\t// The following can only occur on a selected item\n\t\tMove,\n\t\tTopLeft,\n\t\tTopMiddle,\n\t\tTopRight,\n\t\tBottomLeft,\n\t\tBottomMiddle,\n\t\tBottomRight,\n\t\tLeftMiddle,\n\t\tRightMiddle,\n\t\tTableColumnResize,\n\t\tTableRowResize,\n\t\tLineLeft,\n\t\tLineRight\n\t}\n\tinternal class HitLocation\n\t{\n\t\tinternal XmlNode HitNode;\n\t\tinternal XmlNode HitContainer;\n\t\tinternal HitLocationEnum HitSpot=HitLocationEnum.Inside;\n\t\tinternal PointF HitRelative;\t\t// x,y location of object relative to first container; ie page header, body, page footer, list, rectangle\n\t\tinternal HitLocation (XmlNode hn, XmlNode hc, HitLocationEnum location, PointF offset)\n\t\t{\n\t\t\tHitNode = hn;\n\t\t\tHitContainer = hc;\n\t\t\tHitSpot = location;\n\t\t\tHitRelative = offset;\n\t\t}\n\t}\n\tinternal class ReportItemSorter: IComparer<XmlNode>\n\t{\n\t\tDesignXmlDraw _Draw;\n\t\tinternal ReportItemSorter(DesignXmlDraw d)\n\t\t{\n\t\t\t_Draw = d;\n\t\t}\n\n\t\t#region IComparer Members\n\n\t\tpublic int Compare(XmlNode x, XmlNode y)\n\t\t{\n\t\t\tint xi = Convert.ToInt32(_Draw.GetElementValue(x, \"ZIndex\", \"0\"));\n\t\t\tint yi = Convert.ToInt32(_Draw.GetElementValue(y, \"ZIndex\", \"0\"));\n\n\t\t\treturn xi-yi;\n\t\t}\n\n\t\t#endregion\n\n\t}\n\n    internal class ReportItemReverseSorter : IComparer<XmlNode>\n    {\n        DesignXmlDraw _Draw;\n        [System.Diagnostics.DebuggerStepThrough]\n        internal ReportItemReverseSorter(DesignXmlDraw d)\n        {\n            _Draw = d;\n        }\n\n        #region IComparer Members\n\n        [System.Diagnostics.DebuggerStepThrough]\n        public int Compare(XmlNode x, XmlNode y)\n        {\n            int xi = Convert.ToInt32(_Draw.GetElementValue(x, \"ZIndex\", \"0\"));\n            int yi = Convert.ToInt32(_Draw.GetElementValue(y, \"ZIndex\", \"0\"));\n\n            return yi - xi;\n        }\n\n        #endregion\n\n    } \n}\n"
  },
  {
    "path": "RdlDesign/DesignXmlDraw.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<root>\n\t<xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n\t\t<xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n\t\t\t<xsd:complexType>\n\t\t\t\t<xsd:choice maxOccurs=\"unbounded\">\n\t\t\t\t\t<xsd:element name=\"data\">\n\t\t\t\t\t\t<xsd:complexType>\n\t\t\t\t\t\t\t<xsd:sequence>\n\t\t\t\t\t\t\t\t<xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t\t<xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n\t\t\t\t\t\t\t</xsd:sequence>\n\t\t\t\t\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" />\n\t\t\t\t\t\t\t<xsd:attribute name=\"type\" type=\"xsd:string\" />\n\t\t\t\t\t\t\t<xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n\t\t\t\t\t\t</xsd:complexType>\n\t\t\t\t\t</xsd:element>\n\t\t\t\t\t<xsd:element name=\"resheader\">\n\t\t\t\t\t\t<xsd:complexType>\n\t\t\t\t\t\t\t<xsd:sequence>\n\t\t\t\t\t\t\t\t<xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t</xsd:sequence>\n\t\t\t\t\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n\t\t\t\t\t\t</xsd:complexType>\n\t\t\t\t\t</xsd:element>\n\t\t\t\t</xsd:choice>\n\t\t\t</xsd:complexType>\n\t\t</xsd:element>\n\t</xsd:schema>\n\t<resheader name=\"ResMimeType\">\n\t\t<value>text/microsoft-resx</value>\n\t</resheader>\n\t<resheader name=\"Version\">\n\t\t<value>1.0.0.0</value>\n\t</resheader>\n\t<resheader name=\"Reader\">\n\t\t<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n\t</resheader>\n\t<resheader name=\"Writer\">\n\t\t<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n\t</resheader>\n</root>\n"
  },
  {
    "path": "RdlDesign/DesignerUtility.cs",
    "content": "\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlDesign.Resources;\nusing Microsoft.Win32;\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.Data;\nusing System.Data.SqlClient;\nusing System.Drawing;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Text.RegularExpressions;\nusing System.Windows.Forms;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// Static utility classes used in the Rdl Designer\n    /// </summary>\n    internal static class DesignerUtility\n\t{\n\t\tstatic internal Color ColorFromHtml(string sc, Color dc)\n\t\t{\n\t\t\tColor c = dc;\n\t\t\ttry \n\t\t\t{\n                if (!sc.StartsWith(\"=\"))            // don't even try when color is an expression\n\t\t\t\t    c = ColorTranslator.FromHtml(sc);\n\t\t\t}\n\t\t\tcatch \n\t\t\t{\t// Probably should report this error\n\t\t\t}\n\t\t\treturn c;\n\t\t}\n        \n\t\t/// <summary>\n\t\t/// Read the registry to find out the ODBC names\n\t\t/// </summary>\n\t\tstatic internal void FillOdbcNames(ComboBox cbOdbcNames)\n\t\t{\n\t\t\tif (cbOdbcNames.Items.Count > 0)\n\t\t\t\treturn;\n\n\t\t\t// System names\t\t\t\t\t\t   \n\t\t\tRegistryKey rk = (Registry.LocalMachine).OpenSubKey(\"Software\");\n\t\t\tif (rk == null)\n\t\t\t\treturn;\n\t\t\trk = rk.OpenSubKey(\"ODBC\");\n\t\t\tif (rk == null)\n\t\t\t\treturn;\n\t\t\trk = rk.OpenSubKey(\"ODBC.INI\");\n\t\t\t\n\t\t\tstring[] nms = rk.GetSubKeyNames();\n\t\t\tif (nms != null)\n\t\t\t{\n\t\t\t\tforeach (string name in nms)\n\t\t\t\t{\n\t\t\t\t\tif (name == \"ODBC Data Sources\" ||\n\t\t\t\t\t\tname == \"ODBC File DSN\" || name == \"ODBC\")\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcbOdbcNames.Items.Add(name);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// User names\n\t\t\trk = (Registry.CurrentUser).OpenSubKey(\"Software\");\n\t\t\tif (rk == null)\n\t\t\t\treturn;\n\t\t\trk = rk.OpenSubKey(\"ODBC\");\n\t\t\tif (rk == null)\n\t\t\t\treturn;\n\t\t\trk = rk.OpenSubKey(\"ODBC.INI\");\n\t\t\tnms = rk.GetSubKeyNames();\n\t\t\tif (nms != null)\n\t\t\t{\n\t\t\t\tforeach (string name in nms)\n\t\t\t\t{\n\t\t\t\t\tif (name == \"ODBC Data Sources\" ||\n\t\t\t\t\t\tname == \"ODBC File DSN\" || name == \"ODBC\")\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcbOdbcNames.Items.Add(name);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tstatic internal string FormatXml(string sDoc)\n\t\t{\n\t\t\tXmlDocument xDoc = new XmlDocument();\n\t\t\txDoc.PreserveWhitespace = false;\n\t\t\txDoc.LoadXml(sDoc);\t\t\t\t\t\t// this will throw an exception if invalid XML\n\t\t\tStringWriter sw = new StringWriter();\n\t\t\tXmlTextWriter xtw = new XmlTextWriter(sw);\n\t\t\txtw.IndentChar = ' ';\n\t\t\txtw.Indentation = 2;\n\t\t\txtw.Formatting = Formatting.Indented;\n\t\t\t\n\t\t\txDoc.WriteContentTo(xtw);\n\t\t\txtw.Close();\n\t\t\tsw.Close();\n\t\t\treturn sw.ToString();\n\t\t}\n\n        static internal bool GetSharedConnectionInfo(RdlUserControl dsr, string filename, out string dataProvider, out string connectInfo)\n        {\n            dataProvider = null;\n            connectInfo = null;\n\n            string pswd = null;\n            string xml = \"\";\n            try\n            {\n                pswd = dsr.GetPassword();\n                if (pswd == null)\n                    return false;\n                if (!filename.EndsWith(\".dsr\", StringComparison.InvariantCultureIgnoreCase))\n                    filename += \".dsr\";\n\n                xml = Rdl.DataSourceReference.Retrieve(filename, pswd);\n            }\n            catch\n            {\n                MessageBox.Show(Strings.DesignerUtility_Show_SharedConnectionError, Strings.DesignerUtility_Show_TestConnection);\n                dsr.ResetPassword();\t\t\t// make sure to prompt again for the password\n                return false;\n            }\n            XmlDocument xDoc = new XmlDocument();\n            xDoc.LoadXml(xml);\n            XmlNode xNodeLoop = xDoc.FirstChild;\n            foreach (XmlNode node in xNodeLoop.ChildNodes)\n            {\n                switch (node.Name)\n                {\n                    case \"DataProvider\":\n                        dataProvider = node.InnerText;\n                        break;\n                    case \"ConnectString\":\n                        connectInfo = node.InnerText;\n                        break;\n                    default:\n                        break;\n                }\n            }\n            return true;\n        }\n\n\n        static internal bool GetSharedConnectionInfo(RdlDesigner dsr, string filename, out string dataProvider, out string connectInfo)\n        {\n            dataProvider = null;\n            connectInfo = null;\n\n            string pswd = null;\n            string xml = \"\";\n            try\n            {\n                pswd = dsr.GetPassword();\n                if (pswd == null)\n                    return false;\n                if (!filename.EndsWith(\".dsr\", StringComparison.InvariantCultureIgnoreCase))\n                    filename += \".dsr\";\n\n                xml = Rdl.DataSourceReference.Retrieve(filename, pswd);\n            }\n            catch\n            {\n                MessageBox.Show(Strings.DesignerUtility_Show_SharedConnectionError, Strings.DesignerUtility_Show_TestConnection);\n                dsr.ResetPassword();\t\t\t// make sure to prompt again for the password\n                return false;\n            }\n            XmlDocument xDoc = new XmlDocument();\n            xDoc.LoadXml(xml);\n            XmlNode xNodeLoop = xDoc.FirstChild;\n            foreach (XmlNode node in xNodeLoop.ChildNodes)\n            {\n                switch (node.Name)\n                {\n                    case \"DataProvider\":\n                        dataProvider = node.InnerText;\n                        break;\n                    case \"ConnectString\":\n                        connectInfo = node.InnerText;\n                        break;\n                    default:\n                        break;\n                }\n            }\n            return true;\n        }\n\t\tstatic internal void GetSqlData(string dataProvider, string connection, string sql, IList parameters, DataTable dt)\n\t\t{\n\t\t\tIDbConnection cnSQL=null;\n\t\t\tIDbCommand cmSQL=null;\n\t\t\tIDataReader dr=null;\t   \n\t\t\tCursor saveCursor=Cursor.Current;\n\t\t\tCursor.Current = Cursors.WaitCursor;\n\t\t\ttry\n\t\t\t{\n\t\t\t\t// Open up a connection\n\t\t\t\tcnSQL = RdlEngineConfig.GetConnection(dataProvider, connection);\n\t\t\t\tif (cnSQL == null)\n\t\t\t\t\treturn;\n\n\t\t\t\tcnSQL.Open();\n\t\t\t\tcmSQL = cnSQL.CreateCommand();\n\t\t\t\tcmSQL.CommandText = sql;\n\t\t\t\tAddParameters(cmSQL, parameters);\n\t\t\t\tdr = cmSQL.ExecuteReader(CommandBehavior.SingleResult);\n\n\t\t\t\tobject[] rowValues = new object[dt.Columns.Count];\n\n\t\t\t\twhile (dr.Read())\n\t\t\t\t{\n\t\t\t\t\tint ci=0;\n\t\t\t\t\tforeach (DataColumn dc in dt.Columns)\n\t\t\t\t\t{\n                        object v = dr[dc.ColumnName];\n//                        string val = Convert.ToString(dr[dc.ColumnName], System.Globalization.NumberFormatInfo.InvariantInfo);\n//                        rowValues[ci++] = val;\n                        rowValues[ci++] = v;\n\t\t\t\t\t}\n\t\t\t\t\tdt.Rows.Add(rowValues);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (cnSQL != null)\n\t\t\t\t{\n\t\t\t\t\tcnSQL.Close();\n\t\t\t\t\tcnSQL.Dispose();\n\t\t\t\t\tif (cmSQL != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tcmSQL.Dispose();\n\t\t\t\t\t\tif (dr != null)\n\t\t\t\t\t\t\tdr.Close();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tCursor.Current=saveCursor;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        static internal bool GetConnnectionInfo(DesignXmlDraw d, string ds, out string dataProvider, out string connection)\n        {\n            XmlNode dsNode = d.DataSourceName(ds);\n            dataProvider = null;\n            connection = null;\n            if (dsNode == null)\n                return false;\n\n            string dataSourceReference = d.GetElementValue(dsNode, \"DataSourceReference\", null);\n            if (dataSourceReference != null)\n            {\n                //  This is not very pretty code since it is assuming the structure of the windows parenting.\n                //    But there isn't any other way to get this information from here.\n                Control p = d;\n                MDIChild mc = null;\n                while (p != null && !(p is RdlDesigner))\n                {\n                    if (p is MDIChild)\n                        mc = (MDIChild)p;\n\n                    p = p.Parent;\n                }\n                if (p == null || mc == null || mc.SourceFile == null)\n                {\n                    MessageBox.Show(Strings.DataSetRowsCtl_ShowC_UnableLocateDSR);\n                    return false;\n                }\n                Uri filename = new Uri(Path.GetDirectoryName(mc.SourceFile.LocalPath) + Path.DirectorySeparatorChar + dataSourceReference);\n                if (!DesignerUtility.GetSharedConnectionInfo((RdlDesigner)p, filename.LocalPath, out dataProvider, out connection))\n                {\n                    return false;\n                }\n            }\n            else\n            {\n                XmlNode dp = DesignXmlDraw.FindNextInHierarchy(dsNode, \"ConnectionProperties\", \"DataProvider\");\n                if (dp == null)\n                    return false;\n                dataProvider = dp.InnerText;\n                dp = DesignXmlDraw.FindNextInHierarchy(dsNode, \"ConnectionProperties\", \"ConnectString\");\n                if (dp == null)\n                    return false;\n                connection = dp.InnerText;\n\n                if (connection.StartsWith(\"=\"))\n                {\n                    connection = d.GetReportParameterDefaultValue(connection);\n                }\n            }\n            return true;\n        }\n\n        public static string ExtractParameterNameFromParameterExpression(string parameterExpression)\n        {\n            return parameterExpression\n                // syntax 1\n                .Replace(\"=Parameters!\", \"\")\n                .Replace(\".Value\", \"\")\n                // syntax 2\n                .Replace(\"={?\", \"\")\n                .Replace(\"}\", \"\")\n                ;\n        }\n\n        static internal List<SqlColumn> GetSqlColumns(DesignXmlDraw d, string ds, string sql)\n\t\t{\n            string dataProvider;\n            string connection;\n\n            if (!GetConnnectionInfo(d, ds, out dataProvider, out connection))\n                return null;\n\n            IList parameters=null;\n\n\t\t\treturn GetSqlColumns(dataProvider, connection, sql, parameters);\n\t\t}\n\n\t\tstatic internal List<SqlColumn> GetSqlColumns(DesignXmlDraw d, string ds, string sql, DataTable parameters)\n\t\t{\n\t\t\tstring dataProvider;\n\t\t\tstring connection;\n\n\t\t\tif (!GetConnnectionInfo(d, ds, out dataProvider, out connection))\n\t\t\t\treturn null;\n\n            List<SqlColumn> cols = new List<SqlColumn>();\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\t// Open up a connection\n\t\t\t\tusing (IDbConnection cnSQL = RdlEngineConfig.GetConnection(dataProvider, connection))\n\t\t\t\t{\n\t\t\t\t\tif (cnSQL == null)\n\t\t\t\t\t\treturn cols;\n\n\t\t\t\t\tcnSQL.Open();\n\t\t\t\t\tIDbCommand cmSQL = cnSQL.CreateCommand();\n\t\t\t\t\tcmSQL.CommandText = sql;\n\t\t\t\t\tAddParameters(cmSQL, parameters);\n\t\t\t\t\tusing (IDataReader dr = cmSQL.ExecuteReader(CommandBehavior.SchemaOnly))\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (int i = 0; i < dr.FieldCount; i++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tSqlColumn sc = new SqlColumn();\n\t\t\t\t\t\t\tsc.Name = dr.GetName(i).TrimEnd('\\0');\n\t\t\t\t\t\t\tsc.DataType = dr.GetFieldType(i);\n\t\t\t\t\t\t\tcols.Add(sc);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (SqlException sqle)\n\t\t\t{\n\t\t\t\tMessageBox.Show(sqle.Message, Strings.DesignerUtility_Show_SQLError);\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\tMessageBox.Show(e.InnerException == null? e.Message:e.InnerException.Message, Strings.DesignerUtility_Show_Error);\n\t\t\t}\n\n\t\t\treturn cols;\n\t\t}\n\n        static internal List<SqlColumn> GetSqlColumns(string dataProvider, string connection, string sql, IList parameters)\n\t\t{\n            List<SqlColumn> cols = new List<SqlColumn>();\n\t\t\tIDbConnection cnSQL=null;\n\t\t\tIDbCommand cmSQL=null;\n\t\t\tIDataReader dr=null;\t   \n\t\t\tCursor saveCursor=Cursor.Current;\n\t\t\tCursor.Current = Cursors.WaitCursor;\n\t\t\ttry\n\t\t\t{\n\t\t\t\t// Open up a connection\n\t\t\t\tcnSQL = RdlEngineConfig.GetConnection(dataProvider, connection);\n\t\t\t\tif (cnSQL == null)\n\t\t\t\t\treturn cols;\n\n\t\t\t\tcnSQL.Open();\n\t\t\t\tcmSQL = cnSQL.CreateCommand();\n\t\t\t\tcmSQL.CommandText = sql;\n\t\t\t\tAddParameters(cmSQL, parameters);\n\t\t\t\tdr = cmSQL.ExecuteReader(CommandBehavior.SchemaOnly);\n\t\t\t\tfor (int i=0; i < dr.FieldCount; i++)\n\t\t\t\t{\n\t\t\t\t\tSqlColumn sc = new SqlColumn();\n                    sc.Name = dr.GetName(i).TrimEnd('\\0');\n\t\t\t\t\tsc.DataType = dr.GetFieldType(i);\n\t\t\t\t\tcols.Add(sc);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (SqlException sqle)\n\t\t\t{\n\t\t\t\tMessageBox.Show(sqle.Message, Strings.DesignerUtility_Show_SQLError);\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\tMessageBox.Show(e.InnerException == null? e.Message:e.InnerException.Message, Strings.DesignerUtility_Show_Error);\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (cnSQL != null)\n\t\t\t\t{\n\t\t\t\t\tif (cmSQL != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tcmSQL.Dispose();\n\t\t\t\t\t\tif (dr != null)\n\t\t\t\t\t\t\tdr.Close();\n\t\t\t\t\t}\n\t\t\t\t\tcnSQL.Close();\n\t\t\t\t\tcnSQL.Dispose();\n\t\t\t\t}\n\t\t\t\tCursor.Current=saveCursor;\n\t\t\t}\n\t\t\treturn cols;\n\t\t}\n\n        static internal List<SqlSchemaInfo> GetSchemaInfo(DesignXmlDraw d, string ds)\n\t\t{\n            string dataProvider;\n            string connection;\n\n            if (!GetConnnectionInfo(d, ds, out dataProvider, out connection))\n                return null;\n            \n            return GetSchemaInfo(dataProvider, connection);\n\t\t}\n\n        static internal List<SqlSchemaInfo> GetSchemaInfo(string dataProvider, string connection)\n\t\t{\n            List<SqlSchemaInfo> schemaList = new List<SqlSchemaInfo>();\n\t\t\tIDbConnection cnSQL = null;\n\t\t\tIDbCommand cmSQL = null;\n\t\t\tIDataReader dr = null;\n\t\t\tCursor saveCursor = Cursor.Current;\n\t\t\tCursor.Current = Cursors.WaitCursor;\n\n\t\t\t// Get the schema information\n\t\t\ttry\n\t\t\t{\n\t\t\t\tint ID_TABLE = 0;\n\t\t\t\tint ID_TYPE = 1;\n\n\t\t\t\t// Open up a connection\n\t\t\t\tcnSQL = RdlEngineConfig.GetConnection(dataProvider, connection);\n\t\t\t\tif (cnSQL == null)\n\t\t\t\t{\n\t\t\t\t\tMessageBox.Show(string.Format(Strings.DesignerUtility_Show_ConnectDataProviderError,dataProvider), Strings.DesignerUtility_Show_SQLError);\n\t\t\t\t\treturn schemaList;\n\t\t\t\t}\n\t\t\t\tcnSQL.Open();\n\n                // Take advantage of .Net metadata if available\n                if (cnSQL is System.Data.SqlClient.SqlConnection)\n                    return GetSchemaInfo((System.Data.SqlClient.SqlConnection) cnSQL, schemaList);\n                if (cnSQL is System.Data.Odbc.OdbcConnection)\n                    return GetSchemaInfo((System.Data.Odbc.OdbcConnection)cnSQL, schemaList);\n                if (cnSQL is System.Data.OleDb.OleDbConnection)\n                    return GetSchemaInfo((System.Data.OleDb.OleDbConnection)cnSQL, schemaList);\n\n\t\t\t\t// Obtain the query needed to get table/view list\n\t\t\t\tstring sql = RdlEngineConfig.GetTableSelect(dataProvider, cnSQL);\n\t\t\t\tif (sql == null || sql.Length == 0)\t\t// when no query string; no meta information available\n\t\t\t\t\treturn schemaList;\n\n\t\t\t\t// Obtain the query needed to get table/view list\n\t\t\t\tcmSQL = cnSQL.CreateCommand();\n\t\t\t\tcmSQL.CommandText = sql;\n\n\t\t\t\tdr = cmSQL.ExecuteReader();\n\t\t\t\tstring type = \"TABLE\";\n\t\t\t\twhile (dr.Read())\n\t\t\t\t{\n\t\t\t\t\tSqlSchemaInfo ssi = new SqlSchemaInfo();\n\n\t\t\t\t\tif (ID_TYPE >= 0 && \n\t\t\t\t\t\tdr.FieldCount < ID_TYPE &&\n\t\t\t\t\t\t(string) dr[ID_TYPE] == \"VIEW\")\n\t\t\t\t\t\ttype = \"VIEW\";\n\n\t\t\t\t\tssi.Type = type;\n\t\t\t\t\tssi.Name = (string) dr[ID_TABLE];\n\t\t\t\t\tschemaList.Add(ssi);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (SqlException sqle)\n\t\t\t{\n\t\t\t\tMessageBox.Show(sqle.Message, Strings.DesignerUtility_Show_SQLError);\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\tMessageBox.Show(e.InnerException == null? e.Message: e.InnerException.Message, Strings.DesignerUtility_Show_Error);\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (cnSQL != null)\n\t\t\t\t{\n\t\t\t\t\tcnSQL.Close();\n\t\t\t\t\tif (cmSQL != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tcmSQL.Dispose();\n\t\t\t\t\t}\n                    if ((dr != null) && (dataProvider != \"SQLite\"))\n                    {\n                        dr.Close();\n                    }\n\t\t\t\t}\n\t\t\t\tCursor.Current=saveCursor;\n\t\t\t}\n\t\t\treturn schemaList;\n\t\t}\n\n        static internal List<SqlSchemaInfo> GetSchemaInfo(System.Data.SqlClient.SqlConnection con, List<SqlSchemaInfo> schemaList)\n        {\n            try\n            { \n                DataTable tbl = con.GetSchema(System.Data.SqlClient.SqlClientMetaDataCollectionNames.Tables); \n                foreach (DataRow row in tbl.Rows) \n                {\n                    SqlSchemaInfo ssi = new SqlSchemaInfo();\n\n                    ssi.Type = \"TABLE\";\n                    string schema = row[\"table_schema\"] as string;\n                    if (schema != null && schema != \"dbo\")\n                        ssi.Name = string.Format(\"{0}.{1}\", schema, (string)row[\"table_name\"]);\n                    else\n                    ssi.Name = (string)row[\"table_name\"];\n                    schemaList.Add(ssi);\n                }\n                tbl = con.GetSchema(System.Data.SqlClient.SqlClientMetaDataCollectionNames.Views);\n                foreach (DataRow row in tbl.Rows)\n                {\n                    SqlSchemaInfo ssi = new SqlSchemaInfo();\n\n                    ssi.Type = \"VIEW\";\n                    string schema = row[\"table_schema\"] as string;\n                    if (schema != null && schema != \"dbo\")\n                        ssi.Name = string.Format(\"{0}.{1}\", schema, (string)row[\"table_name\"]);\n                    else\n                    ssi.Name = (string)row[\"table_name\"];\n                    schemaList.Add(ssi);\n\n                }\n            }\n            catch\n            { \n            }\n            schemaList.Sort();\n            return schemaList;\n        }\n\n        static internal List<SqlSchemaInfo> GetSchemaInfo(System.Data.OleDb.OleDbConnection con, List<SqlSchemaInfo> schemaList)\n        {\n            try\n            {\n                DataTable tbl = con.GetSchema(System.Data.OleDb.OleDbMetaDataCollectionNames.Tables);\n                foreach (DataRow row in tbl.Rows)\n                {\n                    SqlSchemaInfo ssi = new SqlSchemaInfo();\n\n                    ssi.Type = \"TABLE\";\n                    ssi.Name = (string)row[\"table_name\"];\n                    schemaList.Add(ssi);\n                }\n                tbl = con.GetSchema(System.Data.OleDb.OleDbMetaDataCollectionNames.Views);\n                foreach (DataRow row in tbl.Rows)\n                {\n                    SqlSchemaInfo ssi = new SqlSchemaInfo();\n\n                    ssi.Type = \"VIEW\";\n                    ssi.Name = (string)row[\"table_name\"];\n                    schemaList.Add(ssi);\n                }\n            }\n            catch\n            {\n            }\n            schemaList.Sort();\n            return schemaList;\n        }\n\n        static internal List<SqlSchemaInfo> GetSchemaInfo(System.Data.Odbc.OdbcConnection con, List<SqlSchemaInfo> schemaList)\n        {\n            try\n            {\n                DataTable tbl = con.GetSchema(System.Data.Odbc.OdbcMetaDataCollectionNames.Tables);\n                foreach (DataRow row in tbl.Rows)\n                {\n                    SqlSchemaInfo ssi = new SqlSchemaInfo();\n\n                    ssi.Type = \"TABLE\";\n                    ssi.Name = (string)row[\"table_name\"];\n                    schemaList.Add(ssi);\n                }\n                tbl = con.GetSchema(System.Data.Odbc.OdbcMetaDataCollectionNames.Views);\n                foreach (DataRow row in tbl.Rows)\n                {\n                    SqlSchemaInfo ssi = new SqlSchemaInfo();\n\n                    ssi.Type = \"VIEW\";\n                    ssi.Name = (string)row[\"table_name\"];\n                    schemaList.Add(ssi);\n                }\n            }\n            catch\n            {\n            }\n            schemaList.Sort();\n            return schemaList;\n        }\n\n        static internal string NormalizeSqlName(string name)\n        {\t// Routine ensures valid sql name\n            if (name == null || name.Length == 0)\n                return \"\";\n\n            // split out the owner name (schema)\n            string schema = null;\n            int si = name.IndexOf('.');\n            if (si >= 0)\n            {\n                schema = name.Substring(0, si);\n                name = name.Substring(si+1);\n            }\n\n            bool bLetterOrDigit = (Char.IsLetter(name, 0) || name[0] == '_');   // special rules for 1st character\n            for (int i = 0; i < name.Length && bLetterOrDigit; i++)\n            {\n                if (name[i] == '.')\n                { }\t\t\t\t\t\t// allow names to have a \".\" for owner qualified tables\n                else if (!(Char.IsLetterOrDigit(name, i) || name[i] == '#' || name[i] == '_'))\n                    bLetterOrDigit = false;\n            }\n            if (!bLetterOrDigit)\n                name = \"\\\"\" + name + \"\\\"\";\n\n            if (schema == null)\n                return name;\n            return schema + \".\" + name;\n        }\n\n\t\tstatic internal bool TestConnection(string dataProvider, string connection)\n\t\t{\n\t\t\tIDbConnection cnSQL=null;\n\t\t\tbool bResult = false;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tcnSQL = RdlEngineConfig.GetConnection(dataProvider, connection);\n\t\t\t\tcnSQL.Open();\n\t\t\t\tbResult = true;\t\t\t// we opened the connection\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\tMessageBox.Show(e.InnerException == null? e.Message: e.InnerException.Message, Strings.DesignerUtility_Show_OpenConnectionError);\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (cnSQL != null)\n\t\t\t\t{\n\t\t\t\t\tcnSQL.Close();\n\t\t\t\t\tcnSQL.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn bResult;\n\t\t}\n\n\t\tstatic internal bool IsNumeric(Type t)\n\t\t{\n\t\t\tstring st = t.ToString();\t\n\t\t\tswitch (st)\n\t\t\t{\n\t\t\t\tcase \"System.Int16\":\n\t\t\t\tcase \"System.Int32\":\n\t\t\t\tcase \"System.Int64\":\n\t\t\t\tcase \"System.Single\":\n\t\t\t\tcase \"System.Double\":\n\t\t\t\tcase \"System.Decimal\":\n\t\t\t\t\treturn true;\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Validates a size parameter\n\t\t/// </summary>\n\t\t/// <param name=\"t\"></param>\n\t\t/// <param name=\"bZero\">true if 0 is valid size</param>\n\t\t/// <param name=\"bMinus\">true if minus is allowed</param>\n\t\t/// <returns>Throws exception with the invalid message</returns>\n\t\tinternal static void ValidateSize(string t, bool bZero, bool bMinus)\n\t\t{\n\t\t\tt = t.Trim();\n\t\t\tif (t.Length == 0) // not specified is ok?\n\t\t\t\treturn;\n\n\t\t\t// Ensure we have valid units\n\t\t\tif (t.IndexOf(\"in\") < 0 &&\n\t\t\t    t.IndexOf(\"cm\") < 0 &&\n\t\t\t    t.IndexOf(\"mm\") < 0 &&\n\t\t\t    t.IndexOf(\"pt\") < 0 &&\n\t\t\t    t.IndexOf(\"pc\") < 0)\n\t\t\t{\n\t\t\t\tthrow new Exception(Strings.DesignerUtility_Error_SizeUnitInvalid);\n\t\t\t}\n\n\t\t\tint space = t.LastIndexOf(' ');\n\n\t\t\tstring n = \"\"; // number string\n\t\t\tstring u; // unit string\n\n\t\t\tif (space != -1) // any spaces\n\t\t\t{\n\t\t\t\tn = t.Substring(0, space).Trim(); // number string\n\t\t\t\tu = t.Substring(space).Trim(); // unit string\n\t\t\t}\n\t\t\telse if (t.Length >= 3)\n\t\t\t{\n\t\t\t\tn = t.Substring(0, t.Length - 2).Trim();\n\t\t\t\tu = t.Substring(t.Length - 2).Trim();\n\t\t\t}\n\n\n\t\t\tif (n.Length == 0 || !Regex.IsMatch(n, @\"\\A[ ]*[-]?[0-9]*[.]?[0-9]*[ ]*\\Z\"))\n\t\t\t{\n\t\t\t\tthrow new Exception(Strings.DesignerUtility_Error_NumberFormatinvalid);\n\t\t\t}\n\n\t\t\tfloat v = DesignXmlDraw.GetSize(t);\n\t\t\tif (!bZero)\n\t\t\t{\n\t\t\t\tif (v < .1)\n\t\t\t\t\tthrow new Exception(Strings.DesignerUtility_Error_SizeZero);\n\t\t\t}\n\t\t\telse if (v < 0 && !bMinus)\n\t\t\t\tthrow new Exception(Strings.DesignerUtility_Error_SizeLessZero);\n\t\t}\n\n\t\tstatic internal string MakeValidSize(string t, bool bZero)\n\t\t{\n\t\t\treturn MakeValidSize(t, bZero, false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Ensures that a user provided string results in a valid size\n\t\t/// </summary>\n\t\t/// <param name=\"t\"></param>\n\t\t/// <returns></returns>\n\t\tstatic internal string MakeValidSize(string t, bool bZero, bool bNegative)\n\t\t{\n\t\t\t// Ensure we have valid units\n\t\t\tif (t.IndexOf(\"in\") < 0 &&\n\t\t\t\tt.IndexOf(\"cm\") < 0 &&\n\t\t\t\tt.IndexOf(\"mm\") < 0 &&\n\t\t\t\tt.IndexOf(\"pt\") < 0 &&\n\t\t\t\tt.IndexOf(\"pc\") < 0)\n\t\t\t{\n\t\t\t\tt += \"in\";\n\t\t\t}\n\n\t\t\tfloat v = DesignXmlDraw.GetSize(t);\n\t\t\tif (!bZero)\n\t\t\t{\n\t\t\t\tif (v < .1)\n\t\t\t\t\tt = \".1pt\";\n\t\t\t}\n\t\t\tif (!bNegative)\n\t\t\t{\n\t\t\t\tif (v < 0)\n\t\t\t\t\tt = \"0in\";\n\t\t\t}\n\n\t\t\treturn t;\n\t\t}\n\n\t\tstatic private void AddParameters(IDbCommand cmSQL, DataTable parameters)\n\t\t{\n\t\t\tif (parameters == null || parameters.Rows.Count <= 0)\n\t\t\t\treturn;\n\n\t\t\tforeach (DataRow param in parameters.Rows)\n\t\t\t{\n\t\t\t\tstring paramName;\n\n\t\t\t\t// force the name to start with @\n\t\t\t\tif (((string)param[0])[0] == '@')\n\t\t\t\t\tparamName = (string)param[0];\n\t\t\t\telse\n\t\t\t\t\tparamName = \"@\" + (string)param[0];\n\n\t\t\t\tIDbDataParameter dp = cmSQL.CreateParameter();\n\t\t\t\tdp.ParameterName = paramName;\n\t\t\t\t//Perhaps for some databases need fill values, for MySQL works wihtout it\n\t\t\t\tcmSQL.Parameters.Add(dp);\n\t\t\t}\n\t\t}\n\n\t\tstatic private void AddParameters(IDbCommand cmSQL, IList parameters)\n\t\t{\n\t\t\tif (parameters == null || parameters.Count <= 0)\n\t\t\t\treturn;\n\n\t\t\tforeach(ReportParm rp in parameters)\n\t\t\t{\n\t\t\t\tstring paramName;\n\n\t\t\t\t// force the name to start with @\n\t\t\t\tif (rp.Name[0] == '@')\n\t\t\t\t\tparamName = rp.Name;\n\t\t\t\telse\n\t\t\t\t\tparamName = \"@\" + rp.Name;\n\n\t\t\t\tIDbDataParameter dp = cmSQL.CreateParameter();\n\t\t\t\tdp.ParameterName = paramName;\n\t\t\t\tif (rp.DefaultValue == null || rp.DefaultValue.Count == 0)\n\t\t\t\t{\n\t\t\t\t\tobject pvalue=null;\n\t\t\t\t\t// put some dummy values in it;  some drivers (e.g. mysql odbc) don't like null values\n\t\t\t\t\tswitch (rp.DataType.ToLower())\n\t\t\t\t\t{\n\t\t\t\t\t\tcase \"datetime\":\n                            pvalue = new DateTime(1900, 1, 1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"double\":\n\t\t\t\t\t\t\tpvalue = new double();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\t\tpvalue = new Boolean();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tpvalue = (object) \"\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdp.Value = pvalue;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tstring val = (string) rp.DefaultValue[0];\n\t\t\t\t\tdp.Value = val;\n\t\t\t\t}\n\n\t\t\t\tcmSQL.Parameters.Add(dp);\n\t\t\t}\n\t\t}\n\n        // From Paul Welter's site: http://weblogs.asp.net/pwelter34/archive/2006/02/08/437677.aspx\n\n        /// <summary>\n        /// Creates a relative path from one file or folder to another.\n        /// </summary>\n        /// <param name=\"fromDirectory\">Contains the directory that defines the start of the relative path.</param>\n        /// <param name=\"toPath\">Contains the path that defines the endpoint of the relative path.</param>\n        /// <returns>The relative path from the start directory to the end path.</returns>\n        /// <exception cref=\"ArgumentNullException\"></exception>\n        /// <exception cref=\"ArgumentException\"></exception>\n        public static string RelativePathTo(string fromDirectory, string toPath)\n        {\n            if (fromDirectory == null)\n                throw new ArgumentNullException(\"fromDirectory\");\n            if (toPath == null)\n                throw new ArgumentNullException(\"fromDirectory\");\n            if (System.IO.Path.IsPathRooted(fromDirectory) && System.IO.Path.IsPathRooted(toPath))\n            {\n                if (string.Compare(System.IO.Path.GetPathRoot(fromDirectory),\n                System.IO.Path.GetPathRoot(toPath), true) != 0)\n                {\n                    throw new ArgumentException(\n                    string.Format(\"The paths '{0} and '{1}' have different path roots.\",\n                    fromDirectory, toPath));\n                }\n            }\n            StringCollection relativePath = new StringCollection();\n            string[] fromDirectories = fromDirectory.Split(System.IO.Path.DirectorySeparatorChar);\n            string[] toDirectories = toPath.Split(System.IO.Path.DirectorySeparatorChar);\n            int length = Math.Min(fromDirectories.Length, toDirectories.Length);\n            int lastCommonRoot = -1;\n            // find common root\n            for (int x = 0; x < length; x++)\n            {\n                if (string.Compare(fromDirectories[x], toDirectories[x], true) != 0)\n                    break;\n                lastCommonRoot = x;\n            }\n            if (lastCommonRoot == -1)\n            {\n                throw new ArgumentException(\n                string.Format(\"The paths '{0} and '{1}' do not have a common prefix path.\",\n                fromDirectory, toPath));\n            }\n            // add relative folders in from path\n            for (int x = lastCommonRoot + 1; x < fromDirectories.Length; x++)\n                if (fromDirectories[x].Length > 0)\n                    relativePath.Add(\"..\");\n            // add to folders to path\n            for (int x = lastCommonRoot + 1; x < toDirectories.Length; x++)\n                relativePath.Add(toDirectories[x]);\n            // create relative path\n            string[] relativeParts = new string[relativePath.Count];\n            relativePath.CopyTo(relativeParts, 0);\n            string newPath = string.Join(System.IO.Path.DirectorySeparatorChar.ToString(), relativeParts);\n            return newPath;\n        }\n\n\t}\n\n\tinternal class SqlColumn\n\t{\n\t\tstring _Name;\n\t\tType _DataType;\n\n\t\toverride public string ToString()\n\t\t{\n\t\t\treturn _Name;\n\t\t}\n\n\t\tinternal string Name\n\t\t{\n\t\t\tget {return _Name;}\n\t\t\tset {_Name = value;}\n\t\t}\n\n\t\tinternal Type DataType\n\t\t{\n\t\t\tget {return _DataType;}\n\t\t\tset {_DataType = value;}\n\t\t}\n\t}\n\n\tinternal class SqlSchemaInfo : IComparable<SqlSchemaInfo>\n\t{\n\t\tstring _Name;\n\t\tstring _Type;\n\n\t\tinternal string Name\n\t\t{\n\t\t\tget {return _Name;}\n\t\t\tset {_Name = value;}\n\t\t}\n\n\t\tinternal string Type\n\t\t{\n\t\t\tget {return _Type;}\n\t\t\tset {_Type = value;}\n\t\t}\n\n        #region IComparable<SqlSchemaInfo> Members\n\n        int IComparable<SqlSchemaInfo>.CompareTo(SqlSchemaInfo other)\n        {\n            return (this._Type == other._Type)?\n                string.Compare(this.Name, other.Name):\n                string.Compare(this.Type, other.Type);\n        }\n\n        #endregion\n\t}\n\n\tinternal class ReportParm\n\t{\n\t\tstring _Name;\n\t\tstring _Prompt;\n\t\tstring _DataType;\n\t\t\n\t\tbool   _bDefault=true;\t\t\t\t// use default value if true otherwise DataSetName\n        List<string> _DefaultValue;\t\t\t// list of strings\n\t\tstring _DefaultDSRDataSetName;\t\t// DefaultValues DataSetReference DataSetName\n\t\tstring _DefaultDSRValueField;\t\t// DefaultValues DataSetReference ValueField\n\n\t\tbool   _bValid=true;\t\t\t\t// use valid value if true otherwise DataSetName\n        List<ParameterValueItem> _ValidValues;\t// list of ParameterValueItem\n\t\tstring _ValidValuesDSRDataSetName;\t\t// ValidValues DataSetReference DataSetName\n\t\tstring _ValidValuesDSRValueField;\t\t// ValidValues DataSetReference ValueField\n\t\tstring _ValidValuesDSRLabelField;\t\t// ValidValues DataSetReference LabelField\n\t\tbool _AllowNull;\n\t\tbool _AllowBlank;\n        bool _MultiValue;\n\n\t\tinternal ReportParm(string name)\n\t\t{\n\t\t\t_Name = name;\n\t\t\t_DataType = \"String\";\n\t\t}\n\n\t\tinternal string Name\n\t\t{\n\t\t\tget {return _Name;}\n\t\t\tset {_Name = value;}\n\t\t}\n\n\t\tinternal string Prompt\n\t\t{\n\t\t\tget {return _Prompt;}\n\t\t\tset {_Prompt = value;}\n\t\t}\n\n\t\tinternal string DataType\n\t\t{\n\t\t\tget {return _DataType;}\n\t\t\tset {_DataType = value;}\n\t\t}\n\n\t\tinternal bool Valid\n\t\t{\n\t\t\tget {return _bValid;}\n\t\t\tset {_bValid = value;}\n\t\t}\n\n        internal List<ParameterValueItem> ValidValues\n\t\t{\n\t\t\tget {return _ValidValues;}\n\t\t\tset {_ValidValues = value;}\n\t\t}\n\n\t\tinternal string ValidValuesDisplay\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_ValidValues == null || _ValidValues.Count == 0)\n\t\t\t\t\treturn \"\";\n\t\t\t\tStringBuilder sb = new StringBuilder();\n\t\t\t\tbool bFirst = true;\n\t\t\t\tforeach (ParameterValueItem pvi in _ValidValues)\n\t\t\t\t{\n\t\t\t\t\tif (bFirst)\n\t\t\t\t\t\tbFirst = false;\n\t\t\t\t\telse\n\t\t\t\t\t\tsb.Append(\", \");\n\t\t\t\t\tif (pvi.Label != null)\n\t\t\t\t\t\tsb.AppendFormat(\"{0}={1}\", pvi.Value, pvi.Label);\n\t\t\t\t\telse\n\t\t\t\t\t\tsb.Append(pvi.Value);\n\t\t\t\t}\n\t\t\t\treturn sb.ToString();\n\t\t\t}\n\t\t}\n\n\t\tinternal bool Default\n\t\t{\n\t\t\tget {return _bDefault;}\n\t\t\tset {_bDefault = value;}\n\t\t}\n\n\t\tinternal List<string> DefaultValue\n\t\t{\n\t\t\tget {return _DefaultValue;}\n\t\t\tset {_DefaultValue = value;}\n\t\t}\n\n\t\tinternal string DefaultValueDisplay\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_DefaultValue == null || _DefaultValue.Count == 0)\n\t\t\t\t\treturn \"\";\n\t\t\t\tStringBuilder sb = new StringBuilder();\n\t\t\t\tbool bFirst = true;\n\t\t\t\tforeach (string dv in _DefaultValue)\n\t\t\t\t{\n\t\t\t\t\tif (bFirst)\n\t\t\t\t\t\tbFirst = false;\n\t\t\t\t\telse\n\t\t\t\t\t\tsb.Append(\", \");\n\t\t\t\t\tsb.Append(dv);\n\t\t\t\t}\n\t\t\t\treturn sb.ToString();\n\t\t\t}\n\t\t}\n\t\tinternal bool AllowNull\n\t\t{\n\t\t\tget {return _AllowNull;}\n\t\t\tset {_AllowNull = value;}\n\t\t}\n\n\t\tinternal bool AllowBlank\n\t\t{\n\t\t\tget {return _AllowBlank;}\n\t\t\tset {_AllowBlank = value;}\n\t\t}\n\n        internal bool MultiValue\n        {\n            get { return _MultiValue; }\n            set { _MultiValue = value; }\n        }\n        internal string DefaultDSRDataSetName\n\t\t{\n\t\t\tget {return _DefaultDSRDataSetName;}\n\t\t\tset {_DefaultDSRDataSetName=value;}\n\t\t}\n\t\tinternal string DefaultDSRValueField\n\t\t{\n\t\t\tget {return _DefaultDSRValueField;}\n\t\t\tset {_DefaultDSRValueField=value;}\n\t\t}\n\n\t\tinternal string ValidValuesDSRDataSetName\n\t\t{\n\t\t\tget {return _ValidValuesDSRDataSetName;}\n\t\t\tset {_ValidValuesDSRDataSetName=value;}\n\t\t}\n\t\tinternal string  ValidValuesDSRValueField\n\t\t{\n\t\t\tget {return _ValidValuesDSRValueField;}\n\t\t\tset {_ValidValuesDSRValueField=value;}\n\t\t}\n\t\tinternal string ValidValuesDSRLabelField\n\t\t{\n\t\t\tget {return _ValidValuesDSRLabelField;}\n\t\t\tset {_ValidValuesDSRLabelField=value;}\n\t\t}\n\n\t\toverride public string ToString()\n\t\t{\n\t\t\treturn _Name;\n\t\t}\n\t}\n\n\tinternal class ParameterValueItem\n\t{\n\t\tinternal string Value;\n\t\tinternal string Label;\n\t}\n\n\tinternal static class StaticLists\n\t{\n\t\t/// <summary>\n\t\t/// Names of colors to put into lists\n\t\t/// </summary>\n        static public readonly string[] ColorListColorSort = new string[] {\n            \"Black\", \n            \"White\", \n            \"DimGray\", \n            \"Gray\", \n            \"DarkGray\", \n            \"Silver\", \n            \"LightGray\", \n            \"Gainsboro\",\n            \"WhiteSmoke\", \n            \"Maroon\", \n            \"DarkRed\",\n            \"Red\",\n            \"Brown\",\n            \"Firebrick\",\n            \"IndianRed\",\n            \"Snow\",\n            \"LightCoral\",\n            \"RoseyBrown\",\n            \"MistyRose\",\n            \"Salmon\",\n            \"Tomato\",\n            \"DarkSalmon\",\n            \"Coral\",\n            \"OrangeRed\",\n            \"LightSalmon\",\n            \"Sienna\",\n            \"SeaShell\",\n            \"Chocalate\",\n            \"SaddleBrown\",\n            \"SandyBrown\",\n            \"PeachPuff\",\n            \"Peru\",\n            \"Linen\",\n            \"Bisque\",\n            \"DarkOrange\",\n            \"BurlyWood\",\n            \"Tan\",\n            \"AntiqueWhite\",\n            \"NavajoWhite\",\n            \"BlanchedAlmond\",\n            \"PapayaWhip\",\n            \"Moccasin\",\n            \"Orange\",\n            \"Wheat\",\n            \"OldLace\",\n            \"DarkGoldenrod\",\n            \"Goldenrod\",\n            \"Cornsilk\",\n            \"Gold\",\n            \"Khaki\",\n            \"LemonChiffon\",\n            \"PaleGoldenrod\",\n            \"DarkKhaki\",\n            \"Beige\",\n            \"LightGoldenrodYellow\",\n            \"Olive\",\n            \"Yellow\",\n            \"LightYellow\",\n            \"Ivory\",\n            \"OliveDrab\",\n            \"YellowGreen\",\n            \"DarkOliveGreen\",\n            \"GreenYellow\",\n            \"Chartreuse\",\n            \"LawnGreen\",\n            \"DarkSeaGreen\",\n            \"LightGreen\",\n            \"ForestGreen\",\n            \"LimeGreen\",\n            \"PaleGreen\",\n            \"DarkGreen\",\n            \"Green\",\n            \"Lime\",\n            \"HoneyDew\",\n            \"SeaGreen\",\n            \"MediumSeaGreen\",\n            \"SpringGreen\",\n            \"MintCream\",\n            \"MediumSpringGreen\",\n            \"MediumAquamarine\",\n            \"Aquamarine\",\n            \"Turquoise\",\n            \"LightSeaGreen\",\n            \"MediumTurquoise\",\n            \"DarkSlateGray\",\n            \"PaleTurQuoise\",\n            \"Teal\",\n            \"DarkCyan\",\"Cyan\",\n            \"Aqua\",\n            \"LightCyan\",\n            \"Azure\",\n            \"DarkTurquoise\",\n            \"CadetBlue\",\n            \"PowderBlue\",\n            \"LightBlue\",\n            \"DeepSkyBlue\",\n            \"SkyBlue\",\n            \"LightSkyBlue\",\n            \"SteelBlue\",\n            \"AliceBlue\",\n            \"DodgerBlue\",\n            \"SlateGray\",\n            \"LightSlateGray\",\n            \"LightSteelBlue\",\n            \"CornflowerBlue\",\n            \"RoyalBlue\",\n            \"MidnightBlue\",\n            \"Lavender\",\n            \"Navy\",\n            \"DarkBlue\",\n            \"MediumBlue\",\n            \"Blue\",\n            \"GhostWhite\",\n            \"SlateBlue\",\n            \"DarkSlateBlue\",\n            \"MediumSlateBlue\",\n            \"MediumPurple\",\n            \"BlueViolet\",\n            \"Indigo\",\n            \"DarkOrchid\",\n            \"DarkViolet\",\n            \"MediumOrchid\",\n            \"Thistle\",\n            \"Plum\",\n            \"Violet\",\n            \"Purple\",\n            \"DarkMagenta\",\n            \"Fuchsia\",\n            \"Magenta\",\n            \"Orchid\",\n            \"MediumVioletRed\",\n            \"DeepPink\",\n            \"HotPink\",\n            \"LavenderBlush\",\n            \"PaleVioletRed\",\n            \"Crimson\",\n            \"Pink\",\n            \"LightPink\",\n\t\t\t\"Floralwhite\"\n        };\n\t\tstatic public readonly string[] ColorList = new string[] {\n\t\t\t\t\t\t\t\t\t\t\"Aliceblue\",\n\t\t\t\t\t\t\t\t\t\t\"Antiquewhite\",\n\t\t\t\t\t\t\t\t\t\t\"Aqua\",\n\t\t\t\t\t\t\t\t\t\t\"Aquamarine\",\n\t\t\t\t\t\t\t\t\t\t\"Azure\",\n\t\t\t\t\t\t\t\t\t\t\"Beige\",\n\t\t\t\t\t\t\t\t\t\t\"Bisque\",\n\t\t\t\t\t\t\t\t\t\t\"Black\",\n\t\t\t\t\t\t\t\t\t\t\"Blanchedalmond\",\n\t\t\t\t\t\t\t\t\t\t\"Blue\",\n\t\t\t\t\t\t\t\t\t\t\"Blueviolet\",\n\t\t\t\t\t\t\t\t\t\t\"Brown\",\n\t\t\t\t\t\t\t\t\t\t\"Burlywood\",\n\t\t\t\t\t\t\t\t\t\t\"Cadetblue\",\n\t\t\t\t\t\t\t\t\t\t\"Chartreuse\",\n\t\t\t\t\t\t\t\t\t\t\"Chocolate\",\n\t\t\t\t\t\t\t\t\t\t\"Coral\",\n\t\t\t\t\t\t\t\t\t\t\"Cornflowerblue\",\n\t\t\t\t\t\t\t\t\t\t\"Cornsilk\",\n\t\t\t\t\t\t\t\t\t\t\"Crimson\",\n\t\t\t\t\t\t\t\t\t\t\"Cyan\",\n\t\t\t\t\t\t\t\t\t\t\"Darkblue\",\n\t\t\t\t\t\t\t\t\t\t\"Darkcyan\",\n\t\t\t\t\t\t\t\t\t\t\"Darkgoldenrod\",\n\t\t\t\t\t\t\t\t\t\t\"Darkgray\",\n\t\t\t\t\t\t\t\t\t\t\"Darkgreen\",\n\t\t\t\t\t\t\t\t\t\t\"Darkkhaki\",\n\t\t\t\t\t\t\t\t\t\t\"Darkmagenta\",\n\t\t\t\t\t\t\t\t\t\t\"Darkolivegreen\",\n\t\t\t\t\t\t\t\t\t\t\"Darkorange\",\n\t\t\t\t\t\t\t\t\t\t\"Darkorchid\",\n\t\t\t\t\t\t\t\t\t\t\"Darkred\",\n\t\t\t\t\t\t\t\t\t\t\"Darksalmon\",\n\t\t\t\t\t\t\t\t\t\t\"Darkseagreen\",\n\t\t\t\t\t\t\t\t\t\t\"Darkslateblue\",\n\t\t\t\t\t\t\t\t\t\t\"Darkslategray\",\n\t\t\t\t\t\t\t\t\t\t\"Darkturquoise\",\n\t\t\t\t\t\t\t\t\t\t\"Darkviolet\",\n\t\t\t\t\t\t\t\t\t\t\"Deeppink\",\n\t\t\t\t\t\t\t\t\t\t\"Deepskyblue\",\n\t\t\t\t\t\t\t\t\t\t\"Dimgray\",\n\t\t\t\t\t\t\t\t\t\t\"Dodgerblue\",\n\t\t\t\t\t\t\t\t\t\t\"Firebrick\",\n\t\t\t\t\t\t\t\t\t\t\"Floralwhite\",\n\t\t\t\t\t\t\t\t\t\t\"Forestgreen\",\n\t\t\t\t\t\t\t\t\t\t\"Fuchsia\",\n\t\t\t\t\t\t\t\t\t\t\"Gainsboro\",\n\t\t\t\t\t\t\t\t\t\t\"Ghostwhite\",\n\t\t\t\t\t\t\t\t\t\t\"Gold\",\n\t\t\t\t\t\t\t\t\t\t\"Goldenrod\",\n\t\t\t\t\t\t\t\t\t\t\"Gray\",\n\t\t\t\t\t\t\t\t\t\t\"Green\",\n\t\t\t\t\t\t\t\t\t\t\"Greenyellow\",\n\t\t\t\t\t\t\t\t\t\t\"Honeydew\",\n\t\t\t\t\t\t\t\t\t\t\"Hotpink\",\n\t\t\t\t\t\t\t\t\t\t\"Indianred\", \n                                        \"Indigo\",\n\t\t\t\t\t\t\t\t\t\t\"Ivory\",\n\t\t\t\t\t\t\t\t\t\t\"Khaki\",\n\t\t\t\t\t\t\t\t\t\t\"Lavender\",\n\t\t\t\t\t\t\t\t\t\t\"Lavenderblush\",\n\t\t\t\t\t\t\t\t\t\t\"Lawngreen\",\n\t\t\t\t\t\t\t\t\t\t\"Lemonchiffon\",\n\t\t\t\t\t\t\t\t\t\t\"Lightblue\",\n\t\t\t\t\t\t\t\t\t\t\"Lightcoral\",\n\t\t\t\t\t\t\t\t\t\t\"Lightcyan\",\n\t\t\t\t\t\t\t\t\t\t\"Lightgoldenrodyellow\",\n\t\t\t\t\t\t\t\t\t\t\"Lightgreen\",\n\t\t\t\t\t\t\t\t\t\t\"Lightgrey\",\n\t\t\t\t\t\t\t\t\t\t\"Lightpink\",\n\t\t\t\t\t\t\t\t\t\t\"Lightsalmon\",\n\t\t\t\t\t\t\t\t\t\t\"Lightseagreen\",\n\t\t\t\t\t\t\t\t\t\t\"Lightskyblue\",\n\t\t\t\t\t\t\t\t\t\t\"Lightslategrey\",\n\t\t\t\t\t\t\t\t\t\t\"Lightsteelblue\",\n\t\t\t\t\t\t\t\t\t\t\"Lightyellow\",\n\t\t\t\t\t\t\t\t\t\t\"Lime\",\n\t\t\t\t\t\t\t\t\t\t\"Limegreen\",\n\t\t\t\t\t\t\t\t\t\t\"Linen\",\n\t\t\t\t\t\t\t\t\t\t\"Magenta\",\n\t\t\t\t\t\t\t\t\t\t\"Maroon\",\n\t\t\t\t\t\t\t\t\t\t\"Mediumaquamarine\",\n\t\t\t\t\t\t\t\t\t\t\"Mediumblue\",\n\t\t\t\t\t\t\t\t\t\t\"Mediumorchid\",\n\t\t\t\t\t\t\t\t\t\t\"Mediumpurple\",\n\t\t\t\t\t\t\t\t\t\t\"Mediumseagreen\",\n\t\t\t\t\t\t\t\t\t\t\"Mediumslateblue\",\n\t\t\t\t\t\t\t\t\t\t\"Mediumspringgreen\",\n\t\t\t\t\t\t\t\t\t\t\"Mediumturquoise\",\n\t\t\t\t\t\t\t\t\t\t\"Mediumvioletred\",\n\t\t\t\t\t\t\t\t\t\t\"Midnightblue\",\n\t\t\t\t\t\t\t\t\t\t\"Mintcream\",\n\t\t\t\t\t\t\t\t\t\t\"Mistyrose\",\n\t\t\t\t\t\t\t\t\t\t\"Moccasin\",\n\t\t\t\t\t\t\t\t\t\t\"Navajowhite\",\n\t\t\t\t\t\t\t\t\t\t\"Navy\",\n\t\t\t\t\t\t\t\t\t\t\"Oldlace\",\n\t\t\t\t\t\t\t\t\t\t\"Olive\",\n\t\t\t\t\t\t\t\t\t\t\"Olivedrab\",\n\t\t\t\t\t\t\t\t\t\t\"Orange\",\n\t\t\t\t\t\t\t\t\t\t\"Orangered\",\n\t\t\t\t\t\t\t\t\t\t\"Orchid\",\n\t\t\t\t\t\t\t\t\t\t\"Palegoldenrod\",\n\t\t\t\t\t\t\t\t\t\t\"Palegreen\",\n\t\t\t\t\t\t\t\t\t\t\"Paleturquoise\",\n\t\t\t\t\t\t\t\t\t\t\"Palevioletred\",\n\t\t\t\t\t\t\t\t\t\t\"Papayawhip\",\n\t\t\t\t\t\t\t\t\t\t\"Peachpuff\",\n\t\t\t\t\t\t\t\t\t\t\"Peru\",\n\t\t\t\t\t\t\t\t\t\t\"Pink\",\n\t\t\t\t\t\t\t\t\t\t\"Plum\",\n\t\t\t\t\t\t\t\t\t\t\"Powderblue\",\n\t\t\t\t\t\t\t\t\t\t\"Purple\",\n\t\t\t\t\t\t\t\t\t\t\"Red\",\n\t\t\t\t\t\t\t\t\t\t\"Rosybrown\",\n\t\t\t\t\t\t\t\t\t\t\"Royalblue\",\n\t\t\t\t\t\t\t\t\t\t\"Saddlebrown\",\n\t\t\t\t\t\t\t\t\t\t\"Salmon\",\n\t\t\t\t\t\t\t\t\t\t\"Sandybrown\",\n\t\t\t\t\t\t\t\t\t\t\"Seagreen\",\n\t\t\t\t\t\t\t\t\t\t\"Seashell\",\n\t\t\t\t\t\t\t\t\t\t\"Sienna\",\n\t\t\t\t\t\t\t\t\t\t\"Silver\",\n\t\t\t\t\t\t\t\t\t\t\"Skyblue\",\n\t\t\t\t\t\t\t\t\t\t\"Slateblue\",\n\t\t\t\t\t\t\t\t\t\t\"Slategray\",\n\t\t\t\t\t\t\t\t\t\t\"Snow\",\n\t\t\t\t\t\t\t\t\t\t\"Springgreen\",\n\t\t\t\t\t\t\t\t\t\t\"Steelblue\",\n\t\t\t\t\t\t\t\t\t\t\"Tan\",\n\t\t\t\t\t\t\t\t\t\t\"Teal\",\n\t\t\t\t\t\t\t\t\t\t\"Thistle\",\n\t\t\t\t\t\t\t\t\t\t\"Tomato\",\n\t\t\t\t\t\t\t\t\t\t\"Turquoise\",\n\t\t\t\t\t\t\t\t\t\t\"Violet\",\n\t\t\t\t\t\t\t\t\t\t\"Wheat\",\n\t\t\t\t\t\t\t\t\t\t\"White\",\n\t\t\t\t\t\t\t\t\t\t\"Whitesmoke\",\n\t\t\t\t\t\t\t\t\t\t\"Yellow\",\n\t\t\t\t\t\t\t\t\t\t\"Yellowgreen\"};\n\t\t/// <summary>\n\t\t/// Names of globals to put into expressions\n\t\t/// </summary>\n\t\tstatic public readonly string[] GlobalList = new string[] {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t  \"=Globals!PageNumber\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t  \"=Globals!TotalPages\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t  \"=Globals!ExecutionTime\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t  \"=Globals!ReportFolder\",\n\t\t                                                              \"=Globals!ReportName\"};\n        /// <summary>\n        /// Names of user info to put into expressions GJL AJM 12082008\n        /// </summary>\n        static public readonly string[] UserList = new string[] {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t  \"=User!UserID\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t  \"=User!Language\"};\n\n\n        static public readonly string[] OperatorList = new string[] { \n                                \" & \", \" + \",\" - \",\" * \",\" / \",\" mod \", \n\t\t\t\t\t\t\t\t\" and \", \" or \", \" !\", \n\t\t\t\t\t\t\t\t\" = \", \" != \", \" > \", \" >= \", \" < \", \" <= \"};\n\n\t\t/// <summary>\n\t\t/// Names of functions with pseudo arguments\n\t\t/// </summary>\n\t\tstatic public readonly string[] FunctionList = new string[] {\t\"Iif(boolean, trueExpr, falseExpr)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Choose(number, choice1 [,choice2]...)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Switch(boolean1, value1[, boolean2, value2]...[elseValue])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Format(expr, formatExpr)\"};\n\n\t\tstatic public readonly string[] AggrFunctionList = new string[] {\"Sum(number [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Aggregate(number [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Avg(number [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Min(expr [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Max(expr [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"First(expr [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Last(expr [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Next(expr [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Previous(expr [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Level([scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Count(expr [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Countrows(expr [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Countdistinct(expr [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"RowNumber()\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Runningvalue(expr, sum [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Runningvalue(expr, avg [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Runningvalue(expr, count [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Runningvalue(expr, max [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Runningvalue(expr, min [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Runningvalue(expr, stdev [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Runningvalue(expr, stdevp [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Runningvalue(expr, var [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Runningvalue(expr, varp [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Stdev(expr [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Stdevp(expr [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Var(expr [, scope])\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Varp(expr [, scope])\"};\n\t\t/// <summary>\n\t\t/// Zoom values\n\t\t/// </summary>\n\t\tstatic public readonly string[] ZoomList = new string[] {\n\t\t\t\t\t\t\t\t\t\"Actual Size\",\n\t\t\t\t\t\t\t\t\t\"Fit Page\",\n\t\t\t\t\t\t\t\t\t\"Fit Width\",\n\t\t\t\t\t\t\t\t\t\"800%\",\n\t\t\t\t\t\t\t\t\t\"400%\",\n\t\t\t\t\t\t\t\t\t\"200%\",\n\t\t\t\t\t\t\t\t\t\"150%\",\n\t\t\t\t\t\t\t\t\t\"125%\",\n\t\t\t\t\t\t\t\t\t\"100%\",\n\t\t\t\t\t\t\t\t\t\"75%\",\n\t\t\t\t\t\t\t\t\t\"50%\",\n\t\t\t\t\t\t\t\t\t\"25%\"};\n        /// <summary>\n        /// List of format values\n        /// </summary>\n        static public readonly string[] FormatList = new string[] { \"\",\n            \"#,##0\", \"#,##0.00\", \"0\", \"0.00\", \"\", \"MM/dd/yyyy\",\n            \"dddd, MMMM dd, yyyy\", \"dddd, MMMM dd, yyyy HH:mm\",\n            \"dddd, MMMM dd, yyyy HH:mm:ss\", \"MM/dd/yyyy HH:mm\",\n            \"MM/dd/yyyy HH:mm:ss\", \"MMMM dd\",\n            \"Ddd, dd MMM yyyy HH\\':\\'mm\\'\\\"ss \\'GMT\\'\",\n            \"yyyy-MM-dd HH:mm:ss\",\n            \"yyyy-MM-dd HH:mm:ss GMT\",\n            \"HH:mm\", \"HH:mm:ss\",\n            \"yyyy-MM-dd HH:mm:ss\", \"html\"};\n\n        /// <summary>\n        /// list of gradient types\n        /// </summary>\n        static public readonly string[] GradientList = new string[] {\n        \"None\", \"LeftRight\", \"TopBottom\", \"Center\", \"DiagonalLeft\",\n        \"DiagonalRight\", \"HorizontalCenter\", \"VerticalCenter\"};\n\n\t\t//Josh: 6:22:10 Added to place the start and end shortcut \"caps\" on the fields.\n\t\tpublic static List<string> ArrayToFormattedList(IEnumerable<string> array, string frontCap, string endCap)\n\t\t{\n            return array.Select(item => item.StartsWith(\"=\") ?\n                string.Format(\"{0}{1}{2}\",\n                frontCap,\n                item.Split('!')[1].Replace(\".Value\", string.Empty),\n                endCap)\n                : item).ToList();\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/DialogAbout.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    public partial class DialogAbout : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tprivate System.Windows.Forms.Button bOK;\nprivate System.Windows.Forms.TextBox tbLicense;\nprivate System.Windows.Forms.LinkLabel linkLabel3;\nprivate System.Windows.Forms.LinkLabel linkLabel4;\nprivate System.Windows.Forms.Label label5;\nprivate System.Windows.Forms.Label label6;\nprivate System.Windows.Forms.Label label8;\nprivate System.Windows.Forms.Label lVersion;\nprivate System.Windows.Forms.Label lVMVersion;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DialogAbout));\n            this.bOK = new System.Windows.Forms.Button();\n            this.tbLicense = new System.Windows.Forms.TextBox();\n            this.linkLabel3 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel4 = new System.Windows.Forms.LinkLabel();\n            this.label5 = new System.Windows.Forms.Label();\n            this.label6 = new System.Windows.Forms.Label();\n            this.lVersion = new System.Windows.Forms.Label();\n            this.label8 = new System.Windows.Forms.Label();\n            this.lVMVersion = new System.Windows.Forms.Label();\n            this.SuspendLayout();\n            // \n            // bOK\n            // \n            resources.ApplyResources(this.bOK, \"bOK\");\n            this.bOK.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.bOK.Name = \"bOK\";\n            // \n            // tbLicense\n            // \n            resources.ApplyResources(this.tbLicense, \"tbLicense\");\n            this.tbLicense.Name = \"tbLicense\";\n            this.tbLicense.ReadOnly = true;\n            // \n            // linkLabel3\n            // \n            resources.ApplyResources(this.linkLabel3, \"linkLabel3\");\n            this.linkLabel3.Name = \"linkLabel3\";\n            this.linkLabel3.TabStop = true;\n            this.linkLabel3.Tag = \"https://github.com/majorsilence/My-FyiReporting/discussions\";\n            this.linkLabel3.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n            // \n            // linkLabel4\n            // \n            resources.ApplyResources(this.linkLabel4, \"linkLabel4\");\n            this.linkLabel4.Name = \"linkLabel4\";\n            this.linkLabel4.TabStop = true;\n            this.linkLabel4.Tag = \"https://github.com/majorsilence/My-FyiReporting\";\n            this.linkLabel4.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n            // \n            // label5\n            // \n            resources.ApplyResources(this.label5, \"label5\");\n            this.label5.Name = \"label5\";\n            // \n            // label6\n            // \n            resources.ApplyResources(this.label6, \"label6\");\n            this.label6.Name = \"label6\";\n            // \n            // lVersion\n            // \n            resources.ApplyResources(this.lVersion, \"lVersion\");\n            this.lVersion.Name = \"lVersion\";\n            // \n            // label8\n            // \n            resources.ApplyResources(this.label8, \"label8\");\n            this.label8.Name = \"label8\";\n            // \n            // lVMVersion\n            // \n            resources.ApplyResources(this.lVMVersion, \"lVMVersion\");\n            this.lVMVersion.Name = \"lVMVersion\";\n            // \n            // DialogAbout\n            // \n            this.AcceptButton = this.bOK;\n            resources.ApplyResources(this, \"$this\");\n            this.CancelButton = this.bOK;\n            this.Controls.Add(this.lVMVersion);\n            this.Controls.Add(this.linkLabel3);\n            this.Controls.Add(this.linkLabel4);\n            this.Controls.Add(this.label5);\n            this.Controls.Add(this.label6);\n            this.Controls.Add(this.lVersion);\n            this.Controls.Add(this.label8);\n            this.Controls.Add(this.tbLicense);\n            this.Controls.Add(this.bOK);\n            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n            this.MaximizeBox = false;\n            this.MinimizeBox = false;\n            this.Name = \"DialogAbout\";\n            this.ShowInTaskbar = false;\n            this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/DialogAbout.cs",
    "content": "using Majorsilence.Reporting.RdlDesign.Resources;\n\nusing System;\nusing System.Reflection;\nusing System.Windows.Forms;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// Summary description for DialogAbout.\n    /// </summary>\n    public partial class DialogAbout \n    {\n        public DialogAbout()\n        {\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            tbLicense.Text = Strings.DialogAbout_DialogAbout_About;\n\n            lVersion.Text = string.Format(Strings.DialogAbout_DialogAbout_Version, Assembly.GetExecutingAssembly().GetName().Version);\n            lVMVersion.Text = string.Format(\".NET {0}\", Environment.Version);\n        }\n\n        private void lnk_LinkClicked(object sender, LinkLabelLinkClickedEventArgs ea)\n        {\n            var lnk = (LinkLabel)sender;\n            lnk.Links[lnk.Links.IndexOf(ea.Link)].Visited = true;\n            System.Diagnostics.Process.Start(lnk.Tag.ToString());\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/DialogAbout.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"&gt;&gt;linkLabel4.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"lVMVersion.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleCenter</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 23</value>\n  </data>\n  <data name=\"linkLabel3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>280, 88</value>\n  </data>\n  <data name=\"&gt;&gt;lVersion.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"linkLabel3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 16</value>\n  </data>\n  <data name=\"lVMVersion.Text\" xml:space=\"preserve\">\n    <value>.NET x.x.xxxx.xxxx</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lVersion.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>136, 16</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"linkLabel3.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"tbLicense.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"label5.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>240, 88</value>\n  </data>\n  <data name=\"&gt;&gt;tbLicense.Name\" xml:space=\"preserve\">\n    <value>tbLicense</value>\n  </data>\n  <data name=\"label8.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Microsoft Sans Serif, 12pt, style=Bold</value>\n  </data>\n  <data name=\"label8.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"label6.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 88</value>\n  </data>\n  <data name=\"label8.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>138, 16</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>200, 272</value>\n  </data>\n  <data name=\"label6.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Website:</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lVersion.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label8.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"&gt;&gt;lVMVersion.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbLicense.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bOK.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"lVMVersion.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"lVersion.Text\" xml:space=\"preserve\">\n    <value>Version x.x.x</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel3.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel3.Name\" xml:space=\"preserve\">\n    <value>linkLabel3</value>\n  </data>\n  <data name=\"lVMVersion.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>17</value>\n  </data>\n  <data name=\"tbLicense.ScrollBars\" type=\"System.Windows.Forms.ScrollBars, System.Windows.Forms\">\n    <value>Both</value>\n  </data>\n  <data name=\"linkLabel4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>72, 88</value>\n  </data>\n  <data name=\"&gt;&gt;tbLicense.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"linkLabel4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>14</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Name\" xml:space=\"preserve\">\n    <value>label5</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel4.Name\" xml:space=\"preserve\">\n    <value>linkLabel4</value>\n  </data>\n  <data name=\"label6.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"lVersion.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"&gt;&gt;lVMVersion.Name\" xml:space=\"preserve\">\n    <value>lVMVersion</value>\n  </data>\n  <data name=\"&gt;&gt;label5.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <data name=\"linkLabel3.Text\" xml:space=\"preserve\">\n    <value>https://github.com/majorsilence/My-FyiReporting/discussions</value>\n  </data>\n  <data name=\"tbLicense.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>448, 136</value>\n  </data>\n  <data name=\"label5.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>13</value>\n  </data>\n  <data name=\"linkLabel4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>144, 16</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>E-mail:</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label6.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"label5.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"label8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>286, 24</value>\n  </data>\n  <data name=\"&gt;&gt;lVersion.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"lVersion.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>264, 40</value>\n  </data>\n  <data name=\"&gt;&gt;lVMVersion.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;tbLicense.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lVersion.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"tbLicense.Multiline\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Name\" xml:space=\"preserve\">\n    <value>label8</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DialogAbout</value>\n  </data>\n  <data name=\"tbLicense.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 120</value>\n  </data>\n  <data name=\"&gt;&gt;label8.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"lVersion.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>TopCenter</value>\n  </data>\n  <data name=\"&gt;&gt;lVersion.Name\" xml:space=\"preserve\">\n    <value>lVersion</value>\n  </data>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel4.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"linkLabel3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>15</value>\n  </data>\n  <data name=\"linkLabel4.Text\" xml:space=\"preserve\">\n    <value>https://github.com/majorsilence/My-FyiReporting</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 23</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>About</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"linkLabel4.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"&gt;&gt;lVMVersion.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>466, 304</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Majorsilence Reporting Designer</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Name\" xml:space=\"preserve\">\n    <value>label6</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"lVMVersion.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>144, 16</value>\n  </data>\n  <data name=\"lVMVersion.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>256, 64</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/DialogAbout.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"tbLicense.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 139</value>\n  </data>\n  <data name=\"tbLicense.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>448, 117</value>\n  </data>\n  <data name=\"linkLabel3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>290, 88</value>\n  </data>\n  <data name=\"linkLabel3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>118, 16</value>\n  </data>\n  <data name=\"linkLabel4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>68, 113</value>\n  </data>\n  <data name=\"linkLabel4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>247, 16</value>\n  </data>\n  <data name=\"label5.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>246, 88</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 23</value>\n  </data>\n  <data name=\"label6.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>12, 113</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Веб-сайт:</value>\n  </data>\n  <data name=\"lVersion.Text\" xml:space=\"preserve\">\n    <value>Версия x.x.x</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>О программе</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DialogDataSourceRef.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    public partial class DialogDataSourceRef : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tprivate System.Windows.Forms.Label label1;\nprivate System.Windows.Forms.TextBox tbPassword;\nprivate System.Windows.Forms.Label label2;\nprivate System.Windows.Forms.TextBox tbFilename;\nprivate System.Windows.Forms.Button bGetFilename;\nprivate System.Windows.Forms.Label label3;\nprivate System.Windows.Forms.ComboBox cbDataProvider;\nprivate System.Windows.Forms.Label label4;\nprivate System.Windows.Forms.TextBox tbConnection;\nprivate System.Windows.Forms.CheckBox ckbIntSecurity;\nprivate System.Windows.Forms.Label label5;\nprivate System.Windows.Forms.TextBox tbPrompt;\nprivate System.Windows.Forms.Button bOK;\nprivate System.Windows.Forms.Button bCancel;\nprivate System.Windows.Forms.TextBox tbPassword2;\nprivate System.Windows.Forms.Label label6;\nprivate System.Windows.Forms.Button bTestConnection;\nprivate System.Windows.Forms.ComboBox cbOdbcNames;\nprivate System.Windows.Forms.Label lODBC;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DialogDataSourceRef));\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.tbPassword = new System.Windows.Forms.TextBox();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.tbFilename = new System.Windows.Forms.TextBox();\n\t\t\tthis.bGetFilename = new System.Windows.Forms.Button();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.cbDataProvider = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label4 = new System.Windows.Forms.Label();\n\t\t\tthis.tbConnection = new System.Windows.Forms.TextBox();\n\t\t\tthis.ckbIntSecurity = new System.Windows.Forms.CheckBox();\n\t\t\tthis.label5 = new System.Windows.Forms.Label();\n\t\t\tthis.tbPrompt = new System.Windows.Forms.TextBox();\n\t\t\tthis.bOK = new System.Windows.Forms.Button();\n\t\t\tthis.bCancel = new System.Windows.Forms.Button();\n\t\t\tthis.tbPassword2 = new System.Windows.Forms.TextBox();\n\t\t\tthis.label6 = new System.Windows.Forms.Label();\n\t\t\tthis.bTestConnection = new System.Windows.Forms.Button();\n\t\t\tthis.cbOdbcNames = new System.Windows.Forms.ComboBox();\n\t\t\tthis.lODBC = new System.Windows.Forms.Label();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// tbPassword\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbPassword, \"tbPassword\");\n\t\t\tthis.tbPassword.Name = \"tbPassword\";\n\t\t\tthis.tbPassword.TextChanged += new System.EventHandler(this.validate_TextChanged);\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// tbFilename\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbFilename, \"tbFilename\");\n\t\t\tthis.tbFilename.Name = \"tbFilename\";\n\t\t\tthis.tbFilename.TextChanged += new System.EventHandler(this.validate_TextChanged);\n\t\t\t// \n\t\t\t// bGetFilename\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bGetFilename, \"bGetFilename\");\n\t\t\tthis.bGetFilename.Name = \"bGetFilename\";\n\t\t\tthis.bGetFilename.Click += new System.EventHandler(this.bGetFilename_Click);\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// cbDataProvider\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbDataProvider, \"cbDataProvider\");\n\t\t\tthis.cbDataProvider.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbDataProvider.Name = \"cbDataProvider\";\n\t\t\tthis.cbDataProvider.SelectedIndexChanged += new System.EventHandler(this.cbDataProvider_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// label4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label4, \"label4\");\n\t\t\tthis.label4.Name = \"label4\";\n\t\t\t// \n\t\t\t// tbConnection\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbConnection, \"tbConnection\");\n\t\t\tthis.tbConnection.Name = \"tbConnection\";\n\t\t\tthis.tbConnection.TextChanged += new System.EventHandler(this.validate_TextChanged);\n\t\t\t// \n\t\t\t// ckbIntSecurity\n\t\t\t// \n\t\t\tresources.ApplyResources(this.ckbIntSecurity, \"ckbIntSecurity\");\n\t\t\tthis.ckbIntSecurity.Name = \"ckbIntSecurity\";\n\t\t\t// \n\t\t\t// label5\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label5, \"label5\");\n\t\t\tthis.label5.Name = \"label5\";\n\t\t\t// \n\t\t\t// tbPrompt\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbPrompt, \"tbPrompt\");\n\t\t\tthis.tbPrompt.Name = \"tbPrompt\";\n\t\t\t// \n\t\t\t// bOK\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bOK, \"bOK\");\n\t\t\tthis.bOK.Name = \"bOK\";\n\t\t\tthis.bOK.Click += new System.EventHandler(this.bOK_Click);\n\t\t\t// \n\t\t\t// bCancel\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCancel, \"bCancel\");\n\t\t\tthis.bCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n\t\t\tthis.bCancel.Name = \"bCancel\";\n\t\t\t// \n\t\t\t// tbPassword2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbPassword2, \"tbPassword2\");\n\t\t\tthis.tbPassword2.Name = \"tbPassword2\";\n\t\t\tthis.tbPassword2.TextChanged += new System.EventHandler(this.validate_TextChanged);\n\t\t\t// \n\t\t\t// label6\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label6, \"label6\");\n\t\t\tthis.label6.Name = \"label6\";\n\t\t\t// \n\t\t\t// bTestConnection\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bTestConnection, \"bTestConnection\");\n\t\t\tthis.bTestConnection.Name = \"bTestConnection\";\n\t\t\tthis.bTestConnection.Click += new System.EventHandler(this.bTestConnection_Click);\n\t\t\t// \n\t\t\t// cbOdbcNames\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbOdbcNames, \"cbOdbcNames\");\n\t\t\tthis.cbOdbcNames.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbOdbcNames.Name = \"cbOdbcNames\";\n\t\t\tthis.cbOdbcNames.Sorted = true;\n\t\t\tthis.cbOdbcNames.SelectedIndexChanged += new System.EventHandler(this.cbOdbcNames_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// lODBC\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lODBC, \"lODBC\");\n\t\t\tthis.lODBC.Name = \"lODBC\";\n\t\t\t// \n\t\t\t// DialogDataSourceRef\n\t\t\t// \n\t\t\tthis.AcceptButton = this.bOK;\n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.CancelButton = this.bCancel;\n\t\t\tthis.Controls.Add(this.cbOdbcNames);\n\t\t\tthis.Controls.Add(this.lODBC);\n\t\t\tthis.Controls.Add(this.bTestConnection);\n\t\t\tthis.Controls.Add(this.label6);\n\t\t\tthis.Controls.Add(this.tbPassword2);\n\t\t\tthis.Controls.Add(this.bCancel);\n\t\t\tthis.Controls.Add(this.bOK);\n\t\t\tthis.Controls.Add(this.tbPrompt);\n\t\t\tthis.Controls.Add(this.label5);\n\t\t\tthis.Controls.Add(this.ckbIntSecurity);\n\t\t\tthis.Controls.Add(this.tbConnection);\n\t\t\tthis.Controls.Add(this.label4);\n\t\t\tthis.Controls.Add(this.cbDataProvider);\n\t\t\tthis.Controls.Add(this.label3);\n\t\t\tthis.Controls.Add(this.bGetFilename);\n\t\t\tthis.Controls.Add(this.tbFilename);\n\t\t\tthis.Controls.Add(this.label2);\n\t\t\tthis.Controls.Add(this.tbPassword);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n\t\t\tthis.MaximizeBox = false;\n\t\t\tthis.MinimizeBox = false;\n\t\t\tthis.Name = \"DialogDataSourceRef\";\n\t\t\tthis.ShowInTaskbar = false;\n\t\t\tthis.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/DialogDataSourceRef.cs",
    "content": "using System;\nusing System.Drawing;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing System.Text;\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for DialogDataSourceRef.\n\t/// </summary>\n\tpublic partial class DialogDataSourceRef \n\t{\n\t\t\tpublic DialogDataSourceRef()\n\t\t{\n\t\t\t//\n\t\t\t// Required for Windows Form Designer support\n\t\t\t//\n\t\t\tInitializeComponent();\n\n\t\t\tstring[] items = RdlEngineConfig.GetProviders();\n\n\t\t\tcbDataProvider.Items.AddRange(items);\n\n\t\t\tthis.cbDataProvider.SelectedIndex = 0;\n\t\t\tthis.bOK.Enabled = false;\t\t\n\t\t}\n\n\t\tprivate void bGetFilename_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tSaveFileDialog sfd = new SaveFileDialog();\n\t\t\tsfd.Filter = Strings.DialogDataSourceRef_bGetFilename_Click_DSRFilter;\n\t\t\tsfd.FilterIndex = 1;\n\t\t\tif (tbFilename.Text.Length > 0)\n\t\t\t\tsfd.FileName = tbFilename.Text;\n\t\t\telse\n\t\t\t\tsfd.FileName = \"*.dsr\";\n\n\t\t\tsfd.Title = Strings.DialogDataSourceRef_bGetFilename_Click_DSRTitle;\n\t\t\tsfd.OverwritePrompt = true;\n\t\t\tsfd.DefaultExt = \"dsr\";\n\t\t\tsfd.AddExtension = true;\n            try\n            {\n                if (sfd.ShowDialog() == DialogResult.OK)\n                    tbFilename.Text = sfd.FileName;\n            }\n            finally\n            {\n                sfd.Dispose();\n            }\n\t\t}\n\n\t\tprivate void validate_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tif (this.tbFilename.Text.Length > 0 &&\n\t\t\t\tthis.tbPassword.Text.Length > 0 &&\n\t\t\t\tthis.tbPassword.Text == this.tbPassword2.Text &&\n\t\t\t\tthis.tbConnection.Text.Length > 0)\n\t\t\t\tbOK.Enabled = true;\n\t\t\telse\n\t\t\t\tbOK.Enabled = false;\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void bOK_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\t// Build the ConnectionProperties XML\n\t\t\tStringBuilder sb = new StringBuilder();\n\t\t\tsb.Append(\"<ConnectionProperties>\");\n\t\t\tsb.AppendFormat(\"<DataProvider>{0}</DataProvider>\", \n\t\t\t\tthis.cbDataProvider.Text);\n\t\t\tsb.AppendFormat(\"<ConnectString>{0}</ConnectString>\", \n\t\t\t\tthis.tbConnection.Text.Replace(\"<\", \"&lt;\"));\n\t\t\tsb.AppendFormat(\"<IntegratedSecurity>{0}</IntegratedSecurity>\", \n\t\t\t\tthis.ckbIntSecurity.Checked? \"true\": \"false\");\n\t\t\tif (this.tbPrompt.Text.Length > 0)\n\t\t\t\tsb.AppendFormat(\"<Prompt>{0}</Prompt>\",\n\t\t\t\t\tthis.tbPrompt.Text.Replace(\"<\", \"&lt;\"));\n\t\t\tsb.Append(\"</ConnectionProperties>\");\n\t\t\ttry\n\t\t\t{\n\t\t\t\tRdl.DataSourceReference.Create(tbFilename.Text, sb.ToString(), tbPassword.Text);\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\tMessageBox.Show(ex.Message, Strings.DialogDataSourceRef_bOK_Click_UnableCreateDSR);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tDialogResult = DialogResult.OK;\n\t\t}\n\n\t\tprivate void bTestConnection_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tif (DesignerUtility.TestConnection(this.cbDataProvider.Text, tbConnection.Text))\n\t\t\t\tMessageBox.Show(Strings.DialogDatabase_Show_ConnectionSuccessful, Strings.DesignerUtility_Show_TestConnection);\n\n\t\t}\n\n\t\tprivate void cbDataProvider_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tif (cbDataProvider.Text == \"ODBC\")\n\t\t\t{\n\t\t\t\tlODBC.Visible = cbOdbcNames.Visible = true;\n\t\t\t\tDesignerUtility.FillOdbcNames(cbOdbcNames);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlODBC.Visible = cbOdbcNames.Visible = false;\n\t\t\t}\n\n\t\t}\n\n\t\tprivate void cbOdbcNames_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\ttbConnection.Text = \"dsn=\" + cbOdbcNames.Text + \";\";\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/DialogDataSourceRef.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Name\" xml:space=\"preserve\">\n    <value>label6</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"cbDataProvider.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>272, 344</value>\n  </data>\n  <data name=\"&gt;&gt;bGetFilename.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label5.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Repeat</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbOdbcNames.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;ckbIntSecurity.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbConnection.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"tbPrompt.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"tbPassword.PasswordChar\" type=\"System.Char, mscorlib\" xml:space=\"preserve\">\n    <value>*</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Name\" xml:space=\"preserve\">\n    <value>bCancel</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Create Data Source Reference File</value>\n  </data>\n  <data name=\"&gt;&gt;tbPassword.ZOrder\" xml:space=\"preserve\">\n    <value>17</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataProvider.ZOrder\" xml:space=\"preserve\">\n    <value>12</value>\n  </data>\n  <data name=\"&gt;&gt;bGetFilename.ZOrder\" xml:space=\"preserve\">\n    <value>14</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>18</value>\n  </data>\n  <data name=\"&gt;&gt;cbOdbcNames.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbConnection.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 216</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"bCancel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"cbDataProvider.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>80, 152</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbFilename.ZOrder\" xml:space=\"preserve\">\n    <value>15</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 16</value>\n  </data>\n  <data name=\"lODBC.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>184, 152</value>\n  </data>\n  <data name=\"&gt;&gt;tbFilename.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Data provider</value>\n  </data>\n  <data name=\"&gt;&gt;tbPrompt.Name\" xml:space=\"preserve\">\n    <value>tbPrompt</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>(Optional) Enter the prompt displayed when asking for database credentials </value>\n  </data>\n  <data name=\"tbFilename.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"ckbIntSecurity.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>296, 184</value>\n  </data>\n  <data name=\"tbPassword2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>184, 20</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bTestConnection.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>16</value>\n  </data>\n  <data name=\"&gt;&gt;tbPassword2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbFilename.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;ckbIntSecurity.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"ckbIntSecurity.Text\" xml:space=\"preserve\">\n    <value>Use integrated security</value>\n  </data>\n  <data name=\"tbConnection.Multiline\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"tbFilename.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>392, 20</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Name\" xml:space=\"preserve\">\n    <value>label5</value>\n  </data>\n  <data name=\"tbPassword.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"bGetFilename.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 23</value>\n  </data>\n  <data name=\"&gt;&gt;tbConnection.Name\" xml:space=\"preserve\">\n    <value>tbConnection</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 192</value>\n  </data>\n  <data name=\"&gt;&gt;tbPassword2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lODBC.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bGetFilename.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbPassword.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 56</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DialogDataSourceRef</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"&gt;&gt;label4.ZOrder\" xml:space=\"preserve\">\n    <value>11</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbOdbcNames.Name\" xml:space=\"preserve\">\n    <value>cbOdbcNames</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>408, 16</value>\n  </data>\n  <data name=\"&gt;&gt;tbConnection.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbConnection.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <data name=\"label5.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 272</value>\n  </data>\n  <data name=\"&gt;&gt;bTestConnection.Name\" xml:space=\"preserve\">\n    <value>bTestConnection</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbPassword2.Name\" xml:space=\"preserve\">\n    <value>tbPassword2</value>\n  </data>\n  <data name=\"bTestConnection.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 344</value>\n  </data>\n  <data name=\"&gt;&gt;lODBC.Name\" xml:space=\"preserve\">\n    <value>lODBC</value>\n  </data>\n  <data name=\"&gt;&gt;tbFilename.Name\" xml:space=\"preserve\">\n    <value>tbFilename</value>\n  </data>\n  <data name=\"tbPassword2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;ckbIntSecurity.Name\" xml:space=\"preserve\">\n    <value>ckbIntSecurity</value>\n  </data>\n  <data name=\"bTestConnection.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Name\" xml:space=\"preserve\">\n    <value>label4</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"cbOdbcNames.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>296, 152</value>\n  </data>\n  <data name=\"tbPrompt.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>424, 20</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 152</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"lODBC.Text\" xml:space=\"preserve\">\n    <value>ODBC Data Sources</value>\n  </data>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"bGetFilename.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"tbPassword2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>256, 56</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataProvider.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"&gt;&gt;cbOdbcNames.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;tbPrompt.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;bTestConnection.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbOdbcNames.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Enter the file name that will hold the encrypted data source information</value>\n  </data>\n  <data name=\"ckbIntSecurity.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>144, 24</value>\n  </data>\n  <data name=\"tbPrompt.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 296</value>\n  </data>\n  <data name=\"bGetFilename.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"cbDataProvider.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 21</value>\n  </data>\n  <data name=\"lODBC.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>17</value>\n  </data>\n  <data name=\"&gt;&gt;label5.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"bTestConnection.Text\" xml:space=\"preserve\">\n    <value>Test Connection</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>440, 32</value>\n  </data>\n  <data name=\"&gt;&gt;ckbIntSecurity.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;tbPassword.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbPassword2.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Enter (twice) a pass phrase used to encrypt the data source reference file.   You should use the same password you've used to create previous files, as only one can be used.</value>\n  </data>\n  <data name=\"&gt;&gt;tbPrompt.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbConnection.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>424, 40</value>\n  </data>\n  <data name=\"lODBC.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>112, 23</value>\n  </data>\n  <data name=\"&gt;&gt;tbPrompt.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 23</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lODBC.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbPassword.Name\" xml:space=\"preserve\">\n    <value>tbPassword</value>\n  </data>\n  <data name=\"bCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>368, 344</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"bGetFilename.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>424, 112</value>\n  </data>\n  <data name=\"tbPassword.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>184, 20</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataProvider.Name\" xml:space=\"preserve\">\n    <value>cbDataProvider</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 88</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>456, 374</value>\n  </data>\n  <data name=\"bTestConnection.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 23</value>\n  </data>\n  <data name=\"&gt;&gt;label6.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataProvider.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>13</value>\n  </data>\n  <data name=\"&gt;&gt;lODBC.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bGetFilename.Name\" xml:space=\"preserve\">\n    <value>bGetFilename</value>\n  </data>\n  <data name=\"&gt;&gt;tbConnection.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbPassword.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbFilename.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 112</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 16</value>\n  </data>\n  <data name=\"tbPassword2.PasswordChar\" type=\"System.Char, mscorlib\" xml:space=\"preserve\">\n    <value>*</value>\n  </data>\n  <data name=\"&gt;&gt;bTestConnection.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 16</value>\n  </data>\n  <data name=\"label6.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"label6.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>208, 64</value>\n  </data>\n  <data name=\"cbOdbcNames.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 21</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Connection string</value>\n  </data>\n  <data name=\"ckbIntSecurity.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/DialogDataSourceRef.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 5</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>440, 55</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Введите (дважды) секретную фразу, используемую для шифрования файла общего источника данных. Вы должны использовать тот же пароль, который использовался для создания предыдущих файлов, и только один может использоваться.</value>\n  </data>\n  <data name=\"tbPassword.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 62</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>408, 31</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Введите имя файла, который будет содержать информацию зашифрованного источника данных</value>\n  </data>\n  <data name=\"tbFilename.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 122</value>\n  </data>\n  <data name=\"bGetFilename.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>424, 122</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 155</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>123, 23</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Поставщик данных</value>\n  </data>\n  <data name=\"cbDataProvider.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>118, 155</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>123, 16</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Строка соединения</value>\n  </data>\n  <data name=\"ckbIntSecurity.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>201, 184</value>\n  </data>\n  <data name=\"ckbIntSecurity.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>239, 24</value>\n  </data>\n  <data name=\"ckbIntSecurity.Text\" xml:space=\"preserve\">\n    <value>Использовать встроенную безопасность</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 29</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>(Необязательно) Введите подсказку, отображаемую при запросе учётных данных базы данных</value>\n  </data>\n  <data name=\"tbPrompt.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 304</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"tbPassword2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>256, 62</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Повтор</value>\n  </data>\n  <data name=\"bTestConnection.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>137, 23</value>\n  </data>\n  <data name=\"bTestConnection.Text\" xml:space=\"preserve\">\n    <value>Проверить соединение</value>\n  </data>\n  <data name=\"cbOdbcNames.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>326, 155</value>\n  </data>\n  <data name=\"cbOdbcNames.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>122, 21</value>\n  </data>\n  <data name=\"lODBC.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>228, 153</value>\n  </data>\n  <data name=\"lODBC.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>92, 23</value>\n  </data>\n  <data name=\"lODBC.Text\" xml:space=\"preserve\">\n    <value>Источник ODBC</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Создать общий источник данных</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DialogDataSources.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    internal partial class DialogDataSources : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tDesignXmlDraw _Draw;\nprivate System.Windows.Forms.TextBox tbFilename;\nprivate System.Windows.Forms.Button bGetFilename;\nprivate System.Windows.Forms.ComboBox cbDataProvider;\nprivate System.Windows.Forms.TextBox tbConnection;\nprivate System.Windows.Forms.CheckBox ckbIntSecurity;\nprivate System.Windows.Forms.TextBox tbPrompt;\nprivate System.Windows.Forms.Button bOK;\nprivate System.Windows.Forms.Button bCancel;\nprivate System.Windows.Forms.Button bTestConnection;\nprivate System.Windows.Forms.ListBox lbDataSources;\nprivate System.Windows.Forms.Button bRemove;\nprivate System.Windows.Forms.Button bAdd;\nprivate System.Windows.Forms.CheckBox chkSharedDataSource;\nprivate System.Windows.Forms.Label label1;\nprivate System.Windows.Forms.Label lDataProvider;\nprivate System.Windows.Forms.Label lConnectionString;\nprivate System.Windows.Forms.Label lPrompt;\nprivate System.Windows.Forms.TextBox tbDSName;\nprivate System.Windows.Forms.Button bExprConnect;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DialogDataSources));\n\t\t\tthis.tbFilename = new System.Windows.Forms.TextBox();\n\t\t\tthis.bGetFilename = new System.Windows.Forms.Button();\n\t\t\tthis.lDataProvider = new System.Windows.Forms.Label();\n\t\t\tthis.cbDataProvider = new System.Windows.Forms.ComboBox();\n\t\t\tthis.lConnectionString = new System.Windows.Forms.Label();\n\t\t\tthis.tbConnection = new System.Windows.Forms.TextBox();\n\t\t\tthis.ckbIntSecurity = new System.Windows.Forms.CheckBox();\n\t\t\tthis.lPrompt = new System.Windows.Forms.Label();\n\t\t\tthis.tbPrompt = new System.Windows.Forms.TextBox();\n\t\t\tthis.bOK = new System.Windows.Forms.Button();\n\t\t\tthis.bCancel = new System.Windows.Forms.Button();\n\t\t\tthis.bTestConnection = new System.Windows.Forms.Button();\n\t\t\tthis.lbDataSources = new System.Windows.Forms.ListBox();\n\t\t\tthis.bRemove = new System.Windows.Forms.Button();\n\t\t\tthis.bAdd = new System.Windows.Forms.Button();\n\t\t\tthis.chkSharedDataSource = new System.Windows.Forms.CheckBox();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.tbDSName = new System.Windows.Forms.TextBox();\n\t\t\tthis.bExprConnect = new System.Windows.Forms.Button();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// tbFilename\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbFilename, \"tbFilename\");\n\t\t\tthis.tbFilename.Name = \"tbFilename\";\n\t\t\tthis.tbFilename.TextChanged += new System.EventHandler(this.tbFilename_TextChanged);\n\t\t\t// \n\t\t\t// bGetFilename\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bGetFilename, \"bGetFilename\");\n\t\t\tthis.bGetFilename.Name = \"bGetFilename\";\n\t\t\tthis.bGetFilename.Click += new System.EventHandler(this.bGetFilename_Click);\n\t\t\t// \n\t\t\t// lDataProvider\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lDataProvider, \"lDataProvider\");\n\t\t\tthis.lDataProvider.Name = \"lDataProvider\";\n\t\t\t// \n\t\t\t// cbDataProvider\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbDataProvider, \"cbDataProvider\");\n\t\t\tthis.cbDataProvider.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbDataProvider.Items.AddRange(new object[] {\n            resources.GetString(\"cbDataProvider.Items\"),\n            resources.GetString(\"cbDataProvider.Items1\"),\n            resources.GetString(\"cbDataProvider.Items2\")});\n\t\t\tthis.cbDataProvider.Name = \"cbDataProvider\";\n\t\t\tthis.cbDataProvider.SelectedIndexChanged += new System.EventHandler(this.cbDataProvider_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// lConnectionString\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lConnectionString, \"lConnectionString\");\n\t\t\tthis.lConnectionString.Name = \"lConnectionString\";\n\t\t\t// \n\t\t\t// tbConnection\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbConnection, \"tbConnection\");\n\t\t\tthis.tbConnection.Name = \"tbConnection\";\n\t\t\tthis.tbConnection.TextChanged += new System.EventHandler(this.tbConnection_TextChanged);\n\t\t\t// \n\t\t\t// ckbIntSecurity\n\t\t\t// \n\t\t\tresources.ApplyResources(this.ckbIntSecurity, \"ckbIntSecurity\");\n\t\t\tthis.ckbIntSecurity.Name = \"ckbIntSecurity\";\n\t\t\tthis.ckbIntSecurity.CheckedChanged += new System.EventHandler(this.ckbIntSecurity_CheckedChanged);\n\t\t\t// \n\t\t\t// lPrompt\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lPrompt, \"lPrompt\");\n\t\t\tthis.lPrompt.Name = \"lPrompt\";\n\t\t\t// \n\t\t\t// tbPrompt\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbPrompt, \"tbPrompt\");\n\t\t\tthis.tbPrompt.Name = \"tbPrompt\";\n\t\t\tthis.tbPrompt.TextChanged += new System.EventHandler(this.tbPrompt_TextChanged);\n\t\t\t// \n\t\t\t// bOK\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bOK, \"bOK\");\n\t\t\tthis.bOK.Name = \"bOK\";\n\t\t\tthis.bOK.Click += new System.EventHandler(this.bOK_Click);\n\t\t\t// \n\t\t\t// bCancel\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCancel, \"bCancel\");\n\t\t\tthis.bCancel.CausesValidation = false;\n\t\t\tthis.bCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n\t\t\tthis.bCancel.Name = \"bCancel\";\n\t\t\t// \n\t\t\t// bTestConnection\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bTestConnection, \"bTestConnection\");\n\t\t\tthis.bTestConnection.Name = \"bTestConnection\";\n\t\t\tthis.bTestConnection.Click += new System.EventHandler(this.bTestConnection_Click);\n\t\t\t// \n\t\t\t// lbDataSources\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lbDataSources, \"lbDataSources\");\n\t\t\tthis.lbDataSources.Name = \"lbDataSources\";\n\t\t\tthis.lbDataSources.SelectedIndexChanged += new System.EventHandler(this.lbDataSources_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// bRemove\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bRemove, \"bRemove\");\n\t\t\tthis.bRemove.Name = \"bRemove\";\n\t\t\tthis.bRemove.Click += new System.EventHandler(this.bRemove_Click);\n\t\t\t// \n\t\t\t// bAdd\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bAdd, \"bAdd\");\n\t\t\tthis.bAdd.Name = \"bAdd\";\n\t\t\tthis.bAdd.Click += new System.EventHandler(this.bAdd_Click);\n\t\t\t// \n\t\t\t// chkSharedDataSource\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkSharedDataSource, \"chkSharedDataSource\");\n\t\t\tthis.chkSharedDataSource.Name = \"chkSharedDataSource\";\n\t\t\tthis.chkSharedDataSource.CheckedChanged += new System.EventHandler(this.chkSharedDataSource_CheckedChanged);\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// tbDSName\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbDSName, \"tbDSName\");\n\t\t\tthis.tbDSName.Name = \"tbDSName\";\n\t\t\tthis.tbDSName.TextChanged += new System.EventHandler(this.tbDSName_TextChanged);\n\t\t\tthis.tbDSName.Validating += new System.ComponentModel.CancelEventHandler(this.tbDSName_Validating);\n\t\t\t// \n\t\t\t// bExprConnect\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bExprConnect, \"bExprConnect\");\n\t\t\tthis.bExprConnect.Name = \"bExprConnect\";\n\t\t\tthis.bExprConnect.Tag = \"pright\";\n\t\t\tthis.bExprConnect.Click += new System.EventHandler(this.bExprConnect_Click);\n\t\t\t// \n\t\t\t// DialogDataSources\n\t\t\t// \n\t\t\tthis.AcceptButton = this.bOK;\n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.CancelButton = this.bCancel;\n\t\t\tthis.Controls.Add(this.bExprConnect);\n\t\t\tthis.Controls.Add(this.tbDSName);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Controls.Add(this.chkSharedDataSource);\n\t\t\tthis.Controls.Add(this.bRemove);\n\t\t\tthis.Controls.Add(this.bAdd);\n\t\t\tthis.Controls.Add(this.lbDataSources);\n\t\t\tthis.Controls.Add(this.bTestConnection);\n\t\t\tthis.Controls.Add(this.bCancel);\n\t\t\tthis.Controls.Add(this.bOK);\n\t\t\tthis.Controls.Add(this.tbPrompt);\n\t\t\tthis.Controls.Add(this.lPrompt);\n\t\t\tthis.Controls.Add(this.ckbIntSecurity);\n\t\t\tthis.Controls.Add(this.tbConnection);\n\t\t\tthis.Controls.Add(this.lConnectionString);\n\t\t\tthis.Controls.Add(this.cbDataProvider);\n\t\t\tthis.Controls.Add(this.lDataProvider);\n\t\t\tthis.Controls.Add(this.bGetFilename);\n\t\t\tthis.Controls.Add(this.tbFilename);\n\t\t\tthis.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n\t\t\tthis.MaximizeBox = false;\n\t\t\tthis.MinimizeBox = false;\n\t\t\tthis.Name = \"DialogDataSources\";\n\t\t\tthis.ShowInTaskbar = false;\n\t\t\tthis.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/DialogDataSources.cs",
    "content": "using System;\nusing System.Drawing;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing System.Text;\nusing System.Xml;\nusing System.IO;\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// Summary description for DialogDataSourceRef.\n    /// </summary>\n    internal partial class DialogDataSources \n    {\n\n        Uri _FileName;           // file name of open file; used to obtain directory\n\n        internal DialogDataSources(Uri filename, DesignXmlDraw draw)\n        {\n            _Draw = draw;\n            _FileName = filename;\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            InitValues();\n        }\n\n        private void InitValues()\n        {\n            // Populate the DataProviders\n            cbDataProvider.Items.Clear();\n            string[] items = RdlEngineConfig.GetProviders();\n            cbDataProvider.Items.AddRange(items);\n\n            //\n            // Obtain the existing DataSets info\n            //\n            XmlNode rNode = _Draw.GetReportNode();\n            XmlNode dsNode = _Draw.GetNamedChildNode(rNode, \"DataSources\");\n            if (dsNode == null)\n                return;\n            foreach (XmlNode dNode in dsNode)\n            {\n                if (dNode.Name != \"DataSource\")\n                    continue;\n                XmlAttribute nAttr = dNode.Attributes[\"Name\"];\n                if (nAttr == null)\t// shouldn't really happen\n                    continue;\n\n                DataSourceValues dsv = new DataSourceValues(nAttr.Value);\n                dsv.Node = dNode;\n\n                dsv.DataSourceReference = _Draw.GetElementValue(dNode, \"DataSourceReference\", null);\n                if (dsv.DataSourceReference == null)\n                {\t// this is not a data source reference\n                    dsv.bDataSourceReference = false;\n                    dsv.DataSourceReference = \"\";\n\n                    XmlNode cpNode = DesignXmlDraw.FindNextInHierarchy(dNode, \"ConnectionProperties\", \"ConnectString\");\n                    dsv.ConnectionString = cpNode == null ? \"\" : cpNode.InnerText;\n\n                    XmlNode datap = DesignXmlDraw.FindNextInHierarchy(dNode, \"ConnectionProperties\", \"DataProvider\");\n                    dsv.DataProvider = datap == null ? \"\" : datap.InnerText;\n\n                    XmlNode p = DesignXmlDraw.FindNextInHierarchy(dNode, \"ConnectionProperties\", \"Prompt\");\n                    dsv.Prompt = p == null ? \"\" : p.InnerText;\n                }\n                else\n                {\t// we have a data source reference\n                    dsv.bDataSourceReference = true;\n                    dsv.ConnectionString = \"\";\n                    dsv.DataProvider = \"\";\n                    dsv.Prompt = \"\";\n                }\n\n                this.lbDataSources.Items.Add(dsv);\n            }\n            if (lbDataSources.Items.Count > 0)\n                lbDataSources.SelectedIndex = 0;\n            else\n                this.bOK.Enabled = false;\n        }\n\n        public void Apply()\n        {\n            XmlNode rNode = _Draw.GetReportNode();\n            _Draw.RemoveElement(rNode, \"DataSources\");\t// remove old DataSources\n            if (this.lbDataSources.Items.Count <= 0)\n                return;\t\t\t// nothing in list?  all done\n\n            XmlNode dsNode = _Draw.SetElement(rNode, \"DataSources\", null);\n            foreach (DataSourceValues dsv in lbDataSources.Items)\n            {\n                if (dsv.Name == null || dsv.Name.Length <= 0)\n                    continue;\t\t\t\t\t// shouldn't really happen\n                XmlNode dNode = _Draw.CreateElement(dsNode, \"DataSource\", null);\n\n                // Create the name attribute\n                _Draw.SetElementAttribute(dNode, \"Name\", dsv.Name);\n\n                if (dsv.bDataSourceReference)\n                {\n                    _Draw.SetElement(dNode, \"DataSourceReference\", dsv.DataSourceReference);\n                    continue;\n                }\n                // must fill out the connection properties\n                XmlNode cNode = _Draw.CreateElement(dNode, \"ConnectionProperties\", null);\n                _Draw.SetElement(cNode, \"DataProvider\", dsv.DataProvider);\n                _Draw.SetElement(cNode, \"ConnectString\", dsv.ConnectionString);\n                _Draw.SetElement(cNode, \"IntegratedSecurity\", dsv.IntegratedSecurity ? \"true\" : \"false\");\n                if (dsv.Prompt != null && dsv.Prompt.Length > 0)\n                    _Draw.SetElement(cNode, \"Prompt\", dsv.Prompt);\n            }\n        }\n\n        private void bGetFilename_Click(object sender, System.EventArgs e)\n        {\n            OpenFileDialog ofd = new OpenFileDialog();\n            ofd.Filter = Strings.DialogDataSources_bGetFilename_Click_DSRFilter;\n            ofd.FilterIndex = 1;\n            if (tbFilename.Text.Length > 0)\n                ofd.FileName = tbFilename.Text;\n            else\n                ofd.FileName = \"*.dsr\";\n\n            ofd.Title = Strings.DialogDataSources_bGetFilename_Click_DSRTitle;\n            ofd.DefaultExt = \"dsr\";\n            ofd.AddExtension = true;\n\n            try\n            {\n                if (_FileName != null)\n                {\n                    ofd.InitialDirectory = Path.GetDirectoryName(_FileName.LocalPath);\n                }\n            }\n            catch\n            {\n            }\n            try\n            {\n                if (ofd.ShowDialog() == DialogResult.OK)\n                {\n                    try\n                    {\n                        string dsr = DesignerUtility.RelativePathTo(\n                            Path.GetDirectoryName(_FileName.LocalPath), Path.GetDirectoryName(ofd.FileName));\n\n                        string f = Path.GetFileNameWithoutExtension(ofd.FileName);\n\n                        tbFilename.Text = dsr == \"\" ? f : dsr + Path.DirectorySeparatorChar + f;\n                    }\n                    catch\n                    {\n                        tbFilename.Text = Path.GetFileNameWithoutExtension(ofd.FileName);\n                    }\n                }\n            }\n            finally\n            {\n                ofd.Dispose();\n            }\n        }\n\n        private void tbFilename_TextChanged(object sender, System.EventArgs e)\n        {\n            int cur = lbDataSources.SelectedIndex;\n            if (cur < 0)\n                return;\n\n            DataSourceValues dsv = lbDataSources.Items[cur] as DataSourceValues;\n            if (dsv == null)\n                return;\n\n            dsv.DataSourceReference = tbFilename.Text;\n            return;\n        }\n\n        private void bOK_Click(object sender, System.EventArgs e)\n        {\n            // Verify there are no duplicate names in the data sources\n            Hashtable ht = new Hashtable(this.lbDataSources.Items.Count + 1);\n            foreach (DataSourceValues dsv in lbDataSources.Items)\n            {\n                if (dsv.Name == null || dsv.Name.Length == 0)\n                {\n                    MessageBox.Show(this, Strings.DialogDataSources_ShowE_NameMustSpecified, Strings.DialogDataSources_ShowE_DataSources);\n                    return;\n                }\n\n                if (!ReportNames.IsNameValid(dsv.Name))\n                {\n                    MessageBox.Show(this,\n\t\t\t\t\t\tstring.Format(Strings.DialogDataSources_ShowE_NameInvalid, dsv.Name), Strings.DialogDataSources_ShowE_DataSources);\n                    return;\n                }\n\n                string name = (string)ht[dsv.Name];\n                if (name != null)\n                {\n                    MessageBox.Show(this,\n\t\t\t\t\t\tstring.Format(Strings.DialogDataSources_ShowE_DataSourceMustUniqueN, dsv.Name), Strings.DialogDataSources_ShowE_DataSources);\n                    return;\n                }\n                ht.Add(dsv.Name, dsv.Name);\n            }\n\n            // apply the result\n            Apply();\n            DialogResult = DialogResult.OK;\n        }\n\n        private void bTestConnection_Click(object sender, System.EventArgs e)\n        {\n            if (string.IsNullOrEmpty(this.cbDataProvider.Text))\n            {\n                MessageBox.Show(Strings.DialogDatabase_ShowD_SelectDataProvider, Strings.DesignerUtility_Show_TestConnection, MessageBoxButtons.OK, MessageBoxIcon.Error);\n                return;\n            }\n\n            var connectionString = tbConnection.Text;\n            if (tbConnection.Text.StartsWith(\"=Parameters!\"))\n            {\n                connectionString = _Draw.GetReportParameterDefaultValue(tbConnection.Text);\n            }\n\n            if (DesignerUtility.TestConnection(this.cbDataProvider.Text, connectionString))\n                MessageBox.Show(Strings.DialogDatabase_Show_ConnectionSuccessful, Strings.DesignerUtility_Show_TestConnection);\n        }\n\n        private void tbDSName_TextChanged(object sender, System.EventArgs e)\n        {\n            int cur = lbDataSources.SelectedIndex;\n            if (cur < 0)\n                return;\n\n            DataSourceValues dsv = lbDataSources.Items[cur] as DataSourceValues;\n            if (dsv == null)\n                return;\n\n            if (dsv.Name == tbDSName.Text)\n                return;\n\n            dsv.Name = tbDSName.Text;\n            // text doesn't change in listbox; force change by removing and re-adding item\n            lbDataSources.BeginUpdate();\n            lbDataSources.Items.RemoveAt(cur);\n            lbDataSources.Items.Insert(cur, dsv);\n            lbDataSources.SelectedIndex = cur;\n            lbDataSources.EndUpdate();\n        }\n\n        private void chkSharedDataSource_CheckedChanged(object sender, System.EventArgs e)\n        {\n            int cur = lbDataSources.SelectedIndex;\n            if (cur < 0)\n                return;\n\n            DataSourceValues dsv = lbDataSources.Items[cur] as DataSourceValues;\n            if (dsv == null)\n                return;\n            dsv.bDataSourceReference = chkSharedDataSource.Checked;\n\n            bool bEnableDataSourceRef = chkSharedDataSource.Checked;\n            // shared data source fields\n            tbFilename.Enabled = bEnableDataSourceRef;\n            bGetFilename.Enabled = bEnableDataSourceRef;\n            // in report data source\n            cbDataProvider.Enabled = !bEnableDataSourceRef;\n            tbConnection.Enabled = !bEnableDataSourceRef;\n            ckbIntSecurity.Enabled = !bEnableDataSourceRef;\n            tbPrompt.Enabled = !bEnableDataSourceRef;\n            bTestConnection.Enabled = !bEnableDataSourceRef;\n            lDataProvider.Enabled = !bEnableDataSourceRef;\n            lConnectionString.Enabled = !bEnableDataSourceRef;\n            lPrompt.Enabled = !bEnableDataSourceRef;\n        }\n\n        private void lbDataSources_SelectedIndexChanged(object sender, System.EventArgs e)\n        {\n            int cur = lbDataSources.SelectedIndex;\n            if (cur < 0)\n                return;\n\n            DataSourceValues dsv = lbDataSources.Items[cur] as DataSourceValues;\n            if (dsv == null)\n                return;\n\n            tbDSName.Text = dsv.Name;\n            cbDataProvider.Text = dsv.DataProvider;\n            tbConnection.Text = dsv.ConnectionString;\n            ckbIntSecurity.Checked = dsv.IntegratedSecurity;\n            this.tbFilename.Text = dsv.DataSourceReference;\n            tbPrompt.Text = dsv.Prompt;\n            this.chkSharedDataSource.Checked = dsv.bDataSourceReference;\n            chkSharedDataSource_CheckedChanged(this.chkSharedDataSource, e);\t// force message\n        }\n\n        private void bAdd_Click(object sender, System.EventArgs e)\n        {\n            DataSourceValues dsv = new DataSourceValues(\"datasource\");\n            int cur = this.lbDataSources.Items.Add(dsv);\n\n            lbDataSources.SelectedIndex = cur;\n\n            this.tbDSName.Focus();\n        }\n\n        private void bRemove_Click(object sender, System.EventArgs e)\n        {\n            int cur = lbDataSources.SelectedIndex;\n            if (cur < 0)\n                return;\n            lbDataSources.Items.RemoveAt(cur);\n            if (lbDataSources.Items.Count <= 0)\n                return;\n            cur--;\n            if (cur < 0)\n                cur = 0;\n            lbDataSources.SelectedIndex = cur;\n        }\n\n        private void tbDSName_Validating(object sender, System.ComponentModel.CancelEventArgs e)\n        {\n            int cur = lbDataSources.SelectedIndex;\n            if (cur < 0)\n                return;\n\n            if (!ReportNames.IsNameValid(tbDSName.Text))\n            {\n                e.Cancel = true;\n                MessageBox.Show(this,\n\t\t\t\t\tstring.Format(Strings.DialogDataSources_ShowE_NameInvalid, tbDSName.Text), Strings.DialogDataSources_ShowE_DataSources);\n            }\n\n        }\n\n        private void tbConnection_TextChanged(object sender, System.EventArgs e)\n        {\n            int cur = lbDataSources.SelectedIndex;\n            if (cur < 0)\n                return;\n\n            DataSourceValues dsv = lbDataSources.Items[cur] as DataSourceValues;\n            if (dsv == null)\n                return;\n\n            dsv.ConnectionString = tbConnection.Text;\n        }\n\n        private void tbPrompt_TextChanged(object sender, System.EventArgs e)\n        {\n            int cur = lbDataSources.SelectedIndex;\n            if (cur < 0)\n                return;\n\n            DataSourceValues dsv = lbDataSources.Items[cur] as DataSourceValues;\n            if (dsv == null)\n                return;\n\n            dsv.Prompt = tbPrompt.Text;\n        }\n\n        private void cbDataProvider_SelectedIndexChanged(object sender, System.EventArgs e)\n        {\n            int cur = lbDataSources.SelectedIndex;\n            if (cur < 0)\n                return;\n\n            DataSourceValues dsv = lbDataSources.Items[cur] as DataSourceValues;\n            if (dsv == null)\n                return;\n\n            dsv.DataProvider = cbDataProvider.Text;\n        }\n\n        private void ckbIntSecurity_CheckedChanged(object sender, System.EventArgs e)\n        {\n            int cur = lbDataSources.SelectedIndex;\n            if (cur < 0)\n                return;\n\n            DataSourceValues dsv = lbDataSources.Items[cur] as DataSourceValues;\n            if (dsv == null)\n                return;\n\n            dsv.IntegratedSecurity = ckbIntSecurity.Checked;\n        }\n\n        private void bExprConnect_Click(object sender, System.EventArgs e)\n        {\n            DialogExprEditor ee = new DialogExprEditor(_Draw, this.tbConnection.Text, null, false);\n            try\n            {\n                DialogResult dr = ee.ShowDialog();\n                if (dr == DialogResult.OK)\n                    tbConnection.Text = ee.Expression;\n            }\n            finally\n            {\n                ee.Dispose();\n            }\n        }\n    }\n\n    class DataSourceValues\n    {\n        string _Name;\n        bool _bDataSourceReference;\n        string _DataSourceReference;\n        string _DataProvider;\n        string _ConnectionString;\n        bool _IntegratedSecurity;\n        string _Prompt;\n        XmlNode _Node;\n\n        internal DataSourceValues(string name)\n        {\n            _Name = name;\n        }\n\n        internal string Name\n        {\n            get { return _Name; }\n            set { _Name = value; }\n        }\n\n        internal bool bDataSourceReference\n        {\n            get { return _bDataSourceReference; }\n            set { _bDataSourceReference = value; }\n        }\n\n        internal string DataSourceReference\n        {\n            get { return _DataSourceReference; }\n            set { _DataSourceReference = value; }\n        }\n\n        internal string DataProvider\n        {\n            get { return _DataProvider; }\n            set { _DataProvider = value; }\n        }\n\n        internal string ConnectionString\n        {\n            get { return _ConnectionString; }\n            set { _ConnectionString = value; }\n        }\n\n        internal bool IntegratedSecurity\n        {\n            get { return _IntegratedSecurity; }\n            set { _IntegratedSecurity = value; }\n        }\n\n        internal string Prompt\n        {\n            get { return _Prompt; }\n            set { _Prompt = value; }\n        }\n\n        internal XmlNode Node\n        {\n            get { return _Node; }\n            set { _Node = value; }\n        }\n\n        override public string ToString()\n        {\n            return _Name;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/DialogDataSources.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"&gt;&gt;bAdd.Name\" xml:space=\"preserve\">\n    <value>bAdd</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;bAdd.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"tbConnection.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>424, 40</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <data name=\"&gt;&gt;bTestConnection.Name\" xml:space=\"preserve\">\n    <value>bTestConnection</value>\n  </data>\n  <data name=\"&gt;&gt;chkSharedDataSource.Name\" xml:space=\"preserve\">\n    <value>chkSharedDataSource</value>\n  </data>\n  <data name=\"bExprConnect.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lConnectionString.Name\" xml:space=\"preserve\">\n    <value>lConnectionString</value>\n  </data>\n  <data name=\"bCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>272, 344</value>\n  </data>\n  <data name=\"&gt;&gt;bGetFilename.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lbDataSources.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lConnectionString.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bExprConnect.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bExprConnect.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bExprConnect.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"lPrompt.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 272</value>\n  </data>\n  <data name=\"&gt;&gt;lPrompt.Name\" xml:space=\"preserve\">\n    <value>lPrompt</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bRemove.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>20</value>\n  </data>\n  <data name=\"tbFilename.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"tbPrompt.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataProvider.Name\" xml:space=\"preserve\">\n    <value>cbDataProvider</value>\n  </data>\n  <data name=\"lbDataSources.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>120, 82</value>\n  </data>\n  <data name=\"tbDSName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>216, 24</value>\n  </data>\n  <data name=\"lDataProvider.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 23</value>\n  </data>\n  <data name=\"lDataProvider.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 152</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Name\" xml:space=\"preserve\">\n    <value>bCancel</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>DataSources in Report</value>\n  </data>\n  <data name=\"cbDataProvider.Items2\" xml:space=\"preserve\">\n    <value>OLEDB</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataProvider.ZOrder\" xml:space=\"preserve\">\n    <value>15</value>\n  </data>\n  <data name=\"&gt;&gt;bGetFilename.ZOrder\" xml:space=\"preserve\">\n    <value>17</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"tbConnection.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 216</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"&gt;&gt;bExprConnect.Name\" xml:space=\"preserve\">\n    <value>bExprConnect</value>\n  </data>\n  <data name=\"lConnectionString.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"lConnectionString.Text\" xml:space=\"preserve\">\n    <value>Connection string</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"&gt;&gt;lbDataSources.Name\" xml:space=\"preserve\">\n    <value>lbDataSources</value>\n  </data>\n  <data name=\"&gt;&gt;tbFilename.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;lConnectionString.ZOrder\" xml:space=\"preserve\">\n    <value>14</value>\n  </data>\n  <data name=\"lDataProvider.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;tbPrompt.Name\" xml:space=\"preserve\">\n    <value>tbPrompt</value>\n  </data>\n  <data name=\"ckbIntSecurity.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>280, 152</value>\n  </data>\n  <data name=\"&gt;&gt;bAdd.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"bGetFilename.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bRemove.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bTestConnection.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"lDataProvider.Text\" xml:space=\"preserve\">\n    <value>Data provider</value>\n  </data>\n  <data name=\"&gt;&gt;tbFilename.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;ckbIntSecurity.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lDataProvider.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lPrompt.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbConnection.Multiline\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"tbFilename.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 20</value>\n  </data>\n  <data name=\"bGetFilename.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"lConnectionString.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 192</value>\n  </data>\n  <data name=\"&gt;&gt;tbConnection.Name\" xml:space=\"preserve\">\n    <value>tbConnection</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>216, 8</value>\n  </data>\n  <data name=\"bAdd.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bGetFilename.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DialogDataSources</value>\n  </data>\n  <data name=\"lbDataSources.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 8</value>\n  </data>\n  <data name=\"&gt;&gt;lbDataSources.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;lDataProvider.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bExprConnect.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>23</value>\n  </data>\n  <data name=\"tbDSName.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"cbDataProvider.Items1\" xml:space=\"preserve\">\n    <value>ODBC</value>\n  </data>\n  <data name=\"&gt;&gt;lDataProvider.ZOrder\" xml:space=\"preserve\">\n    <value>16</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bRemove.Name\" xml:space=\"preserve\">\n    <value>bRemove</value>\n  </data>\n  <data name=\"bExprConnect.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>416, 192</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <data name=\"&gt;&gt;chkSharedDataSource.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbConnection.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbConnection.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;tbDSName.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bRemove.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lPrompt.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bTestConnection.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 344</value>\n  </data>\n  <data name=\"&gt;&gt;lConnectionString.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbFilename.Name\" xml:space=\"preserve\">\n    <value>tbFilename</value>\n  </data>\n  <data name=\"bAdd.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>19</value>\n  </data>\n  <data name=\"&gt;&gt;ckbIntSecurity.Name\" xml:space=\"preserve\">\n    <value>ckbIntSecurity</value>\n  </data>\n  <data name=\"bTestConnection.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;tbFilename.ZOrder\" xml:space=\"preserve\">\n    <value>18</value>\n  </data>\n  <data name=\"lConnectionString.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 16</value>\n  </data>\n  <data name=\"&gt;&gt;lbDataSources.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"chkSharedDataSource.Text\" xml:space=\"preserve\">\n    <value>Shared Data Source Reference</value>\n  </data>\n  <data name=\"ckbIntSecurity.Text\" xml:space=\"preserve\">\n    <value>Use integrated security</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>22</value>\n  </data>\n  <data name=\"tbPrompt.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>424, 20</value>\n  </data>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"bGetFilename.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"bCancel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;bExprConnect.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataProvider.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bTestConnection.Text\" xml:space=\"preserve\">\n    <value>Test Connection</value>\n  </data>\n  <data name=\"&gt;&gt;tbPrompt.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;bRemove.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;bTestConnection.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bExprConnect.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"chkSharedDataSource.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>184, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bTestConnection.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbPrompt.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lPrompt.Text\" xml:space=\"preserve\">\n    <value>(Optional) Enter the prompt displayed when asking for database credentials </value>\n  </data>\n  <data name=\"ckbIntSecurity.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>144, 24</value>\n  </data>\n  <data name=\"tbPrompt.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 296</value>\n  </data>\n  <data name=\"&gt;&gt;chkSharedDataSource.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;tbDSName.Name\" xml:space=\"preserve\">\n    <value>tbDSName</value>\n  </data>\n  <data name=\"cbDataProvider.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>144, 21</value>\n  </data>\n  <data name=\"bRemove.Text\" xml:space=\"preserve\">\n    <value>Remove</value>\n  </data>\n  <data name=\"&gt;&gt;chkSharedDataSource.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 23</value>\n  </data>\n  <data name=\"&gt;&gt;ckbIntSecurity.ZOrder\" xml:space=\"preserve\">\n    <value>12</value>\n  </data>\n  <data name=\"lbDataSources.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"&gt;&gt;lDataProvider.Name\" xml:space=\"preserve\">\n    <value>lDataProvider</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Data Source Name</value>\n  </data>\n  <data name=\"&gt;&gt;tbConnection.ZOrder\" xml:space=\"preserve\">\n    <value>13</value>\n  </data>\n  <data name=\"chkSharedDataSource.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bAdd.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbDSName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 20</value>\n  </data>\n  <data name=\"lPrompt.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"cbDataProvider.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;tbDSName.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>368, 344</value>\n  </data>\n  <data name=\"bGetFilename.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>424, 112</value>\n  </data>\n  <data name=\"bAdd.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>144, 8</value>\n  </data>\n  <data name=\"bAdd.Text\" xml:space=\"preserve\">\n    <value>Add</value>\n  </data>\n  <data name=\"cbDataProvider.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 152</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>456, 374</value>\n  </data>\n  <data name=\"bTestConnection.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 23</value>\n  </data>\n  <data name=\"bRemove.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>144, 40</value>\n  </data>\n  <data name=\"&gt;&gt;ckbIntSecurity.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataProvider.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbDSName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bGetFilename.Name\" xml:space=\"preserve\">\n    <value>bGetFilename</value>\n  </data>\n  <data name=\"&gt;&gt;tbConnection.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbPrompt.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbFilename.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>192, 112</value>\n  </data>\n  <data name=\"bRemove.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 23</value>\n  </data>\n  <data name=\"bExprConnect.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"lPrompt.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 16</value>\n  </data>\n  <data name=\"cbDataProvider.Items\" xml:space=\"preserve\">\n    <value>SQL</value>\n  </data>\n  <data name=\"chkSharedDataSource.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 112</value>\n  </data>\n  <data name=\"&gt;&gt;lPrompt.ZOrder\" xml:space=\"preserve\">\n    <value>11</value>\n  </data>\n  <data name=\"ckbIntSecurity.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/DialogDataSources.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"lDataProvider.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>118, 23</value>\n  </data>\n  <data name=\"lDataProvider.Text\" xml:space=\"preserve\">\n    <value>Поставщик данных</value>\n  </data>\n  <data name=\"cbDataProvider.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>120, 149</value>\n  </data>\n  <data name=\"lConnectionString.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>118, 16</value>\n  </data>\n  <data name=\"lConnectionString.Text\" xml:space=\"preserve\">\n    <value>Строка подключения</value>\n  </data>\n  <data name=\"ckbIntSecurity.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>270, 142</value>\n  </data>\n  <data name=\"ckbIntSecurity.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>166, 34</value>\n  </data>\n  <data name=\"ckbIntSecurity.Text\" xml:space=\"preserve\">\n    <value>Использовать встроенную безопасность</value>\n  </data>\n  <data name=\"lPrompt.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 32</value>\n  </data>\n  <data name=\"lPrompt.Text\" xml:space=\"preserve\">\n    <value>(Необязательно) Введите подсказку, отображаемую при запросе учетных данных базы данных</value>\n  </data>\n  <data name=\"tbPrompt.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 307</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"bTestConnection.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>147, 23</value>\n  </data>\n  <data name=\"bTestConnection.Text\" xml:space=\"preserve\">\n    <value>Проверить соединение</value>\n  </data>\n  <data name=\"bRemove.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>66, 23</value>\n  </data>\n  <data name=\"bRemove.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"bAdd.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>66, 23</value>\n  </data>\n  <data name=\"bAdd.Text\" xml:space=\"preserve\">\n    <value>Добавить</value>\n  </data>\n  <data name=\"chkSharedDataSource.Text\" xml:space=\"preserve\">\n    <value>Общий источник данных</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>222, 8</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>158, 23</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Название источника данных</value>\n  </data>\n  <data name=\"tbDSName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>219, 24</value>\n  </data>\n  <data name=\"tbDSName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>213, 20</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Источники данных в отчёте</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DialogDatabase.Designer.cs",
    "content": "namespace Majorsilence.Reporting.RdlDesign\n{\n    public partial class DialogDatabase : System.Windows.Forms.Form\n\t{\n\t\t\t\t\n\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (components != null)\n                {\n                    components.Dispose();\n                }\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n        private void InitializeComponent()\n\t\t{\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DialogDatabase));\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.tvTablesColumns = new System.Windows.Forms.TreeView();\n            this.tbSQL = new System.Windows.Forms.TextBox();\n            this.bMove = new System.Windows.Forms.Button();\n            this.tcDialog = new System.Windows.Forms.TabControl();\n            this.ReportType = new System.Windows.Forms.TabPage();\n            this.groupBox2 = new System.Windows.Forms.GroupBox();\n            this.rbSchema2005 = new System.Windows.Forms.RadioButton();\n            this.rbSchema2003 = new System.Windows.Forms.RadioButton();\n            this.rbSchemaNo = new System.Windows.Forms.RadioButton();\n            this.cbOrientation = new System.Windows.Forms.ComboBox();\n            this.label6 = new System.Windows.Forms.Label();\n            this.tbReportAuthor = new System.Windows.Forms.TextBox();\n            this.tbReportDescription = new System.Windows.Forms.TextBox();\n            this.tbReportName = new System.Windows.Forms.TextBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.label1 = new System.Windows.Forms.Label();\n            this.groupBox1 = new System.Windows.Forms.GroupBox();\n            this.rbChart = new System.Windows.Forms.RadioButton();\n            this.rbMatrix = new System.Windows.Forms.RadioButton();\n            this.rbList = new System.Windows.Forms.RadioButton();\n            this.rbTable = new System.Windows.Forms.RadioButton();\n            this.DBConnection = new System.Windows.Forms.TabPage();\n            this.groupBoxSqlServer = new System.Windows.Forms.GroupBox();\n            this.textBoxSqlPassword = new System.Windows.Forms.TextBox();\n            this.label11 = new System.Windows.Forms.Label();\n            this.textBoxSqlUser = new System.Windows.Forms.TextBox();\n            this.label10 = new System.Windows.Forms.Label();\n            this.label8 = new System.Windows.Forms.Label();\n            this.buttonDatabaseSearch = new System.Windows.Forms.Button();\n            this.comboServerList = new System.Windows.Forms.ComboBox();\n            this.label9 = new System.Windows.Forms.Label();\n            this.buttonSearchSqlServers = new System.Windows.Forms.Button();\n            this.comboDatabaseList = new System.Windows.Forms.ComboBox();\n            this.buttonSqliteSelectDatabase = new System.Windows.Forms.Button();\n            this.bShared = new System.Windows.Forms.Button();\n            this.bTestConnection = new System.Windows.Forms.Button();\n            this.cbOdbcNames = new System.Windows.Forms.ComboBox();\n            this.lODBC = new System.Windows.Forms.Label();\n            this.lConnection = new System.Windows.Forms.Label();\n            this.cbConnectionTypes = new System.Windows.Forms.ComboBox();\n            this.label7 = new System.Windows.Forms.Label();\n            this.tbConnection = new System.Windows.Forms.TextBox();\n            this.ReportParameters = new System.Windows.Forms.TabPage();\n            this.DBSql = new System.Windows.Forms.TabPage();\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.TabularGroup = new System.Windows.Forms.TabPage();\n            this.clbSubtotal = new System.Windows.Forms.CheckedListBox();\n            this.ckbGrandTotal = new System.Windows.Forms.CheckBox();\n            this.label5 = new System.Windows.Forms.Label();\n            this.label4 = new System.Windows.Forms.Label();\n            this.cbColumnList = new System.Windows.Forms.ComboBox();\n            this.ReportSyntax = new System.Windows.Forms.TabPage();\n            this.tbReportSyntax = new System.Windows.Forms.TextBox();\n            this.ReportPreview = new System.Windows.Forms.TabPage();\n            this.rdlViewer1 = new Majorsilence.Reporting.RdlViewer.RdlViewer();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.rbEmpty = new System.Windows.Forms.RadioButton();\n            this.reportParameterCtl1 = new Majorsilence.Reporting.RdlDesign.ReportParameterCtl();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.tcDialog.SuspendLayout();\n            this.ReportType.SuspendLayout();\n            this.groupBox2.SuspendLayout();\n            this.groupBox1.SuspendLayout();\n            this.DBConnection.SuspendLayout();\n            this.groupBoxSqlServer.SuspendLayout();\n            this.ReportParameters.SuspendLayout();\n            this.DBSql.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.TabularGroup.SuspendLayout();\n            this.ReportSyntax.SuspendLayout();\n            this.ReportPreview.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            resources.ApplyResources(this.splitContainer1, \"splitContainer1\");\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.Controls.Add(this.tvTablesColumns);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tbSQL);\n            this.splitContainer1.Panel2.Controls.Add(this.bMove);\n            // \n            // tvTablesColumns\n            // \n            resources.ApplyResources(this.tvTablesColumns, \"tvTablesColumns\");\n            this.tvTablesColumns.FullRowSelect = true;\n            this.tvTablesColumns.Name = \"tvTablesColumns\";\n            this.tvTablesColumns.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.tvTablesColumns_BeforeExpand);\n            // \n            // tbSQL\n            // \n            this.tbSQL.AllowDrop = true;\n            resources.ApplyResources(this.tbSQL, \"tbSQL\");\n            this.tbSQL.Name = \"tbSQL\";\n            this.tbSQL.TextChanged += new System.EventHandler(this.tbSQL_TextChanged);\n            this.tbSQL.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tbSQL_KeyDown);\n            // \n            // bMove\n            // \n            resources.ApplyResources(this.bMove, \"bMove\");\n            this.bMove.Name = \"bMove\";\n            this.bMove.Click += new System.EventHandler(this.bMove_Click);\n            // \n            // tcDialog\n            // \n            this.tcDialog.Controls.Add(this.ReportType);\n            this.tcDialog.Controls.Add(this.DBConnection);\n            this.tcDialog.Controls.Add(this.ReportParameters);\n            this.tcDialog.Controls.Add(this.DBSql);\n            this.tcDialog.Controls.Add(this.TabularGroup);\n            this.tcDialog.Controls.Add(this.ReportSyntax);\n            this.tcDialog.Controls.Add(this.ReportPreview);\n            resources.ApplyResources(this.tcDialog, \"tcDialog\");\n            this.tcDialog.Name = \"tcDialog\";\n            this.tcDialog.SelectedIndex = 0;\n            this.tcDialog.SelectedIndexChanged += new System.EventHandler(this.tabControl1_SelectedIndexChanged);\n            // \n            // ReportType\n            // \n            this.ReportType.Controls.Add(this.groupBox2);\n            this.ReportType.Controls.Add(this.cbOrientation);\n            this.ReportType.Controls.Add(this.label6);\n            this.ReportType.Controls.Add(this.tbReportAuthor);\n            this.ReportType.Controls.Add(this.tbReportDescription);\n            this.ReportType.Controls.Add(this.tbReportName);\n            this.ReportType.Controls.Add(this.label3);\n            this.ReportType.Controls.Add(this.label2);\n            this.ReportType.Controls.Add(this.label1);\n            this.ReportType.Controls.Add(this.groupBox1);\n            resources.ApplyResources(this.ReportType, \"ReportType\");\n            this.ReportType.Name = \"ReportType\";\n            this.ReportType.Tag = \"type\";\n            // \n            // groupBox2\n            // \n            this.groupBox2.Controls.Add(this.rbSchema2005);\n            this.groupBox2.Controls.Add(this.rbSchema2003);\n            this.groupBox2.Controls.Add(this.rbSchemaNo);\n            resources.ApplyResources(this.groupBox2, \"groupBox2\");\n            this.groupBox2.Name = \"groupBox2\";\n            this.groupBox2.TabStop = false;\n            // \n            // rbSchema2005\n            // \n            this.rbSchema2005.Checked = true;\n            resources.ApplyResources(this.rbSchema2005, \"rbSchema2005\");\n            this.rbSchema2005.Name = \"rbSchema2005\";\n            this.rbSchema2005.TabStop = true;\n            // \n            // rbSchema2003\n            // \n            resources.ApplyResources(this.rbSchema2003, \"rbSchema2003\");\n            this.rbSchema2003.Name = \"rbSchema2003\";\n            // \n            // rbSchemaNo\n            // \n            resources.ApplyResources(this.rbSchemaNo, \"rbSchemaNo\");\n            this.rbSchemaNo.Name = \"rbSchemaNo\";\n            // \n            // cbOrientation\n            // \n            this.cbOrientation.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbOrientation.Items.AddRange(new object[] {\n            resources.GetString(\"cbOrientation.Items\"),\n            resources.GetString(\"cbOrientation.Items1\")});\n            resources.ApplyResources(this.cbOrientation, \"cbOrientation\");\n            this.cbOrientation.Name = \"cbOrientation\";\n            this.cbOrientation.SelectedIndexChanged += new System.EventHandler(this.emptyReportSyntax);\n            // \n            // label6\n            // \n            resources.ApplyResources(this.label6, \"label6\");\n            this.label6.Name = \"label6\";\n            // \n            // tbReportAuthor\n            // \n            resources.ApplyResources(this.tbReportAuthor, \"tbReportAuthor\");\n            this.tbReportAuthor.Name = \"tbReportAuthor\";\n            this.tbReportAuthor.TextChanged += new System.EventHandler(this.tbReportAuthor_TextChanged);\n            // \n            // tbReportDescription\n            // \n            resources.ApplyResources(this.tbReportDescription, \"tbReportDescription\");\n            this.tbReportDescription.Name = \"tbReportDescription\";\n            this.tbReportDescription.TextChanged += new System.EventHandler(this.tbReportDescription_TextChanged);\n            // \n            // tbReportName\n            // \n            resources.ApplyResources(this.tbReportName, \"tbReportName\");\n            this.tbReportName.Name = \"tbReportName\";\n            this.tbReportName.TextChanged += new System.EventHandler(this.tbReportName_TextChanged);\n            // \n            // label3\n            // \n            resources.ApplyResources(this.label3, \"label3\");\n            this.label3.Name = \"label3\";\n            // \n            // label2\n            // \n            resources.ApplyResources(this.label2, \"label2\");\n            this.label2.Name = \"label2\";\n            // \n            // label1\n            // \n            resources.ApplyResources(this.label1, \"label1\");\n            this.label1.Name = \"label1\";\n            // \n            // groupBox1\n            // \n            this.groupBox1.Controls.Add(this.rbEmpty);\n            this.groupBox1.Controls.Add(this.rbChart);\n            this.groupBox1.Controls.Add(this.rbMatrix);\n            this.groupBox1.Controls.Add(this.rbList);\n            this.groupBox1.Controls.Add(this.rbTable);\n            resources.ApplyResources(this.groupBox1, \"groupBox1\");\n            this.groupBox1.Name = \"groupBox1\";\n            this.groupBox1.TabStop = false;\n            // \n            // rbChart\n            // \n            resources.ApplyResources(this.rbChart, \"rbChart\");\n            this.rbChart.Name = \"rbChart\";\n            this.rbChart.CheckedChanged += new System.EventHandler(this.rbChart_CheckedChanged);\n            // \n            // rbMatrix\n            // \n            resources.ApplyResources(this.rbMatrix, \"rbMatrix\");\n            this.rbMatrix.Name = \"rbMatrix\";\n            this.rbMatrix.CheckedChanged += new System.EventHandler(this.rbMatrix_CheckedChanged);\n            // \n            // rbList\n            // \n            resources.ApplyResources(this.rbList, \"rbList\");\n            this.rbList.Name = \"rbList\";\n            this.rbList.CheckedChanged += new System.EventHandler(this.rbList_CheckedChanged);\n            // \n            // rbTable\n            // \n            this.rbTable.Checked = true;\n            resources.ApplyResources(this.rbTable, \"rbTable\");\n            this.rbTable.Name = \"rbTable\";\n            this.rbTable.TabStop = true;\n            this.rbTable.CheckedChanged += new System.EventHandler(this.rbTable_CheckedChanged);\n            // \n            // DBConnection\n            // \n            this.DBConnection.CausesValidation = false;\n            this.DBConnection.Controls.Add(this.groupBoxSqlServer);\n            this.DBConnection.Controls.Add(this.buttonSqliteSelectDatabase);\n            this.DBConnection.Controls.Add(this.bShared);\n            this.DBConnection.Controls.Add(this.bTestConnection);\n            this.DBConnection.Controls.Add(this.cbOdbcNames);\n            this.DBConnection.Controls.Add(this.lODBC);\n            this.DBConnection.Controls.Add(this.lConnection);\n            this.DBConnection.Controls.Add(this.cbConnectionTypes);\n            this.DBConnection.Controls.Add(this.label7);\n            this.DBConnection.Controls.Add(this.tbConnection);\n            resources.ApplyResources(this.DBConnection, \"DBConnection\");\n            this.DBConnection.Name = \"DBConnection\";\n            this.DBConnection.Tag = \"connect\";\n            this.DBConnection.Validating += new System.ComponentModel.CancelEventHandler(this.DBConnection_Validating);\n            // \n            // groupBoxSqlServer\n            // \n            this.groupBoxSqlServer.Controls.Add(this.textBoxSqlPassword);\n            this.groupBoxSqlServer.Controls.Add(this.label11);\n            this.groupBoxSqlServer.Controls.Add(this.textBoxSqlUser);\n            this.groupBoxSqlServer.Controls.Add(this.label10);\n            this.groupBoxSqlServer.Controls.Add(this.label8);\n            this.groupBoxSqlServer.Controls.Add(this.buttonDatabaseSearch);\n            this.groupBoxSqlServer.Controls.Add(this.comboServerList);\n            this.groupBoxSqlServer.Controls.Add(this.label9);\n            this.groupBoxSqlServer.Controls.Add(this.buttonSearchSqlServers);\n            this.groupBoxSqlServer.Controls.Add(this.comboDatabaseList);\n            resources.ApplyResources(this.groupBoxSqlServer, \"groupBoxSqlServer\");\n            this.groupBoxSqlServer.Name = \"groupBoxSqlServer\";\n            this.groupBoxSqlServer.TabStop = false;\n            // \n            // textBoxSqlPassword\n            // \n            resources.ApplyResources(this.textBoxSqlPassword, \"textBoxSqlPassword\");\n            this.textBoxSqlPassword.Name = \"textBoxSqlPassword\";\n            // \n            // label11\n            // \n            resources.ApplyResources(this.label11, \"label11\");\n            this.label11.Name = \"label11\";\n            // \n            // textBoxSqlUser\n            // \n            resources.ApplyResources(this.textBoxSqlUser, \"textBoxSqlUser\");\n            this.textBoxSqlUser.Name = \"textBoxSqlUser\";\n            // \n            // label10\n            // \n            resources.ApplyResources(this.label10, \"label10\");\n            this.label10.Name = \"label10\";\n            // \n            // label8\n            // \n            resources.ApplyResources(this.label8, \"label8\");\n            this.label8.Name = \"label8\";\n            // \n            // buttonDatabaseSearch\n            // \n            resources.ApplyResources(this.buttonDatabaseSearch, \"buttonDatabaseSearch\");\n            this.buttonDatabaseSearch.Name = \"buttonDatabaseSearch\";\n            this.buttonDatabaseSearch.UseVisualStyleBackColor = true;\n            this.buttonDatabaseSearch.Click += new System.EventHandler(this.buttonDatabaseSearch_Click);\n            // \n            // comboServerList\n            // \n            this.comboServerList.FormattingEnabled = true;\n            resources.ApplyResources(this.comboServerList, \"comboServerList\");\n            this.comboServerList.Name = \"comboServerList\";\n            // \n            // label9\n            // \n            resources.ApplyResources(this.label9, \"label9\");\n            this.label9.Name = \"label9\";\n            // \n            // buttonSearchSqlServers\n            // \n            resources.ApplyResources(this.buttonSearchSqlServers, \"buttonSearchSqlServers\");\n            this.buttonSearchSqlServers.Name = \"buttonSearchSqlServers\";\n            this.buttonSearchSqlServers.UseVisualStyleBackColor = true;\n            this.buttonSearchSqlServers.Click += new System.EventHandler(this.buttonSearchSqlServers_Click);\n            // \n            // comboDatabaseList\n            // \n            this.comboDatabaseList.FormattingEnabled = true;\n            resources.ApplyResources(this.comboDatabaseList, \"comboDatabaseList\");\n            this.comboDatabaseList.Name = \"comboDatabaseList\";\n            // \n            // buttonSqliteSelectDatabase\n            // \n            resources.ApplyResources(this.buttonSqliteSelectDatabase, \"buttonSqliteSelectDatabase\");\n            this.buttonSqliteSelectDatabase.Name = \"buttonSqliteSelectDatabase\";\n            this.buttonSqliteSelectDatabase.UseVisualStyleBackColor = true;\n            this.buttonSqliteSelectDatabase.Click += new System.EventHandler(this.buttonSqliteSelectDatabase_Click);\n            // \n            // bShared\n            // \n            resources.ApplyResources(this.bShared, \"bShared\");\n            this.bShared.Name = \"bShared\";\n            this.bShared.Click += new System.EventHandler(this.bShared_Click);\n            // \n            // bTestConnection\n            // \n            resources.ApplyResources(this.bTestConnection, \"bTestConnection\");\n            this.bTestConnection.Name = \"bTestConnection\";\n            this.bTestConnection.Click += new System.EventHandler(this.bTestConnection_Click);\n            // \n            // cbOdbcNames\n            // \n            this.cbOdbcNames.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            resources.ApplyResources(this.cbOdbcNames, \"cbOdbcNames\");\n            this.cbOdbcNames.Name = \"cbOdbcNames\";\n            this.cbOdbcNames.Sorted = true;\n            this.cbOdbcNames.SelectedIndexChanged += new System.EventHandler(this.cbOdbcNames_SelectedIndexChanged);\n            // \n            // lODBC\n            // \n            resources.ApplyResources(this.lODBC, \"lODBC\");\n            this.lODBC.Name = \"lODBC\";\n            // \n            // lConnection\n            // \n            resources.ApplyResources(this.lConnection, \"lConnection\");\n            this.lConnection.Name = \"lConnection\";\n            // \n            // cbConnectionTypes\n            // \n            this.cbConnectionTypes.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            resources.ApplyResources(this.cbConnectionTypes, \"cbConnectionTypes\");\n            this.cbConnectionTypes.Name = \"cbConnectionTypes\";\n            this.cbConnectionTypes.SelectedIndexChanged += new System.EventHandler(this.cbConnectionTypes_SelectedIndexChanged);\n            // \n            // label7\n            // \n            resources.ApplyResources(this.label7, \"label7\");\n            this.label7.Name = \"label7\";\n            // \n            // tbConnection\n            // \n            resources.ApplyResources(this.tbConnection, \"tbConnection\");\n            this.tbConnection.Name = \"tbConnection\";\n            this.tbConnection.TextChanged += new System.EventHandler(this.tbConnection_TextChanged);\n            // \n            // ReportParameters\n            // \n            this.ReportParameters.Controls.Add(this.reportParameterCtl1);\n            resources.ApplyResources(this.ReportParameters, \"ReportParameters\");\n            this.ReportParameters.Name = \"ReportParameters\";\n            this.ReportParameters.Tag = \"parameters\";\n            // \n            // DBSql\n            // \n            this.DBSql.Controls.Add(this.panel2);\n            resources.ApplyResources(this.DBSql, \"DBSql\");\n            this.DBSql.Name = \"DBSql\";\n            this.DBSql.Tag = \"sql\";\n            // \n            // panel2\n            // \n            this.panel2.Controls.Add(this.splitContainer1);\n            resources.ApplyResources(this.panel2, \"panel2\");\n            this.panel2.Name = \"panel2\";\n            // \n            // TabularGroup\n            // \n            this.TabularGroup.Controls.Add(this.clbSubtotal);\n            this.TabularGroup.Controls.Add(this.ckbGrandTotal);\n            this.TabularGroup.Controls.Add(this.label5);\n            this.TabularGroup.Controls.Add(this.label4);\n            this.TabularGroup.Controls.Add(this.cbColumnList);\n            resources.ApplyResources(this.TabularGroup, \"TabularGroup\");\n            this.TabularGroup.Name = \"TabularGroup\";\n            this.TabularGroup.Tag = \"group\";\n            // \n            // clbSubtotal\n            // \n            this.clbSubtotal.CheckOnClick = true;\n            resources.ApplyResources(this.clbSubtotal, \"clbSubtotal\");\n            this.clbSubtotal.Name = \"clbSubtotal\";\n            this.clbSubtotal.SelectedIndexChanged += new System.EventHandler(this.emptyReportSyntax);\n            // \n            // ckbGrandTotal\n            // \n            resources.ApplyResources(this.ckbGrandTotal, \"ckbGrandTotal\");\n            this.ckbGrandTotal.Name = \"ckbGrandTotal\";\n            this.ckbGrandTotal.CheckedChanged += new System.EventHandler(this.emptyReportSyntax);\n            // \n            // label5\n            // \n            resources.ApplyResources(this.label5, \"label5\");\n            this.label5.Name = \"label5\";\n            // \n            // label4\n            // \n            resources.ApplyResources(this.label4, \"label4\");\n            this.label4.Name = \"label4\";\n            // \n            // cbColumnList\n            // \n            this.cbColumnList.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            resources.ApplyResources(this.cbColumnList, \"cbColumnList\");\n            this.cbColumnList.Name = \"cbColumnList\";\n            this.cbColumnList.SelectedIndexChanged += new System.EventHandler(this.emptyReportSyntax);\n            // \n            // ReportSyntax\n            // \n            this.ReportSyntax.Controls.Add(this.tbReportSyntax);\n            resources.ApplyResources(this.ReportSyntax, \"ReportSyntax\");\n            this.ReportSyntax.Name = \"ReportSyntax\";\n            this.ReportSyntax.Tag = \"syntax\";\n            // \n            // tbReportSyntax\n            // \n            resources.ApplyResources(this.tbReportSyntax, \"tbReportSyntax\");\n            this.tbReportSyntax.Name = \"tbReportSyntax\";\n            this.tbReportSyntax.ReadOnly = true;\n            // \n            // ReportPreview\n            // \n            this.ReportPreview.Controls.Add(this.rdlViewer1);\n            resources.ApplyResources(this.ReportPreview, \"ReportPreview\");\n            this.ReportPreview.Name = \"ReportPreview\";\n            this.ReportPreview.Tag = \"preview\";\n            // \n            // rdlViewer1\n            // \n            this.rdlViewer1.Cursor = System.Windows.Forms.Cursors.Default;\n            resources.ApplyResources(this.rdlViewer1, \"rdlViewer1\");\n            this.rdlViewer1.dSubReportGetContent = null;\n            this.rdlViewer1.Folder = null;\n            this.rdlViewer1.HighlightAll = false;\n            this.rdlViewer1.HighlightAllColor = System.Drawing.Color.Fuchsia;\n            this.rdlViewer1.HighlightCaseSensitive = false;\n            this.rdlViewer1.HighlightItemColor = System.Drawing.Color.Aqua;\n            this.rdlViewer1.HighlightPageItem = null;\n            this.rdlViewer1.HighlightText = null;\n            this.rdlViewer1.Name = \"rdlViewer1\";\n            this.rdlViewer1.PageCurrent = 1;\n            this.rdlViewer1.Parameters = \"\";\n            this.rdlViewer1.ReportName = null;\n            this.rdlViewer1.ScrollMode = Majorsilence.Reporting.RdlViewer.ScrollModeEnum.Continuous;\n            this.rdlViewer1.SelectTool = false;\n            this.rdlViewer1.ShowFindPanel = false;\n            this.rdlViewer1.ShowParameterPanel = true;\n            this.rdlViewer1.ShowWaitDialog = true;\n            this.rdlViewer1.UseTrueMargins = true;\n            this.rdlViewer1.Zoom = 0.7061753F;\n            this.rdlViewer1.ZoomMode = Majorsilence.Reporting.RdlViewer.ZoomEnum.FitWidth;\n            // \n            // btnCancel\n            // \n            resources.ApplyResources(this.btnCancel, \"btnCancel\");\n            this.btnCancel.CausesValidation = false;\n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Name = \"btnCancel\";\n            // \n            // panel1\n            // \n            this.panel1.Controls.Add(this.btnOK);\n            this.panel1.Controls.Add(this.btnCancel);\n            resources.ApplyResources(this.panel1, \"panel1\");\n            this.panel1.Name = \"panel1\";\n            // \n            // btnOK\n            // \n            resources.ApplyResources(this.btnOK, \"btnOK\");\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Click += new System.EventHandler(this.btnOK_Click);\n            // \n            // rbEmpty\n            // \n            resources.ApplyResources(this.rbEmpty, \"rbEmpty\");\n            this.rbEmpty.Name = \"rbEmpty\";\n            this.rbEmpty.CheckedChanged += new System.EventHandler(this.rbEmpty_CheckedChanged);\n            // \n            // reportParameterCtl1\n            // \n            resources.ApplyResources(this.reportParameterCtl1, \"reportParameterCtl1\");\n            this.reportParameterCtl1.Name = \"reportParameterCtl1\";\n            // \n            // DialogDatabase\n            // \n            this.AcceptButton = this.btnOK;\n            resources.ApplyResources(this, \"$this\");\n            this.CancelButton = this.btnCancel;\n            this.Controls.Add(this.tcDialog);\n            this.Controls.Add(this.panel1);\n            this.MaximizeBox = false;\n            this.MinimizeBox = false;\n            this.Name = \"DialogDatabase\";\n            this.ShowInTaskbar = false;\n            this.Closed += new System.EventHandler(this.DialogDatabase_Closed);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            this.splitContainer1.Panel2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.tcDialog.ResumeLayout(false);\n            this.ReportType.ResumeLayout(false);\n            this.ReportType.PerformLayout();\n            this.groupBox2.ResumeLayout(false);\n            this.groupBox1.ResumeLayout(false);\n            this.DBConnection.ResumeLayout(false);\n            this.DBConnection.PerformLayout();\n            this.groupBoxSqlServer.ResumeLayout(false);\n            this.groupBoxSqlServer.PerformLayout();\n            this.ReportParameters.ResumeLayout(false);\n            this.DBSql.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.TabularGroup.ResumeLayout(false);\n            this.ReportSyntax.ResumeLayout(false);\n            this.ReportSyntax.PerformLayout();\n            this.ReportPreview.ResumeLayout(false);\n            this.panel1.ResumeLayout(false);\n            this.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\t\t\n\n\n        private System.Windows.Forms.Button btnCancel;\n        private System.Windows.Forms.Panel panel1;\n        private System.Windows.Forms.Button btnOK;\n        private System.Windows.Forms.TabPage DBConnection;\n        private System.Windows.Forms.TabPage DBSql;\n        private System.Windows.Forms.TabPage ReportType;\n        private System.ComponentModel.Container components = null;\n        private System.Windows.Forms.GroupBox groupBox1;\n        private System.Windows.Forms.RadioButton rbTable;\n        private System.Windows.Forms.RadioButton rbList;\n        private System.Windows.Forms.RadioButton rbMatrix;\n        private System.Windows.Forms.RadioButton rbChart;\n        private System.Windows.Forms.TextBox tbConnection;\n        private System.Windows.Forms.TabPage ReportSyntax;\n        private System.Windows.Forms.TextBox tbReportSyntax;\n        private System.Windows.Forms.TabPage ReportPreview;\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.Label label2;\n        private System.Windows.Forms.Label label3;\n        private System.Windows.Forms.TextBox tbReportName;\n        private System.Windows.Forms.TextBox tbReportDescription;\n        private System.Windows.Forms.TextBox tbReportAuthor;\n        private System.Windows.Forms.Panel panel2;\n        private Majorsilence.Reporting.RdlViewer.RdlViewer rdlViewer1;\n        private System.Windows.Forms.TabPage ReportParameters;\n        private System.Windows.Forms.TabControl tcDialog;\n        private System.Windows.Forms.TabPage TabularGroup;\n        private System.Windows.Forms.ComboBox cbColumnList;\n        private System.Windows.Forms.Label label4;\n        private System.Windows.Forms.Label label5;\n        private System.Windows.Forms.CheckBox ckbGrandTotal;\n        private System.Windows.Forms.CheckedListBox clbSubtotal;\n        private System.Windows.Forms.Label label6;\n        private System.Windows.Forms.ComboBox cbOrientation;\n        private System.Windows.Forms.Label label7;\n        private System.Windows.Forms.ComboBox cbConnectionTypes;\n        private System.Windows.Forms.Label lODBC;\n        private System.Windows.Forms.ComboBox cbOdbcNames;\n        private System.Windows.Forms.Button bTestConnection;\n        private System.Windows.Forms.Label lConnection;\n        private System.Windows.Forms.Button bShared;\n        private System.Windows.Forms.GroupBox groupBox2;\n        private System.Windows.Forms.RadioButton rbSchemaNo;\n        private System.Windows.Forms.RadioButton rbSchema2003;\n        private System.Windows.Forms.RadioButton rbSchema2005;\n        private System.Windows.Forms.SplitContainer splitContainer1;\n        private System.Windows.Forms.TreeView tvTablesColumns;\n        private System.Windows.Forms.Button bMove;\n        private System.Windows.Forms.TextBox tbSQL;\n        private System.Windows.Forms.Button buttonSqliteSelectDatabase;\n        internal System.Windows.Forms.Button buttonSearchSqlServers;\n        internal System.Windows.Forms.ComboBox comboServerList;\n        internal System.Windows.Forms.Label label8;\n        internal System.Windows.Forms.Button buttonDatabaseSearch;\n        internal System.Windows.Forms.Label label9;\n        internal System.Windows.Forms.ComboBox comboDatabaseList;\n        private System.Windows.Forms.GroupBox groupBoxSqlServer;\n        private System.Windows.Forms.Label label10;\n        private System.Windows.Forms.TextBox textBoxSqlPassword;\n        private System.Windows.Forms.Label label11;\n        private System.Windows.Forms.TextBox textBoxSqlUser;\n        private Majorsilence.Reporting.RdlDesign.ReportParameterCtl reportParameterCtl1;\n        private System.Windows.Forms.RadioButton rbEmpty;\n    }\n}\n"
  },
  {
    "path": "RdlDesign/DialogDatabase.cs",
    "content": "using System;\nusing System.Drawing;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing System.Text;\nusing System.Data;\nusing System.Data.OleDb;\nusing System.Data.Odbc;\nusing System.Data.SqlClient;\nusing System.IO;\nusing System.Globalization;\nusing System.Xml;\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlDesign.Resources;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// Summary description for DialogDatabase.\n    /// </summary>\n    public partial class DialogDatabase \n    {\n        RdlDesigner _rDesigner = null;\n        RdlUserControl _rUserControl = null;\n        static private readonly string SHARED_CONNECTION = \"Shared Data Source\";\n        string _StashConnection = null;\n\n        private List<SqlColumn> _ColumnList = null;\n        private string _TempFileName = null;\n        private string _ResultReport = \"nothing\";\n\n        private readonly string _Schema2003 =\n\"xmlns=\\\"http://schemas.microsoft.com/sqlserver/reporting/2003/10/reportdefinition\\\" xmlns:rd=\\\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\\\"\";\n        private readonly string _Schema2005 =\n\"xmlns=\\\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\\\" xmlns:rd=\\\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\\\"\";\n\n        private string _TemplateChart = \" some junk\";\n        private string _TemplateMatrix = \" some junk\";\n        private string _TemplateTable = @\"<?xml version='1.0' encoding='UTF-8'?>\n<Report |schema| > \n\t<Description>|description|</Description>\n\t<Author>|author|</Author>\n\t|orientation|\n\t<DataSources>\n\t\t<DataSource Name='DS1'>\n\t\t\t|connectionproperties|\n\t\t</DataSource>\n\t</DataSources>\n\t<Width>7.5in</Width>\n\t<TopMargin>.25in</TopMargin>\n\t<LeftMargin>.25in</LeftMargin>\n\t<RightMargin>.25in</RightMargin>\n\t<BottomMargin>.25in</BottomMargin>\n\t|reportparameters|\n\t<DataSets>\n\t\t<DataSet Name='Data'>\n\t\t\t<Query>\n\t\t\t\t<DataSourceName>DS1</DataSourceName>\n\t\t\t\t<CommandText>|sqltext|</CommandText>\n\t\t\t\t|queryparameters|\n\t\t\t</Query>\n\t\t\t<Fields>\n\t\t\t|sqlfields|\n\t\t\t</Fields>\n\t\t</DataSet>\n\t</DataSets>\n\t<PageHeader>\n\t\t<Height>.5in</Height>\n|ifdef reportname|\n\t\t<ReportItems>\n\t\t\t<Textbox><Top>.1in</Top><Left>.1in</Left><Width>6in</Width><Height>.25in</Height><Value>|reportnameasis|</Value><Style><FontSize>15pt</FontSize><FontWeight>Bold</FontWeight></Style></Textbox> \n\t\t</ReportItems>\n|endif|\n        <PrintOnFirstPage>true</PrintOnFirstPage>\n        <PrintOnLastPage>true</PrintOnLastPage>\n\t</PageHeader>\n\t<Body>\n\t\t<ReportItems>\n\t\t\t<Table>\n\t\t\t\t<DataSetName>Data</DataSetName>\n\t\t\t\t<NoRows>Query returned no rows!</NoRows>\n\t\t\t\t<Style><BorderStyle><Default>Solid</Default></BorderStyle></Style>\n\t\t\t\t<TableColumns>\n\t\t\t\t\t|tablecolumns|\n\t\t\t\t</TableColumns>\n\t\t\t\t<Header>\n\t\t\t\t\t<TableRows>\n\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t<Height>12pt</Height>\n\t\t\t\t\t\t\t<TableCells>|tableheaders|</TableCells>\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t</TableRows>\n\t\t\t\t\t<RepeatOnNewPage>true</RepeatOnNewPage>\n\t\t\t\t</Header>\n|ifdef grouping|\n\t\t\t\t<TableGroups>\n\t\t\t\t<TableGroup>\n\t\t\t\t<Header>\n\t\t\t\t\t<TableRows>\n\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t<Height>12pt</Height>\n\t\t\t\t\t\t\t<TableCells>\n\t\t\t\t\t\t\t\t<TableCell>\n\t\t\t\t\t\t\t\t\t<ColSpan>|columncount|</ColSpan>\n\t\t\t\t\t\t\t\t\t<ReportItems><Textbox><Value>=Fields.|groupbycolumn|.Value</Value><Style><PaddingLeft>2pt</PaddingLeft><BorderStyle><Default>Solid</Default></BorderStyle><FontWeight>Bold</FontWeight></Style></Textbox></ReportItems>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableCells>\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t</TableRows>\n\t\t\t\t\t<RepeatOnNewPage>true</RepeatOnNewPage>\n\t\t\t\t</Header>\n\t\t\t\t<Footer>\n\t\t\t\t\t<TableRows>\n\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t<Height>12pt</Height>\n\t\t\t\t\t\t\t<TableCells>|gtablefooters|</TableCells>\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t</TableRows>\n\t\t\t\t</Footer>\n\t\t<Grouping Name='|groupbycolumn|Group'><GroupExpressions><GroupExpression>=Fields!|groupbycolumn|.Value</GroupExpression></GroupExpressions></Grouping>\n\t\t</TableGroup>\n\t\t</TableGroups>\n|endif|\n\t\t\t\t<Details>\n\t\t\t\t\t<TableRows>\n\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t<Height>12pt</Height>\n\t\t\t\t\t\t\t<TableCells>|tablevalues|</TableCells>\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t</TableRows>\n\t\t\t\t</Details>\n|ifdef footers|\n\t\t\t\t<Footer>\n\t\t\t\t\t<TableRows>\n\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t<Height>12pt</Height>\n\t\t\t\t\t\t\t<TableCells>|tablefooters|</TableCells>\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t</TableRows>\n\t\t\t\t</Footer>\n|endif|\n\t\t\t</Table>\n\t\t</ReportItems>\n\t\t<Height>|bodyheight|</Height>\n\t</Body>\n\t<PageFooter>\n\t\t<Height>14pt</Height>\n\t\t<ReportItems>\n\t\t\t<Textbox><Top>1pt</Top><Left>10pt</Left><Height>12pt</Height><Width>3in</Width>\n\t\t\t\t<Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n\t\t\t\t<Style><FontSize>10pt</FontSize><FontWeight>Normal</FontWeight></Style>\n\t\t\t</Textbox> \t\n\t\t</ReportItems>\n        <PrintOnFirstPage>true</PrintOnFirstPage>\n        <PrintOnLastPage>true</PrintOnLastPage>\n\t</PageFooter>\n</Report>\";\n\n        private string _TemplateList = @\"<?xml version='1.0' encoding='UTF-8'?>\n<Report |schema| > \n\t<Description>|description|</Description>\n\t<Author>|author|</Author>\n\t|orientation|\n\t<DataSources>\n\t\t<DataSource Name='DS1'>\n\t\t\t|connectionproperties|\n\t\t</DataSource>\n\t</DataSources>\n\t<Width>7.5in</Width>\n\t<TopMargin>.25in</TopMargin>\n\t<LeftMargin>.25in</LeftMargin>\n\t<RightMargin>.25in</RightMargin>\n\t<BottomMargin>.25in</BottomMargin>\n\t|reportparameters|\n\t<DataSets>\n\t\t<DataSet Name='Data'>\n\t\t\t<Query>\n\t\t\t\t<DataSourceName>DS1</DataSourceName>\n\t\t\t\t<CommandText>|sqltext|</CommandText>\n\t\t\t\t|queryparameters|\n\t\t\t</Query>\n\t\t\t<Fields>\n\t\t\t\t|sqlfields|\n\t\t\t</Fields>\n\t\t</DataSet>\n\t</DataSets>\n\t<PageHeader>\n\t\t<Height>.5in</Height>\n\t\t<ReportItems>\n|ifdef reportname|\n\t\t\t<Textbox><Top>.02in</Top><Left>.1in</Left><Width>6in</Width><Height>.25in</Height><Value>|reportname|</Value><Style><FontSize>15pt</FontSize><FontWeight>Bold</FontWeight></Style></Textbox> \n|endif|\n\t\t\t|listheaders|\n\t\t</ReportItems>\n        <PrintOnFirstPage>true</PrintOnFirstPage>\n        <PrintOnLastPage>true</PrintOnLastPage>\n\t</PageHeader>\n\t<Body><Height>25pt</Height>\n\t\t<ReportItems>\n\t\t\t<List>\n\t\t\t\t<DataSetName>Data</DataSetName>\n\t\t\t\t<Height>24pt</Height>\n\t\t\t\t<NoRows>Query returned no rows!</NoRows>\n\t\t\t\t<ReportItems>\n\t\t\t\t\t|listvalues|\n\t\t\t\t</ReportItems>\n\t\t\t\t<Width>|listwidth|</Width>\n\t\t\t</List>\n\t\t</ReportItems>\n\t\t</Body>\n\t<PageFooter>\n\t\t<Height>14pt</Height>\n\t\t<ReportItems>\n\t\t\t<Textbox><Top>1pt</Top><Left>10pt</Left><Height>12pt</Height><Width>3in</Width>\n\t\t\t\t<Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n\t\t\t\t<Style><FontSize>10pt</FontSize><FontWeight>Normal</FontWeight></Style>\n\t\t\t</Textbox> \t\n\t\t</ReportItems>\n        <PrintOnFirstPage>true</PrintOnFirstPage>\n        <PrintOnLastPage>true</PrintOnLastPage>\n\t</PageFooter>\n\t\t</Report>\";\n\n        private string _TemplateEmpty = @\"<?xml version='1.0' encoding='UTF-8'?>\n<Report |schema| > \n\t<Description>|description|</Description>\n\t<Author>|author|</Author>\n\t|orientation|\n\t<Width>7.5in</Width>\n\t<TopMargin>.25in</TopMargin>\n\t<LeftMargin>.25in</LeftMargin>\n\t<RightMargin>.25in</RightMargin>\n\t<BottomMargin>.25in</BottomMargin>\n\t|reportparameters|\n\t<PageHeader>\n\t\t<Height>.5in</Height>\n        <PrintOnFirstPage>true</PrintOnFirstPage>\n        <PrintOnLastPage>true</PrintOnLastPage>\n\t</PageHeader>\n\t<Body><Height>25pt</Height></Body>\n\t<PageFooter>\n\t\t<Height>14pt</Height>\n\t\t<ReportItems>\n\t\t\t<Textbox><Top>1pt</Top><Left>10pt</Left><Height>12pt</Height><Width>3in</Width>\n\t\t\t\t<Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n\t\t\t\t<Style><FontSize>10pt</FontSize><FontWeight>Normal</FontWeight></Style>\n\t\t\t</Textbox> \t\n\t\t</ReportItems>\n        <PrintOnFirstPage>true</PrintOnFirstPage>\n        <PrintOnLastPage>true</PrintOnLastPage>\n\t</PageFooter>\n\t\t</Report>\";\n\n\n        public DialogDatabase(RdlDesigner rDesigner)\n        {\n            _rDesigner = rDesigner;\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            string[] items = RdlEngineConfig.GetProviders();\n            Array.Sort(items);\n            cbConnectionTypes.Items.Add(SHARED_CONNECTION);\n            cbConnectionTypes.Items.AddRange(items);\n            cbConnectionTypes.SelectedIndex = 1;\n            cbOrientation.SelectedIndex = 0;\n        }\n\n\n        public DialogDatabase(RdlUserControl rDesigner)\n        {\n            _rUserControl = rDesigner;\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            string[] items = RdlEngineConfig.GetProviders();\n            cbConnectionTypes.Items.Add(SHARED_CONNECTION);\n            cbConnectionTypes.Items.AddRange(items);\n            cbConnectionTypes.SelectedIndex = 1;\n            cbOrientation.SelectedIndex = 0;\n        }\n\n        public enum ConnectionType\n        {\n            MYSQL,\n            MSSQL,\n            SQLITE,\n            POSTGRESQL,\n            XML,\n            WEBSERVICE\n        }\n\n        /// <summary>\n        /// Pre set a connection string.  This is useful when you need to create\n        /// a new report from a program other then RdlDesigner. \n        /// </summary>\n        /// <param name=\"connectionString\">A full and correct database connection string</param>\n        /// <param name=\"hideConnectionTab\">If true this will hide the connection string.  This is useful\n        /// when you do not want the users to need to know this information.</param>\n        /// <param name=\"ct\">The database connection type.</param>\n        public void SetConnection(string connectionString, bool hideConnectionTab, ConnectionType ct)\n        {\n\n            if (ct == ConnectionType.MSSQL)\n            {\n                cbConnectionTypes.SelectedItem = \"SQL\";\n            }\n            else if (ct == ConnectionType.MYSQL)\n            {\n                cbConnectionTypes.SelectedItem = \"MySQL.NET\";\n            }\n            else if (ct == ConnectionType.POSTGRESQL)\n            {\n                cbConnectionTypes.SelectedItem = \"PostgreSQL\";\n            }\n            else if (ct == ConnectionType.SQLITE)\n            {\n                cbConnectionTypes.SelectedItem = \"SQLite\";\n            }\n            else if (ct == ConnectionType.WEBSERVICE)\n            {\n                cbConnectionTypes.SelectedItem = \"WebService\";\n            }\n            else if (ct == ConnectionType.XML)\n            {\n                cbConnectionTypes.SelectedItem = \"XML\";\n            }\n            else\n            {\n                throw new Exception(\"You should not have reached this far in the SetConnection function.\");\n            }\n\n            tbConnection.Text = connectionString;\n\n            if (hideConnectionTab == true)\n            {\n                tcDialog.TabPages.Remove(tcDialog.TabPages[\"DBConnection\"]);\n            }\n\n        }\n\n        public string ResultReport\n        {\n            get { return _ResultReport; }\n        }\n\n        private void btnOK_Click(object sender, System.EventArgs e)\n        {\n            if (!DoReportSyntax(false))\n                return;\n            DialogResult = DialogResult.OK;\n            _ResultReport = tbReportSyntax.Text;\n            this.Close();\n        }\n\n        private async void tabControl1_SelectedIndexChanged(object sender, System.EventArgs e)\n        {\n            TabControl tc = (TabControl)sender;\n            string tag = (string)tc.TabPages[tc.SelectedIndex].Tag;\n            switch (tag)\n            {\n                case \"type\":\t// nothing to do here\n                    break;\n                case \"connect\":\t// nothing to do here\n                    break;\n                case \"sql\":\t\t// obtain table and column information\n                    DoSqlSchema();\n                    break;\n                case \"group\":\t// obtain group by information using connection & sql\n                    DoGrouping();\n                    break;\n                case \"syntax\":\t// obtain report using connection, sql, \n                    DoReportSyntax(false);\n                    break;\n                case \"preview\":\t// run report using generated report syntax\n                    await DoReportPreview();\n                    break;\n                default:\n                    break;\n            }\n        }\n\n        // Fill out tvTablesColumns\n        private void DoSqlSchema()\n        {\n            // TODO be more efficient and remember schema info;\n            //   need to mark changes to connections\n            if (tvTablesColumns.Nodes.Count > 0)\n                return;\n\n            // suppress redraw until tree view is complete\n            tvTablesColumns.BeginUpdate();\n\n            // Get the schema information\n            List<SqlSchemaInfo> si = DesignerUtility.GetSchemaInfo(GetDataProvider(), GetDataConnection());\n            TreeNode ndRoot = new TreeNode(\"Tables\");\n            tvTablesColumns.Nodes.Add(ndRoot);\n            bool bView = false;\n            foreach (SqlSchemaInfo ssi in si)\n            {\n                if (!bView && ssi.Type == \"VIEW\")\n                {\t// Switch over to views\n                    ndRoot = new TreeNode(\"Views\");\n                    tvTablesColumns.Nodes.Add(ndRoot);\n                    bView = true;\n                }\n\n                // Add the node to the tree\n                TreeNode aRoot = new TreeNode(ssi.Name);\n                ndRoot.Nodes.Add(aRoot);\n                aRoot.Nodes.Add(\"\");\n            }\n\n            // Now do parameters\n            //if (lbParameters.Items.Count > 0)\n            //{\n            //    ndRoot = new TreeNode(\"Parameters\");\n            //    tvTablesColumns.Nodes.Add(ndRoot);\n            //    foreach (ReportParm rp in lbParameters.Items)\n            //    {\n            //        string paramName;\n\n            //        // force the name to start with @\n            //        if (rp.Name[0] == '@')\n            //            paramName = rp.Name;\n            //        else\n            //            paramName = \"@\" + rp.Name;\n\n            //        // Add the node to the tree\n            //        TreeNode aRoot = new TreeNode(paramName);\n            //        ndRoot.Nodes.Add(aRoot);\n            //    }\n            //}\n\n            tvTablesColumns.EndUpdate();\n        }\n\n        private void DoGrouping()\n        {\n            if (cbColumnList.Items.Count > 0)\t\t// We already have the columns?\n                return;\n            if (!rbEmpty.Checked)\n            {\n                if (_ColumnList == null)\n                    _ColumnList = DesignerUtility.GetSqlColumns(GetDataProvider(), GetDataConnection(), tbSQL.Text, reportParameterCtl1.lbParameters.Items);\n\n                foreach (SqlColumn sq in _ColumnList)\n                {\n                    cbColumnList.Items.Add(sq);\n                    clbSubtotal.Items.Add(sq);\n                }\n\n                SqlColumn sqc = new SqlColumn();\n                sqc.Name = \"\";\n                cbColumnList.Items.Add(sqc);\n            }\n            return;\n        }\n\n        private bool DoReportSyntax(bool UseFullSharedDSName)\n        {\n            string template;\n\n            if (rbList.Checked)\n                template = _TemplateList;\n            else if (rbTable.Checked)\n                template = _TemplateTable;\n            else if (rbMatrix.Checked)\n                template = _TemplateMatrix;\n            else if (rbChart.Checked)\n                template = _TemplateChart;\n            else if (rbEmpty.Checked)\n                template = _TemplateEmpty;\n            else\n                template = _TemplateTable;\t// default to table- should never reach\n\n            if (!rbEmpty.Checked)\n            {\n                if (_ColumnList == null)\n                    _ColumnList = DesignerUtility.GetSqlColumns(GetDataProvider(), GetDataConnection(), tbSQL.Text, reportParameterCtl1.lbParameters.Items);\n\n                if (_ColumnList.Count == 0)     // can only happen by an error\n                    return false;\n            }\n\n            string[] parts = template.Split('|');\n            StringBuilder sb = new StringBuilder(template.Length);\n            decimal left = 0m;\n            decimal width;\n            decimal bodyHeight = 0;\n            string name;\n            int skip = 0;\t\t\t\t\t// skip is used to allow nesting of ifdef \n            string args;\n            string canGrow;\n            string align;\n            // handle the group by column\n            string gbcolumn;\n            if (this.cbColumnList.Text.Length > 0)\n                gbcolumn = GetFieldName(this.cbColumnList.Text);\n            else\n                gbcolumn = null;\n\n            CultureInfo cinfo = new CultureInfo(\"\", false);\n\n            foreach (string p in parts)\n            {\n                // Handle conditional special\n                int length = 5;\n                if (p.Length < 5)\n                {\n                    length = p.Length;\n                }\n                if (p.Substring(0, length) == \"ifdef\")\n                {\n                    args = p.Substring(6);\n                    switch (args)\n                    {\n                        case \"reportname\":\n                            if (tbReportName.Text.Length == 0)\n                                skip++;\n                            break;\n                        case \"description\":\n                            if (tbReportDescription.Text.Length == 0)\n                                skip++;\n                            break;\n                        case \"author\":\n                            if (tbReportAuthor.Text.Length == 0)\n                                skip++;\n                            break;\n                        case \"grouping\":\n                            if (gbcolumn == null)\n                                skip++;\n                            break;\n                        case \"footers\":\n                            if (!ckbGrandTotal.Checked)\n                                skip++;\n                            else if (clbSubtotal.CheckedItems.Count <= 0)\n                                skip++;\n                            break;\n                        default:\n                            throw new Exception(String.Format(Strings.DialogDatabase_Error_UnknownIfdef, args));\n                    }\n                    continue;\n                }\n\n                // if skipping lines (due to ifdef) then go to next endif\n                if (skip > 0 && p != \"endif\")\n                    continue;\n\n                switch (p)\n                {\n                    case \"endif\":\n                        if (skip > 0)\n                            skip--;\n                        break;\n                    case \"schema\":\n                        if (this.rbSchema2003.Checked)\n                            sb.Append(_Schema2003);\n                        else if (this.rbSchema2005.Checked)\n                            sb.Append(_Schema2005);\n                        break;\n                    case \"reportname\":\n                        sb.Append(tbReportName.Text.Replace('\\'', '_'));\n                        break;\n                    case \"reportnameasis\":\n                        sb.Append(tbReportName.Text);\n                        break;\n                    case \"description\":\n                        sb.Append(tbReportDescription.Text);\n                        break;\n                    case \"author\":\n                        sb.Append(tbReportAuthor.Text);\n                        break;\n                    case \"connectionproperties\":\n                        if (this.cbConnectionTypes.Text == SHARED_CONNECTION)\n                        {\n                            string file = this.tbConnection.Text;\n                            if (!UseFullSharedDSName)\n                                file = Path.GetFileNameWithoutExtension(file);      // when we save report we use qualified name\n                            sb.AppendFormat(\"<DataSourceReference>{0}</DataSourceReference>\", file);\n                        }\n                        else\n                            sb.AppendFormat(\"<ConnectionProperties><DataProvider>{0}</DataProvider><ConnectString>{1}</ConnectString></ConnectionProperties>\",\n                                GetDataProvider(), GetDataConnection());\n                        break;\n                    case \"dataprovider\":\n                        sb.Append(GetDataProvider());\n                        break;\n                    case \"connectstring\":\n                        sb.Append(tbConnection.Text);\n                        break;\n                    case \"columncount\":\n                        sb.Append(_ColumnList.Count);\n                        break;\n                    case \"orientation\":\n                        if (this.cbOrientation.SelectedIndex == 0)\n                        {\t// Portrait is first in the list\n                            sb.Append(\"<PageHeight>11in</PageHeight><PageWidth>8.5in</PageWidth>\");\n                        }\n                        else\n                        {\n                            sb.Append(\"<PageHeight>8.5in</PageHeight><PageWidth>11in</PageWidth>\");\n                        }\n                        break;\n                    case \"groupbycolumn\":\n                        sb.Append(gbcolumn);\n                        break;\n                    case \"reportparameters\":\n                        DoReportSyntaxParameters(cinfo, sb);\n                        break;\n                    case \"queryparameters\":\n                        DoReportSyntaxQParameters(cinfo, sb, tbSQL.Text);\n                        break;\n                    case \"sqltext\":\n                        sb.Append(tbSQL.Text.Replace(\"<\", \"&lt;\"));\n                        break;\n                    case \"sqlfields\":\n                        foreach (SqlColumn sq in _ColumnList)\n                        {\n                            name = GetFieldName(sq.Name);\n                            string type = sq.DataType.FullName;\n                            if (this.rbSchemaNo.Checked)\n                                sb.AppendFormat(cinfo, \"<Field Name='{0}'><DataField>{1}</DataField><TypeName>{2}</TypeName></Field>\", name, sq.Name, type);\n                            else\n                                sb.AppendFormat(cinfo, \"<Field Name='{0}'><DataField>{1}</DataField><rd:TypeName>{2}</rd:TypeName></Field>\", name, sq.Name, type);\n                        }\n                        break;\n                    case \"listheaders\":\n                        left = .0m;\n                        foreach (SqlColumn sq in _ColumnList)\n                        {\n                            name = sq.Name;\n                            width = name.Length / 8m;\n                            if (width < 1)\n                                width = 1;\n                            sb.AppendFormat(cinfo, @\"\n\t\t<Textbox><Top>.3in</Top><Left>{0}in</Left><Width>{1}in</Width><Height>.2in</Height><Value>{2}</Value>\n\t\t\t<Style><FontWeight>Bold</FontWeight><BorderStyle><Bottom>Solid</Bottom></BorderStyle>\n\t\t\t\t<BorderWidth><Bottom>3pt</Bottom></BorderWidth></Style>\n\t\t</Textbox>\",\n                                left,\n                                width,\n                                name);\n                            left += width;\n                        }\n                        break;\n                    case \"listvalues\":\n                        left = .0m;\n                        foreach (SqlColumn sq in _ColumnList)\n                        {\n                            name = GetFieldName(sq.Name);\n                            DoAlignAndCanGrow(sq.DataType, out canGrow, out align);\n                            width = name.Length / 8m;\n                            if (width < 1)\n                                width = 1;\n                            sb.AppendFormat(cinfo, @\"\n\t\t<Textbox Name='{2}'><Top>.1in</Top><Left>{0}in</Left><Width>{1}in</Width><Height>.25in</Height><Value>=Fields!{2}.Value</Value><CanGrow>{3}</CanGrow><Style>{4}</Style></Textbox>\",\n                                left, width, name, canGrow, align);\n                            left += width;\n                        }\n                        bodyHeight = .4m;\n                        break;\n                    case \"listwidth\":\t\t// in template list width must follow something that sets left\n                        sb.AppendFormat(cinfo, \"{0}in\", left);\n                        break;\n                    case \"tableheaders\":\n                        // the group by column is always the first one in the table\n                        if (gbcolumn != null)\n                        {\n                            bodyHeight += 12m;\n                            sb.AppendFormat(cinfo, @\"\n\t\t\t\t\t\t\t<TableCell>\n\t\t\t\t\t\t\t\t<ReportItems><Textbox><Value>{0}</Value><Style><TextAlign>Center</TextAlign><BorderStyle><Default>Solid</Default></BorderStyle><FontWeight>Bold</FontWeight></Style></Textbox></ReportItems>\n\t\t\t\t\t\t\t</TableCell>\",\n                                this.cbColumnList.Text);\n                        }\n                        bodyHeight += 12m;\n                        foreach (SqlColumn sq in _ColumnList)\n                        {\n                            name = sq.Name;\n                            if (name == this.cbColumnList.Text)\n                                continue;\n                            sb.AppendFormat(cinfo, @\"\n\t\t\t\t\t\t\t<TableCell>\n\t\t\t\t\t\t\t\t<ReportItems><Textbox><Value>{0}</Value><Style><TextAlign>Center</TextAlign><BorderStyle><Default>Solid</Default></BorderStyle><FontWeight>Bold</FontWeight></Style></Textbox></ReportItems>\n\t\t\t\t\t\t\t</TableCell>\",\n                                name);\n                        }\n                        break;\n                    case \"tablecolumns\":\n                        if (gbcolumn != null)\n                        {\n                            bodyHeight += 12m;\n                            width = gbcolumn.Length / 8m;\t\t// TODO should really use data value\n                            if (width < 1)\n                                width = 1;\n                            sb.AppendFormat(cinfo, @\"<TableColumn><Width>{0}in</Width></TableColumn>\", width);\n                        }\n                        bodyHeight += 12m;\n                        foreach (SqlColumn sq in _ColumnList)\n                        {\n                            name = GetFieldName(sq.Name);\n                            if (name == gbcolumn)\n                                continue;\n                            width = name.Length / 8m;\t\t// TODO should really use data value\n                            if (width < 1)\n                                width = 1;\n                            sb.AppendFormat(cinfo, @\"<TableColumn><Width>{0}in</Width></TableColumn>\", width);\n                        }\n                        break;\n                    case \"tablevalues\":\n                        bodyHeight += 12m;\n                        if (gbcolumn != null)\n                        {\n                            sb.Append(@\"<TableCell>\n\t\t\t\t\t\t\t\t<ReportItems><Textbox><Value></Value><Style><BorderStyle><Default>None</Default><Left>Solid</Left></BorderStyle></Style></Textbox></ReportItems>\n\t\t\t\t\t\t\t</TableCell>\");\n                        }\n                        foreach (SqlColumn sq in _ColumnList)\n                        {\n                            name = GetFieldName(sq.Name);\n                            if (name == gbcolumn)\n                                continue;\n                            DoAlignAndCanGrow(sq.DataType, out canGrow, out align);\n                            sb.AppendFormat(cinfo, @\"\n\t\t\t\t\t\t\t<TableCell>\n\t\t\t\t\t\t\t\t<ReportItems><Textbox Name='{0}'><Value>=Fields!{0}.Value</Value><CanGrow>{1}</CanGrow><Style><BorderStyle><Default>Solid</Default></BorderStyle>{2}</Style></Textbox></ReportItems>\n\t\t\t\t\t\t\t</TableCell>\",\n                                name, canGrow, align);\n                        }\n                        break;\n                    case \"gtablefooters\":\n                    case \"tablefooters\":\n                        bodyHeight += 12m;\n                        canGrow = \"false\";\n                        align = \"\";\n                        string nameprefix = p == \"gtablefooters\" ? \"gf\" : \"tf\";\n                        if (gbcolumn != null)\t// handle group by column first\n                        {\n                            int i = clbSubtotal.FindStringExact(this.cbColumnList.Text);\n                            SqlColumn sq = i < 0 ? null : (SqlColumn)clbSubtotal.Items[i];\n                            if (i >= 0 && clbSubtotal.GetItemChecked(i))\n                            {\n                                string funct = DesignerUtility.IsNumeric(sq.DataType) ? \"Sum\" : \"Count\";\n\n                                DoAlignAndCanGrow(((object)0).GetType(), out canGrow, out align);\n                                sb.AppendFormat(cinfo, @\"\n\t\t\t\t\t\t\t<TableCell>\n\t\t\t\t\t\t\t\t<ReportItems><Textbox Name='{4}_{0}'><Value>={1}(Fields!{0}.Value)</Value><CanGrow>{2}</CanGrow><Style><BorderStyle><Default>Solid</Default></BorderStyle>{3}</Style></Textbox></ReportItems>\n\t\t\t\t\t\t\t</TableCell>\",\n                                    gbcolumn, funct, canGrow, align, nameprefix);\n                            }\n                            else\n                            {\n                                sb.AppendFormat(cinfo, \"<TableCell><ReportItems><Textbox><Value></Value><Style><BorderStyle><Default>Solid</Default></BorderStyle></Style></Textbox></ReportItems></TableCell>\");\n                            }\n                        }\n                        for (int i = 0; i < this.clbSubtotal.Items.Count; i++)\n                        {\n                            SqlColumn sq = (SqlColumn)clbSubtotal.Items[i];\n                            name = GetFieldName(sq.Name);\n                            if (name == gbcolumn)\n                                continue;\n                            if (clbSubtotal.GetItemChecked(i))\n                            {\n                                string funct = DesignerUtility.IsNumeric(sq.DataType) ? \"Sum\" : \"Count\";\n\n                                DoAlignAndCanGrow(((object)0).GetType(), out canGrow, out align);\n                                sb.AppendFormat(cinfo, @\"\n\t\t\t\t\t\t\t<TableCell>\n\t\t\t\t\t\t\t\t<ReportItems><Textbox Name='{4}_{0}'><Value>={1}(Fields!{0}.Value)</Value><CanGrow>{2}</CanGrow><Style><BorderStyle><Default>Solid</Default></BorderStyle>{3}</Style></Textbox></ReportItems>\n\t\t\t\t\t\t\t</TableCell>\",\n                                    name, funct, canGrow, align, nameprefix);\n                            }\n                            else\n                            {\n                                sb.AppendFormat(cinfo, \"<TableCell><ReportItems><Textbox><Value></Value><Style><BorderStyle><Default>Solid</Default></BorderStyle></Style></Textbox></ReportItems></TableCell>\");\n                            }\n                        }\n                        break;\n                    case \"bodyheight\":\t// Note: this must follow the table definition\n                        sb.AppendFormat(cinfo, \"{0}pt\", bodyHeight);\n                        break;\n                    default:\n                        sb.Append(p);\n                        break;\n                }\n            }\n\n            try\n            {\n                tbReportSyntax.Text = DesignerUtility.FormatXml(sb.ToString());\n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show(ex.Message, Strings.DialogDatabase_Show_InternalError);\n                tbReportSyntax.Text = sb.ToString();\n            }\n            return true;\n        }\n\n        private string GetFieldName(string sqlName)\n        {\n            StringBuilder sb = new StringBuilder();\n            foreach (char c in sqlName)\n            {\n                if (Char.IsLetterOrDigit(c) || c == '_')\n                    sb.Append(c);\n                else\n                    sb.Append('_');\n            }\n            return sb.ToString();\n        }\n\n        private void DoAlignAndCanGrow(Type t, out string canGrow, out string align)\n        {\n            string st = t.ToString();\n            switch (st)\n            {\n                case \"System.String\":\n                    canGrow = \"true\";\n                    align = \"<PaddingLeft>2pt</PaddingLeft>\";\n                    break;\n                case \"System.Int16\":\n                case \"System.Int32\":\n                case \"System.Single\":\n                case \"System.Double\":\n                case \"System.Decimal\":\n                    canGrow = \"false\";\n                    align = \"<PaddingRight>2pt</PaddingRight><TextAlign>Right</TextAlign>\";\n                    break;\n                default:\n                    canGrow = \"false\";\n                    align = \"<PaddingLeft>2pt</PaddingLeft>\";\n                    break;\n            }\n            return;\n        }\n\n\n        private void DoReportSyntaxParameters(CultureInfo cinfo, StringBuilder sb)\n        {\n            if (reportParameterCtl1.lbParameters.Items.Count <= 0)\n                return;\n\n            sb.Append(\"<ReportParameters>\");\n            foreach (ReportParm rp in reportParameterCtl1.lbParameters.Items)\n            {\n                sb.AppendFormat(cinfo, \"<ReportParameter Name=\\\"{0}\\\">\", rp.Name);\n                sb.AppendFormat(cinfo, \"<DataType>{0}</DataType>\", rp.DataType);\n                sb.AppendFormat(cinfo, \"<Nullable>{0}</Nullable>\", rp.AllowNull.ToString());\n                if (rp.DefaultValue != null && rp.DefaultValue.Count > 0)\n                {\n                    sb.AppendFormat(cinfo, \"<DefaultValue><Values>\");\n                    foreach (string dv in rp.DefaultValue)\n                    {\n                        sb.AppendFormat(cinfo, \"<Value>{0}</Value>\", XmlUtil.XmlAnsi(dv));\n                    }\n                    sb.AppendFormat(cinfo, \"</Values></DefaultValue>\");\n                }\n                sb.AppendFormat(cinfo, \"<AllowBlank>{0}</AllowBlank>\", rp.AllowBlank);\n                if (rp.Prompt != null && rp.Prompt.Length > 0)\n                    sb.AppendFormat(cinfo, \"<Prompt>{0}</Prompt>\", rp.Prompt);\n                if (rp.ValidValues != null && rp.ValidValues.Count > 0)\n                {\n                    sb.Append(\"<ValidValues><ParameterValues>\");\n                    foreach (ParameterValueItem pvi in rp.ValidValues)\n                    {\n                        sb.Append(\"<ParameterValue>\");\n                        sb.AppendFormat(cinfo, \"<Value>{0}</Value>\", XmlUtil.XmlAnsi(pvi.Value));\n                        if (pvi.Label != null)\n                            sb.AppendFormat(cinfo, \"<Label>{0}</Label>\", XmlUtil.XmlAnsi(pvi.Label));\n                        sb.Append(\"</ParameterValue>\");\n                    }\n                    sb.Append(\"</ParameterValues></ValidValues>\");\n                }\n                sb.Append(\"</ReportParameter>\");\n            }\n            sb.Append(\"</ReportParameters>\");\n        }\n\n        private void DoReportSyntaxQParameters(CultureInfo cinfo, StringBuilder sb, string sql)\n        {\n            if (reportParameterCtl1.lbParameters.Items.Count <= 0)\n                return;\n\n            bool bFirst = true;\n            foreach (ReportParm rp in reportParameterCtl1.lbParameters.Items)\n            {\n                // force the name to start with @\n                string paramName;\n                if (rp.Name[0] == '@')\n                    paramName = rp.Name;\n                else\n                    paramName = \"@\" + rp.Name;\n\n                // Only create a query parameter if parameter is used in the query\n                if (sql.IndexOf(paramName) >= 0)\n                {\n                    if (bFirst)\n                    {\t// Only put out queryparameters if we actually have one\n                        sb.Append(\"<QueryParameters>\");\n                        bFirst = false;\n                    }\n                    sb.AppendFormat(cinfo, \"<QueryParameter Name=\\\"{0}\\\">\", rp.Name);\n                    sb.AppendFormat(cinfo, \"<Value>=Parameters!{0}</Value>\", rp.Name);\n                    sb.Append(\"</QueryParameter>\");\n                }\n            }\n            if (!bFirst)\n                sb.Append(\"</QueryParameters>\");\n        }\n\n        private async Task<bool> DoReportPreview()\n        {\n            if (!DoReportSyntax(true))\n                return false;\n\n            if (_rDesigner != null)\n            {\n                rdlViewer1.GetDataSourceReferencePassword = _rDesigner.SharedDatasetPassword;\n            }\n            else if (_rUserControl != null)\n            {\n                rdlViewer1.GetDataSourceReferencePassword = _rUserControl.SharedDatasetPassword;\n            }\n            await rdlViewer1.SetSourceRdl(tbReportSyntax.Text);\n            return true;\n        }\n\n        private string GetDataProvider()\n        {\n            string cType = cbConnectionTypes.Text;\n            _StashConnection = null;\n            if (cType == SHARED_CONNECTION)\n            {\n                if (_rDesigner != null)\n                {\n                    if (!DesignerUtility.GetSharedConnectionInfo(_rDesigner, tbConnection.Text, out cType, out _StashConnection))\n                        return null;\n                }\n                else if(_rUserControl != null)\n                {\n                    if (!DesignerUtility.GetSharedConnectionInfo(_rUserControl, tbConnection.Text, out cType, out _StashConnection))\n                        return null;\n                }\n            }\n            else\n            {\n                _StashConnection = tbConnection.Text;\n            }\n            return cType;\n        }\n\n        private string GetDataConnection()\n        {\t// GetDataProvider must be called first to ensure the DataConnection is correct.\n            return _StashConnection;\n        }\n\n        private void tvTablesColumns_BeforeExpand(object sender, System.Windows.Forms.TreeViewCancelEventArgs e)\n        {\n            tvTablesColumns_ExpandTable(e.Node);\n        }\n\n        private void tvTablesColumns_ExpandTable(TreeNode tNode)\n        {\n            if (tNode.Parent == null)\t// Check for Tables or Views\n                return;\n\n            if (tNode.FirstNode.Text != \"\")\t// Have we already filled it out?\n                return;\n\n            // Need to obtain the column information for the requested table/view\n            // suppress redraw until tree view is complete\n            tvTablesColumns.BeginUpdate();\n\n            string sql = \"SELECT * FROM \" + DesignerUtility.NormalizeSqlName(tNode.Text);\n            List<SqlColumn> tColumns = DesignerUtility.GetSqlColumns(GetDataProvider(), GetDataConnection(), sql, null);\n            bool bFirstTime = true;\n            foreach (SqlColumn sc in tColumns)\n            {\n                if (bFirstTime)\n                {\n                    bFirstTime = false;\n                    tNode.FirstNode.Text = sc.Name;\n                }\n                else\n                    tNode.Nodes.Add(sc.Name);\n            }\n\n            tvTablesColumns.EndUpdate();\n        }\n\n        private void tbSQL_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)\n        {\n            if (e.Data.GetDataPresent(DataFormats.Text))\t// only accept text\n                e.Effect = DragDropEffects.Copy;\n        }\n\n        private void tbSQL_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)\n        {\n            if (e.Data.GetDataPresent(DataFormats.Text))\n                tbSQL.SelectedText = (string)e.Data.GetData(DataFormats.Text);\n        }\n\n        private void tvTablesColumns_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)\n        {\n            TreeNode node = tvTablesColumns.GetNodeAt(e.X, e.Y);\n            if (node == null || node.Parent == null)\n                return;\n\n            string dragText;\n            if (tbSQL.Text == \"\")\n            {\n                if (node.Parent.Parent == null)\n                {\t// select table; generate full select for table\n                    tvTablesColumns_ExpandTable(node);\t// make sure we've obtained the columns\n\n                    dragText = \"SELECT \";\n                    TreeNode next = node.FirstNode;\n                    while (true)\n                    {\n                        dragText += DesignerUtility.NormalizeSqlName(next.Text);\n                        next = next.NextNode;\n                        if (next == null)\n                            break;\n                        dragText += \", \";\n                    }\n                    dragText += (\" FROM \" + DesignerUtility.NormalizeSqlName(node.Text));\n                }\n                else\n                {\t// select column; generate select of that column\t\n                    dragText = \"SELECT \" + DesignerUtility.NormalizeSqlName(node.Text) + \" FROM \" + DesignerUtility.NormalizeSqlName(node.Parent.Text);\n                }\n            }\n            else\n                dragText = node.Text;\n\n            tvTablesColumns.DoDragDrop(dragText, DragDropEffects.Copy);\n        }\n\n\n        private void DialogDatabase_Closed(object sender, System.EventArgs e)\n        {\n            if (_TempFileName != null)\n                File.Delete(_TempFileName);\n        }\n\n        private void tbSQL_TextChanged(object sender, System.EventArgs e)\n        {\n            tbReportSyntax.Text = \"\";\t// when SQL changes get rid of report syntax\n            _ColumnList = null;\t\t\t// get rid of any column list as well\n            cbColumnList.Items.Clear();\t// and clear out other places where columns show\n            cbColumnList.Text = \"\";\n            clbSubtotal.Items.Clear();\n        }\n\n        private void tbReportName_TextChanged(object sender, System.EventArgs e)\n        {\n            tbReportSyntax.Text = \"\";\t// when SQL changes get rid of report syntax\n        }\n\n        private void tbReportDescription_TextChanged(object sender, System.EventArgs e)\n        {\n            tbReportSyntax.Text = \"\";\t// when SQL changes get rid of report syntax\n        }\n\n        private void tbReportAuthor_TextChanged(object sender, System.EventArgs e)\n        {\n            tbReportSyntax.Text = \"\";\t// when SQL changes get rid of report syntax\n        }\n\n        private void rbTable_CheckedChanged(object sender, System.EventArgs e)\n        {\n            tbReportSyntax.Text = \"\";\t// when SQL changes get rid of report syntax\n\n            if (rbTable.Checked)\n            {\n                TabularGroup.Enabled = true;\n            }\n            else\n            {\n                TabularGroup.Enabled = false;\n            }\n        }\n\n        private void rbList_CheckedChanged(object sender, System.EventArgs e)\n        {\n            tbReportSyntax.Text = \"\";\t// when SQL changes get rid of report syntax\n        }\n\n        private void rbMatrix_CheckedChanged(object sender, System.EventArgs e)\n        {\n            tbReportSyntax.Text = \"\";\t// when SQL changes get rid of report syntax\n        }\n\n        private void rbChart_CheckedChanged(object sender, System.EventArgs e)\n        {\n            tbReportSyntax.Text = \"\";\t// when SQL changes get rid of report syntax\n        }\n\n        //private void bAdd_Click(object sender, System.EventArgs e)\n        //{\n        //    ReportParm rp = new ReportParm(\"newparm\");\n        //    int cur = reportParameterCtl1.lbParameters.Items.Add(rp);\n        //    reportParameterCtl1.lbParameters.SelectedIndex = cur;\n        //    this.tbParmName.Focus();\n        //}\n\n        //private void bRemove_Click(object sender, System.EventArgs e)\n        //{\n        //    int cur = lbParameters.SelectedIndex;\n        //    if (cur < 0)\n        //        return;\n        //    lbParameters.Items.RemoveAt(cur);\n        //    if (lbParameters.Items.Count <= 0)\n        //        return;\n        //    cur--;\n        //    if (cur < 0)\n        //        cur = 0;\n        //    lbParameters.SelectedIndex = cur;\n        //}\n\n        //private void lbParameters_SelectedIndexChanged(object sender, System.EventArgs e)\n        //{\n        //    int cur = lbParameters.SelectedIndex;\n        //    if (cur < 0)\n        //        return;\n\n        //    ReportParm rp = lbParameters.Items[cur] as ReportParm;\n        //    if (rp == null)\n        //        return;\n\n        //    tbParmName.Text = rp.Name;\n        //    cbParmType.Text = rp.DataType;\n        //    tbParmPrompt.Text = rp.Prompt;\n        //    tbParmDefaultValue.Text = rp.DefaultValueDisplay;\n        //    ckbParmAllowBlank.Checked = rp.AllowBlank;\n        //    tbParmValidValues.Text = rp.ValidValuesDisplay;\n        //    ckbParmAllowNull.Checked = rp.AllowNull;\n        //}\n\n        //private void lbParameters_MoveItem(int curloc, int newloc)\n        //{\n        //    ReportParm rp = lbParameters.Items[curloc] as ReportParm;\n        //    if (rp == null)\n        //        return;\n\n        //    lbParameters.BeginUpdate();\n        //    lbParameters.Items.RemoveAt(curloc);\n        //    lbParameters.Items.Insert(newloc, rp);\n        //    lbParameters.SelectedIndex = newloc;\n        //    lbParameters.EndUpdate();\n        //}\n\n        //private void tbParmName_TextChanged(object sender, System.EventArgs e)\n        //{\n        //    int cur = lbParameters.SelectedIndex;\n        //    if (cur < 0)\n        //        return;\n\n        //    ReportParm rp = lbParameters.Items[cur] as ReportParm;\n        //    if (rp == null)\n        //        return;\n\n        //    if (rp.Name == tbParmName.Text)\n        //        return;\n\n        //    rp.Name = tbParmName.Text;\n        //    // text doesn't change in listbox; force change by removing and re-adding item\n        //    lbParameters_MoveItem(cur, cur);\n        //}\n\n        //private void cbParmType_SelectedIndexChanged(object sender, System.EventArgs e)\n        //{\n        //    int cur = lbParameters.SelectedIndex;\n        //    if (cur < 0)\n        //        return;\n\n        //    ReportParm rp = lbParameters.Items[cur] as ReportParm;\n        //    if (rp == null)\n        //        return;\n\n        //    rp.DataType = cbParmType.Text;\n        //}\n\n        //private void tbParmPrompt_TextChanged(object sender, System.EventArgs e)\n        //{\n        //    int cur = lbParameters.SelectedIndex;\n        //    if (cur < 0)\n        //        return;\n\n        //    ReportParm rp = lbParameters.Items[cur] as ReportParm;\n        //    if (rp == null)\n        //        return;\n\n        //    rp.Prompt = tbParmPrompt.Text;\n        //}\n\n        //private void ckbParmAllowNull_CheckedChanged(object sender, System.EventArgs e)\n        //{\n        //    int cur = lbParameters.SelectedIndex;\n        //    if (cur < 0)\n        //        return;\n\n        //    ReportParm rp = lbParameters.Items[cur] as ReportParm;\n        //    if (rp == null)\n        //        return;\n\n        //    rp.AllowNull = ckbParmAllowNull.Checked;\n        //}\n\n        //private void ckbParmAllowBlank_CheckedChanged(object sender, System.EventArgs e)\n        //{\n        //    int cur = lbParameters.SelectedIndex;\n        //    if (cur < 0)\n        //        return;\n\n        //    ReportParm rp = lbParameters.Items[cur] as ReportParm;\n        //    if (rp == null)\n        //        return;\n\n        //    rp.AllowBlank = ckbParmAllowBlank.Checked;\n        //}\n\n        //private void bParmUp_Click(object sender, System.EventArgs e)\n        //{\n        //    int cur = lbParameters.SelectedIndex;\n        //    if (cur <= 0)\n        //        return;\n\n        //    lbParameters_MoveItem(cur, cur - 1);\n        //}\n\n        //private void bParmDown_Click(object sender, System.EventArgs e)\n        //{\n        //    int cur = lbParameters.SelectedIndex;\n        //    if (cur + 1 >= lbParameters.Items.Count)\n        //        return;\n\n        //    lbParameters_MoveItem(cur, cur + 1);\n        //}\n\n        //private void tbParmDefaultValue_TextChanged(object sender, System.EventArgs e)\n        //{\n        //    int cur = lbParameters.SelectedIndex;\n        //    if (cur < 0)\n        //        return;\n\n        //    ReportParm rp = lbParameters.Items[cur] as ReportParm;\n        //    if (rp == null)\n        //        return;\n\n        //    if (tbParmDefaultValue.Text.Length > 0)\n        //    {\n        //        if (rp.DefaultValue == null)\n        //            rp.DefaultValue = new List<string>();\n        //        else\n        //            rp.DefaultValue.Clear();\n        //        rp.DefaultValue.Add(tbParmDefaultValue.Text);\n        //    }\n        //    else\n        //        rp.DefaultValue = null;\n\n        //}\n\n        private void tbConnection_TextChanged(object sender, System.EventArgs e)\n        {\n            tvTablesColumns.Nodes.Clear();\n        }\n\n        private void emptyReportSyntax(object sender, System.EventArgs e)\n        {\n            tbReportSyntax.Text = \"\";\t\t// need to generate another report\n        }\n\n        private void bMove_Click(object sender, System.EventArgs e)\n        {\n            if (tvTablesColumns.SelectedNode == null ||\n                tvTablesColumns.SelectedNode.Parent == null)\n                return;\t\t// this is the Tables/Views node\n\n            TreeNode node = tvTablesColumns.SelectedNode;\n            string t = node.Text;\n            if (tbSQL.Text == \"\")\n            {\n                if (node.Parent.Parent == null)\n                {\t// select table; generate full select for table\n                    tvTablesColumns_ExpandTable(node);\t// make sure we've obtained the columns\n\n                    StringBuilder sb = new StringBuilder(\"SELECT \");\n                    TreeNode next = node.FirstNode;\n                    while (true)\n                    {\n                        sb.Append(DesignerUtility.NormalizeSqlName(next.Text));\n                        next = next.NextNode;\n                        if (next == null)\n                            break;\n                        sb.Append(\", \");\n                    }\n                    sb.Append(\" FROM \");\n                    sb.Append(DesignerUtility.NormalizeSqlName(node.Text));\n                    t = sb.ToString();\n                }\n                else\n                {\t// select column; generate select of that column\t\n                    t = \"SELECT \" + DesignerUtility.NormalizeSqlName(node.Text) + \" FROM \" + DesignerUtility.NormalizeSqlName(node.Parent.Text);\n                }\n            }\n\n            tbSQL.SelectedText = t;\n        }\n\n        //private void bValidValues_Click(object sender, System.EventArgs e)\n        //{\n        //    int cur = lbParameters.SelectedIndex;\n        //    if (cur < 0)\n        //        return;\n\n        //    ReportParm rp = lbParameters.Items[cur] as ReportParm;\n        //    if (rp == null)\n        //        return;\n\n        //    DialogValidValues dvv = new DialogValidValues(rp.ValidValues);\n        //    try\n        //    {\n        //        if (dvv.ShowDialog() != DialogResult.OK)\n        //            return;\n        //        rp.ValidValues = dvv.ValidValues;\n        //        this.tbParmValidValues.Text = rp.ValidValuesDisplay;\n        //    }\n        //    finally\n        //    {\n        //        dvv.Dispose();\n        //    }\n        //}\n\n        private void cbConnectionTypes_SelectedIndexChanged(object sender, System.EventArgs e)\n        {\n            groupBoxSqlServer.Visible = false;\n            buttonSqliteSelectDatabase.Visible = false;\n\n            if (cbConnectionTypes.Text == SHARED_CONNECTION)\n            {\n                lConnection.Text = Strings.DialogDatabase_cbConnectionTypes_SelectedIndexChanged_Shared_Data_Source_File;\n                bShared.Visible = true;\n            }\n            else\n            {\n                lConnection.Text = Strings.DialogDatabase_cbConnectionTypes_SelectedIndexChanged_Connection;\n                bShared.Visible = false;\n            }\n\n            if (cbConnectionTypes.Text == \"ODBC\")\n            {\n                lODBC.Visible = cbOdbcNames.Visible = true;\n                DesignerUtility.FillOdbcNames(cbOdbcNames);\n            }\n            else\n            {\n                lODBC.Visible = cbOdbcNames.Visible = false;\n            }\n\n            \n\n            // this is only for ease of testing\n            switch (cbConnectionTypes.Text)\n            {\n                case \"SQL\":\n                    tbConnection.Text = \"Server=(local)\\\\ServerInstance;DataBase=DatabaseName;User Id=myUsername;Password=myPassword;Connect Timeout=5\";\n                    groupBoxSqlServer.Visible = true;\n                    break;\n                case \"ODBC\":\n                    tbConnection.Text = \"dsn=world;UID=user;PWD=password;\";\n                    break;\n                case \"Oracle\":\n                    tbConnection.Text = \"User Id=SYSTEM;Password=password;Data Source=server\";\n                    break;\n                case \"Firebird.NET\":\n                    tbConnection.Text = @\"Dialect=3;User Id=SYSDBA;Database=daabaseFile.fdb;Data Source=localhost;Password=password\";\n                    break;\n                case \"MySQL.NET\":\n                    tbConnection.Text = \"database=world;user id=user;password=password;\";\n                    break;\n                case \"iAnywhere.NET\":\n                    tbConnection.Text = \"Data Source=ASA 9.0 Sample;UID=DBA;PWD=password\";\n                    break;\n                case \"SQLite\":\n                    tbConnection.Text = \"Data Source=filename;Version=3;Password=myPassword;Pooling=True;Max Pool Size=100;\";\n                    buttonSqliteSelectDatabase.Visible = true;\n                    break;\n                case \"PostgreSQL\":\n                case \"PostgreSQL_Devart\":\n                    tbConnection.Text = \"Server=127.0.0.1;Port=5432;Database=myDataBase;User Id=myUsername;Password=myPassword;\";\n                    break;\n                case \"Json\":\n                    tbConnection.Text = \"file=/path/to/file/or/http/call\";\n                    break;\n                default:\n                    tbConnection.Text = \"\";\n                    break;\n            }\n\n        }\n\n        private void cbOdbcNames_SelectedIndexChanged(object sender, System.EventArgs e)\n        {\n            string name = \"dsn=\" + cbOdbcNames.Text + \";\";\n            this.tbConnection.Text = name;\n        }\n\n        private void bTestConnection_Click(object sender, System.EventArgs e)\n        {\n            if (string.IsNullOrEmpty(tbConnection.Text))\n            {\n                MessageBox.Show(Strings.DialogDatabase_ShowD_SelectDataProvider, Strings.DesignerUtility_Show_TestConnection, MessageBoxButtons.OK, MessageBoxIcon.Error);\n                return;\n            }\n\n\n            string cType = GetDataProvider();\n            if (cType == null)\n                return;\n\n            if (DesignerUtility.TestConnection(cType, GetDataConnection()))\n                MessageBox.Show(Strings.DialogDatabase_Show_ConnectionSuccessful, Strings.DesignerUtility_Show_TestConnection);\n        }\n\n        private void DBConnection_Validating(object sender, System.ComponentModel.CancelEventArgs e)\n        {\n            if (!DesignerUtility.TestConnection(this.GetDataConnection(), GetDataConnection()))\n                e.Cancel = true;\n        }\n\n        private void bShared_Click(object sender, System.EventArgs e)\n        {\n            OpenFileDialog ofd = new OpenFileDialog();\n            ofd.Filter = Strings.DialogDatabase_bShared_Click_DSRFilter;\n            ofd.FilterIndex = 1;\n            if (tbConnection.Text.Length > 0)\n                ofd.FileName = tbConnection.Text;\n            else\n                ofd.FileName = \"*.dsr\";\n\n            ofd.Title = Strings.DialogDatabase_bShared_Click_DSRTitle;\n            ofd.CheckFileExists = true;\n            ofd.DefaultExt = \"dsr\";\n            ofd.AddExtension = true;\n            try\n            {\n                if (ofd.ShowDialog() == DialogResult.OK)\n                    tbConnection.Text = ofd.FileName;\n            }\n            finally\n            {\n                ofd.Dispose();\n            }\n        }\n\n        private void buttonSqliteSelectDatabase_Click(object sender, EventArgs e)\n        {\n            OpenFileDialog ofd = new OpenFileDialog();\n            try\n            {\n                ofd.Filter = Strings.DialogDatabase_buttonSqliteSelectDatabase_Click_AllFilesFilter;\n                ofd.CheckFileExists = true;\n                \n                try\n                {\n                    if (ofd.ShowDialog(this) != DialogResult.OK)\n                    {\n                        return;\n                    }\n\n                    if (tbConnection.Text.Trim() == \"\")\n                    {\n                        tbConnection.Text = \"Data Source=\" + ofd.FileName;\n                    }\n                    else\n                    {\n                        string[] sections = tbConnection.Text.Split(';');\n\n                        foreach (string section in sections)\n                        {\n                            if (section.ToLower().Contains(\"data source\"))\n                            {\n                                string dataSource = string.Format(\"Data Source={0}\", ofd.FileName);\n                                tbConnection.Text = tbConnection.Text.Replace(section, dataSource);\n                                break;\n                            }\n                        }\n                    }\n            \n                }\n                finally\n                {\n                    ofd.Dispose();\n                }\n\n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show(ex.Message, Strings.DialogDatabase_ShowD_Error, MessageBoxButtons.OK, MessageBoxIcon.Error);\n            }\n        }\n\n        private void buttonSearchSqlServers_Click(object sender, EventArgs e)\n        {\n            try\n            {\n#if NET6_0_OR_GREATER\n                Microsoft.Data.Sql.SqlDataSourceEnumerator instance = Microsoft.Data.Sql.SqlDataSourceEnumerator.Instance;\n#else\n                System.Data.Sql.SqlDataSourceEnumerator instance = System.Data.Sql.SqlDataSourceEnumerator.Instance;\n#endif\n                DataTable dt;\n                dt = instance.GetDataSources();\n\n                Dictionary<string, string> dict = new Dictionary<string, string>();\n                foreach (System.Data.DataRow row in dt.Rows)\n                {\n                    string server = row[\"ServerName\"].ToString();\n                    if (row[\"InstanceName\"].ToString() != \"\")\n                    {\n                        server = server + @\"\\\" + row[\"InstanceName\"].ToString();\n                    }\n                    dict.Add(server, server);\n                }\n                comboServerList.ValueMember = \"Value\";\n                comboServerList.DisplayMember = \"Key\";\n                comboServerList.DataSource = new BindingSource(dict, null);\n            }\n            catch(Exception ex)\n            {\n\t\t\t\tMessageBox.Show(ex.Message, Strings.DialogDatabase_ShowD_Error, MessageBoxButtons.OK, MessageBoxIcon.Error);\n            }\n        }\n\n        private void buttonDatabaseSearch_Click(object sender, EventArgs e)\n        {\n            System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();\n            System.Data.SqlClient.SqlDataAdapter da;\n\n            DataTable dt = new DataTable();\n\n            string connectionString = string.Format(\"server={0}; Database={1};User ID={2}; Password={3}; Trusted_Connection=False;\",\n                comboServerList.SelectedValue.ToString(), \"master\", textBoxSqlUser.Text, textBoxSqlPassword.Text);\n\n            SqlConnection cn = new System.Data.SqlClient.SqlConnection(connectionString); ;\n            try\n            {\n                \n                cn.Open();\n\n                cmd.Connection = cn;\n                cmd.CommandText = \"sp_databases\";\n                cmd.CommandType = CommandType.StoredProcedure;\n\n                da = new System.Data.SqlClient.SqlDataAdapter(cmd);\n                da.Fill(dt);\n                dt.TableName = \"master\";\n\n            }\n            catch (Exception ex)\n            {\n\t\t\t\tMessageBox.Show(ex.Message, Strings.DialogDatabase_ShowD_Error, MessageBoxButtons.OK, MessageBoxIcon.Error);\n                return;\n            }\n            finally\n            {\n                cn.Close();\n            }\n\n\n            try\n            {\n                Dictionary<string, string> dict = new Dictionary<string, string>();\n                foreach (System.Data.DataRow row in dt.Rows)\n                {\n                    string database = row[\"DATABASE_NAME\"].ToString();\n                    dict.Add(database, database);\n                }\n\n                comboDatabaseList.ValueMember = \"Value\";\n                comboDatabaseList.DisplayMember = \"Key\";\n                comboDatabaseList.DataSource = new BindingSource(dict, null);\n            }\n            catch (Exception ex)\n            {\n\t\t\t\tMessageBox.Show(ex.Message, Strings.DialogDatabase_ShowD_Error, MessageBoxButtons.OK, MessageBoxIcon.Error);\n            }\n        }\n\n        private void tbSQL_KeyDown(object sender, KeyEventArgs e)\n        {\n             if (e.Control && e.KeyCode == Keys.A)\n             {\n                tbSQL.SelectAll();\n             }\n\n        }\n\n        private void DialogDatabase_Load(object sender, EventArgs e)\n        {\n\n        }\n\n        private void comboServerList_SelectedIndexChanged(object sender, EventArgs e)\n        {\n\n            if (comboServerList.Items.Count == 0)\n            {\n                return;\n            }\n\n            string[] sections = tbConnection.Text.Split(';');\n\n            foreach (string section in sections)\n            {\n                if (section.ToLower().Contains(\"server=\"))\n                {\n                    string dataSource = string.Format(\"server={0}\", comboServerList.SelectedValue.ToString());\n                    tbConnection.Text = tbConnection.Text.Replace(section, dataSource);\n                    break;\n                }\n            }\n\n        }\n\n        private void comboDatabaseList_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            if (comboDatabaseList.Items.Count == 0)\n            {\n                return;\n            }\n\n            string[] sections = tbConnection.Text.Split(';');\n\n            foreach (string section in sections)\n            {\n                if (section.ToLower().Contains(\"database=\"))\n                {\n                    string dataSource = string.Format(\"database={0}\", comboDatabaseList.SelectedValue.ToString());\n                    tbConnection.Text = tbConnection.Text.Replace(section, dataSource);\n                    break;\n                }\n            }\n\n        }\n\n        private void rbEmpty_CheckedChanged(object sender, EventArgs e)\n        {\n            tbReportSyntax.Text = \"\";\t// when SQL changes get rid of report syntax\n            TabularGroup.Enabled = !rbEmpty.Checked;\n            DBConnection.Enabled = !rbEmpty.Checked;\n            DBSql.Enabled= !rbEmpty.Checked;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/DialogDatabase.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"splitContainer1.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Fill</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"splitContainer1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"tvTablesColumns.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Fill</value>\n  </data>\n  <data name=\"tvTablesColumns.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"tvTablesColumns.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>203, 300</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"tvTablesColumns.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;tvTablesColumns.Name\" xml:space=\"preserve\">\n    <value>tvTablesColumns</value>\n  </data>\n  <data name=\"&gt;&gt;tvTablesColumns.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tvTablesColumns.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel1</value>\n  </data>\n  <data name=\"&gt;&gt;tvTablesColumns.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.Name\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"tbSQL.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Bottom, Left, Right</value>\n  </data>\n  <data name=\"tbSQL.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>41, 3</value>\n  </data>\n  <data name=\"tbSQL.Multiline\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"tbSQL.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>361, 294</value>\n  </data>\n  <data name=\"tbSQL.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;tbSQL.Name\" xml:space=\"preserve\">\n    <value>tbSQL</value>\n  </data>\n  <data name=\"&gt;&gt;tbSQL.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbSQL.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel2</value>\n  </data>\n  <data name=\"&gt;&gt;tbSQL.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"bMove.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"bMove.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>3, 3</value>\n  </data>\n  <data name=\"bMove.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 23</value>\n  </data>\n  <data name=\"bMove.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"bMove.Text\" xml:space=\"preserve\">\n    <value>&gt;&gt;</value>\n  </data>\n  <data name=\"&gt;&gt;bMove.Name\" xml:space=\"preserve\">\n    <value>bMove</value>\n  </data>\n  <data name=\"&gt;&gt;bMove.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bMove.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel2</value>\n  </data>\n  <data name=\"&gt;&gt;bMove.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.Name\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel2</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"splitContainer1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>612, 300</value>\n  </data>\n  <data name=\"splitContainer1.SplitterDistance\" type=\"System.Int32, mscorlib\">\n    <value>203</value>\n  </data>\n  <data name=\"splitContainer1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Name\" xml:space=\"preserve\">\n    <value>splitContainer1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Parent\" xml:space=\"preserve\">\n    <value>panel2</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"rbSchema2005.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"rbSchema2005.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>248, 16</value>\n  </data>\n  <data name=\"rbSchema2005.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 16</value>\n  </data>\n  <data name=\"rbSchema2005.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"rbSchema2005.Text\" xml:space=\"preserve\">\n    <value>2005</value>\n  </data>\n  <data name=\"&gt;&gt;rbSchema2005.Name\" xml:space=\"preserve\">\n    <value>rbSchema2005</value>\n  </data>\n  <data name=\"&gt;&gt;rbSchema2005.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbSchema2005.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;rbSchema2005.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"rbSchema2003.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"rbSchema2003.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>120, 16</value>\n  </data>\n  <data name=\"rbSchema2003.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 16</value>\n  </data>\n  <data name=\"rbSchema2003.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"rbSchema2003.Text\" xml:space=\"preserve\">\n    <value>2003</value>\n  </data>\n  <data name=\"&gt;&gt;rbSchema2003.Name\" xml:space=\"preserve\">\n    <value>rbSchema2003</value>\n  </data>\n  <data name=\"&gt;&gt;rbSchema2003.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbSchema2003.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;rbSchema2003.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"rbSchemaNo.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"rbSchemaNo.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 16</value>\n  </data>\n  <data name=\"rbSchemaNo.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 16</value>\n  </data>\n  <data name=\"rbSchemaNo.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"rbSchemaNo.Text\" xml:space=\"preserve\">\n    <value>None</value>\n  </data>\n  <data name=\"&gt;&gt;rbSchemaNo.Name\" xml:space=\"preserve\">\n    <value>rbSchemaNo</value>\n  </data>\n  <data name=\"&gt;&gt;rbSchemaNo.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbSchemaNo.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;rbSchemaNo.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"groupBox2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 256</value>\n  </data>\n  <data name=\"groupBox2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>384, 40</value>\n  </data>\n  <data name=\"groupBox2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"groupBox2.Text\" xml:space=\"preserve\">\n    <value>RDL Schema</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Name\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Parent\" xml:space=\"preserve\">\n    <value>ReportType</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"cbOrientation.Items\" xml:space=\"preserve\">\n    <value>Portrait (8.5\" by 11\")</value>\n  </data>\n  <data name=\"cbOrientation.Items1\" xml:space=\"preserve\">\n    <value>Landscape (11\" by 8.5\")</value>\n  </data>\n  <data name=\"cbOrientation.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 224</value>\n  </data>\n  <data name=\"cbOrientation.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>168, 21</value>\n  </data>\n  <data name=\"cbOrientation.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;cbOrientation.Name\" xml:space=\"preserve\">\n    <value>cbOrientation</value>\n  </data>\n  <data name=\"&gt;&gt;cbOrientation.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbOrientation.Parent\" xml:space=\"preserve\">\n    <value>ReportType</value>\n  </data>\n  <data name=\"&gt;&gt;cbOrientation.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"label6.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label6.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 224</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 23</value>\n  </data>\n  <data name=\"label6.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Orientation:</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Name\" xml:space=\"preserve\">\n    <value>label6</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Parent\" xml:space=\"preserve\">\n    <value>ReportType</value>\n  </data>\n  <data name=\"&gt;&gt;label6.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"tbReportAuthor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 192</value>\n  </data>\n  <data name=\"tbReportAuthor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>304, 20</value>\n  </data>\n  <data name=\"tbReportAuthor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportAuthor.Name\" xml:space=\"preserve\">\n    <value>tbReportAuthor</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportAuthor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportAuthor.Parent\" xml:space=\"preserve\">\n    <value>ReportType</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportAuthor.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"tbReportDescription.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 160</value>\n  </data>\n  <data name=\"tbReportDescription.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>304, 20</value>\n  </data>\n  <data name=\"tbReportDescription.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportDescription.Name\" xml:space=\"preserve\">\n    <value>tbReportDescription</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportDescription.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportDescription.Parent\" xml:space=\"preserve\">\n    <value>ReportType</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportDescription.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"tbReportName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 128</value>\n  </data>\n  <data name=\"tbReportName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>304, 20</value>\n  </data>\n  <data name=\"tbReportName.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportName.Name\" xml:space=\"preserve\">\n    <value>tbReportName</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportName.Parent\" xml:space=\"preserve\">\n    <value>ReportType</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportName.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"label3.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 192</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 23</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Author:</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>ReportType</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"label2.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 160</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 23</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Description:</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>ReportType</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"label1.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 128</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 23</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Name:</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>ReportType</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"rbEmpty.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"rbEmpty.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>142, 24</value>\n  </data>\n  <data name=\"rbEmpty.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 24</value>\n  </data>\n  <data name=\"rbEmpty.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"rbEmpty.Text\" xml:space=\"preserve\">\n    <value>Empty report</value>\n  </data>\n  <data name=\"&gt;&gt;rbEmpty.Name\" xml:space=\"preserve\">\n    <value>rbEmpty</value>\n  </data>\n  <data name=\"&gt;&gt;rbEmpty.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbEmpty.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;rbEmpty.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"rbChart.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"rbChart.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>274, 56</value>\n  </data>\n  <data name=\"rbChart.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 24</value>\n  </data>\n  <data name=\"rbChart.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"rbChart.Text\" xml:space=\"preserve\">\n    <value>Chart</value>\n  </data>\n  <data name=\"rbChart.Visible\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"&gt;&gt;rbChart.Name\" xml:space=\"preserve\">\n    <value>rbChart</value>\n  </data>\n  <data name=\"&gt;&gt;rbChart.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbChart.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;rbChart.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"rbMatrix.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"rbMatrix.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>274, 24</value>\n  </data>\n  <data name=\"rbMatrix.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 24</value>\n  </data>\n  <data name=\"rbMatrix.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"rbMatrix.Text\" xml:space=\"preserve\">\n    <value>Matrix</value>\n  </data>\n  <data name=\"rbMatrix.Visible\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"&gt;&gt;rbMatrix.Name\" xml:space=\"preserve\">\n    <value>rbMatrix</value>\n  </data>\n  <data name=\"&gt;&gt;rbMatrix.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbMatrix.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;rbMatrix.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"rbList.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"rbList.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>32, 56</value>\n  </data>\n  <data name=\"rbList.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 24</value>\n  </data>\n  <data name=\"rbList.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"rbList.Text\" xml:space=\"preserve\">\n    <value>List</value>\n  </data>\n  <data name=\"&gt;&gt;rbList.Name\" xml:space=\"preserve\">\n    <value>rbList</value>\n  </data>\n  <data name=\"&gt;&gt;rbList.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbList.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;rbList.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"rbTable.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"rbTable.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>32, 24</value>\n  </data>\n  <data name=\"rbTable.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 24</value>\n  </data>\n  <data name=\"rbTable.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"rbTable.Text\" xml:space=\"preserve\">\n    <value>Table</value>\n  </data>\n  <data name=\"&gt;&gt;rbTable.Name\" xml:space=\"preserve\">\n    <value>rbTable</value>\n  </data>\n  <data name=\"&gt;&gt;rbTable.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbTable.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;rbTable.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"groupBox1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>384, 104</value>\n  </data>\n  <data name=\"groupBox1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Report Type</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Name\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Parent\" xml:space=\"preserve\">\n    <value>ReportType</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"ReportType.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 22</value>\n  </data>\n  <data name=\"ReportType.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>612, 300</value>\n  </data>\n  <data name=\"ReportType.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"ReportType.Text\" xml:space=\"preserve\">\n    <value>Report Info</value>\n  </data>\n  <data name=\"&gt;&gt;ReportType.Name\" xml:space=\"preserve\">\n    <value>ReportType</value>\n  </data>\n  <data name=\"&gt;&gt;ReportType.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;ReportType.Parent\" xml:space=\"preserve\">\n    <value>tcDialog</value>\n  </data>\n  <data name=\"&gt;&gt;ReportType.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"textBoxSqlPassword.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>306, 64</value>\n  </data>\n  <data name=\"textBoxSqlPassword.PasswordChar\" type=\"System.Char, mscorlib\" xml:space=\"preserve\">\n    <value>*</value>\n  </data>\n  <data name=\"textBoxSqlPassword.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>195, 20</value>\n  </data>\n  <data name=\"textBoxSqlPassword.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>18</value>\n  </data>\n  <data name=\"&gt;&gt;textBoxSqlPassword.Name\" xml:space=\"preserve\">\n    <value>textBoxSqlPassword</value>\n  </data>\n  <data name=\"&gt;&gt;textBoxSqlPassword.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;textBoxSqlPassword.Parent\" xml:space=\"preserve\">\n    <value>groupBoxSqlServer</value>\n  </data>\n  <data name=\"&gt;&gt;textBoxSqlPassword.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"label11.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label11.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>243, 63</value>\n  </data>\n  <data name=\"label11.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 23</value>\n  </data>\n  <data name=\"label11.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>17</value>\n  </data>\n  <data name=\"label11.Text\" xml:space=\"preserve\">\n    <value>password:</value>\n  </data>\n  <data name=\"&gt;&gt;label11.Name\" xml:space=\"preserve\">\n    <value>label11</value>\n  </data>\n  <data name=\"&gt;&gt;label11.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label11.Parent\" xml:space=\"preserve\">\n    <value>groupBoxSqlServer</value>\n  </data>\n  <data name=\"&gt;&gt;label11.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"textBoxSqlUser.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>76, 63</value>\n  </data>\n  <data name=\"textBoxSqlUser.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>161, 20</value>\n  </data>\n  <data name=\"textBoxSqlUser.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>16</value>\n  </data>\n  <data name=\"&gt;&gt;textBoxSqlUser.Name\" xml:space=\"preserve\">\n    <value>textBoxSqlUser</value>\n  </data>\n  <data name=\"&gt;&gt;textBoxSqlUser.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;textBoxSqlUser.Parent\" xml:space=\"preserve\">\n    <value>groupBoxSqlServer</value>\n  </data>\n  <data name=\"&gt;&gt;textBoxSqlUser.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"label10.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label10.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>13, 66</value>\n  </data>\n  <data name=\"label10.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 23</value>\n  </data>\n  <data name=\"label10.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>15</value>\n  </data>\n  <data name=\"label10.Text\" xml:space=\"preserve\">\n    <value>Username:</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Name\" xml:space=\"preserve\">\n    <value>label10</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Parent\" xml:space=\"preserve\">\n    <value>groupBoxSqlServer</value>\n  </data>\n  <data name=\"&gt;&gt;label10.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"label8.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label8.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label8.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>13, 24</value>\n  </data>\n  <data name=\"label8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>41, 13</value>\n  </data>\n  <data name=\"label8.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Server:</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Name\" xml:space=\"preserve\">\n    <value>label8</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Parent\" xml:space=\"preserve\">\n    <value>groupBoxSqlServer</value>\n  </data>\n  <data name=\"&gt;&gt;label8.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"buttonDatabaseSearch.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"buttonDatabaseSearch.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>372, 90</value>\n  </data>\n  <data name=\"buttonDatabaseSearch.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>137, 23</value>\n  </data>\n  <data name=\"buttonDatabaseSearch.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"buttonDatabaseSearch.Text\" xml:space=\"preserve\">\n    <value>Search for Databases</value>\n  </data>\n  <data name=\"&gt;&gt;buttonDatabaseSearch.Name\" xml:space=\"preserve\">\n    <value>buttonDatabaseSearch</value>\n  </data>\n  <data name=\"&gt;&gt;buttonDatabaseSearch.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;buttonDatabaseSearch.Parent\" xml:space=\"preserve\">\n    <value>groupBoxSqlServer</value>\n  </data>\n  <data name=\"&gt;&gt;buttonDatabaseSearch.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"comboServerList.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>75, 21</value>\n  </data>\n  <data name=\"comboServerList.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>291, 21</value>\n  </data>\n  <data name=\"comboServerList.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;comboServerList.Name\" xml:space=\"preserve\">\n    <value>comboServerList</value>\n  </data>\n  <data name=\"&gt;&gt;comboServerList.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;comboServerList.Parent\" xml:space=\"preserve\">\n    <value>groupBoxSqlServer</value>\n  </data>\n  <data name=\"&gt;&gt;comboServerList.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"label9.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label9.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label9.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>13, 95</value>\n  </data>\n  <data name=\"label9.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 13</value>\n  </data>\n  <data name=\"label9.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"label9.Text\" xml:space=\"preserve\">\n    <value>Database:</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Name\" xml:space=\"preserve\">\n    <value>label9</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Parent\" xml:space=\"preserve\">\n    <value>groupBoxSqlServer</value>\n  </data>\n  <data name=\"&gt;&gt;label9.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"buttonSearchSqlServers.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"buttonSearchSqlServers.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>372, 19</value>\n  </data>\n  <data name=\"buttonSearchSqlServers.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>137, 23</value>\n  </data>\n  <data name=\"buttonSearchSqlServers.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"buttonSearchSqlServers.Text\" xml:space=\"preserve\">\n    <value>Search for Servers</value>\n  </data>\n  <data name=\"&gt;&gt;buttonSearchSqlServers.Name\" xml:space=\"preserve\">\n    <value>buttonSearchSqlServers</value>\n  </data>\n  <data name=\"&gt;&gt;buttonSearchSqlServers.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;buttonSearchSqlServers.Parent\" xml:space=\"preserve\">\n    <value>groupBoxSqlServer</value>\n  </data>\n  <data name=\"&gt;&gt;buttonSearchSqlServers.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"comboDatabaseList.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>76, 92</value>\n  </data>\n  <data name=\"comboDatabaseList.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>290, 21</value>\n  </data>\n  <data name=\"comboDatabaseList.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>13</value>\n  </data>\n  <data name=\"&gt;&gt;comboDatabaseList.Name\" xml:space=\"preserve\">\n    <value>comboDatabaseList</value>\n  </data>\n  <data name=\"&gt;&gt;comboDatabaseList.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;comboDatabaseList.Parent\" xml:space=\"preserve\">\n    <value>groupBoxSqlServer</value>\n  </data>\n  <data name=\"&gt;&gt;comboDatabaseList.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"groupBoxSqlServer.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>3, 147</value>\n  </data>\n  <data name=\"groupBoxSqlServer.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>514, 140</value>\n  </data>\n  <data name=\"groupBoxSqlServer.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>14</value>\n  </data>\n  <data name=\"groupBoxSqlServer.Text\" xml:space=\"preserve\">\n    <value>Sql Server</value>\n  </data>\n  <data name=\"groupBoxSqlServer.Visible\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"&gt;&gt;groupBoxSqlServer.Name\" xml:space=\"preserve\">\n    <value>groupBoxSqlServer</value>\n  </data>\n  <data name=\"&gt;&gt;groupBoxSqlServer.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;groupBoxSqlServer.Parent\" xml:space=\"preserve\">\n    <value>DBConnection</value>\n  </data>\n  <data name=\"&gt;&gt;groupBoxSqlServer.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"buttonSqliteSelectDatabase.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"buttonSqliteSelectDatabase.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>321, 104</value>\n  </data>\n  <data name=\"buttonSqliteSelectDatabase.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>177, 23</value>\n  </data>\n  <data name=\"buttonSqliteSelectDatabase.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"buttonSqliteSelectDatabase.Text\" xml:space=\"preserve\">\n    <value>Select SQLite Database File</value>\n  </data>\n  <data name=\"buttonSqliteSelectDatabase.Visible\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"&gt;&gt;buttonSqliteSelectDatabase.Name\" xml:space=\"preserve\">\n    <value>buttonSqliteSelectDatabase</value>\n  </data>\n  <data name=\"&gt;&gt;buttonSqliteSelectDatabase.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;buttonSqliteSelectDatabase.Parent\" xml:space=\"preserve\">\n    <value>DBConnection</value>\n  </data>\n  <data name=\"&gt;&gt;buttonSqliteSelectDatabase.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"bShared.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"bShared.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>216, 48</value>\n  </data>\n  <data name=\"bShared.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 16</value>\n  </data>\n  <data name=\"bShared.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"bShared.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"&gt;&gt;bShared.Name\" xml:space=\"preserve\">\n    <value>bShared</value>\n  </data>\n  <data name=\"&gt;&gt;bShared.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bShared.Parent\" xml:space=\"preserve\">\n    <value>DBConnection</value>\n  </data>\n  <data name=\"&gt;&gt;bShared.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"bTestConnection.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"bTestConnection.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 104</value>\n  </data>\n  <data name=\"bTestConnection.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 23</value>\n  </data>\n  <data name=\"bTestConnection.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"bTestConnection.Text\" xml:space=\"preserve\">\n    <value>Test Connection</value>\n  </data>\n  <data name=\"&gt;&gt;bTestConnection.Name\" xml:space=\"preserve\">\n    <value>bTestConnection</value>\n  </data>\n  <data name=\"&gt;&gt;bTestConnection.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bTestConnection.Parent\" xml:space=\"preserve\">\n    <value>DBConnection</value>\n  </data>\n  <data name=\"&gt;&gt;bTestConnection.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"cbOdbcNames.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>352, 16</value>\n  </data>\n  <data name=\"cbOdbcNames.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 21</value>\n  </data>\n  <data name=\"cbOdbcNames.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;cbOdbcNames.Name\" xml:space=\"preserve\">\n    <value>cbOdbcNames</value>\n  </data>\n  <data name=\"&gt;&gt;cbOdbcNames.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbOdbcNames.Parent\" xml:space=\"preserve\">\n    <value>DBConnection</value>\n  </data>\n  <data name=\"&gt;&gt;cbOdbcNames.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"lODBC.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"lODBC.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>240, 16</value>\n  </data>\n  <data name=\"lODBC.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>112, 23</value>\n  </data>\n  <data name=\"lODBC.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"lODBC.Text\" xml:space=\"preserve\">\n    <value>ODBC Data Sources</value>\n  </data>\n  <data name=\"&gt;&gt;lODBC.Name\" xml:space=\"preserve\">\n    <value>lODBC</value>\n  </data>\n  <data name=\"&gt;&gt;lODBC.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lODBC.Parent\" xml:space=\"preserve\">\n    <value>DBConnection</value>\n  </data>\n  <data name=\"&gt;&gt;lODBC.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"lConnection.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"lConnection.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 48</value>\n  </data>\n  <data name=\"lConnection.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>184, 16</value>\n  </data>\n  <data name=\"lConnection.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"lConnection.Text\" xml:space=\"preserve\">\n    <value>Connection:</value>\n  </data>\n  <data name=\"&gt;&gt;lConnection.Name\" xml:space=\"preserve\">\n    <value>lConnection</value>\n  </data>\n  <data name=\"&gt;&gt;lConnection.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lConnection.Parent\" xml:space=\"preserve\">\n    <value>DBConnection</value>\n  </data>\n  <data name=\"&gt;&gt;lConnection.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"cbConnectionTypes.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>112, 16</value>\n  </data>\n  <data name=\"cbConnectionTypes.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>128, 21</value>\n  </data>\n  <data name=\"cbConnectionTypes.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;cbConnectionTypes.Name\" xml:space=\"preserve\">\n    <value>cbConnectionTypes</value>\n  </data>\n  <data name=\"&gt;&gt;cbConnectionTypes.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbConnectionTypes.Parent\" xml:space=\"preserve\">\n    <value>DBConnection</value>\n  </data>\n  <data name=\"&gt;&gt;cbConnectionTypes.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"label7.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label7.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"label7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 23</value>\n  </data>\n  <data name=\"label7.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Connection Type:</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Name\" xml:space=\"preserve\">\n    <value>label7</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Parent\" xml:space=\"preserve\">\n    <value>DBConnection</value>\n  </data>\n  <data name=\"&gt;&gt;label7.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"tbConnection.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 72</value>\n  </data>\n  <data name=\"tbConnection.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>488, 20</value>\n  </data>\n  <data name=\"tbConnection.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"tbConnection.Text\" xml:space=\"preserve\">\n    <value>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</value>\n  </data>\n  <data name=\"&gt;&gt;tbConnection.Name\" xml:space=\"preserve\">\n    <value>tbConnection</value>\n  </data>\n  <data name=\"&gt;&gt;tbConnection.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbConnection.Parent\" xml:space=\"preserve\">\n    <value>DBConnection</value>\n  </data>\n  <data name=\"&gt;&gt;tbConnection.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"DBConnection.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 22</value>\n  </data>\n  <data name=\"DBConnection.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>612, 300</value>\n  </data>\n  <data name=\"DBConnection.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"DBConnection.Text\" xml:space=\"preserve\">\n    <value>Connection</value>\n  </data>\n  <data name=\"&gt;&gt;DBConnection.Name\" xml:space=\"preserve\">\n    <value>DBConnection</value>\n  </data>\n  <data name=\"&gt;&gt;DBConnection.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;DBConnection.Parent\" xml:space=\"preserve\">\n    <value>tcDialog</value>\n  </data>\n  <data name=\"&gt;&gt;DBConnection.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"reportParameterCtl1.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Fill</value>\n  </data>\n  <data name=\"reportParameterCtl1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"reportParameterCtl1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>612, 300</value>\n  </data>\n  <data name=\"reportParameterCtl1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;reportParameterCtl1.Name\" xml:space=\"preserve\">\n    <value>reportParameterCtl1</value>\n  </data>\n  <data name=\"&gt;&gt;reportParameterCtl1.Type\" xml:space=\"preserve\">\n    <value>fyiReporting.RdlDesign.ReportParameterCtl, RdlDesigner, Version=4.12.5799.34178, Culture=neutral, PublicKeyToken=null</value>\n  </data>\n  <data name=\"&gt;&gt;reportParameterCtl1.Parent\" xml:space=\"preserve\">\n    <value>ReportParameters</value>\n  </data>\n  <data name=\"&gt;&gt;reportParameterCtl1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"ReportParameters.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 22</value>\n  </data>\n  <data name=\"ReportParameters.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>612, 300</value>\n  </data>\n  <data name=\"ReportParameters.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"ReportParameters.Text\" xml:space=\"preserve\">\n    <value>Parameters</value>\n  </data>\n  <data name=\"&gt;&gt;ReportParameters.Name\" xml:space=\"preserve\">\n    <value>ReportParameters</value>\n  </data>\n  <data name=\"&gt;&gt;ReportParameters.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;ReportParameters.Parent\" xml:space=\"preserve\">\n    <value>tcDialog</value>\n  </data>\n  <data name=\"&gt;&gt;ReportParameters.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"panel2.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Fill</value>\n  </data>\n  <data name=\"panel2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"panel2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>612, 300</value>\n  </data>\n  <data name=\"panel2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;panel2.Name\" xml:space=\"preserve\">\n    <value>panel2</value>\n  </data>\n  <data name=\"&gt;&gt;panel2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;panel2.Parent\" xml:space=\"preserve\">\n    <value>DBSql</value>\n  </data>\n  <data name=\"&gt;&gt;panel2.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"DBSql.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 22</value>\n  </data>\n  <data name=\"DBSql.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>612, 300</value>\n  </data>\n  <data name=\"DBSql.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"DBSql.Text\" xml:space=\"preserve\">\n    <value>SQL</value>\n  </data>\n  <data name=\"&gt;&gt;DBSql.Name\" xml:space=\"preserve\">\n    <value>DBSql</value>\n  </data>\n  <data name=\"&gt;&gt;DBSql.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;DBSql.Parent\" xml:space=\"preserve\">\n    <value>tcDialog</value>\n  </data>\n  <data name=\"&gt;&gt;DBSql.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"clbSubtotal.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>232, 32</value>\n  </data>\n  <data name=\"clbSubtotal.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>192, 139</value>\n  </data>\n  <data name=\"clbSubtotal.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;clbSubtotal.Name\" xml:space=\"preserve\">\n    <value>clbSubtotal</value>\n  </data>\n  <data name=\"&gt;&gt;clbSubtotal.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;clbSubtotal.Parent\" xml:space=\"preserve\">\n    <value>TabularGroup</value>\n  </data>\n  <data name=\"&gt;&gt;clbSubtotal.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"ckbGrandTotal.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"ckbGrandTotal.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 88</value>\n  </data>\n  <data name=\"ckbGrandTotal.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>160, 24</value>\n  </data>\n  <data name=\"ckbGrandTotal.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"ckbGrandTotal.Text\" xml:space=\"preserve\">\n    <value>Calculate grand totals</value>\n  </data>\n  <data name=\"&gt;&gt;ckbGrandTotal.Name\" xml:space=\"preserve\">\n    <value>ckbGrandTotal</value>\n  </data>\n  <data name=\"&gt;&gt;ckbGrandTotal.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;ckbGrandTotal.Parent\" xml:space=\"preserve\">\n    <value>TabularGroup</value>\n  </data>\n  <data name=\"&gt;&gt;ckbGrandTotal.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"label5.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label5.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>232, 16</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>208, 23</value>\n  </data>\n  <data name=\"label5.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>Check columns you want to subtotal</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Name\" xml:space=\"preserve\">\n    <value>label5</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Parent\" xml:space=\"preserve\">\n    <value>TabularGroup</value>\n  </data>\n  <data name=\"&gt;&gt;label5.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"label4.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 16</value>\n  </data>\n  <data name=\"label4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Pick a column to group (create hierarchy)</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Name\" xml:space=\"preserve\">\n    <value>label4</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Parent\" xml:space=\"preserve\">\n    <value>TabularGroup</value>\n  </data>\n  <data name=\"&gt;&gt;label4.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"cbColumnList.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 32</value>\n  </data>\n  <data name=\"cbColumnList.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>200, 21</value>\n  </data>\n  <data name=\"cbColumnList.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;cbColumnList.Name\" xml:space=\"preserve\">\n    <value>cbColumnList</value>\n  </data>\n  <data name=\"&gt;&gt;cbColumnList.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbColumnList.Parent\" xml:space=\"preserve\">\n    <value>TabularGroup</value>\n  </data>\n  <data name=\"&gt;&gt;cbColumnList.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"TabularGroup.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 22</value>\n  </data>\n  <data name=\"TabularGroup.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>612, 300</value>\n  </data>\n  <data name=\"TabularGroup.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"TabularGroup.Text\" xml:space=\"preserve\">\n    <value>Grouping</value>\n  </data>\n  <data name=\"&gt;&gt;TabularGroup.Name\" xml:space=\"preserve\">\n    <value>TabularGroup</value>\n  </data>\n  <data name=\"&gt;&gt;TabularGroup.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;TabularGroup.Parent\" xml:space=\"preserve\">\n    <value>tcDialog</value>\n  </data>\n  <data name=\"&gt;&gt;TabularGroup.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"tbReportSyntax.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Fill</value>\n  </data>\n  <data name=\"tbReportSyntax.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"tbReportSyntax.Multiline\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"tbReportSyntax.ScrollBars\" type=\"System.Windows.Forms.ScrollBars, System.Windows.Forms\">\n    <value>Both</value>\n  </data>\n  <data name=\"tbReportSyntax.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>612, 300</value>\n  </data>\n  <data name=\"tbReportSyntax.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"tbReportSyntax.WordWrap\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportSyntax.Name\" xml:space=\"preserve\">\n    <value>tbReportSyntax</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportSyntax.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportSyntax.Parent\" xml:space=\"preserve\">\n    <value>ReportSyntax</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportSyntax.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"ReportSyntax.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 22</value>\n  </data>\n  <data name=\"ReportSyntax.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>612, 300</value>\n  </data>\n  <data name=\"ReportSyntax.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"ReportSyntax.Text\" xml:space=\"preserve\">\n    <value>Report Syntax</value>\n  </data>\n  <data name=\"&gt;&gt;ReportSyntax.Name\" xml:space=\"preserve\">\n    <value>ReportSyntax</value>\n  </data>\n  <data name=\"&gt;&gt;ReportSyntax.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;ReportSyntax.Parent\" xml:space=\"preserve\">\n    <value>tcDialog</value>\n  </data>\n  <data name=\"&gt;&gt;ReportSyntax.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"rdlViewer1.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Fill</value>\n  </data>\n  <data name=\"rdlViewer1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"rdlViewer1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>612, 300</value>\n  </data>\n  <data name=\"rdlViewer1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;rdlViewer1.Name\" xml:space=\"preserve\">\n    <value>rdlViewer1</value>\n  </data>\n  <data name=\"&gt;&gt;rdlViewer1.Type\" xml:space=\"preserve\">\n    <value>fyiReporting.RdlViewer.RdlViewer, RdlViewer, Version=4.12.5799.32176, Culture=neutral, PublicKeyToken=null</value>\n  </data>\n  <data name=\"&gt;&gt;rdlViewer1.Parent\" xml:space=\"preserve\">\n    <value>ReportPreview</value>\n  </data>\n  <data name=\"&gt;&gt;rdlViewer1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"ReportPreview.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 22</value>\n  </data>\n  <data name=\"ReportPreview.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>612, 300</value>\n  </data>\n  <data name=\"ReportPreview.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"ReportPreview.Text\" xml:space=\"preserve\">\n    <value>Report Preview</value>\n  </data>\n  <data name=\"&gt;&gt;ReportPreview.Name\" xml:space=\"preserve\">\n    <value>ReportPreview</value>\n  </data>\n  <data name=\"&gt;&gt;ReportPreview.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;ReportPreview.Parent\" xml:space=\"preserve\">\n    <value>tcDialog</value>\n  </data>\n  <data name=\"&gt;&gt;ReportPreview.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"tcDialog.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Fill</value>\n  </data>\n  <data name=\"tcDialog.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"tcDialog.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>620, 326</value>\n  </data>\n  <data name=\"tcDialog.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;tcDialog.Name\" xml:space=\"preserve\">\n    <value>tcDialog</value>\n  </data>\n  <data name=\"&gt;&gt;tcDialog.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tcDialog.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tcDialog.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"btnCancel.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Bottom, Right</value>\n  </data>\n  <data name=\"btnCancel.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"btnCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>532, 10</value>\n  </data>\n  <data name=\"btnCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"btnCancel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"btnCancel.Text\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"&gt;&gt;btnCancel.Name\" xml:space=\"preserve\">\n    <value>btnCancel</value>\n  </data>\n  <data name=\"&gt;&gt;btnCancel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;btnCancel.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;btnCancel.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"btnOK.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Bottom, Right</value>\n  </data>\n  <data name=\"btnOK.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"btnOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>436, 10</value>\n  </data>\n  <data name=\"btnOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"btnOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"btnOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"&gt;&gt;btnOK.Name\" xml:space=\"preserve\">\n    <value>btnOK</value>\n  </data>\n  <data name=\"&gt;&gt;btnOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;btnOK.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;btnOK.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"panel1.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Bottom</value>\n  </data>\n  <data name=\"panel1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 326</value>\n  </data>\n  <data name=\"panel1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>620, 40</value>\n  </data>\n  <data name=\"panel1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Name\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>620, 366</value>\n  </data>\n  <data name=\"$this.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>New Report from Database</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DialogDatabase</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DialogDatabase.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ReportType.Text\" xml:space=\"preserve\">\n    <value>Информация</value>\n  </data>\n  <data name=\"groupBox2.Text\" xml:space=\"preserve\">\n    <value>Спецификация RDL</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"rbSchema2005.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 18</value>\n  </data>\n  <data name=\"rbSchema2003.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 18</value>\n  </data>\n  <data name=\"rbSchemaNo.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 18</value>\n  </data>\n  <data name=\"rbSchemaNo.Text\" xml:space=\"preserve\">\n    <value>Отсутствует</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>74, 23</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Ориентация:</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Автор:</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Описание:</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Название:</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Тип отчёта</value>\n  </data>\n  <data name=\"rbChart.Text\" xml:space=\"preserve\">\n    <value>График</value>\n  </data>\n  <data name=\"rbMatrix.Text\" xml:space=\"preserve\">\n    <value>Матрица</value>\n  </data>\n  <data name=\"rbList.Text\" xml:space=\"preserve\">\n    <value>Список</value>\n  </data>\n  <data name=\"rbTable.Text\" xml:space=\"preserve\">\n    <value>Таблица</value>\n  </data>\n  <data name=\"DBConnection.Text\" xml:space=\"preserve\">\n    <value>Соединение</value>\n  </data>\n  <data name=\"textBoxSqlPassword.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 20</value>\n  </data>\n  <data name=\"label11.Text\" xml:space=\"preserve\">\n    <value>Пароль:</value>\n  </data>\n  <data name=\"textBoxSqlUser.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>98, 63</value>\n  </data>\n  <data name=\"textBoxSqlUser.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>139, 20</value>\n  </data>\n  <data name=\"label10.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>90, 23</value>\n  </data>\n  <data name=\"label10.Text\" xml:space=\"preserve\">\n    <value>Пользователь:</value>\n  </data>\n  <data name=\"label8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>47, 13</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Сервер:</value>\n  </data>\n  <data name=\"buttonDatabaseSearch.Text\" xml:space=\"preserve\">\n    <value>Найти базы данных</value>\n  </data>\n  <data name=\"comboServerList.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>98, 21</value>\n  </data>\n  <data name=\"comboServerList.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>268, 21</value>\n  </data>\n  <data name=\"label9.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 13</value>\n  </data>\n  <data name=\"label9.Text\" xml:space=\"preserve\">\n    <value>База данных:</value>\n  </data>\n  <data name=\"buttonSearchSqlServers.Text\" xml:space=\"preserve\">\n    <value>Найти сервера</value>\n  </data>\n  <data name=\"comboDatabaseList.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>98, 92</value>\n  </data>\n  <data name=\"comboDatabaseList.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>268, 21</value>\n  </data>\n  <data name=\"buttonSqliteSelectDatabase.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>309, 104</value>\n  </data>\n  <data name=\"buttonSqliteSelectDatabase.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>203, 23</value>\n  </data>\n  <data name=\"buttonSqliteSelectDatabase.Text\" xml:space=\"preserve\">\n    <value>Выбрать файл базы данных SQLite</value>\n  </data>\n  <data name=\"bShared.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>216, 53</value>\n  </data>\n  <data name=\"bTestConnection.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>138, 23</value>\n  </data>\n  <data name=\"bTestConnection.Text\" xml:space=\"preserve\">\n    <value>Проверить соединение</value>\n  </data>\n  <data name=\"cbOdbcNames.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>360, 16</value>\n  </data>\n  <data name=\"lODBC.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>246, 16</value>\n  </data>\n  <data name=\"lODBC.Text\" xml:space=\"preserve\">\n    <value>Источник ODBC</value>\n  </data>\n  <data name=\"lODBC.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleRight</value>\n  </data>\n  <data name=\"lConnection.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 53</value>\n  </data>\n  <data name=\"lConnection.Text\" xml:space=\"preserve\">\n    <value>Строка соединения:</value>\n  </data>\n  <data name=\"label7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>90, 23</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Тип соединения</value>\n  </data>\n  <data name=\"label7.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleRight</value>\n  </data>\n  <data name=\"tbConnection.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>496, 20</value>\n  </data>\n  <data name=\"ReportParameters.Text\" xml:space=\"preserve\">\n    <value>Параметры</value>\n  </data>\n  <data name=\"TabularGroup.Text\" xml:space=\"preserve\">\n    <value>Итоги</value>\n  </data>\n  <data name=\"clbSubtotal.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>235, 42</value>\n  </data>\n  <data name=\"ckbGrandTotal.Text\" xml:space=\"preserve\">\n    <value>Подсчитать общие итоги</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>Отметьте столбцы мер</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>200, 32</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Выбрать столбец для группировки (создать иерархию)</value>\n  </data>\n  <data name=\"cbColumnList.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 51</value>\n  </data>\n  <data name=\"ReportSyntax.Text\" xml:space=\"preserve\">\n    <value>Код</value>\n  </data>\n  <data name=\"ReportPreview.Text\" xml:space=\"preserve\">\n    <value>Просмотр</value>\n  </data>\n  <data name=\"btnCancel.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Создание отчёта</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DialogEmbeddedImages.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    internal partial class DialogEmbeddedImages : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tDesignXmlDraw _Draw;\nprivate System.Windows.Forms.Button bOK;\nprivate System.Windows.Forms.Button bCancel;\nprivate System.Windows.Forms.Button bRemove;\nprivate System.Windows.Forms.Label label1;\nprivate System.Windows.Forms.Label lDataProvider;\nprivate System.Windows.Forms.ListBox lbImages;\nprivate System.Windows.Forms.Button bImport;\nprivate System.Windows.Forms.TextBox tbEIName;\nprivate System.Windows.Forms.Button bPaste;\nprivate System.Windows.Forms.PictureBox pictureImage;\nprivate System.Windows.Forms.Label lbMIMEType;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DialogEmbeddedImages));\n\t\t\tthis.lDataProvider = new System.Windows.Forms.Label();\n\t\t\tthis.bOK = new System.Windows.Forms.Button();\n\t\t\tthis.bCancel = new System.Windows.Forms.Button();\n\t\t\tthis.lbImages = new System.Windows.Forms.ListBox();\n\t\t\tthis.bRemove = new System.Windows.Forms.Button();\n\t\t\tthis.bImport = new System.Windows.Forms.Button();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.tbEIName = new System.Windows.Forms.TextBox();\n\t\t\tthis.bPaste = new System.Windows.Forms.Button();\n\t\t\tthis.lbMIMEType = new System.Windows.Forms.Label();\n\t\t\tthis.pictureImage = new System.Windows.Forms.PictureBox();\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.pictureImage)).BeginInit();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// lDataProvider\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lDataProvider, \"lDataProvider\");\n\t\t\tthis.lDataProvider.Name = \"lDataProvider\";\n\t\t\t// \n\t\t\t// bOK\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bOK, \"bOK\");\n\t\t\tthis.bOK.Name = \"bOK\";\n\t\t\tthis.bOK.Click += new System.EventHandler(this.bOK_Click);\n\t\t\t// \n\t\t\t// bCancel\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCancel, \"bCancel\");\n\t\t\tthis.bCancel.CausesValidation = false;\n\t\t\tthis.bCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n\t\t\tthis.bCancel.Name = \"bCancel\";\n\t\t\t// \n\t\t\t// lbImages\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lbImages, \"lbImages\");\n\t\t\tthis.lbImages.Name = \"lbImages\";\n\t\t\tthis.lbImages.SelectedIndexChanged += new System.EventHandler(this.lbImages_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// bRemove\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bRemove, \"bRemove\");\n\t\t\tthis.bRemove.Name = \"bRemove\";\n\t\t\tthis.bRemove.Click += new System.EventHandler(this.bRemove_Click);\n\t\t\t// \n\t\t\t// bImport\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bImport, \"bImport\");\n\t\t\tthis.bImport.Name = \"bImport\";\n\t\t\tthis.bImport.Click += new System.EventHandler(this.bImport_Click);\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// tbEIName\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbEIName, \"tbEIName\");\n\t\t\tthis.tbEIName.Name = \"tbEIName\";\n\t\t\tthis.tbEIName.TextChanged += new System.EventHandler(this.tbEIName_TextChanged);\n\t\t\tthis.tbEIName.Validating += new System.ComponentModel.CancelEventHandler(this.tbEIName_Validating);\n\t\t\t// \n\t\t\t// bPaste\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bPaste, \"bPaste\");\n\t\t\tthis.bPaste.Name = \"bPaste\";\n\t\t\tthis.bPaste.Click += new System.EventHandler(this.bPaste_Click);\n\t\t\t// \n\t\t\t// lbMIMEType\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lbMIMEType, \"lbMIMEType\");\n\t\t\tthis.lbMIMEType.Name = \"lbMIMEType\";\n\t\t\t// \n\t\t\t// pictureImage\n\t\t\t// \n\t\t\tresources.ApplyResources(this.pictureImage, \"pictureImage\");\n\t\t\tthis.pictureImage.Name = \"pictureImage\";\n\t\t\tthis.pictureImage.TabStop = false;\n\t\t\t// \n\t\t\t// DialogEmbeddedImages\n\t\t\t// \n\t\t\tthis.AcceptButton = this.bOK;\n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.CancelButton = this.bCancel;\n\t\t\tthis.Controls.Add(this.lbMIMEType);\n\t\t\tthis.Controls.Add(this.pictureImage);\n\t\t\tthis.Controls.Add(this.bPaste);\n\t\t\tthis.Controls.Add(this.tbEIName);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Controls.Add(this.bRemove);\n\t\t\tthis.Controls.Add(this.bImport);\n\t\t\tthis.Controls.Add(this.lbImages);\n\t\t\tthis.Controls.Add(this.bCancel);\n\t\t\tthis.Controls.Add(this.bOK);\n\t\t\tthis.Controls.Add(this.lDataProvider);\n\t\t\tthis.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n\t\t\tthis.MaximizeBox = false;\n\t\t\tthis.MinimizeBox = false;\n\t\t\tthis.Name = \"DialogEmbeddedImages\";\n\t\t\tthis.ShowInTaskbar = false;\n\t\t\tthis.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.pictureImage)).EndInit();\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/DialogEmbeddedImages.cs",
    "content": "using System;\nusing System.Drawing;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing System.Text;\nusing System.Xml;\nusing System.IO;\nusing System.Drawing.Imaging;\nusing System.Text.RegularExpressions;\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// Summary description for DialogDataSourceRef.\n    /// </summary>\n    internal partial class DialogEmbeddedImages \n    {\n        public DialogEmbeddedImages(DesignXmlDraw draw)\n        {\n            _Draw = draw;\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            InitValues();\n        }\n\n        private void InitValues()\n        {\n            //\n            // Obtain the existing DataSets info\n            //\n            XmlNode rNode = _Draw.GetReportNode();\n            XmlNode eiNode = _Draw.GetNamedChildNode(rNode, \"EmbeddedImages\");\n            if (eiNode == null)\n                return;\n            foreach (XmlNode iNode in eiNode)\n            {\n                if (iNode.Name != \"EmbeddedImage\")\n                    continue;\n                XmlAttribute nAttr = iNode.Attributes[\"Name\"];\n                if (nAttr == null)\t// shouldn't really happen\n                    continue;\n\n                EmbeddedImageValues eiv = new EmbeddedImageValues(nAttr.Value);\n                eiv.MIMEType = _Draw.GetElementValue(iNode, \"MIMEType\", \"image/png\");\n                eiv.ImageData = _Draw.GetElementValue(iNode, \"ImageData\", \"\");\n                this.lbImages.Items.Add(eiv);\n            }\n            if (lbImages.Items.Count > 0)\n                lbImages.SelectedIndex = 0;\n            else\n                this.bOK.Enabled = false;\n        }\n\n        public void Apply()\n        {\n            XmlNode rNode = _Draw.GetReportNode();\n            _Draw.RemoveElement(rNode, \"EmbeddedImages\");\t// remove old EmbeddedImages\n            if (this.lbImages.Items.Count <= 0)\n                return;\t\t\t// nothing in list?  all done\n\n            XmlNode eiNode = _Draw.SetElement(rNode, \"EmbeddedImages\", null);\n            foreach (EmbeddedImageValues eiv in lbImages.Items)\n            {\n                if (eiv.Name == null || eiv.Name.Length <= 0)\n                    continue;\t\t\t\t\t// shouldn't really happen\n                XmlNode iNode = _Draw.CreateElement(eiNode, \"EmbeddedImage\", null);\n\n                // Create the name attribute\n                _Draw.SetElementAttribute(iNode, \"Name\", eiv.Name);\n                _Draw.SetElement(iNode, \"MIMEType\", eiv.MIMEType);\n                _Draw.SetElement(iNode, \"ImageData\", eiv.ImageData);\n            }\n        }\n\n        private void bPaste_Click(object sender, System.EventArgs e)\n        {\n            // Make sure we have an image on the clipboard\n            IDataObject iData = Clipboard.GetDataObject();\n            if (iData == null || !iData.GetDataPresent(DataFormats.Bitmap))\n            {\n                MessageBox.Show(this, Strings.DialogEmbeddedImages_ShowE_CopyImageBeforePaste, Strings.DialogEmbeddedImages_ShowE_Image);\n                return;\n            }\n\n            System.Drawing.Bitmap img = (System.Drawing.Bitmap)iData.GetData(DataFormats.Bitmap);\n\n            // convert the image to the png format and create a base 64\tstring representation\n            string imagedata = GetBase64Image(img);\n            img.Dispose();\n\n            if (imagedata == null)\n                return;\n\n            EmbeddedImageValues eiv = new EmbeddedImageValues(\"embeddedimage\");\n            eiv.MIMEType = \"image/png\";\n            eiv.ImageData = imagedata;\n            int cur = this.lbImages.Items.Add(eiv);\n\n            lbImages.SelectedIndex = cur;\n\n            this.tbEIName.Focus();\n        }\n\n        private void bImport_Click(object sender, System.EventArgs e)\n        {\n            OpenFileDialog ofd = new OpenFileDialog();\n            ofd.Filter = Strings.DialogEmbeddedImages_bImport_Click_ImageFilesFilter;\n            ofd.FilterIndex = 6;\n            ofd.CheckFileExists = true;\n            ofd.Multiselect = true;\n            try\n            {\n                if (ofd.ShowDialog(this) != DialogResult.OK)\n                    return;\n\n                // need to create a new embedded image(s)\n                int cur = 0;\n                foreach (string filename in ofd.FileNames)\n                {\n                    Stream strm = null;\n                    System.Drawing.Image im = null;\n                    string imagedata = null;\n                    try\n                    {\n                        strm = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);\n                        im = System.Drawing.Image.FromStream(strm);\n                        imagedata = this.GetBase64Image(im);\n                    }\n                    catch (Exception ex)\n                    {\n\t\t\t\t\t\tMessageBox.Show(this, ex.Message, Strings.DialogEmbeddedImages_ShowE_Image);\n                    }\n                    finally\n                    {\n                        if (strm != null)\n                            strm.Close();\n                        if (im != null)\n                            im.Dispose();\n                    }\n\n                    if (imagedata != null)\n                    {\n                        FileInfo fi = new FileInfo(filename);\n\n                        string fname;\n                        int offset = fi.Name.IndexOf('.');\n                        if (offset >= 0)\n                            fname = fi.Name.Substring(0, offset);\n                        else\n                            fname = fi.Name;\n\n                        if (!ReportNames.IsNameValid(fname))\n                            fname = \"embeddedimage\";\n                        // Now check to see if we already have one with that name\n                        int index = 1;\n                        bool bDup = true;\n                        while (bDup)\n                        {\n                            bDup = false;\n                            foreach (EmbeddedImageValues ev in lbImages.Items)\n                            {\n                                if (fname == ev.Name)\n                                {\n                                    bDup = true;\n                                    break;\n                                }\n                            }\n                            if (bDup)\n                            {\t// we have a duplicate name; try adding an index number\n                                fname = Regex.Replace(fname, \"[0-9]*\", \"\");\t\t// remove old numbers (side effect removes all numbers)\n                                fname += index.ToString();\n                                index++;\n                            }\n                        }\n\n                        EmbeddedImageValues eiv = new EmbeddedImageValues(fname);\n                        eiv.MIMEType = \"image/png\";\n                        eiv.ImageData = imagedata;\n                        cur = this.lbImages.Items.Add(eiv);\n                    }\n                }\n                lbImages.SelectedIndex = cur;\n            }\n            finally\n            {\n                ofd.Dispose();\n            }\n            this.tbEIName.Focus();\n        }\n\n        private void bRemove_Click(object sender, System.EventArgs e)\n        {\n            int cur = lbImages.SelectedIndex;\n            if (cur < 0)\n                return;\n            lbImages.Items.RemoveAt(cur);\n            if (lbImages.Items.Count <= 0)\n                return;\n            cur--;\n            if (cur < 0)\n                cur = 0;\n            lbImages.SelectedIndex = cur;\n        }\n\n        private void lbImages_SelectedIndexChanged(object sender, System.EventArgs e)\n        {\n            int cur = lbImages.SelectedIndex;\n            if (cur < 0)\n                return;\n\n            EmbeddedImageValues eiv = lbImages.Items[cur] as EmbeddedImageValues;\n            if (eiv == null)\n                return;\n\n            tbEIName.Text = eiv.Name;\n            lbMIMEType.Text = eiv.MIMEType;\n            this.pictureImage.Image = GetImage(eiv.ImageData);\n        }\n\n        private Image GetImage(string imdata)\n        {\n            byte[] ba = Convert.FromBase64String(imdata);\n\n            Stream strm = null;\n            System.Drawing.Image im = null;\n            try\n            {\n                strm = new MemoryStream(ba);\n                im = System.Drawing.Image.FromStream(strm);\n            }\n            catch (Exception e)\n            {\n                MessageBox.Show(this, e.Message, Strings.DialogEmbeddedImages_ShowE_ErrorConvertingImage);\n            }\n            finally\n            {\n                if (strm != null)\n                    strm.Close();\n            }\n            return im;\n        }\n\n        private string GetBase64Image(Image img)\n        {\n            string imagedata = null;\n            try\n            {\n                MemoryStream ostrm = new MemoryStream();\n                ImageFormat imf = ImageFormat.Png;\n                img.Save(ostrm, imf);\n                byte[] ba = ostrm.ToArray();\n                ostrm.Close();\n                imagedata = Convert.ToBase64String(ba);\n            }\n            catch (Exception ex)\n            {\n\t\t\t\tMessageBox.Show(this, ex.Message, Strings.DialogEmbeddedImages_ShowE_Image);\n                imagedata = null;\n            }\n            return imagedata;\n        }\n\n        private void tbEIName_TextChanged(object sender, System.EventArgs e)\n        {\n            int cur = lbImages.SelectedIndex;\n            if (cur < 0)\n                return;\n\n            EmbeddedImageValues eiv = lbImages.Items[cur] as EmbeddedImageValues;\n            if (eiv == null)\n                return;\n\n            if (eiv.Name == tbEIName.Text)\n                return;\n\n            eiv.Name = tbEIName.Text;\n            // text doesn't change in listbox; force change by removing and re-adding item\n            lbImages.BeginUpdate();\n            lbImages.Items.RemoveAt(cur);\n            lbImages.Items.Insert(cur, eiv);\n            lbImages.SelectedIndex = cur;\n            lbImages.EndUpdate();\n\n        }\n\n        private void bOK_Click(object sender, System.EventArgs e)\n        {\n            // Verify there are no duplicate names in the embedded list\n            Hashtable ht = new Hashtable(lbImages.Items.Count + 1);\n            foreach (EmbeddedImageValues eiv in lbImages.Items)\n            {\n                if (eiv.Name == null || eiv.Name.Length == 0)\n                {\n\t\t\t\t\tMessageBox.Show(this, Strings.DialogEmbeddedImages_ShowE_NameMustSpecified, Strings.DialogEmbeddedImages_ShowE_Image);\n                    return;\n                }\n\n                if (!ReportNames.IsNameValid(eiv.Name))\n                {\n                    MessageBox.Show(this,\n\t\t\t\t\t\tstring.Format(Strings.DialogEmbeddedImages_ShowE_NameInvalid, eiv.Name), Strings.DialogEmbeddedImages_ShowE_Image);\n                    return;\n                }\n\n                string name = (string)ht[eiv.Name];\n                if (name != null)\n                {\n                    MessageBox.Show(this,\n\t\t\t\t\t\tstring.Format(Strings.DialogEmbeddedImages_ShowE_ImageMustUniqueName, eiv.Name), Strings.DialogEmbeddedImages_ShowE_Image);\n                    return;\n                }\n                ht.Add(eiv.Name, eiv.Name);\n            }\n\n            Apply();\n            DialogResult = DialogResult.OK;\n        }\n\n        private void tbEIName_Validating(object sender, System.ComponentModel.CancelEventArgs e)\n        {\n            if (!ReportNames.IsNameValid(tbEIName.Text))\n            {\n                e.Cancel = true;\n                MessageBox.Show(this,\n\t\t\t\t\tstring.Format(Strings.DialogEmbeddedImages_ShowE_NameInvalid, tbEIName.Text), Strings.DialogEmbeddedImages_ShowE_Image);\n            }\n        }\n    }\n\n    class EmbeddedImageValues\n    {\n        string _Name;\n        string _ImageData;\t\t// the embedded image value\n        string _MIMEType;\n\n        public EmbeddedImageValues(string name)\n        {\n            _Name = name;\n        }\n\n        internal string Name\n        {\n            get { return _Name; }\n            set { _Name = value; }\n        }\n\n        internal string ImageData\n        {\n            get { return _ImageData; }\n            set { _ImageData = value; }\n        }\n\n        internal string MIMEType\n        {\n            get { return _MIMEType; }\n            set { _MIMEType = value; }\n        }\n\n        override public string ToString()\n        {\n            return _Name;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/DialogEmbeddedImages.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Embedded Image Name</value>\n  </data>\n  <data name=\"&gt;&gt;lbMIMEType.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bImport.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>144, 8</value>\n  </data>\n  <data name=\"lbImages.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>120, 95</value>\n  </data>\n  <data name=\"&gt;&gt;bImport.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"lbImages.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"lbMIMEType.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>296, 72</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;bImport.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bCancel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"bRemove.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 23</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>272, 344</value>\n  </data>\n  <data name=\"bPaste.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>144, 44</value>\n  </data>\n  <data name=\"&gt;&gt;bPaste.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;bRemove.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lDataProvider.Name\" xml:space=\"preserve\">\n    <value>lDataProvider</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"pictureImage.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Bottom, Left, Right</value>\n  </data>\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"pictureImage.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 120</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;bRemove.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>22</value>\n  </data>\n  <data name=\"&gt;&gt;tbEIName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Name\" xml:space=\"preserve\">\n    <value>bCancel</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>136, 23</value>\n  </data>\n  <data name=\"&gt;&gt;lbImages.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbEIName.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"lbMIMEType.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 23</value>\n  </data>\n  <data name=\"&gt;&gt;lDataProvider.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DialogEmbeddedImages</value>\n  </data>\n  <data name=\"bRemove.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>144, 80</value>\n  </data>\n  <data name=\"&gt;&gt;bRemove.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"pictureImage.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>424, 208</value>\n  </data>\n  <data name=\"&gt;&gt;bPaste.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bPaste.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 23</value>\n  </data>\n  <data name=\"&gt;&gt;tbEIName.Name\" xml:space=\"preserve\">\n    <value>tbEIName</value>\n  </data>\n  <data name=\"&gt;&gt;lbMIMEType.Name\" xml:space=\"preserve\">\n    <value>lbMIMEType</value>\n  </data>\n  <data name=\"lbMIMEType.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>25</value>\n  </data>\n  <data name=\"lDataProvider.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>216, 72</value>\n  </data>\n  <data name=\"bPaste.Text\" xml:space=\"preserve\">\n    <value>Paste</value>\n  </data>\n  <data name=\"&gt;&gt;pictureImage.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;pictureImage.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <data name=\"lDataProvider.Text\" xml:space=\"preserve\">\n    <value>MIME Type:</value>\n  </data>\n  <data name=\"&gt;&gt;pictureImage.Name\" xml:space=\"preserve\">\n    <value>pictureImage</value>\n  </data>\n  <data name=\"bImport.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lbImages.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;bImport.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"lbImages.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 8</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"bPaste.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"&gt;&gt;pictureImage.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;bRemove.Name\" xml:space=\"preserve\">\n    <value>bRemove</value>\n  </data>\n  <data name=\"pictureImage.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>24</value>\n  </data>\n  <data name=\"bRemove.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;bPaste.Name\" xml:space=\"preserve\">\n    <value>bPaste</value>\n  </data>\n  <data name=\"&gt;&gt;bPaste.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lDataProvider.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbEIName.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"lDataProvider.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 23</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>216, 8</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Embedded Images</value>\n  </data>\n  <data name=\"tbEIName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>216, 24</value>\n  </data>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"&gt;&gt;lDataProvider.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;bImport.Name\" xml:space=\"preserve\">\n    <value>bImport</value>\n  </data>\n  <data name=\"tbEIName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 20</value>\n  </data>\n  <data name=\"lDataProvider.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"bImport.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"bRemove.Text\" xml:space=\"preserve\">\n    <value>Remove</value>\n  </data>\n  <data name=\"&gt;&gt;lbMIMEType.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lbMIMEType.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bImport.Text\" xml:space=\"preserve\">\n    <value>Import...</value>\n  </data>\n  <data name=\"bCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>368, 344</value>\n  </data>\n  <data name=\"&gt;&gt;lbImages.Name\" xml:space=\"preserve\">\n    <value>lbImages</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>456, 374</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lbMIMEType.Text\" xml:space=\"preserve\">\n    <value>image/png</value>\n  </data>\n  <data name=\"&gt;&gt;lbImages.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbEIName.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/DialogEmbeddedImages.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"lDataProvider.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"lDataProvider.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>230, 71</value>\n  </data>\n  <data name=\"bOK.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"bCancel.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"bRemove.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"bRemove.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>71, 23</value>\n  </data>\n  <data name=\"bRemove.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"bImport.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"bImport.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>71, 23</value>\n  </data>\n  <data name=\"bImport.Text\" xml:space=\"preserve\">\n    <value>Импорт...</value>\n  </data>\n  <data name=\"label1.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>230, 8</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 23</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Название встроенного изображения</value>\n  </data>\n  <data name=\"tbEIName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>230, 24</value>\n  </data>\n  <data name=\"tbEIName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>199, 20</value>\n  </data>\n  <data name=\"bPaste.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"bPaste.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>71, 23</value>\n  </data>\n  <data name=\"bPaste.Text\" xml:space=\"preserve\">\n    <value>Вставить</value>\n  </data>\n  <data name=\"lbMIMEType.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"lbMIMEType.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>310, 71</value>\n  </data>\n  <data name=\"pictureImage.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"$this.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Встроенные изображения</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DialogExprEditor.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    public partial class DialogExprEditor : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tprivate DesignXmlDraw _Draw;\nprivate SplitContainer splitContainer1;\nprivate Button bCopy;\nprivate Label lOp;\nprivate Label lExpr;\nprivate TreeView tvOp;\nprivate Panel panel1;\nprivate Button bCancel;\nprivate Button bOK;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DialogExprEditor));\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.tvOp = new System.Windows.Forms.TreeView();\n            this.bCopy = new System.Windows.Forms.Button();\n            this.lOp = new System.Windows.Forms.Label();\n            this.scintilla1 = new ScintillaNET.Scintilla();\n            this.lExpr = new System.Windows.Forms.Label();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.bCancel = new System.Windows.Forms.Button();\n            this.bOK = new System.Windows.Forms.Button();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            resources.ApplyResources(this.splitContainer1, \"splitContainer1\");\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.Controls.Add(this.tvOp);\n            this.splitContainer1.Panel1.Controls.Add(this.bCopy);\n            this.splitContainer1.Panel1.Controls.Add(this.lOp);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.scintilla1);\n            this.splitContainer1.Panel2.Controls.Add(this.lExpr);\n            // \n            // tvOp\n            // \n            resources.ApplyResources(this.tvOp, \"tvOp\");\n            this.tvOp.Name = \"tvOp\";\n            this.tvOp.DoubleClick += new System.EventHandler(this.tvOp_DoubleClick);\n            // \n            // bCopy\n            // \n            resources.ApplyResources(this.bCopy, \"bCopy\");\n            this.bCopy.Name = \"bCopy\";\n            this.bCopy.Click += new System.EventHandler(this.bCopy_Click);\n            // \n            // lOp\n            // \n            resources.ApplyResources(this.lOp, \"lOp\");\n            this.lOp.Name = \"lOp\";\n            // \n            // scintilla1\n            // \n            resources.ApplyResources(this.scintilla1, \"scintilla1\");\n            this.scintilla1.HScrollBar = false;\n            this.scintilla1.Lexer = ScintillaNET.Lexer.VbScript;\n            this.scintilla1.Name = \"scintilla1\";\n            this.scintilla1.WrapMode = ScintillaNET.WrapMode.Word;\n            // \n            // lExpr\n            // \n            resources.ApplyResources(this.lExpr, \"lExpr\");\n            this.lExpr.Name = \"lExpr\";\n            // \n            // panel1\n            // \n            resources.ApplyResources(this.panel1, \"panel1\");\n            this.panel1.Controls.Add(this.bCancel);\n            this.panel1.Controls.Add(this.bOK);\n            this.panel1.Name = \"panel1\";\n            // \n            // bCancel\n            // \n            resources.ApplyResources(this.bCancel, \"bCancel\");\n            this.bCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.bCancel.Name = \"bCancel\";\n            // \n            // bOK\n            // \n            resources.ApplyResources(this.bOK, \"bOK\");\n            this.bOK.DialogResult = System.Windows.Forms.DialogResult.OK;\n            this.bOK.Name = \"bOK\";\n            this.bOK.Click += new System.EventHandler(this.bOK_Click);\n            // \n            // DialogExprEditor\n            // \n            resources.ApplyResources(this, \"$this\");\n            this.CancelButton = this.bCancel;\n            this.Controls.Add(this.splitContainer1);\n            this.Controls.Add(this.panel1);\n            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;\n            this.MaximizeBox = false;\n            this.MinimizeBox = false;\n            this.Name = \"DialogExprEditor\";\n            this.ShowInTaskbar = false;\n            this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel1.ResumeLayout(false);\n            this.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\tprivate ScintillaNET.Scintilla scintilla1;\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/DialogExprEditor.cs",
    "content": "\nusing Majorsilence.Reporting.Rdl;\nusing ScintillaNET;\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Reflection;\nusing System.Text;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.Linq;\nusing Majorsilence.Reporting.RdlDesign.Syntax;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// DialogListOfStrings: puts up a dialog that lets a user enter a list of strings\n    /// </summary>\n    public partial class DialogExprEditor\n    {\n        Type[] BASE_TYPES = new Type[] \n      { \n         typeof(string), \n         typeof(double), \n         typeof(Single), \n         typeof(decimal), \n         typeof(DateTime), \n         typeof(char), \n         typeof(bool), \n         typeof(int), \n         typeof(short), \n         typeof(long), \n         typeof(byte), \n         typeof(UInt16), \n         typeof(UInt32), \n         typeof(UInt64) \n      };\n\n        // design draw \n        private bool _Color;\t\t\t\t// true if color list should be displayed\n\n\t\tRdlScriptLexer rdlLexer = new RdlScriptLexer();\n\n\t\tstring resultExpression = null; //It workaround System.AccessViolationException geting from Scintilla after form closed\n\n        internal DialogExprEditor(DesignXmlDraw dxDraw, string expr, XmlNode node) :\n            this(dxDraw, expr, node, false)\n        {\n        }\n\n        internal DialogExprEditor(DesignXmlDraw dxDraw, string expr, XmlNode node, bool bColor)\n        {\n            _Draw = dxDraw;\n            _Color = bColor;\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            var styling = new ScintillaExprStyle(rdlLexer, scintilla1);\n\t\t\tstyling.ConfigureScintillaStyle();\n\n            // Fill out the fields list \n            string[] fields = null;\n            // Find the dataregion that contains the item (if any)\n            for (XmlNode pNode = node; pNode != null; pNode = pNode.ParentNode)\n            {\n                if (pNode.Name == \"List\" ||\n                    pNode.Name == \"Table\" ||\n                    pNode.Name == \"Matrix\" ||\n                    pNode.Name == \"Chart\")\n                {\n                    string dsname = _Draw.GetDataSetNameValue(pNode);\n                    if (dsname != null)\t// found it\n                    {\n                        fields = _Draw.GetFields(dsname, true);\n                    }\n                }\n            }\n            BuildTree(fields);\n\t\t\tFillLexerByFields(_Draw);\n\n\t\t\tif (expr != null)\n\t\t\t\tscintilla1.Text = expr.Replace(\"\\r\\n\", \"\\n\").Replace(\"\\n\", Environment.NewLine);\n\n            return;\n        }\n\n\t\tvoid FillLexerByFields(DesignXmlDraw dxDraw)\n\t\t{\n\t\t\tvar fields = new List<string>();\n\t\t\tforeach (var dataSet in dxDraw.DataSetNames)\n\t\t\t{\n\t\t\t\tvar datasetFields = dxDraw.GetFields((string)dataSet, false);\n\t\t\t\tif(datasetFields != null)\n\t\t\t\t\tfields.AddRange(datasetFields);\n\t\t\t}\n\t\t\trdlLexer.SetFields(fields);\n\t\t}\n\n        void BuildTree(string[] flds)\n        {\n            // suppress redraw until tree view is complete\n            tvOp.BeginUpdate();\n\n            //AJM GJL Adding Missing 'User' Menu\n            // Handle the user\n            InitUsers();\n            // Handle the globals\n            InitGlobals();\n            // Fields - only when a dataset is specified\n            InitFields(flds);\n\t\t\t// Fields - is missing\n\t\t\tInitFieldsIsMissing(flds);\n            // Report parameters\n            InitReportParameters();\n            // Handle the functions\n            InitFunctions();\n            // Aggregate functions\n            InitAggrFunctions();\n            // Operators\n            InitOperators();\n            // Colors (if requested)\n            InitColors();\n            // Modules and class (if any)\n            // EBN 30/03/2014\n            InitReportModulesAndClass();\n\n            tvOp.EndUpdate();\n\n        }\n        // Josh: 6:22:10 Added as a uniform method of addind nodes to the TreeView.\n        void InitTreeNodes(string node, IEnumerable<string> list)\n        {\n            TreeNode ndRoot = new TreeNode(node);\n            tvOp.Nodes.Add(ndRoot);\n            foreach (string item in list)\n            {\n                TreeNode aRoot = new TreeNode(item);\n                ndRoot.Nodes.Add(aRoot);\n            }\n        }\n\n        // Josh: 6:22:10 Begin Init Methods.\n        // Methods have been changed to use InitTreeNodes\n        // and ArrayToFormattedList methods\n        // Initializes the user functions\n        void InitUsers()\n        {\n            List<string> users = StaticLists.ArrayToFormattedList(StaticLists.UserList, \"{!\", \"}\");\n            InitTreeNodes(\"User\", users);\n        }\n        // Initializes the Globals\n        void InitGlobals()\n        {\n            List<string> globals = StaticLists.ArrayToFormattedList(StaticLists.GlobalList, \"{@\", \"}\");\n            InitTreeNodes(\"Globals\", globals);\n        }\n        // Initializes the database fields\n        void InitFields(string[] flds)\n        {\n            if (flds != null && flds.Length > 0)\n            {\n                List<string> fields = StaticLists.ArrayToFormattedList(flds, \"{\", \"}\");\n                InitTreeNodes(\"Fields\", fields);\n            }\n        }\n\t\t// Initializes the database fields is missing\n\t\tvoid InitFieldsIsMissing(string[] flds)\n\t\t{\n\t\t\tif (flds != null && flds.Length > 0)\n\t\t\t{\n\t\t\t\tList<string> fields = StaticLists.ArrayToFormattedList(flds, \"Fields!\", \".IsMissing\");\n\t\t\t\tInitTreeNodes(\"Check for null\", fields);\n\t\t\t\t//fieldsKeys.AddRange(fields);\n\t\t\t}\n\t\t}\n        // Initializes the aggregate functions\n        void InitAggrFunctions()\n        {\n            InitTreeNodes(\"Aggregate Functions\", StaticLists.AggrFunctionList);\n        }\n        // Initializes the operators\n        void InitOperators()\n        {\n            InitTreeNodes(\"Operators\", StaticLists.OperatorList);\n        }\n        // Initializes the colors\n        void InitColors()\n        {\n            if (_Color)\n            {\n                InitTreeNodes(\"Colors\", StaticLists.ColorList);\n            }\n        }\n        /// <summary>\n        /// Populate tree view with the report parameters (if any)\n        /// </summary>\n        void InitReportParameters()\n        {\n            string[] ps = _Draw.GetReportParameters(true);\n\n            if (ps != null && ps.Length != 0)\n            {\n                List<string> parameters = StaticLists.ArrayToFormattedList(ps, \"{?\", \"}\");\n                InitTreeNodes(\"Parameters\", parameters);\n\t\t\t\trdlLexer.SetParameters(StaticLists.ArrayToFormattedList(ps, \"\", \"\"));\n            }\n        }\n\n\n        /// <summary>\n        /// Populate tree view with the Module and Class parameters (if any)\n        /// EBN 30/03/2014\n        /// </summary>\n        void InitReportModulesAndClass()\n        {\n            string[] ms = _Draw.GetReportModules(false);\n            string[] qs = _Draw.GetReportClasses(false);\n            List<string> mc = new List<string>();\n            if (ms == null) return;\n            if (qs == null) return;\n\n            // Try to load the assembly if not already loaded\n            foreach (string s in ms)\n            {\n                try\n                {\n                    Assembly a = Assembly.LoadFrom(s);\n                    foreach (string c in qs)\n                    {\n                        Type t = a.GetType(c);\n                        if (t != null)\n                        {\n                            // Class is found in this assembly\n                            BuildMethods(mc, t, c + \".\");\n                        }\n                    }\n                }\n                catch\n                {\n                    // Nothing to do, we can not load the assembly...\n                }\n            }\n\n\n            if (qs != null && qs.Length != 0)\n            {\n                InitTreeNodes(\"Modules\", mc);\n            }\n        }\n\n        //Done: Look at grouping items, such as Math, Financial, etc\n        // Josh: 6:21:10 added grouping for common items.\n        void InitFunctions()\n        {\n            List<string> ar = new List<string>();\n\n            ar.AddRange(StaticLists.FunctionList);\n\n            // Build list of methods in the VBFunctions class\n            Majorsilence.Reporting.Rdl.FontStyleEnum fsi = FontStyleEnum.Italic; // just want a class from RdlEngine.dll assembly\n            Assembly a = Assembly.GetAssembly(fsi.GetType());\n            if (a == null)\n                return;\n            Type ft = a.GetType(\"Majorsilence.Reporting.Rdl.VBFunctions\");\n            BuildMethods(ar, ft, \"\");\n\n            // build list of financial methods in Financial class\n            ft = a.GetType(\"Majorsilence.Reporting.Rdl.Financial\");\n            BuildMethods(ar, ft, \"Financial.\");\n\n            a = Assembly.GetAssembly(\"\".GetType());\n            ft = a.GetType(\"System.Math\");\n            BuildMethods(ar, ft, \"Math.\");\n\n            ft = a.GetType(\"System.Convert\");\n            BuildMethods(ar, ft, \"Convert.\");\n\n            ft = a.GetType(\"System.String\");\n            BuildMethods(ar, ft, \"String.\");\n\n            ar.Sort();\n\n            TreeNode ndRoot = new TreeNode(\"Functions\");\n            tvOp.Nodes.Add(ndRoot);\n\n            foreach (TreeNode node in GroupMethods(RemoveDuplicates(ar)))\n            {\n                ndRoot.Nodes.Add(node);\n            }\n        }\n        // Josh: 6:22:10 End Init Methods\n\n        List<string> RemoveDuplicates(IEnumerable<string> ar)\n        {\n            List<string> newAr = new List<string>();\n            string previous = \"\";\n            foreach (string str in ar)\n            {\n                if (str != previous)\n                    newAr.Add(str);\n\n                previous = str;\n            }\n\n            return newAr;\n        }\n\n        List<TreeNode> GroupMethods(List<string> ar)\n        {\n            List<TreeNode> nodeList = new List<TreeNode>();\n\n            string group = \" \";\n            foreach (string str in ar)\n            {\n                if (!str.StartsWith(group))\n                {\n                    if (str.Contains(\".\"))\n                    {\n                        if (str.IndexOf(\"(\") > str.IndexOf(\".\"))\n                        {\n                            group = str.Split('.')[0];\n                            TreeNode aRoot = new TreeNode(group);\n                            List<string> groupList = ar.FindAll(\n                            delegate(string methodName)\n                            {\n                                return methodName.StartsWith(group);\n                            }\n                            );\n\n                            if (groupList != null)\n                            {\n                                foreach (string method in groupList)\n                                {\n                                    aRoot.Nodes.Add(new TreeNode(\n                                    method.Replace(group, string.Empty)\n                                    .Replace(\".\", string.Empty)));\n                                }\n                            }\n                            nodeList.Add(aRoot);\n                        }\n                        else\n                        {\n                            nodeList.Add(new TreeNode(str));\n                        }\n                    }\n                    else\n                    {\n                        nodeList.Add(new TreeNode(str));\n                    }\n                }\n            }\n            return nodeList;\n        }\n\n        void InitFunctions(TreeNode ndRoot)\n        {\n            List<string> ar = new List<string>();\n\n            ar.AddRange(StaticLists.FunctionList);\n\n            // Build list of methods in the  VBFunctions class\n            Majorsilence.Reporting.Rdl.FontStyleEnum fsi = FontStyleEnum.Italic;\t// just want a class from RdlEngine.dll assembly\n            Assembly a = Assembly.GetAssembly(fsi.GetType());\n            if (a == null)\n                return;\n            Type ft = a.GetType(\"Majorsilence.Reporting.Rdl.VBFunctions\");\n            BuildMethods(ar, ft, \"\");\n\n            // build list of financial methods in Financial class\n            ft = a.GetType(\"Majorsilence.Reporting.Rdl.Financial\");\n            BuildMethods(ar, ft, \"Financial.\");\n\n            a = Assembly.GetAssembly(\"\".GetType());\n            ft = a.GetType(\"System.Math\");\n            BuildMethods(ar, ft, \"Math.\");\n\n            ft = a.GetType(\"System.Convert\");\n            BuildMethods(ar, ft, \"Convert.\");\n\n            ft = a.GetType(\"System.String\");\n            BuildMethods(ar, ft, \"String.\");\n\n            ar.Sort();\n            string previous = \"\";\n            foreach (string item in ar)\n            {\n                if (item != previous)\t// don't add duplicates\n                {\n                    // Add the node to the tree\n                    TreeNode aRoot = new TreeNode(item);\n                    ndRoot.Nodes.Add(aRoot);\n                }\n                previous = item;\n            }\n\n        }\n\n        void BuildMethods(List<string> ar, Type ft, string prefix)\n        {\n            if (ft == null)\n                return;\n            MethodInfo[] mis = ft.GetMethods(BindingFlags.Static | BindingFlags.Public);\n            foreach (MethodInfo mi in mis)\n            {\n                // Add the node to the tree\n                string name = BuildMethodName(mi);\n                if (name != null)\n                    ar.Add(prefix + name);\n            }\n        }\n\n        string BuildMethodName(MethodInfo mi)\n        {\n            StringBuilder sb = new StringBuilder(mi.Name);\n            sb.Append(\"(\");\n            ParameterInfo[] pis = mi.GetParameters();\n            bool bFirst = true;\n            foreach (ParameterInfo pi in pis)\n            {\n                if (!IsBaseType(pi.ParameterType))\n                    return null;\n                if (bFirst)\n                    bFirst = false;\n                else\n                    sb.Append(\", \");\n                sb.Append(pi.Name);\n            }\n            sb.Append(\")\");\n            return sb.ToString();\n        }\n\n        // Determines if underlying type is a primitive\n        bool IsBaseType(Type t)\n        {\n            foreach (Type bt in BASE_TYPES)\n            {\n                if (bt == t)\n                    return true;\n            }\n\n            return false;\n        }\n\n        public string Expression\n        {\n            get { return resultExpression != null ? resultExpression : scintilla1.Text; }\n        }\n\n        private void bCopy_Click(object sender, System.EventArgs e)\n        {\n            if (tvOp.SelectedNode == null ||\n            tvOp.SelectedNode.Parent == null ||\n            tvOp.SelectedNode.Nodes.Count > 0)\n                return; // this is the top level nodes (Fields, Parameters, ...)\n\n            TreeNode node = tvOp.SelectedNode;\n            string t = string.Empty;\n            // Josh: 6:21:10 Changed to add parent node name for grouped nodes (eg: Convert.ToByte(value))\n            // and not to add it for the root functions (the non grouped).\n            if (tvOp.Nodes.Contains(node.Parent))\n                t = node.Text;\n            else\n                t = node.Parent.Text + \".\" + node.Text;\n\n            if (scintilla1.TextLength == 0)\n                t = \"=\" + t;\n            scintilla1.ReplaceSelection(t);\n        }\n\n\t\tprivate void tvOp_DoubleClick(object sender, EventArgs e)\n\t\t{\n\t\t\tbCopy.PerformClick();\n\t\t}\n\n\t\tprivate void bOK_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tresultExpression = scintilla1.Text;\n\t\t}\n    }\n\n}\n"
  },
  {
    "path": "RdlDesign/DialogExprEditor.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"splitContainer1.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Bottom, Left, Right</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"splitContainer1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"tvOp.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Bottom, Left, Right</value>\n  </data>\n  <data name=\"tvOp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 29</value>\n  </data>\n  <data name=\"tvOp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>261, 235</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"tvOp.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;tvOp.Name\" xml:space=\"preserve\">\n    <value>tvOp</value>\n  </data>\n  <data name=\"&gt;&gt;tvOp.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tvOp.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel1</value>\n  </data>\n  <data name=\"&gt;&gt;tvOp.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"bCopy.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"bCopy.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>229, 0</value>\n  </data>\n  <data name=\"bCopy.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 23</value>\n  </data>\n  <data name=\"bCopy.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"bCopy.Text\" xml:space=\"preserve\">\n    <value>&gt;&gt;</value>\n  </data>\n  <data name=\"&gt;&gt;bCopy.Name\" xml:space=\"preserve\">\n    <value>bCopy</value>\n  </data>\n  <data name=\"&gt;&gt;bCopy.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bCopy.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel1</value>\n  </data>\n  <data name=\"&gt;&gt;bCopy.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"lOp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"lOp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>106, 23</value>\n  </data>\n  <data name=\"lOp.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>14</value>\n  </data>\n  <data name=\"lOp.Text\" xml:space=\"preserve\">\n    <value>Select and hit '&gt;&gt;'</value>\n  </data>\n  <data name=\"&gt;&gt;lOp.Name\" xml:space=\"preserve\">\n    <value>lOp</value>\n  </data>\n  <data name=\"&gt;&gt;lOp.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lOp.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel1</value>\n  </data>\n  <data name=\"&gt;&gt;lOp.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.Name\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"scintilla1.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Bottom, Left, Right</value>\n  </data>\n  <data name=\"scintilla1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>3, 29</value>\n  </data>\n  <data name=\"scintilla1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>522, 235</value>\n  </data>\n  <data name=\"scintilla1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>14</value>\n  </data>\n  <data name=\"&gt;&gt;scintilla1.Name\" xml:space=\"preserve\">\n    <value>scintilla1</value>\n  </data>\n  <data name=\"&gt;&gt;scintilla1.Type\" xml:space=\"preserve\">\n    <value>ScintillaNET.Scintilla, ScintillaNET, Version=3.6.3.0, Culture=neutral, PublicKeyToken=null</value>\n  </data>\n  <data name=\"&gt;&gt;scintilla1.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel2</value>\n  </data>\n  <data name=\"&gt;&gt;scintilla1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"lExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>3, 3</value>\n  </data>\n  <data name=\"lExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>134, 20</value>\n  </data>\n  <data name=\"lExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>13</value>\n  </data>\n  <data name=\"lExpr.Text\" xml:space=\"preserve\">\n    <value>Expressions start with '='</value>\n  </data>\n  <data name=\"&gt;&gt;lExpr.Name\" xml:space=\"preserve\">\n    <value>lExpr</value>\n  </data>\n  <data name=\"&gt;&gt;lExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lExpr.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel2</value>\n  </data>\n  <data name=\"&gt;&gt;lExpr.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.Name\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel2</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"splitContainer1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>796, 267</value>\n  </data>\n  <data name=\"splitContainer1.SplitterDistance\" type=\"System.Int32, mscorlib\">\n    <value>264</value>\n  </data>\n  <data name=\"splitContainer1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>14</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Name\" xml:space=\"preserve\">\n    <value>splitContainer1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"panel1.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Bottom, Left, Right</value>\n  </data>\n  <data name=\"bCancel.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Bottom, Right</value>\n  </data>\n  <data name=\"bCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>707, 9</value>\n  </data>\n  <data name=\"bCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"bCancel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Name\" xml:space=\"preserve\">\n    <value>bCancel</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"bOK.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Bottom, Right</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>626, 9</value>\n  </data>\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"panel1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 272</value>\n  </data>\n  <data name=\"panel1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>796, 40</value>\n  </data>\n  <data name=\"panel1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>15</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Name\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>796, 312</value>\n  </data>\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Edit Expression</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DialogExprEditor</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DialogExprEditor.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"lOp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>3, 3</value>\n  </data>\n  <data name=\"lOp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 20</value>\n  </data>\n  <data name=\"lOp.Text\" xml:space=\"preserve\">\n    <value>Выберите и нажмите</value>\n  </data>\n  <data name=\"lExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>9, 3</value>\n  </data>\n  <data name=\"lExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>165, 20</value>\n  </data>\n  <data name=\"lExpr.Text\" xml:space=\"preserve\">\n    <value>Выражения начинаются с '='</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Редактировать выражение</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DialogFilterOperator.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    public partial class DialogFilterOperator : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tprivate System.Windows.Forms.Button bOK;\nprivate System.Windows.Forms.Button bCancel;\nprivate System.Windows.Forms.Label lOp;\nprivate System.Windows.Forms.ComboBox cbOperator;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DialogFilterOperator));\n\t\t\tthis.bOK = new System.Windows.Forms.Button();\n\t\t\tthis.bCancel = new System.Windows.Forms.Button();\n\t\t\tthis.lOp = new System.Windows.Forms.Label();\n\t\t\tthis.cbOperator = new System.Windows.Forms.ComboBox();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// bOK\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bOK, \"bOK\");\n\t\t\tthis.bOK.DialogResult = System.Windows.Forms.DialogResult.OK;\n\t\t\tthis.bOK.Name = \"bOK\";\n\t\t\t// \n\t\t\t// bCancel\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCancel, \"bCancel\");\n\t\t\tthis.bCancel.CausesValidation = false;\n\t\t\tthis.bCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n\t\t\tthis.bCancel.Name = \"bCancel\";\n\t\t\t// \n\t\t\t// lOp\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lOp, \"lOp\");\n\t\t\tthis.lOp.Name = \"lOp\";\n\t\t\t// \n\t\t\t// cbOperator\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbOperator, \"cbOperator\");\n\t\t\tthis.cbOperator.DropDownStyle = System.Windows.Forms.ComboBoxStyle.Simple;\n\t\t\tthis.cbOperator.Items.AddRange(new object[] {\n            resources.GetString(\"cbOperator.Items\"),\n            resources.GetString(\"cbOperator.Items1\"),\n            resources.GetString(\"cbOperator.Items2\"),\n            resources.GetString(\"cbOperator.Items3\"),\n            resources.GetString(\"cbOperator.Items4\"),\n            resources.GetString(\"cbOperator.Items5\"),\n            resources.GetString(\"cbOperator.Items6\"),\n            resources.GetString(\"cbOperator.Items7\"),\n            resources.GetString(\"cbOperator.Items8\"),\n            resources.GetString(\"cbOperator.Items9\"),\n            resources.GetString(\"cbOperator.Items10\"),\n            resources.GetString(\"cbOperator.Items11\"),\n            resources.GetString(\"cbOperator.Items12\")});\n\t\t\tthis.cbOperator.Name = \"cbOperator\";\n\t\t\tthis.cbOperator.Validating += new System.ComponentModel.CancelEventHandler(this.DialogFilterOperator_Validating);\n\t\t\t// \n\t\t\t// DialogFilterOperator\n\t\t\t// \n\t\t\tthis.AcceptButton = this.bOK;\n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.CancelButton = this.bCancel;\n\t\t\tthis.Controls.Add(this.cbOperator);\n\t\t\tthis.Controls.Add(this.lOp);\n\t\t\tthis.Controls.Add(this.bCancel);\n\t\t\tthis.Controls.Add(this.bOK);\n\t\t\tthis.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;\n\t\t\tthis.MaximizeBox = false;\n\t\t\tthis.MinimizeBox = false;\n\t\t\tthis.Name = \"DialogFilterOperator\";\n\t\t\tthis.ShowInTaskbar = false;\n\t\t\tthis.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;\n\t\t\tthis.Validating += new System.ComponentModel.CancelEventHandler(this.DialogFilterOperator_Validating);\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/DialogFilterOperator.cs",
    "content": "\nusing System;\nusing System.Drawing;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.Text;\nusing System.Reflection;\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// DialogFilterOperator: puts up a dialog that lets a user pick a Filter Operator\n    /// </summary>\n    public partial class DialogFilterOperator \n    {\n\n        internal DialogFilterOperator(string op)\n        {\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            if (op != null && op.Length > 0)\n                cbOperator.Text = op;\n\n            return;\n        }\n\n        public string Operator\n        {\n            get { return this.cbOperator.Text; }\n        }\n\n        private void DialogFilterOperator_Validating(object sender, System.ComponentModel.CancelEventArgs e)\n        {\n            foreach (string op in cbOperator.Items)\n            {\n                if (op == cbOperator.Text)\n                    return;\n            }\n            MessageBox.Show(string.Format(Strings.DialogFilterOperator_Show_OperatorInList, cbOperator.Text), Strings.DialogFilterOperator_Show_PickFilterOperator);\n            e.Cancel = true;\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "RdlDesign/DialogFilterOperator.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"&gt;&gt;lOp.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Name\" xml:space=\"preserve\">\n    <value>bCancel</value>\n  </data>\n  <data name=\"cbOperator.Items\" xml:space=\"preserve\">\n    <value>Equal</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbOperator.Items8\" xml:space=\"preserve\">\n    <value>BottomN</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lOp.Text\" xml:space=\"preserve\">\n    <value>Select Filter Operator</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DialogFilterOperator</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"lOp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>112, 16</value>\n  </data>\n  <data name=\"cbOperator.Text\" xml:space=\"preserve\">\n    <value>Equal</value>\n  </data>\n  <data name=\"lOp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 8</value>\n  </data>\n  <data name=\"cbOperator.Items11\" xml:space=\"preserve\">\n    <value>In</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>256, 198</value>\n  </data>\n  <data name=\"&gt;&gt;lOp.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"cbOperator.Items10\" xml:space=\"preserve\">\n    <value>BottomPercent</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"cbOperator.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>14</value>\n  </data>\n  <data name=\"cbOperator.Items5\" xml:space=\"preserve\">\n    <value>LessThan</value>\n  </data>\n  <data name=\"&gt;&gt;cbOperator.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"bCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>176, 168</value>\n  </data>\n  <data name=\"cbOperator.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>120, 8</value>\n  </data>\n  <data name=\"&gt;&gt;lOp.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"cbOperator.Items9\" xml:space=\"preserve\">\n    <value>TopPercent</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>88, 168</value>\n  </data>\n  <data name=\"lOp.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>13</value>\n  </data>\n  <data name=\"cbOperator.Items6\" xml:space=\"preserve\">\n    <value>LessThanOrEqual</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"cbOperator.Items4\" xml:space=\"preserve\">\n    <value>GreaterThanOrEqual</value>\n  </data>\n  <data name=\"cbOperator.Items3\" xml:space=\"preserve\">\n    <value>GreaterThan</value>\n  </data>\n  <data name=\"cbOperator.Items2\" xml:space=\"preserve\">\n    <value>NotEqual</value>\n  </data>\n  <data name=\"cbOperator.Items1\" xml:space=\"preserve\">\n    <value>Like</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbOperator.Items12\" xml:space=\"preserve\">\n    <value>Between</value>\n  </data>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"&gt;&gt;cbOperator.Name\" xml:space=\"preserve\">\n    <value>cbOperator</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"&gt;&gt;lOp.Name\" xml:space=\"preserve\">\n    <value>lOp</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbOperator.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbOperator.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>128, 150</value>\n  </data>\n  <data name=\"bCancel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"bOK.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Bottom, Right</value>\n  </data>\n  <data name=\"&gt;&gt;cbOperator.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bCancel.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Bottom, Right</value>\n  </data>\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Pick Filter Operator</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <data name=\"cbOperator.Items7\" xml:space=\"preserve\">\n    <value>TopN</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/DialogFilterOperator.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"lOp.Text\" xml:space=\"preserve\">\n    <value>Выберите оператор</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Выбор оператора фильтра</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DialogListOfStrings.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    public partial class DialogListOfStrings : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tprivate System.Windows.Forms.Button bOK;\nprivate System.Windows.Forms.Button bCancel;\nprivate System.Windows.Forms.Label label1;\nprivate System.Windows.Forms.TextBox tbStrings;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DialogListOfStrings));\n\t\t\tthis.bOK = new System.Windows.Forms.Button();\n\t\t\tthis.tbStrings = new System.Windows.Forms.TextBox();\n\t\t\tthis.bCancel = new System.Windows.Forms.Button();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// bOK\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bOK, \"bOK\");\n\t\t\tthis.bOK.DialogResult = System.Windows.Forms.DialogResult.OK;\n\t\t\tthis.bOK.Name = \"bOK\";\n\t\t\t// \n\t\t\t// tbStrings\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbStrings, \"tbStrings\");\n\t\t\tthis.tbStrings.Name = \"tbStrings\";\n\t\t\t// \n\t\t\t// bCancel\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCancel, \"bCancel\");\n\t\t\tthis.bCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n\t\t\tthis.bCancel.Name = \"bCancel\";\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// DialogListOfStrings\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.CancelButton = this.bCancel;\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Controls.Add(this.bCancel);\n\t\t\tthis.Controls.Add(this.tbStrings);\n\t\t\tthis.Controls.Add(this.bOK);\n\t\t\tthis.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n\t\t\tthis.MaximizeBox = false;\n\t\t\tthis.MinimizeBox = false;\n\t\t\tthis.Name = \"DialogListOfStrings\";\n\t\t\tthis.ShowInTaskbar = false;\n\t\t\tthis.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/DialogListOfStrings.cs",
    "content": "\nusing System;\nusing System.Drawing;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Windows.Forms;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// DialogListOfStrings: puts up a dialog that lets a user enter a list of strings\n    /// </summary>\n    public partial class DialogListOfStrings \n    {\n        public DialogListOfStrings(List<string> list)\n        {\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            if (list == null || list.Count == 0)\n                return;\n\n            // Populate textbox with the list of strings\n            string[] sa = new string[list.Count];\n            int l = 0;\n            foreach (string v in list)\n            {\n                sa[l++] = v;\n            }\n            tbStrings.Lines = sa;\n\n            return;\n        }\n\n        public List<string> ListOfStrings\n        {\n            get\n            {\n                if (this.tbStrings.Text.Length == 0)\n                    return null;\n                List<string> l = new List<string>();\n                foreach (string v in tbStrings.Lines)\n                {\n                    if (v.Length > 0)\n                        l.Add(v);\n                }\n                return l;\n            }\n        }\n\n        private void lnk_LinkClicked(object sender, LinkLabelLinkClickedEventArgs ea)\n        {\n            LinkLabel lnk = (LinkLabel)sender;\n            lnk.Links[lnk.Links.IndexOf(ea.Link)].Visited = true;\n            System.Diagnostics.Process.Start(lnk.Tag.ToString());\n        }\n    }\n\n}\n"
  },
  {
    "path": "RdlDesign/DialogListOfStrings.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Name\" xml:space=\"preserve\">\n    <value>bCancel</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbStrings.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"tbStrings.ScrollBars\" type=\"System.Windows.Forms.ScrollBars, System.Windows.Forms\">\n    <value>Both</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbStrings.Name\" xml:space=\"preserve\">\n    <value>tbStrings</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Enter separate values on multiple lines below</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DialogListOfStrings</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"bCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>192, 192</value>\n  </data>\n  <data name=\"&gt;&gt;tbStrings.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 8</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>282, 224</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <data name=\"bCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 192</value>\n  </data>\n  <data name=\"tbStrings.Multiline\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbStrings.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>256, 144</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>240, 23</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbStrings.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 40</value>\n  </data>\n  <data name=\"bCancel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;tbStrings.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbStrings.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/DialogListOfStrings.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Введите значения в раздельных строках ниже</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DialogNewChart.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    internal partial class DialogNewChart : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tprivate DesignXmlDraw _Draw;\nprivate System.Windows.Forms.Button bOK;\nprivate System.Windows.Forms.Button bCancel;\nprivate System.Windows.Forms.Label label1;\nprivate System.Windows.Forms.ComboBox cbDataSets;\nprivate System.Windows.Forms.Label label2;\nprivate System.Windows.Forms.Label label3;\nprivate System.Windows.Forms.ListBox lbFields;\nprivate System.Windows.Forms.ListBox lbChartCategories;\nprivate System.Windows.Forms.Button bCategoryUp;\nprivate System.Windows.Forms.Button bCategoryDown;\nprivate System.Windows.Forms.Button bCategory;\nprivate System.Windows.Forms.Button bSeries;\nprivate System.Windows.Forms.ListBox lbChartSeries;\nprivate System.Windows.Forms.Button bCategoryDelete;\nprivate System.Windows.Forms.Button bSeriesDelete;\nprivate System.Windows.Forms.Button bSeriesDown;\nprivate System.Windows.Forms.Button bSeriesUp;\nprivate System.Windows.Forms.Label label4;\nprivate System.Windows.Forms.Label lChartData;\nprivate System.Windows.Forms.ComboBox cbChartData;\nprivate System.Windows.Forms.Label label6;\nprivate System.Windows.Forms.ComboBox cbSubType;\nprivate System.Windows.Forms.ComboBox cbChartType;\nprivate System.Windows.Forms.Label label7;\nprivate ComboBox cbChartData2;\nprivate Label lChartData2;\nprivate ComboBox cbChartData3;\nprivate Label lChartData3;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DialogNewChart));\n\t\t\tthis.bOK = new System.Windows.Forms.Button();\n\t\t\tthis.bCancel = new System.Windows.Forms.Button();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.cbDataSets = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.lbFields = new System.Windows.Forms.ListBox();\n\t\t\tthis.lbChartCategories = new System.Windows.Forms.ListBox();\n\t\t\tthis.bCategoryUp = new System.Windows.Forms.Button();\n\t\t\tthis.bCategoryDown = new System.Windows.Forms.Button();\n\t\t\tthis.bCategory = new System.Windows.Forms.Button();\n\t\t\tthis.bSeries = new System.Windows.Forms.Button();\n\t\t\tthis.lbChartSeries = new System.Windows.Forms.ListBox();\n\t\t\tthis.bCategoryDelete = new System.Windows.Forms.Button();\n\t\t\tthis.bSeriesDelete = new System.Windows.Forms.Button();\n\t\t\tthis.bSeriesDown = new System.Windows.Forms.Button();\n\t\t\tthis.bSeriesUp = new System.Windows.Forms.Button();\n\t\t\tthis.label4 = new System.Windows.Forms.Label();\n\t\t\tthis.lChartData = new System.Windows.Forms.Label();\n\t\t\tthis.cbChartData = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label6 = new System.Windows.Forms.Label();\n\t\t\tthis.cbSubType = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbChartType = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label7 = new System.Windows.Forms.Label();\n\t\t\tthis.cbChartData2 = new System.Windows.Forms.ComboBox();\n\t\t\tthis.lChartData2 = new System.Windows.Forms.Label();\n\t\t\tthis.cbChartData3 = new System.Windows.Forms.ComboBox();\n\t\t\tthis.lChartData3 = new System.Windows.Forms.Label();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// bOK\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bOK, \"bOK\");\n\t\t\tthis.bOK.Name = \"bOK\";\n\t\t\tthis.bOK.Click += new System.EventHandler(this.bOK_Click);\n\t\t\t// \n\t\t\t// bCancel\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCancel, \"bCancel\");\n\t\t\tthis.bCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n\t\t\tthis.bCancel.Name = \"bCancel\";\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// cbDataSets\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbDataSets, \"cbDataSets\");\n\t\t\tthis.cbDataSets.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbDataSets.Name = \"cbDataSets\";\n\t\t\tthis.cbDataSets.SelectedIndexChanged += new System.EventHandler(this.cbDataSets_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// lbFields\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lbFields, \"lbFields\");\n\t\t\tthis.lbFields.Name = \"lbFields\";\n\t\t\tthis.lbFields.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;\n\t\t\t// \n\t\t\t// lbChartCategories\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lbChartCategories, \"lbChartCategories\");\n\t\t\tthis.lbChartCategories.Name = \"lbChartCategories\";\n\t\t\t// \n\t\t\t// bCategoryUp\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCategoryUp, \"bCategoryUp\");\n\t\t\tthis.bCategoryUp.Name = \"bCategoryUp\";\n\t\t\tthis.bCategoryUp.Click += new System.EventHandler(this.bCategoryUp_Click);\n\t\t\t// \n\t\t\t// bCategoryDown\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCategoryDown, \"bCategoryDown\");\n\t\t\tthis.bCategoryDown.Name = \"bCategoryDown\";\n\t\t\tthis.bCategoryDown.Click += new System.EventHandler(this.bCategoryDown_Click);\n\t\t\t// \n\t\t\t// bCategory\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCategory, \"bCategory\");\n\t\t\tthis.bCategory.Name = \"bCategory\";\n\t\t\tthis.bCategory.Click += new System.EventHandler(this.bCategory_Click);\n\t\t\t// \n\t\t\t// bSeries\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bSeries, \"bSeries\");\n\t\t\tthis.bSeries.Name = \"bSeries\";\n\t\t\tthis.bSeries.Click += new System.EventHandler(this.bSeries_Click);\n\t\t\t// \n\t\t\t// lbChartSeries\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lbChartSeries, \"lbChartSeries\");\n\t\t\tthis.lbChartSeries.Name = \"lbChartSeries\";\n\t\t\t// \n\t\t\t// bCategoryDelete\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCategoryDelete, \"bCategoryDelete\");\n\t\t\tthis.bCategoryDelete.Name = \"bCategoryDelete\";\n\t\t\tthis.bCategoryDelete.Click += new System.EventHandler(this.bCategoryDelete_Click);\n\t\t\t// \n\t\t\t// bSeriesDelete\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bSeriesDelete, \"bSeriesDelete\");\n\t\t\tthis.bSeriesDelete.Name = \"bSeriesDelete\";\n\t\t\tthis.bSeriesDelete.Click += new System.EventHandler(this.bSeriesDelete_Click);\n\t\t\t// \n\t\t\t// bSeriesDown\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bSeriesDown, \"bSeriesDown\");\n\t\t\tthis.bSeriesDown.Name = \"bSeriesDown\";\n\t\t\tthis.bSeriesDown.Click += new System.EventHandler(this.bSeriesDown_Click);\n\t\t\t// \n\t\t\t// bSeriesUp\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bSeriesUp, \"bSeriesUp\");\n\t\t\tthis.bSeriesUp.Name = \"bSeriesUp\";\n\t\t\tthis.bSeriesUp.Click += new System.EventHandler(this.bSeriesUp_Click);\n\t\t\t// \n\t\t\t// label4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label4, \"label4\");\n\t\t\tthis.label4.Name = \"label4\";\n\t\t\t// \n\t\t\t// lChartData\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lChartData, \"lChartData\");\n\t\t\tthis.lChartData.Name = \"lChartData\";\n\t\t\t// \n\t\t\t// cbChartData\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbChartData, \"cbChartData\");\n\t\t\tthis.cbChartData.Name = \"cbChartData\";\n\t\t\tthis.cbChartData.TextChanged += new System.EventHandler(this.cbChartData_TextChanged);\n\t\t\tthis.cbChartData.Enter += new System.EventHandler(this.cbChartData_Enter);\n\t\t\t// \n\t\t\t// label6\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label6, \"label6\");\n\t\t\tthis.label6.Name = \"label6\";\n\t\t\t// \n\t\t\t// cbSubType\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbSubType, \"cbSubType\");\n\t\t\tthis.cbSubType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbSubType.Name = \"cbSubType\";\n\t\t\t// \n\t\t\t// cbChartType\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbChartType, \"cbChartType\");\n\t\t\tthis.cbChartType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbChartType.Items.AddRange(new object[] {\n            resources.GetString(\"cbChartType.Items\"),\n            resources.GetString(\"cbChartType.Items1\"),\n            resources.GetString(\"cbChartType.Items2\"),\n            resources.GetString(\"cbChartType.Items3\"),\n            resources.GetString(\"cbChartType.Items4\"),\n            resources.GetString(\"cbChartType.Items5\"),\n            resources.GetString(\"cbChartType.Items6\"),\n            resources.GetString(\"cbChartType.Items7\")});\n\t\t\tthis.cbChartType.Name = \"cbChartType\";\n\t\t\tthis.cbChartType.SelectedIndexChanged += new System.EventHandler(this.cbChartType_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// label7\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label7, \"label7\");\n\t\t\tthis.label7.Name = \"label7\";\n\t\t\t// \n\t\t\t// cbChartData2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbChartData2, \"cbChartData2\");\n\t\t\tthis.cbChartData2.Name = \"cbChartData2\";\n\t\t\tthis.cbChartData2.TextChanged += new System.EventHandler(this.cbChartData_TextChanged);\n\t\t\tthis.cbChartData2.Enter += new System.EventHandler(this.cbChartData_Enter);\n\t\t\t// \n\t\t\t// lChartData2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lChartData2, \"lChartData2\");\n\t\t\tthis.lChartData2.Name = \"lChartData2\";\n\t\t\t// \n\t\t\t// cbChartData3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbChartData3, \"cbChartData3\");\n\t\t\tthis.cbChartData3.Name = \"cbChartData3\";\n\t\t\tthis.cbChartData3.TextChanged += new System.EventHandler(this.cbChartData_TextChanged);\n\t\t\tthis.cbChartData3.Enter += new System.EventHandler(this.cbChartData_Enter);\n\t\t\t// \n\t\t\t// lChartData3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lChartData3, \"lChartData3\");\n\t\t\tthis.lChartData3.Name = \"lChartData3\";\n\t\t\t// \n\t\t\t// DialogNewChart\n\t\t\t// \n\t\t\tthis.AcceptButton = this.bOK;\n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.CancelButton = this.bCancel;\n\t\t\tthis.Controls.Add(this.cbChartData3);\n\t\t\tthis.Controls.Add(this.lChartData3);\n\t\t\tthis.Controls.Add(this.cbChartData2);\n\t\t\tthis.Controls.Add(this.lChartData2);\n\t\t\tthis.Controls.Add(this.label6);\n\t\t\tthis.Controls.Add(this.cbSubType);\n\t\t\tthis.Controls.Add(this.cbChartType);\n\t\t\tthis.Controls.Add(this.label7);\n\t\t\tthis.Controls.Add(this.cbChartData);\n\t\t\tthis.Controls.Add(this.lChartData);\n\t\t\tthis.Controls.Add(this.label4);\n\t\t\tthis.Controls.Add(this.bSeriesDelete);\n\t\t\tthis.Controls.Add(this.bSeriesDown);\n\t\t\tthis.Controls.Add(this.bSeriesUp);\n\t\t\tthis.Controls.Add(this.bCategoryDelete);\n\t\t\tthis.Controls.Add(this.lbChartSeries);\n\t\t\tthis.Controls.Add(this.bSeries);\n\t\t\tthis.Controls.Add(this.bCategory);\n\t\t\tthis.Controls.Add(this.bCategoryDown);\n\t\t\tthis.Controls.Add(this.bCategoryUp);\n\t\t\tthis.Controls.Add(this.lbChartCategories);\n\t\t\tthis.Controls.Add(this.lbFields);\n\t\t\tthis.Controls.Add(this.label3);\n\t\t\tthis.Controls.Add(this.label2);\n\t\t\tthis.Controls.Add(this.cbDataSets);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Controls.Add(this.bCancel);\n\t\t\tthis.Controls.Add(this.bOK);\n\t\t\tthis.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n\t\t\tthis.MaximizeBox = false;\n\t\t\tthis.MinimizeBox = false;\n\t\t\tthis.Name = \"DialogNewChart\";\n\t\t\tthis.ShowInTaskbar = false;\n\t\t\tthis.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/DialogNewChart.cs",
    "content": "using System;\nusing System.Drawing;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing System.Text;\nusing System.Xml;\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// Summary description for DialogDataSourceRef.\n    /// </summary>\n    internal partial class DialogNewChart \n    {\n\n        internal DialogNewChart(DesignXmlDraw dxDraw, XmlNode container)\n        {\n            _Draw = dxDraw;\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            InitValues(container);\n        }\n\n        private void InitValues(XmlNode container)\n        {\n            this.bOK.Enabled = false;\n            //\n            // Obtain the existing DataSets info\n            //\n            object[] datasets = _Draw.DataSetNames;\n            if (datasets == null)\n                return;\t\t// not much to do if no DataSets\n\n            if (_Draw.IsDataRegion(container))\n            {\n                string s = _Draw.GetDataSetNameValue(container);\n                if (s == null)\n                    return;\n                this.cbDataSets.Items.Add(s);\n                this.cbDataSets.Enabled = false;\n            }\n            else\n                this.cbDataSets.Items.AddRange(datasets);\n            if (cbDataSets.Items.Count > 0)\n                cbDataSets.SelectedIndex = 0;\n\n            this.cbChartType.SelectedIndex = 2;\n        }\n\n        internal string ChartXml\n        {\n            get\n            {\n                StringBuilder chart = new StringBuilder(\"<Chart><Height>2in</Height><Width>4in</Width>\");\n                chart.AppendFormat(\"<DataSetName>{0}</DataSetName>\", this.cbDataSets.Text);\n                chart.Append(\"<NoRows>Query returned no rows!</NoRows><Style>\" +\n                    \"<BorderStyle><Default>Solid</Default></BorderStyle>\" +\n                    \"<BackgroundColor>White</BackgroundColor>\" +\n                    \"<BackgroundGradientType>LeftRight</BackgroundGradientType>\" +\n                    \"<BackgroundGradientEndColor>Azure</BackgroundGradientEndColor>\" +\n                    \"</Style>\");\n                chart.AppendFormat(\"<Type>{0}</Type><Subtype>{1}</Subtype>\",\n                    this.cbChartType.Text, this.cbSubType.Text);\n                // do the categories\n                string tcat = \"\";\n                if (this.lbChartCategories.Items.Count > 0)\n                {\n                    chart.Append(\"<CategoryGroupings>\");\n                    foreach (string cname in this.lbChartCategories.Items)\n                    {\n                        if (tcat == \"\")\n                            tcat = cname;\n                        chart.Append(\"<CategoryGrouping>\");\n                        chart.Append(\"<DynamicCategories>\");\n                        chart.AppendFormat(\"<Grouping><GroupExpressions>\" +\n                            \"<GroupExpression>=Fields!{0}.Value</GroupExpression>\" +\n                            \"</GroupExpressions></Grouping>\", cname);\n\n                        chart.Append(\"</DynamicCategories>\");\n                        chart.Append(\"</CategoryGrouping>\");\n                    }\n                    chart.Append(\"</CategoryGroupings>\");\n                    // Do the category axis\n                    chart.AppendFormat(\"<CategoryAxis><Axis><Visible>true</Visible>\" +\n                        \"<MajorTickMarks>Inside</MajorTickMarks>\" +\n                        \"<MajorGridLines><ShowGridLines>true</ShowGridLines>\" +\n                        \"<Style><BorderStyle><Default>Solid</Default></BorderStyle>\" +\n                        \"</Style></MajorGridLines>\" +\n                        \"<MinorGridLines><ShowGridLines>true</ShowGridLines>\" +\n                        \"<Style><BorderStyle><Default>Solid</Default></BorderStyle>\" +\n                        \"</Style></MinorGridLines>\" +\n                        \"<Title><Caption>{0}</Caption>\" +\n                        \"</Title></Axis></CategoryAxis>\", tcat);\n\n                }\n                // do the series\n                string tser = \"\";\n                if (this.lbChartSeries.Items.Count > 0)\n                {\n                    chart.Append(\"<SeriesGroupings>\");\n                    //If we have chartData Set then we want dynamic series GJL\n                    if (this.cbChartData.Text.Length > 0)\n                    {\n                        foreach (string sname in this.lbChartSeries.Items)\n                        {\n                            if (tser == \"\")\n                                tser = sname;\n                            chart.Append(\"<SeriesGrouping>\");\n                            chart.Append(\"<DynamicSeries>\");\n                            chart.AppendFormat(\"<Grouping><GroupExpressions>\" +\n                                \"<GroupExpression>=Fields!{0}.Value</GroupExpression>\" +\n                                \"</GroupExpressions></Grouping>\", sname);\n                            chart.AppendFormat(\"<Label>=Fields!{0}.Value</Label>\", sname);\n                            chart.Append(\"</DynamicSeries>\");\n                            chart.Append(\"</SeriesGrouping>\");\n                        }\n                    }\n                    //If we don't have chart data set we want static series GJL\n                    else\n                    {\n                        chart.Append(\"<SeriesGrouping>\");\n                        chart.Append(\"<StaticSeries>\");\n                        foreach (string sname in this.lbChartSeries.Items)\n                        {\n                            chart.Append(\"<StaticMember>\");\n                            chart.AppendFormat(\"<Label>{0}</Label>\", sname);\n                            chart.AppendFormat(\"<Value>=Fields!{0}.Value</Value>\", sname);\n                            chart.Append(\"</StaticMember>\");\n\n                        }\n\n                        chart.Append(\"</StaticSeries>\");\n                        chart.Append(\"</SeriesGrouping>\");\n\n                    }\n                    chart.Append(\"</SeriesGroupings>\");\n                }\n                // Chart Data\n                string vtitle;\n                if (this.cbChartData.Text.Length > 0)\n                {\n                    chart.Append(\"<ChartData><ChartSeries><DataPoints><DataPoint>\" +\n                        \"<DataValues>\");\n                    chart.AppendFormat(\"<DataValue><Value>{0}</Value></DataValue>\",\n                        this.cbChartData.Text);\n                    string ctype = this.cbChartType.Text.ToLowerInvariant();\n\n                    if (ctype == \"scatter\" || ctype == \"bubble\")\n                    {\n                        chart.AppendFormat(\"<DataValue><Value>{0}</Value></DataValue>\",\n                            this.cbChartData2.Text);\n                        if (ctype == \"bubble\")\n                        {\n                            chart.AppendFormat(\"<DataValue><Value>{0}</Value></DataValue>\",\n                                this.cbChartData3.Text);\n                        }\n                    }\n                    chart.Append(\"</DataValues>\" +\n                        \"</DataPoint></DataPoints></ChartSeries></ChartData>\");\n\n                    // Do the value axis\n\n                    int start = this.cbChartData.Text.LastIndexOf(\"!\");\n                    if (start > 0)\n                    {\n                        int end = this.cbChartData.Text.LastIndexOf(\".Value\");\n                        if (end < 0 || end <= start + 1)\n                            vtitle = this.cbChartData.Text.Substring(start + 1);\n                        else\n                            vtitle = this.cbChartData.Text.Substring(start + 1, end - start - 1);\n                    }\n                    else\n                        vtitle = \"Values\";\n                }\n                else\n                {\n                    //If we don't have chartData then use the items in the series box\n                    //to create Static Series\n                    chart.Append(\"<ChartData>\");\n                    foreach (string sname in this.lbChartSeries.Items)\n                    {\n                        chart.Append(\"<ChartSeries>\");\n                        chart.Append(\"<DataPoints>\");\n                        chart.Append(\"<DataPoint>\");\n                        chart.Append(\"<DataValues>\");\n\n                        if (cbChartType.SelectedItem.Equals(\"Scatter\"))\n                        {\n                            //we need a y datavalue as well...\n                            string xname = (string)lbChartCategories.Items[0];\n                            chart.Append(\"<DataValue>\");\n                            chart.AppendFormat(\"<Value>=Fields!{0}.Value</Value>\", xname);\n                            chart.Append(\"</DataValue>\");\n                            chart.Append(\"<DataValue>\");\n                            chart.AppendFormat(\"<Value>=Fields!{0}.Value</Value>\", sname);\n                            chart.Append(\"</DataValue>\");\n                        }\n                        else\n                        {\n                            chart.Append(\"<DataValue>\");\n                            chart.AppendFormat(\"<Value>=Fields!{0}.Value</Value>\", sname);\n                            chart.Append(\"</DataValue>\");\n                        }\n                        chart.Append(\"</DataValues>\");\n                        chart.Append(\"</DataPoint>\");\n                        chart.Append(\"</DataPoints>\");\n                        chart.Append(\"</ChartSeries>\");\n                    }\n                    chart.Append(\"</ChartData>\");\n                    vtitle = \"Values\";\n\n                }\n\n                chart.AppendFormat(\"<ValueAxis><Axis><Visible>true</Visible>\" +\n                        \"<MajorTickMarks>Inside</MajorTickMarks>\" +\n                        \"<MajorGridLines><ShowGridLines>true</ShowGridLines>\" +\n                        \"<Style><BorderStyle><Default>Solid</Default></BorderStyle>\" +\n                        \"<FontSize>8pt</FontSize>\" +\n                        \"</Style></MajorGridLines>\" +\n                        \"<MinorGridLines><ShowGridLines>true</ShowGridLines>\" +\n                        \"<Style><BorderStyle><Default>Solid</Default></BorderStyle>\" +\n                        \"</Style></MinorGridLines>\" +\n                        \"<Title><Caption>{0}</Caption>\" +\n                        \"<Style><WritingMode>tb-rl</WritingMode></Style>\" +\n                        \"</Title></Axis></ValueAxis>\", vtitle);\n\n                // Legend\n                chart.Append(\"<Legend><Style><BorderStyle><Default>Solid</Default>\" +\n                    \"</BorderStyle><PaddingLeft>5pt</PaddingLeft>\" +\n                    \"<FontSize>8pt</FontSize></Style><Visible>true</Visible>\" +\n                    \"<Position>RightCenter</Position></Legend>\");\n\n                // Title\n                chart.AppendFormat(\"<Title><Style><FontWeight>Bold</FontWeight>\" +\n                    \"<FontSize>14pt</FontSize><TextAlign>Center</TextAlign>\" +\n                    \"</Style><Caption>{0} {1} Chart</Caption></Title>\", tcat, tser);\n\n                // end of Chart defintion\n                chart.Append(\"</Chart>\");\n\n                return chart.ToString();\n            }\n        }\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n\n\n        #region Windows Form Designer generated code\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n\n        #endregion\n\n        private void bOK_Click(object sender, System.EventArgs e)\n        {\n            bool bFail = false;\n            string ctype = cbChartType.Text.ToLowerInvariant();\n            if (cbChartData.Text.Length == 0 && lbChartSeries.Items.Count == 0) //Added second condition 05122007GJL\n            {\n                MessageBox.Show(Strings.DialogNewChart_ShowC_FillExpression);\n                bFail = true;\n            }\n            else if (ctype == \"scatter\" && cbChartData2.Text.Length == 0 && lbChartSeries.Items.Count == 0)\n            {\n                MessageBox.Show(Strings.DialogNewChart_ShowC_FillYExpression);\n                bFail = true;\n\n            }\n            else if (ctype == \"bubble\" && (cbChartData2.Text.Length == 0 || cbChartData3.Text.Length == 0))\n            {\n                MessageBox.Show(Strings.DialogNewChart_ShowC_FillYAndBubbleExpressions);\n                bFail = true;\n            }\n            if (bFail)\n                return;\n            // apply the result\n            DialogResult = DialogResult.OK;\n        }\n\n        private void cbDataSets_SelectedIndexChanged(object sender, System.EventArgs e)\n        {\n            this.lbChartCategories.Items.Clear();\n            this.lbChartSeries.Items.Clear();\n            bOK.Enabled = false;\n            this.lbFields.Items.Clear();\n            string[] fields = _Draw.GetFields(cbDataSets.Text, false);\n            if (fields != null)\n                lbFields.Items.AddRange(fields);\n        }\n\n        private void bCategory_Click(object sender, System.EventArgs e)\n        {\n            ICollection sic = lbFields.SelectedIndices;\n            int count = sic.Count;\n            foreach (int i in sic)\n            {\n                string fname = (string)lbFields.Items[i];\n                if (this.lbChartCategories.Items.IndexOf(fname) < 0)\n                    lbChartCategories.Items.Add(fname);\n            }\n            OkEnable();\n        }\n\n        private void bSeries_Click(object sender, System.EventArgs e)\n        {\n            ICollection sic = lbFields.SelectedIndices;\n            int count = sic.Count;\n            foreach (int i in sic)\n            {\n                string fname = (string)lbFields.Items[i];\n                if (this.lbChartSeries.Items.IndexOf(fname) < 0 || cbChartType.SelectedItem.Equals(\"Scatter\"))\n                    lbChartSeries.Items.Add(fname);\n            }\n            OkEnable();\n        }\n\n        private void bCategoryUp_Click(object sender, System.EventArgs e)\n        {\n            int index = lbChartCategories.SelectedIndex;\n            if (index <= 0)\n                return;\n\n            string prename = (string)lbChartCategories.Items[index - 1];\n            lbChartCategories.Items.RemoveAt(index - 1);\n            lbChartCategories.Items.Insert(index, prename);\n        }\n\n        private void bCategoryDown_Click(object sender, System.EventArgs e)\n        {\n            int index = lbChartCategories.SelectedIndex;\n            if (index < 0 || index + 1 == lbChartCategories.Items.Count)\n                return;\n\n            string postname = (string)lbChartCategories.Items[index + 1];\n            lbChartCategories.Items.RemoveAt(index + 1);\n            lbChartCategories.Items.Insert(index, postname);\n        }\n\n        private void bCategoryDelete_Click(object sender, System.EventArgs e)\n        {\n            int index = lbChartCategories.SelectedIndex;\n            if (index < 0)\n                return;\n\n            lbChartCategories.Items.RemoveAt(index);\n            OkEnable();\n        }\n\n        private void bSeriesUp_Click(object sender, System.EventArgs e)\n        {\n            int index = lbChartSeries.SelectedIndex;\n            if (index <= 0)\n                return;\n\n            string prename = (string)lbChartSeries.Items[index - 1];\n            lbChartSeries.Items.RemoveAt(index - 1);\n            lbChartSeries.Items.Insert(index, prename);\n        }\n\n        private void bSeriesDown_Click(object sender, System.EventArgs e)\n        {\n            int index = lbChartSeries.SelectedIndex;\n            if (index < 0 || index + 1 == lbChartSeries.Items.Count)\n                return;\n\n            string postname = (string)lbChartSeries.Items[index + 1];\n            lbChartSeries.Items.RemoveAt(index + 1);\n            lbChartSeries.Items.Insert(index, postname);\n        }\n\n        private void bSeriesDelete_Click(object sender, System.EventArgs e)\n        {\n            int index = lbChartSeries.SelectedIndex;\n            if (index < 0)\n                return;\n\n            lbChartSeries.Items.RemoveAt(index);\n            OkEnable();\n        }\n\n        private void OkEnable()\n        {\n            // We need values in datasets and Categories or Series for OK to work correctly\n            bool bEnable = (this.lbChartCategories.Items.Count > 0 ||\n                          this.lbChartSeries.Items.Count > 0) &&\n                        this.cbDataSets.Text != null &&\n                        this.cbDataSets.Text.Length > 0;\n            // && this.cbChartData.Text.Length > 0; Not needed with static series 05122007GJL\n            string ctype = cbChartType.Text.ToLowerInvariant();\n            if (ctype == \"scatter\")\n                bEnable = bEnable && (this.cbChartData2.Text.Length > 0 || lbChartSeries.Items.Count > 0);\n            else if (ctype == \"bubble\")\n                bEnable = bEnable && (this.cbChartData2.Text.Length > 0 && this.cbChartData3.Text.Length > 0);\n\n            bOK.Enabled = bEnable;\n        }\n\n        private void cbChartData_Enter(object sender, System.EventArgs e)\n        {\n            ComboBox cb = sender as ComboBox;\n            if (cb == null)\n                return;\n            cb.Items.Clear();\n            foreach (string field in this.lbFields.Items)\n            {\n                if (this.lbChartCategories.Items.IndexOf(field) >= 0 ||\n                    this.lbChartSeries.Items.IndexOf(field) >= 0)\n                    continue;\n                // Field selected in columns and rows\n                cb.Items.Add(string.Format(\"=Sum(Fields!{0}.Value)\", field));\n            }\n        }\n\n        private void cbChartData_TextChanged(object sender, System.EventArgs e)\n        {\n            OkEnable();\n        }\n\n        private void cbChartType_SelectedIndexChanged(object sender, System.EventArgs e)\n        {\n            // Change the potential sub-types\n            string savesub = cbSubType.Text;\n            string[] subItems;\n            bool bEnableData2 = false;\n            bool bEnableData3 = false;\n            switch (cbChartType.Text)\n            {\n                case \"Column\":\n                    subItems = new string[] { \"Plain\", \"Stacked\", \"PercentStacked\" };\n                    break;\n                case \"Bar\":\n                    subItems = new string[] { \"Plain\", \"Stacked\", \"PercentStacked\" };\n                    break;\n                case \"Line\":\n                    subItems = new string[] { \"Plain\", \"Smooth\" };\n                    break;\n                case \"Pie\":\n                    subItems = new string[] { \"Plain\", \"Exploded\" };\n                    break;\n                case \"Area\":\n                    subItems = new string[] { \"Plain\", \"Stacked\" };\n                    break;\n                case \"Doughnut\":\n                    subItems = new string[] { \"Plain\" };\n                    break;\n                case \"Scatter\":\n                    subItems = new string[] { \"Plain\", \"Line\", \"SmoothLine\" };\n                    bEnableData2 = true;\n                    break;\n                case \"Bubble\":\n                    subItems = new string[] { \"Plain\" };\n                    bEnableData2 = bEnableData3 = true;\n                    break;\n                case \"Stock\":\n                default:\n                    subItems = new string[] { \"Plain\" };\n                    break;\n            }\n            lChartData2.Enabled = cbChartData2.Enabled = bEnableData2;\n            lChartData3.Enabled = cbChartData3.Enabled = bEnableData3;\n\n            // handle the subtype\n            cbSubType.Items.Clear();\n            cbSubType.Items.AddRange(subItems);\n            int i = 0;\n            foreach (string s in subItems)\n            {\n                if (s == savesub)\n                {\n                    cbSubType.SelectedIndex = i;\n                    break;\n                }\n                i++;\n            }\n            // Didn't match old style\n            if (i >= subItems.Length)\n                i = 0;\n            cbSubType.SelectedIndex = i;\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "RdlDesign/DialogNewChart.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"bSeriesDown.Text\" xml:space=\"preserve\">\n    <value>Down</value>\n  </data>\n  <data name=\"&gt;&gt;lChartData3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"lbChartSeries.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 69</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.ZOrder\" xml:space=\"preserve\">\n    <value>26</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Name\" xml:space=\"preserve\">\n    <value>label6</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bSeriesUp.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"cbChartData.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>13</value>\n  </data>\n  <data name=\"&gt;&gt;cbSubType.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lbChartCategories.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bCategory.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>184, 112</value>\n  </data>\n  <data name=\"&gt;&gt;lbChartSeries.Name\" xml:space=\"preserve\">\n    <value>lbChartSeries</value>\n  </data>\n  <data name=\"label4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>31</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>184, 24</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>272, 392</value>\n  </data>\n  <data name=\"&gt;&gt;lChartData2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Sub-type</value>\n  </data>\n  <data name=\"&gt;&gt;lbFields.Name\" xml:space=\"preserve\">\n    <value>lbFields</value>\n  </data>\n  <data name=\"cbChartData3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>137, 366</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bCategoryDelete.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;bSeriesDelete.Name\" xml:space=\"preserve\">\n    <value>bSeriesDelete</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bCategory.Text\" xml:space=\"preserve\">\n    <value>&gt;</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartType.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData.Name\" xml:space=\"preserve\">\n    <value>cbChartData</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 23</value>\n  </data>\n  <data name=\"&gt;&gt;cbSubType.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"lbFields.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 104</value>\n  </data>\n  <data name=\"&gt;&gt;bCategory.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bSeriesUp.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>544, 486</value>\n  </data>\n  <data name=\"&gt;&gt;bCategoryDelete.ZOrder\" xml:space=\"preserve\">\n    <value>14</value>\n  </data>\n  <data name=\"&gt;&gt;cbSubType.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;bCategoryUp.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"lChartData2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>18, 342</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Name\" xml:space=\"preserve\">\n    <value>bCancel</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>New Chart</value>\n  </data>\n  <data name=\"&gt;&gt;bSeriesDelete.ZOrder\" xml:space=\"preserve\">\n    <value>11</value>\n  </data>\n  <data name=\"bCategoryUp.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>25</value>\n  </data>\n  <data name=\"&gt;&gt;bCategoryDelete.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"lChartData3.Text\" xml:space=\"preserve\">\n    <value>Bubble Size</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"cbChartData3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>247, 21</value>\n  </data>\n  <data name=\"bSeriesDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>49, 24</value>\n  </data>\n  <data name=\"cbChartData2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>14</value>\n  </data>\n  <data name=\"label7.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>33</value>\n  </data>\n  <data name=\"lChartData.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>112, 23</value>\n  </data>\n  <data name=\"bCategoryUp.Text\" xml:space=\"preserve\">\n    <value>Up</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 23</value>\n  </data>\n  <data name=\"bSeries.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"&gt;&gt;lChartData.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;bSeriesUp.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Chart Categories (X) Groupings</value>\n  </data>\n  <data name=\"bCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"lbChartCategories.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>232, 104</value>\n  </data>\n  <data name=\"&gt;&gt;bSeriesDown.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lChartData3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>18, 369</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData2.Name\" xml:space=\"preserve\">\n    <value>cbChartData2</value>\n  </data>\n  <data name=\"cbChartType.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 21</value>\n  </data>\n  <data name=\"&gt;&gt;lbChartCategories.ZOrder\" xml:space=\"preserve\">\n    <value>20</value>\n  </data>\n  <data name=\"&gt;&gt;bCategory.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lbFields.ZOrder\" xml:space=\"preserve\">\n    <value>21</value>\n  </data>\n  <data name=\"cbSubType.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>312, 48</value>\n  </data>\n  <data name=\"cbChartType.Items2\" xml:space=\"preserve\">\n    <value>Column</value>\n  </data>\n  <data name=\"bCategoryDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>49, 24</value>\n  </data>\n  <data name=\"&gt;&gt;bCategoryDown.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSets.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>23</value>\n  </data>\n  <data name=\"lChartData.Text\" xml:space=\"preserve\">\n    <value>Data Expression</value>\n  </data>\n  <data name=\"&gt;&gt;bCategoryDelete.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lChartData3.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;lChartData.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bCategoryDown.Text\" xml:space=\"preserve\">\n    <value>Down</value>\n  </data>\n  <data name=\"bCategory.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 24</value>\n  </data>\n  <data name=\"bCategoryDelete.Text\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"cbChartType.Items3\" xml:space=\"preserve\">\n    <value>Doughnut</value>\n  </data>\n  <data name=\"label7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 16</value>\n  </data>\n  <data name=\"cbSubType.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"lChartData.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 315</value>\n  </data>\n  <data name=\"&gt;&gt;bSeriesDelete.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>224, 177</value>\n  </data>\n  <data name=\"cbSubType.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 21</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bCategoryDown.ZOrder\" xml:space=\"preserve\">\n    <value>18</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData2.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DialogNewChart</value>\n  </data>\n  <data name=\"&gt;&gt;lChartData2.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lChartData.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bCategory.ZOrder\" xml:space=\"preserve\">\n    <value>17</value>\n  </data>\n  <data name=\"&gt;&gt;bCategoryDelete.Name\" xml:space=\"preserve\">\n    <value>bCategoryDelete</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>27</value>\n  </data>\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"&gt;&gt;label4.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartType.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bSeriesDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>49, 24</value>\n  </data>\n  <data name=\"lChartData.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>32</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbChartType.Items1\" xml:space=\"preserve\">\n    <value>Bar</value>\n  </data>\n  <data name=\"lbFields.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 160</value>\n  </data>\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>16</value>\n  </data>\n  <data name=\"cbChartData3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>15</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <data name=\"lbChartCategories.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"bSeries.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>185, 199</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSets.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label7.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"lChartData2.Text\" xml:space=\"preserve\">\n    <value>Y Coordinate</value>\n  </data>\n  <data name=\"cbChartType.Items6\" xml:space=\"preserve\">\n    <value>Bubble</value>\n  </data>\n  <data name=\"lChartData3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>112, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bSeries.Name\" xml:space=\"preserve\">\n    <value>bSeries</value>\n  </data>\n  <data name=\"lChartData2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>112, 23</value>\n  </data>\n  <data name=\"cbDataSets.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>360, 21</value>\n  </data>\n  <data name=\"&gt;&gt;lbChartCategories.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bCategoryUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>49, 25</value>\n  </data>\n  <data name=\"cbChartType.Items7\" xml:space=\"preserve\">\n    <value>Scatter</value>\n  </data>\n  <data name=\"&gt;&gt;lChartData2.Name\" xml:space=\"preserve\">\n    <value>lChartData2</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Name\" xml:space=\"preserve\">\n    <value>label4</value>\n  </data>\n  <data name=\"bSeriesDown.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"&gt;&gt;bCategoryUp.Name\" xml:space=\"preserve\">\n    <value>bCategoryUp</value>\n  </data>\n  <data name=\"lChartData3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>40</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Chart Type</value>\n  </data>\n  <data name=\"&gt;&gt;lbChartSeries.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bSeriesUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>49, 25</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"cbChartType.Items4\" xml:space=\"preserve\">\n    <value>Line</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>224, 81</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>13</value>\n  </data>\n  <data name=\"bCategoryDown.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"cbChartData2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>247, 21</value>\n  </data>\n  <data name=\"&gt;&gt;lbFields.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"lbChartCategories.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 69</value>\n  </data>\n  <data name=\"bCategoryUp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>398, 94</value>\n  </data>\n  <data name=\"bCancel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>17</value>\n  </data>\n  <data name=\"&gt;&gt;lbChartSeries.ZOrder\" xml:space=\"preserve\">\n    <value>15</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"bSeriesDelete.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"&gt;&gt;lChartData2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbChartType.Items5\" xml:space=\"preserve\">\n    <value>Pie</value>\n  </data>\n  <data name=\"bSeries.Text\" xml:space=\"preserve\">\n    <value>&gt;</value>\n  </data>\n  <data name=\"bSeriesUp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>398, 199</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData3.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bSeries.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 25</value>\n  </data>\n  <data name=\"&gt;&gt;lbChartCategories.Name\" xml:space=\"preserve\">\n    <value>lbChartCategories</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"bCategoryDown.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>398, 124</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>DataSet Fields</value>\n  </data>\n  <data name=\"cbChartType.Items\" xml:space=\"preserve\">\n    <value>Area</value>\n  </data>\n  <data name=\"&gt;&gt;lChartData3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbDataSets.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"lbChartSeries.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>232, 201</value>\n  </data>\n  <data name=\"label7.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 48</value>\n  </data>\n  <data name=\"lbChartSeries.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"cbChartType.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bSeriesDown.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbSubType.Name\" xml:space=\"preserve\">\n    <value>cbSubType</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 23</value>\n  </data>\n  <data name=\"&gt;&gt;lChartData3.Name\" xml:space=\"preserve\">\n    <value>lChartData3</value>\n  </data>\n  <data name=\"&gt;&gt;bCategoryUp.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbChartType.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 48</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>14</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>DataSet</value>\n  </data>\n  <data name=\"&gt;&gt;bCategory.Name\" xml:space=\"preserve\">\n    <value>bCategory</value>\n  </data>\n  <data name=\"&gt;&gt;bSeriesUp.ZOrder\" xml:space=\"preserve\">\n    <value>13</value>\n  </data>\n  <data name=\"bSeriesDelete.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>398, 258</value>\n  </data>\n  <data name=\"lbFields.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"bCategory.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"cbDataSets.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>80, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bSeriesUp.Name\" xml:space=\"preserve\">\n    <value>bSeriesUp</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bCategoryUp.ZOrder\" xml:space=\"preserve\">\n    <value>19</value>\n  </data>\n  <data name=\"&gt;&gt;lbFields.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bSeriesUp.Text\" xml:space=\"preserve\">\n    <value>Up</value>\n  </data>\n  <data name=\"&gt;&gt;bSeries.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>368, 392</value>\n  </data>\n  <data name=\"cbChartData.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>247, 21</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 80</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartType.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Name\" xml:space=\"preserve\">\n    <value>label7</value>\n  </data>\n  <data name=\"&gt;&gt;bCategoryDown.Name\" xml:space=\"preserve\">\n    <value>bCategoryDown</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartData3.Name\" xml:space=\"preserve\">\n    <value>cbChartData3</value>\n  </data>\n  <data name=\"&gt;&gt;bSeriesDown.ZOrder\" xml:space=\"preserve\">\n    <value>12</value>\n  </data>\n  <data name=\"&gt;&gt;label6.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"bCategoryDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>49, 24</value>\n  </data>\n  <data name=\"&gt;&gt;bSeriesDelete.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbChartData2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>137, 339</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>22</value>\n  </data>\n  <data name=\"bSeriesDelete.Text\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"&gt;&gt;lbChartSeries.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bSeries.ZOrder\" xml:space=\"preserve\">\n    <value>16</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbChartData.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>137, 312</value>\n  </data>\n  <data name=\"&gt;&gt;bSeries.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bSeriesDown.Name\" xml:space=\"preserve\">\n    <value>bSeriesDown</value>\n  </data>\n  <data name=\"&gt;&gt;cbChartType.Name\" xml:space=\"preserve\">\n    <value>cbChartType</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSets.ZOrder\" xml:space=\"preserve\">\n    <value>24</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>162, 14</value>\n  </data>\n  <data name=\"bSeriesDown.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>398, 229</value>\n  </data>\n  <data name=\"&gt;&gt;bCategoryDown.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lChartData.Name\" xml:space=\"preserve\">\n    <value>lChartData</value>\n  </data>\n  <data name=\"label6.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>36</value>\n  </data>\n  <data name=\"label6.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>232, 48</value>\n  </data>\n  <data name=\"lChartData2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>38</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Chart Series</value>\n  </data>\n  <data name=\"bCategoryDelete.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>398, 153</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSets.Name\" xml:space=\"preserve\">\n    <value>cbDataSets</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/DialogNewChart.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>286, 393</value>\n  </data>\n  <data name=\"bCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>382, 393</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>81, 23</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Набор данных</value>\n  </data>\n  <data name=\"cbDataSets.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>112, 16</value>\n  </data>\n  <data name=\"cbDataSets.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>345, 21</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>122, 23</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Поля набора данных</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>168, 24</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Группировки (ось X)</value>\n  </data>\n  <data name=\"bCategoryUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>59, 25</value>\n  </data>\n  <data name=\"bCategoryUp.Text\" xml:space=\"preserve\">\n    <value>Вверх</value>\n  </data>\n  <data name=\"bCategoryDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>59, 24</value>\n  </data>\n  <data name=\"bCategoryDown.Text\" xml:space=\"preserve\">\n    <value>Вниз</value>\n  </data>\n  <data name=\"bCategoryDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>59, 24</value>\n  </data>\n  <data name=\"bCategoryDelete.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"bSeriesDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>59, 24</value>\n  </data>\n  <data name=\"bSeriesDelete.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"bSeriesDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>59, 24</value>\n  </data>\n  <data name=\"bSeriesDown.Text\" xml:space=\"preserve\">\n    <value>Вниз</value>\n  </data>\n  <data name=\"bSeriesUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>59, 25</value>\n  </data>\n  <data name=\"bSeriesUp.Text\" xml:space=\"preserve\">\n    <value>Вверх</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Значения диаграммы</value>\n  </data>\n  <data name=\"lChartData.Text\" xml:space=\"preserve\">\n    <value>Выражение данных</value>\n  </data>\n  <data name=\"label6.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>297, 48</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Подтип</value>\n  </data>\n  <data name=\"cbSubType.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>377, 48</value>\n  </data>\n  <data name=\"cbChartType.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>112, 48</value>\n  </data>\n  <data name=\"label7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>90, 16</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Тип диаграммы</value>\n  </data>\n  <data name=\"lChartData2.Text\" xml:space=\"preserve\">\n    <value>Y-координата</value>\n  </data>\n  <data name=\"lChartData3.Text\" xml:space=\"preserve\">\n    <value>Размер пузырька</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Создание диаграммы</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DialogNewMatrix.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    internal partial class DialogNewMatrix : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tprivate DesignXmlDraw _Draw;\nprivate System.Windows.Forms.Button bOK;\nprivate System.Windows.Forms.Button bCancel;\nprivate System.Windows.Forms.Label label1;\nprivate System.Windows.Forms.ComboBox cbDataSets;\nprivate System.Windows.Forms.Label label2;\nprivate System.Windows.Forms.Label label3;\nprivate System.Windows.Forms.ListBox lbFields;\nprivate System.Windows.Forms.CheckedListBox lbMatrixColumns;\nprivate System.Windows.Forms.Button bColumnUp;\nprivate System.Windows.Forms.Button bColumnDown;\nprivate System.Windows.Forms.Button bColumn;\nprivate System.Windows.Forms.Button bRowSelect;\nprivate System.Windows.Forms.CheckedListBox lbMatrixRows;\nprivate System.Windows.Forms.Button bColumnDelete;\nprivate System.Windows.Forms.Button bRowDelete;\nprivate System.Windows.Forms.Button bRowDown;\nprivate System.Windows.Forms.Button bRowUp;\nprivate System.Windows.Forms.Label label4;\nprivate System.Windows.Forms.Label label5;\nprivate System.Windows.Forms.ComboBox cbMatrixCell;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DialogNewMatrix));\n\t\t\tthis.bOK = new System.Windows.Forms.Button();\n\t\t\tthis.bCancel = new System.Windows.Forms.Button();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.cbDataSets = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.lbFields = new System.Windows.Forms.ListBox();\n\t\t\tthis.lbMatrixColumns = new System.Windows.Forms.CheckedListBox();\n\t\t\tthis.bColumnUp = new System.Windows.Forms.Button();\n\t\t\tthis.bColumnDown = new System.Windows.Forms.Button();\n\t\t\tthis.bColumn = new System.Windows.Forms.Button();\n\t\t\tthis.bRowSelect = new System.Windows.Forms.Button();\n\t\t\tthis.lbMatrixRows = new System.Windows.Forms.CheckedListBox();\n\t\t\tthis.bColumnDelete = new System.Windows.Forms.Button();\n\t\t\tthis.bRowDelete = new System.Windows.Forms.Button();\n\t\t\tthis.bRowDown = new System.Windows.Forms.Button();\n\t\t\tthis.bRowUp = new System.Windows.Forms.Button();\n\t\t\tthis.label4 = new System.Windows.Forms.Label();\n\t\t\tthis.label5 = new System.Windows.Forms.Label();\n\t\t\tthis.cbMatrixCell = new System.Windows.Forms.ComboBox();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// bOK\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bOK, \"bOK\");\n\t\t\tthis.bOK.Name = \"bOK\";\n\t\t\tthis.bOK.Click += new System.EventHandler(this.bOK_Click);\n\t\t\t// \n\t\t\t// bCancel\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCancel, \"bCancel\");\n\t\t\tthis.bCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n\t\t\tthis.bCancel.Name = \"bCancel\";\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// cbDataSets\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbDataSets, \"cbDataSets\");\n\t\t\tthis.cbDataSets.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbDataSets.Name = \"cbDataSets\";\n\t\t\tthis.cbDataSets.SelectedIndexChanged += new System.EventHandler(this.cbDataSets_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// lbFields\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lbFields, \"lbFields\");\n\t\t\tthis.lbFields.Name = \"lbFields\";\n\t\t\tthis.lbFields.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;\n\t\t\t// \n\t\t\t// lbMatrixColumns\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lbMatrixColumns, \"lbMatrixColumns\");\n\t\t\tthis.lbMatrixColumns.Name = \"lbMatrixColumns\";\n\t\t\t// \n\t\t\t// bColumnUp\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bColumnUp, \"bColumnUp\");\n\t\t\tthis.bColumnUp.Name = \"bColumnUp\";\n\t\t\tthis.bColumnUp.Click += new System.EventHandler(this.bColumnUp_Click);\n\t\t\t// \n\t\t\t// bColumnDown\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bColumnDown, \"bColumnDown\");\n\t\t\tthis.bColumnDown.Name = \"bColumnDown\";\n\t\t\tthis.bColumnDown.Click += new System.EventHandler(this.bColumnDown_Click);\n\t\t\t// \n\t\t\t// bColumn\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bColumn, \"bColumn\");\n\t\t\tthis.bColumn.Name = \"bColumn\";\n\t\t\tthis.bColumn.Click += new System.EventHandler(this.bColumn_Click);\n\t\t\t// \n\t\t\t// bRowSelect\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bRowSelect, \"bRowSelect\");\n\t\t\tthis.bRowSelect.Name = \"bRowSelect\";\n\t\t\tthis.bRowSelect.Click += new System.EventHandler(this.bRow_Click);\n\t\t\t// \n\t\t\t// lbMatrixRows\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lbMatrixRows, \"lbMatrixRows\");\n\t\t\tthis.lbMatrixRows.Name = \"lbMatrixRows\";\n\t\t\t// \n\t\t\t// bColumnDelete\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bColumnDelete, \"bColumnDelete\");\n\t\t\tthis.bColumnDelete.Name = \"bColumnDelete\";\n\t\t\tthis.bColumnDelete.Click += new System.EventHandler(this.bColumnDelete_Click);\n\t\t\t// \n\t\t\t// bRowDelete\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bRowDelete, \"bRowDelete\");\n\t\t\tthis.bRowDelete.Name = \"bRowDelete\";\n\t\t\tthis.bRowDelete.Click += new System.EventHandler(this.bRowDelete_Click);\n\t\t\t// \n\t\t\t// bRowDown\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bRowDown, \"bRowDown\");\n\t\t\tthis.bRowDown.Name = \"bRowDown\";\n\t\t\tthis.bRowDown.Click += new System.EventHandler(this.bRowDown_Click);\n\t\t\t// \n\t\t\t// bRowUp\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bRowUp, \"bRowUp\");\n\t\t\tthis.bRowUp.Name = \"bRowUp\";\n\t\t\tthis.bRowUp.Click += new System.EventHandler(this.bRowUp_Click);\n\t\t\t// \n\t\t\t// label4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label4, \"label4\");\n\t\t\tthis.label4.Name = \"label4\";\n\t\t\t// \n\t\t\t// label5\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label5, \"label5\");\n\t\t\tthis.label5.Name = \"label5\";\n\t\t\t// \n\t\t\t// cbMatrixCell\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbMatrixCell, \"cbMatrixCell\");\n\t\t\tthis.cbMatrixCell.Name = \"cbMatrixCell\";\n\t\t\tthis.cbMatrixCell.TextChanged += new System.EventHandler(this.cbMatrixCell_TextChanged);\n\t\t\tthis.cbMatrixCell.Enter += new System.EventHandler(this.cbMatrixCell_Enter);\n\t\t\t// \n\t\t\t// DialogNewMatrix\n\t\t\t// \n\t\t\tthis.AcceptButton = this.bOK;\n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.CancelButton = this.bCancel;\n\t\t\tthis.Controls.Add(this.cbMatrixCell);\n\t\t\tthis.Controls.Add(this.label5);\n\t\t\tthis.Controls.Add(this.label4);\n\t\t\tthis.Controls.Add(this.bRowDelete);\n\t\t\tthis.Controls.Add(this.bRowDown);\n\t\t\tthis.Controls.Add(this.bRowUp);\n\t\t\tthis.Controls.Add(this.bColumnDelete);\n\t\t\tthis.Controls.Add(this.lbMatrixRows);\n\t\t\tthis.Controls.Add(this.bRowSelect);\n\t\t\tthis.Controls.Add(this.bColumn);\n\t\t\tthis.Controls.Add(this.bColumnDown);\n\t\t\tthis.Controls.Add(this.bColumnUp);\n\t\t\tthis.Controls.Add(this.lbMatrixColumns);\n\t\t\tthis.Controls.Add(this.lbFields);\n\t\t\tthis.Controls.Add(this.label3);\n\t\t\tthis.Controls.Add(this.label2);\n\t\t\tthis.Controls.Add(this.cbDataSets);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Controls.Add(this.bCancel);\n\t\t\tthis.Controls.Add(this.bOK);\n\t\t\tthis.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n\t\t\tthis.MaximizeBox = false;\n\t\t\tthis.MinimizeBox = false;\n\t\t\tthis.Name = \"DialogNewMatrix\";\n\t\t\tthis.ShowInTaskbar = false;\n\t\t\tthis.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/DialogNewMatrix.cs",
    "content": "using System;\nusing System.Drawing;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing System.Text;\nusing System.Xml;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// Summary description for DialogDataSourceRef.\n    /// </summary>\n    internal partial class DialogNewMatrix \n    {\n        internal DialogNewMatrix(DesignXmlDraw dxDraw, XmlNode container)\n        {\n            _Draw = dxDraw;\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            InitValues(container);\n        }\n\n        private void InitValues(XmlNode container)\n        {\n            this.bOK.Enabled = false;\n            //\n            // Obtain the existing DataSets info\n            //\n            object[] datasets = _Draw.DataSetNames;\n            if (datasets == null)\n                return;\t\t// not much to do if no DataSets\n\n            if (_Draw.IsDataRegion(container))\n            {\n                string s = _Draw.GetDataSetNameValue(container);\n                if (s == null)\n                    return;\n                this.cbDataSets.Items.Add(s);\n                this.cbDataSets.Enabled = false;\n            }\n            else\n                this.cbDataSets.Items.AddRange(datasets);\n            if (cbDataSets.Items.Count > 0)\n                cbDataSets.SelectedIndex = 0;\n        }\n\n        internal string MatrixXml\n        {\n            get\n            {\n                StringBuilder matrix = new StringBuilder(\"<Matrix>\");\n                matrix.AppendFormat(\"<DataSetName>{0}</DataSetName>\", this.cbDataSets.Text);\n                matrix.Append(\"<NoRows>Query returned no rows!</NoRows><Style>\" +\n                    \"<BorderStyle><Default>Solid</Default></BorderStyle></Style>\");\n\n                matrix.Append(\"<Corner><ReportItems><Textbox Name=\\\"Corner\\\"><Value>Corner</Value>\" +\n              \"<Style><BorderStyle><Default>Solid</Default></BorderStyle><BorderWidth>\" +\n                  \"<Left>1pt</Left><Right>1pt</Right><Top>1pt</Top><Bottom>1pt</Bottom>\" +\n                \"</BorderWidth><FontWeight>bold</FontWeight></Style>\" +\n                \"</Textbox></ReportItems></Corner>\");\n                // do the column groupings\n                matrix.Append(\"<ColumnGroupings>\");\n                foreach (string cname in this.lbMatrixColumns.Items)\n                {\n                    matrix.Append(\"<ColumnGrouping><Height>12pt</Height>\");\n                    matrix.Append(\"<DynamicColumns>\");\n                    matrix.AppendFormat(\"<Grouping><GroupExpressions>\" +\n                        \"<GroupExpression>=Fields!{0}.Value</GroupExpression>\" +\n                        \"</GroupExpressions></Grouping>\", cname);\n                    matrix.AppendFormat(\"<ReportItems><Textbox>\" +\n                        \"<Value>=Fields!{0}.Value</Value>\" +\n                        \"<Style><BorderStyle><Default>Solid</Default></BorderStyle></Style>\" +\n                        \"</Textbox></ReportItems>\", cname);\n                    int iChecked = this.lbMatrixColumns.CheckedItems.IndexOf(cname);\n                    if (iChecked >= 0)\n                    {\n                        matrix.AppendFormat(\"<Subtotal><ReportItems><Textbox>\" +\n                            \"<Value>{0} Subtotal</Value>\" +\n                            \"<Style><BorderStyle><Default>Solid</Default></BorderStyle></Style>\" +\n                            \"</Textbox></ReportItems></Subtotal>\", cname);\n                    }\n\n                    matrix.Append(\"</DynamicColumns>\");\n                    matrix.Append(\"</ColumnGrouping>\");\n                }\n                matrix.Append(\"</ColumnGroupings>\");\n                // do the row groupings\n                matrix.Append(\"<RowGroupings>\");\n                foreach (string rname in this.lbMatrixRows.Items)\n                {\n                    matrix.Append(\"<RowGrouping><Width>1in</Width>\");\n                    matrix.Append(\"<DynamicRows>\");\n                    matrix.AppendFormat(\"<Grouping><GroupExpressions>\" +\n                        \"<GroupExpression>=Fields!{0}.Value</GroupExpression>\" +\n                        \"</GroupExpressions></Grouping>\", rname);\n                    matrix.AppendFormat(\"<ReportItems><Textbox>\" +\n                        \"<Value>=Fields!{0}.Value</Value>\" +\n                        \"<Style><BorderStyle><Default>Solid</Default></BorderStyle></Style>\" +\n                        \"</Textbox></ReportItems>\", rname);\n                    int iChecked = this.lbMatrixRows.CheckedItems.IndexOf(rname);\n                    if (iChecked >= 0)\n                    {\n                        matrix.AppendFormat(\"<Subtotal><ReportItems><Textbox>\" +\n                            \"<Value>{0} Subtotal</Value>\" +\n                            \"<Style><BorderStyle><Default>Solid</Default></BorderStyle></Style>\" +\n                            \"</Textbox></ReportItems></Subtotal>\", rname);\n                    }\n\n                    matrix.Append(\"</DynamicRows>\");\n                    matrix.Append(\"</RowGrouping>\");\n                }\n                matrix.Append(\"</RowGroupings>\");\n                // Matrix Columns\n                matrix.Append(\"<MatrixColumns><MatrixColumn><Width>1in</Width></MatrixColumn></MatrixColumns>\");\n                // Matrix Rows\n                matrix.AppendFormat(\"<MatrixRows><MatrixRow><Height>12pt</Height>\" +\n                    \"<MatrixCells><MatrixCell><ReportItems>\" +\n                    \"<Textbox><Value>{0}</Value>\" +\n                    \"<Style><BorderStyle><Default>Solid</Default></BorderStyle></Style></Textbox>\" +\n                    \"</ReportItems></MatrixCell></MatrixCells>\" +\n                    \"</MatrixRow></MatrixRows>\", this.cbMatrixCell.Text);\n                // end of matrix defintion\n                matrix.Append(\"</Matrix>\");\n\n                return matrix.ToString();\n            }\n        }\n\n        private void bOK_Click(object sender, System.EventArgs e)\n        {\n            // apply the result\n            DialogResult = DialogResult.OK;\n        }\n\n        private void cbDataSets_SelectedIndexChanged(object sender, System.EventArgs e)\n        {\n            this.lbMatrixColumns.Items.Clear();\n            this.lbMatrixRows.Items.Clear();\n            bOK.Enabled = false;\n            this.lbFields.Items.Clear();\n            string[] fields = _Draw.GetFields(cbDataSets.Text, false);\n            if (fields != null)\n                lbFields.Items.AddRange(fields);\n        }\n\n        private void bColumn_Click(object sender, System.EventArgs e)\n        {\n            ICollection sic = lbFields.SelectedIndices;\n            int count = sic.Count;\n            foreach (int i in sic)\n            {\n                string fname = (string)lbFields.Items[i];\n                if (this.lbMatrixColumns.Items.IndexOf(fname) < 0)\n                    lbMatrixColumns.Items.Add(fname);\n            }\n            OkEnable();\n        }\n\n        private void bRow_Click(object sender, System.EventArgs e)\n        {\n            ICollection sic = lbFields.SelectedIndices;\n            int count = sic.Count;\n            foreach (int i in sic)\n            {\n                string fname = (string)lbFields.Items[i];\n                if (this.lbMatrixRows.Items.IndexOf(fname) < 0)\n                    lbMatrixRows.Items.Add(fname);\n            }\n            OkEnable();\n        }\n\n        private void bColumnUp_Click(object sender, System.EventArgs e)\n        {\n            int index = lbMatrixColumns.SelectedIndex;\n            if (index <= 0)\n                return;\n\n            string prename = (string)lbMatrixColumns.Items[index - 1];\n            lbMatrixColumns.Items.RemoveAt(index - 1);\n            lbMatrixColumns.Items.Insert(index, prename);\n        }\n\n        private void bColumnDown_Click(object sender, System.EventArgs e)\n        {\n            int index = lbMatrixColumns.SelectedIndex;\n            if (index < 0 || index + 1 == lbMatrixColumns.Items.Count)\n                return;\n\n            string postname = (string)lbMatrixColumns.Items[index + 1];\n            lbMatrixColumns.Items.RemoveAt(index + 1);\n            lbMatrixColumns.Items.Insert(index, postname);\n        }\n\n        private void bColumnDelete_Click(object sender, System.EventArgs e)\n        {\n            int index = lbMatrixColumns.SelectedIndex;\n            if (index < 0)\n                return;\n\n            lbMatrixColumns.Items.RemoveAt(index);\n            OkEnable();\n        }\n\n        private void bRowUp_Click(object sender, System.EventArgs e)\n        {\n            int index = lbMatrixRows.SelectedIndex;\n            if (index <= 0)\n                return;\n\n            string prename = (string)lbMatrixRows.Items[index - 1];\n            lbMatrixRows.Items.RemoveAt(index - 1);\n            lbMatrixRows.Items.Insert(index, prename);\n        }\n\n        private void bRowDown_Click(object sender, System.EventArgs e)\n        {\n            int index = lbMatrixRows.SelectedIndex;\n            if (index < 0 || index + 1 == lbMatrixRows.Items.Count)\n                return;\n\n            string postname = (string)lbMatrixRows.Items[index + 1];\n            lbMatrixRows.Items.RemoveAt(index + 1);\n            lbMatrixRows.Items.Insert(index, postname);\n        }\n\n        private void bRowDelete_Click(object sender, System.EventArgs e)\n        {\n            int index = lbMatrixRows.SelectedIndex;\n            if (index < 0)\n                return;\n\n            lbMatrixRows.Items.RemoveAt(index);\n            OkEnable();\n        }\n\n        private void OkEnable()\n        {\n            // We need values in datasets, rows, columns, and matrix cells for OK to work correctly\n            bOK.Enabled = this.lbMatrixColumns.Items.Count > 0 &&\n                          this.lbMatrixRows.Items.Count > 0 &&\n                        this.cbMatrixCell.Text != null &&\n                        this.cbMatrixCell.Text.Length > 0 &&\n                        this.cbDataSets.Text != null &&\n                        this.cbDataSets.Text.Length > 0;\n        }\n\n        private void cbMatrixCell_Enter(object sender, System.EventArgs e)\n        {\n            cbMatrixCell.Items.Clear();\n            foreach (string field in this.lbFields.Items)\n            {\n                if (this.lbMatrixColumns.Items.IndexOf(field) >= 0 ||\n                    this.lbMatrixRows.Items.IndexOf(field) >= 0)\n                    continue;\n                // Field selected in columns and rows\n                this.cbMatrixCell.Items.Add(string.Format(\"=Sum(Fields!{0}.Value)\", field));\n            }\n        }\n\n        private void cbMatrixCell_TextChanged(object sender, System.EventArgs e)\n        {\n            OkEnable();\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/DialogNewMatrix.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"&gt;&gt;lbMatrixRows.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.ZOrder\" xml:space=\"preserve\">\n    <value>18</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>31</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bColumnDown.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>392, 112</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>184, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bColumnDown.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"bCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>272, 368</value>\n  </data>\n  <data name=\"label5.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>32</value>\n  </data>\n  <data name=\"&gt;&gt;lbFields.Name\" xml:space=\"preserve\">\n    <value>lbFields</value>\n  </data>\n  <data name=\"&gt;&gt;bRowSelect.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lbMatrixRows.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 94</value>\n  </data>\n  <data name=\"bRowDown.Text\" xml:space=\"preserve\">\n    <value>Down</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bRowSelect.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bColumnUp.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lbFields.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 80</value>\n  </data>\n  <data name=\"&gt;&gt;bColumn.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bRowSelect.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 24</value>\n  </data>\n  <data name=\"bRowDelete.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"bColumnDown.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;lbMatrixColumns.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Name\" xml:space=\"preserve\">\n    <value>bCancel</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>New Matrix</value>\n  </data>\n  <data name=\"bColumnUp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>392, 80</value>\n  </data>\n  <data name=\"&gt;&gt;lbMatrixColumns.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bColumn.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"bRowDown.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>392, 240</value>\n  </data>\n  <data name=\"bRowSelect.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>184, 216</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>14</value>\n  </data>\n  <data name=\"&gt;&gt;bColumnDelete.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bRowDelete.Text\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"&gt;&gt;bRowDelete.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bRowDelete.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>392, 272</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>120, 23</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Matrix Columns (check to subtotal)</value>\n  </data>\n  <data name=\"&gt;&gt;bColumnDown.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>Matrix Cell Expression</value>\n  </data>\n  <data name=\"bColumnDown.Text\" xml:space=\"preserve\">\n    <value>Down</value>\n  </data>\n  <data name=\"&gt;&gt;lbFields.ZOrder\" xml:space=\"preserve\">\n    <value>13</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSets.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bRowDown.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bRowDelete.Name\" xml:space=\"preserve\">\n    <value>bRowDelete</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>15</value>\n  </data>\n  <data name=\"bColumnUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 24</value>\n  </data>\n  <data name=\"bColumn.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"bRowDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 24</value>\n  </data>\n  <data name=\"bRowDown.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Name\" xml:space=\"preserve\">\n    <value>label5</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>DataSet</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>224, 184</value>\n  </data>\n  <data name=\"&gt;&gt;cbMatrixCell.Name\" xml:space=\"preserve\">\n    <value>cbMatrixCell</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bRowDown.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DialogNewMatrix</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bRowUp.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbMatrixCell.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bColumnDelete.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>392, 144</value>\n  </data>\n  <data name=\"&gt;&gt;bColumnDelete.Name\" xml:space=\"preserve\">\n    <value>bColumnDelete</value>\n  </data>\n  <data name=\"bColumnUp.Text\" xml:space=\"preserve\">\n    <value>Up</value>\n  </data>\n  <data name=\"bColumnUp.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"bColumnDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 24</value>\n  </data>\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"&gt;&gt;label4.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bRowUp.Name\" xml:space=\"preserve\">\n    <value>bRowUp</value>\n  </data>\n  <data name=\"&gt;&gt;bColumnUp.Name\" xml:space=\"preserve\">\n    <value>bColumnUp</value>\n  </data>\n  <data name=\"lbMatrixRows.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>232, 208</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>19</value>\n  </data>\n  <data name=\"&gt;&gt;lbFields.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSets.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label5.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 320</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"lbMatrixColumns.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 94</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <data name=\"&gt;&gt;bRowDelete.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bRowUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 24</value>\n  </data>\n  <data name=\"&gt;&gt;bRowSelect.Name\" xml:space=\"preserve\">\n    <value>bRowSelect</value>\n  </data>\n  <data name=\"bColumn.Text\" xml:space=\"preserve\">\n    <value>&gt;</value>\n  </data>\n  <data name=\"bColumn.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>184, 88</value>\n  </data>\n  <data name=\"&gt;&gt;cbMatrixCell.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Name\" xml:space=\"preserve\">\n    <value>label4</value>\n  </data>\n  <data name=\"bRowUp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>392, 208</value>\n  </data>\n  <data name=\"cbDataSets.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>360, 21</value>\n  </data>\n  <data name=\"cbMatrixCell.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 336</value>\n  </data>\n  <data name=\"&gt;&gt;bColumnUp.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>224, 56</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>13</value>\n  </data>\n  <data name=\"&gt;&gt;bRowDown.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;bRowSelect.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"&gt;&gt;bColumnDown.Name\" xml:space=\"preserve\">\n    <value>bColumnDown</value>\n  </data>\n  <data name=\"&gt;&gt;bRowDown.Name\" xml:space=\"preserve\">\n    <value>bRowDown</value>\n  </data>\n  <data name=\"&gt;&gt;bColumnDelete.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>13</value>\n  </data>\n  <data name=\"bCancel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>14</value>\n  </data>\n  <data name=\"lbMatrixRows.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;lbMatrixRows.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bColumn.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 24</value>\n  </data>\n  <data name=\"bColumnDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 24</value>\n  </data>\n  <data name=\"&gt;&gt;lbMatrixRows.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bRowSelect.Text\" xml:space=\"preserve\">\n    <value>&gt;</value>\n  </data>\n  <data name=\"&gt;&gt;bRowUp.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bRowDelete.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bRowDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 24</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>DataSet Fields</value>\n  </data>\n  <data name=\"cbDataSets.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"lbFields.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 225</value>\n  </data>\n  <data name=\"&gt;&gt;lbMatrixColumns.Name\" xml:space=\"preserve\">\n    <value>lbMatrixColumns</value>\n  </data>\n  <data name=\"bColumnDelete.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;label5.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"bRowUp.Text\" xml:space=\"preserve\">\n    <value>Up</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 23</value>\n  </data>\n  <data name=\"&gt;&gt;lbMatrixRows.Name\" xml:space=\"preserve\">\n    <value>lbMatrixRows</value>\n  </data>\n  <data name=\"&gt;&gt;bColumnDown.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSets.ZOrder\" xml:space=\"preserve\">\n    <value>16</value>\n  </data>\n  <data name=\"lbFields.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"cbDataSets.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>80, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lbFields.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lbMatrixColumns.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"bCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>368, 368</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>17</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"lbMatrixColumns.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>232, 80</value>\n  </data>\n  <data name=\"&gt;&gt;bRowUp.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 56</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>456, 400</value>\n  </data>\n  <data name=\"bRowUp.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;cbMatrixCell.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bColumnUp.ZOrder\" xml:space=\"preserve\">\n    <value>11</value>\n  </data>\n  <data name=\"&gt;&gt;bColumnDelete.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;bRowSelect.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbMatrixCell.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>368, 21</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>14</value>\n  </data>\n  <data name=\"&gt;&gt;lbMatrixColumns.ZOrder\" xml:space=\"preserve\">\n    <value>12</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bColumn.Name\" xml:space=\"preserve\">\n    <value>bColumn</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>184, 23</value>\n  </data>\n  <data name=\"cbMatrixCell.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"&gt;&gt;bColumn.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bColumnDelete.Text\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Matrix Rows (check to subtotal)</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSets.Name\" xml:space=\"preserve\">\n    <value>cbDataSets</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/DialogNewMatrix.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>84, 23</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Набор данных</value>\n  </data>\n  <data name=\"cbDataSets.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>106, 16</value>\n  </data>\n  <data name=\"cbDataSets.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>334, 21</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>120, 23</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Поля набора данных</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>123, 23</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Столбцы матрицы</value>\n  </data>\n  <data name=\"lbMatrixColumns.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>222, 80</value>\n  </data>\n  <data name=\"bColumnUp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>382, 80</value>\n  </data>\n  <data name=\"bColumnUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>58, 24</value>\n  </data>\n  <data name=\"bColumnUp.Text\" xml:space=\"preserve\">\n    <value>Вверх</value>\n  </data>\n  <data name=\"bColumnDown.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>382, 112</value>\n  </data>\n  <data name=\"bColumnDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>58, 24</value>\n  </data>\n  <data name=\"bColumnDown.Text\" xml:space=\"preserve\">\n    <value>Вниз</value>\n  </data>\n  <data name=\"bColumn.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>179, 88</value>\n  </data>\n  <data name=\"bRowSelect.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>179, 216</value>\n  </data>\n  <data name=\"lbMatrixRows.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>222, 208</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bColumnDelete.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"bColumnDelete.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>382, 144</value>\n  </data>\n  <data name=\"bColumnDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>58, 24</value>\n  </data>\n  <data name=\"bColumnDelete.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"bRowDelete.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>382, 272</value>\n  </data>\n  <data name=\"bRowDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>58, 24</value>\n  </data>\n  <data name=\"bRowDelete.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"bRowDown.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>382, 240</value>\n  </data>\n  <data name=\"bRowDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>58, 24</value>\n  </data>\n  <data name=\"bRowDown.Text\" xml:space=\"preserve\">\n    <value>Вниз</value>\n  </data>\n  <data name=\"bRowUp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>382, 208</value>\n  </data>\n  <data name=\"bRowUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>58, 24</value>\n  </data>\n  <data name=\"bRowUp.Text\" xml:space=\"preserve\">\n    <value>Вверх</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>224, 182</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>139, 23</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Строки матрицы</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>161, 23</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>Выражение ячейки матрицы</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Создание матрицы</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DialogNewTable.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    internal partial class DialogNewTable : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tprivate DesignXmlDraw _Draw;\nprivate System.Windows.Forms.Button bOK;\nprivate System.Windows.Forms.Button bCancel;\nprivate System.Windows.Forms.Label label1;\nprivate System.Windows.Forms.ComboBox cbDataSets;\nprivate System.Windows.Forms.Label label2;\nprivate System.Windows.Forms.Label label3;\nprivate System.Windows.Forms.ListBox lbFields;\nprivate System.Windows.Forms.CheckedListBox lbTableColumns;\nprivate System.Windows.Forms.Button bUp;\nprivate System.Windows.Forms.Button bDown;\nprivate System.Windows.Forms.Button bRight;\nprivate System.Windows.Forms.Button bAllRight;\nprivate System.Windows.Forms.Button bLeft;\nprivate System.Windows.Forms.Button bAllLeft;\nprivate System.Windows.Forms.Label label4;\nprivate System.Windows.Forms.ComboBox cbGroupColumn;\nprivate System.Windows.Forms.CheckBox chkGrandTotals;\nprivate System.Windows.Forms.GroupBox groupBox1;\nprivate System.Windows.Forms.RadioButton rbHorz;\nprivate System.Windows.Forms.RadioButton rbVert;\nprivate System.Windows.Forms.RadioButton rbVertComp;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DialogNewTable));\n\t\t\tthis.bOK = new System.Windows.Forms.Button();\n\t\t\tthis.bCancel = new System.Windows.Forms.Button();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.cbDataSets = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.lbFields = new System.Windows.Forms.ListBox();\n\t\t\tthis.lbTableColumns = new System.Windows.Forms.CheckedListBox();\n\t\t\tthis.bUp = new System.Windows.Forms.Button();\n\t\t\tthis.bDown = new System.Windows.Forms.Button();\n\t\t\tthis.bRight = new System.Windows.Forms.Button();\n\t\t\tthis.bAllRight = new System.Windows.Forms.Button();\n\t\t\tthis.bLeft = new System.Windows.Forms.Button();\n\t\t\tthis.bAllLeft = new System.Windows.Forms.Button();\n\t\t\tthis.label4 = new System.Windows.Forms.Label();\n\t\t\tthis.cbGroupColumn = new System.Windows.Forms.ComboBox();\n\t\t\tthis.chkGrandTotals = new System.Windows.Forms.CheckBox();\n\t\t\tthis.groupBox1 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.rbVertComp = new System.Windows.Forms.RadioButton();\n\t\t\tthis.rbVert = new System.Windows.Forms.RadioButton();\n\t\t\tthis.rbHorz = new System.Windows.Forms.RadioButton();\n\t\t\tthis.groupBox1.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// bOK\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bOK, \"bOK\");\n\t\t\tthis.bOK.Name = \"bOK\";\n\t\t\tthis.bOK.Click += new System.EventHandler(this.bOK_Click);\n\t\t\t// \n\t\t\t// bCancel\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCancel, \"bCancel\");\n\t\t\tthis.bCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n\t\t\tthis.bCancel.Name = \"bCancel\";\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// cbDataSets\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbDataSets, \"cbDataSets\");\n\t\t\tthis.cbDataSets.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbDataSets.Name = \"cbDataSets\";\n\t\t\tthis.cbDataSets.SelectedIndexChanged += new System.EventHandler(this.cbDataSets_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// lbFields\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lbFields, \"lbFields\");\n\t\t\tthis.lbFields.Name = \"lbFields\";\n\t\t\tthis.lbFields.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;\n\t\t\t// \n\t\t\t// lbTableColumns\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lbTableColumns, \"lbTableColumns\");\n\t\t\tthis.lbTableColumns.Name = \"lbTableColumns\";\n\t\t\t// \n\t\t\t// bUp\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bUp, \"bUp\");\n\t\t\tthis.bUp.Name = \"bUp\";\n\t\t\tthis.bUp.Click += new System.EventHandler(this.bUp_Click);\n\t\t\t// \n\t\t\t// bDown\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bDown, \"bDown\");\n\t\t\tthis.bDown.Name = \"bDown\";\n\t\t\tthis.bDown.Click += new System.EventHandler(this.bDown_Click);\n\t\t\t// \n\t\t\t// bRight\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bRight, \"bRight\");\n\t\t\tthis.bRight.Name = \"bRight\";\n\t\t\tthis.bRight.Click += new System.EventHandler(this.bRight_Click);\n\t\t\t// \n\t\t\t// bAllRight\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bAllRight, \"bAllRight\");\n\t\t\tthis.bAllRight.Name = \"bAllRight\";\n\t\t\tthis.bAllRight.Click += new System.EventHandler(this.bAllRight_Click);\n\t\t\t// \n\t\t\t// bLeft\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bLeft, \"bLeft\");\n\t\t\tthis.bLeft.Name = \"bLeft\";\n\t\t\tthis.bLeft.Click += new System.EventHandler(this.bLeft_Click);\n\t\t\t// \n\t\t\t// bAllLeft\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bAllLeft, \"bAllLeft\");\n\t\t\tthis.bAllLeft.Name = \"bAllLeft\";\n\t\t\tthis.bAllLeft.Click += new System.EventHandler(this.bAllLeft_Click);\n\t\t\t// \n\t\t\t// label4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label4, \"label4\");\n\t\t\tthis.label4.Name = \"label4\";\n\t\t\t// \n\t\t\t// cbGroupColumn\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbGroupColumn, \"cbGroupColumn\");\n\t\t\tthis.cbGroupColumn.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbGroupColumn.Name = \"cbGroupColumn\";\n\t\t\tthis.cbGroupColumn.Enter += new System.EventHandler(this.cbGroupColumn_Enter);\n\t\t\t// \n\t\t\t// chkGrandTotals\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkGrandTotals, \"chkGrandTotals\");\n\t\t\tthis.chkGrandTotals.Name = \"chkGrandTotals\";\n\t\t\t// \n\t\t\t// groupBox1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox1, \"groupBox1\");\n\t\t\tthis.groupBox1.Controls.Add(this.rbVertComp);\n\t\t\tthis.groupBox1.Controls.Add(this.rbVert);\n\t\t\tthis.groupBox1.Controls.Add(this.rbHorz);\n\t\t\tthis.groupBox1.Name = \"groupBox1\";\n\t\t\tthis.groupBox1.TabStop = false;\n\t\t\t// \n\t\t\t// rbVertComp\n\t\t\t// \n\t\t\tresources.ApplyResources(this.rbVertComp, \"rbVertComp\");\n\t\t\tthis.rbVertComp.Name = \"rbVertComp\";\n\t\t\t// \n\t\t\t// rbVert\n\t\t\t// \n\t\t\tresources.ApplyResources(this.rbVert, \"rbVert\");\n\t\t\tthis.rbVert.Name = \"rbVert\";\n\t\t\t// \n\t\t\t// rbHorz\n\t\t\t// \n\t\t\tresources.ApplyResources(this.rbHorz, \"rbHorz\");\n\t\t\tthis.rbHorz.Name = \"rbHorz\";\n\t\t\tthis.rbHorz.CheckedChanged += new System.EventHandler(this.rbHorz_CheckedChanged);\n\t\t\t// \n\t\t\t// DialogNewTable\n\t\t\t// \n\t\t\tthis.AcceptButton = this.bOK;\n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.CancelButton = this.bCancel;\n\t\t\tthis.Controls.Add(this.groupBox1);\n\t\t\tthis.Controls.Add(this.chkGrandTotals);\n\t\t\tthis.Controls.Add(this.cbGroupColumn);\n\t\t\tthis.Controls.Add(this.label4);\n\t\t\tthis.Controls.Add(this.bAllLeft);\n\t\t\tthis.Controls.Add(this.bLeft);\n\t\t\tthis.Controls.Add(this.bAllRight);\n\t\t\tthis.Controls.Add(this.bRight);\n\t\t\tthis.Controls.Add(this.bDown);\n\t\t\tthis.Controls.Add(this.bUp);\n\t\t\tthis.Controls.Add(this.lbTableColumns);\n\t\t\tthis.Controls.Add(this.lbFields);\n\t\t\tthis.Controls.Add(this.label3);\n\t\t\tthis.Controls.Add(this.label2);\n\t\t\tthis.Controls.Add(this.cbDataSets);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Controls.Add(this.bCancel);\n\t\t\tthis.Controls.Add(this.bOK);\n\t\t\tthis.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n\t\t\tthis.MaximizeBox = false;\n\t\t\tthis.MinimizeBox = false;\n\t\t\tthis.Name = \"DialogNewTable\";\n\t\t\tthis.ShowInTaskbar = false;\n\t\t\tthis.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;\n\t\t\tthis.groupBox1.ResumeLayout(false);\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/DialogNewTable.cs",
    "content": "using System;\nusing System.Drawing;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing System.Text;\nusing System.Xml;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// Summary description for DialogDataSourceRef.\n    /// </summary>\n    internal partial class DialogNewTable \n    {\n        public DialogNewTable(DesignXmlDraw dxDraw, XmlNode container)\n        {\n            _Draw = dxDraw;\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            InitValues(container);\n        }\n\n        private void InitValues(XmlNode container)\n        {\n            this.bOK.Enabled = false;\n            rbHorz.Checked = true;\n            //\n            // Obtain the existing DataSets info\n            //\n            object[] datasets = _Draw.DataSetNames;\n            if (datasets == null)\n                return;\t\t// not much to do if no DataSets\n\n            if (_Draw.IsDataRegion(container))\n            {\n                string s = _Draw.GetDataSetNameValue(container);\n                if (s == null)\n                    return;\n                this.cbDataSets.Items.Add(s);\n                this.cbDataSets.Enabled = false;\n            }\n            else\n                this.cbDataSets.Items.AddRange(datasets);\n            if (cbDataSets.Items.Count > 0)\n                cbDataSets.SelectedIndex = 0;\n        }\n\n        internal string TableXml\n        {\n            get\n            {\n                return rbHorz.Checked ? TableXmlHorz : TableXmlVert;\n            }\n        }\n\n        private string TableXmlHorz\n        {\n            get\n            {\n                StringBuilder table = new StringBuilder(\"<Table>\");\n                table.AppendFormat(\"<DataSetName>{0}</DataSetName>\", this.cbDataSets.Text);\n                table.Append(\"<NoRows>Query returned no rows!</NoRows><Style>\" +\n                    \"<BorderStyle><Default>Solid</Default></BorderStyle></Style>\");\n\n                StringBuilder tablecolumns = new StringBuilder(\"<TableColumns>\");\n\n                StringBuilder headercolumns =\n                    new StringBuilder(\"<Header><TableRows><TableRow><Height>12 pt</Height><TableCells>\");\n\n                StringBuilder detailcolumns =\n                    new StringBuilder(\"<Details><TableRows><TableRow><Height>12 pt</Height><TableCells>\");\n\n                StringBuilder tablegroups = null;\n                StringBuilder footergroup = null;\n                string gname = this.cbGroupColumn.Text;\n                if (gname != null && gname.Trim() != \"\")\n                {\n                    gname = gname.Trim();\n                    tablegroups =\n                        new StringBuilder(\"<TableGroups><TableGroup><Grouping><GroupExpressions><GroupExpression>\");\n                    tablegroups.AppendFormat(\"=Fields!{0}.Value</GroupExpression></GroupExpressions></Grouping>\", gname);\n                    tablegroups.Append(\"<Header><TableRows><TableRow><Height>12 pt</Height><TableCells>\");\n                    footergroup =\n                        new StringBuilder(\"<Footer><TableRows><TableRow><Height>12 pt</Height><TableCells>\");\n                }\n                else\n                    gname = null;\n\n                StringBuilder footercolumns = null;\n                if (this.chkGrandTotals.Checked)\n                    footercolumns =\n                        new StringBuilder(\"<Footer><TableRows><TableRow><Height>12 pt</Height><TableCells>\");\n\n                bool bHaveFooter = false;\t\t// indicates one or more columns have been checked for subtotaling\n                foreach (string colname in this.lbTableColumns.Items)\n                {\n                    tablecolumns.Append(\"<TableColumn><Width>1in</Width></TableColumn>\");\n                    headercolumns.AppendFormat(\"<TableCell><ReportItems><Textbox><Value>{0}</Value>\" +\n                      \"<Style><TextAlign>Center</TextAlign><BorderStyle><Default>Solid</Default></BorderStyle>\" +\n                      \"<FontWeight>Bold</FontWeight></Style>\" +\n                        \"</Textbox></ReportItems></TableCell>\", colname);\n                    string dcol;\n                    string gcol;\n                    if (gname == colname)\n                    {\n                        dcol = \"\";\n                        gcol = string.Format(\"=Fields!{0}.Value\", colname);\n                    }\n                    else\n                    {\n                        gcol = \"\";\n                        dcol = string.Format(\"=Fields!{0}.Value\", colname);\n                    }\n                    int iChecked = this.lbTableColumns.CheckedItems.IndexOf(colname);\n                    string fcol = \"\";\n                    if (iChecked >= 0)\n                    {\n                        bHaveFooter = true;\n                        fcol = string.Format(\"=Sum(Fields!{0}.Value)\", colname);\n                    }\n                    if (tablegroups != null)\n                    {\n                        tablegroups.AppendFormat(\"<TableCell><ReportItems><Textbox>\" +\n                            \"<Value>{0}</Value><CanGrow>true</CanGrow>\" +\n                            \"<Style><BorderStyle><Default>Solid</Default></BorderStyle>\" +\n                            \"</Style></Textbox></ReportItems></TableCell>\", gcol);\n                        footergroup.AppendFormat(\"<TableCell><ReportItems><Textbox>\" +\n                            \"<Value>{0}</Value><CanGrow>true</CanGrow>\" +\n                            \"<Style><BorderStyle><Default>Solid</Default></BorderStyle>\" +\n                            \"</Style></Textbox></ReportItems></TableCell>\", fcol);\n                    }\n                    detailcolumns.AppendFormat(\"<TableCell><ReportItems><Textbox>\" +\n                      \"<Value>{0}</Value><CanGrow>true</CanGrow>\" +\n                      \"<Style><BorderStyle><Default>Solid</Default></BorderStyle>\" +\n                      \"</Style></Textbox></ReportItems></TableCell>\", dcol);\n                    if (footercolumns != null)\n                        footercolumns.AppendFormat(\"<TableCell><ReportItems><Textbox>\" +\n                            \"<Value>{0}</Value><CanGrow>true</CanGrow>\" +\n                            \"<Style><BorderStyle><Default>Solid</Default></BorderStyle>\" +\n                            \"</Style></Textbox></ReportItems></TableCell>\", fcol);\n                }\n                tablecolumns.Append(\"</TableColumns>\");\n                table.Append(tablecolumns.ToString());\n                headercolumns.Append(\"</TableCells></TableRow></TableRows>\" +\n                    \"<RepeatOnNewPage>true</RepeatOnNewPage></Header>\");\n                table.Append(headercolumns.ToString());\n                detailcolumns.Append(\"</TableCells></TableRow></TableRows>\" +\n                    \"</Details>\");\n                table.Append(detailcolumns.ToString());\n                if (footercolumns != null)\n                {\n                    footercolumns.Append(\"</TableCells></TableRow></TableRows>\" +\n                        \"</Footer>\");\n                    table.Append(footercolumns.ToString());\n                }\n                if (tablegroups != null)\n                {\n                    tablegroups.Append(\"</TableCells></TableRow></TableRows>\" +\n                        \"</Header>\");\n                    if (bHaveFooter)\n                    {\n                        footergroup.Append(\"</TableCells></TableRow></TableRows>\" +\n                            \"</Footer>\");\n                        tablegroups.Append(footergroup.ToString());\n                    }\n                    tablegroups.Append(\"</TableGroup></TableGroups>\");\n                    table.Append(tablegroups);\n                }\n                table.Append(\"</Table>\");\n\n                return table.ToString();\n            }\n        }\n\n        private string TableXmlVert\n        {\n            get\n            {\n                StringBuilder table = new StringBuilder(\"<Table>\");\n                table.AppendFormat(\"<DataSetName>{0}</DataSetName>\", this.cbDataSets.Text);\n                table.Append(\"<NoRows>Query returned no rows!</NoRows><Style>\" +\n                    \"<BorderStyle><Default>Solid</Default></BorderStyle></Style>\");\n\n                table.Append(\"<TableColumns><TableColumn><Width>5in</Width></TableColumn></TableColumns>\");\n\n                table.Append(\"<Details><TableRows>\" + Environment.NewLine);\n\n                foreach (string colname in this.lbTableColumns.Items)\n                {\n                    string dcol = string.Format(\"Fields!{0}.Value\", colname);\n\n                    if (this.rbVertComp.Checked)\n                    {\n                        string val = String.Format(\"<Value>=\\\"&lt;span style='color:Crimson;'&gt;{0}:&amp;nbsp;&amp;nbsp;&lt;/span&gt;\\\" &amp; {1}</Value>\", colname, dcol);\n                        table.AppendFormat(\n                            \"<TableRow><Height>12 pt</Height>\" +\n                            \"<Visibility><Hidden>=Iif({1} = Nothing, true, false)</Hidden></Visibility>\" +\n                            \"<TableCells><TableCell><ReportItems><Textbox>\" +\n                            \"{0}\" +\n                            \"<CanGrow>true</CanGrow>\" +\n                            \"<Style><BorderStyle><Default>None</Default></BorderStyle>\" +\n                            \"<Format>html</Format>\" +\n                            \"</Style></Textbox></ReportItems></TableCell>\" +\n                            \"</TableCells></TableRow>\" +\n                            Environment.NewLine, val, dcol);\n                    }\n                    else\n                    {\n                        table.AppendFormat(\n                            \"<TableRow><Height>12 pt</Height><TableCells>\" +\n                            \"<TableCell><ReportItems><Textbox>\" +\n                            \"<Value>{0}</Value>\" +\n                            \"<Style><BorderStyle><Default>None</Default></BorderStyle>\" +\n                            \"<FontWeight>Bold</FontWeight>\" +\n                            \"<Color>Crimson</Color>\" +\n                            \"</Style></Textbox></ReportItems></TableCell>\" +\n                            \"</TableCells></TableRow>\", colname);\n\n                        table.AppendFormat(\n                            \"<TableRow><Height>12 pt</Height><TableCells>\" +\n                            \"<TableCell><ReportItems><Textbox>\" +\n                            \"<Value>={0}</Value><CanGrow>true</CanGrow>\" +\n                            \"<Style><BorderStyle><Default>None</Default></BorderStyle>\" +\n                            \"</Style></Textbox></ReportItems></TableCell>\" +\n                            \"</TableCells></TableRow>\", dcol);\n                    }\n                }\n                table.Append(\"</TableRows></Details></Table>\");\n\n                return table.ToString();\n            }\n        }\n\n        public void Apply()\n        {\n            //\n        }\n\n        private void bOK_Click(object sender, System.EventArgs e)\n        {\n            // apply the result\n            Apply();\n            DialogResult = DialogResult.OK;\n        }\n\n        private void cbDataSets_SelectedIndexChanged(object sender, System.EventArgs e)\n        {\n            this.lbTableColumns.Items.Clear();\n            bOK.Enabled = false;\n            this.lbFields.Items.Clear();\n            string[] fields = _Draw.GetFields(cbDataSets.Text, false);\n            if (fields != null)\n                lbFields.Items.AddRange(fields);\n        }\n\n        private void bRight_Click(object sender, System.EventArgs e)\n        {\n            ListBox.SelectedIndexCollection sic = lbFields.SelectedIndices;\n            int count = sic.Count;\n            foreach (int i in sic)\n            {\n                string fname = (string)lbFields.Items[i];\n                lbTableColumns.Items.Add(fname);\n            }\n            // Need to remove backwards\n            ArrayList ar = new ArrayList(sic);\n            ar.Reverse();\n            foreach (int i in ar)\n            {\n                lbFields.Items.RemoveAt(i);\n            }\n            bOK.Enabled = lbTableColumns.Items.Count > 0;\n            if (count > 0 && lbFields.Items.Count > 0)\n                lbFields.SelectedIndex = 0;\n        }\n\n        private void bLeft_Click(object sender, System.EventArgs e)\n        {\n            ICollection sic = lbTableColumns.SelectedIndices;\n            int count = sic.Count;\n            foreach (int i in sic)\n            {\n                string fname = (string)lbTableColumns.Items[i];\n                lbFields.Items.Add(fname);\n                if (fname == this.cbGroupColumn.Text)\n                    this.cbGroupColumn.Text = \"\";\n            }\n            // Need to remove backwards\n            ArrayList ar = new ArrayList(sic);\n            ar.Reverse();\n            foreach (int i in ar)\n            {\n                lbTableColumns.Items.RemoveAt(i);\n            }\n            bOK.Enabled = lbTableColumns.Items.Count > 0;\n            if (count > 0 && lbTableColumns.Items.Count > 0)\n                lbTableColumns.SelectedIndex = 0;\n        }\n\n        private void bAllRight_Click(object sender, System.EventArgs e)\n        {\n            foreach (object fname in lbFields.Items)\n            {\n                lbTableColumns.Items.Add(fname);\n            }\n            lbFields.Items.Clear();\n            bOK.Enabled = lbTableColumns.Items.Count > 0;\n        }\n\n        private void bAllLeft_Click(object sender, System.EventArgs e)\n        {\n            foreach (object fname in lbTableColumns.Items)\n            {\n                lbFields.Items.Add(fname);\n            }\n            lbTableColumns.Items.Clear();\n            this.cbGroupColumn.Text = \"\";\n            bOK.Enabled = false;\n        }\n\n        private void bUp_Click(object sender, System.EventArgs e)\n        {\n            int index = lbTableColumns.SelectedIndex;\n            if (index <= 0)\n                return;\n\n            string prename = (string)lbTableColumns.Items[index - 1];\n            lbTableColumns.Items.RemoveAt(index - 1);\n            lbTableColumns.Items.Insert(index, prename);\n        }\n\n        private void bDown_Click(object sender, System.EventArgs e)\n        {\n            int index = lbTableColumns.SelectedIndex;\n            if (index < 0 || index + 1 == lbTableColumns.Items.Count)\n                return;\n\n            string postname = (string)lbTableColumns.Items[index + 1];\n            lbTableColumns.Items.RemoveAt(index + 1);\n            lbTableColumns.Items.Insert(index, postname);\n        }\n\n        private void cbGroupColumn_Enter(object sender, System.EventArgs e)\n        {\n            cbGroupColumn.Items.Clear();\n            cbGroupColumn.Items.Add(\"\");\n            if (lbTableColumns.Items.Count > 0)\n            {\n                object[] names = new object[lbTableColumns.Items.Count];\n                lbTableColumns.Items.CopyTo(names, 0);\n                cbGroupColumn.Items.AddRange(names);\n            }\n        }\n\n        private void rbHorz_CheckedChanged(object sender, System.EventArgs e)\n        {\n            // only standard column report supports grouping and totals\n            this.cbGroupColumn.Enabled = this.chkGrandTotals.Enabled = rbHorz.Checked;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/DialogNewTable.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>240, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.ZOrder\" xml:space=\"preserve\">\n    <value>16</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <data name=\"bAllLeft.Text\" xml:space=\"preserve\">\n    <value>&lt;&lt;</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"bDown.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>392, 152</value>\n  </data>\n  <data name=\"&gt;&gt;lbTableColumns.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbVertComp.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbVertComp.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bRight.Name\" xml:space=\"preserve\">\n    <value>bRight</value>\n  </data>\n  <data name=\"&gt;&gt;bLeft.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"rbVert.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>160, 16</value>\n  </data>\n  <data name=\"&gt;&gt;lbFields.Name\" xml:space=\"preserve\">\n    <value>lbFields</value>\n  </data>\n  <data name=\"cbGroupColumn.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bAllRight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 24</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bAllRight.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lbFields.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 112</value>\n  </data>\n  <data name=\"&gt;&gt;rbHorz.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>456, 336</value>\n  </data>\n  <data name=\"&gt;&gt;rbVert.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Name\" xml:space=\"preserve\">\n    <value>bCancel</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>New Table</value>\n  </data>\n  <data name=\"&gt;&gt;rbHorz.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;bRight.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>15</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;cbGroupColumn.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"&gt;&gt;rbHorz.Name\" xml:space=\"preserve\">\n    <value>rbHorz</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Name\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;rbVert.Name\" xml:space=\"preserve\">\n    <value>rbVert</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>13</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"&gt;&gt;rbVert.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Table Columns (check totals when not Down)</value>\n  </data>\n  <data name=\"bCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bLeft.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bLeft.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;lbFields.ZOrder\" xml:space=\"preserve\">\n    <value>11</value>\n  </data>\n  <data name=\"rbVertComp.Text\" xml:space=\"preserve\">\n    <value>Down (compress)</value>\n  </data>\n  <data name=\"&gt;&gt;bRight.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"chkGrandTotals.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>168, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSets.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"groupBox1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"chkGrandTotals.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"bRight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 24</value>\n  </data>\n  <data name=\"rbVertComp.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;bAllLeft.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"bAllRight.Text\" xml:space=\"preserve\">\n    <value>&gt;&gt;</value>\n  </data>\n  <data name=\"cbGroupColumn.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 280</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>DataSet</value>\n  </data>\n  <data name=\"bAllLeft.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;lbTableColumns.Name\" xml:space=\"preserve\">\n    <value>lbTableColumns</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 264</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"bLeft.Text\" xml:space=\"preserve\">\n    <value>&lt;</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DialogNewTable</value>\n  </data>\n  <data name=\"&gt;&gt;bLeft.Name\" xml:space=\"preserve\">\n    <value>bLeft</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbGroupColumn.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"rbHorz.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>160, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSets.Name\" xml:space=\"preserve\">\n    <value>cbDataSets</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>17</value>\n  </data>\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"bLeft.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>184, 184</value>\n  </data>\n  <data name=\"&gt;&gt;label4.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"cbGroupColumn.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>168, 21</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"lbTableColumns.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 139</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 23</value>\n  </data>\n  <data name=\"&gt;&gt;rbHorz.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"bUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 24</value>\n  </data>\n  <data name=\"&gt;&gt;cbGroupColumn.Name\" xml:space=\"preserve\">\n    <value>cbGroupColumn</value>\n  </data>\n  <data name=\"&gt;&gt;chkGrandTotals.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"rbVert.Text\" xml:space=\"preserve\">\n    <value>Down (row per field)</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>12</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bAllLeft.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 24</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSets.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbDataSets.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>360, 21</value>\n  </data>\n  <data name=\"lbTableColumns.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>232, 112</value>\n  </data>\n  <data name=\"&gt;&gt;lbTableColumns.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkGrandTotals.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>232, 280</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.Name\" xml:space=\"preserve\">\n    <value>bUp</value>\n  </data>\n  <data name=\"bUp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>392, 120</value>\n  </data>\n  <data name=\"rbHorz.Text\" xml:space=\"preserve\">\n    <value>Across (standard columns)</value>\n  </data>\n  <data name=\"bDown.Text\" xml:space=\"preserve\">\n    <value>Down</value>\n  </data>\n  <data name=\"bRight.Text\" xml:space=\"preserve\">\n    <value>&gt;</value>\n  </data>\n  <data name=\"bRight.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"rbVert.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>120, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Name\" xml:space=\"preserve\">\n    <value>label4</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"rbVertComp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>112, 16</value>\n  </data>\n  <data name=\"bUp.Text\" xml:space=\"preserve\">\n    <value>Up</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.Name\" xml:space=\"preserve\">\n    <value>bDown</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>232, 88</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"&gt;&gt;bLeft.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;bAllRight.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"bRight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>184, 120</value>\n  </data>\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"bCancel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>13</value>\n  </data>\n  <data name=\"bUp.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>272, 312</value>\n  </data>\n  <data name=\"rbHorz.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bAllLeft.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>184, 216</value>\n  </data>\n  <data name=\"bLeft.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 24</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>DataSet Fields</value>\n  </data>\n  <data name=\"rbHorz.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 16</value>\n  </data>\n  <data name=\"cbDataSets.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"lbFields.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 134</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bRight.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 23</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSets.ZOrder\" xml:space=\"preserve\">\n    <value>14</value>\n  </data>\n  <data name=\"rbVert.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"lbFields.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"groupBox1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 40</value>\n  </data>\n  <data name=\"cbDataSets.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>80, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lbFields.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>368, 312</value>\n  </data>\n  <data name=\"bAllRight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>184, 152</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"bDown.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;rbVertComp.Name\" xml:space=\"preserve\">\n    <value>rbVertComp</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 88</value>\n  </data>\n  <data name=\"&gt;&gt;lbTableColumns.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;bAllRight.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 24</value>\n  </data>\n  <data name=\"&gt;&gt;cbGroupColumn.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkGrandTotals.Text\" xml:space=\"preserve\">\n    <value>Calculate Grand Totals</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>424, 40</value>\n  </data>\n  <data name=\"&gt;&gt;bAllLeft.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkGrandTotals.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lbFields.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;rbVertComp.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bAllLeft.Name\" xml:space=\"preserve\">\n    <value>bAllLeft</value>\n  </data>\n  <data name=\"&gt;&gt;chkGrandTotals.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bAllRight.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;bAllRight.Name\" xml:space=\"preserve\">\n    <value>bAllRight</value>\n  </data>\n  <data name=\"&gt;&gt;rbVert.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 23</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Arrange Fields</value>\n  </data>\n  <data name=\"&gt;&gt;bAllLeft.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"rbVertComp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>296, 16</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Pick a column to group (create hierarchy)</value>\n  </data>\n  <data name=\"lbTableColumns.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkGrandTotals.Name\" xml:space=\"preserve\">\n    <value>chkGrandTotals</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/DialogNewTable.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>81, 23</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Набор данных</value>\n  </data>\n  <data name=\"cbDataSets.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>103, 16</value>\n  </data>\n  <data name=\"cbDataSets.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>337, 21</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>119, 23</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Поля набора данных</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>232, 83</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>212, 28</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Столбцы таблицы (отметьте итоги, если направление полей не вниз)</value>\n  </data>\n  <data name=\"bUp.Text\" xml:space=\"preserve\">\n    <value>Вверх</value>\n  </data>\n  <data name=\"bDown.Text\" xml:space=\"preserve\">\n    <value>Вниз</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 252</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 33</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Отметьте столбцы для группировки (создания иерархии)</value>\n  </data>\n  <data name=\"chkGrandTotals.Text\" xml:space=\"preserve\">\n    <value>Подсчитать общие итоги</value>\n  </data>\n  <data name=\"rbVertComp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>324, 16</value>\n  </data>\n  <data name=\"rbVertComp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>97, 16</value>\n  </data>\n  <data name=\"rbVertComp.Text\" xml:space=\"preserve\">\n    <value>Вниз (сжато)</value>\n  </data>\n  <data name=\"rbVert.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>184, 16</value>\n  </data>\n  <data name=\"rbVert.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>139, 16</value>\n  </data>\n  <data name=\"rbVert.Text\" xml:space=\"preserve\">\n    <value>Вниз (строка на поле)</value>\n  </data>\n  <data name=\"rbHorz.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>173, 16</value>\n  </data>\n  <data name=\"rbHorz.Text\" xml:space=\"preserve\">\n    <value>В ширину (обычные столбцы)</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Направление полей</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Создание таблицы</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DialogToolOptions.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    public partial class DialogToolOptions : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tRdlDesigner _RdlDesigner;\nprivate System.Windows.Forms.Button bOK;\nprivate System.Windows.Forms.Button bCancel;\nprivate System.Windows.Forms.TabControl tabControl1;\nprivate System.Windows.Forms.TabPage tpGeneral;\nprivate System.Windows.Forms.TabPage tpToolbar;\nprivate System.Windows.Forms.Label label1;\nprivate System.Windows.Forms.TextBox tbRecentFilesMax;\nprivate System.Windows.Forms.Label label2;\nprivate System.Windows.Forms.Label label3;\nprivate System.Windows.Forms.TextBox tbHelpUrl;\nprivate System.Windows.Forms.ListBox lbOperation;\nprivate System.Windows.Forms.ListBox lbToolbar;\nprivate System.Windows.Forms.Label label4;\nprivate System.Windows.Forms.Label label5;\nprivate System.Windows.Forms.Button bCopyItem;\nprivate System.Windows.Forms.Button bUp;\nprivate System.Windows.Forms.Button bDown;\nprivate System.Windows.Forms.Button bReset;\nprivate System.Windows.Forms.Button bRemove;\nprivate System.Windows.Forms.Button bApply;\nprivate System.Windows.Forms.TabPage tpDesktop;\nprivate System.Windows.Forms.Label label6;\nprivate System.Windows.Forms.TextBox tbPort;\nprivate System.Windows.Forms.Label label7;\nprivate System.Windows.Forms.Label label8;\nprivate System.Windows.Forms.Label label9;\nprivate System.Windows.Forms.TextBox tbDirectory;\nprivate System.Windows.Forms.CheckBox ckLocal;\nprivate System.Windows.Forms.Button bBrowse;\nprivate CheckBox cbEditLines;\nprivate CheckBox cbOutline;\nprivate CheckBox cbTabInterface;\nprivate GroupBox gbPropLoc;\nprivate RadioButton rbPBBottom;\nprivate RadioButton rbPBTop;\nprivate RadioButton rbPBLeft;\nprivate RadioButton rbPBRight;\nprivate CheckBox chkPBAutoHide;\nprivate TabPage tabPage1;\nprivate Button bRemoveMap;\nprivate Button bAddMap;\nprivate ListBox lbMaps;\nprivate Label label10;\nprivate CheckBox cbShowReportWaitDialog;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DialogToolOptions));\n            this.bOK = new System.Windows.Forms.Button();\n            this.bCancel = new System.Windows.Forms.Button();\n            this.tabControl1 = new System.Windows.Forms.TabControl();\n            this.tpGeneral = new System.Windows.Forms.TabPage();\n            this.groupBox1 = new System.Windows.Forms.GroupBox();\n            this.radioButtonCm = new System.Windows.Forms.RadioButton();\n            this.radioButtonInches = new System.Windows.Forms.RadioButton();\n            this.label12 = new System.Windows.Forms.Label();\n            this.comboXmlEndingLine = new System.Windows.Forms.ComboBox();\n            this.label11 = new System.Windows.Forms.Label();\n            this.tbLanguage = new System.Windows.Forms.ComboBox();\n            this.cbShowReportWaitDialog = new System.Windows.Forms.CheckBox();\n            this.gbPropLoc = new System.Windows.Forms.GroupBox();\n            this.chkPBAutoHide = new System.Windows.Forms.CheckBox();\n            this.rbPBBottom = new System.Windows.Forms.RadioButton();\n            this.rbPBTop = new System.Windows.Forms.RadioButton();\n            this.rbPBLeft = new System.Windows.Forms.RadioButton();\n            this.rbPBRight = new System.Windows.Forms.RadioButton();\n            this.cbTabInterface = new System.Windows.Forms.CheckBox();\n            this.cbOutline = new System.Windows.Forms.CheckBox();\n            this.cbEditLines = new System.Windows.Forms.CheckBox();\n            this.tbHelpUrl = new System.Windows.Forms.TextBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.tbRecentFilesMax = new System.Windows.Forms.TextBox();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tpToolbar = new System.Windows.Forms.TabPage();\n            this.bRemove = new System.Windows.Forms.Button();\n            this.bReset = new System.Windows.Forms.Button();\n            this.bDown = new System.Windows.Forms.Button();\n            this.bUp = new System.Windows.Forms.Button();\n            this.bCopyItem = new System.Windows.Forms.Button();\n            this.label5 = new System.Windows.Forms.Label();\n            this.label4 = new System.Windows.Forms.Label();\n            this.lbToolbar = new System.Windows.Forms.ListBox();\n            this.lbOperation = new System.Windows.Forms.ListBox();\n            this.tpDesktop = new System.Windows.Forms.TabPage();\n            this.bBrowse = new System.Windows.Forms.Button();\n            this.tbDirectory = new System.Windows.Forms.TextBox();\n            this.label9 = new System.Windows.Forms.Label();\n            this.label8 = new System.Windows.Forms.Label();\n            this.label7 = new System.Windows.Forms.Label();\n            this.ckLocal = new System.Windows.Forms.CheckBox();\n            this.tbPort = new System.Windows.Forms.TextBox();\n            this.label6 = new System.Windows.Forms.Label();\n            this.tabPage1 = new System.Windows.Forms.TabPage();\n            this.label10 = new System.Windows.Forms.Label();\n            this.bRemoveMap = new System.Windows.Forms.Button();\n            this.bAddMap = new System.Windows.Forms.Button();\n            this.lbMaps = new System.Windows.Forms.ListBox();\n            this.bApply = new System.Windows.Forms.Button();\n            this.tabControl1.SuspendLayout();\n            this.tpGeneral.SuspendLayout();\n            this.groupBox1.SuspendLayout();\n            this.gbPropLoc.SuspendLayout();\n            this.tpToolbar.SuspendLayout();\n            this.tpDesktop.SuspendLayout();\n            this.tabPage1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // bOK\n            // \n            resources.ApplyResources(this.bOK, \"bOK\");\n            this.bOK.Name = \"bOK\";\n            this.bOK.Click += new System.EventHandler(this.bOK_Click);\n            // \n            // bCancel\n            // \n            this.bCancel.CausesValidation = false;\n            this.bCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            resources.ApplyResources(this.bCancel, \"bCancel\");\n            this.bCancel.Name = \"bCancel\";\n            // \n            // tabControl1\n            // \n            this.tabControl1.Controls.Add(this.tpGeneral);\n            this.tabControl1.Controls.Add(this.tpToolbar);\n            this.tabControl1.Controls.Add(this.tpDesktop);\n            this.tabControl1.Controls.Add(this.tabPage1);\n            resources.ApplyResources(this.tabControl1, \"tabControl1\");\n            this.tabControl1.Name = \"tabControl1\";\n            this.tabControl1.SelectedIndex = 0;\n            // \n            // tpGeneral\n            // \n            this.tpGeneral.Controls.Add(this.groupBox1);\n            this.tpGeneral.Controls.Add(this.label12);\n            this.tpGeneral.Controls.Add(this.comboXmlEndingLine);\n            this.tpGeneral.Controls.Add(this.label11);\n            this.tpGeneral.Controls.Add(this.tbLanguage);\n            this.tpGeneral.Controls.Add(this.cbShowReportWaitDialog);\n            this.tpGeneral.Controls.Add(this.gbPropLoc);\n            this.tpGeneral.Controls.Add(this.cbTabInterface);\n            this.tpGeneral.Controls.Add(this.cbOutline);\n            this.tpGeneral.Controls.Add(this.cbEditLines);\n            this.tpGeneral.Controls.Add(this.tbHelpUrl);\n            this.tpGeneral.Controls.Add(this.label3);\n            this.tpGeneral.Controls.Add(this.label2);\n            this.tpGeneral.Controls.Add(this.tbRecentFilesMax);\n            this.tpGeneral.Controls.Add(this.label1);\n            resources.ApplyResources(this.tpGeneral, \"tpGeneral\");\n            this.tpGeneral.Name = \"tpGeneral\";\n            this.tpGeneral.Tag = \"general\";\n            // \n            // groupBox1\n            // \n            this.groupBox1.Controls.Add(this.radioButtonCm);\n            this.groupBox1.Controls.Add(this.radioButtonInches);\n            resources.ApplyResources(this.groupBox1, \"groupBox1\");\n            this.groupBox1.Name = \"groupBox1\";\n            this.groupBox1.TabStop = false;\n            // \n            // radioButtonCm\n            // \n            resources.ApplyResources(this.radioButtonCm, \"radioButtonCm\");\n            this.radioButtonCm.Name = \"radioButtonCm\";\n            this.radioButtonCm.UseVisualStyleBackColor = true;\n            this.radioButtonCm.CheckedChanged += new System.EventHandler(this.RadioButtonCm_CheckedChanged);\n            // \n            // radioButtonInches\n            // \n            resources.ApplyResources(this.radioButtonInches, \"radioButtonInches\");\n            this.radioButtonInches.Checked = true;\n            this.radioButtonInches.Name = \"radioButtonInches\";\n            this.radioButtonInches.TabStop = true;\n            this.radioButtonInches.UseVisualStyleBackColor = true;\n            this.radioButtonInches.CheckedChanged += new System.EventHandler(this.RadioButtonInches_CheckedChanged);\n            // \n            // label12\n            // \n            resources.ApplyResources(this.label12, \"label12\");\n            this.label12.Name = \"label12\";\n            // \n            // comboXmlEndingLine\n            // \n            this.comboXmlEndingLine.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.comboXmlEndingLine.FormattingEnabled = true;\n            resources.ApplyResources(this.comboXmlEndingLine, \"comboXmlEndingLine\");\n            this.comboXmlEndingLine.Name = \"comboXmlEndingLine\";\n            // \n            // label11\n            // \n            resources.ApplyResources(this.label11, \"label11\");\n            this.label11.Name = \"label11\";\n            // \n            // tbLanguage\n            // \n            this.tbLanguage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.tbLanguage.FormattingEnabled = true;\n            resources.ApplyResources(this.tbLanguage, \"tbLanguage\");\n            this.tbLanguage.Name = \"tbLanguage\";\n            this.tbLanguage.SelectedIndexChanged += new System.EventHandler(this.Desktop_Changed);\n            // \n            // cbShowReportWaitDialog\n            // \n            resources.ApplyResources(this.cbShowReportWaitDialog, \"cbShowReportWaitDialog\");\n            this.cbShowReportWaitDialog.Name = \"cbShowReportWaitDialog\";\n            this.cbShowReportWaitDialog.UseVisualStyleBackColor = true;\n            // \n            // gbPropLoc\n            // \n            this.gbPropLoc.Controls.Add(this.chkPBAutoHide);\n            this.gbPropLoc.Controls.Add(this.rbPBBottom);\n            this.gbPropLoc.Controls.Add(this.rbPBTop);\n            this.gbPropLoc.Controls.Add(this.rbPBLeft);\n            this.gbPropLoc.Controls.Add(this.rbPBRight);\n            resources.ApplyResources(this.gbPropLoc, \"gbPropLoc\");\n            this.gbPropLoc.Name = \"gbPropLoc\";\n            this.gbPropLoc.TabStop = false;\n            // \n            // chkPBAutoHide\n            // \n            resources.ApplyResources(this.chkPBAutoHide, \"chkPBAutoHide\");\n            this.chkPBAutoHide.Name = \"chkPBAutoHide\";\n            this.chkPBAutoHide.UseVisualStyleBackColor = true;\n            // \n            // rbPBBottom\n            // \n            resources.ApplyResources(this.rbPBBottom, \"rbPBBottom\");\n            this.rbPBBottom.Name = \"rbPBBottom\";\n            this.rbPBBottom.TabStop = true;\n            this.rbPBBottom.UseVisualStyleBackColor = true;\n            // \n            // rbPBTop\n            // \n            resources.ApplyResources(this.rbPBTop, \"rbPBTop\");\n            this.rbPBTop.Name = \"rbPBTop\";\n            this.rbPBTop.TabStop = true;\n            this.rbPBTop.UseVisualStyleBackColor = true;\n            // \n            // rbPBLeft\n            // \n            resources.ApplyResources(this.rbPBLeft, \"rbPBLeft\");\n            this.rbPBLeft.Name = \"rbPBLeft\";\n            this.rbPBLeft.TabStop = true;\n            this.rbPBLeft.UseVisualStyleBackColor = true;\n            // \n            // rbPBRight\n            // \n            resources.ApplyResources(this.rbPBRight, \"rbPBRight\");\n            this.rbPBRight.Name = \"rbPBRight\";\n            this.rbPBRight.TabStop = true;\n            this.rbPBRight.UseVisualStyleBackColor = true;\n            // \n            // cbTabInterface\n            // \n            resources.ApplyResources(this.cbTabInterface, \"cbTabInterface\");\n            this.cbTabInterface.Name = \"cbTabInterface\";\n            this.cbTabInterface.UseVisualStyleBackColor = true;\n            this.cbTabInterface.CheckedChanged += new System.EventHandler(this.cbTabInterface_CheckedChanged);\n            // \n            // cbOutline\n            // \n            resources.ApplyResources(this.cbOutline, \"cbOutline\");\n            this.cbOutline.Name = \"cbOutline\";\n            this.cbOutline.UseVisualStyleBackColor = true;\n            // \n            // cbEditLines\n            // \n            resources.ApplyResources(this.cbEditLines, \"cbEditLines\");\n            this.cbEditLines.Name = \"cbEditLines\";\n            this.cbEditLines.UseVisualStyleBackColor = true;\n            // \n            // tbHelpUrl\n            // \n            resources.ApplyResources(this.tbHelpUrl, \"tbHelpUrl\");\n            this.tbHelpUrl.Name = \"tbHelpUrl\";\n            // \n            // label3\n            // \n            resources.ApplyResources(this.label3, \"label3\");\n            this.label3.Name = \"label3\";\n            // \n            // label2\n            // \n            resources.ApplyResources(this.label2, \"label2\");\n            this.label2.Name = \"label2\";\n            // \n            // tbRecentFilesMax\n            // \n            resources.ApplyResources(this.tbRecentFilesMax, \"tbRecentFilesMax\");\n            this.tbRecentFilesMax.Name = \"tbRecentFilesMax\";\n            // \n            // label1\n            // \n            resources.ApplyResources(this.label1, \"label1\");\n            this.label1.Name = \"label1\";\n            // \n            // tpToolbar\n            // \n            this.tpToolbar.Controls.Add(this.bRemove);\n            this.tpToolbar.Controls.Add(this.bReset);\n            this.tpToolbar.Controls.Add(this.bDown);\n            this.tpToolbar.Controls.Add(this.bUp);\n            this.tpToolbar.Controls.Add(this.bCopyItem);\n            this.tpToolbar.Controls.Add(this.label5);\n            this.tpToolbar.Controls.Add(this.label4);\n            this.tpToolbar.Controls.Add(this.lbToolbar);\n            this.tpToolbar.Controls.Add(this.lbOperation);\n            resources.ApplyResources(this.tpToolbar, \"tpToolbar\");\n            this.tpToolbar.Name = \"tpToolbar\";\n            this.tpToolbar.Tag = \"toolbar\";\n            // \n            // bRemove\n            // \n            resources.ApplyResources(this.bRemove, \"bRemove\");\n            this.bRemove.Name = \"bRemove\";\n            this.bRemove.Click += new System.EventHandler(this.bRemove_Click);\n            // \n            // bReset\n            // \n            resources.ApplyResources(this.bReset, \"bReset\");\n            this.bReset.Name = \"bReset\";\n            this.bReset.Click += new System.EventHandler(this.bReset_Click);\n            // \n            // bDown\n            // \n            resources.ApplyResources(this.bDown, \"bDown\");\n            this.bDown.Name = \"bDown\";\n            this.bDown.Click += new System.EventHandler(this.bDown_Click);\n            // \n            // bUp\n            // \n            resources.ApplyResources(this.bUp, \"bUp\");\n            this.bUp.Name = \"bUp\";\n            this.bUp.Click += new System.EventHandler(this.bUp_Click);\n            // \n            // bCopyItem\n            // \n            resources.ApplyResources(this.bCopyItem, \"bCopyItem\");\n            this.bCopyItem.Name = \"bCopyItem\";\n            this.bCopyItem.Click += new System.EventHandler(this.bCopyItem_Click);\n            // \n            // label5\n            // \n            resources.ApplyResources(this.label5, \"label5\");\n            this.label5.Name = \"label5\";\n            // \n            // label4\n            // \n            resources.ApplyResources(this.label4, \"label4\");\n            this.label4.Name = \"label4\";\n            // \n            // lbToolbar\n            // \n            resources.ApplyResources(this.lbToolbar, \"lbToolbar\");\n            this.lbToolbar.Name = \"lbToolbar\";\n            // \n            // lbOperation\n            // \n            resources.ApplyResources(this.lbOperation, \"lbOperation\");\n            this.lbOperation.Name = \"lbOperation\";\n            // \n            // tpDesktop\n            // \n            this.tpDesktop.Controls.Add(this.bBrowse);\n            this.tpDesktop.Controls.Add(this.tbDirectory);\n            this.tpDesktop.Controls.Add(this.label9);\n            this.tpDesktop.Controls.Add(this.label8);\n            this.tpDesktop.Controls.Add(this.label7);\n            this.tpDesktop.Controls.Add(this.ckLocal);\n            this.tpDesktop.Controls.Add(this.tbPort);\n            this.tpDesktop.Controls.Add(this.label6);\n            resources.ApplyResources(this.tpDesktop, \"tpDesktop\");\n            this.tpDesktop.Name = \"tpDesktop\";\n            this.tpDesktop.Tag = \"desktop\";\n            // \n            // bBrowse\n            // \n            resources.ApplyResources(this.bBrowse, \"bBrowse\");\n            this.bBrowse.Name = \"bBrowse\";\n            this.bBrowse.Click += new System.EventHandler(this.bBrowse_Click);\n            // \n            // tbDirectory\n            // \n            resources.ApplyResources(this.tbDirectory, \"tbDirectory\");\n            this.tbDirectory.Name = \"tbDirectory\";\n            this.tbDirectory.TextChanged += new System.EventHandler(this.Desktop_Changed);\n            // \n            // label9\n            // \n            resources.ApplyResources(this.label9, \"label9\");\n            this.label9.Name = \"label9\";\n            // \n            // label8\n            // \n            resources.ApplyResources(this.label8, \"label8\");\n            this.label8.Name = \"label8\";\n            // \n            // label7\n            // \n            resources.ApplyResources(this.label7, \"label7\");\n            this.label7.Name = \"label7\";\n            // \n            // ckLocal\n            // \n            resources.ApplyResources(this.ckLocal, \"ckLocal\");\n            this.ckLocal.Name = \"ckLocal\";\n            this.ckLocal.CheckedChanged += new System.EventHandler(this.Desktop_Changed);\n            // \n            // tbPort\n            // \n            resources.ApplyResources(this.tbPort, \"tbPort\");\n            this.tbPort.Name = \"tbPort\";\n            this.tbPort.TextChanged += new System.EventHandler(this.Desktop_Changed);\n            // \n            // label6\n            // \n            resources.ApplyResources(this.label6, \"label6\");\n            this.label6.Name = \"label6\";\n            // \n            // tabPage1\n            // \n            this.tabPage1.Controls.Add(this.label10);\n            this.tabPage1.Controls.Add(this.bRemoveMap);\n            this.tabPage1.Controls.Add(this.bAddMap);\n            this.tabPage1.Controls.Add(this.lbMaps);\n            resources.ApplyResources(this.tabPage1, \"tabPage1\");\n            this.tabPage1.Name = \"tabPage1\";\n            this.tabPage1.UseVisualStyleBackColor = true;\n            // \n            // label10\n            // \n            resources.ApplyResources(this.label10, \"label10\");\n            this.label10.Name = \"label10\";\n            // \n            // bRemoveMap\n            // \n            resources.ApplyResources(this.bRemoveMap, \"bRemoveMap\");\n            this.bRemoveMap.Name = \"bRemoveMap\";\n            this.bRemoveMap.UseVisualStyleBackColor = true;\n            this.bRemoveMap.Click += new System.EventHandler(this.bRemoveMap_Click);\n            // \n            // bAddMap\n            // \n            resources.ApplyResources(this.bAddMap, \"bAddMap\");\n            this.bAddMap.Name = \"bAddMap\";\n            this.bAddMap.UseVisualStyleBackColor = true;\n            this.bAddMap.Click += new System.EventHandler(this.bAddMap_Click);\n            // \n            // lbMaps\n            // \n            this.lbMaps.FormattingEnabled = true;\n            resources.ApplyResources(this.lbMaps, \"lbMaps\");\n            this.lbMaps.Name = \"lbMaps\";\n            // \n            // bApply\n            // \n            resources.ApplyResources(this.bApply, \"bApply\");\n            this.bApply.Name = \"bApply\";\n            this.bApply.Click += new System.EventHandler(this.bApply_Click);\n            // \n            // DialogToolOptions\n            // \n            this.AcceptButton = this.bOK;\n            resources.ApplyResources(this, \"$this\");\n            this.CancelButton = this.bCancel;\n            this.Controls.Add(this.bApply);\n            this.Controls.Add(this.tabControl1);\n            this.Controls.Add(this.bCancel);\n            this.Controls.Add(this.bOK);\n            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n            this.MaximizeBox = false;\n            this.MinimizeBox = false;\n            this.Name = \"DialogToolOptions\";\n            this.ShowInTaskbar = false;\n            this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;\n            this.tabControl1.ResumeLayout(false);\n            this.tpGeneral.ResumeLayout(false);\n            this.tpGeneral.PerformLayout();\n            this.groupBox1.ResumeLayout(false);\n            this.groupBox1.PerformLayout();\n            this.gbPropLoc.ResumeLayout(false);\n            this.gbPropLoc.PerformLayout();\n            this.tpToolbar.ResumeLayout(false);\n            this.tpDesktop.ResumeLayout(false);\n            this.tpDesktop.PerformLayout();\n            this.tabPage1.ResumeLayout(false);\n            this.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\tprivate Label label11;\n\t\tprivate ComboBox tbLanguage;\n        private Label label12;\n        private ComboBox comboXmlEndingLine;\n        private GroupBox groupBox1;\n        private RadioButton radioButtonCm;\n        private RadioButton radioButtonInches;\n    }\n}\n"
  },
  {
    "path": "RdlDesign/DialogToolOptions.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Reflection;\nusing System.Resources;\nusing System.Threading;\nusing System.Windows.Forms;\nusing System.Xml;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// Summary description for DialogAbout.\n    /// </summary>\n    public partial class DialogToolOptions \n    {\n\n        bool bDesktop = false;\n        bool bToolbar = false;\n        bool bMaps = false;\n\n        // Desktop server configuration\n\t    private XmlDocument _DesktopDocument;\n\t    private XmlNode _DesktopConfig;\n\t    private XmlNode _DesktopPort;\n\t    private XmlNode _DesktopDirectory;\n\t    private XmlNode _DesktopLocal;\n\t    private XmlNode _DesktopLanguage;\n        private XmlNode _DesktopUnits;\n\n        static readonly string optFileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), \"MajorsilenceReporting\", \"config.xml\");\n\n        public DialogToolOptions(RdlDesigner rdl)\n        {\n            _RdlDesigner = rdl;\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            Init();\n            return;\n        }\n\n        private void Init()\n        {\n            this.tbRecentFilesMax.Text = _RdlDesigner.RecentFilesMax.ToString();\n            this.tbHelpUrl.Text = _RdlDesigner.HelpUrl;\n\n            // init the toolbar\n\n            // list of items in current toolbar\n            foreach (string ti in _RdlDesigner.Toolbar)\n            {\n                this.lbToolbar.Items.Add(ti);\n            }\n\n            this.cbEditLines.Checked = _RdlDesigner.ShowEditLines;\n            this.cbOutline.Checked = _RdlDesigner.ShowReportItemOutline;\n            this.cbTabInterface.Checked = _RdlDesigner.ShowTabbedInterface;\n            chkPBAutoHide.Checked = _RdlDesigner.PropertiesAutoHide;\n            this.cbShowReportWaitDialog.Checked = _RdlDesigner.ShowPreviewWaitDialog;\n\n            switch (_RdlDesigner.PropertiesLocation)\n            {\n                case DockStyle.Top:\n                    this.rbPBTop.Checked = true;\n                    break;\n                case DockStyle.Bottom:\n                    this.rbPBBottom.Checked = true;\n                    break;\n                case DockStyle.Right:\n                    this.rbPBRight.Checked = true;\n                    break;\n                case DockStyle.Left:\n                default:\n                    this.rbPBLeft.Checked = true;\n                    break;\n            }\n\n            comboXmlEndingLine.DataSource = Enum.GetValues(typeof(NewLineChar));\n            comboXmlEndingLine.SelectedItem = _RdlDesigner.XmlNewLine;\n\n\t\t\tInitLanguages();\n\n            InitOperations();\n\n            InitDesktop();\n\n            InitMaps();\n\n            bDesktop = bToolbar = bMaps = false;\t\t\t// start with no changes\n        }\n\n\t\tprivate void InitLanguages()\n\t\t{\n\t\t\tforeach (var cult in GetAvailableCultures())\n\t\t\t{\n\t\t\t\ttbLanguage.Items.Add(cult);\n\t\t\t}\n\n\t\t\ttbLanguage.SelectedItem = Thread.CurrentThread.CurrentCulture;\n\t\t}\n\n        private void InitDesktop()\n        {\n            try\n            {\n                XmlDocument xDoc = _DesktopDocument = new XmlDocument();\n                xDoc.PreserveWhitespace = true;\n                xDoc.Load(optFileName);\n                _DesktopConfig = xDoc.SelectSingleNode(\"//config\");\n\n                // Loop thru all the child nodes\n\t\t\t\tforeach (XmlNode xNodeLoop in _DesktopConfig.ChildNodes)\n                {\n                    if (xNodeLoop.NodeType != XmlNodeType.Element)\n                        continue;\n                    switch (xNodeLoop.Name.ToLower())\n                    {\n                        case \"port\":\n                            this.tbPort.Text = xNodeLoop.InnerText;\n                            _DesktopPort = xNodeLoop;\n                            break;\n                        case \"localhostonly\":\n                            string tf = xNodeLoop.InnerText.ToLower();\n                            this.ckLocal.Checked = !(tf == \"false\");\n                            _DesktopLocal = xNodeLoop;\n                            break;\n                        case \"serverroot\":\n                            this.tbDirectory.Text = xNodeLoop.InnerText;\n                            _DesktopDirectory = xNodeLoop;\n                            break;\n\t\t\t\t\t\tcase \"language\":\n\t\t                    try\n\t\t                    {\n\t\t\t\t\t\t\t\ttbLanguage.SelectedItem = CultureInfo.GetCultureInfo(xNodeLoop.InnerText);\n\t\t\t\t\t\t\t}\n\t\t                    catch (CultureNotFoundException)\n\t\t                    {\n\t\t\t                    tbLanguage.SelectedItem = CultureInfo.InvariantCulture;\n\t\t                    }\n\t\t                    _DesktopLanguage = xNodeLoop;\n\t\t                    break;\n                        case \"cachedirectory\":\n                            // wd = xNodeLoop.InnerText;\n                            break;\n                        case \"tracelevel\":\n                            break;\n                        case \"maxreadcache\":\n                            break;\n                        case \"maxreadcacheentrysize\":\n                            break;\n                        case \"mimetypes\":\n                            break;\n                        case \"units\":\n                            _DesktopUnits = xNodeLoop;\n                            if (xNodeLoop.InnerText.ToLower() == \"inches\")\n                                this.radioButtonInches.Checked = true;\n                            else\n                                this.radioButtonCm.Checked = true;\n                            break;\n                        default:\n                            break;\n                    }\n                }\n            }\n            catch (Exception ex)\n            {\t\t// Didn't sucessfully get the startup state: use defaults\n                MessageBox.Show(string.Format(Strings.DialogToolOptions_Show_ConfigError, ex.Message), Strings.DialogToolOptions_Show_Options);\n                this.tbPort.Text = \"8080\";\n                this.ckLocal.Checked = true;\n                this.tbDirectory.Text = \"Examples\";\n            }\n\n        }\n\n        private void InitMaps()\n        {\n            lbMaps.Items.Clear();\n            lbMaps.Items.AddRange(RdlDesigner.MapSubtypes);\n        }\n\n        private void InitOperations()\n        {\n            // list of operations; \n            lbOperation.Items.Clear();\n\n            List<string> dups = _RdlDesigner.ToolbarAllowDups;\n            foreach (string ti in _RdlDesigner.ToolbarOperations)\n            {\n                // if item is allowed to be duplicated or if\n                //   item has not already been used we add to operation list\n                if (dups.Contains(ti) || !lbToolbar.Items.Contains(ti))\n                    this.lbOperation.Items.Add(ti);\n            }\n        }\n\n        private bool Verify()\n        {\n            try\n            {\n                int i = Convert.ToInt32(this.tbRecentFilesMax.Text);\n                return (i >= 1 || i <= 50);\n            }\n            catch\n            {\n                MessageBox.Show(Strings.DialogToolOptions_Show_RecentFilesMax, Strings.DialogToolOptions_Show_Options);\n                return false;\n            }\n        }\n\n        private void bOK_Click(object sender, System.EventArgs e)\n        {\n            if (DoApply())\n            {\n                DialogResult = DialogResult.OK;\n                this.Close();\n            }\n        }\n\n        private bool DoApply()\n        {\n            lock (this)\n            {\n                try\n                {\n                    if (!Verify())\n                        return false;\n                    HandleRecentFilesMax();\n                    _RdlDesigner.HelpUrl = this.tbHelpUrl.Text;\n                    if (this.radioButtonInches.Checked == true)\n                        RdlDesigner.MeasureUnits = \"inches\";\n                    else\n                        RdlDesigner.MeasureUnits = \"cm\";\n                    HandleShows();\n                    HandleProperties();\n                    if (bToolbar)\n                        HandleToolbar();\n                    if (bDesktop)\n                        HandleDesktop();\n                    if (bMaps)\n                        HandleMaps();\n                    bToolbar = bDesktop = false;\t\t// no changes now\n                    return true;\n                }\n                catch (Exception ex)\n                {\n                    MessageBox.Show(ex.Message, Strings.DialogToolOptions_Show_Options);\n                    return false;\n                }\n            }\n        }\n\n        private void HandleProperties()\n        {\n            DockStyle ds = DockStyle.Right;\n            if (this.rbPBTop.Checked)\n                ds = DockStyle.Top;\n            else if (this.rbPBBottom.Checked)\n                ds = DockStyle.Bottom;\n            else if (this.rbPBLeft.Checked)\n                ds = DockStyle.Left;\n\n            _RdlDesigner.PropertiesLocation = ds;\n            _RdlDesigner.PropertiesAutoHide = chkPBAutoHide.Checked;\n            _RdlDesigner.XmlNewLine = (NewLineChar)comboXmlEndingLine.SelectedItem;\n        }\n\n        private void HandleDesktop()\n        {\n            if (_DesktopDocument == null)\n            {\n                _DesktopDocument = new XmlDocument();\n                XmlProcessingInstruction xPI;\n                xPI = _DesktopDocument.CreateProcessingInstruction(\"xml\", \"version='1.0' encoding='UTF-8'\");\n                _DesktopDocument.AppendChild(xPI);\n            }\n\n\t\t\tif (_DesktopConfig == null)\n\t\t\t{\n\t\t\t\t_DesktopConfig = _DesktopDocument.CreateElement(\"config\");\n\t\t\t\t_DesktopDocument.AppendChild(_DesktopConfig);\n\t\t\t}\n\n            if (_DesktopPort == null)\n            {\n                _DesktopPort = _DesktopDocument.CreateElement(\"port\");\n\t\t\t\t_DesktopConfig.AppendChild(_DesktopPort);\n            }\n            _DesktopPort.InnerText = this.tbPort.Text;\n\n            if (_DesktopDirectory == null)\n            {\n                _DesktopDirectory = _DesktopDocument.CreateElement(\"serverroot\");\n\t\t\t\t_DesktopConfig.AppendChild(_DesktopDirectory);\n            }\n            _DesktopDirectory.InnerText = this.tbDirectory.Text;\n\n\t\t\tif (_DesktopLanguage== null)\n\t\t\t{\n\t\t\t\t_DesktopLanguage = _DesktopDocument.CreateElement(\"language\");\n\t\t\t\t_DesktopConfig.AppendChild(_DesktopLanguage);\n\t\t\t}\n\n\t        _DesktopLanguage.InnerText = ((CultureInfo)tbLanguage.SelectedItem).Name;\n\n\t\t\tif (_DesktopLocal == null)\n            {\n                _DesktopLocal = _DesktopDocument.CreateElement(\"localhostonly\");\n\t\t\t\t_DesktopConfig.AppendChild(_DesktopLocal);\n            }\n            _DesktopLocal.InnerText = this.ckLocal.Checked ? \"true\" : \"false\";\n\n\n            if (_DesktopUnits == null)\n            {\n                _DesktopUnits = _DesktopDocument.CreateElement(\"units\");\n                _DesktopConfig.AppendChild(_DesktopUnits);\n            }\n\n            _DesktopUnits.InnerText = this.radioButtonInches.Checked == true ? \"inches\" : \"cm\";\n\n            Directory.CreateDirectory(Path.GetDirectoryName(optFileName)); //Create directory if not exist\n            _DesktopDocument.Save(optFileName);\n            this._RdlDesigner.menuToolsCloseProcess(false);\t\t// close the server\n        }\n\n        private void HandleMaps()\n        {\n            string[] maps = new string[lbMaps.Items.Count];\n            for (int i = 0; i < lbMaps.Items.Count; i++)\n            {\n                maps[i] = lbMaps.Items[i] as string;\n            }\n            RdlDesigner.MapSubtypes = maps;\n        }\n\n        private void HandleRecentFilesMax()\n        {\n            // Handle the RecentFilesMax\n            int i = Convert.ToInt32(this.tbRecentFilesMax.Text);\n            if (i < 1 || i > 50)\n                throw new Exception(Strings.DialogToolOptions_Error_RecentFilesMax);\n            if (this._RdlDesigner.RecentFilesMax == i)\t// if not different we don't need to do anything\n                return;\n\n            this._RdlDesigner.RecentFilesMax = i;\n\n            // Make the list match the maximum size\n            bool bChangeMenu = false;\n            while (_RdlDesigner.RecentFiles.Count > _RdlDesigner.RecentFilesMax)\n            {\n                _RdlDesigner.RecentFiles.RemoveAt(0);\t// remove the first entry\n                bChangeMenu = true;\n            }\n\n            if (bChangeMenu)\n                _RdlDesigner.RecentFilesMenu();\t\t\t// reset the menu since the list changed\n            return;\n        }\n\n        private void HandleToolbar()\n        {\n            List<string> ar = new List<string>();\n            foreach (string item in this.lbToolbar.Items)\n                ar.Add(item);\n            this._RdlDesigner.Toolbar = ar;\n        }\n\n        private void HandleShows()\n        {\n            _RdlDesigner.ShowEditLines = this.cbEditLines.Checked;\n            _RdlDesigner.ShowReportItemOutline = this.cbOutline.Checked;\n            _RdlDesigner.ShowTabbedInterface = this.cbTabInterface.Checked;\n            _RdlDesigner.ShowPreviewWaitDialog = this.cbShowReportWaitDialog.Checked;\n\n            foreach (MDIChild mc in _RdlDesigner.MdiChildren)\n            {\n                mc.ShowEditLines(this.cbEditLines.Checked);\n                mc.ShowReportItemOutline = this.cbOutline.Checked;\n                mc.ShowPreviewWaitDialog(this.cbShowReportWaitDialog.Checked);\n            }\n\n        }\n\n        private void bCopyItem_Click(object sender, System.EventArgs e)\n        {\n            bToolbar = true;\n            int i = this.lbOperation.SelectedIndex;\n            if (i < 0)\n                return;\n            string itm = lbOperation.Items[i] as String;\n            lbToolbar.Items.Add(itm);\n            // Remove from list if not allowed to be duplicated in toolbar\n            if (!_RdlDesigner.ToolbarAllowDups.Contains(itm))\n                lbOperation.Items.RemoveAt(i);\n        }\n\n        private void bRemove_Click(object sender, System.EventArgs e)\n        {\n            bToolbar = true;\n            int i = this.lbToolbar.SelectedIndex;\n            if (i < 0)\n                return;\n            string itm = lbToolbar.Items[i] as String;\n            if (itm == \"Newline\" || itm == \"Space\")\n            { }\n            else\n                lbOperation.Items.Add(itm);\n\n            lbToolbar.Items.RemoveAt(i);\n        }\n\n        private void bUp_Click(object sender, System.EventArgs e)\n        {\n            int i = this.lbToolbar.SelectedIndex;\n            if (i <= 0)\n                return;\n\n            Swap(i - 1, i);\n        }\n\n        private void bDown_Click(object sender, System.EventArgs e)\n        {\n            int i = this.lbToolbar.SelectedIndex;\n            if (i < 0 || i == lbToolbar.Items.Count - 1)\n                return;\n\n            Swap(i, i + 1);\n        }\n\n        /// <summary>\n        /// Swap items in the toolbar listbox.  i1 should always be less than i2\n        /// </summary>\n        /// <param name=\"i1\"></param>\n        /// <param name=\"i2\"></param>\n        private void Swap(int i1, int i2)\n        {\n            bToolbar = true;\n            bool b1 = (i1 == lbToolbar.SelectedIndex);\n\n            string s1 = lbToolbar.Items[i1] as string;\n            string s2 = lbToolbar.Items[i2] as string;\n            lbToolbar.SuspendLayout();\n            lbToolbar.Items.RemoveAt(i2);\n            lbToolbar.Items.RemoveAt(i1);\n            lbToolbar.Items.Insert(i1, s2);\n            lbToolbar.Items.Insert(i2, s1);\n            lbToolbar.SelectedIndex = b1 ? i2 : i1;\n            lbToolbar.ResumeLayout(true);\n        }\n\n        private void bReset_Click(object sender, System.EventArgs e)\n        {\n            bToolbar = true;\n\n            this.lbToolbar.Items.Clear();\n            List<string> ar = this._RdlDesigner.ToolbarDefault;\n            foreach (string itm in ar)\n                this.lbToolbar.Items.Add(itm);\n\n            InitOperations();\n        }\n\n        private void bApply_Click(object sender, System.EventArgs e)\n        {\n            DoApply();\n        }\n\n        private void Desktop_Changed(object sender, System.EventArgs e)\n        {\n            bDesktop = true;\n        }\n\n        private void bBrowse_Click(object sender, System.EventArgs e)\n        {\n            FolderBrowserDialog fbd = new FolderBrowserDialog();\n            // Set the help text description for the FolderBrowserDialog.\n            fbd.Description =\n                \"Select the directory that will contain reports.\";\n\n            // Do not allow the user to create new files via the FolderBrowserDialog.\n            fbd.ShowNewFolderButton = false;\n            //\t\t\tfbd.RootFolder = System.Environment.SpecialFolder.MyComputer;\n            fbd.SelectedPath = this.tbDirectory.Text.Length == 0 ?\n                \"Examples\" : tbDirectory.Text;\n\n            try\n            {\n                if (fbd.ShowDialog(this) == DialogResult.Cancel)\n                    return;\n\n                tbDirectory.Text = fbd.SelectedPath;\n                bDesktop = true;\t\t// we modified Desktop settings\n\n            }\n            finally\n            {\n                fbd.Dispose();\n            }\n\n            return;\n        }\n\n        static public DesktopConfig DesktopConfiguration\n        {\n            get\n            {\n                DesktopConfig dc = new DesktopConfig();\n                try\n                {\n                    XmlDocument xDoc = new XmlDocument();\n                    xDoc.Load(optFileName);\n                    XmlNode xNode;\n                    xNode = xDoc.SelectSingleNode(\"//config\");\n\n                    // Loop thru all the child nodes\n                    foreach (XmlNode xNodeLoop in xNode.ChildNodes)\n                    {\n                        if (xNodeLoop.NodeType != XmlNodeType.Element)\n                            continue;\n                        switch (xNodeLoop.Name.ToLower())\n                        {\n                            case \"serverroot\":\n                                dc.Directory = xNodeLoop.InnerText;\n                                break;\n                            case \"port\":\n                                dc.Port = xNodeLoop.InnerText;\n                                break;\n\t\t\t\t\t\t\tcase \"language\":\n\t\t                        dc.Language = xNodeLoop.InnerText;\n\t\t                        break;\n                            case \"units\":\n                                dc.Units = xNodeLoop.InnerText;\n                                break;\n                        }\n                    }\n                    return dc;\n                }\n                catch (Exception ex)\n                {\n                    throw new Exception(string.Format(Strings.DialogToolOptions_Error_UnableConfig, ex.Message));\n                }\n            }\n        }\n\n        private void cbTabInterface_CheckedChanged(object sender, EventArgs e)\n        {\n            this.bToolbar = true;   // tabbed interface is part of the toolbar\n        }\n\n        private void bAddMap_Click(object sender, EventArgs e)\n        {\n            OpenFileDialog ofd = new OpenFileDialog();\n            ofd.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory;\n            ofd.DefaultExt = \"rdl\";\n            ofd.Filter = Strings.DialogToolOptions_bAddMap_Click_MapFilesFilter;\n            ofd.FilterIndex = 1;\n            ofd.CheckFileExists = true;\n            ofd.Multiselect = true;\n            try\n            {\n                if (ofd.ShowDialog(this) == DialogResult.OK)\n                {\n                    foreach (string file in ofd.FileNames)\n                    {\n                        string nm = Path.GetFileNameWithoutExtension(file);\n                        if (!lbMaps.Items.Contains(nm))\n                        {\n                            lbMaps.Items.Add(nm);\n                            bMaps = true;\n                        }\n                    }\n                }\n            }\n            finally\n            {\n                ofd.Dispose();\n            }\n        }\n\n        private void bRemoveMap_Click(object sender, EventArgs e)\n        {\n            if (lbMaps.SelectedIndex < 0)\n                return;\n            lbMaps.Items.RemoveAt(lbMaps.SelectedIndex);\n            bMaps = true;\n            return;\n        }\n\n\t\tprivate static IEnumerable<CultureInfo> GetAvailableCultures()\n\t\t{\n\t\t\tvar list = new List<CultureInfo>();\n\n\t\t\tvar startupDir = Application.StartupPath;\n\t\t\tvar asm = Assembly.GetEntryAssembly();\n\n\t\t\tvar neutralCulture = CultureInfo.InvariantCulture;\n\n\t\t\tif (asm != null)\n\t\t\t{\n\t\t\t\tvar attr = Attribute.GetCustomAttribute(asm, typeof(NeutralResourcesLanguageAttribute)) as NeutralResourcesLanguageAttribute;\n\n\t\t\t\tif (attr != null)\n\t\t\t\t{\n\t\t\t\t\tneutralCulture = CultureInfo.GetCultureInfo(attr.CultureName);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlist.Add(neutralCulture);\n\n\t\t\tif (asm != null)\n\t\t\t{\n\t\t\t\tvar baseName = asm.GetName().Name;\n\t\t\t\tforeach (var dir in Directory.GetDirectories(startupDir))\n\t\t\t\t{\n\t\t\t\t\t// Check that the directory name is a valid culture\n\t\t\t\t\tvar dirinfo = new DirectoryInfo(dir);\n\t\t\t\t\tCultureInfo tCulture;\n\n\t\t\t\t\ttry\n\t\t\t\t\t{\n\t\t\t\t\t\ttCulture = CultureInfo.GetCultureInfo(dirinfo.Name);\n\t\t\t\t\t}\n\t\t\t\t\t// Not a valid culture : skip that directory\n\t\t\t\t\tcatch (ArgumentException)\n\t\t\t\t\t{\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check that the directory contains satellite assemblies\n\t\t\t\t\tif (dirinfo.GetFiles(baseName + \".resources.dll\").Length > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tlist.Add(tCulture);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn list.AsReadOnly();\n\t\t}\n\n\n        private void RadioButtonInches_CheckedChanged(object sender, EventArgs e)\n        {\n            bDesktop = true;\n        }\n\n        private void RadioButtonCm_CheckedChanged(object sender, EventArgs e)\n        {\n            bDesktop = true;\n        }\n\n    }\n\n\n    public class DesktopConfig\n    {\n        public string Directory;\n        public string Port;\n        public string Language;\n        public string Units;\n    }\n}\n"
  },
  {
    "path": "RdlDesign/DialogToolOptions.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>210, 305</value>\n  </data>\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"bCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>298, 305</value>\n  </data>\n  <data name=\"bCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"bCancel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Name\" xml:space=\"preserve\">\n    <value>bCancel</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"radioButtonCm.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"radioButtonCm.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"radioButtonCm.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>18, 55</value>\n  </data>\n  <data name=\"radioButtonCm.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 17</value>\n  </data>\n  <data name=\"radioButtonCm.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"radioButtonCm.Text\" xml:space=\"preserve\">\n    <value>Cm</value>\n  </data>\n  <data name=\"&gt;&gt;radioButtonCm.Name\" xml:space=\"preserve\">\n    <value>radioButtonCm</value>\n  </data>\n  <data name=\"&gt;&gt;radioButtonCm.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;radioButtonCm.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;radioButtonCm.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"radioButtonInches.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"radioButtonInches.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"radioButtonInches.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>18, 23</value>\n  </data>\n  <data name=\"radioButtonInches.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>57, 17</value>\n  </data>\n  <data name=\"radioButtonInches.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"radioButtonInches.Text\" xml:space=\"preserve\">\n    <value>Inches</value>\n  </data>\n  <data name=\"&gt;&gt;radioButtonInches.Name\" xml:space=\"preserve\">\n    <value>radioButtonInches</value>\n  </data>\n  <data name=\"&gt;&gt;radioButtonInches.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;radioButtonInches.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;radioButtonInches.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"groupBox1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>291, 84</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>158, 87</value>\n  </data>\n  <data name=\"groupBox1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>14</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Options for Ruler</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Name\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Parent\" xml:space=\"preserve\">\n    <value>tpGeneral</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"label12.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"label12.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label12.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>203, 180</value>\n  </data>\n  <data name=\"label12.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>146, 18</value>\n  </data>\n  <data name=\"label12.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>13</value>\n  </data>\n  <data name=\"label12.Text\" xml:space=\"preserve\">\n    <value>XML Line ending</value>\n  </data>\n  <data name=\"label12.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>TopRight</value>\n  </data>\n  <data name=\"&gt;&gt;label12.Name\" xml:space=\"preserve\">\n    <value>label12</value>\n  </data>\n  <data name=\"&gt;&gt;label12.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label12.Parent\" xml:space=\"preserve\">\n    <value>tpGeneral</value>\n  </data>\n  <data name=\"&gt;&gt;label12.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"comboXmlEndingLine.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>355, 177</value>\n  </data>\n  <data name=\"comboXmlEndingLine.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>90, 21</value>\n  </data>\n  <data name=\"comboXmlEndingLine.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"&gt;&gt;comboXmlEndingLine.Name\" xml:space=\"preserve\">\n    <value>comboXmlEndingLine</value>\n  </data>\n  <data name=\"&gt;&gt;comboXmlEndingLine.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;comboXmlEndingLine.Parent\" xml:space=\"preserve\">\n    <value>tpGeneral</value>\n  </data>\n  <data name=\"&gt;&gt;comboXmlEndingLine.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"label11.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label11.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label11.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>15, 180</value>\n  </data>\n  <data name=\"label11.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>55, 13</value>\n  </data>\n  <data name=\"label11.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"label11.Text\" xml:space=\"preserve\">\n    <value>Language</value>\n  </data>\n  <data name=\"&gt;&gt;label11.Name\" xml:space=\"preserve\">\n    <value>label11</value>\n  </data>\n  <data name=\"&gt;&gt;label11.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label11.Parent\" xml:space=\"preserve\">\n    <value>tpGeneral</value>\n  </data>\n  <data name=\"&gt;&gt;label11.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"tbLanguage.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>76, 177</value>\n  </data>\n  <data name=\"tbLanguage.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 21</value>\n  </data>\n  <data name=\"tbLanguage.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;tbLanguage.Name\" xml:space=\"preserve\">\n    <value>tbLanguage</value>\n  </data>\n  <data name=\"&gt;&gt;tbLanguage.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbLanguage.Parent\" xml:space=\"preserve\">\n    <value>tpGeneral</value>\n  </data>\n  <data name=\"&gt;&gt;tbLanguage.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"cbShowReportWaitDialog.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"cbShowReportWaitDialog.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>14, 155</value>\n  </data>\n  <data name=\"cbShowReportWaitDialog.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>229, 17</value>\n  </data>\n  <data name=\"cbShowReportWaitDialog.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"cbShowReportWaitDialog.Text\" xml:space=\"preserve\">\n    <value>Show Rendering Report Dialog on Preview</value>\n  </data>\n  <data name=\"&gt;&gt;cbShowReportWaitDialog.Name\" xml:space=\"preserve\">\n    <value>cbShowReportWaitDialog</value>\n  </data>\n  <data name=\"&gt;&gt;cbShowReportWaitDialog.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbShowReportWaitDialog.Parent\" xml:space=\"preserve\">\n    <value>tpGeneral</value>\n  </data>\n  <data name=\"&gt;&gt;cbShowReportWaitDialog.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"chkPBAutoHide.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"chkPBAutoHide.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>13, 42</value>\n  </data>\n  <data name=\"chkPBAutoHide.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>73, 17</value>\n  </data>\n  <data name=\"chkPBAutoHide.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"chkPBAutoHide.Text\" xml:space=\"preserve\">\n    <value>Auto Hide</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBAutoHide.Name\" xml:space=\"preserve\">\n    <value>chkPBAutoHide</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBAutoHide.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBAutoHide.Parent\" xml:space=\"preserve\">\n    <value>gbPropLoc</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBAutoHide.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"rbPBBottom.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"rbPBBottom.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>301, 19</value>\n  </data>\n  <data name=\"rbPBBottom.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>58, 17</value>\n  </data>\n  <data name=\"rbPBBottom.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"rbPBBottom.Text\" xml:space=\"preserve\">\n    <value>Bottom</value>\n  </data>\n  <data name=\"&gt;&gt;rbPBBottom.Name\" xml:space=\"preserve\">\n    <value>rbPBBottom</value>\n  </data>\n  <data name=\"&gt;&gt;rbPBBottom.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbPBBottom.Parent\" xml:space=\"preserve\">\n    <value>gbPropLoc</value>\n  </data>\n  <data name=\"&gt;&gt;rbPBBottom.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"rbPBTop.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"rbPBTop.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>205, 19</value>\n  </data>\n  <data name=\"rbPBTop.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>44, 17</value>\n  </data>\n  <data name=\"rbPBTop.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"rbPBTop.Text\" xml:space=\"preserve\">\n    <value>Top</value>\n  </data>\n  <data name=\"&gt;&gt;rbPBTop.Name\" xml:space=\"preserve\">\n    <value>rbPBTop</value>\n  </data>\n  <data name=\"&gt;&gt;rbPBTop.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbPBTop.Parent\" xml:space=\"preserve\">\n    <value>gbPropLoc</value>\n  </data>\n  <data name=\"&gt;&gt;rbPBTop.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"rbPBLeft.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"rbPBLeft.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>109, 19</value>\n  </data>\n  <data name=\"rbPBLeft.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>43, 17</value>\n  </data>\n  <data name=\"rbPBLeft.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"rbPBLeft.Text\" xml:space=\"preserve\">\n    <value>Left</value>\n  </data>\n  <data name=\"&gt;&gt;rbPBLeft.Name\" xml:space=\"preserve\">\n    <value>rbPBLeft</value>\n  </data>\n  <data name=\"&gt;&gt;rbPBLeft.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbPBLeft.Parent\" xml:space=\"preserve\">\n    <value>gbPropLoc</value>\n  </data>\n  <data name=\"&gt;&gt;rbPBLeft.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"rbPBRight.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"rbPBRight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>13, 19</value>\n  </data>\n  <data name=\"rbPBRight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>50, 17</value>\n  </data>\n  <data name=\"rbPBRight.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"rbPBRight.Text\" xml:space=\"preserve\">\n    <value>Right</value>\n  </data>\n  <data name=\"&gt;&gt;rbPBRight.Name\" xml:space=\"preserve\">\n    <value>rbPBRight</value>\n  </data>\n  <data name=\"&gt;&gt;rbPBRight.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbPBRight.Parent\" xml:space=\"preserve\">\n    <value>gbPropLoc</value>\n  </data>\n  <data name=\"&gt;&gt;rbPBRight.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"gbPropLoc.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>14, 204</value>\n  </data>\n  <data name=\"gbPropLoc.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 61</value>\n  </data>\n  <data name=\"gbPropLoc.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"gbPropLoc.Text\" xml:space=\"preserve\">\n    <value>Properties Window</value>\n  </data>\n  <data name=\"&gt;&gt;gbPropLoc.Name\" xml:space=\"preserve\">\n    <value>gbPropLoc</value>\n  </data>\n  <data name=\"&gt;&gt;gbPropLoc.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;gbPropLoc.Parent\" xml:space=\"preserve\">\n    <value>tpGeneral</value>\n  </data>\n  <data name=\"&gt;&gt;gbPropLoc.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"cbTabInterface.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"cbTabInterface.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>14, 132</value>\n  </data>\n  <data name=\"cbTabInterface.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>133, 17</value>\n  </data>\n  <data name=\"cbTabInterface.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"cbTabInterface.Text\" xml:space=\"preserve\">\n    <value>Show tabbed interface</value>\n  </data>\n  <data name=\"&gt;&gt;cbTabInterface.Name\" xml:space=\"preserve\">\n    <value>cbTabInterface</value>\n  </data>\n  <data name=\"&gt;&gt;cbTabInterface.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbTabInterface.Parent\" xml:space=\"preserve\">\n    <value>tpGeneral</value>\n  </data>\n  <data name=\"&gt;&gt;cbTabInterface.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"cbOutline.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"cbOutline.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>14, 109</value>\n  </data>\n  <data name=\"cbOutline.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>172, 17</value>\n  </data>\n  <data name=\"cbOutline.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"cbOutline.Text\" xml:space=\"preserve\">\n    <value>Outline report items in Designer</value>\n  </data>\n  <data name=\"&gt;&gt;cbOutline.Name\" xml:space=\"preserve\">\n    <value>cbOutline</value>\n  </data>\n  <data name=\"&gt;&gt;cbOutline.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbOutline.Parent\" xml:space=\"preserve\">\n    <value>tpGeneral</value>\n  </data>\n  <data name=\"&gt;&gt;cbOutline.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"cbEditLines.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"cbEditLines.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>14, 86</value>\n  </data>\n  <data name=\"cbEditLines.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>175, 17</value>\n  </data>\n  <data name=\"cbEditLines.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"cbEditLines.Text\" xml:space=\"preserve\">\n    <value>Show line numbers in RDL Text</value>\n  </data>\n  <data name=\"&gt;&gt;cbEditLines.Name\" xml:space=\"preserve\">\n    <value>cbEditLines</value>\n  </data>\n  <data name=\"&gt;&gt;cbEditLines.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbEditLines.Parent\" xml:space=\"preserve\">\n    <value>tpGeneral</value>\n  </data>\n  <data name=\"&gt;&gt;cbEditLines.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"tbHelpUrl.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>14, 60</value>\n  </data>\n  <data name=\"tbHelpUrl.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>435, 20</value>\n  </data>\n  <data name=\"tbHelpUrl.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"tbHelpUrl.Text\" xml:space=\"preserve\">\n    <value>tbHelpUrl</value>\n  </data>\n  <data name=\"&gt;&gt;tbHelpUrl.Name\" xml:space=\"preserve\">\n    <value>tbHelpUrl</value>\n  </data>\n  <data name=\"&gt;&gt;tbHelpUrl.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbHelpUrl.Parent\" xml:space=\"preserve\">\n    <value>tpGeneral</value>\n  </data>\n  <data name=\"&gt;&gt;tbHelpUrl.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>11, 40</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>404, 23</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Help System URL  (Empty string means use default help url.)</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>tpGeneral</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>11</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>100, 15</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>174, 23</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>items in most recently used lists.</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>tpGeneral</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>12</value>\n  </data>\n  <data name=\"tbRecentFilesMax.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>58, 11</value>\n  </data>\n  <data name=\"tbRecentFilesMax.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>31, 20</value>\n  </data>\n  <data name=\"tbRecentFilesMax.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;tbRecentFilesMax.Name\" xml:space=\"preserve\">\n    <value>tbRecentFilesMax</value>\n  </data>\n  <data name=\"&gt;&gt;tbRecentFilesMax.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbRecentFilesMax.Parent\" xml:space=\"preserve\">\n    <value>tpGeneral</value>\n  </data>\n  <data name=\"&gt;&gt;tbRecentFilesMax.ZOrder\" xml:space=\"preserve\">\n    <value>13</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>11, 13</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>45, 23</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Display</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>tpGeneral</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>14</value>\n  </data>\n  <data name=\"tpGeneral.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 22</value>\n  </data>\n  <data name=\"tpGeneral.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>458, 273</value>\n  </data>\n  <data name=\"tpGeneral.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"tpGeneral.Text\" xml:space=\"preserve\">\n    <value>General</value>\n  </data>\n  <data name=\"&gt;&gt;tpGeneral.Name\" xml:space=\"preserve\">\n    <value>tpGeneral</value>\n  </data>\n  <data name=\"&gt;&gt;tpGeneral.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tpGeneral.Parent\" xml:space=\"preserve\">\n    <value>tabControl1</value>\n  </data>\n  <data name=\"&gt;&gt;tpGeneral.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"bRemove.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>179, 74</value>\n  </data>\n  <data name=\"bRemove.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 23</value>\n  </data>\n  <data name=\"bRemove.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"bRemove.Text\" xml:space=\"preserve\">\n    <value>&lt;</value>\n  </data>\n  <data name=\"&gt;&gt;bRemove.Name\" xml:space=\"preserve\">\n    <value>bRemove</value>\n  </data>\n  <data name=\"&gt;&gt;bRemove.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bRemove.Parent\" xml:space=\"preserve\">\n    <value>tpToolbar</value>\n  </data>\n  <data name=\"&gt;&gt;bRemove.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"bReset.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>374, 104</value>\n  </data>\n  <data name=\"bReset.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>53, 23</value>\n  </data>\n  <data name=\"bReset.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"bReset.Text\" xml:space=\"preserve\">\n    <value>Reset</value>\n  </data>\n  <data name=\"&gt;&gt;bReset.Name\" xml:space=\"preserve\">\n    <value>bReset</value>\n  </data>\n  <data name=\"&gt;&gt;bReset.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bReset.Parent\" xml:space=\"preserve\">\n    <value>tpToolbar</value>\n  </data>\n  <data name=\"&gt;&gt;bReset.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"bDown.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>374, 65</value>\n  </data>\n  <data name=\"bDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>53, 23</value>\n  </data>\n  <data name=\"bDown.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"bDown.Text\" xml:space=\"preserve\">\n    <value>Down</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.Name\" xml:space=\"preserve\">\n    <value>bDown</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.Parent\" xml:space=\"preserve\">\n    <value>tpToolbar</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"bUp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>374, 35</value>\n  </data>\n  <data name=\"bUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>53, 23</value>\n  </data>\n  <data name=\"bUp.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"bUp.Text\" xml:space=\"preserve\">\n    <value>Up</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.Name\" xml:space=\"preserve\">\n    <value>bUp</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.Parent\" xml:space=\"preserve\">\n    <value>tpToolbar</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"bCopyItem.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>179, 40</value>\n  </data>\n  <data name=\"bCopyItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 23</value>\n  </data>\n  <data name=\"bCopyItem.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"bCopyItem.Text\" xml:space=\"preserve\">\n    <value>&gt;</value>\n  </data>\n  <data name=\"&gt;&gt;bCopyItem.Name\" xml:space=\"preserve\">\n    <value>bCopyItem</value>\n  </data>\n  <data name=\"&gt;&gt;bCopyItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bCopyItem.Parent\" xml:space=\"preserve\">\n    <value>tpToolbar</value>\n  </data>\n  <data name=\"&gt;&gt;bCopyItem.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"label5.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>213, 8</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 23</value>\n  </data>\n  <data name=\"label5.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>Toolbar Layout</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Name\" xml:space=\"preserve\">\n    <value>label5</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Parent\" xml:space=\"preserve\">\n    <value>tpToolbar</value>\n  </data>\n  <data name=\"&gt;&gt;label5.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>15, 8</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>112, 23</value>\n  </data>\n  <data name=\"label4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>ToolBar Operations</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Name\" xml:space=\"preserve\">\n    <value>label4</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Parent\" xml:space=\"preserve\">\n    <value>tpToolbar</value>\n  </data>\n  <data name=\"&gt;&gt;label4.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"lbToolbar.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>213, 33</value>\n  </data>\n  <data name=\"lbToolbar.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 225</value>\n  </data>\n  <data name=\"lbToolbar.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;lbToolbar.Name\" xml:space=\"preserve\">\n    <value>lbToolbar</value>\n  </data>\n  <data name=\"&gt;&gt;lbToolbar.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lbToolbar.Parent\" xml:space=\"preserve\">\n    <value>tpToolbar</value>\n  </data>\n  <data name=\"&gt;&gt;lbToolbar.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"lbOperation.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>14, 33</value>\n  </data>\n  <data name=\"lbOperation.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 225</value>\n  </data>\n  <data name=\"lbOperation.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;lbOperation.Name\" xml:space=\"preserve\">\n    <value>lbOperation</value>\n  </data>\n  <data name=\"&gt;&gt;lbOperation.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lbOperation.Parent\" xml:space=\"preserve\">\n    <value>tpToolbar</value>\n  </data>\n  <data name=\"&gt;&gt;lbOperation.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"tpToolbar.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 22</value>\n  </data>\n  <data name=\"tpToolbar.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>458, 273</value>\n  </data>\n  <data name=\"tpToolbar.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"tpToolbar.Text\" xml:space=\"preserve\">\n    <value>Toolbar</value>\n  </data>\n  <data name=\"&gt;&gt;tpToolbar.Name\" xml:space=\"preserve\">\n    <value>tpToolbar</value>\n  </data>\n  <data name=\"&gt;&gt;tpToolbar.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tpToolbar.Parent\" xml:space=\"preserve\">\n    <value>tabControl1</value>\n  </data>\n  <data name=\"&gt;&gt;tpToolbar.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"bBrowse.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>411, 102</value>\n  </data>\n  <data name=\"bBrowse.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>26, 19</value>\n  </data>\n  <data name=\"bBrowse.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"bBrowse.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"&gt;&gt;bBrowse.Name\" xml:space=\"preserve\">\n    <value>bBrowse</value>\n  </data>\n  <data name=\"&gt;&gt;bBrowse.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bBrowse.Parent\" xml:space=\"preserve\">\n    <value>tpDesktop</value>\n  </data>\n  <data name=\"&gt;&gt;bBrowse.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"tbDirectory.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>68, 100</value>\n  </data>\n  <data name=\"tbDirectory.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>334, 20</value>\n  </data>\n  <data name=\"tbDirectory.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"tbDirectory.Text\" xml:space=\"preserve\">\n    <value>textBox1</value>\n  </data>\n  <data name=\"&gt;&gt;tbDirectory.Name\" xml:space=\"preserve\">\n    <value>tbDirectory</value>\n  </data>\n  <data name=\"&gt;&gt;tbDirectory.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbDirectory.Parent\" xml:space=\"preserve\">\n    <value>tpDesktop</value>\n  </data>\n  <data name=\"&gt;&gt;tbDirectory.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"label9.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>13, 101</value>\n  </data>\n  <data name=\"label9.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 23</value>\n  </data>\n  <data name=\"label9.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"label9.Text\" xml:space=\"preserve\">\n    <value>Directory:</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Name\" xml:space=\"preserve\">\n    <value>label9</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Parent\" xml:space=\"preserve\">\n    <value>tpDesktop</value>\n  </data>\n  <data name=\"&gt;&gt;label9.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"label8.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>33, 156</value>\n  </data>\n  <data name=\"label8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>414, 26</value>\n  </data>\n  <data name=\"label8.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Important: Desktop server is not intended to be used as a production web server.  Use an ASP enabled server for anything other than local desktop use.</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Name\" xml:space=\"preserve\">\n    <value>label8</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Parent\" xml:space=\"preserve\">\n    <value>tpDesktop</value>\n  </data>\n  <data name=\"&gt;&gt;label8.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"label7.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>10, 6</value>\n  </data>\n  <data name=\"label7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>435, 57</value>\n  </data>\n  <data name=\"label7.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Changing configuration settings here affect the Desktop server whether it is started as part of the designer or whether it is started standalone.  When started as part of the designer changes made here will stop the Desktop process.  If started standalone then the Desktop server should be manually restarted.</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Name\" xml:space=\"preserve\">\n    <value>label7</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Parent\" xml:space=\"preserve\">\n    <value>tpDesktop</value>\n  </data>\n  <data name=\"&gt;&gt;label7.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"ckLocal.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>15, 131</value>\n  </data>\n  <data name=\"ckLocal.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>190, 24</value>\n  </data>\n  <data name=\"ckLocal.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"ckLocal.Text\" xml:space=\"preserve\">\n    <value>Restrict access to local machine</value>\n  </data>\n  <data name=\"&gt;&gt;ckLocal.Name\" xml:space=\"preserve\">\n    <value>ckLocal</value>\n  </data>\n  <data name=\"&gt;&gt;ckLocal.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;ckLocal.Parent\" xml:space=\"preserve\">\n    <value>tpDesktop</value>\n  </data>\n  <data name=\"&gt;&gt;ckLocal.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"tbPort.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>44, 66</value>\n  </data>\n  <data name=\"tbPort.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>50, 20</value>\n  </data>\n  <data name=\"tbPort.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;tbPort.Name\" xml:space=\"preserve\">\n    <value>tbPort</value>\n  </data>\n  <data name=\"&gt;&gt;tbPort.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbPort.Parent\" xml:space=\"preserve\">\n    <value>tpDesktop</value>\n  </data>\n  <data name=\"&gt;&gt;tbPort.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"label6.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>10, 68</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>33, 23</value>\n  </data>\n  <data name=\"label6.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Port</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Name\" xml:space=\"preserve\">\n    <value>label6</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Parent\" xml:space=\"preserve\">\n    <value>tpDesktop</value>\n  </data>\n  <data name=\"&gt;&gt;label6.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"tpDesktop.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 22</value>\n  </data>\n  <data name=\"tpDesktop.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>458, 273</value>\n  </data>\n  <data name=\"tpDesktop.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"tpDesktop.Text\" xml:space=\"preserve\">\n    <value>Desktop Server</value>\n  </data>\n  <data name=\"&gt;&gt;tpDesktop.Name\" xml:space=\"preserve\">\n    <value>tpDesktop</value>\n  </data>\n  <data name=\"&gt;&gt;tpDesktop.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tpDesktop.Parent\" xml:space=\"preserve\">\n    <value>tabControl1</value>\n  </data>\n  <data name=\"&gt;&gt;tpDesktop.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"label10.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>12, 15</value>\n  </data>\n  <data name=\"label10.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>435, 62</value>\n  </data>\n  <data name=\"label10.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"label10.Text\" xml:space=\"preserve\">\n    <value>Maps are XML files that can be specified as the subtype of a chart with type Map.   Map files contain a description of the map in terms of text, lines, polygons and keys.  Map files should be located in the same directory as the reporting engine library.</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Name\" xml:space=\"preserve\">\n    <value>label10</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Parent\" xml:space=\"preserve\">\n    <value>tabPage1</value>\n  </data>\n  <data name=\"&gt;&gt;label10.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"bRemoveMap.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>226, 110</value>\n  </data>\n  <data name=\"bRemoveMap.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"bRemoveMap.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"bRemoveMap.Text\" xml:space=\"preserve\">\n    <value>Remove</value>\n  </data>\n  <data name=\"&gt;&gt;bRemoveMap.Name\" xml:space=\"preserve\">\n    <value>bRemoveMap</value>\n  </data>\n  <data name=\"&gt;&gt;bRemoveMap.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bRemoveMap.Parent\" xml:space=\"preserve\">\n    <value>tabPage1</value>\n  </data>\n  <data name=\"&gt;&gt;bRemoveMap.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"bAddMap.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>226, 81</value>\n  </data>\n  <data name=\"bAddMap.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"bAddMap.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"bAddMap.Text\" xml:space=\"preserve\">\n    <value>Add...</value>\n  </data>\n  <data name=\"&gt;&gt;bAddMap.Name\" xml:space=\"preserve\">\n    <value>bAddMap</value>\n  </data>\n  <data name=\"&gt;&gt;bAddMap.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bAddMap.Parent\" xml:space=\"preserve\">\n    <value>tabPage1</value>\n  </data>\n  <data name=\"&gt;&gt;bAddMap.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"lbMaps.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>15, 80</value>\n  </data>\n  <data name=\"lbMaps.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 173</value>\n  </data>\n  <data name=\"lbMaps.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;lbMaps.Name\" xml:space=\"preserve\">\n    <value>lbMaps</value>\n  </data>\n  <data name=\"&gt;&gt;lbMaps.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lbMaps.Parent\" xml:space=\"preserve\">\n    <value>tabPage1</value>\n  </data>\n  <data name=\"&gt;&gt;lbMaps.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"tabPage1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 22</value>\n  </data>\n  <data name=\"tabPage1.Padding\" type=\"System.Windows.Forms.Padding, System.Windows.Forms\">\n    <value>3, 3, 3, 3</value>\n  </data>\n  <data name=\"tabPage1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>458, 273</value>\n  </data>\n  <data name=\"tabPage1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"tabPage1.Text\" xml:space=\"preserve\">\n    <value>Maps</value>\n  </data>\n  <data name=\"&gt;&gt;tabPage1.Name\" xml:space=\"preserve\">\n    <value>tabPage1</value>\n  </data>\n  <data name=\"&gt;&gt;tabPage1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tabPage1.Parent\" xml:space=\"preserve\">\n    <value>tabControl1</value>\n  </data>\n  <data name=\"&gt;&gt;tabPage1.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"tabControl1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>3, 3</value>\n  </data>\n  <data name=\"tabControl1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>466, 299</value>\n  </data>\n  <data name=\"tabControl1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;tabControl1.Name\" xml:space=\"preserve\">\n    <value>tabControl1</value>\n  </data>\n  <data name=\"&gt;&gt;tabControl1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tabControl1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tabControl1.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"bApply.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>386, 305</value>\n  </data>\n  <data name=\"bApply.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"bApply.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"bApply.Text\" xml:space=\"preserve\">\n    <value>Apply</value>\n  </data>\n  <data name=\"&gt;&gt;bApply.Name\" xml:space=\"preserve\">\n    <value>bApply</value>\n  </data>\n  <data name=\"&gt;&gt;bApply.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bApply.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bApply.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>466, 334</value>\n  </data>\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Options</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DialogToolOptions</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DialogToolOptions.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"tpGeneral.Text\" xml:space=\"preserve\">\n    <value>Общие</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label11.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>35, 13</value>\n  </data>\n  <data name=\"label11.Text\" xml:space=\"preserve\">\n    <value>Язык</value>\n  </data>\n  <data name=\"tbLanguage.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>56, 177</value>\n  </data>\n  <data name=\"cbShowReportWaitDialog.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>353, 17</value>\n  </data>\n  <data name=\"cbShowReportWaitDialog.Text\" xml:space=\"preserve\">\n    <value>Показывать окно ожидания при подготовке к просмотру отчёта</value>\n  </data>\n  <data name=\"gbPropLoc.Text\" xml:space=\"preserve\">\n    <value>Окно свойств</value>\n  </data>\n  <data name=\"chkPBAutoHide.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>156, 17</value>\n  </data>\n  <data name=\"chkPBAutoHide.Text\" xml:space=\"preserve\">\n    <value>Автоматически скрывать</value>\n  </data>\n  <data name=\"rbPBBottom.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>55, 17</value>\n  </data>\n  <data name=\"rbPBBottom.Text\" xml:space=\"preserve\">\n    <value>Снизу</value>\n  </data>\n  <data name=\"rbPBTop.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>60, 17</value>\n  </data>\n  <data name=\"rbPBTop.Text\" xml:space=\"preserve\">\n    <value>Сверху</value>\n  </data>\n  <data name=\"rbPBLeft.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 17</value>\n  </data>\n  <data name=\"rbPBLeft.Text\" xml:space=\"preserve\">\n    <value>Слева</value>\n  </data>\n  <data name=\"rbPBRight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>62, 17</value>\n  </data>\n  <data name=\"rbPBRight.Text\" xml:space=\"preserve\">\n    <value>Справа</value>\n  </data>\n  <data name=\"cbTabInterface.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>215, 17</value>\n  </data>\n  <data name=\"cbTabInterface.Text\" xml:space=\"preserve\">\n    <value>Показывать интерфейс с вкладками</value>\n  </data>\n  <data name=\"cbOutline.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>286, 17</value>\n  </data>\n  <data name=\"cbOutline.Text\" xml:space=\"preserve\">\n    <value>Показывать контур элементов отчёта в дизайнере</value>\n  </data>\n  <data name=\"cbEditLines.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>254, 17</value>\n  </data>\n  <data name=\"cbEditLines.Text\" xml:space=\"preserve\">\n    <value>Показывать номера строк в редакторе кода</value>\n  </data>\n  <data name=\"tbHelpUrl.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>14, 62</value>\n  </data>\n  <data name=\"tbHelpUrl.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>417, 20</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>11, 33</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>420, 28</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Ссылка на страницу помощи (Пустая строка означает использование по умолчанию URL-адреса справки)</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>131, 12</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>266, 23</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>элементов в списках \"недавно используемые\"</value>\n  </data>\n  <data name=\"tbRecentFilesMax.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>94, 12</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>11, 12</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>77, 23</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Отображать</value>\n  </data>\n  <data name=\"tpToolbar.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>458, 273</value>\n  </data>\n  <data name=\"tpToolbar.Text\" xml:space=\"preserve\">\n    <value>Панели инструментов</value>\n  </data>\n  <data name=\"bReset.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>73, 23</value>\n  </data>\n  <data name=\"bReset.Text\" xml:space=\"preserve\">\n    <value>Сбросить</value>\n  </data>\n  <data name=\"bDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>73, 23</value>\n  </data>\n  <data name=\"bDown.Text\" xml:space=\"preserve\">\n    <value>Вниз</value>\n  </data>\n  <data name=\"bUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>73, 23</value>\n  </data>\n  <data name=\"bUp.Text\" xml:space=\"preserve\">\n    <value>Вверх</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>Панель макета</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Панель операций</value>\n  </data>\n  <data name=\"tpDesktop.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>458, 273</value>\n  </data>\n  <data name=\"tpDesktop.Text\" xml:space=\"preserve\">\n    <value>Сервер</value>\n  </data>\n  <data name=\"label9.Text\" xml:space=\"preserve\">\n    <value>Каталог:</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Важно: сервер не предназначен для использования в качестве веб-сервера.</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Изменение настроек конфигурации здесь влияет на сервер. Если сервер запущен как часть дизайнера, изменения, сделанные здесь, остановят процесс сервера. Если сервер запущен как отдельный процесс, сервер должен быть перезагружен вручную.</value>\n  </data>\n  <data name=\"ckLocal.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>242, 24</value>\n  </data>\n  <data name=\"ckLocal.Text\" xml:space=\"preserve\">\n    <value>Ограничить доступ к локальной машине</value>\n  </data>\n  <data name=\"tbPort.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>68, 65</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Порт</value>\n  </data>\n  <data name=\"tabPage1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>458, 273</value>\n  </data>\n  <data name=\"tabPage1.Text\" xml:space=\"preserve\">\n    <value>Карты</value>\n  </data>\n  <data name=\"label10.Text\" xml:space=\"preserve\">\n    <value>Карты - это XML файлы, которые могут быть указаны в качестве подтипа диаграммы с типом карта. Файлы карт содержат описание карты в виде текста, линий, полигонов и ключей. Файлы карт должны находиться в одном каталоге с системой отчётов.</value>\n  </data>\n  <data name=\"bRemoveMap.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"bAddMap.Text\" xml:space=\"preserve\">\n    <value>Добавить...</value>\n  </data>\n  <data name=\"bApply.Text\" xml:space=\"preserve\">\n    <value>Применить</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Настройки</value>\n  </data>\n  <data name=\"label12.Text\" xml:space=\"preserve\">\n    <value>Окончание строки в XML</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DialogValidValues.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    internal partial class DialogValidValues : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\nprivate System.Windows.Forms.DataGridView dgParms;\nprivate System.Windows.Forms.Button bOK;\nprivate System.Windows.Forms.Button bCancel;\nprivate System.Windows.Forms.Button bDelete;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DialogValidValues));\n\t\t\tthis.dgParms = new System.Windows.Forms.DataGridView();\n\t\t\tthis.bOK = new System.Windows.Forms.Button();\n\t\t\tthis.bCancel = new System.Windows.Forms.Button();\n\t\t\tthis.bDelete = new System.Windows.Forms.Button();\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.dgParms)).BeginInit();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// dgParms\n\t\t\t// \n\t\t\tresources.ApplyResources(this.dgParms, \"dgParms\");\n\t\t\tthis.dgParms.DataMember = \"\";\n\t\t\tthis.dgParms.Name = \"dgParms\";\n\t\t\t// \n\t\t\t// bOK\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bOK, \"bOK\");\n\t\t\tthis.bOK.DialogResult = System.Windows.Forms.DialogResult.OK;\n\t\t\tthis.bOK.Name = \"bOK\";\n\t\t\t// \n\t\t\t// bCancel\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCancel, \"bCancel\");\n\t\t\tthis.bCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n\t\t\tthis.bCancel.Name = \"bCancel\";\n\t\t\t// \n\t\t\t// bDelete\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bDelete, \"bDelete\");\n\t\t\tthis.bDelete.Name = \"bDelete\";\n\t\t\tthis.bDelete.Click += new System.EventHandler(this.bDelete_Click);\n\t\t\t// \n\t\t\t// DialogValidValues\n\t\t\t// \n\t\t\tthis.AcceptButton = this.bOK;\n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.CancelButton = this.bCancel;\n\t\t\tthis.ControlBox = false;\n\t\t\tthis.Controls.Add(this.bDelete);\n\t\t\tthis.Controls.Add(this.bCancel);\n\t\t\tthis.Controls.Add(this.bOK);\n\t\t\tthis.Controls.Add(this.dgParms);\n\t\t\tthis.MaximizeBox = false;\n\t\t\tthis.MinimizeBox = false;\n\t\t\tthis.Name = \"DialogValidValues\";\n\t\t\tthis.ShowInTaskbar = false;\n\t\t\tthis.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.dgParms)).EndInit();\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/DialogValidValues.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.Text;\nusing System.IO;\nusing Majorsilence.Reporting.Rdl;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// DialogValidValues allow user to provide ValidValues: Value and Label lists\n    /// </summary>\n    internal partial class DialogValidValues \n    {\n        private DataTable _DataTable;\n\n        internal DialogValidValues(List<ParameterValueItem> list)\n        {\n            // This call is required by the Windows.Forms Form Designer.\n            InitializeComponent();\n\n            // Initialize form using the style node values\n            InitValues(list);\n        }\n\n        internal List<ParameterValueItem> ValidValues\n        {\n            get\n            {\n                List<ParameterValueItem> list = new List<ParameterValueItem>();\n                foreach (DataRow dr in _DataTable.Rows)\n                {\n                    if (dr[0] == DBNull.Value)\n                        continue;\n                    string val = (string)dr[0];\n\n                    if (val.Length <= 0)\n                        continue;\n\n                    string label;\n                    if (dr[1] == DBNull.Value)\n                        label = null;\n                    else\n                        label = (string)dr[1];\n\n                    ParameterValueItem pvi = new ParameterValueItem();\n                    pvi.Value = val;\n                    pvi.Label = label;\n                    list.Add(pvi);\n                }\n                return list.Count > 0 ? list : null;\n            }\n        }\n\n        private void InitValues(List<ParameterValueItem> list)\n        {\n            // Initialize the DataGrid\n            //this.dgParms.DataSource = _dsv.QueryParameters;\n\n            _DataTable = new DataTable();\n            _DataTable.Columns.Add(new DataColumn(\"Value\", typeof(string)));\n            _DataTable.Columns.Add(new DataColumn(\"Label\", typeof(string)));\n\n            string[] rowValues = new string[2];\n            if (list != null)\n                foreach (ParameterValueItem pvi in list)\n                {\n                    rowValues[0] = pvi.Value;\n                    rowValues[1] = pvi.Label;\n\n                    _DataTable.Rows.Add(rowValues);\n                }\n\n            this.dgParms.DataSource = _DataTable;\n\n            ////\n            dgParms.Columns[0].Width = 140;\n            dgParms.Columns[1].Width = 140;\n        }\n\n        private void bDelete_Click(object sender, System.EventArgs e)\n        {\n            this._DataTable.Rows.RemoveAt(this.dgParms.CurrentRow.Index);\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "RdlDesign/DialogValidValues.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"&gt;&gt;bCancel.Name\" xml:space=\"preserve\">\n    <value>bCancel</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;dgTableStyle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGridTableStyle, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;dgParms.Name\" xml:space=\"preserve\">\n    <value>dgParms</value>\n  </data>\n  <data name=\"&gt;&gt;dgTableStyle.Name\" xml:space=\"preserve\">\n    <value>dgTableStyle</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bDelete.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>336, 16</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DialogValidValues</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Valid Values</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bCancel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;dgParms.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Name\" xml:space=\"preserve\">\n    <value>bDelete</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>392, 222</value>\n  </data>\n  <data name=\"bDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"bCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>312, 192</value>\n  </data>\n  <data name=\"bDelete.Text\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>216, 192</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"dgParms.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"dgParms.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 8</value>\n  </data>\n  <data name=\"&gt;&gt;dgParms.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGrid, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dgParms.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"dgParms.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>320, 168</value>\n  </data>\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"bDelete.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/DialogValidValues.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"dgParms.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>312, 168</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"bDelete.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>326, 16</value>\n  </data>\n  <data name=\"bDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>58, 23</value>\n  </data>\n  <data name=\"bDelete.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Корректные значения</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DialogValidateRdl.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    public partial class DialogValidateRdl : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tprivate RdlDesigner _RdlDesigner;\nprivate System.Windows.Forms.Button bClose;\nprivate System.Windows.Forms.Label label1;\nprivate System.Windows.Forms.Button bValidate;\nprivate System.Windows.Forms.ListBox lbSchemaErrors;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DialogValidateRdl));\n\t\t\tthis.bClose = new System.Windows.Forms.Button();\n\t\t\tthis.lbSchemaErrors = new System.Windows.Forms.ListBox();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.bValidate = new System.Windows.Forms.Button();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// bClose\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bClose, \"bClose\");\n\t\t\tthis.bClose.CausesValidation = false;\n\t\t\tthis.bClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n\t\t\tthis.bClose.Name = \"bClose\";\n\t\t\tthis.bClose.Click += new System.EventHandler(this.bClose_Click);\n\t\t\t// \n\t\t\t// lbSchemaErrors\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lbSchemaErrors, \"lbSchemaErrors\");\n\t\t\tthis.lbSchemaErrors.Name = \"lbSchemaErrors\";\n\t\t\tthis.lbSchemaErrors.DoubleClick += new System.EventHandler(this.lbSchemaErrors_DoubleClick);\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// bValidate\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bValidate, \"bValidate\");\n\t\t\tthis.bValidate.Name = \"bValidate\";\n\t\t\tthis.bValidate.Click += new System.EventHandler(this.bValidate_Click);\n\t\t\t// \n\t\t\t// DialogValidateRdl\n\t\t\t// \n\t\t\tthis.AcceptButton = this.bValidate;\n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.CancelButton = this.bClose;\n\t\t\tthis.Controls.Add(this.bValidate);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Controls.Add(this.lbSchemaErrors);\n\t\t\tthis.Controls.Add(this.bClose);\n\t\t\tthis.MaximizeBox = false;\n\t\t\tthis.MinimizeBox = false;\n\t\t\tthis.Name = \"DialogValidateRdl\";\n\t\t\tthis.ShowInTaskbar = false;\n\t\t\tthis.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;\n\t\t\tthis.Closing += new System.ComponentModel.CancelEventHandler(this.DialogValidateRdl_Closing);\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/DialogValidateRdl.cs",
    "content": "using System;\nusing System.Drawing;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing System.IO;\nusing System.Xml;\nusing System.Xml.Schema;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// Summary description for DialogAbout.\n    /// </summary>\n    public partial class DialogValidateRdl\n    {\n        internal const string SCHEMA2025 =\n            \"https://reporting.majorsilence.com/schemas/reporting/2025/12/reportdefinition\";\n\n        private const string SCHEMA2025NAME =\n            \"https://reporting.majorsilence.com/schemas/reporting/2025/12/reportdefinition/ReportDefinition.xsd\";\n\n        private int _ValidationErrorCount;\n        private int _ValidationWarningCount;\n\n        public DialogValidateRdl(RdlDesigner designer)\n        {\n            _RdlDesigner = designer;\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            return;\n        }\n\n        // csharp\n        private void bValidate_Click(object sender, System.EventArgs e)\n        {\n            MDIChild mc = _RdlDesigner.ActiveMdiChild as MDIChild;\n            if (mc == null || mc.DesignTab != DesignTabs.Edit)\n            {\n                MessageBox.Show(Strings.DialogValidateRdl_ShowC_SelectRDLTab);\n                return;\n            }\n\n            string syntax = mc.SourceRdl;\n            Cursor saveCursor = Cursor.Current;\n            Cursor.Current = Cursors.WaitCursor;\n            StringReader sr = null;\n            XmlTextReader tr = null;\n            XmlReader vr = null;\n\n            try\n            {\n                _ValidationErrorCount = 0;\n                _ValidationWarningCount = 0;\n                this.lbSchemaErrors.Items.Clear();\n                sr = new StringReader(syntax);\n                tr = new XmlTextReader(sr);\n                XmlReaderSettings xrs = new XmlReaderSettings();\n                xrs.ValidationEventHandler += new ValidationEventHandler(ValidationHandler);\n                xrs.ValidationFlags = XmlSchemaValidationFlags.AllowXmlAttributes |\n                                      XmlSchemaValidationFlags.ProcessIdentityConstraints |\n                                      XmlSchemaValidationFlags.ProcessSchemaLocation |\n                                      XmlSchemaValidationFlags.ProcessInlineSchema;\n                \n                string designerPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"ReportDefinition.xsd\");\n\n                using (var fs = File.OpenRead(designerPath))\n                using (var dsr = XmlReader.Create(fs))\n                {\n                    XmlSchema designerSchema = XmlSchema.Read(dsr, new ValidationEventHandler(ValidationHandler));\n                    if (designerSchema != null)\n                    {\n                        // Add the schema object so its TargetNamespace and includes/imports are preserved\n                        xrs.Schemas.Add(designerSchema);\n                    }\n                }\n\n                vr = XmlReader.Create(tr, xrs);\n\n                while (vr.Read()) ;\n\n                this.lbSchemaErrors.Items.Add(string.Format(\"Validation completed with {0} warnings and {1} errors.\",\n                    _ValidationWarningCount, _ValidationErrorCount));\n            }\n            catch (Exception ex)\n            {\n                this.lbSchemaErrors.Items.Add(ex.Message + \"  Processing terminated.\");\n            }\n            finally\n            {\n                Cursor.Current = saveCursor;\n                if (sr != null)\n                    sr.Close();\n                if (tr != null)\n                    tr.Close();\n                if (vr != null)\n                    vr.Close();\n            }\n        }\n\n\n        public void ValidationHandler(object sender, ValidationEventArgs args)\n        {\n            if (args.Severity == XmlSeverityType.Error)\n                this._ValidationErrorCount++;\n            else\n                this._ValidationWarningCount++;\n\n            this.lbSchemaErrors.Items.Add(string.Format(\"{0}: {1} ({2}, {3})\",\n                args.Severity, args.Message, args.Exception.LineNumber, args.Exception.LinePosition));\n        }\n\n        private void lbSchemaErrors_DoubleClick(object sender, System.EventArgs e)\n        {\n            RdlEditPreview rep = _RdlDesigner.GetEditor();\n\n            if (rep == null || this.lbSchemaErrors.SelectedIndex < 0)\n                return;\n            try\n            {\n                // line numbers are reported as (line#, character offset) e.g. (110, 32)  \n                string v = this.lbSchemaErrors.Items[lbSchemaErrors.SelectedIndex] as string;\n                int li = v.LastIndexOf(\"(\");\n                if (li < 0)\n                    return;\n                v = v.Substring(li + 1);\n                li = v.IndexOf(\",\"); // find the\n                v = v.Substring(0, li);\n\n                int nLine = Int32.Parse(v);\n                rep.Goto(this, nLine);\n                this.BringToFront();\n            }\n#if DEBUG\n            catch (Exception ex)\n            {\n                MessageBox.Show(ex.Message); // developer might care about this error??\n            }\n#else\n\t\t\tcatch \n\t\t\t{}\t\t// user doesn't really care if something went wrong\n#endif\n        }\n\n        private void bClose_Click(object sender, System.EventArgs e)\n        {\n            this.Close();\n        }\n\n        private void DialogValidateRdl_Closing(object sender, System.ComponentModel.CancelEventArgs e)\n        {\n            this._RdlDesigner.ValidateSchemaClosing();\n        }\n    }\n}"
  },
  {
    "path": "RdlDesign/DialogValidateRdl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"bValidate.Text\" xml:space=\"preserve\">\n    <value>Validate</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bClose.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Bottom, Right</value>\n  </data>\n  <data name=\"&gt;&gt;lbSchemaErrors.Name\" xml:space=\"preserve\">\n    <value>lbSchemaErrors</value>\n  </data>\n  <data name=\"bClose.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;bValidate.Name\" xml:space=\"preserve\">\n    <value>bValidate</value>\n  </data>\n  <data name=\"&gt;&gt;bClose.Name\" xml:space=\"preserve\">\n    <value>bClose</value>\n  </data>\n  <data name=\"bValidate.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Bottom, Right</value>\n  </data>\n  <data name=\"bClose.Text\" xml:space=\"preserve\">\n    <value>Close</value>\n  </data>\n  <data name=\"&gt;&gt;lbSchemaErrors.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Press Validate button to do schema validation.  Double Click on a line to scroll to the line of the error.   Note: schema validation does not reliably indicate whether or not report will run in this or other products that support RDL.</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>503, 261</value>\n  </data>\n  <data name=\"label1.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Left, Right</value>\n  </data>\n  <data name=\"bClose.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>413, 234</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 8</value>\n  </data>\n  <data name=\"&gt;&gt;bClose.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>485, 38</value>\n  </data>\n  <data name=\"bClose.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"&gt;&gt;lbSchemaErrors.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <data name=\"&gt;&gt;bClose.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;bClose.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"lbSchemaErrors.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Bottom, Left, Right</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bValidate.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>328, 234</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DialogValidateRdl</value>\n  </data>\n  <data name=\"bValidate.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"lbSchemaErrors.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;lbSchemaErrors.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"lbSchemaErrors.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>484, 173</value>\n  </data>\n  <data name=\"&gt;&gt;bValidate.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lbSchemaErrors.HorizontalScrollbar\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lbSchemaErrors.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>9, 54</value>\n  </data>\n  <data name=\"bValidate.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bValidate.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bValidate.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Validate RDL Syntax</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/DialogValidateRdl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"bClose.Text\" xml:space=\"preserve\">\n    <value>Закрыть</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>485, 43</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Нажмите кнопку Проверить, чтобы сделать проверку схемы. Дважды щёлкните на линии, чтобы перейти к строке ошибки. Примечание: проверка схемы не гарантирует, что отчёт будет работать в этом или других продуктах, которые поддерживают RDL.</value>\n  </data>\n  <data name=\"bValidate.Text\" xml:space=\"preserve\">\n    <value>Проверить</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Проверка RDL-кода</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/DrillParametersDialog.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    internal partial class DrillParametersDialog : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\nprivate System.Windows.Forms.Label label1;\nprivate System.Windows.Forms.Button bFile;\nprivate System.Windows.Forms.TextBox tbReportFile;\nprivate System.Windows.Forms.DataGridView dgParms;\nprivate System.Windows.Forms.Button bRefreshParms;\nprivate System.Windows.Forms.Button bOK;\nprivate System.Windows.Forms.Button bCancel;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DrillParametersDialog));\n\t\t\tthis.dgParms = new System.Windows.Forms.DataGridView();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.tbReportFile = new System.Windows.Forms.TextBox();\n\t\t\tthis.bFile = new System.Windows.Forms.Button();\n\t\t\tthis.bRefreshParms = new System.Windows.Forms.Button();\n\t\t\tthis.bOK = new System.Windows.Forms.Button();\n\t\t\tthis.bCancel = new System.Windows.Forms.Button();\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.dgParms)).BeginInit();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// dgParms\n\t\t\t// \n\t\t\tresources.ApplyResources(this.dgParms, \"dgParms\");\n\t\t\tthis.dgParms.DataMember = \"\";\n\t\t\tthis.dgParms.Name = \"dgParms\";\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// tbReportFile\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbReportFile, \"tbReportFile\");\n\t\t\tthis.tbReportFile.Name = \"tbReportFile\";\n\t\t\t// \n\t\t\t// bFile\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bFile, \"bFile\");\n\t\t\tthis.bFile.Name = \"bFile\";\n\t\t\tthis.bFile.Click += new System.EventHandler(this.bFile_Click);\n\t\t\t// \n\t\t\t// bRefreshParms\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bRefreshParms, \"bRefreshParms\");\n\t\t\tthis.bRefreshParms.Name = \"bRefreshParms\";\n\t\t\tthis.bRefreshParms.Click += new System.EventHandler(this.bRefreshParms_Click);\n\t\t\t// \n\t\t\t// bOK\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bOK, \"bOK\");\n\t\t\tthis.bOK.DialogResult = System.Windows.Forms.DialogResult.OK;\n\t\t\tthis.bOK.Name = \"bOK\";\n\t\t\tthis.bOK.Click += new System.EventHandler(this.bOK_Click);\n\t\t\t// \n\t\t\t// bCancel\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCancel, \"bCancel\");\n\t\t\tthis.bCancel.CausesValidation = false;\n\t\t\tthis.bCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n\t\t\tthis.bCancel.Name = \"bCancel\";\n\t\t\t// \n\t\t\t// DrillParametersDialog\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.CancelButton = this.bCancel;\n\t\t\tthis.CausesValidation = false;\n\t\t\tthis.ControlBox = false;\n\t\t\tthis.Controls.Add(this.bOK);\n\t\t\tthis.Controls.Add(this.bCancel);\n\t\t\tthis.Controls.Add(this.bRefreshParms);\n\t\t\tthis.Controls.Add(this.bFile);\n\t\t\tthis.Controls.Add(this.tbReportFile);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Controls.Add(this.dgParms);\n\t\t\tthis.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n\t\t\tthis.MaximizeBox = false;\n\t\t\tthis.MinimizeBox = false;\n\t\t\tthis.Name = \"DrillParametersDialog\";\n\t\t\tthis.ShowInTaskbar = false;\n\t\t\tthis.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.dgParms)).EndInit();\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/DrillParametersDialog.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.Text;\nusing System.IO;\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlDesign.Resources;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// Drillthrough reports; pick report and specify parameters\n    /// </summary>\n    internal partial class DrillParametersDialog \n    {\n        private string _DrillReport;\n        private DataTable _DataTable;\n\n        internal DrillParametersDialog(string report, List<DrillParameter> parameters)\n        {\n            _DrillReport = report;\n\n            // This call is required by the Windows.Forms Form Designer.\n            InitializeComponent();\n\n            // Initialize form using the style node values\n            InitValues(parameters);\n        }\n\n        private void InitValues(List<DrillParameter> parameters)\n        {\n            this.tbReportFile.Text = _DrillReport;\n\n            // Initialize the DataTable\n            _DataTable = new DataTable();\n\n            _DataTable.Columns.Add(new DataColumn(\"ParameterName\", typeof(string)));\n            _DataTable.Columns.Add(new DataColumn(\"Value\", typeof(string)));\n            _DataTable.Columns.Add(new DataColumn(\"Omit\", typeof(string)));\n\n            string[] rowValues = new string[3];\n\n            if (parameters != null)\n                foreach (DrillParameter dp in parameters)\n                {\n                    rowValues[0] = dp.ParameterName;\n                    rowValues[1] = dp.ParameterValue;\n                    rowValues[2] = dp.ParameterOmit;\n\n                    _DataTable.Rows.Add(rowValues);\n                }\n            // Don't allow new rows; do this by creating a DataView over the DataTable\n            //\t\t\tDataView dv = new DataView(_DataTable);\t// this has bad side effects\n            //\t\t\tdv.AllowNew = false;\n            this.dgParms.DataSource = _DataTable;\n\n            dgParms.Columns[0].Width = 140;\n            dgParms.Columns[0].ReadOnly = true;\n            dgParms.Columns[1].Width = 140;\n            dgParms.Columns[2].Width = 70;\n        }\n\n        public string DrillthroughReport\n        {\n            get { return this._DrillReport; }\n        }\n\n        public List<DrillParameter> DrillParameters\n        {\n            get\n            {\n                List<DrillParameter> parms = new List<DrillParameter>();\n\n                // Loop thru and add all the filters\n                foreach (DataRow dr in _DataTable.Rows)\n                {\n                    if (dr[0] == DBNull.Value || dr[1] == DBNull.Value)\n                        continue;\n                    string name = (string)dr[0];\n                    string val = (string)dr[1];\n                    string omit = dr[2] == DBNull.Value ? \"false\" : (string)dr[2];\n                    if (name.Length <= 0 || val.Length <= 0)\n                        continue;\n                    DrillParameter dp = new DrillParameter(name, val, omit);\n                    parms.Add(dp);\n                }\n                if (parms.Count == 0)\n                    return null;\n                return parms;\n            }\n        }\n\n        private void bFile_Click(object sender, System.EventArgs e)\n        {\n            OpenFileDialog ofd = new OpenFileDialog();\n            ofd.Filter = Strings.DrillParametersDialog_bFile_Click_ReportFilesFilter;\n            ofd.FilterIndex = 1;\n            ofd.FileName = \"*.rdl\";\n\n            ofd.Title = Strings.DrillParametersDialog_bFile_Click_ReportFilesTitle;\n            ofd.DefaultExt = \"rdl\";\n            ofd.AddExtension = true;\n            try\n            {\n                if (ofd.ShowDialog() == DialogResult.OK)\n                {\n                    string file = Path.GetFileNameWithoutExtension(ofd.FileName);\n\n                    tbReportFile.Text = file;\n                }\n            }\n            finally\n            {\n                ofd.Dispose();\n            }\n        }\n\n        private async void bRefreshParms_Click(object sender, System.EventArgs e)\n        {\n            // Obtain the source\n            Cursor savec = Cursor.Current;\n            Cursor.Current = Cursors.WaitCursor;\t// this can take some time\n            try\n            {\n                string filename = \"\";\n                if (tbReportFile.Text.Length > 0)\n                    filename = tbReportFile.Text + \".rdl\";\n\n                filename = GetFileNameWithPath(filename);\n\n                string source = this.GetSource(filename);\n                if (source == null)\n                    return;\t\t\t\t\t\t// error: message already displayed\n\n                // Compile the report\n                Report report = await this.GetReport(source, filename);\n                if (report == null)\n                    return;\t\t\t\t\t// error: message already displayed\n\n                ICollection rps = report.UserReportParameters;\n                string[] rowValues = new string[3];\n                _DataTable.Rows.Clear();\n                foreach (UserReportParameter rp in rps)\n                {\n                    rowValues[0] = rp.Name;\n                    rowValues[1] = \"\";\n                    rowValues[2] = \"false\";\n\n                    _DataTable.Rows.Add(rowValues);\n                }\n                this.dgParms.Refresh();\n                this.dgParms.Focus();\n            }\n            finally\n            {\n                Cursor.Current = savec;\n            }\n        }\n\n        private string GetFileNameWithPath(string file)\n        {\t// todo: should prefix this with the path of the open file\n\n            return file;\n        }\n\n        private string GetSource(string file)\n        {\n            StreamReader fs = null;\n            string prog = null;\n\n            try\n            {\n                fs = new StreamReader(file);\n                prog = fs.ReadToEnd();\n            }\n            catch (Exception e)\n            {\n                prog = null;\n                MessageBox.Show(e.Message, Strings.DrillParametersDialog_Show_ErrorReading);\n            }\n            finally\n            {\n                if (fs != null)\n                    fs.Close();\n            }\n            return prog;\n        }\n\n        private async Task<Report> GetReport(string prog, string file)\n        {\n            // Now parse the file\n            RDLParser rdlp;\n            Report r;\n            try\n            {\n                rdlp = new RDLParser(prog);\n                string folder = Path.GetDirectoryName(file);\n                if (folder == \"\")\n                {\n                    folder = Environment.CurrentDirectory;\n                }\n                rdlp.Folder = folder;\n\n                r = await rdlp.Parse();\n                if (r.ErrorMaxSeverity > 4)\n                {\n                    MessageBox.Show(Strings.DrillParametersDialog_ShowC_ReportHasErrors);\n                    r = null;\t\t\t// don't return when severe errors\n                }\n            }\n            catch (Exception e)\n            {\n                r = null;\n                MessageBox.Show(e.Message, Strings.DrillParametersDialog_Show_ReportLoadFailed);\n            }\n            return r;\n        }\n\n        private void DrillParametersDialog_Validating(object sender, System.ComponentModel.CancelEventArgs e)\n        {\n            foreach (DataRow dr in _DataTable.Rows)\n            {\n                if (dr[1] == DBNull.Value)\n                {\n                    e.Cancel = true;\n                    break;\n                }\n                string val = (string)dr[1];\n                if (val.Length <= 0)\n                {\n                    e.Cancel = true;\n                    break;\n                }\n            }\n            if (e.Cancel)\n            {\n                MessageBox.Show(Strings.DrillParametersDialog_Show_ValueMustSpecified, Text);\n            }\n        }\n\n        private void bOK_Click(object sender, System.EventArgs e)\n        {\n            CancelEventArgs ce = new CancelEventArgs();\n            DrillParametersDialog_Validating(this, ce);\n            if (ce.Cancel)\n            {\n                DialogResult = DialogResult.None;\n                return;\n            }\n            DialogResult = DialogResult.OK;\n        }\n\n    }\n    internal class DrillParameter\n    {\n        internal string ParameterName;\n        internal string ParameterValue;\n        internal string ParameterOmit;\n\n        internal DrillParameter(string name, string pvalue, string omit)\n        {\n            ParameterName = name;\n            ParameterValue = pvalue;\n            ParameterOmit = omit;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/DrillParametersDialog.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Name\" xml:space=\"preserve\">\n    <value>bCancel</value>\n  </data>\n  <data name=\"&gt;&gt;dgParms.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bFile.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bFile.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>424, 8</value>\n  </data>\n  <data name=\"bFile.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"&gt;&gt;dgTableStyle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGridTableStyle, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bRefreshParms.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"bFile.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;dgTableStyle.Name\" xml:space=\"preserve\">\n    <value>dgTableStyle</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Report name</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DrillParametersDialog</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"bCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>376, 216</value>\n  </data>\n  <data name=\"bCancel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 8</value>\n  </data>\n  <data name=\"&gt;&gt;dgParms.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportFile.Name\" xml:space=\"preserve\">\n    <value>tbReportFile</value>\n  </data>\n  <data name=\"bFile.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 23</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>464, 248</value>\n  </data>\n  <data name=\"&gt;&gt;bRefreshParms.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bRefreshParms.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 23</value>\n  </data>\n  <data name=\"bCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;bRefreshParms.Name\" xml:space=\"preserve\">\n    <value>bRefreshParms</value>\n  </data>\n  <data name=\"&gt;&gt;bFile.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"&gt;&gt;bFile.Name\" xml:space=\"preserve\">\n    <value>bFile</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>288, 216</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"dgParms.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 40</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportFile.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportFile.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bRefreshParms.Text\" xml:space=\"preserve\">\n    <value>Refresh</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbReportFile.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>312, 20</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 23</value>\n  </data>\n  <data name=\"tbReportFile.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"bRefreshParms.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>400, 40</value>\n  </data>\n  <data name=\"&gt;&gt;dgParms.Name\" xml:space=\"preserve\">\n    <value>dgParms</value>\n  </data>\n  <data name=\"&gt;&gt;bFile.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bRefreshParms.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dgParms.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGrid, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbReportFile.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>104, 8</value>\n  </data>\n  <data name=\"dgParms.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>384, 168</value>\n  </data>\n  <data name=\"$this.Icon\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        AAABAAIAICAQAAAAAADoAgAAJgAAABAQEAAAAAAAKAEAAA4DAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC\n        AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/\n        AAAA//8A/wAAAP8A/wD//wAA////AP//////////////////////////////////////////////////\n        ////////////////AAAAAAAAAAAAAAAAD////wAAAAAAAAAAAAAAAA////8A//////////////AP////\n        AP/////////////wD////wD/mZmZn/mZzMER8A////8A/5mZmZ/5mczBEfAP////AP//////+ZnMwRHw\n        D////wD///////mZzMER8A////8A/5mZmZ/5mczBEfAP////AP+ZmZmf+ZnMwRHwD////wD///////mZ\n        zM//8A////8A/5mZmZ/5mczP//AP////AP+ZmZmf+ZnMz//wD////wD///////mZzM//8A////8A////\n        ///5mf////AP////AP+ZmZmf+Zn////wD////wD/mZmZn/mZ////8A//u7u7u7u7u7////////AP////\n        /wAPu7u////////wD///AAD7u/u/v///////8A//AP+7vwuwuw//AAAAD/AP//+7AACwCwsP/wAAAA/w\n        D/+7///7D7C/////////8A////APsPvwv/////////AP//AP+wC/D7AAAAAAAAAAD/8P+7D78PsAAAAA\n        AAAAAA///78P+w/7//////////////vw/78Pv/////////////+/D/vw/7//////////////AAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA\n        AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AP//////////8AAAAAAA\n        AA/w////////D/D5mZ/5/C8P8P////n8Lw/w+Zmf+fwvD/D////5/C8P8PmZn/n8/w/w///7uf//D7u7\n        u7u5//8P8Au/u////w8LsLu7/w//D78LC7vwAA8P8L8LC////w8L8LCwAAAAD78LD7//////AAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\n</value>\n  </data>\n  <data name=\"bRefreshParms.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Specify Drillthrough Report and Parameters</value>\n  </data>\n  <data name=\"dgParms.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportFile.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/DrillParametersDialog.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"dgParms.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>374, 168</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>101, 23</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Название отчёта</value>\n  </data>\n  <data name=\"bRefreshParms.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>388, 40</value>\n  </data>\n  <data name=\"bRefreshParms.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>68, 23</value>\n  </data>\n  <data name=\"bRefreshParms.Text\" xml:space=\"preserve\">\n    <value>Обновить</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"$this.Icon\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        AAABAAIAICAQAAAAAADoAgAAJgAAABAQEAAAAAAAKAEAAA4DAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC\n        AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/\n        AAAA//8A/wAAAP8A/wD//wAA////AP//////////////////////////////////////////////////\n        ////////////////AAAAAAAAAAAAAAAAD////wAAAAAAAAAAAAAAAA////8A//////////////AP////\n        AP/////////////wD////wD/mZmZn/mZzMER8A////8A/5mZmZ/5mczBEfAP////AP//////+ZnMwRHw\n        D////wD///////mZzMER8A////8A/5mZmZ/5mczBEfAP////AP+ZmZmf+ZnMwRHwD////wD///////mZ\n        zM//8A////8A/5mZmZ/5mczP//AP////AP+ZmZmf+ZnMz//wD////wD///////mZzM//8A////8A////\n        ///5mf////AP////AP+ZmZmf+Zn////wD////wD/mZmZn/mZ////8A//u7u7u7u7u7////////AP////\n        /wAPu7u////////wD///AAD7u/u/v///////8A//AP+7vwuwuw//AAAAD/AP//+7AACwCwsP/wAAAA/w\n        D/+7///7D7C/////////8A////APsPvwv/////////AP//AP+wC/D7AAAAAAAAAAD/8P+7D78PsAAAAA\n        AAAAAA///78P+w/7//////////////vw/78Pv/////////////+/D/vw/7//////////////AAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA\n        AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AP//////////8AAAAAAA\n        AA/w////////D/D5mZ/5/C8P8P////n8Lw/w+Zmf+fwvD/D////5/C8P8PmZn/n8/w/w///7uf//D7u7\n        u7u5//8P8Au/u////w8LsLu7/w//D78LC7vwAA8P8L8LC////w8L8LCwAAAAD78LD7//////AAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\n</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Указите детали отчёта и параметры</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/FiltersCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.Text;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Filters specification: used for DataRegions (List, Chart, Table, Matrix), DataSets, group instances\n\t/// </summary>\n\tinternal class FiltersCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n\t\tprivate DesignXmlDraw _Draw;\n\t\tprivate XmlNode _FilterParent;\n        private DataGridViewTextBoxColumn dgtbFE;\n        private DataGridViewComboBoxColumn dgtbOP;\n        private DataGridViewTextBoxColumn dgtbFV;\n\n\t\tprivate System.Windows.Forms.Button bDelete;\n\t\tprivate System.Windows.Forms.DataGridView dgFilters;\n\t\tprivate System.Windows.Forms.Button bUp;\n\t\tprivate System.Windows.Forms.Button bDown;\n\t\tprivate System.Windows.Forms.Button bValueExpr;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n\t\tinternal FiltersCtl(DesignXmlDraw dxDraw, XmlNode filterParent)\n\t\t{\n\t\t\t_Draw = dxDraw;\n\t\t\t_FilterParent = filterParent;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues();\t\t\t\n\t\t}\n\n\t\tprivate void InitValues()\n\t\t{\n\t\t\t// Initialize the DataGrid columns\n\n            dgtbFE = new DataGridViewTextBoxColumn();\n            dgtbOP = new DataGridViewComboBoxColumn(); \n            dgtbOP.Items.AddRange(new string[] \n                { \"Equal\", \"Like\", \"NotEqual\", \"GreaterThan\", \"GreaterThanOrEqual\", \"LessThan\",\n                    \"LessThanOrEqual\", \"TopN\", \"BottomN\", \"TopPercent\", \"BottomPercent\", \"In\", \"Between\" });\n            dgtbFV = new DataGridViewTextBoxColumn();\n\n            dgFilters.Columns.Add(dgtbFE);\n            dgFilters.Columns.Add(dgtbOP);\n            dgFilters.Columns.Add(dgtbFV);\n            // \n\t\t\t// dgtbFE\n\t\t\t// \n\t\t\tdgtbFE.HeaderText = \"Filter Expression\";\n\t\t\tdgtbFE.Width = 130;\n\t\t\t// Get the parent's dataset name\n\t\t\t//string dataSetName = _Draw.GetDataSetNameValue(_FilterParent);\n\n            // unfortunately no way to make combo box editable\n            //string[] fields = _Draw.GetFields(dataSetName, true);\n            //if (fields != null)\n            //    dgtbFE.Items.AddRange(fields);\n\n            dgtbOP.HeaderText = \"Operator\";\n\t\t\tdgtbOP.Width = 100;\n            dgtbOP.DropDownWidth = 140;\n\t\t\t// \n\t\t\t// dgtbFV\n\t\t\t// \n\t\t\tthis.dgtbFV.HeaderText = \"Value(s)\";\n\t\t\tthis.dgtbFV.Width = 130;\n            //string[] parms = _Draw.GetReportParameters(true);\n            //if (parms != null)\n            //    dgtbFV.Items.AddRange(parms);\n\n\t\t\tXmlNode filters = _Draw.GetNamedChildNode(_FilterParent, \"Filters\");\n\n\t\t\tif (filters != null)\n\t\t\tforeach (XmlNode fNode in filters.ChildNodes)\n\t\t\t{\n\t\t\t\tif (fNode.NodeType != XmlNodeType.Element || \n\t\t\t\t\t\tfNode.Name != \"Filter\")\n\t\t\t\t\tcontinue;\n\t\t\t\t// Get the values\n\t\t\t\tXmlNode vNodes = _Draw.GetNamedChildNode(fNode, \"FilterValues\");\n\t\t\t\tStringBuilder sb = new StringBuilder();\n\t\t\t\tif (vNodes != null)\n\t\t\t\t{\n\t\t\t\t\tforeach (XmlNode v in vNodes.ChildNodes)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (v.InnerText.Length <= 0)\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tif (sb.Length != 0)\n\t\t\t\t\t\t\tsb.Append(\", \");\n\t\t\t\t\t\tsb.Append(v.InnerText);\n\t\t\t\t\t}\n\t\t\t\t}\n                // Add the row\n                dgFilters.Rows.Add(_Draw.GetElementValue(fNode, \"FilterExpression\", \"\"),\n                    _Draw.GetElementValue(fNode, \"Operator\", \"Equal\"),\n                    sb.ToString());\n\t\t\t}\n\n            if (dgFilters.Rows.Count == 0)\n                dgFilters.Rows.Add(\"\",\"Equal\",\"\");\n        }\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FiltersCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.dgFilters = new System.Windows.Forms.DataGridView();\n\t\t\tthis.bDelete = new System.Windows.Forms.Button();\n\t\t\tthis.bUp = new System.Windows.Forms.Button();\n\t\t\tthis.bDown = new System.Windows.Forms.Button();\n\t\t\tthis.bValueExpr = new System.Windows.Forms.Button();\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.dgFilters)).BeginInit();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// dgFilters\n\t\t\t// \n\t\t\tresources.ApplyResources(this.dgFilters, \"dgFilters\");\n\t\t\tthis.dgFilters.Name = \"dgFilters\";\n\t\t\t// \n\t\t\t// bDelete\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bDelete, \"bDelete\");\n\t\t\tthis.bDelete.Name = \"bDelete\";\n\t\t\tthis.bDelete.Click += new System.EventHandler(this.bDelete_Click);\n\t\t\t// \n\t\t\t// bUp\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bUp, \"bUp\");\n\t\t\tthis.bUp.Name = \"bUp\";\n\t\t\tthis.bUp.Click += new System.EventHandler(this.bUp_Click);\n\t\t\t// \n\t\t\t// bDown\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bDown, \"bDown\");\n\t\t\tthis.bDown.Name = \"bDown\";\n\t\t\tthis.bDown.Click += new System.EventHandler(this.bDown_Click);\n\t\t\t// \n\t\t\t// bValueExpr\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bValueExpr, \"bValueExpr\");\n\t\t\tthis.bValueExpr.Name = \"bValueExpr\";\n\t\t\tthis.bValueExpr.Tag = \"value\";\n\t\t\tthis.bValueExpr.Click += new System.EventHandler(this.bValueExpr_Click);\n\t\t\t// \n\t\t\t// FiltersCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.bValueExpr);\n\t\t\tthis.Controls.Add(this.bDown);\n\t\t\tthis.Controls.Add(this.bUp);\n\t\t\tthis.Controls.Add(this.bDelete);\n\t\t\tthis.Controls.Add(this.dgFilters);\n\t\t\tthis.Name = \"FiltersCtl\";\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.dgFilters)).EndInit();\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n \t\tpublic bool IsValid()\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// Remove the old filters\n\t\t\tXmlNode filters = null;\n\t\t\t_Draw.RemoveElement(_FilterParent, \"Filters\");\n\n\t\t\t// Loop thru and add all the filters\n\t\t\tforeach (DataGridViewRow dr in this.dgFilters.Rows)\n\t\t\t{\n\t\t\t\tstring fe = dr.Cells[0].Value as string;\n                string op = dr.Cells[1].Value as string;\n                string fv = dr.Cells[2].Value as string;\n\t\t\t\tif (fe == null || fe.Length <= 0 || \n                    op == null || op.Length <= 0 || \n                    fv == null || fv.Length <= 0)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (filters == null)\n\t\t\t\t\tfilters = _Draw.CreateElement(_FilterParent, \"Filters\", null);\n\n\t\t\t\tXmlNode fNode = _Draw.CreateElement(filters, \"Filter\", null);\n\t\t\t\t_Draw.CreateElement(fNode, \"FilterExpression\", fe);\n\t\t\t\t_Draw.CreateElement(fNode, \"Operator\", op);\n\t\t\t\tXmlNode fvNode = _Draw.CreateElement(fNode, \"FilterValues\", null);\n\t\t\t\tif (op == \"In\")\n\t\t\t\t{\n\t\t\t\t\tstring[] vs = fv.Split(',');\n\t\t\t\t\tforeach (string v in vs)\n\t\t\t\t\t\t_Draw.CreateElement(fvNode, \"FilterValue\", v.Trim());\n\t\t\t\t}\n\t\t\t\telse if (op == \"Between\")\n\t\t\t\t{\n\t\t\t\t\tstring[] vs = fv.Split(new char[] {','}, 2);\n\t\t\t\t\tforeach (string v in vs)\n\t\t\t\t\t\t_Draw.CreateElement(fvNode, \"FilterValue\", v.Trim());\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t_Draw.CreateElement(fvNode, \"FilterValue\", fv);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprivate void bDelete_Click(object sender, System.EventArgs e)\n\t\t{\n            if (dgFilters.CurrentRow == null)\n                return;\n\n            if (!dgFilters.Rows[dgFilters.CurrentRow.Index].IsNewRow)   // can't delete the new row\n                dgFilters.Rows.RemoveAt(this.dgFilters.CurrentRow.Index);\n            else\n            {   // just empty out the values\n                DataGridViewRow dgrv = dgFilters.Rows[this.dgFilters.CurrentRow.Index];\n                dgrv.Cells[0].Value = null;\n                dgrv.Cells[1].Value = \"Equal\";\n                dgrv.Cells[2].Value = null;\n            }\n\t\t}\n\n\t\tprivate void bUp_Click(object sender, System.EventArgs e)\n\t\t{\n            int cr = dgFilters.CurrentRow == null ? 0 : dgFilters.CurrentRow.Index;\n            if (cr <= 0)\t\t// already at the top\n\t\t\t\treturn;\n\n            SwapRow(dgFilters.Rows[cr - 1], dgFilters.Rows[cr]);\n\n            dgFilters.CurrentCell = \n                dgFilters.Rows[cr-1].Cells[dgFilters.CurrentCell.ColumnIndex];\n\t\t}\n\n\t\tprivate void bDown_Click(object sender, System.EventArgs e)\n\t\t{\n            int cr = dgFilters.CurrentRow == null ? 0 : dgFilters.CurrentRow.Index;\n            if (cr < 0)\t\t\t// invalid index\n\t\t\t\treturn;\n            if (cr + 1 >= dgFilters.Rows.Count)\n                return;\t\t\t// already at end\n\t\t\t\n            SwapRow(dgFilters.Rows[cr+1], dgFilters.Rows[cr]);\n            dgFilters.CurrentCell =\n                dgFilters.Rows[cr + 1].Cells[dgFilters.CurrentCell.ColumnIndex];\n\t\t}\n\n        private void SwapRow(DataGridViewRow tdr, DataGridViewRow fdr)\n\t\t{\n\t\t\t// column 1\n\t\t\tobject save = tdr.Cells[0].Value;\n            tdr.Cells[0].Value = fdr.Cells[0].Value;\n            fdr.Cells[0].Value = save;\n\t\t\t// column 2\n            save = tdr.Cells[1].Value;\n            tdr.Cells[1].Value = fdr.Cells[1].Value;\n            fdr.Cells[1].Value = save;\n\t\t\t// column 3\n            save = tdr.Cells[2].Value;\n            tdr.Cells[2].Value = fdr.Cells[2].Value;\n            fdr.Cells[2].Value = save;\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void bValueExpr_Click(object sender, System.EventArgs e)\n\t\t{\n            if (dgFilters.CurrentCell == null)\n                dgFilters.Rows.Add(\"\", \"Equal\", \"\");\n            DataGridViewCell dgc = dgFilters.CurrentCell;\n\t\t\tint cc = dgc.ColumnIndex;\n\t\t\tstring cv = dgc.Value as string;\n\n\t\t\tif (cc == 1)\n\t\t\t{\t// This is the FilterOperator\n\t\t\t\tDialogFilterOperator fo = new DialogFilterOperator(cv);\n                try\n                {\n                    DialogResult dlgr = fo.ShowDialog();\n                    if (dlgr == DialogResult.OK)\n                        dgc.Value = fo.Operator;\n                }\n                finally\n                {\n                    fo.Dispose();\n                }\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tDialogExprEditor ee = new DialogExprEditor(_Draw, cv, _FilterParent, false);\n                try\n                {\n                    DialogResult dlgr = ee.ShowDialog();\n                    if (dlgr == DialogResult.OK)\n                        dgc.Value = ee.Expression;\n                }\n                finally\n                {\n                    ee.Dispose();\n                }\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/FiltersCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bDown.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>437, 99</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.Name\" xml:space=\"preserve\">\n    <value>bValueExpr</value>\n  </data>\n  <data name=\"&gt;&gt;dgFilters.Name\" xml:space=\"preserve\">\n    <value>dgFilters</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bDown.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"dgFilters.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Bottom, Left, Right</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bValueExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"bDelete.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>437, 37</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>FiltersCtl</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"bValueExpr.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.Name\" xml:space=\"preserve\">\n    <value>bDown</value>\n  </data>\n  <data name=\"bValueExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>437, 8</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 23</value>\n  </data>\n  <data name=\"dgFilters.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 8</value>\n  </data>\n  <data name=\"bUp.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"bValueExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"bDelete.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"&gt;&gt;dgFilters.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"bDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;dgFilters.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Name\" xml:space=\"preserve\">\n    <value>bDelete</value>\n  </data>\n  <data name=\"bUp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>437, 68</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 23</value>\n  </data>\n  <data name=\"bDelete.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"bUp.Text\" xml:space=\"preserve\">\n    <value>Up</value>\n  </data>\n  <data name=\"bDown.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"dgFilters.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>423, 264</value>\n  </data>\n  <data name=\"bValueExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bValueExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 23</value>\n  </data>\n  <data name=\"bUp.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"bDown.Text\" xml:space=\"preserve\">\n    <value>Down</value>\n  </data>\n  <data name=\"bDelete.Text\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"&gt;&gt;dgFilters.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"dgFilters.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.Name\" xml:space=\"preserve\">\n    <value>bUp</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>488, 304</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/FiltersCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"dgFilters.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>413, 264</value>\n  </data>\n  <data name=\"bDelete.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>427, 37</value>\n  </data>\n  <data name=\"bDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>58, 23</value>\n  </data>\n  <data name=\"bDelete.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"bUp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>427, 68</value>\n  </data>\n  <data name=\"bUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>58, 23</value>\n  </data>\n  <data name=\"bUp.Text\" xml:space=\"preserve\">\n    <value>Вверх</value>\n  </data>\n  <data name=\"bDown.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>427, 99</value>\n  </data>\n  <data name=\"bDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>58, 23</value>\n  </data>\n  <data name=\"bDown.Text\" xml:space=\"preserve\">\n    <value>Вниз</value>\n  </data>\n  <data name=\"bValueExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>427, 8</value>\n  </data>\n  <data name=\"bValueExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>58, 23</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/FindTab.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    internal partial class FindTab : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\n\t\tprivate System.Windows.Forms.Label label1;\nprivate System.Windows.Forms.TextBox txtFind;\nprivate System.Windows.Forms.RadioButton radioUp;\nprivate System.Windows.Forms.RadioButton radioDown;\nprivate System.Windows.Forms.GroupBox groupBox1;\nprivate System.Windows.Forms.CheckBox chkCase;\npublic System.Windows.Forms.TabPage tabGoTo;\nprivate System.Windows.Forms.Label label4;\nprivate System.Windows.Forms.TextBox txtLine;\nprivate System.Windows.Forms.Button btnNext;\nprivate RdlEditPreview rdlEdit;\nprivate System.Windows.Forms.Button btnGoto;\nprivate System.Windows.Forms.Button btnCancel;\npublic System.Windows.Forms.TabPage tabReplace;\nprivate System.Windows.Forms.Button btnFindNext;\nprivate System.Windows.Forms.CheckBox chkMatchCase;\nprivate System.Windows.Forms.Button btnReplaceAll;\nprivate System.Windows.Forms.Button btnReplace;\nprivate System.Windows.Forms.TextBox txtFindR;\nprivate System.Windows.Forms.Label label3;\nprivate System.Windows.Forms.Label label2;\nprivate System.Windows.Forms.TextBox txtReplace;\nprivate System.Windows.Forms.Button bCloseReplace;\nprivate System.Windows.Forms.Button bCloseGoto;\npublic System.Windows.Forms.TabControl tcFRG;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FindTab));\n\t\t\tthis.tcFRG = new System.Windows.Forms.TabControl();\n\t\t\tthis.tabFind = new System.Windows.Forms.TabPage();\n\t\t\tthis.btnCancel = new System.Windows.Forms.Button();\n\t\t\tthis.btnNext = new System.Windows.Forms.Button();\n\t\t\tthis.chkCase = new System.Windows.Forms.CheckBox();\n\t\t\tthis.groupBox1 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.radioUp = new System.Windows.Forms.RadioButton();\n\t\t\tthis.radioDown = new System.Windows.Forms.RadioButton();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.txtFind = new System.Windows.Forms.TextBox();\n\t\t\tthis.tabReplace = new System.Windows.Forms.TabPage();\n\t\t\tthis.bCloseReplace = new System.Windows.Forms.Button();\n\t\t\tthis.btnFindNext = new System.Windows.Forms.Button();\n\t\t\tthis.chkMatchCase = new System.Windows.Forms.CheckBox();\n\t\t\tthis.btnReplaceAll = new System.Windows.Forms.Button();\n\t\t\tthis.btnReplace = new System.Windows.Forms.Button();\n\t\t\tthis.txtFindR = new System.Windows.Forms.TextBox();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.txtReplace = new System.Windows.Forms.TextBox();\n\t\t\tthis.tabGoTo = new System.Windows.Forms.TabPage();\n\t\t\tthis.bCloseGoto = new System.Windows.Forms.Button();\n\t\t\tthis.txtLine = new System.Windows.Forms.TextBox();\n\t\t\tthis.label4 = new System.Windows.Forms.Label();\n\t\t\tthis.btnGoto = new System.Windows.Forms.Button();\n\t\t\tthis.tcFRG.SuspendLayout();\n\t\t\tthis.tabFind.SuspendLayout();\n\t\t\tthis.groupBox1.SuspendLayout();\n\t\t\tthis.tabReplace.SuspendLayout();\n\t\t\tthis.tabGoTo.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// tcFRG\n\t\t\t// \n\t\t\tthis.tcFRG.Controls.Add(this.tabFind);\n\t\t\tthis.tcFRG.Controls.Add(this.tabReplace);\n\t\t\tthis.tcFRG.Controls.Add(this.tabGoTo);\n\t\t\tresources.ApplyResources(this.tcFRG, \"tcFRG\");\n\t\t\tthis.tcFRG.Name = \"tcFRG\";\n\t\t\tthis.tcFRG.SelectedIndex = 0;\n\t\t\tthis.tcFRG.SelectedIndexChanged += new System.EventHandler(this.tcFRG_SelectedIndexChanged);\n\t\t\tthis.tcFRG.Enter += new System.EventHandler(this.tcFRG_Enter);\n\t\t\t// \n\t\t\t// tabFind\n\t\t\t// \n\t\t\tthis.tabFind.Controls.Add(this.btnCancel);\n\t\t\tthis.tabFind.Controls.Add(this.btnNext);\n\t\t\tthis.tabFind.Controls.Add(this.chkCase);\n\t\t\tthis.tabFind.Controls.Add(this.groupBox1);\n\t\t\tthis.tabFind.Controls.Add(this.label1);\n\t\t\tthis.tabFind.Controls.Add(this.txtFind);\n\t\t\tresources.ApplyResources(this.tabFind, \"tabFind\");\n\t\t\tthis.tabFind.Name = \"tabFind\";\n\t\t\tthis.tabFind.Tag = \"find\";\n\t\t\t// \n\t\t\t// btnCancel\n\t\t\t// \n\t\t\tthis.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n\t\t\tresources.ApplyResources(this.btnCancel, \"btnCancel\");\n\t\t\tthis.btnCancel.Name = \"btnCancel\";\n\t\t\tthis.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);\n\t\t\t// \n\t\t\t// btnNext\n\t\t\t// \n\t\t\tresources.ApplyResources(this.btnNext, \"btnNext\");\n\t\t\tthis.btnNext.Name = \"btnNext\";\n\t\t\tthis.btnNext.Click += new System.EventHandler(this.btnNext_Click);\n\t\t\t// \n\t\t\t// chkCase\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkCase, \"chkCase\");\n\t\t\tthis.chkCase.Name = \"chkCase\";\n\t\t\t// \n\t\t\t// groupBox1\n\t\t\t// \n\t\t\tthis.groupBox1.Controls.Add(this.radioUp);\n\t\t\tthis.groupBox1.Controls.Add(this.radioDown);\n\t\t\tresources.ApplyResources(this.groupBox1, \"groupBox1\");\n\t\t\tthis.groupBox1.Name = \"groupBox1\";\n\t\t\tthis.groupBox1.TabStop = false;\n\t\t\t// \n\t\t\t// radioUp\n\t\t\t// \n\t\t\tresources.ApplyResources(this.radioUp, \"radioUp\");\n\t\t\tthis.radioUp.Name = \"radioUp\";\n\t\t\t// \n\t\t\t// radioDown\n\t\t\t// \n\t\t\tthis.radioDown.Checked = true;\n\t\t\tresources.ApplyResources(this.radioDown, \"radioDown\");\n\t\t\tthis.radioDown.Name = \"radioDown\";\n\t\t\tthis.radioDown.TabStop = true;\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// txtFind\n\t\t\t// \n\t\t\tresources.ApplyResources(this.txtFind, \"txtFind\");\n\t\t\tthis.txtFind.Name = \"txtFind\";\n\t\t\tthis.txtFind.TextChanged += new System.EventHandler(this.txtFind_TextChanged);\n\t\t\t// \n\t\t\t// tabReplace\n\t\t\t// \n\t\t\tthis.tabReplace.Controls.Add(this.bCloseReplace);\n\t\t\tthis.tabReplace.Controls.Add(this.btnFindNext);\n\t\t\tthis.tabReplace.Controls.Add(this.chkMatchCase);\n\t\t\tthis.tabReplace.Controls.Add(this.btnReplaceAll);\n\t\t\tthis.tabReplace.Controls.Add(this.btnReplace);\n\t\t\tthis.tabReplace.Controls.Add(this.txtFindR);\n\t\t\tthis.tabReplace.Controls.Add(this.label3);\n\t\t\tthis.tabReplace.Controls.Add(this.label2);\n\t\t\tthis.tabReplace.Controls.Add(this.txtReplace);\n\t\t\tresources.ApplyResources(this.tabReplace, \"tabReplace\");\n\t\t\tthis.tabReplace.Name = \"tabReplace\";\n\t\t\tthis.tabReplace.Tag = \"replace\";\n\t\t\t// \n\t\t\t// bCloseReplace\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCloseReplace, \"bCloseReplace\");\n\t\t\tthis.bCloseReplace.Name = \"bCloseReplace\";\n\t\t\tthis.bCloseReplace.Click += new System.EventHandler(this.btnCancel_Click);\n\t\t\t// \n\t\t\t// btnFindNext\n\t\t\t// \n\t\t\tresources.ApplyResources(this.btnFindNext, \"btnFindNext\");\n\t\t\tthis.btnFindNext.Name = \"btnFindNext\";\n\t\t\tthis.btnFindNext.Click += new System.EventHandler(this.btnFindNext_Click);\n\t\t\t// \n\t\t\t// chkMatchCase\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkMatchCase, \"chkMatchCase\");\n\t\t\tthis.chkMatchCase.Name = \"chkMatchCase\";\n\t\t\t// \n\t\t\t// btnReplaceAll\n\t\t\t// \n\t\t\tresources.ApplyResources(this.btnReplaceAll, \"btnReplaceAll\");\n\t\t\tthis.btnReplaceAll.Name = \"btnReplaceAll\";\n\t\t\tthis.btnReplaceAll.Click += new System.EventHandler(this.btnReplaceAll_Click);\n\t\t\t// \n\t\t\t// btnReplace\n\t\t\t// \n\t\t\tresources.ApplyResources(this.btnReplace, \"btnReplace\");\n\t\t\tthis.btnReplace.Name = \"btnReplace\";\n\t\t\tthis.btnReplace.Click += new System.EventHandler(this.btnReplace_Click);\n\t\t\t// \n\t\t\t// txtFindR\n\t\t\t// \n\t\t\tresources.ApplyResources(this.txtFindR, \"txtFindR\");\n\t\t\tthis.txtFindR.Name = \"txtFindR\";\n\t\t\tthis.txtFindR.TextChanged += new System.EventHandler(this.txtFindR_TextChanged);\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// txtReplace\n\t\t\t// \n\t\t\tresources.ApplyResources(this.txtReplace, \"txtReplace\");\n\t\t\tthis.txtReplace.Name = \"txtReplace\";\n\t\t\t// \n\t\t\t// tabGoTo\n\t\t\t// \n\t\t\tthis.tabGoTo.Controls.Add(this.bCloseGoto);\n\t\t\tthis.tabGoTo.Controls.Add(this.txtLine);\n\t\t\tthis.tabGoTo.Controls.Add(this.label4);\n\t\t\tthis.tabGoTo.Controls.Add(this.btnGoto);\n\t\t\tresources.ApplyResources(this.tabGoTo, \"tabGoTo\");\n\t\t\tthis.tabGoTo.Name = \"tabGoTo\";\n\t\t\tthis.tabGoTo.Tag = \"goto\";\n\t\t\t// \n\t\t\t// bCloseGoto\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCloseGoto, \"bCloseGoto\");\n\t\t\tthis.bCloseGoto.Name = \"bCloseGoto\";\n\t\t\tthis.bCloseGoto.Click += new System.EventHandler(this.btnCancel_Click);\n\t\t\t// \n\t\t\t// txtLine\n\t\t\t// \n\t\t\tresources.ApplyResources(this.txtLine, \"txtLine\");\n\t\t\tthis.txtLine.Name = \"txtLine\";\n\t\t\t// \n\t\t\t// label4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label4, \"label4\");\n\t\t\tthis.label4.Name = \"label4\";\n\t\t\t// \n\t\t\t// btnGoto\n\t\t\t// \n\t\t\tresources.ApplyResources(this.btnGoto, \"btnGoto\");\n\t\t\tthis.btnGoto.Name = \"btnGoto\";\n\t\t\tthis.btnGoto.Click += new System.EventHandler(this.btnGoto_Click);\n\t\t\t// \n\t\t\t// FindTab\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.CancelButton = this.btnCancel;\n\t\t\tthis.Controls.Add(this.tcFRG);\n\t\t\tthis.Name = \"FindTab\";\n\t\t\tthis.TopMost = true;\n\t\t\tthis.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FindTab_FormClosed);\n\t\t\tthis.tcFRG.ResumeLayout(false);\n\t\t\tthis.tabFind.ResumeLayout(false);\n\t\t\tthis.tabFind.PerformLayout();\n\t\t\tthis.groupBox1.ResumeLayout(false);\n\t\t\tthis.tabReplace.ResumeLayout(false);\n\t\t\tthis.tabReplace.PerformLayout();\n\t\t\tthis.tabGoTo.ResumeLayout(false);\n\t\t\tthis.tabGoTo.PerformLayout();\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\tpublic TabPage tabFind;\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/FindTab.cs",
    "content": "\nusing System;\nusing System.Drawing;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// Summary description for FindTab.\n    /// </summary>\n    internal partial class FindTab \n    {\n        public FindTab()\n        {\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            this.AcceptButton = btnNext;\n            this.CancelButton = btnCancel;\n            txtFind.Focus();\n        }\n\n        internal FindTab(RdlEditPreview pad)\n        {\n            rdlEdit = pad;\n\t\t\trdlEdit.FindTab = this;\n            InitializeComponent();\n\n            this.AcceptButton = btnNext;\n            this.CancelButton = btnCancel;\n            txtFind.Focus();\n\t\t}\n\n        private void btnNext_Click(object sender, System.EventArgs e)\n        {\n            rdlEdit.FindNext(this, txtFind.Text, chkCase.Checked, radioUp.Checked);\n        }\n\n        private void txtFind_TextChanged(object sender, System.EventArgs e)\n        {\n            if (txtFind.Text == \"\")\n                btnNext.Enabled = false;\n            else\n                btnNext.Enabled = true;\n        }\n\n        private void btnFindNext_Click(object sender, System.EventArgs e)\n        {\n            rdlEdit.FindNext(this, txtFindR.Text, chkMatchCase.Checked, false);\n            txtFind.Focus();\n        }\n\n        private void btnReplace_Click(object sender, System.EventArgs e)\n        {\n            rdlEdit.ReplaceNext(this, txtFindR.Text, txtReplace.Text, chkCase.Checked);\n            txtFindR.Focus();\n        }\n\n        private void txtFindR_TextChanged(object sender, System.EventArgs e)\n        {\n            bool bEnable = (txtFindR.Text == \"\") ? false : true;\n            btnFindNext.Enabled = bEnable;\n            btnReplace.Enabled = bEnable;\n            btnReplaceAll.Enabled = bEnable;\n\n        }\n\n        private void btnReplaceAll_Click(object sender, System.EventArgs e)\n        {\n\n            rdlEdit.ReplaceAll(this, txtFindR.Text, txtReplace.Text, chkMatchCase.Checked);\n            txtFindR.Focus();\n        }\n\n        private void btnGoto_Click(object sender, System.EventArgs e)\n        {\n            try\n            {\n                try\n                {\n                    int nLine = Int32.Parse(txtLine.Text);\n                    rdlEdit.Goto(this, nLine);\n                }\n                catch (Exception ex)\n                {\n                    MessageBox.Show(this, ex.Message, Strings.FindTab_ShowE_InvalidLN);\n                }\n\n                txtLine.Focus();\n\n            }\n            catch (Exception er)\n            {\n                er.ToString();\n            }\n        }\n\n        private void btnCancel_Click(object sender, System.EventArgs e)\n        {\n            Close();\n        }\n\n        private void tcFRG_SelectedIndexChanged(object sender, System.EventArgs e)\n        {\n            TabControl tc = (TabControl)sender;\n            string tag = (string)tc.TabPages[tc.SelectedIndex].Tag;\n            switch (tag)\n            {\n                case \"find\":\n                    this.AcceptButton = btnNext;\n                    this.CancelButton = btnCancel;\n                    txtFind.Focus();\n                    break;\n                case \"replace\":\n                    this.AcceptButton = this.btnFindNext;\n                    this.CancelButton = this.bCloseReplace;\n                    txtFindR.Focus();\n                    break;\n                case \"goto\":\n                    this.AcceptButton = btnGoto;\n                    this.CancelButton = this.bCloseGoto;\n                    txtLine.Focus();\n                    break;\n            }\n        }\n\n        private void tcFRG_Enter(object sender, System.EventArgs e)\n        {\n            tcFRG_SelectedIndexChanged(this.tcFRG, new EventArgs());\n        }\n\n\t\tprivate void FindTab_FormClosed(object sender, FormClosedEventArgs e)\n\t\t{\n\t\t\trdlEdit.ClearSearchHighlight();\n\t\t}\n\n\t\tpublic void FindNextClick()\n\t\t{\n\t\t\tif (!String.IsNullOrEmpty(txtFind.Text))\n\t\t\t\tbtnNext.PerformClick();\n\t\t}\n    }\n}\n"
  },
  {
    "path": "RdlDesign/FindTab.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"btnCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>344, 128</value>\n  </data>\n  <data name=\"btnCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"btnCancel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"btnCancel.Text\" xml:space=\"preserve\">\n    <value>Close</value>\n  </data>\n  <data name=\"&gt;&gt;btnCancel.Name\" xml:space=\"preserve\">\n    <value>btnCancel</value>\n  </data>\n  <data name=\"&gt;&gt;btnCancel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;btnCancel.Parent\" xml:space=\"preserve\">\n    <value>tabFind</value>\n  </data>\n  <data name=\"&gt;&gt;btnCancel.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"btnNext.Enabled\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"btnNext.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>344, 16</value>\n  </data>\n  <data name=\"btnNext.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"btnNext.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"btnNext.Text\" xml:space=\"preserve\">\n    <value>Find Next</value>\n  </data>\n  <data name=\"&gt;&gt;btnNext.Name\" xml:space=\"preserve\">\n    <value>btnNext</value>\n  </data>\n  <data name=\"&gt;&gt;btnNext.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;btnNext.Parent\" xml:space=\"preserve\">\n    <value>tabFind</value>\n  </data>\n  <data name=\"&gt;&gt;btnNext.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"chkCase.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>208, 72</value>\n  </data>\n  <data name=\"chkCase.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 24</value>\n  </data>\n  <data name=\"chkCase.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"chkCase.Text\" xml:space=\"preserve\">\n    <value>Match Case</value>\n  </data>\n  <data name=\"&gt;&gt;chkCase.Name\" xml:space=\"preserve\">\n    <value>chkCase</value>\n  </data>\n  <data name=\"&gt;&gt;chkCase.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkCase.Parent\" xml:space=\"preserve\">\n    <value>tabFind</value>\n  </data>\n  <data name=\"&gt;&gt;chkCase.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"radioUp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 24</value>\n  </data>\n  <data name=\"radioUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 24</value>\n  </data>\n  <data name=\"radioUp.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"radioUp.Text\" xml:space=\"preserve\">\n    <value>Up</value>\n  </data>\n  <data name=\"&gt;&gt;radioUp.Name\" xml:space=\"preserve\">\n    <value>radioUp</value>\n  </data>\n  <data name=\"&gt;&gt;radioUp.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;radioUp.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;radioUp.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"radioDown.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>104, 24</value>\n  </data>\n  <data name=\"radioDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 24</value>\n  </data>\n  <data name=\"radioDown.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"radioDown.Text\" xml:space=\"preserve\">\n    <value>Down</value>\n  </data>\n  <data name=\"&gt;&gt;radioDown.Name\" xml:space=\"preserve\">\n    <value>radioDown</value>\n  </data>\n  <data name=\"&gt;&gt;radioDown.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;radioDown.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;radioDown.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"groupBox1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 48</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>176, 64</value>\n  </data>\n  <data name=\"groupBox1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Search Direction</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Name\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Parent\" xml:space=\"preserve\">\n    <value>tabFind</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>12, 16</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>76, 23</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Find</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>tabFind</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"txtFind.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 16</value>\n  </data>\n  <data name=\"txtFind.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 20</value>\n  </data>\n  <data name=\"txtFind.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;txtFind.Name\" xml:space=\"preserve\">\n    <value>txtFind</value>\n  </data>\n  <data name=\"&gt;&gt;txtFind.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;txtFind.Parent\" xml:space=\"preserve\">\n    <value>tabFind</value>\n  </data>\n  <data name=\"&gt;&gt;txtFind.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"tabFind.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 22</value>\n  </data>\n  <data name=\"tabFind.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>424, 166</value>\n  </data>\n  <data name=\"tabFind.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"tabFind.Text\" xml:space=\"preserve\">\n    <value>Find</value>\n  </data>\n  <data name=\"&gt;&gt;tabFind.Name\" xml:space=\"preserve\">\n    <value>tabFind</value>\n  </data>\n  <data name=\"&gt;&gt;tabFind.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tabFind.Parent\" xml:space=\"preserve\">\n    <value>tcFRG</value>\n  </data>\n  <data name=\"&gt;&gt;tabFind.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"bCloseReplace.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>344, 128</value>\n  </data>\n  <data name=\"bCloseReplace.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"bCloseReplace.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"bCloseReplace.Text\" xml:space=\"preserve\">\n    <value>Close</value>\n  </data>\n  <data name=\"&gt;&gt;bCloseReplace.Name\" xml:space=\"preserve\">\n    <value>bCloseReplace</value>\n  </data>\n  <data name=\"&gt;&gt;bCloseReplace.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bCloseReplace.Parent\" xml:space=\"preserve\">\n    <value>tabReplace</value>\n  </data>\n  <data name=\"&gt;&gt;bCloseReplace.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"btnFindNext.Enabled\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"btnFindNext.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>344, 16</value>\n  </data>\n  <data name=\"btnFindNext.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"btnFindNext.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"btnFindNext.Text\" xml:space=\"preserve\">\n    <value>FindNext</value>\n  </data>\n  <data name=\"&gt;&gt;btnFindNext.Name\" xml:space=\"preserve\">\n    <value>btnFindNext</value>\n  </data>\n  <data name=\"&gt;&gt;btnFindNext.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;btnFindNext.Parent\" xml:space=\"preserve\">\n    <value>tabReplace</value>\n  </data>\n  <data name=\"&gt;&gt;btnFindNext.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"chkMatchCase.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 88</value>\n  </data>\n  <data name=\"chkMatchCase.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 24</value>\n  </data>\n  <data name=\"chkMatchCase.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"chkMatchCase.Text\" xml:space=\"preserve\">\n    <value>Match Case</value>\n  </data>\n  <data name=\"&gt;&gt;chkMatchCase.Name\" xml:space=\"preserve\">\n    <value>chkMatchCase</value>\n  </data>\n  <data name=\"&gt;&gt;chkMatchCase.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkMatchCase.Parent\" xml:space=\"preserve\">\n    <value>tabReplace</value>\n  </data>\n  <data name=\"&gt;&gt;chkMatchCase.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"btnReplaceAll.Enabled\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"btnReplaceAll.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>344, 80</value>\n  </data>\n  <data name=\"btnReplaceAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"btnReplaceAll.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"btnReplaceAll.Text\" xml:space=\"preserve\">\n    <value>ReplaceAll</value>\n  </data>\n  <data name=\"&gt;&gt;btnReplaceAll.Name\" xml:space=\"preserve\">\n    <value>btnReplaceAll</value>\n  </data>\n  <data name=\"&gt;&gt;btnReplaceAll.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;btnReplaceAll.Parent\" xml:space=\"preserve\">\n    <value>tabReplace</value>\n  </data>\n  <data name=\"&gt;&gt;btnReplaceAll.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"btnReplace.Enabled\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"btnReplace.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>344, 48</value>\n  </data>\n  <data name=\"btnReplace.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"btnReplace.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"btnReplace.Text\" xml:space=\"preserve\">\n    <value>Replace</value>\n  </data>\n  <data name=\"&gt;&gt;btnReplace.Name\" xml:space=\"preserve\">\n    <value>btnReplace</value>\n  </data>\n  <data name=\"&gt;&gt;btnReplace.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;btnReplace.Parent\" xml:space=\"preserve\">\n    <value>tabReplace</value>\n  </data>\n  <data name=\"&gt;&gt;btnReplace.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"txtFindR.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 16</value>\n  </data>\n  <data name=\"txtFindR.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>224, 20</value>\n  </data>\n  <data name=\"txtFindR.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;txtFindR.Name\" xml:space=\"preserve\">\n    <value>txtFindR</value>\n  </data>\n  <data name=\"&gt;&gt;txtFindR.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;txtFindR.Parent\" xml:space=\"preserve\">\n    <value>tabReplace</value>\n  </data>\n  <data name=\"&gt;&gt;txtFindR.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>14, 16</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>76, 23</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Find</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>tabReplace</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>14, 56</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>76, 23</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Replace With</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>tabReplace</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"txtReplace.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 56</value>\n  </data>\n  <data name=\"txtReplace.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>224, 20</value>\n  </data>\n  <data name=\"txtReplace.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;txtReplace.Name\" xml:space=\"preserve\">\n    <value>txtReplace</value>\n  </data>\n  <data name=\"&gt;&gt;txtReplace.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;txtReplace.Parent\" xml:space=\"preserve\">\n    <value>tabReplace</value>\n  </data>\n  <data name=\"&gt;&gt;txtReplace.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"tabReplace.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 22</value>\n  </data>\n  <data name=\"tabReplace.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>424, 166</value>\n  </data>\n  <data name=\"tabReplace.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"tabReplace.Text\" xml:space=\"preserve\">\n    <value>Replace</value>\n  </data>\n  <data name=\"&gt;&gt;tabReplace.Name\" xml:space=\"preserve\">\n    <value>tabReplace</value>\n  </data>\n  <data name=\"&gt;&gt;tabReplace.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tabReplace.Parent\" xml:space=\"preserve\">\n    <value>tcFRG</value>\n  </data>\n  <data name=\"&gt;&gt;tabReplace.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"bCloseGoto.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>344, 128</value>\n  </data>\n  <data name=\"bCloseGoto.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"bCloseGoto.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"bCloseGoto.Text\" xml:space=\"preserve\">\n    <value>Close</value>\n  </data>\n  <data name=\"&gt;&gt;bCloseGoto.Name\" xml:space=\"preserve\">\n    <value>bCloseGoto</value>\n  </data>\n  <data name=\"&gt;&gt;bCloseGoto.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bCloseGoto.Parent\" xml:space=\"preserve\">\n    <value>tabGoTo</value>\n  </data>\n  <data name=\"&gt;&gt;bCloseGoto.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"txtLine.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 16</value>\n  </data>\n  <data name=\"txtLine.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 20</value>\n  </data>\n  <data name=\"txtLine.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;txtLine.Name\" xml:space=\"preserve\">\n    <value>txtLine</value>\n  </data>\n  <data name=\"&gt;&gt;txtLine.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;txtLine.Parent\" xml:space=\"preserve\">\n    <value>tabGoTo</value>\n  </data>\n  <data name=\"&gt;&gt;txtLine.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 23</value>\n  </data>\n  <data name=\"label4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Line Number</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Name\" xml:space=\"preserve\">\n    <value>label4</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Parent\" xml:space=\"preserve\">\n    <value>tabGoTo</value>\n  </data>\n  <data name=\"&gt;&gt;label4.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"btnGoto.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>344, 16</value>\n  </data>\n  <data name=\"btnGoto.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"btnGoto.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"btnGoto.Text\" xml:space=\"preserve\">\n    <value>GoTo</value>\n  </data>\n  <data name=\"&gt;&gt;btnGoto.Name\" xml:space=\"preserve\">\n    <value>btnGoto</value>\n  </data>\n  <data name=\"&gt;&gt;btnGoto.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;btnGoto.Parent\" xml:space=\"preserve\">\n    <value>tabGoTo</value>\n  </data>\n  <data name=\"&gt;&gt;btnGoto.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"tabGoTo.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 22</value>\n  </data>\n  <data name=\"tabGoTo.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>424, 166</value>\n  </data>\n  <data name=\"tabGoTo.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"tabGoTo.Text\" xml:space=\"preserve\">\n    <value>GoTo</value>\n  </data>\n  <data name=\"&gt;&gt;tabGoTo.Name\" xml:space=\"preserve\">\n    <value>tabGoTo</value>\n  </data>\n  <data name=\"&gt;&gt;tabGoTo.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tabGoTo.Parent\" xml:space=\"preserve\">\n    <value>tcFRG</value>\n  </data>\n  <data name=\"&gt;&gt;tabGoTo.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"tcFRG.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 8</value>\n  </data>\n  <data name=\"tcFRG.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 192</value>\n  </data>\n  <data name=\"tcFRG.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;tcFRG.Name\" xml:space=\"preserve\">\n    <value>tcFRG</value>\n  </data>\n  <data name=\"&gt;&gt;tcFRG.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tcFRG.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tcFRG.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>448, 206</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Find</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>FindTab</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/FindTab.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"tabFind.Text\" xml:space=\"preserve\">\n    <value>Поиск</value>\n  </data>\n  <data name=\"tabReplace.Text\" xml:space=\"preserve\">\n    <value>Замена</value>\n  </data>\n  <data name=\"tabGoTo.Text\" xml:space=\"preserve\">\n    <value>Перейти</value>\n  </data>\n  <data name=\"btnCancel.Text\" xml:space=\"preserve\">\n    <value>Закрыть</value>\n  </data>\n  <data name=\"btnNext.Text\" xml:space=\"preserve\">\n    <value>Далее</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"chkCase.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>140, 24</value>\n  </data>\n  <data name=\"chkCase.Text\" xml:space=\"preserve\">\n    <value>Учитывать регистр</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Направление поиска</value>\n  </data>\n  <data name=\"radioUp.Text\" xml:space=\"preserve\">\n    <value>Вверх</value>\n  </data>\n  <data name=\"radioDown.Text\" xml:space=\"preserve\">\n    <value>Вниз</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Найти</value>\n  </data>\n  <data name=\"bCloseReplace.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>326, 128</value>\n  </data>\n  <data name=\"bCloseReplace.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>93, 23</value>\n  </data>\n  <data name=\"bCloseReplace.Text\" xml:space=\"preserve\">\n    <value>Закрыть</value>\n  </data>\n  <data name=\"btnFindNext.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>326, 16</value>\n  </data>\n  <data name=\"btnFindNext.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>93, 23</value>\n  </data>\n  <data name=\"btnFindNext.Text\" xml:space=\"preserve\">\n    <value>Далее</value>\n  </data>\n  <data name=\"chkMatchCase.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>148, 24</value>\n  </data>\n  <data name=\"chkMatchCase.Text\" xml:space=\"preserve\">\n    <value>Учитывать регистр</value>\n  </data>\n  <data name=\"btnReplaceAll.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>326, 80</value>\n  </data>\n  <data name=\"btnReplaceAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>93, 23</value>\n  </data>\n  <data name=\"btnReplaceAll.Text\" xml:space=\"preserve\">\n    <value>Заменить все</value>\n  </data>\n  <data name=\"btnReplace.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>326, 48</value>\n  </data>\n  <data name=\"btnReplace.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>93, 23</value>\n  </data>\n  <data name=\"btnReplace.Text\" xml:space=\"preserve\">\n    <value>Заменить</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Найти</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Заменить на</value>\n  </data>\n  <data name=\"bCloseGoto.Text\" xml:space=\"preserve\">\n    <value>Закрыть</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Номер линии</value>\n  </data>\n  <data name=\"btnGoto.Text\" xml:space=\"preserve\">\n    <value>Перейти</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Поиск</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/FontCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.Globalization;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// FontCtl\n\t/// </summary>\n\tinternal class FontCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n        private List<XmlNode> _ReportItems;\n\t\tprivate DesignXmlDraw _Draw;\n\t\tprivate bool fHorzAlign, fFormat, fDirection, fWritingMode, fTextDecoration;\n\t\tprivate bool fColor, fVerticalAlign, fFontStyle, fFontWeight, fFontSize, fFontFamily;\n\t\tprivate System.Windows.Forms.Label label4;\n\t\tprivate System.Windows.Forms.Label label5;\n\t\tprivate System.Windows.Forms.Label label6;\n\t\tprivate System.Windows.Forms.Label label7;\n\t\tprivate System.Windows.Forms.Label label8;\n\t\tprivate System.Windows.Forms.Label lFont;\n\t\tprivate System.Windows.Forms.Button bFont;\n\t\tprivate System.Windows.Forms.ComboBox cbHorzAlign;\n\t\tprivate System.Windows.Forms.ComboBox cbFormat;\n\t\tprivate System.Windows.Forms.ComboBox cbDirection;\n\t\tprivate System.Windows.Forms.ComboBox cbWritingMode;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\tprivate System.Windows.Forms.ComboBox cbTextDecoration;\n\t\tprivate System.Windows.Forms.Button bColor;\n\t\tprivate System.Windows.Forms.Label label9;\n\t\tprivate System.Windows.Forms.ComboBox cbColor;\n\t\tprivate System.Windows.Forms.ComboBox cbVerticalAlign;\n\t\tprivate System.Windows.Forms.Label label3;\n\t\tprivate System.Windows.Forms.ComboBox cbFontStyle;\n\t\tprivate System.Windows.Forms.ComboBox cbFontWeight;\n\t\tprivate System.Windows.Forms.Label label10;\n\t\tprivate System.Windows.Forms.ComboBox cbFontSize;\n\t\tprivate System.Windows.Forms.Label label11;\n\t\tprivate System.Windows.Forms.ComboBox cbFontFamily;\n        private System.Windows.Forms.GroupBox groupBox1;\n\t\tprivate System.Windows.Forms.Button bFamily;\n\t\tprivate System.Windows.Forms.Button bStyle;\n\t\tprivate System.Windows.Forms.Button bColorEx;\n\t\tprivate System.Windows.Forms.Button bSize;\n\t\tprivate System.Windows.Forms.Button bWeight;\n\t\tprivate System.Windows.Forms.Button button2;\n\t\tprivate System.Windows.Forms.Button bAlignment;\n\t\tprivate System.Windows.Forms.Button bDirection;\n\t\tprivate System.Windows.Forms.Button bVertical;\n\t\tprivate System.Windows.Forms.Button bWrtMode;\n\t\tprivate System.Windows.Forms.Button bFormat;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n        private string[] _names;\n\n        public FontCtl(DesignXmlDraw dxDraw, string[] names, List<XmlNode> styles)\n\t\t{\n\t\t\t_ReportItems = styles;\n\t\t\t_Draw = dxDraw;\n            _names = names;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitTextStyles();\n\t\t}\n\n\t\tprivate void InitTextStyles()\n\t\t{\n            cbColor.Items.AddRange(StaticLists.ColorList);\n            cbFormat.Items.AddRange(StaticLists.FormatList);\n\n\t\t\tXmlNode sNode = _ReportItems[0];\n\n            if (_names != null)\n            {\n                sNode = _Draw.FindCreateNextInHierarchy(sNode, _names);\n            }\n\n\t\t\tsNode = _Draw.GetCreateNamedChildNode(sNode, \"Style\");\n\n\t\t\tstring sFontStyle=\"Normal\";\n\t\t\tstring sFontFamily=\"Arial\";\n\t\t\tstring sFontWeight=\"Normal\";\n\t\t\tstring sFontSize=\"10pt\";\n\t\t\tstring sTextDecoration=\"None\";\n\t\t\tstring sHorzAlign=\"General\";\n\t\t\tstring sVerticalAlign=\"Top\";\n\t\t\tstring sColor=\"Black\";\n\t\t\tstring sFormat=\"\";\n\t\t\tstring sDirection=\"LTR\";\n\t\t\tstring sWritingMode=\"lr-tb\";\n\t\t\tforeach (XmlNode lNode in sNode)\n\t\t\t{\n\t\t\t\tif (lNode.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (lNode.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"FontStyle\":\n\t\t\t\t\t\tsFontStyle = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"FontFamily\":\n\t\t\t\t\t\tsFontFamily = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"FontWeight\":\n\t\t\t\t\t\tsFontWeight = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"FontSize\":\n\t\t\t\t\t\tsFontSize = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"TextDecoration\":\n\t\t\t\t\t\tsTextDecoration = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"TextAlign\":\n\t\t\t\t\t\tsHorzAlign = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"VerticalAlign\":\n\t\t\t\t\t\tsVerticalAlign = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Color\":\n\t\t\t\t\t\tsColor = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Format\":\n\t\t\t\t\t\tsFormat = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Direction\":\n\t\t\t\t\t\tsDirection = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"WritingMode\":\n\t\t\t\t\t\tsWritingMode = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Population Font Family dropdown\n\t\t\tforeach (FontFamily ff in FontFamily.Families)\n\t\t\t{\n\t\t\t\tcbFontFamily.Items.Add(ff.Name);\n\t\t\t}\n\n\t\t\tthis.cbFontStyle.Text = sFontStyle;\n\t\t\tthis.cbFontFamily.Text = sFontFamily;\n\t\t\tthis.cbFontWeight.Text = sFontWeight;\n\t\t\tthis.cbFontSize.Text = sFontSize;\n\t\t\tthis.cbTextDecoration.Text = sTextDecoration;\n\t\t\tthis.cbHorzAlign.Text = sHorzAlign;\n\t\t\tthis.cbVerticalAlign.Text = sVerticalAlign;\n\t\t\tthis.cbColor.Text = sColor;\n\t\t\tthis.cbFormat.Text = sFormat;\n\t\t\tthis.cbDirection.Text = sDirection;\n\t\t\tthis.cbWritingMode.Text = sWritingMode;\n\n            fHorzAlign = fFormat = fDirection = fWritingMode = fTextDecoration =\n                fColor = fVerticalAlign = fFontStyle = fFontWeight = fFontSize = fFontFamily = false;\n\n\t\t\treturn;\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FontCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.label4 = new System.Windows.Forms.Label();\n\t\t\tthis.label5 = new System.Windows.Forms.Label();\n\t\t\tthis.label6 = new System.Windows.Forms.Label();\n\t\t\tthis.label7 = new System.Windows.Forms.Label();\n\t\t\tthis.label8 = new System.Windows.Forms.Label();\n\t\t\tthis.lFont = new System.Windows.Forms.Label();\n\t\t\tthis.bFont = new System.Windows.Forms.Button();\n\t\t\tthis.cbVerticalAlign = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbHorzAlign = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbFormat = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbDirection = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbWritingMode = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.cbTextDecoration = new System.Windows.Forms.ComboBox();\n\t\t\tthis.bColor = new System.Windows.Forms.Button();\n\t\t\tthis.label9 = new System.Windows.Forms.Label();\n\t\t\tthis.cbColor = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.cbFontStyle = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbFontWeight = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label10 = new System.Windows.Forms.Label();\n\t\t\tthis.cbFontSize = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label11 = new System.Windows.Forms.Label();\n\t\t\tthis.cbFontFamily = new System.Windows.Forms.ComboBox();\n\t\t\tthis.groupBox1 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.button2 = new System.Windows.Forms.Button();\n\t\t\tthis.bWeight = new System.Windows.Forms.Button();\n\t\t\tthis.bSize = new System.Windows.Forms.Button();\n\t\t\tthis.bColorEx = new System.Windows.Forms.Button();\n\t\t\tthis.bStyle = new System.Windows.Forms.Button();\n\t\t\tthis.bFamily = new System.Windows.Forms.Button();\n\t\t\tthis.bAlignment = new System.Windows.Forms.Button();\n\t\t\tthis.bDirection = new System.Windows.Forms.Button();\n\t\t\tthis.bVertical = new System.Windows.Forms.Button();\n\t\t\tthis.bWrtMode = new System.Windows.Forms.Button();\n\t\t\tthis.bFormat = new System.Windows.Forms.Button();\n\t\t\tthis.groupBox1.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// label4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label4, \"label4\");\n\t\t\tthis.label4.Name = \"label4\";\n\t\t\t// \n\t\t\t// label5\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label5, \"label5\");\n\t\t\tthis.label5.Name = \"label5\";\n\t\t\t// \n\t\t\t// label6\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label6, \"label6\");\n\t\t\tthis.label6.Name = \"label6\";\n\t\t\t// \n\t\t\t// label7\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label7, \"label7\");\n\t\t\tthis.label7.Name = \"label7\";\n\t\t\t// \n\t\t\t// label8\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label8, \"label8\");\n\t\t\tthis.label8.Name = \"label8\";\n\t\t\t// \n\t\t\t// lFont\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lFont, \"lFont\");\n\t\t\tthis.lFont.Name = \"lFont\";\n\t\t\t// \n\t\t\t// bFont\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bFont, \"bFont\");\n\t\t\tthis.bFont.Name = \"bFont\";\n\t\t\tthis.bFont.Click += new System.EventHandler(this.bFont_Click);\n\t\t\t// \n\t\t\t// cbVerticalAlign\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbVerticalAlign, \"cbVerticalAlign\");\n\t\t\tthis.cbVerticalAlign.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbVerticalAlign.Items.AddRange(new object[] {\n            resources.GetString(\"cbVerticalAlign.Items\"),\n            resources.GetString(\"cbVerticalAlign.Items1\"),\n            resources.GetString(\"cbVerticalAlign.Items2\")});\n\t\t\tthis.cbVerticalAlign.Name = \"cbVerticalAlign\";\n\t\t\tthis.cbVerticalAlign.SelectedIndexChanged += new System.EventHandler(this.cbVerticalAlign_TextChanged);\n\t\t\tthis.cbVerticalAlign.TextChanged += new System.EventHandler(this.cbVerticalAlign_TextChanged);\n\t\t\t// \n\t\t\t// cbHorzAlign\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbHorzAlign, \"cbHorzAlign\");\n\t\t\tthis.cbHorzAlign.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbHorzAlign.Items.AddRange(new object[] {\n            resources.GetString(\"cbHorzAlign.Items\"),\n            resources.GetString(\"cbHorzAlign.Items1\"),\n            resources.GetString(\"cbHorzAlign.Items2\"),\n            resources.GetString(\"cbHorzAlign.Items3\")});\n\t\t\tthis.cbHorzAlign.Name = \"cbHorzAlign\";\n\t\t\tthis.cbHorzAlign.SelectedIndexChanged += new System.EventHandler(this.cbHorzAlign_TextChanged);\n\t\t\tthis.cbHorzAlign.TextChanged += new System.EventHandler(this.cbHorzAlign_TextChanged);\n\t\t\t// \n\t\t\t// cbFormat\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbFormat, \"cbFormat\");\n\t\t\tthis.cbFormat.Name = \"cbFormat\";\n\t\t\tthis.cbFormat.TextChanged += new System.EventHandler(this.cbFormat_TextChanged);\n\t\t\t// \n\t\t\t// cbDirection\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbDirection, \"cbDirection\");\n\t\t\tthis.cbDirection.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbDirection.Items.AddRange(new object[] {\n            resources.GetString(\"cbDirection.Items\"),\n            resources.GetString(\"cbDirection.Items1\")});\n\t\t\tthis.cbDirection.Name = \"cbDirection\";\n\t\t\tthis.cbDirection.SelectedIndexChanged += new System.EventHandler(this.cbDirection_TextChanged);\n\t\t\tthis.cbDirection.TextChanged += new System.EventHandler(this.cbDirection_TextChanged);\n\t\t\t// \n\t\t\t// cbWritingMode\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbWritingMode, \"cbWritingMode\");\n\t\t\tthis.cbWritingMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbWritingMode.Items.AddRange(new object[] {\n            resources.GetString(\"cbWritingMode.Items\"),\n            resources.GetString(\"cbWritingMode.Items1\"),\n            resources.GetString(\"cbWritingMode.Items2\")});\n\t\t\tthis.cbWritingMode.Name = \"cbWritingMode\";\n\t\t\tthis.cbWritingMode.SelectedIndexChanged += new System.EventHandler(this.cbWritingMode_TextChanged);\n\t\t\tthis.cbWritingMode.TextChanged += new System.EventHandler(this.cbWritingMode_TextChanged);\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// cbTextDecoration\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbTextDecoration, \"cbTextDecoration\");\n\t\t\tthis.cbTextDecoration.Items.AddRange(new object[] {\n            resources.GetString(\"cbTextDecoration.Items\"),\n            resources.GetString(\"cbTextDecoration.Items1\"),\n            resources.GetString(\"cbTextDecoration.Items2\"),\n            resources.GetString(\"cbTextDecoration.Items3\")});\n\t\t\tthis.cbTextDecoration.Name = \"cbTextDecoration\";\n\t\t\tthis.cbTextDecoration.SelectedIndexChanged += new System.EventHandler(this.cbTextDecoration_TextChanged);\n\t\t\tthis.cbTextDecoration.TextChanged += new System.EventHandler(this.cbTextDecoration_TextChanged);\n\t\t\t// \n\t\t\t// bColor\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bColor, \"bColor\");\n\t\t\tthis.bColor.Name = \"bColor\";\n\t\t\tthis.bColor.Click += new System.EventHandler(this.bColor_Click);\n\t\t\t// \n\t\t\t// label9\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label9, \"label9\");\n\t\t\tthis.label9.Name = \"label9\";\n\t\t\t// \n\t\t\t// cbColor\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbColor, \"cbColor\");\n\t\t\tthis.cbColor.Name = \"cbColor\";\n\t\t\tthis.cbColor.TextChanged += new System.EventHandler(this.cbColor_TextChanged);\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// cbFontStyle\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbFontStyle, \"cbFontStyle\");\n\t\t\tthis.cbFontStyle.Items.AddRange(new object[] {\n            resources.GetString(\"cbFontStyle.Items\"),\n            resources.GetString(\"cbFontStyle.Items1\")});\n\t\t\tthis.cbFontStyle.Name = \"cbFontStyle\";\n\t\t\tthis.cbFontStyle.TextChanged += new System.EventHandler(this.cbFontStyle_TextChanged);\n\t\t\t// \n\t\t\t// cbFontWeight\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbFontWeight, \"cbFontWeight\");\n\t\t\tthis.cbFontWeight.Items.AddRange(new object[] {\n            resources.GetString(\"cbFontWeight.Items\"),\n            resources.GetString(\"cbFontWeight.Items1\"),\n            resources.GetString(\"cbFontWeight.Items2\"),\n            resources.GetString(\"cbFontWeight.Items3\"),\n            resources.GetString(\"cbFontWeight.Items4\"),\n            resources.GetString(\"cbFontWeight.Items5\"),\n            resources.GetString(\"cbFontWeight.Items6\"),\n            resources.GetString(\"cbFontWeight.Items7\"),\n            resources.GetString(\"cbFontWeight.Items8\"),\n            resources.GetString(\"cbFontWeight.Items9\"),\n            resources.GetString(\"cbFontWeight.Items10\"),\n            resources.GetString(\"cbFontWeight.Items11\"),\n            resources.GetString(\"cbFontWeight.Items12\")});\n\t\t\tthis.cbFontWeight.Name = \"cbFontWeight\";\n\t\t\tthis.cbFontWeight.TextChanged += new System.EventHandler(this.cbFontWeight_TextChanged);\n\t\t\t// \n\t\t\t// label10\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label10, \"label10\");\n\t\t\tthis.label10.Name = \"label10\";\n\t\t\t// \n\t\t\t// cbFontSize\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbFontSize, \"cbFontSize\");\n\t\t\tthis.cbFontSize.Items.AddRange(new object[] {\n            resources.GetString(\"cbFontSize.Items\"),\n            resources.GetString(\"cbFontSize.Items1\"),\n            resources.GetString(\"cbFontSize.Items2\"),\n            resources.GetString(\"cbFontSize.Items3\"),\n            resources.GetString(\"cbFontSize.Items4\"),\n            resources.GetString(\"cbFontSize.Items5\"),\n            resources.GetString(\"cbFontSize.Items6\"),\n            resources.GetString(\"cbFontSize.Items7\"),\n            resources.GetString(\"cbFontSize.Items8\"),\n            resources.GetString(\"cbFontSize.Items9\"),\n            resources.GetString(\"cbFontSize.Items10\"),\n            resources.GetString(\"cbFontSize.Items11\"),\n            resources.GetString(\"cbFontSize.Items12\"),\n            resources.GetString(\"cbFontSize.Items13\"),\n            resources.GetString(\"cbFontSize.Items14\"),\n            resources.GetString(\"cbFontSize.Items15\")});\n\t\t\tthis.cbFontSize.Name = \"cbFontSize\";\n\t\t\tthis.cbFontSize.TextChanged += new System.EventHandler(this.cbFontSize_TextChanged);\n\t\t\t// \n\t\t\t// label11\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label11, \"label11\");\n\t\t\tthis.label11.Name = \"label11\";\n\t\t\t// \n\t\t\t// cbFontFamily\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbFontFamily, \"cbFontFamily\");\n\t\t\tthis.cbFontFamily.Items.AddRange(new object[] {\n            resources.GetString(\"cbFontFamily.Items\")});\n\t\t\tthis.cbFontFamily.Name = \"cbFontFamily\";\n\t\t\tthis.cbFontFamily.TextChanged += new System.EventHandler(this.cbFontFamily_TextChanged);\n\t\t\t// \n\t\t\t// groupBox1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox1, \"groupBox1\");\n\t\t\tthis.groupBox1.Controls.Add(this.cbFontFamily);\n\t\t\tthis.groupBox1.Controls.Add(this.cbTextDecoration);\n\t\t\tthis.groupBox1.Controls.Add(this.button2);\n\t\t\tthis.groupBox1.Controls.Add(this.bWeight);\n\t\t\tthis.groupBox1.Controls.Add(this.bSize);\n\t\t\tthis.groupBox1.Controls.Add(this.bColorEx);\n\t\t\tthis.groupBox1.Controls.Add(this.bStyle);\n\t\t\tthis.groupBox1.Controls.Add(this.bFamily);\n\t\t\tthis.groupBox1.Controls.Add(this.lFont);\n\t\t\tthis.groupBox1.Controls.Add(this.bFont);\n\t\t\tthis.groupBox1.Controls.Add(this.label2);\n\t\t\tthis.groupBox1.Controls.Add(this.bColor);\n\t\t\tthis.groupBox1.Controls.Add(this.label9);\n\t\t\tthis.groupBox1.Controls.Add(this.cbColor);\n\t\t\tthis.groupBox1.Controls.Add(this.label3);\n\t\t\tthis.groupBox1.Controls.Add(this.cbFontStyle);\n\t\t\tthis.groupBox1.Controls.Add(this.cbFontWeight);\n\t\t\tthis.groupBox1.Controls.Add(this.label10);\n\t\t\tthis.groupBox1.Controls.Add(this.cbFontSize);\n\t\t\tthis.groupBox1.Controls.Add(this.label11);\n\t\t\tthis.groupBox1.Name = \"groupBox1\";\n\t\t\tthis.groupBox1.TabStop = false;\n\t\t\t// \n\t\t\t// button2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.button2, \"button2\");\n\t\t\tthis.button2.Name = \"button2\";\n\t\t\tthis.button2.Tag = \"decoration\";\n\t\t\tthis.button2.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bWeight\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bWeight, \"bWeight\");\n\t\t\tthis.bWeight.Name = \"bWeight\";\n\t\t\tthis.bWeight.Tag = \"weight\";\n\t\t\tthis.bWeight.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bSize\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bSize, \"bSize\");\n\t\t\tthis.bSize.Name = \"bSize\";\n\t\t\tthis.bSize.Tag = \"size\";\n\t\t\tthis.bSize.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bColorEx\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bColorEx, \"bColorEx\");\n\t\t\tthis.bColorEx.Name = \"bColorEx\";\n\t\t\tthis.bColorEx.Tag = \"color\";\n\t\t\tthis.bColorEx.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bStyle\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bStyle, \"bStyle\");\n\t\t\tthis.bStyle.Name = \"bStyle\";\n\t\t\tthis.bStyle.Tag = \"style\";\n\t\t\tthis.bStyle.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bFamily\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bFamily, \"bFamily\");\n\t\t\tthis.bFamily.Name = \"bFamily\";\n\t\t\tthis.bFamily.Tag = \"family\";\n\t\t\tthis.bFamily.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bAlignment\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bAlignment, \"bAlignment\");\n\t\t\tthis.bAlignment.Name = \"bAlignment\";\n\t\t\tthis.bAlignment.Tag = \"halign\";\n\t\t\tthis.bAlignment.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bDirection\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bDirection, \"bDirection\");\n\t\t\tthis.bDirection.Name = \"bDirection\";\n\t\t\tthis.bDirection.Tag = \"direction\";\n\t\t\tthis.bDirection.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bVertical\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bVertical, \"bVertical\");\n\t\t\tthis.bVertical.Name = \"bVertical\";\n\t\t\tthis.bVertical.Tag = \"valign\";\n\t\t\tthis.bVertical.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bWrtMode\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bWrtMode, \"bWrtMode\");\n\t\t\tthis.bWrtMode.Name = \"bWrtMode\";\n\t\t\tthis.bWrtMode.Tag = \"writing\";\n\t\t\tthis.bWrtMode.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bFormat\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bFormat, \"bFormat\");\n\t\t\tthis.bFormat.Name = \"bFormat\";\n\t\t\tthis.bFormat.Tag = \"format\";\n\t\t\tthis.bFormat.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// FontCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.bFormat);\n\t\t\tthis.Controls.Add(this.bWrtMode);\n\t\t\tthis.Controls.Add(this.bVertical);\n\t\t\tthis.Controls.Add(this.bDirection);\n\t\t\tthis.Controls.Add(this.bAlignment);\n\t\t\tthis.Controls.Add(this.groupBox1);\n\t\t\tthis.Controls.Add(this.cbWritingMode);\n\t\t\tthis.Controls.Add(this.cbDirection);\n\t\t\tthis.Controls.Add(this.cbFormat);\n\t\t\tthis.Controls.Add(this.cbHorzAlign);\n\t\t\tthis.Controls.Add(this.cbVerticalAlign);\n\t\t\tthis.Controls.Add(this.label8);\n\t\t\tthis.Controls.Add(this.label7);\n\t\t\tthis.Controls.Add(this.label6);\n\t\t\tthis.Controls.Add(this.label5);\n\t\t\tthis.Controls.Add(this.label4);\n\t\t\tthis.Name = \"FontCtl\";\n\t\t\tthis.groupBox1.ResumeLayout(false);\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n\t\tpublic bool IsValid()\n\t\t{\n\t\t\tif (fFontSize)\n\t\t\t{\n\t\t\t\ttry \n\t\t\t\t{\n\t\t\t\t\tif (!this.cbFontSize.Text.Trim().StartsWith(\"=\"))\n\t\t\t\t\t\tDesignerUtility.ValidateSize(this.cbFontSize.Text, false, false);\n\t\t\t\t}\n\t\t\t\tcatch (Exception e)\n\t\t\t\t{\n\t\t\t\t\tMessageBox.Show(e.Message, Strings.FontCtl_Show_InvalidFontSize);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// take information in control and apply to all the style nodes\n\t\t\t//  Only change information that has been marked as modified;\n\t\t\t//   this way when group is selected it is possible to change just\n\t\t\t//   the items you want and keep the rest the same.\n\t\t\t\n\t\t\tforeach (XmlNode riNode in this._ReportItems)\n\t\t\t\tApplyChanges(riNode);\n\n\t\t\tfHorzAlign = fFormat = fDirection = fWritingMode = fTextDecoration =\n\t\t\t\tfColor = fVerticalAlign = fFontStyle = fFontWeight = fFontSize = fFontFamily = false;\n\t\t}\n\n\t\tpublic void ApplyChanges(XmlNode node)\n\t\t{\n            if (_names != null)\n            {\n                node = _Draw.FindCreateNextInHierarchy(node, _names);\n            }\n\n            XmlNode sNode = _Draw.GetCreateNamedChildNode(node, \"Style\");\n\n\t\t\tif (fFontStyle)\n\t\t\t\t_Draw.SetElement(sNode, \"FontStyle\", cbFontStyle.Text);\n\t\t\tif (fFontFamily)\n\t\t\t\t_Draw.SetElement(sNode, \"FontFamily\", cbFontFamily.Text);\n\t\t\tif (fFontWeight)\n\t\t\t\t_Draw.SetElement(sNode, \"FontWeight\", cbFontWeight.Text);\n\n\t\t\tif (fFontSize)\n\t\t\t{\n\t\t\t\tfloat size=10;\n\t\t\t\tsize = DesignXmlDraw.GetSize(cbFontSize.Text);\n\t\t\t\tif (size <= 0)\n\t\t\t\t{\n\t\t\t\t\tsize = DesignXmlDraw.GetSize(cbFontSize.Text+\"pt\");\t// Try assuming pt\n\t\t\t\t\tif (size <= 0)\t// still no good\n\t\t\t\t\t\tsize = 10;\t// just set default value\n\t\t\t\t}\n\t\t\t\tstring rs = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.#}pt\", size);\n\n\t\t\t\t_Draw.SetElement(sNode, \"FontSize\", rs);\t// force to string\n\t\t\t}\n\t\t\tif (fTextDecoration)\n\t\t\t\t_Draw.SetElement(sNode, \"TextDecoration\", cbTextDecoration.Text);    \n\t\t\tif (fHorzAlign)\n\t\t\t\t_Draw.SetElement(sNode, \"TextAlign\", cbHorzAlign.Text);\n\t\t\tif (fVerticalAlign)\n\t\t\t\t_Draw.SetElement(sNode, \"VerticalAlign\", cbVerticalAlign.Text);\n\t\t\tif (fColor)\n\t\t\t\t_Draw.SetElement(sNode, \"Color\", cbColor.Text);\n\t\t\tif (fFormat)\n\t\t\t{\n\t\t\t\tif (cbFormat.Text.Length == 0)\t\t// Don't put out a format if no format value\n\t\t\t\t\t_Draw.RemoveElement(sNode, \"Format\");\n\t\t\t\telse\n\t\t\t\t\t_Draw.SetElement(sNode, \"Format\", cbFormat.Text);\n\t\t\t}\n\t\t\tif (fDirection)\n\t\t\t\t_Draw.SetElement(sNode, \"Direction\", cbDirection.Text);\n\t\t\tif (fWritingMode)\n\t\t\t\t_Draw.SetElement(sNode, \"WritingMode\", cbWritingMode.Text);\n\t\t\t\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void bFont_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tFontDialog fd = new FontDialog();\n\t\t\tfd.ShowColor = true;\n\n\t\t\t// STYLE\n\t\t\tSystem.Drawing.FontStyle fs = 0;\n\t\t\tif (cbFontStyle.Text == \"Italic\")\n\t\t\t\tfs |= System.Drawing.FontStyle.Italic;\n\n\t\t\tif (cbTextDecoration.Text == \"Underline\")\n\t\t\t\tfs |= FontStyle.Underline;\n\t\t\telse if (cbTextDecoration.Text == \"LineThrough\")\n\t\t\t\tfs |= FontStyle.Strikeout;\n\n\t\t\t// WEIGHT\n\t\t\tswitch (cbFontWeight.Text)\n\t\t\t{\n\t\t\t\tcase \"Bold\":\n\t\t\t\tcase \"Bolder\":\n\t\t\t\tcase \"500\":\n\t\t\t\tcase \"600\":\n\t\t\t\tcase \"700\":\n\t\t\t\tcase \"800\":\n\t\t\t\tcase \"900\":\n\t\t\t\t\tfs |= System.Drawing.FontStyle.Bold;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tfloat size=10;\n\t\t\tsize = DesignXmlDraw.GetSize(cbFontSize.Text);\n\t\t\tif (size <= 0)\n\t\t\t{\n\t\t\t\tsize = DesignXmlDraw.GetSize(cbFontSize.Text+\"pt\");\t// Try assuming pt\n\t\t\t\tif (size <= 0)\t// still no good\n\t\t\t\t\tsize = 10;\t// just set default value\n\t\t\t}\n\t\t\tFont drawFont = new Font(cbFontFamily.Text, size, fs);\t// si.FontSize already in points\n\n\n\t\t\tfd.Font = drawFont;\n\t\t\tfd.Color = \n\t\t\t\tDesignerUtility.ColorFromHtml(cbColor.Text, System.Drawing.Color.Black);\n            try\n            {\n                DialogResult dr = fd.ShowDialog();\n                if (dr != DialogResult.OK)\n                {\n                    drawFont.Dispose();\n                    return;\n                }\n\n                // Apply all the font info\n                cbFontWeight.Text = fd.Font.Bold ? \"Bold\" : \"Normal\";\n                cbFontStyle.Text = fd.Font.Italic ? \"Italic\" : \"Normal\";\n                cbFontFamily.Text = fd.Font.FontFamily.Name;\n                cbFontSize.Text = fd.Font.Size.ToString() + \"pt\";\n                cbColor.Text = ColorTranslator.ToHtml(fd.Color);\n                if (fd.Font.Underline)\n                    this.cbTextDecoration.Text = \"Underline\";\n                else if (fd.Font.Strikeout)\n                    this.cbTextDecoration.Text = \"LineThrough\";\n                else\n                    this.cbTextDecoration.Text = \"None\";\n                drawFont.Dispose();\n            }\n            finally\n            {\n                fd.Dispose();\n            }\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void bColor_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tColorDialog cd = new ColorDialog();\n\t\t\tcd.AnyColor = true;\n\t\t\tcd.FullOpen = true;\n\t\t\t\n\t\t\tcd.CustomColors = RdlDesigner.GetCustomColors();\n\t\t\tcd.Color = \n\t\t\t\tDesignerUtility.ColorFromHtml(cbColor.Text, System.Drawing.Color.Black);\n            try\n            {\n                if (cd.ShowDialog() != DialogResult.OK)\n                    return;\n\n                RdlDesigner.SetCustomColors(cd.CustomColors);\n                if (sender == this.bColor)\n                    cbColor.Text = ColorTranslator.ToHtml(cd.Color);\n            }\n            finally\n            {\n                cd.Dispose();\n            }\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void cbFontFamily_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfFontFamily = true;\n\t\t}\n\n\t\tprivate void cbFontSize_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfFontSize = true;\n\t\t}\n\n\t\tprivate void cbFontStyle_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfFontStyle = true;\n\t\t}\n\n\t\tprivate void cbFontWeight_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfFontWeight = true;\n\t\t}\n\n\t\tprivate void cbColor_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfColor = true;\n\t\t}\n\n\t\tprivate void cbTextDecoration_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfTextDecoration = true;\n\t\t}\n\n\t\tprivate void cbHorzAlign_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfHorzAlign = true;\n\t\t}\n\n\t\tprivate void cbVerticalAlign_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfVerticalAlign = true;\n\t\t}\n\n\t\tprivate void cbDirection_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfDirection = true;\n\t\t}\n\n\t\tprivate void cbWritingMode_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfWritingMode = true;\n\t\t}\n\n\t\tprivate void cbFormat_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfFormat = true;\n\t\t}\n\n\t\tprivate void bExpr_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tButton b = sender as Button;\n\t\t\tif (b == null)\n\t\t\t\treturn;\n\t\t\tControl c = null;\n\t\t\tbool bColor=false;\n\t\t\tswitch (b.Tag as string)\n\t\t\t{\n\t\t\t\tcase \"family\":\n\t\t\t\t\tc = cbFontFamily;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"style\":\n\t\t\t\t\tc = cbFontStyle;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"color\":\n\t\t\t\t\tc = cbColor;\n\t\t\t\t\tbColor = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"size\":\n\t\t\t\t\tc = cbFontSize;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"weight\":\n\t\t\t\t\tc = cbFontWeight;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"decoration\":\n\t\t\t\t\tc = cbTextDecoration;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"halign\":\n\t\t\t\t\tc = cbHorzAlign;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"valign\":\n\t\t\t\t\tc = cbVerticalAlign;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"direction\":\n\t\t\t\t\tc = cbDirection;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"writing\":\n\t\t\t\t\tc = cbWritingMode;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"format\":\n\t\t\t\t\tc = cbFormat;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (c == null)\n\t\t\t\treturn;\n\n\t\t\tXmlNode sNode = _ReportItems[0];\n\n\t\t\tDialogExprEditor ee = new DialogExprEditor(_Draw, c.Text, sNode, bColor);\n            try\n            {\n                DialogResult dr = ee.ShowDialog();\n                if (dr == DialogResult.OK)\n                    c.Text = ee.Expression;\n            }\n            finally\n            {\n                ee.Dispose();\n            }\n\t\t\treturn;\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/FontCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"&gt;&gt;cbVerticalAlign.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bFont.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"cbFontWeight.Items12\" xml:space=\"preserve\">\n    <value>900</value>\n  </data>\n  <data name=\"&gt;&gt;bDirection.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;bColorEx.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontWeight.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label6.ZOrder\" xml:space=\"preserve\">\n    <value>13</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Direction</value>\n  </data>\n  <data name=\"&gt;&gt;label5.ZOrder\" xml:space=\"preserve\">\n    <value>14</value>\n  </data>\n  <data name=\"&gt;&gt;cbTextDecoration.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"button2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>13</value>\n  </data>\n  <data name=\"bVertical.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;bWrtMode.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbFormat.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontFamily.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbFontSize.Items2\" xml:space=\"preserve\">\n    <value>10pt</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 16</value>\n  </data>\n  <data name=\"groupBox1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"label10.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>27</value>\n  </data>\n  <data name=\"cbTextDecoration.Items1\" xml:space=\"preserve\">\n    <value>Underline</value>\n  </data>\n  <data name=\"cbVerticalAlign.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"cbFontWeight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>270, 48</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bSize.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"button2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>376, 82</value>\n  </data>\n  <data name=\"&gt;&gt;bWeight.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"bColor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"bColor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"cbWritingMode.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"cbFontStyle.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>72, 48</value>\n  </data>\n  <data name=\"cbFontWeight.Items\" xml:space=\"preserve\">\n    <value>Lighter</value>\n  </data>\n  <data name=\"cbVerticalAlign.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>304, 132</value>\n  </data>\n  <data name=\"&gt;&gt;cbVerticalAlign.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"cbWritingMode.Items\" xml:space=\"preserve\">\n    <value>lr-tb</value>\n  </data>\n  <data name=\"bFormat.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;bFormat.Name\" xml:space=\"preserve\">\n    <value>bFormat</value>\n  </data>\n  <data name=\"cbFormat.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>296, 21</value>\n  </data>\n  <data name=\"label11.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>29</value>\n  </data>\n  <data name=\"cbFontSize.Items12\" xml:space=\"preserve\">\n    <value>28pt</value>\n  </data>\n  <data name=\"cbWritingMode.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 21</value>\n  </data>\n  <data name=\"cbFontWeight.Items4\" xml:space=\"preserve\">\n    <value>100</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 112</value>\n  </data>\n  <data name=\"bWrtMode.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"cbFontSize.Items4\" xml:space=\"preserve\">\n    <value>12pt</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 48</value>\n  </data>\n  <data name=\"label10.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>49, 16</value>\n  </data>\n  <data name=\"cbDirection.Items\" xml:space=\"preserve\">\n    <value>LTR</value>\n  </data>\n  <data name=\"cbFontSize.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>270, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontSize.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"cbFontWeight.Items1\" xml:space=\"preserve\">\n    <value>Normal</value>\n  </data>\n  <data name=\"lFont.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label6.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 132</value>\n  </data>\n  <data name=\"label11.Text\" xml:space=\"preserve\">\n    <value>Size</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Name\" xml:space=\"preserve\">\n    <value>label10</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbFormat.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"cbFontSize.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>98, 21</value>\n  </data>\n  <data name=\"&gt;&gt;bWrtMode.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bColor.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"cbFontStyle.Items1\" xml:space=\"preserve\">\n    <value>Italic</value>\n  </data>\n  <data name=\"&gt;&gt;cbColor.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"bDirection.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"cbFontSize.Items15\" xml:space=\"preserve\">\n    <value>72pt</value>\n  </data>\n  <data name=\"&gt;&gt;bDirection.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label11.Name\" xml:space=\"preserve\">\n    <value>label11</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbFontSize.Items14\" xml:space=\"preserve\">\n    <value>48pt</value>\n  </data>\n  <data name=\"bFormat.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>384, 198</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontStyle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bSize.Name\" xml:space=\"preserve\">\n    <value>bSize</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bFormat.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"bDirection.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"cbFontFamily.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 21</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbDirection.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>72, 80</value>\n  </data>\n  <data name=\"bAlignment.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;cbWritingMode.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbColor.ZOrder\" xml:space=\"preserve\">\n    <value>13</value>\n  </data>\n  <data name=\"button2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"cbTextDecoration.Items\" xml:space=\"preserve\">\n    <value>None</value>\n  </data>\n  <data name=\"&gt;&gt;cbHorzAlign.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"lFont.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 16</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 23</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"bAlignment.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;bVertical.Name\" xml:space=\"preserve\">\n    <value>bVertical</value>\n  </data>\n  <data name=\"&gt;&gt;label11.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbFontWeight.Items5\" xml:space=\"preserve\">\n    <value>200</value>\n  </data>\n  <data name=\"&gt;&gt;bWeight.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;bColor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbTextDecoration.Name\" xml:space=\"preserve\">\n    <value>cbTextDecoration</value>\n  </data>\n  <data name=\"bAlignment.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>152, 134</value>\n  </data>\n  <data name=\"cbFontSize.Items\" xml:space=\"preserve\">\n    <value>8pt</value>\n  </data>\n  <data name=\"cbColor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontStyle.ZOrder\" xml:space=\"preserve\">\n    <value>15</value>\n  </data>\n  <data name=\"bFamily.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>176, 20</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>224, 80</value>\n  </data>\n  <data name=\"cbHorzAlign.Items\" xml:space=\"preserve\">\n    <value>Left</value>\n  </data>\n  <data name=\"cbDirection.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontFamily.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;bAlignment.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bVertical.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 16</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bFormat.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"&gt;&gt;lFont.Name\" xml:space=\"preserve\">\n    <value>lFont</value>\n  </data>\n  <data name=\"cbWritingMode.Items1\" xml:space=\"preserve\">\n    <value>tb-rl</value>\n  </data>\n  <data name=\"cbWritingMode.Items2\" xml:space=\"preserve\">\n    <value>tb-lr</value>\n  </data>\n  <data name=\"button2.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"label11.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 16</value>\n  </data>\n  <data name=\"cbVerticalAlign.Items2\" xml:space=\"preserve\">\n    <value>Bottom</value>\n  </data>\n  <data name=\"bSize.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"label9.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 80</value>\n  </data>\n  <data name=\"bFont.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;bVertical.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bColorEx.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Name\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;bFormat.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lFont.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Format</value>\n  </data>\n  <data name=\"bColorEx.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontFamily.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"label8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 16</value>\n  </data>\n  <data name=\"label11.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>224, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontSize.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bFamily.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bFamily.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbColor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 21</value>\n  </data>\n  <data name=\"cbHorzAlign.Items3\" xml:space=\"preserve\">\n    <value>General</value>\n  </data>\n  <data name=\"&gt;&gt;bStyle.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"bWeight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>376, 52</value>\n  </data>\n  <data name=\"&gt;&gt;cbDirection.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Name\" xml:space=\"preserve\">\n    <value>label8</value>\n  </data>\n  <data name=\"cbVerticalAlign.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 21</value>\n  </data>\n  <data name=\"cbFontWeight.Items6\" xml:space=\"preserve\">\n    <value>300</value>\n  </data>\n  <data name=\"cbFontStyle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 21</value>\n  </data>\n  <data name=\"bWrtMode.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>384, 166</value>\n  </data>\n  <data name=\"&gt;&gt;bFamily.Name\" xml:space=\"preserve\">\n    <value>bFamily</value>\n  </data>\n  <data name=\"&gt;&gt;bDirection.Name\" xml:space=\"preserve\">\n    <value>bDirection</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Name\" xml:space=\"preserve\">\n    <value>label9</value>\n  </data>\n  <data name=\"cbFontSize.Items11\" xml:space=\"preserve\">\n    <value>26pt</value>\n  </data>\n  <data name=\"bFamily.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontSize.ZOrder\" xml:space=\"preserve\">\n    <value>18</value>\n  </data>\n  <data name=\"&gt;&gt;bWrtMode.Name\" xml:space=\"preserve\">\n    <value>bWrtMode</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Name\" xml:space=\"preserve\">\n    <value>label7</value>\n  </data>\n  <data name=\"bColorEx.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>176, 82</value>\n  </data>\n  <data name=\"&gt;&gt;bColor.Name\" xml:space=\"preserve\">\n    <value>bColor</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontStyle.Name\" xml:space=\"preserve\">\n    <value>cbFontStyle</value>\n  </data>\n  <data name=\"&gt;&gt;lFont.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bFont.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"cbFontSize.Items7\" xml:space=\"preserve\">\n    <value>18pt</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 16</value>\n  </data>\n  <data name=\"cbFontFamily.Items\" xml:space=\"preserve\">\n    <value>Arial</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bFamily.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"groupBox1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 4</value>\n  </data>\n  <data name=\"&gt;&gt;bFont.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"cbFontStyle.Items\" xml:space=\"preserve\">\n    <value>Normal</value>\n  </data>\n  <data name=\"cbFontWeight.Items2\" xml:space=\"preserve\">\n    <value>Bold</value>\n  </data>\n  <data name=\"bSize.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;label11.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>Vertical</value>\n  </data>\n  <data name=\"&gt;&gt;cbWritingMode.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"bFormat.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"cbFormat.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>80, 196</value>\n  </data>\n  <data name=\"&gt;&gt;cbColor.Name\" xml:space=\"preserve\">\n    <value>cbColor</value>\n  </data>\n  <data name=\"cbDirection.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>80, 164</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 16</value>\n  </data>\n  <data name=\"label5.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>216, 132</value>\n  </data>\n  <data name=\"&gt;&gt;label10.ZOrder\" xml:space=\"preserve\">\n    <value>17</value>\n  </data>\n  <data name=\"label4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"&gt;&gt;button2.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"cbFontSize.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"bWrtMode.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;bColorEx.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"bColorEx.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbDirection.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"cbFontWeight.Items7\" xml:space=\"preserve\">\n    <value>400</value>\n  </data>\n  <data name=\"&gt;&gt;bAlignment.Name\" xml:space=\"preserve\">\n    <value>bAlignment</value>\n  </data>\n  <data name=\"&gt;&gt;label11.ZOrder\" xml:space=\"preserve\">\n    <value>19</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Decoration</value>\n  </data>\n  <data name=\"&gt;&gt;bFont.Name\" xml:space=\"preserve\">\n    <value>bFont</value>\n  </data>\n  <data name=\"bAlignment.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"bVertical.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;bColorEx.Name\" xml:space=\"preserve\">\n    <value>bColorEx</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>25</value>\n  </data>\n  <data name=\"&gt;&gt;cbColor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bFamily.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bColor.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Writing Mode</value>\n  </data>\n  <data name=\"&gt;&gt;cbWritingMode.Name\" xml:space=\"preserve\">\n    <value>cbWritingMode</value>\n  </data>\n  <data name=\"bStyle.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;cbWritingMode.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbHorzAlign.Items1\" xml:space=\"preserve\">\n    <value>Center</value>\n  </data>\n  <data name=\"bSize.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;cbHorzAlign.Name\" xml:space=\"preserve\">\n    <value>cbHorzAlign</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 196</value>\n  </data>\n  <data name=\"&gt;&gt;button2.Name\" xml:space=\"preserve\">\n    <value>button2</value>\n  </data>\n  <data name=\"bWeight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 16</value>\n  </data>\n  <data name=\"cbVerticalAlign.Items1\" xml:space=\"preserve\">\n    <value>Middle</value>\n  </data>\n  <data name=\"cbFontWeight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>98, 21</value>\n  </data>\n  <data name=\"&gt;&gt;button2.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"button2.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbFontFamily.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label8.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;cbFormat.Name\" xml:space=\"preserve\">\n    <value>cbFormat</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontSize.Name\" xml:space=\"preserve\">\n    <value>cbFontSize</value>\n  </data>\n  <data name=\"bStyle.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"bSize.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>376, 20</value>\n  </data>\n  <data name=\"cbHorzAlign.Items2\" xml:space=\"preserve\">\n    <value>Right</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Name\" xml:space=\"preserve\">\n    <value>label4</value>\n  </data>\n  <data name=\"&gt;&gt;cbTextDecoration.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bVertical.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;button2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbFontStyle.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"bFamily.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontFamily.Name\" xml:space=\"preserve\">\n    <value>cbFontFamily</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Style</value>\n  </data>\n  <data name=\"cbHorzAlign.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>FontCtl</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Font</value>\n  </data>\n  <data name=\"&gt;&gt;bWeight.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"button2.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"bWeight.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"label5.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;cbHorzAlign.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbTextDecoration.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbHorzAlign.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbTextDecoration.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>288, 80</value>\n  </data>\n  <data name=\"cbFontWeight.Items3\" xml:space=\"preserve\">\n    <value>Bolder</value>\n  </data>\n  <data name=\"cbFontSize.Items9\" xml:space=\"preserve\">\n    <value>22pt</value>\n  </data>\n  <data name=\"&gt;&gt;bSize.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbFontSize.Items1\" xml:space=\"preserve\">\n    <value>9pt</value>\n  </data>\n  <data name=\"&gt;&gt;cbVerticalAlign.Name\" xml:space=\"preserve\">\n    <value>cbVerticalAlign</value>\n  </data>\n  <data name=\"cbFontSize.Items3\" xml:space=\"preserve\">\n    <value>11pt</value>\n  </data>\n  <data name=\"bWrtMode.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"cbFontSize.Items5\" xml:space=\"preserve\">\n    <value>14pt</value>\n  </data>\n  <data name=\"cbFontSize.Items6\" xml:space=\"preserve\">\n    <value>16pt</value>\n  </data>\n  <data name=\"cbFontWeight.Items8\" xml:space=\"preserve\">\n    <value>500</value>\n  </data>\n  <data name=\"bWeight.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;bStyle.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;bFont.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Alignment</value>\n  </data>\n  <data name=\"&gt;&gt;bAlignment.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"bAlignment.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"bWrtMode.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;label7.ZOrder\" xml:space=\"preserve\">\n    <value>12</value>\n  </data>\n  <data name=\"bColorEx.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"cbWritingMode.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>304, 164</value>\n  </data>\n  <data name=\"&gt;&gt;bSize.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"cbFontSize.Items8\" xml:space=\"preserve\">\n    <value>20pt</value>\n  </data>\n  <data name=\"cbFontSize.Items13\" xml:space=\"preserve\">\n    <value>36pt</value>\n  </data>\n  <data name=\"bStyle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bDirection.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontStyle.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"bFont.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>401, 20</value>\n  </data>\n  <data name=\"&gt;&gt;label8.ZOrder\" xml:space=\"preserve\">\n    <value>11</value>\n  </data>\n  <data name=\"label8.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>216, 164</value>\n  </data>\n  <data name=\"bColorEx.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontWeight.ZOrder\" xml:space=\"preserve\">\n    <value>16</value>\n  </data>\n  <data name=\"&gt;&gt;bDirection.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bWrtMode.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"bColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>200, 82</value>\n  </data>\n  <data name=\"&gt;&gt;label9.ZOrder\" xml:space=\"preserve\">\n    <value>12</value>\n  </data>\n  <data name=\"cbHorzAlign.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>80, 132</value>\n  </data>\n  <data name=\"bFamily.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"bWeight.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"label10.Text\" xml:space=\"preserve\">\n    <value>Weight</value>\n  </data>\n  <data name=\"label9.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbTextDecoration.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"cbFontFamily.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>72, 16</value>\n  </data>\n  <data name=\"bFont.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bAlignment.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>456, 236</value>\n  </data>\n  <data name=\"bStyle.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>176, 52</value>\n  </data>\n  <data name=\"lFont.Text\" xml:space=\"preserve\">\n    <value>Family</value>\n  </data>\n  <data name=\"bDirection.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"bFamily.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"cbDirection.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 21</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontWeight.Name\" xml:space=\"preserve\">\n    <value>cbFontWeight</value>\n  </data>\n  <data name=\"&gt;&gt;bWrtMode.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>19</value>\n  </data>\n  <data name=\"label10.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>224, 48</value>\n  </data>\n  <data name=\"&gt;&gt;bVertical.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;cbFormat.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbHorzAlign.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 21</value>\n  </data>\n  <data name=\"cbFontWeight.Items9\" xml:space=\"preserve\">\n    <value>600</value>\n  </data>\n  <data name=\"&gt;&gt;bColorEx.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label9.Text\" xml:space=\"preserve\">\n    <value>Color</value>\n  </data>\n  <data name=\"bVertical.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;lFont.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;bFormat.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bAlignment.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"bVertical.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>384, 134</value>\n  </data>\n  <data name=\"cbDirection.Items1\" xml:space=\"preserve\">\n    <value>RTL</value>\n  </data>\n  <data name=\"bSize.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;bColor.ZOrder\" xml:space=\"preserve\">\n    <value>11</value>\n  </data>\n  <data name=\"&gt;&gt;label4.ZOrder\" xml:space=\"preserve\">\n    <value>15</value>\n  </data>\n  <data name=\"bVertical.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"lFont.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Name\" xml:space=\"preserve\">\n    <value>label5</value>\n  </data>\n  <data name=\"bWeight.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"bStyle.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;cbFormat.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label7.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;bWeight.Name\" xml:space=\"preserve\">\n    <value>bWeight</value>\n  </data>\n  <data name=\"bFormat.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"cbVerticalAlign.Items\" xml:space=\"preserve\">\n    <value>Top</value>\n  </data>\n  <data name=\"bFormat.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;cbVerticalAlign.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbFontWeight.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"label9.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>22</value>\n  </data>\n  <data name=\"bDirection.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>152, 166</value>\n  </data>\n  <data name=\"&gt;&gt;bStyle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbFontWeight.Items10\" xml:space=\"preserve\">\n    <value>700</value>\n  </data>\n  <data name=\"bSize.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;bStyle.Name\" xml:space=\"preserve\">\n    <value>bStyle</value>\n  </data>\n  <data name=\"&gt;&gt;cbDirection.Name\" xml:space=\"preserve\">\n    <value>cbDirection</value>\n  </data>\n  <data name=\"bDirection.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"bStyle.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbTextDecoration.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 21</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontWeight.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"label7.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 164</value>\n  </data>\n  <data name=\"cbFontSize.Items10\" xml:space=\"preserve\">\n    <value>24pt</value>\n  </data>\n  <data name=\"cbFontWeight.Items11\" xml:space=\"preserve\">\n    <value>800</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>14</value>\n  </data>\n  <data name=\"cbTextDecoration.Items3\" xml:space=\"preserve\">\n    <value>LineThrough</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Name\" xml:space=\"preserve\">\n    <value>label6</value>\n  </data>\n  <data name=\"label6.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"cbTextDecoration.Items2\" xml:space=\"preserve\">\n    <value>Overline</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/FontCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>90, 16</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Формат</value>\n  </data>\n  <data name=\"label5.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>232, 135</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 16</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>По вертикали</value>\n  </data>\n  <data name=\"label6.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>17, 132</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>89, 16</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Выравнивание</value>\n  </data>\n  <data name=\"label7.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>17, 164</value>\n  </data>\n  <data name=\"label7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>89, 16</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Направление</value>\n  </data>\n  <data name=\"label8.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>232, 168</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Режим записи</value>\n  </data>\n  <data name=\"lFont.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>6, 16</value>\n  </data>\n  <data name=\"lFont.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>70, 16</value>\n  </data>\n  <data name=\"lFont.Text\" xml:space=\"preserve\">\n    <value>Семейство</value>\n  </data>\n  <data name=\"bFont.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>428, 20</value>\n  </data>\n  <data name=\"cbVerticalAlign.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>331, 132</value>\n  </data>\n  <data name=\"cbHorzAlign.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>112, 132</value>\n  </data>\n  <data name=\"cbFormat.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>112, 196</value>\n  </data>\n  <data name=\"cbFormat.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>291, 21</value>\n  </data>\n  <data name=\"cbDirection.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>112, 164</value>\n  </data>\n  <data name=\"cbWritingMode.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>331, 164</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Оформление</value>\n  </data>\n  <data name=\"cbTextDecoration.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>297, 80</value>\n  </data>\n  <data name=\"cbTextDecoration.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>98, 21</value>\n  </data>\n  <data name=\"label9.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>6, 80</value>\n  </data>\n  <data name=\"label9.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>60, 16</value>\n  </data>\n  <data name=\"label9.Text\" xml:space=\"preserve\">\n    <value>Цвет</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>6, 48</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>58, 16</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Стиль</value>\n  </data>\n  <data name=\"cbFontWeight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>297, 48</value>\n  </data>\n  <data name=\"label10.Text\" xml:space=\"preserve\">\n    <value>Вес</value>\n  </data>\n  <data name=\"cbFontSize.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>297, 16</value>\n  </data>\n  <data name=\"label11.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>49, 16</value>\n  </data>\n  <data name=\"label11.Text\" xml:space=\"preserve\">\n    <value>Размер</value>\n  </data>\n  <data name=\"button2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>403, 82</value>\n  </data>\n  <data name=\"bWeight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>403, 52</value>\n  </data>\n  <data name=\"bSize.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>403, 20</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>456, 112</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Шрифт</value>\n  </data>\n  <data name=\"bAlignment.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>184, 134</value>\n  </data>\n  <data name=\"bDirection.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>184, 166</value>\n  </data>\n  <data name=\"bVertical.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>411, 134</value>\n  </data>\n  <data name=\"bWrtMode.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>411, 166</value>\n  </data>\n  <data name=\"bFormat.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>411, 198</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>480, 236</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/GridCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for ReportCtl.\n\t/// </summary>\n\tinternal class GridCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n        private List<XmlNode> _ReportItems;\n\t\tprivate DesignXmlDraw _Draw;\n\t\tbool fPBBefore, fPBAfter;\n        bool fCheckRows;\n\t\tprivate System.Windows.Forms.GroupBox groupBox1;\n\t\tprivate System.Windows.Forms.CheckBox chkPBBefore;\n        private System.Windows.Forms.CheckBox chkPBAfter;\n\t\tprivate System.Windows.Forms.GroupBox groupBox3;\n\t\tprivate System.Windows.Forms.CheckBox chkDetails;\n\t\tprivate System.Windows.Forms.CheckBox chkHeaderRows;\n\t\tprivate System.Windows.Forms.CheckBox chkFooterRows;\n        private CheckBox chkFooterRepeat;\n        private CheckBox chkHeaderRepeat;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n        public GridCtl(DesignXmlDraw dxDraw, List<XmlNode> ris)\n\t\t{\n\t\t\t_ReportItems = ris;\n\t\t\t_Draw = dxDraw;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues();\t\t\t\n\t\t}\n\n\t\tprivate void InitValues()\n\t\t{\n\t\t\tXmlNode riNode = _ReportItems[0];\n\n\t\t\tchkPBBefore.Checked = _Draw.GetElementValue(riNode, \"PageBreakAtStart\", \"false\").ToLower()==\"true\"? true:false;\n\t\t\tchkPBAfter.Checked = _Draw.GetElementValue(riNode, \"PageBreakAtEnd\", \"false\").ToLower()==\"true\"? true:false;\n\n\t\t\tthis.chkDetails.Checked = _Draw.GetNamedChildNode(riNode, \"Details\") != null;\n            XmlNode fNode = _Draw.GetNamedChildNode(riNode, \"Footer\");\n\t\t\tthis.chkFooterRows.Checked = fNode != null;\n            if (fNode != null)\n            {\n                chkFooterRepeat.Checked = _Draw.GetElementValue(fNode, \"RepeatOnNewPage\", \"false\").ToLower() == \"true\" ? true : false;\n            }\n            else\n                chkFooterRepeat.Enabled = false;\n\n            XmlNode hNode = _Draw.GetNamedChildNode(riNode, \"Header\");\n            this.chkHeaderRows.Checked = hNode != null;\n            if (hNode != null)\n            {\n                chkHeaderRepeat.Checked = _Draw.GetElementValue(hNode, \"RepeatOnNewPage\", \"false\").ToLower() == \"true\" ? true : false;\n            }\n            else\n                chkHeaderRepeat.Enabled = false;\n\n\t\t\tfPBBefore = fPBAfter = fCheckRows = false;\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GridCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.groupBox1 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.chkPBAfter = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkPBBefore = new System.Windows.Forms.CheckBox();\n\t\t\tthis.groupBox3 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.chkFooterRepeat = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkHeaderRepeat = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkFooterRows = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkHeaderRows = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkDetails = new System.Windows.Forms.CheckBox();\n\t\t\tthis.groupBox1.SuspendLayout();\n\t\t\tthis.groupBox3.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// groupBox1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox1, \"groupBox1\");\n\t\t\tthis.groupBox1.Controls.Add(this.chkPBAfter);\n\t\t\tthis.groupBox1.Controls.Add(this.chkPBBefore);\n\t\t\tthis.groupBox1.Name = \"groupBox1\";\n\t\t\tthis.groupBox1.TabStop = false;\n\t\t\t// \n\t\t\t// chkPBAfter\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkPBAfter, \"chkPBAfter\");\n\t\t\tthis.chkPBAfter.Name = \"chkPBAfter\";\n\t\t\tthis.chkPBAfter.CheckedChanged += new System.EventHandler(this.chkPBAfter_CheckedChanged);\n\t\t\t// \n\t\t\t// chkPBBefore\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkPBBefore, \"chkPBBefore\");\n\t\t\tthis.chkPBBefore.Name = \"chkPBBefore\";\n\t\t\tthis.chkPBBefore.CheckedChanged += new System.EventHandler(this.chkPBBefore_CheckedChanged);\n\t\t\t// \n\t\t\t// groupBox3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox3, \"groupBox3\");\n\t\t\tthis.groupBox3.Controls.Add(this.chkFooterRepeat);\n\t\t\tthis.groupBox3.Controls.Add(this.chkHeaderRepeat);\n\t\t\tthis.groupBox3.Controls.Add(this.chkFooterRows);\n\t\t\tthis.groupBox3.Controls.Add(this.chkHeaderRows);\n\t\t\tthis.groupBox3.Controls.Add(this.chkDetails);\n\t\t\tthis.groupBox3.Name = \"groupBox3\";\n\t\t\tthis.groupBox3.TabStop = false;\n\t\t\t// \n\t\t\t// chkFooterRepeat\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkFooterRepeat, \"chkFooterRepeat\");\n\t\t\tthis.chkFooterRepeat.Name = \"chkFooterRepeat\";\n\t\t\tthis.chkFooterRepeat.CheckedChanged += new System.EventHandler(this.chkRows_CheckedChanged);\n\t\t\t// \n\t\t\t// chkHeaderRepeat\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkHeaderRepeat, \"chkHeaderRepeat\");\n\t\t\tthis.chkHeaderRepeat.Name = \"chkHeaderRepeat\";\n\t\t\tthis.chkHeaderRepeat.CheckedChanged += new System.EventHandler(this.chkRows_CheckedChanged);\n\t\t\t// \n\t\t\t// chkFooterRows\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkFooterRows, \"chkFooterRows\");\n\t\t\tthis.chkFooterRows.Name = \"chkFooterRows\";\n\t\t\tthis.chkFooterRows.CheckedChanged += new System.EventHandler(this.chkRows_CheckedChanged);\n\t\t\t// \n\t\t\t// chkHeaderRows\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkHeaderRows, \"chkHeaderRows\");\n\t\t\tthis.chkHeaderRows.Name = \"chkHeaderRows\";\n\t\t\tthis.chkHeaderRows.CheckedChanged += new System.EventHandler(this.chkRows_CheckedChanged);\n\t\t\t// \n\t\t\t// chkDetails\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkDetails, \"chkDetails\");\n\t\t\tthis.chkDetails.Name = \"chkDetails\";\n\t\t\tthis.chkDetails.CheckedChanged += new System.EventHandler(this.chkRows_CheckedChanged);\n\t\t\t// \n\t\t\t// GridCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.groupBox3);\n\t\t\tthis.Controls.Add(this.groupBox1);\n\t\t\tthis.Name = \"GridCtl\";\n\t\t\tthis.groupBox1.ResumeLayout(false);\n\t\t\tthis.groupBox3.ResumeLayout(false);\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n  \n\t\tpublic bool IsValid()\n\t\t{\n\t\t\tif (this.chkDetails.Checked || this.chkFooterRows.Checked || this.chkHeaderRows.Checked)\n\t\t\t\treturn true;\n\n\t\t\tMessageBox.Show(Strings.GridCtl_Show_GridRegionsMustDefined, Strings.GridCtl_Show_Grid);\n\n\t\t\treturn false;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// take information in control and apply to all the style nodes\n\t\t\t//  Only change information that has been marked as modified;\n\t\t\t//   this way when group is selected it is possible to change just\n\t\t\t//   the items you want and keep the rest the same.\n\t\t\t\t\n\t\t\tforeach (XmlNode riNode in this._ReportItems)\n\t\t\t\tApplyChanges(riNode);\n\n\t\t\t// No more changes\n\t\t\tfPBBefore = fPBAfter = fCheckRows = false;\n\t\t}\n\n\t\tpublic void ApplyChanges(XmlNode node)\n\t\t{\n\t\t\tif (fPBBefore)\n\t\t\t\t_Draw.SetElement(node, \"PageBreakAtStart\", this.chkPBBefore.Checked? \"true\":\"false\");\n\t\t\tif (fPBAfter)\n\t\t\t\t_Draw.SetElement(node, \"PageBreakAtEnd\", this.chkPBAfter.Checked? \"true\":\"false\");\n\t\t\tif (fCheckRows)\n\t\t\t{\n\t\t\t\tif (this.chkDetails.Checked)\n\t\t\t\t\tCreateTableRow(node, \"Details\", false);\n\t\t\t\telse\n\t\t\t\t\t_Draw.RemoveElement(node, \"Details\");\n\t\t\t\tif (this.chkHeaderRows.Checked)\n\t\t\t\t\tCreateTableRow(node, \"Header\", chkHeaderRepeat.Checked);\n\t\t\t\telse\n\t\t\t\t\t_Draw.RemoveElement(node, \"Header\");\n\t\t\t\tif (this.chkFooterRows.Checked)\n\t\t\t\t\tCreateTableRow(node, \"Footer\", chkFooterRepeat.Checked);\n\t\t\t\telse\n\t\t\t\t\t_Draw.RemoveElement(node, \"Footer\");\n\t\t\t}\n\t\t}\n\n\t\tprivate void CreateTableRow(XmlNode tblNode, string elementName, bool bRepeatOnNewPage)\n\t\t{\n\t\t\tXmlNode node = _Draw.GetNamedChildNode(tblNode, elementName);\n\t\t\tif (node == null)\n\t\t\t{\n\t\t\t\tnode = _Draw.CreateElement(tblNode, elementName, null);\n\t\t\t\tXmlNode tblRows = _Draw.CreateElement(node, \"TableRows\", null);\n\t\t\t\t_Draw.InsertTableRow(tblRows);\n\t\t\t}\n            if (bRepeatOnNewPage)\n                _Draw.SetElement(node, \"RepeatOnNewPage\", \"true\");\n            else\n                _Draw.RemoveElement(node, \"RepeatOnNewPage\");\n\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void chkPBBefore_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPBBefore = true;\n\t\t}\n\n\t\tprivate void chkPBAfter_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPBAfter = true;\n\t\t}\n\n\t\tprivate void chkRows_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tthis.fCheckRows = true;\n            chkFooterRepeat.Enabled = chkFooterRows.Checked;\n            chkHeaderRepeat.Enabled = chkHeaderRows.Checked;\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/GridCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"chkFooterRepeat.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>272, 34</value>\n  </data>\n  <data name=\"chkFooterRows.Text\" xml:space=\"preserve\">\n    <value>Footer Rows</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"chkDetails.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBAfter.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;chkFooterRows.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;chkHeaderRepeat.Parent\" xml:space=\"preserve\">\n    <value>groupBox3</value>\n  </data>\n  <data name=\"&gt;&gt;chkFooterRepeat.Name\" xml:space=\"preserve\">\n    <value>chkFooterRepeat</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBBefore.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;chkHeaderRows.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>GridCtl</value>\n  </data>\n  <data name=\"chkDetails.Text\" xml:space=\"preserve\">\n    <value>Detail Rows</value>\n  </data>\n  <data name=\"chkPBBefore.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"chkHeaderRows.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"chkFooterRows.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"chkFooterRepeat.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>122, 30</value>\n  </data>\n  <data name=\"&gt;&gt;chkFooterRepeat.Parent\" xml:space=\"preserve\">\n    <value>groupBox3</value>\n  </data>\n  <data name=\"chkPBAfter.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>128, 24</value>\n  </data>\n  <data name=\"chkPBBefore.Text\" xml:space=\"preserve\">\n    <value>Insert before Grid</value>\n  </data>\n  <data name=\"chkPBAfter.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"chkFooterRepeat.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;chkFooterRows.Name\" xml:space=\"preserve\">\n    <value>chkFooterRows</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Page Breaks</value>\n  </data>\n  <data name=\"&gt;&gt;chkDetails.Parent\" xml:space=\"preserve\">\n    <value>groupBox3</value>\n  </data>\n  <data name=\"&gt;&gt;chkHeaderRepeat.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"chkPBAfter.Text\" xml:space=\"preserve\">\n    <value>Insert after Grid</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBAfter.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkHeaderRows.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"chkHeaderRepeat.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>144, 34</value>\n  </data>\n  <data name=\"groupBox3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 86</value>\n  </data>\n  <data name=\"chkPBAfter.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>192, 16</value>\n  </data>\n  <data name=\"chkFooterRepeat.Text\" xml:space=\"preserve\">\n    <value>Repeat footer on new page</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkDetails.Name\" xml:space=\"preserve\">\n    <value>chkDetails</value>\n  </data>\n  <data name=\"chkDetails.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 24</value>\n  </data>\n  <data name=\"chkHeaderRepeat.Text\" xml:space=\"preserve\">\n    <value>Repeat header on new page</value>\n  </data>\n  <data name=\"groupBox3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBBefore.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"groupBox1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 22</value>\n  </data>\n  <data name=\"&gt;&gt;chkHeaderRows.Name\" xml:space=\"preserve\">\n    <value>chkHeaderRows</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>400, 48</value>\n  </data>\n  <data name=\"&gt;&gt;chkFooterRows.Parent\" xml:space=\"preserve\">\n    <value>groupBox3</value>\n  </data>\n  <data name=\"chkHeaderRepeat.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>122, 30</value>\n  </data>\n  <data name=\"&gt;&gt;chkHeaderRows.Parent\" xml:space=\"preserve\">\n    <value>groupBox3</value>\n  </data>\n  <data name=\"groupBox1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox3.Name\" xml:space=\"preserve\">\n    <value>groupBox3</value>\n  </data>\n  <data name=\"&gt;&gt;chkHeaderRepeat.Name\" xml:space=\"preserve\">\n    <value>chkHeaderRepeat</value>\n  </data>\n  <data name=\"chkFooterRows.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 24</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox3.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBAfter.Name\" xml:space=\"preserve\">\n    <value>chkPBAfter</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBAfter.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"chkHeaderRows.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 24</value>\n  </data>\n  <data name=\"chkHeaderRows.Text\" xml:space=\"preserve\">\n    <value>Header Rows</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>472, 288</value>\n  </data>\n  <data name=\"&gt;&gt;chkDetails.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkFooterRows.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>272, 13</value>\n  </data>\n  <data name=\"chkDetails.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 13</value>\n  </data>\n  <data name=\"&gt;&gt;chkFooterRepeat.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkPBBefore.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"chkHeaderRows.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>144, 13</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBBefore.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkFooterRows.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkDetails.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;chkFooterRepeat.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Name\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"groupBox3.Text\" xml:space=\"preserve\">\n    <value>Include Grid Rows</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkHeaderRepeat.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkHeaderRepeat.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"chkPBBefore.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>128, 24</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBBefore.Name\" xml:space=\"preserve\">\n    <value>chkPBBefore</value>\n  </data>\n  <data name=\"groupBox3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>400, 64</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/GridCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"chkPBAfter.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 24</value>\n  </data>\n  <data name=\"chkPBAfter.Text\" xml:space=\"preserve\">\n    <value>Вставлять после сетки</value>\n  </data>\n  <data name=\"chkPBBefore.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>160, 24</value>\n  </data>\n  <data name=\"chkPBBefore.Text\" xml:space=\"preserve\">\n    <value>Вставлять перед сеткой</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>420, 48</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Разрывы страниц</value>\n  </data>\n  <data name=\"groupBox3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>420, 68</value>\n  </data>\n  <data name=\"groupBox3.Text\" xml:space=\"preserve\">\n    <value>Включение строк сетки</value>\n  </data>\n  <data name=\"chkFooterRepeat.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>142, 30</value>\n  </data>\n  <data name=\"chkFooterRepeat.Text\" xml:space=\"preserve\">\n    <value>Повторять окончание на новой странице</value>\n  </data>\n  <data name=\"chkHeaderRepeat.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>126, 34</value>\n  </data>\n  <data name=\"chkHeaderRepeat.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>140, 30</value>\n  </data>\n  <data name=\"chkHeaderRepeat.Text\" xml:space=\"preserve\">\n    <value>Повторять заголовок на новой странице</value>\n  </data>\n  <data name=\"chkFooterRows.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>142, 24</value>\n  </data>\n  <data name=\"chkFooterRows.Text\" xml:space=\"preserve\">\n    <value>Строки окончания</value>\n  </data>\n  <data name=\"chkHeaderRows.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>126, 13</value>\n  </data>\n  <data name=\"chkHeaderRows.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>140, 24</value>\n  </data>\n  <data name=\"chkHeaderRows.Text\" xml:space=\"preserve\">\n    <value>Строки заголовка</value>\n  </data>\n  <data name=\"chkDetails.Text\" xml:space=\"preserve\">\n    <value>Строки тела</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/GroupingCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.Text;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Grouping specification: used for DataRegions (List, Chart, Table, Matrix), DataSets, group instances\n\t/// </summary>\n\tinternal class GroupingCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n\t\tprivate DesignXmlDraw _Draw;\n\t\tprivate XmlNode _GroupingParent;\n\t\tprivate DataTable _DataTable;\n\n\t\tprivate System.Windows.Forms.Button bDelete;\n\t\tprivate System.Windows.Forms.Button bUp;\n\t\tprivate System.Windows.Forms.Button bDown;\n\t\tprivate System.Windows.Forms.DataGridView dgGroup;\n\t\tprivate System.Windows.Forms.Label label1;\n\t\tprivate System.Windows.Forms.TextBox tbName;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\tprivate System.Windows.Forms.Label label3;\n\t\tprivate System.Windows.Forms.ComboBox cbLabelExpr;\n\t\tprivate System.Windows.Forms.ComboBox cbParentExpr;\n\t\tprivate System.Windows.Forms.CheckBox chkPBS;\n\t\tprivate System.Windows.Forms.CheckBox chkPBE;\n\t\tprivate System.Windows.Forms.CheckBox chkRepeatHeader;\n\t\tprivate System.Windows.Forms.CheckBox chkGrpHeader;\n\t\tprivate System.Windows.Forms.CheckBox chkRepeatFooter;\n\t\tprivate System.Windows.Forms.CheckBox chkGrpFooter;\n\t\tprivate System.Windows.Forms.Label lParent;\n\t\tprivate System.Windows.Forms.Button bValueExpr;\n\t\tprivate System.Windows.Forms.Button bLabelExpr;\n\t\tprivate System.Windows.Forms.Button bParentExpr;\n        private Button BtnCercaFormulaEsclusione;\n        private TextBox TxtPageBreakCondition;\n        private Label label4;\n\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.Container components = null;\n\n\t\tinternal GroupingCtl(DesignXmlDraw dxDraw, XmlNode groupingParent)\n\t\t{\n\t\t\t_Draw = dxDraw;\n\t\t\t_GroupingParent = groupingParent;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues();\t\t\t\n\t\t}\n\n\t\tprivate void InitValues()\n\t\t{\n\t\t\t// Get the parent's dataset name\n//\t\t\tstring dataSetName = _Draw.GetDataSetNameValue(_GroupingParent);\n//\n//\t\t\tstring[] fields = _Draw.GetFields(dataSetName, true);\n//\t\t\tif (fields != null)\n//\t\t\t\tdgtbGE.CB.Items.AddRange(fields);\n\n\t\t\t// Initialize the DataTable\n\t\t\t_DataTable = new DataTable();\n\t\t\t_DataTable.Columns.Add(new DataColumn(\"Expression\", typeof(string)));\n\n\t\t\tstring[] rowValues = new string[1];\n\t\t\tXmlNode grouping = _Draw.GetNamedChildNode(_GroupingParent, \"Grouping\");\n\n\t\t\t// Handle the group expressions\n\t\t\tXmlNode groupingExs = _Draw.GetNamedChildNode(grouping, \"GroupExpressions\");\n\n\t\t\tif (groupingExs != null)\n\t\t\tforeach (XmlNode gNode in groupingExs.ChildNodes)\n\t\t\t{\n\t\t\t\tif (gNode.NodeType != XmlNodeType.Element || \n\t\t\t\t\t\tgNode.Name != \"GroupExpression\")\n\t\t\t\t\tcontinue;\n\t\t\t\trowValues[0] = gNode.InnerText;\n\n\t\t\t\t_DataTable.Rows.Add(rowValues);\n\t\t\t}\n\t\t\tthis.dgGroup.DataSource = _DataTable;\n\t\t\tdgGroup.Columns[0].Width = 330;\n\n\t\t\t//\n\t\t\tif (grouping == null)\n\t\t\t{\n\t\t\t\tthis.tbName.Text = \"\";\n\t\t\t\tthis.cbParentExpr.Text =  \"\";\n\t\t\t\tthis.cbLabelExpr.Text =  \"\";\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.chkPBE.Checked = _Draw.GetElementValue(grouping, \"PageBreakAtEnd\", \"false\").ToLower() == \"true\";\n\t\t\t\tthis.chkPBS.Checked = _Draw.GetElementValue(grouping, \"PageBreakAtStart\", \"false\").ToLower() == \"true\";\n\n\t\t\t\tthis.tbName.Text = _Draw.GetElementAttribute(grouping, \"Name\", \"\");\n\t\t\t\tthis.cbParentExpr.Text =  _Draw.GetElementValue(grouping, \"Parent\", \"\");\n\t\t\t\tthis.cbLabelExpr.Text =  _Draw.GetElementValue(grouping, \"Label\", \"\");\n                this.TxtPageBreakCondition.Text = _Draw.GetElementValue(grouping, \"PageBreakCondition\", \"\");\n            }\n\n\t\t\tif (_GroupingParent.Name == \"TableGroup\")\n\t\t\t{\n\t\t\t\tXmlNode repeat;\n\t\t\t\trepeat = DesignXmlDraw.FindNextInHierarchy(_GroupingParent, \"Header\", \"RepeatOnNewPage\");\n\t\t\t\tif (repeat != null)\n\t\t\t\t\tthis.chkRepeatHeader.Checked = repeat.InnerText.ToLower() == \"true\";\n\t\t\t\trepeat = DesignXmlDraw.FindNextInHierarchy(_GroupingParent, \"Footer\", \"RepeatOnNewPage\");\n\t\t\t\tif (repeat != null)\n\t\t\t\t\tthis.chkRepeatFooter.Checked = repeat.InnerText.ToLower() == \"true\";\n\t\t\t\tthis.chkGrpHeader.Checked = _Draw.GetNamedChildNode(_GroupingParent, \"Header\") != null;\n\t\t\t\tthis.chkGrpFooter.Checked = _Draw.GetNamedChildNode(_GroupingParent, \"Footer\") != null;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.chkRepeatFooter.Visible = false;\n\t\t\t\tthis.chkRepeatHeader.Visible = false;\n\t\t\t\tthis.chkGrpFooter.Visible = false;\n\t\t\t\tthis.chkGrpHeader.Visible = false;\n\t\t\t}\n\t\t\tif (_GroupingParent.Name == \"DynamicColumns\" ||\n\t\t\t\t_GroupingParent.Name == \"DynamicRows\")\n\t\t\t{\n\t\t\t\tthis.chkPBE.Visible = this.chkPBS.Visible = false;\n\t\t\t}\n\t\t\telse if (_GroupingParent.Name == \"DynamicSeries\" ||\n\t\t\t\t_GroupingParent.Name == \"DynamicCategories\")\n\t\t\t{\n\t\t\t\tthis.chkPBE.Visible = this.chkPBS.Visible = false;\n\t\t\t\tthis.cbParentExpr.Visible = this.lParent.Visible = false;\n\t\t\t\tthis.cbLabelExpr.Text =  _Draw.GetElementValue(_GroupingParent, \"Label\", \"\");\n                this.TxtPageBreakCondition.Text = _Draw.GetElementValue(grouping, \"PageBreakCondition\", \"\");\n            }\n\n\t\t\t// load label and parent controls with fields\n\t\t\tstring dsn = _Draw.GetDataSetNameValue(_GroupingParent);\n\t\t\tif (dsn != null)\t// found it\n\t\t\t{\n\t\t\t\tstring[] f = _Draw.GetFields(dsn, true);\n                if (f != null)\n                {\n                    this.cbParentExpr.Items.AddRange(f);\n                    this.cbLabelExpr.Items.AddRange(f);\n                }\n\t\t\t}\n\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GroupingCtl));\n            this.DoubleBuffered = true;\n            this.dgGroup = new System.Windows.Forms.DataGridView();\n            this.bDelete = new System.Windows.Forms.Button();\n            this.bUp = new System.Windows.Forms.Button();\n            this.bDown = new System.Windows.Forms.Button();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tbName = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.cbLabelExpr = new System.Windows.Forms.ComboBox();\n            this.cbParentExpr = new System.Windows.Forms.ComboBox();\n            this.lParent = new System.Windows.Forms.Label();\n            this.chkPBS = new System.Windows.Forms.CheckBox();\n            this.chkPBE = new System.Windows.Forms.CheckBox();\n            this.chkRepeatHeader = new System.Windows.Forms.CheckBox();\n            this.chkGrpHeader = new System.Windows.Forms.CheckBox();\n            this.chkRepeatFooter = new System.Windows.Forms.CheckBox();\n            this.chkGrpFooter = new System.Windows.Forms.CheckBox();\n            this.bValueExpr = new System.Windows.Forms.Button();\n            this.bLabelExpr = new System.Windows.Forms.Button();\n            this.bParentExpr = new System.Windows.Forms.Button();\n            this.BtnCercaFormulaEsclusione = new System.Windows.Forms.Button();\n            this.TxtPageBreakCondition = new System.Windows.Forms.TextBox();\n            this.label4 = new System.Windows.Forms.Label();\n            ((System.ComponentModel.ISupportInitialize)(this.dgGroup)).BeginInit();\n            this.SuspendLayout();\n            // \n            // dgGroup\n            // \n            resources.ApplyResources(this.dgGroup, \"dgGroup\");\n            this.dgGroup.Name = \"dgGroup\";\n            // \n            // bDelete\n            // \n            resources.ApplyResources(this.bDelete, \"bDelete\");\n            this.bDelete.Name = \"bDelete\";\n            this.bDelete.Click += new System.EventHandler(this.bDelete_Click);\n            // \n            // bUp\n            // \n            resources.ApplyResources(this.bUp, \"bUp\");\n            this.bUp.Name = \"bUp\";\n            this.bUp.Click += new System.EventHandler(this.bUp_Click);\n            // \n            // bDown\n            // \n            resources.ApplyResources(this.bDown, \"bDown\");\n            this.bDown.Name = \"bDown\";\n            this.bDown.Click += new System.EventHandler(this.bDown_Click);\n            // \n            // label1\n            // \n            resources.ApplyResources(this.label1, \"label1\");\n            this.label1.Name = \"label1\";\n            // \n            // tbName\n            // \n            resources.ApplyResources(this.tbName, \"tbName\");\n            this.tbName.Name = \"tbName\";\n            this.tbName.Validating += new System.ComponentModel.CancelEventHandler(this.tbName_Validating);\n            // \n            // label2\n            // \n            resources.ApplyResources(this.label2, \"label2\");\n            this.label2.Name = \"label2\";\n            // \n            // label3\n            // \n            resources.ApplyResources(this.label3, \"label3\");\n            this.label3.Name = \"label3\";\n            // \n            // cbLabelExpr\n            // \n            resources.ApplyResources(this.cbLabelExpr, \"cbLabelExpr\");\n            this.cbLabelExpr.Name = \"cbLabelExpr\";\n            // \n            // cbParentExpr\n            // \n            resources.ApplyResources(this.cbParentExpr, \"cbParentExpr\");\n            this.cbParentExpr.Name = \"cbParentExpr\";\n            // \n            // lParent\n            // \n            resources.ApplyResources(this.lParent, \"lParent\");\n            this.lParent.Name = \"lParent\";\n            // \n            // chkPBS\n            // \n            resources.ApplyResources(this.chkPBS, \"chkPBS\");\n            this.chkPBS.Name = \"chkPBS\";\n            // \n            // chkPBE\n            // \n            resources.ApplyResources(this.chkPBE, \"chkPBE\");\n            this.chkPBE.Name = \"chkPBE\";\n            // \n            // chkRepeatHeader\n            // \n            resources.ApplyResources(this.chkRepeatHeader, \"chkRepeatHeader\");\n            this.chkRepeatHeader.Name = \"chkRepeatHeader\";\n            // \n            // chkGrpHeader\n            // \n            resources.ApplyResources(this.chkGrpHeader, \"chkGrpHeader\");\n            this.chkGrpHeader.Name = \"chkGrpHeader\";\n            // \n            // chkRepeatFooter\n            // \n            resources.ApplyResources(this.chkRepeatFooter, \"chkRepeatFooter\");\n            this.chkRepeatFooter.Name = \"chkRepeatFooter\";\n            // \n            // chkGrpFooter\n            // \n            resources.ApplyResources(this.chkGrpFooter, \"chkGrpFooter\");\n            this.chkGrpFooter.Name = \"chkGrpFooter\";\n            // \n            // bValueExpr\n            // \n            resources.ApplyResources(this.bValueExpr, \"bValueExpr\");\n            this.bValueExpr.Name = \"bValueExpr\";\n            this.bValueExpr.Tag = \"value\";\n            this.bValueExpr.Click += new System.EventHandler(this.bValueExpr_Click);\n            // \n            // bLabelExpr\n            // \n            resources.ApplyResources(this.bLabelExpr, \"bLabelExpr\");\n            this.bLabelExpr.Name = \"bLabelExpr\";\n            this.bLabelExpr.Tag = \"label\";\n            this.bLabelExpr.Click += new System.EventHandler(this.bExpr_Click);\n            // \n            // bParentExpr\n            // \n            resources.ApplyResources(this.bParentExpr, \"bParentExpr\");\n            this.bParentExpr.Name = \"bParentExpr\";\n            this.bParentExpr.Tag = \"parent\";\n            this.bParentExpr.Click += new System.EventHandler(this.bExpr_Click);\n            // \n            // BtnCercaFormulaEsclusione\n            // \n            resources.ApplyResources(this.BtnCercaFormulaEsclusione, \"BtnCercaFormulaEsclusione\");\n            this.BtnCercaFormulaEsclusione.Name = \"BtnCercaFormulaEsclusione\";\n            this.BtnCercaFormulaEsclusione.Tag = \"value\";\n            this.BtnCercaFormulaEsclusione.Click += new System.EventHandler(this.BtnCercaFormulaEsclusione_Click);\n            // \n            // TxtPageBreakCondition\n            // \n            resources.ApplyResources(this.TxtPageBreakCondition, \"TxtPageBreakCondition\");\n            this.TxtPageBreakCondition.Name = \"TxtPageBreakCondition\";\n            // \n            // label4\n            // \n            resources.ApplyResources(this.label4, \"label4\");\n            this.label4.Name = \"label4\";\n            // \n            // GroupingCtl\n            // \n            this.Controls.Add(this.BtnCercaFormulaEsclusione);\n            this.Controls.Add(this.TxtPageBreakCondition);\n            this.Controls.Add(this.label4);\n            this.Controls.Add(this.bParentExpr);\n            this.Controls.Add(this.bLabelExpr);\n            this.Controls.Add(this.bValueExpr);\n            this.Controls.Add(this.chkRepeatFooter);\n            this.Controls.Add(this.chkGrpFooter);\n            this.Controls.Add(this.chkRepeatHeader);\n            this.Controls.Add(this.chkGrpHeader);\n            this.Controls.Add(this.chkPBE);\n            this.Controls.Add(this.chkPBS);\n            this.Controls.Add(this.cbParentExpr);\n            this.Controls.Add(this.lParent);\n            this.Controls.Add(this.cbLabelExpr);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.tbName);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.bDown);\n            this.Controls.Add(this.bUp);\n            this.Controls.Add(this.bDelete);\n            this.Controls.Add(this.dgGroup);\n            this.Name = \"GroupingCtl\";\n            resources.ApplyResources(this, \"$this\");\n            ((System.ComponentModel.ISupportInitialize)(this.dgGroup)).EndInit();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\t\tpublic bool IsValid()\n\t\t{\n\t\t\t// Check to see if we have an expression\n\t\t\tbool bRows=HasRows();\n\n\t\t\t// If no rows and no data \n\t\t\tif (!bRows && this.tbName.Text.Trim().Length == 0)\n\t\t\t{\n\t\t\t\tif (_GroupingParent.Name == \"Details\" ||\n\t\t\t\t\t_GroupingParent.Name == \"List\")\n\t\t\t\t\treturn true;\n\n\t\t\t\tMessageBox.Show(Strings.GroupingCtl_Show_GroupMustDefined, Strings.GroupingCtl_Show_Grouping);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Grouping must have name\n\t\t\tXmlNode grouping = _Draw.GetNamedChildNode(_GroupingParent, \"Grouping\");\n\t\t\tstring nerr = _Draw.GroupingNameCheck(grouping, this.tbName.Text);\n\t\t\tif (nerr != null)\n\t\t\t{\n\t\t\t\tMessageBox.Show(nerr, Strings.GroupingCtl_Show_GroupNameError);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (!bRows)\n\t\t\t{\n\t\t\t\tMessageBox.Show(Strings.GroupingCtl_Show_NoExpressionsForGroup, Strings.GroupingCtl_Show_Group);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (_GroupingParent.Name != \"DynamicSeries\")\n\t\t\t\treturn true;\n\t\t\t// DynamicSeries grouping must have a label for the legend\n\t\t\tif (this.cbLabelExpr.Text.Length > 0)\n\t\t\t\treturn true;\n\n\t\t\tMessageBox.Show(Strings.GroupingCtl_Show_ChartSeriesMustHaveLabelForLegend, Strings.GroupingCtl_Show_Chart);\n\n\t\t\treturn false;\n\t\t}\n\n\t\tprivate bool HasRows()\n\t\t{\n\t\t\tbool bRows=false;\n\t\t\tforeach (DataRow dr in _DataTable.Rows)\n\t\t\t{\n\t\t\t\tif (dr[0] == DBNull.Value)\n\t\t\t\t\tcontinue;\n\t\t\t\tstring ge = (string) dr[0];\n\t\t\t\tif (ge.Length <= 0)\n\t\t\t\t\tcontinue;\n\t\t\t\tbRows = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn bRows;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\tif (!HasRows())\t\t// No expressions in grouping; get rid of grouping\n\t\t\t{\n\t\t\t\t_Draw.RemoveElement(_GroupingParent, \"Grouping\");\t// can't have a grouping\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Get the group\n\t\t\tXmlNode grouping = _Draw.GetCreateNamedChildNode(_GroupingParent, \"Grouping\");\n\n\t\t\t_Draw.SetGroupName(grouping, tbName.Text.Trim());\n\t\t\t\n\t\t\t// Handle the label\n\t\t\tif (_GroupingParent.Name == \"DynamicSeries\" ||\n\t\t\t\t_GroupingParent.Name == \"DynamicCategories\")\n\t\t\t{\n\t\t\t\tif (this.cbLabelExpr.Text.Length > 0)\n\t\t\t\t\t_Draw.SetElement(_GroupingParent, \"Label\", cbLabelExpr.Text);\n\t\t\t\telse\n\t\t\t\t\t_Draw.RemoveElement(_GroupingParent, \"Label\");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n                // Entry point per formula di validazione\n                _Draw.SetElement(grouping, \"PageBreakCondition\", TxtPageBreakCondition.Text.Trim());\n\n                if (this.cbLabelExpr.Text.Length > 0)\n\t\t\t\t\t_Draw.SetElement(grouping, \"Label\", cbLabelExpr.Text);\n\t\t\t\telse\n\t\t\t\t\t_Draw.RemoveElement(grouping, \"Label\");\n\n\t\t\t\t_Draw.SetElement(grouping, \"PageBreakAtStart\", this.chkPBS.Checked? \"true\": \"false\");\n\t\t\t\t_Draw.SetElement(grouping, \"PageBreakAtEnd\", this.chkPBE.Checked? \"true\": \"false\");\n\t\t\t\tif (cbParentExpr.Text.Length > 0)\n\t\t\t\t\t_Draw.SetElement(grouping, \"Parent\", cbParentExpr.Text);\n\t\t\t\telse\n\t\t\t\t\t_Draw.RemoveElement(grouping, \"Parent\");\n\t\t\t}\n\n\n\t\t\t// Loop thru and add all the group expressions\n\t\t\tXmlNode grpExprs = _Draw.GetCreateNamedChildNode(grouping, \"GroupExpressions\");\n\t\t\tgrpExprs.RemoveAll();\n\t\t\tstring firstexpr=null;\n\t\t\tforeach (DataRow dr in _DataTable.Rows)\n\t\t\t{\n\t\t\t\tif (dr[0] == DBNull.Value)\n\t\t\t\t\tcontinue;\n\t\t\t\tstring ge = (string) dr[0];\n\t\t\t\tif (ge.Length <= 0)\n\t\t\t\t\tcontinue;\n\t\t\t\t_Draw.CreateElement(grpExprs, \"GroupExpression\", ge);\n\t\t\t\tif (firstexpr == null)\n\t\t\t\t\tfirstexpr = ge;\n\t\t\t}\n\t\t\tif (!grpExprs.HasChildNodes)\n\t\t\t{\t// With no group expressions there are no groups\n\t\t\t\tgrouping.RemoveChild(grpExprs);\n\t\t\t\tgrouping.ParentNode.RemoveChild(grouping);\n\t\t\t\tgrouping = null;\n\t\t\t}\n\n\t\t\tif (_GroupingParent.Name == \"TableGroup\" && grouping != null)\n\t\t\t{\n\t\t\t\tif (this.chkGrpHeader.Checked)\n\t\t\t\t{\n\t\t\t\t\tXmlNode header = _Draw.GetCreateNamedChildNode(_GroupingParent, \"Header\");\n\t\t\t\t\t_Draw.SetElement(header, \"RepeatOnNewPage\", chkRepeatHeader.Checked? \"true\": \"false\");\n\t\t\t\t\tXmlNode tblRows = _Draw.GetCreateNamedChildNode(header, \"TableRows\");\n\t\t\t\t\tif (!tblRows.HasChildNodes)\n\t\t\t\t\t{\t// We need to create a row\n\t\t\t\t\t\t_Draw.InsertTableRow(tblRows);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t_Draw.RemoveElement(_GroupingParent, \"Header\");\n\t\t\t\t}\n\n\t\t\t\tif (this.chkGrpFooter.Checked)\n\t\t\t\t{\n\t\t\t\t\tXmlNode footer = _Draw.GetCreateNamedChildNode(_GroupingParent, \"Footer\");\n\t\t\t\t\t_Draw.SetElement(footer, \"RepeatOnNewPage\", chkRepeatFooter.Checked? \"true\": \"false\");\n\t\t\t\t\tXmlNode tblRows = _Draw.GetCreateNamedChildNode(footer, \"TableRows\");\n\t\t\t\t\tif (!tblRows.HasChildNodes)\n\t\t\t\t\t{\t// We need to create a row\n\t\t\t\t\t\t_Draw.InsertTableRow(tblRows);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t_Draw.RemoveElement(_GroupingParent, \"Footer\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (_GroupingParent.Name == \"DynamicColumns\" ||\n\t\t\t\t\t _GroupingParent.Name == \"DynamicRows\")\n\t\t\t{\n\t\t\t\tXmlNode ritems = _Draw.GetNamedChildNode(_GroupingParent, \"ReportItems\");\n\t\t\t\tif (ritems == null)\n\t\t\t\t\tritems = _Draw.GetCreateNamedChildNode(_GroupingParent, \"ReportItems\");\n\t\t\t\tXmlNode item = ritems.FirstChild;\n\t\t\t\tif (item == null)\n\t\t\t\t{\n\t\t\t\t\titem = _Draw.GetCreateNamedChildNode(ritems, \"Textbox\");\n\t\t\t\t\tXmlNode vnode = _Draw.GetCreateNamedChildNode(item, \"Value\");\n\t\t\t\t\tvnode.InnerText = firstexpr == null? \"\": firstexpr;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprivate void bDelete_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cr = dgGroup.CurrentRow.Index;\n\t\t\tif (cr < 0)\t\t// already at the top\n\t\t\t\treturn;\n\t\t\telse if (cr == 0)\n\t\t\t{\n\t\t\t\tDataRow dr = _DataTable.Rows[0];\n\t\t\t\tdr[0] = null;\n\t\t\t}\n\n\t\t\tthis._DataTable.Rows.RemoveAt(cr);\n\t\t}\n\n\t\tprivate void bUp_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cr = dgGroup.CurrentRow.Index;\n\t\t\tif (cr <= 0)\t\t// already at the top\n\t\t\t\treturn;\n\t\t\t\n\t\t\tSwapRow(_DataTable.Rows[cr-1], _DataTable.Rows[cr]);\n\n            if (cr >= 0 && cr < dgGroup.Rows.Count)\n            {\n                dgGroup.CurrentCell = dgGroup.Rows[cr-1].Cells[0];\n            }\n        }\n\n\t\tprivate void bDown_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cr = dgGroup.CurrentRow.Index;\n\t\t\tif (cr < 0)\t\t\t// invalid index\n\t\t\t\treturn;\n\t\t\tif (cr + 1 >= _DataTable.Rows.Count)\n\t\t\t\treturn;\t\t\t// already at end\n\t\t\t\n\t\t\tSwapRow(_DataTable.Rows[cr+1], _DataTable.Rows[cr]);\n            if (cr >= 0 && cr < dgGroup.Rows.Count)\n            {\n                dgGroup.CurrentCell = dgGroup.Rows[cr + 1].Cells[0];\n            }\n        }\n\n        private void SwapRow(DataRow tdr, DataRow fdr)\n        {\n            // column 1\n            object save = tdr[0];\n            tdr[0] = fdr[0];\n            fdr[0] = save;\n\n            int columnCount = _DataTable.Columns.Count;\n            // column 2\n            if (columnCount > 1)\n            {\n                save = tdr[1];\n                tdr[1] = fdr[1];\n                fdr[1] = save;\n            }\n            // column 3\n            if (columnCount > 2)\n            {\n                save = tdr[2];\n                tdr[2] = fdr[2];\n                fdr[2] = save;\n            }\n            return;\n        }\n\n        private void tbName_Validating(object sender, System.ComponentModel.CancelEventArgs e)\n\t\t{\n\t\t\tbool bRows=HasRows();\n\n\t\t\t// If no rows and no data in name it's ok\n\t\t\tif (!bRows && this.tbName.Text.Trim().Length == 0)\n\t\t\t\treturn;\n\n\t\t\tif (!ReportNames.IsNameValid(tbName.Text))\n\t\t\t{\n\t\t\t\te.Cancel = true;\n\t\t\t\tMessageBox.Show(string.Format(Strings.GroupingCtl_Show_InvalidName, tbName.Text), Strings.GroupingCtl_Show_Name);\n\t\t\t}\n\t\t}\n\n\t\tprivate void bValueExpr_Click(object sender, System.EventArgs e)\n\t\t{\n            int cr = -1;\n            if (dgGroup.CurrentRow != null)\n            {\n                cr = dgGroup.CurrentRow.Index;\n            }\n            if (cr < 0)\n\t\t\t{\t// No rows yet; create one\n\t\t\t\tstring[] rowValues = new string[1];\n\t\t\t\trowValues[0] = null;\n\n\t\t\t\t_DataTable.Rows.Add(rowValues);\n\t\t\t\tcr = 0;\n\t\t\t}\n\n            DataGridViewCell dgc = dgGroup.CurrentCell;\n\t\t\tint cc = dgc.ColumnIndex;\n\t\t\tDataRow dr = _DataTable.Rows[cr];\n\t\t\tstring cv = dr[cc] as string;\n\n\t\t\tDialogExprEditor ee = new DialogExprEditor(_Draw, cv, _GroupingParent, false);\n            try\n            {\n                DialogResult dlgr = ee.ShowDialog();\n                if (dlgr == DialogResult.OK)\n                    dr[cc] = ee.Expression;\n            }\n            finally\n            {\n                ee.Dispose();\n            }\n\t\t}\n\n\t\tprivate void bExpr_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tButton b = sender as Button;\n\t\t\tif (b == null)\n\t\t\t\treturn;\n\t\t\tControl c = null;\n\t\t\tswitch (b.Tag as string)\n\t\t\t{\n\t\t\t\tcase \"label\":\n\t\t\t\t\tc = this.cbLabelExpr;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"parent\":\n\t\t\t\t\tc = this.cbParentExpr;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (c == null)\n\t\t\t\treturn;\n\n\t\t\tDialogExprEditor ee = new DialogExprEditor(_Draw, c.Text, _GroupingParent, false);\n            try\n            {\n                DialogResult dr = ee.ShowDialog();\n                if (dr == DialogResult.OK)\n                    c.Text = ee.Expression;\n            }\n            finally\n            {\n                ee.Dispose();\n            }\n\t\t\treturn;\n\t\t}\n\n        private void BtnCercaFormulaEsclusione_Click(object sender, EventArgs e)\n        {\n            Control c = TxtPageBreakCondition;\n            DialogExprEditor ee = new DialogExprEditor(_Draw, c.Text, _GroupingParent, false);\n            try\n            {\n                DialogResult dr = ee.ShowDialog();\n                if (dr == DialogResult.OK)\n                    c.Text = ee.Expression;\n            }\n            finally\n            {\n                ee.Dispose();\n            }\n            return;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/GroupingCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"dgGroup.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 48</value>\n  </data>\n  <data name=\"dgGroup.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>376, 88</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"dgGroup.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;dgGroup.Name\" xml:space=\"preserve\">\n    <value>dgGroup</value>\n  </data>\n  <data name=\"&gt;&gt;dgGroup.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dgGroup.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;dgGroup.ZOrder\" xml:space=\"preserve\">\n    <value>22</value>\n  </data>\n  <data name=\"bDelete.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>392, 69</value>\n  </data>\n  <data name=\"bDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 20</value>\n  </data>\n  <data name=\"bDelete.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"bDelete.Text\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Name\" xml:space=\"preserve\">\n    <value>bDelete</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.ZOrder\" xml:space=\"preserve\">\n    <value>21</value>\n  </data>\n  <data name=\"bUp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>392, 94</value>\n  </data>\n  <data name=\"bUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 20</value>\n  </data>\n  <data name=\"bUp.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"bUp.Text\" xml:space=\"preserve\">\n    <value>Up</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.Name\" xml:space=\"preserve\">\n    <value>bUp</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.ZOrder\" xml:space=\"preserve\">\n    <value>20</value>\n  </data>\n  <data name=\"bDown.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>392, 119</value>\n  </data>\n  <data name=\"bDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 20</value>\n  </data>\n  <data name=\"bDown.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"bDown.Text\" xml:space=\"preserve\">\n    <value>Down</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.Name\" xml:space=\"preserve\">\n    <value>bDown</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.ZOrder\" xml:space=\"preserve\">\n    <value>19</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 8</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 23</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>18</value>\n  </data>\n  <data name=\"tbName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>56, 8</value>\n  </data>\n  <data name=\"tbName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>328, 20</value>\n  </data>\n  <data name=\"tbName.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"tbName.Text\" xml:space=\"preserve\">\n    <value>textBox1</value>\n  </data>\n  <data name=\"&gt;&gt;tbName.Name\" xml:space=\"preserve\">\n    <value>tbName</value>\n  </data>\n  <data name=\"&gt;&gt;tbName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbName.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbName.ZOrder\" xml:space=\"preserve\">\n    <value>17</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 144</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 23</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Label</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>16</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 32</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 16</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Group By</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>15</value>\n  </data>\n  <data name=\"cbLabelExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>48, 144</value>\n  </data>\n  <data name=\"cbLabelExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>336, 21</value>\n  </data>\n  <data name=\"cbLabelExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"cbLabelExpr.Text\" xml:space=\"preserve\">\n    <value>comboBox1</value>\n  </data>\n  <data name=\"&gt;&gt;cbLabelExpr.Name\" xml:space=\"preserve\">\n    <value>cbLabelExpr</value>\n  </data>\n  <data name=\"&gt;&gt;cbLabelExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbLabelExpr.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbLabelExpr.ZOrder\" xml:space=\"preserve\">\n    <value>14</value>\n  </data>\n  <data name=\"cbParentExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>48, 176</value>\n  </data>\n  <data name=\"cbParentExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>336, 21</value>\n  </data>\n  <data name=\"cbParentExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"cbParentExpr.Text\" xml:space=\"preserve\">\n    <value>comboBox1</value>\n  </data>\n  <data name=\"&gt;&gt;cbParentExpr.Name\" xml:space=\"preserve\">\n    <value>cbParentExpr</value>\n  </data>\n  <data name=\"&gt;&gt;cbParentExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbParentExpr.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbParentExpr.ZOrder\" xml:space=\"preserve\">\n    <value>12</value>\n  </data>\n  <data name=\"lParent.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 176</value>\n  </data>\n  <data name=\"lParent.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 23</value>\n  </data>\n  <data name=\"lParent.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"lParent.Text\" xml:space=\"preserve\">\n    <value>Parent</value>\n  </data>\n  <data name=\"&gt;&gt;lParent.Name\" xml:space=\"preserve\">\n    <value>lParent</value>\n  </data>\n  <data name=\"&gt;&gt;lParent.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lParent.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lParent.ZOrder\" xml:space=\"preserve\">\n    <value>13</value>\n  </data>\n  <data name=\"chkPBS.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 208</value>\n  </data>\n  <data name=\"chkPBS.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>136, 24</value>\n  </data>\n  <data name=\"chkPBS.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"chkPBS.Text\" xml:space=\"preserve\">\n    <value>Page Break at Start</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBS.Name\" xml:space=\"preserve\">\n    <value>chkPBS</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBS.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBS.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBS.ZOrder\" xml:space=\"preserve\">\n    <value>11</value>\n  </data>\n  <data name=\"chkPBE.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>232, 208</value>\n  </data>\n  <data name=\"chkPBE.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>136, 24</value>\n  </data>\n  <data name=\"chkPBE.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"chkPBE.Text\" xml:space=\"preserve\">\n    <value>Page Break at End</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBE.Name\" xml:space=\"preserve\">\n    <value>chkPBE</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBE.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBE.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBE.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"chkRepeatHeader.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>232, 232</value>\n  </data>\n  <data name=\"chkRepeatHeader.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>136, 24</value>\n  </data>\n  <data name=\"chkRepeatHeader.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>13</value>\n  </data>\n  <data name=\"chkRepeatHeader.Text\" xml:space=\"preserve\">\n    <value>Repeat group header</value>\n  </data>\n  <data name=\"&gt;&gt;chkRepeatHeader.Name\" xml:space=\"preserve\">\n    <value>chkRepeatHeader</value>\n  </data>\n  <data name=\"&gt;&gt;chkRepeatHeader.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkRepeatHeader.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;chkRepeatHeader.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"chkGrpHeader.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 232</value>\n  </data>\n  <data name=\"chkGrpHeader.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>136, 24</value>\n  </data>\n  <data name=\"chkGrpHeader.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"chkGrpHeader.Text\" xml:space=\"preserve\">\n    <value>Include group header</value>\n  </data>\n  <data name=\"&gt;&gt;chkGrpHeader.Name\" xml:space=\"preserve\">\n    <value>chkGrpHeader</value>\n  </data>\n  <data name=\"&gt;&gt;chkGrpHeader.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkGrpHeader.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;chkGrpHeader.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"chkRepeatFooter.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>232, 256</value>\n  </data>\n  <data name=\"chkRepeatFooter.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>136, 24</value>\n  </data>\n  <data name=\"chkRepeatFooter.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>15</value>\n  </data>\n  <data name=\"chkRepeatFooter.Text\" xml:space=\"preserve\">\n    <value>Repeat group footer</value>\n  </data>\n  <data name=\"&gt;&gt;chkRepeatFooter.Name\" xml:space=\"preserve\">\n    <value>chkRepeatFooter</value>\n  </data>\n  <data name=\"&gt;&gt;chkRepeatFooter.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkRepeatFooter.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;chkRepeatFooter.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"chkGrpFooter.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 256</value>\n  </data>\n  <data name=\"chkGrpFooter.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>136, 24</value>\n  </data>\n  <data name=\"chkGrpFooter.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>14</value>\n  </data>\n  <data name=\"chkGrpFooter.Text\" xml:space=\"preserve\">\n    <value>Include group footer</value>\n  </data>\n  <data name=\"&gt;&gt;chkGrpFooter.Name\" xml:space=\"preserve\">\n    <value>chkGrpFooter</value>\n  </data>\n  <data name=\"&gt;&gt;chkGrpFooter.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkGrpFooter.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;chkGrpFooter.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"bValueExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"bValueExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>392, 48</value>\n  </data>\n  <data name=\"bValueExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"bValueExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>16</value>\n  </data>\n  <data name=\"bValueExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"bValueExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.Name\" xml:space=\"preserve\">\n    <value>bValueExpr</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"bLabelExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"bLabelExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>392, 147</value>\n  </data>\n  <data name=\"bLabelExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"bLabelExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>17</value>\n  </data>\n  <data name=\"bLabelExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"bLabelExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;bLabelExpr.Name\" xml:space=\"preserve\">\n    <value>bLabelExpr</value>\n  </data>\n  <data name=\"&gt;&gt;bLabelExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bLabelExpr.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bLabelExpr.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"bParentExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"bParentExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>392, 180</value>\n  </data>\n  <data name=\"bParentExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"bParentExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>18</value>\n  </data>\n  <data name=\"bParentExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"bParentExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;bParentExpr.Name\" xml:space=\"preserve\">\n    <value>bParentExpr</value>\n  </data>\n  <data name=\"&gt;&gt;bParentExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bParentExpr.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bParentExpr.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"BtnCercaFormulaEsclusione.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"BtnCercaFormulaEsclusione.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"BtnCercaFormulaEsclusione.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>503, 327</value>\n  </data>\n  <data name=\"BtnCercaFormulaEsclusione.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 29</value>\n  </data>\n  <data name=\"BtnCercaFormulaEsclusione.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>24</value>\n  </data>\n  <data name=\"BtnCercaFormulaEsclusione.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"BtnCercaFormulaEsclusione.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;BtnCercaFormulaEsclusione.Name\" xml:space=\"preserve\">\n    <value>BtnCercaFormulaEsclusione</value>\n  </data>\n  <data name=\"&gt;&gt;BtnCercaFormulaEsclusione.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;BtnCercaFormulaEsclusione.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;BtnCercaFormulaEsclusione.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"TxtPageBreakCondition.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 332</value>\n  </data>\n  <data name=\"TxtPageBreakCondition.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>489, 20</value>\n  </data>\n  <data name=\"TxtPageBreakCondition.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>23</value>\n  </data>\n  <data name=\"&gt;&gt;TxtPageBreakCondition.Name\" xml:space=\"preserve\">\n    <value>TxtPageBreakCondition</value>\n  </data>\n  <data name=\"&gt;&gt;TxtPageBreakCondition.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;TxtPageBreakCondition.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;TxtPageBreakCondition.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"label4.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>5, 302</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>318, 23</value>\n  </data>\n  <data name=\"label4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>22</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Page Break Condition</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Name\" xml:space=\"preserve\">\n    <value>label4</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label4.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>561, 473</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>GroupingCtl</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/GroupingCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>61, 20</value>\n  </data>\n  <data name=\"bDelete.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"bUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>61, 20</value>\n  </data>\n  <data name=\"bUp.Text\" xml:space=\"preserve\">\n    <value>Вверх</value>\n  </data>\n  <data name=\"bDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>61, 20</value>\n  </data>\n  <data name=\"bDown.Text\" xml:space=\"preserve\">\n    <value>Вниз</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>68, 23</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Название</value>\n  </data>\n  <data name=\"tbName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>82, 8</value>\n  </data>\n  <data name=\"tbName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>302, 20</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>49, 23</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Метка</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>105, 16</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Группировать по</value>\n  </data>\n  <data name=\"cbLabelExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>63, 144</value>\n  </data>\n  <data name=\"cbLabelExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>321, 21</value>\n  </data>\n  <data name=\"cbParentExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>63, 176</value>\n  </data>\n  <data name=\"cbParentExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>321, 21</value>\n  </data>\n  <data name=\"lParent.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>49, 23</value>\n  </data>\n  <data name=\"lParent.Text\" xml:space=\"preserve\">\n    <value>Предок</value>\n  </data>\n  <data name=\"chkPBS.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>195, 24</value>\n  </data>\n  <data name=\"chkPBS.Text\" xml:space=\"preserve\">\n    <value>Разрывать страницу в начале</value>\n  </data>\n  <data name=\"chkPBE.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>221, 24</value>\n  </data>\n  <data name=\"chkPBE.Text\" xml:space=\"preserve\">\n    <value>Разрывать страницу в конце</value>\n  </data>\n  <data name=\"chkRepeatHeader.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>221, 24</value>\n  </data>\n  <data name=\"chkRepeatHeader.Text\" xml:space=\"preserve\">\n    <value>Повторять заголовок группы</value>\n  </data>\n  <data name=\"chkGrpHeader.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>195, 24</value>\n  </data>\n  <data name=\"chkGrpHeader.Text\" xml:space=\"preserve\">\n    <value>Включать заголовок группы</value>\n  </data>\n  <data name=\"chkRepeatFooter.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>221, 24</value>\n  </data>\n  <data name=\"chkRepeatFooter.Text\" xml:space=\"preserve\">\n    <value>Повторять заголовок окончания</value>\n  </data>\n  <data name=\"chkGrpFooter.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>195, 24</value>\n  </data>\n  <data name=\"chkGrpFooter.Text\" xml:space=\"preserve\">\n    <value>Включать заголовок окончания</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/ImageCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for ReportCtl.\n\t/// </summary>\n\tinternal class ImageCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n        private List<XmlNode> _ReportItems;\n\t\tprivate DesignXmlDraw _Draw;\n\t\tbool fSource, fValue, fSizing, fMIMEType;\n\t\tprivate System.Windows.Forms.GroupBox groupBox1;\n\t\tprivate System.Windows.Forms.RadioButton rbExternal;\n\t\tprivate System.Windows.Forms.RadioButton rbDatabase;\n\t\tprivate System.Windows.Forms.Label label1;\n\t\tprivate System.Windows.Forms.ComboBox cbSizing;\n\t\tprivate System.Windows.Forms.ComboBox cbValueEmbedded;\n\t\tprivate System.Windows.Forms.ComboBox cbMIMEType;\n\t\tprivate System.Windows.Forms.ComboBox cbValueDatabase;\n\t\tprivate System.Windows.Forms.TextBox tbValueExternal;\n\t\tprivate System.Windows.Forms.Button bExternal;\n\t\tprivate System.Windows.Forms.RadioButton rbEmbedded;\n\t\tprivate System.Windows.Forms.Button bEmbedded;\n\t\tprivate System.Windows.Forms.Button bDatabaseExpr;\n\t\tprivate System.Windows.Forms.Button bMimeExpr;\n\t\tprivate System.Windows.Forms.Button bEmbeddedExpr;\n\t\tprivate System.Windows.Forms.Button bExternalExpr;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n        public ImageCtl(DesignXmlDraw dxDraw, List<XmlNode> ris)\n\t\t{\n\t\t\t_ReportItems = ris;\n\t\t\t_Draw = dxDraw;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues();\t\t\t\n\t\t}\n\n\t\tprivate void InitValues()\n\t\t{\n\t\t\tXmlNode iNode =  _ReportItems[0];\n\n\t\t\t// Populate the EmbeddedImage names\n\t\t\tcbValueEmbedded.Items.AddRange(_Draw.ReportNames.EmbeddedImageNames);\n\t\t\tstring[] flds = _Draw.GetReportItemDataRegionFields(iNode, true);\n\t\t\tif (flds != null)\n\t\t\t\tthis.cbValueDatabase.Items.AddRange(flds);\n\n\t\t\tstring source = _Draw.GetElementValue(iNode, \"Source\", \"Embedded\");\n\t\t\tstring val =  _Draw.GetElementValue(iNode, \"Value\", \"\");\n\t\t\tswitch (source)\n\t\t\t{\n\t\t\t\tcase \"Embedded\":\n\t\t\t\t\tthis.rbEmbedded.Checked = true;\n\t\t\t\t\tthis.cbValueEmbedded.Text = val;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Database\":\n\t\t\t\t\tthis.rbDatabase.Checked = true;\n\t\t\t\t\tthis.cbValueDatabase.Text = val;\n\t\t\t\t\tthis.cbMIMEType.Text = _Draw.GetElementValue(iNode, \"MIMEType\", \"image/png\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"External\":\n\t\t\t\tdefault:\n\t\t\t\t\tthis.rbExternal.Checked = true;\n\t\t\t\t\tthis.tbValueExternal.Text = val;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.cbSizing.Text = _Draw.GetElementValue(iNode, \"Sizing\", \"AutoSize\");\n\n\t\t\tfSource = fValue = fSizing = fMIMEType = false;\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ImageCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.groupBox1 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.bExternalExpr = new System.Windows.Forms.Button();\n\t\t\tthis.bEmbeddedExpr = new System.Windows.Forms.Button();\n\t\t\tthis.bMimeExpr = new System.Windows.Forms.Button();\n\t\t\tthis.bDatabaseExpr = new System.Windows.Forms.Button();\n\t\t\tthis.bEmbedded = new System.Windows.Forms.Button();\n\t\t\tthis.bExternal = new System.Windows.Forms.Button();\n\t\t\tthis.tbValueExternal = new System.Windows.Forms.TextBox();\n\t\t\tthis.cbValueDatabase = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbMIMEType = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbValueEmbedded = new System.Windows.Forms.ComboBox();\n\t\t\tthis.rbDatabase = new System.Windows.Forms.RadioButton();\n\t\t\tthis.rbEmbedded = new System.Windows.Forms.RadioButton();\n\t\t\tthis.rbExternal = new System.Windows.Forms.RadioButton();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.cbSizing = new System.Windows.Forms.ComboBox();\n\t\t\tthis.groupBox1.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// groupBox1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox1, \"groupBox1\");\n\t\t\tthis.groupBox1.Controls.Add(this.bExternalExpr);\n\t\t\tthis.groupBox1.Controls.Add(this.bEmbeddedExpr);\n\t\t\tthis.groupBox1.Controls.Add(this.bMimeExpr);\n\t\t\tthis.groupBox1.Controls.Add(this.bDatabaseExpr);\n\t\t\tthis.groupBox1.Controls.Add(this.bEmbedded);\n\t\t\tthis.groupBox1.Controls.Add(this.bExternal);\n\t\t\tthis.groupBox1.Controls.Add(this.tbValueExternal);\n\t\t\tthis.groupBox1.Controls.Add(this.cbValueDatabase);\n\t\t\tthis.groupBox1.Controls.Add(this.cbMIMEType);\n\t\t\tthis.groupBox1.Controls.Add(this.cbValueEmbedded);\n\t\t\tthis.groupBox1.Controls.Add(this.rbDatabase);\n\t\t\tthis.groupBox1.Controls.Add(this.rbEmbedded);\n\t\t\tthis.groupBox1.Controls.Add(this.rbExternal);\n\t\t\tthis.groupBox1.Name = \"groupBox1\";\n\t\t\tthis.groupBox1.TabStop = false;\n\t\t\t// \n\t\t\t// bExternalExpr\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bExternalExpr, \"bExternalExpr\");\n\t\t\tthis.bExternalExpr.Name = \"bExternalExpr\";\n\t\t\tthis.bExternalExpr.Tag = \"external\";\n\t\t\tthis.bExternalExpr.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bEmbeddedExpr\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bEmbeddedExpr, \"bEmbeddedExpr\");\n\t\t\tthis.bEmbeddedExpr.Name = \"bEmbeddedExpr\";\n\t\t\tthis.bEmbeddedExpr.Tag = \"embedded\";\n\t\t\tthis.bEmbeddedExpr.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bMimeExpr\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bMimeExpr, \"bMimeExpr\");\n\t\t\tthis.bMimeExpr.Name = \"bMimeExpr\";\n\t\t\tthis.bMimeExpr.Tag = \"mime\";\n\t\t\tthis.bMimeExpr.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bDatabaseExpr\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bDatabaseExpr, \"bDatabaseExpr\");\n\t\t\tthis.bDatabaseExpr.Name = \"bDatabaseExpr\";\n\t\t\tthis.bDatabaseExpr.Tag = \"database\";\n\t\t\tthis.bDatabaseExpr.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bEmbedded\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bEmbedded, \"bEmbedded\");\n\t\t\tthis.bEmbedded.Name = \"bEmbedded\";\n\t\t\tthis.bEmbedded.Click += new System.EventHandler(this.bEmbedded_Click);\n\t\t\t// \n\t\t\t// bExternal\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bExternal, \"bExternal\");\n\t\t\tthis.bExternal.Name = \"bExternal\";\n\t\t\tthis.bExternal.Click += new System.EventHandler(this.bExternal_Click);\n\t\t\t// \n\t\t\t// tbValueExternal\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbValueExternal, \"tbValueExternal\");\n\t\t\tthis.tbValueExternal.Name = \"tbValueExternal\";\n\t\t\tthis.tbValueExternal.TextChanged += new System.EventHandler(this.Value_TextChanged);\n\t\t\t// \n\t\t\t// cbValueDatabase\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbValueDatabase, \"cbValueDatabase\");\n\t\t\tthis.cbValueDatabase.Name = \"cbValueDatabase\";\n\t\t\tthis.cbValueDatabase.TextChanged += new System.EventHandler(this.Value_TextChanged);\n\t\t\t// \n\t\t\t// cbMIMEType\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbMIMEType, \"cbMIMEType\");\n\t\t\tthis.cbMIMEType.Items.AddRange(new object[] {\n            resources.GetString(\"cbMIMEType.Items\"),\n            resources.GetString(\"cbMIMEType.Items1\"),\n            resources.GetString(\"cbMIMEType.Items2\"),\n            resources.GetString(\"cbMIMEType.Items3\"),\n            resources.GetString(\"cbMIMEType.Items4\")});\n\t\t\tthis.cbMIMEType.Name = \"cbMIMEType\";\n\t\t\tthis.cbMIMEType.SelectedIndexChanged += new System.EventHandler(this.cbMIMEType_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// cbValueEmbedded\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbValueEmbedded, \"cbValueEmbedded\");\n\t\t\tthis.cbValueEmbedded.Name = \"cbValueEmbedded\";\n\t\t\tthis.cbValueEmbedded.TextChanged += new System.EventHandler(this.Value_TextChanged);\n\t\t\t// \n\t\t\t// rbDatabase\n\t\t\t// \n\t\t\tresources.ApplyResources(this.rbDatabase, \"rbDatabase\");\n\t\t\tthis.rbDatabase.Name = \"rbDatabase\";\n\t\t\tthis.rbDatabase.CheckedChanged += new System.EventHandler(this.rbSource_CheckedChanged);\n\t\t\t// \n\t\t\t// rbEmbedded\n\t\t\t// \n\t\t\tresources.ApplyResources(this.rbEmbedded, \"rbEmbedded\");\n\t\t\tthis.rbEmbedded.Name = \"rbEmbedded\";\n\t\t\tthis.rbEmbedded.CheckedChanged += new System.EventHandler(this.rbSource_CheckedChanged);\n\t\t\t// \n\t\t\t// rbExternal\n\t\t\t// \n\t\t\tresources.ApplyResources(this.rbExternal, \"rbExternal\");\n\t\t\tthis.rbExternal.Name = \"rbExternal\";\n\t\t\tthis.rbExternal.CheckedChanged += new System.EventHandler(this.rbSource_CheckedChanged);\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// cbSizing\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbSizing, \"cbSizing\");\n\t\t\tthis.cbSizing.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbSizing.Items.AddRange(new object[] {\n            resources.GetString(\"cbSizing.Items\"),\n            resources.GetString(\"cbSizing.Items1\"),\n            resources.GetString(\"cbSizing.Items2\"),\n            resources.GetString(\"cbSizing.Items3\")});\n\t\t\tthis.cbSizing.Name = \"cbSizing\";\n\t\t\tthis.cbSizing.SelectedIndexChanged += new System.EventHandler(this.cbSizing_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// ImageCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.cbSizing);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Controls.Add(this.groupBox1);\n\t\t\tthis.Name = \"ImageCtl\";\n\t\t\tthis.groupBox1.ResumeLayout(false);\n\t\t\tthis.groupBox1.PerformLayout();\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n       \tpublic bool IsValid()\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// take information in control and apply to all the style nodes\n\t\t\t//  Only change information that has been marked as modified;\n\t\t\t//   this way when group is selected it is possible to change just\n\t\t\t//   the items you want and keep the rest the same.\n\t\t\t\t\n\t\t\tforeach (XmlNode riNode in this._ReportItems)\n\t\t\t\tApplyChanges(riNode);\n\n\t\t\t// No more changes\n\t\t\tfSource = fValue = fSizing = fMIMEType = false;\n\t\t}\n\n\t\tpublic void ApplyChanges(XmlNode node)\n\t\t{\n\t\t\tif (fSource || fValue || fMIMEType)\n\t\t\t{\n\t\t\t\tstring source=\"\";\n\t\t\t\tstring val=\"\";\n\t\t\t\tif (rbEmbedded.Checked)\n\t\t\t\t{\n\t\t\t\t\tval = cbValueEmbedded.Text;\n\t\t\t\t\tsource = \"Embedded\";\n\t\t\t\t}\n\t\t\t\telse if (rbDatabase.Checked)\n\t\t\t\t{\n\t\t\t\t\tsource = \"Database\";\n\t\t\t\t\tval = cbValueDatabase.Text;\n\t\t\t\t\t_Draw.SetElement(node, \"MIMEType\", this.cbMIMEType.Text);\n\t\t\t\t}\n\t\t\t\telse \n\t\t\t\t{\t// must be external\n\t\t\t\t\tsource = \"External\";\n\t\t\t\t\tval = tbValueExternal.Text;\n\t\t\t\t}\n\t\t\t\t_Draw.SetElement(node, \"Source\", source);\n\t\t\t\t_Draw.SetElement(node, \"Value\", val);\n\t\t\t}\n\t\t\tif (fSizing)\n\t\t\t\t_Draw.SetElement(node, \"Sizing\", this.cbSizing.Text);\n\t\t}\n\n\t\tprivate void Value_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfValue = true;\n\t\t}\n\n\t\tprivate void cbMIMEType_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfMIMEType = true;\n\t\t}\n\n\t\tprivate void rbSource_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfSource = true;\n\t\t\tthis.cbValueDatabase.Enabled = this.cbMIMEType.Enabled = \n\t\t\t\tthis.bDatabaseExpr.Enabled = this.rbDatabase.Checked;\n\t\t\tthis.cbValueEmbedded.Enabled = this.bEmbeddedExpr.Enabled = \n\t\t\t\tthis.bEmbedded.Enabled = this.rbEmbedded.Checked;\n\t\t\tthis.tbValueExternal.Enabled = this.bExternalExpr.Enabled = \n\t\t\t\tthis.bExternal.Enabled = this.rbExternal.Checked;\n\t\t}\n\n\t\tprivate void cbSizing_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfSizing = true;\n\t\t}\n\n\t\tprivate void bExternal_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tOpenFileDialog ofd = new OpenFileDialog();\n\t\t\tofd.Filter = Strings.ImageCtl_bExternal_Click_ImageFilesFilter;\n\t\t\tofd.FilterIndex = 6;\n\t\t\tofd.CheckFileExists = true;\n            try\n            {\n                if (ofd.ShowDialog(this) == DialogResult.OK)\n                {\n                    tbValueExternal.Text = ofd.FileName;\n                }\n            }\n            finally\n            {\n                ofd.Dispose();\n            }\n\t\t}\n\n\t\tprivate void bEmbedded_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tDialogEmbeddedImages dlgEI = new DialogEmbeddedImages(this._Draw);\n\t\t\tdlgEI.StartPosition = FormStartPosition.CenterParent;\n            try\n            {\n                DialogResult dr = dlgEI.ShowDialog();\n                if (dr != DialogResult.OK)\n                    return;\n            }\n            finally\n            {\n                dlgEI.Dispose();\n            }\n\t\t\t// Populate the EmbeddedImage names\n\t\t\tcbValueEmbedded.Items.Clear();\n\t\t\tcbValueEmbedded.Items.AddRange(_Draw.ReportNames.EmbeddedImageNames);\n\n\t\t}\n\t\tprivate void bExpr_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tButton b = sender as Button;\n\t\t\tif (b == null)\n\t\t\t\treturn;\n\t\t\tControl c = null;\n\t\t\tswitch (b.Tag as string)\n\t\t\t{\n\t\t\t\tcase \"external\":\n\t\t\t\t\tc = tbValueExternal;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"embedded\":\n\t\t\t\t\tc = cbValueEmbedded;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"mime\":\n\t\t\t\t\tc = cbMIMEType;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"database\":\n\t\t\t\t\tc = cbValueDatabase;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (c == null)\n\t\t\t\treturn;\n\n\t\t\tXmlNode sNode = _ReportItems[0];\n\n\t\t\tDialogExprEditor ee = new DialogExprEditor(_Draw, c.Text, sNode);\n            try\n            {\n                DialogResult dr = ee.ShowDialog();\n                if (dr == DialogResult.OK)\n                    c.Text = ee.Expression;\n            }\n            finally\n            {\n                ee.Dispose();\n            }\n            \n            return;\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/ImageCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"&gt;&gt;bExternal.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;bMimeExpr.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bExternalExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;bEmbedded.Name\" xml:space=\"preserve\">\n    <value>bEmbedded</value>\n  </data>\n  <data name=\"&gt;&gt;cbMIMEType.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"cbValueDatabase.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;cbSizing.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bDatabaseExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbDatabase.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"bExternalExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"rbEmbedded.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 56</value>\n  </data>\n  <data name=\"&gt;&gt;rbExternal.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"bEmbedded.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"bExternal.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;cbValueEmbedded.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"cbValueEmbedded.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"bMimeExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbValueExternal.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"bEmbedded.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"tbValueExternal.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>256, 20</value>\n  </data>\n  <data name=\"&gt;&gt;rbEmbedded.Name\" xml:space=\"preserve\">\n    <value>rbEmbedded</value>\n  </data>\n  <data name=\"bEmbedded.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>378, 58</value>\n  </data>\n  <data name=\"bDatabaseExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;rbDatabase.Name\" xml:space=\"preserve\">\n    <value>rbDatabase</value>\n  </data>\n  <data name=\"&gt;&gt;cbSizing.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bMimeExpr.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"cbSizing.Items1\" xml:space=\"preserve\">\n    <value>Fit</value>\n  </data>\n  <data name=\"&gt;&gt;cbMIMEType.Name\" xml:space=\"preserve\">\n    <value>cbMIMEType</value>\n  </data>\n  <data name=\"&gt;&gt;bEmbeddedExpr.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"cbValueDatabase.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>88, 120</value>\n  </data>\n  <data name=\"&gt;&gt;rbDatabase.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;bExternal.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;rbEmbedded.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"cbValueDatabase.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>256, 21</value>\n  </data>\n  <data name=\"bExternal.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"bEmbeddedExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"tbValueExternal.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>88, 24</value>\n  </data>\n  <data name=\"&gt;&gt;bMimeExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Name\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;bExternal.Name\" xml:space=\"preserve\">\n    <value>bExternal</value>\n  </data>\n  <data name=\"cbSizing.Items\" xml:space=\"preserve\">\n    <value>AutoSize</value>\n  </data>\n  <data name=\"&gt;&gt;cbSizing.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bExternalExpr.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"bDatabaseExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"bMimeExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"bEmbeddedExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;bExternalExpr.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"groupBox1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;rbEmbedded.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;rbExternal.ZOrder\" xml:space=\"preserve\">\n    <value>12</value>\n  </data>\n  <data name=\"&gt;&gt;cbMIMEType.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"bExternalExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"bDatabaseExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;tbValueExternal.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;cbValueEmbedded.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bExternal.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>378, 26</value>\n  </data>\n  <data name=\"cbMIMEType.Items\" xml:space=\"preserve\">\n    <value>image/bmp</value>\n  </data>\n  <data name=\"cbSizing.Items2\" xml:space=\"preserve\">\n    <value>FitProportional</value>\n  </data>\n  <data name=\"&gt;&gt;cbValueEmbedded.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;rbDatabase.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bEmbeddedExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbSizing.Name\" xml:space=\"preserve\">\n    <value>cbSizing</value>\n  </data>\n  <data name=\"&gt;&gt;tbValueExternal.Name\" xml:space=\"preserve\">\n    <value>tbValueExternal</value>\n  </data>\n  <data name=\"bDatabaseExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>352, 122</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;bEmbedded.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;cbValueEmbedded.Name\" xml:space=\"preserve\">\n    <value>cbValueEmbedded</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bEmbeddedExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;cbValueDatabase.Name\" xml:space=\"preserve\">\n    <value>cbValueDatabase</value>\n  </data>\n  <data name=\"&gt;&gt;bEmbedded.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bEmbeddedExpr.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"tbValueExternal.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"rbDatabase.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;cbMIMEType.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbMIMEType.Text\" xml:space=\"preserve\">\n    <value>image/jpeg</value>\n  </data>\n  <data name=\"groupBox1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"rbDatabase.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 88</value>\n  </data>\n  <data name=\"&gt;&gt;bExternalExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"rbExternal.Text\" xml:space=\"preserve\">\n    <value>External</value>\n  </data>\n  <data name=\"cbSizing.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>72, 184</value>\n  </data>\n  <data name=\"&gt;&gt;cbValueDatabase.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"rbDatabase.Text\" xml:space=\"preserve\">\n    <value>Database</value>\n  </data>\n  <data name=\"&gt;&gt;cbValueDatabase.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbMIMEType.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>88, 88</value>\n  </data>\n  <data name=\"&gt;&gt;bDatabaseExpr.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"rbExternal.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 24</value>\n  </data>\n  <data name=\"cbMIMEType.Items4\" xml:space=\"preserve\">\n    <value>image/x-png</value>\n  </data>\n  <data name=\"cbMIMEType.Items3\" xml:space=\"preserve\">\n    <value>image/png</value>\n  </data>\n  <data name=\"cbMIMEType.Items2\" xml:space=\"preserve\">\n    <value>image/gif</value>\n  </data>\n  <data name=\"cbMIMEType.Items1\" xml:space=\"preserve\">\n    <value>image/jpeg</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>472, 288</value>\n  </data>\n  <data name=\"bExternal.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"&gt;&gt;bDatabaseExpr.Name\" xml:space=\"preserve\">\n    <value>bDatabaseExpr</value>\n  </data>\n  <data name=\"&gt;&gt;bDatabaseExpr.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"cbSizing.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;rbExternal.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bExternalExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>352, 26</value>\n  </data>\n  <data name=\"cbValueEmbedded.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>256, 21</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bDatabaseExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;bExternalExpr.Name\" xml:space=\"preserve\">\n    <value>bExternalExpr</value>\n  </data>\n  <data name=\"bDatabaseExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"rbExternal.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 24</value>\n  </data>\n  <data name=\"bMimeExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;bExternal.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bEmbedded.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"rbEmbedded.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 23</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Sizing</value>\n  </data>\n  <data name=\"&gt;&gt;bEmbeddedExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bEmbeddedExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>352, 58</value>\n  </data>\n  <data name=\"cbSizing.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 21</value>\n  </data>\n  <data name=\"&gt;&gt;bEmbedded.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"cbMIMEType.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"bExternalExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"rbExternal.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;rbExternal.Name\" xml:space=\"preserve\">\n    <value>rbExternal</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Source</value>\n  </data>\n  <data name=\"bEmbeddedExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>408, 152</value>\n  </data>\n  <data name=\"&gt;&gt;cbValueDatabase.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"bMimeExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"bExternalExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bMimeExpr.Name\" xml:space=\"preserve\">\n    <value>bMimeExpr</value>\n  </data>\n  <data name=\"&gt;&gt;rbEmbedded.ZOrder\" xml:space=\"preserve\">\n    <value>11</value>\n  </data>\n  <data name=\"&gt;&gt;bEmbeddedExpr.Name\" xml:space=\"preserve\">\n    <value>bEmbeddedExpr</value>\n  </data>\n  <data name=\"rbEmbedded.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 24</value>\n  </data>\n  <data name=\"bMimeExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>184, 90</value>\n  </data>\n  <data name=\"cbValueEmbedded.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>88, 56</value>\n  </data>\n  <data name=\"rbEmbedded.Text\" xml:space=\"preserve\">\n    <value>Embedded</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>ImageCtl</value>\n  </data>\n  <data name=\"cbMIMEType.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 21</value>\n  </data>\n  <data name=\"rbDatabase.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 24</value>\n  </data>\n  <data name=\"bMimeExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"cbSizing.Items3\" xml:space=\"preserve\">\n    <value>Clip</value>\n  </data>\n  <data name=\"&gt;&gt;tbValueExternal.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 184</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/ImageCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bMimeExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>203, 90</value>\n  </data>\n  <data name=\"tbValueExternal.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>107, 24</value>\n  </data>\n  <data name=\"tbValueExternal.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>237, 20</value>\n  </data>\n  <data name=\"cbValueDatabase.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>107, 120</value>\n  </data>\n  <data name=\"cbValueDatabase.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>237, 21</value>\n  </data>\n  <data name=\"cbMIMEType.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>107, 88</value>\n  </data>\n  <data name=\"cbValueEmbedded.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>107, 56</value>\n  </data>\n  <data name=\"cbValueEmbedded.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>237, 21</value>\n  </data>\n  <data name=\"rbDatabase.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>93, 24</value>\n  </data>\n  <data name=\"rbDatabase.Text\" xml:space=\"preserve\">\n    <value>База данных</value>\n  </data>\n  <data name=\"rbEmbedded.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>93, 24</value>\n  </data>\n  <data name=\"rbEmbedded.Text\" xml:space=\"preserve\">\n    <value>Встроенный</value>\n  </data>\n  <data name=\"rbExternal.Text\" xml:space=\"preserve\">\n    <value>Внешний</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Источник</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>59, 181</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>58, 23</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Мастаб</value>\n  </data>\n  <data name=\"cbSizing.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>123, 181</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/InteractivityCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.IO;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for StyleCtl.\n\t/// </summary>\n\tinternal class InteractivityCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n        private List<XmlNode> _ReportItems;\n\t\tprivate DesignXmlDraw _Draw;\n        private List<DrillParameter> _DrillParameters;\n\t\t// flags for controlling whether syntax changed for a particular property\n\t\tprivate bool fBookmark, fAction, fHidden, fToggle;\n\t\tprivate System.Windows.Forms.GroupBox groupBox1;\n\t\tprivate System.Windows.Forms.GroupBox grpBoxVisibility;\n\t\tprivate System.Windows.Forms.Label label1;\n\t\tprivate System.Windows.Forms.TextBox tbBookmark;\n\t\tprivate System.Windows.Forms.RadioButton rbHyperlink;\n\t\tprivate System.Windows.Forms.RadioButton rbBookmarkLink;\n\t\tprivate System.Windows.Forms.RadioButton rbDrillthrough;\n\t\tprivate System.Windows.Forms.TextBox tbHyperlink;\n\t\tprivate System.Windows.Forms.TextBox tbBookmarkLink;\n\t\tprivate System.Windows.Forms.TextBox tbDrillthrough;\n\t\tprivate System.Windows.Forms.Button bParameters;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\tprivate System.Windows.Forms.Label label3;\n\t\tprivate System.Windows.Forms.TextBox tbHidden;\n\t\tprivate System.Windows.Forms.ComboBox cbToggle;\n\t\tprivate System.Windows.Forms.RadioButton rbNoAction;\n\t\tprivate System.Windows.Forms.Button bDrillthrough;\n\t\tprivate System.Windows.Forms.Button bHidden;\n\t\tprivate System.Windows.Forms.Button bBookmarkLink;\n\t\tprivate System.Windows.Forms.Button bHyperlink;\n\t\tprivate System.Windows.Forms.Button bBookmark;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n        internal InteractivityCtl(DesignXmlDraw dxDraw, List<XmlNode> reportItems)\n\t\t{\n\t\t\t_ReportItems = reportItems;\n\t\t\t_Draw = dxDraw;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues(_ReportItems[0]);\t\t\t\n\t\t}\n\n\t\tprivate void InitValues(XmlNode node)\n\t\t{\n\t\t\t\n\t\t\ttbBookmark.Text = _Draw.GetElementValue(node, \"Bookmark\", \"\");\n\t\t\t// Handle Action definition\n\t\t\tXmlNode aNode = _Draw.GetNamedChildNode(node, \"Action\");\n\t\t\tif (aNode == null)\n\t\t\t\trbNoAction.Checked = true;\n\t\t\telse\n\t\t\t{\n\t\t\t\tXmlNode vLink = _Draw.GetNamedChildNode(aNode, \"Hyperlink\");\n\t\t\t\tif (vLink != null)\n\t\t\t\t{\t// Hyperlink specified\n\t\t\t\t\trbHyperlink.Checked = true;\n\t\t\t\t\ttbHyperlink.Text = vLink.InnerText;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tvLink = _Draw.GetNamedChildNode(aNode, \"Drillthrough\");\n\t\t\t\t\tif (vLink != null)\n\t\t\t\t\t{\t// Drillthrough specified\n\t\t\t\t\t\trbDrillthrough.Checked = true;\n\t\t\t\t\t\ttbDrillthrough.Text =  _Draw.GetElementValue(vLink, \"ReportName\", \"\");\n                        _DrillParameters = new List<DrillParameter>();\n\t\t\t\t\t\tXmlNode pNodes = _Draw.GetNamedChildNode(vLink, \"Parameters\");\n\t\t\t\t\t\tif (pNodes != null)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tforeach (XmlNode pNode in pNodes.ChildNodes)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (pNode.Name != \"Parameter\")\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\tstring name = _Draw.GetElementAttribute(pNode, \"Name\", \"\");\n\t\t\t\t\t\t\t\tstring pvalue = _Draw.GetElementValue(pNode, \"Value\", \"\");\n\t\t\t\t\t\t\t\tstring omit = _Draw.GetElementValue(pNode, \"Omit\", \"false\");\n\t\t\t\t\t\t\t\tDrillParameter dp = new DrillParameter(name, pvalue, omit);\n\t\t\t\t\t\t\t\t_DrillParameters.Add(dp);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\t\n\t\t\t\t\t\tvLink = _Draw.GetNamedChildNode(aNode, \"BookmarkLink\");\n\t\t\t\t\t\tif (vLink != null)\n\t\t\t\t\t\t{\t// BookmarkLink specified\n\t\t\t\t\t\t\trbBookmarkLink.Checked = true;\n\t\t\t\t\t\t\tthis.tbBookmarkLink.Text = vLink.InnerText;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// Handle Visiblity definition\n\t\t\tXmlNode visNode = _Draw.GetNamedChildNode(node, \"Visibility\");\n\t\t\tif (visNode != null)\n\t\t\t{\n\t\t\t\tXmlNode hNode = _Draw.GetNamedChildNode(node, \"Visibility\");\n\t\t\t\tthis.tbHidden.Text = _Draw.GetElementValue(visNode, \"Hidden\", \"\");\n\t\t\t\tthis.cbToggle.Text = _Draw.GetElementValue(visNode, \"ToggleItem\", \"\");\n\t\t\t}\n\t\t\tIEnumerable list = _Draw.GetReportItems(\"//Textbox\");\n\t\t\tif (list != null)\n\t\t\t{\n\t\t\t\tforeach (XmlNode tNode in list)\n\t\t\t\t{\n\t\t\t\t\tXmlAttribute name = tNode.Attributes[\"Name\"];\n\t\t\t\t\tif (name != null && name.Value != null && name.Value.Length > 0)\n\t\t\t\t\t\tcbToggle.Items.Add(name.Value);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// nothing has changed now\n\t\t\tfBookmark = fAction = fHidden = fToggle = false;\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InteractivityCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.grpBoxVisibility = new System.Windows.Forms.GroupBox();\n\t\t\tthis.bHidden = new System.Windows.Forms.Button();\n\t\t\tthis.cbToggle = new System.Windows.Forms.ComboBox();\n\t\t\tthis.tbHidden = new System.Windows.Forms.TextBox();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.groupBox1 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.bBookmarkLink = new System.Windows.Forms.Button();\n\t\t\tthis.bHyperlink = new System.Windows.Forms.Button();\n\t\t\tthis.rbNoAction = new System.Windows.Forms.RadioButton();\n\t\t\tthis.bParameters = new System.Windows.Forms.Button();\n\t\t\tthis.bDrillthrough = new System.Windows.Forms.Button();\n\t\t\tthis.tbDrillthrough = new System.Windows.Forms.TextBox();\n\t\t\tthis.tbBookmarkLink = new System.Windows.Forms.TextBox();\n\t\t\tthis.tbHyperlink = new System.Windows.Forms.TextBox();\n\t\t\tthis.rbDrillthrough = new System.Windows.Forms.RadioButton();\n\t\t\tthis.rbBookmarkLink = new System.Windows.Forms.RadioButton();\n\t\t\tthis.rbHyperlink = new System.Windows.Forms.RadioButton();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.tbBookmark = new System.Windows.Forms.TextBox();\n\t\t\tthis.bBookmark = new System.Windows.Forms.Button();\n\t\t\tthis.grpBoxVisibility.SuspendLayout();\n\t\t\tthis.groupBox1.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// grpBoxVisibility\n\t\t\t// \n\t\t\tresources.ApplyResources(this.grpBoxVisibility, \"grpBoxVisibility\");\n\t\t\tthis.grpBoxVisibility.Controls.Add(this.bHidden);\n\t\t\tthis.grpBoxVisibility.Controls.Add(this.cbToggle);\n\t\t\tthis.grpBoxVisibility.Controls.Add(this.tbHidden);\n\t\t\tthis.grpBoxVisibility.Controls.Add(this.label3);\n\t\t\tthis.grpBoxVisibility.Controls.Add(this.label2);\n\t\t\tthis.grpBoxVisibility.Name = \"grpBoxVisibility\";\n\t\t\tthis.grpBoxVisibility.TabStop = false;\n\t\t\t// \n\t\t\t// bHidden\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bHidden, \"bHidden\");\n\t\t\tthis.bHidden.Name = \"bHidden\";\n\t\t\tthis.bHidden.Tag = \"visibility\";\n\t\t\tthis.bHidden.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// cbToggle\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbToggle, \"cbToggle\");\n\t\t\tthis.cbToggle.Name = \"cbToggle\";\n\t\t\tthis.cbToggle.SelectedIndexChanged += new System.EventHandler(this.cbToggle_SelectedIndexChanged);\n\t\t\tthis.cbToggle.TextChanged += new System.EventHandler(this.cbToggle_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// tbHidden\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbHidden, \"tbHidden\");\n\t\t\tthis.tbHidden.Name = \"tbHidden\";\n\t\t\tthis.tbHidden.TextChanged += new System.EventHandler(this.tbHidden_TextChanged);\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// groupBox1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox1, \"groupBox1\");\n\t\t\tthis.groupBox1.Controls.Add(this.bBookmarkLink);\n\t\t\tthis.groupBox1.Controls.Add(this.bHyperlink);\n\t\t\tthis.groupBox1.Controls.Add(this.rbNoAction);\n\t\t\tthis.groupBox1.Controls.Add(this.bParameters);\n\t\t\tthis.groupBox1.Controls.Add(this.bDrillthrough);\n\t\t\tthis.groupBox1.Controls.Add(this.tbDrillthrough);\n\t\t\tthis.groupBox1.Controls.Add(this.tbBookmarkLink);\n\t\t\tthis.groupBox1.Controls.Add(this.tbHyperlink);\n\t\t\tthis.groupBox1.Controls.Add(this.rbDrillthrough);\n\t\t\tthis.groupBox1.Controls.Add(this.rbBookmarkLink);\n\t\t\tthis.groupBox1.Controls.Add(this.rbHyperlink);\n\t\t\tthis.groupBox1.Name = \"groupBox1\";\n\t\t\tthis.groupBox1.TabStop = false;\n\t\t\t// \n\t\t\t// bBookmarkLink\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bBookmarkLink, \"bBookmarkLink\");\n\t\t\tthis.bBookmarkLink.Name = \"bBookmarkLink\";\n\t\t\tthis.bBookmarkLink.Tag = \"bookmarklink\";\n\t\t\tthis.bBookmarkLink.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bHyperlink\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bHyperlink, \"bHyperlink\");\n\t\t\tthis.bHyperlink.Name = \"bHyperlink\";\n\t\t\tthis.bHyperlink.Tag = \"hyperlink\";\n\t\t\tthis.bHyperlink.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// rbNoAction\n\t\t\t// \n\t\t\tresources.ApplyResources(this.rbNoAction, \"rbNoAction\");\n\t\t\tthis.rbNoAction.Name = \"rbNoAction\";\n\t\t\tthis.rbNoAction.CheckedChanged += new System.EventHandler(this.rbAction_CheckedChanged);\n\t\t\t// \n\t\t\t// bParameters\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bParameters, \"bParameters\");\n\t\t\tthis.bParameters.Name = \"bParameters\";\n\t\t\tthis.bParameters.Click += new System.EventHandler(this.bParameters_Click);\n\t\t\t// \n\t\t\t// bDrillthrough\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bDrillthrough, \"bDrillthrough\");\n\t\t\tthis.bDrillthrough.Name = \"bDrillthrough\";\n\t\t\tthis.bDrillthrough.Click += new System.EventHandler(this.bDrillthrough_Click);\n\t\t\t// \n\t\t\t// tbDrillthrough\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbDrillthrough, \"tbDrillthrough\");\n\t\t\tthis.tbDrillthrough.Name = \"tbDrillthrough\";\n\t\t\tthis.tbDrillthrough.TextChanged += new System.EventHandler(this.tbAction_TextChanged);\n\t\t\t// \n\t\t\t// tbBookmarkLink\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbBookmarkLink, \"tbBookmarkLink\");\n\t\t\tthis.tbBookmarkLink.Name = \"tbBookmarkLink\";\n\t\t\tthis.tbBookmarkLink.TextChanged += new System.EventHandler(this.tbAction_TextChanged);\n\t\t\t// \n\t\t\t// tbHyperlink\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbHyperlink, \"tbHyperlink\");\n\t\t\tthis.tbHyperlink.Name = \"tbHyperlink\";\n\t\t\tthis.tbHyperlink.TextChanged += new System.EventHandler(this.tbAction_TextChanged);\n\t\t\t// \n\t\t\t// rbDrillthrough\n\t\t\t// \n\t\t\tresources.ApplyResources(this.rbDrillthrough, \"rbDrillthrough\");\n\t\t\tthis.rbDrillthrough.Name = \"rbDrillthrough\";\n\t\t\tthis.rbDrillthrough.CheckedChanged += new System.EventHandler(this.rbAction_CheckedChanged);\n\t\t\t// \n\t\t\t// rbBookmarkLink\n\t\t\t// \n\t\t\tresources.ApplyResources(this.rbBookmarkLink, \"rbBookmarkLink\");\n\t\t\tthis.rbBookmarkLink.Name = \"rbBookmarkLink\";\n\t\t\tthis.rbBookmarkLink.CheckedChanged += new System.EventHandler(this.rbAction_CheckedChanged);\n\t\t\t// \n\t\t\t// rbHyperlink\n\t\t\t// \n\t\t\tresources.ApplyResources(this.rbHyperlink, \"rbHyperlink\");\n\t\t\tthis.rbHyperlink.Name = \"rbHyperlink\";\n\t\t\tthis.rbHyperlink.CheckedChanged += new System.EventHandler(this.rbAction_CheckedChanged);\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// tbBookmark\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbBookmark, \"tbBookmark\");\n\t\t\tthis.tbBookmark.Name = \"tbBookmark\";\n\t\t\t// \n\t\t\t// bBookmark\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bBookmark, \"bBookmark\");\n\t\t\tthis.bBookmark.Name = \"bBookmark\";\n\t\t\tthis.bBookmark.Tag = \"bookmark\";\n\t\t\tthis.bBookmark.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// InteractivityCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.bBookmark);\n\t\t\tthis.Controls.Add(this.tbBookmark);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Controls.Add(this.groupBox1);\n\t\t\tthis.Controls.Add(this.grpBoxVisibility);\n\t\t\tthis.Name = \"InteractivityCtl\";\n\t\t\tthis.grpBoxVisibility.ResumeLayout(false);\n\t\t\tthis.grpBoxVisibility.PerformLayout();\n\t\t\tthis.groupBox1.ResumeLayout(false);\n\t\t\tthis.groupBox1.PerformLayout();\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n \n        public bool IsValid()\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// take information in control and apply to all the style nodes\n\t\t\t//  Only change information that has been marked as modified;\n\t\t\t//   this way when group is selected it is possible to change just\n\t\t\t//   the items you want and keep the rest the same.\n\n\t\t\tforeach (XmlNode riNode in this._ReportItems)\n\t\t\t\tApplyChanges(riNode);\n\n\t\t\t// nothing has changed now\n\t\t\tfBookmark = fAction = fHidden = fToggle = false;\n\t\t}\n\n\t\tprivate void ApplyChanges(XmlNode rNode)\n\t\t{\n\t\t\tif (fBookmark)\n\t\t\t\t_Draw.SetElement(rNode, \"Bookmark\", tbBookmark.Text);\n\n\t\t\tif (fHidden || fToggle)\n\t\t\t{\n\t\t\t\tXmlNode visNode = _Draw.SetElement(rNode, \"Visibility\", null);\n\n\t\t\t\tif (fHidden)\n\t\t\t\t\t_Draw.SetElement(visNode, \"Hidden\", tbHidden.Text); \n\t\t\t\tif (fToggle)\n\t\t\t\t\t_Draw.SetElement(visNode, \"ToggleItem\", this.cbToggle.Text); \n\t\t\t}\n\n\t\t\tif (fAction)\n\t\t\t{\n\t\t\t\tXmlNode aNode;\n\t\t\t\tif (this.rbHyperlink.Checked)\n\t\t\t\t{\n\t\t\t\t\taNode = _Draw.SetElement(rNode, \"Action\", null);\n\t\t\t\t\t_Draw.RemoveElement(aNode, \"Drillthrough\");\t\n\t\t\t\t\t_Draw.RemoveElement(aNode, \"BookmarkLink\");\t\n\t\t\t\t\t_Draw.SetElement(aNode, \"Hyperlink\", tbHyperlink.Text); \n\t\t\t\t}\n\t\t\t\telse if (this.rbDrillthrough.Checked)\n\t\t\t\t{\n\t\t\t\t\taNode = _Draw.SetElement(rNode, \"Action\", null);\n\t\t\t\t\t_Draw.RemoveElement(aNode, \"Hyperlink\");\t\n\t\t\t\t\t_Draw.RemoveElement(aNode, \"BookmarkLink\");\t\n\t\t\t\t\tXmlNode dNode = _Draw.SetElement(aNode, \"Drillthrough\", null);\n\t\t\t\t\t_Draw.SetElement(dNode, \"ReportName\", tbDrillthrough.Text); \n\t\t\t\t\t// Now do parameters\n\t\t\t\t\t_Draw.RemoveElement(dNode, \"Parameters\");\t// Get rid of prior values\n\t\t\t\t\tif (this._DrillParameters != null && _DrillParameters.Count > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tXmlNode pNodes = _Draw.SetElement(dNode, \"Parameters\", null);\n\t\t\t\t\t\tforeach (DrillParameter dp in _DrillParameters)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tXmlNode p = _Draw.SetElement(pNodes, \"Parameter\", null);\n\t\t\t\t\t\t\t_Draw.SetElementAttribute(p, \"Name\", dp.ParameterName);\n\t\t\t\t\t\t\t_Draw.SetElement(p, \"Value\", dp.ParameterValue);\n\t\t\t\t\t\t\tif (dp.ParameterOmit != null && dp.ParameterOmit.Length > 0)\n\t\t\t\t\t\t\t\t_Draw.SetElement(p, \"Omit\", dp.ParameterOmit);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (this.rbBookmarkLink.Checked)\n\t\t\t\t{\n\t\t\t\t\taNode = _Draw.SetElement(rNode, \"Action\", null);\n\t\t\t\t\t_Draw.RemoveElement(aNode, \"Drillthrough\");\t\n\t\t\t\t\t_Draw.RemoveElement(aNode, \"Hyperlink\");\t\n\t\t\t\t\t_Draw.SetElement(aNode, \"BookmarkLink\", tbBookmarkLink.Text); \n\t\t\t\t}\n\t\t\t\telse\t// assume no action\n\t\t\t\t{\n\t\t\t\t\t_Draw.RemoveElement(rNode, \"Action\");\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprivate void tbBookmark_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfBookmark = true;\n\t\t}\n\n\t\tprivate void rbAction_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tif (this.rbHyperlink.Checked)\n\t\t\t{\n\t\t\t\ttbHyperlink.Enabled = bHyperlink.Enabled = true;\n\t\t\t\ttbBookmarkLink.Enabled = bBookmarkLink.Enabled = false;\n\t\t\t\ttbDrillthrough.Enabled = false;\n\t\t\t\tbDrillthrough.Enabled = false;\n\t\t\t\tbParameters.Enabled = false;\n\n\t\t\t}\n\t\t\telse if (this.rbDrillthrough.Checked)\n\t\t\t{\n\t\t\t\ttbHyperlink.Enabled = bHyperlink.Enabled = false;\n\t\t\t\ttbBookmarkLink.Enabled = bBookmarkLink.Enabled = false;\n\t\t\t\ttbDrillthrough.Enabled = true;\n\t\t\t\tbDrillthrough.Enabled = true;\n\t\t\t\tbParameters.Enabled = true;\n\t\t\t}\n\t\t\telse if (this.rbBookmarkLink.Checked)\n\t\t\t{\n\t\t\t\ttbHyperlink.Enabled = bHyperlink.Enabled = false;\n\t\t\t\ttbBookmarkLink.Enabled = bBookmarkLink.Enabled = true;\n\t\t\t\ttbDrillthrough.Enabled = false;\n\t\t\t\tbDrillthrough.Enabled = false;\n\t\t\t\tbParameters.Enabled = false;\n\t\t\t}\n\t\t\telse\t// assume no action\n\t\t\t{\n\t\t\t\ttbHyperlink.Enabled = bHyperlink.Enabled = false;\n\t\t\t\ttbBookmarkLink.Enabled = bBookmarkLink.Enabled = false;\n\t\t\t\ttbDrillthrough.Enabled = false;\n\t\t\t\tbDrillthrough.Enabled = false;\n\t\t\t\tbParameters.Enabled = false;\n\t\t\t}\n\t\t\tfAction = true;\n\t\t}\n\n\t\tprivate void tbAction_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfAction = true;\n\t\t}\n\n\t\tprivate void tbHidden_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfHidden = true;\n\t\t}\n\n\t\tprivate void cbToggle_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfToggle = true;\n\t\t}\n\n\t\tprivate void bDrillthrough_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tOpenFileDialog ofd = new OpenFileDialog();\n\t\t\tofd.Filter = Strings.InteractivityCtl_bDrillthrough_Click_ReportFilesFilter;\n\t\t\tofd.FilterIndex = 1;\n\t\t\tofd.FileName = \"*.rdl\";\n\n\t\t\tofd.Title = Strings.InteractivityCtl_bDrillthrough_Click_ReportFilesTitle;\n\t\t\tofd.DefaultExt = \"rdl\";\n\t\t\tofd.AddExtension = true;\n            try\n            {\n                if (ofd.ShowDialog() == DialogResult.OK)\n                {\n                    string file = Path.GetFileNameWithoutExtension(ofd.FileName);\n\n                    tbDrillthrough.Text = file;\n                }\n            }\n            finally\n            {\n                ofd.Dispose();\n            }\n\t\t}\n\n\t\tprivate void bParameters_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tDrillParametersDialog dpd = new DrillParametersDialog(this.tbDrillthrough.Text, _DrillParameters);\n            try\n            {\n                if (dpd.ShowDialog(this) != DialogResult.OK)\n                    return;\n                tbDrillthrough.Text = dpd.DrillthroughReport;\n                _DrillParameters = dpd.DrillParameters;\n                fAction = true;\n            }\n            finally\n            {\n                dpd.Dispose();\n            }\n\t\t}\n\n\t\tprivate void bExpr_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tButton b = sender as Button;\n\t\t\tif (b == null)\n\t\t\t\treturn;\n\t\t\tControl c = null;\n\t\t\tswitch (b.Tag as string)\n\t\t\t{\n\t\t\t\tcase \"bookmark\":\n\t\t\t\t\tc = tbBookmark;\n \t\t\t\t\tbreak;\n\t\t\t\tcase \"bookmarklink\":\n\t\t\t\t\tc = tbBookmarkLink;\n \t\t\t\t\tbreak;\n\t\t\t\tcase \"hyperlink\":\n\t\t\t\t\tc = tbHyperlink;\n                    break;\n\t\t\t\tcase \"visibility\":\n\t\t\t\t\tc = tbHidden;\n                    break;\n\t\t\t}\n\n\t\t\tif (c == null)\n\t\t\t\treturn;\n\n\t\t\tXmlNode sNode = _ReportItems[0];\n\n\t\t\tDialogExprEditor ee = new DialogExprEditor(_Draw, c.Text, sNode);\n            try\n            {\n                DialogResult dr = ee.ShowDialog();\n                if (dr == DialogResult.OK)\n                {\n                    c.Text = ee.Expression;\n                    if ((string)(b.Tag) == \"bookmark\")\n                        fBookmark = true;\n                    else\n                        fAction = true;\n                }\n            }\n            finally\n            {\n                ee.Dispose();\n            }\n\t\t\treturn;\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/InteractivityCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"&gt;&gt;bHidden.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 23</value>\n  </data>\n  <data name=\"&gt;&gt;tbHidden.Parent\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"&gt;&gt;tbBookmarkLink.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;bParameters.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbBookmarkLink.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;tbBookmarkLink.Name\" xml:space=\"preserve\">\n    <value>tbBookmarkLink</value>\n  </data>\n  <data name=\"&gt;&gt;bBookmark.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"tbBookmarkLink.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>128, 76</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bParameters.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;bBookmark.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"rbDrillthrough.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 102</value>\n  </data>\n  <data name=\"tbHidden.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>224, 20</value>\n  </data>\n  <data name=\"bBookmark.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;rbHyperlink.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"bHyperlink.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"groupBox1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bHidden.Name\" xml:space=\"preserve\">\n    <value>bHidden</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbDrillthrough.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>128, 104</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bHidden.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"rbBookmarkLink.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;rbHyperlink.Name\" xml:space=\"preserve\">\n    <value>rbHyperlink</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"bParameters.Text\" xml:space=\"preserve\">\n    <value>Parameters...</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 16</value>\n  </data>\n  <data name=\"rbDrillthrough.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 24</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbDrillthrough.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>176, 20</value>\n  </data>\n  <data name=\"bBookmark.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;rbBookmarkLink.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;rbBookmarkLink.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"bBookmark.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;tbHidden.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bBookmark.Name\" xml:space=\"preserve\">\n    <value>bBookmark</value>\n  </data>\n  <data name=\"&gt;&gt;bDrillthrough.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"tbBookmarkLink.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Name\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;bBookmark.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Toggle Item (Textbox name)</value>\n  </data>\n  <data name=\"bHidden.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;bBookmarkLink.Name\" xml:space=\"preserve\">\n    <value>bBookmarkLink</value>\n  </data>\n  <data name=\"&gt;&gt;grpBoxVisibility.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bBookmarkLink.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bDrillthrough.Name\" xml:space=\"preserve\">\n    <value>bDrillthrough</value>\n  </data>\n  <data name=\"bDrillthrough.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 23</value>\n  </data>\n  <data name=\"tbHidden.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"rbHyperlink.Text\" xml:space=\"preserve\">\n    <value>Hyperlink</value>\n  </data>\n  <data name=\"rbHyperlink.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 24</value>\n  </data>\n  <data name=\"bHyperlink.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;tbDrillthrough.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;tbDrillthrough.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;tbHyperlink.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbHidden.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;rbDrillthrough.Name\" xml:space=\"preserve\">\n    <value>rbDrillthrough</value>\n  </data>\n  <data name=\"&gt;&gt;tbDrillthrough.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 256</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>InteractivityCtl</value>\n  </data>\n  <data name=\"&gt;&gt;bDrillthrough.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;bBookmarkLink.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"rbBookmarkLink.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 74</value>\n  </data>\n  <data name=\"&gt;&gt;bParameters.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;cbToggle.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"cbToggle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 21</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>120, 23</value>\n  </data>\n  <data name=\"tbHyperlink.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"bHyperlink.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>400, 50</value>\n  </data>\n  <data name=\"&gt;&gt;rbBookmarkLink.Name\" xml:space=\"preserve\">\n    <value>rbBookmarkLink</value>\n  </data>\n  <data name=\"rbNoAction.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"bDrillthrough.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"&gt;&gt;bBookmarkLink.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bParameters.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"bBookmark.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;grpBoxVisibility.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;tbBookmark.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"groupBox1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 8</value>\n  </data>\n  <data name=\"tbBookmark.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>312, 20</value>\n  </data>\n  <data name=\"cbToggle.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"tbHyperlink.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>264, 20</value>\n  </data>\n  <data name=\"bParameters.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>344, 104</value>\n  </data>\n  <data name=\"bBookmarkLink.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>400, 80</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Bookmark</value>\n  </data>\n  <data name=\"&gt;&gt;tbBookmark.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"bBookmark.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;cbToggle.Parent\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"cbToggle.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>168, 48</value>\n  </data>\n  <data name=\"&gt;&gt;tbBookmark.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bHidden.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;bHyperlink.Name\" xml:space=\"preserve\">\n    <value>bHyperlink</value>\n  </data>\n  <data name=\"&gt;&gt;grpBoxVisibility.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bParameters.Name\" xml:space=\"preserve\">\n    <value>bParameters</value>\n  </data>\n  <data name=\"&gt;&gt;tbBookmarkLink.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"tbBookmark.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 48</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"rbNoAction.Text\" xml:space=\"preserve\">\n    <value>None</value>\n  </data>\n  <data name=\"&gt;&gt;rbHyperlink.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"rbBookmarkLink.Text\" xml:space=\"preserve\">\n    <value>Bookmark Link</value>\n  </data>\n  <data name=\"&gt;&gt;bDrillthrough.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbToggle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>472, 288</value>\n  </data>\n  <data name=\"bHyperlink.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;rbNoAction.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"rbHyperlink.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"bHidden.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>400, 26</value>\n  </data>\n  <data name=\"&gt;&gt;tbHidden.Name\" xml:space=\"preserve\">\n    <value>tbHidden</value>\n  </data>\n  <data name=\"&gt;&gt;tbHyperlink.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"bHidden.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bHidden.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bHyperlink.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;rbNoAction.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Hidden (initial visibility)</value>\n  </data>\n  <data name=\"&gt;&gt;rbNoAction.Name\" xml:space=\"preserve\">\n    <value>rbNoAction</value>\n  </data>\n  <data name=\"&gt;&gt;bHyperlink.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"bBookmark.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>408, 258</value>\n  </data>\n  <data name=\"rbBookmarkLink.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 24</value>\n  </data>\n  <data name=\"grpBoxVisibility.Text\" xml:space=\"preserve\">\n    <value>Visibility</value>\n  </data>\n  <data name=\"bHidden.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"bDrillthrough.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>312, 104</value>\n  </data>\n  <data name=\"&gt;&gt;tbBookmark.Name\" xml:space=\"preserve\">\n    <value>tbBookmark</value>\n  </data>\n  <data name=\"bParameters.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 23</value>\n  </data>\n  <data name=\"grpBoxVisibility.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 152</value>\n  </data>\n  <data name=\"bBookmarkLink.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;cbToggle.Name\" xml:space=\"preserve\">\n    <value>cbToggle</value>\n  </data>\n  <data name=\"rbNoAction.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 24</value>\n  </data>\n  <data name=\"rbHyperlink.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 45</value>\n  </data>\n  <data name=\"&gt;&gt;tbDrillthrough.Name\" xml:space=\"preserve\">\n    <value>tbDrillthrough</value>\n  </data>\n  <data name=\"bBookmarkLink.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;rbDrillthrough.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"tbDrillthrough.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;rbDrillthrough.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;tbHyperlink.Name\" xml:space=\"preserve\">\n    <value>tbHyperlink</value>\n  </data>\n  <data name=\"bHyperlink.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbHyperlink.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"bBookmarkLink.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;grpBoxVisibility.Name\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"tbHyperlink.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>128, 47</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"rbDrillthrough.Text\" xml:space=\"preserve\">\n    <value>Drill Through</value>\n  </data>\n  <data name=\"tbHidden.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>168, 24</value>\n  </data>\n  <data name=\"bBookmarkLink.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"tbBookmark.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>88, 254</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 24</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Action</value>\n  </data>\n  <data name=\"&gt;&gt;bHidden.Parent\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"&gt;&gt;tbBookmarkLink.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bHyperlink.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 136</value>\n  </data>\n  <data name=\"&gt;&gt;rbHyperlink.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bDrillthrough.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"&gt;&gt;rbNoAction.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"bHyperlink.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"bBookmarkLink.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"rbDrillthrough.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;rbDrillthrough.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbBookmarkLink.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>264, 20</value>\n  </data>\n  <data name=\"grpBoxVisibility.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"rbNoAction.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"grpBoxVisibility.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 80</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/InteractivityCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Переключается элементом</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Скрытый (в начале)</value>\n  </data>\n  <data name=\"grpBoxVisibility.Text\" xml:space=\"preserve\">\n    <value>Видимость</value>\n  </data>\n  <data name=\"rbNoAction.Text\" xml:space=\"preserve\">\n    <value>Отсутствует</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bParameters.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>336, 104</value>\n  </data>\n  <data name=\"bParameters.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 23</value>\n  </data>\n  <data name=\"bParameters.Text\" xml:space=\"preserve\">\n    <value>Параметры...</value>\n  </data>\n  <data name=\"bDrillthrough.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>306, 103</value>\n  </data>\n  <data name=\"tbDrillthrough.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>172, 20</value>\n  </data>\n  <data name=\"rbDrillthrough.Text\" xml:space=\"preserve\">\n    <value>Детализация</value>\n  </data>\n  <data name=\"rbBookmarkLink.Text\" xml:space=\"preserve\">\n    <value>Закладка</value>\n  </data>\n  <data name=\"rbHyperlink.Text\" xml:space=\"preserve\">\n    <value>Гиперссылка</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Действие</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Закладка</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/ListCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for ReportCtl.\n\t/// </summary>\n\tinternal class ListCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n        private List<XmlNode> _ReportItems;\n\t\tprivate DesignXmlDraw _Draw;\n\t\tbool fDataSet, fPBBefore, fPBAfter, fNoRows, fDataInstanceElementOutput, fDataInstanceName;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\tprivate System.Windows.Forms.ComboBox cbDataSet;\n\t\tprivate System.Windows.Forms.GroupBox groupBox1;\n\t\tprivate System.Windows.Forms.CheckBox chkPBBefore;\n\t\tprivate System.Windows.Forms.CheckBox chkPBAfter;\n\t\tprivate System.Windows.Forms.Button bGroups;\n\t\tprivate System.Windows.Forms.Label label1;\n\t\tprivate System.Windows.Forms.TextBox tbNoRows;\n\t\tprivate System.Windows.Forms.TextBox tbDataInstanceName;\n\t\tprivate System.Windows.Forms.CheckBox chkXmlInstances;\n\t\tprivate System.Windows.Forms.Label label3;\n\t\tprivate System.Windows.Forms.GroupBox groupBox2;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n        public ListCtl(DesignXmlDraw dxDraw, List<XmlNode> ris)\n\t\t{\n\t\t\t_ReportItems = ris;\n\t\t\t_Draw = dxDraw;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues();\t\t\t\n\t\t}\n\n\t\tprivate void InitValues()\n\t\t{\n\t\t\tXmlNode riNode = _ReportItems[0];\n\n\t\t\ttbNoRows.Text = _Draw.GetElementValue(riNode, \"NoRows\", \"\");\n\t\t\tcbDataSet.Items.AddRange(_Draw.DataSetNames);\n\t\t\tcbDataSet.Text = _Draw.GetDataSetNameValue(riNode);\n\t\t\tif (_Draw.GetReportItemDataRegionContainer(riNode) != null)\n\t\t\t\tcbDataSet.Enabled = false;\n\t\t\tchkPBBefore.Checked = _Draw.GetElementValue(riNode, \"PageBreakAtStart\", \"false\").ToLower()==\"true\"? true:false;\n\t\t\tchkPBAfter.Checked = _Draw.GetElementValue(riNode, \"PageBreakAtEnd\", \"false\").ToLower()==\"true\"? true:false;\n\t\t\tthis.chkXmlInstances.Checked = _Draw.GetElementValue(riNode, \"DataInstanceElementOutput\", \"Output\")==\"Output\"?true:false;\n\t\t\tthis.tbDataInstanceName.Text =  _Draw.GetElementValue(riNode, \"DataInstanceName\", \"Item\");\n\n\t\t\tfNoRows = fDataSet = fPBBefore = fPBAfter = fDataInstanceElementOutput = fDataInstanceName = false;\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ListCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.cbDataSet = new System.Windows.Forms.ComboBox();\n\t\t\tthis.groupBox1 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.chkPBAfter = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkPBBefore = new System.Windows.Forms.CheckBox();\n\t\t\tthis.bGroups = new System.Windows.Forms.Button();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.tbNoRows = new System.Windows.Forms.TextBox();\n\t\t\tthis.tbDataInstanceName = new System.Windows.Forms.TextBox();\n\t\t\tthis.chkXmlInstances = new System.Windows.Forms.CheckBox();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.groupBox2 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.groupBox1.SuspendLayout();\n\t\t\tthis.groupBox2.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// cbDataSet\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbDataSet, \"cbDataSet\");\n\t\t\tthis.cbDataSet.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbDataSet.Name = \"cbDataSet\";\n\t\t\tthis.cbDataSet.SelectedIndexChanged += new System.EventHandler(this.cbDataSet_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// groupBox1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox1, \"groupBox1\");\n\t\t\tthis.groupBox1.Controls.Add(this.chkPBAfter);\n\t\t\tthis.groupBox1.Controls.Add(this.chkPBBefore);\n\t\t\tthis.groupBox1.Name = \"groupBox1\";\n\t\t\tthis.groupBox1.TabStop = false;\n\t\t\t// \n\t\t\t// chkPBAfter\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkPBAfter, \"chkPBAfter\");\n\t\t\tthis.chkPBAfter.Name = \"chkPBAfter\";\n\t\t\tthis.chkPBAfter.CheckedChanged += new System.EventHandler(this.chkPBAfter_CheckedChanged);\n\t\t\t// \n\t\t\t// chkPBBefore\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkPBBefore, \"chkPBBefore\");\n\t\t\tthis.chkPBBefore.Name = \"chkPBBefore\";\n\t\t\tthis.chkPBBefore.CheckedChanged += new System.EventHandler(this.chkPBBefore_CheckedChanged);\n\t\t\t// \n\t\t\t// bGroups\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bGroups, \"bGroups\");\n\t\t\tthis.bGroups.Name = \"bGroups\";\n\t\t\tthis.bGroups.Click += new System.EventHandler(this.bGroups_Click);\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// tbNoRows\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbNoRows, \"tbNoRows\");\n\t\t\tthis.tbNoRows.Name = \"tbNoRows\";\n\t\t\tthis.tbNoRows.TextChanged += new System.EventHandler(this.tbNoRows_TextChanged);\n\t\t\t// \n\t\t\t// tbDataInstanceName\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbDataInstanceName, \"tbDataInstanceName\");\n\t\t\tthis.tbDataInstanceName.Name = \"tbDataInstanceName\";\n\t\t\tthis.tbDataInstanceName.TextChanged += new System.EventHandler(this.tbDataInstanceName_TextChanged);\n\t\t\t// \n\t\t\t// chkXmlInstances\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkXmlInstances, \"chkXmlInstances\");\n\t\t\tthis.chkXmlInstances.Name = \"chkXmlInstances\";\n\t\t\tthis.chkXmlInstances.CheckedChanged += new System.EventHandler(this.chkXmlInstances_CheckedChanged);\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// groupBox2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox2, \"groupBox2\");\n\t\t\tthis.groupBox2.Controls.Add(this.tbDataInstanceName);\n\t\t\tthis.groupBox2.Controls.Add(this.chkXmlInstances);\n\t\t\tthis.groupBox2.Controls.Add(this.label3);\n\t\t\tthis.groupBox2.Name = \"groupBox2\";\n\t\t\tthis.groupBox2.TabStop = false;\n\t\t\t// \n\t\t\t// ListCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.groupBox2);\n\t\t\tthis.Controls.Add(this.tbNoRows);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Controls.Add(this.bGroups);\n\t\t\tthis.Controls.Add(this.groupBox1);\n\t\t\tthis.Controls.Add(this.cbDataSet);\n\t\t\tthis.Controls.Add(this.label2);\n\t\t\tthis.Name = \"ListCtl\";\n\t\t\tthis.groupBox1.ResumeLayout(false);\n\t\t\tthis.groupBox2.ResumeLayout(false);\n\t\t\tthis.groupBox2.PerformLayout();\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\t\tpublic bool IsValid()\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// take information in control and apply to all the style nodes\n\t\t\t//  Only change information that has been marked as modified;\n\t\t\t//   this way when group is selected it is possible to change just\n\t\t\t//   the items you want and keep the rest the same.\n\t\t\t\t\n\t\t\tforeach (XmlNode riNode in this._ReportItems)\n\t\t\t\tApplyChanges(riNode);\n\n\t\t\t// No more changes\n\t\t\tfNoRows = fDataSet = fPBBefore = fPBAfter= fDataInstanceElementOutput = fDataInstanceName = false;\n\t\t}\n\n\t\tpublic void ApplyChanges(XmlNode node)\n\t\t{\n\t\t\tif (fNoRows)\n\t\t\t\t_Draw.SetElement(node, \"NoRows\", this.tbNoRows.Text);\n\t\t\tif (fDataSet)\n\t\t\t\t_Draw.SetElement(node, \"DataSetName\", this.cbDataSet.Text);\n\t\t\tif (fPBBefore)\n\t\t\t\t_Draw.SetElement(node, \"PageBreakAtStart\", this.chkPBBefore.Checked? \"true\":\"false\");\n\t\t\tif (fPBAfter)\n\t\t\t\t_Draw.SetElement(node, \"PageBreakAtEnd\", this.chkPBAfter.Checked? \"true\":\"false\");\n\t\t\tif (fDataInstanceElementOutput)\n\t\t\t\t_Draw.SetElement(node, \"DataInstanceElementOutput\", this.chkXmlInstances.Checked? \"Output\":\"NoOutput\");\n\t\t\tif (fDataInstanceName)\n\t\t\t{\n\t\t\t\tif (this.tbDataInstanceName.Text.Length > 0)\n\t\t\t\t\t_Draw.SetElement(node, \"DataInstanceName\", this.tbDataInstanceName.Text);\n\t\t\t\telse\n\t\t\t\t\t_Draw.RemoveElement(node, \"DataInstanceName\");\n\t\t\t}\n\t\t}\n\n\t\tprivate void cbDataSet_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfDataSet = true;\n\t\t}\n\n\t\tprivate void chkPBBefore_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPBBefore = true;\n\t\t}\n\n\t\tprivate void chkPBAfter_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPBAfter = true;\n\t\t}\n\n\t\tprivate void tbNoRows_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfNoRows = true;\n\t\t}\n\n\t\tprivate void bGroups_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tPropertyDialog pd = new PropertyDialog(_Draw, _ReportItems, PropertyTypeEnum.Grouping);\n            try\n            {\n                DialogResult dr = pd.ShowDialog();\n                if (pd.Changed || dr == DialogResult.OK)\n                {\n                    //\t\t\t\t_DrawPanel.Invalidate();   TODO need to force change somehow?????\n                }\n            }\n            finally\n            {\n                pd.Dispose();\n            }\n\t\t}\n\n\t\tprivate void chkXmlInstances_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfDataInstanceElementOutput = true;\n\t\t}\n\n\t\tprivate void tbDataInstanceName_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfDataInstanceName = true;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/ListCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"chkPBAfter.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bGroups.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 240</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Name\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>472, 288</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSet.Name\" xml:space=\"preserve\">\n    <value>cbDataSet</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBAfter.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"cbDataSet.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;tbDataInstanceName.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBBefore.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>ListCtl</value>\n  </data>\n  <data name=\"tbNoRows.Text\" xml:space=\"preserve\">\n    <value>textBox1</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;chkXmlInstances.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;chkXmlInstances.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bGroups.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"tbNoRows.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>120, 48</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>112, 16</value>\n  </data>\n  <data name=\"&gt;&gt;tbNoRows.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"chkPBAfter.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>128, 24</value>\n  </data>\n  <data name=\"&gt;&gt;tbDataInstanceName.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"tbDataInstanceName.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"tbDataInstanceName.Text\" xml:space=\"preserve\">\n    <value>textBox1</value>\n  </data>\n  <data name=\"chkPBAfter.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>192, 16</value>\n  </data>\n  <data name=\"groupBox1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 88</value>\n  </data>\n  <data name=\"&gt;&gt;tbDataInstanceName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 48</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Page Breaks</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"bGroups.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 23</value>\n  </data>\n  <data name=\"chkPBAfter.Text\" xml:space=\"preserve\">\n    <value>Insert after List</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBAfter.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbDataInstanceName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>238, 20</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSet.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSet.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbNoRows.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"chkXmlInstances.Text\" xml:space=\"preserve\">\n    <value>Render list instances</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bGroups.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"groupBox2.Text\" xml:space=\"preserve\">\n    <value>XML</value>\n  </data>\n  <data name=\"groupBox2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 152</value>\n  </data>\n  <data name=\"chkXmlInstances.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>160, 24</value>\n  </data>\n  <data name=\"&gt;&gt;bGroups.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbNoRows.Name\" xml:space=\"preserve\">\n    <value>tbNoRows</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Data Instance Name</value>\n  </data>\n  <data name=\"chkXmlInstances.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"&gt;&gt;chkXmlInstances.Name\" xml:space=\"preserve\">\n    <value>chkXmlInstances</value>\n  </data>\n  <data name=\"tbDataInstanceName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>146, 44</value>\n  </data>\n  <data name=\"cbDataSet.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>120, 16</value>\n  </data>\n  <data name=\"&gt;&gt;tbDataInstanceName.Name\" xml:space=\"preserve\">\n    <value>tbDataInstanceName</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>400, 48</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSet.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"groupBox1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"chkXmlInstances.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"chkPBBefore.Text\" xml:space=\"preserve\">\n    <value>Insert before List</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbNoRows.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBAfter.Name\" xml:space=\"preserve\">\n    <value>chkPBAfter</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBAfter.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bGroups.Text\" xml:space=\"preserve\">\n    <value>Group Expressions...</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 48</value>\n  </data>\n  <data name=\"groupBox2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>400, 72</value>\n  </data>\n  <data name=\"tbNoRows.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>DataSet Name</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 16</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBBefore.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bGroups.Name\" xml:space=\"preserve\">\n    <value>bGroups</value>\n  </data>\n  <data name=\"cbDataSet.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>304, 21</value>\n  </data>\n  <data name=\"chkPBBefore.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBBefore.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"groupBox2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Name\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"bGroups.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>120, 23</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbNoRows.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>304, 20</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"chkPBBefore.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>128, 24</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBBefore.Name\" xml:space=\"preserve\">\n    <value>chkPBBefore</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>No rows message</value>\n  </data>\n  <data name=\"chkPBBefore.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;chkXmlInstances.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/ListCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Набор данных</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"cbDataSet.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>324, 21</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>420, 48</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Разрывы страницы</value>\n  </data>\n  <data name=\"chkPBAfter.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>162, 24</value>\n  </data>\n  <data name=\"chkPBAfter.Text\" xml:space=\"preserve\">\n    <value>Вставлять после списка</value>\n  </data>\n  <data name=\"chkPBBefore.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>170, 24</value>\n  </data>\n  <data name=\"chkPBBefore.Text\" xml:space=\"preserve\">\n    <value>Вставлять перед списком</value>\n  </data>\n  <data name=\"bGroups.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>162, 23</value>\n  </data>\n  <data name=\"bGroups.Text\" xml:space=\"preserve\">\n    <value>Выражения группировки...</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>162, 23</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Сообщение, когда нет строк</value>\n  </data>\n  <data name=\"tbNoRows.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>184, 48</value>\n  </data>\n  <data name=\"tbNoRows.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>260, 20</value>\n  </data>\n  <data name=\"tbDataInstanceName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>192, 44</value>\n  </data>\n  <data name=\"tbDataInstanceName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>222, 20</value>\n  </data>\n  <data name=\"chkXmlInstances.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>190, 24</value>\n  </data>\n  <data name=\"chkXmlInstances.Text\" xml:space=\"preserve\">\n    <value>Выводить экземпляры списка</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>170, 16</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Название экземпляра данных</value>\n  </data>\n  <data name=\"groupBox2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>420, 72</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/MDIChild.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    internal partial class MDIChild : Form\n\t{\n\t\t#region Windows Form Designer generated code\n        private RdlEditPreview rdlDesigner;\nTabPage _Tab;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n            this.DoubleBuffered = true;\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MDIChild));\n\t\t\tthis.rdlDesigner = new Majorsilence.Reporting.RdlDesign.RdlEditPreview();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// rdlDesigner\n\t\t\t// \n\t\t\tresources.ApplyResources(this.rdlDesigner, \"rdlDesigner\");\n\t\t\tthis.rdlDesigner.CurrentInsert = null;\n\t\t\tthis.rdlDesigner.Modified = false;\n\t\t\tthis.rdlDesigner.Name = \"rdlDesigner\";\n\t\t\tthis.rdlDesigner.SelectedText = \"\";\n\t\t\tthis.rdlDesigner.SelectionTool = false;\n\t\t\tthis.rdlDesigner.Zoom = 1F;\n\t\t\tthis.rdlDesigner.ZoomMode = Majorsilence.Reporting.RdlViewer.ZoomEnum.UseZoom;\n\t\t\tthis.rdlDesigner.OnRdlChanged += new Majorsilence.Reporting.RdlDesign.RdlEditPreview.RdlChangeHandler(this.rdlDesigner_RdlChanged);\n\t\t\tthis.rdlDesigner.OnHeightChanged += new Majorsilence.Reporting.RdlDesign.DesignCtl.HeightEventHandler(this.rdlDesigner_HeightChanged);\n\t\t\tthis.rdlDesigner.OnSelectionChanged += new Majorsilence.Reporting.RdlDesign.RdlEditPreview.RdlChangeHandler(this.rdlDesigner_SelectionChanged);\n\t\t\tthis.rdlDesigner.OnSelectionMoved += new Majorsilence.Reporting.RdlDesign.RdlEditPreview.RdlChangeHandler(this.rdlDesigner_SelectionMoved);\n\t\t\tthis.rdlDesigner.OnReportItemInserted += new Majorsilence.Reporting.RdlDesign.RdlEditPreview.RdlChangeHandler(this.rdlDesigner_ReportItemInserted);\n\t\t\tthis.rdlDesigner.OnDesignTabChanged += new Majorsilence.Reporting.RdlDesign.RdlEditPreview.RdlChangeHandler(this.rdlDesigner_DesignTabChanged);\n\t\t\tthis.rdlDesigner.OnOpenSubreport += new Majorsilence.Reporting.RdlDesign.DesignCtl.OpenSubreportEventHandler(this.rdlDesigner_OpenSubreport);\n            this.rdlDesigner.SaveRequested += new Majorsilence.Reporting.RdlDesign.RdlEditPreview.RdlChangeHandler(this.rdlDesigner_SaveRequested);\n            // \n            // MDIChild\n            // \n            resources.ApplyResources(this, \"$this\");\n\t\t\tthis.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;\n\t\t\tthis.Controls.Add(this.rdlDesigner);\n\t\t\tthis.Name = \"MDIChild\";\n\t\t\tthis.Load += new System.EventHandler(this.MDIChild_Load);\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n        \n\n\t\t\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/MDIChild.cs",
    "content": "\nusing System;\nusing System.Drawing;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing System.Data;\nusing System.Drawing.Printing;\nusing System.IO;\nusing System.Xml;\nusing EncryptionProvider;\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlDesign.Resources;\nusing Majorsilence.Reporting.RdlViewer;\nusing EncryptionProvider.String;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// RdlReader is a application for displaying reports based on RDL.\n    /// </summary>\n    internal partial class MDIChild \n    {\n\n\n        public delegate void RdlChangeHandler(object sender, EventArgs e);\n        public event RdlChangeHandler OnSelectionChanged;\n        public event RdlChangeHandler OnSelectionMoved;\n        public event RdlChangeHandler OnReportItemInserted;\n        public event RdlChangeHandler OnDesignTabChanged;\n        public event DesignCtl.OpenSubreportEventHandler OnOpenSubreport;\n        public event DesignCtl.HeightEventHandler OnHeightChanged;\n\n        Uri _SourceFile;\n        // TabPage for this MDI Child\n\n        private MDIChild() { }\n        public MDIChild(int width, int height)\n        {\n            this.InitializeComponent();\n\n            this.SuspendLayout();\n            // \n            // rdlDesigner\n            // \n            this.rdlDesigner.Name = \"rdlDesigner\";\n            this.rdlDesigner.Size = new System.Drawing.Size(width, height);\n\n            // \n            // MDIChild\n            // \n            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);\n            this.ClientSize = new System.Drawing.Size(width, height);\n\n            this.Name = \"\";\n            this.Text = \"\";\n            this.Closing += new System.ComponentModel.CancelEventHandler(this.MDIChild_Closing);\n\n            this.ResumeLayout(false);\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        internal TabPage Tab\n        {\n            get { return _Tab; }\n            set { _Tab = value; }\n        }\n\n        public RdlEditPreview Editor\n        {\n            get\n            {\n                return rdlDesigner.CanEdit ? rdlDesigner : null;\t// only return when it can edit\n            }\n        }\n\n        public RdlEditPreview RdlEditor\n        {\n            get\n            {\n                return rdlDesigner;\t\t\t// always return\n            }\n        }\n\n        public void ShowEditLines(bool bShow)\n        {\n            rdlDesigner.ShowEditLines(bShow);\n        }\n\n        internal void ShowPreviewWaitDialog(bool bShow)\n        {\n            rdlDesigner.ShowPreviewWaitDialog(bShow);\n        }\n        \n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        internal bool ShowReportItemOutline\n        {\n            get { return rdlDesigner.ShowReportItemOutline; }\n            set { rdlDesigner.ShowReportItemOutline = value; }\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string CurrentInsert\n        {\n            get { return rdlDesigner.CurrentInsert; }\n            set\n            {\n                rdlDesigner.CurrentInsert = value;\n            }\n        }\n\n        public int CurrentLine\n        {\n            get { return rdlDesigner.CurrentLine; }\n        }\n\n        public int CurrentCh\n        {\n            get { return rdlDesigner.CurrentCh; }\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        internal DesignTabs DesignTab\n        {\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn rdlDesigner.DesignTab; \n\t\t\t}\n            set { rdlDesigner.DesignTab = value; }\n        }\n\n        internal DesignXmlDraw DrawCtl\n        {\n            get { return rdlDesigner.DrawCtl; }\n        }\n\n        public XmlDocument ReportDocument\n        {\n            get { return rdlDesigner.ReportDocument; }\n        }\n\n        internal void SetFocus()\n        {\n            rdlDesigner.SetFocus();\n        }\n\n        public StyleInfo SelectedStyle\n        {\n            get { return rdlDesigner.SelectedStyle; }\n        }\n\n        public string SelectionName\n        {\n            get { return rdlDesigner.SelectionName; }\n        }\n\n        public PointF SelectionPosition\n        {\n            get { return rdlDesigner.SelectionPosition; }\n        }\n\n        public SizeF SelectionSize\n        {\n            get { return rdlDesigner.SelectionSize; }\n        }\n\n        public void ApplyStyleToSelected(string name, string v)\n        {\n            rdlDesigner.ApplyStyleToSelected(name, v);\n        }\n\n        public bool FileSave()\n        {\n            Uri file = SourceFile;\n            if (file == null || file.LocalPath == \"\")\t\t// if no file name then do SaveAs\n            {\n                return FileSaveAs();\n            }\n            string rdl = GetRdlText();\n\n            return FileSave(file, rdl);\n        }\n\n        private String doPossibleEncryption(Uri file, String rdl)\n        {\n            String extension = Path.GetExtension(file.LocalPath);\n            if (extension.Equals(\".encrypted\"))\n            {\n                StringEncryption enc = new StringEncryption(Prompt.ShowDialog(\"Please enter passkey\", \"Passkey?\"));\n                try\n                {\n                    rdl = enc.Encrypt(rdl);\n                }\n                catch (Exception)\n                {\n                    MessageBox.Show(Properties.Resources.MDIChild_doPossibleEncryption_Unable_to_encrypt_file_);\n                }\n                \n            }\n            return rdl;\n        }\n\n\n        private bool FileSave(Uri file, string rdl)\n        {\n            bool bOK = true;\n            try\n            {\n                rdl = doPossibleEncryption(file, rdl);\n                using (StreamWriter writer = new StreamWriter(file.LocalPath))\n                {\n                    writer.Write(rdl);\n                    //\t\t\t\teditRDL.ClearUndo();\n                    //\t\t\t\teditRDL.Modified = false;\n                    //\t\t\t\tSetTitle();\n                    //\t\t\t\tstatusBar.Text = \"Saved \" + curFileName;\n                }\n            }\n            catch (Exception ae)\n            {\n                bOK = false;\n                MessageBox.Show(ae.Message + \"\\r\\n\" + ae.StackTrace);\n                //\t\t\t\tstatusBar.Text = \"Save of file '\" + curFileName + \"' failed\";\n            }\n            if (bOK)\n                this.Modified = false;\n            return bOK;\n        }\n\n        public async Task<bool> ExportAsync(Rdl.OutputPresentationType type)\n        {\n            SaveFileDialog sfd = new SaveFileDialog();\n            sfd.Title = string.Format(Strings.MDIChild_Export_ExportTitleFormat, type.ToString().ToUpper());\n            switch (type)\n            {\n                case  OutputPresentationType.CSV:\n                    sfd.Filter = Strings.MDIChild_Export_CSV;\n                    break;\n                case OutputPresentationType.XML:\n                    sfd.Filter = Strings.MDIChild_Export_XML;\n                    break;\n                case OutputPresentationType.PDF:\n                case OutputPresentationType.PDFOldStyle:\n                    sfd.Filter = Strings.MDIChild_Export_PDF;\n                    break;\n                case OutputPresentationType.TIF:\n                    sfd.Filter = Strings.MDIChild_Export_TIF;\n                    break;\n                case OutputPresentationType.RTF:\n                    sfd.Filter = Strings.MDIChild_Export_RTF;\n                    break;\n                case OutputPresentationType.Word:\n                    sfd.Filter = Strings.MDIChild_Export_DOC;\n                    break;\n                case OutputPresentationType.ExcelTableOnly:\n                case OutputPresentationType.Excel2007:\n                    sfd.Filter = Strings.MDIChild_Export_Excel;\n                    break;\n                case OutputPresentationType.HTML:\n                    sfd.Filter = Strings.MDIChild_Export_Web_Page;\n                    break;\n                case OutputPresentationType.MHTML:\n                    sfd.Filter = Strings.MDIChild_Export_MHT;\n                    break;\n                default:\n                    throw new Exception(Strings.MDIChild_Error_AllowedExportTypes);\n            }\n            sfd.FilterIndex = 1;\n\n            if (SourceFile != null)\n            {\n                sfd.FileName = Path.GetFileNameWithoutExtension(SourceFile.LocalPath) + \".\" + type.ToString().ToLower();\n            }\n            else\n            {\n                sfd.FileName = \"*.\" + type.ToString().ToLower();\n            }\n\n            try\n            {\n                if (sfd.ShowDialog(this) != DialogResult.OK)\n                    return false;\n\n                // save the report in the requested rendered format \n                bool rc = true;\n                // tif can be either in color or black and white; ask user what they want\n                if (type == OutputPresentationType.TIF)\n                {\n                    DialogResult dr = MessageBox.Show(this, Strings.MDIChild_ShowF_WantDisplayColorsInTIF, Strings.MDIChild_ShowF_Export, MessageBoxButtons.YesNoCancel);\n                    if (dr == DialogResult.No)\n                        type = OutputPresentationType.TIFBW;\n                    else if (dr == DialogResult.Cancel)\n                        return false;\n                }\n                try { await SaveAs(sfd.FileName, type); }\n                catch (Exception ex)\n                {\n                    MessageBox.Show(this,\n                        ex.Message, Strings.MDIChild_ShowG_ExportError,\n                        MessageBoxButtons.OK, MessageBoxIcon.Error);\n                    rc = false;\n                }\n                return rc;\n            }\n            finally\n            {\n                sfd.Dispose();\n            }\n        }\n\n        public bool FileSaveAs()\n        {\n            SaveFileDialog sfd = new SaveFileDialog();\n            sfd.Filter = Strings.MDIChild_FileSaveAs_RDLFilter;\n            sfd.FilterIndex = 1;\n\n            Uri file = SourceFile;\n\n            sfd.FileName = file == null ? \"*.rdl\" : file.LocalPath;\n            try\n            {\n                if (sfd.ShowDialog(this) != DialogResult.OK)\n                    return false;\n\n                // User wants to save!\n                string rdl = GetRdlText();\n                if (FileSave(new Uri(sfd.FileName), rdl))\n                {\t// Save was successful\n                    Text = sfd.FileName;\n                    Tab.Text = Path.GetFileName(sfd.FileName);\n                    _SourceFile = new Uri(sfd.FileName);\n\t\t\t\t\tDrawCtl.Folder = Path.GetDirectoryName(sfd.FileName);\n                    Tab.ToolTipText = sfd.FileName;\n                    return true;\n                }\n            }\n            finally\n            {\n                sfd.Dispose();\n            }\n            return false;\n        }\n\n        public string GetRdlText()\n        {\n            return this.rdlDesigner.GetRdlText();\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public bool Modified\n        {\n            get { return rdlDesigner.Modified; }\n            set\n            {\n                rdlDesigner.Modified = value;\n                SetTitle();\n            }\n        }\n\n        /// <summary>\n        /// The RDL file that should be displayed.\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public Uri SourceFile\n        {\n            get { return _SourceFile; }\n            set\n            {\n                _SourceFile = value;\n                \n                string rdl = GetRdlSource();\n                this.rdlDesigner.SetRdlText(rdl == null ? \"\" : rdl);\n            }\n        }\n        \n        public async Task SetSourceFileAsync(Uri file)\n        {\n            _SourceFile = file;\n\n            string rdl = await GetRdlSourceAsync();\n             this.rdlDesigner.SetRdlText(rdl == null ? \"\" : rdl);\n        }\n\n        private String doPossibleDecryption(String rdl)\n        {\n\n            if (Path.GetExtension(_SourceFile.LocalPath).Equals(\".encrypted\"))\n            {\n                \n                try\n                {\n                    StringEncryption enc = new StringEncryption(Prompt.ShowDialog(\"Please enter the passkey\", \"Passkey?\"));\n                    rdl = enc.Decrypt(rdl);\n                }\n                catch (Exception)\n                {\n                    MessageBox.Show(Properties.Resources.MDIChild_doPossibleDecryption_Incorrect_passkey_entered_);\n                }\n            }\n\n            return rdl;\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string SourceRdl\n        {\n            get { return this.rdlDesigner.GetRdlText(); }\n            set { this.rdlDesigner.SetRdlText(value); }\n        }\n\n        private string GetRdlSource()\n        {\n            StreamReader fs = null;\n            string prog = null;\n            try\n            {\n                fs = new StreamReader(_SourceFile.LocalPath);\n                prog = fs.ReadToEnd();\n            }\n            finally\n            {\n                if (fs != null)\n                    fs.Close();\n            }\n\n            prog = doPossibleDecryption(prog);\n\n            return prog;\n        }\n        \n        private async Task<string> GetRdlSourceAsync()\n        {\n            StreamReader fs = null;\n            string prog = null;\n            try\n            {\n                fs = new StreamReader(_SourceFile.LocalPath);\n                prog = await fs.ReadToEndAsync();\n            }\n            finally\n            {\n                if (fs != null)\n                    fs.Close();\n            }\n\n            prog = doPossibleDecryption(prog);\n\n            return prog;\n        }\n\n        /// <summary>\n        /// Number of pages in the report.\n        /// </summary>\n        public int PageCount\n        {\n            get { return this.rdlDesigner.PageCount; }\n        }\n\n        /// <summary>\n        /// Current page in view on report\n        /// </summary>\n        public int PageCurrent\n        {\n            get { return this.rdlDesigner.PageCurrent; }\n        }\n\n        /// <summary>\n        /// Page height of the report.\n        /// </summary>\n        public float PageHeight\n        {\n            get { return this.rdlDesigner.PageHeight; }\n        }\n        /// <summary>\n        /// Turns the Selection Tool on in report preview\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public bool SelectionTool\n        {\n            get\n            {\n                return this.rdlDesigner.SelectionTool;\n            }\n            set\n            {\n                this.rdlDesigner.SelectionTool = value;\n            }\n        }\n\n        /// <summary>\n        /// Page width of the report.\n        /// </summary>\n        public float PageWidth\n        {\n            get { return this.rdlDesigner.PageWidth; }\n        }\n\n        /// <summary>\n        /// Zoom \n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public float Zoom\n        {\n            get { return this.rdlDesigner.Zoom; }\n            set { this.rdlDesigner.Zoom = value; }\n        }\n\n        /// <summary>\n        /// ZoomMode \n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public ZoomEnum ZoomMode\n        {\n            get { return this.rdlDesigner.ZoomMode; }\n            set { this.rdlDesigner.ZoomMode = value; }\n        }\n\n        /// <summary>\n        /// Print the report.  \n        /// </summary>\n        public void Print(PrintDocument pd)\n        {\n            this.rdlDesigner.Print(pd);\n        }\n\n        public async Task SaveAs(string filename, OutputPresentationType type)\n        {\n            await rdlDesigner.SaveAs(filename, type);\n        }\n\n        private void MDIChild_Closing(object sender, System.ComponentModel.CancelEventArgs e)\n        {\n            if (!OkToClose())\n            {\n                e.Cancel = true;\n                return;\n            }\n\n            if (Tab == null)\n                return;\n\n            Control ctl = Tab.Parent;\n            ctl.Controls.Remove(Tab);\n            Tab.Tag = null;             // this is the Tab reference to this\n            Tab = null;\n        }\n\n        public bool OkToClose()\n        {\n            if (!Modified)\n                return true;\n\n            DialogResult r =\n                    MessageBox.Show(this, String.Format(Strings.MDIChild_ShowH_WantSaveChanges,\n                    _SourceFile == null ? Strings.MDIChild_ShowH_Untitled : Path.GetFileName(_SourceFile.LocalPath)),\n                    Strings.MDIChild_ShowH_fyiReportingDesigner,\n                    MessageBoxButtons.YesNoCancel,\n                    MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button3);\n\n            bool bOK = true;\n            if (r == DialogResult.Cancel)\n                bOK = false;\n            else if (r == DialogResult.Yes)\n            {\n                if (!FileSave())\n                    bOK = false;\n            }\n            return bOK;\n        }\n\n        private void rdlDesigner_RdlChanged(object sender, System.EventArgs e)\n        {\n            SetTitle();\n        }\n\n        private void rdlDesigner_HeightChanged(object sender, HeightEventArgs e)\n        {\n            if (OnHeightChanged != null)\n                OnHeightChanged(this, e);\n        }\n\n        private void rdlDesigner_SelectionChanged(object sender, System.EventArgs e)\n        {\n            if (OnSelectionChanged != null)\n                OnSelectionChanged(this, e);\n        }\n\n        private void rdlDesigner_DesignTabChanged(object sender, System.EventArgs e)\n        {\n            if (OnDesignTabChanged != null)\n                OnDesignTabChanged(this, e);\n        }\n\n        private void rdlDesigner_ReportItemInserted(object sender, System.EventArgs e)\n        {\n            if (OnReportItemInserted != null)\n                OnReportItemInserted(this, e);\n        }\n\n        private void rdlDesigner_SelectionMoved(object sender, System.EventArgs e)\n        {\n            if (OnSelectionMoved != null)\n                OnSelectionMoved(this, e);\n        }\n\n        private void rdlDesigner_OpenSubreport(object sender, SubReportEventArgs e)\n        {\n            if (OnOpenSubreport != null)\n            {\n                OnOpenSubreport(this, e);\n            }\n        }\n\n        private void rdlDesigner_SaveRequested(object sender, System.EventArgs e)\n        {\n            FileSave();\n        }\n\n\n\n        private void SetTitle()\n        {\n            string title = this.Text;\n            if (title.Length < 1)\n                return;\n            char m = title[title.Length - 1];\n            if (this.Modified)\n            {\n                if (m != '*')\n                    title = title + \"*\";\n            }\n            else if (m == '*')\n                title = title.Substring(0, title.Length - 1);\n\n            if (title != this.Text)\n                this.Text = title;\n            return;\n        }\n\n        public Majorsilence.Reporting.RdlViewer.RdlViewer Viewer\n        {\n            get { return rdlDesigner.Viewer; }\n        }\n\n        private void MDIChild_Load(object sender, EventArgs e)\n        {\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "RdlDesign/MDIChild.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"rdlDesigner.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;rdlDesigner.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>554, 401</value>\n  </data>\n  <data name=\"&gt;&gt;rdlDesigner.Type\" xml:space=\"preserve\">\n    <value>fyiReporting.RdlDesign.RdlEditPreview, RdlDesigner, Version=4.5.5081.21899, Culture=neutral, PublicKeyToken=null</value>\n  </data>\n  <data name=\"rdlDesigner.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"rdlDesigner.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>554, 401</value>\n  </data>\n  <data name=\"&gt;&gt;rdlDesigner.Name\" xml:space=\"preserve\">\n    <value>rdlDesigner</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>MDIChild</value>\n  </data>\n  <data name=\"&gt;&gt;rdlDesigner.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"$this.Icon\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        AAABAAIAICAQAAAAAADoAgAAJgAAABAQEAAAAAAAKAEAAA4DAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC\n        AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/\n        AAAA//8A/wAAAP8A/wD//wAA////AP//////////////////////////////////////////////////\n        ////////////////AAAAAAAAAAAAAAAAD////wAAAAAAAAAAAAAAAA////8A//////////////AP////\n        AP/////////////wD////wD/mZmZn/mZzMER8A////8A/5mZmZ/5mczBEfAP////AP//////+ZnMwRHw\n        D////wD///////mZzMER8A////8A/5mZmZ/5mczBEfAP////AP+ZmZmf+ZnMwRHwD////wD///////mZ\n        zM//8A////8A/5mZmZ/5mczP//AP////AP+ZmZmf+ZnMz//wD////wD///////mZzM//8A////8A////\n        ///5mf////AP////AP+ZmZmf+Zn////wD////wD/mZmZn/mZ////8A//u7u7u7u7u7////////AP////\n        /wAPu7u////////wD///AAD7u/u/v///////8A//AP+7vwuwuw//AAAAD/AP//+7AACwCwsP/wAAAA/w\n        D/+7///7D7C/////////8A////APsPvwv/////////AP//AP+wC/D7AAAAAAAAAAD/8P+7D78PsAAAAA\n        AAAAAA///78P+w/7//////////////vw/78Pv/////////////+/D/vw/7//////////////AAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA\n        AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AP//////////8AAAAAAA\n        AA/w////////D/D5mZ/5/C8P8P////n8Lw/w+Zmf+fwvD/D////5/C8P8PmZn/n8/w/w///7uf//D7u7\n        u7u5//8P8Au/u////w8LsLu7/w//D78LC7vwAA8P8L8LC////w8L8LCwAAAAD78LD7//////AAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\n</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"rdlDesigner.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Fill</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/MDIChild.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"$this.Icon\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        AAABAAIAICAQAAAAAADoAgAAJgAAABAQEAAAAAAAKAEAAA4DAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC\n        AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/\n        AAAA//8A/wAAAP8A/wD//wAA////AP//////////////////////////////////////////////////\n        ////////////////AAAAAAAAAAAAAAAAD////wAAAAAAAAAAAAAAAA////8A//////////////AP////\n        AP/////////////wD////wD/mZmZn/mZzMER8A////8A/5mZmZ/5mczBEfAP////AP//////+ZnMwRHw\n        D////wD///////mZzMER8A////8A/5mZmZ/5mczBEfAP////AP+ZmZmf+ZnMwRHwD////wD///////mZ\n        zM//8A////8A/5mZmZ/5mczP//AP////AP+ZmZmf+ZnMz//wD////wD///////mZzM//8A////8A////\n        ///5mf////AP////AP+ZmZmf+Zn////wD////wD/mZmZn/mZ////8A//u7u7u7u7u7////////AP////\n        /wAPu7u////////wD///AAD7u/u/v///////8A//AP+7vwuwuw//AAAAD/AP//+7AACwCwsP/wAAAA/w\n        D/+7///7D7C/////////8A////APsPvwv/////////AP//AP+wC/D7AAAAAAAAAAD/8P+7D78PsAAAAA\n        AAAAAA///78P+w/7//////////////vw/78Pv/////////////+/D/vw/7//////////////AAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA\n        AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AP//////////8AAAAAAA\n        AA/w////////D/D5mZ/5/C8P8P////n8Lw/w+Zmf+fwvD/D////5/C8P8PmZn/n8/w/w///7uf//D7u7\n        u7u5//8P8Au/u////w8LsLu7/w//D78LC7vwAA8P8L8LC////w8L8LCwAAAAD78LD7//////AAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\n</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/Majorsilence.Reporting.ReportDesigner.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\t<PropertyGroup>\n\t\t<ProjectType>Local</ProjectType>\n\t\t<ApplicationIcon>App.ico</ApplicationIcon>\n\t\t<AssemblyName>Majorsilence.Reporting.RdlDesigner</AssemblyName>\n\t\t<DelaySign>false</DelaySign>\n\t\t<OutputType>Library</OutputType>\n\t\t<RootNamespace>Majorsilence.Reporting.RdlDesign</RootNamespace>\n\t\t<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>\n\t\t<UseWindowsForms>true</UseWindowsForms>\n\t\t<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>\n\t\t<GeneratePackageOnBuild>True</GeneratePackageOnBuild>\n\t\t<AssemblyTitle>RDL Designer</AssemblyTitle>\n\t\t<DelaySign>false</DelaySign>\n\t\t<PackageId>Majorsilence.Reporting.ReportDesigner</PackageId>\n\t\t<Configurations>Debug;Release;Debug-DrawingCompat;Release-DrawingCompat</Configurations>\n\t\t<TargetFrameworks>net48;net8.0-windows;net10.0-windows</TargetFrameworks>\n\t\t<WarningsAsErrors>4014</WarningsAsErrors>\n\t\t<ApplicationManifest>app.manifest</ApplicationManifest>\n\t\t<ApplicationHighDpiMode>SystemAware</ApplicationHighDpiMode>\n        <GenerateResourceUsePreserializedResources>true</GenerateResourceUsePreserializedResources>\n\t</PropertyGroup>\n\t<ItemGroup>\n\t\t<Reference Update=\"System\">\n\t\t\t<Name>System</Name>\n\t\t</Reference>\n\t\t<Reference Update=\"System.Data\">\n\t\t\t<Name>System.Data</Name>\n\t\t</Reference>\n\t\t<Reference Update=\"System.Drawing\">\n\t\t\t<Name>System.Drawing</Name>\n\t\t</Reference>\n\t\t<Reference Update=\"System.Xml\">\n\t\t\t<Name>System.XML</Name>\n\t\t</Reference>\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<Content Include=\"..\\jekyll_site\\schemas\\reporting\\2025\\12\\reportdefinition\\ReportDefinition.xsd\">\n\t\t  <Link>ReportDefinition.xsd</Link>\n\t\t  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t\t</Content>\n\t\t<Content Include=\"App.ico\" />\n\t\t<Content Include=\"calign.gif\" />\n\t\t<Content Include=\"chart.gif\" />\n\t\t<EmbeddedResource Include=\"csv.gif\" />\n\t\t<EmbeddedResource Include=\"excel.gif\" />\n\t\t<EmbeddedResource Include=\"tif.gif\" />\n\t\t<Content Include=\"selecttool.gif\" />\n\t\t<Content Include=\"html.gif\" />\n\t\t<Content Include=\"image.gif\" />\n\t\t<Content Include=\"line.gif\" />\n\t\t<Content Include=\"list.gif\" />\n\t\t<Content Include=\"matrix.gif\" />\n\t\t<Content Include=\"mht.gif\" />\n\t\t<Content Include=\"pdf.gif\" />\n\t\t<Content Include=\"rectangle.gif\" />\n\t\t<Content Include=\"subreport.gif\" />\n\t\t<Content Include=\"table.gif\" />\n\t\t<Content Include=\"text.gif\" />\n\t\t<Content Include=\"xml.gif\" />\n\t\t<Compile Update=\"BodyCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"ChartAxisCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"ChartCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"ChartLegendCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"CodeCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"BackgroundCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"ColorPicker.cs\">\n\t\t\t<SubType>Component</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"GridCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"DesignRuler.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"FontCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"RdlUserControl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"StaticSeriesCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"VisibilityCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"PropertyCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"CustomReportItemCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"DesignEditLines.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"DataSetRowsCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"DataSetsCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"DesignCtl.cs\" />\n\t\t<Compile Update=\"DesignXmlDraw.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"FiltersCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"GroupingCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"ImageCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"InteractivityCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"ListCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"MatrixCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"ModulesClassesCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"PositionCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"QueryParametersCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"RdlEditPreview.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"ReportCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"ReportParameterCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"ReportXmlCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"SimpleButton.cs\">\n\t\t\t<SubType>Component</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"SimpleToggle.cs\">\n\t\t\t<SubType>Component</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"SortingCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"StyleBorderCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"StyleCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"StyleTextCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"SubreportCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"TableColumnCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"TableCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"TableRowCtl.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<None Include=\"..\\RdlEngine\\RdlEngineConfig.xml\">\n\t\t\t<Link>RdlEngineConfig.xml</Link>\n\t\t\t<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t\t</None>\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<ProjectReference Include=\"..\\DataProviders\\Majorsilence.Reporting.DataProviders.csproj\" />\n\t\t<ProjectReference Include=\"..\\EncryptionProvider\\EncryptionProvider.csproj\" />\n\t\t<ProjectReference Include=\"..\\Majorsilence.WinformUtils\\Majorsilence.WinformUtils.csproj\" />\n\t\t<ProjectReference Include=\"..\\RdlCri\\Majorsilence.Reporting.RdlCri.csproj\" />\n\t\t<ProjectReference Include=\"..\\RdlEngine\\Majorsilence.Reporting.RdlEngine.csproj\" />\n\t\t<ProjectReference Include=\"..\\RdlViewer\\RdlViewer.csproj\" />\n\t</ItemGroup>\n\t<ItemGroup>\t\n\t\t<PackageReference Include=\"Microsoft.Data.Edm\" />\n\t\t<PackageReference Include=\"Microsoft.Data.OData\" />\n\t\t<PackageReference Include=\"System.Spatial\" />\n\t\t<PackageReference Include=\"Microsoft.Data.SqlClient\" />\n\t\t<PackageReference Include=\"System.Data.SqlClient\" />\n\t\t<PackageReference Include=\"fernandreu.ScintillaNET\" />\t\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<Compile Remove=\"ChartCtl - Copy.cs\" />\n\t\t<Compile Remove=\"StaticSeriesCtl - Copy.cs\" />\n\t</ItemGroup>\n\t<PropertyGroup Condition=\"'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net48|AnyCPU'\">\n\t\t<Optimize>False</Optimize>\n\t</PropertyGroup>\n\t<PropertyGroup Condition=\"'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release-DrawingCompat|net48|AnyCPU'\">\n\t  <Optimize>False</Optimize>\n\t</PropertyGroup>\n\t<PropertyGroup Condition=\"'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-windows|AnyCPU'\">\n\t\t<Optimize>False</Optimize>\n\t</PropertyGroup>\n\t<PropertyGroup Condition=\"'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release-DrawingCompat|net8.0-windows|AnyCPU'\">\n\t  <Optimize>False</Optimize>\n\t</PropertyGroup>\n    <ItemGroup Condition=\"'$(TargetFramework)' == 'net48'\">\n        <PackageReference Include=\"System.Resources.Extensions\" />\n    </ItemGroup>\n</Project>\n"
  },
  {
    "path": "RdlDesign/MatrixCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for ReportCtl.\n\t/// </summary>\n\tinternal class MatrixCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n        private List<XmlNode> _ReportItems;\n\t\tprivate DesignXmlDraw _Draw;\n\t\tbool fDataSet, fPBBefore, fPBAfter, fNoRows, fCellDataElementOutput, fCellDataElementName;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\tprivate System.Windows.Forms.ComboBox cbDataSet;\n\t\tprivate System.Windows.Forms.GroupBox groupBox1;\n\t\tprivate System.Windows.Forms.CheckBox chkPBBefore;\n\t\tprivate System.Windows.Forms.CheckBox chkPBAfter;\n\t\tprivate System.Windows.Forms.Label label1;\n\t\tprivate System.Windows.Forms.TextBox tbNoRows;\n\t\tprivate System.Windows.Forms.Label label3;\n\t\tprivate System.Windows.Forms.GroupBox groupBox2;\n\t\tprivate System.Windows.Forms.CheckBox chkCellContents;\n\t\tprivate System.Windows.Forms.TextBox tbCellDataElementName;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n        public MatrixCtl(DesignXmlDraw dxDraw, List<XmlNode> ris)\n\t\t{\n\t\t\t_ReportItems = ris;\n\t\t\t_Draw = dxDraw;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues();\t\t\t\n\t\t}\n\n\t\tprivate void InitValues()\n\t\t{\n\t\t\tXmlNode riNode = _ReportItems[0];\n\n\t\t\ttbNoRows.Text = _Draw.GetElementValue(riNode, \"NoRows\", \"\");\n\t\t\tcbDataSet.Items.AddRange(_Draw.DataSetNames);\n\t\t\tcbDataSet.Text = _Draw.GetDataSetNameValue(riNode);\n\t\t\tif (_Draw.GetReportItemDataRegionContainer(riNode) != null)\n\t\t\t\tcbDataSet.Enabled = false;\n\t\t\tchkPBBefore.Checked = _Draw.GetElementValue(riNode, \"PageBreakAtStart\", \"false\").ToLower()==\"true\"? true:false;\n\t\t\tchkPBAfter.Checked = _Draw.GetElementValue(riNode, \"PageBreakAtEnd\", \"false\").ToLower()==\"true\"? true:false;\n\t\t\tthis.chkCellContents.Checked = _Draw.GetElementValue(riNode, \"CellDataElementOutput\", \"Output\")==\"Output\"?true:false;\n\t\t\tthis.tbCellDataElementName.Text =  _Draw.GetElementValue(riNode, \"CellDataElementName\", \"Cell\");\n\n\t\t\tfNoRows = fDataSet = fPBBefore = fPBAfter = fCellDataElementOutput = fCellDataElementName = false;\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MatrixCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.cbDataSet = new System.Windows.Forms.ComboBox();\n\t\t\tthis.groupBox1 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.chkPBAfter = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkPBBefore = new System.Windows.Forms.CheckBox();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.tbNoRows = new System.Windows.Forms.TextBox();\n\t\t\tthis.tbCellDataElementName = new System.Windows.Forms.TextBox();\n\t\t\tthis.chkCellContents = new System.Windows.Forms.CheckBox();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.groupBox2 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.groupBox1.SuspendLayout();\n\t\t\tthis.groupBox2.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// cbDataSet\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbDataSet, \"cbDataSet\");\n\t\t\tthis.cbDataSet.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbDataSet.Name = \"cbDataSet\";\n\t\t\tthis.cbDataSet.SelectedIndexChanged += new System.EventHandler(this.cbDataSet_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// groupBox1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox1, \"groupBox1\");\n\t\t\tthis.groupBox1.Controls.Add(this.chkPBAfter);\n\t\t\tthis.groupBox1.Controls.Add(this.chkPBBefore);\n\t\t\tthis.groupBox1.Name = \"groupBox1\";\n\t\t\tthis.groupBox1.TabStop = false;\n\t\t\t// \n\t\t\t// chkPBAfter\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkPBAfter, \"chkPBAfter\");\n\t\t\tthis.chkPBAfter.Name = \"chkPBAfter\";\n\t\t\tthis.chkPBAfter.CheckedChanged += new System.EventHandler(this.chkPBAfter_CheckedChanged);\n\t\t\t// \n\t\t\t// chkPBBefore\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkPBBefore, \"chkPBBefore\");\n\t\t\tthis.chkPBBefore.Name = \"chkPBBefore\";\n\t\t\tthis.chkPBBefore.CheckedChanged += new System.EventHandler(this.chkPBBefore_CheckedChanged);\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// tbNoRows\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbNoRows, \"tbNoRows\");\n\t\t\tthis.tbNoRows.Name = \"tbNoRows\";\n\t\t\tthis.tbNoRows.TextChanged += new System.EventHandler(this.tbNoRows_TextChanged);\n\t\t\t// \n\t\t\t// tbCellDataElementName\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbCellDataElementName, \"tbCellDataElementName\");\n\t\t\tthis.tbCellDataElementName.Name = \"tbCellDataElementName\";\n\t\t\tthis.tbCellDataElementName.TextChanged += new System.EventHandler(this.tbCellDataElementName_TextChanged);\n\t\t\t// \n\t\t\t// chkCellContents\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkCellContents, \"chkCellContents\");\n\t\t\tthis.chkCellContents.Name = \"chkCellContents\";\n\t\t\tthis.chkCellContents.CheckedChanged += new System.EventHandler(this.chkCellContents_CheckedChanged);\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// groupBox2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox2, \"groupBox2\");\n\t\t\tthis.groupBox2.Controls.Add(this.tbCellDataElementName);\n\t\t\tthis.groupBox2.Controls.Add(this.chkCellContents);\n\t\t\tthis.groupBox2.Controls.Add(this.label3);\n\t\t\tthis.groupBox2.Name = \"groupBox2\";\n\t\t\tthis.groupBox2.TabStop = false;\n\t\t\t// \n\t\t\t// MatrixCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.groupBox2);\n\t\t\tthis.Controls.Add(this.tbNoRows);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Controls.Add(this.groupBox1);\n\t\t\tthis.Controls.Add(this.cbDataSet);\n\t\t\tthis.Controls.Add(this.label2);\n\t\t\tthis.Name = \"MatrixCtl\";\n\t\t\tthis.groupBox1.ResumeLayout(false);\n\t\t\tthis.groupBox2.ResumeLayout(false);\n\t\t\tthis.groupBox2.PerformLayout();\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\t\tpublic bool IsValid()\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// take information in control and apply to all the style nodes\n\t\t\t//  Only change information that has been marked as modified;\n\t\t\t//   this way when group is selected it is possible to change just\n\t\t\t//   the items you want and keep the rest the same.\n\t\t\t\t\n\t\t\tforeach (XmlNode riNode in this._ReportItems)\n\t\t\t\tApplyChanges(riNode);\n\n\t\t\t// No more changes\n\t\t\tfNoRows = fDataSet = fPBBefore = fPBAfter= fCellDataElementOutput = fCellDataElementName = false;\n\t\t}\n\n\t\tpublic void ApplyChanges(XmlNode node)\n\t\t{\n\t\t\tif (fNoRows)\n\t\t\t\t_Draw.SetElement(node, \"NoRows\", this.tbNoRows.Text);\n\t\t\tif (fDataSet)\n\t\t\t\t_Draw.SetElement(node, \"DataSetName\", this.cbDataSet.Text);\n\t\t\tif (fPBBefore)\n\t\t\t\t_Draw.SetElement(node, \"PageBreakAtStart\", this.chkPBBefore.Checked? \"true\":\"false\");\n\t\t\tif (fPBAfter)\n\t\t\t\t_Draw.SetElement(node, \"PageBreakAtEnd\", this.chkPBAfter.Checked? \"true\":\"false\");\n\t\t\tif (fCellDataElementOutput)\n\t\t\t\t_Draw.SetElement(node, \"CellDataElementOutput\", this.chkCellContents.Checked? \"Output\":\"NoOutput\");\n\t\t\tif (fCellDataElementName)\n\t\t\t{\n\t\t\t\tif (this.tbCellDataElementName.Text.Length > 0)\n\t\t\t\t\t_Draw.SetElement(node, \"CellDataElementName\", this.tbCellDataElementName.Text);\n\t\t\t\telse\n\t\t\t\t\t_Draw.RemoveElement(node, \"CellDataElementName\");\n\t\t\t}\n\t\t}\n\n\t\tprivate void cbDataSet_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfDataSet = true;\n\t\t}\n\n\t\tprivate void chkPBBefore_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPBBefore = true;\n\t\t}\n\n\t\tprivate void chkPBAfter_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPBAfter = true;\n\t\t}\n\n\t\tprivate void tbNoRows_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfNoRows = true;\n\t\t}\n\n\t\tprivate void tbCellDataElementName_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfCellDataElementName = true;\n\t\t}\n\n\t\tprivate void chkCellContents_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tthis.fCellDataElementOutput = true;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/MatrixCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>No rows message</value>\n  </data>\n  <data name=\"&gt;&gt;tbCellDataElementName.Name\" xml:space=\"preserve\">\n    <value>tbCellDataElementName</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSet.Name\" xml:space=\"preserve\">\n    <value>cbDataSet</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBAfter.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"cbDataSet.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"chkCellContents.Text\" xml:space=\"preserve\">\n    <value>Render cell contents</value>\n  </data>\n  <data name=\"&gt;&gt;chkCellContents.Name\" xml:space=\"preserve\">\n    <value>chkCellContents</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"cbDataSet.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>120, 16</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBBefore.Name\" xml:space=\"preserve\">\n    <value>chkPBBefore</value>\n  </data>\n  <data name=\"&gt;&gt;tbCellDataElementName.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBBefore.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>MatrixCtl</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;tbCellDataElementName.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"tbNoRows.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>120, 48</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>112, 16</value>\n  </data>\n  <data name=\"&gt;&gt;tbNoRows.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"chkPBAfter.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>128, 24</value>\n  </data>\n  <data name=\"chkPBBefore.Text\" xml:space=\"preserve\">\n    <value>Insert before Matrix</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"&gt;&gt;chkCellContents.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"chkPBAfter.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 48</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Page Breaks</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 23</value>\n  </data>\n  <data name=\"chkPBAfter.Text\" xml:space=\"preserve\">\n    <value>Insert after Matrix</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBAfter.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbNoRows.Text\" xml:space=\"preserve\">\n    <value>textBox1</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSet.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;chkCellContents.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSet.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Name\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;tbNoRows.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;tbCellDataElementName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 23</value>\n  </data>\n  <data name=\"groupBox2.Text\" xml:space=\"preserve\">\n    <value>XML</value>\n  </data>\n  <data name=\"tbCellDataElementName.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;tbNoRows.Name\" xml:space=\"preserve\">\n    <value>tbNoRows</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Cell Element Name</value>\n  </data>\n  <data name=\"groupBox1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 88</value>\n  </data>\n  <data name=\"tbCellDataElementName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>133, 42</value>\n  </data>\n  <data name=\"&gt;&gt;chkCellContents.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>400, 48</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSet.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"groupBox1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbNoRows.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBAfter.Name\" xml:space=\"preserve\">\n    <value>chkPBAfter</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkCellContents.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>160, 24</value>\n  </data>\n  <data name=\"groupBox2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>400, 72</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 48</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>472, 288</value>\n  </data>\n  <data name=\"tbNoRows.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>DataSet Name</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 16</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBBefore.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBAfter.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"chkPBBefore.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"cbDataSet.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>304, 21</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBBefore.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"groupBox2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"groupBox2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 152</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"chkCellContents.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"chkCellContents.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Name\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbNoRows.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>304, 20</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"chkPBBefore.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>128, 24</value>\n  </data>\n  <data name=\"chkPBAfter.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>192, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbCellDataElementName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>183, 20</value>\n  </data>\n  <data name=\"chkPBBefore.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/MatrixCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Набор данных</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Разрывы страниц</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"chkPBAfter.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>169, 24</value>\n  </data>\n  <data name=\"chkPBAfter.Text\" xml:space=\"preserve\">\n    <value>Вставлять после матрицы</value>\n  </data>\n  <data name=\"chkPBBefore.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>170, 24</value>\n  </data>\n  <data name=\"chkPBBefore.Text\" xml:space=\"preserve\">\n    <value>Вставлять перед матрицей</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>162, 23</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Сообщение, когда нет строк</value>\n  </data>\n  <data name=\"tbNoRows.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>192, 48</value>\n  </data>\n  <data name=\"tbNoRows.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>232, 20</value>\n  </data>\n  <data name=\"tbCellDataElementName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>178, 44</value>\n  </data>\n  <data name=\"chkCellContents.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>192, 24</value>\n  </data>\n  <data name=\"chkCellContents.Text\" xml:space=\"preserve\">\n    <value>Выводить содержимое ячеек</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>156, 16</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Название элемента ячейки</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/MatrixView.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.IO;\nusing System.Collections;\nusing System.Text;\nusing System.Drawing;\n\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// MatrixView:  builds a simplfied representation of the matrix so that it\n\t///  can be drawn or hit test in a simplified fashion.\n\t/// </summary>\n\tinternal class MatrixView\n\t{\n\t\tDesignXmlDraw _Draw;\n\t\tXmlNode _MatrixNode;\n\t\tint _Rows;\n\t\tint _HeaderRows;\n\t\tint _Columns;\n\t\tint _HeaderColumns;\n\t\tfloat _Height;\n\t\tfloat _Width;\n\t\tMatrixItem[,] _MatrixView;\n\t\tstring _ViewBuilt=null;\n\n\t\tpublic MatrixView(DesignXmlDraw dxDraw, XmlNode matrix)\n\t\t{\n\t\t\t_Draw = dxDraw;\n\t\t\t_MatrixNode = matrix;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tBuildView();\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\t_ViewBuilt = e.Message;\n\t\t\t}\n\t\t}\n\n\t\tinternal MatrixItem this[int row, int column] \n\t\t{\n\t\t\tget {return _MatrixView[row, column]; }\n\t\t}\n\n\t\tinternal int Columns\n\t\t{\n\t\t\tget {return _Columns;}\n\t\t}\n\n\t\tinternal int Rows\n\t\t{\n\t\t\tget {return _Rows;}\n\t\t}\n\n\t\tinternal int HeaderColumns\n\t\t{\n\t\t\tget {return _HeaderColumns;}\n\t\t}\n\n\t\tinternal int HeaderRows\n\t\t{\n\t\t\tget {return _HeaderRows;}\n\t\t}\n\n\t\tinternal float Height\n\t\t{\n\t\t\tget {return _Height;}\n\t\t}\n\n\t\tinternal float Width\n\t\t{\n\t\t\tget {return _Width;}\n\t\t}\n\n\t\tvoid BuildView()\n\t\t{\n\t\t\tCountRowColumns();\t\t// get the total count of rows and columns\n\t\t\t_MatrixView = new MatrixItem[_Rows, _Columns];\t// allocate the 2-dimensional array\n\t\t\tFillMatrix();\n\t\t}\n\n\t\tvoid CountRowColumns()\n\t\t{\n\t\t\tint mcc = CountMatrixColumns();\t\n\t\t\tint mrc = CountMatrixRows();\n\n\t\t\tint iColumnGroupings = this.CountColumnGroupings();\n\t\t\tint iRowGroupings = this.CountRowGroupings();\n\n\t\t\t_Rows = mrc + this.CountColumnGroupings() + \n\t\t\t\tCountRowGroupingSubtotals() * mrc;\n\n\t\t\t_Columns = mcc + iRowGroupings +\n\t\t\t\tCountColumnGroupingSubtotals() * mcc;\n\n\t\t\t_HeaderRows = iColumnGroupings;\n\t\t\t_HeaderColumns = iRowGroupings;\n\t\t}\n\n\t\tvoid FillMatrix()\n\t\t{\n\t\t\tFillMatrixColumnGroupings();\n\n\t\t\tFillMatrixRowGroupings();\n\n\t\t\tFillMatrixCorner();\n\n\t\t\tFillMatrixCells();\n\n\t\t\tFillMatrixHeights();\n\n\t\t\tFillMatrixWidths();\n\n\t\t\tFillMatrixCornerHeightWidth();\n\t\t}\n\n\t\tvoid FillMatrixHeights()\n\t\t{\n\t\t\t// fill out the heights for each row\n\t\t\tthis._Height = 0;\n\t\t\tfor (int row=0; row < this.Rows; row++)\n\t\t\t{\n\t\t\t\tfloat height=0;\n\t\t\t\tfor (int col= 0; col < this.Columns; col++)\n\t\t\t\t{\n\t\t\t\t\tMatrixItem mi = _MatrixView[row,col];\n\t\t\t\t\theight = Math.Max(height, mi.Height);\n\t\t\t\t}\n\t\t\t\tfor (int col= 0; col < this.Columns; col++)\n\t\t\t\t\t_MatrixView[row,col].Height = height;\n\n\t\t\t\tthis._Height += height;\n\t\t\t}\n\t\t}\n\n\t\tvoid FillMatrixWidths()\n\t\t{\n\t\t\t// fill out the widths for each column\n\t\t\tthis._Width = 0;\n\t\t\tfor (int col=0; col < this.Columns; col++)\n\t\t\t{\n\t\t\t\tfloat width=0;\n\t\t\t\tfor (int row= 0; row < this.Rows; row++)\n\t\t\t\t{\n\t\t\t\t\tMatrixItem mi = _MatrixView[row,col];\n\t\t\t\t\twidth = Math.Max(width, mi.Width);\n\t\t\t\t}\n\t\t\t\tfor (int row= 0; row < this.Rows; row++)\n\t\t\t\t\t_MatrixView[row,col].Width = width;\n\n\t\t\t\tthis._Width += width;\n\t\t\t}\n\t\t}\n\n\t\tvoid FillMatrixCornerHeightWidth()\n\t\t{\n\t\t\tif (this.Columns == 0 || this.Rows == 0)\n\t\t\t\treturn;\n\n\t\t\t// set the height and width for the corner\n\t\t\tMatrixItem mi = _MatrixView[0,0];\n\t\t\tmi.Height = 0;\n\t\t\tfor (int row=0; row < this._HeaderRows; row++)\n\t\t\t\tmi.Height += _MatrixView[row, 1].Height;\n\t\t\tmi.Width = 0;\n\t\t\tfor (int col=0; col < this._HeaderColumns; col++)\n\t\t\t\tmi.Width += _MatrixView[1, col].Width;\n\t\t}\n\n\t\tvoid FillMatrixCells()\n\t\t{\n\t\t\t// get a collection with the matrix cells\n\t\t\tint staticRows = this.CountMatrixRows();\n\t\t\tint staticCols = this.CountMatrixColumns();\n\t\t\tXmlNode[,] rc = new XmlNode[staticRows, staticCols];\n\n\t\t\tXmlNode mrows = DesignXmlDraw.FindNextInHierarchy(_MatrixNode, \"MatrixRows\");\n\t\t\tint ri=0;\n\t\t\tforeach (XmlNode mrow in mrows.ChildNodes)\n\t\t\t{\n\t\t\t\tint ci=0;\n\t\t\t\tXmlNode mcells = DesignXmlDraw.FindNextInHierarchy(mrow, \"MatrixCells\");\n\t\t\t\tforeach (XmlNode mcell in mcells.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\t// obtain the matrix cell\n\t\t\t\t\tXmlNode repi = DesignXmlDraw.FindNextInHierarchy(mcell, \"ReportItems\");\n\t\t\t\t\trc[ri,ci] = repi;\n\t\t\t\t\tci++;\n\t\t\t\t}\n\t\t\t\tri++;\n\t\t\t}\n\t\t\t// now fill out the rest of the matrix with empty entries\n\t\t\tMatrixItem mi;\n\n\t\t\t// Fill the middle (MatrixCells) with the contents of MatrixCells repeated\n\t\t\tfor (int row=_HeaderRows; row < this.Rows; row++)\n\t\t\t{\n\t\t\t\tint rowcell = staticRows == 0? 0: (row - _HeaderRows) % staticRows;\n\t\t\t\tint mcellCount=0;\n\t\t\t\tfor (int col= _HeaderColumns; col < this.Columns; col++)\n\t\t\t\t{\n\t\t\t\t\tif (_MatrixView[row, col] == null)\n\t\t\t\t\t{\n\t\t\t\t\t\tfloat width = GetMatrixColumnWidth(mcellCount);\n\t\t\t\t\t\tfloat height = GetMatrixRowHeight(rowcell);\n\t\t\t\t\t\tXmlNode n = rc[rowcell, mcellCount++] as XmlNode;\n\t\t\t\t\t\tif (mcellCount >= staticCols)\n\t\t\t\t\t\t\tmcellCount=0;\n\t\t\t\t\t\tmi = new MatrixItem(n);\n\t\t\t\t\t\tmi.Width = width;\n\t\t\t\t\t\tmi.Height = height;\n\t\t\t\t\t\t_MatrixView[row, col] = mi;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Make sure we have no null entries\n\t\t\tfor (int row=0; row < this.Rows; row++)\n\t\t\t{\n\t\t\t\tfor (int col= 0; col < this.Columns; col++)\n\t\t\t\t{\n\t\t\t\t\tif (_MatrixView[row, col] == null)\n\t\t\t\t\t{\n\t\t\t\t\t\tmi = new MatrixItem(null);\n\t\t\t\t\t\t_MatrixView[row, col] = mi;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tvoid FillMatrixCorner()\n\t\t{\n\t\t\tXmlNode corner = _Draw.GetNamedChildNode(_MatrixNode, \"Corner\");\n\t\t\tif (corner == null)\n\t\t\t\treturn;\n\n\t\t\tXmlNode ris = DesignXmlDraw.FindNextInHierarchy(corner, \"ReportItems\");\n\t\t\tMatrixItem mi = new MatrixItem(ris);\n\t\t\t_MatrixView[0,0] = mi;\n\t\t}\n\n\t\tfloat GetMatrixColumnWidth(int count)\n\t\t{\n\t\t\tXmlNode mcs =  DesignXmlDraw.FindNextInHierarchy(_MatrixNode, \"MatrixColumns\");\n\n\t\t\tforeach (XmlNode c in mcs.ChildNodes)\n\t\t\t{\n\t\t\t\tif (c.Name != \"MatrixColumn\")\n\t\t\t\t\tcontinue;\n\t\t\t\tif (count == 0)\n\t\t\t\t\treturn _Draw.GetSize(c, \"Width\");\n\t\t\t\tcount--;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\n\t\tvoid FillMatrixColumnGroupings()\n\t\t{\n\t\t\tXmlNode cGroupings = _Draw.GetNamedChildNode(_MatrixNode, \"ColumnGroupings\");\n\t\t\tif (cGroupings == null)\n\t\t\t\treturn;\n\n\t\t\tint rows=0;\n\t\t\tint cols=this._HeaderColumns;\n\t\t\tMatrixItem mi;\n\n\t\t\tXmlNode ris;\t\t\t// work variable to hold reportitems\n\t\t\tint staticCols = this.CountMatrixColumns();\n\n\t\t\tint subTotalCols=DesignXmlDraw.CountChildren(cGroupings, \"ColumnGrouping\", \"DynamicColumns\", \"Subtotal\");\n\t\t\tforeach (XmlNode c in cGroupings.ChildNodes)\n\t\t\t{\n\t\t\t\tif (c.Name != \"ColumnGrouping\")\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlNode scol = DesignXmlDraw.FindNextInHierarchy(c, \"StaticColumns\");\n\t\t\t\tif (scol != null)\n\t\t\t\t{\t// Static columns\n\t\t\t\t\tint ci=0;\n\t\t\t\t\tforeach (XmlNode sc in scol.ChildNodes)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (sc.Name != \"StaticColumn\")\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tris = DesignXmlDraw.FindNextInHierarchy(sc, \"ReportItems\");\n\t\t\t\t\t\tmi = new MatrixItem(ris);\n\t\t\t\t\t\tmi.Height = _Draw.GetSize(c, \"Height\");\n\t\t\t\t\t\tmi.Width = GetMatrixColumnWidth(ci);\n\t\t\t\t\t\t_MatrixView[rows, _HeaderColumns+ci] = mi;\n\t\t\t\t\t\tci++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\t// Dynamic Columns\n\t\t\t\t\tris = DesignXmlDraw.FindNextInHierarchy(c, \"DynamicColumns\", \"ReportItems\");\n\t\t\t\t\tmi = new MatrixItem(ris);\n\t\t\t\t\tmi.Height = _Draw.GetSize(c, \"Height\");\n\t\t\t\t\tmi.Width = GetMatrixColumnWidth(0);\n\t\t\t\t\t_MatrixView[rows, _HeaderColumns] = mi;\n\n\t\t\t\t\tXmlNode subtotal = DesignXmlDraw.FindNextInHierarchy(c, \"DynamicColumns\", \"Subtotal\");\n\t\t\t\t\tif (subtotal != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tris = DesignXmlDraw.FindNextInHierarchy(subtotal, \"ReportItems\");\n\t\t\t\t\t\tmi = new MatrixItem(ris);\n\t\t\t\t\t\tmi.Height = _Draw.GetSize(c, \"Height\");\n\t\t\t\t\t\tmi.Width = GetMatrixColumnWidth(0);\t\t// TODO this is wrong!! should be total of all static widths\n\t\t\t\t\t\t_MatrixView[rows, _HeaderColumns+(staticCols-1)+subTotalCols] = mi;\n\t\t\t\t\t\tsubTotalCols--;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\trows++;\t\t// add a row per ColumnGrouping\n\t\t\t}\n\t\t}\n\n\t\tfloat GetMatrixRowHeight(int count)\n\t\t{\n\t\t\tXmlNode mcs =  DesignXmlDraw.FindNextInHierarchy(_MatrixNode, \"MatrixRows\");\n\n\t\t\tforeach (XmlNode c in mcs.ChildNodes)\n\t\t\t{\n\t\t\t\tif (c.Name != \"MatrixRow\")\n\t\t\t\t\tcontinue;\n\t\t\t\tif (count == 0)\n\t\t\t\t\treturn _Draw.GetSize(c, \"Height\");\n\t\t\t\tcount--;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\t\t\n\t\tvoid FillMatrixRowGroupings()\n\t\t{\n\t\t\tXmlNode rGroupings = _Draw.GetNamedChildNode(_MatrixNode, \"RowGroupings\");\n\t\t\tif (rGroupings == null)\n\t\t\t\treturn;\n\t    \tfloat height = _Draw.GetSize(\n\t\t\t\tDesignXmlDraw.FindNextInHierarchy(_MatrixNode, \"MatrixRows\", \"MatrixRow\"),\n\t\t\t\t\"Height\");\n\t\t\tint cols = 0;\n\t\t\tint staticRows = this.CountMatrixRows();\n\t\t\tint subtotalrows= DesignXmlDraw.CountChildren(rGroupings, \"RowGrouping\", \"DynamicRows\", \"Subtotal\");\n\t\t\tMatrixItem mi;\n\t\t\tforeach (XmlNode c in rGroupings.ChildNodes)\n\t\t\t{\n\t\t\t\tif (c.Name != \"RowGrouping\")\n\t\t\t\t\tcontinue;\n\n\t\t\t\tXmlNode srow = DesignXmlDraw.FindNextInHierarchy(c, \"StaticRows\");\n\t\t\t\tif (srow != null)\n\t\t\t\t{\t// Static rows\n\t\t\t\t\tint ri=0;\n\t\t\t\t\tforeach (XmlNode sr in srow.ChildNodes)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (sr.Name != \"StaticRow\")\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tXmlNode ris = DesignXmlDraw.FindNextInHierarchy(sr, \"ReportItems\");\n\t\t\t\t\t\tmi = new MatrixItem(ris);\n\t\t\t\t\t\tmi.Width = _Draw.GetSize(c, \"Width\");\n\t\t\t\t\t\tmi.Height = GetMatrixRowHeight(ri);\n\t\t\t\t\t\t_MatrixView[_HeaderRows+ri, cols] = mi;\n\t\t\t\t\t\tri++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tXmlNode ris = DesignXmlDraw.FindNextInHierarchy(c, \"DynamicRows\", \"ReportItems\");\n\t\t\t\t\tmi = new MatrixItem(ris);\n\t\t\t\t\tmi.Width = _Draw.GetSize(c, \"Width\");\n\t\t\t\t\tmi.Height = height;\n\t\t\t\t\t_MatrixView[_HeaderRows, cols] = mi;\n\n\t\t\t\t\tXmlNode subtotal = DesignXmlDraw.FindNextInHierarchy(c, \"DynamicRows\", \"Subtotal\");\n\t\t\t\t\tif (subtotal != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tris = DesignXmlDraw.FindNextInHierarchy(subtotal, \"ReportItems\");\n\t\t\t\t\t\tmi = new MatrixItem(ris);\n\t\t\t\t\t\tmi.Width = _Draw.GetSize(c, \"Width\");\n\t\t\t\t\t\tmi.Height = height;\n\t\t\t\t\t\t_MatrixView[_HeaderRows+(staticRows-1)+subtotalrows, cols] = mi;\n\t\t\t\t\t\tsubtotalrows--;\t// these go backwards \n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcols++;\t\t// add a column per RowGrouping\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the count of static columns or 1\n\t\t/// </summary>\n\t\t/// <returns></returns>\n\t\tint CountMatrixColumns()\n\t\t{\n\t\t\tXmlNode cGroupings = _Draw.GetNamedChildNode(_MatrixNode, \"ColumnGroupings\");\n\t\t\tif (cGroupings == null)\n\t\t\t\treturn 1;\t// 1 column\n\n\t\t\t// Get the number of static columns\n\t\t\tforeach (XmlNode c in cGroupings.ChildNodes)\n\t\t\t{\n\t\t\t\tif (c.Name != \"ColumnGrouping\")\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlNode scol = DesignXmlDraw.FindNextInHierarchy(c, \"StaticColumns\");\n\t\t\t\tif (scol == null)\t// must be dynamic column\n\t\t\t\t\tcontinue;\n\t\t\t\tint ci=0;\n\t\t\t\tforeach (XmlNode sc in scol.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (sc.Name == \"StaticColumn\")\n\t\t\t\t\t\tci++;\n\t\t\t\t}\n\t\t\t\treturn ci;\t\t// only one StaticColumns allowed in a column grouping\n\t\t\t}\n\t\t\treturn 1;\t// 1 column\n\t\t}\n\t\t/// <summary>\n\t\t/// Returns the count of static rows or 1\n\t\t/// </summary>\n\t\t/// <returns></returns>\n\t\tint CountMatrixRows()\n\t\t{\n\t\t\tXmlNode rGroupings = _Draw.GetNamedChildNode(_MatrixNode, \"RowGroupings\");\n\t\t\tif (rGroupings == null)\n\t\t\t\treturn 1;\t// 1 row\n\n\t\t\t// Get the number of static columns\n\t\t\tforeach (XmlNode c in rGroupings.ChildNodes)\n\t\t\t{\n\t\t\t\tif (c.Name != \"RowGrouping\")\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlNode scol = DesignXmlDraw.FindNextInHierarchy(c, \"StaticRows\");\n\t\t\t\tif (scol == null)\t// must be dynamic column\n\t\t\t\t\tcontinue;\n\t\t\t\tint ci=0;\n\t\t\t\tforeach (XmlNode sc in scol.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (sc.Name == \"StaticRow\")\n\t\t\t\t\t\tci++;\n\t\t\t\t}\n\t\t\t\treturn ci;\t\t// only one StaticRows allowed in a row grouping\n\t\t\t}\n\t\t\treturn 1;\t// 1 row\n\t\t}\n\t\t/// <summary>\n\t\t/// Returns the count of ColumnGroupings\n\t\t/// </summary>\n\t\t/// <returns></returns>\n\t\tint CountColumnGroupings()\n\t\t{\n\t\t\tXmlNode cGroupings = _Draw.GetNamedChildNode(_MatrixNode, \"ColumnGroupings\");\n\t\t\tif (cGroupings == null)\n\t\t\t\treturn 0;\n\n\t\t\t// Get the number of column groups\n\t\t\tint ci=0;\n\t\t\tforeach (XmlNode c in cGroupings.ChildNodes)\n\t\t\t{\n\t\t\t\tif (c.Name != \"ColumnGrouping\")\n\t\t\t\t\tcontinue;\n\t\t\t\tci++;\n\t\t\t}\n\t\t\treturn ci;\t\n\t\t}\n\t\t/// <summary>\n\t\t/// Returns the count of row grouping\n\t\t/// </summary>\n\t\t/// <returns></returns>\n\t\tint CountRowGroupings()\n\t\t{\n\t\t\tXmlNode rGroupings = _Draw.GetNamedChildNode(_MatrixNode, \"RowGroupings\");\n\t\t\tif (rGroupings == null)\n\t\t\t\treturn 0;\t// 1 row\n\n\t\t\t// Get the number of row groupings\n\t\t\tint ri=0;\n\t\t\tforeach (XmlNode c in rGroupings.ChildNodes)\n\t\t\t{\n\t\t\t\tif (c.Name != \"RowGrouping\")\n\t\t\t\t\tcontinue;\n\t\t\t\tri++;\n\t\t\t}\n\t\t\treturn ri;\t// row groupings\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the count of ColumnGroupings with subtotals\n\t\t/// </summary>\n\t\t/// <returns></returns>\n\t\tint CountColumnGroupingSubtotals()\n\t\t{\n\t\t\tXmlNode cGroupings = _Draw.GetNamedChildNode(_MatrixNode, \"ColumnGroupings\");\n\t\t\tif (cGroupings == null)\n\t\t\t\treturn 0;\n\n\t\t\t// Get the number of column groups with subtotals\n\t\t\tint ci=0;\n\t\t\tforeach (XmlNode c in cGroupings.ChildNodes)\n\t\t\t{\n\t\t\t\tif (c.Name != \"ColumnGrouping\")\n\t\t\t\t\tcontinue;\n\n\t\t\t\tXmlNode subtotal = DesignXmlDraw.FindNextInHierarchy(c, \"DynamicColumns\", \"Subtotal\");\n\t\t\t\tif (subtotal != null)\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\tci++;\n\t\t\t}\n\t\t\treturn ci;\t\n\t\t}\n\t\t/// <summary>\n\t\t/// Returns the count of row grouping subtotals\n\t\t/// </summary>\n\t\t/// <returns></returns>\n\t\tint CountRowGroupingSubtotals()\n\t\t{\n\t\t\tXmlNode rGroupings = _Draw.GetNamedChildNode(_MatrixNode, \"RowGroupings\");\n\t\t\tif (rGroupings == null)\n\t\t\t\treturn 0;\t// 1 row\n\n\t\t\t// Get the number of row groupings\n\t\t\tint ri=0;\n\t\t\tforeach (XmlNode c in rGroupings.ChildNodes)\n\t\t\t{\n\t\t\t\tif (c.Name != \"RowGrouping\")\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlNode subtotal = DesignXmlDraw.FindNextInHierarchy(c, \"DynamicRows\", \"Subtotal\");\n\t\t\t\tif (subtotal != null)\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\tri++;\n\t\t\t}\n\t\t\treturn ri;\t// row grouping subtotals\n\t\t}\n\n\t}\n\n\tclass MatrixItem\n\t{\n\t\tXmlNode _ReportItem;\n\t\tfloat _Width;\n\t\tfloat _Height;\n\n\t\tpublic MatrixItem(XmlNode ri)\n\t\t{\n\t\t\t_ReportItem = ri;\n\t\t}\n\n\t\tinternal XmlNode ReportItem\n\t\t{\n\t\t\tget {return _ReportItem;}\n\t\t\tset {_ReportItem = value;}\n\t\t}\n\n\t\tinternal float Width\n\t\t{\n\t\t\tget {return _Width;}\n\t\t\tset {_Width = value;}\n\t\t}\n\n\t\tinternal float Height\n\t\t{\n\t\t\tget {return _Height;}\n\t\t\tset {_Height = value;}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/ModulesClassesCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.IO;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for ModulesClassesCtl.\n\t/// </summary>\n\tinternal class ModulesClassesCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n\t\tprivate DesignXmlDraw _Draw;\n\t\tprivate DataTable _DTCM;\n\t\tprivate DataTable _DTCL;\n\n\t\tprivate System.Windows.Forms.Label label1;\n\t\tprivate System.Windows.Forms.Button bDeleteCM;\n\t\tprivate System.Windows.Forms.DataGridView dgCodeModules;\n\t\tprivate System.Windows.Forms.Button bDeleteClass;\n\t\tprivate System.Windows.Forms.DataGridView dgClasses;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n\t\tinternal ModulesClassesCtl(DesignXmlDraw dxDraw)\n\t\t{\n\t\t\t_Draw = dxDraw;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues();\t\t\t\n\t\t}\n\n\t\tprivate void InitValues()\n\t\t{\n\t\t\tBuildCodeModules();\n\t\t\tBuildClasses();\n\t\t}\n\n\t\tprivate void BuildCodeModules()\n\t\t{\n\t\t\tXmlNode rNode = _Draw.GetReportNode();\n\n\t\t\t// Initialize the DataTable\n\t\t\t_DTCM = new DataTable();\n\t\t\t_DTCM.Columns.Add(new DataColumn(\"Code Module\", typeof(string)));\n\n\t\t\tstring[] rowValues = new string[1];\n\t\t\tXmlNode cmsNode = _Draw.GetNamedChildNode(rNode, \"CodeModules\");\n\n\t\t\tif (cmsNode != null)\n\t\t\t\tforeach (XmlNode cmNode in cmsNode.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (cmNode.NodeType != XmlNodeType.Element || \n\t\t\t\t\t\tcmNode.Name != \"CodeModule\")\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\trowValues[0] = cmNode.InnerText;\n\n\t\t\t\t\t_DTCM.Rows.Add(rowValues);\n\t\t\t\t}\n\t\t\tthis.dgCodeModules.DataSource = _DTCM;\n\t\t}\n\n\t\tprivate void BuildClasses()\n\t\t{\n\t\t\tXmlNode rNode = _Draw.GetReportNode();\n\n\t\t\t// Initialize the DataTable\n\t\t\t_DTCL = new DataTable();\n\t\t\t_DTCL.Columns.Add(new DataColumn(\"Class Name\", typeof(string)));\n\t\t\t_DTCL.Columns.Add(new DataColumn(\"Instance Name\", typeof(string)));\n\n\t\t\tstring[] rowValues = new string[2];\n\t\t\tXmlNode clsNode = _Draw.GetNamedChildNode(rNode, \"Classes\");\n\n\t\t\tif (clsNode != null)\n\t\t\t\tforeach (XmlNode clNode in clsNode.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (clNode.NodeType != XmlNodeType.Element || \n\t\t\t\t\t\tclNode.Name != \"Class\")\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tXmlNode node = _Draw.GetNamedChildNode(clNode, \"ClassName\");\n\t\t\t\t\tif (node != null)\n\t\t\t\t\t\trowValues[0] = node.InnerText;\n\n\t\t\t\t\tnode = _Draw.GetNamedChildNode(clNode, \"InstanceName\");\n\t\t\t\t\tif (node != null)\n\t\t\t\t\t\trowValues[1] = node.InnerText;\n\n\t\t\t\t\t_DTCL.Rows.Add(rowValues);\n\t\t\t\t}\n\t\t\tthis.dgClasses.DataSource = _DTCL;\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ModulesClassesCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.bDeleteCM = new System.Windows.Forms.Button();\n\t\t\tthis.dgCodeModules = new System.Windows.Forms.DataGridView();\n\t\t\tthis.bDeleteClass = new System.Windows.Forms.Button();\n\t\t\tthis.dgClasses = new System.Windows.Forms.DataGridView();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.dgCodeModules)).BeginInit();\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.dgClasses)).BeginInit();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// bDeleteCM\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bDeleteCM, \"bDeleteCM\");\n\t\t\tthis.bDeleteCM.Name = \"bDeleteCM\";\n\t\t\tthis.bDeleteCM.Click += new System.EventHandler(this.bDeleteCM_Click);\n\t\t\t// \n\t\t\t// dgCodeModules\n\t\t\t// \n\t\t\tresources.ApplyResources(this.dgCodeModules, \"dgCodeModules\");\n\t\t\tthis.dgCodeModules.DataMember = \"\";\n\t\t\tthis.dgCodeModules.Name = \"dgCodeModules\";\n\t\t\t// \n\t\t\t// bDeleteClass\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bDeleteClass, \"bDeleteClass\");\n\t\t\tthis.bDeleteClass.Name = \"bDeleteClass\";\n\t\t\tthis.bDeleteClass.Click += new System.EventHandler(this.bDeleteClass_Click);\n\t\t\t// \n\t\t\t// dgClasses\n\t\t\t// \n\t\t\tresources.ApplyResources(this.dgClasses, \"dgClasses\");\n\t\t\tthis.dgClasses.DataMember = \"\";\n\t\t\tthis.dgClasses.Name = \"dgClasses\";\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// ModulesClassesCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.bDeleteClass);\n\t\t\tthis.Controls.Add(this.dgClasses);\n\t\t\tthis.Controls.Add(this.label2);\n\t\t\tthis.Controls.Add(this.bDeleteCM);\n\t\t\tthis.Controls.Add(this.dgCodeModules);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Name = \"ModulesClassesCtl\";\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.dgCodeModules)).EndInit();\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.dgClasses)).EndInit();\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n\t\tpublic bool IsValid()\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\tApplyCodeModules();\n\t\t\tApplyClasses();\n\t\t}\n\t\t\n\t\tprivate void ApplyCodeModules()\n\t\t{\n\t\t\tXmlNode rNode = _Draw.GetReportNode(); \n\t\t\t_Draw.RemoveElement(rNode, \"CodeModules\");\n\t\t\tif (!HasRows(this._DTCM, 1))\n\t\t\t\treturn;\t\t\t\t\n\n\t\t\t// Set the CodeModules\n\t\t\tXmlNode cms = _Draw.CreateElement(rNode, \"CodeModules\", null);\n\t\t\tforeach (DataRow dr in _DTCM.Rows)\n\t\t\t{\n\t\t\t\tif (dr[0] == DBNull.Value ||\n\t\t\t\t\tdr[0].ToString().Trim().Length <= 0)\n\t\t\t\t\tcontinue;\n\n\t\t\t\t_Draw.CreateElement(cms, \"CodeModule\", dr[0].ToString());\n\t\t\t}\n\t\t}\n\n\t\tprivate void ApplyClasses()\n\t\t{\n\t\t\tXmlNode rNode = _Draw.GetReportNode(); \n\t\t\t_Draw.RemoveElement(rNode, \"Classes\");\n\t\t\tif (!HasRows(this._DTCL, 2))\n\t\t\t\treturn;\t\t\t\t\n\n\t\t\t// Set the classes\n\t\t\tXmlNode cs = _Draw.CreateElement(rNode, \"Classes\", null);\n\t\t\tforeach (DataRow dr in _DTCL.Rows)\n\t\t\t{\n\t\t\t\tif (dr[0] == DBNull.Value ||\n\t\t\t\t\tdr[1] == DBNull.Value ||\n\t\t\t\t\tdr[0].ToString().Trim().Length <= 0 ||\n\t\t\t\t\tdr[1].ToString().Trim().Length <= 0)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tXmlNode c = _Draw.CreateElement(cs, \"Class\", null);\n\t\t\t\t_Draw.CreateElement(c, \"ClassName\", dr[0].ToString());\n\t\t\t\t_Draw.CreateElement(c, \"InstanceName\", dr[1].ToString());\n\t\t\t}\n\n\t\t}\n\n\t\tprivate bool HasRows(DataTable dt, int columns)\n\t\t{\n\t\t\tforeach (DataRow dr in dt.Rows)\n\t\t\t{\n\t\t\t\tbool bCompleteRow = true;\n\t\t\t\tfor (int i=0; i < columns; i++)\n\t\t\t\t{\n\t\t\t\t\tif (dr[i] == DBNull.Value)\n\t\t\t\t\t{\n\t\t\t\t\t\tbCompleteRow = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tstring ge = (string) dr[i];\n\t\t\t\t\tif (ge.Length <= 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tbCompleteRow = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (bCompleteRow)\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tprivate void bDeleteCM_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cr = this.dgCodeModules.CurrentRow.Index;\n\t\t\tif (cr < 0)\t\t// already at the top\n\t\t\t\treturn;\n\n\t\t\t_DTCM.Rows.RemoveAt(cr);\n\n\t\t}\n\n\t\tprivate void bDeleteClass_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cr = this.dgClasses.CurrentRow.Index;\n\t\t\tif (cr < 0)\t\t// already at the top\n\t\t\t\treturn;\n\n\t\t\t_DTCL.Rows.RemoveAt(cr);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/ModulesClassesCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bDeleteCM.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bDeleteCM.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>400, 32</value>\n  </data>\n  <data name=\"bDeleteCM.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 20</value>\n  </data>\n  <data name=\"&gt;&gt;bDeleteClass.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"dgClasses.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>376, 88</value>\n  </data>\n  <data name=\"&gt;&gt;dgTableStyleCM.Name\" xml:space=\"preserve\">\n    <value>dgTableStyleCM</value>\n  </data>\n  <data name=\"&gt;&gt;bDeleteCM.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;dgCodeModules.Name\" xml:space=\"preserve\">\n    <value>dgCodeModules</value>\n  </data>\n  <data name=\"bDeleteClass.Text\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 136</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Enter the names of the code module for use in expressions (e.g. MyRoutines.dll)</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>ModulesClassesCtl</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;dgClasses.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;dgTableStyleCL.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGridTableStyle, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 8</value>\n  </data>\n  <data name=\"&gt;&gt;bDeleteCM.Name\" xml:space=\"preserve\">\n    <value>bDeleteCM</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dgClasses.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"dgCodeModules.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>448, 23</value>\n  </data>\n  <data name=\"&gt;&gt;dgCodeModules.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;dgCodeModules.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"bDeleteClass.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;bDeleteClass.Name\" xml:space=\"preserve\">\n    <value>bDeleteClass</value>\n  </data>\n  <data name=\"&gt;&gt;dgTableStyleCL.Name\" xml:space=\"preserve\">\n    <value>dgTableStyleCL</value>\n  </data>\n  <data name=\"dgCodeModules.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 32</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"dgClasses.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Enter the classes with names that will be instantiated for use in expressions</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>448, 23</value>\n  </data>\n  <data name=\"dgClasses.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 160</value>\n  </data>\n  <data name=\"bDeleteClass.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>400, 160</value>\n  </data>\n  <data name=\"&gt;&gt;bDeleteClass.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;dgClasses.Name\" xml:space=\"preserve\">\n    <value>dgClasses</value>\n  </data>\n  <data name=\"bDeleteCM.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;dgCodeModules.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGrid, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"dgCodeModules.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>376, 88</value>\n  </data>\n  <data name=\"&gt;&gt;bDeleteCM.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dgTableStyleCM.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGridTableStyle, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bDeleteClass.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"bDeleteCM.Text\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"bDeleteClass.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 20</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>472, 288</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;dgClasses.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGrid, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/ModulesClassesCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>461, 23</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Введите имена модулей для использования в выражениях (например MyRoutines.dll)</value>\n  </data>\n  <data name=\"bDeleteCM.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>60, 20</value>\n  </data>\n  <data name=\"bDeleteCM.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"bDeleteClass.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>60, 20</value>\n  </data>\n  <data name=\"bDeleteClass.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>461, 23</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Введите названия классов, которые будут созданы для использования в выражениях</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/PositionCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for ReportCtl.\n\t/// </summary>\n\tinternal class PositionCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n        private List<XmlNode> _ReportItems;\n\t\tprivate DesignXmlDraw _Draw;\n\t\tbool fName, fLeft, fTop, fWidth, fHeight, fZIndex, fColSpan;\n\t\tbool fCanGrow, fCanShrink, fHideDuplicates, fToggleImage, fDataElementStyle;\n\t\tprivate System.Windows.Forms.Label label5;\n\t\tprivate System.Windows.Forms.Label label6;\n\t\tprivate System.Windows.Forms.Label label7;\n\t\tprivate System.Windows.Forms.Label label8;\n\t\tprivate System.Windows.Forms.Label label9;\n\t\tprivate System.Windows.Forms.TextBox tbWidth;\n\t\tprivate System.Windows.Forms.TextBox tbTop;\n\t\tprivate System.Windows.Forms.TextBox tbLeft;\n\t\tprivate System.Windows.Forms.NumericUpDown tbZIndex;\n\t\tprivate System.Windows.Forms.Label label1;\n\t\tprivate System.Windows.Forms.TextBox tbName;\n\t\tprivate System.Windows.Forms.TextBox tbHeight;\n\t\tprivate System.Windows.Forms.GroupBox gbPosition;\n\t\tprivate System.Windows.Forms.Label lblColSpan;\n\t\tprivate System.Windows.Forms.NumericUpDown tbColSpan;\n\t\tprivate System.Windows.Forms.GroupBox gbText;\n\t\tprivate System.Windows.Forms.CheckBox chkCanGrow;\n\t\tprivate System.Windows.Forms.CheckBox chkCanShrink;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\tprivate System.Windows.Forms.ComboBox cbHideDuplicates;\n\t\tprivate System.Windows.Forms.Label label3;\n\t\tprivate System.Windows.Forms.ComboBox cbDataElementStyle;\n\t\tprivate System.Windows.Forms.Label label4;\n\t\tprivate System.Windows.Forms.ComboBox cbToggleImage;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n        internal PositionCtl(DesignXmlDraw dxDraw, List<XmlNode> ris)\n\t\t{\n\t\t\t_ReportItems = ris;\n\t\t\t_Draw = dxDraw;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues();\t\t\t\n\t\t}\n\n\t\tprivate void InitValues()\n\t\t{\n\t\t\tXmlNode riNode = _ReportItems[0];\n\t\t\tXmlNode tcell = null;\n\n\t\t\tif (_ReportItems.Count > 1)\n\t\t\t{\n\t\t\t\ttbName.Text = Strings.PositionCtl_InitValues_GroupSelected;\n\t\t\t\ttbName.Enabled = false;\n\t\t\t\tlblColSpan.Visible = tbColSpan.Visible = false;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tXmlAttribute xa = riNode.Attributes[\"Name\"];\n\t\t\t\ttbName.Text = xa == null? \"\": xa.Value;\n\t\t\t\tXmlNode ris = riNode.ParentNode;\n\t\t\t\ttcell = ris.ParentNode;\n\t\t\t\tif (tcell.Name != \"TableCell\")\n\t\t\t\t\ttcell = null;\n\t\t\t}\n\t\t\t\n\t\t\tthis.tbZIndex.Value = Convert.ToInt32(_Draw.GetElementValue(riNode, \"ZIndex\", \"0\"));\n\n\t\t\tif (tcell != null)\n\t\t\t{\n\t\t\t\tgbPosition.Visible = false;\n\t\t\t\tthis.gbText.Location = gbPosition.Location;\n\t\t\t\tstring colspan = _Draw.GetElementValue(tcell, \"ColSpan\", \"1\");\n\t\t\t\ttbColSpan.Value = Convert.ToDecimal(colspan);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlblColSpan.Visible = tbColSpan.Visible = false;\n\t\t\t\ttbLeft.Text = _Draw.GetElementValue(riNode, \"Left\", \"0pt\");\n\t\t\t\ttbTop.Text = _Draw.GetElementValue(riNode, \"Top\", \"0pt\");\n\t\t\t\ttbWidth.Text = _Draw.GetElementValue(riNode, \"Width\", \"\");\n\t\t\t\ttbHeight.Text = _Draw.GetElementValue(riNode, \"Height\", \"\");\n\t\t\t}\n\n\t\t\tif (riNode.Name == \"Textbox\")\n\t\t\t{\n\t\t\t\tthis.cbDataElementStyle.Text = _Draw.GetElementValue(riNode, \"DataElementStyle\", \"Auto\");\n\t\t\t\tcbHideDuplicates.Items.Add(\"\");\n\t\t\t\tobject[] dsn = _Draw.DataSetNames;\n\t\t\t\tif (dsn != null)\n\t\t\t\t\tcbHideDuplicates.Items.AddRange(dsn);\n\t\t\t\tobject[] grps = _Draw.GroupingNames;\n\t\t\t\tif (grps != null)\n\t\t\t\t\tcbHideDuplicates.Items.AddRange(grps);\n\t\t\t\tthis.cbHideDuplicates.Text = _Draw.GetElementValue(riNode, \"HideDuplicates\", \"\");\n\t\t\t\tthis.chkCanGrow.Checked = _Draw.GetElementValue(riNode, \"CanGrow\", \"false\").ToLower() == \"true\";\n\t\t\t\tthis.chkCanShrink.Checked = _Draw.GetElementValue(riNode, \"CanShrink\", \"false\").ToLower() == \"true\";\n\t\t\t\tXmlNode initstate = DesignXmlDraw.FindNextInHierarchy(riNode, \"ToggleImage\", \"InitialState\");\n\t\t\t\tthis.cbToggleImage.Text = initstate == null? \"\": initstate.InnerText;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.gbText.Visible = false;\n\t\t\t}\n\n\t\t\tfName = fLeft = fTop = fWidth = fHeight = fZIndex = fColSpan = \n\t\t\t\tfCanGrow = fCanShrink = fHideDuplicates = fToggleImage = fDataElementStyle = false;\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PositionCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.gbPosition = new System.Windows.Forms.GroupBox();\n\t\t\tthis.tbHeight = new System.Windows.Forms.TextBox();\n\t\t\tthis.label7 = new System.Windows.Forms.Label();\n\t\t\tthis.tbWidth = new System.Windows.Forms.TextBox();\n\t\t\tthis.label8 = new System.Windows.Forms.Label();\n\t\t\tthis.tbTop = new System.Windows.Forms.TextBox();\n\t\t\tthis.label6 = new System.Windows.Forms.Label();\n\t\t\tthis.tbLeft = new System.Windows.Forms.TextBox();\n\t\t\tthis.label5 = new System.Windows.Forms.Label();\n\t\t\tthis.label9 = new System.Windows.Forms.Label();\n\t\t\tthis.tbZIndex = new System.Windows.Forms.NumericUpDown();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.tbName = new System.Windows.Forms.TextBox();\n\t\t\tthis.lblColSpan = new System.Windows.Forms.Label();\n\t\t\tthis.tbColSpan = new System.Windows.Forms.NumericUpDown();\n\t\t\tthis.gbText = new System.Windows.Forms.GroupBox();\n\t\t\tthis.cbToggleImage = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label4 = new System.Windows.Forms.Label();\n\t\t\tthis.cbDataElementStyle = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.cbHideDuplicates = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.chkCanShrink = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkCanGrow = new System.Windows.Forms.CheckBox();\n\t\t\tthis.gbPosition.SuspendLayout();\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.tbZIndex)).BeginInit();\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.tbColSpan)).BeginInit();\n\t\t\tthis.gbText.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// gbPosition\n\t\t\t// \n\t\t\tresources.ApplyResources(this.gbPosition, \"gbPosition\");\n\t\t\tthis.gbPosition.Controls.Add(this.tbHeight);\n\t\t\tthis.gbPosition.Controls.Add(this.label7);\n\t\t\tthis.gbPosition.Controls.Add(this.tbWidth);\n\t\t\tthis.gbPosition.Controls.Add(this.label8);\n\t\t\tthis.gbPosition.Controls.Add(this.tbTop);\n\t\t\tthis.gbPosition.Controls.Add(this.label6);\n\t\t\tthis.gbPosition.Controls.Add(this.tbLeft);\n\t\t\tthis.gbPosition.Controls.Add(this.label5);\n\t\t\tthis.gbPosition.Controls.Add(this.label9);\n\t\t\tthis.gbPosition.Controls.Add(this.tbZIndex);\n\t\t\tthis.gbPosition.Name = \"gbPosition\";\n\t\t\tthis.gbPosition.TabStop = false;\n\t\t\t// \n\t\t\t// tbHeight\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbHeight, \"tbHeight\");\n\t\t\tthis.tbHeight.Name = \"tbHeight\";\n\t\t\tthis.tbHeight.TextChanged += new System.EventHandler(this.tbHeight_TextChanged);\n\t\t\t// \n\t\t\t// label7\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label7, \"label7\");\n\t\t\tthis.label7.Name = \"label7\";\n\t\t\t// \n\t\t\t// tbWidth\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbWidth, \"tbWidth\");\n\t\t\tthis.tbWidth.Name = \"tbWidth\";\n\t\t\tthis.tbWidth.TextChanged += new System.EventHandler(this.tbWidth_TextChanged);\n\t\t\t// \n\t\t\t// label8\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label8, \"label8\");\n\t\t\tthis.label8.Name = \"label8\";\n\t\t\t// \n\t\t\t// tbTop\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbTop, \"tbTop\");\n\t\t\tthis.tbTop.Name = \"tbTop\";\n\t\t\tthis.tbTop.TextChanged += new System.EventHandler(this.tbTop_TextChanged);\n\t\t\t// \n\t\t\t// label6\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label6, \"label6\");\n\t\t\tthis.label6.Name = \"label6\";\n\t\t\t// \n\t\t\t// tbLeft\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbLeft, \"tbLeft\");\n\t\t\tthis.tbLeft.Name = \"tbLeft\";\n\t\t\tthis.tbLeft.TextChanged += new System.EventHandler(this.tbLeft_TextChanged);\n\t\t\t// \n\t\t\t// label5\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label5, \"label5\");\n\t\t\tthis.label5.Name = \"label5\";\n\t\t\t// \n\t\t\t// label9\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label9, \"label9\");\n\t\t\tthis.label9.Name = \"label9\";\n\t\t\t// \n\t\t\t// tbZIndex\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbZIndex, \"tbZIndex\");\n\t\t\tthis.tbZIndex.Maximum = new decimal(new int[] {\n            2147483647,\n            0,\n            0,\n            0});\n\t\t\tthis.tbZIndex.Name = \"tbZIndex\";\n\t\t\tthis.tbZIndex.ValueChanged += new System.EventHandler(this.tbZIndex_ValueChanged);\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// tbName\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbName, \"tbName\");\n\t\t\tthis.tbName.Name = \"tbName\";\n\t\t\tthis.tbName.TextChanged += new System.EventHandler(this.tbName_TextChanged);\n\t\t\tthis.tbName.Validating += new System.ComponentModel.CancelEventHandler(this.tbName_Validating);\n\t\t\t// \n\t\t\t// lblColSpan\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lblColSpan, \"lblColSpan\");\n\t\t\tthis.lblColSpan.Name = \"lblColSpan\";\n\t\t\t// \n\t\t\t// tbColSpan\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbColSpan, \"tbColSpan\");\n\t\t\tthis.tbColSpan.Maximum = new decimal(new int[] {\n            1000,\n            0,\n            0,\n            0});\n\t\t\tthis.tbColSpan.Minimum = new decimal(new int[] {\n            1,\n            0,\n            0,\n            0});\n\t\t\tthis.tbColSpan.Name = \"tbColSpan\";\n\t\t\tthis.tbColSpan.Value = new decimal(new int[] {\n            1,\n            0,\n            0,\n            0});\n\t\t\tthis.tbColSpan.ValueChanged += new System.EventHandler(this.tbColSpan_ValueChanged);\n\t\t\t// \n\t\t\t// gbText\n\t\t\t// \n\t\t\tresources.ApplyResources(this.gbText, \"gbText\");\n\t\t\tthis.gbText.Controls.Add(this.cbToggleImage);\n\t\t\tthis.gbText.Controls.Add(this.label4);\n\t\t\tthis.gbText.Controls.Add(this.cbDataElementStyle);\n\t\t\tthis.gbText.Controls.Add(this.label3);\n\t\t\tthis.gbText.Controls.Add(this.cbHideDuplicates);\n\t\t\tthis.gbText.Controls.Add(this.label2);\n\t\t\tthis.gbText.Controls.Add(this.chkCanShrink);\n\t\t\tthis.gbText.Controls.Add(this.chkCanGrow);\n\t\t\tthis.gbText.Name = \"gbText\";\n\t\t\tthis.gbText.TabStop = false;\n\t\t\t// \n\t\t\t// cbToggleImage\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbToggleImage, \"cbToggleImage\");\n\t\t\tthis.cbToggleImage.Items.AddRange(new object[] {\n            resources.GetString(\"cbToggleImage.Items\"),\n            resources.GetString(\"cbToggleImage.Items1\"),\n            resources.GetString(\"cbToggleImage.Items2\")});\n\t\t\tthis.cbToggleImage.Name = \"cbToggleImage\";\n\t\t\tthis.cbToggleImage.SelectedIndexChanged += new System.EventHandler(this.cbToggleImage_Changed);\n\t\t\tthis.cbToggleImage.TextChanged += new System.EventHandler(this.cbToggleImage_Changed);\n\t\t\t// \n\t\t\t// label4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label4, \"label4\");\n\t\t\tthis.label4.Name = \"label4\";\n\t\t\t// \n\t\t\t// cbDataElementStyle\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbDataElementStyle, \"cbDataElementStyle\");\n\t\t\tthis.cbDataElementStyle.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbDataElementStyle.Items.AddRange(new object[] {\n            resources.GetString(\"cbDataElementStyle.Items\"),\n            resources.GetString(\"cbDataElementStyle.Items1\"),\n            resources.GetString(\"cbDataElementStyle.Items2\")});\n\t\t\tthis.cbDataElementStyle.Name = \"cbDataElementStyle\";\n\t\t\tthis.cbDataElementStyle.SelectedIndexChanged += new System.EventHandler(this.cbDataElementStyle_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// cbHideDuplicates\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbHideDuplicates, \"cbHideDuplicates\");\n\t\t\tthis.cbHideDuplicates.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbHideDuplicates.Name = \"cbHideDuplicates\";\n\t\t\tthis.cbHideDuplicates.SelectedIndexChanged += new System.EventHandler(this.cbHideDuplicates_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// chkCanShrink\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkCanShrink, \"chkCanShrink\");\n\t\t\tthis.chkCanShrink.Name = \"chkCanShrink\";\n\t\t\tthis.chkCanShrink.CheckedChanged += new System.EventHandler(this.chkCanShrink_CheckedChanged);\n\t\t\t// \n\t\t\t// chkCanGrow\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkCanGrow, \"chkCanGrow\");\n\t\t\tthis.chkCanGrow.Name = \"chkCanGrow\";\n\t\t\tthis.chkCanGrow.CheckedChanged += new System.EventHandler(this.chkCanGrow_CheckedChanged);\n\t\t\t// \n\t\t\t// PositionCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.gbText);\n\t\t\tthis.Controls.Add(this.tbColSpan);\n\t\t\tthis.Controls.Add(this.lblColSpan);\n\t\t\tthis.Controls.Add(this.tbName);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Controls.Add(this.gbPosition);\n\t\t\tthis.Name = \"PositionCtl\";\n\t\t\tthis.gbPosition.ResumeLayout(false);\n\t\t\tthis.gbPosition.PerformLayout();\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.tbZIndex)).EndInit();\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.tbColSpan)).EndInit();\n\t\t\tthis.gbText.ResumeLayout(false);\n\t\t\tthis.gbText.PerformLayout();\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\t\tpublic bool IsValid()\n\t\t{\n\t\t\tXmlNode ri = this._ReportItems[0] as XmlNode;\n\t\t\tif (tbName.Enabled && fName)\n\t\t\t{\n\t\t\t\tstring nerr = _Draw.NameError(ri, this.tbName.Text);\n\t\t\t\tif (nerr != null)\n\t\t\t\t{\n\t\t\t\t\tMessageBox.Show(nerr, Strings.PositionCtl_Show_Name);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tstring name=\"\";\n\t\t\ttry\n\t\t\t{\t// allow minus if Line and only one item selected\n\t\t\t\tbool bMinus= ri.Name == \"Line\" && tbName.Enabled? true: false;\n\t\t\t\tif (fLeft)\n\t\t\t\t{\n\t\t\t\t\tname = Strings.PositionCtl_Show_Left;\n\t\t\t\t\tDesignerUtility.ValidateSize(this.tbLeft.Text, true, false);\n\t\t\t\t}\n\t\t\t\tif (fTop)\n\t\t\t\t{\n\t\t\t\t\tname = Strings.PositionCtl_Show_Top;\n\t\t\t\t\tDesignerUtility.ValidateSize(this.tbTop.Text, true, false);\n\t\t\t\t}\n\t\t\t\tif (fWidth)\n\t\t\t\t{\n\t\t\t\t\tname = Strings.PositionCtl_Show_Width;\n\t\t\t\t\tDesignerUtility.ValidateSize(this.tbWidth.Text, true, bMinus);\n\t\t\t\t}\n\t\t\t\tif (fHeight)\n\t\t\t\t{\n\t\t\t\t\tname = Strings.PositionCtl_Show_Height;\n\t\t\t\t\tDesignerUtility.ValidateSize(this.tbHeight.Text, true, bMinus);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\tMessageBox.Show(ex.Message, name + \" \" + Strings.PositionCtl_Show_SizeInvalid);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// take information in control and apply to all the style nodes\n\t\t\t//  Only change information that has been marked as modified;\n\t\t\t//   this way when group is selected it is possible to change just\n\t\t\t//   the items you want and keep the rest the same.\n\t\t\t\t\n\t\t\tforeach (XmlNode riNode in this._ReportItems)\n\t\t\t\tApplyChanges(riNode);\n\n\t\t\t// No more changes\n\t\t\tfName = fLeft = fTop = fWidth = fHeight = fZIndex = fColSpan = \n\t\t\t\tfCanGrow = fCanShrink = fHideDuplicates = fToggleImage = fDataElementStyle = false;\n\t\t}\n\n\t\tpublic void ApplyChanges(XmlNode node)\n\t\t{\n\t\t\tif (tbName.Enabled && fName)\n\t\t\t{\n\t\t\t\t_Draw.SetName(node, tbName.Text.Trim());\n\t\t\t}\n\n\t\t\tif (fLeft)\n\t\t\t\t_Draw.SetElement(node, \"Left\", DesignerUtility.MakeValidSize(tbLeft.Text, true));\n\n\t\t\tif (fTop)\n\t\t\t\t_Draw.SetElement(node, \"Top\", DesignerUtility.MakeValidSize(tbTop.Text, true));\n\n\t\t\tbool bLine = node.Name == \"Line\";\n\n\t\t\tif (fWidth)\n\t\t\t\t_Draw.SetElement(node, \"Width\", DesignerUtility.MakeValidSize(tbWidth.Text, bLine, bLine));\n\n\t\t\tif (fHeight)\n\t\t\t\t_Draw.SetElement(node, \"Height\", DesignerUtility.MakeValidSize(tbHeight.Text, bLine, bLine));\n\n\t\t\tif (fZIndex)\n\t\t\t\t_Draw.SetElement(node, \"ZIndex\", tbZIndex.Text);\n\n\t\t\tif (fColSpan)\n\t\t\t{\n\t\t\t\tXmlNode ris = node.ParentNode;\n\t\t\t\tXmlNode tcell = ris.ParentNode;\n\t\t\t\tif (tcell.Name == \"TableCell\")\n\t\t\t\t{\t// SetTableCellColSpan does all the heavy lifting; \n\t\t\t\t\t//    ie making sure the # of columns continue to match\n\t\t\t\t\t_Draw.SetTableCellColSpan(tcell, tbColSpan.Value.ToString());\t \n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fDataElementStyle)\n\t\t\t\t_Draw.SetElement(node, \"DataElementStyle\", this.cbDataElementStyle.Text);\n            if (fHideDuplicates)\n            {\n                if(this.cbHideDuplicates.Text == \"\")\n                    _Draw.RemoveElement(node, \"HideDuplicates\");\n                else\n                    _Draw.SetElement(node, \"HideDuplicates\", this.cbHideDuplicates.Text);\n            }\n\t\t\tif (fCanGrow)\n\t\t\t\t_Draw.SetElement(node, \"CanGrow\", this.chkCanGrow.Checked? \"true\": \"false\");\n\t\t\tif (fCanShrink)\n\t\t\t\t_Draw.SetElement(node, \"CanShrink\", this.chkCanShrink.Checked? \"true\": \"false\");\n\t\t\tif (fDataElementStyle)\n\t\t\t\t_Draw.SetElement(node, \"DataElementStyle\", this.cbDataElementStyle.Text);\n\t\t\tif (fToggleImage)\n\t\t\t{\n\t\t\t\tif (cbToggleImage.Text.Length <= 0)\n\t\t\t\t{\n\t\t\t\t\t_Draw.RemoveElement(node, \"ToggleImage\");\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tXmlNode ti = _Draw.SetElement(node, \"ToggleImage\", null);\n\t\t\t\t\t_Draw.SetElement(ti, \"InitialState\", cbToggleImage.Text);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprivate void tbName_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfName = true;\n\t\t}\n\n\t\tprivate void tbLeft_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfLeft = true;\n\t\t}\n\n\t\tprivate void tbTop_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfTop = true;\n\t\t}\n\n\t\tprivate void tbWidth_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfWidth = true;\n\t\t}\n\n\t\tprivate void tbHeight_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfHeight = true;\n\t\t}\n\n\t\tprivate void tbZIndex_ValueChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfZIndex = true;\n\t\t}\n\n\t\tprivate void tbName_Validating(object sender, System.ComponentModel.CancelEventArgs e)\n\t\t{\n\t\t\tXmlNode xNode = this._ReportItems[0];\n\n\t\t\tstring err = _Draw.NameError(xNode, tbName.Text.Trim());\n\t\t\tif (err != null)\n\t\t\t{\n\t\t\t\te.Cancel = true;\n\t\t\t\tMessageBox.Show(string.Format(Strings.PositionCtl_Show_Invalid, tbName.Text, err), Strings.PositionCtl_Show_Name);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tprivate void tbColSpan_ValueChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfColSpan = true;\n\t\t}\n\n\t\tprivate void cbToggleImage_Changed(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfToggleImage = true;\n\t\t}\n\n\t\tprivate void cbDataElementStyle_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfDataElementStyle = true;\n\t\t}\n\n\t\tprivate void cbHideDuplicates_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfHideDuplicates = true;\n\t\t}\n\n\t\tprivate void chkCanShrink_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfCanShrink = true;\n\t\t}\n\n\t\tprivate void chkCanGrow_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfCanGrow = true;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/PositionCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label8.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 48</value>\n  </data>\n  <data name=\"&gt;&gt;lblColSpan.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 23</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Name\" xml:space=\"preserve\">\n    <value>label6</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"lblColSpan.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>16</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label8.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;gbText.Name\" xml:space=\"preserve\">\n    <value>gbText</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidth.Parent\" xml:space=\"preserve\">\n    <value>gbPosition</value>\n  </data>\n  <data name=\"label5.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Top</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label9.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 80</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidth.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Parent\" xml:space=\"preserve\">\n    <value>gbPosition</value>\n  </data>\n  <data name=\"&gt;&gt;cbToggleImage.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>gbText</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 23</value>\n  </data>\n  <data name=\"&gt;&gt;gbPosition.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;label7.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"tbColSpan.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>360, 16</value>\n  </data>\n  <data name=\"gbText.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>18</value>\n  </data>\n  <data name=\"chkCanGrow.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;lblColSpan.Name\" xml:space=\"preserve\">\n    <value>lblColSpan</value>\n  </data>\n  <data name=\"cbToggleImage.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>256, 21</value>\n  </data>\n  <data name=\"&gt;&gt;gbPosition.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Name\" xml:space=\"preserve\">\n    <value>label5</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;cbToggleImage.Name\" xml:space=\"preserve\">\n    <value>cbToggleImage</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"label7.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"cbToggleImage.Items2\" xml:space=\"preserve\">\n    <value>false</value>\n  </data>\n  <data name=\"&gt;&gt;tbZIndex.Parent\" xml:space=\"preserve\">\n    <value>gbPosition</value>\n  </data>\n  <data name=\"lblColSpan.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>112, 23</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbToggleImage.Parent\" xml:space=\"preserve\">\n    <value>gbText</value>\n  </data>\n  <data name=\"&gt;&gt;tbColSpan.Name\" xml:space=\"preserve\">\n    <value>tbColSpan</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>XML Element Style</value>\n  </data>\n  <data name=\"chkCanShrink.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>Left</value>\n  </data>\n  <data name=\"&gt;&gt;chkCanGrow.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"tbHeight.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;chkCanShrink.Parent\" xml:space=\"preserve\">\n    <value>gbText</value>\n  </data>\n  <data name=\"&gt;&gt;tbHeight.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;tbZIndex.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"gbText.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>384, 112</value>\n  </data>\n  <data name=\"lblColSpan.Text\" xml:space=\"preserve\">\n    <value>Span Table Columns</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Parent\" xml:space=\"preserve\">\n    <value>gbPosition</value>\n  </data>\n  <data name=\"tbTop.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"gbText.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 168</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"cbToggleImage.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"cbDataElementStyle.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Name\" xml:space=\"preserve\">\n    <value>label7</value>\n  </data>\n  <data name=\"&gt;&gt;cbHideDuplicates.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbToggleImage.Items1\" xml:space=\"preserve\">\n    <value>true</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Width</value>\n  </data>\n  <data name=\"&gt;&gt;cbHideDuplicates.Name\" xml:space=\"preserve\">\n    <value>cbHideDuplicates</value>\n  </data>\n  <data name=\"&gt;&gt;tbName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label9.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"label7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 16</value>\n  </data>\n  <data name=\"tbTop.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>224, 16</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 80</value>\n  </data>\n  <data name=\"&gt;&gt;gbText.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 15</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataElementStyle.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"label8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 16</value>\n  </data>\n  <data name=\"chkCanShrink.Text\" xml:space=\"preserve\">\n    <value>Can Shrink</value>\n  </data>\n  <data name=\"tbWidth.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidth.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbName.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label4.ImageAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;gbText.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbToggleImage.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>120, 80</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"&gt;&gt;tbColSpan.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;label4.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbLeft.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 22</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label2.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;tbHeight.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;gbPosition.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label5.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>gbText</value>\n  </data>\n  <data name=\"label9.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>15</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Name\" xml:space=\"preserve\">\n    <value>label9</value>\n  </data>\n  <data name=\"tbColSpan.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 20</value>\n  </data>\n  <data name=\"&gt;&gt;chkCanShrink.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"chkCanGrow.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 24</value>\n  </data>\n  <data name=\"cbDataElementStyle.Items\" xml:space=\"preserve\">\n    <value>Auto</value>\n  </data>\n  <data name=\"gbPosition.Text\" xml:space=\"preserve\">\n    <value>Position</value>\n  </data>\n  <data name=\"&gt;&gt;tbTop.Parent\" xml:space=\"preserve\">\n    <value>gbPosition</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Parent\" xml:space=\"preserve\">\n    <value>gbPosition</value>\n  </data>\n  <data name=\"cbHideDuplicates.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>112, 21</value>\n  </data>\n  <data name=\"tbName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>128, 20</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"label9.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 23</value>\n  </data>\n  <data name=\"gbPosition.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>14</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Name\" xml:space=\"preserve\">\n    <value>label4</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataElementStyle.Parent\" xml:space=\"preserve\">\n    <value>gbText</value>\n  </data>\n  <data name=\"tbLeft.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>72, 16</value>\n  </data>\n  <data name=\"tbLeft.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Height</value>\n  </data>\n  <data name=\"label9.Text\" xml:space=\"preserve\">\n    <value>Z Index</value>\n  </data>\n  <data name=\"&gt;&gt;chkCanGrow.Name\" xml:space=\"preserve\">\n    <value>chkCanGrow</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>15</value>\n  </data>\n  <data name=\"&gt;&gt;tbLeft.Parent\" xml:space=\"preserve\">\n    <value>gbPosition</value>\n  </data>\n  <data name=\"cbHideDuplicates.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>264, 16</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 48</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"label6.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;tbColSpan.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkCanGrow.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"tbHeight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 20</value>\n  </data>\n  <data name=\"cbDataElementStyle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>120, 21</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>472, 288</value>\n  </data>\n  <data name=\"tbWidth.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 20</value>\n  </data>\n  <data name=\"&gt;&gt;tbLeft.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"tbLeft.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 20</value>\n  </data>\n  <data name=\"lblColSpan.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>232, 16</value>\n  </data>\n  <data name=\"tbZIndex.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>72, 80</value>\n  </data>\n  <data name=\"chkCanGrow.Text\" xml:space=\"preserve\">\n    <value>Can Grow</value>\n  </data>\n  <data name=\"&gt;&gt;tbColSpan.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidth.Name\" xml:space=\"preserve\">\n    <value>tbWidth</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Parent\" xml:space=\"preserve\">\n    <value>gbPosition</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"cbToggleImage.Items\" xml:space=\"preserve\">\n    <value />\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Hide Duplicates</value>\n  </data>\n  <data name=\"&gt;&gt;tbLeft.Name\" xml:space=\"preserve\">\n    <value>tbLeft</value>\n  </data>\n  <data name=\"tbTop.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 20</value>\n  </data>\n  <data name=\"&gt;&gt;cbHideDuplicates.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"tbColSpan.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"label7.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>168, 48</value>\n  </data>\n  <data name=\"tbWidth.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>72, 48</value>\n  </data>\n  <data name=\"tbName.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"gbText.Text\" xml:space=\"preserve\">\n    <value>Text Processing</value>\n  </data>\n  <data name=\"label2.ImageAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>BottomCenter</value>\n  </data>\n  <data name=\"&gt;&gt;label5.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;chkCanShrink.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbHeight.Name\" xml:space=\"preserve\">\n    <value>tbHeight</value>\n  </data>\n  <data name=\"&gt;&gt;tbZIndex.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;cbToggleImage.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Name\" xml:space=\"preserve\">\n    <value>label8</value>\n  </data>\n  <data name=\"cbDataElementStyle.Items1\" xml:space=\"preserve\">\n    <value>AttributeNormal</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataElementStyle.Name\" xml:space=\"preserve\">\n    <value>cbDataElementStyle</value>\n  </data>\n  <data name=\"tbZIndex.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"cbDataElementStyle.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>120, 48</value>\n  </data>\n  <data name=\"&gt;&gt;tbTop.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"tbName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>80, 16</value>\n  </data>\n  <data name=\"label8.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;cbHideDuplicates.Parent\" xml:space=\"preserve\">\n    <value>gbText</value>\n  </data>\n  <data name=\"&gt;&gt;tbName.Name\" xml:space=\"preserve\">\n    <value>tbName</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkCanShrink.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 16</value>\n  </data>\n  <data name=\"&gt;&gt;tbTop.Name\" xml:space=\"preserve\">\n    <value>tbTop</value>\n  </data>\n  <data name=\"&gt;&gt;gbPosition.Name\" xml:space=\"preserve\">\n    <value>gbPosition</value>\n  </data>\n  <data name=\"&gt;&gt;chkCanShrink.Name\" xml:space=\"preserve\">\n    <value>chkCanShrink</value>\n  </data>\n  <data name=\"&gt;&gt;chkCanGrow.Parent\" xml:space=\"preserve\">\n    <value>gbText</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>184, 18</value>\n  </data>\n  <data name=\"label3.ImageAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"gbPosition.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 48</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Parent\" xml:space=\"preserve\">\n    <value>gbPosition</value>\n  </data>\n  <data name=\"&gt;&gt;label6.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"chkCanShrink.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 24</value>\n  </data>\n  <data name=\"&gt;&gt;gbText.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lblColSpan.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbName.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"cbHideDuplicates.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;lblColSpan.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"cbDataElementStyle.Items2\" xml:space=\"preserve\">\n    <value>ElementNormal</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;tbZIndex.Name\" xml:space=\"preserve\">\n    <value>tbZIndex</value>\n  </data>\n  <data name=\"gbPosition.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>384, 112</value>\n  </data>\n  <data name=\"&gt;&gt;tbHeight.Parent\" xml:space=\"preserve\">\n    <value>gbPosition</value>\n  </data>\n  <data name=\"tbHeight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>224, 48</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataElementStyle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbTop.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>PositionCtl</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 23</value>\n  </data>\n  <data name=\"&gt;&gt;chkCanGrow.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbName.Text\" xml:space=\"preserve\">\n    <value>textBox1</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Parent\" xml:space=\"preserve\">\n    <value>gbText</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label6.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>168, 16</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Toggle Image</value>\n  </data>\n  <data name=\"tbZIndex.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 20</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/PositionCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Высота</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"tbWidth.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>77, 48</value>\n  </data>\n  <data name=\"label8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>55, 16</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Ширина</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Сверху</value>\n  </data>\n  <data name=\"tbLeft.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>77, 16</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>55, 16</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>Слева</value>\n  </data>\n  <data name=\"label9.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>55, 23</value>\n  </data>\n  <data name=\"label9.Text\" xml:space=\"preserve\">\n    <value>Z-индекс</value>\n  </data>\n  <data name=\"tbZIndex.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>77, 80</value>\n  </data>\n  <data name=\"gbPosition.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 112</value>\n  </data>\n  <data name=\"gbPosition.Text\" xml:space=\"preserve\">\n    <value>Позиция</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 23</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Название</value>\n  </data>\n  <data name=\"tbName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 15</value>\n  </data>\n  <data name=\"lblColSpan.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>266, 15</value>\n  </data>\n  <data name=\"lblColSpan.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 23</value>\n  </data>\n  <data name=\"lblColSpan.Text\" xml:space=\"preserve\">\n    <value>Охват столбцов</value>\n  </data>\n  <data name=\"gbText.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 112</value>\n  </data>\n  <data name=\"gbText.Text\" xml:space=\"preserve\">\n    <value>Обработка текста</value>\n  </data>\n  <data name=\"cbToggleImage.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>170, 80</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label4.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>13, 83</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>146, 13</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Переключать изображение</value>\n  </data>\n  <data name=\"cbDataElementStyle.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>314, 48</value>\n  </data>\n  <data name=\"cbDataElementStyle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>112, 21</value>\n  </data>\n  <data name=\"label3.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>188, 51</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>120, 13</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Стиль XML-элементов</value>\n  </data>\n  <data name=\"cbHideDuplicates.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>314, 16</value>\n  </data>\n  <data name=\"label2.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>194, 19</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>114, 13</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Скрывать дубликаты</value>\n  </data>\n  <data name=\"chkCanShrink.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"chkCanShrink.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 51</value>\n  </data>\n  <data name=\"chkCanShrink.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>120, 17</value>\n  </data>\n  <data name=\"chkCanShrink.Text\" xml:space=\"preserve\">\n    <value>Может сжиматься</value>\n  </data>\n  <data name=\"chkCanGrow.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"chkCanGrow.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 20</value>\n  </data>\n  <data name=\"chkCanGrow.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>92, 17</value>\n  </data>\n  <data name=\"chkCanGrow.Text\" xml:space=\"preserve\">\n    <value>Может расти</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>480, 288</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Majorsilence.Reporting.RdlDesign.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Majorsilence.Reporting.RdlDesign.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap chart {\n            get {\n                object obj = ResourceManager.GetObject(\"chart\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap csv {\n            get {\n                object obj = ResourceManager.GetObject(\"csv\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap document_new {\n            get {\n                object obj = ResourceManager.GetObject(\"document_new\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap document_open {\n            get {\n                object obj = ResourceManager.GetObject(\"document_open\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap document_print {\n            get {\n                object obj = ResourceManager.GetObject(\"document_print\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap document_save {\n            get {\n                object obj = ResourceManager.GetObject(\"document_save\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap edit_copy {\n            get {\n                object obj = ResourceManager.GetObject(\"edit_copy\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap edit_cut {\n            get {\n                object obj = ResourceManager.GetObject(\"edit_cut\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap edit_paste {\n            get {\n                object obj = ResourceManager.GetObject(\"edit_paste\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap edit_undo {\n            get {\n                object obj = ResourceManager.GetObject(\"edit_undo\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap format_justify_center {\n            get {\n                object obj = ResourceManager.GetObject(\"format_justify_center\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap format_justify_fill {\n            get {\n                object obj = ResourceManager.GetObject(\"format_justify_fill\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap format_justify_left {\n            get {\n                object obj = ResourceManager.GetObject(\"format_justify_left\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap format_justify_right {\n            get {\n                object obj = ResourceManager.GetObject(\"format_justify_right\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap format_text_bold {\n            get {\n                object obj = ResourceManager.GetObject(\"format_text_bold\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap format_text_italic {\n            get {\n                object obj = ResourceManager.GetObject(\"format_text_italic\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap format_text_underline {\n            get {\n                object obj = ResourceManager.GetObject(\"format_text_underline\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap Image {\n            get {\n                object obj = ResourceManager.GetObject(\"Image\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Incorrect passkey entered..\n        /// </summary>\n        internal static string MDIChild_doPossibleDecryption_Incorrect_passkey_entered_ {\n            get {\n                return ResourceManager.GetString(\"MDIChild_doPossibleDecryption_Incorrect_passkey_entered_\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unable to encrypt file..\n        /// </summary>\n        internal static string MDIChild_doPossibleEncryption_Unable_to_encrypt_file_ {\n            get {\n                return ResourceManager.GetString(\"MDIChild_doPossibleEncryption_Unable_to_encrypt_file_\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"chart\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Images\\chart.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"csv\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\csv.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"document_new\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Images\\document-new.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"document_open\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Images\\document-open.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"document_print\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Images\\document-print.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"document_save\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Images\\document-save.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"edit_copy\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Images\\edit-copy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"edit_cut\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Images\\edit-cut.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"edit_paste\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Images\\edit-paste.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"edit_undo\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Images\\edit-undo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"format_justify_center\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Images\\format-justify-center.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"format_justify_fill\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Images\\format-justify-fill.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"format_justify_left\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Images\\format-justify-left.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"format_justify_right\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Images\\format-justify-right.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"format_text_bold\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Images\\format-text-bold.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"format_text_italic\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Images\\format-text-italic.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"format_text_underline\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Images\\format-text-underline.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"Image\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Images\\Image.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"MDIChild_doPossibleDecryption_Incorrect_passkey_entered_\" xml:space=\"preserve\">\n    <value>Incorrect passkey entered.</value>\n  </data>\n  <data name=\"MDIChild_doPossibleEncryption_Unable_to_encrypt_file_\" xml:space=\"preserve\">\n    <value>Unable to encrypt file.</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/PropertyCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing Majorsilence.Reporting.Rdl;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for ReportCtl.\n\t/// </summary>\n\tinternal class PropertyCtl : System.Windows.Forms.UserControl\n\t{\n\t\tprivate DesignXmlDraw _Draw;\n        private DesignCtl _DesignCtl;\n        private ICollection _NameCollection = null;\n        private Label label1;\n        private PropertyGrid pgSelected;\n        private Button bClose;\n        private ComboBox cbReportItems; \n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n        private readonly string REPORT = \"*Report*\"; \n        private readonly string GROUP = \"*Group Selection*\"; \n        private readonly string NONAME = \"*Unnamed*\"; \n\n        public PropertyCtl()\n\t\t{\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t}\n\n        internal void Reset()\n        {\n            _Draw = null;\n            _DesignCtl = null;\n            this.pgSelected.SelectedObject = null;\n            cbReportItems.Items.Clear();\n            _NameCollection = null;\n        }\n\n        internal void ResetSelection(DesignXmlDraw d, DesignCtl dc)\n        {\n            _Draw = d;\n            _DesignCtl = dc;\n\n            if (_Draw == null)\n            {\n                this.pgSelected.SelectedObject = null;\n                cbReportItems.Items.Clear();\n\n                return;\n            }\n            SetPropertyNames();\n\n            if (_Draw.SelectedCount == 0)\n            {\n                this.pgSelected.SelectedObject = new PropertyReport(_Draw, dc);\n                cbReportItems.SelectedItem = REPORT;       \n            }\n            else if (SingleReportItemType())\n            {\n                XmlNode n = _Draw.SelectedList[0];\n                if (_Draw.SelectedCount > 1)\n                {\n                    int si = cbReportItems.Items.Add(GROUP);\n                    cbReportItems.SelectedIndex = si;\n                }\n                else\n                {\n                    XmlAttribute xAttr = n.Attributes[\"Name\"];\n                    if (xAttr == null)\n                    {\n                        int si = cbReportItems.Items.Add(NONAME);\n                        cbReportItems.SelectedIndex = si;\n                    }\n                    else\n                        cbReportItems.SelectedItem = xAttr.Value;\n                }\n                switch (n.Name)\n                {\n                    case \"Textbox\":\n                        this.pgSelected.SelectedObject = new PropertyTextbox(_Draw, dc, _Draw.SelectedList);\n                        break;\n                    case \"Rectangle\":\n                        this.pgSelected.SelectedObject = new PropertyRectangle(_Draw, dc, _Draw.SelectedList);\n                        break;\n                    case \"Chart\":\n                        this.pgSelected.SelectedObject = new PropertyChart(_Draw, dc, _Draw.SelectedList);\n                        break;\n                    case \"Image\":\n                        this.pgSelected.SelectedObject = new PropertyImage(_Draw, dc, _Draw.SelectedList);\n                        break;\n                    case \"List\":\n                        this.pgSelected.SelectedObject = new PropertyList(_Draw, dc, _Draw.SelectedList);\n                        break;\n                    case \"Subreport\":\n                        this.pgSelected.SelectedObject = new PropertySubreport(_Draw, dc, _Draw.SelectedList);\n                        break;\n                    case \"CustomReportItem\":\n                    default:\n                        this.pgSelected.SelectedObject = new PropertyReportItem(_Draw, dc, _Draw.SelectedList);\n                        break;\n                }\n            }\n            else\n            {\n                int si = cbReportItems.Items.Add(GROUP);\n                cbReportItems.SelectedIndex = si;\n                this.pgSelected.SelectedObject = new PropertyReportItem(_Draw, dc, _Draw.SelectedList);\n            }\n        }\n        /// <summary>\n        /// Fills out the names of the report items available in the report and all other objects with names\n        /// </summary>\n        private void SetPropertyNames()\n        {\n            if (_NameCollection != _Draw.ReportNames.ReportItemNames)\n            {\n                cbReportItems.Items.Clear();\n                _NameCollection = _Draw.ReportNames.ReportItemNames;\n            }\n            else\n            {   // ensure our list count is the same as the number of report items\n                int count = cbReportItems.Items.Count;\n                if (cbReportItems.Items.Contains(this.REPORT))\n                    count--;\n                if (cbReportItems.Items.Contains(this.GROUP))\n                    count--;\n                if (cbReportItems.Items.Contains(this.NONAME))\n                    count--;\n                if (count != _NameCollection.Count)\n                    cbReportItems.Items.Clear();        // we need to rebuild\n            }\n\n            if (cbReportItems.Items.Count == 0)\n            {\n                cbReportItems.Items.Add(this.REPORT);\n                foreach (object o in _NameCollection)\n                {\n                    cbReportItems.Items.Add(o);\n                }\n            }\n            else\n            {\n                try\n                {\n                    cbReportItems.Items.Remove(this.GROUP);\n                }\n                catch { }\n                try\n                {\n                    cbReportItems.Items.Remove(this.NONAME);\n                }\n                catch { }\n            }\n        }\n        /// <summary>\n        /// Returns true if all selected reportitems are of the same type\n        /// </summary>\n        /// <returns></returns>\n        private bool SingleReportItemType()\n        {\n            if (_Draw.SelectedCount == 1)\n                return true;\n            string t = _Draw.SelectedList[0].Name;\n            if (t == \"CustomReportItem\")        // when multiple CustomReportItem don't do group change.\n                return false;\n            for (int i = 1; i < _Draw.SelectedList.Count; i++)\n            {\n                if (t != _Draw.SelectedList[i].Name)\n                    return false;\n            }\n            return true;\n        }\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        protected override void Dispose(bool disposing)\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PropertyCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.pgSelected = new System.Windows.Forms.PropertyGrid();\n\t\t\tthis.bClose = new System.Windows.Forms.Button();\n\t\t\tthis.cbReportItems = new System.Windows.Forms.ComboBox();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.BackColor = System.Drawing.SystemColors.Control;\n\t\t\tthis.label1.ForeColor = System.Drawing.SystemColors.InfoText;\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// pgSelected\n\t\t\t// \n\t\t\tresources.ApplyResources(this.pgSelected, \"pgSelected\");\n\t\t\tthis.pgSelected.Name = \"pgSelected\";\n\t\t\t// \n\t\t\t// bClose\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bClose, \"bClose\");\n\t\t\tthis.bClose.CausesValidation = false;\n\t\t\tthis.bClose.FlatAppearance.BorderSize = 0;\n\t\t\tthis.bClose.Name = \"bClose\";\n\t\t\tthis.bClose.UseVisualStyleBackColor = true;\n\t\t\tthis.bClose.Click += new System.EventHandler(this.bClose_Click);\n\t\t\t// \n\t\t\t// cbReportItems\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbReportItems, \"cbReportItems\");\n\t\t\tthis.cbReportItems.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbReportItems.FormattingEnabled = true;\n\t\t\tthis.cbReportItems.Name = \"cbReportItems\";\n\t\t\tthis.cbReportItems.SelectedIndexChanged += new System.EventHandler(this.cbReportItems_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// PropertyCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.cbReportItems);\n\t\t\tthis.Controls.Add(this.bClose);\n\t\t\tthis.Controls.Add(this.pgSelected);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Name = \"PropertyCtl\";\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n        public event EventHandler HidePropertiesClicked = null;\n        private void bClose_Click(object sender, EventArgs e)\n        {\n            RdlDesigner rd = this.Parent as RdlDesigner;\n            if (rd == null)\n            {\n                if (HidePropertiesClicked != null)\n                {\n                    HidePropertiesClicked(sender, e);\n                }\n                return;\n            }\n\n            rd.ShowProperties(false);\n        }\n\n        private void cbReportItems_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            string ri_name = cbReportItems.SelectedItem as string;\n            if (ri_name == GROUP || ri_name == NONAME)\n                return;\n            if (ri_name == REPORT)\n            {\n                // handle request for change to report property\n                if (_Draw.SelectedCount == 0)   // we're already on report\n                    return;\n                _DesignCtl.SetSelection(null);\n                return;\n            }\n\n            // handle request to change selected report item\n            XmlNode ri_node = _Draw.ReportNames.GetRINodeFromName(ri_name);\n            if (ri_node == null)\n                return;\n            if (_Draw.SelectedCount == 1 &&\n                _Draw.SelectedList[0] == ri_node)\n                return;  // we're already selected!\n            _DesignCtl.SetSelection(ri_node);\n        }\n\n    }\n}\n"
  },
  {
    "path": "RdlDesign/PropertyCtl.fr.resx",
    "content": "﻿<root>\n    <resheader name=\"resmimetype\">\n        <value>text/microsoft-resx</value>\n    </resheader>\n    <resheader name=\"version\">\n        <value>1.3</value>\n    </resheader>\n    <resheader name=\"reader\">\n        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n    </resheader>\n    <resheader name=\"writer\">\n        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n    </resheader>\n    <data name=\"label1.Text\" xml:space=\"preserve\">\n        <value>Propriétés</value>\n    </data>\n</root>"
  },
  {
    "path": "RdlDesign/PropertyCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Properties</value>\n  </data>\n  <data name=\"&gt;&gt;pgSelected.Name\" xml:space=\"preserve\">\n    <value>pgSelected</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"cbReportItems.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>240, 21</value>\n  </data>\n  <data name=\"bClose.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"pgSelected.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 40</value>\n  </data>\n  <data name=\"&gt;&gt;bClose.Name\" xml:space=\"preserve\">\n    <value>bClose</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bClose.FlatStyle\" type=\"System.Windows.Forms.FlatStyle, System.Windows.Forms\">\n    <value>Flat</value>\n  </data>\n  <data name=\"bClose.Text\" xml:space=\"preserve\">\n    <value>x</value>\n  </data>\n  <data name=\"&gt;&gt;cbReportItems.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bClose.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>TopCenter</value>\n  </data>\n  <data name=\"&gt;&gt;pgSelected.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>PropertyCtl</value>\n  </data>\n  <data name=\"pgSelected.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;pgSelected.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;pgSelected.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.PropertyGrid, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bClose.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbReportItems.Name\" xml:space=\"preserve\">\n    <value>cbReportItems</value>\n  </data>\n  <data name=\"bClose.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"bClose.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>15, 20</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;bClose.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"pgSelected.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Bottom, Left, Right</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bClose.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>223, -2</value>\n  </data>\n  <data name=\"pgSelected.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>240, 240</value>\n  </data>\n  <data name=\"bClose.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Microsoft Sans Serif, 8.25pt, style=Bold</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbReportItems.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>240, 16</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"cbReportItems.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 18</value>\n  </data>\n  <data name=\"cbReportItems.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Left, Right</value>\n  </data>\n  <data name=\"label1.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Top</value>\n  </data>\n  <data name=\"&gt;&gt;cbReportItems.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbReportItems.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bClose.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>240, 280</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/PropertyCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Свойства</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/PropertyDialog.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    internal partial class PropertyDialog : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tprivate DesignXmlDraw _Draw;\nprivate System.Windows.Forms.Panel panel1;\nprivate System.Windows.Forms.Button bCancel;\nprivate System.Windows.Forms.Button bOK;\nprivate System.Windows.Forms.Button bApply;\nprivate System.Windows.Forms.TabControl tcProps;\nprivate System.Windows.Forms.Button bDelete;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PropertyDialog));\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.bDelete = new System.Windows.Forms.Button();\n            this.bApply = new System.Windows.Forms.Button();\n            this.bOK = new System.Windows.Forms.Button();\n            this.bCancel = new System.Windows.Forms.Button();\n            this.tcProps = new System.Windows.Forms.TabControl();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // panel1\n            // \n            this.panel1.CausesValidation = false;\n            this.panel1.Controls.Add(this.bDelete);\n            this.panel1.Controls.Add(this.bApply);\n            this.panel1.Controls.Add(this.bOK);\n            this.panel1.Controls.Add(this.bCancel);\n            resources.ApplyResources(this.panel1, \"panel1\");\n            this.panel1.Name = \"panel1\";\n            // \n            // bDelete\n            // \n            resources.ApplyResources(this.bDelete, \"bDelete\");\n            this.bDelete.Name = \"bDelete\";\n            this.bDelete.Click += new System.EventHandler(this.bDelete_Click);\n            // \n            // bApply\n            // \n            resources.ApplyResources(this.bApply, \"bApply\");\n            this.bApply.Name = \"bApply\";\n            this.bApply.Click += new System.EventHandler(this.bApply_Click);\n            // \n            // bOK\n            // \n            resources.ApplyResources(this.bOK, \"bOK\");\n            this.bOK.Name = \"bOK\";\n            this.bOK.Click += new System.EventHandler(this.bOK_Click);\n            // \n            // bCancel\n            // \n            resources.ApplyResources(this.bCancel, \"bCancel\");\n            this.bCancel.CausesValidation = false;\n            this.bCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.bCancel.Name = \"bCancel\";\n            // \n            // tcProps\n            // \n            resources.ApplyResources(this.tcProps, \"tcProps\");\n            this.tcProps.Multiline = true;\n            this.tcProps.Name = \"tcProps\";\n            this.tcProps.SelectedIndex = 0;\n            // \n            // PropertyDialog\n            // \n            this.AcceptButton = this.bOK;\n            resources.ApplyResources(this, \"$this\");\n            this.CancelButton = this.bCancel;\n            this.Controls.Add(this.tcProps);\n            this.Controls.Add(this.panel1);\n            this.MaximizeBox = false;\n            this.MinimizeBox = false;\n            this.Name = \"PropertyDialog\";\n            this.ShowIcon = false;\n            this.ShowInTaskbar = false;\n            this.Closing += new System.ComponentModel.CancelEventHandler(this.PropertyDialog_Closing);\n            this.panel1.ResumeLayout(false);\n            this.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/PropertyDialog.cs",
    "content": "\nusing System;\nusing System.Drawing;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing System.Xml;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    internal enum PropertyTypeEnum\n    {\n        Report,\n        DataSets,\n        ReportItems,\n        Grouping,\n        ChartLegend,\n        CategoryAxis,\n        ValueAxis,\n        ChartTitle,\n        CategoryAxisTitle,\n        ValueAxisTitle,\n        TableGroup,\n        ValueAxis2Title// 20022008 AJM GJL\n\n    }\n\n    /// <summary>\n    /// Summary description for PropertyDialog.\n    /// </summary>\n    internal partial class PropertyDialog \n    {\n        // design draw \n        private List<XmlNode> _Nodes;\t\t\t// selected nodes\n        private PropertyTypeEnum _Type;\n        private bool _Changed = false;\n        private bool _Delete = false;\n        private XmlNode _TableColumn = null;\t// when table this is the current table column\n        private XmlNode _TableRow = null;\t\t// when table this is the current table row\n        private List<UserControl> _TabPanels = new List<UserControl>();\t\t// list of IProperty controls\n\n        internal PropertyDialog(DesignXmlDraw dxDraw, List<XmlNode> sNodes, PropertyTypeEnum type)\n            : this(dxDraw, sNodes, type, null, null) { }\n\n        internal PropertyDialog(DesignXmlDraw dxDraw, List<XmlNode> sNodes, PropertyTypeEnum type, XmlNode tcNode, XmlNode trNode)\n        {\n            _Draw = dxDraw;\n            _Nodes = sNodes;\n            _Type = type;\n            _TableColumn = tcNode;\n            _TableRow = trNode;\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            //   Add the controls for the selected ReportItems\n            switch (_Type)\n            {\n                case PropertyTypeEnum.Report:\n                    BuildReportTabs();\n                    break;\n                case PropertyTypeEnum.DataSets:\n                    BuildDataSetsTabs();\n                    break;\n                case PropertyTypeEnum.Grouping:\n                    BuildGroupingTabs();\n                    break;\n                case PropertyTypeEnum.ChartLegend:\n                    BuildChartLegendTabs();\n                    break;\n                case PropertyTypeEnum.CategoryAxis:\n                case PropertyTypeEnum.ValueAxis:\n                    BuildChartAxisTabs(type);\n                    break;\n                case PropertyTypeEnum.ChartTitle:\n                case PropertyTypeEnum.CategoryAxisTitle:\n                case PropertyTypeEnum.ValueAxisTitle:\n                case PropertyTypeEnum.ValueAxis2Title:// 20022008 AJM GJL\n                    BuildTitle(type);\n                    break;\n                default:\n                    BuildReportItemTabs();\n                    break;\n            }\n        }\n\n        internal bool Changed\n        {\n            get { return _Changed; }\n        }\n\n        internal bool Delete\n        {\n            get { return _Delete; }\n        }\n\n        private void BuildReportTabs()\n        {\n            Text = Strings.PropertyDialog_BuildReportTabs_ReportProperties;\n\n            var rc = new ReportCtl(_Draw);\n            AddTab(Strings.PropertyDialog_BuildReportTabs_Report, rc);\n\n            var pc = new ReportParameterCtl(_Draw);\n            AddTab(Strings.PropertyDialog_BuildReportTabs_Parameters, pc);\n\n            var xc = new ReportXmlCtl(_Draw);\n            AddTab(Strings.PropertyDialog_BuildReportTabs_XMLRendering, xc);\n\n            var bc = new BodyCtl(_Draw);\n            AddTab(Strings.PropertyDialog_BuildReportTabs_Body, bc);\n\n            var cc = new CodeCtl(_Draw);\n            AddTab(Strings.PropertyDialog_BuildReportTabs_Code, cc);\n\n            var mc = new ModulesClassesCtl(_Draw);\n            AddTab(Strings.PropertyDialog_BuildReportTabs_Modules_Classes, mc);\n        }\n\n        private void BuildDataSetsTabs()\n        {\n            bDelete.Visible = true;\n\n            Text = Strings.PropertyDialog_BuildDataSetsTabs_DataSet_Header;\n\n            XmlNode aNode;\n            if (_Nodes != null && _Nodes.Count > 0)\n                aNode = _Nodes[0];\n            else\n                aNode = null;\n\n            var dsc = new DataSetsCtl(_Draw, aNode);\n            AddTab(Strings.PropertyDialog_BuildDataSetsTabs_DataSet, dsc);\n\n            var qp = new QueryParametersCtl(_Draw, dsc.DSV);\n            AddTab(Strings.PropertyDialog_BuildDataSetsTabs_QueryParameters, qp);\n\n            var fc = new FiltersCtl(_Draw, aNode);\n            AddTab(Strings.PropertyDialog_BuildReportItemTabs_Filters, fc);\n\n            var dsrc = new DataSetRowsCtl(_Draw, aNode, dsc.DSV);\n            AddTab(Strings.PropertyDialog_BuildDataSetsTabs_Data, dsrc);\n        }\n\n        private void BuildGroupingTabs()\n        {\n            var aNode = _Nodes[0];\n\n            if (aNode.Name == \"DynamicSeries\")\n            {\n                Text = Strings.PropertyDialog_BuildGroupingTabs_SeriesGrouping;\n            }\n            else if (aNode.Name == \"DynamicCategories\")\n            {\n                Text = Strings.PropertyDialog_BuildGroupingTabs_CategoryGrouping;\n            }\n            else\n            {\n                Text = Strings.PropertyDialog_BuildGroupingTabs_GroupingAndSorting;\n            }\n\n            var gc = new GroupingCtl(_Draw, aNode);\n            AddTab(Strings.PropertyDialog_BuildReportItemTabs_Grouping, gc);\n\n            var sc = new SortingCtl(_Draw, aNode);\n\t\t\tAddTab(Strings.PropertyDialog_BuildReportItemTabs_Sorting, sc);\n\n            // We have to create a grouping here but will need to kill it if no definition follows it\n            var gNode = _Draw.GetCreateNamedChildNode(aNode, \"Grouping\");\n\n            var fc = new FiltersCtl(_Draw, gNode);\n\t\t\tAddTab(Strings.PropertyDialog_BuildReportItemTabs_Filters, fc);\n        }\n\n        private void BuildReportItemTabs()\n        {\n            XmlNode aNode = _Nodes[0];\n\n            // Determine if all nodes are the same type\n            string type = aNode.Name;\n            if (type == \"CustomReportItem\")\n            {\n                // For customReportItems we use the type that is a parameter\n                string t = _Draw.GetElementValue(aNode, \"Type\", \"\");\n                if (t.Length > 0)\n                    type = t;\n            }\n\n            foreach (XmlNode pNode in this._Nodes)\n            {\n                // For customReportItems we use the type that is a parameter\n                string t = pNode.Name;\n                if (t == \"CustomReportItem\")\n                {\n                    t = _Draw.GetElementValue(aNode, \"Type\", \"\");\n                    if (t.Length == 0)       // Shouldn't happen\n                        t = pNode.Name;\n                }\n                if (t != type)\n                    type = \"\";\t\t\t// Not all nodes have the same type\n            }\n\n            EnsureStyle();\t// Make sure we have Style nodes for all the report items\n\n            if (_Nodes.Count > 1)\n                Text = Strings.PropertyDialog_BuildReportItemTabs_GroupSelectionProperties;\n            else\n            {\n                var name = _Draw.GetElementAttribute(aNode, \"Name\", \"\");\n                Text = string.Format(\"{0} {1} \" + Strings.PropertyDialog_BuildReportItemTabs_Properties, type.Replace(\"fyi:\", \"\"), name);\n            }\n\n            // Create all the tabs\n\t        switch (type)\n\t        {\n\t\t        case \"Textbox\":\n\t\t\t        var stc = new StyleTextCtl(_Draw, _Nodes, this);\n\t\t\t        AddTab(Strings.PropertyDialog_BuildReportItemTabs_Text, stc);\n\t\t\t        break;\n\n\t\t        case \"List\":\n\t\t\t        var lc = new ListCtl(_Draw, _Nodes);\n\t\t\t        AddTab(Strings.PropertyDialog_BuildReportItemTabs_List, lc);\n\n\t\t\t        if (_Nodes.Count == 1)\n\t\t\t        {\n\t\t\t\t        var l = _Nodes[0];\n\t\t\t\t        var fc = new FiltersCtl(_Draw, l);\n\t\t\t\t        AddTab(Strings.PropertyDialog_BuildReportItemTabs_Filters, fc);\n\t\t\t\t        var srtc = new SortingCtl(_Draw, l);\n\t\t\t\t        AddTab(Strings.PropertyDialog_BuildReportItemTabs_Sorting, srtc);\n\t\t\t        }\n\t\t\t        break;\n\n\t\t        case \"Chart\":\n\t\t\t        var cc = new ChartCtl(_Draw, _Nodes);\n\t\t\t        AddTab(Strings.PropertyDialog_BuildReportItemTabs_Chart, cc);\n\n\t\t\t        // 05122007 AJM & GJL Create a new StaticSeriesCtl tab\n\t\t\t        var ssc = new StaticSeriesCtl(_Draw, _Nodes);\n\n\t\t\t        if (ssc.ShowMe)\n\t\t\t        {\n\t\t\t\t        //If the chart has static series, then show the StaticSeriesCtl GJL\n\t\t\t\t        AddTab(Strings.PropertyDialog_BuildReportItemTabs_StaticSeries, ssc);\n\t\t\t        }\n\n\t\t\t        if (_Nodes.Count == 1)\n\t\t\t        {\n\t\t\t\t        var fc = new FiltersCtl(_Draw, _Nodes[0]);\n\t\t\t\t\t\tAddTab(Strings.PropertyDialog_BuildReportItemTabs_Filters, fc);\n\t\t\t        }\n\t\t\t        break;\n\n\t\t        case \"Image\":\n\t\t\t        var imgc = new ImageCtl(_Draw, _Nodes);\n\t\t\t        AddTab(Strings.PropertyDialog_BuildReportItemTabs_Image, imgc);\n\t\t\t        break;\n\n\t\t\t\tcase \"Table\":\n\t\t\t\t\tvar table = _Nodes[0];\n\t\t\t\t\tvar tc = new TableCtl(_Draw, _Nodes);\n\t\t\t\t\tAddTab(Strings.PropertyDialog_BuildReportItemTabs_Table, tc);\n\t\t\t\t    var fct = new FiltersCtl(_Draw, table);\n\t\t\t\t\tAddTab(Strings.PropertyDialog_BuildReportItemTabs_Filters, fct);\n\t\t\t        var details = _Draw.GetNamedChildNode(table, \"Details\");\n\n\t\t\t\t\tif (details != null)\n\t\t\t\t\t{\n\t\t\t\t\t\t// if no details then we don't need details sorting\n\t\t\t\t\t\tvar grpc = new GroupingCtl(_Draw, details);\n\t\t\t\t\t\tAddTab(Strings.PropertyDialog_BuildReportItemTabs_Grouping, grpc);\n\t\t\t\t\t\tvar srtc = new SortingCtl(_Draw, details);\n\t\t\t\t\t\tAddTab(Strings.PropertyDialog_BuildReportItemTabs_Sorting, srtc);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (_TableColumn != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar tcc = new TableColumnCtl(_Draw, _TableColumn);\n\t\t\t\t\t\tAddTab(Strings.PropertyDialog_BuildReportItemTabs_TableColumn, tcc);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (_TableRow != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar trc = new TableRowCtl(_Draw, _TableRow);\n\t\t\t\t\t\tAddTab(Strings.PropertyDialog_BuildReportItemTabs_TableRow, trc);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t        case \"fyi:Grid\":\n\t\t\t        var gc = new GridCtl(_Draw, this._Nodes);\n\t\t\t        AddTab(Strings.PropertyDialog_BuildReportItemTabs_Grid, gc);\n\t\t\t        break;\n\n\t\t        case \"Matrix\":\n\t\t\t        var matrix = _Nodes[0];\n\t\t\t        var mc = new MatrixCtl(_Draw, this._Nodes);\n\t\t\t        AddTab(Strings.PropertyDialog_BuildReportItemTabs_Matrix, mc);\n\t\t\t        var fcm = new FiltersCtl(_Draw, matrix);\n\t\t\t\t\tAddTab(Strings.PropertyDialog_BuildReportItemTabs_Filters, fcm);\n\t\t\t        break;\n\n\t\t        case \"Subreport\":\n\t\t\t        if (_Nodes.Count == 1)\n\t\t\t        {\n\t\t\t\t        var subreport = _Nodes[0];\n\t\t\t\t        var src = new SubreportCtl(_Draw, subreport);\n\t\t\t\t        AddTab(Strings.PropertyDialog_BuildReportItemTabs_Subreport, src);\n\t\t\t        }\n\t\t\t        break;\n\n\t\t\t\tdefault:\n\t\t\t        if (aNode.Name == \"CustomReportItem\")\n\t\t\t        {\n\t\t\t\t        var cric = new CustomReportItemCtl(_Draw, _Nodes);\n\t\t\t\t        AddTab(type, cric);\n\t\t\t        }\n\t\t\t        break;\n\t        }\n\n\t        // Position tab\n            var pc = new PositionCtl(_Draw, this._Nodes);\n            AddTab(Strings.PropertyDialog_BuildReportItemTabs_Name_Position, pc);\n\n            // Border tab\n            var bc = new StyleBorderCtl(_Draw, null, this._Nodes);\n            AddTab(Strings.PropertyDialog_BuildReportItemTabs_Border, bc);\n\n            if (!(type == \"Line\" || type == \"Subreport\"))\n            {\n                // Style tab\n                var sc = new StyleCtl(_Draw, this._Nodes);\n                AddTab(Strings.PropertyDialog_BuildReportItemTabs_Style, sc);\n\n                // Interactivity tab\n                var ic = new InteractivityCtl(_Draw, this._Nodes);\n                AddTab(Strings.PropertyDialog_BuildReportItemTabs_Interactivity, ic);\n            }\n        }\n\n        private void BuildChartAxisTabs(PropertyTypeEnum type)\n        {\n            string propName;\n            if (type == PropertyTypeEnum.CategoryAxis)\n            {\n                Text = Strings.PropertyDialog_BuildChartAxisTabs_ChartCategoryAxis;\n                propName = \"CategoryAxis\";\n            }\n            else\n            {\n                Text = Strings.PropertyDialog_BuildChartAxisTabs_ChartValueAxis;\n                propName = \"ValueAxis\";\n            }\n\n            XmlNode cNode = _Nodes[0];\n            XmlNode aNode = _Draw.GetCreateNamedChildNode(cNode, propName);\n            XmlNode axNode = _Draw.GetCreateNamedChildNode(aNode, \"Axis\");\n\n            // Now we replace the node array with a new one containing only the legend\n            _Nodes = new List<XmlNode>();\n            _Nodes.Add(axNode);\n\n            EnsureStyle();\t// Make sure we have Style nodes\n\n            // Chart Axis\n            var cac = new ChartAxisCtl(_Draw, _Nodes);\n            AddTab(Strings.PropertyDialog_BuildChartAxisTabs_Axis, cac);\n\n            // Style Text\n            var stc = new StyleTextCtl(_Draw, _Nodes, this);\n            AddTab(Strings.PropertyDialog_BuildReportItemTabs_Text, stc);\n\n            // Border tab\n            var bc = new StyleBorderCtl(_Draw, null, _Nodes);\n\t\t\tAddTab(Strings.PropertyDialog_BuildReportItemTabs_Border, bc);\n\n            // Style tab\n            var sc = new StyleCtl(_Draw, _Nodes);\n\t\t\tAddTab(Strings.PropertyDialog_BuildReportItemTabs_Style, sc);\n        }\n\n        private void BuildChartLegendTabs()\n        {\n            Text = Strings.PropertyDialog_BuildChartLegendTabs_ChartLegendProperties;\n\n            XmlNode cNode = _Nodes[0];\n            XmlNode lNode = _Draw.GetCreateNamedChildNode(cNode, \"Legend\");\n\n            // Now we replace the node array with a new one containing only the legend\n            _Nodes = new List<XmlNode>();\n            _Nodes.Add(lNode);\n\n            EnsureStyle();\t// Make sure we have Style nodes\n\n            // Chart Legend\n            var clc = new ChartLegendCtl(_Draw, _Nodes);\n            AddTab(Strings.PropertyDialog_BuildChartLegendTabs_Legend, clc);\n\n            // Style Text\n            var stc = new StyleTextCtl(_Draw, _Nodes, this);\n            AddTab(Strings.PropertyDialog_BuildReportItemTabs_Text, stc);\n\n            // Border tab\n            var bc = new StyleBorderCtl(_Draw, null, _Nodes);\n\t\t\tAddTab(Strings.PropertyDialog_BuildReportItemTabs_Border, bc);\n\n            // Style tab\n            var sc = new StyleCtl(_Draw, _Nodes);\n\t\t\tAddTab(Strings.PropertyDialog_BuildReportItemTabs_Style, sc);\n        }\n\n        private void BuildTitle(PropertyTypeEnum type)\n        {\n            XmlNode cNode = _Nodes[0];\n            _Nodes = new List<XmlNode>();\t\t// replace with a new one\n            if (type == PropertyTypeEnum.ChartTitle)\n            {\n                Text = Strings.PropertyDialog_BuildTitle_ChartTitle;\n\n                XmlNode lNode = _Draw.GetCreateNamedChildNode(cNode, \"Title\");\n                _Nodes.Add(lNode);\t\t// Working on the title\t\t\n            }\n            else if (type == PropertyTypeEnum.CategoryAxisTitle)\n            {\n                Text = Strings.PropertyDialog_BuildTitle_CategoryAxisTitle;\n                XmlNode caNode = _Draw.GetCreateNamedChildNode(cNode, \"CategoryAxis\");\n                XmlNode aNode = _Draw.GetCreateNamedChildNode(caNode, \"Axis\");\n                XmlNode tNode = _Draw.GetCreateNamedChildNode(aNode, \"Title\");\n                _Nodes.Add(tNode);\t\t// Working on the title\t\t\n            }\n            // 20022008 AJM GJL\n            else if (type == PropertyTypeEnum.ValueAxis2Title)\n            {\n                Text = Strings.PropertyDialog_BuildTitle_ValueAxisRightTitle;\n                XmlNode caNode = _Draw.GetCreateNamedChildNode(cNode, \"ValueAxis\");\n                XmlNode aNode = _Draw.GetCreateNamedChildNode(caNode, \"Axis\");\n                XmlNode tNode = _Draw.GetCreateNamedChildNode(aNode, \"fyi:Title2\");\n                _Nodes.Add(tNode);\t\t// Working on the title\t\t   \n            }\n            else\n            {\n                Text = Strings.PropertyDialog_BuildTitle_ValueAxisTitle;\n                XmlNode caNode = _Draw.GetCreateNamedChildNode(cNode, \"ValueAxis\");\n                XmlNode aNode = _Draw.GetCreateNamedChildNode(caNode, \"Axis\");\n                XmlNode tNode = _Draw.GetCreateNamedChildNode(aNode, \"Title\");\n                _Nodes.Add(tNode);\t\t// Working on the title\t\t\n            }\n\n            EnsureStyle();\t// Make sure we have Style nodes\n\n            // Style Text\n            var stc = new StyleTextCtl(_Draw, _Nodes, this);\n            AddTab(Strings.PropertyDialog_BuildReportItemTabs_Text, stc);\n\n            // Border tab\n            var bc = new StyleBorderCtl(_Draw, null, _Nodes);\n\t\t\tAddTab(Strings.PropertyDialog_BuildReportItemTabs_Border, bc);\n\n            // Style tab\n            var sc = new StyleCtl(_Draw, _Nodes);\n            AddTab(Strings.PropertyDialog_BuildReportItemTabs_Style, sc);\n        }\n\n        private void EnsureStyle()\n        {\n            // Make sure we have Style nodes for all the nodes\n            foreach (XmlNode pNode in this._Nodes)\n            {\n                XmlNode stNode = _Draw.GetCreateNamedChildNode(pNode, \"Style\");\n            }\n            return;\n        }\n\n        private void AddTab(string name, UserControl uc)\n        {\n            // Style tab\n            TabPage tp = new TabPage();\n            tp.Location = new System.Drawing.Point(4, 22);\n            tp.Name = name + \"1\";\n            tp.Size = new System.Drawing.Size(552, 284);\n            tp.TabIndex = 1;\n            tp.Text = name;\n\n            _TabPanels.Add(uc);\n            tp.Controls.Add(uc);\n\n            uc.Dock = System.Windows.Forms.DockStyle.Fill;\n            uc.Location = new System.Drawing.Point(0, 0);\n            uc.Name = name + \"1\";\n            uc.Size = new System.Drawing.Size(552, 284);\n            uc.TabIndex = 0;\n\n            tcProps.Controls.Add(tp);\n        }\n\n        private void bApply_Click(object sender, System.EventArgs e)\n        {\n            if (!IsValid())\n                return;\n\n            this._Changed = true;\n            foreach (IProperty ip in _TabPanels)\n            {\n                ip.Apply();\n            }\n            this._Draw.Invalidate();\t\t// Force screen to redraw\n        }\n\n        private void bOK_Click(object sender, System.EventArgs e)\n        {\n            if (!IsValid())\n                return;\n\n            bApply_Click(sender, e);\t// Apply does all the work\n            this.DialogResult = DialogResult.OK;\n        }\n\n        private bool IsValid()\n        {\n            int index = 0;\n            foreach (IProperty ip in _TabPanels)\n            {\n                if (!ip.IsValid())\n                {\n                    tcProps.SelectedIndex = index;\n                    return false;\n                }\n                index++;\n            }\n            return true;\n        }\n\n        private void PropertyDialog_Closing(object sender, System.ComponentModel.CancelEventArgs e)\n        {\n            if (_Type == PropertyTypeEnum.Grouping)\n            {\t// Need to check if grouping value is still required\n                XmlNode aNode = _Nodes[0];\n\n                // We have to create a grouping here but will need to kill it if no definition follows it\n                XmlNode gNode = _Draw.GetNamedChildNode(aNode, \"Grouping\");\n                if (gNode != null &&\n                    _Draw.GetNamedChildNode(gNode, \"GroupExpressions\") == null)\n                {\t// Not a valid group if no GroupExpressions\n                    aNode.RemoveChild(gNode);\n                }\n            }\n\n        }\n\n        private void bDelete_Click(object sender, System.EventArgs e)\n        {\n            if (MessageBox.Show(this,\n                    Strings.PropertyDialog_ShowF_WantDeleteDataset,\n                    Strings.PropertyDialog_ShowF_DataSet,\n                    MessageBoxButtons.YesNo) == DialogResult.Yes)\n            {\n                _Delete = true;\n                DialogResult = DialogResult.OK;\n            }\n        }\n    }\n\n    internal interface IProperty\n    {\n        void Apply();\n        bool IsValid();\n    }\n\n}\n"
  },
  {
    "path": "RdlDesign/PropertyDialog.fr.resx",
    "content": "﻿<root>\n    <resheader name=\"resmimetype\">\n        <value>text/microsoft-resx</value>\n    </resheader>\n    <resheader name=\"version\">\n        <value>1.3</value>\n    </resheader>\n    <resheader name=\"reader\">\n        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n    </resheader>\n    <resheader name=\"writer\">\n        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n    </resheader>\n    <data name=\"$this.Text\" xml:space=\"preserve\">\n        <value>Propriétés</value>\n    </data>\n    <data name=\"bApply.Text\" xml:space=\"preserve\">\n        <value>Appliquer</value>\n    </data>\n    <data name=\"bCancel.Text\" xml:space=\"preserve\">\n        <value>Annuler</value>\n    </data>\n    <data name=\"bDelete.Text\" xml:space=\"preserve\">\n        <value>Supprimer</value>\n    </data>\n</root>"
  },
  {
    "path": "RdlDesign/PropertyDialog.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bDelete.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 8</value>\n  </data>\n  <data name=\"bDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bDelete.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"bDelete.Text\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"bDelete.Visible\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Name\" xml:space=\"preserve\">\n    <value>bDelete</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bApply.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Bottom, Right</value>\n  </data>\n  <data name=\"bApply.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>377, 8</value>\n  </data>\n  <data name=\"bApply.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"bApply.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"bApply.Text\" xml:space=\"preserve\">\n    <value>Apply</value>\n  </data>\n  <data name=\"&gt;&gt;bApply.Name\" xml:space=\"preserve\">\n    <value>bApply</value>\n  </data>\n  <data name=\"&gt;&gt;bApply.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bApply.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;bApply.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"bOK.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Bottom, Right</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>217, 8</value>\n  </data>\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"bCancel.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Bottom, Right</value>\n  </data>\n  <data name=\"bCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>297, 8</value>\n  </data>\n  <data name=\"bCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"bCancel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Name\" xml:space=\"preserve\">\n    <value>bCancel</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"panel1.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Bottom</value>\n  </data>\n  <data name=\"panel1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 430</value>\n  </data>\n  <data name=\"panel1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>585, 40</value>\n  </data>\n  <data name=\"panel1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Name\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"tcProps.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Fill</value>\n  </data>\n  <data name=\"tcProps.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"tcProps.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>585, 430</value>\n  </data>\n  <data name=\"tcProps.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;tcProps.Name\" xml:space=\"preserve\">\n    <value>tcProps</value>\n  </data>\n  <data name=\"&gt;&gt;tcProps.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tcProps.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tcProps.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>585, 470</value>\n  </data>\n  <data name=\"$this.MaximumSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>1800, 1000</value>\n  </data>\n  <data name=\"$this.MinimumSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>450, 300</value>\n  </data>\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Properties</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>PropertyDialog</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/PropertyDialog.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"bDelete.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"bApply.Text\" xml:space=\"preserve\">\n    <value>Применить</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Свойства</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/QueryParametersCtl.Designer.cs",
    "content": "namespace Majorsilence.Reporting.RdlDesign\n{\n\tpartial class QueryParametersCtl\n\t{\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\t\t\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(QueryParametersCtl));\n            this.DoubleBuffered = true;\n            this.dgParms = new System.Windows.Forms.DataGridView();\n            this.dgtbName = new System.Windows.Forms.DataGridViewTextBoxColumn();\n            this.dgtbValue = new System.Windows.Forms.DataGridViewTextBoxColumn();\n            this.bValueExpr = new System.Windows.Forms.Button();\n            this.bDelete = new System.Windows.Forms.Button();\n            ((System.ComponentModel.ISupportInitialize)(this.dgParms)).BeginInit();\n            this.SuspendLayout();\n            // \n            // dgParms\n            // \n            resources.ApplyResources(this.dgParms, \"dgParms\");\n            this.dgParms.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;\n            this.dgParms.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {\n            this.dgtbName,\n            this.dgtbValue});\n            this.dgParms.Name = \"dgParms\";\n            // \n            // dgtbName\n            // \n            this.dgtbName.DataPropertyName = \"Name\";\n            resources.ApplyResources(this.dgtbName, \"dgtbName\");\n            this.dgtbName.Name = \"dgtbName\";\n            // \n            // dgtbValue\n            // \n            this.dgtbValue.DataPropertyName = \"Value\";\n            resources.ApplyResources(this.dgtbValue, \"dgtbValue\");\n            this.dgtbValue.Name = \"dgtbValue\";\n            // \n            // bValueExpr\n            // \n            resources.ApplyResources(this.bValueExpr, \"bValueExpr\");\n            this.bValueExpr.Name = \"bValueExpr\";\n            this.bValueExpr.Tag = \"value\";\n            this.bValueExpr.Click += new System.EventHandler(this.bValueExpr_Click);\n            // \n            // bDelete\n            // \n            resources.ApplyResources(this.bDelete, \"bDelete\");\n            this.bDelete.Name = \"bDelete\";\n            this.bDelete.Click += new System.EventHandler(this.bDelete_Click);\n            // \n            // QueryParametersCtl\n            // \n            this.Controls.Add(this.bDelete);\n            this.Controls.Add(this.bValueExpr);\n            this.Controls.Add(this.dgParms);\n            this.Name = \"QueryParametersCtl\";\n            resources.ApplyResources(this, \"$this\");\n            ((System.ComponentModel.ISupportInitialize)(this.dgParms)).EndInit();\n            this.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\t\t\t\t\n\t\tprivate System.Windows.Forms.DataGridView dgParms;\n\t\tprivate System.Windows.Forms.DataGridViewTextBoxColumn dgtbName;\n\t\tprivate System.Windows.Forms.DataGridViewTextBoxColumn dgtbValue;\n        private System.Windows.Forms.Button bValueExpr;\n        private System.Windows.Forms.Button bDelete;\n    }\n}"
  },
  {
    "path": "RdlDesign/QueryParametersCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.Text;\nusing System.IO;\nusing Majorsilence.Reporting.Rdl;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// QueryParametersCtl provides values for the DataSet Query QueryParameters rdl elements\n\t/// </summary>\n\tinternal partial class QueryParametersCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n\t\tprivate DesignXmlDraw _Draw;\n\t\tprivate DataSetValues _dsv;\n      \n        internal QueryParametersCtl(DesignXmlDraw dxDraw, DataSetValues dsv)\n\t\t{\n\t\t\t_Draw = dxDraw;\n\t\t\t_dsv = dsv;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues();\t\t\t\n\t\t}\n\n\t\tprivate void InitValues()\n\t\t{\n            this.dgParms.DataSource = _dsv.QueryParameters; //QueryParameters are loaded in DataSetsCtl.InitValues()\n\t\t}\t\t\n\n\t\tpublic bool IsValid()\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\treturn;\t\t\t// the apply is done as part of the DataSetsCtl.Apply()\n\t\t}\n\n        private void bValueExpr_Click(object sender, EventArgs e)\n        {\n            if (dgParms.CurrentCell != null)\n            {\n                DataGridViewCell dgc = dgParms.CurrentCell;\n                if (dgc.ColumnIndex == 1)\n                {\n                    string cv = dgc.Value as string;\n\n                    DialogExprEditor ee = new DialogExprEditor(_Draw, cv, _dsv.Node, false);\n                    try\n                    {\n                        DialogResult dlgr = ee.ShowDialog();\n                        if (dlgr == DialogResult.OK)\n                            dgc.Value = ee.Expression;\n                    }\n                    finally\n                    {\n                        ee.Dispose();\n                    }\n                }\n            }\n\n        }\n\n        private void bDelete_Click(object sender, EventArgs e)\n        {\n            if (dgParms.CurrentRow == null)\n                return;\n\n             dgParms.Rows.RemoveAt(this.dgParms.CurrentRow.Index);\n\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/QueryParametersCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"dgParms.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Bottom, Left, Right</value>\n  </data>\n  <metadata name=\"dgtbName.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <data name=\"dgtbName.HeaderText\" xml:space=\"preserve\">\n    <value>Parameter Name</value>\n  </data>\n  <metadata name=\"dgtbValue.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <data name=\"dgtbValue.HeaderText\" xml:space=\"preserve\">\n    <value>Value</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"dgParms.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 8</value>\n  </data>\n  <data name=\"dgParms.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>399, 168</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"dgParms.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;dgParms.Name\" xml:space=\"preserve\">\n    <value>dgParms</value>\n  </data>\n  <data name=\"&gt;&gt;dgParms.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dgParms.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;dgParms.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"bValueExpr.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"bValueExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"bValueExpr.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"bValueExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>413, 8</value>\n  </data>\n  <data name=\"bValueExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 23</value>\n  </data>\n  <data name=\"bValueExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"bValueExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.Name\" xml:space=\"preserve\">\n    <value>bValueExpr</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"bDelete.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Right</value>\n  </data>\n  <data name=\"bDelete.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"bDelete.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>413, 37</value>\n  </data>\n  <data name=\"bDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 23</value>\n  </data>\n  <data name=\"bDelete.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"bDelete.Text\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Name\" xml:space=\"preserve\">\n    <value>bDelete</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>464, 304</value>\n  </data>\n  <data name=\"&gt;&gt;dgtbName.Name\" xml:space=\"preserve\">\n    <value>dgtbName</value>\n  </data>\n  <data name=\"&gt;&gt;dgtbName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dgtbValue.Name\" xml:space=\"preserve\">\n    <value>dgtbValue</value>\n  </data>\n  <data name=\"&gt;&gt;dgtbValue.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dgTableStyle.Name\" xml:space=\"preserve\">\n    <value>dgTableStyle</value>\n  </data>\n  <data name=\"&gt;&gt;dgTableStyle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGridTableStyle, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>QueryParametersCtl</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/QueryParametersCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"dgtbName.HeaderText\" xml:space=\"preserve\">\n    <value>Название параметра</value>\n  </data>\n  <data name=\"dgtbValue.HeaderText\" xml:space=\"preserve\">\n    <value>Значение</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/RdlDesign.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 15\nVisualStudioVersion = 15.0.26403.7\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ReportDesigner\", \"ReportDesigner.csproj\", \"{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlEngine\", \"..\\RdlEngine\\RdlEngine.csproj\", \"{C97E91F4-B310-44E2-9B6C-96775395722D}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlViewer\", \"..\\RdlViewer\\RdlViewer.csproj\", \"{D99145B1-CB6C-41F5-BA86-723325145FB5}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DataProviders\", \"..\\DataProviders\\DataProviders.csproj\", \"{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlCri\", \"..\\RdlCri\\RdlCri.csproj\", \"{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"EncryptionProvider\", \"..\\EncryptionProvider\\EncryptionProvider.csproj\", \"{83D67C75-CE23-4141-8BFE-3AC52F53310E}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug|x64.Build.0 = Debug|x64\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Debug|x86.Build.0 = Debug|x86\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release|x64.ActiveCfg = Release|x64\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release|x64.Build.0 = Release|x64\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release|x86.ActiveCfg = Release|x86\n\t\t{3E1D2C49-44A2-46A0-B107-9E8A87AE78A7}.Release|x86.Build.0 = Release|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.Build.0 = Debug|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.Build.0 = Debug|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.ActiveCfg = Release|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.Build.0 = Release|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.ActiveCfg = Release|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.Build.0 = Release|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x64.Build.0 = Debug|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x86.Build.0 = Debug|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x64.ActiveCfg = Release|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x64.Build.0 = Release|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x86.ActiveCfg = Release|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x86.Build.0 = Release|x86\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x64.Build.0 = Debug|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Debug|x86.Build.0 = Debug|x86\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x64.ActiveCfg = Release|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x64.Build.0 = Release|x64\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.ActiveCfg = Release|x86\n\t\t{D9F4197F-52D2-49F0-8DAF-E2884733CF2D}.Release|x86.Build.0 = Release|x86\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x64.Build.0 = Debug|x64\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Debug|x86.Build.0 = Debug|x86\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x64.ActiveCfg = Release|x64\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x64.Build.0 = Release|x64\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x86.ActiveCfg = Release|x86\n\t\t{9C9ECACA-0DEB-4517-8CF1-02C3D3EB128E}.Release|x86.Build.0 = Release|x86\n\t\t{83D67C75-CE23-4141-8BFE-3AC52F53310E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{83D67C75-CE23-4141-8BFE-3AC52F53310E}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{83D67C75-CE23-4141-8BFE-3AC52F53310E}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{83D67C75-CE23-4141-8BFE-3AC52F53310E}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{83D67C75-CE23-4141-8BFE-3AC52F53310E}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{83D67C75-CE23-4141-8BFE-3AC52F53310E}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{83D67C75-CE23-4141-8BFE-3AC52F53310E}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{83D67C75-CE23-4141-8BFE-3AC52F53310E}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{83D67C75-CE23-4141-8BFE-3AC52F53310E}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{83D67C75-CE23-4141-8BFE-3AC52F53310E}.Release|x64.Build.0 = Release|Any CPU\n\t\t{83D67C75-CE23-4141-8BFE-3AC52F53310E}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{83D67C75-CE23-4141-8BFE-3AC52F53310E}.Release|x86.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "RdlDesign/RdlDesigner.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\tpublic partial class RdlDesigner : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n        private MDIChild printChild=null;\n        private DialogValidateRdl _ValidateRdl=null;\n        private DockStyle _PropertiesLocation = DockStyle.Right;   \n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tthis.components = new System.ComponentModel.Container();\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RdlDesigner));\n            this.DoubleBuffered = true;\n\t\t\tthis.menuStrip1 = new System.Windows.Forms.MenuStrip();\n\t\t\tthis.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.newReportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.printToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.exportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.pDFToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.pDFOldStyleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.tIFFToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.cSVToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.excelToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.Excel2007ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.dOCToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.rTFDOCToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.xMLToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.webPageHTMLToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.webArchiveSingleFileMHTToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.recentFilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.undoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.redoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.cutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.pasteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.selectAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.findToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.findNextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.replaceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.goToToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.formatXMLToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.designerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.rDLTextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.previewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.showReportInBrowserToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.propertiesWindowsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.insertToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.chartToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.gridToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.imageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.lineToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.listToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.matrixToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.rectangleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.subReportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.tableToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.textboxToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.dataToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.dataSetsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.dataSourcesToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.embeddedImagesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.createSharedDataSourceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.formatToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.alignToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.leftsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.centersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.rightsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.topsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.middlesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.bottomsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.sizeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.widthToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.heightToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.bothToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.horizontalSpacingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.makeEqualToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.increaseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.decreaseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.zeroToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.verticalSpacingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.makeEqualToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.increaseToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.decreaseToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.zeroToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.paddingLeftToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.increaseToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.decreaseToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.zeroToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.paddingRightToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.increaseToolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.decreaseToolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.zeroToolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.paddintTopToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.increaseToolStripMenuItem4 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.decreaseToolStripMenuItem4 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.zeroToolStripMenuItem4 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.paddingBottomToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.increaseToolStripMenuItem5 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.decreaseToolStripMenuItem5 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.zeroToolStripMenuItem5 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.centerInContainerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.centerHorizontallyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.centerVerticallyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.centerBothToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.validateRDLToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.startDesktopServerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.windowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.cascadeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.tileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.horizontalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.verticallyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.closeAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.helpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.supportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.mainTB = new System.Windows.Forms.ToolStrip();\n\t\t\tthis.newToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.openToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.saveToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.cutToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.copyToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.pasteToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.undoToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.textboxToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.chartToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.tableToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.listToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.imageToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.matrixToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.subreportToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.rectangleToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.lineToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.fxToolStripLabel1 = new System.Windows.Forms.ToolStripLabel();\n\t\t\tthis.ctlEditTextbox = new System.Windows.Forms.ToolStripTextBox();\n\t\t\tthis.zoomControl = new Majorsilence.Reporting.RdlDesign.ToolStripUserZoomControl();\n\t\t\tthis.toolStrip1 = new System.Windows.Forms.ToolStrip();\n\t\t\tthis.boldToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.italiacToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.underlineToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.leftAlignToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.centerAlignToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.rightAlignToolStripButton3 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.fontToolStripComboBox1 = new System.Windows.Forms.ToolStripComboBox();\n\t\t\tthis.fontSizeToolStripComboBox1 = new System.Windows.Forms.ToolStripComboBox();\n\t\t\tthis.printToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.zoomToolStripComboBox1 = new System.Windows.Forms.ToolStripComboBox();\n\t\t\tthis.selectToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.pdfToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.htmlToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.excelToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.XmlToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.MhtToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.CsvToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.RtfToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.TifToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.toolStripSeparator14 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.AlignmentGridEnable = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.mainTC = new System.Windows.Forms.TabControl();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.panel1 = new System.Windows.Forms.Panel();\n\t\t\tthis.foreColorPicker1 = new Majorsilence.Reporting.RdlDesign.ColorPicker();\n\t\t\tthis.backColorPicker1 = new Majorsilence.Reporting.RdlDesign.ColorPicker();\n\t\t\tthis.statusStrip1 = new System.Windows.Forms.StatusStrip();\n\t\t\tthis.statusSelected = new System.Windows.Forms.ToolStripStatusLabel();\n\t\t\tthis.toolStripStatusLabel2 = new System.Windows.Forms.ToolStripStatusLabel();\n\t\t\tthis.statusPosition = new System.Windows.Forms.ToolStripStatusLabel();\n\t\t\tthis.mainSP = new System.Windows.Forms.Splitter();\n\t\t\tthis.ContextMenuTB = new System.Windows.Forms.ContextMenuStrip(this.components);\n\t\t\tthis.MenuTBClose = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuTBSave = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.MenuTBCloseAllButThis = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.mainProperties = new Majorsilence.Reporting.RdlDesign.PropertyCtl();\n\t\t\tthis.menuStrip1.SuspendLayout();\n\t\t\tthis.mainTB.SuspendLayout();\n\t\t\tthis.toolStrip1.SuspendLayout();\n\t\t\tthis.panel1.SuspendLayout();\n\t\t\tthis.statusStrip1.SuspendLayout();\n\t\t\tthis.ContextMenuTB.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// menuStrip1\n\t\t\t// \n\t\t\tthis.menuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20);\n\t\t\tthis.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.fileToolStripMenuItem,\n            this.editToolStripMenuItem,\n            this.viewToolStripMenuItem,\n            this.insertToolStripMenuItem,\n            this.dataToolStripMenuItem,\n            this.formatToolStripMenuItem,\n            this.toolsToolStripMenuItem,\n            this.windowToolStripMenuItem,\n            this.helpToolStripMenuItem});\n\t\t\tresources.ApplyResources(this.menuStrip1, \"menuStrip1\");\n\t\t\tthis.menuStrip1.Name = \"menuStrip1\";\n\t\t\t// \n\t\t\t// fileToolStripMenuItem\n\t\t\t// \n\t\t\tthis.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.newReportToolStripMenuItem,\n            this.openToolStripMenuItem,\n            this.closeToolStripMenuItem,\n            this.toolStripSeparator1,\n            this.saveToolStripMenuItem,\n            this.saveAsToolStripMenuItem,\n            this.printToolStripMenuItem,\n            this.exportToolStripMenuItem,\n            this.toolStripSeparator2,\n            this.recentFilesToolStripMenuItem,\n            this.toolStripSeparator3,\n            this.exitToolStripMenuItem});\n\t\t\tthis.fileToolStripMenuItem.Name = \"fileToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.fileToolStripMenuItem, \"fileToolStripMenuItem\");\n\t\t\tthis.fileToolStripMenuItem.DropDownOpening += new System.EventHandler(this.menuFile_Popup);\n\t\t\t// \n\t\t\t// newReportToolStripMenuItem\n\t\t\t// \n\t\t\tthis.newReportToolStripMenuItem.Name = \"newReportToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.newReportToolStripMenuItem, \"newReportToolStripMenuItem\");\n\t\t\tthis.newReportToolStripMenuItem.Click += new System.EventHandler(this.menuFileNewReport_Click);\n\t\t\t// \n\t\t\t// openToolStripMenuItem\n\t\t\t// \n\t\t\tthis.openToolStripMenuItem.Name = \"openToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.openToolStripMenuItem, \"openToolStripMenuItem\");\n\t\t\tthis.openToolStripMenuItem.Click += new System.EventHandler(this.menuFileOpen_Click);\n\t\t\t// \n\t\t\t// closeToolStripMenuItem\n\t\t\t// \n\t\t\tthis.closeToolStripMenuItem.Name = \"closeToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.closeToolStripMenuItem, \"closeToolStripMenuItem\");\n\t\t\tthis.closeToolStripMenuItem.Click += new System.EventHandler(this.menuFileClose_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator1\n\t\t\t// \n\t\t\tthis.toolStripSeparator1.Name = \"toolStripSeparator1\";\n\t\t\tresources.ApplyResources(this.toolStripSeparator1, \"toolStripSeparator1\");\n\t\t\t// \n\t\t\t// saveToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.saveToolStripMenuItem, \"saveToolStripMenuItem\");\n\t\t\tthis.saveToolStripMenuItem.Name = \"saveToolStripMenuItem\";\n\t\t\tthis.saveToolStripMenuItem.Click += new System.EventHandler(this.menuFileSave_Click);\n\t\t\t// \n\t\t\t// saveAsToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.saveAsToolStripMenuItem, \"saveAsToolStripMenuItem\");\n\t\t\tthis.saveAsToolStripMenuItem.Name = \"saveAsToolStripMenuItem\";\n\t\t\tthis.saveAsToolStripMenuItem.Click += new System.EventHandler(this.menuFileSaveAs_Click);\n\t\t\t// \n\t\t\t// printToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.printToolStripMenuItem, \"printToolStripMenuItem\");\n\t\t\tthis.printToolStripMenuItem.Name = \"printToolStripMenuItem\";\n\t\t\tthis.printToolStripMenuItem.Click += new System.EventHandler(this.menuFilePrint_Click);\n\t\t\t// \n\t\t\t// exportToolStripMenuItem\n\t\t\t// \n\t\t\tthis.exportToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.pDFToolStripMenuItem,\n            this.pDFOldStyleToolStripMenuItem,\n            this.tIFFToolStripMenuItem,\n            this.cSVToolStripMenuItem,\n            this.excelToolStripMenuItem,\n            this.Excel2007ToolStripMenuItem,\n            this.dOCToolStripMenuItem,\n            this.rTFDOCToolStripMenuItem,\n            this.xMLToolStripMenuItem,\n            this.webPageHTMLToolStripMenuItem,\n            this.webArchiveSingleFileMHTToolStripMenuItem});\n\t\t\tresources.ApplyResources(this.exportToolStripMenuItem, \"exportToolStripMenuItem\");\n\t\t\tthis.exportToolStripMenuItem.Name = \"exportToolStripMenuItem\";\n\t\t\t// \n\t\t\t// pDFToolStripMenuItem\n\t\t\t// \n\t\t\tthis.pDFToolStripMenuItem.Name = \"pDFToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.pDFToolStripMenuItem, \"pDFToolStripMenuItem\");\n\t\t\tthis.pDFToolStripMenuItem.Click += new System.EventHandler(this.pDFToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// pDFOldStyleToolStripMenuItem\n\t\t\t// \n\t\t\tthis.pDFOldStyleToolStripMenuItem.Name = \"pDFOldStyleToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.pDFOldStyleToolStripMenuItem, \"pDFOldStyleToolStripMenuItem\");\n\t\t\tthis.pDFOldStyleToolStripMenuItem.Click += new System.EventHandler(this.pDFOldStyleToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// tIFFToolStripMenuItem\n\t\t\t// \n\t\t\tthis.tIFFToolStripMenuItem.Name = \"tIFFToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.tIFFToolStripMenuItem, \"tIFFToolStripMenuItem\");\n\t\t\tthis.tIFFToolStripMenuItem.Click += new System.EventHandler(this.tIFFToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// cSVToolStripMenuItem\n\t\t\t// \n\t\t\tthis.cSVToolStripMenuItem.Name = \"cSVToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.cSVToolStripMenuItem, \"cSVToolStripMenuItem\");\n\t\t\tthis.cSVToolStripMenuItem.Click += new System.EventHandler(this.cSVToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// excelToolStripMenuItem\n\t\t\t// \n\t\t\tthis.excelToolStripMenuItem.Name = \"excelToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.excelToolStripMenuItem, \"excelToolStripMenuItem\");\n\t\t\tthis.excelToolStripMenuItem.Click += new System.EventHandler(this.excelToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// Excel2007ToolStripMenuItem\n\t\t\t// \n\t\t\tthis.Excel2007ToolStripMenuItem.Name = \"Excel2007ToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.Excel2007ToolStripMenuItem, \"Excel2007ToolStripMenuItem\");\n\t\t\tthis.Excel2007ToolStripMenuItem.Tag = \"Excel2007\";\n\t\t\tthis.Excel2007ToolStripMenuItem.Click += new System.EventHandler(this.Excel2007ToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// dOCToolStripMenuItem\n\t\t\t// \n\t\t\tthis.dOCToolStripMenuItem.Name = \"dOCToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.dOCToolStripMenuItem, \"dOCToolStripMenuItem\");\n\t\t\tthis.dOCToolStripMenuItem.Click += new System.EventHandler(this.dOCToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// rTFDOCToolStripMenuItem\n\t\t\t// \n\t\t\tthis.rTFDOCToolStripMenuItem.Name = \"rTFDOCToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.rTFDOCToolStripMenuItem, \"rTFDOCToolStripMenuItem\");\n\t\t\tthis.rTFDOCToolStripMenuItem.Click += new System.EventHandler(this.rTFDOCToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// xMLToolStripMenuItem\n\t\t\t// \n\t\t\tthis.xMLToolStripMenuItem.Name = \"xMLToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.xMLToolStripMenuItem, \"xMLToolStripMenuItem\");\n\t\t\tthis.xMLToolStripMenuItem.Click += new System.EventHandler(this.xMLToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// webPageHTMLToolStripMenuItem\n\t\t\t// \n\t\t\tthis.webPageHTMLToolStripMenuItem.Name = \"webPageHTMLToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.webPageHTMLToolStripMenuItem, \"webPageHTMLToolStripMenuItem\");\n\t\t\tthis.webPageHTMLToolStripMenuItem.Click += new System.EventHandler(this.webPageHTMLToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// webArchiveSingleFileMHTToolStripMenuItem\n\t\t\t// \n\t\t\tthis.webArchiveSingleFileMHTToolStripMenuItem.Name = \"webArchiveSingleFileMHTToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.webArchiveSingleFileMHTToolStripMenuItem, \"webArchiveSingleFileMHTToolStripMenuItem\");\n\t\t\tthis.webArchiveSingleFileMHTToolStripMenuItem.Click += new System.EventHandler(this.webArchiveSingleFileMHTToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator2\n\t\t\t// \n\t\t\tthis.toolStripSeparator2.Name = \"toolStripSeparator2\";\n\t\t\tresources.ApplyResources(this.toolStripSeparator2, \"toolStripSeparator2\");\n\t\t\t// \n\t\t\t// recentFilesToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.recentFilesToolStripMenuItem, \"recentFilesToolStripMenuItem\");\n\t\t\tthis.recentFilesToolStripMenuItem.Name = \"recentFilesToolStripMenuItem\";\n\t\t\t// \n\t\t\t// toolStripSeparator3\n\t\t\t// \n\t\t\tthis.toolStripSeparator3.Name = \"toolStripSeparator3\";\n\t\t\tresources.ApplyResources(this.toolStripSeparator3, \"toolStripSeparator3\");\n\t\t\t// \n\t\t\t// exitToolStripMenuItem\n\t\t\t// \n\t\t\tthis.exitToolStripMenuItem.Name = \"exitToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.exitToolStripMenuItem, \"exitToolStripMenuItem\");\n\t\t\tthis.exitToolStripMenuItem.Click += new System.EventHandler(this.ExitToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// editToolStripMenuItem\n\t\t\t// \n\t\t\tthis.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.undoToolStripMenuItem,\n            this.redoToolStripMenuItem,\n            this.toolStripSeparator4,\n            this.cutToolStripMenuItem,\n            this.copyToolStripMenuItem,\n            this.pasteToolStripMenuItem,\n            this.deleteToolStripMenuItem,\n            this.toolStripSeparator5,\n            this.selectAllToolStripMenuItem,\n            this.toolStripSeparator6,\n            this.findToolStripMenuItem,\n            this.findNextToolStripMenuItem,\n            this.replaceToolStripMenuItem,\n            this.goToToolStripMenuItem,\n            this.toolStripSeparator7,\n            this.formatXMLToolStripMenuItem});\n\t\t\tthis.editToolStripMenuItem.Name = \"editToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.editToolStripMenuItem, \"editToolStripMenuItem\");\n\t\t\tthis.editToolStripMenuItem.DropDownOpening += new System.EventHandler(this.menuEdit_Popup);\n\t\t\t// \n\t\t\t// undoToolStripMenuItem\n\t\t\t// \n\t\t\tthis.undoToolStripMenuItem.Name = \"undoToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.undoToolStripMenuItem, \"undoToolStripMenuItem\");\n\t\t\tthis.undoToolStripMenuItem.Click += new System.EventHandler(this.menuEditUndo_Click);\n\t\t\t// \n\t\t\t// redoToolStripMenuItem\n\t\t\t// \n\t\t\tthis.redoToolStripMenuItem.Name = \"redoToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.redoToolStripMenuItem, \"redoToolStripMenuItem\");\n\t\t\tthis.redoToolStripMenuItem.Click += new System.EventHandler(this.menuEditRedo_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator4\n\t\t\t// \n\t\t\tthis.toolStripSeparator4.Name = \"toolStripSeparator4\";\n\t\t\tresources.ApplyResources(this.toolStripSeparator4, \"toolStripSeparator4\");\n\t\t\t// \n\t\t\t// cutToolStripMenuItem\n\t\t\t// \n\t\t\tthis.cutToolStripMenuItem.Name = \"cutToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.cutToolStripMenuItem, \"cutToolStripMenuItem\");\n\t\t\tthis.cutToolStripMenuItem.Click += new System.EventHandler(this.menuEditCut_Click);\n\t\t\t// \n\t\t\t// copyToolStripMenuItem\n\t\t\t// \n\t\t\tthis.copyToolStripMenuItem.Name = \"copyToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.copyToolStripMenuItem, \"copyToolStripMenuItem\");\n\t\t\tthis.copyToolStripMenuItem.Click += new System.EventHandler(this.menuEditCopy_Click);\n\t\t\t// \n\t\t\t// pasteToolStripMenuItem\n\t\t\t// \n\t\t\tthis.pasteToolStripMenuItem.Name = \"pasteToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.pasteToolStripMenuItem, \"pasteToolStripMenuItem\");\n\t\t\tthis.pasteToolStripMenuItem.Click += new System.EventHandler(this.menuEditPaste_Click);\n\t\t\t// \n\t\t\t// deleteToolStripMenuItem\n\t\t\t// \n\t\t\tthis.deleteToolStripMenuItem.Name = \"deleteToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.deleteToolStripMenuItem, \"deleteToolStripMenuItem\");\n\t\t\tthis.deleteToolStripMenuItem.Click += new System.EventHandler(this.menuEditDelete_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator5\n\t\t\t// \n\t\t\tthis.toolStripSeparator5.Name = \"toolStripSeparator5\";\n\t\t\tresources.ApplyResources(this.toolStripSeparator5, \"toolStripSeparator5\");\n\t\t\t// \n\t\t\t// selectAllToolStripMenuItem\n\t\t\t// \n\t\t\tthis.selectAllToolStripMenuItem.Name = \"selectAllToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.selectAllToolStripMenuItem, \"selectAllToolStripMenuItem\");\n\t\t\tthis.selectAllToolStripMenuItem.Click += new System.EventHandler(this.menuEditSelectAll_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator6\n\t\t\t// \n\t\t\tthis.toolStripSeparator6.Name = \"toolStripSeparator6\";\n\t\t\tresources.ApplyResources(this.toolStripSeparator6, \"toolStripSeparator6\");\n\t\t\t// \n\t\t\t// findToolStripMenuItem\n\t\t\t// \n\t\t\tthis.findToolStripMenuItem.Name = \"findToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.findToolStripMenuItem, \"findToolStripMenuItem\");\n\t\t\tthis.findToolStripMenuItem.Click += new System.EventHandler(this.menuEditFind_Click);\n\t\t\t// \n\t\t\t// findNextToolStripMenuItem\n\t\t\t// \n\t\t\tthis.findNextToolStripMenuItem.Name = \"findNextToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.findNextToolStripMenuItem, \"findNextToolStripMenuItem\");\n\t\t\tthis.findNextToolStripMenuItem.Click += new System.EventHandler(this.menuEditFindNext_Click);\n\t\t\t// \n\t\t\t// replaceToolStripMenuItem\n\t\t\t// \n\t\t\tthis.replaceToolStripMenuItem.Name = \"replaceToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.replaceToolStripMenuItem, \"replaceToolStripMenuItem\");\n\t\t\tthis.replaceToolStripMenuItem.Click += new System.EventHandler(this.menuEditReplace_Click);\n\t\t\t// \n\t\t\t// goToToolStripMenuItem\n\t\t\t// \n\t\t\tthis.goToToolStripMenuItem.Name = \"goToToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.goToToolStripMenuItem, \"goToToolStripMenuItem\");\n\t\t\tthis.goToToolStripMenuItem.Click += new System.EventHandler(this.menuEditGoto_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator7\n\t\t\t// \n\t\t\tthis.toolStripSeparator7.Name = \"toolStripSeparator7\";\n\t\t\tresources.ApplyResources(this.toolStripSeparator7, \"toolStripSeparator7\");\n\t\t\t// \n\t\t\t// formatXMLToolStripMenuItem\n\t\t\t// \n\t\t\tthis.formatXMLToolStripMenuItem.Name = \"formatXMLToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.formatXMLToolStripMenuItem, \"formatXMLToolStripMenuItem\");\n\t\t\tthis.formatXMLToolStripMenuItem.Click += new System.EventHandler(this.menuEdit_FormatXml);\n\t\t\t// \n\t\t\t// viewToolStripMenuItem\n\t\t\t// \n\t\t\tthis.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.designerToolStripMenuItem,\n            this.rDLTextToolStripMenuItem,\n            this.previewToolStripMenuItem,\n            this.showReportInBrowserToolStripMenuItem,\n            this.propertiesWindowsToolStripMenuItem});\n\t\t\tthis.viewToolStripMenuItem.Name = \"viewToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.viewToolStripMenuItem, \"viewToolStripMenuItem\");\n\t\t\tthis.viewToolStripMenuItem.DropDownOpening += new System.EventHandler(this.menuView_Popup);\n\t\t\t// \n\t\t\t// designerToolStripMenuItem\n\t\t\t// \n\t\t\tthis.designerToolStripMenuItem.Name = \"designerToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.designerToolStripMenuItem, \"designerToolStripMenuItem\");\n\t\t\tthis.designerToolStripMenuItem.Click += new System.EventHandler(this.menuViewDesigner_Click);\n\t\t\t// \n\t\t\t// rDLTextToolStripMenuItem\n\t\t\t// \n\t\t\tthis.rDLTextToolStripMenuItem.Name = \"rDLTextToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.rDLTextToolStripMenuItem, \"rDLTextToolStripMenuItem\");\n\t\t\tthis.rDLTextToolStripMenuItem.Click += new System.EventHandler(this.menuViewRDL_Click);\n\t\t\t// \n\t\t\t// previewToolStripMenuItem\n\t\t\t// \n\t\t\tthis.previewToolStripMenuItem.Name = \"previewToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.previewToolStripMenuItem, \"previewToolStripMenuItem\");\n\t\t\tthis.previewToolStripMenuItem.Click += new System.EventHandler(this.menuViewPreview_Click);\n\t\t\t// \n\t\t\t// showReportInBrowserToolStripMenuItem\n\t\t\t// \n\t\t\tthis.showReportInBrowserToolStripMenuItem.Name = \"showReportInBrowserToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.showReportInBrowserToolStripMenuItem, \"showReportInBrowserToolStripMenuItem\");\n\t\t\tthis.showReportInBrowserToolStripMenuItem.Click += new System.EventHandler(this.menuViewBrowser_Click);\n\t\t\t// \n\t\t\t// propertiesWindowsToolStripMenuItem\n\t\t\t// \n\t\t\tthis.propertiesWindowsToolStripMenuItem.Name = \"propertiesWindowsToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.propertiesWindowsToolStripMenuItem, \"propertiesWindowsToolStripMenuItem\");\n\t\t\tthis.propertiesWindowsToolStripMenuItem.Click += new System.EventHandler(this.menuEditProperties_Click);\n\t\t\t// \n\t\t\t// insertToolStripMenuItem\n\t\t\t// \n\t\t\tthis.insertToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.chartToolStripMenuItem,\n            this.gridToolStripMenuItem,\n            this.imageToolStripMenuItem,\n            this.lineToolStripMenuItem,\n            this.listToolStripMenuItem,\n            this.matrixToolStripMenuItem,\n            this.rectangleToolStripMenuItem,\n            this.subReportToolStripMenuItem,\n            this.tableToolStripMenuItem,\n            this.textboxToolStripMenuItem});\n\t\t\tthis.insertToolStripMenuItem.Name = \"insertToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.insertToolStripMenuItem, \"insertToolStripMenuItem\");\n\t\t\t// \n\t\t\t// chartToolStripMenuItem\n\t\t\t// \n\t\t\tthis.chartToolStripMenuItem.Name = \"chartToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.chartToolStripMenuItem, \"chartToolStripMenuItem\");\n\t\t\tthis.chartToolStripMenuItem.Tag = \"Chart\";\n\t\t\tthis.chartToolStripMenuItem.Click += new System.EventHandler(this.InsertToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// gridToolStripMenuItem\n\t\t\t// \n\t\t\tthis.gridToolStripMenuItem.Name = \"gridToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.gridToolStripMenuItem, \"gridToolStripMenuItem\");\n\t\t\tthis.gridToolStripMenuItem.Click += new System.EventHandler(this.InsertToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// imageToolStripMenuItem\n\t\t\t// \n\t\t\tthis.imageToolStripMenuItem.Name = \"imageToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.imageToolStripMenuItem, \"imageToolStripMenuItem\");\n\t\t\tthis.imageToolStripMenuItem.Tag = \"Image\";\n\t\t\tthis.imageToolStripMenuItem.Click += new System.EventHandler(this.InsertToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// lineToolStripMenuItem\n\t\t\t// \n\t\t\tthis.lineToolStripMenuItem.Name = \"lineToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.lineToolStripMenuItem, \"lineToolStripMenuItem\");\n\t\t\tthis.lineToolStripMenuItem.Tag = \"Line\";\n\t\t\tthis.lineToolStripMenuItem.Click += new System.EventHandler(this.InsertToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// listToolStripMenuItem\n\t\t\t// \n\t\t\tthis.listToolStripMenuItem.Name = \"listToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.listToolStripMenuItem, \"listToolStripMenuItem\");\n\t\t\tthis.listToolStripMenuItem.Tag = \"List\";\n\t\t\tthis.listToolStripMenuItem.Click += new System.EventHandler(this.InsertToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// matrixToolStripMenuItem\n\t\t\t// \n\t\t\tthis.matrixToolStripMenuItem.Name = \"matrixToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.matrixToolStripMenuItem, \"matrixToolStripMenuItem\");\n\t\t\tthis.matrixToolStripMenuItem.Tag = \"Matrix\";\n\t\t\tthis.matrixToolStripMenuItem.Click += new System.EventHandler(this.InsertToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// rectangleToolStripMenuItem\n\t\t\t// \n\t\t\tthis.rectangleToolStripMenuItem.Name = \"rectangleToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.rectangleToolStripMenuItem, \"rectangleToolStripMenuItem\");\n\t\t\tthis.rectangleToolStripMenuItem.Tag = \"Rectangle\";\n\t\t\tthis.rectangleToolStripMenuItem.Click += new System.EventHandler(this.InsertToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// subReportToolStripMenuItem\n\t\t\t// \n\t\t\tthis.subReportToolStripMenuItem.Name = \"subReportToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.subReportToolStripMenuItem, \"subReportToolStripMenuItem\");\n\t\t\tthis.subReportToolStripMenuItem.Tag = \"Subreport\";\n\t\t\tthis.subReportToolStripMenuItem.Click += new System.EventHandler(this.InsertToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// tableToolStripMenuItem\n\t\t\t// \n\t\t\tthis.tableToolStripMenuItem.Name = \"tableToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.tableToolStripMenuItem, \"tableToolStripMenuItem\");\n\t\t\tthis.tableToolStripMenuItem.Tag = \"Table\";\n\t\t\tthis.tableToolStripMenuItem.Click += new System.EventHandler(this.InsertToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// textboxToolStripMenuItem\n\t\t\t// \n\t\t\tthis.textboxToolStripMenuItem.Name = \"textboxToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.textboxToolStripMenuItem, \"textboxToolStripMenuItem\");\n\t\t\tthis.textboxToolStripMenuItem.Tag = \"Textbox\";\n\t\t\tthis.textboxToolStripMenuItem.Click += new System.EventHandler(this.InsertToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// dataToolStripMenuItem\n\t\t\t// \n\t\t\tthis.dataToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.dataSetsToolStripMenuItem,\n            this.dataSourcesToolStripMenuItem1,\n            this.toolStripSeparator8,\n            this.embeddedImagesToolStripMenuItem,\n            this.toolStripSeparator9,\n            this.createSharedDataSourceToolStripMenuItem});\n\t\t\tthis.dataToolStripMenuItem.Name = \"dataToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.dataToolStripMenuItem, \"dataToolStripMenuItem\");\n\t\t\tthis.dataToolStripMenuItem.DropDownOpening += new System.EventHandler(this.menuData_Popup);\n\t\t\t// \n\t\t\t// dataSetsToolStripMenuItem\n\t\t\t// \n\t\t\tthis.dataSetsToolStripMenuItem.Name = \"dataSetsToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.dataSetsToolStripMenuItem, \"dataSetsToolStripMenuItem\");\n\t\t\t// \n\t\t\t// dataSourcesToolStripMenuItem1\n\t\t\t// \n\t\t\tthis.dataSourcesToolStripMenuItem1.Name = \"dataSourcesToolStripMenuItem1\";\n\t\t\tresources.ApplyResources(this.dataSourcesToolStripMenuItem1, \"dataSourcesToolStripMenuItem1\");\n\t\t\tthis.dataSourcesToolStripMenuItem1.Click += new System.EventHandler(this.dataSourcesToolStripMenuItem1_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator8\n\t\t\t// \n\t\t\tthis.toolStripSeparator8.Name = \"toolStripSeparator8\";\n\t\t\tresources.ApplyResources(this.toolStripSeparator8, \"toolStripSeparator8\");\n\t\t\t// \n\t\t\t// embeddedImagesToolStripMenuItem\n\t\t\t// \n\t\t\tthis.embeddedImagesToolStripMenuItem.Name = \"embeddedImagesToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.embeddedImagesToolStripMenuItem, \"embeddedImagesToolStripMenuItem\");\n\t\t\tthis.embeddedImagesToolStripMenuItem.Click += new System.EventHandler(this.embeddedImagesToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator9\n\t\t\t// \n\t\t\tthis.toolStripSeparator9.Name = \"toolStripSeparator9\";\n\t\t\tresources.ApplyResources(this.toolStripSeparator9, \"toolStripSeparator9\");\n\t\t\t// \n\t\t\t// createSharedDataSourceToolStripMenuItem\n\t\t\t// \n\t\t\tthis.createSharedDataSourceToolStripMenuItem.Name = \"createSharedDataSourceToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.createSharedDataSourceToolStripMenuItem, \"createSharedDataSourceToolStripMenuItem\");\n\t\t\tthis.createSharedDataSourceToolStripMenuItem.Click += new System.EventHandler(this.menuFileNewDataSourceRef_Click);\n\t\t\t// \n\t\t\t// formatToolStripMenuItem\n\t\t\t// \n\t\t\tthis.formatToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.alignToolStripMenuItem,\n            this.sizeToolStripMenuItem,\n            this.horizontalSpacingToolStripMenuItem,\n            this.verticalSpacingToolStripMenuItem,\n            this.toolStripSeparator11,\n            this.paddingLeftToolStripMenuItem,\n            this.paddingRightToolStripMenuItem,\n            this.paddintTopToolStripMenuItem,\n            this.paddingBottomToolStripMenuItem,\n            this.toolStripMenuItem1,\n            this.centerInContainerToolStripMenuItem});\n\t\t\tthis.formatToolStripMenuItem.Name = \"formatToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.formatToolStripMenuItem, \"formatToolStripMenuItem\");\n\t\t\tthis.formatToolStripMenuItem.DropDownOpening += new System.EventHandler(this.menuFormat_Popup);\n\t\t\t// \n\t\t\t// alignToolStripMenuItem\n\t\t\t// \n\t\t\tthis.alignToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.leftsToolStripMenuItem,\n            this.centersToolStripMenuItem,\n            this.rightsToolStripMenuItem,\n            this.toolStripSeparator10,\n            this.topsToolStripMenuItem,\n            this.middlesToolStripMenuItem,\n            this.bottomsToolStripMenuItem});\n\t\t\tthis.alignToolStripMenuItem.Name = \"alignToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.alignToolStripMenuItem, \"alignToolStripMenuItem\");\n\t\t\t// \n\t\t\t// leftsToolStripMenuItem\n\t\t\t// \n\t\t\tthis.leftsToolStripMenuItem.Name = \"leftsToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.leftsToolStripMenuItem, \"leftsToolStripMenuItem\");\n\t\t\tthis.leftsToolStripMenuItem.Click += new System.EventHandler(this.menuFormatAlignL_Click);\n\t\t\t// \n\t\t\t// centersToolStripMenuItem\n\t\t\t// \n\t\t\tthis.centersToolStripMenuItem.Name = \"centersToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.centersToolStripMenuItem, \"centersToolStripMenuItem\");\n\t\t\tthis.centersToolStripMenuItem.Click += new System.EventHandler(this.menuFormatAlignC_Click);\n\t\t\t// \n\t\t\t// rightsToolStripMenuItem\n\t\t\t// \n\t\t\tthis.rightsToolStripMenuItem.Name = \"rightsToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.rightsToolStripMenuItem, \"rightsToolStripMenuItem\");\n\t\t\tthis.rightsToolStripMenuItem.Click += new System.EventHandler(this.menuFormatAlignR_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator10\n\t\t\t// \n\t\t\tthis.toolStripSeparator10.Name = \"toolStripSeparator10\";\n\t\t\tresources.ApplyResources(this.toolStripSeparator10, \"toolStripSeparator10\");\n\t\t\t// \n\t\t\t// topsToolStripMenuItem\n\t\t\t// \n\t\t\tthis.topsToolStripMenuItem.Name = \"topsToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.topsToolStripMenuItem, \"topsToolStripMenuItem\");\n\t\t\tthis.topsToolStripMenuItem.Click += new System.EventHandler(this.menuFormatAlignT_Click);\n\t\t\t// \n\t\t\t// middlesToolStripMenuItem\n\t\t\t// \n\t\t\tthis.middlesToolStripMenuItem.Name = \"middlesToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.middlesToolStripMenuItem, \"middlesToolStripMenuItem\");\n\t\t\tthis.middlesToolStripMenuItem.Click += new System.EventHandler(this.menuFormatAlignM_Click);\n\t\t\t// \n\t\t\t// bottomsToolStripMenuItem\n\t\t\t// \n\t\t\tthis.bottomsToolStripMenuItem.Name = \"bottomsToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.bottomsToolStripMenuItem, \"bottomsToolStripMenuItem\");\n\t\t\tthis.bottomsToolStripMenuItem.Click += new System.EventHandler(this.menuFormatAlignB_Click);\n\t\t\t// \n\t\t\t// sizeToolStripMenuItem\n\t\t\t// \n\t\t\tthis.sizeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.widthToolStripMenuItem,\n            this.heightToolStripMenuItem,\n            this.bothToolStripMenuItem});\n\t\t\tthis.sizeToolStripMenuItem.Name = \"sizeToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.sizeToolStripMenuItem, \"sizeToolStripMenuItem\");\n\t\t\t// \n\t\t\t// widthToolStripMenuItem\n\t\t\t// \n\t\t\tthis.widthToolStripMenuItem.Name = \"widthToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.widthToolStripMenuItem, \"widthToolStripMenuItem\");\n\t\t\tthis.widthToolStripMenuItem.Click += new System.EventHandler(this.menuFormatSizeW_Click);\n\t\t\t// \n\t\t\t// heightToolStripMenuItem\n\t\t\t// \n\t\t\tthis.heightToolStripMenuItem.Name = \"heightToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.heightToolStripMenuItem, \"heightToolStripMenuItem\");\n\t\t\tthis.heightToolStripMenuItem.Click += new System.EventHandler(this.menuFormatSizeH_Click);\n\t\t\t// \n\t\t\t// bothToolStripMenuItem\n\t\t\t// \n\t\t\tthis.bothToolStripMenuItem.Name = \"bothToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.bothToolStripMenuItem, \"bothToolStripMenuItem\");\n\t\t\tthis.bothToolStripMenuItem.Click += new System.EventHandler(this.menuFormatSizeB_Click);\n\t\t\t// \n\t\t\t// horizontalSpacingToolStripMenuItem\n\t\t\t// \n\t\t\tthis.horizontalSpacingToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.makeEqualToolStripMenuItem,\n            this.increaseToolStripMenuItem,\n            this.decreaseToolStripMenuItem,\n            this.zeroToolStripMenuItem});\n\t\t\tthis.horizontalSpacingToolStripMenuItem.Name = \"horizontalSpacingToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.horizontalSpacingToolStripMenuItem, \"horizontalSpacingToolStripMenuItem\");\n\t\t\t// \n\t\t\t// makeEqualToolStripMenuItem\n\t\t\t// \n\t\t\tthis.makeEqualToolStripMenuItem.Name = \"makeEqualToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.makeEqualToolStripMenuItem, \"makeEqualToolStripMenuItem\");\n\t\t\tthis.makeEqualToolStripMenuItem.Click += new System.EventHandler(this.menuFormatHorzE_Click);\n\t\t\t// \n\t\t\t// increaseToolStripMenuItem\n\t\t\t// \n\t\t\tthis.increaseToolStripMenuItem.Name = \"increaseToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.increaseToolStripMenuItem, \"increaseToolStripMenuItem\");\n\t\t\tthis.increaseToolStripMenuItem.Click += new System.EventHandler(this.menuFormatHorzI_Click);\n\t\t\t// \n\t\t\t// decreaseToolStripMenuItem\n\t\t\t// \n\t\t\tthis.decreaseToolStripMenuItem.Name = \"decreaseToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.decreaseToolStripMenuItem, \"decreaseToolStripMenuItem\");\n\t\t\tthis.decreaseToolStripMenuItem.Click += new System.EventHandler(this.menuFormatHorzD_Click);\n\t\t\t// \n\t\t\t// zeroToolStripMenuItem\n\t\t\t// \n\t\t\tthis.zeroToolStripMenuItem.Name = \"zeroToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.zeroToolStripMenuItem, \"zeroToolStripMenuItem\");\n\t\t\tthis.zeroToolStripMenuItem.Click += new System.EventHandler(this.menuFormatHorzZ_Click);\n\t\t\t// \n\t\t\t// verticalSpacingToolStripMenuItem\n\t\t\t// \n\t\t\tthis.verticalSpacingToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.makeEqualToolStripMenuItem1,\n            this.increaseToolStripMenuItem1,\n            this.decreaseToolStripMenuItem1,\n            this.zeroToolStripMenuItem1});\n\t\t\tthis.verticalSpacingToolStripMenuItem.Name = \"verticalSpacingToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.verticalSpacingToolStripMenuItem, \"verticalSpacingToolStripMenuItem\");\n\t\t\t// \n\t\t\t// makeEqualToolStripMenuItem1\n\t\t\t// \n\t\t\tthis.makeEqualToolStripMenuItem1.Name = \"makeEqualToolStripMenuItem1\";\n\t\t\tresources.ApplyResources(this.makeEqualToolStripMenuItem1, \"makeEqualToolStripMenuItem1\");\n\t\t\tthis.makeEqualToolStripMenuItem1.Click += new System.EventHandler(this.menuFormatVertE_Click);\n\t\t\t// \n\t\t\t// increaseToolStripMenuItem1\n\t\t\t// \n\t\t\tthis.increaseToolStripMenuItem1.Name = \"increaseToolStripMenuItem1\";\n\t\t\tresources.ApplyResources(this.increaseToolStripMenuItem1, \"increaseToolStripMenuItem1\");\n\t\t\tthis.increaseToolStripMenuItem1.Click += new System.EventHandler(this.menuFormatVertI_Click);\n\t\t\t// \n\t\t\t// decreaseToolStripMenuItem1\n\t\t\t// \n\t\t\tthis.decreaseToolStripMenuItem1.Name = \"decreaseToolStripMenuItem1\";\n\t\t\tresources.ApplyResources(this.decreaseToolStripMenuItem1, \"decreaseToolStripMenuItem1\");\n\t\t\tthis.decreaseToolStripMenuItem1.Click += new System.EventHandler(this.menuFormatVertD_Click);\n\t\t\t// \n\t\t\t// zeroToolStripMenuItem1\n\t\t\t// \n\t\t\tthis.zeroToolStripMenuItem1.Name = \"zeroToolStripMenuItem1\";\n\t\t\tresources.ApplyResources(this.zeroToolStripMenuItem1, \"zeroToolStripMenuItem1\");\n\t\t\tthis.zeroToolStripMenuItem1.Click += new System.EventHandler(this.menuFormatVertZ_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator11\n\t\t\t// \n\t\t\tthis.toolStripSeparator11.Name = \"toolStripSeparator11\";\n\t\t\tresources.ApplyResources(this.toolStripSeparator11, \"toolStripSeparator11\");\n\t\t\t// \n\t\t\t// paddingLeftToolStripMenuItem\n\t\t\t// \n\t\t\tthis.paddingLeftToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.increaseToolStripMenuItem2,\n            this.decreaseToolStripMenuItem2,\n            this.zeroToolStripMenuItem2});\n\t\t\tthis.paddingLeftToolStripMenuItem.Name = \"paddingLeftToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.paddingLeftToolStripMenuItem, \"paddingLeftToolStripMenuItem\");\n\t\t\t// \n\t\t\t// increaseToolStripMenuItem2\n\t\t\t// \n\t\t\tthis.increaseToolStripMenuItem2.Name = \"increaseToolStripMenuItem2\";\n\t\t\tresources.ApplyResources(this.increaseToolStripMenuItem2, \"increaseToolStripMenuItem2\");\n\t\t\tthis.increaseToolStripMenuItem2.Click += new System.EventHandler(this.menuFormatPadding_Click);\n\t\t\t// \n\t\t\t// decreaseToolStripMenuItem2\n\t\t\t// \n\t\t\tthis.decreaseToolStripMenuItem2.Name = \"decreaseToolStripMenuItem2\";\n\t\t\tresources.ApplyResources(this.decreaseToolStripMenuItem2, \"decreaseToolStripMenuItem2\");\n\t\t\tthis.decreaseToolStripMenuItem2.Click += new System.EventHandler(this.menuFormatPadding_Click);\n\t\t\t// \n\t\t\t// zeroToolStripMenuItem2\n\t\t\t// \n\t\t\tthis.zeroToolStripMenuItem2.Name = \"zeroToolStripMenuItem2\";\n\t\t\tresources.ApplyResources(this.zeroToolStripMenuItem2, \"zeroToolStripMenuItem2\");\n\t\t\tthis.zeroToolStripMenuItem2.Click += new System.EventHandler(this.menuFormatPadding_Click);\n\t\t\t// \n\t\t\t// paddingRightToolStripMenuItem\n\t\t\t// \n\t\t\tthis.paddingRightToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.increaseToolStripMenuItem3,\n            this.decreaseToolStripMenuItem3,\n            this.zeroToolStripMenuItem3});\n\t\t\tthis.paddingRightToolStripMenuItem.Name = \"paddingRightToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.paddingRightToolStripMenuItem, \"paddingRightToolStripMenuItem\");\n\t\t\t// \n\t\t\t// increaseToolStripMenuItem3\n\t\t\t// \n\t\t\tthis.increaseToolStripMenuItem3.Name = \"increaseToolStripMenuItem3\";\n\t\t\tresources.ApplyResources(this.increaseToolStripMenuItem3, \"increaseToolStripMenuItem3\");\n\t\t\tthis.increaseToolStripMenuItem3.Click += new System.EventHandler(this.menuFormatPadding_Click);\n\t\t\t// \n\t\t\t// decreaseToolStripMenuItem3\n\t\t\t// \n\t\t\tthis.decreaseToolStripMenuItem3.Name = \"decreaseToolStripMenuItem3\";\n\t\t\tresources.ApplyResources(this.decreaseToolStripMenuItem3, \"decreaseToolStripMenuItem3\");\n\t\t\tthis.decreaseToolStripMenuItem3.Click += new System.EventHandler(this.menuFormatPadding_Click);\n\t\t\t// \n\t\t\t// zeroToolStripMenuItem3\n\t\t\t// \n\t\t\tthis.zeroToolStripMenuItem3.Name = \"zeroToolStripMenuItem3\";\n\t\t\tresources.ApplyResources(this.zeroToolStripMenuItem3, \"zeroToolStripMenuItem3\");\n\t\t\tthis.zeroToolStripMenuItem3.Click += new System.EventHandler(this.menuFormatPadding_Click);\n\t\t\t// \n\t\t\t// paddintTopToolStripMenuItem\n\t\t\t// \n\t\t\tthis.paddintTopToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.increaseToolStripMenuItem4,\n            this.decreaseToolStripMenuItem4,\n            this.zeroToolStripMenuItem4});\n\t\t\tthis.paddintTopToolStripMenuItem.Name = \"paddintTopToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.paddintTopToolStripMenuItem, \"paddintTopToolStripMenuItem\");\n\t\t\t// \n\t\t\t// increaseToolStripMenuItem4\n\t\t\t// \n\t\t\tthis.increaseToolStripMenuItem4.Name = \"increaseToolStripMenuItem4\";\n\t\t\tresources.ApplyResources(this.increaseToolStripMenuItem4, \"increaseToolStripMenuItem4\");\n\t\t\tthis.increaseToolStripMenuItem4.Click += new System.EventHandler(this.menuFormatPadding_Click);\n\t\t\t// \n\t\t\t// decreaseToolStripMenuItem4\n\t\t\t// \n\t\t\tthis.decreaseToolStripMenuItem4.Name = \"decreaseToolStripMenuItem4\";\n\t\t\tresources.ApplyResources(this.decreaseToolStripMenuItem4, \"decreaseToolStripMenuItem4\");\n\t\t\tthis.decreaseToolStripMenuItem4.Click += new System.EventHandler(this.menuFormatPadding_Click);\n\t\t\t// \n\t\t\t// zeroToolStripMenuItem4\n\t\t\t// \n\t\t\tthis.zeroToolStripMenuItem4.Name = \"zeroToolStripMenuItem4\";\n\t\t\tresources.ApplyResources(this.zeroToolStripMenuItem4, \"zeroToolStripMenuItem4\");\n\t\t\tthis.zeroToolStripMenuItem4.Click += new System.EventHandler(this.menuFormatPadding_Click);\n\t\t\t// \n\t\t\t// paddingBottomToolStripMenuItem\n\t\t\t// \n\t\t\tthis.paddingBottomToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.increaseToolStripMenuItem5,\n            this.decreaseToolStripMenuItem5,\n            this.zeroToolStripMenuItem5});\n\t\t\tthis.paddingBottomToolStripMenuItem.Name = \"paddingBottomToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.paddingBottomToolStripMenuItem, \"paddingBottomToolStripMenuItem\");\n\t\t\t// \n\t\t\t// increaseToolStripMenuItem5\n\t\t\t// \n\t\t\tthis.increaseToolStripMenuItem5.Name = \"increaseToolStripMenuItem5\";\n\t\t\tresources.ApplyResources(this.increaseToolStripMenuItem5, \"increaseToolStripMenuItem5\");\n\t\t\tthis.increaseToolStripMenuItem5.Click += new System.EventHandler(this.menuFormatPadding_Click);\n\t\t\t// \n\t\t\t// decreaseToolStripMenuItem5\n\t\t\t// \n\t\t\tthis.decreaseToolStripMenuItem5.Name = \"decreaseToolStripMenuItem5\";\n\t\t\tresources.ApplyResources(this.decreaseToolStripMenuItem5, \"decreaseToolStripMenuItem5\");\n\t\t\tthis.decreaseToolStripMenuItem5.Click += new System.EventHandler(this.menuFormatPadding_Click);\n\t\t\t// \n\t\t\t// zeroToolStripMenuItem5\n\t\t\t// \n\t\t\tthis.zeroToolStripMenuItem5.Name = \"zeroToolStripMenuItem5\";\n\t\t\tresources.ApplyResources(this.zeroToolStripMenuItem5, \"zeroToolStripMenuItem5\");\n\t\t\tthis.zeroToolStripMenuItem5.Click += new System.EventHandler(this.menuFormatPadding_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem1\n\t\t\t// \n\t\t\tthis.toolStripMenuItem1.Name = \"toolStripMenuItem1\";\n\t\t\tresources.ApplyResources(this.toolStripMenuItem1, \"toolStripMenuItem1\");\n\t\t\t// \n\t\t\t// centerInContainerToolStripMenuItem\n\t\t\t// \n\t\t\tthis.centerInContainerToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.centerHorizontallyToolStripMenuItem,\n            this.centerVerticallyToolStripMenuItem,\n            this.centerBothToolStripMenuItem});\n\t\t\tthis.centerInContainerToolStripMenuItem.Name = \"centerInContainerToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.centerInContainerToolStripMenuItem, \"centerInContainerToolStripMenuItem\");\n\t\t\t// \n\t\t\t// centerHorizontallyToolStripMenuItem\n\t\t\t// \n\t\t\tthis.centerHorizontallyToolStripMenuItem.Name = \"centerHorizontallyToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.centerHorizontallyToolStripMenuItem, \"centerHorizontallyToolStripMenuItem\");\n\t\t\tthis.centerHorizontallyToolStripMenuItem.Click += new System.EventHandler(this.CenterHorizontallyToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// centerVerticallyToolStripMenuItem\n\t\t\t// \n\t\t\tthis.centerVerticallyToolStripMenuItem.Name = \"centerVerticallyToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.centerVerticallyToolStripMenuItem, \"centerVerticallyToolStripMenuItem\");\n\t\t\tthis.centerVerticallyToolStripMenuItem.Click += new System.EventHandler(this.CenterVerticallyToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// centerBothToolStripMenuItem\n\t\t\t// \n\t\t\tthis.centerBothToolStripMenuItem.Name = \"centerBothToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.centerBothToolStripMenuItem, \"centerBothToolStripMenuItem\");\n\t\t\tthis.centerBothToolStripMenuItem.Click += new System.EventHandler(this.CenterBothToolStripMenu_Click);\n\t\t\t// \n\t\t\t// toolsToolStripMenuItem\n\t\t\t// \n\t\t\tthis.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.validateRDLToolStripMenuItem,\n            this.toolStripSeparator12,\n            this.startDesktopServerToolStripMenuItem,\n            this.toolStripSeparator13,\n            this.optionsToolStripMenuItem});\n\t\t\tthis.toolsToolStripMenuItem.Name = \"toolsToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.toolsToolStripMenuItem, \"toolsToolStripMenuItem\");\n\t\t\tthis.toolsToolStripMenuItem.DropDownOpening += new System.EventHandler(this.menuTools_Popup);\n\t\t\t// \n\t\t\t// validateRDLToolStripMenuItem\n\t\t\t// \n\t\t\tthis.validateRDLToolStripMenuItem.Name = \"validateRDLToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.validateRDLToolStripMenuItem, \"validateRDLToolStripMenuItem\");\n\t\t\tthis.validateRDLToolStripMenuItem.Click += new System.EventHandler(this.menuToolsValidateSchema_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator12\n\t\t\t// \n\t\t\tthis.toolStripSeparator12.Name = \"toolStripSeparator12\";\n\t\t\tresources.ApplyResources(this.toolStripSeparator12, \"toolStripSeparator12\");\n\t\t\t// \n\t\t\t// startDesktopServerToolStripMenuItem\n\t\t\t// \n\t\t\tthis.startDesktopServerToolStripMenuItem.Name = \"startDesktopServerToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.startDesktopServerToolStripMenuItem, \"startDesktopServerToolStripMenuItem\");\n\t\t\tthis.startDesktopServerToolStripMenuItem.Click += new System.EventHandler(this.menuToolsProcess_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator13\n\t\t\t// \n\t\t\tthis.toolStripSeparator13.Name = \"toolStripSeparator13\";\n\t\t\tresources.ApplyResources(this.toolStripSeparator13, \"toolStripSeparator13\");\n\t\t\t// \n\t\t\t// optionsToolStripMenuItem\n\t\t\t// \n\t\t\tthis.optionsToolStripMenuItem.Name = \"optionsToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.optionsToolStripMenuItem, \"optionsToolStripMenuItem\");\n\t\t\tthis.optionsToolStripMenuItem.Click += new System.EventHandler(this.menuToolsOptions_Click);\n\t\t\t// \n\t\t\t// windowToolStripMenuItem\n\t\t\t// \n\t\t\tthis.windowToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.cascadeToolStripMenuItem,\n            this.tileToolStripMenuItem,\n            this.closeAllToolStripMenuItem});\n\t\t\tthis.windowToolStripMenuItem.Name = \"windowToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.windowToolStripMenuItem, \"windowToolStripMenuItem\");\n\t\t\tthis.windowToolStripMenuItem.DropDownOpening += new System.EventHandler(this.menuWnd_Popup);\n\t\t\t// \n\t\t\t// cascadeToolStripMenuItem\n\t\t\t// \n\t\t\tthis.cascadeToolStripMenuItem.Name = \"cascadeToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.cascadeToolStripMenuItem, \"cascadeToolStripMenuItem\");\n\t\t\tthis.cascadeToolStripMenuItem.Click += new System.EventHandler(this.menuWndCascade_Click);\n\t\t\t// \n\t\t\t// tileToolStripMenuItem\n\t\t\t// \n\t\t\tthis.tileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.horizontalToolStripMenuItem,\n            this.verticallyToolStripMenuItem});\n\t\t\tthis.tileToolStripMenuItem.Name = \"tileToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.tileToolStripMenuItem, \"tileToolStripMenuItem\");\n\t\t\t// \n\t\t\t// horizontalToolStripMenuItem\n\t\t\t// \n\t\t\tthis.horizontalToolStripMenuItem.Name = \"horizontalToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.horizontalToolStripMenuItem, \"horizontalToolStripMenuItem\");\n\t\t\tthis.horizontalToolStripMenuItem.Click += new System.EventHandler(this.menuWndTileH_Click);\n\t\t\t// \n\t\t\t// verticallyToolStripMenuItem\n\t\t\t// \n\t\t\tthis.verticallyToolStripMenuItem.Name = \"verticallyToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.verticallyToolStripMenuItem, \"verticallyToolStripMenuItem\");\n\t\t\tthis.verticallyToolStripMenuItem.Click += new System.EventHandler(this.menuWndTileV_Click);\n\t\t\t// \n\t\t\t// closeAllToolStripMenuItem\n\t\t\t// \n\t\t\tthis.closeAllToolStripMenuItem.Name = \"closeAllToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.closeAllToolStripMenuItem, \"closeAllToolStripMenuItem\");\n\t\t\tthis.closeAllToolStripMenuItem.Click += new System.EventHandler(this.menuWndCloseAll_Click);\n\t\t\t// \n\t\t\t// helpToolStripMenuItem\n\t\t\t// \n\t\t\tthis.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.helpToolStripMenuItem1,\n            this.supportToolStripMenuItem,\n            this.aboutToolStripMenuItem});\n\t\t\tthis.helpToolStripMenuItem.Name = \"helpToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.helpToolStripMenuItem, \"helpToolStripMenuItem\");\n\t\t\t// \n\t\t\t// helpToolStripMenuItem1\n\t\t\t// \n\t\t\tthis.helpToolStripMenuItem1.Name = \"helpToolStripMenuItem1\";\n\t\t\tresources.ApplyResources(this.helpToolStripMenuItem1, \"helpToolStripMenuItem1\");\n\t\t\tthis.helpToolStripMenuItem1.Click += new System.EventHandler(this.menuHelpHelp_Click);\n\t\t\t// \n\t\t\t// supportToolStripMenuItem\n\t\t\t// \n\t\t\tthis.supportToolStripMenuItem.Name = \"supportToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.supportToolStripMenuItem, \"supportToolStripMenuItem\");\n\t\t\tthis.supportToolStripMenuItem.Click += new System.EventHandler(this.menuHelpSupport_Click);\n\t\t\t// \n\t\t\t// aboutToolStripMenuItem\n\t\t\t// \n\t\t\tthis.aboutToolStripMenuItem.Name = \"aboutToolStripMenuItem\";\n\t\t\tresources.ApplyResources(this.aboutToolStripMenuItem, \"aboutToolStripMenuItem\");\n\t\t\tthis.aboutToolStripMenuItem.Click += new System.EventHandler(this.menuHelpAbout_Click);\n\t\t\t// \n\t\t\t// mainTB\n\t\t\t// \n\t\t\tthis.mainTB.ImageScalingSize = new System.Drawing.Size(20, 20);\n\t\t\tthis.mainTB.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.newToolStripButton1,\n            this.openToolStripButton1,\n            this.saveToolStripButton1,\n            this.cutToolStripButton1,\n            this.copyToolStripButton1,\n            this.pasteToolStripButton1,\n            this.undoToolStripButton1,\n            this.textboxToolStripButton1,\n            this.chartToolStripButton1,\n            this.tableToolStripButton1,\n            this.listToolStripButton1,\n            this.imageToolStripButton1,\n            this.matrixToolStripButton1,\n            this.subreportToolStripButton1,\n            this.rectangleToolStripButton1,\n            this.lineToolStripButton1,\n            this.fxToolStripLabel1,\n            this.ctlEditTextbox,\n            this.zoomControl});\n\t\t\tresources.ApplyResources(this.mainTB, \"mainTB\");\n\t\t\tthis.mainTB.Name = \"mainTB\";\n\t\t\t// \n\t\t\t// newToolStripButton1\n\t\t\t// \n\t\t\tthis.newToolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.newToolStripButton1, \"newToolStripButton1\");\n\t\t\tthis.newToolStripButton1.Name = \"newToolStripButton1\";\n\t\t\tthis.newToolStripButton1.Tag = \"New\";\n\t\t\tthis.newToolStripButton1.Click += new System.EventHandler(this.menuFileNewReport_Click);\n\t\t\t// \n\t\t\t// openToolStripButton1\n\t\t\t// \n\t\t\tthis.openToolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.openToolStripButton1, \"openToolStripButton1\");\n\t\t\tthis.openToolStripButton1.Name = \"openToolStripButton1\";\n\t\t\tthis.openToolStripButton1.Tag = \"Open\";\n\t\t\tthis.openToolStripButton1.Click += new System.EventHandler(this.menuFileOpen_Click);\n\t\t\t// \n\t\t\t// saveToolStripButton1\n\t\t\t// \n\t\t\tthis.saveToolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.saveToolStripButton1, \"saveToolStripButton1\");\n\t\t\tthis.saveToolStripButton1.Name = \"saveToolStripButton1\";\n\t\t\tthis.saveToolStripButton1.Tag = \"Save\";\n\t\t\tthis.saveToolStripButton1.Click += new System.EventHandler(this.menuFileSave_Click);\n\t\t\t// \n\t\t\t// cutToolStripButton1\n\t\t\t// \n\t\t\tthis.cutToolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.cutToolStripButton1, \"cutToolStripButton1\");\n\t\t\tthis.cutToolStripButton1.Name = \"cutToolStripButton1\";\n\t\t\tthis.cutToolStripButton1.Tag = \"Cut\";\n\t\t\tthis.cutToolStripButton1.Click += new System.EventHandler(this.menuEditCut_Click);\n\t\t\t// \n\t\t\t// copyToolStripButton1\n\t\t\t// \n\t\t\tthis.copyToolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.copyToolStripButton1, \"copyToolStripButton1\");\n\t\t\tthis.copyToolStripButton1.Name = \"copyToolStripButton1\";\n\t\t\tthis.copyToolStripButton1.Tag = \"Copy\";\n\t\t\tthis.copyToolStripButton1.Click += new System.EventHandler(this.menuEditCopy_Click);\n\t\t\t// \n\t\t\t// pasteToolStripButton1\n\t\t\t// \n\t\t\tthis.pasteToolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.pasteToolStripButton1, \"pasteToolStripButton1\");\n\t\t\tthis.pasteToolStripButton1.Name = \"pasteToolStripButton1\";\n\t\t\tthis.pasteToolStripButton1.Tag = \"Paste\";\n\t\t\tthis.pasteToolStripButton1.Click += new System.EventHandler(this.menuEditPaste_Click);\n\t\t\t// \n\t\t\t// undoToolStripButton1\n\t\t\t// \n\t\t\tthis.undoToolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.undoToolStripButton1, \"undoToolStripButton1\");\n\t\t\tthis.undoToolStripButton1.Name = \"undoToolStripButton1\";\n\t\t\tthis.undoToolStripButton1.Tag = \"Undo\";\n\t\t\tthis.undoToolStripButton1.Click += new System.EventHandler(this.menuEditUndo_Click);\n\t\t\t// \n\t\t\t// textboxToolStripButton1\n\t\t\t// \n\t\t\tthis.textboxToolStripButton1.CheckOnClick = true;\n\t\t\tresources.ApplyResources(this.textboxToolStripButton1, \"textboxToolStripButton1\");\n\t\t\tthis.textboxToolStripButton1.Name = \"textboxToolStripButton1\";\n\t\t\tthis.textboxToolStripButton1.Tag = \"Textbox\";\n\t\t\tthis.textboxToolStripButton1.Click += new System.EventHandler(this.Insert_Click);\n\t\t\t// \n\t\t\t// chartToolStripButton1\n\t\t\t// \n\t\t\tthis.chartToolStripButton1.CheckOnClick = true;\n\t\t\tresources.ApplyResources(this.chartToolStripButton1, \"chartToolStripButton1\");\n\t\t\tthis.chartToolStripButton1.Name = \"chartToolStripButton1\";\n\t\t\tthis.chartToolStripButton1.Tag = \"Chart\";\n\t\t\tthis.chartToolStripButton1.Click += new System.EventHandler(this.Insert_Click);\n\t\t\t// \n\t\t\t// tableToolStripButton1\n\t\t\t// \n\t\t\tthis.tableToolStripButton1.CheckOnClick = true;\n\t\t\tresources.ApplyResources(this.tableToolStripButton1, \"tableToolStripButton1\");\n\t\t\tthis.tableToolStripButton1.Name = \"tableToolStripButton1\";\n\t\t\tthis.tableToolStripButton1.Tag = \"Table\";\n\t\t\tthis.tableToolStripButton1.Click += new System.EventHandler(this.Insert_Click);\n\t\t\t// \n\t\t\t// listToolStripButton1\n\t\t\t// \n\t\t\tthis.listToolStripButton1.CheckOnClick = true;\n\t\t\tresources.ApplyResources(this.listToolStripButton1, \"listToolStripButton1\");\n\t\t\tthis.listToolStripButton1.Name = \"listToolStripButton1\";\n\t\t\tthis.listToolStripButton1.Tag = \"List\";\n\t\t\tthis.listToolStripButton1.Click += new System.EventHandler(this.Insert_Click);\n\t\t\t// \n\t\t\t// imageToolStripButton1\n\t\t\t// \n\t\t\tthis.imageToolStripButton1.CheckOnClick = true;\n\t\t\tresources.ApplyResources(this.imageToolStripButton1, \"imageToolStripButton1\");\n\t\t\tthis.imageToolStripButton1.Name = \"imageToolStripButton1\";\n\t\t\tthis.imageToolStripButton1.Tag = \"Image\";\n\t\t\tthis.imageToolStripButton1.Click += new System.EventHandler(this.Insert_Click);\n\t\t\t// \n\t\t\t// matrixToolStripButton1\n\t\t\t// \n\t\t\tthis.matrixToolStripButton1.CheckOnClick = true;\n\t\t\tresources.ApplyResources(this.matrixToolStripButton1, \"matrixToolStripButton1\");\n\t\t\tthis.matrixToolStripButton1.Name = \"matrixToolStripButton1\";\n\t\t\tthis.matrixToolStripButton1.Tag = \"Matrix\";\n\t\t\tthis.matrixToolStripButton1.Click += new System.EventHandler(this.Insert_Click);\n\t\t\t// \n\t\t\t// subreportToolStripButton1\n\t\t\t// \n\t\t\tthis.subreportToolStripButton1.CheckOnClick = true;\n\t\t\tresources.ApplyResources(this.subreportToolStripButton1, \"subreportToolStripButton1\");\n\t\t\tthis.subreportToolStripButton1.Name = \"subreportToolStripButton1\";\n\t\t\tthis.subreportToolStripButton1.Tag = \"Subreport\";\n\t\t\tthis.subreportToolStripButton1.Click += new System.EventHandler(this.Insert_Click);\n\t\t\t// \n\t\t\t// rectangleToolStripButton1\n\t\t\t// \n\t\t\tthis.rectangleToolStripButton1.CheckOnClick = true;\n\t\t\tresources.ApplyResources(this.rectangleToolStripButton1, \"rectangleToolStripButton1\");\n\t\t\tthis.rectangleToolStripButton1.Name = \"rectangleToolStripButton1\";\n\t\t\tthis.rectangleToolStripButton1.Tag = \"Rectangle\";\n\t\t\tthis.rectangleToolStripButton1.Click += new System.EventHandler(this.Insert_Click);\n\t\t\t// \n\t\t\t// lineToolStripButton1\n\t\t\t// \n\t\t\tthis.lineToolStripButton1.CheckOnClick = true;\n\t\t\tresources.ApplyResources(this.lineToolStripButton1, \"lineToolStripButton1\");\n\t\t\tthis.lineToolStripButton1.Name = \"lineToolStripButton1\";\n\t\t\tthis.lineToolStripButton1.Tag = \"Line\";\n\t\t\tthis.lineToolStripButton1.Click += new System.EventHandler(this.Insert_Click);\n\t\t\t// \n\t\t\t// fxToolStripLabel1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.fxToolStripLabel1, \"fxToolStripLabel1\");\n\t\t\tthis.fxToolStripLabel1.Name = \"fxToolStripLabel1\";\n\t\t\tthis.fxToolStripLabel1.Tag = \"fx\";\n\t\t\tthis.fxToolStripLabel1.Click += new System.EventHandler(this.fxExpr_Click);\n\t\t\tthis.fxToolStripLabel1.MouseEnter += new System.EventHandler(this.fxExpr_MouseEnter);\n\t\t\tthis.fxToolStripLabel1.MouseLeave += new System.EventHandler(this.fxExpr_MouseLeave);\n\t\t\t// \n\t\t\t// ctlEditTextbox\n\t\t\t// \n\t\t\tthis.ctlEditTextbox.Name = \"ctlEditTextbox\";\n\t\t\tresources.ApplyResources(this.ctlEditTextbox, \"ctlEditTextbox\");\n\t\t\tthis.ctlEditTextbox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.EditTextBox_KeyDown);\n\t\t\tthis.ctlEditTextbox.Validated += new System.EventHandler(this.EditTextbox_Validated);\n\t\t\t// \n\t\t\t// zoomControl\n\t\t\t// \n\t\t\tthis.zoomControl.BackColor = System.Drawing.Color.White;\n\t\t\tresources.ApplyResources(this.zoomControl, \"zoomControl\");\n\t\t\tthis.zoomControl.Name = \"zoomControl\";\n\t\t\tthis.zoomControl.ZoomChanged += new System.EventHandler<Majorsilence.Reporting.RdlDesign.UserZoomControl.CambiaValori>(this.ZoomControl1_ValueChanged);\n\t\t\t// \n\t\t\t// toolStrip1\n\t\t\t// \n\t\t\tthis.toolStrip1.ImageScalingSize = new System.Drawing.Size(20, 20);\n\t\t\tthis.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.boldToolStripButton1,\n            this.italiacToolStripButton1,\n            this.underlineToolStripButton2,\n            this.leftAlignToolStripButton2,\n            this.centerAlignToolStripButton2,\n            this.rightAlignToolStripButton3,\n            this.fontToolStripComboBox1,\n            this.fontSizeToolStripComboBox1,\n            this.printToolStripButton2,\n            this.zoomToolStripComboBox1,\n            this.selectToolStripButton2,\n            this.pdfToolStripButton2,\n            this.htmlToolStripButton2,\n            this.excelToolStripButton2,\n            this.XmlToolStripButton2,\n            this.MhtToolStripButton2,\n            this.CsvToolStripButton2,\n            this.RtfToolStripButton2,\n            this.TifToolStripButton2,\n            this.toolStripSeparator14,\n            this.AlignmentGridEnable});\n\t\t\tresources.ApplyResources(this.toolStrip1, \"toolStrip1\");\n\t\t\tthis.toolStrip1.Name = \"toolStrip1\";\n\t\t\t// \n\t\t\t// boldToolStripButton1\n\t\t\t// \n\t\t\tthis.boldToolStripButton1.CheckOnClick = true;\n\t\t\tthis.boldToolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.boldToolStripButton1, \"boldToolStripButton1\");\n\t\t\tthis.boldToolStripButton1.Name = \"boldToolStripButton1\";\n\t\t\tthis.boldToolStripButton1.Tag = \"bold\";\n\t\t\t// \n\t\t\t// italiacToolStripButton1\n\t\t\t// \n\t\t\tthis.italiacToolStripButton1.CheckOnClick = true;\n\t\t\tthis.italiacToolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.italiacToolStripButton1, \"italiacToolStripButton1\");\n\t\t\tthis.italiacToolStripButton1.Name = \"italiacToolStripButton1\";\n\t\t\tthis.italiacToolStripButton1.Tag = \"italic\";\n\t\t\tthis.italiacToolStripButton1.Click += new System.EventHandler(this.ctlItalic_Click);\n\t\t\t// \n\t\t\t// underlineToolStripButton2\n\t\t\t// \n\t\t\tthis.underlineToolStripButton2.CheckOnClick = true;\n\t\t\tthis.underlineToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.underlineToolStripButton2, \"underlineToolStripButton2\");\n\t\t\tthis.underlineToolStripButton2.Name = \"underlineToolStripButton2\";\n\t\t\tthis.underlineToolStripButton2.Tag = \"underline\";\n\t\t\tthis.underlineToolStripButton2.Click += new System.EventHandler(this.ctlUnderline_Click);\n\t\t\t// \n\t\t\t// leftAlignToolStripButton2\n\t\t\t// \n\t\t\tthis.leftAlignToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.leftAlignToolStripButton2, \"leftAlignToolStripButton2\");\n\t\t\tthis.leftAlignToolStripButton2.Name = \"leftAlignToolStripButton2\";\n\t\t\tthis.leftAlignToolStripButton2.Tag = \"Left Align\";\n\t\t\tthis.leftAlignToolStripButton2.Click += new System.EventHandler(this.bottomsToolStripMenuItemutton_Click);\n\t\t\t// \n\t\t\t// centerAlignToolStripButton2\n\t\t\t// \n\t\t\tthis.centerAlignToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.centerAlignToolStripButton2, \"centerAlignToolStripButton2\");\n\t\t\tthis.centerAlignToolStripButton2.Name = \"centerAlignToolStripButton2\";\n\t\t\tthis.centerAlignToolStripButton2.Tag = \"Center Align\";\n\t\t\tthis.centerAlignToolStripButton2.Click += new System.EventHandler(this.bottomsToolStripMenuItemutton_Click);\n\t\t\t// \n\t\t\t// rightAlignToolStripButton3\n\t\t\t// \n\t\t\tthis.rightAlignToolStripButton3.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.rightAlignToolStripButton3, \"rightAlignToolStripButton3\");\n\t\t\tthis.rightAlignToolStripButton3.Name = \"rightAlignToolStripButton3\";\n\t\t\tthis.rightAlignToolStripButton3.Tag = \"Right Align\";\n\t\t\tthis.rightAlignToolStripButton3.Click += new System.EventHandler(this.bottomsToolStripMenuItemutton_Click);\n\t\t\t// \n\t\t\t// fontToolStripComboBox1\n\t\t\t// \n\t\t\tthis.fontToolStripComboBox1.Name = \"fontToolStripComboBox1\";\n\t\t\tresources.ApplyResources(this.fontToolStripComboBox1, \"fontToolStripComboBox1\");\n\t\t\tthis.fontToolStripComboBox1.Tag = \"Font\";\n\t\t\tthis.fontToolStripComboBox1.SelectedIndexChanged += new System.EventHandler(this.ctlFont_Change);\n\t\t\tthis.fontToolStripComboBox1.Validated += new System.EventHandler(this.ctlFont_Change);\n\t\t\t// \n\t\t\t// fontSizeToolStripComboBox1\n\t\t\t// \n\t\t\tthis.fontSizeToolStripComboBox1.Name = \"fontSizeToolStripComboBox1\";\n\t\t\tresources.ApplyResources(this.fontSizeToolStripComboBox1, \"fontSizeToolStripComboBox1\");\n\t\t\tthis.fontSizeToolStripComboBox1.Tag = \"Font Size\";\n\t\t\tthis.fontSizeToolStripComboBox1.SelectedIndexChanged += new System.EventHandler(this.ctlFontSize_Change);\n\t\t\tthis.fontSizeToolStripComboBox1.Validated += new System.EventHandler(this.ctlFontSize_Change);\n\t\t\t// \n\t\t\t// printToolStripButton2\n\t\t\t// \n\t\t\tthis.printToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.printToolStripButton2, \"printToolStripButton2\");\n\t\t\tthis.printToolStripButton2.Name = \"printToolStripButton2\";\n\t\t\tthis.printToolStripButton2.Tag = \"Print\";\n\t\t\tthis.printToolStripButton2.Click += new System.EventHandler(this.menuFilePrint_Click);\n\t\t\t// \n\t\t\t// zoomToolStripComboBox1\n\t\t\t// \n\t\t\tthis.zoomToolStripComboBox1.Name = \"zoomToolStripComboBox1\";\n\t\t\tresources.ApplyResources(this.zoomToolStripComboBox1, \"zoomToolStripComboBox1\");\n\t\t\tthis.zoomToolStripComboBox1.Tag = \"Zoom\";\n\t\t\tthis.zoomToolStripComboBox1.SelectedIndexChanged += new System.EventHandler(this.ctlZoom_Change);\n\t\t\tthis.zoomToolStripComboBox1.Validated += new System.EventHandler(this.ctlZoom_Change);\n\t\t\t// \n\t\t\t// selectToolStripButton2\n\t\t\t// \n\t\t\tthis.selectToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.selectToolStripButton2, \"selectToolStripButton2\");\n\t\t\tthis.selectToolStripButton2.Name = \"selectToolStripButton2\";\n\t\t\tthis.selectToolStripButton2.Tag = \"Select Tool\";\n\t\t\tthis.selectToolStripButton2.Click += new System.EventHandler(this.ctlSelectTool_Click);\n\t\t\t// \n\t\t\t// pdfToolStripButton2\n\t\t\t// \n\t\t\tthis.pdfToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.pdfToolStripButton2, \"pdfToolStripButton2\");\n\t\t\tthis.pdfToolStripButton2.Name = \"pdfToolStripButton2\";\n\t\t\tthis.pdfToolStripButton2.Tag = \"PDF\";\n\t\t\tthis.pdfToolStripButton2.Click += new System.EventHandler(this.exportToolStripMenuItemPdf_Click);\n\t\t\t// \n\t\t\t// htmlToolStripButton2\n\t\t\t// \n\t\t\tthis.htmlToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.htmlToolStripButton2, \"htmlToolStripButton2\");\n\t\t\tthis.htmlToolStripButton2.Name = \"htmlToolStripButton2\";\n\t\t\tthis.htmlToolStripButton2.Tag = \"HTML\";\n\t\t\tthis.htmlToolStripButton2.Click += new System.EventHandler(this.exportToolStripMenuItemHtml_Click);\n\t\t\t// \n\t\t\t// excelToolStripButton2\n\t\t\t// \n\t\t\tthis.excelToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.excelToolStripButton2, \"excelToolStripButton2\");\n\t\t\tthis.excelToolStripButton2.Name = \"excelToolStripButton2\";\n\t\t\tthis.excelToolStripButton2.Tag = \"Excel\";\n\t\t\tthis.excelToolStripButton2.Click += new System.EventHandler(this.exportToolStripMenuItemExcel_Click);\n\t\t\t// \n\t\t\t// XmlToolStripButton2\n\t\t\t// \n\t\t\tthis.XmlToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.XmlToolStripButton2, \"XmlToolStripButton2\");\n\t\t\tthis.XmlToolStripButton2.Name = \"XmlToolStripButton2\";\n\t\t\tthis.XmlToolStripButton2.Tag = \"XML\";\n\t\t\tthis.XmlToolStripButton2.Click += new System.EventHandler(this.exportToolStripMenuItemXml_Click);\n\t\t\t// \n\t\t\t// MhtToolStripButton2\n\t\t\t// \n\t\t\tthis.MhtToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.MhtToolStripButton2, \"MhtToolStripButton2\");\n\t\t\tthis.MhtToolStripButton2.Name = \"MhtToolStripButton2\";\n\t\t\tthis.MhtToolStripButton2.Tag = \"MHT\";\n\t\t\tthis.MhtToolStripButton2.Click += new System.EventHandler(this.exportToolStripMenuItemMHtml_Click);\n\t\t\t// \n\t\t\t// CsvToolStripButton2\n\t\t\t// \n\t\t\tthis.CsvToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.CsvToolStripButton2, \"CsvToolStripButton2\");\n\t\t\tthis.CsvToolStripButton2.Name = \"CsvToolStripButton2\";\n\t\t\tthis.CsvToolStripButton2.Tag = \"CSV\";\n\t\t\tthis.CsvToolStripButton2.Click += new System.EventHandler(this.exportToolStripMenuItemCsv_Click);\n\t\t\t// \n\t\t\t// RtfToolStripButton2\n\t\t\t// \n\t\t\tthis.RtfToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.RtfToolStripButton2, \"RtfToolStripButton2\");\n\t\t\tthis.RtfToolStripButton2.Name = \"RtfToolStripButton2\";\n\t\t\tthis.RtfToolStripButton2.Tag = \"RTF\";\n\t\t\tthis.RtfToolStripButton2.Click += new System.EventHandler(this.exportToolStripMenuItemRtf_Click);\n\t\t\t// \n\t\t\t// TifToolStripButton2\n\t\t\t// \n\t\t\tthis.TifToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.TifToolStripButton2, \"TifToolStripButton2\");\n\t\t\tthis.TifToolStripButton2.Name = \"TifToolStripButton2\";\n\t\t\tthis.TifToolStripButton2.Tag = \"TIF\";\n\t\t\tthis.TifToolStripButton2.Click += new System.EventHandler(this.exportToolStripMenuItemTif_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator14\n\t\t\t// \n\t\t\tthis.toolStripSeparator14.Name = \"toolStripSeparator14\";\n\t\t\tresources.ApplyResources(this.toolStripSeparator14, \"toolStripSeparator14\");\n\t\t\t// \n\t\t\t// AlignmentGridEnable\n\t\t\t// \n\t\t\tthis.AlignmentGridEnable.CheckOnClick = true;\n\t\t\tthis.AlignmentGridEnable.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;\n\t\t\tresources.ApplyResources(this.AlignmentGridEnable, \"AlignmentGridEnable\");\n\t\t\tthis.AlignmentGridEnable.Name = \"AlignmentGridEnable\";\n\t\t\tthis.AlignmentGridEnable.CheckStateChanged += new System.EventHandler(this.AlignmentGridEnable_CheckStateChanged);\n\t\t\t// \n\t\t\t// mainTC\n\t\t\t// \n\t\t\tresources.ApplyResources(this.mainTC, \"mainTC\");\n\t\t\tthis.mainTC.Name = \"mainTC\";\n\t\t\tthis.mainTC.SelectedIndex = 0;\n\t\t\tthis.mainTC.SelectedIndexChanged += new System.EventHandler(this.mainTC_SelectedIndexChanged);\n\t\t\tthis.mainTC.MouseClick += new System.Windows.Forms.MouseEventHandler(this.mainTC_MouseClick);\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// panel1\n\t\t\t// \n\t\t\tthis.panel1.Controls.Add(this.label1);\n\t\t\tthis.panel1.Controls.Add(this.label2);\n\t\t\tthis.panel1.Controls.Add(this.foreColorPicker1);\n\t\t\tthis.panel1.Controls.Add(this.backColorPicker1);\n\t\t\tthis.panel1.Controls.Add(this.mainTC);\n\t\t\tresources.ApplyResources(this.panel1, \"panel1\");\n\t\t\tthis.panel1.Name = \"panel1\";\n\t\t\t// \n\t\t\t// foreColorPicker1\n\t\t\t// \n\t\t\tthis.foreColorPicker1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;\n\t\t\tthis.foreColorPicker1.DropDownHeight = 1;\n\t\t\tthis.foreColorPicker1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tresources.ApplyResources(this.foreColorPicker1, \"foreColorPicker1\");\n\t\t\tthis.foreColorPicker1.FormattingEnabled = true;\n\t\t\tthis.foreColorPicker1.Items.AddRange(new object[] {\n            resources.GetString(\"foreColorPicker1.Items\"),\n            resources.GetString(\"foreColorPicker1.Items1\"),\n            resources.GetString(\"foreColorPicker1.Items2\"),\n            resources.GetString(\"foreColorPicker1.Items3\"),\n            resources.GetString(\"foreColorPicker1.Items4\"),\n            resources.GetString(\"foreColorPicker1.Items5\"),\n            resources.GetString(\"foreColorPicker1.Items6\"),\n            resources.GetString(\"foreColorPicker1.Items7\"),\n            resources.GetString(\"foreColorPicker1.Items8\"),\n            resources.GetString(\"foreColorPicker1.Items9\"),\n            resources.GetString(\"foreColorPicker1.Items10\"),\n            resources.GetString(\"foreColorPicker1.Items11\"),\n            resources.GetString(\"foreColorPicker1.Items12\"),\n            resources.GetString(\"foreColorPicker1.Items13\"),\n            resources.GetString(\"foreColorPicker1.Items14\"),\n            resources.GetString(\"foreColorPicker1.Items15\"),\n            resources.GetString(\"foreColorPicker1.Items16\"),\n            resources.GetString(\"foreColorPicker1.Items17\"),\n            resources.GetString(\"foreColorPicker1.Items18\"),\n            resources.GetString(\"foreColorPicker1.Items19\"),\n            resources.GetString(\"foreColorPicker1.Items20\"),\n            resources.GetString(\"foreColorPicker1.Items21\"),\n            resources.GetString(\"foreColorPicker1.Items22\"),\n            resources.GetString(\"foreColorPicker1.Items23\"),\n            resources.GetString(\"foreColorPicker1.Items24\"),\n            resources.GetString(\"foreColorPicker1.Items25\"),\n            resources.GetString(\"foreColorPicker1.Items26\"),\n            resources.GetString(\"foreColorPicker1.Items27\"),\n            resources.GetString(\"foreColorPicker1.Items28\"),\n            resources.GetString(\"foreColorPicker1.Items29\"),\n            resources.GetString(\"foreColorPicker1.Items30\"),\n            resources.GetString(\"foreColorPicker1.Items31\"),\n            resources.GetString(\"foreColorPicker1.Items32\"),\n            resources.GetString(\"foreColorPicker1.Items33\"),\n            resources.GetString(\"foreColorPicker1.Items34\"),\n            resources.GetString(\"foreColorPicker1.Items35\"),\n            resources.GetString(\"foreColorPicker1.Items36\"),\n            resources.GetString(\"foreColorPicker1.Items37\"),\n            resources.GetString(\"foreColorPicker1.Items38\"),\n            resources.GetString(\"foreColorPicker1.Items39\"),\n            resources.GetString(\"foreColorPicker1.Items40\"),\n            resources.GetString(\"foreColorPicker1.Items41\"),\n            resources.GetString(\"foreColorPicker1.Items42\"),\n            resources.GetString(\"foreColorPicker1.Items43\"),\n            resources.GetString(\"foreColorPicker1.Items44\"),\n            resources.GetString(\"foreColorPicker1.Items45\"),\n            resources.GetString(\"foreColorPicker1.Items46\"),\n            resources.GetString(\"foreColorPicker1.Items47\"),\n            resources.GetString(\"foreColorPicker1.Items48\"),\n            resources.GetString(\"foreColorPicker1.Items49\"),\n            resources.GetString(\"foreColorPicker1.Items50\"),\n            resources.GetString(\"foreColorPicker1.Items51\"),\n            resources.GetString(\"foreColorPicker1.Items52\"),\n            resources.GetString(\"foreColorPicker1.Items53\"),\n            resources.GetString(\"foreColorPicker1.Items54\"),\n            resources.GetString(\"foreColorPicker1.Items55\"),\n            resources.GetString(\"foreColorPicker1.Items56\"),\n            resources.GetString(\"foreColorPicker1.Items57\"),\n            resources.GetString(\"foreColorPicker1.Items58\"),\n            resources.GetString(\"foreColorPicker1.Items59\"),\n            resources.GetString(\"foreColorPicker1.Items60\"),\n            resources.GetString(\"foreColorPicker1.Items61\"),\n            resources.GetString(\"foreColorPicker1.Items62\"),\n            resources.GetString(\"foreColorPicker1.Items63\"),\n            resources.GetString(\"foreColorPicker1.Items64\"),\n            resources.GetString(\"foreColorPicker1.Items65\"),\n            resources.GetString(\"foreColorPicker1.Items66\"),\n            resources.GetString(\"foreColorPicker1.Items67\"),\n            resources.GetString(\"foreColorPicker1.Items68\"),\n            resources.GetString(\"foreColorPicker1.Items69\"),\n            resources.GetString(\"foreColorPicker1.Items70\"),\n            resources.GetString(\"foreColorPicker1.Items71\"),\n            resources.GetString(\"foreColorPicker1.Items72\"),\n            resources.GetString(\"foreColorPicker1.Items73\"),\n            resources.GetString(\"foreColorPicker1.Items74\"),\n            resources.GetString(\"foreColorPicker1.Items75\"),\n            resources.GetString(\"foreColorPicker1.Items76\"),\n            resources.GetString(\"foreColorPicker1.Items77\"),\n            resources.GetString(\"foreColorPicker1.Items78\"),\n            resources.GetString(\"foreColorPicker1.Items79\"),\n            resources.GetString(\"foreColorPicker1.Items80\"),\n            resources.GetString(\"foreColorPicker1.Items81\"),\n            resources.GetString(\"foreColorPicker1.Items82\"),\n            resources.GetString(\"foreColorPicker1.Items83\"),\n            resources.GetString(\"foreColorPicker1.Items84\"),\n            resources.GetString(\"foreColorPicker1.Items85\"),\n            resources.GetString(\"foreColorPicker1.Items86\"),\n            resources.GetString(\"foreColorPicker1.Items87\"),\n            resources.GetString(\"foreColorPicker1.Items88\"),\n            resources.GetString(\"foreColorPicker1.Items89\"),\n            resources.GetString(\"foreColorPicker1.Items90\"),\n            resources.GetString(\"foreColorPicker1.Items91\"),\n            resources.GetString(\"foreColorPicker1.Items92\"),\n            resources.GetString(\"foreColorPicker1.Items93\"),\n            resources.GetString(\"foreColorPicker1.Items94\"),\n            resources.GetString(\"foreColorPicker1.Items95\"),\n            resources.GetString(\"foreColorPicker1.Items96\"),\n            resources.GetString(\"foreColorPicker1.Items97\"),\n            resources.GetString(\"foreColorPicker1.Items98\"),\n            resources.GetString(\"foreColorPicker1.Items99\"),\n            resources.GetString(\"foreColorPicker1.Items100\"),\n            resources.GetString(\"foreColorPicker1.Items101\"),\n            resources.GetString(\"foreColorPicker1.Items102\"),\n            resources.GetString(\"foreColorPicker1.Items103\"),\n            resources.GetString(\"foreColorPicker1.Items104\"),\n            resources.GetString(\"foreColorPicker1.Items105\"),\n            resources.GetString(\"foreColorPicker1.Items106\"),\n            resources.GetString(\"foreColorPicker1.Items107\"),\n            resources.GetString(\"foreColorPicker1.Items108\"),\n            resources.GetString(\"foreColorPicker1.Items109\"),\n            resources.GetString(\"foreColorPicker1.Items110\"),\n            resources.GetString(\"foreColorPicker1.Items111\"),\n            resources.GetString(\"foreColorPicker1.Items112\"),\n            resources.GetString(\"foreColorPicker1.Items113\"),\n            resources.GetString(\"foreColorPicker1.Items114\"),\n            resources.GetString(\"foreColorPicker1.Items115\"),\n            resources.GetString(\"foreColorPicker1.Items116\"),\n            resources.GetString(\"foreColorPicker1.Items117\"),\n            resources.GetString(\"foreColorPicker1.Items118\"),\n            resources.GetString(\"foreColorPicker1.Items119\"),\n            resources.GetString(\"foreColorPicker1.Items120\"),\n            resources.GetString(\"foreColorPicker1.Items121\"),\n            resources.GetString(\"foreColorPicker1.Items122\"),\n            resources.GetString(\"foreColorPicker1.Items123\"),\n            resources.GetString(\"foreColorPicker1.Items124\"),\n            resources.GetString(\"foreColorPicker1.Items125\"),\n            resources.GetString(\"foreColorPicker1.Items126\"),\n            resources.GetString(\"foreColorPicker1.Items127\"),\n            resources.GetString(\"foreColorPicker1.Items128\"),\n            resources.GetString(\"foreColorPicker1.Items129\"),\n            resources.GetString(\"foreColorPicker1.Items130\"),\n            resources.GetString(\"foreColorPicker1.Items131\"),\n            resources.GetString(\"foreColorPicker1.Items132\"),\n            resources.GetString(\"foreColorPicker1.Items133\"),\n            resources.GetString(\"foreColorPicker1.Items134\"),\n            resources.GetString(\"foreColorPicker1.Items135\"),\n            resources.GetString(\"foreColorPicker1.Items136\"),\n            resources.GetString(\"foreColorPicker1.Items137\"),\n            resources.GetString(\"foreColorPicker1.Items138\"),\n            resources.GetString(\"foreColorPicker1.Items139\"),\n            resources.GetString(\"foreColorPicker1.Items140\"),\n            resources.GetString(\"foreColorPicker1.Items141\"),\n            resources.GetString(\"foreColorPicker1.Items142\"),\n            resources.GetString(\"foreColorPicker1.Items143\"),\n            resources.GetString(\"foreColorPicker1.Items144\"),\n            resources.GetString(\"foreColorPicker1.Items145\"),\n            resources.GetString(\"foreColorPicker1.Items146\"),\n            resources.GetString(\"foreColorPicker1.Items147\"),\n            resources.GetString(\"foreColorPicker1.Items148\"),\n            resources.GetString(\"foreColorPicker1.Items149\"),\n            resources.GetString(\"foreColorPicker1.Items150\"),\n            resources.GetString(\"foreColorPicker1.Items151\"),\n            resources.GetString(\"foreColorPicker1.Items152\"),\n            resources.GetString(\"foreColorPicker1.Items153\"),\n            resources.GetString(\"foreColorPicker1.Items154\"),\n            resources.GetString(\"foreColorPicker1.Items155\"),\n            resources.GetString(\"foreColorPicker1.Items156\"),\n            resources.GetString(\"foreColorPicker1.Items157\"),\n            resources.GetString(\"foreColorPicker1.Items158\"),\n            resources.GetString(\"foreColorPicker1.Items159\"),\n            resources.GetString(\"foreColorPicker1.Items160\"),\n            resources.GetString(\"foreColorPicker1.Items161\"),\n            resources.GetString(\"foreColorPicker1.Items162\"),\n            resources.GetString(\"foreColorPicker1.Items163\"),\n            resources.GetString(\"foreColorPicker1.Items164\"),\n            resources.GetString(\"foreColorPicker1.Items165\"),\n            resources.GetString(\"foreColorPicker1.Items166\"),\n            resources.GetString(\"foreColorPicker1.Items167\"),\n            resources.GetString(\"foreColorPicker1.Items168\"),\n            resources.GetString(\"foreColorPicker1.Items169\"),\n            resources.GetString(\"foreColorPicker1.Items170\"),\n            resources.GetString(\"foreColorPicker1.Items171\"),\n            resources.GetString(\"foreColorPicker1.Items172\"),\n            resources.GetString(\"foreColorPicker1.Items173\"),\n            resources.GetString(\"foreColorPicker1.Items174\"),\n            resources.GetString(\"foreColorPicker1.Items175\"),\n            resources.GetString(\"foreColorPicker1.Items176\"),\n            resources.GetString(\"foreColorPicker1.Items177\"),\n            resources.GetString(\"foreColorPicker1.Items178\"),\n            resources.GetString(\"foreColorPicker1.Items179\"),\n            resources.GetString(\"foreColorPicker1.Items180\"),\n            resources.GetString(\"foreColorPicker1.Items181\"),\n            resources.GetString(\"foreColorPicker1.Items182\"),\n            resources.GetString(\"foreColorPicker1.Items183\"),\n            resources.GetString(\"foreColorPicker1.Items184\"),\n            resources.GetString(\"foreColorPicker1.Items185\"),\n            resources.GetString(\"foreColorPicker1.Items186\"),\n            resources.GetString(\"foreColorPicker1.Items187\"),\n            resources.GetString(\"foreColorPicker1.Items188\"),\n            resources.GetString(\"foreColorPicker1.Items189\"),\n            resources.GetString(\"foreColorPicker1.Items190\"),\n            resources.GetString(\"foreColorPicker1.Items191\"),\n            resources.GetString(\"foreColorPicker1.Items192\"),\n            resources.GetString(\"foreColorPicker1.Items193\"),\n            resources.GetString(\"foreColorPicker1.Items194\"),\n            resources.GetString(\"foreColorPicker1.Items195\"),\n            resources.GetString(\"foreColorPicker1.Items196\"),\n            resources.GetString(\"foreColorPicker1.Items197\"),\n            resources.GetString(\"foreColorPicker1.Items198\"),\n            resources.GetString(\"foreColorPicker1.Items199\"),\n            resources.GetString(\"foreColorPicker1.Items200\"),\n            resources.GetString(\"foreColorPicker1.Items201\"),\n            resources.GetString(\"foreColorPicker1.Items202\"),\n            resources.GetString(\"foreColorPicker1.Items203\"),\n            resources.GetString(\"foreColorPicker1.Items204\"),\n            resources.GetString(\"foreColorPicker1.Items205\"),\n            resources.GetString(\"foreColorPicker1.Items206\"),\n            resources.GetString(\"foreColorPicker1.Items207\"),\n            resources.GetString(\"foreColorPicker1.Items208\"),\n            resources.GetString(\"foreColorPicker1.Items209\"),\n            resources.GetString(\"foreColorPicker1.Items210\"),\n            resources.GetString(\"foreColorPicker1.Items211\"),\n            resources.GetString(\"foreColorPicker1.Items212\"),\n            resources.GetString(\"foreColorPicker1.Items213\"),\n            resources.GetString(\"foreColorPicker1.Items214\"),\n            resources.GetString(\"foreColorPicker1.Items215\"),\n            resources.GetString(\"foreColorPicker1.Items216\"),\n            resources.GetString(\"foreColorPicker1.Items217\"),\n            resources.GetString(\"foreColorPicker1.Items218\"),\n            resources.GetString(\"foreColorPicker1.Items219\"),\n            resources.GetString(\"foreColorPicker1.Items220\"),\n            resources.GetString(\"foreColorPicker1.Items221\"),\n            resources.GetString(\"foreColorPicker1.Items222\"),\n            resources.GetString(\"foreColorPicker1.Items223\"),\n            resources.GetString(\"foreColorPicker1.Items224\"),\n            resources.GetString(\"foreColorPicker1.Items225\"),\n            resources.GetString(\"foreColorPicker1.Items226\"),\n            resources.GetString(\"foreColorPicker1.Items227\"),\n            resources.GetString(\"foreColorPicker1.Items228\"),\n            resources.GetString(\"foreColorPicker1.Items229\"),\n            resources.GetString(\"foreColorPicker1.Items230\"),\n            resources.GetString(\"foreColorPicker1.Items231\"),\n            resources.GetString(\"foreColorPicker1.Items232\"),\n            resources.GetString(\"foreColorPicker1.Items233\"),\n            resources.GetString(\"foreColorPicker1.Items234\"),\n            resources.GetString(\"foreColorPicker1.Items235\"),\n            resources.GetString(\"foreColorPicker1.Items236\"),\n            resources.GetString(\"foreColorPicker1.Items237\"),\n            resources.GetString(\"foreColorPicker1.Items238\"),\n            resources.GetString(\"foreColorPicker1.Items239\"),\n            resources.GetString(\"foreColorPicker1.Items240\"),\n            resources.GetString(\"foreColorPicker1.Items241\"),\n            resources.GetString(\"foreColorPicker1.Items242\"),\n            resources.GetString(\"foreColorPicker1.Items243\"),\n            resources.GetString(\"foreColorPicker1.Items244\"),\n            resources.GetString(\"foreColorPicker1.Items245\"),\n            resources.GetString(\"foreColorPicker1.Items246\"),\n            resources.GetString(\"foreColorPicker1.Items247\"),\n            resources.GetString(\"foreColorPicker1.Items248\"),\n            resources.GetString(\"foreColorPicker1.Items249\"),\n            resources.GetString(\"foreColorPicker1.Items250\"),\n            resources.GetString(\"foreColorPicker1.Items251\"),\n            resources.GetString(\"foreColorPicker1.Items252\"),\n            resources.GetString(\"foreColorPicker1.Items253\"),\n            resources.GetString(\"foreColorPicker1.Items254\"),\n            resources.GetString(\"foreColorPicker1.Items255\"),\n            resources.GetString(\"foreColorPicker1.Items256\"),\n            resources.GetString(\"foreColorPicker1.Items257\"),\n            resources.GetString(\"foreColorPicker1.Items258\"),\n            resources.GetString(\"foreColorPicker1.Items259\"),\n            resources.GetString(\"foreColorPicker1.Items260\"),\n            resources.GetString(\"foreColorPicker1.Items261\"),\n            resources.GetString(\"foreColorPicker1.Items262\"),\n            resources.GetString(\"foreColorPicker1.Items263\"),\n            resources.GetString(\"foreColorPicker1.Items264\"),\n            resources.GetString(\"foreColorPicker1.Items265\"),\n            resources.GetString(\"foreColorPicker1.Items266\"),\n            resources.GetString(\"foreColorPicker1.Items267\"),\n            resources.GetString(\"foreColorPicker1.Items268\"),\n            resources.GetString(\"foreColorPicker1.Items269\"),\n            resources.GetString(\"foreColorPicker1.Items270\"),\n            resources.GetString(\"foreColorPicker1.Items271\"),\n            resources.GetString(\"foreColorPicker1.Items272\"),\n            resources.GetString(\"foreColorPicker1.Items273\"),\n            resources.GetString(\"foreColorPicker1.Items274\"),\n            resources.GetString(\"foreColorPicker1.Items275\"),\n            resources.GetString(\"foreColorPicker1.Items276\"),\n            resources.GetString(\"foreColorPicker1.Items277\"),\n            resources.GetString(\"foreColorPicker1.Items278\"),\n            resources.GetString(\"foreColorPicker1.Items279\"),\n            resources.GetString(\"foreColorPicker1.Items280\"),\n            resources.GetString(\"foreColorPicker1.Items281\"),\n            resources.GetString(\"foreColorPicker1.Items282\"),\n            resources.GetString(\"foreColorPicker1.Items283\"),\n            resources.GetString(\"foreColorPicker1.Items284\"),\n            resources.GetString(\"foreColorPicker1.Items285\"),\n            resources.GetString(\"foreColorPicker1.Items286\"),\n            resources.GetString(\"foreColorPicker1.Items287\"),\n            resources.GetString(\"foreColorPicker1.Items288\"),\n            resources.GetString(\"foreColorPicker1.Items289\"),\n            resources.GetString(\"foreColorPicker1.Items290\"),\n            resources.GetString(\"foreColorPicker1.Items291\"),\n            resources.GetString(\"foreColorPicker1.Items292\"),\n            resources.GetString(\"foreColorPicker1.Items293\"),\n            resources.GetString(\"foreColorPicker1.Items294\"),\n            resources.GetString(\"foreColorPicker1.Items295\"),\n            resources.GetString(\"foreColorPicker1.Items296\"),\n            resources.GetString(\"foreColorPicker1.Items297\"),\n            resources.GetString(\"foreColorPicker1.Items298\"),\n            resources.GetString(\"foreColorPicker1.Items299\"),\n            resources.GetString(\"foreColorPicker1.Items300\"),\n            resources.GetString(\"foreColorPicker1.Items301\"),\n            resources.GetString(\"foreColorPicker1.Items302\"),\n            resources.GetString(\"foreColorPicker1.Items303\"),\n            resources.GetString(\"foreColorPicker1.Items304\"),\n            resources.GetString(\"foreColorPicker1.Items305\"),\n            resources.GetString(\"foreColorPicker1.Items306\"),\n            resources.GetString(\"foreColorPicker1.Items307\"),\n            resources.GetString(\"foreColorPicker1.Items308\"),\n            resources.GetString(\"foreColorPicker1.Items309\"),\n            resources.GetString(\"foreColorPicker1.Items310\"),\n            resources.GetString(\"foreColorPicker1.Items311\"),\n            resources.GetString(\"foreColorPicker1.Items312\"),\n            resources.GetString(\"foreColorPicker1.Items313\"),\n            resources.GetString(\"foreColorPicker1.Items314\"),\n            resources.GetString(\"foreColorPicker1.Items315\"),\n            resources.GetString(\"foreColorPicker1.Items316\"),\n            resources.GetString(\"foreColorPicker1.Items317\"),\n            resources.GetString(\"foreColorPicker1.Items318\"),\n            resources.GetString(\"foreColorPicker1.Items319\"),\n            resources.GetString(\"foreColorPicker1.Items320\"),\n            resources.GetString(\"foreColorPicker1.Items321\"),\n            resources.GetString(\"foreColorPicker1.Items322\"),\n            resources.GetString(\"foreColorPicker1.Items323\"),\n            resources.GetString(\"foreColorPicker1.Items324\"),\n            resources.GetString(\"foreColorPicker1.Items325\"),\n            resources.GetString(\"foreColorPicker1.Items326\"),\n            resources.GetString(\"foreColorPicker1.Items327\"),\n            resources.GetString(\"foreColorPicker1.Items328\"),\n            resources.GetString(\"foreColorPicker1.Items329\"),\n            resources.GetString(\"foreColorPicker1.Items330\"),\n            resources.GetString(\"foreColorPicker1.Items331\"),\n            resources.GetString(\"foreColorPicker1.Items332\"),\n            resources.GetString(\"foreColorPicker1.Items333\"),\n            resources.GetString(\"foreColorPicker1.Items334\"),\n            resources.GetString(\"foreColorPicker1.Items335\"),\n            resources.GetString(\"foreColorPicker1.Items336\"),\n            resources.GetString(\"foreColorPicker1.Items337\"),\n            resources.GetString(\"foreColorPicker1.Items338\"),\n            resources.GetString(\"foreColorPicker1.Items339\"),\n            resources.GetString(\"foreColorPicker1.Items340\"),\n            resources.GetString(\"foreColorPicker1.Items341\"),\n            resources.GetString(\"foreColorPicker1.Items342\"),\n            resources.GetString(\"foreColorPicker1.Items343\"),\n            resources.GetString(\"foreColorPicker1.Items344\"),\n            resources.GetString(\"foreColorPicker1.Items345\"),\n            resources.GetString(\"foreColorPicker1.Items346\"),\n            resources.GetString(\"foreColorPicker1.Items347\"),\n            resources.GetString(\"foreColorPicker1.Items348\"),\n            resources.GetString(\"foreColorPicker1.Items349\"),\n            resources.GetString(\"foreColorPicker1.Items350\"),\n            resources.GetString(\"foreColorPicker1.Items351\"),\n            resources.GetString(\"foreColorPicker1.Items352\"),\n            resources.GetString(\"foreColorPicker1.Items353\"),\n            resources.GetString(\"foreColorPicker1.Items354\"),\n            resources.GetString(\"foreColorPicker1.Items355\"),\n            resources.GetString(\"foreColorPicker1.Items356\"),\n            resources.GetString(\"foreColorPicker1.Items357\"),\n            resources.GetString(\"foreColorPicker1.Items358\"),\n            resources.GetString(\"foreColorPicker1.Items359\"),\n            resources.GetString(\"foreColorPicker1.Items360\"),\n            resources.GetString(\"foreColorPicker1.Items361\"),\n            resources.GetString(\"foreColorPicker1.Items362\"),\n            resources.GetString(\"foreColorPicker1.Items363\"),\n            resources.GetString(\"foreColorPicker1.Items364\"),\n            resources.GetString(\"foreColorPicker1.Items365\"),\n            resources.GetString(\"foreColorPicker1.Items366\"),\n            resources.GetString(\"foreColorPicker1.Items367\"),\n            resources.GetString(\"foreColorPicker1.Items368\"),\n            resources.GetString(\"foreColorPicker1.Items369\"),\n            resources.GetString(\"foreColorPicker1.Items370\"),\n            resources.GetString(\"foreColorPicker1.Items371\"),\n            resources.GetString(\"foreColorPicker1.Items372\"),\n            resources.GetString(\"foreColorPicker1.Items373\"),\n            resources.GetString(\"foreColorPicker1.Items374\"),\n            resources.GetString(\"foreColorPicker1.Items375\"),\n            resources.GetString(\"foreColorPicker1.Items376\"),\n            resources.GetString(\"foreColorPicker1.Items377\"),\n            resources.GetString(\"foreColorPicker1.Items378\"),\n            resources.GetString(\"foreColorPicker1.Items379\"),\n            resources.GetString(\"foreColorPicker1.Items380\"),\n            resources.GetString(\"foreColorPicker1.Items381\"),\n            resources.GetString(\"foreColorPicker1.Items382\"),\n            resources.GetString(\"foreColorPicker1.Items383\"),\n            resources.GetString(\"foreColorPicker1.Items384\"),\n            resources.GetString(\"foreColorPicker1.Items385\"),\n            resources.GetString(\"foreColorPicker1.Items386\"),\n            resources.GetString(\"foreColorPicker1.Items387\"),\n            resources.GetString(\"foreColorPicker1.Items388\"),\n            resources.GetString(\"foreColorPicker1.Items389\"),\n            resources.GetString(\"foreColorPicker1.Items390\"),\n            resources.GetString(\"foreColorPicker1.Items391\"),\n            resources.GetString(\"foreColorPicker1.Items392\"),\n            resources.GetString(\"foreColorPicker1.Items393\"),\n            resources.GetString(\"foreColorPicker1.Items394\"),\n            resources.GetString(\"foreColorPicker1.Items395\"),\n            resources.GetString(\"foreColorPicker1.Items396\"),\n            resources.GetString(\"foreColorPicker1.Items397\"),\n            resources.GetString(\"foreColorPicker1.Items398\"),\n            resources.GetString(\"foreColorPicker1.Items399\"),\n            resources.GetString(\"foreColorPicker1.Items400\"),\n            resources.GetString(\"foreColorPicker1.Items401\"),\n            resources.GetString(\"foreColorPicker1.Items402\"),\n            resources.GetString(\"foreColorPicker1.Items403\"),\n            resources.GetString(\"foreColorPicker1.Items404\"),\n            resources.GetString(\"foreColorPicker1.Items405\"),\n            resources.GetString(\"foreColorPicker1.Items406\"),\n            resources.GetString(\"foreColorPicker1.Items407\"),\n            resources.GetString(\"foreColorPicker1.Items408\"),\n            resources.GetString(\"foreColorPicker1.Items409\"),\n            resources.GetString(\"foreColorPicker1.Items410\"),\n            resources.GetString(\"foreColorPicker1.Items411\"),\n            resources.GetString(\"foreColorPicker1.Items412\"),\n            resources.GetString(\"foreColorPicker1.Items413\"),\n            resources.GetString(\"foreColorPicker1.Items414\"),\n            resources.GetString(\"foreColorPicker1.Items415\"),\n            resources.GetString(\"foreColorPicker1.Items416\"),\n            resources.GetString(\"foreColorPicker1.Items417\"),\n            resources.GetString(\"foreColorPicker1.Items418\"),\n            resources.GetString(\"foreColorPicker1.Items419\"),\n            resources.GetString(\"foreColorPicker1.Items420\"),\n            resources.GetString(\"foreColorPicker1.Items421\"),\n            resources.GetString(\"foreColorPicker1.Items422\"),\n            resources.GetString(\"foreColorPicker1.Items423\"),\n            resources.GetString(\"foreColorPicker1.Items424\"),\n            resources.GetString(\"foreColorPicker1.Items425\"),\n            resources.GetString(\"foreColorPicker1.Items426\"),\n            resources.GetString(\"foreColorPicker1.Items427\"),\n            resources.GetString(\"foreColorPicker1.Items428\"),\n            resources.GetString(\"foreColorPicker1.Items429\"),\n            resources.GetString(\"foreColorPicker1.Items430\"),\n            resources.GetString(\"foreColorPicker1.Items431\"),\n            resources.GetString(\"foreColorPicker1.Items432\"),\n            resources.GetString(\"foreColorPicker1.Items433\"),\n            resources.GetString(\"foreColorPicker1.Items434\"),\n            resources.GetString(\"foreColorPicker1.Items435\"),\n            resources.GetString(\"foreColorPicker1.Items436\"),\n            resources.GetString(\"foreColorPicker1.Items437\"),\n            resources.GetString(\"foreColorPicker1.Items438\"),\n            resources.GetString(\"foreColorPicker1.Items439\"),\n            resources.GetString(\"foreColorPicker1.Items440\"),\n            resources.GetString(\"foreColorPicker1.Items441\"),\n            resources.GetString(\"foreColorPicker1.Items442\"),\n            resources.GetString(\"foreColorPicker1.Items443\"),\n            resources.GetString(\"foreColorPicker1.Items444\"),\n            resources.GetString(\"foreColorPicker1.Items445\"),\n            resources.GetString(\"foreColorPicker1.Items446\"),\n            resources.GetString(\"foreColorPicker1.Items447\"),\n            resources.GetString(\"foreColorPicker1.Items448\"),\n            resources.GetString(\"foreColorPicker1.Items449\"),\n            resources.GetString(\"foreColorPicker1.Items450\"),\n            resources.GetString(\"foreColorPicker1.Items451\"),\n            resources.GetString(\"foreColorPicker1.Items452\"),\n            resources.GetString(\"foreColorPicker1.Items453\"),\n            resources.GetString(\"foreColorPicker1.Items454\"),\n            resources.GetString(\"foreColorPicker1.Items455\"),\n            resources.GetString(\"foreColorPicker1.Items456\"),\n            resources.GetString(\"foreColorPicker1.Items457\"),\n            resources.GetString(\"foreColorPicker1.Items458\"),\n            resources.GetString(\"foreColorPicker1.Items459\"),\n            resources.GetString(\"foreColorPicker1.Items460\"),\n            resources.GetString(\"foreColorPicker1.Items461\"),\n            resources.GetString(\"foreColorPicker1.Items462\"),\n            resources.GetString(\"foreColorPicker1.Items463\"),\n            resources.GetString(\"foreColorPicker1.Items464\"),\n            resources.GetString(\"foreColorPicker1.Items465\"),\n            resources.GetString(\"foreColorPicker1.Items466\"),\n            resources.GetString(\"foreColorPicker1.Items467\"),\n            resources.GetString(\"foreColorPicker1.Items468\"),\n            resources.GetString(\"foreColorPicker1.Items469\"),\n            resources.GetString(\"foreColorPicker1.Items470\"),\n            resources.GetString(\"foreColorPicker1.Items471\"),\n            resources.GetString(\"foreColorPicker1.Items472\"),\n            resources.GetString(\"foreColorPicker1.Items473\"),\n            resources.GetString(\"foreColorPicker1.Items474\"),\n            resources.GetString(\"foreColorPicker1.Items475\"),\n            resources.GetString(\"foreColorPicker1.Items476\"),\n            resources.GetString(\"foreColorPicker1.Items477\"),\n            resources.GetString(\"foreColorPicker1.Items478\"),\n            resources.GetString(\"foreColorPicker1.Items479\"),\n            resources.GetString(\"foreColorPicker1.Items480\"),\n            resources.GetString(\"foreColorPicker1.Items481\"),\n            resources.GetString(\"foreColorPicker1.Items482\"),\n            resources.GetString(\"foreColorPicker1.Items483\"),\n            resources.GetString(\"foreColorPicker1.Items484\"),\n            resources.GetString(\"foreColorPicker1.Items485\"),\n            resources.GetString(\"foreColorPicker1.Items486\"),\n            resources.GetString(\"foreColorPicker1.Items487\"),\n            resources.GetString(\"foreColorPicker1.Items488\"),\n            resources.GetString(\"foreColorPicker1.Items489\"),\n            resources.GetString(\"foreColorPicker1.Items490\"),\n            resources.GetString(\"foreColorPicker1.Items491\"),\n            resources.GetString(\"foreColorPicker1.Items492\"),\n            resources.GetString(\"foreColorPicker1.Items493\"),\n            resources.GetString(\"foreColorPicker1.Items494\"),\n            resources.GetString(\"foreColorPicker1.Items495\"),\n            resources.GetString(\"foreColorPicker1.Items496\"),\n            resources.GetString(\"foreColorPicker1.Items497\"),\n            resources.GetString(\"foreColorPicker1.Items498\"),\n            resources.GetString(\"foreColorPicker1.Items499\"),\n            resources.GetString(\"foreColorPicker1.Items500\"),\n            resources.GetString(\"foreColorPicker1.Items501\"),\n            resources.GetString(\"foreColorPicker1.Items502\"),\n            resources.GetString(\"foreColorPicker1.Items503\"),\n            resources.GetString(\"foreColorPicker1.Items504\"),\n            resources.GetString(\"foreColorPicker1.Items505\"),\n            resources.GetString(\"foreColorPicker1.Items506\"),\n            resources.GetString(\"foreColorPicker1.Items507\"),\n            resources.GetString(\"foreColorPicker1.Items508\"),\n            resources.GetString(\"foreColorPicker1.Items509\"),\n            resources.GetString(\"foreColorPicker1.Items510\"),\n            resources.GetString(\"foreColorPicker1.Items511\"),\n            resources.GetString(\"foreColorPicker1.Items512\"),\n            resources.GetString(\"foreColorPicker1.Items513\"),\n            resources.GetString(\"foreColorPicker1.Items514\"),\n            resources.GetString(\"foreColorPicker1.Items515\"),\n            resources.GetString(\"foreColorPicker1.Items516\"),\n            resources.GetString(\"foreColorPicker1.Items517\"),\n            resources.GetString(\"foreColorPicker1.Items518\"),\n            resources.GetString(\"foreColorPicker1.Items519\"),\n            resources.GetString(\"foreColorPicker1.Items520\"),\n            resources.GetString(\"foreColorPicker1.Items521\"),\n            resources.GetString(\"foreColorPicker1.Items522\"),\n            resources.GetString(\"foreColorPicker1.Items523\"),\n            resources.GetString(\"foreColorPicker1.Items524\"),\n            resources.GetString(\"foreColorPicker1.Items525\"),\n            resources.GetString(\"foreColorPicker1.Items526\"),\n            resources.GetString(\"foreColorPicker1.Items527\"),\n            resources.GetString(\"foreColorPicker1.Items528\"),\n            resources.GetString(\"foreColorPicker1.Items529\"),\n            resources.GetString(\"foreColorPicker1.Items530\"),\n            resources.GetString(\"foreColorPicker1.Items531\"),\n            resources.GetString(\"foreColorPicker1.Items532\"),\n            resources.GetString(\"foreColorPicker1.Items533\"),\n            resources.GetString(\"foreColorPicker1.Items534\"),\n            resources.GetString(\"foreColorPicker1.Items535\"),\n            resources.GetString(\"foreColorPicker1.Items536\"),\n            resources.GetString(\"foreColorPicker1.Items537\"),\n            resources.GetString(\"foreColorPicker1.Items538\"),\n            resources.GetString(\"foreColorPicker1.Items539\"),\n            resources.GetString(\"foreColorPicker1.Items540\"),\n            resources.GetString(\"foreColorPicker1.Items541\"),\n            resources.GetString(\"foreColorPicker1.Items542\"),\n            resources.GetString(\"foreColorPicker1.Items543\"),\n            resources.GetString(\"foreColorPicker1.Items544\"),\n            resources.GetString(\"foreColorPicker1.Items545\"),\n            resources.GetString(\"foreColorPicker1.Items546\"),\n            resources.GetString(\"foreColorPicker1.Items547\"),\n            resources.GetString(\"foreColorPicker1.Items548\"),\n            resources.GetString(\"foreColorPicker1.Items549\"),\n            resources.GetString(\"foreColorPicker1.Items550\"),\n            resources.GetString(\"foreColorPicker1.Items551\"),\n            resources.GetString(\"foreColorPicker1.Items552\"),\n            resources.GetString(\"foreColorPicker1.Items553\"),\n            resources.GetString(\"foreColorPicker1.Items554\"),\n            resources.GetString(\"foreColorPicker1.Items555\"),\n            resources.GetString(\"foreColorPicker1.Items556\"),\n            resources.GetString(\"foreColorPicker1.Items557\"),\n            resources.GetString(\"foreColorPicker1.Items558\"),\n            resources.GetString(\"foreColorPicker1.Items559\"),\n            resources.GetString(\"foreColorPicker1.Items560\"),\n            resources.GetString(\"foreColorPicker1.Items561\"),\n            resources.GetString(\"foreColorPicker1.Items562\"),\n            resources.GetString(\"foreColorPicker1.Items563\"),\n            resources.GetString(\"foreColorPicker1.Items564\"),\n            resources.GetString(\"foreColorPicker1.Items565\"),\n            resources.GetString(\"foreColorPicker1.Items566\"),\n            resources.GetString(\"foreColorPicker1.Items567\"),\n            resources.GetString(\"foreColorPicker1.Items568\"),\n            resources.GetString(\"foreColorPicker1.Items569\"),\n            resources.GetString(\"foreColorPicker1.Items570\"),\n            resources.GetString(\"foreColorPicker1.Items571\"),\n            resources.GetString(\"foreColorPicker1.Items572\"),\n            resources.GetString(\"foreColorPicker1.Items573\"),\n            resources.GetString(\"foreColorPicker1.Items574\"),\n            resources.GetString(\"foreColorPicker1.Items575\"),\n            resources.GetString(\"foreColorPicker1.Items576\"),\n            resources.GetString(\"foreColorPicker1.Items577\"),\n            resources.GetString(\"foreColorPicker1.Items578\"),\n            resources.GetString(\"foreColorPicker1.Items579\"),\n            resources.GetString(\"foreColorPicker1.Items580\"),\n            resources.GetString(\"foreColorPicker1.Items581\"),\n            resources.GetString(\"foreColorPicker1.Items582\"),\n            resources.GetString(\"foreColorPicker1.Items583\"),\n            resources.GetString(\"foreColorPicker1.Items584\"),\n            resources.GetString(\"foreColorPicker1.Items585\"),\n            resources.GetString(\"foreColorPicker1.Items586\"),\n            resources.GetString(\"foreColorPicker1.Items587\"),\n            resources.GetString(\"foreColorPicker1.Items588\"),\n            resources.GetString(\"foreColorPicker1.Items589\"),\n            resources.GetString(\"foreColorPicker1.Items590\"),\n            resources.GetString(\"foreColorPicker1.Items591\"),\n            resources.GetString(\"foreColorPicker1.Items592\"),\n            resources.GetString(\"foreColorPicker1.Items593\"),\n            resources.GetString(\"foreColorPicker1.Items594\"),\n            resources.GetString(\"foreColorPicker1.Items595\"),\n            resources.GetString(\"foreColorPicker1.Items596\"),\n            resources.GetString(\"foreColorPicker1.Items597\"),\n            resources.GetString(\"foreColorPicker1.Items598\"),\n            resources.GetString(\"foreColorPicker1.Items599\"),\n            resources.GetString(\"foreColorPicker1.Items600\"),\n            resources.GetString(\"foreColorPicker1.Items601\"),\n            resources.GetString(\"foreColorPicker1.Items602\"),\n            resources.GetString(\"foreColorPicker1.Items603\"),\n            resources.GetString(\"foreColorPicker1.Items604\"),\n            resources.GetString(\"foreColorPicker1.Items605\"),\n            resources.GetString(\"foreColorPicker1.Items606\"),\n            resources.GetString(\"foreColorPicker1.Items607\"),\n            resources.GetString(\"foreColorPicker1.Items608\"),\n            resources.GetString(\"foreColorPicker1.Items609\"),\n            resources.GetString(\"foreColorPicker1.Items610\"),\n            resources.GetString(\"foreColorPicker1.Items611\"),\n            resources.GetString(\"foreColorPicker1.Items612\"),\n            resources.GetString(\"foreColorPicker1.Items613\"),\n            resources.GetString(\"foreColorPicker1.Items614\"),\n            resources.GetString(\"foreColorPicker1.Items615\"),\n            resources.GetString(\"foreColorPicker1.Items616\"),\n            resources.GetString(\"foreColorPicker1.Items617\"),\n            resources.GetString(\"foreColorPicker1.Items618\"),\n            resources.GetString(\"foreColorPicker1.Items619\"),\n            resources.GetString(\"foreColorPicker1.Items620\"),\n            resources.GetString(\"foreColorPicker1.Items621\"),\n            resources.GetString(\"foreColorPicker1.Items622\"),\n            resources.GetString(\"foreColorPicker1.Items623\"),\n            resources.GetString(\"foreColorPicker1.Items624\"),\n            resources.GetString(\"foreColorPicker1.Items625\"),\n            resources.GetString(\"foreColorPicker1.Items626\"),\n            resources.GetString(\"foreColorPicker1.Items627\"),\n            resources.GetString(\"foreColorPicker1.Items628\"),\n            resources.GetString(\"foreColorPicker1.Items629\"),\n            resources.GetString(\"foreColorPicker1.Items630\"),\n            resources.GetString(\"foreColorPicker1.Items631\"),\n            resources.GetString(\"foreColorPicker1.Items632\"),\n            resources.GetString(\"foreColorPicker1.Items633\"),\n            resources.GetString(\"foreColorPicker1.Items634\"),\n            resources.GetString(\"foreColorPicker1.Items635\"),\n            resources.GetString(\"foreColorPicker1.Items636\"),\n            resources.GetString(\"foreColorPicker1.Items637\"),\n            resources.GetString(\"foreColorPicker1.Items638\"),\n            resources.GetString(\"foreColorPicker1.Items639\"),\n            resources.GetString(\"foreColorPicker1.Items640\"),\n            resources.GetString(\"foreColorPicker1.Items641\"),\n            resources.GetString(\"foreColorPicker1.Items642\"),\n            resources.GetString(\"foreColorPicker1.Items643\"),\n            resources.GetString(\"foreColorPicker1.Items644\"),\n            resources.GetString(\"foreColorPicker1.Items645\"),\n            resources.GetString(\"foreColorPicker1.Items646\"),\n            resources.GetString(\"foreColorPicker1.Items647\"),\n            resources.GetString(\"foreColorPicker1.Items648\"),\n            resources.GetString(\"foreColorPicker1.Items649\"),\n            resources.GetString(\"foreColorPicker1.Items650\"),\n            resources.GetString(\"foreColorPicker1.Items651\"),\n            resources.GetString(\"foreColorPicker1.Items652\"),\n            resources.GetString(\"foreColorPicker1.Items653\"),\n            resources.GetString(\"foreColorPicker1.Items654\"),\n            resources.GetString(\"foreColorPicker1.Items655\"),\n            resources.GetString(\"foreColorPicker1.Items656\"),\n            resources.GetString(\"foreColorPicker1.Items657\"),\n            resources.GetString(\"foreColorPicker1.Items658\"),\n            resources.GetString(\"foreColorPicker1.Items659\"),\n            resources.GetString(\"foreColorPicker1.Items660\"),\n            resources.GetString(\"foreColorPicker1.Items661\"),\n            resources.GetString(\"foreColorPicker1.Items662\"),\n            resources.GetString(\"foreColorPicker1.Items663\"),\n            resources.GetString(\"foreColorPicker1.Items664\"),\n            resources.GetString(\"foreColorPicker1.Items665\"),\n            resources.GetString(\"foreColorPicker1.Items666\"),\n            resources.GetString(\"foreColorPicker1.Items667\"),\n            resources.GetString(\"foreColorPicker1.Items668\"),\n            resources.GetString(\"foreColorPicker1.Items669\"),\n            resources.GetString(\"foreColorPicker1.Items670\"),\n            resources.GetString(\"foreColorPicker1.Items671\"),\n            resources.GetString(\"foreColorPicker1.Items672\"),\n            resources.GetString(\"foreColorPicker1.Items673\"),\n            resources.GetString(\"foreColorPicker1.Items674\"),\n            resources.GetString(\"foreColorPicker1.Items675\"),\n            resources.GetString(\"foreColorPicker1.Items676\"),\n            resources.GetString(\"foreColorPicker1.Items677\"),\n            resources.GetString(\"foreColorPicker1.Items678\"),\n            resources.GetString(\"foreColorPicker1.Items679\"),\n            resources.GetString(\"foreColorPicker1.Items680\"),\n            resources.GetString(\"foreColorPicker1.Items681\"),\n            resources.GetString(\"foreColorPicker1.Items682\"),\n            resources.GetString(\"foreColorPicker1.Items683\"),\n            resources.GetString(\"foreColorPicker1.Items684\"),\n            resources.GetString(\"foreColorPicker1.Items685\"),\n            resources.GetString(\"foreColorPicker1.Items686\"),\n            resources.GetString(\"foreColorPicker1.Items687\"),\n            resources.GetString(\"foreColorPicker1.Items688\"),\n            resources.GetString(\"foreColorPicker1.Items689\"),\n            resources.GetString(\"foreColorPicker1.Items690\"),\n            resources.GetString(\"foreColorPicker1.Items691\"),\n            resources.GetString(\"foreColorPicker1.Items692\"),\n            resources.GetString(\"foreColorPicker1.Items693\"),\n            resources.GetString(\"foreColorPicker1.Items694\"),\n            resources.GetString(\"foreColorPicker1.Items695\"),\n            resources.GetString(\"foreColorPicker1.Items696\"),\n            resources.GetString(\"foreColorPicker1.Items697\"),\n            resources.GetString(\"foreColorPicker1.Items698\"),\n            resources.GetString(\"foreColorPicker1.Items699\"),\n            resources.GetString(\"foreColorPicker1.Items700\"),\n            resources.GetString(\"foreColorPicker1.Items701\"),\n            resources.GetString(\"foreColorPicker1.Items702\"),\n            resources.GetString(\"foreColorPicker1.Items703\"),\n            resources.GetString(\"foreColorPicker1.Items704\"),\n            resources.GetString(\"foreColorPicker1.Items705\"),\n            resources.GetString(\"foreColorPicker1.Items706\"),\n            resources.GetString(\"foreColorPicker1.Items707\"),\n            resources.GetString(\"foreColorPicker1.Items708\"),\n            resources.GetString(\"foreColorPicker1.Items709\"),\n            resources.GetString(\"foreColorPicker1.Items710\"),\n            resources.GetString(\"foreColorPicker1.Items711\"),\n            resources.GetString(\"foreColorPicker1.Items712\"),\n            resources.GetString(\"foreColorPicker1.Items713\"),\n            resources.GetString(\"foreColorPicker1.Items714\"),\n            resources.GetString(\"foreColorPicker1.Items715\"),\n            resources.GetString(\"foreColorPicker1.Items716\"),\n            resources.GetString(\"foreColorPicker1.Items717\"),\n            resources.GetString(\"foreColorPicker1.Items718\"),\n            resources.GetString(\"foreColorPicker1.Items719\"),\n            resources.GetString(\"foreColorPicker1.Items720\"),\n            resources.GetString(\"foreColorPicker1.Items721\"),\n            resources.GetString(\"foreColorPicker1.Items722\"),\n            resources.GetString(\"foreColorPicker1.Items723\"),\n            resources.GetString(\"foreColorPicker1.Items724\"),\n            resources.GetString(\"foreColorPicker1.Items725\"),\n            resources.GetString(\"foreColorPicker1.Items726\"),\n            resources.GetString(\"foreColorPicker1.Items727\"),\n            resources.GetString(\"foreColorPicker1.Items728\"),\n            resources.GetString(\"foreColorPicker1.Items729\"),\n            resources.GetString(\"foreColorPicker1.Items730\"),\n            resources.GetString(\"foreColorPicker1.Items731\"),\n            resources.GetString(\"foreColorPicker1.Items732\"),\n            resources.GetString(\"foreColorPicker1.Items733\"),\n            resources.GetString(\"foreColorPicker1.Items734\"),\n            resources.GetString(\"foreColorPicker1.Items735\"),\n            resources.GetString(\"foreColorPicker1.Items736\"),\n            resources.GetString(\"foreColorPicker1.Items737\"),\n            resources.GetString(\"foreColorPicker1.Items738\"),\n            resources.GetString(\"foreColorPicker1.Items739\"),\n            resources.GetString(\"foreColorPicker1.Items740\"),\n            resources.GetString(\"foreColorPicker1.Items741\"),\n            resources.GetString(\"foreColorPicker1.Items742\"),\n            resources.GetString(\"foreColorPicker1.Items743\"),\n            resources.GetString(\"foreColorPicker1.Items744\"),\n            resources.GetString(\"foreColorPicker1.Items745\"),\n            resources.GetString(\"foreColorPicker1.Items746\"),\n            resources.GetString(\"foreColorPicker1.Items747\"),\n            resources.GetString(\"foreColorPicker1.Items748\"),\n            resources.GetString(\"foreColorPicker1.Items749\"),\n            resources.GetString(\"foreColorPicker1.Items750\"),\n            resources.GetString(\"foreColorPicker1.Items751\"),\n            resources.GetString(\"foreColorPicker1.Items752\"),\n            resources.GetString(\"foreColorPicker1.Items753\"),\n            resources.GetString(\"foreColorPicker1.Items754\"),\n            resources.GetString(\"foreColorPicker1.Items755\"),\n            resources.GetString(\"foreColorPicker1.Items756\"),\n            resources.GetString(\"foreColorPicker1.Items757\"),\n            resources.GetString(\"foreColorPicker1.Items758\"),\n            resources.GetString(\"foreColorPicker1.Items759\"),\n            resources.GetString(\"foreColorPicker1.Items760\"),\n            resources.GetString(\"foreColorPicker1.Items761\"),\n            resources.GetString(\"foreColorPicker1.Items762\"),\n            resources.GetString(\"foreColorPicker1.Items763\"),\n            resources.GetString(\"foreColorPicker1.Items764\"),\n            resources.GetString(\"foreColorPicker1.Items765\"),\n            resources.GetString(\"foreColorPicker1.Items766\"),\n            resources.GetString(\"foreColorPicker1.Items767\"),\n            resources.GetString(\"foreColorPicker1.Items768\"),\n            resources.GetString(\"foreColorPicker1.Items769\"),\n            resources.GetString(\"foreColorPicker1.Items770\"),\n            resources.GetString(\"foreColorPicker1.Items771\"),\n            resources.GetString(\"foreColorPicker1.Items772\"),\n            resources.GetString(\"foreColorPicker1.Items773\"),\n            resources.GetString(\"foreColorPicker1.Items774\"),\n            resources.GetString(\"foreColorPicker1.Items775\"),\n            resources.GetString(\"foreColorPicker1.Items776\"),\n            resources.GetString(\"foreColorPicker1.Items777\"),\n            resources.GetString(\"foreColorPicker1.Items778\"),\n            resources.GetString(\"foreColorPicker1.Items779\"),\n            resources.GetString(\"foreColorPicker1.Items780\"),\n            resources.GetString(\"foreColorPicker1.Items781\"),\n            resources.GetString(\"foreColorPicker1.Items782\"),\n            resources.GetString(\"foreColorPicker1.Items783\"),\n            resources.GetString(\"foreColorPicker1.Items784\"),\n            resources.GetString(\"foreColorPicker1.Items785\"),\n            resources.GetString(\"foreColorPicker1.Items786\"),\n            resources.GetString(\"foreColorPicker1.Items787\"),\n            resources.GetString(\"foreColorPicker1.Items788\"),\n            resources.GetString(\"foreColorPicker1.Items789\"),\n            resources.GetString(\"foreColorPicker1.Items790\"),\n            resources.GetString(\"foreColorPicker1.Items791\"),\n            resources.GetString(\"foreColorPicker1.Items792\"),\n            resources.GetString(\"foreColorPicker1.Items793\"),\n            resources.GetString(\"foreColorPicker1.Items794\"),\n            resources.GetString(\"foreColorPicker1.Items795\"),\n            resources.GetString(\"foreColorPicker1.Items796\"),\n            resources.GetString(\"foreColorPicker1.Items797\"),\n            resources.GetString(\"foreColorPicker1.Items798\"),\n            resources.GetString(\"foreColorPicker1.Items799\"),\n            resources.GetString(\"foreColorPicker1.Items800\"),\n            resources.GetString(\"foreColorPicker1.Items801\"),\n            resources.GetString(\"foreColorPicker1.Items802\"),\n            resources.GetString(\"foreColorPicker1.Items803\"),\n            resources.GetString(\"foreColorPicker1.Items804\"),\n            resources.GetString(\"foreColorPicker1.Items805\"),\n            resources.GetString(\"foreColorPicker1.Items806\"),\n            resources.GetString(\"foreColorPicker1.Items807\"),\n            resources.GetString(\"foreColorPicker1.Items808\"),\n            resources.GetString(\"foreColorPicker1.Items809\"),\n            resources.GetString(\"foreColorPicker1.Items810\"),\n            resources.GetString(\"foreColorPicker1.Items811\"),\n            resources.GetString(\"foreColorPicker1.Items812\"),\n            resources.GetString(\"foreColorPicker1.Items813\"),\n            resources.GetString(\"foreColorPicker1.Items814\"),\n            resources.GetString(\"foreColorPicker1.Items815\"),\n            resources.GetString(\"foreColorPicker1.Items816\"),\n            resources.GetString(\"foreColorPicker1.Items817\"),\n            resources.GetString(\"foreColorPicker1.Items818\"),\n            resources.GetString(\"foreColorPicker1.Items819\"),\n            resources.GetString(\"foreColorPicker1.Items820\"),\n            resources.GetString(\"foreColorPicker1.Items821\"),\n            resources.GetString(\"foreColorPicker1.Items822\"),\n            resources.GetString(\"foreColorPicker1.Items823\"),\n            resources.GetString(\"foreColorPicker1.Items824\"),\n            resources.GetString(\"foreColorPicker1.Items825\"),\n            resources.GetString(\"foreColorPicker1.Items826\"),\n            resources.GetString(\"foreColorPicker1.Items827\"),\n            resources.GetString(\"foreColorPicker1.Items828\"),\n            resources.GetString(\"foreColorPicker1.Items829\"),\n            resources.GetString(\"foreColorPicker1.Items830\"),\n            resources.GetString(\"foreColorPicker1.Items831\"),\n            resources.GetString(\"foreColorPicker1.Items832\"),\n            resources.GetString(\"foreColorPicker1.Items833\"),\n            resources.GetString(\"foreColorPicker1.Items834\"),\n            resources.GetString(\"foreColorPicker1.Items835\"),\n            resources.GetString(\"foreColorPicker1.Items836\"),\n            resources.GetString(\"foreColorPicker1.Items837\"),\n            resources.GetString(\"foreColorPicker1.Items838\"),\n            resources.GetString(\"foreColorPicker1.Items839\"),\n            resources.GetString(\"foreColorPicker1.Items840\"),\n            resources.GetString(\"foreColorPicker1.Items841\"),\n            resources.GetString(\"foreColorPicker1.Items842\"),\n            resources.GetString(\"foreColorPicker1.Items843\"),\n            resources.GetString(\"foreColorPicker1.Items844\"),\n            resources.GetString(\"foreColorPicker1.Items845\"),\n            resources.GetString(\"foreColorPicker1.Items846\"),\n            resources.GetString(\"foreColorPicker1.Items847\"),\n            resources.GetString(\"foreColorPicker1.Items848\"),\n            resources.GetString(\"foreColorPicker1.Items849\"),\n            resources.GetString(\"foreColorPicker1.Items850\"),\n            resources.GetString(\"foreColorPicker1.Items851\"),\n            resources.GetString(\"foreColorPicker1.Items852\"),\n            resources.GetString(\"foreColorPicker1.Items853\"),\n            resources.GetString(\"foreColorPicker1.Items854\"),\n            resources.GetString(\"foreColorPicker1.Items855\"),\n            resources.GetString(\"foreColorPicker1.Items856\"),\n            resources.GetString(\"foreColorPicker1.Items857\"),\n            resources.GetString(\"foreColorPicker1.Items858\"),\n            resources.GetString(\"foreColorPicker1.Items859\"),\n            resources.GetString(\"foreColorPicker1.Items860\"),\n            resources.GetString(\"foreColorPicker1.Items861\"),\n            resources.GetString(\"foreColorPicker1.Items862\"),\n            resources.GetString(\"foreColorPicker1.Items863\"),\n            resources.GetString(\"foreColorPicker1.Items864\"),\n            resources.GetString(\"foreColorPicker1.Items865\"),\n            resources.GetString(\"foreColorPicker1.Items866\"),\n            resources.GetString(\"foreColorPicker1.Items867\"),\n            resources.GetString(\"foreColorPicker1.Items868\"),\n            resources.GetString(\"foreColorPicker1.Items869\"),\n            resources.GetString(\"foreColorPicker1.Items870\"),\n            resources.GetString(\"foreColorPicker1.Items871\"),\n            resources.GetString(\"foreColorPicker1.Items872\"),\n            resources.GetString(\"foreColorPicker1.Items873\"),\n            resources.GetString(\"foreColorPicker1.Items874\"),\n            resources.GetString(\"foreColorPicker1.Items875\"),\n            resources.GetString(\"foreColorPicker1.Items876\"),\n            resources.GetString(\"foreColorPicker1.Items877\"),\n            resources.GetString(\"foreColorPicker1.Items878\"),\n            resources.GetString(\"foreColorPicker1.Items879\"),\n            resources.GetString(\"foreColorPicker1.Items880\"),\n            resources.GetString(\"foreColorPicker1.Items881\"),\n            resources.GetString(\"foreColorPicker1.Items882\"),\n            resources.GetString(\"foreColorPicker1.Items883\"),\n            resources.GetString(\"foreColorPicker1.Items884\"),\n            resources.GetString(\"foreColorPicker1.Items885\"),\n            resources.GetString(\"foreColorPicker1.Items886\"),\n            resources.GetString(\"foreColorPicker1.Items887\"),\n            resources.GetString(\"foreColorPicker1.Items888\"),\n            resources.GetString(\"foreColorPicker1.Items889\"),\n            resources.GetString(\"foreColorPicker1.Items890\"),\n            resources.GetString(\"foreColorPicker1.Items891\"),\n            resources.GetString(\"foreColorPicker1.Items892\"),\n            resources.GetString(\"foreColorPicker1.Items893\"),\n            resources.GetString(\"foreColorPicker1.Items894\"),\n            resources.GetString(\"foreColorPicker1.Items895\"),\n            resources.GetString(\"foreColorPicker1.Items896\"),\n            resources.GetString(\"foreColorPicker1.Items897\"),\n            resources.GetString(\"foreColorPicker1.Items898\"),\n            resources.GetString(\"foreColorPicker1.Items899\"),\n            resources.GetString(\"foreColorPicker1.Items900\"),\n            resources.GetString(\"foreColorPicker1.Items901\"),\n            resources.GetString(\"foreColorPicker1.Items902\"),\n            resources.GetString(\"foreColorPicker1.Items903\"),\n            resources.GetString(\"foreColorPicker1.Items904\"),\n            resources.GetString(\"foreColorPicker1.Items905\"),\n            resources.GetString(\"foreColorPicker1.Items906\"),\n            resources.GetString(\"foreColorPicker1.Items907\"),\n            resources.GetString(\"foreColorPicker1.Items908\"),\n            resources.GetString(\"foreColorPicker1.Items909\"),\n            resources.GetString(\"foreColorPicker1.Items910\"),\n            resources.GetString(\"foreColorPicker1.Items911\"),\n            resources.GetString(\"foreColorPicker1.Items912\"),\n            resources.GetString(\"foreColorPicker1.Items913\"),\n            resources.GetString(\"foreColorPicker1.Items914\"),\n            resources.GetString(\"foreColorPicker1.Items915\"),\n            resources.GetString(\"foreColorPicker1.Items916\"),\n            resources.GetString(\"foreColorPicker1.Items917\"),\n            resources.GetString(\"foreColorPicker1.Items918\"),\n            resources.GetString(\"foreColorPicker1.Items919\"),\n            resources.GetString(\"foreColorPicker1.Items920\"),\n            resources.GetString(\"foreColorPicker1.Items921\"),\n            resources.GetString(\"foreColorPicker1.Items922\"),\n            resources.GetString(\"foreColorPicker1.Items923\"),\n            resources.GetString(\"foreColorPicker1.Items924\"),\n            resources.GetString(\"foreColorPicker1.Items925\"),\n            resources.GetString(\"foreColorPicker1.Items926\"),\n            resources.GetString(\"foreColorPicker1.Items927\"),\n            resources.GetString(\"foreColorPicker1.Items928\"),\n            resources.GetString(\"foreColorPicker1.Items929\"),\n            resources.GetString(\"foreColorPicker1.Items930\"),\n            resources.GetString(\"foreColorPicker1.Items931\"),\n            resources.GetString(\"foreColorPicker1.Items932\"),\n            resources.GetString(\"foreColorPicker1.Items933\"),\n            resources.GetString(\"foreColorPicker1.Items934\"),\n            resources.GetString(\"foreColorPicker1.Items935\"),\n            resources.GetString(\"foreColorPicker1.Items936\"),\n            resources.GetString(\"foreColorPicker1.Items937\"),\n            resources.GetString(\"foreColorPicker1.Items938\"),\n            resources.GetString(\"foreColorPicker1.Items939\"),\n            resources.GetString(\"foreColorPicker1.Items940\"),\n            resources.GetString(\"foreColorPicker1.Items941\"),\n            resources.GetString(\"foreColorPicker1.Items942\"),\n            resources.GetString(\"foreColorPicker1.Items943\"),\n            resources.GetString(\"foreColorPicker1.Items944\"),\n            resources.GetString(\"foreColorPicker1.Items945\"),\n            resources.GetString(\"foreColorPicker1.Items946\"),\n            resources.GetString(\"foreColorPicker1.Items947\"),\n            resources.GetString(\"foreColorPicker1.Items948\"),\n            resources.GetString(\"foreColorPicker1.Items949\"),\n            resources.GetString(\"foreColorPicker1.Items950\"),\n            resources.GetString(\"foreColorPicker1.Items951\"),\n            resources.GetString(\"foreColorPicker1.Items952\"),\n            resources.GetString(\"foreColorPicker1.Items953\"),\n            resources.GetString(\"foreColorPicker1.Items954\"),\n            resources.GetString(\"foreColorPicker1.Items955\"),\n            resources.GetString(\"foreColorPicker1.Items956\"),\n            resources.GetString(\"foreColorPicker1.Items957\"),\n            resources.GetString(\"foreColorPicker1.Items958\"),\n            resources.GetString(\"foreColorPicker1.Items959\"),\n            resources.GetString(\"foreColorPicker1.Items960\"),\n            resources.GetString(\"foreColorPicker1.Items961\"),\n            resources.GetString(\"foreColorPicker1.Items962\"),\n            resources.GetString(\"foreColorPicker1.Items963\"),\n            resources.GetString(\"foreColorPicker1.Items964\"),\n            resources.GetString(\"foreColorPicker1.Items965\"),\n            resources.GetString(\"foreColorPicker1.Items966\"),\n            resources.GetString(\"foreColorPicker1.Items967\"),\n            resources.GetString(\"foreColorPicker1.Items968\"),\n            resources.GetString(\"foreColorPicker1.Items969\"),\n            resources.GetString(\"foreColorPicker1.Items970\"),\n            resources.GetString(\"foreColorPicker1.Items971\"),\n            resources.GetString(\"foreColorPicker1.Items972\"),\n            resources.GetString(\"foreColorPicker1.Items973\"),\n            resources.GetString(\"foreColorPicker1.Items974\"),\n            resources.GetString(\"foreColorPicker1.Items975\"),\n            resources.GetString(\"foreColorPicker1.Items976\"),\n            resources.GetString(\"foreColorPicker1.Items977\"),\n            resources.GetString(\"foreColorPicker1.Items978\"),\n            resources.GetString(\"foreColorPicker1.Items979\"),\n            resources.GetString(\"foreColorPicker1.Items980\"),\n            resources.GetString(\"foreColorPicker1.Items981\"),\n            resources.GetString(\"foreColorPicker1.Items982\"),\n            resources.GetString(\"foreColorPicker1.Items983\"),\n            resources.GetString(\"foreColorPicker1.Items984\"),\n            resources.GetString(\"foreColorPicker1.Items985\"),\n            resources.GetString(\"foreColorPicker1.Items986\"),\n            resources.GetString(\"foreColorPicker1.Items987\"),\n            resources.GetString(\"foreColorPicker1.Items988\"),\n            resources.GetString(\"foreColorPicker1.Items989\"),\n            resources.GetString(\"foreColorPicker1.Items990\"),\n            resources.GetString(\"foreColorPicker1.Items991\"),\n            resources.GetString(\"foreColorPicker1.Items992\"),\n            resources.GetString(\"foreColorPicker1.Items993\"),\n            resources.GetString(\"foreColorPicker1.Items994\"),\n            resources.GetString(\"foreColorPicker1.Items995\"),\n            resources.GetString(\"foreColorPicker1.Items996\"),\n            resources.GetString(\"foreColorPicker1.Items997\"),\n            resources.GetString(\"foreColorPicker1.Items998\"),\n            resources.GetString(\"foreColorPicker1.Items999\"),\n            resources.GetString(\"foreColorPicker1.Items1000\"),\n            resources.GetString(\"foreColorPicker1.Items1001\"),\n            resources.GetString(\"foreColorPicker1.Items1002\"),\n            resources.GetString(\"foreColorPicker1.Items1003\"),\n            resources.GetString(\"foreColorPicker1.Items1004\"),\n            resources.GetString(\"foreColorPicker1.Items1005\"),\n            resources.GetString(\"foreColorPicker1.Items1006\"),\n            resources.GetString(\"foreColorPicker1.Items1007\"),\n            resources.GetString(\"foreColorPicker1.Items1008\"),\n            resources.GetString(\"foreColorPicker1.Items1009\"),\n            resources.GetString(\"foreColorPicker1.Items1010\"),\n            resources.GetString(\"foreColorPicker1.Items1011\"),\n            resources.GetString(\"foreColorPicker1.Items1012\"),\n            resources.GetString(\"foreColorPicker1.Items1013\"),\n            resources.GetString(\"foreColorPicker1.Items1014\"),\n            resources.GetString(\"foreColorPicker1.Items1015\"),\n            resources.GetString(\"foreColorPicker1.Items1016\"),\n            resources.GetString(\"foreColorPicker1.Items1017\"),\n            resources.GetString(\"foreColorPicker1.Items1018\"),\n            resources.GetString(\"foreColorPicker1.Items1019\"),\n            resources.GetString(\"foreColorPicker1.Items1020\"),\n            resources.GetString(\"foreColorPicker1.Items1021\"),\n            resources.GetString(\"foreColorPicker1.Items1022\"),\n            resources.GetString(\"foreColorPicker1.Items1023\"),\n            resources.GetString(\"foreColorPicker1.Items1024\"),\n            resources.GetString(\"foreColorPicker1.Items1025\"),\n            resources.GetString(\"foreColorPicker1.Items1026\"),\n            resources.GetString(\"foreColorPicker1.Items1027\"),\n            resources.GetString(\"foreColorPicker1.Items1028\"),\n            resources.GetString(\"foreColorPicker1.Items1029\"),\n            resources.GetString(\"foreColorPicker1.Items1030\"),\n            resources.GetString(\"foreColorPicker1.Items1031\"),\n            resources.GetString(\"foreColorPicker1.Items1032\"),\n            resources.GetString(\"foreColorPicker1.Items1033\"),\n            resources.GetString(\"foreColorPicker1.Items1034\"),\n            resources.GetString(\"foreColorPicker1.Items1035\"),\n            resources.GetString(\"foreColorPicker1.Items1036\"),\n            resources.GetString(\"foreColorPicker1.Items1037\"),\n            resources.GetString(\"foreColorPicker1.Items1038\"),\n            resources.GetString(\"foreColorPicker1.Items1039\"),\n            resources.GetString(\"foreColorPicker1.Items1040\"),\n            resources.GetString(\"foreColorPicker1.Items1041\"),\n            resources.GetString(\"foreColorPicker1.Items1042\"),\n            resources.GetString(\"foreColorPicker1.Items1043\"),\n            resources.GetString(\"foreColorPicker1.Items1044\"),\n            resources.GetString(\"foreColorPicker1.Items1045\"),\n            resources.GetString(\"foreColorPicker1.Items1046\"),\n            resources.GetString(\"foreColorPicker1.Items1047\"),\n            resources.GetString(\"foreColorPicker1.Items1048\"),\n            resources.GetString(\"foreColorPicker1.Items1049\"),\n            resources.GetString(\"foreColorPicker1.Items1050\"),\n            resources.GetString(\"foreColorPicker1.Items1051\"),\n            resources.GetString(\"foreColorPicker1.Items1052\"),\n            resources.GetString(\"foreColorPicker1.Items1053\"),\n            resources.GetString(\"foreColorPicker1.Items1054\"),\n            resources.GetString(\"foreColorPicker1.Items1055\"),\n            resources.GetString(\"foreColorPicker1.Items1056\"),\n            resources.GetString(\"foreColorPicker1.Items1057\"),\n            resources.GetString(\"foreColorPicker1.Items1058\"),\n            resources.GetString(\"foreColorPicker1.Items1059\"),\n            resources.GetString(\"foreColorPicker1.Items1060\"),\n            resources.GetString(\"foreColorPicker1.Items1061\"),\n            resources.GetString(\"foreColorPicker1.Items1062\"),\n            resources.GetString(\"foreColorPicker1.Items1063\"),\n            resources.GetString(\"foreColorPicker1.Items1064\"),\n            resources.GetString(\"foreColorPicker1.Items1065\"),\n            resources.GetString(\"foreColorPicker1.Items1066\"),\n            resources.GetString(\"foreColorPicker1.Items1067\"),\n            resources.GetString(\"foreColorPicker1.Items1068\"),\n            resources.GetString(\"foreColorPicker1.Items1069\"),\n            resources.GetString(\"foreColorPicker1.Items1070\"),\n            resources.GetString(\"foreColorPicker1.Items1071\"),\n            resources.GetString(\"foreColorPicker1.Items1072\"),\n            resources.GetString(\"foreColorPicker1.Items1073\"),\n            resources.GetString(\"foreColorPicker1.Items1074\"),\n            resources.GetString(\"foreColorPicker1.Items1075\"),\n            resources.GetString(\"foreColorPicker1.Items1076\"),\n            resources.GetString(\"foreColorPicker1.Items1077\"),\n            resources.GetString(\"foreColorPicker1.Items1078\"),\n            resources.GetString(\"foreColorPicker1.Items1079\"),\n            resources.GetString(\"foreColorPicker1.Items1080\"),\n            resources.GetString(\"foreColorPicker1.Items1081\"),\n            resources.GetString(\"foreColorPicker1.Items1082\"),\n            resources.GetString(\"foreColorPicker1.Items1083\"),\n            resources.GetString(\"foreColorPicker1.Items1084\"),\n            resources.GetString(\"foreColorPicker1.Items1085\"),\n            resources.GetString(\"foreColorPicker1.Items1086\"),\n            resources.GetString(\"foreColorPicker1.Items1087\"),\n            resources.GetString(\"foreColorPicker1.Items1088\"),\n            resources.GetString(\"foreColorPicker1.Items1089\"),\n            resources.GetString(\"foreColorPicker1.Items1090\"),\n            resources.GetString(\"foreColorPicker1.Items1091\"),\n            resources.GetString(\"foreColorPicker1.Items1092\"),\n            resources.GetString(\"foreColorPicker1.Items1093\"),\n            resources.GetString(\"foreColorPicker1.Items1094\"),\n            resources.GetString(\"foreColorPicker1.Items1095\"),\n            resources.GetString(\"foreColorPicker1.Items1096\"),\n            resources.GetString(\"foreColorPicker1.Items1097\"),\n            resources.GetString(\"foreColorPicker1.Items1098\"),\n            resources.GetString(\"foreColorPicker1.Items1099\"),\n            resources.GetString(\"foreColorPicker1.Items1100\"),\n            resources.GetString(\"foreColorPicker1.Items1101\"),\n            resources.GetString(\"foreColorPicker1.Items1102\"),\n            resources.GetString(\"foreColorPicker1.Items1103\"),\n            resources.GetString(\"foreColorPicker1.Items1104\"),\n            resources.GetString(\"foreColorPicker1.Items1105\"),\n            resources.GetString(\"foreColorPicker1.Items1106\"),\n            resources.GetString(\"foreColorPicker1.Items1107\"),\n            resources.GetString(\"foreColorPicker1.Items1108\"),\n            resources.GetString(\"foreColorPicker1.Items1109\"),\n            resources.GetString(\"foreColorPicker1.Items1110\"),\n            resources.GetString(\"foreColorPicker1.Items1111\"),\n            resources.GetString(\"foreColorPicker1.Items1112\"),\n            resources.GetString(\"foreColorPicker1.Items1113\"),\n            resources.GetString(\"foreColorPicker1.Items1114\"),\n            resources.GetString(\"foreColorPicker1.Items1115\"),\n            resources.GetString(\"foreColorPicker1.Items1116\"),\n            resources.GetString(\"foreColorPicker1.Items1117\"),\n            resources.GetString(\"foreColorPicker1.Items1118\"),\n            resources.GetString(\"foreColorPicker1.Items1119\"),\n            resources.GetString(\"foreColorPicker1.Items1120\"),\n            resources.GetString(\"foreColorPicker1.Items1121\"),\n            resources.GetString(\"foreColorPicker1.Items1122\"),\n            resources.GetString(\"foreColorPicker1.Items1123\"),\n            resources.GetString(\"foreColorPicker1.Items1124\"),\n            resources.GetString(\"foreColorPicker1.Items1125\"),\n            resources.GetString(\"foreColorPicker1.Items1126\"),\n            resources.GetString(\"foreColorPicker1.Items1127\"),\n            resources.GetString(\"foreColorPicker1.Items1128\"),\n            resources.GetString(\"foreColorPicker1.Items1129\"),\n            resources.GetString(\"foreColorPicker1.Items1130\"),\n            resources.GetString(\"foreColorPicker1.Items1131\"),\n            resources.GetString(\"foreColorPicker1.Items1132\"),\n            resources.GetString(\"foreColorPicker1.Items1133\"),\n            resources.GetString(\"foreColorPicker1.Items1134\"),\n            resources.GetString(\"foreColorPicker1.Items1135\"),\n            resources.GetString(\"foreColorPicker1.Items1136\"),\n            resources.GetString(\"foreColorPicker1.Items1137\"),\n            resources.GetString(\"foreColorPicker1.Items1138\"),\n            resources.GetString(\"foreColorPicker1.Items1139\"),\n            resources.GetString(\"foreColorPicker1.Items1140\"),\n            resources.GetString(\"foreColorPicker1.Items1141\"),\n            resources.GetString(\"foreColorPicker1.Items1142\"),\n            resources.GetString(\"foreColorPicker1.Items1143\"),\n            resources.GetString(\"foreColorPicker1.Items1144\"),\n            resources.GetString(\"foreColorPicker1.Items1145\"),\n            resources.GetString(\"foreColorPicker1.Items1146\"),\n            resources.GetString(\"foreColorPicker1.Items1147\"),\n            resources.GetString(\"foreColorPicker1.Items1148\"),\n            resources.GetString(\"foreColorPicker1.Items1149\"),\n            resources.GetString(\"foreColorPicker1.Items1150\"),\n            resources.GetString(\"foreColorPicker1.Items1151\"),\n            resources.GetString(\"foreColorPicker1.Items1152\"),\n            resources.GetString(\"foreColorPicker1.Items1153\"),\n            resources.GetString(\"foreColorPicker1.Items1154\"),\n            resources.GetString(\"foreColorPicker1.Items1155\"),\n            resources.GetString(\"foreColorPicker1.Items1156\"),\n            resources.GetString(\"foreColorPicker1.Items1157\"),\n            resources.GetString(\"foreColorPicker1.Items1158\"),\n            resources.GetString(\"foreColorPicker1.Items1159\"),\n            resources.GetString(\"foreColorPicker1.Items1160\"),\n            resources.GetString(\"foreColorPicker1.Items1161\"),\n            resources.GetString(\"foreColorPicker1.Items1162\"),\n            resources.GetString(\"foreColorPicker1.Items1163\"),\n            resources.GetString(\"foreColorPicker1.Items1164\"),\n            resources.GetString(\"foreColorPicker1.Items1165\"),\n            resources.GetString(\"foreColorPicker1.Items1166\"),\n            resources.GetString(\"foreColorPicker1.Items1167\"),\n            resources.GetString(\"foreColorPicker1.Items1168\"),\n            resources.GetString(\"foreColorPicker1.Items1169\"),\n            resources.GetString(\"foreColorPicker1.Items1170\"),\n            resources.GetString(\"foreColorPicker1.Items1171\"),\n            resources.GetString(\"foreColorPicker1.Items1172\"),\n            resources.GetString(\"foreColorPicker1.Items1173\"),\n            resources.GetString(\"foreColorPicker1.Items1174\"),\n            resources.GetString(\"foreColorPicker1.Items1175\"),\n            resources.GetString(\"foreColorPicker1.Items1176\"),\n            resources.GetString(\"foreColorPicker1.Items1177\"),\n            resources.GetString(\"foreColorPicker1.Items1178\"),\n            resources.GetString(\"foreColorPicker1.Items1179\"),\n            resources.GetString(\"foreColorPicker1.Items1180\"),\n            resources.GetString(\"foreColorPicker1.Items1181\"),\n            resources.GetString(\"foreColorPicker1.Items1182\"),\n            resources.GetString(\"foreColorPicker1.Items1183\"),\n            resources.GetString(\"foreColorPicker1.Items1184\"),\n            resources.GetString(\"foreColorPicker1.Items1185\"),\n            resources.GetString(\"foreColorPicker1.Items1186\"),\n            resources.GetString(\"foreColorPicker1.Items1187\"),\n            resources.GetString(\"foreColorPicker1.Items1188\"),\n            resources.GetString(\"foreColorPicker1.Items1189\"),\n            resources.GetString(\"foreColorPicker1.Items1190\"),\n            resources.GetString(\"foreColorPicker1.Items1191\"),\n            resources.GetString(\"foreColorPicker1.Items1192\"),\n            resources.GetString(\"foreColorPicker1.Items1193\"),\n            resources.GetString(\"foreColorPicker1.Items1194\"),\n            resources.GetString(\"foreColorPicker1.Items1195\"),\n            resources.GetString(\"foreColorPicker1.Items1196\"),\n            resources.GetString(\"foreColorPicker1.Items1197\"),\n            resources.GetString(\"foreColorPicker1.Items1198\"),\n            resources.GetString(\"foreColorPicker1.Items1199\"),\n            resources.GetString(\"foreColorPicker1.Items1200\"),\n            resources.GetString(\"foreColorPicker1.Items1201\"),\n            resources.GetString(\"foreColorPicker1.Items1202\"),\n            resources.GetString(\"foreColorPicker1.Items1203\"),\n            resources.GetString(\"foreColorPicker1.Items1204\"),\n            resources.GetString(\"foreColorPicker1.Items1205\"),\n            resources.GetString(\"foreColorPicker1.Items1206\"),\n            resources.GetString(\"foreColorPicker1.Items1207\"),\n            resources.GetString(\"foreColorPicker1.Items1208\"),\n            resources.GetString(\"foreColorPicker1.Items1209\"),\n            resources.GetString(\"foreColorPicker1.Items1210\"),\n            resources.GetString(\"foreColorPicker1.Items1211\"),\n            resources.GetString(\"foreColorPicker1.Items1212\"),\n            resources.GetString(\"foreColorPicker1.Items1213\"),\n            resources.GetString(\"foreColorPicker1.Items1214\"),\n            resources.GetString(\"foreColorPicker1.Items1215\"),\n            resources.GetString(\"foreColorPicker1.Items1216\"),\n            resources.GetString(\"foreColorPicker1.Items1217\"),\n            resources.GetString(\"foreColorPicker1.Items1218\"),\n            resources.GetString(\"foreColorPicker1.Items1219\"),\n            resources.GetString(\"foreColorPicker1.Items1220\"),\n            resources.GetString(\"foreColorPicker1.Items1221\"),\n            resources.GetString(\"foreColorPicker1.Items1222\"),\n            resources.GetString(\"foreColorPicker1.Items1223\"),\n            resources.GetString(\"foreColorPicker1.Items1224\"),\n            resources.GetString(\"foreColorPicker1.Items1225\"),\n            resources.GetString(\"foreColorPicker1.Items1226\"),\n            resources.GetString(\"foreColorPicker1.Items1227\"),\n            resources.GetString(\"foreColorPicker1.Items1228\"),\n            resources.GetString(\"foreColorPicker1.Items1229\"),\n            resources.GetString(\"foreColorPicker1.Items1230\"),\n            resources.GetString(\"foreColorPicker1.Items1231\"),\n            resources.GetString(\"foreColorPicker1.Items1232\"),\n            resources.GetString(\"foreColorPicker1.Items1233\"),\n            resources.GetString(\"foreColorPicker1.Items1234\"),\n            resources.GetString(\"foreColorPicker1.Items1235\"),\n            resources.GetString(\"foreColorPicker1.Items1236\"),\n            resources.GetString(\"foreColorPicker1.Items1237\"),\n            resources.GetString(\"foreColorPicker1.Items1238\"),\n            resources.GetString(\"foreColorPicker1.Items1239\"),\n            resources.GetString(\"foreColorPicker1.Items1240\"),\n            resources.GetString(\"foreColorPicker1.Items1241\"),\n            resources.GetString(\"foreColorPicker1.Items1242\"),\n            resources.GetString(\"foreColorPicker1.Items1243\"),\n            resources.GetString(\"foreColorPicker1.Items1244\"),\n            resources.GetString(\"foreColorPicker1.Items1245\"),\n            resources.GetString(\"foreColorPicker1.Items1246\"),\n            resources.GetString(\"foreColorPicker1.Items1247\"),\n            resources.GetString(\"foreColorPicker1.Items1248\"),\n            resources.GetString(\"foreColorPicker1.Items1249\"),\n            resources.GetString(\"foreColorPicker1.Items1250\"),\n            resources.GetString(\"foreColorPicker1.Items1251\"),\n            resources.GetString(\"foreColorPicker1.Items1252\"),\n            resources.GetString(\"foreColorPicker1.Items1253\"),\n            resources.GetString(\"foreColorPicker1.Items1254\"),\n            resources.GetString(\"foreColorPicker1.Items1255\"),\n            resources.GetString(\"foreColorPicker1.Items1256\"),\n            resources.GetString(\"foreColorPicker1.Items1257\"),\n            resources.GetString(\"foreColorPicker1.Items1258\"),\n            resources.GetString(\"foreColorPicker1.Items1259\"),\n            resources.GetString(\"foreColorPicker1.Items1260\"),\n            resources.GetString(\"foreColorPicker1.Items1261\"),\n            resources.GetString(\"foreColorPicker1.Items1262\"),\n            resources.GetString(\"foreColorPicker1.Items1263\"),\n            resources.GetString(\"foreColorPicker1.Items1264\"),\n            resources.GetString(\"foreColorPicker1.Items1265\"),\n            resources.GetString(\"foreColorPicker1.Items1266\"),\n            resources.GetString(\"foreColorPicker1.Items1267\"),\n            resources.GetString(\"foreColorPicker1.Items1268\"),\n            resources.GetString(\"foreColorPicker1.Items1269\"),\n            resources.GetString(\"foreColorPicker1.Items1270\"),\n            resources.GetString(\"foreColorPicker1.Items1271\"),\n            resources.GetString(\"foreColorPicker1.Items1272\"),\n            resources.GetString(\"foreColorPicker1.Items1273\"),\n            resources.GetString(\"foreColorPicker1.Items1274\"),\n            resources.GetString(\"foreColorPicker1.Items1275\"),\n            resources.GetString(\"foreColorPicker1.Items1276\"),\n            resources.GetString(\"foreColorPicker1.Items1277\"),\n            resources.GetString(\"foreColorPicker1.Items1278\"),\n            resources.GetString(\"foreColorPicker1.Items1279\"),\n            resources.GetString(\"foreColorPicker1.Items1280\"),\n            resources.GetString(\"foreColorPicker1.Items1281\"),\n            resources.GetString(\"foreColorPicker1.Items1282\"),\n            resources.GetString(\"foreColorPicker1.Items1283\"),\n            resources.GetString(\"foreColorPicker1.Items1284\"),\n            resources.GetString(\"foreColorPicker1.Items1285\"),\n            resources.GetString(\"foreColorPicker1.Items1286\"),\n            resources.GetString(\"foreColorPicker1.Items1287\"),\n            resources.GetString(\"foreColorPicker1.Items1288\"),\n            resources.GetString(\"foreColorPicker1.Items1289\"),\n            resources.GetString(\"foreColorPicker1.Items1290\"),\n            resources.GetString(\"foreColorPicker1.Items1291\"),\n            resources.GetString(\"foreColorPicker1.Items1292\"),\n            resources.GetString(\"foreColorPicker1.Items1293\"),\n            resources.GetString(\"foreColorPicker1.Items1294\"),\n            resources.GetString(\"foreColorPicker1.Items1295\"),\n            resources.GetString(\"foreColorPicker1.Items1296\"),\n            resources.GetString(\"foreColorPicker1.Items1297\"),\n            resources.GetString(\"foreColorPicker1.Items1298\"),\n            resources.GetString(\"foreColorPicker1.Items1299\"),\n            resources.GetString(\"foreColorPicker1.Items1300\"),\n            resources.GetString(\"foreColorPicker1.Items1301\"),\n            resources.GetString(\"foreColorPicker1.Items1302\"),\n            resources.GetString(\"foreColorPicker1.Items1303\"),\n            resources.GetString(\"foreColorPicker1.Items1304\"),\n            resources.GetString(\"foreColorPicker1.Items1305\"),\n            resources.GetString(\"foreColorPicker1.Items1306\"),\n            resources.GetString(\"foreColorPicker1.Items1307\"),\n            resources.GetString(\"foreColorPicker1.Items1308\"),\n            resources.GetString(\"foreColorPicker1.Items1309\"),\n            resources.GetString(\"foreColorPicker1.Items1310\"),\n            resources.GetString(\"foreColorPicker1.Items1311\"),\n            resources.GetString(\"foreColorPicker1.Items1312\"),\n            resources.GetString(\"foreColorPicker1.Items1313\"),\n            resources.GetString(\"foreColorPicker1.Items1314\"),\n            resources.GetString(\"foreColorPicker1.Items1315\"),\n            resources.GetString(\"foreColorPicker1.Items1316\"),\n            resources.GetString(\"foreColorPicker1.Items1317\"),\n            resources.GetString(\"foreColorPicker1.Items1318\"),\n            resources.GetString(\"foreColorPicker1.Items1319\"),\n            resources.GetString(\"foreColorPicker1.Items1320\"),\n            resources.GetString(\"foreColorPicker1.Items1321\"),\n            resources.GetString(\"foreColorPicker1.Items1322\"),\n            resources.GetString(\"foreColorPicker1.Items1323\"),\n            resources.GetString(\"foreColorPicker1.Items1324\"),\n            resources.GetString(\"foreColorPicker1.Items1325\"),\n            resources.GetString(\"foreColorPicker1.Items1326\"),\n            resources.GetString(\"foreColorPicker1.Items1327\"),\n            resources.GetString(\"foreColorPicker1.Items1328\"),\n            resources.GetString(\"foreColorPicker1.Items1329\"),\n            resources.GetString(\"foreColorPicker1.Items1330\"),\n            resources.GetString(\"foreColorPicker1.Items1331\"),\n            resources.GetString(\"foreColorPicker1.Items1332\"),\n            resources.GetString(\"foreColorPicker1.Items1333\"),\n            resources.GetString(\"foreColorPicker1.Items1334\"),\n            resources.GetString(\"foreColorPicker1.Items1335\"),\n            resources.GetString(\"foreColorPicker1.Items1336\"),\n            resources.GetString(\"foreColorPicker1.Items1337\"),\n            resources.GetString(\"foreColorPicker1.Items1338\"),\n            resources.GetString(\"foreColorPicker1.Items1339\"),\n            resources.GetString(\"foreColorPicker1.Items1340\"),\n            resources.GetString(\"foreColorPicker1.Items1341\"),\n            resources.GetString(\"foreColorPicker1.Items1342\"),\n            resources.GetString(\"foreColorPicker1.Items1343\"),\n            resources.GetString(\"foreColorPicker1.Items1344\"),\n            resources.GetString(\"foreColorPicker1.Items1345\"),\n            resources.GetString(\"foreColorPicker1.Items1346\"),\n            resources.GetString(\"foreColorPicker1.Items1347\"),\n            resources.GetString(\"foreColorPicker1.Items1348\"),\n            resources.GetString(\"foreColorPicker1.Items1349\"),\n            resources.GetString(\"foreColorPicker1.Items1350\"),\n            resources.GetString(\"foreColorPicker1.Items1351\"),\n            resources.GetString(\"foreColorPicker1.Items1352\"),\n            resources.GetString(\"foreColorPicker1.Items1353\"),\n            resources.GetString(\"foreColorPicker1.Items1354\"),\n            resources.GetString(\"foreColorPicker1.Items1355\"),\n            resources.GetString(\"foreColorPicker1.Items1356\"),\n            resources.GetString(\"foreColorPicker1.Items1357\"),\n            resources.GetString(\"foreColorPicker1.Items1358\"),\n            resources.GetString(\"foreColorPicker1.Items1359\"),\n            resources.GetString(\"foreColorPicker1.Items1360\"),\n            resources.GetString(\"foreColorPicker1.Items1361\"),\n            resources.GetString(\"foreColorPicker1.Items1362\"),\n            resources.GetString(\"foreColorPicker1.Items1363\"),\n            resources.GetString(\"foreColorPicker1.Items1364\"),\n            resources.GetString(\"foreColorPicker1.Items1365\"),\n            resources.GetString(\"foreColorPicker1.Items1366\"),\n            resources.GetString(\"foreColorPicker1.Items1367\"),\n            resources.GetString(\"foreColorPicker1.Items1368\"),\n            resources.GetString(\"foreColorPicker1.Items1369\"),\n            resources.GetString(\"foreColorPicker1.Items1370\"),\n            resources.GetString(\"foreColorPicker1.Items1371\"),\n            resources.GetString(\"foreColorPicker1.Items1372\"),\n            resources.GetString(\"foreColorPicker1.Items1373\"),\n            resources.GetString(\"foreColorPicker1.Items1374\"),\n            resources.GetString(\"foreColorPicker1.Items1375\"),\n            resources.GetString(\"foreColorPicker1.Items1376\"),\n            resources.GetString(\"foreColorPicker1.Items1377\"),\n            resources.GetString(\"foreColorPicker1.Items1378\"),\n            resources.GetString(\"foreColorPicker1.Items1379\"),\n            resources.GetString(\"foreColorPicker1.Items1380\"),\n            resources.GetString(\"foreColorPicker1.Items1381\"),\n            resources.GetString(\"foreColorPicker1.Items1382\"),\n            resources.GetString(\"foreColorPicker1.Items1383\"),\n            resources.GetString(\"foreColorPicker1.Items1384\"),\n            resources.GetString(\"foreColorPicker1.Items1385\"),\n            resources.GetString(\"foreColorPicker1.Items1386\"),\n            resources.GetString(\"foreColorPicker1.Items1387\"),\n            resources.GetString(\"foreColorPicker1.Items1388\"),\n            resources.GetString(\"foreColorPicker1.Items1389\"),\n            resources.GetString(\"foreColorPicker1.Items1390\"),\n            resources.GetString(\"foreColorPicker1.Items1391\"),\n            resources.GetString(\"foreColorPicker1.Items1392\"),\n            resources.GetString(\"foreColorPicker1.Items1393\"),\n            resources.GetString(\"foreColorPicker1.Items1394\"),\n            resources.GetString(\"foreColorPicker1.Items1395\"),\n            resources.GetString(\"foreColorPicker1.Items1396\"),\n            resources.GetString(\"foreColorPicker1.Items1397\"),\n            resources.GetString(\"foreColorPicker1.Items1398\"),\n            resources.GetString(\"foreColorPicker1.Items1399\"),\n            resources.GetString(\"foreColorPicker1.Items1400\"),\n            resources.GetString(\"foreColorPicker1.Items1401\"),\n            resources.GetString(\"foreColorPicker1.Items1402\"),\n            resources.GetString(\"foreColorPicker1.Items1403\"),\n            resources.GetString(\"foreColorPicker1.Items1404\"),\n            resources.GetString(\"foreColorPicker1.Items1405\"),\n            resources.GetString(\"foreColorPicker1.Items1406\"),\n            resources.GetString(\"foreColorPicker1.Items1407\"),\n            resources.GetString(\"foreColorPicker1.Items1408\"),\n            resources.GetString(\"foreColorPicker1.Items1409\"),\n            resources.GetString(\"foreColorPicker1.Items1410\"),\n            resources.GetString(\"foreColorPicker1.Items1411\"),\n            resources.GetString(\"foreColorPicker1.Items1412\"),\n            resources.GetString(\"foreColorPicker1.Items1413\"),\n            resources.GetString(\"foreColorPicker1.Items1414\"),\n            resources.GetString(\"foreColorPicker1.Items1415\"),\n            resources.GetString(\"foreColorPicker1.Items1416\"),\n            resources.GetString(\"foreColorPicker1.Items1417\"),\n            resources.GetString(\"foreColorPicker1.Items1418\"),\n            resources.GetString(\"foreColorPicker1.Items1419\"),\n            resources.GetString(\"foreColorPicker1.Items1420\"),\n            resources.GetString(\"foreColorPicker1.Items1421\"),\n            resources.GetString(\"foreColorPicker1.Items1422\"),\n            resources.GetString(\"foreColorPicker1.Items1423\"),\n            resources.GetString(\"foreColorPicker1.Items1424\"),\n            resources.GetString(\"foreColorPicker1.Items1425\"),\n            resources.GetString(\"foreColorPicker1.Items1426\"),\n            resources.GetString(\"foreColorPicker1.Items1427\"),\n            resources.GetString(\"foreColorPicker1.Items1428\"),\n            resources.GetString(\"foreColorPicker1.Items1429\"),\n            resources.GetString(\"foreColorPicker1.Items1430\"),\n            resources.GetString(\"foreColorPicker1.Items1431\"),\n            resources.GetString(\"foreColorPicker1.Items1432\"),\n            resources.GetString(\"foreColorPicker1.Items1433\"),\n            resources.GetString(\"foreColorPicker1.Items1434\"),\n            resources.GetString(\"foreColorPicker1.Items1435\"),\n            resources.GetString(\"foreColorPicker1.Items1436\"),\n            resources.GetString(\"foreColorPicker1.Items1437\"),\n            resources.GetString(\"foreColorPicker1.Items1438\"),\n            resources.GetString(\"foreColorPicker1.Items1439\"),\n            resources.GetString(\"foreColorPicker1.Items1440\"),\n            resources.GetString(\"foreColorPicker1.Items1441\"),\n            resources.GetString(\"foreColorPicker1.Items1442\"),\n            resources.GetString(\"foreColorPicker1.Items1443\"),\n            resources.GetString(\"foreColorPicker1.Items1444\"),\n            resources.GetString(\"foreColorPicker1.Items1445\"),\n            resources.GetString(\"foreColorPicker1.Items1446\"),\n            resources.GetString(\"foreColorPicker1.Items1447\"),\n            resources.GetString(\"foreColorPicker1.Items1448\"),\n            resources.GetString(\"foreColorPicker1.Items1449\"),\n            resources.GetString(\"foreColorPicker1.Items1450\"),\n            resources.GetString(\"foreColorPicker1.Items1451\"),\n            resources.GetString(\"foreColorPicker1.Items1452\"),\n            resources.GetString(\"foreColorPicker1.Items1453\"),\n            resources.GetString(\"foreColorPicker1.Items1454\"),\n            resources.GetString(\"foreColorPicker1.Items1455\"),\n            resources.GetString(\"foreColorPicker1.Items1456\"),\n            resources.GetString(\"foreColorPicker1.Items1457\"),\n            resources.GetString(\"foreColorPicker1.Items1458\"),\n            resources.GetString(\"foreColorPicker1.Items1459\"),\n            resources.GetString(\"foreColorPicker1.Items1460\"),\n            resources.GetString(\"foreColorPicker1.Items1461\"),\n            resources.GetString(\"foreColorPicker1.Items1462\"),\n            resources.GetString(\"foreColorPicker1.Items1463\"),\n            resources.GetString(\"foreColorPicker1.Items1464\"),\n            resources.GetString(\"foreColorPicker1.Items1465\"),\n            resources.GetString(\"foreColorPicker1.Items1466\"),\n            resources.GetString(\"foreColorPicker1.Items1467\"),\n            resources.GetString(\"foreColorPicker1.Items1468\"),\n            resources.GetString(\"foreColorPicker1.Items1469\"),\n            resources.GetString(\"foreColorPicker1.Items1470\"),\n            resources.GetString(\"foreColorPicker1.Items1471\"),\n            resources.GetString(\"foreColorPicker1.Items1472\"),\n            resources.GetString(\"foreColorPicker1.Items1473\"),\n            resources.GetString(\"foreColorPicker1.Items1474\"),\n            resources.GetString(\"foreColorPicker1.Items1475\"),\n            resources.GetString(\"foreColorPicker1.Items1476\"),\n            resources.GetString(\"foreColorPicker1.Items1477\"),\n            resources.GetString(\"foreColorPicker1.Items1478\"),\n            resources.GetString(\"foreColorPicker1.Items1479\"),\n            resources.GetString(\"foreColorPicker1.Items1480\"),\n            resources.GetString(\"foreColorPicker1.Items1481\"),\n            resources.GetString(\"foreColorPicker1.Items1482\"),\n            resources.GetString(\"foreColorPicker1.Items1483\"),\n            resources.GetString(\"foreColorPicker1.Items1484\"),\n            resources.GetString(\"foreColorPicker1.Items1485\"),\n            resources.GetString(\"foreColorPicker1.Items1486\"),\n            resources.GetString(\"foreColorPicker1.Items1487\"),\n            resources.GetString(\"foreColorPicker1.Items1488\"),\n            resources.GetString(\"foreColorPicker1.Items1489\"),\n            resources.GetString(\"foreColorPicker1.Items1490\"),\n            resources.GetString(\"foreColorPicker1.Items1491\"),\n            resources.GetString(\"foreColorPicker1.Items1492\"),\n            resources.GetString(\"foreColorPicker1.Items1493\"),\n            resources.GetString(\"foreColorPicker1.Items1494\"),\n            resources.GetString(\"foreColorPicker1.Items1495\"),\n            resources.GetString(\"foreColorPicker1.Items1496\"),\n            resources.GetString(\"foreColorPicker1.Items1497\"),\n            resources.GetString(\"foreColorPicker1.Items1498\"),\n            resources.GetString(\"foreColorPicker1.Items1499\"),\n            resources.GetString(\"foreColorPicker1.Items1500\"),\n            resources.GetString(\"foreColorPicker1.Items1501\"),\n            resources.GetString(\"foreColorPicker1.Items1502\"),\n            resources.GetString(\"foreColorPicker1.Items1503\"),\n            resources.GetString(\"foreColorPicker1.Items1504\"),\n            resources.GetString(\"foreColorPicker1.Items1505\"),\n            resources.GetString(\"foreColorPicker1.Items1506\"),\n            resources.GetString(\"foreColorPicker1.Items1507\"),\n            resources.GetString(\"foreColorPicker1.Items1508\"),\n            resources.GetString(\"foreColorPicker1.Items1509\"),\n            resources.GetString(\"foreColorPicker1.Items1510\"),\n            resources.GetString(\"foreColorPicker1.Items1511\"),\n            resources.GetString(\"foreColorPicker1.Items1512\"),\n            resources.GetString(\"foreColorPicker1.Items1513\"),\n            resources.GetString(\"foreColorPicker1.Items1514\"),\n            resources.GetString(\"foreColorPicker1.Items1515\"),\n            resources.GetString(\"foreColorPicker1.Items1516\"),\n            resources.GetString(\"foreColorPicker1.Items1517\"),\n            resources.GetString(\"foreColorPicker1.Items1518\"),\n            resources.GetString(\"foreColorPicker1.Items1519\"),\n            resources.GetString(\"foreColorPicker1.Items1520\"),\n            resources.GetString(\"foreColorPicker1.Items1521\"),\n            resources.GetString(\"foreColorPicker1.Items1522\"),\n            resources.GetString(\"foreColorPicker1.Items1523\"),\n            resources.GetString(\"foreColorPicker1.Items1524\"),\n            resources.GetString(\"foreColorPicker1.Items1525\"),\n            resources.GetString(\"foreColorPicker1.Items1526\"),\n            resources.GetString(\"foreColorPicker1.Items1527\"),\n            resources.GetString(\"foreColorPicker1.Items1528\"),\n            resources.GetString(\"foreColorPicker1.Items1529\"),\n            resources.GetString(\"foreColorPicker1.Items1530\"),\n            resources.GetString(\"foreColorPicker1.Items1531\"),\n            resources.GetString(\"foreColorPicker1.Items1532\"),\n            resources.GetString(\"foreColorPicker1.Items1533\"),\n            resources.GetString(\"foreColorPicker1.Items1534\"),\n            resources.GetString(\"foreColorPicker1.Items1535\"),\n            resources.GetString(\"foreColorPicker1.Items1536\"),\n            resources.GetString(\"foreColorPicker1.Items1537\"),\n            resources.GetString(\"foreColorPicker1.Items1538\"),\n            resources.GetString(\"foreColorPicker1.Items1539\"),\n            resources.GetString(\"foreColorPicker1.Items1540\"),\n            resources.GetString(\"foreColorPicker1.Items1541\"),\n            resources.GetString(\"foreColorPicker1.Items1542\"),\n            resources.GetString(\"foreColorPicker1.Items1543\"),\n            resources.GetString(\"foreColorPicker1.Items1544\"),\n            resources.GetString(\"foreColorPicker1.Items1545\"),\n            resources.GetString(\"foreColorPicker1.Items1546\"),\n            resources.GetString(\"foreColorPicker1.Items1547\"),\n            resources.GetString(\"foreColorPicker1.Items1548\"),\n            resources.GetString(\"foreColorPicker1.Items1549\"),\n            resources.GetString(\"foreColorPicker1.Items1550\"),\n            resources.GetString(\"foreColorPicker1.Items1551\"),\n            resources.GetString(\"foreColorPicker1.Items1552\"),\n            resources.GetString(\"foreColorPicker1.Items1553\"),\n            resources.GetString(\"foreColorPicker1.Items1554\"),\n            resources.GetString(\"foreColorPicker1.Items1555\"),\n            resources.GetString(\"foreColorPicker1.Items1556\"),\n            resources.GetString(\"foreColorPicker1.Items1557\"),\n            resources.GetString(\"foreColorPicker1.Items1558\"),\n            resources.GetString(\"foreColorPicker1.Items1559\"),\n            resources.GetString(\"foreColorPicker1.Items1560\"),\n            resources.GetString(\"foreColorPicker1.Items1561\"),\n            resources.GetString(\"foreColorPicker1.Items1562\"),\n            resources.GetString(\"foreColorPicker1.Items1563\"),\n            resources.GetString(\"foreColorPicker1.Items1564\"),\n            resources.GetString(\"foreColorPicker1.Items1565\"),\n            resources.GetString(\"foreColorPicker1.Items1566\"),\n            resources.GetString(\"foreColorPicker1.Items1567\"),\n            resources.GetString(\"foreColorPicker1.Items1568\"),\n            resources.GetString(\"foreColorPicker1.Items1569\"),\n            resources.GetString(\"foreColorPicker1.Items1570\"),\n            resources.GetString(\"foreColorPicker1.Items1571\"),\n            resources.GetString(\"foreColorPicker1.Items1572\"),\n            resources.GetString(\"foreColorPicker1.Items1573\"),\n            resources.GetString(\"foreColorPicker1.Items1574\"),\n            resources.GetString(\"foreColorPicker1.Items1575\"),\n            resources.GetString(\"foreColorPicker1.Items1576\"),\n            resources.GetString(\"foreColorPicker1.Items1577\"),\n            resources.GetString(\"foreColorPicker1.Items1578\"),\n            resources.GetString(\"foreColorPicker1.Items1579\"),\n            resources.GetString(\"foreColorPicker1.Items1580\"),\n            resources.GetString(\"foreColorPicker1.Items1581\"),\n            resources.GetString(\"foreColorPicker1.Items1582\"),\n            resources.GetString(\"foreColorPicker1.Items1583\"),\n            resources.GetString(\"foreColorPicker1.Items1584\"),\n            resources.GetString(\"foreColorPicker1.Items1585\"),\n            resources.GetString(\"foreColorPicker1.Items1586\"),\n            resources.GetString(\"foreColorPicker1.Items1587\"),\n            resources.GetString(\"foreColorPicker1.Items1588\"),\n            resources.GetString(\"foreColorPicker1.Items1589\"),\n            resources.GetString(\"foreColorPicker1.Items1590\"),\n            resources.GetString(\"foreColorPicker1.Items1591\"),\n            resources.GetString(\"foreColorPicker1.Items1592\"),\n            resources.GetString(\"foreColorPicker1.Items1593\"),\n            resources.GetString(\"foreColorPicker1.Items1594\"),\n            resources.GetString(\"foreColorPicker1.Items1595\"),\n            resources.GetString(\"foreColorPicker1.Items1596\"),\n            resources.GetString(\"foreColorPicker1.Items1597\"),\n            resources.GetString(\"foreColorPicker1.Items1598\"),\n            resources.GetString(\"foreColorPicker1.Items1599\"),\n            resources.GetString(\"foreColorPicker1.Items1600\"),\n            resources.GetString(\"foreColorPicker1.Items1601\"),\n            resources.GetString(\"foreColorPicker1.Items1602\"),\n            resources.GetString(\"foreColorPicker1.Items1603\"),\n            resources.GetString(\"foreColorPicker1.Items1604\"),\n            resources.GetString(\"foreColorPicker1.Items1605\"),\n            resources.GetString(\"foreColorPicker1.Items1606\"),\n            resources.GetString(\"foreColorPicker1.Items1607\"),\n            resources.GetString(\"foreColorPicker1.Items1608\"),\n            resources.GetString(\"foreColorPicker1.Items1609\"),\n            resources.GetString(\"foreColorPicker1.Items1610\"),\n            resources.GetString(\"foreColorPicker1.Items1611\"),\n            resources.GetString(\"foreColorPicker1.Items1612\"),\n            resources.GetString(\"foreColorPicker1.Items1613\"),\n            resources.GetString(\"foreColorPicker1.Items1614\"),\n            resources.GetString(\"foreColorPicker1.Items1615\"),\n            resources.GetString(\"foreColorPicker1.Items1616\"),\n            resources.GetString(\"foreColorPicker1.Items1617\"),\n            resources.GetString(\"foreColorPicker1.Items1618\"),\n            resources.GetString(\"foreColorPicker1.Items1619\"),\n            resources.GetString(\"foreColorPicker1.Items1620\"),\n            resources.GetString(\"foreColorPicker1.Items1621\"),\n            resources.GetString(\"foreColorPicker1.Items1622\"),\n            resources.GetString(\"foreColorPicker1.Items1623\"),\n            resources.GetString(\"foreColorPicker1.Items1624\"),\n            resources.GetString(\"foreColorPicker1.Items1625\"),\n            resources.GetString(\"foreColorPicker1.Items1626\"),\n            resources.GetString(\"foreColorPicker1.Items1627\"),\n            resources.GetString(\"foreColorPicker1.Items1628\"),\n            resources.GetString(\"foreColorPicker1.Items1629\"),\n            resources.GetString(\"foreColorPicker1.Items1630\"),\n            resources.GetString(\"foreColorPicker1.Items1631\"),\n            resources.GetString(\"foreColorPicker1.Items1632\"),\n            resources.GetString(\"foreColorPicker1.Items1633\"),\n            resources.GetString(\"foreColorPicker1.Items1634\"),\n            resources.GetString(\"foreColorPicker1.Items1635\"),\n            resources.GetString(\"foreColorPicker1.Items1636\"),\n            resources.GetString(\"foreColorPicker1.Items1637\"),\n            resources.GetString(\"foreColorPicker1.Items1638\"),\n            resources.GetString(\"foreColorPicker1.Items1639\"),\n            resources.GetString(\"foreColorPicker1.Items1640\"),\n            resources.GetString(\"foreColorPicker1.Items1641\"),\n            resources.GetString(\"foreColorPicker1.Items1642\"),\n            resources.GetString(\"foreColorPicker1.Items1643\"),\n            resources.GetString(\"foreColorPicker1.Items1644\"),\n            resources.GetString(\"foreColorPicker1.Items1645\"),\n            resources.GetString(\"foreColorPicker1.Items1646\"),\n            resources.GetString(\"foreColorPicker1.Items1647\"),\n            resources.GetString(\"foreColorPicker1.Items1648\"),\n            resources.GetString(\"foreColorPicker1.Items1649\"),\n            resources.GetString(\"foreColorPicker1.Items1650\"),\n            resources.GetString(\"foreColorPicker1.Items1651\"),\n            resources.GetString(\"foreColorPicker1.Items1652\"),\n            resources.GetString(\"foreColorPicker1.Items1653\"),\n            resources.GetString(\"foreColorPicker1.Items1654\"),\n            resources.GetString(\"foreColorPicker1.Items1655\"),\n            resources.GetString(\"foreColorPicker1.Items1656\"),\n            resources.GetString(\"foreColorPicker1.Items1657\"),\n            resources.GetString(\"foreColorPicker1.Items1658\"),\n            resources.GetString(\"foreColorPicker1.Items1659\"),\n            resources.GetString(\"foreColorPicker1.Items1660\"),\n            resources.GetString(\"foreColorPicker1.Items1661\"),\n            resources.GetString(\"foreColorPicker1.Items1662\"),\n            resources.GetString(\"foreColorPicker1.Items1663\"),\n            resources.GetString(\"foreColorPicker1.Items1664\"),\n            resources.GetString(\"foreColorPicker1.Items1665\"),\n            resources.GetString(\"foreColorPicker1.Items1666\"),\n            resources.GetString(\"foreColorPicker1.Items1667\"),\n            resources.GetString(\"foreColorPicker1.Items1668\"),\n            resources.GetString(\"foreColorPicker1.Items1669\"),\n            resources.GetString(\"foreColorPicker1.Items1670\"),\n            resources.GetString(\"foreColorPicker1.Items1671\"),\n            resources.GetString(\"foreColorPicker1.Items1672\"),\n            resources.GetString(\"foreColorPicker1.Items1673\"),\n            resources.GetString(\"foreColorPicker1.Items1674\"),\n            resources.GetString(\"foreColorPicker1.Items1675\"),\n            resources.GetString(\"foreColorPicker1.Items1676\"),\n            resources.GetString(\"foreColorPicker1.Items1677\"),\n            resources.GetString(\"foreColorPicker1.Items1678\"),\n            resources.GetString(\"foreColorPicker1.Items1679\"),\n            resources.GetString(\"foreColorPicker1.Items1680\"),\n            resources.GetString(\"foreColorPicker1.Items1681\"),\n            resources.GetString(\"foreColorPicker1.Items1682\"),\n            resources.GetString(\"foreColorPicker1.Items1683\"),\n            resources.GetString(\"foreColorPicker1.Items1684\"),\n            resources.GetString(\"foreColorPicker1.Items1685\"),\n            resources.GetString(\"foreColorPicker1.Items1686\"),\n            resources.GetString(\"foreColorPicker1.Items1687\"),\n            resources.GetString(\"foreColorPicker1.Items1688\"),\n            resources.GetString(\"foreColorPicker1.Items1689\"),\n            resources.GetString(\"foreColorPicker1.Items1690\"),\n            resources.GetString(\"foreColorPicker1.Items1691\"),\n            resources.GetString(\"foreColorPicker1.Items1692\"),\n            resources.GetString(\"foreColorPicker1.Items1693\"),\n            resources.GetString(\"foreColorPicker1.Items1694\"),\n            resources.GetString(\"foreColorPicker1.Items1695\"),\n            resources.GetString(\"foreColorPicker1.Items1696\"),\n            resources.GetString(\"foreColorPicker1.Items1697\"),\n            resources.GetString(\"foreColorPicker1.Items1698\"),\n            resources.GetString(\"foreColorPicker1.Items1699\"),\n            resources.GetString(\"foreColorPicker1.Items1700\"),\n            resources.GetString(\"foreColorPicker1.Items1701\"),\n            resources.GetString(\"foreColorPicker1.Items1702\"),\n            resources.GetString(\"foreColorPicker1.Items1703\"),\n            resources.GetString(\"foreColorPicker1.Items1704\"),\n            resources.GetString(\"foreColorPicker1.Items1705\"),\n            resources.GetString(\"foreColorPicker1.Items1706\"),\n            resources.GetString(\"foreColorPicker1.Items1707\"),\n            resources.GetString(\"foreColorPicker1.Items1708\"),\n            resources.GetString(\"foreColorPicker1.Items1709\"),\n            resources.GetString(\"foreColorPicker1.Items1710\"),\n            resources.GetString(\"foreColorPicker1.Items1711\"),\n            resources.GetString(\"foreColorPicker1.Items1712\"),\n            resources.GetString(\"foreColorPicker1.Items1713\"),\n            resources.GetString(\"foreColorPicker1.Items1714\"),\n            resources.GetString(\"foreColorPicker1.Items1715\"),\n            resources.GetString(\"foreColorPicker1.Items1716\"),\n            resources.GetString(\"foreColorPicker1.Items1717\"),\n            resources.GetString(\"foreColorPicker1.Items1718\"),\n            resources.GetString(\"foreColorPicker1.Items1719\"),\n            resources.GetString(\"foreColorPicker1.Items1720\"),\n            resources.GetString(\"foreColorPicker1.Items1721\"),\n            resources.GetString(\"foreColorPicker1.Items1722\"),\n            resources.GetString(\"foreColorPicker1.Items1723\"),\n            resources.GetString(\"foreColorPicker1.Items1724\"),\n            resources.GetString(\"foreColorPicker1.Items1725\"),\n            resources.GetString(\"foreColorPicker1.Items1726\"),\n            resources.GetString(\"foreColorPicker1.Items1727\"),\n            resources.GetString(\"foreColorPicker1.Items1728\"),\n            resources.GetString(\"foreColorPicker1.Items1729\"),\n            resources.GetString(\"foreColorPicker1.Items1730\"),\n            resources.GetString(\"foreColorPicker1.Items1731\"),\n            resources.GetString(\"foreColorPicker1.Items1732\"),\n            resources.GetString(\"foreColorPicker1.Items1733\"),\n            resources.GetString(\"foreColorPicker1.Items1734\"),\n            resources.GetString(\"foreColorPicker1.Items1735\"),\n            resources.GetString(\"foreColorPicker1.Items1736\"),\n            resources.GetString(\"foreColorPicker1.Items1737\"),\n            resources.GetString(\"foreColorPicker1.Items1738\"),\n            resources.GetString(\"foreColorPicker1.Items1739\"),\n            resources.GetString(\"foreColorPicker1.Items1740\"),\n            resources.GetString(\"foreColorPicker1.Items1741\"),\n            resources.GetString(\"foreColorPicker1.Items1742\"),\n            resources.GetString(\"foreColorPicker1.Items1743\"),\n            resources.GetString(\"foreColorPicker1.Items1744\"),\n            resources.GetString(\"foreColorPicker1.Items1745\"),\n            resources.GetString(\"foreColorPicker1.Items1746\"),\n            resources.GetString(\"foreColorPicker1.Items1747\"),\n            resources.GetString(\"foreColorPicker1.Items1748\"),\n            resources.GetString(\"foreColorPicker1.Items1749\"),\n            resources.GetString(\"foreColorPicker1.Items1750\"),\n            resources.GetString(\"foreColorPicker1.Items1751\"),\n            resources.GetString(\"foreColorPicker1.Items1752\"),\n            resources.GetString(\"foreColorPicker1.Items1753\"),\n            resources.GetString(\"foreColorPicker1.Items1754\"),\n            resources.GetString(\"foreColorPicker1.Items1755\"),\n            resources.GetString(\"foreColorPicker1.Items1756\"),\n            resources.GetString(\"foreColorPicker1.Items1757\"),\n            resources.GetString(\"foreColorPicker1.Items1758\"),\n            resources.GetString(\"foreColorPicker1.Items1759\"),\n            resources.GetString(\"foreColorPicker1.Items1760\"),\n            resources.GetString(\"foreColorPicker1.Items1761\"),\n            resources.GetString(\"foreColorPicker1.Items1762\"),\n            resources.GetString(\"foreColorPicker1.Items1763\"),\n            resources.GetString(\"foreColorPicker1.Items1764\"),\n            resources.GetString(\"foreColorPicker1.Items1765\"),\n            resources.GetString(\"foreColorPicker1.Items1766\"),\n            resources.GetString(\"foreColorPicker1.Items1767\"),\n            resources.GetString(\"foreColorPicker1.Items1768\"),\n            resources.GetString(\"foreColorPicker1.Items1769\"),\n            resources.GetString(\"foreColorPicker1.Items1770\"),\n            resources.GetString(\"foreColorPicker1.Items1771\"),\n            resources.GetString(\"foreColorPicker1.Items1772\"),\n            resources.GetString(\"foreColorPicker1.Items1773\"),\n            resources.GetString(\"foreColorPicker1.Items1774\"),\n            resources.GetString(\"foreColorPicker1.Items1775\"),\n            resources.GetString(\"foreColorPicker1.Items1776\"),\n            resources.GetString(\"foreColorPicker1.Items1777\"),\n            resources.GetString(\"foreColorPicker1.Items1778\"),\n            resources.GetString(\"foreColorPicker1.Items1779\"),\n            resources.GetString(\"foreColorPicker1.Items1780\"),\n            resources.GetString(\"foreColorPicker1.Items1781\"),\n            resources.GetString(\"foreColorPicker1.Items1782\"),\n            resources.GetString(\"foreColorPicker1.Items1783\"),\n            resources.GetString(\"foreColorPicker1.Items1784\"),\n            resources.GetString(\"foreColorPicker1.Items1785\"),\n            resources.GetString(\"foreColorPicker1.Items1786\"),\n            resources.GetString(\"foreColorPicker1.Items1787\"),\n            resources.GetString(\"foreColorPicker1.Items1788\"),\n            resources.GetString(\"foreColorPicker1.Items1789\"),\n            resources.GetString(\"foreColorPicker1.Items1790\"),\n            resources.GetString(\"foreColorPicker1.Items1791\"),\n            resources.GetString(\"foreColorPicker1.Items1792\"),\n            resources.GetString(\"foreColorPicker1.Items1793\"),\n            resources.GetString(\"foreColorPicker1.Items1794\"),\n            resources.GetString(\"foreColorPicker1.Items1795\"),\n            resources.GetString(\"foreColorPicker1.Items1796\"),\n            resources.GetString(\"foreColorPicker1.Items1797\"),\n            resources.GetString(\"foreColorPicker1.Items1798\"),\n            resources.GetString(\"foreColorPicker1.Items1799\"),\n            resources.GetString(\"foreColorPicker1.Items1800\"),\n            resources.GetString(\"foreColorPicker1.Items1801\"),\n            resources.GetString(\"foreColorPicker1.Items1802\"),\n            resources.GetString(\"foreColorPicker1.Items1803\"),\n            resources.GetString(\"foreColorPicker1.Items1804\"),\n            resources.GetString(\"foreColorPicker1.Items1805\"),\n            resources.GetString(\"foreColorPicker1.Items1806\"),\n            resources.GetString(\"foreColorPicker1.Items1807\"),\n            resources.GetString(\"foreColorPicker1.Items1808\"),\n            resources.GetString(\"foreColorPicker1.Items1809\"),\n            resources.GetString(\"foreColorPicker1.Items1810\"),\n            resources.GetString(\"foreColorPicker1.Items1811\"),\n            resources.GetString(\"foreColorPicker1.Items1812\"),\n            resources.GetString(\"foreColorPicker1.Items1813\"),\n            resources.GetString(\"foreColorPicker1.Items1814\"),\n            resources.GetString(\"foreColorPicker1.Items1815\"),\n            resources.GetString(\"foreColorPicker1.Items1816\"),\n            resources.GetString(\"foreColorPicker1.Items1817\"),\n            resources.GetString(\"foreColorPicker1.Items1818\"),\n            resources.GetString(\"foreColorPicker1.Items1819\"),\n            resources.GetString(\"foreColorPicker1.Items1820\"),\n            resources.GetString(\"foreColorPicker1.Items1821\"),\n            resources.GetString(\"foreColorPicker1.Items1822\"),\n            resources.GetString(\"foreColorPicker1.Items1823\"),\n            resources.GetString(\"foreColorPicker1.Items1824\"),\n            resources.GetString(\"foreColorPicker1.Items1825\"),\n            resources.GetString(\"foreColorPicker1.Items1826\"),\n            resources.GetString(\"foreColorPicker1.Items1827\"),\n            resources.GetString(\"foreColorPicker1.Items1828\"),\n            resources.GetString(\"foreColorPicker1.Items1829\"),\n            resources.GetString(\"foreColorPicker1.Items1830\"),\n            resources.GetString(\"foreColorPicker1.Items1831\"),\n            resources.GetString(\"foreColorPicker1.Items1832\"),\n            resources.GetString(\"foreColorPicker1.Items1833\"),\n            resources.GetString(\"foreColorPicker1.Items1834\"),\n            resources.GetString(\"foreColorPicker1.Items1835\"),\n            resources.GetString(\"foreColorPicker1.Items1836\"),\n            resources.GetString(\"foreColorPicker1.Items1837\"),\n            resources.GetString(\"foreColorPicker1.Items1838\"),\n            resources.GetString(\"foreColorPicker1.Items1839\"),\n            resources.GetString(\"foreColorPicker1.Items1840\"),\n            resources.GetString(\"foreColorPicker1.Items1841\"),\n            resources.GetString(\"foreColorPicker1.Items1842\"),\n            resources.GetString(\"foreColorPicker1.Items1843\"),\n            resources.GetString(\"foreColorPicker1.Items1844\"),\n            resources.GetString(\"foreColorPicker1.Items1845\"),\n            resources.GetString(\"foreColorPicker1.Items1846\"),\n            resources.GetString(\"foreColorPicker1.Items1847\"),\n            resources.GetString(\"foreColorPicker1.Items1848\"),\n            resources.GetString(\"foreColorPicker1.Items1849\"),\n            resources.GetString(\"foreColorPicker1.Items1850\"),\n            resources.GetString(\"foreColorPicker1.Items1851\"),\n            resources.GetString(\"foreColorPicker1.Items1852\"),\n            resources.GetString(\"foreColorPicker1.Items1853\"),\n            resources.GetString(\"foreColorPicker1.Items1854\"),\n            resources.GetString(\"foreColorPicker1.Items1855\"),\n            resources.GetString(\"foreColorPicker1.Items1856\"),\n            resources.GetString(\"foreColorPicker1.Items1857\"),\n            resources.GetString(\"foreColorPicker1.Items1858\"),\n            resources.GetString(\"foreColorPicker1.Items1859\"),\n            resources.GetString(\"foreColorPicker1.Items1860\"),\n            resources.GetString(\"foreColorPicker1.Items1861\"),\n            resources.GetString(\"foreColorPicker1.Items1862\"),\n            resources.GetString(\"foreColorPicker1.Items1863\"),\n            resources.GetString(\"foreColorPicker1.Items1864\"),\n            resources.GetString(\"foreColorPicker1.Items1865\"),\n            resources.GetString(\"foreColorPicker1.Items1866\"),\n            resources.GetString(\"foreColorPicker1.Items1867\"),\n            resources.GetString(\"foreColorPicker1.Items1868\"),\n            resources.GetString(\"foreColorPicker1.Items1869\"),\n            resources.GetString(\"foreColorPicker1.Items1870\"),\n            resources.GetString(\"foreColorPicker1.Items1871\"),\n            resources.GetString(\"foreColorPicker1.Items1872\"),\n            resources.GetString(\"foreColorPicker1.Items1873\"),\n            resources.GetString(\"foreColorPicker1.Items1874\"),\n            resources.GetString(\"foreColorPicker1.Items1875\"),\n            resources.GetString(\"foreColorPicker1.Items1876\"),\n            resources.GetString(\"foreColorPicker1.Items1877\"),\n            resources.GetString(\"foreColorPicker1.Items1878\"),\n            resources.GetString(\"foreColorPicker1.Items1879\"),\n            resources.GetString(\"foreColorPicker1.Items1880\"),\n            resources.GetString(\"foreColorPicker1.Items1881\"),\n            resources.GetString(\"foreColorPicker1.Items1882\"),\n            resources.GetString(\"foreColorPicker1.Items1883\"),\n            resources.GetString(\"foreColorPicker1.Items1884\"),\n            resources.GetString(\"foreColorPicker1.Items1885\"),\n            resources.GetString(\"foreColorPicker1.Items1886\"),\n            resources.GetString(\"foreColorPicker1.Items1887\"),\n            resources.GetString(\"foreColorPicker1.Items1888\"),\n            resources.GetString(\"foreColorPicker1.Items1889\"),\n            resources.GetString(\"foreColorPicker1.Items1890\"),\n            resources.GetString(\"foreColorPicker1.Items1891\"),\n            resources.GetString(\"foreColorPicker1.Items1892\"),\n            resources.GetString(\"foreColorPicker1.Items1893\"),\n            resources.GetString(\"foreColorPicker1.Items1894\"),\n            resources.GetString(\"foreColorPicker1.Items1895\"),\n            resources.GetString(\"foreColorPicker1.Items1896\"),\n            resources.GetString(\"foreColorPicker1.Items1897\"),\n            resources.GetString(\"foreColorPicker1.Items1898\"),\n            resources.GetString(\"foreColorPicker1.Items1899\"),\n            resources.GetString(\"foreColorPicker1.Items1900\"),\n            resources.GetString(\"foreColorPicker1.Items1901\"),\n            resources.GetString(\"foreColorPicker1.Items1902\"),\n            resources.GetString(\"foreColorPicker1.Items1903\"),\n            resources.GetString(\"foreColorPicker1.Items1904\"),\n            resources.GetString(\"foreColorPicker1.Items1905\"),\n            resources.GetString(\"foreColorPicker1.Items1906\"),\n            resources.GetString(\"foreColorPicker1.Items1907\"),\n            resources.GetString(\"foreColorPicker1.Items1908\"),\n            resources.GetString(\"foreColorPicker1.Items1909\"),\n            resources.GetString(\"foreColorPicker1.Items1910\"),\n            resources.GetString(\"foreColorPicker1.Items1911\"),\n            resources.GetString(\"foreColorPicker1.Items1912\"),\n            resources.GetString(\"foreColorPicker1.Items1913\"),\n            resources.GetString(\"foreColorPicker1.Items1914\"),\n            resources.GetString(\"foreColorPicker1.Items1915\"),\n            resources.GetString(\"foreColorPicker1.Items1916\"),\n            resources.GetString(\"foreColorPicker1.Items1917\"),\n            resources.GetString(\"foreColorPicker1.Items1918\"),\n            resources.GetString(\"foreColorPicker1.Items1919\"),\n            resources.GetString(\"foreColorPicker1.Items1920\"),\n            resources.GetString(\"foreColorPicker1.Items1921\"),\n            resources.GetString(\"foreColorPicker1.Items1922\"),\n            resources.GetString(\"foreColorPicker1.Items1923\"),\n            resources.GetString(\"foreColorPicker1.Items1924\"),\n            resources.GetString(\"foreColorPicker1.Items1925\"),\n            resources.GetString(\"foreColorPicker1.Items1926\"),\n            resources.GetString(\"foreColorPicker1.Items1927\"),\n            resources.GetString(\"foreColorPicker1.Items1928\"),\n            resources.GetString(\"foreColorPicker1.Items1929\"),\n            resources.GetString(\"foreColorPicker1.Items1930\"),\n            resources.GetString(\"foreColorPicker1.Items1931\"),\n            resources.GetString(\"foreColorPicker1.Items1932\"),\n            resources.GetString(\"foreColorPicker1.Items1933\"),\n            resources.GetString(\"foreColorPicker1.Items1934\"),\n            resources.GetString(\"foreColorPicker1.Items1935\"),\n            resources.GetString(\"foreColorPicker1.Items1936\"),\n            resources.GetString(\"foreColorPicker1.Items1937\"),\n            resources.GetString(\"foreColorPicker1.Items1938\"),\n            resources.GetString(\"foreColorPicker1.Items1939\"),\n            resources.GetString(\"foreColorPicker1.Items1940\"),\n            resources.GetString(\"foreColorPicker1.Items1941\"),\n            resources.GetString(\"foreColorPicker1.Items1942\"),\n            resources.GetString(\"foreColorPicker1.Items1943\"),\n            resources.GetString(\"foreColorPicker1.Items1944\"),\n            resources.GetString(\"foreColorPicker1.Items1945\"),\n            resources.GetString(\"foreColorPicker1.Items1946\"),\n            resources.GetString(\"foreColorPicker1.Items1947\"),\n            resources.GetString(\"foreColorPicker1.Items1948\"),\n            resources.GetString(\"foreColorPicker1.Items1949\"),\n            resources.GetString(\"foreColorPicker1.Items1950\"),\n            resources.GetString(\"foreColorPicker1.Items1951\"),\n            resources.GetString(\"foreColorPicker1.Items1952\"),\n            resources.GetString(\"foreColorPicker1.Items1953\"),\n            resources.GetString(\"foreColorPicker1.Items1954\"),\n            resources.GetString(\"foreColorPicker1.Items1955\"),\n            resources.GetString(\"foreColorPicker1.Items1956\"),\n            resources.GetString(\"foreColorPicker1.Items1957\"),\n            resources.GetString(\"foreColorPicker1.Items1958\"),\n            resources.GetString(\"foreColorPicker1.Items1959\"),\n            resources.GetString(\"foreColorPicker1.Items1960\"),\n            resources.GetString(\"foreColorPicker1.Items1961\"),\n            resources.GetString(\"foreColorPicker1.Items1962\"),\n            resources.GetString(\"foreColorPicker1.Items1963\"),\n            resources.GetString(\"foreColorPicker1.Items1964\"),\n            resources.GetString(\"foreColorPicker1.Items1965\"),\n            resources.GetString(\"foreColorPicker1.Items1966\"),\n            resources.GetString(\"foreColorPicker1.Items1967\"),\n            resources.GetString(\"foreColorPicker1.Items1968\"),\n            resources.GetString(\"foreColorPicker1.Items1969\"),\n            resources.GetString(\"foreColorPicker1.Items1970\"),\n            resources.GetString(\"foreColorPicker1.Items1971\"),\n            resources.GetString(\"foreColorPicker1.Items1972\"),\n            resources.GetString(\"foreColorPicker1.Items1973\"),\n            resources.GetString(\"foreColorPicker1.Items1974\"),\n            resources.GetString(\"foreColorPicker1.Items1975\"),\n            resources.GetString(\"foreColorPicker1.Items1976\"),\n            resources.GetString(\"foreColorPicker1.Items1977\"),\n            resources.GetString(\"foreColorPicker1.Items1978\"),\n            resources.GetString(\"foreColorPicker1.Items1979\"),\n            resources.GetString(\"foreColorPicker1.Items1980\"),\n            resources.GetString(\"foreColorPicker1.Items1981\"),\n            resources.GetString(\"foreColorPicker1.Items1982\"),\n            resources.GetString(\"foreColorPicker1.Items1983\"),\n            resources.GetString(\"foreColorPicker1.Items1984\"),\n            resources.GetString(\"foreColorPicker1.Items1985\"),\n            resources.GetString(\"foreColorPicker1.Items1986\"),\n            resources.GetString(\"foreColorPicker1.Items1987\"),\n            resources.GetString(\"foreColorPicker1.Items1988\"),\n            resources.GetString(\"foreColorPicker1.Items1989\"),\n            resources.GetString(\"foreColorPicker1.Items1990\"),\n            resources.GetString(\"foreColorPicker1.Items1991\"),\n            resources.GetString(\"foreColorPicker1.Items1992\"),\n            resources.GetString(\"foreColorPicker1.Items1993\"),\n            resources.GetString(\"foreColorPicker1.Items1994\"),\n            resources.GetString(\"foreColorPicker1.Items1995\"),\n            resources.GetString(\"foreColorPicker1.Items1996\"),\n            resources.GetString(\"foreColorPicker1.Items1997\"),\n            resources.GetString(\"foreColorPicker1.Items1998\"),\n            resources.GetString(\"foreColorPicker1.Items1999\"),\n            resources.GetString(\"foreColorPicker1.Items2000\"),\n            resources.GetString(\"foreColorPicker1.Items2001\"),\n            resources.GetString(\"foreColorPicker1.Items2002\"),\n            resources.GetString(\"foreColorPicker1.Items2003\"),\n            resources.GetString(\"foreColorPicker1.Items2004\"),\n            resources.GetString(\"foreColorPicker1.Items2005\"),\n            resources.GetString(\"foreColorPicker1.Items2006\"),\n            resources.GetString(\"foreColorPicker1.Items2007\"),\n            resources.GetString(\"foreColorPicker1.Items2008\"),\n            resources.GetString(\"foreColorPicker1.Items2009\"),\n            resources.GetString(\"foreColorPicker1.Items2010\"),\n            resources.GetString(\"foreColorPicker1.Items2011\"),\n            resources.GetString(\"foreColorPicker1.Items2012\"),\n            resources.GetString(\"foreColorPicker1.Items2013\"),\n            resources.GetString(\"foreColorPicker1.Items2014\"),\n            resources.GetString(\"foreColorPicker1.Items2015\"),\n            resources.GetString(\"foreColorPicker1.Items2016\"),\n            resources.GetString(\"foreColorPicker1.Items2017\"),\n            resources.GetString(\"foreColorPicker1.Items2018\"),\n            resources.GetString(\"foreColorPicker1.Items2019\"),\n            resources.GetString(\"foreColorPicker1.Items2020\"),\n            resources.GetString(\"foreColorPicker1.Items2021\"),\n            resources.GetString(\"foreColorPicker1.Items2022\"),\n            resources.GetString(\"foreColorPicker1.Items2023\"),\n            resources.GetString(\"foreColorPicker1.Items2024\"),\n            resources.GetString(\"foreColorPicker1.Items2025\"),\n            resources.GetString(\"foreColorPicker1.Items2026\"),\n            resources.GetString(\"foreColorPicker1.Items2027\"),\n            resources.GetString(\"foreColorPicker1.Items2028\"),\n            resources.GetString(\"foreColorPicker1.Items2029\"),\n            resources.GetString(\"foreColorPicker1.Items2030\"),\n            resources.GetString(\"foreColorPicker1.Items2031\"),\n            resources.GetString(\"foreColorPicker1.Items2032\"),\n            resources.GetString(\"foreColorPicker1.Items2033\"),\n            resources.GetString(\"foreColorPicker1.Items2034\"),\n            resources.GetString(\"foreColorPicker1.Items2035\"),\n            resources.GetString(\"foreColorPicker1.Items2036\"),\n            resources.GetString(\"foreColorPicker1.Items2037\"),\n            resources.GetString(\"foreColorPicker1.Items2038\"),\n            resources.GetString(\"foreColorPicker1.Items2039\"),\n            resources.GetString(\"foreColorPicker1.Items2040\"),\n            resources.GetString(\"foreColorPicker1.Items2041\"),\n            resources.GetString(\"foreColorPicker1.Items2042\"),\n            resources.GetString(\"foreColorPicker1.Items2043\"),\n            resources.GetString(\"foreColorPicker1.Items2044\"),\n            resources.GetString(\"foreColorPicker1.Items2045\"),\n            resources.GetString(\"foreColorPicker1.Items2046\"),\n            resources.GetString(\"foreColorPicker1.Items2047\"),\n            resources.GetString(\"foreColorPicker1.Items2048\"),\n            resources.GetString(\"foreColorPicker1.Items2049\"),\n            resources.GetString(\"foreColorPicker1.Items2050\"),\n            resources.GetString(\"foreColorPicker1.Items2051\"),\n            resources.GetString(\"foreColorPicker1.Items2052\"),\n            resources.GetString(\"foreColorPicker1.Items2053\"),\n            resources.GetString(\"foreColorPicker1.Items2054\"),\n            resources.GetString(\"foreColorPicker1.Items2055\"),\n            resources.GetString(\"foreColorPicker1.Items2056\"),\n            resources.GetString(\"foreColorPicker1.Items2057\"),\n            resources.GetString(\"foreColorPicker1.Items2058\"),\n            resources.GetString(\"foreColorPicker1.Items2059\"),\n            resources.GetString(\"foreColorPicker1.Items2060\"),\n            resources.GetString(\"foreColorPicker1.Items2061\"),\n            resources.GetString(\"foreColorPicker1.Items2062\"),\n            resources.GetString(\"foreColorPicker1.Items2063\"),\n            resources.GetString(\"foreColorPicker1.Items2064\"),\n            resources.GetString(\"foreColorPicker1.Items2065\"),\n            resources.GetString(\"foreColorPicker1.Items2066\"),\n            resources.GetString(\"foreColorPicker1.Items2067\"),\n            resources.GetString(\"foreColorPicker1.Items2068\"),\n            resources.GetString(\"foreColorPicker1.Items2069\"),\n            resources.GetString(\"foreColorPicker1.Items2070\"),\n            resources.GetString(\"foreColorPicker1.Items2071\"),\n            resources.GetString(\"foreColorPicker1.Items2072\"),\n            resources.GetString(\"foreColorPicker1.Items2073\"),\n            resources.GetString(\"foreColorPicker1.Items2074\"),\n            resources.GetString(\"foreColorPicker1.Items2075\"),\n            resources.GetString(\"foreColorPicker1.Items2076\"),\n            resources.GetString(\"foreColorPicker1.Items2077\"),\n            resources.GetString(\"foreColorPicker1.Items2078\"),\n            resources.GetString(\"foreColorPicker1.Items2079\"),\n            resources.GetString(\"foreColorPicker1.Items2080\"),\n            resources.GetString(\"foreColorPicker1.Items2081\"),\n            resources.GetString(\"foreColorPicker1.Items2082\"),\n            resources.GetString(\"foreColorPicker1.Items2083\"),\n            resources.GetString(\"foreColorPicker1.Items2084\"),\n            resources.GetString(\"foreColorPicker1.Items2085\"),\n            resources.GetString(\"foreColorPicker1.Items2086\"),\n            resources.GetString(\"foreColorPicker1.Items2087\"),\n            resources.GetString(\"foreColorPicker1.Items2088\"),\n            resources.GetString(\"foreColorPicker1.Items2089\"),\n            resources.GetString(\"foreColorPicker1.Items2090\"),\n            resources.GetString(\"foreColorPicker1.Items2091\"),\n            resources.GetString(\"foreColorPicker1.Items2092\"),\n            resources.GetString(\"foreColorPicker1.Items2093\"),\n            resources.GetString(\"foreColorPicker1.Items2094\"),\n            resources.GetString(\"foreColorPicker1.Items2095\"),\n            resources.GetString(\"foreColorPicker1.Items2096\"),\n            resources.GetString(\"foreColorPicker1.Items2097\"),\n            resources.GetString(\"foreColorPicker1.Items2098\"),\n            resources.GetString(\"foreColorPicker1.Items2099\"),\n            resources.GetString(\"foreColorPicker1.Items2100\"),\n            resources.GetString(\"foreColorPicker1.Items2101\"),\n            resources.GetString(\"foreColorPicker1.Items2102\"),\n            resources.GetString(\"foreColorPicker1.Items2103\"),\n            resources.GetString(\"foreColorPicker1.Items2104\"),\n            resources.GetString(\"foreColorPicker1.Items2105\"),\n            resources.GetString(\"foreColorPicker1.Items2106\"),\n            resources.GetString(\"foreColorPicker1.Items2107\"),\n            resources.GetString(\"foreColorPicker1.Items2108\"),\n            resources.GetString(\"foreColorPicker1.Items2109\"),\n            resources.GetString(\"foreColorPicker1.Items2110\"),\n            resources.GetString(\"foreColorPicker1.Items2111\"),\n            resources.GetString(\"foreColorPicker1.Items2112\"),\n            resources.GetString(\"foreColorPicker1.Items2113\"),\n            resources.GetString(\"foreColorPicker1.Items2114\"),\n            resources.GetString(\"foreColorPicker1.Items2115\"),\n            resources.GetString(\"foreColorPicker1.Items2116\"),\n            resources.GetString(\"foreColorPicker1.Items2117\"),\n            resources.GetString(\"foreColorPicker1.Items2118\"),\n            resources.GetString(\"foreColorPicker1.Items2119\"),\n            resources.GetString(\"foreColorPicker1.Items2120\"),\n            resources.GetString(\"foreColorPicker1.Items2121\"),\n            resources.GetString(\"foreColorPicker1.Items2122\"),\n            resources.GetString(\"foreColorPicker1.Items2123\"),\n            resources.GetString(\"foreColorPicker1.Items2124\"),\n            resources.GetString(\"foreColorPicker1.Items2125\"),\n            resources.GetString(\"foreColorPicker1.Items2126\"),\n            resources.GetString(\"foreColorPicker1.Items2127\"),\n            resources.GetString(\"foreColorPicker1.Items2128\"),\n            resources.GetString(\"foreColorPicker1.Items2129\"),\n            resources.GetString(\"foreColorPicker1.Items2130\"),\n            resources.GetString(\"foreColorPicker1.Items2131\"),\n            resources.GetString(\"foreColorPicker1.Items2132\"),\n            resources.GetString(\"foreColorPicker1.Items2133\"),\n            resources.GetString(\"foreColorPicker1.Items2134\"),\n            resources.GetString(\"foreColorPicker1.Items2135\"),\n            resources.GetString(\"foreColorPicker1.Items2136\"),\n            resources.GetString(\"foreColorPicker1.Items2137\"),\n            resources.GetString(\"foreColorPicker1.Items2138\"),\n            resources.GetString(\"foreColorPicker1.Items2139\"),\n            resources.GetString(\"foreColorPicker1.Items2140\"),\n            resources.GetString(\"foreColorPicker1.Items2141\"),\n            resources.GetString(\"foreColorPicker1.Items2142\"),\n            resources.GetString(\"foreColorPicker1.Items2143\"),\n            resources.GetString(\"foreColorPicker1.Items2144\"),\n            resources.GetString(\"foreColorPicker1.Items2145\"),\n            resources.GetString(\"foreColorPicker1.Items2146\"),\n            resources.GetString(\"foreColorPicker1.Items2147\"),\n            resources.GetString(\"foreColorPicker1.Items2148\"),\n            resources.GetString(\"foreColorPicker1.Items2149\"),\n            resources.GetString(\"foreColorPicker1.Items2150\"),\n            resources.GetString(\"foreColorPicker1.Items2151\"),\n            resources.GetString(\"foreColorPicker1.Items2152\"),\n            resources.GetString(\"foreColorPicker1.Items2153\"),\n            resources.GetString(\"foreColorPicker1.Items2154\"),\n            resources.GetString(\"foreColorPicker1.Items2155\"),\n            resources.GetString(\"foreColorPicker1.Items2156\"),\n            resources.GetString(\"foreColorPicker1.Items2157\"),\n            resources.GetString(\"foreColorPicker1.Items2158\"),\n            resources.GetString(\"foreColorPicker1.Items2159\"),\n            resources.GetString(\"foreColorPicker1.Items2160\"),\n            resources.GetString(\"foreColorPicker1.Items2161\"),\n            resources.GetString(\"foreColorPicker1.Items2162\"),\n            resources.GetString(\"foreColorPicker1.Items2163\"),\n            resources.GetString(\"foreColorPicker1.Items2164\"),\n            resources.GetString(\"foreColorPicker1.Items2165\"),\n            resources.GetString(\"foreColorPicker1.Items2166\"),\n            resources.GetString(\"foreColorPicker1.Items2167\"),\n            resources.GetString(\"foreColorPicker1.Items2168\"),\n            resources.GetString(\"foreColorPicker1.Items2169\"),\n            resources.GetString(\"foreColorPicker1.Items2170\"),\n            resources.GetString(\"foreColorPicker1.Items2171\"),\n            resources.GetString(\"foreColorPicker1.Items2172\"),\n            resources.GetString(\"foreColorPicker1.Items2173\"),\n            resources.GetString(\"foreColorPicker1.Items2174\"),\n            resources.GetString(\"foreColorPicker1.Items2175\"),\n            resources.GetString(\"foreColorPicker1.Items2176\"),\n            resources.GetString(\"foreColorPicker1.Items2177\"),\n            resources.GetString(\"foreColorPicker1.Items2178\"),\n            resources.GetString(\"foreColorPicker1.Items2179\"),\n            resources.GetString(\"foreColorPicker1.Items2180\"),\n            resources.GetString(\"foreColorPicker1.Items2181\"),\n            resources.GetString(\"foreColorPicker1.Items2182\"),\n            resources.GetString(\"foreColorPicker1.Items2183\"),\n            resources.GetString(\"foreColorPicker1.Items2184\"),\n            resources.GetString(\"foreColorPicker1.Items2185\"),\n            resources.GetString(\"foreColorPicker1.Items2186\"),\n            resources.GetString(\"foreColorPicker1.Items2187\"),\n            resources.GetString(\"foreColorPicker1.Items2188\"),\n            resources.GetString(\"foreColorPicker1.Items2189\"),\n            resources.GetString(\"foreColorPicker1.Items2190\"),\n            resources.GetString(\"foreColorPicker1.Items2191\"),\n            resources.GetString(\"foreColorPicker1.Items2192\"),\n            resources.GetString(\"foreColorPicker1.Items2193\"),\n            resources.GetString(\"foreColorPicker1.Items2194\"),\n            resources.GetString(\"foreColorPicker1.Items2195\"),\n            resources.GetString(\"foreColorPicker1.Items2196\"),\n            resources.GetString(\"foreColorPicker1.Items2197\"),\n            resources.GetString(\"foreColorPicker1.Items2198\"),\n            resources.GetString(\"foreColorPicker1.Items2199\"),\n            resources.GetString(\"foreColorPicker1.Items2200\"),\n            resources.GetString(\"foreColorPicker1.Items2201\"),\n            resources.GetString(\"foreColorPicker1.Items2202\"),\n            resources.GetString(\"foreColorPicker1.Items2203\"),\n            resources.GetString(\"foreColorPicker1.Items2204\"),\n            resources.GetString(\"foreColorPicker1.Items2205\"),\n            resources.GetString(\"foreColorPicker1.Items2206\"),\n            resources.GetString(\"foreColorPicker1.Items2207\"),\n            resources.GetString(\"foreColorPicker1.Items2208\"),\n            resources.GetString(\"foreColorPicker1.Items2209\"),\n            resources.GetString(\"foreColorPicker1.Items2210\"),\n            resources.GetString(\"foreColorPicker1.Items2211\"),\n            resources.GetString(\"foreColorPicker1.Items2212\"),\n            resources.GetString(\"foreColorPicker1.Items2213\"),\n            resources.GetString(\"foreColorPicker1.Items2214\"),\n            resources.GetString(\"foreColorPicker1.Items2215\"),\n            resources.GetString(\"foreColorPicker1.Items2216\"),\n            resources.GetString(\"foreColorPicker1.Items2217\"),\n            resources.GetString(\"foreColorPicker1.Items2218\"),\n            resources.GetString(\"foreColorPicker1.Items2219\"),\n            resources.GetString(\"foreColorPicker1.Items2220\"),\n            resources.GetString(\"foreColorPicker1.Items2221\"),\n            resources.GetString(\"foreColorPicker1.Items2222\"),\n            resources.GetString(\"foreColorPicker1.Items2223\"),\n            resources.GetString(\"foreColorPicker1.Items2224\"),\n            resources.GetString(\"foreColorPicker1.Items2225\"),\n            resources.GetString(\"foreColorPicker1.Items2226\"),\n            resources.GetString(\"foreColorPicker1.Items2227\"),\n            resources.GetString(\"foreColorPicker1.Items2228\"),\n            resources.GetString(\"foreColorPicker1.Items2229\"),\n            resources.GetString(\"foreColorPicker1.Items2230\"),\n            resources.GetString(\"foreColorPicker1.Items2231\"),\n            resources.GetString(\"foreColorPicker1.Items2232\"),\n            resources.GetString(\"foreColorPicker1.Items2233\"),\n            resources.GetString(\"foreColorPicker1.Items2234\"),\n            resources.GetString(\"foreColorPicker1.Items2235\"),\n            resources.GetString(\"foreColorPicker1.Items2236\"),\n            resources.GetString(\"foreColorPicker1.Items2237\"),\n            resources.GetString(\"foreColorPicker1.Items2238\"),\n            resources.GetString(\"foreColorPicker1.Items2239\"),\n            resources.GetString(\"foreColorPicker1.Items2240\"),\n            resources.GetString(\"foreColorPicker1.Items2241\"),\n            resources.GetString(\"foreColorPicker1.Items2242\"),\n            resources.GetString(\"foreColorPicker1.Items2243\"),\n            resources.GetString(\"foreColorPicker1.Items2244\"),\n            resources.GetString(\"foreColorPicker1.Items2245\"),\n            resources.GetString(\"foreColorPicker1.Items2246\"),\n            resources.GetString(\"foreColorPicker1.Items2247\"),\n            resources.GetString(\"foreColorPicker1.Items2248\"),\n            resources.GetString(\"foreColorPicker1.Items2249\"),\n            resources.GetString(\"foreColorPicker1.Items2250\"),\n            resources.GetString(\"foreColorPicker1.Items2251\"),\n            resources.GetString(\"foreColorPicker1.Items2252\"),\n            resources.GetString(\"foreColorPicker1.Items2253\"),\n            resources.GetString(\"foreColorPicker1.Items2254\"),\n            resources.GetString(\"foreColorPicker1.Items2255\"),\n            resources.GetString(\"foreColorPicker1.Items2256\"),\n            resources.GetString(\"foreColorPicker1.Items2257\"),\n            resources.GetString(\"foreColorPicker1.Items2258\"),\n            resources.GetString(\"foreColorPicker1.Items2259\"),\n            resources.GetString(\"foreColorPicker1.Items2260\"),\n            resources.GetString(\"foreColorPicker1.Items2261\"),\n            resources.GetString(\"foreColorPicker1.Items2262\"),\n            resources.GetString(\"foreColorPicker1.Items2263\"),\n            resources.GetString(\"foreColorPicker1.Items2264\"),\n            resources.GetString(\"foreColorPicker1.Items2265\"),\n            resources.GetString(\"foreColorPicker1.Items2266\"),\n            resources.GetString(\"foreColorPicker1.Items2267\"),\n            resources.GetString(\"foreColorPicker1.Items2268\"),\n            resources.GetString(\"foreColorPicker1.Items2269\"),\n            resources.GetString(\"foreColorPicker1.Items2270\"),\n            resources.GetString(\"foreColorPicker1.Items2271\"),\n            resources.GetString(\"foreColorPicker1.Items2272\"),\n            resources.GetString(\"foreColorPicker1.Items2273\"),\n            resources.GetString(\"foreColorPicker1.Items2274\"),\n            resources.GetString(\"foreColorPicker1.Items2275\"),\n            resources.GetString(\"foreColorPicker1.Items2276\"),\n            resources.GetString(\"foreColorPicker1.Items2277\"),\n            resources.GetString(\"foreColorPicker1.Items2278\"),\n            resources.GetString(\"foreColorPicker1.Items2279\"),\n            resources.GetString(\"foreColorPicker1.Items2280\"),\n            resources.GetString(\"foreColorPicker1.Items2281\"),\n            resources.GetString(\"foreColorPicker1.Items2282\"),\n            resources.GetString(\"foreColorPicker1.Items2283\"),\n            resources.GetString(\"foreColorPicker1.Items2284\"),\n            resources.GetString(\"foreColorPicker1.Items2285\"),\n            resources.GetString(\"foreColorPicker1.Items2286\"),\n            resources.GetString(\"foreColorPicker1.Items2287\"),\n            resources.GetString(\"foreColorPicker1.Items2288\"),\n            resources.GetString(\"foreColorPicker1.Items2289\"),\n            resources.GetString(\"foreColorPicker1.Items2290\"),\n            resources.GetString(\"foreColorPicker1.Items2291\"),\n            resources.GetString(\"foreColorPicker1.Items2292\"),\n            resources.GetString(\"foreColorPicker1.Items2293\"),\n            resources.GetString(\"foreColorPicker1.Items2294\"),\n            resources.GetString(\"foreColorPicker1.Items2295\"),\n            resources.GetString(\"foreColorPicker1.Items2296\"),\n            resources.GetString(\"foreColorPicker1.Items2297\"),\n            resources.GetString(\"foreColorPicker1.Items2298\"),\n            resources.GetString(\"foreColorPicker1.Items2299\"),\n            resources.GetString(\"foreColorPicker1.Items2300\"),\n            resources.GetString(\"foreColorPicker1.Items2301\"),\n            resources.GetString(\"foreColorPicker1.Items2302\"),\n            resources.GetString(\"foreColorPicker1.Items2303\"),\n            resources.GetString(\"foreColorPicker1.Items2304\"),\n            resources.GetString(\"foreColorPicker1.Items2305\"),\n            resources.GetString(\"foreColorPicker1.Items2306\"),\n            resources.GetString(\"foreColorPicker1.Items2307\"),\n            resources.GetString(\"foreColorPicker1.Items2308\"),\n            resources.GetString(\"foreColorPicker1.Items2309\"),\n            resources.GetString(\"foreColorPicker1.Items2310\"),\n            resources.GetString(\"foreColorPicker1.Items2311\"),\n            resources.GetString(\"foreColorPicker1.Items2312\"),\n            resources.GetString(\"foreColorPicker1.Items2313\"),\n            resources.GetString(\"foreColorPicker1.Items2314\"),\n            resources.GetString(\"foreColorPicker1.Items2315\"),\n            resources.GetString(\"foreColorPicker1.Items2316\"),\n            resources.GetString(\"foreColorPicker1.Items2317\"),\n            resources.GetString(\"foreColorPicker1.Items2318\"),\n            resources.GetString(\"foreColorPicker1.Items2319\"),\n            resources.GetString(\"foreColorPicker1.Items2320\"),\n            resources.GetString(\"foreColorPicker1.Items2321\"),\n            resources.GetString(\"foreColorPicker1.Items2322\"),\n            resources.GetString(\"foreColorPicker1.Items2323\"),\n            resources.GetString(\"foreColorPicker1.Items2324\"),\n            resources.GetString(\"foreColorPicker1.Items2325\"),\n            resources.GetString(\"foreColorPicker1.Items2326\"),\n            resources.GetString(\"foreColorPicker1.Items2327\"),\n            resources.GetString(\"foreColorPicker1.Items2328\"),\n            resources.GetString(\"foreColorPicker1.Items2329\"),\n            resources.GetString(\"foreColorPicker1.Items2330\"),\n            resources.GetString(\"foreColorPicker1.Items2331\"),\n            resources.GetString(\"foreColorPicker1.Items2332\"),\n            resources.GetString(\"foreColorPicker1.Items2333\"),\n            resources.GetString(\"foreColorPicker1.Items2334\"),\n            resources.GetString(\"foreColorPicker1.Items2335\"),\n            resources.GetString(\"foreColorPicker1.Items2336\"),\n            resources.GetString(\"foreColorPicker1.Items2337\"),\n            resources.GetString(\"foreColorPicker1.Items2338\"),\n            resources.GetString(\"foreColorPicker1.Items2339\"),\n            resources.GetString(\"foreColorPicker1.Items2340\"),\n            resources.GetString(\"foreColorPicker1.Items2341\"),\n            resources.GetString(\"foreColorPicker1.Items2342\"),\n            resources.GetString(\"foreColorPicker1.Items2343\"),\n            resources.GetString(\"foreColorPicker1.Items2344\"),\n            resources.GetString(\"foreColorPicker1.Items2345\"),\n            resources.GetString(\"foreColorPicker1.Items2346\"),\n            resources.GetString(\"foreColorPicker1.Items2347\"),\n            resources.GetString(\"foreColorPicker1.Items2348\"),\n            resources.GetString(\"foreColorPicker1.Items2349\"),\n            resources.GetString(\"foreColorPicker1.Items2350\"),\n            resources.GetString(\"foreColorPicker1.Items2351\"),\n            resources.GetString(\"foreColorPicker1.Items2352\"),\n            resources.GetString(\"foreColorPicker1.Items2353\"),\n            resources.GetString(\"foreColorPicker1.Items2354\"),\n            resources.GetString(\"foreColorPicker1.Items2355\"),\n            resources.GetString(\"foreColorPicker1.Items2356\"),\n            resources.GetString(\"foreColorPicker1.Items2357\"),\n            resources.GetString(\"foreColorPicker1.Items2358\"),\n            resources.GetString(\"foreColorPicker1.Items2359\"),\n            resources.GetString(\"foreColorPicker1.Items2360\"),\n            resources.GetString(\"foreColorPicker1.Items2361\"),\n            resources.GetString(\"foreColorPicker1.Items2362\"),\n            resources.GetString(\"foreColorPicker1.Items2363\"),\n            resources.GetString(\"foreColorPicker1.Items2364\"),\n            resources.GetString(\"foreColorPicker1.Items2365\"),\n            resources.GetString(\"foreColorPicker1.Items2366\"),\n            resources.GetString(\"foreColorPicker1.Items2367\"),\n            resources.GetString(\"foreColorPicker1.Items2368\"),\n            resources.GetString(\"foreColorPicker1.Items2369\"),\n            resources.GetString(\"foreColorPicker1.Items2370\"),\n            resources.GetString(\"foreColorPicker1.Items2371\"),\n            resources.GetString(\"foreColorPicker1.Items2372\"),\n            resources.GetString(\"foreColorPicker1.Items2373\"),\n            resources.GetString(\"foreColorPicker1.Items2374\"),\n            resources.GetString(\"foreColorPicker1.Items2375\"),\n            resources.GetString(\"foreColorPicker1.Items2376\"),\n            resources.GetString(\"foreColorPicker1.Items2377\"),\n            resources.GetString(\"foreColorPicker1.Items2378\"),\n            resources.GetString(\"foreColorPicker1.Items2379\"),\n            resources.GetString(\"foreColorPicker1.Items2380\"),\n            resources.GetString(\"foreColorPicker1.Items2381\"),\n            resources.GetString(\"foreColorPicker1.Items2382\"),\n            resources.GetString(\"foreColorPicker1.Items2383\"),\n            resources.GetString(\"foreColorPicker1.Items2384\"),\n            resources.GetString(\"foreColorPicker1.Items2385\"),\n            resources.GetString(\"foreColorPicker1.Items2386\"),\n            resources.GetString(\"foreColorPicker1.Items2387\"),\n            resources.GetString(\"foreColorPicker1.Items2388\"),\n            resources.GetString(\"foreColorPicker1.Items2389\"),\n            resources.GetString(\"foreColorPicker1.Items2390\"),\n            resources.GetString(\"foreColorPicker1.Items2391\"),\n            resources.GetString(\"foreColorPicker1.Items2392\"),\n            resources.GetString(\"foreColorPicker1.Items2393\"),\n            resources.GetString(\"foreColorPicker1.Items2394\"),\n            resources.GetString(\"foreColorPicker1.Items2395\"),\n            resources.GetString(\"foreColorPicker1.Items2396\"),\n            resources.GetString(\"foreColorPicker1.Items2397\"),\n            resources.GetString(\"foreColorPicker1.Items2398\"),\n            resources.GetString(\"foreColorPicker1.Items2399\"),\n            resources.GetString(\"foreColorPicker1.Items2400\"),\n            resources.GetString(\"foreColorPicker1.Items2401\"),\n            resources.GetString(\"foreColorPicker1.Items2402\"),\n            resources.GetString(\"foreColorPicker1.Items2403\"),\n            resources.GetString(\"foreColorPicker1.Items2404\"),\n            resources.GetString(\"foreColorPicker1.Items2405\"),\n            resources.GetString(\"foreColorPicker1.Items2406\"),\n            resources.GetString(\"foreColorPicker1.Items2407\"),\n            resources.GetString(\"foreColorPicker1.Items2408\"),\n            resources.GetString(\"foreColorPicker1.Items2409\"),\n            resources.GetString(\"foreColorPicker1.Items2410\"),\n            resources.GetString(\"foreColorPicker1.Items2411\"),\n            resources.GetString(\"foreColorPicker1.Items2412\"),\n            resources.GetString(\"foreColorPicker1.Items2413\"),\n            resources.GetString(\"foreColorPicker1.Items2414\"),\n            resources.GetString(\"foreColorPicker1.Items2415\"),\n            resources.GetString(\"foreColorPicker1.Items2416\"),\n            resources.GetString(\"foreColorPicker1.Items2417\"),\n            resources.GetString(\"foreColorPicker1.Items2418\"),\n            resources.GetString(\"foreColorPicker1.Items2419\"),\n            resources.GetString(\"foreColorPicker1.Items2420\"),\n            resources.GetString(\"foreColorPicker1.Items2421\"),\n            resources.GetString(\"foreColorPicker1.Items2422\"),\n            resources.GetString(\"foreColorPicker1.Items2423\"),\n            resources.GetString(\"foreColorPicker1.Items2424\"),\n            resources.GetString(\"foreColorPicker1.Items2425\"),\n            resources.GetString(\"foreColorPicker1.Items2426\"),\n            resources.GetString(\"foreColorPicker1.Items2427\"),\n            resources.GetString(\"foreColorPicker1.Items2428\"),\n            resources.GetString(\"foreColorPicker1.Items2429\"),\n            resources.GetString(\"foreColorPicker1.Items2430\"),\n            resources.GetString(\"foreColorPicker1.Items2431\"),\n            resources.GetString(\"foreColorPicker1.Items2432\"),\n            resources.GetString(\"foreColorPicker1.Items2433\"),\n            resources.GetString(\"foreColorPicker1.Items2434\"),\n            resources.GetString(\"foreColorPicker1.Items2435\"),\n            resources.GetString(\"foreColorPicker1.Items2436\"),\n            resources.GetString(\"foreColorPicker1.Items2437\"),\n            resources.GetString(\"foreColorPicker1.Items2438\"),\n            resources.GetString(\"foreColorPicker1.Items2439\"),\n            resources.GetString(\"foreColorPicker1.Items2440\"),\n            resources.GetString(\"foreColorPicker1.Items2441\"),\n            resources.GetString(\"foreColorPicker1.Items2442\"),\n            resources.GetString(\"foreColorPicker1.Items2443\"),\n            resources.GetString(\"foreColorPicker1.Items2444\"),\n            resources.GetString(\"foreColorPicker1.Items2445\"),\n            resources.GetString(\"foreColorPicker1.Items2446\"),\n            resources.GetString(\"foreColorPicker1.Items2447\"),\n            resources.GetString(\"foreColorPicker1.Items2448\"),\n            resources.GetString(\"foreColorPicker1.Items2449\"),\n            resources.GetString(\"foreColorPicker1.Items2450\"),\n            resources.GetString(\"foreColorPicker1.Items2451\"),\n            resources.GetString(\"foreColorPicker1.Items2452\"),\n            resources.GetString(\"foreColorPicker1.Items2453\"),\n            resources.GetString(\"foreColorPicker1.Items2454\"),\n            resources.GetString(\"foreColorPicker1.Items2455\"),\n            resources.GetString(\"foreColorPicker1.Items2456\"),\n            resources.GetString(\"foreColorPicker1.Items2457\"),\n            resources.GetString(\"foreColorPicker1.Items2458\"),\n            resources.GetString(\"foreColorPicker1.Items2459\"),\n            resources.GetString(\"foreColorPicker1.Items2460\"),\n            resources.GetString(\"foreColorPicker1.Items2461\"),\n            resources.GetString(\"foreColorPicker1.Items2462\"),\n            resources.GetString(\"foreColorPicker1.Items2463\"),\n            resources.GetString(\"foreColorPicker1.Items2464\"),\n            resources.GetString(\"foreColorPicker1.Items2465\"),\n            resources.GetString(\"foreColorPicker1.Items2466\"),\n            resources.GetString(\"foreColorPicker1.Items2467\"),\n            resources.GetString(\"foreColorPicker1.Items2468\"),\n            resources.GetString(\"foreColorPicker1.Items2469\"),\n            resources.GetString(\"foreColorPicker1.Items2470\"),\n            resources.GetString(\"foreColorPicker1.Items2471\"),\n            resources.GetString(\"foreColorPicker1.Items2472\"),\n            resources.GetString(\"foreColorPicker1.Items2473\"),\n            resources.GetString(\"foreColorPicker1.Items2474\"),\n            resources.GetString(\"foreColorPicker1.Items2475\"),\n            resources.GetString(\"foreColorPicker1.Items2476\"),\n            resources.GetString(\"foreColorPicker1.Items2477\"),\n            resources.GetString(\"foreColorPicker1.Items2478\"),\n            resources.GetString(\"foreColorPicker1.Items2479\"),\n            resources.GetString(\"foreColorPicker1.Items2480\"),\n            resources.GetString(\"foreColorPicker1.Items2481\"),\n            resources.GetString(\"foreColorPicker1.Items2482\"),\n            resources.GetString(\"foreColorPicker1.Items2483\"),\n            resources.GetString(\"foreColorPicker1.Items2484\"),\n            resources.GetString(\"foreColorPicker1.Items2485\"),\n            resources.GetString(\"foreColorPicker1.Items2486\"),\n            resources.GetString(\"foreColorPicker1.Items2487\"),\n            resources.GetString(\"foreColorPicker1.Items2488\"),\n            resources.GetString(\"foreColorPicker1.Items2489\"),\n            resources.GetString(\"foreColorPicker1.Items2490\"),\n            resources.GetString(\"foreColorPicker1.Items2491\"),\n            resources.GetString(\"foreColorPicker1.Items2492\"),\n            resources.GetString(\"foreColorPicker1.Items2493\"),\n            resources.GetString(\"foreColorPicker1.Items2494\"),\n            resources.GetString(\"foreColorPicker1.Items2495\"),\n            resources.GetString(\"foreColorPicker1.Items2496\"),\n            resources.GetString(\"foreColorPicker1.Items2497\"),\n            resources.GetString(\"foreColorPicker1.Items2498\"),\n            resources.GetString(\"foreColorPicker1.Items2499\"),\n            resources.GetString(\"foreColorPicker1.Items2500\"),\n            resources.GetString(\"foreColorPicker1.Items2501\"),\n            resources.GetString(\"foreColorPicker1.Items2502\"),\n            resources.GetString(\"foreColorPicker1.Items2503\"),\n            resources.GetString(\"foreColorPicker1.Items2504\"),\n            resources.GetString(\"foreColorPicker1.Items2505\"),\n            resources.GetString(\"foreColorPicker1.Items2506\"),\n            resources.GetString(\"foreColorPicker1.Items2507\"),\n            resources.GetString(\"foreColorPicker1.Items2508\"),\n            resources.GetString(\"foreColorPicker1.Items2509\"),\n            resources.GetString(\"foreColorPicker1.Items2510\"),\n            resources.GetString(\"foreColorPicker1.Items2511\"),\n            resources.GetString(\"foreColorPicker1.Items2512\"),\n            resources.GetString(\"foreColorPicker1.Items2513\"),\n            resources.GetString(\"foreColorPicker1.Items2514\"),\n            resources.GetString(\"foreColorPicker1.Items2515\"),\n            resources.GetString(\"foreColorPicker1.Items2516\"),\n            resources.GetString(\"foreColorPicker1.Items2517\"),\n            resources.GetString(\"foreColorPicker1.Items2518\"),\n            resources.GetString(\"foreColorPicker1.Items2519\")});\n\t\t\tthis.foreColorPicker1.Name = \"foreColorPicker1\";\n\t\t\tthis.foreColorPicker1.Tag = \"Fore Color\";\n\t\t\tthis.foreColorPicker1.SelectedValueChanged += new System.EventHandler(this.ctlForeColor_Change);\n\t\t\tthis.foreColorPicker1.Validated += new System.EventHandler(this.ctlForeColor_Change);\n\t\t\t// \n\t\t\t// backColorPicker1\n\t\t\t// \n\t\t\tthis.backColorPicker1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;\n\t\t\tthis.backColorPicker1.DropDownHeight = 1;\n\t\t\tthis.backColorPicker1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tresources.ApplyResources(this.backColorPicker1, \"backColorPicker1\");\n\t\t\tthis.backColorPicker1.FormattingEnabled = true;\n\t\t\tthis.backColorPicker1.Items.AddRange(new object[] {\n            resources.GetString(\"backColorPicker1.Items\"),\n            resources.GetString(\"backColorPicker1.Items1\"),\n            resources.GetString(\"backColorPicker1.Items2\"),\n            resources.GetString(\"backColorPicker1.Items3\"),\n            resources.GetString(\"backColorPicker1.Items4\"),\n            resources.GetString(\"backColorPicker1.Items5\"),\n            resources.GetString(\"backColorPicker1.Items6\"),\n            resources.GetString(\"backColorPicker1.Items7\"),\n            resources.GetString(\"backColorPicker1.Items8\"),\n            resources.GetString(\"backColorPicker1.Items9\"),\n            resources.GetString(\"backColorPicker1.Items10\"),\n            resources.GetString(\"backColorPicker1.Items11\"),\n            resources.GetString(\"backColorPicker1.Items12\"),\n            resources.GetString(\"backColorPicker1.Items13\"),\n            resources.GetString(\"backColorPicker1.Items14\"),\n            resources.GetString(\"backColorPicker1.Items15\"),\n            resources.GetString(\"backColorPicker1.Items16\"),\n            resources.GetString(\"backColorPicker1.Items17\"),\n            resources.GetString(\"backColorPicker1.Items18\"),\n            resources.GetString(\"backColorPicker1.Items19\"),\n            resources.GetString(\"backColorPicker1.Items20\"),\n            resources.GetString(\"backColorPicker1.Items21\"),\n            resources.GetString(\"backColorPicker1.Items22\"),\n            resources.GetString(\"backColorPicker1.Items23\"),\n            resources.GetString(\"backColorPicker1.Items24\"),\n            resources.GetString(\"backColorPicker1.Items25\"),\n            resources.GetString(\"backColorPicker1.Items26\"),\n            resources.GetString(\"backColorPicker1.Items27\"),\n            resources.GetString(\"backColorPicker1.Items28\"),\n            resources.GetString(\"backColorPicker1.Items29\"),\n            resources.GetString(\"backColorPicker1.Items30\"),\n            resources.GetString(\"backColorPicker1.Items31\"),\n            resources.GetString(\"backColorPicker1.Items32\"),\n            resources.GetString(\"backColorPicker1.Items33\"),\n            resources.GetString(\"backColorPicker1.Items34\"),\n            resources.GetString(\"backColorPicker1.Items35\"),\n            resources.GetString(\"backColorPicker1.Items36\"),\n            resources.GetString(\"backColorPicker1.Items37\"),\n            resources.GetString(\"backColorPicker1.Items38\"),\n            resources.GetString(\"backColorPicker1.Items39\"),\n            resources.GetString(\"backColorPicker1.Items40\"),\n            resources.GetString(\"backColorPicker1.Items41\"),\n            resources.GetString(\"backColorPicker1.Items42\"),\n            resources.GetString(\"backColorPicker1.Items43\"),\n            resources.GetString(\"backColorPicker1.Items44\"),\n            resources.GetString(\"backColorPicker1.Items45\"),\n            resources.GetString(\"backColorPicker1.Items46\"),\n            resources.GetString(\"backColorPicker1.Items47\"),\n            resources.GetString(\"backColorPicker1.Items48\"),\n            resources.GetString(\"backColorPicker1.Items49\"),\n            resources.GetString(\"backColorPicker1.Items50\"),\n            resources.GetString(\"backColorPicker1.Items51\"),\n            resources.GetString(\"backColorPicker1.Items52\"),\n            resources.GetString(\"backColorPicker1.Items53\"),\n            resources.GetString(\"backColorPicker1.Items54\"),\n            resources.GetString(\"backColorPicker1.Items55\"),\n            resources.GetString(\"backColorPicker1.Items56\"),\n            resources.GetString(\"backColorPicker1.Items57\"),\n            resources.GetString(\"backColorPicker1.Items58\"),\n            resources.GetString(\"backColorPicker1.Items59\"),\n            resources.GetString(\"backColorPicker1.Items60\"),\n            resources.GetString(\"backColorPicker1.Items61\"),\n            resources.GetString(\"backColorPicker1.Items62\"),\n            resources.GetString(\"backColorPicker1.Items63\"),\n            resources.GetString(\"backColorPicker1.Items64\"),\n            resources.GetString(\"backColorPicker1.Items65\"),\n            resources.GetString(\"backColorPicker1.Items66\"),\n            resources.GetString(\"backColorPicker1.Items67\"),\n            resources.GetString(\"backColorPicker1.Items68\"),\n            resources.GetString(\"backColorPicker1.Items69\"),\n            resources.GetString(\"backColorPicker1.Items70\"),\n            resources.GetString(\"backColorPicker1.Items71\"),\n            resources.GetString(\"backColorPicker1.Items72\"),\n            resources.GetString(\"backColorPicker1.Items73\"),\n            resources.GetString(\"backColorPicker1.Items74\"),\n            resources.GetString(\"backColorPicker1.Items75\"),\n            resources.GetString(\"backColorPicker1.Items76\"),\n            resources.GetString(\"backColorPicker1.Items77\"),\n            resources.GetString(\"backColorPicker1.Items78\"),\n            resources.GetString(\"backColorPicker1.Items79\"),\n            resources.GetString(\"backColorPicker1.Items80\"),\n            resources.GetString(\"backColorPicker1.Items81\"),\n            resources.GetString(\"backColorPicker1.Items82\"),\n            resources.GetString(\"backColorPicker1.Items83\"),\n            resources.GetString(\"backColorPicker1.Items84\"),\n            resources.GetString(\"backColorPicker1.Items85\"),\n            resources.GetString(\"backColorPicker1.Items86\"),\n            resources.GetString(\"backColorPicker1.Items87\"),\n            resources.GetString(\"backColorPicker1.Items88\"),\n            resources.GetString(\"backColorPicker1.Items89\"),\n            resources.GetString(\"backColorPicker1.Items90\"),\n            resources.GetString(\"backColorPicker1.Items91\"),\n            resources.GetString(\"backColorPicker1.Items92\"),\n            resources.GetString(\"backColorPicker1.Items93\"),\n            resources.GetString(\"backColorPicker1.Items94\"),\n            resources.GetString(\"backColorPicker1.Items95\"),\n            resources.GetString(\"backColorPicker1.Items96\"),\n            resources.GetString(\"backColorPicker1.Items97\"),\n            resources.GetString(\"backColorPicker1.Items98\"),\n            resources.GetString(\"backColorPicker1.Items99\"),\n            resources.GetString(\"backColorPicker1.Items100\"),\n            resources.GetString(\"backColorPicker1.Items101\"),\n            resources.GetString(\"backColorPicker1.Items102\"),\n            resources.GetString(\"backColorPicker1.Items103\"),\n            resources.GetString(\"backColorPicker1.Items104\"),\n            resources.GetString(\"backColorPicker1.Items105\"),\n            resources.GetString(\"backColorPicker1.Items106\"),\n            resources.GetString(\"backColorPicker1.Items107\"),\n            resources.GetString(\"backColorPicker1.Items108\"),\n            resources.GetString(\"backColorPicker1.Items109\"),\n            resources.GetString(\"backColorPicker1.Items110\"),\n            resources.GetString(\"backColorPicker1.Items111\"),\n            resources.GetString(\"backColorPicker1.Items112\"),\n            resources.GetString(\"backColorPicker1.Items113\"),\n            resources.GetString(\"backColorPicker1.Items114\"),\n            resources.GetString(\"backColorPicker1.Items115\"),\n            resources.GetString(\"backColorPicker1.Items116\"),\n            resources.GetString(\"backColorPicker1.Items117\"),\n            resources.GetString(\"backColorPicker1.Items118\"),\n            resources.GetString(\"backColorPicker1.Items119\"),\n            resources.GetString(\"backColorPicker1.Items120\"),\n            resources.GetString(\"backColorPicker1.Items121\"),\n            resources.GetString(\"backColorPicker1.Items122\"),\n            resources.GetString(\"backColorPicker1.Items123\"),\n            resources.GetString(\"backColorPicker1.Items124\"),\n            resources.GetString(\"backColorPicker1.Items125\"),\n            resources.GetString(\"backColorPicker1.Items126\"),\n            resources.GetString(\"backColorPicker1.Items127\"),\n            resources.GetString(\"backColorPicker1.Items128\"),\n            resources.GetString(\"backColorPicker1.Items129\"),\n            resources.GetString(\"backColorPicker1.Items130\"),\n            resources.GetString(\"backColorPicker1.Items131\"),\n            resources.GetString(\"backColorPicker1.Items132\"),\n            resources.GetString(\"backColorPicker1.Items133\"),\n            resources.GetString(\"backColorPicker1.Items134\"),\n            resources.GetString(\"backColorPicker1.Items135\"),\n            resources.GetString(\"backColorPicker1.Items136\"),\n            resources.GetString(\"backColorPicker1.Items137\"),\n            resources.GetString(\"backColorPicker1.Items138\"),\n            resources.GetString(\"backColorPicker1.Items139\"),\n            resources.GetString(\"backColorPicker1.Items140\"),\n            resources.GetString(\"backColorPicker1.Items141\"),\n            resources.GetString(\"backColorPicker1.Items142\"),\n            resources.GetString(\"backColorPicker1.Items143\"),\n            resources.GetString(\"backColorPicker1.Items144\"),\n            resources.GetString(\"backColorPicker1.Items145\"),\n            resources.GetString(\"backColorPicker1.Items146\"),\n            resources.GetString(\"backColorPicker1.Items147\"),\n            resources.GetString(\"backColorPicker1.Items148\"),\n            resources.GetString(\"backColorPicker1.Items149\"),\n            resources.GetString(\"backColorPicker1.Items150\"),\n            resources.GetString(\"backColorPicker1.Items151\"),\n            resources.GetString(\"backColorPicker1.Items152\"),\n            resources.GetString(\"backColorPicker1.Items153\"),\n            resources.GetString(\"backColorPicker1.Items154\"),\n            resources.GetString(\"backColorPicker1.Items155\"),\n            resources.GetString(\"backColorPicker1.Items156\"),\n            resources.GetString(\"backColorPicker1.Items157\"),\n            resources.GetString(\"backColorPicker1.Items158\"),\n            resources.GetString(\"backColorPicker1.Items159\"),\n            resources.GetString(\"backColorPicker1.Items160\"),\n            resources.GetString(\"backColorPicker1.Items161\"),\n            resources.GetString(\"backColorPicker1.Items162\"),\n            resources.GetString(\"backColorPicker1.Items163\"),\n            resources.GetString(\"backColorPicker1.Items164\"),\n            resources.GetString(\"backColorPicker1.Items165\"),\n            resources.GetString(\"backColorPicker1.Items166\"),\n            resources.GetString(\"backColorPicker1.Items167\"),\n            resources.GetString(\"backColorPicker1.Items168\"),\n            resources.GetString(\"backColorPicker1.Items169\"),\n            resources.GetString(\"backColorPicker1.Items170\"),\n            resources.GetString(\"backColorPicker1.Items171\"),\n            resources.GetString(\"backColorPicker1.Items172\"),\n            resources.GetString(\"backColorPicker1.Items173\"),\n            resources.GetString(\"backColorPicker1.Items174\"),\n            resources.GetString(\"backColorPicker1.Items175\"),\n            resources.GetString(\"backColorPicker1.Items176\"),\n            resources.GetString(\"backColorPicker1.Items177\"),\n            resources.GetString(\"backColorPicker1.Items178\"),\n            resources.GetString(\"backColorPicker1.Items179\"),\n            resources.GetString(\"backColorPicker1.Items180\"),\n            resources.GetString(\"backColorPicker1.Items181\"),\n            resources.GetString(\"backColorPicker1.Items182\"),\n            resources.GetString(\"backColorPicker1.Items183\"),\n            resources.GetString(\"backColorPicker1.Items184\"),\n            resources.GetString(\"backColorPicker1.Items185\"),\n            resources.GetString(\"backColorPicker1.Items186\"),\n            resources.GetString(\"backColorPicker1.Items187\"),\n            resources.GetString(\"backColorPicker1.Items188\"),\n            resources.GetString(\"backColorPicker1.Items189\"),\n            resources.GetString(\"backColorPicker1.Items190\"),\n            resources.GetString(\"backColorPicker1.Items191\"),\n            resources.GetString(\"backColorPicker1.Items192\"),\n            resources.GetString(\"backColorPicker1.Items193\"),\n            resources.GetString(\"backColorPicker1.Items194\"),\n            resources.GetString(\"backColorPicker1.Items195\"),\n            resources.GetString(\"backColorPicker1.Items196\"),\n            resources.GetString(\"backColorPicker1.Items197\"),\n            resources.GetString(\"backColorPicker1.Items198\"),\n            resources.GetString(\"backColorPicker1.Items199\"),\n            resources.GetString(\"backColorPicker1.Items200\"),\n            resources.GetString(\"backColorPicker1.Items201\"),\n            resources.GetString(\"backColorPicker1.Items202\"),\n            resources.GetString(\"backColorPicker1.Items203\"),\n            resources.GetString(\"backColorPicker1.Items204\"),\n            resources.GetString(\"backColorPicker1.Items205\"),\n            resources.GetString(\"backColorPicker1.Items206\"),\n            resources.GetString(\"backColorPicker1.Items207\"),\n            resources.GetString(\"backColorPicker1.Items208\"),\n            resources.GetString(\"backColorPicker1.Items209\"),\n            resources.GetString(\"backColorPicker1.Items210\"),\n            resources.GetString(\"backColorPicker1.Items211\"),\n            resources.GetString(\"backColorPicker1.Items212\"),\n            resources.GetString(\"backColorPicker1.Items213\"),\n            resources.GetString(\"backColorPicker1.Items214\"),\n            resources.GetString(\"backColorPicker1.Items215\"),\n            resources.GetString(\"backColorPicker1.Items216\"),\n            resources.GetString(\"backColorPicker1.Items217\"),\n            resources.GetString(\"backColorPicker1.Items218\"),\n            resources.GetString(\"backColorPicker1.Items219\"),\n            resources.GetString(\"backColorPicker1.Items220\"),\n            resources.GetString(\"backColorPicker1.Items221\"),\n            resources.GetString(\"backColorPicker1.Items222\"),\n            resources.GetString(\"backColorPicker1.Items223\"),\n            resources.GetString(\"backColorPicker1.Items224\"),\n            resources.GetString(\"backColorPicker1.Items225\"),\n            resources.GetString(\"backColorPicker1.Items226\"),\n            resources.GetString(\"backColorPicker1.Items227\"),\n            resources.GetString(\"backColorPicker1.Items228\"),\n            resources.GetString(\"backColorPicker1.Items229\"),\n            resources.GetString(\"backColorPicker1.Items230\"),\n            resources.GetString(\"backColorPicker1.Items231\"),\n            resources.GetString(\"backColorPicker1.Items232\"),\n            resources.GetString(\"backColorPicker1.Items233\"),\n            resources.GetString(\"backColorPicker1.Items234\"),\n            resources.GetString(\"backColorPicker1.Items235\"),\n            resources.GetString(\"backColorPicker1.Items236\"),\n            resources.GetString(\"backColorPicker1.Items237\"),\n            resources.GetString(\"backColorPicker1.Items238\"),\n            resources.GetString(\"backColorPicker1.Items239\"),\n            resources.GetString(\"backColorPicker1.Items240\"),\n            resources.GetString(\"backColorPicker1.Items241\"),\n            resources.GetString(\"backColorPicker1.Items242\"),\n            resources.GetString(\"backColorPicker1.Items243\"),\n            resources.GetString(\"backColorPicker1.Items244\"),\n            resources.GetString(\"backColorPicker1.Items245\"),\n            resources.GetString(\"backColorPicker1.Items246\"),\n            resources.GetString(\"backColorPicker1.Items247\"),\n            resources.GetString(\"backColorPicker1.Items248\"),\n            resources.GetString(\"backColorPicker1.Items249\"),\n            resources.GetString(\"backColorPicker1.Items250\"),\n            resources.GetString(\"backColorPicker1.Items251\"),\n            resources.GetString(\"backColorPicker1.Items252\"),\n            resources.GetString(\"backColorPicker1.Items253\"),\n            resources.GetString(\"backColorPicker1.Items254\"),\n            resources.GetString(\"backColorPicker1.Items255\"),\n            resources.GetString(\"backColorPicker1.Items256\"),\n            resources.GetString(\"backColorPicker1.Items257\"),\n            resources.GetString(\"backColorPicker1.Items258\"),\n            resources.GetString(\"backColorPicker1.Items259\"),\n            resources.GetString(\"backColorPicker1.Items260\"),\n            resources.GetString(\"backColorPicker1.Items261\"),\n            resources.GetString(\"backColorPicker1.Items262\"),\n            resources.GetString(\"backColorPicker1.Items263\"),\n            resources.GetString(\"backColorPicker1.Items264\"),\n            resources.GetString(\"backColorPicker1.Items265\"),\n            resources.GetString(\"backColorPicker1.Items266\"),\n            resources.GetString(\"backColorPicker1.Items267\"),\n            resources.GetString(\"backColorPicker1.Items268\"),\n            resources.GetString(\"backColorPicker1.Items269\"),\n            resources.GetString(\"backColorPicker1.Items270\"),\n            resources.GetString(\"backColorPicker1.Items271\"),\n            resources.GetString(\"backColorPicker1.Items272\"),\n            resources.GetString(\"backColorPicker1.Items273\"),\n            resources.GetString(\"backColorPicker1.Items274\"),\n            resources.GetString(\"backColorPicker1.Items275\"),\n            resources.GetString(\"backColorPicker1.Items276\"),\n            resources.GetString(\"backColorPicker1.Items277\"),\n            resources.GetString(\"backColorPicker1.Items278\"),\n            resources.GetString(\"backColorPicker1.Items279\"),\n            resources.GetString(\"backColorPicker1.Items280\"),\n            resources.GetString(\"backColorPicker1.Items281\"),\n            resources.GetString(\"backColorPicker1.Items282\"),\n            resources.GetString(\"backColorPicker1.Items283\"),\n            resources.GetString(\"backColorPicker1.Items284\"),\n            resources.GetString(\"backColorPicker1.Items285\"),\n            resources.GetString(\"backColorPicker1.Items286\"),\n            resources.GetString(\"backColorPicker1.Items287\"),\n            resources.GetString(\"backColorPicker1.Items288\"),\n            resources.GetString(\"backColorPicker1.Items289\"),\n            resources.GetString(\"backColorPicker1.Items290\"),\n            resources.GetString(\"backColorPicker1.Items291\"),\n            resources.GetString(\"backColorPicker1.Items292\"),\n            resources.GetString(\"backColorPicker1.Items293\"),\n            resources.GetString(\"backColorPicker1.Items294\"),\n            resources.GetString(\"backColorPicker1.Items295\"),\n            resources.GetString(\"backColorPicker1.Items296\"),\n            resources.GetString(\"backColorPicker1.Items297\"),\n            resources.GetString(\"backColorPicker1.Items298\"),\n            resources.GetString(\"backColorPicker1.Items299\"),\n            resources.GetString(\"backColorPicker1.Items300\"),\n            resources.GetString(\"backColorPicker1.Items301\"),\n            resources.GetString(\"backColorPicker1.Items302\"),\n            resources.GetString(\"backColorPicker1.Items303\"),\n            resources.GetString(\"backColorPicker1.Items304\"),\n            resources.GetString(\"backColorPicker1.Items305\"),\n            resources.GetString(\"backColorPicker1.Items306\"),\n            resources.GetString(\"backColorPicker1.Items307\"),\n            resources.GetString(\"backColorPicker1.Items308\"),\n            resources.GetString(\"backColorPicker1.Items309\"),\n            resources.GetString(\"backColorPicker1.Items310\"),\n            resources.GetString(\"backColorPicker1.Items311\"),\n            resources.GetString(\"backColorPicker1.Items312\"),\n            resources.GetString(\"backColorPicker1.Items313\"),\n            resources.GetString(\"backColorPicker1.Items314\"),\n            resources.GetString(\"backColorPicker1.Items315\"),\n            resources.GetString(\"backColorPicker1.Items316\"),\n            resources.GetString(\"backColorPicker1.Items317\"),\n            resources.GetString(\"backColorPicker1.Items318\"),\n            resources.GetString(\"backColorPicker1.Items319\"),\n            resources.GetString(\"backColorPicker1.Items320\"),\n            resources.GetString(\"backColorPicker1.Items321\"),\n            resources.GetString(\"backColorPicker1.Items322\"),\n            resources.GetString(\"backColorPicker1.Items323\"),\n            resources.GetString(\"backColorPicker1.Items324\"),\n            resources.GetString(\"backColorPicker1.Items325\"),\n            resources.GetString(\"backColorPicker1.Items326\"),\n            resources.GetString(\"backColorPicker1.Items327\"),\n            resources.GetString(\"backColorPicker1.Items328\"),\n            resources.GetString(\"backColorPicker1.Items329\"),\n            resources.GetString(\"backColorPicker1.Items330\"),\n            resources.GetString(\"backColorPicker1.Items331\"),\n            resources.GetString(\"backColorPicker1.Items332\"),\n            resources.GetString(\"backColorPicker1.Items333\"),\n            resources.GetString(\"backColorPicker1.Items334\"),\n            resources.GetString(\"backColorPicker1.Items335\"),\n            resources.GetString(\"backColorPicker1.Items336\"),\n            resources.GetString(\"backColorPicker1.Items337\"),\n            resources.GetString(\"backColorPicker1.Items338\"),\n            resources.GetString(\"backColorPicker1.Items339\"),\n            resources.GetString(\"backColorPicker1.Items340\"),\n            resources.GetString(\"backColorPicker1.Items341\"),\n            resources.GetString(\"backColorPicker1.Items342\"),\n            resources.GetString(\"backColorPicker1.Items343\"),\n            resources.GetString(\"backColorPicker1.Items344\"),\n            resources.GetString(\"backColorPicker1.Items345\"),\n            resources.GetString(\"backColorPicker1.Items346\"),\n            resources.GetString(\"backColorPicker1.Items347\"),\n            resources.GetString(\"backColorPicker1.Items348\"),\n            resources.GetString(\"backColorPicker1.Items349\"),\n            resources.GetString(\"backColorPicker1.Items350\"),\n            resources.GetString(\"backColorPicker1.Items351\"),\n            resources.GetString(\"backColorPicker1.Items352\"),\n            resources.GetString(\"backColorPicker1.Items353\"),\n            resources.GetString(\"backColorPicker1.Items354\"),\n            resources.GetString(\"backColorPicker1.Items355\"),\n            resources.GetString(\"backColorPicker1.Items356\"),\n            resources.GetString(\"backColorPicker1.Items357\"),\n            resources.GetString(\"backColorPicker1.Items358\"),\n            resources.GetString(\"backColorPicker1.Items359\"),\n            resources.GetString(\"backColorPicker1.Items360\"),\n            resources.GetString(\"backColorPicker1.Items361\"),\n            resources.GetString(\"backColorPicker1.Items362\"),\n            resources.GetString(\"backColorPicker1.Items363\"),\n            resources.GetString(\"backColorPicker1.Items364\"),\n            resources.GetString(\"backColorPicker1.Items365\"),\n            resources.GetString(\"backColorPicker1.Items366\"),\n            resources.GetString(\"backColorPicker1.Items367\"),\n            resources.GetString(\"backColorPicker1.Items368\"),\n            resources.GetString(\"backColorPicker1.Items369\"),\n            resources.GetString(\"backColorPicker1.Items370\"),\n            resources.GetString(\"backColorPicker1.Items371\"),\n            resources.GetString(\"backColorPicker1.Items372\"),\n            resources.GetString(\"backColorPicker1.Items373\"),\n            resources.GetString(\"backColorPicker1.Items374\"),\n            resources.GetString(\"backColorPicker1.Items375\"),\n            resources.GetString(\"backColorPicker1.Items376\"),\n            resources.GetString(\"backColorPicker1.Items377\"),\n            resources.GetString(\"backColorPicker1.Items378\"),\n            resources.GetString(\"backColorPicker1.Items379\"),\n            resources.GetString(\"backColorPicker1.Items380\"),\n            resources.GetString(\"backColorPicker1.Items381\"),\n            resources.GetString(\"backColorPicker1.Items382\"),\n            resources.GetString(\"backColorPicker1.Items383\"),\n            resources.GetString(\"backColorPicker1.Items384\"),\n            resources.GetString(\"backColorPicker1.Items385\"),\n            resources.GetString(\"backColorPicker1.Items386\"),\n            resources.GetString(\"backColorPicker1.Items387\"),\n            resources.GetString(\"backColorPicker1.Items388\"),\n            resources.GetString(\"backColorPicker1.Items389\"),\n            resources.GetString(\"backColorPicker1.Items390\"),\n            resources.GetString(\"backColorPicker1.Items391\"),\n            resources.GetString(\"backColorPicker1.Items392\"),\n            resources.GetString(\"backColorPicker1.Items393\"),\n            resources.GetString(\"backColorPicker1.Items394\"),\n            resources.GetString(\"backColorPicker1.Items395\"),\n            resources.GetString(\"backColorPicker1.Items396\"),\n            resources.GetString(\"backColorPicker1.Items397\"),\n            resources.GetString(\"backColorPicker1.Items398\"),\n            resources.GetString(\"backColorPicker1.Items399\"),\n            resources.GetString(\"backColorPicker1.Items400\"),\n            resources.GetString(\"backColorPicker1.Items401\"),\n            resources.GetString(\"backColorPicker1.Items402\"),\n            resources.GetString(\"backColorPicker1.Items403\"),\n            resources.GetString(\"backColorPicker1.Items404\"),\n            resources.GetString(\"backColorPicker1.Items405\"),\n            resources.GetString(\"backColorPicker1.Items406\"),\n            resources.GetString(\"backColorPicker1.Items407\"),\n            resources.GetString(\"backColorPicker1.Items408\"),\n            resources.GetString(\"backColorPicker1.Items409\"),\n            resources.GetString(\"backColorPicker1.Items410\"),\n            resources.GetString(\"backColorPicker1.Items411\"),\n            resources.GetString(\"backColorPicker1.Items412\"),\n            resources.GetString(\"backColorPicker1.Items413\"),\n            resources.GetString(\"backColorPicker1.Items414\"),\n            resources.GetString(\"backColorPicker1.Items415\"),\n            resources.GetString(\"backColorPicker1.Items416\"),\n            resources.GetString(\"backColorPicker1.Items417\"),\n            resources.GetString(\"backColorPicker1.Items418\"),\n            resources.GetString(\"backColorPicker1.Items419\"),\n            resources.GetString(\"backColorPicker1.Items420\"),\n            resources.GetString(\"backColorPicker1.Items421\"),\n            resources.GetString(\"backColorPicker1.Items422\"),\n            resources.GetString(\"backColorPicker1.Items423\"),\n            resources.GetString(\"backColorPicker1.Items424\"),\n            resources.GetString(\"backColorPicker1.Items425\"),\n            resources.GetString(\"backColorPicker1.Items426\"),\n            resources.GetString(\"backColorPicker1.Items427\"),\n            resources.GetString(\"backColorPicker1.Items428\"),\n            resources.GetString(\"backColorPicker1.Items429\"),\n            resources.GetString(\"backColorPicker1.Items430\"),\n            resources.GetString(\"backColorPicker1.Items431\"),\n            resources.GetString(\"backColorPicker1.Items432\"),\n            resources.GetString(\"backColorPicker1.Items433\"),\n            resources.GetString(\"backColorPicker1.Items434\"),\n            resources.GetString(\"backColorPicker1.Items435\"),\n            resources.GetString(\"backColorPicker1.Items436\"),\n            resources.GetString(\"backColorPicker1.Items437\"),\n            resources.GetString(\"backColorPicker1.Items438\"),\n            resources.GetString(\"backColorPicker1.Items439\"),\n            resources.GetString(\"backColorPicker1.Items440\"),\n            resources.GetString(\"backColorPicker1.Items441\"),\n            resources.GetString(\"backColorPicker1.Items442\"),\n            resources.GetString(\"backColorPicker1.Items443\"),\n            resources.GetString(\"backColorPicker1.Items444\"),\n            resources.GetString(\"backColorPicker1.Items445\"),\n            resources.GetString(\"backColorPicker1.Items446\"),\n            resources.GetString(\"backColorPicker1.Items447\"),\n            resources.GetString(\"backColorPicker1.Items448\"),\n            resources.GetString(\"backColorPicker1.Items449\"),\n            resources.GetString(\"backColorPicker1.Items450\"),\n            resources.GetString(\"backColorPicker1.Items451\"),\n            resources.GetString(\"backColorPicker1.Items452\"),\n            resources.GetString(\"backColorPicker1.Items453\"),\n            resources.GetString(\"backColorPicker1.Items454\"),\n            resources.GetString(\"backColorPicker1.Items455\"),\n            resources.GetString(\"backColorPicker1.Items456\"),\n            resources.GetString(\"backColorPicker1.Items457\"),\n            resources.GetString(\"backColorPicker1.Items458\"),\n            resources.GetString(\"backColorPicker1.Items459\"),\n            resources.GetString(\"backColorPicker1.Items460\"),\n            resources.GetString(\"backColorPicker1.Items461\"),\n            resources.GetString(\"backColorPicker1.Items462\"),\n            resources.GetString(\"backColorPicker1.Items463\"),\n            resources.GetString(\"backColorPicker1.Items464\"),\n            resources.GetString(\"backColorPicker1.Items465\"),\n            resources.GetString(\"backColorPicker1.Items466\"),\n            resources.GetString(\"backColorPicker1.Items467\"),\n            resources.GetString(\"backColorPicker1.Items468\"),\n            resources.GetString(\"backColorPicker1.Items469\"),\n            resources.GetString(\"backColorPicker1.Items470\"),\n            resources.GetString(\"backColorPicker1.Items471\"),\n            resources.GetString(\"backColorPicker1.Items472\"),\n            resources.GetString(\"backColorPicker1.Items473\"),\n            resources.GetString(\"backColorPicker1.Items474\"),\n            resources.GetString(\"backColorPicker1.Items475\"),\n            resources.GetString(\"backColorPicker1.Items476\"),\n            resources.GetString(\"backColorPicker1.Items477\"),\n            resources.GetString(\"backColorPicker1.Items478\"),\n            resources.GetString(\"backColorPicker1.Items479\"),\n            resources.GetString(\"backColorPicker1.Items480\"),\n            resources.GetString(\"backColorPicker1.Items481\"),\n            resources.GetString(\"backColorPicker1.Items482\"),\n            resources.GetString(\"backColorPicker1.Items483\"),\n            resources.GetString(\"backColorPicker1.Items484\"),\n            resources.GetString(\"backColorPicker1.Items485\"),\n            resources.GetString(\"backColorPicker1.Items486\"),\n            resources.GetString(\"backColorPicker1.Items487\"),\n            resources.GetString(\"backColorPicker1.Items488\"),\n            resources.GetString(\"backColorPicker1.Items489\"),\n            resources.GetString(\"backColorPicker1.Items490\"),\n            resources.GetString(\"backColorPicker1.Items491\"),\n            resources.GetString(\"backColorPicker1.Items492\"),\n            resources.GetString(\"backColorPicker1.Items493\"),\n            resources.GetString(\"backColorPicker1.Items494\"),\n            resources.GetString(\"backColorPicker1.Items495\"),\n            resources.GetString(\"backColorPicker1.Items496\"),\n            resources.GetString(\"backColorPicker1.Items497\"),\n            resources.GetString(\"backColorPicker1.Items498\"),\n            resources.GetString(\"backColorPicker1.Items499\"),\n            resources.GetString(\"backColorPicker1.Items500\"),\n            resources.GetString(\"backColorPicker1.Items501\"),\n            resources.GetString(\"backColorPicker1.Items502\"),\n            resources.GetString(\"backColorPicker1.Items503\"),\n            resources.GetString(\"backColorPicker1.Items504\"),\n            resources.GetString(\"backColorPicker1.Items505\"),\n            resources.GetString(\"backColorPicker1.Items506\"),\n            resources.GetString(\"backColorPicker1.Items507\"),\n            resources.GetString(\"backColorPicker1.Items508\"),\n            resources.GetString(\"backColorPicker1.Items509\"),\n            resources.GetString(\"backColorPicker1.Items510\"),\n            resources.GetString(\"backColorPicker1.Items511\"),\n            resources.GetString(\"backColorPicker1.Items512\"),\n            resources.GetString(\"backColorPicker1.Items513\"),\n            resources.GetString(\"backColorPicker1.Items514\"),\n            resources.GetString(\"backColorPicker1.Items515\"),\n            resources.GetString(\"backColorPicker1.Items516\"),\n            resources.GetString(\"backColorPicker1.Items517\"),\n            resources.GetString(\"backColorPicker1.Items518\"),\n            resources.GetString(\"backColorPicker1.Items519\"),\n            resources.GetString(\"backColorPicker1.Items520\"),\n            resources.GetString(\"backColorPicker1.Items521\"),\n            resources.GetString(\"backColorPicker1.Items522\"),\n            resources.GetString(\"backColorPicker1.Items523\"),\n            resources.GetString(\"backColorPicker1.Items524\"),\n            resources.GetString(\"backColorPicker1.Items525\"),\n            resources.GetString(\"backColorPicker1.Items526\"),\n            resources.GetString(\"backColorPicker1.Items527\"),\n            resources.GetString(\"backColorPicker1.Items528\"),\n            resources.GetString(\"backColorPicker1.Items529\"),\n            resources.GetString(\"backColorPicker1.Items530\"),\n            resources.GetString(\"backColorPicker1.Items531\"),\n            resources.GetString(\"backColorPicker1.Items532\"),\n            resources.GetString(\"backColorPicker1.Items533\"),\n            resources.GetString(\"backColorPicker1.Items534\"),\n            resources.GetString(\"backColorPicker1.Items535\"),\n            resources.GetString(\"backColorPicker1.Items536\"),\n            resources.GetString(\"backColorPicker1.Items537\"),\n            resources.GetString(\"backColorPicker1.Items538\"),\n            resources.GetString(\"backColorPicker1.Items539\"),\n            resources.GetString(\"backColorPicker1.Items540\"),\n            resources.GetString(\"backColorPicker1.Items541\"),\n            resources.GetString(\"backColorPicker1.Items542\"),\n            resources.GetString(\"backColorPicker1.Items543\"),\n            resources.GetString(\"backColorPicker1.Items544\"),\n            resources.GetString(\"backColorPicker1.Items545\"),\n            resources.GetString(\"backColorPicker1.Items546\"),\n            resources.GetString(\"backColorPicker1.Items547\"),\n            resources.GetString(\"backColorPicker1.Items548\"),\n            resources.GetString(\"backColorPicker1.Items549\"),\n            resources.GetString(\"backColorPicker1.Items550\"),\n            resources.GetString(\"backColorPicker1.Items551\"),\n            resources.GetString(\"backColorPicker1.Items552\"),\n            resources.GetString(\"backColorPicker1.Items553\"),\n            resources.GetString(\"backColorPicker1.Items554\"),\n            resources.GetString(\"backColorPicker1.Items555\"),\n            resources.GetString(\"backColorPicker1.Items556\"),\n            resources.GetString(\"backColorPicker1.Items557\"),\n            resources.GetString(\"backColorPicker1.Items558\"),\n            resources.GetString(\"backColorPicker1.Items559\"),\n            resources.GetString(\"backColorPicker1.Items560\"),\n            resources.GetString(\"backColorPicker1.Items561\"),\n            resources.GetString(\"backColorPicker1.Items562\"),\n            resources.GetString(\"backColorPicker1.Items563\"),\n            resources.GetString(\"backColorPicker1.Items564\"),\n            resources.GetString(\"backColorPicker1.Items565\"),\n            resources.GetString(\"backColorPicker1.Items566\"),\n            resources.GetString(\"backColorPicker1.Items567\"),\n            resources.GetString(\"backColorPicker1.Items568\"),\n            resources.GetString(\"backColorPicker1.Items569\"),\n            resources.GetString(\"backColorPicker1.Items570\"),\n            resources.GetString(\"backColorPicker1.Items571\"),\n            resources.GetString(\"backColorPicker1.Items572\"),\n            resources.GetString(\"backColorPicker1.Items573\"),\n            resources.GetString(\"backColorPicker1.Items574\"),\n            resources.GetString(\"backColorPicker1.Items575\"),\n            resources.GetString(\"backColorPicker1.Items576\"),\n            resources.GetString(\"backColorPicker1.Items577\"),\n            resources.GetString(\"backColorPicker1.Items578\"),\n            resources.GetString(\"backColorPicker1.Items579\"),\n            resources.GetString(\"backColorPicker1.Items580\"),\n            resources.GetString(\"backColorPicker1.Items581\"),\n            resources.GetString(\"backColorPicker1.Items582\"),\n            resources.GetString(\"backColorPicker1.Items583\"),\n            resources.GetString(\"backColorPicker1.Items584\"),\n            resources.GetString(\"backColorPicker1.Items585\"),\n            resources.GetString(\"backColorPicker1.Items586\"),\n            resources.GetString(\"backColorPicker1.Items587\"),\n            resources.GetString(\"backColorPicker1.Items588\"),\n            resources.GetString(\"backColorPicker1.Items589\"),\n            resources.GetString(\"backColorPicker1.Items590\"),\n            resources.GetString(\"backColorPicker1.Items591\"),\n            resources.GetString(\"backColorPicker1.Items592\"),\n            resources.GetString(\"backColorPicker1.Items593\"),\n            resources.GetString(\"backColorPicker1.Items594\"),\n            resources.GetString(\"backColorPicker1.Items595\"),\n            resources.GetString(\"backColorPicker1.Items596\"),\n            resources.GetString(\"backColorPicker1.Items597\"),\n            resources.GetString(\"backColorPicker1.Items598\"),\n            resources.GetString(\"backColorPicker1.Items599\"),\n            resources.GetString(\"backColorPicker1.Items600\"),\n            resources.GetString(\"backColorPicker1.Items601\"),\n            resources.GetString(\"backColorPicker1.Items602\"),\n            resources.GetString(\"backColorPicker1.Items603\"),\n            resources.GetString(\"backColorPicker1.Items604\"),\n            resources.GetString(\"backColorPicker1.Items605\"),\n            resources.GetString(\"backColorPicker1.Items606\"),\n            resources.GetString(\"backColorPicker1.Items607\"),\n            resources.GetString(\"backColorPicker1.Items608\"),\n            resources.GetString(\"backColorPicker1.Items609\"),\n            resources.GetString(\"backColorPicker1.Items610\"),\n            resources.GetString(\"backColorPicker1.Items611\"),\n            resources.GetString(\"backColorPicker1.Items612\"),\n            resources.GetString(\"backColorPicker1.Items613\"),\n            resources.GetString(\"backColorPicker1.Items614\"),\n            resources.GetString(\"backColorPicker1.Items615\"),\n            resources.GetString(\"backColorPicker1.Items616\"),\n            resources.GetString(\"backColorPicker1.Items617\"),\n            resources.GetString(\"backColorPicker1.Items618\"),\n            resources.GetString(\"backColorPicker1.Items619\"),\n            resources.GetString(\"backColorPicker1.Items620\"),\n            resources.GetString(\"backColorPicker1.Items621\"),\n            resources.GetString(\"backColorPicker1.Items622\"),\n            resources.GetString(\"backColorPicker1.Items623\"),\n            resources.GetString(\"backColorPicker1.Items624\"),\n            resources.GetString(\"backColorPicker1.Items625\"),\n            resources.GetString(\"backColorPicker1.Items626\"),\n            resources.GetString(\"backColorPicker1.Items627\"),\n            resources.GetString(\"backColorPicker1.Items628\"),\n            resources.GetString(\"backColorPicker1.Items629\"),\n            resources.GetString(\"backColorPicker1.Items630\"),\n            resources.GetString(\"backColorPicker1.Items631\"),\n            resources.GetString(\"backColorPicker1.Items632\"),\n            resources.GetString(\"backColorPicker1.Items633\"),\n            resources.GetString(\"backColorPicker1.Items634\"),\n            resources.GetString(\"backColorPicker1.Items635\"),\n            resources.GetString(\"backColorPicker1.Items636\"),\n            resources.GetString(\"backColorPicker1.Items637\"),\n            resources.GetString(\"backColorPicker1.Items638\"),\n            resources.GetString(\"backColorPicker1.Items639\"),\n            resources.GetString(\"backColorPicker1.Items640\"),\n            resources.GetString(\"backColorPicker1.Items641\"),\n            resources.GetString(\"backColorPicker1.Items642\"),\n            resources.GetString(\"backColorPicker1.Items643\"),\n            resources.GetString(\"backColorPicker1.Items644\"),\n            resources.GetString(\"backColorPicker1.Items645\"),\n            resources.GetString(\"backColorPicker1.Items646\"),\n            resources.GetString(\"backColorPicker1.Items647\"),\n            resources.GetString(\"backColorPicker1.Items648\"),\n            resources.GetString(\"backColorPicker1.Items649\"),\n            resources.GetString(\"backColorPicker1.Items650\"),\n            resources.GetString(\"backColorPicker1.Items651\"),\n            resources.GetString(\"backColorPicker1.Items652\"),\n            resources.GetString(\"backColorPicker1.Items653\"),\n            resources.GetString(\"backColorPicker1.Items654\"),\n            resources.GetString(\"backColorPicker1.Items655\"),\n            resources.GetString(\"backColorPicker1.Items656\"),\n            resources.GetString(\"backColorPicker1.Items657\"),\n            resources.GetString(\"backColorPicker1.Items658\"),\n            resources.GetString(\"backColorPicker1.Items659\"),\n            resources.GetString(\"backColorPicker1.Items660\"),\n            resources.GetString(\"backColorPicker1.Items661\"),\n            resources.GetString(\"backColorPicker1.Items662\"),\n            resources.GetString(\"backColorPicker1.Items663\"),\n            resources.GetString(\"backColorPicker1.Items664\"),\n            resources.GetString(\"backColorPicker1.Items665\"),\n            resources.GetString(\"backColorPicker1.Items666\"),\n            resources.GetString(\"backColorPicker1.Items667\"),\n            resources.GetString(\"backColorPicker1.Items668\"),\n            resources.GetString(\"backColorPicker1.Items669\"),\n            resources.GetString(\"backColorPicker1.Items670\"),\n            resources.GetString(\"backColorPicker1.Items671\"),\n            resources.GetString(\"backColorPicker1.Items672\"),\n            resources.GetString(\"backColorPicker1.Items673\"),\n            resources.GetString(\"backColorPicker1.Items674\"),\n            resources.GetString(\"backColorPicker1.Items675\"),\n            resources.GetString(\"backColorPicker1.Items676\"),\n            resources.GetString(\"backColorPicker1.Items677\"),\n            resources.GetString(\"backColorPicker1.Items678\"),\n            resources.GetString(\"backColorPicker1.Items679\"),\n            resources.GetString(\"backColorPicker1.Items680\"),\n            resources.GetString(\"backColorPicker1.Items681\"),\n            resources.GetString(\"backColorPicker1.Items682\"),\n            resources.GetString(\"backColorPicker1.Items683\"),\n            resources.GetString(\"backColorPicker1.Items684\"),\n            resources.GetString(\"backColorPicker1.Items685\"),\n            resources.GetString(\"backColorPicker1.Items686\"),\n            resources.GetString(\"backColorPicker1.Items687\"),\n            resources.GetString(\"backColorPicker1.Items688\"),\n            resources.GetString(\"backColorPicker1.Items689\"),\n            resources.GetString(\"backColorPicker1.Items690\"),\n            resources.GetString(\"backColorPicker1.Items691\"),\n            resources.GetString(\"backColorPicker1.Items692\"),\n            resources.GetString(\"backColorPicker1.Items693\"),\n            resources.GetString(\"backColorPicker1.Items694\"),\n            resources.GetString(\"backColorPicker1.Items695\"),\n            resources.GetString(\"backColorPicker1.Items696\"),\n            resources.GetString(\"backColorPicker1.Items697\"),\n            resources.GetString(\"backColorPicker1.Items698\"),\n            resources.GetString(\"backColorPicker1.Items699\"),\n            resources.GetString(\"backColorPicker1.Items700\"),\n            resources.GetString(\"backColorPicker1.Items701\"),\n            resources.GetString(\"backColorPicker1.Items702\"),\n            resources.GetString(\"backColorPicker1.Items703\"),\n            resources.GetString(\"backColorPicker1.Items704\"),\n            resources.GetString(\"backColorPicker1.Items705\"),\n            resources.GetString(\"backColorPicker1.Items706\"),\n            resources.GetString(\"backColorPicker1.Items707\"),\n            resources.GetString(\"backColorPicker1.Items708\"),\n            resources.GetString(\"backColorPicker1.Items709\"),\n            resources.GetString(\"backColorPicker1.Items710\"),\n            resources.GetString(\"backColorPicker1.Items711\"),\n            resources.GetString(\"backColorPicker1.Items712\"),\n            resources.GetString(\"backColorPicker1.Items713\"),\n            resources.GetString(\"backColorPicker1.Items714\"),\n            resources.GetString(\"backColorPicker1.Items715\"),\n            resources.GetString(\"backColorPicker1.Items716\"),\n            resources.GetString(\"backColorPicker1.Items717\"),\n            resources.GetString(\"backColorPicker1.Items718\"),\n            resources.GetString(\"backColorPicker1.Items719\"),\n            resources.GetString(\"backColorPicker1.Items720\"),\n            resources.GetString(\"backColorPicker1.Items721\"),\n            resources.GetString(\"backColorPicker1.Items722\"),\n            resources.GetString(\"backColorPicker1.Items723\"),\n            resources.GetString(\"backColorPicker1.Items724\"),\n            resources.GetString(\"backColorPicker1.Items725\"),\n            resources.GetString(\"backColorPicker1.Items726\"),\n            resources.GetString(\"backColorPicker1.Items727\"),\n            resources.GetString(\"backColorPicker1.Items728\"),\n            resources.GetString(\"backColorPicker1.Items729\"),\n            resources.GetString(\"backColorPicker1.Items730\"),\n            resources.GetString(\"backColorPicker1.Items731\"),\n            resources.GetString(\"backColorPicker1.Items732\"),\n            resources.GetString(\"backColorPicker1.Items733\"),\n            resources.GetString(\"backColorPicker1.Items734\"),\n            resources.GetString(\"backColorPicker1.Items735\"),\n            resources.GetString(\"backColorPicker1.Items736\"),\n            resources.GetString(\"backColorPicker1.Items737\"),\n            resources.GetString(\"backColorPicker1.Items738\"),\n            resources.GetString(\"backColorPicker1.Items739\"),\n            resources.GetString(\"backColorPicker1.Items740\"),\n            resources.GetString(\"backColorPicker1.Items741\"),\n            resources.GetString(\"backColorPicker1.Items742\"),\n            resources.GetString(\"backColorPicker1.Items743\"),\n            resources.GetString(\"backColorPicker1.Items744\"),\n            resources.GetString(\"backColorPicker1.Items745\"),\n            resources.GetString(\"backColorPicker1.Items746\"),\n            resources.GetString(\"backColorPicker1.Items747\"),\n            resources.GetString(\"backColorPicker1.Items748\"),\n            resources.GetString(\"backColorPicker1.Items749\"),\n            resources.GetString(\"backColorPicker1.Items750\"),\n            resources.GetString(\"backColorPicker1.Items751\"),\n            resources.GetString(\"backColorPicker1.Items752\"),\n            resources.GetString(\"backColorPicker1.Items753\"),\n            resources.GetString(\"backColorPicker1.Items754\"),\n            resources.GetString(\"backColorPicker1.Items755\"),\n            resources.GetString(\"backColorPicker1.Items756\"),\n            resources.GetString(\"backColorPicker1.Items757\"),\n            resources.GetString(\"backColorPicker1.Items758\"),\n            resources.GetString(\"backColorPicker1.Items759\"),\n            resources.GetString(\"backColorPicker1.Items760\"),\n            resources.GetString(\"backColorPicker1.Items761\"),\n            resources.GetString(\"backColorPicker1.Items762\"),\n            resources.GetString(\"backColorPicker1.Items763\"),\n            resources.GetString(\"backColorPicker1.Items764\"),\n            resources.GetString(\"backColorPicker1.Items765\"),\n            resources.GetString(\"backColorPicker1.Items766\"),\n            resources.GetString(\"backColorPicker1.Items767\"),\n            resources.GetString(\"backColorPicker1.Items768\"),\n            resources.GetString(\"backColorPicker1.Items769\"),\n            resources.GetString(\"backColorPicker1.Items770\"),\n            resources.GetString(\"backColorPicker1.Items771\"),\n            resources.GetString(\"backColorPicker1.Items772\"),\n            resources.GetString(\"backColorPicker1.Items773\"),\n            resources.GetString(\"backColorPicker1.Items774\"),\n            resources.GetString(\"backColorPicker1.Items775\"),\n            resources.GetString(\"backColorPicker1.Items776\"),\n            resources.GetString(\"backColorPicker1.Items777\"),\n            resources.GetString(\"backColorPicker1.Items778\"),\n            resources.GetString(\"backColorPicker1.Items779\"),\n            resources.GetString(\"backColorPicker1.Items780\"),\n            resources.GetString(\"backColorPicker1.Items781\"),\n            resources.GetString(\"backColorPicker1.Items782\"),\n            resources.GetString(\"backColorPicker1.Items783\"),\n            resources.GetString(\"backColorPicker1.Items784\"),\n            resources.GetString(\"backColorPicker1.Items785\"),\n            resources.GetString(\"backColorPicker1.Items786\"),\n            resources.GetString(\"backColorPicker1.Items787\"),\n            resources.GetString(\"backColorPicker1.Items788\"),\n            resources.GetString(\"backColorPicker1.Items789\"),\n            resources.GetString(\"backColorPicker1.Items790\"),\n            resources.GetString(\"backColorPicker1.Items791\"),\n            resources.GetString(\"backColorPicker1.Items792\"),\n            resources.GetString(\"backColorPicker1.Items793\"),\n            resources.GetString(\"backColorPicker1.Items794\"),\n            resources.GetString(\"backColorPicker1.Items795\"),\n            resources.GetString(\"backColorPicker1.Items796\"),\n            resources.GetString(\"backColorPicker1.Items797\"),\n            resources.GetString(\"backColorPicker1.Items798\"),\n            resources.GetString(\"backColorPicker1.Items799\"),\n            resources.GetString(\"backColorPicker1.Items800\"),\n            resources.GetString(\"backColorPicker1.Items801\"),\n            resources.GetString(\"backColorPicker1.Items802\"),\n            resources.GetString(\"backColorPicker1.Items803\"),\n            resources.GetString(\"backColorPicker1.Items804\"),\n            resources.GetString(\"backColorPicker1.Items805\"),\n            resources.GetString(\"backColorPicker1.Items806\"),\n            resources.GetString(\"backColorPicker1.Items807\"),\n            resources.GetString(\"backColorPicker1.Items808\"),\n            resources.GetString(\"backColorPicker1.Items809\"),\n            resources.GetString(\"backColorPicker1.Items810\"),\n            resources.GetString(\"backColorPicker1.Items811\"),\n            resources.GetString(\"backColorPicker1.Items812\"),\n            resources.GetString(\"backColorPicker1.Items813\"),\n            resources.GetString(\"backColorPicker1.Items814\"),\n            resources.GetString(\"backColorPicker1.Items815\"),\n            resources.GetString(\"backColorPicker1.Items816\"),\n            resources.GetString(\"backColorPicker1.Items817\"),\n            resources.GetString(\"backColorPicker1.Items818\"),\n            resources.GetString(\"backColorPicker1.Items819\"),\n            resources.GetString(\"backColorPicker1.Items820\"),\n            resources.GetString(\"backColorPicker1.Items821\"),\n            resources.GetString(\"backColorPicker1.Items822\"),\n            resources.GetString(\"backColorPicker1.Items823\"),\n            resources.GetString(\"backColorPicker1.Items824\"),\n            resources.GetString(\"backColorPicker1.Items825\"),\n            resources.GetString(\"backColorPicker1.Items826\"),\n            resources.GetString(\"backColorPicker1.Items827\"),\n            resources.GetString(\"backColorPicker1.Items828\"),\n            resources.GetString(\"backColorPicker1.Items829\"),\n            resources.GetString(\"backColorPicker1.Items830\"),\n            resources.GetString(\"backColorPicker1.Items831\"),\n            resources.GetString(\"backColorPicker1.Items832\"),\n            resources.GetString(\"backColorPicker1.Items833\"),\n            resources.GetString(\"backColorPicker1.Items834\"),\n            resources.GetString(\"backColorPicker1.Items835\"),\n            resources.GetString(\"backColorPicker1.Items836\"),\n            resources.GetString(\"backColorPicker1.Items837\"),\n            resources.GetString(\"backColorPicker1.Items838\"),\n            resources.GetString(\"backColorPicker1.Items839\"),\n            resources.GetString(\"backColorPicker1.Items840\"),\n            resources.GetString(\"backColorPicker1.Items841\"),\n            resources.GetString(\"backColorPicker1.Items842\"),\n            resources.GetString(\"backColorPicker1.Items843\"),\n            resources.GetString(\"backColorPicker1.Items844\"),\n            resources.GetString(\"backColorPicker1.Items845\"),\n            resources.GetString(\"backColorPicker1.Items846\"),\n            resources.GetString(\"backColorPicker1.Items847\"),\n            resources.GetString(\"backColorPicker1.Items848\"),\n            resources.GetString(\"backColorPicker1.Items849\"),\n            resources.GetString(\"backColorPicker1.Items850\"),\n            resources.GetString(\"backColorPicker1.Items851\"),\n            resources.GetString(\"backColorPicker1.Items852\"),\n            resources.GetString(\"backColorPicker1.Items853\"),\n            resources.GetString(\"backColorPicker1.Items854\"),\n            resources.GetString(\"backColorPicker1.Items855\"),\n            resources.GetString(\"backColorPicker1.Items856\"),\n            resources.GetString(\"backColorPicker1.Items857\"),\n            resources.GetString(\"backColorPicker1.Items858\"),\n            resources.GetString(\"backColorPicker1.Items859\"),\n            resources.GetString(\"backColorPicker1.Items860\"),\n            resources.GetString(\"backColorPicker1.Items861\"),\n            resources.GetString(\"backColorPicker1.Items862\"),\n            resources.GetString(\"backColorPicker1.Items863\"),\n            resources.GetString(\"backColorPicker1.Items864\"),\n            resources.GetString(\"backColorPicker1.Items865\"),\n            resources.GetString(\"backColorPicker1.Items866\"),\n            resources.GetString(\"backColorPicker1.Items867\"),\n            resources.GetString(\"backColorPicker1.Items868\"),\n            resources.GetString(\"backColorPicker1.Items869\"),\n            resources.GetString(\"backColorPicker1.Items870\"),\n            resources.GetString(\"backColorPicker1.Items871\"),\n            resources.GetString(\"backColorPicker1.Items872\"),\n            resources.GetString(\"backColorPicker1.Items873\"),\n            resources.GetString(\"backColorPicker1.Items874\"),\n            resources.GetString(\"backColorPicker1.Items875\"),\n            resources.GetString(\"backColorPicker1.Items876\"),\n            resources.GetString(\"backColorPicker1.Items877\"),\n            resources.GetString(\"backColorPicker1.Items878\"),\n            resources.GetString(\"backColorPicker1.Items879\"),\n            resources.GetString(\"backColorPicker1.Items880\"),\n            resources.GetString(\"backColorPicker1.Items881\"),\n            resources.GetString(\"backColorPicker1.Items882\"),\n            resources.GetString(\"backColorPicker1.Items883\"),\n            resources.GetString(\"backColorPicker1.Items884\"),\n            resources.GetString(\"backColorPicker1.Items885\"),\n            resources.GetString(\"backColorPicker1.Items886\"),\n            resources.GetString(\"backColorPicker1.Items887\"),\n            resources.GetString(\"backColorPicker1.Items888\"),\n            resources.GetString(\"backColorPicker1.Items889\"),\n            resources.GetString(\"backColorPicker1.Items890\"),\n            resources.GetString(\"backColorPicker1.Items891\"),\n            resources.GetString(\"backColorPicker1.Items892\"),\n            resources.GetString(\"backColorPicker1.Items893\"),\n            resources.GetString(\"backColorPicker1.Items894\"),\n            resources.GetString(\"backColorPicker1.Items895\"),\n            resources.GetString(\"backColorPicker1.Items896\"),\n            resources.GetString(\"backColorPicker1.Items897\"),\n            resources.GetString(\"backColorPicker1.Items898\"),\n            resources.GetString(\"backColorPicker1.Items899\"),\n            resources.GetString(\"backColorPicker1.Items900\"),\n            resources.GetString(\"backColorPicker1.Items901\"),\n            resources.GetString(\"backColorPicker1.Items902\"),\n            resources.GetString(\"backColorPicker1.Items903\"),\n            resources.GetString(\"backColorPicker1.Items904\"),\n            resources.GetString(\"backColorPicker1.Items905\"),\n            resources.GetString(\"backColorPicker1.Items906\"),\n            resources.GetString(\"backColorPicker1.Items907\"),\n            resources.GetString(\"backColorPicker1.Items908\"),\n            resources.GetString(\"backColorPicker1.Items909\"),\n            resources.GetString(\"backColorPicker1.Items910\"),\n            resources.GetString(\"backColorPicker1.Items911\"),\n            resources.GetString(\"backColorPicker1.Items912\"),\n            resources.GetString(\"backColorPicker1.Items913\"),\n            resources.GetString(\"backColorPicker1.Items914\"),\n            resources.GetString(\"backColorPicker1.Items915\"),\n            resources.GetString(\"backColorPicker1.Items916\"),\n            resources.GetString(\"backColorPicker1.Items917\"),\n            resources.GetString(\"backColorPicker1.Items918\"),\n            resources.GetString(\"backColorPicker1.Items919\"),\n            resources.GetString(\"backColorPicker1.Items920\"),\n            resources.GetString(\"backColorPicker1.Items921\"),\n            resources.GetString(\"backColorPicker1.Items922\"),\n            resources.GetString(\"backColorPicker1.Items923\"),\n            resources.GetString(\"backColorPicker1.Items924\"),\n            resources.GetString(\"backColorPicker1.Items925\"),\n            resources.GetString(\"backColorPicker1.Items926\"),\n            resources.GetString(\"backColorPicker1.Items927\"),\n            resources.GetString(\"backColorPicker1.Items928\"),\n            resources.GetString(\"backColorPicker1.Items929\"),\n            resources.GetString(\"backColorPicker1.Items930\"),\n            resources.GetString(\"backColorPicker1.Items931\"),\n            resources.GetString(\"backColorPicker1.Items932\"),\n            resources.GetString(\"backColorPicker1.Items933\"),\n            resources.GetString(\"backColorPicker1.Items934\"),\n            resources.GetString(\"backColorPicker1.Items935\"),\n            resources.GetString(\"backColorPicker1.Items936\"),\n            resources.GetString(\"backColorPicker1.Items937\"),\n            resources.GetString(\"backColorPicker1.Items938\"),\n            resources.GetString(\"backColorPicker1.Items939\"),\n            resources.GetString(\"backColorPicker1.Items940\"),\n            resources.GetString(\"backColorPicker1.Items941\"),\n            resources.GetString(\"backColorPicker1.Items942\"),\n            resources.GetString(\"backColorPicker1.Items943\"),\n            resources.GetString(\"backColorPicker1.Items944\"),\n            resources.GetString(\"backColorPicker1.Items945\"),\n            resources.GetString(\"backColorPicker1.Items946\"),\n            resources.GetString(\"backColorPicker1.Items947\"),\n            resources.GetString(\"backColorPicker1.Items948\"),\n            resources.GetString(\"backColorPicker1.Items949\"),\n            resources.GetString(\"backColorPicker1.Items950\"),\n            resources.GetString(\"backColorPicker1.Items951\"),\n            resources.GetString(\"backColorPicker1.Items952\"),\n            resources.GetString(\"backColorPicker1.Items953\"),\n            resources.GetString(\"backColorPicker1.Items954\"),\n            resources.GetString(\"backColorPicker1.Items955\"),\n            resources.GetString(\"backColorPicker1.Items956\"),\n            resources.GetString(\"backColorPicker1.Items957\"),\n            resources.GetString(\"backColorPicker1.Items958\"),\n            resources.GetString(\"backColorPicker1.Items959\"),\n            resources.GetString(\"backColorPicker1.Items960\"),\n            resources.GetString(\"backColorPicker1.Items961\"),\n            resources.GetString(\"backColorPicker1.Items962\"),\n            resources.GetString(\"backColorPicker1.Items963\"),\n            resources.GetString(\"backColorPicker1.Items964\"),\n            resources.GetString(\"backColorPicker1.Items965\"),\n            resources.GetString(\"backColorPicker1.Items966\"),\n            resources.GetString(\"backColorPicker1.Items967\"),\n            resources.GetString(\"backColorPicker1.Items968\"),\n            resources.GetString(\"backColorPicker1.Items969\"),\n            resources.GetString(\"backColorPicker1.Items970\"),\n            resources.GetString(\"backColorPicker1.Items971\"),\n            resources.GetString(\"backColorPicker1.Items972\"),\n            resources.GetString(\"backColorPicker1.Items973\"),\n            resources.GetString(\"backColorPicker1.Items974\"),\n            resources.GetString(\"backColorPicker1.Items975\"),\n            resources.GetString(\"backColorPicker1.Items976\"),\n            resources.GetString(\"backColorPicker1.Items977\"),\n            resources.GetString(\"backColorPicker1.Items978\"),\n            resources.GetString(\"backColorPicker1.Items979\"),\n            resources.GetString(\"backColorPicker1.Items980\"),\n            resources.GetString(\"backColorPicker1.Items981\"),\n            resources.GetString(\"backColorPicker1.Items982\"),\n            resources.GetString(\"backColorPicker1.Items983\"),\n            resources.GetString(\"backColorPicker1.Items984\"),\n            resources.GetString(\"backColorPicker1.Items985\"),\n            resources.GetString(\"backColorPicker1.Items986\"),\n            resources.GetString(\"backColorPicker1.Items987\"),\n            resources.GetString(\"backColorPicker1.Items988\"),\n            resources.GetString(\"backColorPicker1.Items989\"),\n            resources.GetString(\"backColorPicker1.Items990\"),\n            resources.GetString(\"backColorPicker1.Items991\"),\n            resources.GetString(\"backColorPicker1.Items992\"),\n            resources.GetString(\"backColorPicker1.Items993\"),\n            resources.GetString(\"backColorPicker1.Items994\"),\n            resources.GetString(\"backColorPicker1.Items995\"),\n            resources.GetString(\"backColorPicker1.Items996\"),\n            resources.GetString(\"backColorPicker1.Items997\"),\n            resources.GetString(\"backColorPicker1.Items998\"),\n            resources.GetString(\"backColorPicker1.Items999\"),\n            resources.GetString(\"backColorPicker1.Items1000\"),\n            resources.GetString(\"backColorPicker1.Items1001\"),\n            resources.GetString(\"backColorPicker1.Items1002\"),\n            resources.GetString(\"backColorPicker1.Items1003\"),\n            resources.GetString(\"backColorPicker1.Items1004\"),\n            resources.GetString(\"backColorPicker1.Items1005\"),\n            resources.GetString(\"backColorPicker1.Items1006\"),\n            resources.GetString(\"backColorPicker1.Items1007\"),\n            resources.GetString(\"backColorPicker1.Items1008\"),\n            resources.GetString(\"backColorPicker1.Items1009\"),\n            resources.GetString(\"backColorPicker1.Items1010\"),\n            resources.GetString(\"backColorPicker1.Items1011\"),\n            resources.GetString(\"backColorPicker1.Items1012\"),\n            resources.GetString(\"backColorPicker1.Items1013\"),\n            resources.GetString(\"backColorPicker1.Items1014\"),\n            resources.GetString(\"backColorPicker1.Items1015\"),\n            resources.GetString(\"backColorPicker1.Items1016\"),\n            resources.GetString(\"backColorPicker1.Items1017\"),\n            resources.GetString(\"backColorPicker1.Items1018\"),\n            resources.GetString(\"backColorPicker1.Items1019\"),\n            resources.GetString(\"backColorPicker1.Items1020\"),\n            resources.GetString(\"backColorPicker1.Items1021\"),\n            resources.GetString(\"backColorPicker1.Items1022\"),\n            resources.GetString(\"backColorPicker1.Items1023\"),\n            resources.GetString(\"backColorPicker1.Items1024\"),\n            resources.GetString(\"backColorPicker1.Items1025\"),\n            resources.GetString(\"backColorPicker1.Items1026\"),\n            resources.GetString(\"backColorPicker1.Items1027\"),\n            resources.GetString(\"backColorPicker1.Items1028\"),\n            resources.GetString(\"backColorPicker1.Items1029\"),\n            resources.GetString(\"backColorPicker1.Items1030\"),\n            resources.GetString(\"backColorPicker1.Items1031\"),\n            resources.GetString(\"backColorPicker1.Items1032\"),\n            resources.GetString(\"backColorPicker1.Items1033\"),\n            resources.GetString(\"backColorPicker1.Items1034\"),\n            resources.GetString(\"backColorPicker1.Items1035\"),\n            resources.GetString(\"backColorPicker1.Items1036\"),\n            resources.GetString(\"backColorPicker1.Items1037\"),\n            resources.GetString(\"backColorPicker1.Items1038\"),\n            resources.GetString(\"backColorPicker1.Items1039\"),\n            resources.GetString(\"backColorPicker1.Items1040\"),\n            resources.GetString(\"backColorPicker1.Items1041\"),\n            resources.GetString(\"backColorPicker1.Items1042\"),\n            resources.GetString(\"backColorPicker1.Items1043\"),\n            resources.GetString(\"backColorPicker1.Items1044\"),\n            resources.GetString(\"backColorPicker1.Items1045\"),\n            resources.GetString(\"backColorPicker1.Items1046\"),\n            resources.GetString(\"backColorPicker1.Items1047\"),\n            resources.GetString(\"backColorPicker1.Items1048\"),\n            resources.GetString(\"backColorPicker1.Items1049\"),\n            resources.GetString(\"backColorPicker1.Items1050\"),\n            resources.GetString(\"backColorPicker1.Items1051\"),\n            resources.GetString(\"backColorPicker1.Items1052\"),\n            resources.GetString(\"backColorPicker1.Items1053\"),\n            resources.GetString(\"backColorPicker1.Items1054\"),\n            resources.GetString(\"backColorPicker1.Items1055\"),\n            resources.GetString(\"backColorPicker1.Items1056\"),\n            resources.GetString(\"backColorPicker1.Items1057\"),\n            resources.GetString(\"backColorPicker1.Items1058\"),\n            resources.GetString(\"backColorPicker1.Items1059\"),\n            resources.GetString(\"backColorPicker1.Items1060\"),\n            resources.GetString(\"backColorPicker1.Items1061\"),\n            resources.GetString(\"backColorPicker1.Items1062\"),\n            resources.GetString(\"backColorPicker1.Items1063\"),\n            resources.GetString(\"backColorPicker1.Items1064\"),\n            resources.GetString(\"backColorPicker1.Items1065\"),\n            resources.GetString(\"backColorPicker1.Items1066\"),\n            resources.GetString(\"backColorPicker1.Items1067\"),\n            resources.GetString(\"backColorPicker1.Items1068\"),\n            resources.GetString(\"backColorPicker1.Items1069\"),\n            resources.GetString(\"backColorPicker1.Items1070\"),\n            resources.GetString(\"backColorPicker1.Items1071\"),\n            resources.GetString(\"backColorPicker1.Items1072\"),\n            resources.GetString(\"backColorPicker1.Items1073\"),\n            resources.GetString(\"backColorPicker1.Items1074\"),\n            resources.GetString(\"backColorPicker1.Items1075\"),\n            resources.GetString(\"backColorPicker1.Items1076\"),\n            resources.GetString(\"backColorPicker1.Items1077\"),\n            resources.GetString(\"backColorPicker1.Items1078\"),\n            resources.GetString(\"backColorPicker1.Items1079\"),\n            resources.GetString(\"backColorPicker1.Items1080\"),\n            resources.GetString(\"backColorPicker1.Items1081\"),\n            resources.GetString(\"backColorPicker1.Items1082\"),\n            resources.GetString(\"backColorPicker1.Items1083\"),\n            resources.GetString(\"backColorPicker1.Items1084\"),\n            resources.GetString(\"backColorPicker1.Items1085\"),\n            resources.GetString(\"backColorPicker1.Items1086\"),\n            resources.GetString(\"backColorPicker1.Items1087\"),\n            resources.GetString(\"backColorPicker1.Items1088\"),\n            resources.GetString(\"backColorPicker1.Items1089\"),\n            resources.GetString(\"backColorPicker1.Items1090\"),\n            resources.GetString(\"backColorPicker1.Items1091\"),\n            resources.GetString(\"backColorPicker1.Items1092\"),\n            resources.GetString(\"backColorPicker1.Items1093\"),\n            resources.GetString(\"backColorPicker1.Items1094\"),\n            resources.GetString(\"backColorPicker1.Items1095\"),\n            resources.GetString(\"backColorPicker1.Items1096\"),\n            resources.GetString(\"backColorPicker1.Items1097\"),\n            resources.GetString(\"backColorPicker1.Items1098\"),\n            resources.GetString(\"backColorPicker1.Items1099\"),\n            resources.GetString(\"backColorPicker1.Items1100\"),\n            resources.GetString(\"backColorPicker1.Items1101\"),\n            resources.GetString(\"backColorPicker1.Items1102\"),\n            resources.GetString(\"backColorPicker1.Items1103\"),\n            resources.GetString(\"backColorPicker1.Items1104\"),\n            resources.GetString(\"backColorPicker1.Items1105\"),\n            resources.GetString(\"backColorPicker1.Items1106\"),\n            resources.GetString(\"backColorPicker1.Items1107\"),\n            resources.GetString(\"backColorPicker1.Items1108\"),\n            resources.GetString(\"backColorPicker1.Items1109\"),\n            resources.GetString(\"backColorPicker1.Items1110\"),\n            resources.GetString(\"backColorPicker1.Items1111\"),\n            resources.GetString(\"backColorPicker1.Items1112\"),\n            resources.GetString(\"backColorPicker1.Items1113\"),\n            resources.GetString(\"backColorPicker1.Items1114\"),\n            resources.GetString(\"backColorPicker1.Items1115\"),\n            resources.GetString(\"backColorPicker1.Items1116\"),\n            resources.GetString(\"backColorPicker1.Items1117\"),\n            resources.GetString(\"backColorPicker1.Items1118\"),\n            resources.GetString(\"backColorPicker1.Items1119\"),\n            resources.GetString(\"backColorPicker1.Items1120\"),\n            resources.GetString(\"backColorPicker1.Items1121\"),\n            resources.GetString(\"backColorPicker1.Items1122\"),\n            resources.GetString(\"backColorPicker1.Items1123\"),\n            resources.GetString(\"backColorPicker1.Items1124\"),\n            resources.GetString(\"backColorPicker1.Items1125\"),\n            resources.GetString(\"backColorPicker1.Items1126\"),\n            resources.GetString(\"backColorPicker1.Items1127\"),\n            resources.GetString(\"backColorPicker1.Items1128\"),\n            resources.GetString(\"backColorPicker1.Items1129\"),\n            resources.GetString(\"backColorPicker1.Items1130\"),\n            resources.GetString(\"backColorPicker1.Items1131\"),\n            resources.GetString(\"backColorPicker1.Items1132\"),\n            resources.GetString(\"backColorPicker1.Items1133\"),\n            resources.GetString(\"backColorPicker1.Items1134\"),\n            resources.GetString(\"backColorPicker1.Items1135\"),\n            resources.GetString(\"backColorPicker1.Items1136\"),\n            resources.GetString(\"backColorPicker1.Items1137\"),\n            resources.GetString(\"backColorPicker1.Items1138\"),\n            resources.GetString(\"backColorPicker1.Items1139\"),\n            resources.GetString(\"backColorPicker1.Items1140\"),\n            resources.GetString(\"backColorPicker1.Items1141\"),\n            resources.GetString(\"backColorPicker1.Items1142\"),\n            resources.GetString(\"backColorPicker1.Items1143\"),\n            resources.GetString(\"backColorPicker1.Items1144\"),\n            resources.GetString(\"backColorPicker1.Items1145\"),\n            resources.GetString(\"backColorPicker1.Items1146\"),\n            resources.GetString(\"backColorPicker1.Items1147\"),\n            resources.GetString(\"backColorPicker1.Items1148\"),\n            resources.GetString(\"backColorPicker1.Items1149\"),\n            resources.GetString(\"backColorPicker1.Items1150\"),\n            resources.GetString(\"backColorPicker1.Items1151\"),\n            resources.GetString(\"backColorPicker1.Items1152\"),\n            resources.GetString(\"backColorPicker1.Items1153\"),\n            resources.GetString(\"backColorPicker1.Items1154\"),\n            resources.GetString(\"backColorPicker1.Items1155\"),\n            resources.GetString(\"backColorPicker1.Items1156\"),\n            resources.GetString(\"backColorPicker1.Items1157\"),\n            resources.GetString(\"backColorPicker1.Items1158\"),\n            resources.GetString(\"backColorPicker1.Items1159\"),\n            resources.GetString(\"backColorPicker1.Items1160\"),\n            resources.GetString(\"backColorPicker1.Items1161\"),\n            resources.GetString(\"backColorPicker1.Items1162\"),\n            resources.GetString(\"backColorPicker1.Items1163\"),\n            resources.GetString(\"backColorPicker1.Items1164\"),\n            resources.GetString(\"backColorPicker1.Items1165\"),\n            resources.GetString(\"backColorPicker1.Items1166\"),\n            resources.GetString(\"backColorPicker1.Items1167\"),\n            resources.GetString(\"backColorPicker1.Items1168\"),\n            resources.GetString(\"backColorPicker1.Items1169\"),\n            resources.GetString(\"backColorPicker1.Items1170\"),\n            resources.GetString(\"backColorPicker1.Items1171\"),\n            resources.GetString(\"backColorPicker1.Items1172\"),\n            resources.GetString(\"backColorPicker1.Items1173\"),\n            resources.GetString(\"backColorPicker1.Items1174\"),\n            resources.GetString(\"backColorPicker1.Items1175\"),\n            resources.GetString(\"backColorPicker1.Items1176\"),\n            resources.GetString(\"backColorPicker1.Items1177\"),\n            resources.GetString(\"backColorPicker1.Items1178\"),\n            resources.GetString(\"backColorPicker1.Items1179\"),\n            resources.GetString(\"backColorPicker1.Items1180\"),\n            resources.GetString(\"backColorPicker1.Items1181\"),\n            resources.GetString(\"backColorPicker1.Items1182\"),\n            resources.GetString(\"backColorPicker1.Items1183\"),\n            resources.GetString(\"backColorPicker1.Items1184\"),\n            resources.GetString(\"backColorPicker1.Items1185\"),\n            resources.GetString(\"backColorPicker1.Items1186\"),\n            resources.GetString(\"backColorPicker1.Items1187\"),\n            resources.GetString(\"backColorPicker1.Items1188\"),\n            resources.GetString(\"backColorPicker1.Items1189\"),\n            resources.GetString(\"backColorPicker1.Items1190\"),\n            resources.GetString(\"backColorPicker1.Items1191\"),\n            resources.GetString(\"backColorPicker1.Items1192\"),\n            resources.GetString(\"backColorPicker1.Items1193\"),\n            resources.GetString(\"backColorPicker1.Items1194\"),\n            resources.GetString(\"backColorPicker1.Items1195\"),\n            resources.GetString(\"backColorPicker1.Items1196\"),\n            resources.GetString(\"backColorPicker1.Items1197\"),\n            resources.GetString(\"backColorPicker1.Items1198\"),\n            resources.GetString(\"backColorPicker1.Items1199\"),\n            resources.GetString(\"backColorPicker1.Items1200\"),\n            resources.GetString(\"backColorPicker1.Items1201\"),\n            resources.GetString(\"backColorPicker1.Items1202\"),\n            resources.GetString(\"backColorPicker1.Items1203\"),\n            resources.GetString(\"backColorPicker1.Items1204\"),\n            resources.GetString(\"backColorPicker1.Items1205\"),\n            resources.GetString(\"backColorPicker1.Items1206\"),\n            resources.GetString(\"backColorPicker1.Items1207\"),\n            resources.GetString(\"backColorPicker1.Items1208\"),\n            resources.GetString(\"backColorPicker1.Items1209\"),\n            resources.GetString(\"backColorPicker1.Items1210\"),\n            resources.GetString(\"backColorPicker1.Items1211\"),\n            resources.GetString(\"backColorPicker1.Items1212\"),\n            resources.GetString(\"backColorPicker1.Items1213\"),\n            resources.GetString(\"backColorPicker1.Items1214\"),\n            resources.GetString(\"backColorPicker1.Items1215\"),\n            resources.GetString(\"backColorPicker1.Items1216\"),\n            resources.GetString(\"backColorPicker1.Items1217\"),\n            resources.GetString(\"backColorPicker1.Items1218\"),\n            resources.GetString(\"backColorPicker1.Items1219\"),\n            resources.GetString(\"backColorPicker1.Items1220\"),\n            resources.GetString(\"backColorPicker1.Items1221\"),\n            resources.GetString(\"backColorPicker1.Items1222\"),\n            resources.GetString(\"backColorPicker1.Items1223\"),\n            resources.GetString(\"backColorPicker1.Items1224\"),\n            resources.GetString(\"backColorPicker1.Items1225\"),\n            resources.GetString(\"backColorPicker1.Items1226\"),\n            resources.GetString(\"backColorPicker1.Items1227\"),\n            resources.GetString(\"backColorPicker1.Items1228\"),\n            resources.GetString(\"backColorPicker1.Items1229\"),\n            resources.GetString(\"backColorPicker1.Items1230\"),\n            resources.GetString(\"backColorPicker1.Items1231\"),\n            resources.GetString(\"backColorPicker1.Items1232\"),\n            resources.GetString(\"backColorPicker1.Items1233\"),\n            resources.GetString(\"backColorPicker1.Items1234\"),\n            resources.GetString(\"backColorPicker1.Items1235\"),\n            resources.GetString(\"backColorPicker1.Items1236\"),\n            resources.GetString(\"backColorPicker1.Items1237\"),\n            resources.GetString(\"backColorPicker1.Items1238\"),\n            resources.GetString(\"backColorPicker1.Items1239\"),\n            resources.GetString(\"backColorPicker1.Items1240\"),\n            resources.GetString(\"backColorPicker1.Items1241\"),\n            resources.GetString(\"backColorPicker1.Items1242\"),\n            resources.GetString(\"backColorPicker1.Items1243\"),\n            resources.GetString(\"backColorPicker1.Items1244\"),\n            resources.GetString(\"backColorPicker1.Items1245\"),\n            resources.GetString(\"backColorPicker1.Items1246\"),\n            resources.GetString(\"backColorPicker1.Items1247\"),\n            resources.GetString(\"backColorPicker1.Items1248\"),\n            resources.GetString(\"backColorPicker1.Items1249\"),\n            resources.GetString(\"backColorPicker1.Items1250\"),\n            resources.GetString(\"backColorPicker1.Items1251\"),\n            resources.GetString(\"backColorPicker1.Items1252\"),\n            resources.GetString(\"backColorPicker1.Items1253\"),\n            resources.GetString(\"backColorPicker1.Items1254\"),\n            resources.GetString(\"backColorPicker1.Items1255\"),\n            resources.GetString(\"backColorPicker1.Items1256\"),\n            resources.GetString(\"backColorPicker1.Items1257\"),\n            resources.GetString(\"backColorPicker1.Items1258\"),\n            resources.GetString(\"backColorPicker1.Items1259\"),\n            resources.GetString(\"backColorPicker1.Items1260\"),\n            resources.GetString(\"backColorPicker1.Items1261\"),\n            resources.GetString(\"backColorPicker1.Items1262\"),\n            resources.GetString(\"backColorPicker1.Items1263\"),\n            resources.GetString(\"backColorPicker1.Items1264\"),\n            resources.GetString(\"backColorPicker1.Items1265\"),\n            resources.GetString(\"backColorPicker1.Items1266\"),\n            resources.GetString(\"backColorPicker1.Items1267\"),\n            resources.GetString(\"backColorPicker1.Items1268\"),\n            resources.GetString(\"backColorPicker1.Items1269\"),\n            resources.GetString(\"backColorPicker1.Items1270\"),\n            resources.GetString(\"backColorPicker1.Items1271\"),\n            resources.GetString(\"backColorPicker1.Items1272\"),\n            resources.GetString(\"backColorPicker1.Items1273\"),\n            resources.GetString(\"backColorPicker1.Items1274\"),\n            resources.GetString(\"backColorPicker1.Items1275\"),\n            resources.GetString(\"backColorPicker1.Items1276\"),\n            resources.GetString(\"backColorPicker1.Items1277\"),\n            resources.GetString(\"backColorPicker1.Items1278\"),\n            resources.GetString(\"backColorPicker1.Items1279\"),\n            resources.GetString(\"backColorPicker1.Items1280\"),\n            resources.GetString(\"backColorPicker1.Items1281\"),\n            resources.GetString(\"backColorPicker1.Items1282\"),\n            resources.GetString(\"backColorPicker1.Items1283\"),\n            resources.GetString(\"backColorPicker1.Items1284\"),\n            resources.GetString(\"backColorPicker1.Items1285\"),\n            resources.GetString(\"backColorPicker1.Items1286\"),\n            resources.GetString(\"backColorPicker1.Items1287\"),\n            resources.GetString(\"backColorPicker1.Items1288\"),\n            resources.GetString(\"backColorPicker1.Items1289\"),\n            resources.GetString(\"backColorPicker1.Items1290\"),\n            resources.GetString(\"backColorPicker1.Items1291\"),\n            resources.GetString(\"backColorPicker1.Items1292\"),\n            resources.GetString(\"backColorPicker1.Items1293\"),\n            resources.GetString(\"backColorPicker1.Items1294\"),\n            resources.GetString(\"backColorPicker1.Items1295\"),\n            resources.GetString(\"backColorPicker1.Items1296\"),\n            resources.GetString(\"backColorPicker1.Items1297\"),\n            resources.GetString(\"backColorPicker1.Items1298\"),\n            resources.GetString(\"backColorPicker1.Items1299\"),\n            resources.GetString(\"backColorPicker1.Items1300\"),\n            resources.GetString(\"backColorPicker1.Items1301\"),\n            resources.GetString(\"backColorPicker1.Items1302\"),\n            resources.GetString(\"backColorPicker1.Items1303\"),\n            resources.GetString(\"backColorPicker1.Items1304\"),\n            resources.GetString(\"backColorPicker1.Items1305\"),\n            resources.GetString(\"backColorPicker1.Items1306\"),\n            resources.GetString(\"backColorPicker1.Items1307\"),\n            resources.GetString(\"backColorPicker1.Items1308\"),\n            resources.GetString(\"backColorPicker1.Items1309\"),\n            resources.GetString(\"backColorPicker1.Items1310\"),\n            resources.GetString(\"backColorPicker1.Items1311\"),\n            resources.GetString(\"backColorPicker1.Items1312\"),\n            resources.GetString(\"backColorPicker1.Items1313\"),\n            resources.GetString(\"backColorPicker1.Items1314\"),\n            resources.GetString(\"backColorPicker1.Items1315\"),\n            resources.GetString(\"backColorPicker1.Items1316\"),\n            resources.GetString(\"backColorPicker1.Items1317\"),\n            resources.GetString(\"backColorPicker1.Items1318\"),\n            resources.GetString(\"backColorPicker1.Items1319\"),\n            resources.GetString(\"backColorPicker1.Items1320\"),\n            resources.GetString(\"backColorPicker1.Items1321\"),\n            resources.GetString(\"backColorPicker1.Items1322\"),\n            resources.GetString(\"backColorPicker1.Items1323\"),\n            resources.GetString(\"backColorPicker1.Items1324\"),\n            resources.GetString(\"backColorPicker1.Items1325\"),\n            resources.GetString(\"backColorPicker1.Items1326\"),\n            resources.GetString(\"backColorPicker1.Items1327\"),\n            resources.GetString(\"backColorPicker1.Items1328\"),\n            resources.GetString(\"backColorPicker1.Items1329\"),\n            resources.GetString(\"backColorPicker1.Items1330\"),\n            resources.GetString(\"backColorPicker1.Items1331\"),\n            resources.GetString(\"backColorPicker1.Items1332\"),\n            resources.GetString(\"backColorPicker1.Items1333\"),\n            resources.GetString(\"backColorPicker1.Items1334\"),\n            resources.GetString(\"backColorPicker1.Items1335\"),\n            resources.GetString(\"backColorPicker1.Items1336\"),\n            resources.GetString(\"backColorPicker1.Items1337\"),\n            resources.GetString(\"backColorPicker1.Items1338\"),\n            resources.GetString(\"backColorPicker1.Items1339\"),\n            resources.GetString(\"backColorPicker1.Items1340\"),\n            resources.GetString(\"backColorPicker1.Items1341\"),\n            resources.GetString(\"backColorPicker1.Items1342\"),\n            resources.GetString(\"backColorPicker1.Items1343\"),\n            resources.GetString(\"backColorPicker1.Items1344\"),\n            resources.GetString(\"backColorPicker1.Items1345\"),\n            resources.GetString(\"backColorPicker1.Items1346\"),\n            resources.GetString(\"backColorPicker1.Items1347\"),\n            resources.GetString(\"backColorPicker1.Items1348\"),\n            resources.GetString(\"backColorPicker1.Items1349\"),\n            resources.GetString(\"backColorPicker1.Items1350\"),\n            resources.GetString(\"backColorPicker1.Items1351\"),\n            resources.GetString(\"backColorPicker1.Items1352\"),\n            resources.GetString(\"backColorPicker1.Items1353\"),\n            resources.GetString(\"backColorPicker1.Items1354\"),\n            resources.GetString(\"backColorPicker1.Items1355\"),\n            resources.GetString(\"backColorPicker1.Items1356\"),\n            resources.GetString(\"backColorPicker1.Items1357\"),\n            resources.GetString(\"backColorPicker1.Items1358\"),\n            resources.GetString(\"backColorPicker1.Items1359\"),\n            resources.GetString(\"backColorPicker1.Items1360\"),\n            resources.GetString(\"backColorPicker1.Items1361\"),\n            resources.GetString(\"backColorPicker1.Items1362\"),\n            resources.GetString(\"backColorPicker1.Items1363\"),\n            resources.GetString(\"backColorPicker1.Items1364\"),\n            resources.GetString(\"backColorPicker1.Items1365\"),\n            resources.GetString(\"backColorPicker1.Items1366\"),\n            resources.GetString(\"backColorPicker1.Items1367\"),\n            resources.GetString(\"backColorPicker1.Items1368\"),\n            resources.GetString(\"backColorPicker1.Items1369\"),\n            resources.GetString(\"backColorPicker1.Items1370\"),\n            resources.GetString(\"backColorPicker1.Items1371\"),\n            resources.GetString(\"backColorPicker1.Items1372\"),\n            resources.GetString(\"backColorPicker1.Items1373\"),\n            resources.GetString(\"backColorPicker1.Items1374\"),\n            resources.GetString(\"backColorPicker1.Items1375\"),\n            resources.GetString(\"backColorPicker1.Items1376\"),\n            resources.GetString(\"backColorPicker1.Items1377\"),\n            resources.GetString(\"backColorPicker1.Items1378\"),\n            resources.GetString(\"backColorPicker1.Items1379\"),\n            resources.GetString(\"backColorPicker1.Items1380\"),\n            resources.GetString(\"backColorPicker1.Items1381\"),\n            resources.GetString(\"backColorPicker1.Items1382\"),\n            resources.GetString(\"backColorPicker1.Items1383\"),\n            resources.GetString(\"backColorPicker1.Items1384\"),\n            resources.GetString(\"backColorPicker1.Items1385\"),\n            resources.GetString(\"backColorPicker1.Items1386\"),\n            resources.GetString(\"backColorPicker1.Items1387\"),\n            resources.GetString(\"backColorPicker1.Items1388\"),\n            resources.GetString(\"backColorPicker1.Items1389\"),\n            resources.GetString(\"backColorPicker1.Items1390\"),\n            resources.GetString(\"backColorPicker1.Items1391\"),\n            resources.GetString(\"backColorPicker1.Items1392\"),\n            resources.GetString(\"backColorPicker1.Items1393\"),\n            resources.GetString(\"backColorPicker1.Items1394\"),\n            resources.GetString(\"backColorPicker1.Items1395\"),\n            resources.GetString(\"backColorPicker1.Items1396\"),\n            resources.GetString(\"backColorPicker1.Items1397\"),\n            resources.GetString(\"backColorPicker1.Items1398\"),\n            resources.GetString(\"backColorPicker1.Items1399\"),\n            resources.GetString(\"backColorPicker1.Items1400\"),\n            resources.GetString(\"backColorPicker1.Items1401\"),\n            resources.GetString(\"backColorPicker1.Items1402\"),\n            resources.GetString(\"backColorPicker1.Items1403\"),\n            resources.GetString(\"backColorPicker1.Items1404\"),\n            resources.GetString(\"backColorPicker1.Items1405\"),\n            resources.GetString(\"backColorPicker1.Items1406\"),\n            resources.GetString(\"backColorPicker1.Items1407\"),\n            resources.GetString(\"backColorPicker1.Items1408\"),\n            resources.GetString(\"backColorPicker1.Items1409\"),\n            resources.GetString(\"backColorPicker1.Items1410\"),\n            resources.GetString(\"backColorPicker1.Items1411\"),\n            resources.GetString(\"backColorPicker1.Items1412\"),\n            resources.GetString(\"backColorPicker1.Items1413\"),\n            resources.GetString(\"backColorPicker1.Items1414\"),\n            resources.GetString(\"backColorPicker1.Items1415\"),\n            resources.GetString(\"backColorPicker1.Items1416\"),\n            resources.GetString(\"backColorPicker1.Items1417\"),\n            resources.GetString(\"backColorPicker1.Items1418\"),\n            resources.GetString(\"backColorPicker1.Items1419\"),\n            resources.GetString(\"backColorPicker1.Items1420\"),\n            resources.GetString(\"backColorPicker1.Items1421\"),\n            resources.GetString(\"backColorPicker1.Items1422\"),\n            resources.GetString(\"backColorPicker1.Items1423\"),\n            resources.GetString(\"backColorPicker1.Items1424\"),\n            resources.GetString(\"backColorPicker1.Items1425\"),\n            resources.GetString(\"backColorPicker1.Items1426\"),\n            resources.GetString(\"backColorPicker1.Items1427\"),\n            resources.GetString(\"backColorPicker1.Items1428\"),\n            resources.GetString(\"backColorPicker1.Items1429\"),\n            resources.GetString(\"backColorPicker1.Items1430\"),\n            resources.GetString(\"backColorPicker1.Items1431\"),\n            resources.GetString(\"backColorPicker1.Items1432\"),\n            resources.GetString(\"backColorPicker1.Items1433\"),\n            resources.GetString(\"backColorPicker1.Items1434\"),\n            resources.GetString(\"backColorPicker1.Items1435\"),\n            resources.GetString(\"backColorPicker1.Items1436\"),\n            resources.GetString(\"backColorPicker1.Items1437\"),\n            resources.GetString(\"backColorPicker1.Items1438\"),\n            resources.GetString(\"backColorPicker1.Items1439\"),\n            resources.GetString(\"backColorPicker1.Items1440\"),\n            resources.GetString(\"backColorPicker1.Items1441\"),\n            resources.GetString(\"backColorPicker1.Items1442\"),\n            resources.GetString(\"backColorPicker1.Items1443\"),\n            resources.GetString(\"backColorPicker1.Items1444\"),\n            resources.GetString(\"backColorPicker1.Items1445\"),\n            resources.GetString(\"backColorPicker1.Items1446\"),\n            resources.GetString(\"backColorPicker1.Items1447\"),\n            resources.GetString(\"backColorPicker1.Items1448\"),\n            resources.GetString(\"backColorPicker1.Items1449\"),\n            resources.GetString(\"backColorPicker1.Items1450\"),\n            resources.GetString(\"backColorPicker1.Items1451\"),\n            resources.GetString(\"backColorPicker1.Items1452\"),\n            resources.GetString(\"backColorPicker1.Items1453\"),\n            resources.GetString(\"backColorPicker1.Items1454\"),\n            resources.GetString(\"backColorPicker1.Items1455\"),\n            resources.GetString(\"backColorPicker1.Items1456\"),\n            resources.GetString(\"backColorPicker1.Items1457\"),\n            resources.GetString(\"backColorPicker1.Items1458\"),\n            resources.GetString(\"backColorPicker1.Items1459\"),\n            resources.GetString(\"backColorPicker1.Items1460\"),\n            resources.GetString(\"backColorPicker1.Items1461\"),\n            resources.GetString(\"backColorPicker1.Items1462\"),\n            resources.GetString(\"backColorPicker1.Items1463\"),\n            resources.GetString(\"backColorPicker1.Items1464\"),\n            resources.GetString(\"backColorPicker1.Items1465\"),\n            resources.GetString(\"backColorPicker1.Items1466\"),\n            resources.GetString(\"backColorPicker1.Items1467\"),\n            resources.GetString(\"backColorPicker1.Items1468\"),\n            resources.GetString(\"backColorPicker1.Items1469\"),\n            resources.GetString(\"backColorPicker1.Items1470\"),\n            resources.GetString(\"backColorPicker1.Items1471\"),\n            resources.GetString(\"backColorPicker1.Items1472\"),\n            resources.GetString(\"backColorPicker1.Items1473\"),\n            resources.GetString(\"backColorPicker1.Items1474\"),\n            resources.GetString(\"backColorPicker1.Items1475\"),\n            resources.GetString(\"backColorPicker1.Items1476\"),\n            resources.GetString(\"backColorPicker1.Items1477\"),\n            resources.GetString(\"backColorPicker1.Items1478\"),\n            resources.GetString(\"backColorPicker1.Items1479\"),\n            resources.GetString(\"backColorPicker1.Items1480\"),\n            resources.GetString(\"backColorPicker1.Items1481\"),\n            resources.GetString(\"backColorPicker1.Items1482\"),\n            resources.GetString(\"backColorPicker1.Items1483\"),\n            resources.GetString(\"backColorPicker1.Items1484\"),\n            resources.GetString(\"backColorPicker1.Items1485\"),\n            resources.GetString(\"backColorPicker1.Items1486\"),\n            resources.GetString(\"backColorPicker1.Items1487\"),\n            resources.GetString(\"backColorPicker1.Items1488\"),\n            resources.GetString(\"backColorPicker1.Items1489\"),\n            resources.GetString(\"backColorPicker1.Items1490\"),\n            resources.GetString(\"backColorPicker1.Items1491\"),\n            resources.GetString(\"backColorPicker1.Items1492\"),\n            resources.GetString(\"backColorPicker1.Items1493\"),\n            resources.GetString(\"backColorPicker1.Items1494\"),\n            resources.GetString(\"backColorPicker1.Items1495\"),\n            resources.GetString(\"backColorPicker1.Items1496\"),\n            resources.GetString(\"backColorPicker1.Items1497\"),\n            resources.GetString(\"backColorPicker1.Items1498\"),\n            resources.GetString(\"backColorPicker1.Items1499\"),\n            resources.GetString(\"backColorPicker1.Items1500\"),\n            resources.GetString(\"backColorPicker1.Items1501\"),\n            resources.GetString(\"backColorPicker1.Items1502\"),\n            resources.GetString(\"backColorPicker1.Items1503\"),\n            resources.GetString(\"backColorPicker1.Items1504\"),\n            resources.GetString(\"backColorPicker1.Items1505\"),\n            resources.GetString(\"backColorPicker1.Items1506\"),\n            resources.GetString(\"backColorPicker1.Items1507\"),\n            resources.GetString(\"backColorPicker1.Items1508\"),\n            resources.GetString(\"backColorPicker1.Items1509\"),\n            resources.GetString(\"backColorPicker1.Items1510\"),\n            resources.GetString(\"backColorPicker1.Items1511\"),\n            resources.GetString(\"backColorPicker1.Items1512\"),\n            resources.GetString(\"backColorPicker1.Items1513\"),\n            resources.GetString(\"backColorPicker1.Items1514\"),\n            resources.GetString(\"backColorPicker1.Items1515\"),\n            resources.GetString(\"backColorPicker1.Items1516\"),\n            resources.GetString(\"backColorPicker1.Items1517\"),\n            resources.GetString(\"backColorPicker1.Items1518\"),\n            resources.GetString(\"backColorPicker1.Items1519\"),\n            resources.GetString(\"backColorPicker1.Items1520\"),\n            resources.GetString(\"backColorPicker1.Items1521\"),\n            resources.GetString(\"backColorPicker1.Items1522\"),\n            resources.GetString(\"backColorPicker1.Items1523\"),\n            resources.GetString(\"backColorPicker1.Items1524\"),\n            resources.GetString(\"backColorPicker1.Items1525\"),\n            resources.GetString(\"backColorPicker1.Items1526\"),\n            resources.GetString(\"backColorPicker1.Items1527\"),\n            resources.GetString(\"backColorPicker1.Items1528\"),\n            resources.GetString(\"backColorPicker1.Items1529\"),\n            resources.GetString(\"backColorPicker1.Items1530\"),\n            resources.GetString(\"backColorPicker1.Items1531\"),\n            resources.GetString(\"backColorPicker1.Items1532\"),\n            resources.GetString(\"backColorPicker1.Items1533\"),\n            resources.GetString(\"backColorPicker1.Items1534\"),\n            resources.GetString(\"backColorPicker1.Items1535\"),\n            resources.GetString(\"backColorPicker1.Items1536\"),\n            resources.GetString(\"backColorPicker1.Items1537\"),\n            resources.GetString(\"backColorPicker1.Items1538\"),\n            resources.GetString(\"backColorPicker1.Items1539\"),\n            resources.GetString(\"backColorPicker1.Items1540\"),\n            resources.GetString(\"backColorPicker1.Items1541\"),\n            resources.GetString(\"backColorPicker1.Items1542\"),\n            resources.GetString(\"backColorPicker1.Items1543\"),\n            resources.GetString(\"backColorPicker1.Items1544\"),\n            resources.GetString(\"backColorPicker1.Items1545\"),\n            resources.GetString(\"backColorPicker1.Items1546\"),\n            resources.GetString(\"backColorPicker1.Items1547\"),\n            resources.GetString(\"backColorPicker1.Items1548\"),\n            resources.GetString(\"backColorPicker1.Items1549\"),\n            resources.GetString(\"backColorPicker1.Items1550\"),\n            resources.GetString(\"backColorPicker1.Items1551\"),\n            resources.GetString(\"backColorPicker1.Items1552\"),\n            resources.GetString(\"backColorPicker1.Items1553\"),\n            resources.GetString(\"backColorPicker1.Items1554\"),\n            resources.GetString(\"backColorPicker1.Items1555\"),\n            resources.GetString(\"backColorPicker1.Items1556\"),\n            resources.GetString(\"backColorPicker1.Items1557\"),\n            resources.GetString(\"backColorPicker1.Items1558\"),\n            resources.GetString(\"backColorPicker1.Items1559\"),\n            resources.GetString(\"backColorPicker1.Items1560\"),\n            resources.GetString(\"backColorPicker1.Items1561\"),\n            resources.GetString(\"backColorPicker1.Items1562\"),\n            resources.GetString(\"backColorPicker1.Items1563\"),\n            resources.GetString(\"backColorPicker1.Items1564\"),\n            resources.GetString(\"backColorPicker1.Items1565\"),\n            resources.GetString(\"backColorPicker1.Items1566\"),\n            resources.GetString(\"backColorPicker1.Items1567\"),\n            resources.GetString(\"backColorPicker1.Items1568\"),\n            resources.GetString(\"backColorPicker1.Items1569\"),\n            resources.GetString(\"backColorPicker1.Items1570\"),\n            resources.GetString(\"backColorPicker1.Items1571\"),\n            resources.GetString(\"backColorPicker1.Items1572\"),\n            resources.GetString(\"backColorPicker1.Items1573\"),\n            resources.GetString(\"backColorPicker1.Items1574\"),\n            resources.GetString(\"backColorPicker1.Items1575\"),\n            resources.GetString(\"backColorPicker1.Items1576\"),\n            resources.GetString(\"backColorPicker1.Items1577\"),\n            resources.GetString(\"backColorPicker1.Items1578\"),\n            resources.GetString(\"backColorPicker1.Items1579\"),\n            resources.GetString(\"backColorPicker1.Items1580\"),\n            resources.GetString(\"backColorPicker1.Items1581\"),\n            resources.GetString(\"backColorPicker1.Items1582\"),\n            resources.GetString(\"backColorPicker1.Items1583\"),\n            resources.GetString(\"backColorPicker1.Items1584\"),\n            resources.GetString(\"backColorPicker1.Items1585\"),\n            resources.GetString(\"backColorPicker1.Items1586\"),\n            resources.GetString(\"backColorPicker1.Items1587\"),\n            resources.GetString(\"backColorPicker1.Items1588\"),\n            resources.GetString(\"backColorPicker1.Items1589\"),\n            resources.GetString(\"backColorPicker1.Items1590\"),\n            resources.GetString(\"backColorPicker1.Items1591\"),\n            resources.GetString(\"backColorPicker1.Items1592\"),\n            resources.GetString(\"backColorPicker1.Items1593\"),\n            resources.GetString(\"backColorPicker1.Items1594\"),\n            resources.GetString(\"backColorPicker1.Items1595\"),\n            resources.GetString(\"backColorPicker1.Items1596\"),\n            resources.GetString(\"backColorPicker1.Items1597\"),\n            resources.GetString(\"backColorPicker1.Items1598\"),\n            resources.GetString(\"backColorPicker1.Items1599\"),\n            resources.GetString(\"backColorPicker1.Items1600\"),\n            resources.GetString(\"backColorPicker1.Items1601\"),\n            resources.GetString(\"backColorPicker1.Items1602\"),\n            resources.GetString(\"backColorPicker1.Items1603\"),\n            resources.GetString(\"backColorPicker1.Items1604\"),\n            resources.GetString(\"backColorPicker1.Items1605\"),\n            resources.GetString(\"backColorPicker1.Items1606\"),\n            resources.GetString(\"backColorPicker1.Items1607\"),\n            resources.GetString(\"backColorPicker1.Items1608\"),\n            resources.GetString(\"backColorPicker1.Items1609\"),\n            resources.GetString(\"backColorPicker1.Items1610\"),\n            resources.GetString(\"backColorPicker1.Items1611\"),\n            resources.GetString(\"backColorPicker1.Items1612\"),\n            resources.GetString(\"backColorPicker1.Items1613\"),\n            resources.GetString(\"backColorPicker1.Items1614\"),\n            resources.GetString(\"backColorPicker1.Items1615\"),\n            resources.GetString(\"backColorPicker1.Items1616\"),\n            resources.GetString(\"backColorPicker1.Items1617\"),\n            resources.GetString(\"backColorPicker1.Items1618\"),\n            resources.GetString(\"backColorPicker1.Items1619\"),\n            resources.GetString(\"backColorPicker1.Items1620\"),\n            resources.GetString(\"backColorPicker1.Items1621\"),\n            resources.GetString(\"backColorPicker1.Items1622\"),\n            resources.GetString(\"backColorPicker1.Items1623\"),\n            resources.GetString(\"backColorPicker1.Items1624\"),\n            resources.GetString(\"backColorPicker1.Items1625\"),\n            resources.GetString(\"backColorPicker1.Items1626\"),\n            resources.GetString(\"backColorPicker1.Items1627\"),\n            resources.GetString(\"backColorPicker1.Items1628\"),\n            resources.GetString(\"backColorPicker1.Items1629\"),\n            resources.GetString(\"backColorPicker1.Items1630\"),\n            resources.GetString(\"backColorPicker1.Items1631\"),\n            resources.GetString(\"backColorPicker1.Items1632\"),\n            resources.GetString(\"backColorPicker1.Items1633\"),\n            resources.GetString(\"backColorPicker1.Items1634\"),\n            resources.GetString(\"backColorPicker1.Items1635\"),\n            resources.GetString(\"backColorPicker1.Items1636\"),\n            resources.GetString(\"backColorPicker1.Items1637\"),\n            resources.GetString(\"backColorPicker1.Items1638\"),\n            resources.GetString(\"backColorPicker1.Items1639\"),\n            resources.GetString(\"backColorPicker1.Items1640\"),\n            resources.GetString(\"backColorPicker1.Items1641\"),\n            resources.GetString(\"backColorPicker1.Items1642\"),\n            resources.GetString(\"backColorPicker1.Items1643\"),\n            resources.GetString(\"backColorPicker1.Items1644\"),\n            resources.GetString(\"backColorPicker1.Items1645\"),\n            resources.GetString(\"backColorPicker1.Items1646\"),\n            resources.GetString(\"backColorPicker1.Items1647\"),\n            resources.GetString(\"backColorPicker1.Items1648\"),\n            resources.GetString(\"backColorPicker1.Items1649\"),\n            resources.GetString(\"backColorPicker1.Items1650\"),\n            resources.GetString(\"backColorPicker1.Items1651\"),\n            resources.GetString(\"backColorPicker1.Items1652\"),\n            resources.GetString(\"backColorPicker1.Items1653\"),\n            resources.GetString(\"backColorPicker1.Items1654\"),\n            resources.GetString(\"backColorPicker1.Items1655\"),\n            resources.GetString(\"backColorPicker1.Items1656\"),\n            resources.GetString(\"backColorPicker1.Items1657\"),\n            resources.GetString(\"backColorPicker1.Items1658\"),\n            resources.GetString(\"backColorPicker1.Items1659\"),\n            resources.GetString(\"backColorPicker1.Items1660\"),\n            resources.GetString(\"backColorPicker1.Items1661\"),\n            resources.GetString(\"backColorPicker1.Items1662\"),\n            resources.GetString(\"backColorPicker1.Items1663\"),\n            resources.GetString(\"backColorPicker1.Items1664\"),\n            resources.GetString(\"backColorPicker1.Items1665\"),\n            resources.GetString(\"backColorPicker1.Items1666\"),\n            resources.GetString(\"backColorPicker1.Items1667\"),\n            resources.GetString(\"backColorPicker1.Items1668\"),\n            resources.GetString(\"backColorPicker1.Items1669\"),\n            resources.GetString(\"backColorPicker1.Items1670\"),\n            resources.GetString(\"backColorPicker1.Items1671\"),\n            resources.GetString(\"backColorPicker1.Items1672\"),\n            resources.GetString(\"backColorPicker1.Items1673\"),\n            resources.GetString(\"backColorPicker1.Items1674\"),\n            resources.GetString(\"backColorPicker1.Items1675\"),\n            resources.GetString(\"backColorPicker1.Items1676\"),\n            resources.GetString(\"backColorPicker1.Items1677\"),\n            resources.GetString(\"backColorPicker1.Items1678\"),\n            resources.GetString(\"backColorPicker1.Items1679\"),\n            resources.GetString(\"backColorPicker1.Items1680\"),\n            resources.GetString(\"backColorPicker1.Items1681\"),\n            resources.GetString(\"backColorPicker1.Items1682\"),\n            resources.GetString(\"backColorPicker1.Items1683\"),\n            resources.GetString(\"backColorPicker1.Items1684\"),\n            resources.GetString(\"backColorPicker1.Items1685\"),\n            resources.GetString(\"backColorPicker1.Items1686\"),\n            resources.GetString(\"backColorPicker1.Items1687\"),\n            resources.GetString(\"backColorPicker1.Items1688\"),\n            resources.GetString(\"backColorPicker1.Items1689\"),\n            resources.GetString(\"backColorPicker1.Items1690\"),\n            resources.GetString(\"backColorPicker1.Items1691\"),\n            resources.GetString(\"backColorPicker1.Items1692\"),\n            resources.GetString(\"backColorPicker1.Items1693\"),\n            resources.GetString(\"backColorPicker1.Items1694\"),\n            resources.GetString(\"backColorPicker1.Items1695\"),\n            resources.GetString(\"backColorPicker1.Items1696\"),\n            resources.GetString(\"backColorPicker1.Items1697\"),\n            resources.GetString(\"backColorPicker1.Items1698\"),\n            resources.GetString(\"backColorPicker1.Items1699\"),\n            resources.GetString(\"backColorPicker1.Items1700\"),\n            resources.GetString(\"backColorPicker1.Items1701\"),\n            resources.GetString(\"backColorPicker1.Items1702\"),\n            resources.GetString(\"backColorPicker1.Items1703\"),\n            resources.GetString(\"backColorPicker1.Items1704\"),\n            resources.GetString(\"backColorPicker1.Items1705\"),\n            resources.GetString(\"backColorPicker1.Items1706\"),\n            resources.GetString(\"backColorPicker1.Items1707\"),\n            resources.GetString(\"backColorPicker1.Items1708\"),\n            resources.GetString(\"backColorPicker1.Items1709\"),\n            resources.GetString(\"backColorPicker1.Items1710\"),\n            resources.GetString(\"backColorPicker1.Items1711\"),\n            resources.GetString(\"backColorPicker1.Items1712\"),\n            resources.GetString(\"backColorPicker1.Items1713\"),\n            resources.GetString(\"backColorPicker1.Items1714\"),\n            resources.GetString(\"backColorPicker1.Items1715\"),\n            resources.GetString(\"backColorPicker1.Items1716\"),\n            resources.GetString(\"backColorPicker1.Items1717\"),\n            resources.GetString(\"backColorPicker1.Items1718\"),\n            resources.GetString(\"backColorPicker1.Items1719\"),\n            resources.GetString(\"backColorPicker1.Items1720\"),\n            resources.GetString(\"backColorPicker1.Items1721\"),\n            resources.GetString(\"backColorPicker1.Items1722\"),\n            resources.GetString(\"backColorPicker1.Items1723\"),\n            resources.GetString(\"backColorPicker1.Items1724\"),\n            resources.GetString(\"backColorPicker1.Items1725\"),\n            resources.GetString(\"backColorPicker1.Items1726\"),\n            resources.GetString(\"backColorPicker1.Items1727\"),\n            resources.GetString(\"backColorPicker1.Items1728\"),\n            resources.GetString(\"backColorPicker1.Items1729\"),\n            resources.GetString(\"backColorPicker1.Items1730\"),\n            resources.GetString(\"backColorPicker1.Items1731\"),\n            resources.GetString(\"backColorPicker1.Items1732\"),\n            resources.GetString(\"backColorPicker1.Items1733\"),\n            resources.GetString(\"backColorPicker1.Items1734\"),\n            resources.GetString(\"backColorPicker1.Items1735\"),\n            resources.GetString(\"backColorPicker1.Items1736\"),\n            resources.GetString(\"backColorPicker1.Items1737\"),\n            resources.GetString(\"backColorPicker1.Items1738\"),\n            resources.GetString(\"backColorPicker1.Items1739\"),\n            resources.GetString(\"backColorPicker1.Items1740\"),\n            resources.GetString(\"backColorPicker1.Items1741\"),\n            resources.GetString(\"backColorPicker1.Items1742\"),\n            resources.GetString(\"backColorPicker1.Items1743\"),\n            resources.GetString(\"backColorPicker1.Items1744\"),\n            resources.GetString(\"backColorPicker1.Items1745\"),\n            resources.GetString(\"backColorPicker1.Items1746\"),\n            resources.GetString(\"backColorPicker1.Items1747\"),\n            resources.GetString(\"backColorPicker1.Items1748\"),\n            resources.GetString(\"backColorPicker1.Items1749\"),\n            resources.GetString(\"backColorPicker1.Items1750\"),\n            resources.GetString(\"backColorPicker1.Items1751\"),\n            resources.GetString(\"backColorPicker1.Items1752\"),\n            resources.GetString(\"backColorPicker1.Items1753\"),\n            resources.GetString(\"backColorPicker1.Items1754\"),\n            resources.GetString(\"backColorPicker1.Items1755\"),\n            resources.GetString(\"backColorPicker1.Items1756\"),\n            resources.GetString(\"backColorPicker1.Items1757\"),\n            resources.GetString(\"backColorPicker1.Items1758\"),\n            resources.GetString(\"backColorPicker1.Items1759\"),\n            resources.GetString(\"backColorPicker1.Items1760\"),\n            resources.GetString(\"backColorPicker1.Items1761\"),\n            resources.GetString(\"backColorPicker1.Items1762\"),\n            resources.GetString(\"backColorPicker1.Items1763\"),\n            resources.GetString(\"backColorPicker1.Items1764\"),\n            resources.GetString(\"backColorPicker1.Items1765\"),\n            resources.GetString(\"backColorPicker1.Items1766\"),\n            resources.GetString(\"backColorPicker1.Items1767\"),\n            resources.GetString(\"backColorPicker1.Items1768\"),\n            resources.GetString(\"backColorPicker1.Items1769\"),\n            resources.GetString(\"backColorPicker1.Items1770\"),\n            resources.GetString(\"backColorPicker1.Items1771\"),\n            resources.GetString(\"backColorPicker1.Items1772\"),\n            resources.GetString(\"backColorPicker1.Items1773\"),\n            resources.GetString(\"backColorPicker1.Items1774\"),\n            resources.GetString(\"backColorPicker1.Items1775\"),\n            resources.GetString(\"backColorPicker1.Items1776\"),\n            resources.GetString(\"backColorPicker1.Items1777\"),\n            resources.GetString(\"backColorPicker1.Items1778\"),\n            resources.GetString(\"backColorPicker1.Items1779\"),\n            resources.GetString(\"backColorPicker1.Items1780\"),\n            resources.GetString(\"backColorPicker1.Items1781\"),\n            resources.GetString(\"backColorPicker1.Items1782\"),\n            resources.GetString(\"backColorPicker1.Items1783\"),\n            resources.GetString(\"backColorPicker1.Items1784\"),\n            resources.GetString(\"backColorPicker1.Items1785\"),\n            resources.GetString(\"backColorPicker1.Items1786\"),\n            resources.GetString(\"backColorPicker1.Items1787\"),\n            resources.GetString(\"backColorPicker1.Items1788\"),\n            resources.GetString(\"backColorPicker1.Items1789\"),\n            resources.GetString(\"backColorPicker1.Items1790\"),\n            resources.GetString(\"backColorPicker1.Items1791\"),\n            resources.GetString(\"backColorPicker1.Items1792\"),\n            resources.GetString(\"backColorPicker1.Items1793\"),\n            resources.GetString(\"backColorPicker1.Items1794\"),\n            resources.GetString(\"backColorPicker1.Items1795\"),\n            resources.GetString(\"backColorPicker1.Items1796\"),\n            resources.GetString(\"backColorPicker1.Items1797\"),\n            resources.GetString(\"backColorPicker1.Items1798\"),\n            resources.GetString(\"backColorPicker1.Items1799\"),\n            resources.GetString(\"backColorPicker1.Items1800\"),\n            resources.GetString(\"backColorPicker1.Items1801\"),\n            resources.GetString(\"backColorPicker1.Items1802\"),\n            resources.GetString(\"backColorPicker1.Items1803\"),\n            resources.GetString(\"backColorPicker1.Items1804\"),\n            resources.GetString(\"backColorPicker1.Items1805\"),\n            resources.GetString(\"backColorPicker1.Items1806\"),\n            resources.GetString(\"backColorPicker1.Items1807\"),\n            resources.GetString(\"backColorPicker1.Items1808\"),\n            resources.GetString(\"backColorPicker1.Items1809\"),\n            resources.GetString(\"backColorPicker1.Items1810\"),\n            resources.GetString(\"backColorPicker1.Items1811\"),\n            resources.GetString(\"backColorPicker1.Items1812\"),\n            resources.GetString(\"backColorPicker1.Items1813\"),\n            resources.GetString(\"backColorPicker1.Items1814\"),\n            resources.GetString(\"backColorPicker1.Items1815\"),\n            resources.GetString(\"backColorPicker1.Items1816\"),\n            resources.GetString(\"backColorPicker1.Items1817\"),\n            resources.GetString(\"backColorPicker1.Items1818\"),\n            resources.GetString(\"backColorPicker1.Items1819\"),\n            resources.GetString(\"backColorPicker1.Items1820\"),\n            resources.GetString(\"backColorPicker1.Items1821\"),\n            resources.GetString(\"backColorPicker1.Items1822\"),\n            resources.GetString(\"backColorPicker1.Items1823\"),\n            resources.GetString(\"backColorPicker1.Items1824\"),\n            resources.GetString(\"backColorPicker1.Items1825\"),\n            resources.GetString(\"backColorPicker1.Items1826\"),\n            resources.GetString(\"backColorPicker1.Items1827\"),\n            resources.GetString(\"backColorPicker1.Items1828\"),\n            resources.GetString(\"backColorPicker1.Items1829\"),\n            resources.GetString(\"backColorPicker1.Items1830\"),\n            resources.GetString(\"backColorPicker1.Items1831\"),\n            resources.GetString(\"backColorPicker1.Items1832\"),\n            resources.GetString(\"backColorPicker1.Items1833\"),\n            resources.GetString(\"backColorPicker1.Items1834\"),\n            resources.GetString(\"backColorPicker1.Items1835\"),\n            resources.GetString(\"backColorPicker1.Items1836\"),\n            resources.GetString(\"backColorPicker1.Items1837\"),\n            resources.GetString(\"backColorPicker1.Items1838\"),\n            resources.GetString(\"backColorPicker1.Items1839\"),\n            resources.GetString(\"backColorPicker1.Items1840\"),\n            resources.GetString(\"backColorPicker1.Items1841\"),\n            resources.GetString(\"backColorPicker1.Items1842\"),\n            resources.GetString(\"backColorPicker1.Items1843\"),\n            resources.GetString(\"backColorPicker1.Items1844\"),\n            resources.GetString(\"backColorPicker1.Items1845\"),\n            resources.GetString(\"backColorPicker1.Items1846\"),\n            resources.GetString(\"backColorPicker1.Items1847\"),\n            resources.GetString(\"backColorPicker1.Items1848\"),\n            resources.GetString(\"backColorPicker1.Items1849\"),\n            resources.GetString(\"backColorPicker1.Items1850\"),\n            resources.GetString(\"backColorPicker1.Items1851\"),\n            resources.GetString(\"backColorPicker1.Items1852\"),\n            resources.GetString(\"backColorPicker1.Items1853\"),\n            resources.GetString(\"backColorPicker1.Items1854\"),\n            resources.GetString(\"backColorPicker1.Items1855\"),\n            resources.GetString(\"backColorPicker1.Items1856\"),\n            resources.GetString(\"backColorPicker1.Items1857\"),\n            resources.GetString(\"backColorPicker1.Items1858\"),\n            resources.GetString(\"backColorPicker1.Items1859\"),\n            resources.GetString(\"backColorPicker1.Items1860\"),\n            resources.GetString(\"backColorPicker1.Items1861\"),\n            resources.GetString(\"backColorPicker1.Items1862\"),\n            resources.GetString(\"backColorPicker1.Items1863\"),\n            resources.GetString(\"backColorPicker1.Items1864\"),\n            resources.GetString(\"backColorPicker1.Items1865\"),\n            resources.GetString(\"backColorPicker1.Items1866\"),\n            resources.GetString(\"backColorPicker1.Items1867\"),\n            resources.GetString(\"backColorPicker1.Items1868\"),\n            resources.GetString(\"backColorPicker1.Items1869\"),\n            resources.GetString(\"backColorPicker1.Items1870\"),\n            resources.GetString(\"backColorPicker1.Items1871\"),\n            resources.GetString(\"backColorPicker1.Items1872\"),\n            resources.GetString(\"backColorPicker1.Items1873\"),\n            resources.GetString(\"backColorPicker1.Items1874\"),\n            resources.GetString(\"backColorPicker1.Items1875\"),\n            resources.GetString(\"backColorPicker1.Items1876\"),\n            resources.GetString(\"backColorPicker1.Items1877\"),\n            resources.GetString(\"backColorPicker1.Items1878\"),\n            resources.GetString(\"backColorPicker1.Items1879\"),\n            resources.GetString(\"backColorPicker1.Items1880\"),\n            resources.GetString(\"backColorPicker1.Items1881\"),\n            resources.GetString(\"backColorPicker1.Items1882\"),\n            resources.GetString(\"backColorPicker1.Items1883\"),\n            resources.GetString(\"backColorPicker1.Items1884\"),\n            resources.GetString(\"backColorPicker1.Items1885\"),\n            resources.GetString(\"backColorPicker1.Items1886\"),\n            resources.GetString(\"backColorPicker1.Items1887\"),\n            resources.GetString(\"backColorPicker1.Items1888\"),\n            resources.GetString(\"backColorPicker1.Items1889\"),\n            resources.GetString(\"backColorPicker1.Items1890\"),\n            resources.GetString(\"backColorPicker1.Items1891\"),\n            resources.GetString(\"backColorPicker1.Items1892\"),\n            resources.GetString(\"backColorPicker1.Items1893\"),\n            resources.GetString(\"backColorPicker1.Items1894\"),\n            resources.GetString(\"backColorPicker1.Items1895\"),\n            resources.GetString(\"backColorPicker1.Items1896\"),\n            resources.GetString(\"backColorPicker1.Items1897\"),\n            resources.GetString(\"backColorPicker1.Items1898\"),\n            resources.GetString(\"backColorPicker1.Items1899\"),\n            resources.GetString(\"backColorPicker1.Items1900\"),\n            resources.GetString(\"backColorPicker1.Items1901\"),\n            resources.GetString(\"backColorPicker1.Items1902\"),\n            resources.GetString(\"backColorPicker1.Items1903\"),\n            resources.GetString(\"backColorPicker1.Items1904\"),\n            resources.GetString(\"backColorPicker1.Items1905\"),\n            resources.GetString(\"backColorPicker1.Items1906\"),\n            resources.GetString(\"backColorPicker1.Items1907\"),\n            resources.GetString(\"backColorPicker1.Items1908\"),\n            resources.GetString(\"backColorPicker1.Items1909\"),\n            resources.GetString(\"backColorPicker1.Items1910\"),\n            resources.GetString(\"backColorPicker1.Items1911\"),\n            resources.GetString(\"backColorPicker1.Items1912\"),\n            resources.GetString(\"backColorPicker1.Items1913\"),\n            resources.GetString(\"backColorPicker1.Items1914\"),\n            resources.GetString(\"backColorPicker1.Items1915\"),\n            resources.GetString(\"backColorPicker1.Items1916\"),\n            resources.GetString(\"backColorPicker1.Items1917\"),\n            resources.GetString(\"backColorPicker1.Items1918\"),\n            resources.GetString(\"backColorPicker1.Items1919\"),\n            resources.GetString(\"backColorPicker1.Items1920\"),\n            resources.GetString(\"backColorPicker1.Items1921\"),\n            resources.GetString(\"backColorPicker1.Items1922\"),\n            resources.GetString(\"backColorPicker1.Items1923\"),\n            resources.GetString(\"backColorPicker1.Items1924\"),\n            resources.GetString(\"backColorPicker1.Items1925\"),\n            resources.GetString(\"backColorPicker1.Items1926\"),\n            resources.GetString(\"backColorPicker1.Items1927\"),\n            resources.GetString(\"backColorPicker1.Items1928\"),\n            resources.GetString(\"backColorPicker1.Items1929\"),\n            resources.GetString(\"backColorPicker1.Items1930\"),\n            resources.GetString(\"backColorPicker1.Items1931\"),\n            resources.GetString(\"backColorPicker1.Items1932\"),\n            resources.GetString(\"backColorPicker1.Items1933\"),\n            resources.GetString(\"backColorPicker1.Items1934\"),\n            resources.GetString(\"backColorPicker1.Items1935\"),\n            resources.GetString(\"backColorPicker1.Items1936\"),\n            resources.GetString(\"backColorPicker1.Items1937\"),\n            resources.GetString(\"backColorPicker1.Items1938\"),\n            resources.GetString(\"backColorPicker1.Items1939\"),\n            resources.GetString(\"backColorPicker1.Items1940\"),\n            resources.GetString(\"backColorPicker1.Items1941\"),\n            resources.GetString(\"backColorPicker1.Items1942\"),\n            resources.GetString(\"backColorPicker1.Items1943\"),\n            resources.GetString(\"backColorPicker1.Items1944\"),\n            resources.GetString(\"backColorPicker1.Items1945\"),\n            resources.GetString(\"backColorPicker1.Items1946\"),\n            resources.GetString(\"backColorPicker1.Items1947\"),\n            resources.GetString(\"backColorPicker1.Items1948\"),\n            resources.GetString(\"backColorPicker1.Items1949\"),\n            resources.GetString(\"backColorPicker1.Items1950\"),\n            resources.GetString(\"backColorPicker1.Items1951\"),\n            resources.GetString(\"backColorPicker1.Items1952\"),\n            resources.GetString(\"backColorPicker1.Items1953\"),\n            resources.GetString(\"backColorPicker1.Items1954\"),\n            resources.GetString(\"backColorPicker1.Items1955\"),\n            resources.GetString(\"backColorPicker1.Items1956\"),\n            resources.GetString(\"backColorPicker1.Items1957\"),\n            resources.GetString(\"backColorPicker1.Items1958\"),\n            resources.GetString(\"backColorPicker1.Items1959\"),\n            resources.GetString(\"backColorPicker1.Items1960\"),\n            resources.GetString(\"backColorPicker1.Items1961\"),\n            resources.GetString(\"backColorPicker1.Items1962\"),\n            resources.GetString(\"backColorPicker1.Items1963\"),\n            resources.GetString(\"backColorPicker1.Items1964\"),\n            resources.GetString(\"backColorPicker1.Items1965\"),\n            resources.GetString(\"backColorPicker1.Items1966\"),\n            resources.GetString(\"backColorPicker1.Items1967\"),\n            resources.GetString(\"backColorPicker1.Items1968\"),\n            resources.GetString(\"backColorPicker1.Items1969\"),\n            resources.GetString(\"backColorPicker1.Items1970\"),\n            resources.GetString(\"backColorPicker1.Items1971\"),\n            resources.GetString(\"backColorPicker1.Items1972\"),\n            resources.GetString(\"backColorPicker1.Items1973\"),\n            resources.GetString(\"backColorPicker1.Items1974\"),\n            resources.GetString(\"backColorPicker1.Items1975\"),\n            resources.GetString(\"backColorPicker1.Items1976\"),\n            resources.GetString(\"backColorPicker1.Items1977\"),\n            resources.GetString(\"backColorPicker1.Items1978\"),\n            resources.GetString(\"backColorPicker1.Items1979\"),\n            resources.GetString(\"backColorPicker1.Items1980\"),\n            resources.GetString(\"backColorPicker1.Items1981\"),\n            resources.GetString(\"backColorPicker1.Items1982\"),\n            resources.GetString(\"backColorPicker1.Items1983\"),\n            resources.GetString(\"backColorPicker1.Items1984\"),\n            resources.GetString(\"backColorPicker1.Items1985\"),\n            resources.GetString(\"backColorPicker1.Items1986\"),\n            resources.GetString(\"backColorPicker1.Items1987\"),\n            resources.GetString(\"backColorPicker1.Items1988\"),\n            resources.GetString(\"backColorPicker1.Items1989\"),\n            resources.GetString(\"backColorPicker1.Items1990\"),\n            resources.GetString(\"backColorPicker1.Items1991\"),\n            resources.GetString(\"backColorPicker1.Items1992\"),\n            resources.GetString(\"backColorPicker1.Items1993\"),\n            resources.GetString(\"backColorPicker1.Items1994\"),\n            resources.GetString(\"backColorPicker1.Items1995\"),\n            resources.GetString(\"backColorPicker1.Items1996\"),\n            resources.GetString(\"backColorPicker1.Items1997\"),\n            resources.GetString(\"backColorPicker1.Items1998\"),\n            resources.GetString(\"backColorPicker1.Items1999\"),\n            resources.GetString(\"backColorPicker1.Items2000\"),\n            resources.GetString(\"backColorPicker1.Items2001\"),\n            resources.GetString(\"backColorPicker1.Items2002\"),\n            resources.GetString(\"backColorPicker1.Items2003\"),\n            resources.GetString(\"backColorPicker1.Items2004\"),\n            resources.GetString(\"backColorPicker1.Items2005\"),\n            resources.GetString(\"backColorPicker1.Items2006\"),\n            resources.GetString(\"backColorPicker1.Items2007\"),\n            resources.GetString(\"backColorPicker1.Items2008\"),\n            resources.GetString(\"backColorPicker1.Items2009\"),\n            resources.GetString(\"backColorPicker1.Items2010\"),\n            resources.GetString(\"backColorPicker1.Items2011\"),\n            resources.GetString(\"backColorPicker1.Items2012\"),\n            resources.GetString(\"backColorPicker1.Items2013\"),\n            resources.GetString(\"backColorPicker1.Items2014\"),\n            resources.GetString(\"backColorPicker1.Items2015\"),\n            resources.GetString(\"backColorPicker1.Items2016\"),\n            resources.GetString(\"backColorPicker1.Items2017\"),\n            resources.GetString(\"backColorPicker1.Items2018\"),\n            resources.GetString(\"backColorPicker1.Items2019\"),\n            resources.GetString(\"backColorPicker1.Items2020\"),\n            resources.GetString(\"backColorPicker1.Items2021\"),\n            resources.GetString(\"backColorPicker1.Items2022\"),\n            resources.GetString(\"backColorPicker1.Items2023\"),\n            resources.GetString(\"backColorPicker1.Items2024\"),\n            resources.GetString(\"backColorPicker1.Items2025\"),\n            resources.GetString(\"backColorPicker1.Items2026\"),\n            resources.GetString(\"backColorPicker1.Items2027\"),\n            resources.GetString(\"backColorPicker1.Items2028\"),\n            resources.GetString(\"backColorPicker1.Items2029\"),\n            resources.GetString(\"backColorPicker1.Items2030\"),\n            resources.GetString(\"backColorPicker1.Items2031\"),\n            resources.GetString(\"backColorPicker1.Items2032\"),\n            resources.GetString(\"backColorPicker1.Items2033\"),\n            resources.GetString(\"backColorPicker1.Items2034\"),\n            resources.GetString(\"backColorPicker1.Items2035\"),\n            resources.GetString(\"backColorPicker1.Items2036\"),\n            resources.GetString(\"backColorPicker1.Items2037\"),\n            resources.GetString(\"backColorPicker1.Items2038\"),\n            resources.GetString(\"backColorPicker1.Items2039\"),\n            resources.GetString(\"backColorPicker1.Items2040\"),\n            resources.GetString(\"backColorPicker1.Items2041\"),\n            resources.GetString(\"backColorPicker1.Items2042\"),\n            resources.GetString(\"backColorPicker1.Items2043\"),\n            resources.GetString(\"backColorPicker1.Items2044\"),\n            resources.GetString(\"backColorPicker1.Items2045\"),\n            resources.GetString(\"backColorPicker1.Items2046\"),\n            resources.GetString(\"backColorPicker1.Items2047\"),\n            resources.GetString(\"backColorPicker1.Items2048\"),\n            resources.GetString(\"backColorPicker1.Items2049\"),\n            resources.GetString(\"backColorPicker1.Items2050\"),\n            resources.GetString(\"backColorPicker1.Items2051\"),\n            resources.GetString(\"backColorPicker1.Items2052\"),\n            resources.GetString(\"backColorPicker1.Items2053\"),\n            resources.GetString(\"backColorPicker1.Items2054\"),\n            resources.GetString(\"backColorPicker1.Items2055\"),\n            resources.GetString(\"backColorPicker1.Items2056\"),\n            resources.GetString(\"backColorPicker1.Items2057\"),\n            resources.GetString(\"backColorPicker1.Items2058\"),\n            resources.GetString(\"backColorPicker1.Items2059\"),\n            resources.GetString(\"backColorPicker1.Items2060\"),\n            resources.GetString(\"backColorPicker1.Items2061\"),\n            resources.GetString(\"backColorPicker1.Items2062\"),\n            resources.GetString(\"backColorPicker1.Items2063\"),\n            resources.GetString(\"backColorPicker1.Items2064\"),\n            resources.GetString(\"backColorPicker1.Items2065\"),\n            resources.GetString(\"backColorPicker1.Items2066\"),\n            resources.GetString(\"backColorPicker1.Items2067\"),\n            resources.GetString(\"backColorPicker1.Items2068\"),\n            resources.GetString(\"backColorPicker1.Items2069\"),\n            resources.GetString(\"backColorPicker1.Items2070\"),\n            resources.GetString(\"backColorPicker1.Items2071\"),\n            resources.GetString(\"backColorPicker1.Items2072\"),\n            resources.GetString(\"backColorPicker1.Items2073\"),\n            resources.GetString(\"backColorPicker1.Items2074\"),\n            resources.GetString(\"backColorPicker1.Items2075\"),\n            resources.GetString(\"backColorPicker1.Items2076\"),\n            resources.GetString(\"backColorPicker1.Items2077\"),\n            resources.GetString(\"backColorPicker1.Items2078\"),\n            resources.GetString(\"backColorPicker1.Items2079\"),\n            resources.GetString(\"backColorPicker1.Items2080\"),\n            resources.GetString(\"backColorPicker1.Items2081\"),\n            resources.GetString(\"backColorPicker1.Items2082\"),\n            resources.GetString(\"backColorPicker1.Items2083\"),\n            resources.GetString(\"backColorPicker1.Items2084\"),\n            resources.GetString(\"backColorPicker1.Items2085\"),\n            resources.GetString(\"backColorPicker1.Items2086\"),\n            resources.GetString(\"backColorPicker1.Items2087\"),\n            resources.GetString(\"backColorPicker1.Items2088\"),\n            resources.GetString(\"backColorPicker1.Items2089\"),\n            resources.GetString(\"backColorPicker1.Items2090\"),\n            resources.GetString(\"backColorPicker1.Items2091\"),\n            resources.GetString(\"backColorPicker1.Items2092\"),\n            resources.GetString(\"backColorPicker1.Items2093\"),\n            resources.GetString(\"backColorPicker1.Items2094\"),\n            resources.GetString(\"backColorPicker1.Items2095\"),\n            resources.GetString(\"backColorPicker1.Items2096\"),\n            resources.GetString(\"backColorPicker1.Items2097\"),\n            resources.GetString(\"backColorPicker1.Items2098\"),\n            resources.GetString(\"backColorPicker1.Items2099\"),\n            resources.GetString(\"backColorPicker1.Items2100\"),\n            resources.GetString(\"backColorPicker1.Items2101\"),\n            resources.GetString(\"backColorPicker1.Items2102\"),\n            resources.GetString(\"backColorPicker1.Items2103\"),\n            resources.GetString(\"backColorPicker1.Items2104\"),\n            resources.GetString(\"backColorPicker1.Items2105\"),\n            resources.GetString(\"backColorPicker1.Items2106\"),\n            resources.GetString(\"backColorPicker1.Items2107\"),\n            resources.GetString(\"backColorPicker1.Items2108\"),\n            resources.GetString(\"backColorPicker1.Items2109\"),\n            resources.GetString(\"backColorPicker1.Items2110\"),\n            resources.GetString(\"backColorPicker1.Items2111\"),\n            resources.GetString(\"backColorPicker1.Items2112\"),\n            resources.GetString(\"backColorPicker1.Items2113\"),\n            resources.GetString(\"backColorPicker1.Items2114\"),\n            resources.GetString(\"backColorPicker1.Items2115\"),\n            resources.GetString(\"backColorPicker1.Items2116\"),\n            resources.GetString(\"backColorPicker1.Items2117\"),\n            resources.GetString(\"backColorPicker1.Items2118\"),\n            resources.GetString(\"backColorPicker1.Items2119\"),\n            resources.GetString(\"backColorPicker1.Items2120\"),\n            resources.GetString(\"backColorPicker1.Items2121\"),\n            resources.GetString(\"backColorPicker1.Items2122\"),\n            resources.GetString(\"backColorPicker1.Items2123\"),\n            resources.GetString(\"backColorPicker1.Items2124\"),\n            resources.GetString(\"backColorPicker1.Items2125\"),\n            resources.GetString(\"backColorPicker1.Items2126\"),\n            resources.GetString(\"backColorPicker1.Items2127\"),\n            resources.GetString(\"backColorPicker1.Items2128\"),\n            resources.GetString(\"backColorPicker1.Items2129\"),\n            resources.GetString(\"backColorPicker1.Items2130\"),\n            resources.GetString(\"backColorPicker1.Items2131\"),\n            resources.GetString(\"backColorPicker1.Items2132\"),\n            resources.GetString(\"backColorPicker1.Items2133\"),\n            resources.GetString(\"backColorPicker1.Items2134\"),\n            resources.GetString(\"backColorPicker1.Items2135\"),\n            resources.GetString(\"backColorPicker1.Items2136\"),\n            resources.GetString(\"backColorPicker1.Items2137\"),\n            resources.GetString(\"backColorPicker1.Items2138\"),\n            resources.GetString(\"backColorPicker1.Items2139\"),\n            resources.GetString(\"backColorPicker1.Items2140\"),\n            resources.GetString(\"backColorPicker1.Items2141\"),\n            resources.GetString(\"backColorPicker1.Items2142\"),\n            resources.GetString(\"backColorPicker1.Items2143\"),\n            resources.GetString(\"backColorPicker1.Items2144\"),\n            resources.GetString(\"backColorPicker1.Items2145\"),\n            resources.GetString(\"backColorPicker1.Items2146\"),\n            resources.GetString(\"backColorPicker1.Items2147\"),\n            resources.GetString(\"backColorPicker1.Items2148\"),\n            resources.GetString(\"backColorPicker1.Items2149\"),\n            resources.GetString(\"backColorPicker1.Items2150\"),\n            resources.GetString(\"backColorPicker1.Items2151\"),\n            resources.GetString(\"backColorPicker1.Items2152\"),\n            resources.GetString(\"backColorPicker1.Items2153\"),\n            resources.GetString(\"backColorPicker1.Items2154\"),\n            resources.GetString(\"backColorPicker1.Items2155\"),\n            resources.GetString(\"backColorPicker1.Items2156\"),\n            resources.GetString(\"backColorPicker1.Items2157\"),\n            resources.GetString(\"backColorPicker1.Items2158\"),\n            resources.GetString(\"backColorPicker1.Items2159\"),\n            resources.GetString(\"backColorPicker1.Items2160\"),\n            resources.GetString(\"backColorPicker1.Items2161\"),\n            resources.GetString(\"backColorPicker1.Items2162\"),\n            resources.GetString(\"backColorPicker1.Items2163\"),\n            resources.GetString(\"backColorPicker1.Items2164\"),\n            resources.GetString(\"backColorPicker1.Items2165\"),\n            resources.GetString(\"backColorPicker1.Items2166\"),\n            resources.GetString(\"backColorPicker1.Items2167\"),\n            resources.GetString(\"backColorPicker1.Items2168\"),\n            resources.GetString(\"backColorPicker1.Items2169\"),\n            resources.GetString(\"backColorPicker1.Items2170\"),\n            resources.GetString(\"backColorPicker1.Items2171\"),\n            resources.GetString(\"backColorPicker1.Items2172\"),\n            resources.GetString(\"backColorPicker1.Items2173\"),\n            resources.GetString(\"backColorPicker1.Items2174\"),\n            resources.GetString(\"backColorPicker1.Items2175\"),\n            resources.GetString(\"backColorPicker1.Items2176\"),\n            resources.GetString(\"backColorPicker1.Items2177\"),\n            resources.GetString(\"backColorPicker1.Items2178\"),\n            resources.GetString(\"backColorPicker1.Items2179\"),\n            resources.GetString(\"backColorPicker1.Items2180\"),\n            resources.GetString(\"backColorPicker1.Items2181\"),\n            resources.GetString(\"backColorPicker1.Items2182\"),\n            resources.GetString(\"backColorPicker1.Items2183\"),\n            resources.GetString(\"backColorPicker1.Items2184\"),\n            resources.GetString(\"backColorPicker1.Items2185\"),\n            resources.GetString(\"backColorPicker1.Items2186\"),\n            resources.GetString(\"backColorPicker1.Items2187\"),\n            resources.GetString(\"backColorPicker1.Items2188\"),\n            resources.GetString(\"backColorPicker1.Items2189\"),\n            resources.GetString(\"backColorPicker1.Items2190\"),\n            resources.GetString(\"backColorPicker1.Items2191\"),\n            resources.GetString(\"backColorPicker1.Items2192\"),\n            resources.GetString(\"backColorPicker1.Items2193\"),\n            resources.GetString(\"backColorPicker1.Items2194\"),\n            resources.GetString(\"backColorPicker1.Items2195\"),\n            resources.GetString(\"backColorPicker1.Items2196\"),\n            resources.GetString(\"backColorPicker1.Items2197\"),\n            resources.GetString(\"backColorPicker1.Items2198\"),\n            resources.GetString(\"backColorPicker1.Items2199\"),\n            resources.GetString(\"backColorPicker1.Items2200\"),\n            resources.GetString(\"backColorPicker1.Items2201\"),\n            resources.GetString(\"backColorPicker1.Items2202\"),\n            resources.GetString(\"backColorPicker1.Items2203\"),\n            resources.GetString(\"backColorPicker1.Items2204\"),\n            resources.GetString(\"backColorPicker1.Items2205\"),\n            resources.GetString(\"backColorPicker1.Items2206\"),\n            resources.GetString(\"backColorPicker1.Items2207\"),\n            resources.GetString(\"backColorPicker1.Items2208\"),\n            resources.GetString(\"backColorPicker1.Items2209\"),\n            resources.GetString(\"backColorPicker1.Items2210\"),\n            resources.GetString(\"backColorPicker1.Items2211\"),\n            resources.GetString(\"backColorPicker1.Items2212\"),\n            resources.GetString(\"backColorPicker1.Items2213\"),\n            resources.GetString(\"backColorPicker1.Items2214\"),\n            resources.GetString(\"backColorPicker1.Items2215\"),\n            resources.GetString(\"backColorPicker1.Items2216\"),\n            resources.GetString(\"backColorPicker1.Items2217\"),\n            resources.GetString(\"backColorPicker1.Items2218\"),\n            resources.GetString(\"backColorPicker1.Items2219\"),\n            resources.GetString(\"backColorPicker1.Items2220\"),\n            resources.GetString(\"backColorPicker1.Items2221\"),\n            resources.GetString(\"backColorPicker1.Items2222\"),\n            resources.GetString(\"backColorPicker1.Items2223\"),\n            resources.GetString(\"backColorPicker1.Items2224\"),\n            resources.GetString(\"backColorPicker1.Items2225\"),\n            resources.GetString(\"backColorPicker1.Items2226\"),\n            resources.GetString(\"backColorPicker1.Items2227\"),\n            resources.GetString(\"backColorPicker1.Items2228\"),\n            resources.GetString(\"backColorPicker1.Items2229\"),\n            resources.GetString(\"backColorPicker1.Items2230\"),\n            resources.GetString(\"backColorPicker1.Items2231\"),\n            resources.GetString(\"backColorPicker1.Items2232\"),\n            resources.GetString(\"backColorPicker1.Items2233\"),\n            resources.GetString(\"backColorPicker1.Items2234\"),\n            resources.GetString(\"backColorPicker1.Items2235\"),\n            resources.GetString(\"backColorPicker1.Items2236\"),\n            resources.GetString(\"backColorPicker1.Items2237\"),\n            resources.GetString(\"backColorPicker1.Items2238\"),\n            resources.GetString(\"backColorPicker1.Items2239\"),\n            resources.GetString(\"backColorPicker1.Items2240\"),\n            resources.GetString(\"backColorPicker1.Items2241\"),\n            resources.GetString(\"backColorPicker1.Items2242\"),\n            resources.GetString(\"backColorPicker1.Items2243\"),\n            resources.GetString(\"backColorPicker1.Items2244\"),\n            resources.GetString(\"backColorPicker1.Items2245\"),\n            resources.GetString(\"backColorPicker1.Items2246\"),\n            resources.GetString(\"backColorPicker1.Items2247\"),\n            resources.GetString(\"backColorPicker1.Items2248\"),\n            resources.GetString(\"backColorPicker1.Items2249\"),\n            resources.GetString(\"backColorPicker1.Items2250\"),\n            resources.GetString(\"backColorPicker1.Items2251\"),\n            resources.GetString(\"backColorPicker1.Items2252\"),\n            resources.GetString(\"backColorPicker1.Items2253\"),\n            resources.GetString(\"backColorPicker1.Items2254\"),\n            resources.GetString(\"backColorPicker1.Items2255\"),\n            resources.GetString(\"backColorPicker1.Items2256\"),\n            resources.GetString(\"backColorPicker1.Items2257\"),\n            resources.GetString(\"backColorPicker1.Items2258\"),\n            resources.GetString(\"backColorPicker1.Items2259\"),\n            resources.GetString(\"backColorPicker1.Items2260\"),\n            resources.GetString(\"backColorPicker1.Items2261\"),\n            resources.GetString(\"backColorPicker1.Items2262\"),\n            resources.GetString(\"backColorPicker1.Items2263\"),\n            resources.GetString(\"backColorPicker1.Items2264\"),\n            resources.GetString(\"backColorPicker1.Items2265\"),\n            resources.GetString(\"backColorPicker1.Items2266\"),\n            resources.GetString(\"backColorPicker1.Items2267\"),\n            resources.GetString(\"backColorPicker1.Items2268\"),\n            resources.GetString(\"backColorPicker1.Items2269\"),\n            resources.GetString(\"backColorPicker1.Items2270\"),\n            resources.GetString(\"backColorPicker1.Items2271\"),\n            resources.GetString(\"backColorPicker1.Items2272\"),\n            resources.GetString(\"backColorPicker1.Items2273\"),\n            resources.GetString(\"backColorPicker1.Items2274\"),\n            resources.GetString(\"backColorPicker1.Items2275\"),\n            resources.GetString(\"backColorPicker1.Items2276\"),\n            resources.GetString(\"backColorPicker1.Items2277\"),\n            resources.GetString(\"backColorPicker1.Items2278\"),\n            resources.GetString(\"backColorPicker1.Items2279\"),\n            resources.GetString(\"backColorPicker1.Items2280\"),\n            resources.GetString(\"backColorPicker1.Items2281\"),\n            resources.GetString(\"backColorPicker1.Items2282\"),\n            resources.GetString(\"backColorPicker1.Items2283\"),\n            resources.GetString(\"backColorPicker1.Items2284\"),\n            resources.GetString(\"backColorPicker1.Items2285\"),\n            resources.GetString(\"backColorPicker1.Items2286\"),\n            resources.GetString(\"backColorPicker1.Items2287\"),\n            resources.GetString(\"backColorPicker1.Items2288\"),\n            resources.GetString(\"backColorPicker1.Items2289\"),\n            resources.GetString(\"backColorPicker1.Items2290\"),\n            resources.GetString(\"backColorPicker1.Items2291\"),\n            resources.GetString(\"backColorPicker1.Items2292\"),\n            resources.GetString(\"backColorPicker1.Items2293\"),\n            resources.GetString(\"backColorPicker1.Items2294\"),\n            resources.GetString(\"backColorPicker1.Items2295\"),\n            resources.GetString(\"backColorPicker1.Items2296\"),\n            resources.GetString(\"backColorPicker1.Items2297\"),\n            resources.GetString(\"backColorPicker1.Items2298\"),\n            resources.GetString(\"backColorPicker1.Items2299\"),\n            resources.GetString(\"backColorPicker1.Items2300\"),\n            resources.GetString(\"backColorPicker1.Items2301\"),\n            resources.GetString(\"backColorPicker1.Items2302\"),\n            resources.GetString(\"backColorPicker1.Items2303\"),\n            resources.GetString(\"backColorPicker1.Items2304\"),\n            resources.GetString(\"backColorPicker1.Items2305\"),\n            resources.GetString(\"backColorPicker1.Items2306\"),\n            resources.GetString(\"backColorPicker1.Items2307\"),\n            resources.GetString(\"backColorPicker1.Items2308\"),\n            resources.GetString(\"backColorPicker1.Items2309\"),\n            resources.GetString(\"backColorPicker1.Items2310\"),\n            resources.GetString(\"backColorPicker1.Items2311\"),\n            resources.GetString(\"backColorPicker1.Items2312\"),\n            resources.GetString(\"backColorPicker1.Items2313\"),\n            resources.GetString(\"backColorPicker1.Items2314\"),\n            resources.GetString(\"backColorPicker1.Items2315\"),\n            resources.GetString(\"backColorPicker1.Items2316\"),\n            resources.GetString(\"backColorPicker1.Items2317\"),\n            resources.GetString(\"backColorPicker1.Items2318\"),\n            resources.GetString(\"backColorPicker1.Items2319\"),\n            resources.GetString(\"backColorPicker1.Items2320\"),\n            resources.GetString(\"backColorPicker1.Items2321\"),\n            resources.GetString(\"backColorPicker1.Items2322\"),\n            resources.GetString(\"backColorPicker1.Items2323\"),\n            resources.GetString(\"backColorPicker1.Items2324\"),\n            resources.GetString(\"backColorPicker1.Items2325\"),\n            resources.GetString(\"backColorPicker1.Items2326\"),\n            resources.GetString(\"backColorPicker1.Items2327\"),\n            resources.GetString(\"backColorPicker1.Items2328\"),\n            resources.GetString(\"backColorPicker1.Items2329\"),\n            resources.GetString(\"backColorPicker1.Items2330\"),\n            resources.GetString(\"backColorPicker1.Items2331\"),\n            resources.GetString(\"backColorPicker1.Items2332\"),\n            resources.GetString(\"backColorPicker1.Items2333\"),\n            resources.GetString(\"backColorPicker1.Items2334\"),\n            resources.GetString(\"backColorPicker1.Items2335\"),\n            resources.GetString(\"backColorPicker1.Items2336\"),\n            resources.GetString(\"backColorPicker1.Items2337\"),\n            resources.GetString(\"backColorPicker1.Items2338\"),\n            resources.GetString(\"backColorPicker1.Items2339\"),\n            resources.GetString(\"backColorPicker1.Items2340\"),\n            resources.GetString(\"backColorPicker1.Items2341\"),\n            resources.GetString(\"backColorPicker1.Items2342\"),\n            resources.GetString(\"backColorPicker1.Items2343\"),\n            resources.GetString(\"backColorPicker1.Items2344\"),\n            resources.GetString(\"backColorPicker1.Items2345\"),\n            resources.GetString(\"backColorPicker1.Items2346\"),\n            resources.GetString(\"backColorPicker1.Items2347\"),\n            resources.GetString(\"backColorPicker1.Items2348\"),\n            resources.GetString(\"backColorPicker1.Items2349\"),\n            resources.GetString(\"backColorPicker1.Items2350\"),\n            resources.GetString(\"backColorPicker1.Items2351\"),\n            resources.GetString(\"backColorPicker1.Items2352\"),\n            resources.GetString(\"backColorPicker1.Items2353\"),\n            resources.GetString(\"backColorPicker1.Items2354\"),\n            resources.GetString(\"backColorPicker1.Items2355\"),\n            resources.GetString(\"backColorPicker1.Items2356\"),\n            resources.GetString(\"backColorPicker1.Items2357\"),\n            resources.GetString(\"backColorPicker1.Items2358\"),\n            resources.GetString(\"backColorPicker1.Items2359\"),\n            resources.GetString(\"backColorPicker1.Items2360\"),\n            resources.GetString(\"backColorPicker1.Items2361\"),\n            resources.GetString(\"backColorPicker1.Items2362\"),\n            resources.GetString(\"backColorPicker1.Items2363\"),\n            resources.GetString(\"backColorPicker1.Items2364\"),\n            resources.GetString(\"backColorPicker1.Items2365\"),\n            resources.GetString(\"backColorPicker1.Items2366\"),\n            resources.GetString(\"backColorPicker1.Items2367\"),\n            resources.GetString(\"backColorPicker1.Items2368\"),\n            resources.GetString(\"backColorPicker1.Items2369\"),\n            resources.GetString(\"backColorPicker1.Items2370\"),\n            resources.GetString(\"backColorPicker1.Items2371\"),\n            resources.GetString(\"backColorPicker1.Items2372\"),\n            resources.GetString(\"backColorPicker1.Items2373\"),\n            resources.GetString(\"backColorPicker1.Items2374\"),\n            resources.GetString(\"backColorPicker1.Items2375\"),\n            resources.GetString(\"backColorPicker1.Items2376\"),\n            resources.GetString(\"backColorPicker1.Items2377\"),\n            resources.GetString(\"backColorPicker1.Items2378\"),\n            resources.GetString(\"backColorPicker1.Items2379\"),\n            resources.GetString(\"backColorPicker1.Items2380\"),\n            resources.GetString(\"backColorPicker1.Items2381\"),\n            resources.GetString(\"backColorPicker1.Items2382\"),\n            resources.GetString(\"backColorPicker1.Items2383\"),\n            resources.GetString(\"backColorPicker1.Items2384\"),\n            resources.GetString(\"backColorPicker1.Items2385\"),\n            resources.GetString(\"backColorPicker1.Items2386\"),\n            resources.GetString(\"backColorPicker1.Items2387\"),\n            resources.GetString(\"backColorPicker1.Items2388\"),\n            resources.GetString(\"backColorPicker1.Items2389\"),\n            resources.GetString(\"backColorPicker1.Items2390\"),\n            resources.GetString(\"backColorPicker1.Items2391\"),\n            resources.GetString(\"backColorPicker1.Items2392\"),\n            resources.GetString(\"backColorPicker1.Items2393\"),\n            resources.GetString(\"backColorPicker1.Items2394\"),\n            resources.GetString(\"backColorPicker1.Items2395\"),\n            resources.GetString(\"backColorPicker1.Items2396\"),\n            resources.GetString(\"backColorPicker1.Items2397\"),\n            resources.GetString(\"backColorPicker1.Items2398\"),\n            resources.GetString(\"backColorPicker1.Items2399\"),\n            resources.GetString(\"backColorPicker1.Items2400\"),\n            resources.GetString(\"backColorPicker1.Items2401\"),\n            resources.GetString(\"backColorPicker1.Items2402\"),\n            resources.GetString(\"backColorPicker1.Items2403\"),\n            resources.GetString(\"backColorPicker1.Items2404\"),\n            resources.GetString(\"backColorPicker1.Items2405\"),\n            resources.GetString(\"backColorPicker1.Items2406\"),\n            resources.GetString(\"backColorPicker1.Items2407\"),\n            resources.GetString(\"backColorPicker1.Items2408\"),\n            resources.GetString(\"backColorPicker1.Items2409\"),\n            resources.GetString(\"backColorPicker1.Items2410\"),\n            resources.GetString(\"backColorPicker1.Items2411\"),\n            resources.GetString(\"backColorPicker1.Items2412\"),\n            resources.GetString(\"backColorPicker1.Items2413\"),\n            resources.GetString(\"backColorPicker1.Items2414\"),\n            resources.GetString(\"backColorPicker1.Items2415\"),\n            resources.GetString(\"backColorPicker1.Items2416\"),\n            resources.GetString(\"backColorPicker1.Items2417\"),\n            resources.GetString(\"backColorPicker1.Items2418\"),\n            resources.GetString(\"backColorPicker1.Items2419\"),\n            resources.GetString(\"backColorPicker1.Items2420\"),\n            resources.GetString(\"backColorPicker1.Items2421\"),\n            resources.GetString(\"backColorPicker1.Items2422\"),\n            resources.GetString(\"backColorPicker1.Items2423\"),\n            resources.GetString(\"backColorPicker1.Items2424\"),\n            resources.GetString(\"backColorPicker1.Items2425\"),\n            resources.GetString(\"backColorPicker1.Items2426\"),\n            resources.GetString(\"backColorPicker1.Items2427\"),\n            resources.GetString(\"backColorPicker1.Items2428\"),\n            resources.GetString(\"backColorPicker1.Items2429\"),\n            resources.GetString(\"backColorPicker1.Items2430\"),\n            resources.GetString(\"backColorPicker1.Items2431\"),\n            resources.GetString(\"backColorPicker1.Items2432\"),\n            resources.GetString(\"backColorPicker1.Items2433\"),\n            resources.GetString(\"backColorPicker1.Items2434\"),\n            resources.GetString(\"backColorPicker1.Items2435\"),\n            resources.GetString(\"backColorPicker1.Items2436\"),\n            resources.GetString(\"backColorPicker1.Items2437\"),\n            resources.GetString(\"backColorPicker1.Items2438\"),\n            resources.GetString(\"backColorPicker1.Items2439\"),\n            resources.GetString(\"backColorPicker1.Items2440\"),\n            resources.GetString(\"backColorPicker1.Items2441\"),\n            resources.GetString(\"backColorPicker1.Items2442\"),\n            resources.GetString(\"backColorPicker1.Items2443\"),\n            resources.GetString(\"backColorPicker1.Items2444\"),\n            resources.GetString(\"backColorPicker1.Items2445\"),\n            resources.GetString(\"backColorPicker1.Items2446\"),\n            resources.GetString(\"backColorPicker1.Items2447\"),\n            resources.GetString(\"backColorPicker1.Items2448\"),\n            resources.GetString(\"backColorPicker1.Items2449\"),\n            resources.GetString(\"backColorPicker1.Items2450\"),\n            resources.GetString(\"backColorPicker1.Items2451\"),\n            resources.GetString(\"backColorPicker1.Items2452\"),\n            resources.GetString(\"backColorPicker1.Items2453\"),\n            resources.GetString(\"backColorPicker1.Items2454\"),\n            resources.GetString(\"backColorPicker1.Items2455\"),\n            resources.GetString(\"backColorPicker1.Items2456\"),\n            resources.GetString(\"backColorPicker1.Items2457\"),\n            resources.GetString(\"backColorPicker1.Items2458\"),\n            resources.GetString(\"backColorPicker1.Items2459\"),\n            resources.GetString(\"backColorPicker1.Items2460\"),\n            resources.GetString(\"backColorPicker1.Items2461\"),\n            resources.GetString(\"backColorPicker1.Items2462\"),\n            resources.GetString(\"backColorPicker1.Items2463\"),\n            resources.GetString(\"backColorPicker1.Items2464\"),\n            resources.GetString(\"backColorPicker1.Items2465\"),\n            resources.GetString(\"backColorPicker1.Items2466\"),\n            resources.GetString(\"backColorPicker1.Items2467\"),\n            resources.GetString(\"backColorPicker1.Items2468\"),\n            resources.GetString(\"backColorPicker1.Items2469\"),\n            resources.GetString(\"backColorPicker1.Items2470\"),\n            resources.GetString(\"backColorPicker1.Items2471\"),\n            resources.GetString(\"backColorPicker1.Items2472\"),\n            resources.GetString(\"backColorPicker1.Items2473\"),\n            resources.GetString(\"backColorPicker1.Items2474\"),\n            resources.GetString(\"backColorPicker1.Items2475\"),\n            resources.GetString(\"backColorPicker1.Items2476\"),\n            resources.GetString(\"backColorPicker1.Items2477\"),\n            resources.GetString(\"backColorPicker1.Items2478\"),\n            resources.GetString(\"backColorPicker1.Items2479\"),\n            resources.GetString(\"backColorPicker1.Items2480\"),\n            resources.GetString(\"backColorPicker1.Items2481\"),\n            resources.GetString(\"backColorPicker1.Items2482\"),\n            resources.GetString(\"backColorPicker1.Items2483\"),\n            resources.GetString(\"backColorPicker1.Items2484\"),\n            resources.GetString(\"backColorPicker1.Items2485\"),\n            resources.GetString(\"backColorPicker1.Items2486\"),\n            resources.GetString(\"backColorPicker1.Items2487\"),\n            resources.GetString(\"backColorPicker1.Items2488\"),\n            resources.GetString(\"backColorPicker1.Items2489\"),\n            resources.GetString(\"backColorPicker1.Items2490\"),\n            resources.GetString(\"backColorPicker1.Items2491\"),\n            resources.GetString(\"backColorPicker1.Items2492\"),\n            resources.GetString(\"backColorPicker1.Items2493\"),\n            resources.GetString(\"backColorPicker1.Items2494\"),\n            resources.GetString(\"backColorPicker1.Items2495\"),\n            resources.GetString(\"backColorPicker1.Items2496\"),\n            resources.GetString(\"backColorPicker1.Items2497\"),\n            resources.GetString(\"backColorPicker1.Items2498\"),\n            resources.GetString(\"backColorPicker1.Items2499\"),\n            resources.GetString(\"backColorPicker1.Items2500\"),\n            resources.GetString(\"backColorPicker1.Items2501\"),\n            resources.GetString(\"backColorPicker1.Items2502\"),\n            resources.GetString(\"backColorPicker1.Items2503\"),\n            resources.GetString(\"backColorPicker1.Items2504\"),\n            resources.GetString(\"backColorPicker1.Items2505\"),\n            resources.GetString(\"backColorPicker1.Items2506\"),\n            resources.GetString(\"backColorPicker1.Items2507\"),\n            resources.GetString(\"backColorPicker1.Items2508\"),\n            resources.GetString(\"backColorPicker1.Items2509\"),\n            resources.GetString(\"backColorPicker1.Items2510\"),\n            resources.GetString(\"backColorPicker1.Items2511\"),\n            resources.GetString(\"backColorPicker1.Items2512\"),\n            resources.GetString(\"backColorPicker1.Items2513\"),\n            resources.GetString(\"backColorPicker1.Items2514\"),\n            resources.GetString(\"backColorPicker1.Items2515\"),\n            resources.GetString(\"backColorPicker1.Items2516\"),\n            resources.GetString(\"backColorPicker1.Items2517\"),\n            resources.GetString(\"backColorPicker1.Items2518\"),\n            resources.GetString(\"backColorPicker1.Items2519\")});\n\t\t\tthis.backColorPicker1.Name = \"backColorPicker1\";\n\t\t\tthis.backColorPicker1.Tag = \"Back Color\";\n\t\t\tthis.backColorPicker1.SelectedValueChanged += new System.EventHandler(this.ctlBackColor_Change);\n\t\t\tthis.backColorPicker1.Validated += new System.EventHandler(this.ctlBackColor_Change);\n\t\t\t// \n\t\t\t// statusStrip1\n\t\t\t// \n\t\t\tthis.statusStrip1.ImageScalingSize = new System.Drawing.Size(20, 20);\n\t\t\tthis.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.statusSelected,\n            this.toolStripStatusLabel2,\n            this.statusPosition});\n\t\t\tresources.ApplyResources(this.statusStrip1, \"statusStrip1\");\n\t\t\tthis.statusStrip1.Name = \"statusStrip1\";\n\t\t\t// \n\t\t\t// statusSelected\n\t\t\t// \n\t\t\tthis.statusSelected.Name = \"statusSelected\";\n\t\t\tresources.ApplyResources(this.statusSelected, \"statusSelected\");\n\t\t\t// \n\t\t\t// toolStripStatusLabel2\n\t\t\t// \n\t\t\tthis.toolStripStatusLabel2.ForeColor = System.Drawing.Color.Gray;\n\t\t\tthis.toolStripStatusLabel2.Name = \"toolStripStatusLabel2\";\n\t\t\tresources.ApplyResources(this.toolStripStatusLabel2, \"toolStripStatusLabel2\");\n\t\t\t// \n\t\t\t// statusPosition\n\t\t\t// \n\t\t\tthis.statusPosition.Name = \"statusPosition\";\n\t\t\tresources.ApplyResources(this.statusPosition, \"statusPosition\");\n\t\t\t// \n\t\t\t// mainSP\n\t\t\t// \n\t\t\tresources.ApplyResources(this.mainSP, \"mainSP\");\n\t\t\tthis.mainSP.Name = \"mainSP\";\n\t\t\tthis.mainSP.TabStop = false;\n\t\t\t// \n\t\t\t// ContextMenuTB\n\t\t\t// \n\t\t\tthis.ContextMenuTB.ImageScalingSize = new System.Drawing.Size(20, 20);\n\t\t\tthis.ContextMenuTB.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.MenuTBClose,\n            this.MenuTBSave,\n            this.MenuTBCloseAllButThis});\n\t\t\tthis.ContextMenuTB.Name = \"ContextMenuTB\";\n\t\t\tresources.ApplyResources(this.ContextMenuTB, \"ContextMenuTB\");\n\t\t\t// \n\t\t\t// MenuTBClose\n\t\t\t// \n\t\t\tthis.MenuTBClose.Name = \"MenuTBClose\";\n\t\t\tresources.ApplyResources(this.MenuTBClose, \"MenuTBClose\");\n\t\t\tthis.MenuTBClose.Click += new System.EventHandler(this.menuFileClose_Click);\n\t\t\t// \n\t\t\t// MenuTBSave\n\t\t\t// \n\t\t\tthis.MenuTBSave.Name = \"MenuTBSave\";\n\t\t\tresources.ApplyResources(this.MenuTBSave, \"MenuTBSave\");\n\t\t\tthis.MenuTBSave.Click += new System.EventHandler(this.menuFileSave_Click);\n\t\t\t// \n\t\t\t// MenuTBCloseAllButThis\n\t\t\t// \n\t\t\tthis.MenuTBCloseAllButThis.Name = \"MenuTBCloseAllButThis\";\n\t\t\tresources.ApplyResources(this.MenuTBCloseAllButThis, \"MenuTBCloseAllButThis\");\n\t\t\tthis.MenuTBCloseAllButThis.Click += new System.EventHandler(this.menuWndCloseAllButCurrent_Click);\n\t\t\t// \n\t\t\t// mainProperties\n\t\t\t// \n\t\t\tresources.ApplyResources(this.mainProperties, \"mainProperties\");\n\t\t\tthis.mainProperties.Name = \"mainProperties\";\n\t\t\t// \n\t\t\t// RdlDesigner\n\t\t\t// \n\t\t\tthis.AllowDrop = true;\n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.mainSP);\n\t\t\tthis.Controls.Add(this.mainProperties);\n\t\t\tthis.Controls.Add(this.statusStrip1);\n\t\t\tthis.Controls.Add(this.panel1);\n\t\t\tthis.Controls.Add(this.toolStrip1);\n\t\t\tthis.Controls.Add(this.mainTB);\n\t\t\tthis.Controls.Add(this.menuStrip1);\n\t\t\tthis.MainMenuStrip = this.menuStrip1;\n\t\t\tthis.Name = \"RdlDesigner\";\n\t\t\tthis.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;\n\t\t\tthis.WindowState = System.Windows.Forms.FormWindowState.Maximized;\n\t\t\tthis.Load += new System.EventHandler(this.RdlDesigner_Load);\n\t\t\tthis.DragDrop += new System.Windows.Forms.DragEventHandler(this.RdlDesigner_DragDrop);\n\t\t\tthis.DragEnter += new System.Windows.Forms.DragEventHandler(this.RdlDesigner_DragEnter);\n\t\t\tthis.menuStrip1.ResumeLayout(false);\n\t\t\tthis.menuStrip1.PerformLayout();\n\t\t\tthis.mainTB.ResumeLayout(false);\n\t\t\tthis.mainTB.PerformLayout();\n\t\t\tthis.toolStrip1.ResumeLayout(false);\n\t\t\tthis.toolStrip1.PerformLayout();\n\t\t\tthis.panel1.ResumeLayout(false);\n\t\t\tthis.panel1.PerformLayout();\n\t\t\tthis.statusStrip1.ResumeLayout(false);\n\t\t\tthis.statusStrip1.PerformLayout();\n\t\t\tthis.ContextMenuTB.ResumeLayout(false);\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif (components != null) \n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n        private MenuStrip menuStrip1;\n        private ToolStripMenuItem fileToolStripMenuItem;\n        private ToolStripMenuItem editToolStripMenuItem;\n        private ToolStripMenuItem viewToolStripMenuItem;\n        private ToolStripMenuItem dataToolStripMenuItem;\n        private ToolStripMenuItem formatToolStripMenuItem;\n        private ToolStripMenuItem toolsToolStripMenuItem;\n        private ToolStripMenuItem windowToolStripMenuItem;\n        private ToolStripMenuItem helpToolStripMenuItem;\n        private ToolStripMenuItem newReportToolStripMenuItem;\n        private ToolStripMenuItem openToolStripMenuItem;\n        private ToolStripMenuItem closeToolStripMenuItem;\n        private ToolStripSeparator toolStripSeparator1;\n        private ToolStripMenuItem saveToolStripMenuItem;\n        private ToolStripMenuItem saveAsToolStripMenuItem;\n        private ToolStripMenuItem printToolStripMenuItem;\n        private ToolStripMenuItem exportToolStripMenuItem;\n        private ToolStripMenuItem pDFToolStripMenuItem;\n        private ToolStripMenuItem tIFFToolStripMenuItem;\n        private ToolStripMenuItem cSVToolStripMenuItem;\n        private ToolStripMenuItem excelToolStripMenuItem;\n        private ToolStripMenuItem rTFDOCToolStripMenuItem;\n        private ToolStripMenuItem xMLToolStripMenuItem;\n        private ToolStripMenuItem webPageHTMLToolStripMenuItem;\n        private ToolStripMenuItem webArchiveSingleFileMHTToolStripMenuItem;\n        private ToolStripSeparator toolStripSeparator2;\n        private ToolStripMenuItem recentFilesToolStripMenuItem;\n        private ToolStripSeparator toolStripSeparator3;\n        private ToolStripMenuItem exitToolStripMenuItem;\n        private ToolStripMenuItem undoToolStripMenuItem;\n        private ToolStripMenuItem redoToolStripMenuItem;\n        private ToolStripSeparator toolStripSeparator4;\n        private ToolStripMenuItem cutToolStripMenuItem;\n        private ToolStripMenuItem copyToolStripMenuItem;\n        private ToolStripMenuItem pasteToolStripMenuItem;\n        private ToolStripMenuItem deleteToolStripMenuItem;\n        private ToolStripSeparator toolStripSeparator5;\n        private ToolStripMenuItem selectAllToolStripMenuItem;\n        private ToolStripSeparator toolStripSeparator6;\n        private ToolStripMenuItem findToolStripMenuItem;\n        private ToolStripMenuItem findNextToolStripMenuItem;\n        private ToolStripMenuItem replaceToolStripMenuItem;\n        private ToolStripMenuItem goToToolStripMenuItem;\n        private ToolStripSeparator toolStripSeparator7;\n        private ToolStripMenuItem formatXMLToolStripMenuItem;\n        private ToolStripMenuItem designerToolStripMenuItem;\n        private ToolStripMenuItem rDLTextToolStripMenuItem;\n        private ToolStripMenuItem previewToolStripMenuItem;\n        private ToolStripMenuItem showReportInBrowserToolStripMenuItem;\n        private ToolStripMenuItem propertiesWindowsToolStripMenuItem;\n        private ToolStripMenuItem dataSetsToolStripMenuItem;\n        private ToolStripMenuItem embeddedImagesToolStripMenuItem;\n        private ToolStripMenuItem createSharedDataSourceToolStripMenuItem;\n        private ToolStripMenuItem dataSourcesToolStripMenuItem1;\n        private ToolStripSeparator toolStripSeparator8;\n        private ToolStripSeparator toolStripSeparator9;\n        private ToolStripMenuItem alignToolStripMenuItem;\n        private ToolStripMenuItem leftsToolStripMenuItem;\n        private ToolStripMenuItem centersToolStripMenuItem;\n        private ToolStripMenuItem rightsToolStripMenuItem;\n        private ToolStripMenuItem topsToolStripMenuItem;\n        private ToolStripMenuItem middlesToolStripMenuItem;\n        private ToolStripMenuItem bottomsToolStripMenuItem;\n        private ToolStripSeparator toolStripSeparator10;\n        private ToolStripMenuItem sizeToolStripMenuItem;\n        private ToolStripMenuItem widthToolStripMenuItem;\n        private ToolStripMenuItem heightToolStripMenuItem;\n        private ToolStripMenuItem bothToolStripMenuItem;\n        private ToolStripMenuItem horizontalSpacingToolStripMenuItem;\n        private ToolStripMenuItem makeEqualToolStripMenuItem;\n        private ToolStripMenuItem increaseToolStripMenuItem;\n        private ToolStripMenuItem decreaseToolStripMenuItem;\n        private ToolStripMenuItem zeroToolStripMenuItem;\n        private ToolStripMenuItem verticalSpacingToolStripMenuItem;\n        private ToolStripMenuItem makeEqualToolStripMenuItem1;\n        private ToolStripMenuItem increaseToolStripMenuItem1;\n        private ToolStripMenuItem decreaseToolStripMenuItem1;\n        private ToolStripMenuItem zeroToolStripMenuItem1;\n        private ToolStripSeparator toolStripSeparator11;\n        private ToolStripMenuItem paddingLeftToolStripMenuItem;\n        private ToolStripMenuItem increaseToolStripMenuItem2;\n        private ToolStripMenuItem decreaseToolStripMenuItem2;\n        private ToolStripMenuItem zeroToolStripMenuItem2;\n        private ToolStripMenuItem paddingRightToolStripMenuItem;\n        private ToolStripMenuItem increaseToolStripMenuItem3;\n        private ToolStripMenuItem decreaseToolStripMenuItem3;\n        private ToolStripMenuItem zeroToolStripMenuItem3;\n        private ToolStripMenuItem paddintTopToolStripMenuItem;\n        private ToolStripMenuItem increaseToolStripMenuItem4;\n        private ToolStripMenuItem decreaseToolStripMenuItem4;\n        private ToolStripMenuItem zeroToolStripMenuItem4;\n        private ToolStripMenuItem paddingBottomToolStripMenuItem;\n        private ToolStripMenuItem increaseToolStripMenuItem5;\n        private ToolStripMenuItem decreaseToolStripMenuItem5;\n        private ToolStripMenuItem zeroToolStripMenuItem5;\n        private ToolStripMenuItem validateRDLToolStripMenuItem;\n        private ToolStripMenuItem startDesktopServerToolStripMenuItem;\n        private ToolStripMenuItem optionsToolStripMenuItem;\n        private ToolStripSeparator toolStripSeparator12;\n        private ToolStripSeparator toolStripSeparator13;\n        private ToolStripMenuItem cascadeToolStripMenuItem;\n        private ToolStripMenuItem tileToolStripMenuItem;\n        private ToolStripMenuItem horizontalToolStripMenuItem;\n        private ToolStripMenuItem verticallyToolStripMenuItem;\n        private ToolStripMenuItem closeAllToolStripMenuItem;\n        private ToolStripMenuItem helpToolStripMenuItem1;\n        private ToolStripMenuItem supportToolStripMenuItem;\n        private ToolStripMenuItem aboutToolStripMenuItem;\n        private ToolStrip mainTB;\n        private ToolStripButton newToolStripButton1;\n        private ToolStrip toolStrip1;\n        private ToolStripButton openToolStripButton1;\n        private ToolStripButton saveToolStripButton1;\n        private ToolStripButton cutToolStripButton1;\n        private ToolStripButton copyToolStripButton1;\n        private ToolStripButton pasteToolStripButton1;\n        private ToolStripButton undoToolStripButton1;\n        private ToolStripButton textboxToolStripButton1;\n        private ToolStripButton chartToolStripButton1;\n        private ToolStripButton tableToolStripButton1;\n        private ToolStripButton listToolStripButton1;\n        private ToolStripButton imageToolStripButton1;\n        private ToolStripButton matrixToolStripButton1;\n        private ToolStripButton subreportToolStripButton1;\n        private ToolStripButton rectangleToolStripButton1;\n        private ToolStripButton lineToolStripButton1;\n        private ToolStripLabel fxToolStripLabel1;\n        private ToolStripTextBox ctlEditTextbox;\n        private ToolStripButton boldToolStripButton1;\n        private ToolStripButton italiacToolStripButton1;\n        private ToolStripButton underlineToolStripButton2;\n        private ToolStripButton leftAlignToolStripButton2;\n        private ToolStripButton centerAlignToolStripButton2;\n        private ToolStripButton rightAlignToolStripButton3;\n        private ToolStripComboBox fontToolStripComboBox1;\n        private ToolStripComboBox fontSizeToolStripComboBox1;\n        private ColorPicker foreColorPicker1;\n        private ColorPicker backColorPicker1;\n        private ToolStripButton printToolStripButton2;\n        private ToolStripComboBox zoomToolStripComboBox1;\n        private ToolStripButton selectToolStripButton2;\n        private TabControl mainTC;\n        private ToolStripButton pdfToolStripButton2;\n        private ToolStripButton htmlToolStripButton2;\n        private ToolStripButton excelToolStripButton2;\n        private ToolStripButton XmlToolStripButton2;\n        private ToolStripButton MhtToolStripButton2;\n        private ToolStripButton CsvToolStripButton2;\n        private ToolStripButton RtfToolStripButton2;\n        private ToolStripButton TifToolStripButton2;\n        private Label label1;\n        private Label label2;\n        private Panel panel1;\n        private StatusStrip statusStrip1;\n        private Splitter mainSP;\n        private PropertyCtl mainProperties;\n        private ToolStripStatusLabel statusSelected;\n        private ToolStripStatusLabel toolStripStatusLabel2;\n        private ToolStripStatusLabel statusPosition;\n        private ToolStripMenuItem insertToolStripMenuItem;\n        private ToolStripMenuItem chartToolStripMenuItem;\n        private ToolStripMenuItem gridToolStripMenuItem;\n        private ToolStripMenuItem imageToolStripMenuItem;\n        private ToolStripMenuItem lineToolStripMenuItem;\n        private ToolStripMenuItem listToolStripMenuItem;\n        private ToolStripMenuItem matrixToolStripMenuItem;\n        private ToolStripMenuItem rectangleToolStripMenuItem;\n        private ToolStripMenuItem subReportToolStripMenuItem;\n        private ToolStripMenuItem tableToolStripMenuItem;\n\t\tprivate ToolStripMenuItem textboxToolStripMenuItem;\n        private ToolStripMenuItem pDFOldStyleToolStripMenuItem;\n        private ToolStripMenuItem dOCToolStripMenuItem;\n\t\tprivate ContextMenuStrip ContextMenuTB;\n\t\tprivate IContainer components;\n\t\tprivate ToolStripMenuItem MenuTBClose;\n\t\tprivate ToolStripMenuItem MenuTBSave;\n\t\tprivate ToolStripMenuItem MenuTBCloseAllButThis;\n        private ToolStripMenuItem Excel2007ToolStripMenuItem;\n        private ToolStripButton AlignmentGridEnable;\n        private ToolStripSeparator toolStripSeparator14;\n        private ToolStripUserZoomControl zoomControl;\n        private ToolStripSeparator toolStripMenuItem1;\n        private ToolStripMenuItem centerInContainerToolStripMenuItem;\n        private ToolStripMenuItem centerHorizontallyToolStripMenuItem;\n        private ToolStripMenuItem centerVerticallyToolStripMenuItem;\n\t\tprivate ToolStripMenuItem centerBothToolStripMenuItem;\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/RdlDesigner.cs",
    "content": "using Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlDesign.Resources;\nusing Majorsilence.Reporting.RdlViewer;\nusing Majorsilence.WinformUtils;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Drawing;\nusing System.Drawing.Printing;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.InteropServices;\nusing System.Text;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.Threading.Tasks;\nusing System.ComponentModel;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// RdlDesigner is used for building and previewing RDL based reports.\n\t/// </summary>\n\t/// <example>\n\t/// The designer can be used from other applications by adding a reference to\n\t/// RdelDesigner.exe to your projects.\n\t/// <code lang=\"cs>\n\t/// Majorsilence.Reporting.RdlDesign.RdlDesigner designer = new Majorsilence.Reporting.RdlDesign.RdlDesigner(\"myFyiChannel\", true);\n\t/// </code>\n\t/// <code lang=\"vb\">\n\t/// Dim designer As New Majorsilence.Reporting.RdlDesign.RdlDesigner(\"myFyiChannel\", true)\n\t/// designer.Show() \n\t/// </code>\n\t/// </example>\n\tpublic partial class RdlDesigner : IMessageFilter\n\t{\n\t\t// The version should match what is set in program.cs\n\t\tstatic readonly string IpcFileName = string.Format(\"\\\\fyiIpcData{0}.txt\", typeof(RdlDesigner).Assembly.GetName().Version.ToString().Replace(\".\", \"\"));\n\n\t\tstatic readonly string optFileName = Path.Combine(Majorsilence.Reporting.Rdl.Utility.Paths.MajorsilenceRoamingFolder(), \"designerstate.xml\");\n\t\tSortedList<DateTime, string> _RecentFiles = null;\n\t\tList<Uri> _CurrentFiles = null;     // temporary variable for current files\n\t\tList<string> _Toolbar = null;           // temporary variable for toolbar entries\n\t\tList<Uri> _TempReportFiles = null;      // temporary files created for report browsing\n\t\tint _RecentFilesMax = 5;            // # of items in recent files\n\t\tProcess _ServerProcess = null;      // process for the RdlDesktop.exe --\n\t\tprivate Rdl.NeedPassword _GetPassword;\n\t\tprivate string _DataSourceReferencePassword = null;\n\t\tprivate bool bGotPassword = false;\n\t\tprivate readonly string DefaultHelpUrl = \"https://github.com/majorsilence/My-FyiReporting/wiki/_pages\";\n\t\tprivate readonly string DefaultSupportUrl = \"https://github.com/majorsilence/My-FyiReporting/discussions\";\n\t\tprivate string _HelpUrl;\n\t\tprivate string _SupportUrl;\n\t\tstatic private string[] _MapSubtypes = new string[] { \"usa_map\" };\n\n\t\tprivate bool _ShowPreviewWaitDialog = true;\n\t\tprivate bool _ShowEditLines = true;\n\t\tprivate bool _ShowReportItemOutline = false;\n\t\tprivate bool _ShowTabbedInterface = true;\n\t\tprivate bool _ShowProperties = true;\n\n\t\tprivate NewLineChar _XmlNewLine = NewLineChar.Windows;\n\t\tprivate bool _PropertiesAutoHide = true;\n\t\tprivate readonly string TEMPRDL = \"_tempfile_.rdl\";\n\t\tprivate int TEMPRDL_INC = 0;\n\n\t\t// Tool bar  --- if you add to this list LOOK AT INIT TOOLBAR FIRST\n\t\tbool bSuppressChange = false;\n\t\tprivate Color _SaveExprBackColor = Color.LightGray;\n\n\t\tprivate ToolStripButton ctlInsertCurrent = null;\n\t\tprivate ToolStripMenuItem ctlMenuInsertCurrent = null;\n\t\tstatic string _MeasureUnits;\n\n\t\tprivate RdlDesigner()\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// To retrieve / pass MeasureUnits parameter (see config file)\n\t\t/// </summary>\n\t\tpublic static string MeasureUnits\n\t\t{\n\t\t\tget { return _MeasureUnits; }\n\t\t\tset { _MeasureUnits = value; }\n\t\t}\n\t\t/// <summary>\n\t\t/// Get units measure from parameters and not from culture info\n\t\t/// </summary>\n\t\t/// <returns></returns>\n\t\tprivate bool IsMetric()\n\t\t{\n\t\t\tif (MeasureUnits == \"cm\")\n\t\t\t\treturn true;\n\t\t\telse\n\t\t\t\treturn false;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Open a file programmatically when the designer is already open.\n\t\t/// </summary>\n\t\t/// <param name=\"filePath\">The full path to the rdl report.</param>\n\t\t/// <example>\n\t\t/// An example of opening a designer form and loading one report.\n\t\t/// <code lang=\"cs\">\n\t\t/// Majorsilence.Reporting.RdlDesign.RdlDesigner designer = new Majorsilence.Reporting.RdlDesign.RdlDesigner(\"myFyiChannel\");\n\t\t/// designer.Show();\n\t\t/// designer.OpenFile(@\"Path\\to\\a\\report.rdl\");\n\t\t/// </code>\n\t\t/// <code lang=\"vb\">\n\t\t/// Dim designer As New Majorsilence.Reporting.RdlDesign.RdlDesigner(\"myFyiChannel\")\n\t\t/// designer.Show() \n\t\t/// designer.OpenFile(\"Path\\to\\a\\report.rdl\")\n\t\t/// </code>\n\t\t/// </example>\n\t\t/// <remarks>\n\t\t/// You can open as many reports as you want by calling this function. The only limitation is that\n\t\t/// the designer must already be running by having called the Show() function first.\n\t\t/// </remarks>\n\t\tpublic async Task OpenFileAsync(string filePath)\n\t\t{\n\t\t\tawait this.OpenFileAsync(new Uri(filePath));\n\t\t}\n\t\tpublic async Task OpenFileAsync(Uri filePath)\n\t\t{\n\t\t\tawait CreateMDIChildAsync(filePath, null, false);\n\t\t\tRecentFilesMenu();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Open a file programmatically when the designer is already open.\n\t\t/// </summary>\n\t\t/// <param name=\"filePath\"></param>\n\t\t/// <param name=\"connectionString\">The connection string that will be used</param>\n\t\tpublic async Task OpenFileAsync(string filePath, string connectionString)\n\t\t{\n\t\t\tawait OpenFileAsync(new Uri(filePath), connectionString);\n\t\t}\n\t\tpublic async Task OpenFileAsync(Uri filePath, string connectionString)\n\t\t{\n\t\t\tXmlDocument xmlDoc = new XmlDocument();\n            #if NET6_0_OR_GREATER\n            string xml = await File.ReadAllTextAsync(filePath.AbsolutePath);\n            #else\n            string xml = File.ReadAllText(filePath.AbsolutePath);\n            #endif\n\t\t\txmlDoc.LoadXml(xml);\n\n\t\t\tforeach (XmlNode node in xmlDoc.GetElementsByTagName(\"ConnectString\"))\n\t\t\t{\n\t\t\t\tnode.InnerText = connectionString;\n\t\t\t}\n\n\t\t\txmlDoc.Save(filePath.AbsolutePath);\n\n\t\t\tawait CreateMDIChildAsync(filePath, null, false);\n\t\t\tRecentFilesMenu();\n\t\t}\n\n\t\t// TODO: Event raise on file save (with path and name to saved file)\n\t\t// Properties to control which controls in the menu and toolbar are available.\n\n\t\tpublic event RdlDesign.RdlDesignerSavedFileEventHandler SavedFileEvent;\n\n        private bool _openPreviousSession;\n\t\t/// <summary>\n\t\t/// Designer constructor.\n\t\t/// </summary>\n\t\t/// <param name=\"IpcChannelPortName\">The IPC channel that the designer will use.</param>\n\t\t/// <param name=\"openPreviousSession\">True or False open the previous reports that were open in the designer.</param>\n\t\tpublic RdlDesigner(string IpcChannelPortName, bool openPreviousSession)\n\t\t{\n            InitializeComponent();\n            _openPreviousSession = openPreviousSession;\n        }\n        \n        private async void RdlDesigner_Load(object sender, EventArgs e)\n        {\n            this.ShowWaiter();\n            KeyPreview = true;\n            await GetStartupStateAsync();\n\n            // Initialize the recent file menu\n            RecentFilesMenu();\n            propertiesWindowsToolStripMenuItem.Checked = _ShowProperties;\n            IsMdiContainer = true;\n            \n            Application.AddMessageFilter(this);\n\n            this.MdiChildActivate += new EventHandler(RdlDesigner_MdiChildActivate);\n            this.Closing += new System.ComponentModel.CancelEventHandler(this.RdlDesigner_Closing);\n            _GetPassword = new Rdl.NeedPassword(this.GetPassword);\n\n            InitToolbar();\n\n            //Build CustomItems insert menu\n            BuildCustomItemsInsertMenu(insertToolStripMenuItem);\n\n            // open up the current files if any\n            if (_CurrentFiles != null && _openPreviousSession == true)\n            {\n                foreach (Uri file in _CurrentFiles)\n                {\n                    await CreateMDIChildAsync(file, null, false);\n                }\n                _CurrentFiles = null;       // don't need this any longer\n            }\n\n            DesignTabChanged(this, new EventArgs());        // force toolbar to get updated\n            this.HideWaiter();\n        }\n\n        /// <summary>\n        /// Handles mousewheel processing when window under mousewheel doesn't have focus\n        /// </summary>\n        /// <param name=\"m\"></param>\n        /// <returns></returns>\n        public bool PreFilterMessage(ref Message m)\n        {\n            if (m.Msg == 0x20a)\n            {\n                // WM_MOUSEWHEEL, find the control at screen position m.LParam\n                Point pos = new Point(m.LParam.ToInt32() & 0xffff, m.LParam.ToInt32() >> 16);\n                IntPtr hWnd = WindowFromPoint(pos);\n                if (hWnd != IntPtr.Zero && hWnd != m.HWnd && Control.FromHandle(hWnd) != null)\n                {\n                    SendMessage(hWnd, m.Msg, m.WParam, m.LParam);\n                    return true;\n                }\n            }\n\n            return false;\n        }\n\n        // P/Invoke declarations\n\t\t[DllImport(\"user32.dll\")]\n\t\tprivate static extern IntPtr WindowFromPoint(Point pt);\n\t\t[DllImport(\"user32.dll\")]\n\t\tprivate static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);\n\n\t\tprivate DockStyle GetPropertiesDockStyle(string l)\n\t\t{\n\t\t\tDockStyle ds;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tds = (DockStyle)Enum.Parse(typeof(DockStyle), l, true);\n\t\t\t}\n\t\t\tcatch\n\t\t\t{\n\t\t\t\tds = DockStyle.Right;\n\t\t\t}\n\n\t\t\treturn ds;\n\t\t}\n\n\t\tprivate void InitToolbar()\n\t\t{\n\t\t\tInitToolbarFont();\n\t\t\tInitToolbarFontSize();\n\n\t\t\tzoomToolStripComboBox1.Items.AddRange(StaticLists.ZoomList);\n\n\t\t\tSystem.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(RdlDesigner));\n\n\n\t\t\tmainTC.Visible = _ShowTabbedInterface;\n\t\t\tif (_ShowTabbedInterface)\n\t\t\t{   // When tabbed we force the mdi children to be maximized (on reset)\n\t\t\t\tforeach (MDIChild mc in this.MdiChildren)\n\t\t\t\t{\n\t\t\t\t\tmc.WindowState = FormWindowState.Maximized;\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\tmainTB.Name = \"mainTB\";\n\n\t\t\t//\t\t\tmainTB.Size = new Size(440,20);\n\n\n\t\t}\n\t\t/// <summary>\n\t\t/// Handles right mouse button processing on current tab\n\t\t/// </summary>\n\t\t/// <param name=\"sender\"></param>\n\t\t/// <param name=\"e\"></param>\n\t\tvoid mainTC_MouseClick(object sender, MouseEventArgs e)\n\t\t{\n\t\t\tTabControl tc = sender as TabControl;\n\t\t\tif (tc == null)\n\t\t\t\treturn;\n\n\t\t\tif (e.Button != MouseButtons.Right)\n\t\t\t\treturn;\n\t\t\tPoint p = e.Location;\n\t\t\tint current = -1;\n\t\t\tfor (int i = 0; i < tc.TabCount; i++)\n\t\t\t{\n\t\t\t\tRectangle r = tc.GetTabRect(i);\n\t\t\t\tif (r.Contains(p))\n\t\t\t\t{\n\t\t\t\t\tcurrent = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (current != tc.SelectedIndex)\n\t\t\t\treturn;             // didn't find the tab\n\n\t\t\tContextMenuTB.Show(tc, p);\n\t\t}\n\n\t\tvoid mainTB_SizeChanged(object sender, EventArgs e)\n\t\t{\n\t\t\tmainTC.Width = mainTB.Width;\n\t\t}\n\n\t\tvoid mainTC_SelectedIndexChanged(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = mainTC.SelectedTab == null ? null : mainTC.SelectedTab.Tag as MDIChild;\n\t\t\tmdi_Activate(mc);\n\t\t}\n\n\t\t[DllImport(\"user32.dll\")]\n\t\tpublic static extern bool LockWindowUpdate(IntPtr hWndLock);\n\n\t\tvoid mdi_Activate(MDIChild mc)\n\t\t{\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tLockWindowUpdate(this.Handle);\n\t\t\tmc.Activate();\n\t\t\tthis.Refresh(); //Forces a synchronous redraw of all controls\n\n\t\t\tLockWindowUpdate(IntPtr.Zero);\n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tinternal int RecentFilesMax\n\t\t{\n\t\t\tget { return _RecentFilesMax; }\n\t\t\tset { _RecentFilesMax = value; }\n\t\t}\n\n\t\tinternal Rdl.NeedPassword SharedDatasetPassword\n\t\t{\n\t\t\tget { return _GetPassword; }\n\t\t}\n\n\t\tinternal SortedList<DateTime, string> RecentFiles\n\t\t{\n\t\t\tget { return _RecentFiles; }\n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tinternal string HelpUrl\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (_HelpUrl != null && _HelpUrl.Length > 0)\n\t\t\t\t\treturn _HelpUrl;\n\t\t\t\treturn DefaultHelpUrl;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t_HelpUrl = value.Length > 0 ? value : DefaultHelpUrl;\n\t\t\t}\n\t\t}\n\n\t\tstatic internal string[] MapSubtypes\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _MapSubtypes;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t_MapSubtypes = value;\n\t\t\t}\n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tinternal bool ShowPreviewWaitDialog\n\t\t{\n\t\t\tget { return _ShowPreviewWaitDialog; }\n\t\t\tset { _ShowPreviewWaitDialog = value; }\n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tinternal bool ShowEditLines\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _ShowEditLines;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t_ShowEditLines = value;\n\t\t\t}\n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tinternal bool PropertiesAutoHide\n\t\t{\n\t\t\tget { return _PropertiesAutoHide; }\n\t\t\tset { _PropertiesAutoHide = value; }\n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tinternal DockStyle PropertiesLocation\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _PropertiesLocation;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tif (_PropertiesLocation == value)\n\t\t\t\t\treturn;         // didn't change nothing to do\n\t\t\t\t_PropertiesLocation = value;\n\n\t\t\t\tmainSP.Dock = _PropertiesLocation;\n\t\t\t\tmainProperties.Dock = _PropertiesLocation;\n\t\t\t\t// Adjust the size of the property window so that it doesn't\n\t\t\t\t//   fill the whole main window\n\t\t\t\tswitch (_PropertiesLocation)\n\t\t\t\t{\n\t\t\t\t\tcase DockStyle.Left:\n\t\t\t\t\tcase DockStyle.Right:\n\t\t\t\t\t\tmainProperties.Width = this.Width / 3;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase DockStyle.Top:\n\t\t\t\t\tcase DockStyle.Bottom:\n\t\t\t\t\t\tmainProperties.Height = this.Height / 3;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprivate void BuildCustomItemsInsertMenu(ToolStripDropDownItem menuItem)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tvar sa = RdlEngineConfig.GetCustomReportTypes();\n\t\t\t\tif (sa == null || sa.Length == 0)\n\t\t\t\t\treturn;\n\n\t\t\t\tvar separator = menuItem.DropDownItems[\"CustomSeparator\"];\n\n\t\t\t\tif (separator == null)\n\t\t\t\t{\n\t\t\t\t\tseparator = new ToolStripSeparator { Name = \"CustomSeparator\" };\n\t\t\t\t\tmenuItem.DropDownItems.Add(separator);       // put a separator\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tvar index = menuItem.DropDownItems.IndexOf(separator) + 1;\n\n\t\t\t\t\twhile (menuItem.DropDownItems.Count > index)\n\t\t\t\t\t{\n\t\t\t\t\t\tmenuItem.DropDownItems.RemoveAt(index);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add the custom report items to the insert menu\n\t\t\t\tforeach (var m in sa)\n\t\t\t\t{\n\t\t\t\t\tvar mi = new ToolStripMenuItem(m + \"...\");\n\t\t\t\t\tmi.Click += InsertToolStripMenuItem_Click;\n\t\t\t\t\tmi.Tag = m;\n\t\t\t\t\tmenuItem.DropDownItems.Add(mi);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\tMessageBox.Show(string.Format(Strings.DesignCtl_ShowB_CustomReportItemError, ex.Message), Strings.DesignCtl_Show_Insert, MessageBoxButtons.OK);\n\t\t\t}\n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tinternal bool ShowReportItemOutline\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _ShowReportItemOutline;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t_ShowReportItemOutline = value;\n\t\t\t}\n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tinternal bool ShowTabbedInterface\n\t\t{\n\t\t\tget { return _ShowTabbedInterface; }\n\t\t\tset { _ShowTabbedInterface = value; }\n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tinternal NewLineChar XmlNewLine\n\t\t{\n\t\t\tget => _XmlNewLine;\n\t\t\tset => _XmlNewLine = value;\n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tinternal string SupportUrl\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (_SupportUrl != null && _SupportUrl.Length > 0)\n\t\t\t\t\treturn _SupportUrl;\n\t\t\t\treturn DefaultSupportUrl;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t_SupportUrl = value.Length > 0 ? value : DefaultSupportUrl;\n\t\t\t}\n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tinternal List<string> Toolbar\n\t\t{\n\t\t\tget { return _Toolbar; }\n\t\t\tset\n\t\t\t{\n\t\t\t\t_Toolbar = value;\n\t\t\t\tInitToolbar();          // reset the toolbar\n\t\t\t}\n\t\t}\n\n\t\tinternal List<string> ToolbarDefault\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn new List<string>(new string[] {\n\t\t\t\t\t\"New\", \"Open\", \"Save\", \"Space\", \"Cut\", \"Copy\", \"Paste\", \"Undo\", \"Space\",\n\t\t\t\t\t\"Textbox\", \"Chart\", \"Table\", \"List\", \"Image\", \"Matrix\", \"Subreport\",\n\t\t\t\t\t\"Rectangle\", \"Line\", \"Space\",\"Edit\", \"Newline\",\n\t\t\t\t\t\"Bold\", \"Italic\", \"Underline\", \"Space\",\"Align\",\"Space\",\n\t\t\t\t\t\"Font\", \"FontSize\", \"Space\", \"ForeColor\", \"BackColor\",\n\t\t\t\t\t\"Space\", \"Print\", \"Space\", \"Zoom\", \"SelectTool\", \"Space\",\n\t\t\t\t\t\"PDF\", \"HTML\", \"Excel\", \"XML\", \"MHT\", \"CSV\", \"RTF\", \"TIF\"});\n\t\t\t\t;\n\t\t\t}\n\t\t}\n\n\t\tinternal List<string> ToolbarAllowDups\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn new List<string>(new string[] {\n\t\t\t\t  \"Space\",\n\t\t\t\t  \"Newline\"});\n\t\t\t\t;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// All of the possible items that can be placed on a toolbar\n\t\t/// </summary>\n\t\tinternal string[] ToolbarOperations\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn new string[]\n\t\t\t\t\t{\"Newline\",\n\t\t\t\t\t\"Align\",\n\t\t\t\t\t\"Bold\",\n\t\t\t\t\t\"Italic\",\n\t\t\t\t\t\"Underline\",\n\t\t\t\t\t\"Space\",\n\t\t\t\t\t\"Font\",\n\t\t\t\t\t\"FontSize\",\n\t\t\t\t\t\"ForeColor\",\n\t\t\t\t\t\"BackColor\",\n\t\t\t\t\t\"New\",\n\t\t\t\t\t\"Open\",\n\t\t\t\t\t\"Save\",\n\t\t\t\t\t\"Cut\",\n\t\t\t\t\t\"Copy\",\n\t\t\t\t\t\"Undo\",\n\t\t\t\t\t\"Paste\",\n\t\t\t\t\t\"Print\",\n\t\t\t\t\t\"XML\",\n\t\t\t\t\t\"PDF\",\n\t\t\t\t\t\"HTML\",\n\t\t\t\t\t\"MHT\",\n\t\t\t\t\t\"CSV\",\n\t\t\t\t\t\"RTF\",\n\t\t\t\t\t\"Excel\",\n\t\t\t\t\t\"TIF\",\n\t\t\t\t\t\"Edit\",\n\t\t\t\t\t\"Textbox\",\n\t\t\t\t\t\"Chart\",\n\t\t\t\t\t\"Rectangle\",\n\t\t\t\t\t\"Table\",\n\t\t\t\t\t\"Matrix\",\n\t\t\t\t\t\"List\",\n\t\t\t\t\t\"Line\",\n\t\t\t\t\t\"Image\",\n\t\t\t\t\t\"SelectTool\",\n\t\t\t\t\t\"Subreport\",\n\t\t\t\t\t\"Zoom\"   };\n\t\t\t}\n\t\t}\n\n\n\n\t\tvoid fxExpr_MouseLeave(object sender, EventArgs e)\n\t\t{\n\t\t\tLabel lbl = sender as Label;\n\t\t\tif (lbl == null)\n\t\t\t\treturn;\n\n\t\t\tlbl.BackColor = _SaveExprBackColor;\n\t\t}\n\n\t\tvoid fxExpr_MouseEnter(object sender, EventArgs e)\n\t\t{\n\t\t\tLabel lbl = sender as Label;\n\t\t\tif (lbl == null)\n\t\t\t\treturn;\n\t\t\t_SaveExprBackColor = lbl.BackColor;\n\t\t\tlbl.BackColor = Color.LightGray;\n\n\t\t\treturn;\n\t\t}\n\n\t\tvoid fxExpr_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null ||\n\t\t\t\tmc.DesignTab != DesignTabs.Design || mc.DrawCtl.SelectedCount != 1 ||\n\t\t\t\tmc.Editor == null)\n\t\t\t\treturn;\n\n\t\t\tXmlNode tn = mc.DrawCtl.SelectedList[0];\n\n\t\t\tusing (DialogExprEditor de = new DialogExprEditor(mc.DrawCtl, ctlEditTextbox.Text, tn))\n\t\t\t{\n\t\t\t\t// Display the UI editor dialog\n\t\t\t\tif (de.ShowDialog(this) == DialogResult.OK)\n\t\t\t\t{\n\t\t\t\t\tctlEditTextbox.Text = de.Expression;\n\t\t\t\t\tmc.Editor.SetSelectedText(de.Expression);\n\t\t\t\t\tSetProperties(mc);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprivate SimpleToggle InitToolbarInsertToggle(ref int x, int y, string t)\n\t\t{\n\t\t\treturn InitToolbarInsertToggle(ref x, y, t, null, new EventHandler(this.Insert_Click));\n\t\t}\n\n\t\tprivate SimpleToggle InitToolbarInsertToggle(ref int x, int y, string t,\n\t\t\tImage bImg)\n\t\t{\n\t\t\treturn InitToolbarInsertToggle(ref x, y, t, bImg, new EventHandler(this.Insert_Click));\n\t\t}\n\n\t\tprivate SimpleToggle InitToolbarInsertToggle(ref int x, int y, string t,\n\t\t\tImage bImg, EventHandler eh)\n\t\t{\n\t\t\tSimpleToggle ctl = new SimpleToggle();\n\t\t\tctl.UpColor = this.BackColor;\n\t\t\tctl.Click += eh;    // click handler for all inserts\n\n\t\t\tif (bImg == null)\n\t\t\t{\n\t\t\t\tctl.Text = t;\n\t\t\t\tusing (Graphics g = ctl.CreateGraphics())\n\t\t\t\t{\n\t\t\t\t\tSizeF fs = g.MeasureString(ctl.Text, ctl.Font);\n\t\t\t\t\tctl.Height = (int)fs.Height + 8;    // 8 is for margins\n\t\t\t\t\tctl.Width = (int)fs.Width + 12;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tctl.Image = bImg;\n\t\t\t\tctl.ImageAlign = ContentAlignment.MiddleCenter;\n\t\t\t\tctl.Height = bImg.Height + 5;\n\t\t\t\tctl.Width = bImg.Width + 8;\n\t\t\t\tctl.Text = \"\";\n\t\t\t}\n\n\t\t\tctl.Tag = t;\n\t\t\tctl.Left = x;\n\t\t\tctl.Top = y;\n\t\t\tctl.FlatStyle = FlatStyle.Flat;\n\t\t\tToolTip tipb = new ToolTip();\n\t\t\ttipb.AutomaticDelay = 500;\n\t\t\ttipb.ShowAlways = true;\n\t\t\ttipb.SetToolTip(ctl, t);\n\t\t\tmainTB.Controls.Add(ctl);\n\n\t\t\tx = x + ctl.Width;\n\n\t\t\treturn ctl;\n\t\t}\n\n\n\t\tprivate int InitToolbarFont()\n\t\t{\n\t\t\t// Create the font\n\n\n\t\t\tforeach (FontFamily ff in FontFamily.Families)\n\t\t\t{\n\t\t\t\tfontToolStripComboBox1.Items.Add(ff.Name);\n\t\t\t}\n\n\t\t\treturn fontToolStripComboBox1.Width;\n\t\t}\n\n\t\tprivate int InitToolbarFontSize()\n\t\t{\n\t\t\t// Create the font\n\n\t\t\tstring[] sizes = new string[] { \"8\", \"9\", \"10\", \"11\", \"12\", \"14\", \"16\", \"18\", \"20\", \"22\", \"24\", \"26\", \"28\", \"36\", \"48\", \"72\" };\n\t\t\tfontSizeToolStripComboBox1.Items.AddRange(sizes);\n\n\t\t\treturn fontSizeToolStripComboBox1.Width;\n\t\t}\n\n\t\tvoid tip_Popup_Fore(object sender, PopupEventArgs e)\n\t\t{\n\t\t\tToolTip tt = sender as ToolTip;\n\t\t\tif (tt == null)\n\t\t\t\treturn;\n\t\t\tstring title = null;\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc != null && mc.DesignTab == DesignTabs.Design && mc.DrawCtl.SelectedCount == 1)\n\t\t\t{\n\t\t\t\ttitle = foreColorPicker1.Text;\n\t\t\t}\n\n\t\t\ttt.ToolTipTitle = title;\n\t\t}\n\n\t\tprivate void ctlForeColor_Change(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tif (!bSuppressChange)\n\t\t\t{\n\t\t\t\tmc.ApplyStyleToSelected(\"Color\", foreColorPicker1.Text);\n\t\t\t\tSetProperties(mc);\n\t\t\t}\n\t\t\tSetMDIChildFocus(mc);\n\t\t}\n\n\t\tvoid tip_Popup_Back(object sender, PopupEventArgs e)\n\t\t{\n\t\t\tToolTip tt = sender as ToolTip;\n\t\t\tif (tt == null)\n\t\t\t\treturn;\n\n\t\t\tstring title = null;\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc != null && mc.DesignTab == DesignTabs.Design && mc.DrawCtl.SelectedCount == 1)\n\t\t\t{\n\t\t\t\ttitle = backColorPicker1.Text;\n\t\t\t}\n\n\t\t\ttt.ToolTipTitle = title;\n\t\t}\n\n\n\n\t\tprivate bool OkToSave()\n\t\t{\n\t\t\tforeach (MDIChild mc in this.MdiChildren)\n\t\t\t{\n\t\t\t\tif (!mc.OkToClose())\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tprivate void menuFile_Popup(object sender, EventArgs e)\n\t\t{\n\t\t\t// These menus require an MDIChild in order to work\n\t\t\tbool bEnable = this.MdiChildren.Length > 0 ? true : false;\n\t\t\tcloseToolStripMenuItem.Enabled = bEnable;\n\t\t\tsaveToolStripMenuItem.Enabled = bEnable;\n\t\t\tsaveAsToolStripMenuItem.Enabled = bEnable;\n\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tprintToolStripMenuItem.Enabled = exportToolStripMenuItem.Enabled = (mc != null && mc.DesignTab == DesignTabs.Preview);\n\n\t\t\t// Recent File is enabled when there exists some files \n\t\t\trecentFilesToolStripMenuItem.Enabled = this._RecentFiles.Count <= 0 ? false : true;\n\t\t}\n\n\t\tprivate void menuFileClose_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc != null)\n\t\t\t\tmc.Close();\n\t\t}\n\n\t\tprivate void menuFileExit_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (!OkToSave())\n\t\t\t\treturn;\n\t\t\tSaveStartupState();\n\t\t\tmenuToolsCloseProcess(false);\n\t\t\tCleanupTempFiles();\n\t\t\tApplication.Exit();\n\t\t\t//\t\t\tEnvironment.Exit(0);\n\t\t}\n\n\t\tprivate async void menuFileOpen_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tOpenFileDialog ofd = new OpenFileDialog();\n\t\t\tif (mc != null)\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tofd.InitialDirectory = Path.GetDirectoryName(mc.SourceFile.LocalPath);\n\t\t\t\t}\n\t\t\t\tcatch\n\t\t\t\t{\n\t\t\t\t}\n\t\t\t}\n\t\t\tofd.DefaultExt = \"rdl\";\n\t\t\tofd.Filter = Strings.RdlDesigner_menuFileOpen_Click_ReportFilesFilter;\n\t\t\tofd.FilterIndex = 1;\n\t\t\tofd.CheckFileExists = true;\n\t\t\tofd.Multiselect = true;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tif (ofd.ShowDialog(this) == DialogResult.OK)\n\t\t\t\t{\n\t\t\t\t\tforeach (string file in ofd.FileNames)\n\t\t\t\t\t{\n\t\t\t\t\t\tawait CreateMDIChildAsync(new Uri(file), null, false);\n\t\t\t\t\t}\n\t\t\t\t\tRecentFilesMenu();      // update the menu for recent files\n\t\t\t\t}\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tofd.Dispose();\n\t\t\t}\n\t\t}\n\n\t\t// Create an MDI child.   Only creates it if not already open.\n\t\tprivate async Task<MDIChild> CreateMDIChildAsync(Uri file, string rdl, bool bMenuUpdate)\n\t\t{\n\t\t\tMDIChild mcOpen = null;\n\t\t\tif (file != null)\n\t\t\t{\n\n\t\t\t\tforeach (MDIChild mc in this.MdiChildren)\n\t\t\t\t{\n\t\t\t\t\tif (mc.SourceFile != null && file.LocalPath == mc.SourceFile.LocalPath)\n\t\t\t\t\t{                           // we found it\n\t\t\t\t\t\tmcOpen = mc;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (mcOpen == null)\n\t\t\t{\n\t\t\t\tMDIChild mc = null;\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tmc = new MDIChild(this.ClientRectangle.Width * 3 / 5, this.ClientRectangle.Height * 3 / 5);\n\t\t\t\t\tmc.OnSelectionChanged += new MDIChild.RdlChangeHandler(SelectionChanged);\n\t\t\t\t\tmc.OnSelectionMoved += new MDIChild.RdlChangeHandler(SelectionMoved);\n\t\t\t\t\tmc.OnReportItemInserted += new MDIChild.RdlChangeHandler(ReportItemInserted);\n\t\t\t\t\tmc.OnDesignTabChanged += new MDIChild.RdlChangeHandler(DesignTabChanged);\n\t\t\t\t\tmc.OnOpenSubreport += new DesignCtl.OpenSubreportEventHandler(OpenSubReportEvent);\n\t\t\t\t\tmc.OnHeightChanged += new DesignCtl.HeightEventHandler(HeightChanged);\n\n\t\t\t\t\tmc.MdiParent = this;\n\t\t\t\t\tmc.Editor.DesignCtl.RdlDesigner = this;\n\t\t\t\t\tif (this._ShowTabbedInterface)\n\t\t\t\t\t\tmc.WindowState = FormWindowState.Maximized;\n\t\t\t\t\tmc.Viewer.GetDataSourceReferencePassword = _GetPassword;\n\t\t\t\t\tif (file != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tmc.Viewer.Folder = Path.GetDirectoryName(file.LocalPath);\n\t\t\t\t\t\tawait mc.SetSourceFileAsync(file);\n\t\t\t\t\t\tmc.Text = Path.GetFileName(file.LocalPath);\n\t\t\t\t\t\tmc.DrawCtl.Folder = Path.GetDirectoryName(file.LocalPath);\n\t\t\t\t\t\tmc.Viewer.ReportName = Path.GetFileNameWithoutExtension(file.LocalPath);\n\t\t\t\t\t\tNoteRecentFiles(file, bMenuUpdate);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tmc.SourceRdl = rdl;\n\t\t\t\t\t\tmc.Viewer.ReportName = mc.Text = Strings.RdlDesigner_CreateMDIChild_Untitled;\n\t\t\t\t\t}\n\t\t\t\t\tmc.ShowEditLines(this._ShowEditLines);\n\t\t\t\t\tmc.ShowReportItemOutline = this.ShowReportItemOutline;\n\t\t\t\t\tmc.ShowPreviewWaitDialog(this._ShowPreviewWaitDialog);\n\t\t\t\t\t// add to toolbar tab\n\t\t\t\t\tTabPage tp = new TabPage();\n\t\t\t\t\ttp.Location = new System.Drawing.Point(0, 0);\n\t\t\t\t\ttp.Name = mc.Text;\n\t\t\t\t\ttp.TabIndex = 1;\n\t\t\t\t\ttp.Text = mc.Text;\n\t\t\t\t\ttp.Tag = mc;                // tie the mdichild to the tabpage\n\t\t\t\t\ttp.ToolTipText = file == null ? \"\" : file.LocalPath;\n\t\t\t\t\tmainTC.Controls.Add(tp);\n\t\t\t\t\tmc.Tab = tp;\n                    \n\t\t\t\t\tmc.Show();\n\t\t\t\t\tmcOpen = mc;\n\n\t\t\t\t}\n\t\t\t\tcatch (Exception ex)\n\t\t\t\t{\n\t\t\t\t\tMessageBox.Show(ex.Message);\n\t\t\t\t\tif (mc != null)\n\t\t\t\t\t\tmc.Close();\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tmcOpen.Activate();\n\t\t\t}\n\t\t\treturn mcOpen;\n\t\t}\n\n\t\tprivate void DesignTabChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tDesignTabs tab = DesignTabs.Edit;\n\t\t\tif (mc != null)\n\t\t\t\ttab = mc.DesignTab;\n\t\t\tbool bEnableEdit = false;\n\t\t\tbool bEnableDesign = false;\n\t\t\tbool bEnablePreview = false;\n\t\t\tbool bShowProp = _ShowProperties;\n\t\t\tswitch (tab)\n\t\t\t{\n\t\t\t\tcase DesignTabs.Edit:\n\t\t\t\t\tbEnableEdit = true;\n\t\t\t\t\tif (_PropertiesAutoHide)\n\t\t\t\t\t\tbShowProp = false;\n\t\t\t\t\tbreak;\n\t\t\t\tcase DesignTabs.Design:\n\t\t\t\t\tbEnableDesign = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase DesignTabs.Preview:\n\t\t\t\t\tif (_PropertiesAutoHide)\n\t\t\t\t\t\tbShowProp = false;\n\t\t\t\t\tbEnablePreview = true;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (!bEnableEdit && this._ValidateRdl != null)\n\t\t\t{\n\t\t\t\tthis._ValidateRdl.Close();\n\t\t\t}\n\t\t\tmainProperties.Visible = mainSP.Visible = bShowProp;\n\t\t\tif (leftAlignToolStripButton2 != null)\n\t\t\t{\n\t\t\t\tleftAlignToolStripButton2.Enabled = bEnableDesign;\n\t\t\t}\n\t\t\tif (centerAlignToolStripButton2 != null)\n\t\t\t{\n\t\t\t\tcenterAlignToolStripButton2.Enabled = bEnableDesign;\n\t\t\t}\n\t\t\tif (rightAlignToolStripButton3 != null)\n\t\t\t{\n\t\t\t\trightAlignToolStripButton3.Enabled = bEnableDesign;\n\t\t\t}\n\t\t\tif (boldToolStripButton1 != null)\n\t\t\t{\n\t\t\t\tboldToolStripButton1.Enabled = bEnableDesign;\n\t\t\t}\n\t\t\tif (italiacToolStripButton1 != null)\n\t\t\t{\n\t\t\t\titaliacToolStripButton1.Enabled = bEnableDesign;\n\t\t\t}\n\t\t\tif (underlineToolStripButton2 != null)\n\t\t\t{\n\t\t\t\tunderlineToolStripButton2.Enabled = bEnableDesign;\n\t\t\t}\n\t\t\tif (fontToolStripComboBox1 != null)\n\t\t\t{\n\t\t\t\tfontToolStripComboBox1.Enabled = bEnableDesign;\n\t\t\t}\n\t\t\tif (fontSizeToolStripComboBox1 != null)\n\t\t\t{\n\t\t\t\tfontSizeToolStripComboBox1.Enabled = bEnableDesign;\n\t\t\t}\n\t\t\tif (foreColorPicker1 != null)\n\t\t\t{\n\t\t\t\tforeColorPicker1.Enabled = bEnableDesign;\n\t\t\t}\n\t\t\tif (backColorPicker1 != null)\n\t\t\t{\n\t\t\t\tbackColorPicker1.Enabled = bEnableDesign;\n\t\t\t}\n\t\t\tif (cutToolStripButton1 != null)\n\t\t\t{\n\t\t\t\tcutToolStripButton1.Enabled = bEnableDesign | bEnableEdit;\n\t\t\t}\n\t\t\tif (copyToolStripButton1 != null)\n\t\t\t{\n\t\t\t\tcopyToolStripButton1.Enabled = bEnableDesign | bEnableEdit | bEnablePreview;\n\t\t\t}\n\t\t\tif (undoToolStripButton1 != null)\n\t\t\t{\n\t\t\t\tundoToolStripButton1.Enabled = bEnableDesign | bEnableEdit;\n\t\t\t}\n\t\t\tif (pasteToolStripButton1 != null)\n\t\t\t{\n\t\t\t\tpasteToolStripButton1.Enabled = bEnableDesign | bEnableEdit;\n\t\t\t}\n\t\t\tif (printToolStripButton2 != null)\n\t\t\t{\n\t\t\t\tprintToolStripButton2.Enabled = bEnablePreview;\n\t\t\t}\n\t\t\tif (textboxToolStripButton1 != null)\n\t\t\t{\n\t\t\t\ttextboxToolStripButton1.Enabled = bEnableDesign;\n\t\t\t}\n\t\t\tif (selectToolStripButton2 != null)\n\t\t\t{\n\t\t\t\tselectToolStripButton2.Enabled = bEnablePreview;\n\t\t\t\tselectToolStripButton2.Checked = mc == null ? false : mc.SelectionTool;\n\t\t\t}\n\t\t\tif (chartToolStripButton1 != null)\n\t\t\t{\n\t\t\t\tchartToolStripButton1.Enabled = bEnableDesign;\n\t\t\t}\n\t\t\tif (rectangleToolStripButton1 != null)\n\t\t\t{\n\t\t\t\trectangleToolStripButton1.Enabled = bEnableDesign;\n\t\t\t}\n\t\t\tif (tableToolStripButton1 != null)\n\t\t\t{\n\t\t\t\ttableToolStripButton1.Enabled = bEnableDesign;\n\t\t\t}\n\t\t\tif (matrixToolStripButton1 != null)\n\t\t\t{\n\t\t\t\tmatrixToolStripButton1.Enabled = bEnableDesign;\n\t\t\t}\n\t\t\tif (listToolStripButton1 != null)\n\t\t\t{\n\t\t\t\tlistToolStripButton1.Enabled = bEnableDesign;\n\t\t\t}\n\t\t\tif (lineToolStripButton1 != null)\n\t\t\t{\n\t\t\t\tlineToolStripButton1.Enabled = bEnableDesign;\n\t\t\t}\n\t\t\tif (imageToolStripButton1 != null)\n\t\t\t{\n\t\t\t\timageToolStripButton1.Enabled = bEnableDesign;\n\t\t\t}\n\t\t\tif (subreportToolStripButton1 != null)\n\t\t\t{\n\t\t\t\tsubreportToolStripButton1.Enabled = bEnableDesign;\n\t\t\t}\n\t\t\tif (pdfToolStripButton2 != null)\n\t\t\t{\n\t\t\t\tpdfToolStripButton2.Enabled = bEnablePreview;\n\t\t\t}\n\t\t\tif (TifToolStripButton2 != null)\n\t\t\t{\n\t\t\t\tTifToolStripButton2.Enabled = bEnablePreview;\n\t\t\t}\n\t\t\tif (XmlToolStripButton2 != null)\n\t\t\t{\n\t\t\t\tXmlToolStripButton2.Enabled = bEnablePreview;\n\t\t\t}\n\t\t\tif (htmlToolStripButton2 != null)\n\t\t\t{\n\t\t\t\thtmlToolStripButton2.Enabled = bEnablePreview;\n\t\t\t}\n\t\t\tif (MhtToolStripButton2 != null)\n\t\t\t{\n\t\t\t\tMhtToolStripButton2.Enabled = bEnablePreview;\n\t\t\t}\n\t\t\tif (CsvToolStripButton2 != null)\n\t\t\t{\n\t\t\t\tCsvToolStripButton2.Enabled = bEnablePreview;\n\t\t\t}\n\t\t\tif (excelToolStripButton2 != null)\n\t\t\t{\n\t\t\t\texcelToolStripButton2.Enabled = bEnablePreview;\n\t\t\t}\n\t\t\tif (RtfToolStripButton2 != null)\n\t\t\t{\n\t\t\t\tRtfToolStripButton2.Enabled = bEnablePreview;\n\t\t\t}\n\n\t\t\tforeach (var item in insertToolStripMenuItem.DropDownItems.OfType<ToolStripItem>())\n\t\t\t{\n\t\t\t\titem.Enabled = bEnableDesign;\n\t\t\t}\n\n\t\t\tthis.EnableEditTextBox();\n\n\t\t\tif (zoomToolStripComboBox1 != null)\n\t\t\t{\n\t\t\t\tzoomToolStripComboBox1.Enabled = bEnablePreview;\n\t\t\t\tstring zText = \"Actual Size\";\n\t\t\t\tif (mc != null)\n\t\t\t\t{\n\t\t\t\t\tswitch (mc.ZoomMode)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase ZoomEnum.FitWidth:\n\t\t\t\t\t\t\tzText = \"Fit Width\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase ZoomEnum.FitPage:\n\t\t\t\t\t\t\tzText = \"Fit Page\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase ZoomEnum.UseZoom:\n\t\t\t\t\t\t\tif (mc.Zoom == 1)\n\t\t\t\t\t\t\t\tzText = \"Actual Size\";\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tzText = string.Format(\"{0:0}\", mc.Zoom * 100f);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tzoomToolStripComboBox1.Text = zText;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// when no active sheet\n\t\t\tif (this.saveToolStripButton1 != null)\n\t\t\t\tthis.saveToolStripButton1.Enabled = mc != null;\n\n\t\t\t// Update the status and position information\n\t\t\tSetStatusNameAndPosition();\n\t\t}\n\n\t\tprivate void ctlUnderline_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.ApplyStyleToSelected(\"TextDecoration\", underlineToolStripButton2.Checked ? \"Underline\" : \"None\");\n\t\t\tSetProperties(mc);\n\n\t\t\tSetMDIChildFocus(mc);\n\t\t}\n\n\t\tprivate void ctlFont_Change(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tif (!bSuppressChange)\n\t\t\t{\n\t\t\t\tmc.ApplyStyleToSelected(\"FontFamily\", fontToolStripComboBox1.Text);\n\t\t\t\tSetProperties(mc);\n\t\t\t}\n\t\t\tSetMDIChildFocus(mc);\n\t\t}\n\n\t\tprivate void ctlFontSize_Change(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tif (!bSuppressChange)\n\t\t\t{\n\t\t\t\tmc.ApplyStyleToSelected(\"FontSize\", fontSizeToolStripComboBox1.Text + \"pt\");\n\t\t\t\tSetProperties(mc);\n\t\t\t}\n\t\t\tSetMDIChildFocus(mc);\n\t\t}\n\n\t\tprivate void ctlSelectTool_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.SelectionTool = selectToolStripButton2.Checked;\n\n\t\t\tSetMDIChildFocus(mc);\n\t\t}\n\n\t\tprivate void ctlBackColor_Change(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\t\t\tif (!bSuppressChange)\n\t\t\t{\n\t\t\t\tmc.ApplyStyleToSelected(\"BackgroundColor\", backColorPicker1.Text);\n\t\t\t\tSetProperties(mc);\n\t\t\t}\n\n\t\t\tSetMDIChildFocus(mc);\n\t\t}\n\n\t\tprivate void ctlZoom_Change(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\t\t\tmc.SetFocus();\n\n\t\t\tswitch (zoomToolStripComboBox1.Text)\n\t\t\t{\n\t\t\t\tcase \"Actual Size\":\n\t\t\t\t\tmc.Zoom = 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Fit Page\":\n\t\t\t\t\tmc.ZoomMode = ZoomEnum.FitPage;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Fit Width\":\n\t\t\t\t\tmc.ZoomMode = ZoomEnum.FitWidth;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tstring s = zoomToolStripComboBox1.Text.Substring(0, zoomToolStripComboBox1.Text.Length - 1);\n\t\t\t\t\tfloat z;\n\t\t\t\t\ttry\n\t\t\t\t\t{\n\t\t\t\t\t\tz = Convert.ToSingle(s) / 100f;\n\t\t\t\t\t\tmc.Zoom = z;\n\t\t\t\t\t}\n\t\t\t\t\tcatch (Exception ex)\n\t\t\t\t\t{\n\t\t\t\t\t\tMessageBox.Show(ex.Message, Strings.RdlDesigner_Show_ZoomValueInvalid);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tprivate void EnableEditTextBox()\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tbool bEnable = false;\n\n\t\t\tif (this.ctlEditTextbox == null || mc == null ||\n\t\t\t\tmc.DesignTab != DesignTabs.Design || mc.DrawCtl.SelectedCount != 1)\n\t\t\t{ }\n\t\t\telse\n\t\t\t{\n\t\t\t\tXmlNode tn = mc.DrawCtl.SelectedList[0] as XmlNode;\n\t\t\t\tif (tn != null && tn.Name == \"Textbox\")\n\t\t\t\t{\n\t\t\t\t\tctlEditTextbox.Text = mc.DrawCtl.GetElementValue(tn, \"Value\", \"\");\n\t\t\t\t\tbEnable = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (ctlEditTextbox != null)\n\t\t\t{\n\t\t\t\tif (!bEnable)\n\t\t\t\t\tctlEditTextbox.Text = \"\";\n\t\t\t\tctlEditTextbox.Enabled = bEnable;\n\t\t\t\tfxToolStripLabel1.Enabled = bEnable;\n\t\t\t}\n\t\t}\n\n\t\tprivate void ctlItalic_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.ApplyStyleToSelected(\"FontStyle\", italiacToolStripButton1.Checked ? \"Italic\" : \"Normal\");\n\t\t\tSetProperties(mc);\n\n\t\t\tSetMDIChildFocus(mc);\n\t\t}\n\n\t\tprivate void ReportItemInserted(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// turn off the current selection after an item is inserted\n\t\t\tif (ctlInsertCurrent != null)\n\t\t\t{\n\t\t\t\tctlInsertCurrent.Checked = false;\n\t\t\t\tmc.CurrentInsert = null;\n\t\t\t\tctlInsertCurrent = null;\n\t\t\t}\n\t\t\tif (ctlMenuInsertCurrent != null)\n\t\t\t{\n\t\t\t\tctlMenuInsertCurrent.Checked = false;\n\t\t\t\tmc.CurrentInsert = null;\n\t\t\t\tctlMenuInsertCurrent = null;\n\t\t\t}\n\t\t}\n\n\t\tprivate async void OpenSubReportEvent(object sender, SubReportEventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tUri file = new Uri(mc.Viewer.Folder);\n\t\t\tif (e.SubReportName[0] == Path.DirectorySeparatorChar)\n\t\t\t{\n\t\t\t\tfile = new Uri(file.LocalPath + e.SubReportName);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfile = new Uri(file.LocalPath + Path.DirectorySeparatorChar + e.SubReportName + \".rdl\");\n\t\t\t}\n\n\t\t\tawait CreateMDIChildAsync(file, null, true);\n\t\t}\n\n\t\tprivate void HeightChanged(object sender, HeightEventArgs e)\n\t\t{\n\t\t\tif (e.Height == null)\n\t\t\t{\n\t\t\t\tSetProperties(ActiveMdiChild as MDIChild);\n\n\t\t\t\tstatusPosition.Text = \"\";\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//   var rinfo = new RegionInfo(CultureInfo.CurrentCulture.Name);\n\t\t\tvar unit = IsMetric() ? Strings.RdlDesigner_Status_cm : Strings.RdlDesigner_Status_in;\n\t\t\tvar h = DesignXmlDraw.GetSize(e.Height) / DesignXmlDraw.POINTSIZED;\n\n\t\t\tif (IsMetric())\n\t\t\t{\n\t\t\t\th *= 2.54f;\n\t\t\t}\n\n\t\t\tstatusPosition.Text = string.Format(\"   {1}={0:0.00}{2}        \", h, Strings.RdlDesigner_Status_Height, unit);\n\t\t}\n\n\t\tprivate void SelectionMoved(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tSetStatusNameAndPosition();\n\t\t}\n\n\t\tprivate void SelectionChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\t\t\t// handle edit tab first\n\t\t\tif (mc.DesignTab == DesignTabs.Edit)\n\t\t\t{\n\t\t\t\tSetStatusNameAndPosition();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tbSuppressChange = true;         // don't process changes in status bar\n\n\t\t\tSetStatusNameAndPosition();\n\t\t\tthis.EnableEditTextBox();   // handling enabling/disabling of textbox\n\n\t\t\tStyleInfo si = mc.SelectedStyle;\n\t\t\tif (si == null)\n\t\t\t\treturn;\n\n\t\t\tif (centerAlignToolStripButton2 != null)\n\t\t\t\tcenterAlignToolStripButton2.Checked = si.TextAlign == TextAlignEnum.Center ? true : false;\n\t\t\tif (leftAlignToolStripButton2 != null)\n\t\t\t\tleftAlignToolStripButton2.Checked = si.TextAlign == TextAlignEnum.Left ? true : false;\n\t\t\tif (rightAlignToolStripButton3 != null)\n\t\t\t\trightAlignToolStripButton3.Checked = si.TextAlign == TextAlignEnum.Right ? true : false;\n\t\t\tif (boldToolStripButton1 != null)\n\t\t\t\tboldToolStripButton1.Checked = si.IsFontBold() ? true : false;\n\t\t\tif (italiacToolStripButton1 != null)\n\t\t\t\titaliacToolStripButton1.Checked = si.FontStyle == FontStyleEnum.Italic ? true : false;\n\t\t\tif (underlineToolStripButton2 != null)\n\t\t\t\tunderlineToolStripButton2.Checked = si.TextDecoration == TextDecorationEnum.Underline ? true : false;\n\t\t\tif (fontToolStripComboBox1 != null)\n\t\t\t\tfontToolStripComboBox1.Text = si.FontFamily;\n\t\t\tif (fontSizeToolStripComboBox1 != null)\n\t\t\t{\n\t\t\t\tstring rs = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.#}\", si.FontSize);\n\t\t\t\tfontSizeToolStripComboBox1.Text = rs;\n\t\t\t}\n\t\t\tif (foreColorPicker1 != null)\n\t\t\t{\n\t\t\t\tforeColorPicker1.Text = si.Color.IsEmpty ? si.ColorText : ColorTranslator.ToHtml(si.Color);\n\t\t\t}\n\t\t\tif (backColorPicker1 != null)\n\t\t\t{\n\t\t\t\tbackColorPicker1.Text = si.BackgroundColor.IsEmpty ? si.BackgroundColorText : ColorTranslator.ToHtml(si.BackgroundColor);\n\t\t\t}\n\n\t\t\tbSuppressChange = false;\n\t\t}\n\n\t\tprivate void menuData_Popup(object sender, EventArgs ea)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tbool bEnable = false;\n\t\t\tif (mc != null && mc.DesignTab == DesignTabs.Design)\n\t\t\t\tbEnable = true;\n\n\t\t\tthis.dataSourcesToolStripMenuItem1.Enabled = this.dataSetsToolStripMenuItem.Enabled = this.embeddedImagesToolStripMenuItem.Enabled = bEnable;\n\t\t\tif (!bEnable)\n\t\t\t\treturn;\n\n\t\t\t// Run thru all the existing DataSets\n\t\t\tdataSetsToolStripMenuItem.DropDownItems.Clear();\n\t\t\tdataSetsToolStripMenuItem.DropDownItems.Add(new ToolStripMenuItem(Strings.RdlDesigner_menuData_Popup_New, null,\n\t\t\t\t\t\tnew EventHandler(this.dataSetsToolStripMenuItem_Click)));\n\n\t\t\tDesignXmlDraw draw = mc.DrawCtl;\n\t\t\tXmlNode rNode = draw.GetReportNode();\n\t\t\tXmlNode dsNode = draw.GetNamedChildNode(rNode, \"DataSets\");\n\t\t\tif (dsNode != null)\n\t\t\t{\n\t\t\t\tforeach (XmlNode dNode in dsNode)\n\t\t\t\t{\n\t\t\t\t\tif (dNode.Name != \"DataSet\")\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tXmlAttribute nAttr = dNode.Attributes[\"Name\"];\n\t\t\t\t\tif (nAttr == null)  // shouldn't really happen\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tdataSetsToolStripMenuItem.DropDownItems.Add(new ToolStripMenuItem(nAttr.Value, null,\n\t\t\t\t\t\tnew EventHandler(this.dataSetsToolStripMenuItem_Click)));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprivate void dataSourcesToolStripMenuItem1_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.StartUndoGroup(Strings.RdlDesigner_Undo_DataSourcesDialog);\n\t\t\tusing (DialogDataSources dlgDS = new DialogDataSources(mc.SourceFile, mc.DrawCtl))\n\t\t\t{\n\t\t\t\tdlgDS.StartPosition = FormStartPosition.CenterParent;\n\t\t\t\tDialogResult dr = dlgDS.ShowDialog();\n\t\t\t\tmc.Editor.EndUndoGroup(dr == DialogResult.OK);\n\t\t\t\tif (dr == DialogResult.OK)\n\t\t\t\t\tmc.Modified = true;\n\t\t\t}\n\t\t}\n\n\t\tprivate void dataSetsToolStripMenuItem_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null || mc.DrawCtl == null || mc.ReportDocument == null)\n\t\t\t\treturn;\n\n\t\t\tToolStripMenuItem menu = sender as ToolStripMenuItem;\n\t\t\tif (menu == null)\n\t\t\t\treturn;\n\t\t\tmc.Editor.StartUndoGroup(Strings.RdlDesigner_Undo_DataSetDialog);\n\n\t\t\tstring dsname = menu.Text;\n\n\t\t\t// Find the dataset we need\n\t\t\tList<XmlNode> ds = new List<XmlNode>();\n\t\t\tDesignXmlDraw draw = mc.DrawCtl;\n\t\t\tXmlNode rNode = draw.GetReportNode();\n\t\t\tXmlNode dsNode = draw.GetCreateNamedChildNode(rNode, \"DataSets\");\n\t\t\tXmlNode dataset = null;\n\n\t\t\t// find the requested dataset: the menu text equals the name of the dataset\n\t\t\tint dsCount = 0;        // count of the datasets\n\t\t\tstring onlyOneDsname = null;\n\t\t\tforeach (XmlNode dNode in dsNode)\n\t\t\t{\n\t\t\t\tif (dNode.Name != \"DataSet\")\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlAttribute nAttr = dNode.Attributes[\"Name\"];\n\t\t\t\tif (nAttr == null)  // shouldn't really happen\n\t\t\t\t\tcontinue;\n\t\t\t\tif (dsCount == 0)\n\t\t\t\t\tonlyOneDsname = nAttr.Value;        // we keep track of 1st name; \n\n\t\t\t\tdsCount++;\n\t\t\t\tif (nAttr.Value == dsname)\n\t\t\t\t\tdataset = dNode;\n\t\t\t}\n\n\t\t\tbool bNew = false;\n\t\t\tif (dataset == null)    // This must be the new menu item\n\t\t\t{\n\t\t\t\tdataset = draw.CreateElement(dsNode, \"DataSet\", null);  // create empty node\n\t\t\t\tbNew = true;\n\t\t\t}\n\t\t\tds.Add(dataset);\n\n\t\t\tusing (PropertyDialog pd = new PropertyDialog(mc.DrawCtl, ds, PropertyTypeEnum.DataSets))\n\t\t\t{\n\t\t\t\tDialogResult dr = pd.ShowDialog();\n\t\t\t\tif (pd.Changed || dr == DialogResult.OK)\n\t\t\t\t{\n\t\t\t\t\tif (dsCount == 1)\n\t\t\t\t\t// if we used to just have one DataSet we may need to fix up DataRegions \n\t\t\t\t\t//\tthat were defaulting to that name\n\t\t\t\t\t{\n\t\t\t\t\t\tdsCount = 0;\n\t\t\t\t\t\tbool bUseName = false;\n\t\t\t\t\t\tforeach (XmlNode dNode in dsNode)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (dNode.Name != \"DataSet\")\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\tXmlAttribute nAttr = dNode.Attributes[\"Name\"];\n\t\t\t\t\t\t\tif (nAttr == null)  // shouldn't really happen\n\t\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\t\tdsCount++;\n\t\t\t\t\t\t\tif (onlyOneDsname == nAttr.Value)\n\t\t\t\t\t\t\t\tbUseName = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (bUseName && dsCount > 1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tforeach (XmlNode drNode in draw.ReportNames.ReportItems)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tswitch (drNode.Name)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t// If a DataRegion doesn't have a dataset name specified use previous one\n\t\t\t\t\t\t\t\t\tcase \"Table\":\n\t\t\t\t\t\t\t\t\tcase \"List\":\n\t\t\t\t\t\t\t\t\tcase \"Matrix\":\n\t\t\t\t\t\t\t\t\tcase \"Chart\":\n\t\t\t\t\t\t\t\t\t\tXmlNode aNode = draw.GetNamedChildNode(drNode, \"DataSetName\");\n\t\t\t\t\t\t\t\t\t\tif (aNode == null)\n\t\t\t\t\t\t\t\t\t\t\tdraw.CreateElement(drNode, \"DataSetName\", onlyOneDsname);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tmc.Modified = true;\n\t\t\t\t}\n\t\t\t\telse if (bNew)  // if canceled and new DataSet get rid of temp node\n\t\t\t\t{\n\t\t\t\t\tdsNode.RemoveChild(dataset);\n\t\t\t\t}\n\t\t\t\tif (pd.Delete)  // user must have hit a delete button for this to get set\n\t\t\t\t\tdsNode.RemoveChild(dataset);\n\n\t\t\t\tif (!dsNode.HasChildNodes)      // If no dataset exists we remove DataSets\n\t\t\t\t\tdraw.RemoveElement(rNode, \"DataSets\");\n\n\t\t\t\tmc.Editor.EndUndoGroup(pd.Changed || dr == DialogResult.OK);\n\t\t\t}\n\t\t}\n\n\t\tprivate void embeddedImagesToolStripMenuItem_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.StartUndoGroup(Strings.RdlDesigner_Undo_EmbeddedImagesDialog);\n\t\t\tusing (DialogEmbeddedImages dlgEI = new DialogEmbeddedImages(mc.DrawCtl))\n\t\t\t{\n\t\t\t\tdlgEI.StartPosition = FormStartPosition.CenterParent;\n\t\t\t\tDialogResult dr = dlgEI.ShowDialog();\n\t\t\t\tmc.Editor.EndUndoGroup(dr == DialogResult.OK);\n\t\t\t\tif (dr == DialogResult.OK)\n\t\t\t\t\tmc.Modified = true;\n\t\t\t}\n\t\t}\n\n\t\tprivate void menuFileNewDataSourceRef_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tusing (DialogDataSourceRef dlgDS = new DialogDataSourceRef())\n\t\t\t{\n\t\t\t\tdlgDS.StartPosition = FormStartPosition.CenterParent;\n\t\t\t\tdlgDS.ShowDialog();\n\t\t\t\tif (dlgDS.DialogResult == DialogResult.Cancel)\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tprivate async void menuFileNewReport_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tusing (DialogDatabase dlgDB = new DialogDatabase(this))\n\t\t\t{\n\t\t\t\tdlgDB.StartPosition = FormStartPosition.CenterParent;\n\t\t\t\t//dlgDB.FormBorderStyle = FormBorderStyle.SizableToolWindow;\n\n\t\t\t\t// show modally\n\t\t\t\tdlgDB.ShowDialog();\n\t\t\t\tif (dlgDB.DialogResult == DialogResult.Cancel)\n\t\t\t\t\treturn;\n\t\t\t\tstring rdl = dlgDB.ResultReport;\n\n\t\t\t\t// Create the MDI child using the RDL syntax the wizard generates\n\t\t\t\tMDIChild mc = await CreateMDIChildAsync(null, rdl, false);\n\t\t\t\tmc.Modified = true;\n\t\t\t\t// Force building of report names for new reports\n\t\t\t\tif (mc.DrawCtl.ReportNames == null) { }\n\t\t\t}\n\t\t}\n\n\t\tprivate void menuFilePrint_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (printChild != null)         // already printing\n\t\t\t{\n\t\t\t\tMessageBox.Show(Strings.RdlDesigner_Show_PrintOneFile, Strings.RdlDesigner_Show_RDLDesign);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tprintChild = mc;\n\n\t\t\tPrintDocument pd = new PrintDocument();\n\t\t\tpd.DocumentName = mc.SourceFile.LocalPath;\n\t\t\tpd.PrinterSettings.FromPage = 1;\n\t\t\tpd.PrinterSettings.ToPage = mc.PageCount;\n\t\t\tpd.PrinterSettings.MaximumPage = mc.PageCount;\n\t\t\tpd.PrinterSettings.MinimumPage = 1;\n\t\t\tpd.DefaultPageSettings.Landscape = mc.PageWidth > mc.PageHeight ? true : false;\n\n\t\t\t// Set the paper size.\n\t\t\tif (mc.SourceRdl != null)\n\t\t\t{\n\t\t\t\tSystem.Xml.XmlDocument docxml = new System.Xml.XmlDocument();\n\t\t\t\tdocxml.LoadXml(mc.SourceRdl);\n\n\t\t\t\tfloat height = 11;\n\t\t\t\tfloat width = 8.5f;\n\t\t\t\tXmlNodeList heightList = docxml.GetElementsByTagName(\"PageHeight\");\n\t\t\t\tfor (int i = 0; i < heightList.Count; i++)\n\t\t\t\t{\n\t\t\t\t\theight = Conversions.MeasurementTypeAsHundrethsOfAnInch(heightList[i].InnerText);\n\t\t\t\t}\n\n\t\t\t\tXmlNodeList widthList = docxml.GetElementsByTagName(\"PageWidth\");\n\t\t\t\tfor (int i = 0; i < widthList.Count; i++)\n\t\t\t\t{\n\t\t\t\t\twidth = Conversions.MeasurementTypeAsHundrethsOfAnInch(widthList[i].InnerText);\n\t\t\t\t}\n\n\t\t\t\tpd.DefaultPageSettings.PaperSize = new PaperSize(\"Custom\", (int)width, (int)height);\n\t\t\t}\n\t\t\tusing (PrintDialog dlg = new PrintDialog())\n\t\t\t{\n\t\t\t\tdlg.Document = pd;\n\t\t\t\tdlg.AllowSelection = true;\n\t\t\t\tdlg.AllowSomePages = true;\n\t\t\t\tif (dlg.ShowDialog() == DialogResult.OK)\n\t\t\t\t{\n\t\t\t\t\ttry\n\t\t\t\t\t{\n\t\t\t\t\t\tif (pd.PrinterSettings.PrintRange == PrintRange.Selection)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpd.PrinterSettings.FromPage = mc.PageCurrent;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmc.Print(pd);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (Exception ex)\n\t\t\t\t\t{\n\t\t\t\t\t\tMessageBox.Show(Strings.RdlDesigner_Show_PrintError + ex.Message, Strings.RdlDesigner_Show_RDLDesign);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tprintChild = null;\n\t\t\t}\n\t\t}\n\n\t\tprivate void menuFileSave_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tif (!mc.FileSave())\n\t\t\t\treturn;\n\n\t\t\tif (this.SavedFileEvent != null)\n\t\t\t{\n\t\t\t\tthis.SavedFileEvent(this, new RdlDesignerSavedFileEvent(mc.SourceFile));\n\t\t\t}\n\n\t\t\tNoteRecentFiles(mc.SourceFile, true);\n\n\t\t\tif (mc.Editor != null)\n\t\t\t\tmc.Editor.ClearUndo();\n\n\t\t\treturn;\n\t\t}\n\n\t\tprivate async void exportToolStripMenuItemCsv_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n            \n            await ShowSaveInProgressAsync(mc.Tab.Text,async () => {\n                await mc.ExportAsync(Rdl.OutputPresentationType.CSV);\n            });\n\t\t}\n\n\t\tprivate async void exportToolStripMenuItemExcel_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n            \n            await ShowSaveInProgressAsync(mc.Tab.Text,async () => {\n                await mc.ExportAsync(Rdl.OutputPresentationType.ExcelTableOnly);\n            });\n\t\t}\n\n\t\tprivate async void exportToolStripMenuItemRtf_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n            await ShowSaveInProgressAsync(mc.Tab.Text,async () => {\n                await mc.ExportAsync(Rdl.OutputPresentationType.RTF);\n            });\n\t\t}\n\n\t\tprivate async void exportToolStripMenuItemXml_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n            await ShowSaveInProgressAsync(mc.Tab.Text,async () => {\n                await mc.ExportAsync(Rdl.OutputPresentationType.XML);\n            });\n\t\t}\n\n\t\tprivate async void exportToolStripMenuItemHtml_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n            \n            await ShowSaveInProgressAsync(mc.Tab.Text,async () => {\n                await mc.ExportAsync(Rdl.OutputPresentationType.HTML);\n            });\n\t\t}\n\n\t\tprivate async void exportToolStripMenuItemMHtml_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n            await ShowSaveInProgressAsync(mc.Tab.Text,async () => {\n                await mc.ExportAsync(Rdl.OutputPresentationType.MHTML);\n            });\n\t\t}\n\n\t\tprivate async void exportToolStripMenuItemPdf_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tawait PdfExportAsync(false);\n\t\t}\n\n\t\tprivate async Task PdfExportAsync(bool oldStyle)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n            await ShowSaveInProgressAsync(mc.Tab.Text,async () => {\n\t\t\t    if (oldStyle)\n\t\t\t    {\n\t\t\t\t    await mc.ExportAsync(Rdl.OutputPresentationType.PDFOldStyle);\n\t\t\t    }\n\t\t\t    else\n\t\t\t    {\n\t\t\t\t    await mc.ExportAsync(Rdl.OutputPresentationType.PDF);\n\t\t\t    }\n            });\n\t\t}\n\n\t\tprivate async void exportToolStripMenuItemTif_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n            await ShowSaveInProgressAsync(mc.Tab.Text,async () => {\n                await mc.ExportAsync(Rdl.OutputPresentationType.TIF);\n            });\n\t\t}\n\n\t\tprivate void menuFileSaveAs_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tif (!mc.FileSaveAs())\n\t\t\t\treturn;\n\n\t\t\tmc.Viewer.Folder = Path.GetDirectoryName(mc.SourceFile.LocalPath);\n\t\t\tmc.Viewer.ReportName = Path.GetFileNameWithoutExtension(mc.SourceFile.LocalPath);\n\t\t\tmc.Text = Path.GetFileName(mc.SourceFile.LocalPath);\n\n\n\t\t\tif (this.SavedFileEvent != null)\n\t\t\t{\n\t\t\t\tthis.SavedFileEvent(this, new RdlDesignerSavedFileEvent(mc.SourceFile));\n\t\t\t}\n\n\t\t\tNoteRecentFiles(mc.SourceFile, true);\n\n\t\t\tif (mc.Editor != null)\n\t\t\t\tmc.Editor.ClearUndo();\n\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void menuEdit_Popup(object sender, EventArgs ea)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\t// These menus require an MDIChild in order to work\n\t\t\tRdlEditPreview e = mc == null ? null : mc.RdlEditor;\n\t\t\tbool bNotPreview = true;\n\n\t\t\tforeach (object a in this.editToolStripMenuItem.DropDownItems)\n\t\t\t{\n\t\t\t\tif (a.GetType() == typeof(ToolStripMenuItem))\n\t\t\t\t{\n\t\t\t\t\t((ToolStripMenuItem)a).Enabled = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (e == null || e.DesignTab != DesignTabs.Edit)\n\t\t\t{\n\t\t\t\tundoToolStripMenuItem.Text = e == null ? Strings.RdlDesigner_menuEdit_Popup_Undo : Strings.RdlDesigner_menuEdit_Popup_Undo + \" \" + e.UndoDescription;\n\t\t\t\tif (e != null && e.DesignTab == DesignTabs.Preview)\n\t\t\t\t{\n\t\t\t\t\tbNotPreview = false;\n\t\t\t\t\tundoToolStripMenuItem.Enabled = true;\n\t\t\t\t\tcutToolStripMenuItem.Enabled = true;\n\t\t\t\t\tcopyToolStripMenuItem.Enabled = true;\n\t\t\t\t\tpasteToolStripMenuItem.Enabled = true;\n\t\t\t\t\tdeleteToolStripMenuItem.Enabled = true;\n\t\t\t\t\tfindToolStripMenuItem.Enabled = true;\n\t\t\t\t\tselectAllToolStripMenuItem.Enabled = true;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tundoToolStripMenuItem.Enabled = true;\n\t\t\t\t\tcutToolStripMenuItem.Enabled = true;\n\t\t\t\t\tcopyToolStripMenuItem.Enabled = true;\n\t\t\t\t\tpasteToolStripMenuItem.Enabled = true;\n\t\t\t\t\tdeleteToolStripMenuItem.Enabled = true;\n\t\t\t\t\tselectAllToolStripMenuItem.Enabled = true;\n\t\t\t\t}\n\n\n\n\t\t\t\tif (mc == null || e == null)\n\t\t\t\t{\n\t\t\t\t\tundoToolStripMenuItem.Enabled = redoToolStripMenuItem.Enabled =\n\t\t\t\t\t\tcutToolStripMenuItem.Enabled = copyToolStripMenuItem.Enabled =\n\t\t\t\t\t\tpasteToolStripMenuItem.Enabled = deleteToolStripMenuItem.Enabled =\n\t\t\t\t\t\tselectAllToolStripMenuItem.Enabled =\n\t\t\t\t\t\tfindToolStripMenuItem.Enabled = false;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tundoToolStripMenuItem.Text = Strings.RdlDesigner_menuEdit_Popup_Undo;\n\t\t\t\tundoToolStripMenuItem.Enabled = true;\n\t\t\t\tredoToolStripMenuItem.Enabled = true;\n\t\t\t\tcutToolStripMenuItem.Enabled = true;\n\t\t\t\tcopyToolStripMenuItem.Enabled = true;\n\t\t\t\tpasteToolStripMenuItem.Enabled = true;\n\t\t\t\tdeleteToolStripMenuItem.Enabled = true;\n\t\t\t\tselectAllToolStripMenuItem.Enabled = true;\n\t\t\t\tfindToolStripMenuItem.Enabled = true;\n\t\t\t\tfindNextToolStripMenuItem.Enabled = true;\n\t\t\t\treplaceToolStripMenuItem.Enabled = true;\n\t\t\t\tgoToToolStripMenuItem.Enabled = true;\n\t\t\t\tformatXMLToolStripMenuItem.Enabled = true;\n\n\t\t\t\tbool bAnyText = e.Text.Length > 0;          // any text to search at all?\n\t\t\t\tfindToolStripMenuItem.Enabled = findNextToolStripMenuItem.Enabled =\n\t\t\t\t\treplaceToolStripMenuItem.Enabled = goToToolStripMenuItem.Enabled = bAnyText;\n\t\t\t}\n\t\t\tundoToolStripMenuItem.Enabled = e.CanUndo && bNotPreview;\n\t\t\tredoToolStripMenuItem.Enabled = e.CanRedo && bNotPreview;\n\t\t\tbool bSelection = e.SelectionLength > 0;    // any text selected?\n\t\t\tcutToolStripMenuItem.Enabled = bSelection && bNotPreview;\n\t\t\tcopyToolStripMenuItem.Enabled = bSelection;\n\t\t\tpasteToolStripMenuItem.Enabled = Clipboard.GetDataObject().GetDataPresent(DataFormats.Text) && bNotPreview;\n\t\t\tdeleteToolStripMenuItem.Enabled = bSelection && bNotPreview;\n\t\t\tselectAllToolStripMenuItem.Enabled = bNotPreview;\n\n\t\t}\n\n\t\tprivate void menuEditUndo_Click(object sender, System.EventArgs ea)\n\t\t{\n\t\t\tif (this.ctlEditTextbox != null && ctlEditTextbox.Focused)\n\t\t\t{\n\t\t\t\tctlEditTextbox.Undo();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tRdlEditPreview e = GetEditor();\n\t\t\tif (e == null)\n\t\t\t\treturn;\n\n\t\t\tif (e.CanUndo == true)\n\t\t\t{\n\t\t\t\te.Undo();\n\n\t\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\t\tif (mc != null && mc.DesignTab == DesignTabs.Design)\n\t\t\t\t{\n\t\t\t\t\te.DesignCtl.SetScrollControls();\n\t\t\t\t}\n\t\t\t\tthis.SelectionChanged(this, new EventArgs());\n\t\t\t}\n\t\t}\n\n\t\tprivate void menuEditRedo_Click(object sender, System.EventArgs ea)\n\t\t{\n\t\t\tRdlEditPreview e = GetEditor();\n\t\t\tif (e == null)\n\t\t\t\treturn;\n\n\t\t\tif (e.CanRedo == true)\n\t\t\t{\n\t\t\t\te.Redo();\n\t\t\t}\n\t\t}\n\n\t\tprivate void menuEditCut_Click(object sender, System.EventArgs ea)\n\t\t{\n\t\t\tif (this.ctlEditTextbox != null && ctlEditTextbox.Focused)\n\t\t\t{\n\t\t\t\tctlEditTextbox.Cut();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tRdlEditPreview e = GetEditor();\n\t\t\tif (e == null)\n\t\t\t\treturn;\n\n\t\t\tif (e.SelectionLength > 0)\n\t\t\t\te.Cut();\n\t\t}\n\n\t\tprivate void menuEditCopy_Click(object sender, System.EventArgs ea)\n\t\t{\n\t\t\tif (this.ctlEditTextbox != null && ctlEditTextbox.Focused)\n\t\t\t{\n\t\t\t\tctlEditTextbox.Copy();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tRdlEditPreview e = mc.RdlEditor;\n\t\t\tif (e == null)\n\t\t\t\treturn;\n\n\t\t\tif (e.SelectionLength > 0)\n\t\t\t\te.Copy();\n\t\t}\n\n\t\tprivate void menuEditPaste_Click(object sender, System.EventArgs ea)\n\t\t{\n\t\t\tif (this.ctlEditTextbox != null && ctlEditTextbox.Focused)\n\t\t\t{\n\t\t\t\tctlEditTextbox.Paste();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tRdlEditPreview e = GetEditor();\n\t\t\tif (e == null)\n\t\t\t\treturn;\n\n\t\t\tif (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text) == true ||\n\t\t\t\tClipboard.GetDataObject().GetDataPresent(DataFormats.Bitmap) == true)\n\t\t\t\te.Paste();\n\t\t}\n\n\t\tprivate void menuEditDelete_Click(object sender, System.EventArgs ea)\n\t\t{\n\t\t\tRdlEditPreview e = GetEditor();\n\t\t\tif (e == null)\n\t\t\t\treturn;\n\n\t\t\tif (e.SelectionLength > 0)\n\t\t\t\te.SelectedText = \"\";\n\t\t}\n\n\t\tprivate void menuEditProperties_Click(object sender, System.EventArgs ea)\n\t\t{\n\t\t\t//RdlEditPreview e = GetEditor();\n\t\t\t//if (e == null)\n\t\t\t//    return;\n\n\t\t\t//e.DesignCtl.menuProperties_Click();\n\t\t\tShowProperties(!_ShowProperties);\n\t\t}\n\n\t\tinternal void ShowProperties(bool bShow)\n\t\t{\n\t\t\t_ShowProperties = bShow;\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null || !_ShowProperties || mc.DesignTab != DesignTabs.Design)\n\t\t\t\tmainProperties.ResetSelection(null, null);\n\t\t\telse\n\t\t\t\tmainProperties.ResetSelection(mc.RdlEditor.DrawCtl, mc.RdlEditor.DesignCtl);\n\n\t\t\tif (mc != null && !_ShowProperties)\n\t\t\t\tmc.SetFocus();\n\t\t\tmainProperties.Visible = mainSP.Visible = _ShowProperties;\n\t\t\tpropertiesWindowsToolStripMenuItem.Checked = _ShowProperties;\n\t\t}\n\n\t\tprivate void menuEditSelectAll_Click(object sender, System.EventArgs ea)\n\t\t{\n\t\t\tif (this.ctlEditTextbox != null && ctlEditTextbox.Focused)\n\t\t\t{\n\t\t\t\tctlEditTextbox.SelectAll();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tRdlEditPreview e = GetEditor();\n\t\t\tif (e == null)\n\t\t\t\treturn;\n\n\t\t\te.SelectAll();\n\t\t}\n\n\t\tprivate async void menuEditFind_Click(object sender, System.EventArgs ea)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\t// These menus require an MDIChild in order to work\n\t\t\tRdlEditPreview e = mc == null ? null : mc.RdlEditor;\n\n\t\t\tif (e == null)\n\t\t\t\treturn;\n\t\t\tif (e.DesignTab == DesignTabs.Preview)\n\t\t\t{\n\t\t\t\tif (!e.PreviewCtl.ShowFindPanel)\n\t\t\t\t\te.PreviewCtl.ShowFindPanel = true;\n\t\t\t\tawait e.PreviewCtl.FindNext();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tFindTab tab = e.FindTab;\n\t\t\t\tif (tab == null)\n\t\t\t\t\ttab = new FindTab(e);\n\t\t\t\ttab.tcFRG.SelectedTab = tab.tabFind;\n\t\t\t\ttab.Show();\n\t\t\t}\n\t\t}\n\n\t\tprivate void menuEditFindNext_Click(object sender, System.EventArgs ea)\n\t\t{\n\t\t\tRdlEditPreview e = GetEditor();\n\t\t\tif (e == null)\n\t\t\t\treturn;\n\n\t\t\tFindTab tab = e.FindTab;\n\t\t\tif (tab == null)\n\t\t\t\ttab = new FindTab(e);\n\n\t\t\ttab.tcFRG.SelectedTab = tab.tabFind;\n\t\t\ttab.Show();\n\t\t\ttab.FindNextClick();\n\t\t}\n\n\t\tprivate void menuEdit_FormatXml(object sender, System.EventArgs ea)\n\t\t{\n\t\t\tRdlEditPreview e = GetEditor();\n\t\t\tif (e == null)\n\t\t\t\treturn;\n\n\t\t\tif (e.Text.Length > 0)\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\te.Text = DesignerUtility.FormatXml(e.Text);\n\t\t\t\t}\n\t\t\t\tcatch (Exception ex)\n\t\t\t\t{\n\t\t\t\t\tMessageBox.Show(ex.Message, Strings.RdlDesigner_Showl_FormatXML);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprivate void menuEditReplace_Click(object sender, System.EventArgs ea)\n\t\t{\n\t\t\tRdlEditPreview e = GetEditor();\n\t\t\tif (e == null)\n\t\t\t\treturn;\n\n\t\t\tFindTab tab = e.FindTab;\n\t\t\tif (tab == null)\n\t\t\t\ttab = new FindTab(e);\n\n\t\t\ttab.tcFRG.SelectedTab = tab.tabReplace;\n\t\t\ttab.Show();\n\t\t\ttab.Focus();\n\t\t}\n\n\t\tprivate void menuEditGoto_Click(object sender, System.EventArgs ea)\n\t\t{\n\t\t\tRdlEditPreview e = GetEditor();\n\t\t\tif (e == null)\n\t\t\t\treturn;\n\n\t\t\tFindTab tab = e.FindTab;\n\t\t\tif (tab == null)\n\t\t\t\ttab = new FindTab(e);\n\n\t\t\ttab.tcFRG.SelectedTab = tab.tabGoTo;\n\t\t\ttab.Show();\n\t\t\ttab.Focus();\n\t\t}\n\n\t\tprivate void menuHelpAbout_Click(object sender, System.EventArgs ea)\n\t\t{\n\t\t\tusing (DialogAbout dlg = new DialogAbout())\n\t\t\t{\n\t\t\t\tdlg.ShowDialog();\n\t\t\t}\n\t\t}\n\n\t\tprivate void menuHelpHelp_Click(object sender, System.EventArgs ea)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tSystem.Diagnostics.Process.Start(HelpUrl);\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\tMessageBox.Show(ex.Message + \"\\n\\n\" + Strings.RdlDesigner_Show_ResettingHelpURL, Strings.RdlDesigner_Show_HelpURLInvalid);\n\t\t\t\t_HelpUrl = DefaultHelpUrl;\n\t\t\t}\n\t\t}\n\n\t\tprivate void menuHelpSupport_Click(object sender, System.EventArgs ea)\n\t\t{\n\t\t\ttry\n\t\t\t{\n                using var p = new System.Diagnostics.Process()\n                {\n                    StartInfo = new ProcessStartInfo()\n                    {\n                        FileName = SupportUrl,\n                        UseShellExecute = true\n                    }\n                };\n                p.Start();\n\n            }\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\tMessageBox.Show(ex.Message + \"\\n\\n\" + Strings.RdlDesigner_Show_ResettingSupportURL, Strings.RdlDesigner_Show_SupportURLInvalid);\n\t\t\t\t_SupportUrl = DefaultSupportUrl;\n\t\t\t}\n\t\t}\n\n\t\tinternal RdlEditPreview GetEditor()\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn null;\n\t\t\treturn mc.Editor;\n\t\t}\n\n\t\tprivate void menuTools_Popup(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_ServerProcess != null && _ServerProcess.HasExited)\n\t\t\t\t_ServerProcess = null;\n\t\t\tstartDesktopServerToolStripMenuItem.Text = this._ServerProcess == null ? Strings.RdlDesigner_menuTools_Popup_StartDesktop : Strings.RdlDesigner_menuTools_Popup_StopDesktop;\n\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tthis.validateRDLToolStripMenuItem.Enabled = (mc != null && mc.DesignTab == DesignTabs.Edit);\n\t\t}\n\n\t\tprivate void menuToolsProcess_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_ServerProcess == null)\n\t\t\t\tmenuToolsStartProcess(true);\n\t\t\telse\n\t\t\t\tmenuToolsCloseProcess(true);\n\t\t}\n\n\t\tinternal void menuToolsStartProcess(bool bMsg)\n\t\t{\n\t\t\tif (_ServerProcess != null && !_ServerProcess.HasExited)\n\t\t\t\treturn;\n\n\t\t\tstring pswd = GetPassword();\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\tstring filename = string.Format(\"{0}{1}\",\n\t\t\t\t\tAppDomain.CurrentDomain.BaseDirectory, \"RdlDesktop.exe\");\n\n\t\t\t\tProcessStartInfo psi = new ProcessStartInfo(filename);\n\t\t\t\tif (pswd != null)\n\t\t\t\t\tpsi.Arguments = \"/p\" + pswd;\n\t\t\t\tpsi.RedirectStandardError = psi.RedirectStandardInput = psi.RedirectStandardOutput = true;\n\t\t\t\tpsi.UseShellExecute = false;\n\t\t\t\t//psi.WindowStyle = ProcessWindowStyle.Hidden;\n\t\t\t\tpsi.CreateNoWindow = true;\n\t\t\t\t_ServerProcess = Process.Start(psi);\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\tif (bMsg)\n\t\t\t\t\tMessageBox.Show(ex.Message, Strings.RdlDesigner_Show_UnableStartDesktop);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tinternal void menuToolsCloseProcess(bool bMsg)\n\t\t{\n\t\t\tif (_ServerProcess == null)\n\t\t\t\treturn;\n\t\t\tif (!_ServerProcess.HasExited)\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\t_ServerProcess.StandardInput.WriteLine(\"x\");    // x stops the server\n\t\t\t\t}\n\t\t\t\tcatch (Exception ex)\n\t\t\t\t{\n\t\t\t\t\tif (bMsg)\n\t\t\t\t\t\tMessageBox.Show(ex.Message, Strings.RdlDesigner_Show_ErrorStopProcess);\n\t\t\t\t}\n\t\t\t}\n\t\t\t_ServerProcess = null;\n\t\t}\n\n\t\tprivate void menuToolsOptions_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tstring SaveUnits = MeasureUnits;\n\t\t\tusing (DialogToolOptions dlg = new DialogToolOptions(this))\n\t\t\t{\n\t\t\t\tDialogResult rc = dlg.ShowDialog();\n\t\t\t\tif (SaveUnits != MeasureUnits)\n\t\t\t\t{\n\t\t\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\t\t\tif (mc == null)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (mc.Editor == null)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tmc.Editor.DesignCtl._DrawPanel.Invalidate();\n\t\t\t\t\tmc.Editor.dcTopRuler.Invalidate();\n\t\t\t\t\tmc.Editor.dcLeftRuler.Invalidate();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprivate void menuToolsValidateSchema_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (_ValidateRdl == null)\n\t\t\t{\n\t\t\t\t_ValidateRdl = new DialogValidateRdl(this);\n\t\t\t\t_ValidateRdl.Show();\n\t\t\t}\n\t\t\telse\n\t\t\t\t_ValidateRdl.BringToFront();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal void ValidateSchemaClosing()\n\t\t{\n\t\t\tthis._ValidateRdl = null;\n\t\t}\n\n\t\tprivate void menuWnd_Popup(object sender, EventArgs e)\n\t\t{\n\t\t\t// These menus require an MDIChild in order to work\n\t\t\tbool bEnable = this.MdiChildren.Length > 0 ? true : false;\n\n\t\t\tcascadeToolStripMenuItem.Enabled = bEnable;\n\t\t\ttileToolStripMenuItem.Enabled = bEnable;\n\t\t\tcloseAllToolStripMenuItem.Enabled = bEnable;\n\t\t}\n\n\t\tprivate void menuWndCascade_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tthis.LayoutMdi(MdiLayout.Cascade);\n\t\t}\n\n\t\tprivate void menuWndCloseAll_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tforeach (Form f in this.MdiChildren)\n\t\t\t{\n\t\t\t\tf.Close();\n\t\t\t}\n\t\t}\n\n\t\tprivate void menuWndCloseAllButCurrent_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tforeach (Form f in this.MdiChildren)\n\t\t\t{\n\t\t\t\tif (mc == f as MDIChild)\n\t\t\t\t\tcontinue;\n\t\t\t\tf.Close();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void menuWndTileH_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tthis.LayoutMdi(MdiLayout.TileHorizontal);\n\t\t}\n\n\t\tprivate void menuWndTileV_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tthis.LayoutMdi(MdiLayout.TileVertical);\n\t\t}\n\n\t\tprivate async void menuRecentItem_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tToolStripMenuItem m = (ToolStripMenuItem)sender;\n\n\t\t\tint si = m.Text.IndexOf(\" \");\n\t\t\tUri file = new Uri(m.Text.Substring(si + 1));\n\n\t\t\tawait CreateMDIChildAsync(file, null, true);\n\t\t}\n\n\t\tprivate void RdlDesigner_Closing(object sender, System.ComponentModel.CancelEventArgs e)\n\t\t{\n\t\t\tSaveStartupState();\n\t\t\tmenuToolsCloseProcess(false);\n\t\t\tCleanupTempFiles();\n\t\t}\n\n\t\tprivate void NoteRecentFiles(Uri name, bool bResetMenu)\n\t\t{\n\t\t\tif (name == null)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (_RecentFiles.ContainsValue(name.LocalPath))\n\t\t\t{   // need to move it to top of list; so remove old one\n\t\t\t\tint loc = _RecentFiles.IndexOfValue(name.LocalPath);\n\t\t\t\t_RecentFiles.RemoveAt(loc);\n\t\t\t}\n\t\t\tif (_RecentFiles.Count >= _RecentFilesMax)\n\t\t\t{\n\t\t\t\t_RecentFiles.RemoveAt(0);   // remove the first entry\n\t\t\t}\n\t\t\t_RecentFiles.Add(DateTime.Now, name.LocalPath);\n\t\t\tif (bResetMenu)\n\t\t\t{\n\t\t\t\tRecentFilesMenu();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tinternal void RecentFilesMenu()\n\t\t{\n\n\t\t\trecentFilesToolStripMenuItem.DropDownItems.Clear();\n\t\t\tint mi = 1;\n\t\t\tfor (int i = _RecentFiles.Count - 1; i >= 0; i--)\n\t\t\t{\n\t\t\t\tstring menuText = string.Format(\"&{0} {1}\", mi++, _RecentFiles.Values[i]);\n\t\t\t\tToolStripMenuItem m = new ToolStripMenuItem(menuText);\n\t\t\t\tm.Click += new EventHandler(this.menuRecentItem_Click);\n\t\t\t\trecentFilesToolStripMenuItem.DropDownItems.Add(m);\n\t\t\t}\n\t\t}\n\n\t\tinternal void ResetPassword()\n\t\t{\n\t\t\tbGotPassword = false;\n\t\t\t_DataSourceReferencePassword = null;\n\t\t}\n\n\t\tinternal string GetPassword()\n\t\t{\n\t\t\tif (bGotPassword)\n\t\t\t\treturn _DataSourceReferencePassword;\n\n\t\t\tusing (DataSourcePassword dlg = new DataSourcePassword())\n\t\t\t{\n\t\t\t\tDialogResult rc = dlg.ShowDialog();\n\t\t\t\tbGotPassword = true;\n\t\t\t\tif (rc == DialogResult.OK)\n\t\t\t\t\t_DataSourceReferencePassword = dlg.PassPhrase;\n\n\t\t\t\treturn _DataSourceReferencePassword;\n\t\t\t}\n\t\t}\n\n\t\tprivate async Task GetStartupStateAsync()\n\t\t{\n\t\t\t_RecentFiles = new SortedList<DateTime, string>();\n\t\t\t_CurrentFiles = new List<Uri>();\n\t\t\t_HelpUrl = DefaultHelpUrl;              // set as default\n\t\t\t_SupportUrl = DefaultSupportUrl;\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\tXmlDocument xDoc = new XmlDocument();\n\t\t\t\txDoc.PreserveWhitespace = false;\n                #if NET6_0_OR_GREATER\n                string xml = await System.IO.File.ReadAllTextAsync(optFileName);\n                #else\n                string xml = System.IO.File.ReadAllText(optFileName);\n                #endif\n\t\t\t\txDoc.LoadXml(xml);\n\t\t\t\tXmlNode xNode;\n\t\t\t\txNode = xDoc.SelectSingleNode(\"//designerstate\");\n\n\t\t\t\tstring[] args = Environment.GetCommandLineArgs();\n\t\t\t\tfor (int i = 1; i < args.Length; i++)\n\t\t\t\t{\n\t\t\t\t\tstring larg = args[i].ToLower();\n\t\t\t\t\tif (larg == \"/m\" || larg == \"-m\")\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tif (File.Exists(args[i]))           // only add it if it exists\n\t\t\t\t\t{\n\t\t\t\t\t\t_CurrentFiles.Add(new Uri(args[i]));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Loop thru all the child nodes\n\t\t\t\tforeach (XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase \"RecentFiles\":\n\t\t\t\t\t\t\tDateTime now = DateTime.Now;\n\t\t\t\t\t\t\tnow = now.Subtract(new TimeSpan(0, 1, 0, 0, 0));    // subtract an hour\n\t\t\t\t\t\t\tforeach (XmlNode xN in xNodeLoop.ChildNodes)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tUri file = new Uri(xN.InnerText.Trim());\n\t\t\t\t\t\t\t\tif (File.Exists(file.LocalPath)) // only add it if it exists \t\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t_RecentFiles.Add(now, file.LocalPath);\n\t\t\t\t\t\t\t\t\tnow = now.AddSeconds(1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"RecentFilesMax\":\n\t\t\t\t\t\t\ttry\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tthis._RecentFilesMax = Convert.ToInt32(xNodeLoop.InnerText);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcatch\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tthis._RecentFilesMax = 5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"CurrentFiles\":\n\t\t\t\t\t\t\tif (_CurrentFiles.Count > 0)    // don't open other current files if opened with argument\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tforeach (XmlNode xN in xNodeLoop.ChildNodes)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tUri file = new Uri(xN.InnerText.Trim());\n\t\t\t\t\t\t\t\tif (File.Exists(file.LocalPath)) // only add it if it exists \n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t_CurrentFiles.Add(file);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"Toolbar\":\n\t\t\t\t\t\t\t_Toolbar = new List<string>();\n\t\t\t\t\t\t\tforeach (XmlNode xN in xNodeLoop.ChildNodes)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstring item = xN.InnerText.Trim();\n\t\t\t\t\t\t\t\t_Toolbar.Add(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"Help\":\n\t\t\t\t\t\t\tif (xNodeLoop.InnerText.Length > 0)     //empty means to use the default\n\t\t\t\t\t\t\t\t_HelpUrl = xNodeLoop.InnerText;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"Support\":\n\t\t\t\t\t\t\tif (xNodeLoop.InnerText.Length > 0)     //empty means to use the default\n\t\t\t\t\t\t\t\t_SupportUrl = xNodeLoop.InnerText;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"EditLines\":\n\t\t\t\t\t\t\t_ShowEditLines = (xNodeLoop.InnerText.ToLower() == \"true\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"ShowPreviewWaitDialog\":\n\t\t\t\t\t\t\t_ShowPreviewWaitDialog = (xNodeLoop.InnerText.ToLower() == \"true\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"OutlineReportItems\":\n\t\t\t\t\t\t\tthis.ShowReportItemOutline = (xNodeLoop.InnerText.ToLower() == \"true\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"ShowTabbedInterface\":\n\t\t\t\t\t\t\tthis._ShowTabbedInterface = (xNodeLoop.InnerText.ToLower() == \"true\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"PropertiesLocation\":\n\t\t\t\t\t\t\tthis._PropertiesLocation = GetPropertiesDockStyle(xNodeLoop.InnerText);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"PropertiesAutoHide\":\n\t\t\t\t\t\t\tthis._PropertiesAutoHide = (xNodeLoop.InnerText.ToLower() == \"true\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"XmlNewLine\":\n\t\t\t\t\t\t\tif (Enum.TryParse<NewLineChar>(xNodeLoop.InnerText, out NewLineChar newLine))\n\t\t\t\t\t\t\t\tthis._XmlNewLine = newLine;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"MapSubtypes\":\n\t\t\t\t\t\t\tRdlDesigner.MapSubtypes = xNodeLoop.InnerText.Split(new char[] { ',' });\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"CustomColors\":\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"units\":\n\t\t\t\t\t\t\tMeasureUnits = xNodeLoop.InnerText;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{       // Didn't sucessfully get the startup state but don't really care\n\t\t\t\tConsole.WriteLine(string.Format(\"Exception in GetStartupState ignored.\\n{0}\\n{1}\", ex.Message, ex.StackTrace));\n\t\t\t}\n\n\t\t\tif (_Toolbar == null)       // Use this as the default toolbar\n\t\t\t\t_Toolbar = this.ToolbarDefault;\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void SaveStartupState()\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tint[] colors = GetCustomColors();       // get custom colors\n\n\t\t\t\tXmlDocument xDoc = new XmlDocument();\n\t\t\t\tXmlProcessingInstruction xPI;\n\t\t\t\txPI = xDoc.CreateProcessingInstruction(\"xml\", \"version='1.0' encoding='UTF-8'\");\n\t\t\t\txDoc.AppendChild(xPI);\n\n\t\t\t\tXmlNode xDS = xDoc.CreateElement(\"designerstate\");\n\t\t\t\txDoc.AppendChild(xDS);\n\n\t\t\t\tXmlNode xN;\n\t\t\t\t// Loop thru the current files\n\t\t\t\tXmlNode xFiles = xDoc.CreateElement(\"CurrentFiles\");\n\t\t\t\txDS.AppendChild(xFiles);\n\t\t\t\tforeach (MDIChild mc in this.MdiChildren)\n\t\t\t\t{\n\t\t\t\t\tUri file = mc.SourceFile;\n\t\t\t\t\tif (file == null)\n\t\t\t\t\t{\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\txN = xDoc.CreateElement(\"file\");\n\t\t\t\t\txN.InnerText = file.LocalPath;\n\t\t\t\t\txFiles.AppendChild(xN);\n\t\t\t\t}\n\n\t\t\t\t// Recent File Count\n\t\t\t\tXmlNode rfc = xDoc.CreateElement(\"RecentFilesMax\");\n\t\t\t\txDS.AppendChild(rfc);\n\t\t\t\trfc.InnerText = this._RecentFilesMax.ToString();\n\n\t\t\t\t// Loop thru recent files list\n\t\t\t\txFiles = xDoc.CreateElement(\"RecentFiles\");\n\t\t\t\txDS.AppendChild(xFiles);\n\t\t\t\tforeach (string f in _RecentFiles.Values)\n\t\t\t\t{\n\t\t\t\t\txN = xDoc.CreateElement(\"file\");\n\t\t\t\t\txN.InnerText = f;\n\t\t\t\t\txFiles.AppendChild(xN);\n\t\t\t\t}\n\n\t\t\t\t// Help File URL\n\t\t\t\tXmlNode hfu = xDoc.CreateElement(\"Help\");\n\t\t\t\txDS.AppendChild(hfu);\n\t\t\t\thfu.InnerText = this._HelpUrl;\n\n\t\t\t\t// Map chart subtypes\n\t\t\t\tXmlNode hmap = xDoc.CreateElement(\"MapSubtypes\");\n\t\t\t\txDS.AppendChild(hmap);\n\t\t\t\tStringBuilder maps = new StringBuilder();\n\t\t\t\tfor (int mi = 0; mi < MapSubtypes.Length; mi++)\n\t\t\t\t{\n\t\t\t\t\tmaps.Append(MapSubtypes[mi]);\n\t\t\t\t\tif (mi + 1 < MapSubtypes.Length)\n\t\t\t\t\t\tmaps.Append(',');\n\t\t\t\t}\n\t\t\t\thmap.InnerText = maps.ToString();\n\n\t\t\t\t// Show Line numbers\n\t\t\t\tXmlNode bln = xDoc.CreateElement(\"EditLines\");\n\t\t\t\txDS.AppendChild(bln);\n\t\t\t\tbln.InnerText = this._ShowEditLines ? \"true\" : \"false\";\n\n\t\t\t\t// Show Preview Wait dialog\n\t\t\t\tXmlNode pwd = xDoc.CreateElement(\"ShowPreviewWaitDialog\");\n\t\t\t\txDS.AppendChild(pwd);\n\t\t\t\tpwd.InnerText = this.ShowPreviewWaitDialog ? \"true\" : \"false\";\n\n\t\t\t\t// Outline reportitems\n\t\t\t\tXmlNode ori = xDoc.CreateElement(\"OutlineReportItems\");\n\t\t\t\txDS.AppendChild(ori);\n\t\t\t\tori.InnerText = this.ShowReportItemOutline ? \"true\" : \"false\";\n\n\t\t\t\t// ShowTabbedInterface\n\t\t\t\tXmlNode sti = xDoc.CreateElement(\"ShowTabbedInterface\");\n\t\t\t\txDS.AppendChild(sti);\n\t\t\t\tsti.InnerText = this._ShowTabbedInterface ? \"true\" : \"false\";\n\n\t\t\t\t// PropertiesAutoHide\n\t\t\t\tXmlNode pah = xDoc.CreateElement(\"PropertiesAutoHide\");\n\t\t\t\txDS.AppendChild(pah);\n\t\t\t\tpah.InnerText = this._PropertiesAutoHide ? \"true\" : \"false\";\n\n\t\t\t\t// XmlNewLine\n\t\t\t\tXmlNode xnl = xDoc.CreateElement(\"XmlNewLine\");\n\t\t\t\txDS.AppendChild(xnl);\n\t\t\t\txnl.InnerText = this._XmlNewLine.ToString();\n\n\t\t\t\t// PropertiesLocation\n\t\t\t\tstring loc = \"right\";\n\t\t\t\tswitch (_PropertiesLocation)\n\t\t\t\t{\n\t\t\t\t\tcase DockStyle.Left:\n\t\t\t\t\t\tloc = \"left\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase DockStyle.Top:\n\t\t\t\t\t\tloc = \"top\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase DockStyle.Bottom:\n\t\t\t\t\t\tloc = \"bottom\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tXmlNode pl = xDoc.CreateElement(\"PropertiesLocation\");\n\t\t\t\txDS.AppendChild(pl);\n\t\t\t\tpl.InnerText = loc;\n\n\t\t\t\t// Save the toolbar items\n\t\t\t\tXmlNode xTB = xDoc.CreateElement(\"Toolbar\");\n\t\t\t\txDS.AppendChild(xTB);\n\t\t\t\tforeach (string t in _Toolbar)\n\t\t\t\t{\n\t\t\t\t\txN = xDoc.CreateElement(\"item\");\n\t\t\t\t\txN.InnerText = t;\n\t\t\t\t\txTB.AppendChild(xN);\n\t\t\t\t}\n\n\t\t\t\t// Save the custom colors\n\t\t\t\tStringBuilder sb = new StringBuilder();\n\t\t\t\tforeach (int c in colors)\n\t\t\t\t{\n\t\t\t\t\tsb.Append(c.ToString());\n\t\t\t\t\tsb.Append(\",\");\n\t\t\t\t}\n\t\t\t\tsb.Remove(sb.Length - 1, 1);    // remove last \",\"\n\n\t\t\t\txN = xDoc.CreateElement(\"CustomColors\");\n\t\t\t\txN.InnerText = sb.ToString();\n\t\t\t\txDS.AppendChild(xN);\n\n\t\t\t\t//\n\t\t\t\t// Save Current Units used\n\t\t\t\t//\n\t\t\t\txN = xDoc.CreateElement(\"units\");\n\t\t\t\txN.InnerText = MeasureUnits;\n\t\t\t\txDS.AppendChild(xN);\n\n\t\t\t\t// Save the file\n\t\t\t\tDirectory.CreateDirectory(Path.GetDirectoryName(optFileName)); //Create directory if not exist\n\t\t\t\txDoc.Save(optFileName);\n\t\t\t}\n\t\t\tcatch { }       // still want to leave even on error\n\n\t\t\treturn;\n\t\t}\n\n\t\tstatic internal int[] GetCustomColors()\n\t\t{\n\t\t\tint white = 16777215;   // default to white (magic number)\n\t\t\tint[] cArray = new int[] {white, white, white, white,white, white, white, white,\n\t\t\t\t\t\t\t\t\twhite, white, white, white, white, white, white, white};\n\t\t\ttry\n\t\t\t{\n\t\t\t\tXmlDocument xDoc = new XmlDocument();\n\t\t\t\txDoc.PreserveWhitespace = false;\n\t\t\t\txDoc.Load(optFileName);\n\t\t\t\tXmlNode xNode;\n\t\t\t\txNode = xDoc.SelectSingleNode(\"//designerstate\");\n\n\t\t\t\tstring tcolors = \"\";\n\t\t\t\t// Loop thru all the child nodes\n\t\t\t\tforeach (XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (xNodeLoop.Name != \"CustomColors\")\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\ttcolors = xNodeLoop.InnerText;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tstring[] colorList = tcolors.Split(',');\n\t\t\t\tint i = 0;\n\n\t\t\t\tforeach (string c in colorList)\n\t\t\t\t{\n\t\t\t\t\ttry { cArray[i] = int.Parse(c); }\n\t\t\t\t\tcatch { cArray[i] = white; }\n\t\t\t\t\ti++;\n\t\t\t\t\tif (i >= cArray.Length)     // Only allow 16 custom colors\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch\n\t\t\t{       // Didn't sucessfully get the startup state but don't really care\n\t\t\t}\n\t\t\treturn cArray;\n\t\t}\n\n\t\tstatic internal void SetCustomColors(int[] colors)\n\t\t{\n\t\t\tStringBuilder sb = new StringBuilder();\n\t\t\tforeach (int c in colors)\n\t\t\t{\n\t\t\t\tsb.Append(c.ToString());\n\t\t\t\tsb.Append(\",\");\n\t\t\t}\n\n\t\t\tsb.Remove(sb.Length - 1, 1);    // remove last \",\"\n\t\t\ttry\n\t\t\t{\n\t\t\t\tXmlDocument xDoc = new XmlDocument();\n\t\t\t\txDoc.PreserveWhitespace = false;\n\t\t\t\txDoc.Load(optFileName);\n\t\t\t\tXmlNode xNode;\n\t\t\t\txNode = xDoc.SelectSingleNode(\"//designerstate\");\n\n\t\t\t\t// Loop thru all the child nodes\n\t\t\t\tXmlNode cNode = null;\n\t\t\t\tforeach (XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (xNodeLoop.Name == \"CustomColors\")\n\t\t\t\t\t{\n\t\t\t\t\t\tcNode = xNodeLoop;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (cNode == null)\n\t\t\t\t{\n\t\t\t\t\tcNode = xDoc.CreateElement(\"CustomColors\");\n\t\t\t\t\txNode.AppendChild(cNode);\n\t\t\t\t}\n\n\t\t\t\tcNode.InnerText = sb.ToString();\n\n\t\t\t\tDirectory.CreateDirectory(Path.GetDirectoryName(optFileName)); //Create directory if not exist\n\t\t\t\txDoc.Save(optFileName);\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\tMessageBox.Show(e.Message, Strings.RdlDesigner_Show_CustomColorSaveFailed);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void EditTextbox_Validated(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null ||\n\t\t\t\tmc.DesignTab != DesignTabs.Design || mc.DrawCtl.SelectedCount != 1 ||\n\t\t\t\tmc.Editor == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.SetSelectedText(ctlEditTextbox.Text);\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void InsertToolStripMenuItem_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (ctlMenuInsertCurrent != null)\n\t\t\t\tctlMenuInsertCurrent.Checked = false;\n\n\t\t\tToolStripMenuItem ctl = (ToolStripMenuItem)sender;\n\t\t\tctl.Checked = true;\n\t\t\tctlMenuInsertCurrent = ctl.Checked ? ctl : null;\n\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\t\t\tmc.SetFocus();\n\n\t\t\tmc.CurrentInsert = ctlMenuInsertCurrent == null ? null : (string)ctlMenuInsertCurrent.Tag;\n\t\t}\n\n\t\tprivate void Insert_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tif (ctlInsertCurrent != null)\n\t\t\t\tctlInsertCurrent.Checked = false;\n\n\t\t\tToolStripButton ctl = (ToolStripButton)sender;\n\t\t\tctlInsertCurrent = ctl.Checked ? ctl : null;\n\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\t\t\tmc.SetFocus();\n\n\t\t\tmc.CurrentInsert = ctlInsertCurrent == null ? null : (string)ctlInsertCurrent.Tag;\n\t\t}\n\n\t\tprivate void boldToolStripButton1_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.ApplyStyleToSelected(\"FontWeight\", boldToolStripButton1.Checked ? \"Bold\" : \"Normal\");\n\t\t\tSetProperties(mc);\n\n\t\t\tSetMDIChildFocus(mc);\n\t\t}\n\n\t\tprivate void italiacToolStripButton1_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.ApplyStyleToSelected(\"FontStyle\", italiacToolStripButton1.Checked ? \"Italic\" : \"Normal\");\n\t\t\tSetProperties(mc);\n\n\t\t\tSetMDIChildFocus(mc);\n\t\t}\n\n\t\tprivate void underlineToolStripButton2_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.ApplyStyleToSelected(\"TextDecoration\", underlineToolStripButton2.Checked ? \"Underline\" : \"None\");\n\t\t\tSetProperties(mc);\n\n\t\t\tSetMDIChildFocus(mc);\n\t\t}\n\n\t\tprivate void foreColorPicker1_Change(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tif (!bSuppressChange)\n\t\t\t{\n\t\t\t\tmc.ApplyStyleToSelected(\"Color\", foreColorPicker1.Text);\n\t\t\t\tSetProperties(mc);\n\t\t\t}\n\t\t\tSetMDIChildFocus(mc);\n\t\t}\n\n\t\tprivate void backColorPicker1_Change(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\t\t\tif (!bSuppressChange)\n\t\t\t{\n\t\t\t\tmc.ApplyStyleToSelected(\"BackgroundColor\", backColorPicker1.Text);\n\t\t\t\tSetProperties(mc);\n\t\t\t}\n\n\t\t\tSetMDIChildFocus(mc);\n\t\t}\n\n\t\tprivate void fontToolStripComboBox1_Change(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tif (!bSuppressChange)\n\t\t\t{\n\t\t\t\tmc.ApplyStyleToSelected(\"FontFamily\", fontToolStripComboBox1.Text);\n\t\t\t\tSetProperties(mc);\n\t\t\t}\n\t\t\tSetMDIChildFocus(mc);\n\t\t}\n\n\t\tprivate void fontSizeToolStripComboBox1_Change(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tif (!bSuppressChange)\n\t\t\t{\n\t\t\t\tmc.ApplyStyleToSelected(\"FontSize\", fontSizeToolStripComboBox1.Text + \"pt\");\n\t\t\t\tSetProperties(mc);\n\t\t\t}\n\t\t\tSetMDIChildFocus(mc);\n\t\t}\n\n\t\tprivate void selectToolStripButton2_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.SelectionTool = selectToolStripButton2.Checked;\n\n\t\t\tSetMDIChildFocus(mc);\n\t\t}\n\n\t\tprivate void zoomToolStripComboBox1_Change(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\t\t\tmc.SetFocus();\n\n\t\t\tswitch (zoomToolStripComboBox1.Text)\n\t\t\t{\n\t\t\t\tcase \"Actual Size\":\n\t\t\t\t\tmc.Zoom = 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Fit Page\":\n\t\t\t\t\tmc.ZoomMode = ZoomEnum.FitPage;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Fit Width\":\n\t\t\t\t\tmc.ZoomMode = ZoomEnum.FitWidth;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tstring s = zoomToolStripComboBox1.Text.Substring(0, zoomToolStripComboBox1.Text.Length - 1);\n\t\t\t\t\tfloat z;\n\t\t\t\t\ttry\n\t\t\t\t\t{\n\t\t\t\t\t\tz = Convert.ToSingle(s) / 100f;\n\t\t\t\t\t\tmc.Zoom = z;\n\t\t\t\t\t}\n\t\t\t\t\tcatch (Exception ex)\n\t\t\t\t\t{\n\t\t\t\t\t\tMessageBox.Show(ex.Message, Strings.RdlDesigner_Show_ZoomValueInvalid);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tprivate void RdlDesigner_MdiChildActivate(object sender, EventArgs e)\n\t\t{\n\t\t\tif (this._ValidateRdl != null)      // don't keep the validation open when window changes\n\t\t\t\tthis._ValidateRdl.Close();\n\n\t\t\tDesignTabChanged(sender, e);\n\t\t\tSelectionChanged(sender, e);\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\t\t\tmc.SetFocus();\n\t\t\tif (mc.Tab != null)\n\t\t\t\tmainTC.SelectTab(mc.Tab);\n\t\t}\n\n\t\tprivate void SetMDIChildFocus(MDIChild mc)\n\t\t{\n\t\t\t// We don't want to be triggering any change events when the focus is changing\n\t\t\tbool bSuppress = bSuppressChange;\n\t\t\tbSuppressChange = true;\n\t\t\tmc.SetFocus();\n\t\t\tbSuppressChange = bSuppress;\n\t\t}\n\n\t\tprivate void SetProperties(MDIChild mc)\n\t\t{\n\t\t\tif (mc == null || !_ShowProperties || mc.DesignTab != DesignTabs.Design)\n\t\t\t\tmainProperties.ResetSelection(null, null);\n\t\t\telse\n\t\t\t\tmainProperties.ResetSelection(mc.RdlEditor.DrawCtl, mc.RdlEditor.DesignCtl);\n\t\t}\n\n\t\tprivate void SetStatusNameAndPosition()\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\n\t\t\tSetProperties(mc);\n\n\t\t\tif (mc == null)\n\t\t\t{\n\t\t\t\tstatusPosition.Text = statusSelected.Text = \"\";\n\t\t\t}\n\t\t\telse if (mc.DesignTab == DesignTabs.Design)\n\t\t\t\tSetStatusNameAndPositionDesign(mc);\n\t\t\telse if (mc.DesignTab == DesignTabs.Edit)\n\t\t\t\tSetStatusNameAndPositionEdit(mc);\n\t\t\telse\n\t\t\t{\n\t\t\t\tstatusPosition.Text = statusSelected.Text = \"\";\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void SetStatusNameAndPositionDesign(MDIChild mc)\n\t\t{\n\t\t\tif (mc.DrawCtl.SelectedCount <= 0)\n\t\t\t{\n\t\t\t\tstatusPosition.Text = statusSelected.Text = \"\";\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Handle position\n\t\t\tvar pos = mc.SelectionPosition;\n\t\t\tvar sz = mc.SelectionSize;\n\t\t\tstring spos;\n\n\t\t\tif (pos.X == float.MinValue) // no item selected is probable cause\n\t\t\t{\n\t\t\t\tspos = \"\";\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar rinfo = new RegionInfo(CultureInfo.CurrentCulture.Name);\n\t\t\t\tdouble m72 = DesignXmlDraw.POINTSIZED;\n\n\t\t\t\tvar x = pos.X / m72;\n\t\t\t\tvar y = pos.Y / m72;\n\t\t\t\tvar unit = IsMetric() ? Strings.RdlDesigner_Status_cm : Strings.RdlDesigner_Status_in;\n\n\t\t\t\tif (IsMetric())\n\t\t\t\t{\n\t\t\t\t\tx *= 2.54d;\n\t\t\t\t\ty *= 2.54d;\n\t\t\t\t}\n\n\t\t\t\tif (sz.Width == float.MinValue) // item is in a table/matrix is probably cause\n\t\t\t\t{\n\t\t\t\t\tspos = string.Format(\"   x={0:0.00}{2}, y={1:0.00}{2}        \",\n\t\t\t\t\t\t\t\t\t\t x, y, unit);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tvar w = sz.Width / m72;\n\t\t\t\t\tvar h = sz.Height / m72;\n\n\t\t\t\t\tif (IsMetric())\n\t\t\t\t\t{\n\t\t\t\t\t\tw *= 2.54d;\n\t\t\t\t\t\th *= 2.54d;\n\t\t\t\t\t}\n\n\t\t\t\t\tspos = string.Format(\"   x={0:0.00}{4}, y={1:0.00}{4}, w={2:0.00}{4}, h={3:0.00}{4}        \",\n\t\t\t\t\t\t\t\t\t\t x, y, w, h, unit);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstatusPosition.Text = spos;\n\n\t\t\t// Handle text\n\t\t\tstatusSelected.Text = mc.SelectionName;\n\t\t}\n\n\t\tprivate void SetStatusNameAndPositionEdit(MDIChild mc)\n\t\t{\n\t\t\tvar spos = string.Format(\"{2} {0}  {3} {1}\", mc.CurrentLine, mc.CurrentCh, Strings.RdlDesigner_Status_Ln, Strings.RdlDesigner_Status_Ch);\n\t\t\tstatusSelected.Text = spos;\n\t\t\tstatusPosition.Text = \"\";\n\t\t}\n\n\t\tprivate void EditTextBox_KeyDown(object sender, KeyEventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\t// Force scroll up and down\n\t\t\tswitch (e.KeyCode)\n\t\t\t{\n\t\t\t\tcase Keys.Enter:\n\t\t\t\t\tmc.SetFocus();\n\t\t\t\t\te.Handled = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase Keys.Escape:\n\t\t\t\t\tif (mc.DrawCtl.SelectedCount == 1)\n\t\t\t\t\t{\n\t\t\t\t\t\tXmlNode tn = mc.DrawCtl.SelectedList[0] as XmlNode;\n\t\t\t\t\t\tif (tn != null && tn.Name == \"Textbox\")\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tctlEditTextbox.Text = mc.DrawCtl.GetElementValue(tn, \"Value\", \"\");\n\t\t\t\t\t\t\te.Handled = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t}\n\t\t/// <summary>\n\t\t/// Enable - Disable options just after a item selected\n\t\t/// For group items selected left the original code\n\t\t/// For single item selected new code\n\t\t/// </summary>\n\t\t/// <param name=\"sender\"></param>\n\t\t/// <param name=\"e\"></param>\n\t\tprivate void menuFormat_Popup(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\n\t\t\t// Determine if group operation on selected is currently allowed\n\t\t\tbool bEnable = (mc != null && mc.DesignTab == DesignTabs.Design && mc.DrawCtl.AllowGroupOperationOnSelected);\n\n\t\t\tthis.bottomsToolStripMenuItem.Enabled = this.centersToolStripMenuItem.Enabled =\n\t\t\t\tthis.leftsToolStripMenuItem.Enabled = this.middlesToolStripMenuItem.Enabled =\n\t\t\t\tthis.rightsToolStripMenuItem.Enabled = this.topsToolStripMenuItem.Enabled =\n\t\t\t\tbEnable;\n\n\t\t\twidthToolStripMenuItem.Enabled = heightToolStripMenuItem.Enabled = bothToolStripMenuItem.Enabled = bEnable;\n\n\t\t\tmakeEqualToolStripMenuItem.Enabled = increaseToolStripMenuItem.Enabled = decreaseToolStripMenuItem.Enabled =\n\t\t\t\tzeroToolStripMenuItem.Enabled = bEnable;\n\n\t\t\tmakeEqualToolStripMenuItem1.Enabled = increaseToolStripMenuItem1.Enabled = decreaseToolStripMenuItem1.Enabled =\n\t\t\t\tzeroToolStripMenuItem1.Enabled = bEnable;\n\n\t\t\tbEnable = (mc != null && mc.DesignTab == DesignTabs.Design && mc.DrawCtl.SelectedCount > 0);\n\t\t\tthis.increaseToolStripMenuItem5.Enabled =\n\t\t\t\tthis.decreaseToolStripMenuItem5.Enabled =\n\t\t\t\tthis.zeroToolStripMenuItem5.Enabled =\n\t\t\t\tthis.increaseToolStripMenuItem4.Enabled =\n\t\t\t\tthis.decreaseToolStripMenuItem4.Enabled =\n\t\t\t\tthis.zeroToolStripMenuItem4.Enabled =\n\t\t\t\tthis.increaseToolStripMenuItem2.Enabled =\n\t\t\t\tthis.decreaseToolStripMenuItem2.Enabled =\n\t\t\t\tthis.zeroToolStripMenuItem2.Enabled =\n\t\t\t\tthis.increaseToolStripMenuItem3.Enabled =\n\t\t\t\tthis.decreaseToolStripMenuItem3.Enabled =\n\t\t\t\tthis.zeroToolStripMenuItem3.Enabled =\n\t\t\t\t\tbEnable;\n\n\t\t\t//\n\t\t\t// If single Item selected enable alignment to container\n\t\t\t//\n\t\t\tcenterHorizontallyToolStripMenuItem.Enabled = false;\n\t\t\tcenterVerticallyToolStripMenuItem.Enabled = false;\n\t\t\tcenterBothToolStripMenuItem.Enabled = false;\n\t\t\tif (mc.DrawCtl.SelectedCount == 1)\n\t\t\t{\n\t\t\t\t//string sect = mc.DrawCtl.SectionBelongsTo(mc.DrawCtl.SelectedList[0]);\n\t\t\t\t//if (sect == \"Body\")\n\t\t\t\t//{\n\t\t\t\t//    centerHorizontallyToolStripMenuItem.Enabled = true;\n\t\t\t\t//}\n\t\t\t\t//else\n\t\t\t\t//{\n\t\t\t\tcenterHorizontallyToolStripMenuItem.Enabled = true;\n\t\t\t\tcenterVerticallyToolStripMenuItem.Enabled = true;\n\t\t\t\tcenterBothToolStripMenuItem.Enabled = true;\n\t\t\t\t//}\n\t\t\t}\n\t\t}\n\n\t\tprivate void bottomsToolStripMenuItemutton_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tTextAlignEnum ta = TextAlignEnum.General;\n\n\t\t\tif (sender == leftAlignToolStripButton2)\n\t\t\t{\n\t\t\t\tta = TextAlignEnum.Left;\n\t\t\t\tleftAlignToolStripButton2.Checked = true;\n\t\t\t\trightAlignToolStripButton3.Checked = centerAlignToolStripButton2.Checked = false;\n\t\t\t}\n\t\t\telse if (sender == rightAlignToolStripButton3)\n\t\t\t{\n\t\t\t\tta = TextAlignEnum.Right;\n\t\t\t\trightAlignToolStripButton3.Checked = true;\n\t\t\t\tleftAlignToolStripButton2.Checked = centerAlignToolStripButton2.Checked = false;\n\t\t\t}\n\t\t\telse if (sender == centerAlignToolStripButton2)\n\t\t\t{\n\t\t\t\tta = TextAlignEnum.Center;\n\t\t\t\tcenterAlignToolStripButton2.Checked = true;\n\t\t\t\trightAlignToolStripButton3.Checked = leftAlignToolStripButton2.Checked = false;\n\t\t\t}\n\n\t\t\tmc.ApplyStyleToSelected(\"TextAlign\", ta.ToString());\n\t\t\tSetProperties(mc);\n\n\t\t\tSetProperties(mc);\n\t\t\tSetMDIChildFocus(mc);\n\t\t}\n\n\t\tprivate void centersToolStripMenuItem_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.AlignCenters();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void leftsToolStripMenuItem_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.AlignLefts();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void rightsToolStripMenuItem_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.AlignRights();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void bottomsToolStripMenuItem_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.AlignBottoms();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void topsToolStripMenuItem_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.AlignTops();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void middlesToolStripMenuItem_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.AlignMiddles();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void heightToolStripMenuItem_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.SizeHeights();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void widthToolStripMenuItem_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.SizeWidths();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void bothToolStripMenuItem_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.SizeBoth();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void makeEqualToolStripMenuItem_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.HorzSpacingMakeEqual();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void increaseToolStripMenuItem_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.HorzSpacingIncrease();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void decreaseToolStripMenuItem_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.HorzSpacingDecrease();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void zeroToolStripMenuItem_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.HorzSpacingMakeZero();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void makeEqualToolStripMenuItem1_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.VertSpacingMakeEqual();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void increaseToolStripMenuItem1_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.VertSpacingIncrease();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void decreaseToolStripMenuItem1_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.VertSpacingDecrease();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void zeroToolStripMenuItem1_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.VertSpacingMakeZero();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void menuView_Popup(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tbool bEnable = mc != null;\n\n\t\t\tdesignerToolStripMenuItem.Enabled = rDLTextToolStripMenuItem.Enabled =\n\t\t\t\tpreviewToolStripMenuItem.Enabled = bEnable;\n\n\t\t\tpropertiesWindowsToolStripMenuItem.Enabled = bEnable && mc.DesignTab == DesignTabs.Design;\n\t\t}\n\n\t\tprivate void menuViewDesigner_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\t\t\tmc.RdlEditor.DesignTab = DesignTabs.Design;\n\t\t}\n\n\t\tprivate void menuViewRDL_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\t\t\tmc.RdlEditor.DesignTab = DesignTabs.Edit;\n\t\t}\n\n\t\tprivate void menuViewBrowser_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\tmenuToolsStartProcess(true);        // start desktop if not already up\n\n\t\t\t\tDesktopConfig dc = DialogToolOptions.DesktopConfiguration;\n\n\t\t\t\tstring rdlfile = Path.GetFileNameWithoutExtension(mc.SourceFile.LocalPath) + \"_\" + (++TEMPRDL_INC).ToString() + TEMPRDL;\n\t\t\t\tUri file;\n\t\t\t\tif (Path.IsPathRooted(dc.Directory))\n\t\t\t\t{\n\t\t\t\t\tfile = new Uri(dc.Directory + Path.DirectorySeparatorChar + rdlfile);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tfile = new Uri(AppDomain.CurrentDomain.BaseDirectory +\n\t\t\t\t\t\tdc.Directory + Path.DirectorySeparatorChar + rdlfile);\n\t\t\t\t}\n\n\t\t\t\tif (_TempReportFiles == null)\n\t\t\t\t{\n\t\t\t\t\t_TempReportFiles = new List<Uri>();\n\t\t\t\t\t_TempReportFiles.Add(file);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif (!_TempReportFiles.Contains(file))\n\t\t\t\t\t{\n\t\t\t\t\t\t_TempReportFiles.Add(file);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tStreamWriter sw = File.CreateText(file.LocalPath);\n\t\t\t\tsw.Write(mc.SourceRdl);\n\t\t\t\tsw.Close();\n\t\t\t\t// http://localhost:8080/aReport.rdl?rs:Format=HTML\n\t\t\t\tUri url = new Uri(string.Format(\"http://localhost:{0}/{1}?rd:Format=HTML\", dc.Port, rdlfile));\n\t\t\t\tSystem.Diagnostics.Process.Start(url.AbsoluteUri);\n\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\tMessageBox.Show(ex.Message, Strings.RdlDesigner_Show_UnableShowReport);\n\t\t\t}\n\n\t\t}\n\n\t\tprivate void menuViewPreview_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\t\t\tmc.RdlEditor.DesignTab = DesignTabs.Preview;\n\t\t}\n\n\t\tprivate void menuFormatPadding_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tToolStripMenuItem mi = sender as ToolStripMenuItem;\n\n\t\t\tstring padname = null;\n\t\t\tint paddiff = 0;\n\t\t\tif (mi == increaseToolStripMenuItem2)\n\t\t\t{\n\t\t\t\tpadname = \"PaddingLeft\";\n\t\t\t\tpaddiff = 4;\n\t\t\t}\n\t\t\telse if (mi == decreaseToolStripMenuItem2)\n\t\t\t{\n\t\t\t\tpadname = \"PaddingLeft\";\n\t\t\t\tpaddiff = -4;\n\t\t\t}\n\t\t\telse if (mi == zeroToolStripMenuItem2)\n\t\t\t{\n\t\t\t\tpadname = \"PaddingLeft\";\n\t\t\t\tpaddiff = 0;\n\t\t\t}\n\t\t\telse if (mi == increaseToolStripMenuItem3)\n\t\t\t{\n\t\t\t\tpadname = \"PaddingRight\";\n\t\t\t\tpaddiff = 4;\n\t\t\t}\n\t\t\telse if (mi == decreaseToolStripMenuItem3)\n\t\t\t{\n\t\t\t\tpadname = \"PaddingRight\";\n\t\t\t\tpaddiff = -4;\n\t\t\t}\n\t\t\telse if (mi == zeroToolStripMenuItem3)\n\t\t\t{\n\t\t\t\tpadname = \"PaddingRight\";\n\t\t\t\tpaddiff = 0;\n\t\t\t}\n\t\t\telse if (mi == increaseToolStripMenuItem4)\n\t\t\t{\n\t\t\t\tpadname = \"PaddingTop\";\n\t\t\t\tpaddiff = 4;\n\t\t\t}\n\t\t\telse if (mi == decreaseToolStripMenuItem4)\n\t\t\t{\n\t\t\t\tpadname = \"PaddingTop\";\n\t\t\t\tpaddiff = -4;\n\t\t\t}\n\t\t\telse if (mi == zeroToolStripMenuItem4)\n\t\t\t{\n\t\t\t\tpadname = \"PaddingTop\";\n\t\t\t\tpaddiff = 0;\n\t\t\t}\n\t\t\telse if (mi == increaseToolStripMenuItem5)\n\t\t\t{\n\t\t\t\tpadname = \"PaddingBottom\";\n\t\t\t\tpaddiff = 4;\n\t\t\t}\n\t\t\telse if (mi == decreaseToolStripMenuItem5)\n\t\t\t{\n\t\t\t\tpadname = \"PaddingBottom\";\n\t\t\t\tpaddiff = -4;\n\t\t\t}\n\t\t\telse if (mi == zeroToolStripMenuItem5)\n\t\t\t{\n\t\t\t\tpadname = \"PaddingBottom\";\n\t\t\t\tpaddiff = 0;\n\t\t\t}\n\n\t\t\tif (padname != null)\n\t\t\t{\n\t\t\t\tmc.Editor.DesignCtl.SetPadding(padname, paddiff);\n\t\t\t\tSetProperties(mc);\n\t\t\t}\n\n\t\t}\n\n\t\tprivate void CleanupTempFiles()\n\t\t{\n\t\t\tif (_TempReportFiles == null)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tforeach (Uri file in _TempReportFiles)\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{   // It's ok for the delete to fail\n\t\t\t\t\tFile.Delete(file.LocalPath);\n\t\t\t\t}\n\t\t\t\tcatch\n\t\t\t\t{ }\n\t\t\t}\n\t\t\t_TempReportFiles = null;\n\t\t}\n\n\t\tprivate void menuFormatAlignButton_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tTextAlignEnum ta = TextAlignEnum.General;\n\n\t\t\tif (sender == leftAlignToolStripButton2)\n\t\t\t{\n\t\t\t\tta = TextAlignEnum.Left;\n\t\t\t\tleftAlignToolStripButton2.Checked = true;\n\t\t\t\trightAlignToolStripButton3.Checked = centerAlignToolStripButton2.Checked = false;\n\t\t\t}\n\t\t\telse if (sender == rightAlignToolStripButton3)\n\t\t\t{\n\t\t\t\tta = TextAlignEnum.Right;\n\t\t\t\trightAlignToolStripButton3.Checked = true;\n\t\t\t\tleftAlignToolStripButton2.Checked = centerAlignToolStripButton2.Checked = false;\n\t\t\t}\n\t\t\telse if (sender == centerAlignToolStripButton2)\n\t\t\t{\n\t\t\t\tta = TextAlignEnum.Center;\n\t\t\t\tcenterAlignToolStripButton2.Checked = true;\n\t\t\t\trightAlignToolStripButton3.Checked = leftAlignToolStripButton2.Checked = false;\n\t\t\t}\n\n\t\t\tmc.ApplyStyleToSelected(\"TextAlign\", ta.ToString());\n\t\t\tSetProperties(mc);\n\n\t\t\tSetProperties(mc);\n\t\t\tSetMDIChildFocus(mc);\n\t\t}\n\n\t\tprivate void menuFormatAlignC_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.AlignCenters();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void menuFormatAlignL_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.AlignLefts();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void menuFormatAlignR_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.AlignRights();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void menuFormatAlignB_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.AlignBottoms();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void menuFormatAlignT_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.AlignTops();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void menuFormatAlignM_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.AlignMiddles();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void menuFormatSizeH_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.SizeHeights();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void menuFormatSizeW_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.SizeWidths();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void menuFormatSizeB_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.SizeBoth();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void menuFormatHorzE_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.HorzSpacingMakeEqual();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void menuFormatHorzI_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.HorzSpacingIncrease();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void menuFormatHorzD_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.HorzSpacingDecrease();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void menuFormatHorzZ_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.HorzSpacingMakeZero();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void menuFormatVertE_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.VertSpacingMakeEqual();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void menuFormatVertI_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.VertSpacingIncrease();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void menuFormatVertD_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.VertSpacingDecrease();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void menuFormatVertZ_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.VertSpacingMakeZero();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate async void RdlDesigner_DragDrop(object sender, DragEventArgs e)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tstring[] s = (string[])e.Data.GetData(DataFormats.FileDrop, false);\n\t\t\t\tint i;\n\t\t\t\tfor (i = 0; i < s.Length; i++)\n\t\t\t\t{\n\t\t\t\t\tif (s[i].ToLower().EndsWith(\".rdl\"))\n\t\t\t\t\t{\n\t\t\t\t\t\tawait CreateMDIChildAsync(new Uri(s[i]), null, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\tMessageBox.Show(ex.Message, Strings.RdlDesigner_ShowD_Error, MessageBoxButtons.OK, MessageBoxIcon.Error);\n\t\t\t}\n\t\t}\n\n\t\tprivate void RdlDesigner_DragEnter(object sender, DragEventArgs e)\n\t\t{\n\t\t\tif (e.Data.GetDataPresent(DataFormats.FileDrop))\n\t\t\t{\n\t\t\t\te.Effect = DragDropEffects.All;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\te.Effect = DragDropEffects.None;\n\t\t\t}\n\t\t}\n\n\t\tprivate async void pDFToolStripMenuItem_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tawait PdfExportAsync(false);\n\t\t}\n\n\t\tprivate async void pDFOldStyleToolStripMenuItem_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tawait PdfExportAsync(true);\n\t\t}\n\n\t\tprivate void tIFFToolStripMenuItem_Click(object sender, EventArgs e)\n\t\t{\n\t\t\texportToolStripMenuItemTif_Click(sender, e);\n\t\t}\n\n\t\tprivate void excelToolStripMenuItem_Click(object sender, EventArgs e)\n\t\t{\n\t\t\texportToolStripMenuItemExcel_Click(sender, e);\n\t\t}\n\n\t\tprivate void xMLToolStripMenuItem_Click(object sender, EventArgs e)\n\t\t{\n\t\t\texportToolStripMenuItemXml_Click(sender, e);\n\t\t}\n\n\t\tprivate void webArchiveSingleFileMHTToolStripMenuItem_Click(object sender, EventArgs e)\n\t\t{\n\t\t\texportToolStripMenuItemMHtml_Click(sender, e);\n\t\t}\n\n\t\tprivate void webPageHTMLToolStripMenuItem_Click(object sender, EventArgs e)\n\t\t{\n\t\t\texportToolStripMenuItemHtml_Click(sender, e);\n\t\t}\n\n\t\tprivate void cSVToolStripMenuItem_Click(object sender, EventArgs e)\n\t\t{\n\t\t\texportToolStripMenuItemCsv_Click(sender, e);\n\t\t}\n\n\t\tprivate void rTFDOCToolStripMenuItem_Click(object sender, EventArgs e)\n\t\t{\n\t\t\texportToolStripMenuItemRtf_Click(sender, e);\n\t\t}\n\n\t\tprivate async void dOCToolStripMenuItem_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tawait mc.ExportAsync(Rdl.OutputPresentationType.Word);\n\t\t\treturn;\n\t\t}\n\n\t\tprivate async void Excel2007ToolStripMenuItem_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n            \n            await ShowSaveInProgressAsync(mc.Tab.Text,async () => {\n                await mc.ExportAsync(Rdl.OutputPresentationType.Excel2007);\n            });\n        }\n        \n\t\tprivate void ExitToolStripMenuItem_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tmenuFileExit_Click(sender, e);\n\t\t}\n\n\t\tprivate void ZoomControl1_ValueChanged(object sender, UserZoomControl.CambiaValori e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tif (mc.Editor == null)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\tmc.Editor.DesignCtl.SCALEX = e.ValoreZoom;\n\t\t\tmc.Editor.DesignCtl.SCALEY = e.ValoreZoom;\n\n\t\t\tmc.Editor.DesignCtl._DrawPanel.SCALAX = e.ValoreZoom;\n\t\t\tmc.Editor.DesignCtl._DrawPanel.SCALAY = e.ValoreZoom;\n\n\t\t\t// Applicare la scala anche alla dimensione del disegno\n\n\t\t\tmc.Editor.DesignCtl._DrawPanel.ReportVisualSize = mc.Editor.DesignCtl._DrawPanel.ReportVisualSizeBase * mc.Editor.DesignCtl._DrawPanel.SCALAX;\n\t\t\tmc.Editor.DesignCtl._DrawPanel.Invalidate();\n\n\t\t\tmc.Editor.DesignCtl.HorizontalScroll.Visible = true;\n\t\t\tmc.Editor.DesignCtl.VerticalScroll.Visible = true;\n\t\t\tmc.Editor.DesignCtl.VerticalScroll.Enabled = true;\n\n\t\t\tmc.Editor.dcTopRuler.Invalidate();\n\t\t\tmc.Editor.dcLeftRuler.Invalidate();\n\t\t\tmc.Editor.DesignCtl._hScroll.Maximum = (int)mc.Editor.DesignCtl._DrawPanel.ReportVisualSize;\n\n\t\t\tmc.Editor.DesignCtl._vScroll.Maximum = (int)(mc.Editor.DesignCtl._DrawPanel.VerticalMax * mc.Editor.DesignCtl._DrawPanel.SCALAY);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Enable Alignment grid on RdlEditor\n\t\t/// </summary>\n\t\t/// <param name = \"sender\" ></ param >\n\t\t/// < param name=\"e\"></param>\n\t\tprivate void AlignmentGridEnable_CheckStateChanged(object sender, EventArgs e)\n\t\t{\n\t\t\tforeach (var form in MdiChildren)\n\t\t\t{\n\t\t\t\tMDIChild mc = form as MDIChild;\n\t\t\t\tif (mc == null)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (mc.Editor == null)\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tmc.Editor.DesignCtl._DrawPanel.EnableDrawGriglia = AlignmentGridEnable.Checked;\n\t\t\t\tmc.Editor.DesignCtl._DrawPanel.Invalidate();\n\t\t\t\tmc.Editor.dcTopRuler.Invalidate();\n\t\t\t\tmc.Editor.dcLeftRuler.Invalidate();\n\t\t\t}\n\t\t}\n\n\t\tprivate void CenterHorizontallyToolStripMenuItem_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.HorizontalCenterInsideContainer();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void CenterVerticallyToolStripMenuItem_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\n\t\t\tmc.Editor.DesignCtl.VerticalCenterInsideContainer();\n\t\t\tSetProperties(mc);\n\t\t}\n\n\t\tprivate void CenterBothToolStripMenu_Click(object sender, EventArgs e)\n\t\t{\n\t\t\tMDIChild mc = this.ActiveMdiChild as MDIChild;\n\t\t\tif (mc == null)\n\t\t\t\treturn;\n\t\t\tmc.Editor.DesignCtl.HorizontalCenterInsideContainer();\n\t\t\tmc.Editor.DesignCtl.VerticalCenterInsideContainer();\n\t\t\tSetProperties(mc);\n\t\t}\n        \n        private async Task ShowSaveInProgressAsync(string fileName,\n            Func<Task> operation)\n        {\n            toolStripStatusLabel2.Text = $\"Saving {fileName}\";\n            try\n            {\n                await operation();\n                toolStripStatusLabel2.Text = $\"Saved {fileName}\";\n            }\n            catch\n            {\n                toolStripStatusLabel2.Text = $\"Failed to save {fileName}\";\n            }\n            \n            await Task.Delay(4000);\n            toolStripStatusLabel2.Text = string.Empty;\n        }\n\n\t}\n\n\tpublic class RdlIpcObject : MarshalByRefObject\n\t{\n\t\tpublic RdlIpcObject()\n\t\t{\n\t\t}\n\n\t\tprivate List<string> _commands;\n\n\t\t//public List<string> Commands\n\t\t//{\n\t\t// get { return _commands; }\n\t\t// set { _commands = value; }\n\t\t//}\n\n\t\tpublic List<string> getCommands()\n\t\t{\n\t\t\treturn _commands;\n\t\t}\n\n\t\tpublic void setCommands(List<string> value)\n\t\t{\n\t\t\t_commands = value;\n\t\t}\n\n        [Obsolete]\n        public override object InitializeLifetimeService()\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t}\n\n\tpublic enum NewLineChar\n\t{\n\t\t[LocalizedDescription(\"Windows (CR LF)\")]\n\t\tWindows,\n\t\t[LocalizedDescription(\"Unix (LF)\")]\n\t\tUnix\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/RdlDesigner.fr.resx",
    "content": "﻿<root>\n    <resheader name=\"resmimetype\">\n        <value>text/microsoft-resx</value>\n    </resheader>\n    <resheader name=\"version\">\n        <value>1.3</value>\n    </resheader>\n    <resheader name=\"reader\">\n        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n    </resheader>\n    <resheader name=\"writer\">\n        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n    </resheader>\n    <data name=\"$this.Text\" xml:space=\"preserve\">\n        <value>Concepteur de rapports Majorsilence</value>\n    </data>\n    <data name=\"aboutToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>À propos</value>\n    </data>\n    <data name=\"alignToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Aligner</value>\n    </data>\n    <data name=\"boldToolStripButton1.ToolTipText\" xml:space=\"preserve\">\n        <value>Audacieux</value>\n    </data>\n    <data name=\"bothToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Les deux</value>\n    </data>\n    <data name=\"bottomsToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Fonds</value>\n    </data>\n    <data name=\"centerAlignToolStripButton2.Text\" xml:space=\"preserve\">\n        <value>Alignement centré</value>\n    </data>\n    <data name=\"centersToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Centres</value>\n    </data>\n    <data name=\"chartToolStripButton1.Text\" xml:space=\"preserve\">\n        <value>Graphique</value>\n    </data>\n    <data name=\"chartToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Graphique</value>\n    </data>\n    <data name=\"closeAllToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Fermer Al</value>\n    </data>\n    <data name=\"closeToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Fermer</value>\n    </data>\n    <data name=\"copyToolStripButton1.Text\" xml:space=\"preserve\">\n        <value>Copier</value>\n    </data>\n    <data name=\"copyToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Copier</value>\n    </data>\n    <data name=\"createSharedDataSourceToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Créer une source de données partagée...</value>\n    </data>\n    <data name=\"cutToolStripButton1.Text\" xml:space=\"preserve\">\n        <value>Couper</value>\n    </data>\n    <data name=\"cutToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Couper</value>\n    </data>\n    <data name=\"dataSetsToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Ensembles de données</value>\n    </data>\n    <data name=\"dataSourcesToolStripMenuItem1.Text\" xml:space=\"preserve\">\n        <value>Sources des données</value>\n    </data>\n    <data name=\"dataToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Données</value>\n    </data>\n    <data name=\"decreaseToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Diminuer</value>\n    </data>\n    <data name=\"decreaseToolStripMenuItem1.Text\" xml:space=\"preserve\">\n        <value>Diminuer</value>\n    </data>\n    <data name=\"decreaseToolStripMenuItem2.Text\" xml:space=\"preserve\">\n        <value>Diminuer</value>\n    </data>\n    <data name=\"decreaseToolStripMenuItem3.Text\" xml:space=\"preserve\">\n        <value>Diminuer</value>\n    </data>\n    <data name=\"decreaseToolStripMenuItem4.Text\" xml:space=\"preserve\">\n        <value>Diminuer</value>\n    </data>\n    <data name=\"decreaseToolStripMenuItem5.Text\" xml:space=\"preserve\">\n        <value>Diminuer</value>\n    </data>\n    <data name=\"designerToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Concepteur</value>\n    </data>\n    <data name=\"editToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Éditer</value>\n    </data>\n    <data name=\"embeddedImagesToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Images intégrées...</value>\n    </data>\n    <data name=\"exitToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Sortie</value>\n    </data>\n    <data name=\"exportToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Exportation</value>\n    </data>\n    <data name=\"fileToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Lime</value>\n    </data>\n    <data name=\"findNextToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Trouver suivant</value>\n    </data>\n    <data name=\"findToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Trouver</value>\n    </data>\n    <data name=\"fontSizeToolStripComboBox1.ToolTipText\" xml:space=\"preserve\">\n        <value>Taille de la police</value>\n    </data>\n    <data name=\"fontToolStripComboBox1.ToolTipText\" xml:space=\"preserve\">\n        <value>Police</value>\n    </data>\n    <data name=\"goToToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Atteindre...</value>\n    </data>\n    <data name=\"heightToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Hauteur</value>\n    </data>\n    <data name=\"helpToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Aide</value>\n    </data>\n    <data name=\"helpToolStripMenuItem1.Text\" xml:space=\"preserve\">\n        <value>Aide</value>\n    </data>\n    <data name=\"horizontalSpacingToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Espacement horizontal</value>\n    </data>\n    <data name=\"horizontalToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Horizontalement</value>\n    </data>\n    <data name=\"increaseToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Augmenter</value>\n    </data>\n    <data name=\"increaseToolStripMenuItem1.Text\" xml:space=\"preserve\">\n        <value>Augmenter</value>\n    </data>\n    <data name=\"increaseToolStripMenuItem2.Text\" xml:space=\"preserve\">\n        <value>Augmenter</value>\n    </data>\n    <data name=\"increaseToolStripMenuItem3.Text\" xml:space=\"preserve\">\n        <value>Augmenter</value>\n    </data>\n    <data name=\"increaseToolStripMenuItem4.Text\" xml:space=\"preserve\">\n        <value>Augmenter</value>\n    </data>\n    <data name=\"increaseToolStripMenuItem5.Text\" xml:space=\"preserve\">\n        <value>Augmenter</value>\n    </data>\n    <data name=\"insertToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Insérer</value>\n    </data>\n    <data name=\"italiacToolStripButton1.ToolTipText\" xml:space=\"preserve\">\n        <value>Italique</value>\n    </data>\n    <data name=\"label1.Text\" xml:space=\"preserve\">\n        <value>Couleur avant:</value>\n    </data>\n    <data name=\"label2.Text\" xml:space=\"preserve\">\n        <value>Couleur du dos:</value>\n    </data>\n    <data name=\"leftAlignToolStripButton2.Text\" xml:space=\"preserve\">\n        <value>Alignement à gauche</value>\n    </data>\n    <data name=\"leftsToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Gauches</value>\n    </data>\n    <data name=\"lineToolStripButton1.Text\" xml:space=\"preserve\">\n        <value>Ligne</value>\n    </data>\n    <data name=\"lineToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Ligne</value>\n    </data>\n    <data name=\"listToolStripButton1.Text\" xml:space=\"preserve\">\n        <value>Liste</value>\n    </data>\n    <data name=\"listToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Liste</value>\n    </data>\n    <data name=\"makeEqualToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Égaliser</value>\n    </data>\n    <data name=\"makeEqualToolStripMenuItem1.Text\" xml:space=\"preserve\">\n        <value>Égaliser</value>\n    </data>\n    <data name=\"matrixToolStripButton1.Text\" xml:space=\"preserve\">\n        <value>Matrice</value>\n    </data>\n    <data name=\"matrixToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Matrice</value>\n    </data>\n    <data name=\"MenuTBClose.Text\" xml:space=\"preserve\">\n        <value>Fermer</value>\n    </data>\n    <data name=\"MenuTBCloseAllButThis.Text\" xml:space=\"preserve\">\n        <value>Fermer Tout sauf celui-ci</value>\n    </data>\n    <data name=\"MenuTBSave.Text\" xml:space=\"preserve\">\n        <value>Sauvegarder</value>\n    </data>\n    <data name=\"middlesToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Milieux</value>\n    </data>\n    <data name=\"newReportToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Nouveau rapport...</value>\n    </data>\n    <data name=\"newToolStripButton1.Text\" xml:space=\"preserve\">\n        <value>Nouveau</value>\n    </data>\n    <data name=\"openToolStripButton1.Text\" xml:space=\"preserve\">\n        <value>Ouvrir</value>\n    </data>\n    <data name=\"openToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Ouvrir</value>\n    </data>\n    <data name=\"paddingBottomToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Rembourrage Bottom</value>\n    </data>\n    <data name=\"paddingLeftToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Rembourrage gauche</value>\n    </data>\n    <data name=\"paddingRightToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Rembourrage droit</value>\n    </data>\n    <data name=\"paddintTopToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Rembourrage Dessus</value>\n    </data>\n    <data name=\"previewToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Aperçu</value>\n    </data>\n    <data name=\"printToolStripButton2.Text\" xml:space=\"preserve\">\n        <value>Imprimer</value>\n    </data>\n    <data name=\"printToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Imprimer</value>\n    </data>\n    <data name=\"propertiesWindowsToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Propriétés Windows</value>\n    </data>\n    <data name=\"rDLTextToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Texte RDL</value>\n    </data>\n    <data name=\"recentFilesToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Fichiers récents</value>\n    </data>\n    <data name=\"redoToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Refaire</value>\n    </data>\n    <data name=\"replaceToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Remplacer</value>\n    </data>\n    <data name=\"rightAlignToolStripButton3.Text\" xml:space=\"preserve\">\n        <value>Alignement à droite</value>\n    </data>\n    <data name=\"rightsToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Droits</value>\n    </data>\n    <data name=\"saveAsToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Enregistrer sous</value>\n    </data>\n    <data name=\"saveToolStripButton1.Text\" xml:space=\"preserve\">\n        <value>Sauvegarder</value>\n    </data>\n    <data name=\"saveToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Sauvegarder</value>\n    </data>\n    <data name=\"selectAllToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Tout sélectionner</value>\n    </data>\n    <data name=\"showReportInBrowserToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Afficher le rapport dans le navigateur</value>\n    </data>\n    <data name=\"selectToolStripButton2.Text\" xml:space=\"preserve\">\n        <value>Outil d'assistance</value>\n    </data>\n    <data name=\"startDesktopServerToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Démarrer Desktop Server</value>\n    </data>\n    <data name=\"statusPosition.ToolTipText\" xml:space=\"preserve\">\n        <value>Position de l'élément de rapport sélectionné</value>\n    </data>\n    <data name=\"statusSelected.ToolTipText\" xml:space=\"preserve\">\n        <value>Nom du ReportItem sélectionné</value>\n    </data>\n    <data name=\"subreportToolStripButton1.Text\" xml:space=\"preserve\">\n        <value>Sous-état</value>\n    </data>\n    <data name=\"subReportToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Sous-état</value>\n    </data>\n    <data name=\"supportToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Soutien</value>\n    </data>\n    <data name=\"textboxToolStripButton1.Text\" xml:space=\"preserve\">\n        <value>Zone de texte</value>\n    </data>\n    <data name=\"textboxToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Zone de texte</value>\n    </data>\n    <data name=\"tileToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Carreau</value>\n    </data>\n    <data name=\"toolsToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Outils</value>\n    </data>\n    <data name=\"topsToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Hauts</value>\n    </data>\n    <data name=\"underlineToolStripButton2.ToolTipText\" xml:space=\"preserve\">\n        <value>Souligner</value>\n    </data>\n    <data name=\"undoToolStripButton1.Text\" xml:space=\"preserve\">\n        <value>Défaire</value>\n    </data>\n    <data name=\"undoToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Défaire</value>\n    </data>\n    <data name=\"validateRDLToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Valider RDL</value>\n    </data>\n    <data name=\"verticallyToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Verticalement</value>\n    </data>\n    <data name=\"verticalSpacingToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Espacement vertical</value>\n    </data>\n    <data name=\"viewToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Vue</value>\n    </data>\n    <data name=\"webArchiveSingleFileMHTToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Archive Web, fichier unique MHT...</value>\n    </data>\n    <data name=\"webPageHTMLToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Page web, HTML...</value>\n    </data>\n    <data name=\"widthToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Largeur</value>\n    </data>\n    <data name=\"windowToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Fenêtre</value>\n    </data>\n    <data name=\"zeroToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Zéro</value>\n    </data>\n    <data name=\"zeroToolStripMenuItem1.Text\" xml:space=\"preserve\">\n        <value>Zéro</value>\n    </data>\n    <data name=\"zeroToolStripMenuItem2.Text\" xml:space=\"preserve\">\n        <value>Zéro</value>\n    </data>\n    <data name=\"zeroToolStripMenuItem3.Text\" xml:space=\"preserve\">\n        <value>Zéro</value>\n    </data>\n    <data name=\"zeroToolStripMenuItem4.Text\" xml:space=\"preserve\">\n        <value>Zéro</value>\n    </data>\n    <data name=\"zeroToolStripMenuItem5.Text\" xml:space=\"preserve\">\n        <value>Zéro</value>\n    </data>\n</root>"
  },
  {
    "path": "RdlDesign/RdlDesigner.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"menuStrip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"newReportToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+N</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"newReportToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"newReportToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;New Report...</value>\n  </data>\n  <data name=\"openToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+O</value>\n  </data>\n  <data name=\"openToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"openToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Open...</value>\n  </data>\n  <data name=\"closeToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+W</value>\n  </data>\n  <data name=\"closeToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"closeToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Close</value>\n  </data>\n  <data name=\"toolStripSeparator1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>185, 6</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"saveToolStripMenuItem.Enabled\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"saveToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+S</value>\n  </data>\n  <data name=\"saveToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"saveToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Save</value>\n  </data>\n  <data name=\"saveAsToolStripMenuItem.Enabled\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"saveAsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"saveAsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Save &amp;As</value>\n  </data>\n  <data name=\"printToolStripMenuItem.Enabled\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"printToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+P</value>\n  </data>\n  <data name=\"printToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"printToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Print</value>\n  </data>\n  <data name=\"pDFToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>235, 22</value>\n  </data>\n  <data name=\"pDFToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>PDF...</value>\n  </data>\n  <data name=\"pDFOldStyleToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>235, 22</value>\n  </data>\n  <data name=\"pDFOldStyleToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>PDF (Old Style)...</value>\n  </data>\n  <data name=\"tIFFToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>235, 22</value>\n  </data>\n  <data name=\"tIFFToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>TIF...</value>\n  </data>\n  <data name=\"cSVToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>235, 22</value>\n  </data>\n  <data name=\"cSVToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>CSV...</value>\n  </data>\n  <data name=\"excelToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>235, 22</value>\n  </data>\n  <data name=\"excelToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Excel 2007 (Table Only)</value>\n  </data>\n  <data name=\"Excel2007ToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>235, 22</value>\n  </data>\n  <data name=\"Excel2007ToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Excel 2007</value>\n  </data>\n  <data name=\"dOCToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>235, 22</value>\n  </data>\n  <data name=\"dOCToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>DOC</value>\n  </data>\n  <data name=\"rTFDOCToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>235, 22</value>\n  </data>\n  <data name=\"rTFDOCToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>RTF</value>\n  </data>\n  <data name=\"xMLToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>235, 22</value>\n  </data>\n  <data name=\"xMLToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>XML...</value>\n  </data>\n  <data name=\"webPageHTMLToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>235, 22</value>\n  </data>\n  <data name=\"webPageHTMLToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Web Page, HTML...</value>\n  </data>\n  <data name=\"webArchiveSingleFileMHTToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>235, 22</value>\n  </data>\n  <data name=\"webArchiveSingleFileMHTToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Web Archive, single file MHT...</value>\n  </data>\n  <data name=\"exportToolStripMenuItem.Enabled\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"exportToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"exportToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Export</value>\n  </data>\n  <data name=\"toolStripSeparator2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>185, 6</value>\n  </data>\n  <data name=\"recentFilesToolStripMenuItem.Enabled\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"recentFilesToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"recentFilesToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Recent &amp;Files</value>\n  </data>\n  <data name=\"toolStripSeparator3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>185, 6</value>\n  </data>\n  <data name=\"exitToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+Q</value>\n  </data>\n  <data name=\"exitToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"exitToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>E&amp;xit</value>\n  </data>\n  <data name=\"fileToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>37, 20</value>\n  </data>\n  <data name=\"fileToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;File</value>\n  </data>\n  <data name=\"undoToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+Z</value>\n  </data>\n  <data name=\"undoToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>171, 22</value>\n  </data>\n  <data name=\"undoToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Undo</value>\n  </data>\n  <data name=\"redoToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+Y</value>\n  </data>\n  <data name=\"redoToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>171, 22</value>\n  </data>\n  <data name=\"redoToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Redo</value>\n  </data>\n  <data name=\"toolStripSeparator4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>168, 6</value>\n  </data>\n  <data name=\"cutToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+X</value>\n  </data>\n  <data name=\"cutToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>171, 22</value>\n  </data>\n  <data name=\"cutToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Cu&amp;t</value>\n  </data>\n  <data name=\"copyToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+C</value>\n  </data>\n  <data name=\"copyToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>171, 22</value>\n  </data>\n  <data name=\"copyToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Copy</value>\n  </data>\n  <data name=\"pasteToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+V</value>\n  </data>\n  <data name=\"pasteToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>171, 22</value>\n  </data>\n  <data name=\"pasteToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Paste</value>\n  </data>\n  <data name=\"deleteToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+Del</value>\n  </data>\n  <data name=\"deleteToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>171, 22</value>\n  </data>\n  <data name=\"deleteToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Del</value>\n  </data>\n  <data name=\"toolStripSeparator5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>168, 6</value>\n  </data>\n  <data name=\"selectAllToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+A</value>\n  </data>\n  <data name=\"selectAllToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>171, 22</value>\n  </data>\n  <data name=\"selectAllToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Select &amp;All</value>\n  </data>\n  <data name=\"toolStripSeparator6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>168, 6</value>\n  </data>\n  <data name=\"findToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+F</value>\n  </data>\n  <data name=\"findToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>171, 22</value>\n  </data>\n  <data name=\"findToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Find</value>\n  </data>\n  <data name=\"findNextToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+F3</value>\n  </data>\n  <data name=\"findNextToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>171, 22</value>\n  </data>\n  <data name=\"findNextToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Find Next</value>\n  </data>\n  <data name=\"replaceToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+H</value>\n  </data>\n  <data name=\"replaceToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>171, 22</value>\n  </data>\n  <data name=\"replaceToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Replace</value>\n  </data>\n  <data name=\"goToToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+G</value>\n  </data>\n  <data name=\"goToToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>171, 22</value>\n  </data>\n  <data name=\"goToToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Go To...</value>\n  </data>\n  <data name=\"toolStripSeparator7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>168, 6</value>\n  </data>\n  <data name=\"formatXMLToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>171, 22</value>\n  </data>\n  <data name=\"formatXMLToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Format XM&amp;L</value>\n  </data>\n  <data name=\"editToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>39, 20</value>\n  </data>\n  <data name=\"editToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Edit</value>\n  </data>\n  <data name=\"designerToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>F7</value>\n  </data>\n  <data name=\"designerToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>218, 22</value>\n  </data>\n  <data name=\"designerToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Designer</value>\n  </data>\n  <data name=\"rDLTextToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Shift+F7</value>\n  </data>\n  <data name=\"rDLTextToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>218, 22</value>\n  </data>\n  <data name=\"rDLTextToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>RDL Text</value>\n  </data>\n  <data name=\"previewToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>F5</value>\n  </data>\n  <data name=\"previewToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>218, 22</value>\n  </data>\n  <data name=\"previewToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Preview</value>\n  </data>\n  <data name=\"showReportInBrowserToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>F6</value>\n  </data>\n  <data name=\"showReportInBrowserToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>218, 22</value>\n  </data>\n  <data name=\"showReportInBrowserToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Show Report in Browser</value>\n  </data>\n  <data name=\"propertiesWindowsToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>F4</value>\n  </data>\n  <data name=\"propertiesWindowsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>218, 22</value>\n  </data>\n  <data name=\"propertiesWindowsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Properties Windows</value>\n  </data>\n  <data name=\"viewToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>44, 20</value>\n  </data>\n  <data name=\"viewToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;View</value>\n  </data>\n  <data name=\"chartToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"chartToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Chart...</value>\n  </data>\n  <data name=\"gridToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"gridToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Grid</value>\n  </data>\n  <data name=\"imageToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"imageToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Image</value>\n  </data>\n  <data name=\"lineToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"lineToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Line</value>\n  </data>\n  <data name=\"listToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"listToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Lis&amp;t</value>\n  </data>\n  <data name=\"matrixToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"matrixToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Matrix...</value>\n  </data>\n  <data name=\"rectangleToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"rectangleToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Rectangle</value>\n  </data>\n  <data name=\"subReportToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"subReportToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Subreport</value>\n  </data>\n  <data name=\"tableToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"tableToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Table...</value>\n  </data>\n  <data name=\"textboxToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 22</value>\n  </data>\n  <data name=\"textboxToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>T&amp;extbox</value>\n  </data>\n  <data name=\"insertToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 20</value>\n  </data>\n  <data name=\"insertToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Insert</value>\n  </data>\n  <data name=\"dataSetsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>222, 22</value>\n  </data>\n  <data name=\"dataSetsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Data Sets</value>\n  </data>\n  <data name=\"dataSourcesToolStripMenuItem1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>222, 22</value>\n  </data>\n  <data name=\"dataSourcesToolStripMenuItem1.Text\" xml:space=\"preserve\">\n    <value>Data &amp;Sources</value>\n  </data>\n  <data name=\"toolStripSeparator8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 6</value>\n  </data>\n  <data name=\"embeddedImagesToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>222, 22</value>\n  </data>\n  <data name=\"embeddedImagesToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Embedded Images...</value>\n  </data>\n  <data name=\"toolStripSeparator9.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 6</value>\n  </data>\n  <data name=\"createSharedDataSourceToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>222, 22</value>\n  </data>\n  <data name=\"createSharedDataSourceToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Create Shared Data Source...</value>\n  </data>\n  <data name=\"dataToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>43, 20</value>\n  </data>\n  <data name=\"dataToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Data</value>\n  </data>\n  <data name=\"leftsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>119, 22</value>\n  </data>\n  <data name=\"leftsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Lefts</value>\n  </data>\n  <data name=\"centersToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>119, 22</value>\n  </data>\n  <data name=\"centersToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Centers</value>\n  </data>\n  <data name=\"rightsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>119, 22</value>\n  </data>\n  <data name=\"rightsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Rights</value>\n  </data>\n  <data name=\"toolStripSeparator10.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>116, 6</value>\n  </data>\n  <data name=\"topsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>119, 22</value>\n  </data>\n  <data name=\"topsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Tops</value>\n  </data>\n  <data name=\"middlesToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>119, 22</value>\n  </data>\n  <data name=\"middlesToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Middles</value>\n  </data>\n  <data name=\"bottomsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>119, 22</value>\n  </data>\n  <data name=\"bottomsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Bottoms</value>\n  </data>\n  <data name=\"alignToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>180, 22</value>\n  </data>\n  <data name=\"alignToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Align</value>\n  </data>\n  <data name=\"widthToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>110, 22</value>\n  </data>\n  <data name=\"widthToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Width</value>\n  </data>\n  <data name=\"heightToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>110, 22</value>\n  </data>\n  <data name=\"heightToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Height</value>\n  </data>\n  <data name=\"bothToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>110, 22</value>\n  </data>\n  <data name=\"bothToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Both</value>\n  </data>\n  <data name=\"sizeToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>180, 22</value>\n  </data>\n  <data name=\"sizeToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Size</value>\n  </data>\n  <data name=\"makeEqualToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>135, 22</value>\n  </data>\n  <data name=\"makeEqualToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Make Equal</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>135, 22</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Increase</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>135, 22</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Decrease</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>135, 22</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Zero</value>\n  </data>\n  <data name=\"horizontalSpacingToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>180, 22</value>\n  </data>\n  <data name=\"horizontalSpacingToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Horizontal Spacing</value>\n  </data>\n  <data name=\"makeEqualToolStripMenuItem1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>135, 22</value>\n  </data>\n  <data name=\"makeEqualToolStripMenuItem1.Text\" xml:space=\"preserve\">\n    <value>&amp;Make Equal</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>135, 22</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem1.Text\" xml:space=\"preserve\">\n    <value>&amp;Increase</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>135, 22</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem1.Text\" xml:space=\"preserve\">\n    <value>&amp;Decrease</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>135, 22</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem1.Text\" xml:space=\"preserve\">\n    <value>&amp;Zero</value>\n  </data>\n  <data name=\"verticalSpacingToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>180, 22</value>\n  </data>\n  <data name=\"verticalSpacingToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Vertical Spacing</value>\n  </data>\n  <data name=\"toolStripSeparator11.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>177, 6</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 22</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem2.Text\" xml:space=\"preserve\">\n    <value>&amp;Increase</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 22</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem2.Text\" xml:space=\"preserve\">\n    <value>&amp;Decrease</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 22</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem2.Text\" xml:space=\"preserve\">\n    <value>&amp;Zero</value>\n  </data>\n  <data name=\"paddingLeftToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>180, 22</value>\n  </data>\n  <data name=\"paddingLeftToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Padding &amp;Left</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 22</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem3.Text\" xml:space=\"preserve\">\n    <value>&amp;Increase</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 22</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem3.Text\" xml:space=\"preserve\">\n    <value>&amp;Decrease</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 22</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem3.Text\" xml:space=\"preserve\">\n    <value>&amp;Zero</value>\n  </data>\n  <data name=\"paddingRightToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>180, 22</value>\n  </data>\n  <data name=\"paddingRightToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Padding &amp;Right</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 22</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem4.Text\" xml:space=\"preserve\">\n    <value>&amp;Increase</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 22</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem4.Text\" xml:space=\"preserve\">\n    <value>&amp;Decrease</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 22</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem4.Text\" xml:space=\"preserve\">\n    <value>&amp;Zero</value>\n  </data>\n  <data name=\"paddintTopToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>180, 22</value>\n  </data>\n  <data name=\"paddintTopToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Padding &amp;Top</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 22</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem5.Text\" xml:space=\"preserve\">\n    <value>&amp;Increase</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 22</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem5.Text\" xml:space=\"preserve\">\n    <value>&amp;Decrease</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 22</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem5.Text\" xml:space=\"preserve\">\n    <value>&amp;Zero</value>\n  </data>\n  <data name=\"paddingBottomToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>180, 22</value>\n  </data>\n  <data name=\"paddingBottomToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Padding &amp;Bottom</value>\n  </data>\n  <data name=\"toolStripMenuItem1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>177, 6</value>\n  </data>\n  <data name=\"centerHorizontallyToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>180, 22</value>\n  </data>\n  <data name=\"centerHorizontallyToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Center Horizontally</value>\n  </data>\n  <data name=\"centerVerticallyToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>180, 22</value>\n  </data>\n  <data name=\"centerVerticallyToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Center Vertically</value>\n  </data>\n  <data name=\"centerBothToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>180, 22</value>\n  </data>\n  <data name=\"centerBothToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Center Both</value>\n  </data>\n  <data name=\"centerInContainerToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>180, 22</value>\n  </data>\n  <data name=\"centerInContainerToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Center in Container</value>\n  </data>\n  <data name=\"formatToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>57, 20</value>\n  </data>\n  <data name=\"formatToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>F&amp;ormat</value>\n  </data>\n  <data name=\"validateRDLToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>179, 22</value>\n  </data>\n  <data name=\"validateRDLToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Validate RDL</value>\n  </data>\n  <data name=\"toolStripSeparator12.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>176, 6</value>\n  </data>\n  <data name=\"startDesktopServerToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>179, 22</value>\n  </data>\n  <data name=\"startDesktopServerToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Start Desktop Server</value>\n  </data>\n  <data name=\"toolStripSeparator13.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>176, 6</value>\n  </data>\n  <data name=\"optionsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>179, 22</value>\n  </data>\n  <data name=\"optionsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Options</value>\n  </data>\n  <data name=\"toolsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>46, 20</value>\n  </data>\n  <data name=\"toolsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Tools</value>\n  </data>\n  <data name=\"cascadeToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+Shift+J</value>\n  </data>\n  <data name=\"cascadeToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>197, 22</value>\n  </data>\n  <data name=\"cascadeToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Cascade</value>\n  </data>\n  <data name=\"horizontalToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+Shift+K</value>\n  </data>\n  <data name=\"horizontalToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>211, 22</value>\n  </data>\n  <data name=\"horizontalToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Horizontally</value>\n  </data>\n  <data name=\"verticallyToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+Shift+L</value>\n  </data>\n  <data name=\"verticallyToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>211, 22</value>\n  </data>\n  <data name=\"verticallyToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Vertically</value>\n  </data>\n  <data name=\"tileToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>197, 22</value>\n  </data>\n  <data name=\"tileToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Tile</value>\n  </data>\n  <data name=\"closeAllToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+Shift+W</value>\n  </data>\n  <data name=\"closeAllToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>197, 22</value>\n  </data>\n  <data name=\"closeAllToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Close &amp;All</value>\n  </data>\n  <data name=\"windowToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>63, 20</value>\n  </data>\n  <data name=\"windowToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Window</value>\n  </data>\n  <data name=\"helpToolStripMenuItem1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>116, 22</value>\n  </data>\n  <data name=\"helpToolStripMenuItem1.Text\" xml:space=\"preserve\">\n    <value>&amp;Help</value>\n  </data>\n  <data name=\"supportToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>116, 22</value>\n  </data>\n  <data name=\"supportToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Support</value>\n  </data>\n  <data name=\"aboutToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>116, 22</value>\n  </data>\n  <data name=\"aboutToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;About</value>\n  </data>\n  <data name=\"helpToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>44, 20</value>\n  </data>\n  <data name=\"helpToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Help</value>\n  </data>\n  <data name=\"menuStrip1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"menuStrip1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>1284, 24</value>\n  </data>\n  <data name=\"menuStrip1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>29</value>\n  </data>\n  <data name=\"menuStrip1.Text\" xml:space=\"preserve\">\n    <value>menuStrip1</value>\n  </data>\n  <data name=\"&gt;&gt;menuStrip1.Name\" xml:space=\"preserve\">\n    <value>menuStrip1</value>\n  </data>\n  <data name=\"&gt;&gt;menuStrip1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;menuStrip1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;menuStrip1.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <metadata name=\"mainTB.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>132, 17</value>\n  </metadata>\n  <data name=\"newToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFsSURBVDhPpZM9S8NAHIfjohQsfgMFUfALqCAOgrSb4iwu\n        4lCNINhBF5eu0kmwg7Xt4OSiFFQEBz+Dzg6iuDTJ3eWlL6bmft6FJNDQN/EPD2T4P8+FC1HK5fJVLpdD\n        P/L5E1QqWdzeqNA/50+5PZYCUSYUOXJh0FikiCbbg2utwdHTrqXNPXAzuc25kogCuq6jVqv5aJoWwYw7\n        Iav4cZbgNXYFKlp02WuSyWtuJhajQFyWQYlFLsXJ60LMgLv3gkd49X24dPqF28mtjkBclti0GARUIT+B\n        t5/F8wFcNvUKa3wjCnSTDcOASapomRl4zgq85qEgi2+2yhvajLiH0dmeASlLKHmHQwsisoO2nRakxEVu\n        el9vC0eAMtIRiMuEkIAP2KyKOjsTXKBQOIb/CeWEgV4ypTSCMebvSifQhw9IeWCgl2iaZoScroFuJ4en\n        hrJlWf7uwED8tUO5b+Av0xEY5m+MUyqVzgP9v6Mov7fM84K1Sa9+AAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"newToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"newToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 35</value>\n  </data>\n  <data name=\"newToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>New</value>\n  </data>\n  <data name=\"openToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJ6SURBVDhPjdHLTxNRFAbw2bpx5z+CPHTnpkiUhdUyTBlI\n        TUHqwrBhIY0Ro4YENRHCK0IRbOlUWxusEC1oCDTSkC6Q2gfQ0pZSKH0R1Lgo9PV55xaJGBVu8tvcuee7\n        555h/lwsJ9urlddkWU6aq5VfpchenuzlFdfrlmUy2ZmDo8XV1tY2qlard34hh5FOp7G/v49MJoNsNkvl\n        cjnoxnSQy7kNnudPH5TTgG8OhwMLCwuYn59HTe01+P1+uN1uyuVyYWlpCYuLiygUCuju7irwfJ2HdHKK\n        BrS2tn612+2wWCwwm800IBAIYPj58BFer4cG5PN59Pb1Fvh6+RANaGlp2bXZ5mixyWSC+IRIJIL19XWE\n        QiEqGAwiHA4jkUggGo3C6XSiQcF9pwEqlWpnZmYGRqMRgiDQgO3tbYy+GCE3aw6JIZubm5TzixN8g/wH\n        DVAqlSmr1QqDwQCtVgsybaRSKSSTSUq8VRSPx6lYLAafzweuni12oFAoEpOTk7hwS8C5m0UVRHlzURml\n        P1R64zdNwhbDcVxifHycHpzzJv/KJlo+6qMrTkJ0BYZl2Zj4fjH9E/nQ827tWP1TAUw7Yyht1OcZqVQa\n        FQQ9aVcP+0oKz6aDx+q3BjD1OYaSRl2Wqa6u3hKHV6ESMOtKQPMhiKF/GCCFXRN+PLGs4q1jC2WNQoap\n        qqqKaDQaOjzBtoGnEz48frOKDvMKHpqWcd/oRftLD9RjbtzWuag7ghv979dQ1jS2x1RWVoYHBwdxngT0\n        kfc9MHlx1+D5r3uvPOh47cXZZiHNSCSScHvnAA2o6ZwF+2juRC63W1Gu0vsYyaUrI0f+7UkptbslTcLF\n        n+nUqr8bmJhMAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"openToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"openToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 35</value>\n  </data>\n  <data name=\"openToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Open</value>\n  </data>\n  <data name=\"saveToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIuSURBVDhPnZNbaxNBGIbzP/whFkW04I0iguBFbywo2IDb\n        nKylB2zNTarY0mKgpbbgemWaNriCISUaieYASZZsDjbBYtZgkhbaHMwJYmKS152xbrqNeuEHz87wzTsP\n        M7usatQ0cf/K1JPZ0+oF3YD68cKAen5HAmdGHn6/pDfuDU1Om1T/qkGdefjm8ptZoy16gxP2w9H0N/g/\n        F7DuSeP2/PPOBeZRRz09fOoo3l/Mg7mVEcMYbunHcVljwuC9NVycZPHMvYsPu3lcm+Nw9c4MtHqmD42O\n        MaoYgxaZfRGkxK9JBJMitE8dINfY4jMwb3/E9Zl1JNJ7NPO76vU6lajujjPodDoolUooFotIZ75gYvUV\n        FUxZQlh6LeAcswibyyutSxmSKxVRq9d+Ccij/aONfKFANx2HCIbM7/r6BSlbqx0TtFotHBwcIhTx0cCq\n        OwUD65YZY99j5e0nurZs5XAoZavVak/QbDapJJfLwc+7ZQnZSNgKpGnP/MJGM+T+lUpFKSDv4KTExmep\n        6CyzJG8mGZJVCBqNBrLZrCwhCDsBnB9dpKK1l3baa7fbNEOy5XK5J+h2u0cf589FjkzI5/OUPoEgCAgG\n        gwr8fr9ifpJkMqkUkCbLsuA4Di6XCz6fD4FAANFoFFarFfF4XB6dTidCoVBPEA6H4fV6sblphd1uh8fj\n        kQU8z2PDsoFYLCaNFjpuOxxKgSiKSKVSMolEghKJRP6KLCA/BJn8DxodY/wJx8naTpafh/MAAAAASUVO\n        RK5CYII=\n</value>\n  </data>\n  <data name=\"saveToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"saveToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 35</value>\n  </data>\n  <data name=\"saveToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Save</value>\n  </data>\n  <data name=\"cutToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJoSURBVDhPjZNbbxJBGIZZaGlLAwaILaxQerhoTLzzyiuv\n        TIy/of4OE5PeSdkddhEsSmow0bScCi0G5JAaUxNibUs5tNao0aTBC9om2BigIrWz48yyxRrq4bmaed/3\n        m/nm26zsNICfum7nmMq02/FWktoAjvE4HNyBtD0bh5P5Vq/Xod3OpNwP7k1KsojTBcqFYk7gXdyyJHXC\n        AKuwtV1ElS8V6HI7IpIsY3nr1flIAK2sZhB/FzQkuRPAgVo88RTV6zWB5Zl3J13YeeZoI7+GFqNh3J11\n        WwyfBQBTV3AYffz0gXQhOKf5F4BnZpLpOMrlswh7EM/it6d1wHGglEjGUKPRwAXWqvfRjJBIxlF6KQFZ\n        jolJsT/DcbbLZBal0g6q1qrwodeDgiEfub1BPCn2d+wO5snS8xTc3SsjMjxcLADO5pHsfwN42wTL3kGv\n        VjIoHosi76WLh/99+8LgIB8eGKj5lUr0+MY1wS+Xo9e0EWH964LBwEqxTrA5GerpgYXhYZgdGhJS5zRw\n        toua83UpjtdoGuWxvmqxwJBKBSMGw02prMWiwTDhUyqFosXyI0BR6Zc63Xc/RSHizepkmnWzCS6f1zeD\n        FJXK0fTRHM5GafrX5wxqteWtsTEYkMtvk33ebD70q1THookJKhRw/QJdJWucuUW6ITWiSQir1c0CPpms\n        n6lUzuLICAz09bV/KPy07Bt8QVqtvk/2m7jTsFYr5kXCev3O+/FxmDOZmlmzGQa7u8tRo7E9dbLG2v7m\n        6CjcoOlWRqvdl+zWDAIazS7upI4Pa5wuPkHMqNWZ+d7eg1B//+dWRib7CQA5NjtIz9vHAAAAAElFTkSu\n        QmCC\n</value>\n  </data>\n  <data name=\"cutToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"cutToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 35</value>\n  </data>\n  <data name=\"cutToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Cut</value>\n  </data>\n  <data name=\"copyToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEkSURBVDhPnZNBT4MwGIb5h5r4e0wv24SOgZcZw9WjP8LE\n        EbaDBw/8guGJkEqgApaN2g+Y3aC6Zl/ypAnp+/B+CRiOg69MPEE6LO7xjTEcE89um6ZBOoCkj8k5CNKU\n        IELGwHNAS7DZBMjzlu8mnnIdFi5+PhEA2L7bc80ByaiBNZ+1gjT9/BelAHY+NIBL63WgRCmAcBD4lzcg\n        JEFJkpxt8KcAwr7/qtWAMcbzPJeCqqpQHMct5xqIVXlZFnzlr6QgyzJEaYbgPBYMsR3rhFbguva1kIiv\n        rANWaJr9KAy1H71le1ZVyaOPbScYjhDUjH2PwseCKOrCpjV562NyQEApbfcsii++29W8rmsehqEQPPy+\n        WflfwMwd60lI+ksKrOmLDBvGD1Wp2VOC/nz0AAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"copyToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"copyToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 35</value>\n  </data>\n  <data name=\"copyToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Copy</value>\n  </data>\n  <data name=\"pasteToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAG+SURBVDhPjZNLT9tAFIXH0AVLfkOLCv8BQZ7/gpAsahVw\n        nEfFkiRmgYCyR6yrVmLdkAAmUgVIsKCEHVVCNlkAzsOOk7BhQX3wHZQIQ0A+0pGse+Z+M2PNZQMkRCLh\n        QigUwnNTjbKnJS8UDTIxFhBaclBANDhsN8xgc/M7trY2uOmbapTRGsknGJKPzfJmxcM+xILC3eHKGH5l\n        ppGMiQiHw1CUFJaX09yZzBKvxWURP1JeqMonyF6hrShsiCU8bDQRGLo/XR/Ht4SITqeDarWKQqHgMNW6\n        3S7i9gYna+OQPOwh4mEjDsDXeRGkdtscaNLcgojj1YnXgJO1zw7ATj7vsGm2eOYa8NymacAwmjwbCIi/\n        c4JsLoff2SwajRrPXAPoyIaho9ls8OZKpcwzV4BWy4CuN+3mOup1DVdXJZwXz3jmCqDrT7vWarcoXvyF\n        erCLfTXPs8EAvxNAu2raDcrlf1DVXV7ryRVA065RKl3i6PgP9vZyvEaiZnpEbwKSsS8w7PtbltU3/UzL\n        +t9v7rkPoFmQA8Ldgf2+t9OTWLSfsyTPv/LP1FTfO0sfEe3NAinqZ6IN4dPoxpK3N42MPQIzXFlsdK1p\n        CgAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"pasteToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"pasteToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 35</value>\n  </data>\n  <data name=\"pasteToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Paste</value>\n  </data>\n  <data name=\"undoToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAG0SURBVDhPnZLdK0NhHMcf2hIrjGGG0uRCKS8Xrif/gH/A\n        pYuj2MVq4eZc+SPUOGZeCxeuZHS2s6M2S0pexmjGzBgWxma0nz3nPDvOCplPfXue8+t8P8/p9KCf4KcQ\n        kG1+sONIg8v/EgwPIzUuvj8v5y+Ql99DzYIAx24tv7ZbKnbXrboZkwmpyOu5yMuvwQ5IXTZC6s4EqagR\n        EpEhiEeo5LpVs89OaQ5oc3E9qYnQNCqRyudtkLjohEd/C7xk9ni93KmGu+MueL2m4NzbnXbaKkP0qLKT\n        1MW/nS0nM2UswMkKInsNUrAouGOATWvVNj5YEEiffz8iCOKBVjh0KKTIBQG3Cp6vBmBrQZvcYKq8ggDz\n        JTHDiUshrG+3VE4SZ8qMoAR8XBFET43A2uripC4il+DgfU4WC+AhOAQBTxk8hShw2GqSpPqFXIJXMkY8\n        g9rXxlGvaxJ5XsKDELswg9NW+/M9yZ5KHiV4C9K5lwohFhpLc9Pq3y/adwKMe740HT7qSzvmmmJk9Hdc\n        E0jv4w0fB1xPRqCnyfjvcAzqu/H3rzpn1StklB/crJbi53UUyyCtOEHoE0l+Tmhm5s0KAAAAAElFTkSu\n        QmCC\n</value>\n  </data>\n  <data name=\"undoToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"undoToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 35</value>\n  </data>\n  <data name=\"undoToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Undo</value>\n  </data>\n  <data name=\"textboxToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABOSURBVDhP5YxRCgAgDEK9/6UXgcE2I6LtrwchThNWpGcA\n        wNXb0TOQOX3I/DLgvWTUgJScl4wayKXJusmdGmgf8F4yakBKzktGfaY4YDYA0LdC6GTV0nUAAAAASUVO\n        RK5CYII=\n</value>\n  </data>\n  <data name=\"textboxToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"textboxToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 35</value>\n  </data>\n  <data name=\"textboxToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Text Box</value>\n  </data>\n  <data name=\"chartToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAATCAYAAACZZ43PAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAMtSURBVDhPjZN7SJNRGIfPZmlmVjhdsVJWWeYlSewqWKTp\n        t5kx59amlqmY2Fg20+hCFyMIsVA0LbsZmolRXtfM6/iqWQblvDTLS5qYROlUCKII7NcnfdEIJR94/3rf\n        3/NyDueQf6Hp9/P07Z9Vd+nBnrMl3SXxV1rd2dbssIkso7aefoxDNzsQe7kd2862/CAAh23PAkUZRZQV\n        WBSrhVdKC9ZpmienBDCZrNmJ/8AK7P8Ikpsnvw20pX/rejzxlS7Ufyk96c9OzsAfQYwWnkeewzvlGboP\n        +mHk2mFM5OyD+ZjfW3ZyBliB3X4t1mqa4aExoE3siDdRrhhN9cHnU9vHjEP61hpTfml1W5Ynm7JgSqAo\n        x/zoKrgmGeCW9ARGMQ9dESvxSeONrlN+yHt+HveM6bhIH5hkUxaE36OI/D5so8qxQv0ErmoaL0U8dCqE\n        +Kj2xNNkLyzO3ozjtTKm5GBTFoSXUERWinkR9+GioiFU6dFC8WCUueBDojvoJA8szNyIZF0YNA/DphFI\n        iigiLYaNohSCRD2cExthYAQvpcsxGL8GepUbFmT4Iq5iF2KZYlMWSG5TRFIIa1kxliQ0QpDQADqYhxaJ\n        AAMxq9CYsBq2F3zAnBRSptiUBbtuUGR3AeZKC+EYXw9+fB2aghxgCF2Kvn1C1MethM05bwQWByDgTsAM\n        gtAbsJIUYHFcLXhxj1DHCOgQJ/QonVEbLcSc017YUOAP31v+0wmuUiQkH9zQ68xjqsGiGB10Ox3QJGLe\n        glwAXaQLrE54YnX+Frgyxab+os5tOE9EeeCGXIVt9EMsiNaiihHUMRf5OmwptIpl4B71AD/HF7ws3+9s\n        jJDR0VF7s9m8sKjW2E+Cc8AV58J6bzVs91ahPNABNUE8dIQ6wSBzMS8/s+OBXeb6DF6Gj4CMj5vTmPDA\n        8PDQz/7+vrGMonqaBGWBQ2XDKqISc6MqUZMqndCJ+HgV7DhsFDmp2J2/Ybamj4x8ejH0YfB737tuFFTS\n        IIGXwAnKxNSf4MgrJtPSwG1Ui9eY9njM/KV7e3ttenpMm9o7W5NSc8qL+bLcXo6yos5KWRnIjkwDIb8A\n        AZS7aY1FADYAAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"chartToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"chartToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>60, 35</value>\n  </data>\n  <data name=\"chartToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Chart</value>\n  </data>\n  <data name=\"tableToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABLSURBVDhP7Y5BCgAgCAT9/6cNo5UtDNIuHRpYVj0Mil7S\n        BSJSyiTIEgpgRkB09+bF4JlZ71vBKbHAmgOC+//AajQvGR78oBIX1FFtqeUDKMm9WRgAAAAASUVORK5C\n        YII=\n</value>\n  </data>\n  <data name=\"tableToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"tableToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>58, 35</value>\n  </data>\n  <data name=\"tableToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Table</value>\n  </data>\n  <data name=\"listToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABrSURBVDhPpZEBCoBACAT9/6cvhBtRucWrBhbbyinK1k9C\n        YGYRyL1fgyJQk9AztX1AC3iSmhstAF8gB2bBQAj6x7qlCPK85d3dB7SAN1FzowXgC+TALBgIQf8L+djp\n        HYogT4clwrlMba9Z6wH7k32tztsDcQAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"listToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"listToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>49, 35</value>\n  </data>\n  <data name=\"listToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>List</value>\n  </data>\n  <data name=\"imageToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIjSURBVDhPjZNdb9JQGMeN936DXe6zjCXLkAmZd41vMzpj\n        jCa7MyFmicbbaYwxURnbZHNxMsJwHZuIQUDk/aWlLYW2oMggwAcw+Xt6BnQjLOFJfjlP2/P8enp6ngt6\n        ZDKZiWq1yqiqypTLZUaSJEYQBArHcUwul2PS6bQ+XrXb7Rdp0enged7c7nSg/jlGpdaArNVRUn9DrNQg\n        yBr4kgJOrNCRvGilV2ZEoVC4XG+2sf1dgD+p4Cil0pFNVPDlVxnenzLcYQk7IQGtVguapj3ulZ5EX+CJ\n        lOCLyfBGSySX4P4h4VNIpOKtYJEKut0ulZDPvd0rp3tABa4Aj81vPD585bB2VIDTn4fjIIf3bA7v2CzN\n        Pwb15wXwovwvEAhMUEE2m7XoAn3S2/3xKJL9IIJJKkilUlQwauJ5SGUN4XB4IJgbFqzsBbHs2cCTvddY\n        Zl/gqf8lnh28wXPfFl75wpCV2lmBcqzinvsh7n5+hIWdO1j0LGJpf2kk970PUFQFQxCPx+ekvxKmV6fH\n        htd4JBKJEwFJrkh1CVOOqbERa6IhiMViVGBaNcGyYcHM2gzNRxX2kesy8vn8QGDtr0Bfns1lg9Vlxez6\n        LJXp94YFSkMxBJFIZCAYxuQwUdn85jzM6+aBTGtqhiAajdoa7QZ287vnwhZZHAqH8HE+et3sNA2B0+mc\n        JL9yIZlM3iLHmkLa9yZpXwo5qTd0SMF1HdK9OtdCodCl/yWemuWO29yBAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"imageToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"imageToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 35</value>\n  </data>\n  <data name=\"imageToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Image</value>\n  </data>\n  <data name=\"matrixToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABcSURBVDhPzY5RDoAwCEO5//l2H7RLauqGmbAPfUkD3ccb\n        5pt0gZmVchNkeSUY37UvBXhjnnqfWjKEAkwGtHMiurOHggyhAJMB/7hA+eYC/qg7CAUZJkEll6CO+wEV\n        wABNUS6u4wAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"matrixToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"matrixToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>65, 35</value>\n  </data>\n  <data name=\"matrixToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Matrix</value>\n  </data>\n  <data name=\"subreportToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABdSURBVDhP7Y5RDsAgCEO5/6VZalYCWuN0v76kEiopmP+k\n        BZjZUjMiYMVspgRwG0WUR0oAUEOAfv8/BHyhLGwPDdQsIvy4KDc76ADULCL8ewHKW3OzwxBwogg4x/0B\n        zrQYE6q0TO4AAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"subreportToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"subreportToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>83, 35</value>\n  </data>\n  <data name=\"subreportToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Subreport</value>\n  </data>\n  <data name=\"rectangleToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAuSURBVDhPY/hPIaCeAQwMDCRhGEAxgFgwasCoASCA0wBS\n        MAwQby0OMNAG/P8PAC/Ffqw7zhfAAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"rectangleToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"rectangleToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>83, 35</value>\n  </data>\n  <data name=\"rectangleToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Rectangle</value>\n  </data>\n  <data name=\"lineToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABJSURBVDhP1Yy5DQAgDMSy/9JBLgN5RYFwe2eLXvJhQMQq\n        o8AuQzvgydAKRDKUgUyGdK1kCB8dGdxXV4bjOZHBvKcyzI2N1wHVBZfk3kzElYBzAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"lineToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"lineToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>53, 35</value>\n  </data>\n  <data name=\"lineToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Line</value>\n  </data>\n  <data name=\"fxToolStripLabel1.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Segoe UI, 9pt, style=Bold</value>\n  </data>\n  <data name=\"fxToolStripLabel1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>19, 35</value>\n  </data>\n  <data name=\"fxToolStripLabel1.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"fxToolStripLabel1.ToolTipText\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"ctlEditTextbox.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>250, 38</value>\n  </data>\n  <data name=\"zoomControl.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Segoe UI Semibold, 9pt, style=Bold</value>\n  </data>\n  <data name=\"zoomControl.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 35</value>\n  </data>\n  <data name=\"mainTB.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 24</value>\n  </data>\n  <data name=\"mainTB.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>1284, 38</value>\n  </data>\n  <data name=\"mainTB.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>30</value>\n  </data>\n  <data name=\"mainTB.Text\" xml:space=\"preserve\">\n    <value>toolStrip1</value>\n  </data>\n  <data name=\"&gt;&gt;mainTB.Name\" xml:space=\"preserve\">\n    <value>mainTB</value>\n  </data>\n  <data name=\"&gt;&gt;mainTB.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;mainTB.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;mainTB.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <metadata name=\"toolStrip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>224, 17</value>\n  </metadata>\n  <data name=\"boldToolStripButton1.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Segoe UI, 9pt, style=Bold</value>\n  </data>\n  <data name=\"boldToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIySURBVDhPxZDta5JRGMYf+rC+9g9Eudaip5W1ZFBEFAsy\n        HVmx3IumM20RhcNABtFmtIY6p9mcrWnOnEFljhYxtt6mITqmDO1ttWq1fRgV1KIvRXTclceekcP2LeiC\n        HxzOff1uDof55+ErvctK1b6fmzV+5ELv6IyrLR6Bxq8/2xtLv5/9hg9fvmeh51M9kTSdcbVFYjAsKav3\n        /UhNfsb1yDQ09lCa4ht+gzuxSdAZ7XDt/GxSessPnxsir2a+or1/HAKVL00x9T1H8NFrCPVBslHl2cXV\n        81Oq8jwLhCcQjL6D1hnJLPBMC5TeKY01DPPNp2hwhEE7XH1h1lX1LN+qvpIOJadgvf0S2477SYnMtZ+y\n        5Vgv0V1OQu9OgF/rTtMup/3JBvklZ6Pj/pxn6AVOuhJgZRcJezBQkEXmJHJLFHX2BHY0BObYmu4uTvud\n        IuGFpWy1g3TeSqL56mMozCGslXYuoOL0PUhNoxA1hcFWdRDqcDrDrKm01+7W+UnrtRS0rhT03icw903A\n        ffct+kdmEB3/hFgG8ZkY9hhiKFG4CXU4nWGKD5yfPWJ5gBNdY1B3jEFhS6DGEkelcRSSlhGIOHGe7boB\n        rM44WZknsa5npTZS3xHHoYzIr3ORVZJ2/A1W3k3oAmFzFMX7bIS6TJHEMrhTG0R1WxzipmEUikyZzzMU\n        ZLfnhN7RWXnjw+wryo7eAG+vZZBZITZ+XCkyYh6e2NTCOXkprGhrze1Slxv9tzDML8KYXPj7M3GWAAAA\n        AElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"boldToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"boldToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 24</value>\n  </data>\n  <data name=\"boldToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>B</value>\n  </data>\n  <data name=\"boldToolStripButton1.ToolTipText\" xml:space=\"preserve\">\n    <value>Bold</value>\n  </data>\n  <data name=\"italiacToolStripButton1.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Courier New, 11.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"italiacToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHeSURBVDhPY6AbMElarG6UtvCPccri/yBslrboJ1SKMNBK\n        ni1kkbH457qj9//fffH5//Ebr8GGQKXxA636ejbz5AXPpqy/8O/wlRf/fas2/91x7tl/o6SFxBlglrJw\n        e/GM/X/P3nn73z57+V+DhHn/Z++6+x9EQ5XgBkBFVWENm8GaAys3/TVKmLdQL3bO/4pFl/6DaKgy7EAv\n        dpa7febSv4evvvyf27/3n0HMzEf29fUsOtEz/+fMOP8fREOVYgLd6GnqBvEz/mw6/vB/0+Kz/7WjZvxW\n        i5wpApLTjpj2P3HCmf8gGqwYHWiFzBbSjZzyc+aWa//711/7rxs+/a9mxDRDqDSDZtiU/6EdJ/+DaKgQ\n        AmiF1rPphE1+Vjvz8L8ZO+7+9ypf9089eOJ/ZKwVOv2vV8MxMBuqDQE0gidtj2ra/Hfatjv/06ac/Z85\n        7dz/svmX/zevuPF/0qY7/xftffh/6f5H/z3rj/1XDexDNUDVv6/KIX3h3771N/+7Fq36p+zX8x8bVguY\n        9BdkAIgN1crAoODd4a7u3/83Y/Kp/37VO/4r+PT8lPNuF4RKowBFn06wC0A0VIiBQdmn65KCV/t/EFb0\n        aPuj4N6kDpXCAHKenT9B6kA0VGhAAQMDAGs8BRORapJxAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"italiacToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"italiacToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 24</value>\n  </data>\n  <data name=\"italiacToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>I</value>\n  </data>\n  <data name=\"italiacToolStripButton1.ToolTipText\" xml:space=\"preserve\">\n    <value>Italic</value>\n  </data>\n  <data name=\"underlineToolStripButton2.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Segoe UI, 9pt, style=Bold, Underline</value>\n  </data>\n  <data name=\"underlineToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAH8SURBVDhPY8AG9OPnCxglL/xtnLL4PwiD2CAxqDRhYJKy\n        uLRs9uG/d59//g/CIDZIDCpNANTXM5mnL/p5+MqL/81LTv0D4a2nHv0HiYHkoKpwA4PEhS5R9Vv+XHzw\n        7r9Z0uK/ILz1zJP/7qVr/xjGz3eGKsMNjBLnXll18Pb/mVuv/jdKnHcPhOsWnvpfOusokD/3ClQZdqAd\n        Pk/WOnXh3/N33/53LV7+Rzd2lj8I2+ct+dO88vJ/g5g5f0FqoMoxgX70zOnNC479W7b/zn/tmOl/jNNm\n        soKwdvT0P3nTT/33Kl/7Tydq1lSoclSg4jGRXStqyp9NJx7+j2/e/E87aupkqBSDdsTUyW7Fq//F9Rz7\n        rxUx+Q9ILVQKAdRDJkeFVq3/u2Dvvf/WWQv+qIdM+o+MjVPm/YnqPvVfP2EOUG5yFFQbAqgHT3hXv/D0\n        /5rFV/4Xzr7wv3LR5f/NK6//79tw6/+cnff/rzz0GCh+6b9d4db/qkH976DaIEDRv1dXN3rSn9olV/4b\n        J8/5o+zf8x8b1oqZ+cej7uh/tYC+PyA9UO0MDKr+3ds9Stf/D2879F/Zu+OPVmg9G1QKDkBiSl4df5zL\n        9/43S1/5X9GveztUioFB2bv9pYJX+38QVvTuaIYKYwAln65WmDp5oB6oMIUAZiK5mEID2v8DADvdTITS\n        +eOLAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"underlineToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"underlineToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 24</value>\n  </data>\n  <data name=\"underlineToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>U</value>\n  </data>\n  <data name=\"underlineToolStripButton2.ToolTipText\" xml:space=\"preserve\">\n    <value>Underline</value>\n  </data>\n  <data name=\"leftAlignToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAC4SURBVDhPtZPNDoMgEIR9+SbGxt6Nb9BXK/Ir6oktQ9Rq\n        IwSadJNJloX5GA5UqPbRPOvmRiWCJ5hRGJTWva1ptX8AyzJnyTkXB3RdF1UWIEf/BaSiz/NE02R/S7CZ\n        rR3TABw4ahwNGaNJa7X2Jg3o+/7yGdAGSgIQ9Rj3mEApSVLKOADG82Hhe+17FYxYC8HjANz4HXsDwcg5\n        p2EY4oCruEKI3cgY83rFAdjIEeoEwNfEoEjhO1fVG5hWBsB0+sVCAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"leftAlignToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"leftAlignToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 24</value>\n  </data>\n  <data name=\"leftAlignToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>Left Align</value>\n  </data>\n  <data name=\"centerAlignToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADCSURBVDhPnZPrCoMwDIV9+YE43P/iG+zVerE3L7/Mdqpu\n        6qi2CxwIac/XpJACUT+qZ1ndKEfwBDMChdy41yUt9i9gHIckTdMUBzRNc6pLQNf5U10CUpQEYIzthNow\n        9NT33X8drGaMkQXYGr135Jy7BuC3jyNAzlmy1pwD8OL80nzZGE1at9S2asl1HPDbLiD2bTTBuIKigNno\n        w5zH9mFUSpGUMg7Ytq6UDJeFEMQ5/+RC8DgABylC7ABYTRSyFNa5KF4PnQfhk2vpwQAAAABJRU5ErkJg\n        gg==\n</value>\n  </data>\n  <data name=\"centerAlignToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"centerAlignToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 24</value>\n  </data>\n  <data name=\"centerAlignToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>Center Align</value>\n  </data>\n  <data name=\"rightAlignToolStripButton3.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADFSURBVDhPlZPbCoMwEET9+YJY7LsE/ID+mUbN1cuTWyet\n        1FajycJAbnMy+7AJKn9kzzS7UYzgcWYUDmLrnqf0sX8B0zQGaZ7nc0BZlsQYO1Tf22sAHvkUlOBKwYCj\n        VozR4YBtdGuNM2Md1cI4DjQM/QZirgGIWhTFobRW5wD8uMbFY6UkSSlIiI66rl3W0g/YxwVELxDljCvI\n        C3gbretzTfDfTl3XfsA+uqSmaYhz7oxVVS177gfgIkSoHwBGEwdRcuOcJC+KdgbWfGb+1wAAAABJRU5E\n        rkJggg==\n</value>\n  </data>\n  <data name=\"rightAlignToolStripButton3.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"rightAlignToolStripButton3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 24</value>\n  </data>\n  <data name=\"rightAlignToolStripButton3.Text\" xml:space=\"preserve\">\n    <value>Right Align</value>\n  </data>\n  <data name=\"fontToolStripComboBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>122, 27</value>\n  </data>\n  <data name=\"fontToolStripComboBox1.ToolTipText\" xml:space=\"preserve\">\n    <value>Font</value>\n  </data>\n  <data name=\"fontSizeToolStripComboBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 27</value>\n  </data>\n  <data name=\"fontSizeToolStripComboBox1.ToolTipText\" xml:space=\"preserve\">\n    <value>Font Size</value>\n  </data>\n  <data name=\"printToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFvSURBVDhPrZLLasJQEIb7xqVWxVYrCCrF9h1cahJwYdAo\n        gisvC+0u3sC7eFkoeI0RlF9mMNIj0rTQAx8nM2fmy8mQh39dcSUekBUJdlDdpUVcdHg4HATeIyEhNk2T\n        JZcWcVmCQqHAULOFlfuVYLVaCc0Wm80G+/3+ZwEVWG8rlUrcSHu5XGZsb0CCfr+P4XCI0WjEgvF4jMlk\n        gul0an8DwzCw2+1uoJzBZ3cFPr8v8Ob3IRQOQlEUSJLE+y2Ul2WZ66ie+lhAwfF45AFut1tb6HNmsxlL\n        roLT6QRd17FYLJBIJHjivV6P5zAYDHgmNJt2u41oNIqvakUULJdLVCsVdDodptvtXqEmK99qtfD5EUGx\n        WBQF6/Ua+Xwe4VAQry8exu1ywuN2we10wPH0COezg+NkMnlfkMvlkM1mmUwmc0FDOp2GqqpIpVLQNI3z\n        9E8Igvl8jkajgWazydDzLbVajfd6vc7z+ibwxij4O97YGWr3cw4gc4xOAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"printToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"printToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 24</value>\n  </data>\n  <data name=\"printToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>Print</value>\n  </data>\n  <data name=\"zoomToolStripComboBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 27</value>\n  </data>\n  <data name=\"zoomToolStripComboBox1.ToolTipText\" xml:space=\"preserve\">\n    <value>Zoom</value>\n  </data>\n  <data name=\"selectToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAuSURBVDhPY/hPIcBrAAMDAxjjA6MGUMsAmEJSMfUMwAWQ\n        FeICowbQ2gDC4P9/AFoiYMp9UrIYAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"selectToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"selectToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 24</value>\n  </data>\n  <data name=\"selectToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>Select Tool</value>\n  </data>\n  <data name=\"pdfToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABIAAAAQCAYAAAAbBi9cAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABaSURBVDhP3ZPbCQAgDAOdx/1HcZ9KxEKQKj4qiAdRm9D8\n        GcSJB4tCTMJSej5osyIcjM49H7QZmC4Cw2y3iFU8ywT8VtQzM8sE14p4Xi5iMdbOz1+k3sc4FYlkjsIT\n        8WJzcpcAAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"pdfToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"pdfToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 24</value>\n  </data>\n  <data name=\"pdfToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>PDF</value>\n  </data>\n  <data name=\"htmlToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABYSURBVDhPY/hPJzAMLWLQugJlIgBMDESjY5g4NoBPHq9F\n        MICNj08MXQ4E6GsRNowMcPEJ0ciAbB8RQyODoWERCGBjo6sHAZpZhIHBMnQAoxaRDehk0f//APc76hR2\n        Y9y2AAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"htmlToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"htmlToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 24</value>\n  </data>\n  <data name=\"htmlToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>HTML</value>\n  </data>\n  <data name=\"excelToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABUAAAAQCAYAAAD52jQlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABgSURBVDhP7ZFRCgAgCEM7T/c/SvcxCgdjlB9SH0EPpHRr\n        IBW7wEOhpTYbBbhXTYGuvnSoatzP9TFgYaA9E2p+Lk3hQ9dWnnQogIe96fUV9t75qFD0uxbYzv08yg89\n        jVkHIj6jSQaaleYAAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"excelToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"excelToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 24</value>\n  </data>\n  <data name=\"excelToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>Excel</value>\n  </data>\n  <data name=\"XmlToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABaSURBVDhPY/hPZTAEDGTQugJlIgBMDJscCOCTB7sQWQKd\n        ja4JWQxdDgRoYyAI4NJMDI0MaGMgsgQ2NiEaGRBlIAhgYyOLwQDRyQYbG0RjYLAMFcGogZSC//8BGteL\n        dcZuF4EAAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"XmlToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"XmlToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 24</value>\n  </data>\n  <data name=\"XmlToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>XML</value>\n  </data>\n  <data name=\"MhtToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABUAAAAQCAYAAAD52jQlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABnSURBVDhP7YxRCsAwCEN7nt3/KLuPw1IhTbLtp/0Y7IFo\n        oqbFBj4U2o5zjDPluz3uuLqPopgOaJe4e2RfaB8euitEdBlvHWFP9F0Id4Q90Wi4mR8SCWHtgpKa+SGR\n        ENajL+UPXU3EBVw8wzkRFW5BAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"MhtToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"MhtToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 24</value>\n  </data>\n  <data name=\"MhtToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>MHT</value>\n  </data>\n  <data name=\"CsvToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABUAAAAQCAYAAAD52jQlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABoSURBVDhP7ZJRCsAgDEN7nt3/KLtPR2SR0Fkp4j4Ge+DU\n        Jr6vmb/AB6V2nH0pOtcs9kjr8aDwPno4ywDmloVgloGY8z6VAuRZZ1lKMnkXSVaWktgfStunUCSV2fIv\n        pTze3PtWfulu3C97Gt8rXJb7sAAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"CsvToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"CsvToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 24</value>\n  </data>\n  <data name=\"CsvToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>CSV</value>\n  </data>\n  <data name=\"RtfToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABLSURBVDhPY/hPZTAEDGRguAIkUDEMYJODYdzyQAIdUCZG\n        CwPRMTaATRybPhQXIrPRATY57GJogrgMHTwGggBFYlCaamDUQErB//8A1OuNEoRaw2QAAAAASUVORK5C\n        YII=\n</value>\n  </data>\n  <data name=\"RtfToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"RtfToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 24</value>\n  </data>\n  <data name=\"RtfToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>RTF</value>\n  </data>\n  <data name=\"TifToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABUAAAAQCAYAAAD52jQlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAA/SURBVDhPY/hPAzDEDGXQuoKBkQE6HwTQ1SOrQXEpsgQy\n        wCaOSy0IDD5DkTEyGCHexwVobyi1wKih1Ab//wMAw/n1IMf7Fj0AAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"TifToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"TifToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 24</value>\n  </data>\n  <data name=\"TifToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>TIF</value>\n  </data>\n  <data name=\"toolStripSeparator14.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>6, 27</value>\n  </data>\n  <data name=\"AlignmentGridEnable.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG\n        YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9\n        0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw\n        bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc\n        VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9\n        c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32\n        Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo\n        mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+\n        kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D\n        TgDQASA1MVpwzwAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"AlignmentGridEnable.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"AlignmentGridEnable.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>130, 24</value>\n  </data>\n  <data name=\"AlignmentGridEnable.Text\" xml:space=\"preserve\">\n    <value>Enable Alignment Grid</value>\n  </data>\n  <data name=\"toolStrip1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 62</value>\n  </data>\n  <data name=\"toolStrip1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>1284, 27</value>\n  </data>\n  <data name=\"toolStrip1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>31</value>\n  </data>\n  <data name=\"toolStrip1.Text\" xml:space=\"preserve\">\n    <value>toolStrip1</value>\n  </data>\n  <data name=\"&gt;&gt;toolStrip1.Name\" xml:space=\"preserve\">\n    <value>toolStrip1</value>\n  </data>\n  <data name=\"&gt;&gt;toolStrip1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStrip1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;toolStrip1.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"mainTC.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Left, Right</value>\n  </data>\n  <data name=\"mainTC.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>3, 39</value>\n  </data>\n  <data name=\"mainTC.ShowToolTips\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"mainTC.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>1449, 21</value>\n  </data>\n  <data name=\"mainTC.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>34</value>\n  </data>\n  <data name=\"&gt;&gt;mainTC.Name\" xml:space=\"preserve\">\n    <value>mainTC</value>\n  </data>\n  <data name=\"&gt;&gt;mainTC.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;mainTC.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;mainTC.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"label1.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label1.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 15</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>58, 13</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Fore Color:</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"label2.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label2.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>209, 15</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>62, 13</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>35</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Back Color:</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"foreColorPicker1.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"foreColorPicker1.IntegralHeight\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"foreColorPicker1.Items\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"foreColorPicker1.Items3\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items4\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"foreColorPicker1.Items5\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"foreColorPicker1.Items6\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"foreColorPicker1.Items7\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"foreColorPicker1.Items8\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"foreColorPicker1.Items9\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items10\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items11\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items12\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"foreColorPicker1.Items13\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items14\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"foreColorPicker1.Items15\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"foreColorPicker1.Items16\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items17\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items18\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"foreColorPicker1.Items19\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"foreColorPicker1.Items20\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items21\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items22\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items23\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items24\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items25\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items26\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items27\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items28\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items29\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items30\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items31\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items32\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items33\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items34\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items35\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items36\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items37\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items38\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items39\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items40\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items41\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items42\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"foreColorPicker1.Items43\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items44\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items45\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"foreColorPicker1.Items46\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"foreColorPicker1.Items47\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items48\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"foreColorPicker1.Items49\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items50\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items51\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"foreColorPicker1.Items52\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items53\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"foreColorPicker1.Items54\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items55\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items56\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"foreColorPicker1.Items57\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"foreColorPicker1.Items58\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items59\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"foreColorPicker1.Items60\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"foreColorPicker1.Items61\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items62\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items63\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items64\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items65\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items66\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items67\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items68\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items69\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items70\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items71\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items72\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items73\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items74\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items75\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items76\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"foreColorPicker1.Items77\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items78\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items79\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items80\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items81\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items82\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items83\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items84\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items85\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items86\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items87\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items88\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items89\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items90\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items91\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"foreColorPicker1.Items92\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"foreColorPicker1.Items93\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"foreColorPicker1.Items94\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items95\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"foreColorPicker1.Items96\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"foreColorPicker1.Items97\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"foreColorPicker1.Items98\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"foreColorPicker1.Items99\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items100\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"foreColorPicker1.Items101\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items102\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items103\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items104\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items105\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items106\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"foreColorPicker1.Items107\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"foreColorPicker1.Items108\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"foreColorPicker1.Items109\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items110\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"foreColorPicker1.Items111\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items112\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items113\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"foreColorPicker1.Items114\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items115\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items116\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items117\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items118\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items119\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items120\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"foreColorPicker1.Items121\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"foreColorPicker1.Items122\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"foreColorPicker1.Items123\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items124\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items125\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items126\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items127\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items128\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items129\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items130\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"foreColorPicker1.Items131\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"foreColorPicker1.Items132\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"foreColorPicker1.Items133\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items134\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items135\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"foreColorPicker1.Items136\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"foreColorPicker1.Items137\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"foreColorPicker1.Items138\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items139\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items140\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items141\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items142\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"foreColorPicker1.Items143\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items144\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"foreColorPicker1.Items145\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"foreColorPicker1.Items146\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"foreColorPicker1.Items147\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"foreColorPicker1.Items148\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"foreColorPicker1.Items149\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items150\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items151\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items152\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"foreColorPicker1.Items153\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items154\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"foreColorPicker1.Items155\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"foreColorPicker1.Items156\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items157\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items158\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"foreColorPicker1.Items159\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"foreColorPicker1.Items160\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items161\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items162\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items163\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items164\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items165\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items166\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items167\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items168\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items169\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items170\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items171\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items172\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items173\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items174\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items175\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items176\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items177\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items178\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items179\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items180\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items181\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items182\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"foreColorPicker1.Items183\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items184\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items185\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"foreColorPicker1.Items186\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"foreColorPicker1.Items187\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items188\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"foreColorPicker1.Items189\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items190\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items191\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"foreColorPicker1.Items192\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items193\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"foreColorPicker1.Items194\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items195\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items196\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"foreColorPicker1.Items197\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"foreColorPicker1.Items198\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items199\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"foreColorPicker1.Items200\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"foreColorPicker1.Items201\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items202\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items203\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items204\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items205\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items206\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items207\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items208\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items209\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items210\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items211\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items212\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items213\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items214\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items215\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items216\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"foreColorPicker1.Items217\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items218\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items219\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items220\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items221\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items222\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items223\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items224\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items225\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items226\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items227\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items228\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items229\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items230\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items231\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"foreColorPicker1.Items232\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"foreColorPicker1.Items233\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"foreColorPicker1.Items234\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items235\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"foreColorPicker1.Items236\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"foreColorPicker1.Items237\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"foreColorPicker1.Items238\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"foreColorPicker1.Items239\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items240\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"foreColorPicker1.Items241\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items242\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items243\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items244\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items245\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items246\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"foreColorPicker1.Items247\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"foreColorPicker1.Items248\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"foreColorPicker1.Items249\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items250\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"foreColorPicker1.Items251\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items252\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items253\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"foreColorPicker1.Items254\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items255\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items256\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items257\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items258\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items259\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items260\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"foreColorPicker1.Items261\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"foreColorPicker1.Items262\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"foreColorPicker1.Items263\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items264\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items265\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items266\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items267\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items268\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items269\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items270\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"foreColorPicker1.Items271\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"foreColorPicker1.Items272\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"foreColorPicker1.Items273\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items274\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items275\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"foreColorPicker1.Items276\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"foreColorPicker1.Items277\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"foreColorPicker1.Items278\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items279\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items280\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items281\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items282\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"foreColorPicker1.Items283\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items284\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"foreColorPicker1.Items285\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"foreColorPicker1.Items286\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"foreColorPicker1.Items287\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"foreColorPicker1.Items288\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"foreColorPicker1.Items289\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items290\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items291\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items292\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"foreColorPicker1.Items293\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items294\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"foreColorPicker1.Items295\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"foreColorPicker1.Items296\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items297\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items298\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"foreColorPicker1.Items299\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"foreColorPicker1.Items300\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items301\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items302\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items303\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items304\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items305\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items306\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items307\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items308\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items309\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items310\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items311\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items312\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items313\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items314\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items315\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items316\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items317\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items318\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items319\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items320\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items321\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items322\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"foreColorPicker1.Items323\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items324\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items325\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"foreColorPicker1.Items326\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"foreColorPicker1.Items327\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items328\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"foreColorPicker1.Items329\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items330\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items331\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"foreColorPicker1.Items332\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items333\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"foreColorPicker1.Items334\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items335\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items336\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"foreColorPicker1.Items337\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"foreColorPicker1.Items338\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items339\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"foreColorPicker1.Items340\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"foreColorPicker1.Items341\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items342\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items343\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items344\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items345\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items346\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items347\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items348\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items349\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items350\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items351\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items352\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items353\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items354\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items355\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items356\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"foreColorPicker1.Items357\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items358\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items359\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items360\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items361\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items362\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items363\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items364\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items365\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items366\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items367\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items368\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items369\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items370\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items371\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"foreColorPicker1.Items372\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"foreColorPicker1.Items373\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"foreColorPicker1.Items374\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items375\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"foreColorPicker1.Items376\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"foreColorPicker1.Items377\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"foreColorPicker1.Items378\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"foreColorPicker1.Items379\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items380\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"foreColorPicker1.Items381\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items382\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items383\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items384\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items385\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items386\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"foreColorPicker1.Items387\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"foreColorPicker1.Items388\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"foreColorPicker1.Items389\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items390\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"foreColorPicker1.Items391\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items392\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items393\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"foreColorPicker1.Items394\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items395\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items396\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items397\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items398\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items399\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items400\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"foreColorPicker1.Items401\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"foreColorPicker1.Items402\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"foreColorPicker1.Items403\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items404\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items405\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items406\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items407\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items408\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items409\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items410\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"foreColorPicker1.Items411\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"foreColorPicker1.Items412\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"foreColorPicker1.Items413\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items414\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items415\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"foreColorPicker1.Items416\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"foreColorPicker1.Items417\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"foreColorPicker1.Items418\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items419\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items420\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items421\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items422\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"foreColorPicker1.Items423\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items424\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"foreColorPicker1.Items425\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"foreColorPicker1.Items426\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"foreColorPicker1.Items427\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"foreColorPicker1.Items428\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"foreColorPicker1.Items429\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items430\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items431\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items432\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"foreColorPicker1.Items433\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items434\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"foreColorPicker1.Items435\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"foreColorPicker1.Items436\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items437\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items438\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"foreColorPicker1.Items439\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"foreColorPicker1.Items440\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items441\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items442\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items443\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items444\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items445\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items446\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items447\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items448\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items449\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items450\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items451\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items452\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items453\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items454\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items455\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items456\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items457\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items458\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items459\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items460\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items461\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items462\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"foreColorPicker1.Items463\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items464\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items465\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"foreColorPicker1.Items466\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"foreColorPicker1.Items467\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items468\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"foreColorPicker1.Items469\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items470\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items471\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"foreColorPicker1.Items472\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items473\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"foreColorPicker1.Items474\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items475\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items476\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"foreColorPicker1.Items477\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"foreColorPicker1.Items478\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items479\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"foreColorPicker1.Items480\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"foreColorPicker1.Items481\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items482\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items483\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items484\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items485\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items486\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items487\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items488\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items489\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items490\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items491\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items492\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items493\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items494\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items495\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items496\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"foreColorPicker1.Items497\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items498\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items499\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items500\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items501\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items502\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items503\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items504\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items505\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items506\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items507\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items508\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items509\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items510\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items511\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"foreColorPicker1.Items512\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"foreColorPicker1.Items513\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"foreColorPicker1.Items514\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items515\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"foreColorPicker1.Items516\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"foreColorPicker1.Items517\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"foreColorPicker1.Items518\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"foreColorPicker1.Items519\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items520\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"foreColorPicker1.Items521\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items522\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items523\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items524\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items525\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items526\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"foreColorPicker1.Items527\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"foreColorPicker1.Items528\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"foreColorPicker1.Items529\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items530\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"foreColorPicker1.Items531\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items532\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items533\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"foreColorPicker1.Items534\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items535\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items536\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items537\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items538\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items539\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items540\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"foreColorPicker1.Items541\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"foreColorPicker1.Items542\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"foreColorPicker1.Items543\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items544\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items545\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items546\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items547\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items548\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items549\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items550\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"foreColorPicker1.Items551\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"foreColorPicker1.Items552\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"foreColorPicker1.Items553\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items554\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items555\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"foreColorPicker1.Items556\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"foreColorPicker1.Items557\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"foreColorPicker1.Items558\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items559\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items560\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items561\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items562\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"foreColorPicker1.Items563\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items564\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"foreColorPicker1.Items565\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"foreColorPicker1.Items566\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"foreColorPicker1.Items567\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"foreColorPicker1.Items568\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"foreColorPicker1.Items569\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items570\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items571\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items572\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"foreColorPicker1.Items573\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items574\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"foreColorPicker1.Items575\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"foreColorPicker1.Items576\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items577\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items578\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"foreColorPicker1.Items579\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"foreColorPicker1.Items580\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items581\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items582\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items583\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items584\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items585\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items586\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items587\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items588\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items589\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items590\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items591\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items592\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items593\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items594\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items595\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items596\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items597\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items598\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items599\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items600\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items601\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items602\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"foreColorPicker1.Items603\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items604\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items605\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"foreColorPicker1.Items606\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"foreColorPicker1.Items607\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items608\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"foreColorPicker1.Items609\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items610\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items611\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"foreColorPicker1.Items612\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items613\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"foreColorPicker1.Items614\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items615\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items616\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"foreColorPicker1.Items617\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"foreColorPicker1.Items618\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items619\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"foreColorPicker1.Items620\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"foreColorPicker1.Items621\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items622\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items623\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items624\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items625\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items626\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items627\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items628\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items629\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items630\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items631\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items632\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items633\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items634\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items635\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items636\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"foreColorPicker1.Items637\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items638\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items639\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items640\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items641\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items642\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items643\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items644\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items645\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items646\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items647\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items648\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items649\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items650\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items651\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"foreColorPicker1.Items652\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"foreColorPicker1.Items653\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"foreColorPicker1.Items654\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items655\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"foreColorPicker1.Items656\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"foreColorPicker1.Items657\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"foreColorPicker1.Items658\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"foreColorPicker1.Items659\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items660\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"foreColorPicker1.Items661\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items662\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items663\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items664\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items665\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items666\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"foreColorPicker1.Items667\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"foreColorPicker1.Items668\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"foreColorPicker1.Items669\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items670\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"foreColorPicker1.Items671\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items672\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items673\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"foreColorPicker1.Items674\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items675\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items676\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items677\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items678\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items679\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items680\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"foreColorPicker1.Items681\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"foreColorPicker1.Items682\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"foreColorPicker1.Items683\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items684\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items685\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items686\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items687\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items688\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items689\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items690\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"foreColorPicker1.Items691\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"foreColorPicker1.Items692\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"foreColorPicker1.Items693\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items694\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items695\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"foreColorPicker1.Items696\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"foreColorPicker1.Items697\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"foreColorPicker1.Items698\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items699\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items700\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items701\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items702\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"foreColorPicker1.Items703\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items704\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"foreColorPicker1.Items705\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"foreColorPicker1.Items706\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"foreColorPicker1.Items707\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"foreColorPicker1.Items708\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"foreColorPicker1.Items709\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items710\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items711\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items712\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"foreColorPicker1.Items713\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items714\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"foreColorPicker1.Items715\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"foreColorPicker1.Items716\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items717\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items718\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"foreColorPicker1.Items719\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"foreColorPicker1.Items720\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items721\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items722\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items723\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items724\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items725\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items726\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items727\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items728\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items729\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items730\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items731\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items732\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items733\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items734\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items735\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items736\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items737\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items738\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items739\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items740\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items741\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items742\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"foreColorPicker1.Items743\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items744\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items745\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"foreColorPicker1.Items746\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"foreColorPicker1.Items747\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items748\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"foreColorPicker1.Items749\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items750\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items751\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"foreColorPicker1.Items752\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items753\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"foreColorPicker1.Items754\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items755\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items756\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"foreColorPicker1.Items757\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"foreColorPicker1.Items758\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items759\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"foreColorPicker1.Items760\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"foreColorPicker1.Items761\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items762\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items763\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items764\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items765\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items766\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items767\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items768\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items769\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items770\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items771\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items772\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items773\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items774\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items775\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items776\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"foreColorPicker1.Items777\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items778\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items779\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items780\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items781\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items782\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items783\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items784\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items785\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items786\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items787\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items788\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items789\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items790\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items791\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"foreColorPicker1.Items792\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"foreColorPicker1.Items793\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"foreColorPicker1.Items794\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items795\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"foreColorPicker1.Items796\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"foreColorPicker1.Items797\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"foreColorPicker1.Items798\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"foreColorPicker1.Items799\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items800\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"foreColorPicker1.Items801\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items802\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items803\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items804\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items805\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items806\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"foreColorPicker1.Items807\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"foreColorPicker1.Items808\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"foreColorPicker1.Items809\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items810\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"foreColorPicker1.Items811\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items812\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items813\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"foreColorPicker1.Items814\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items815\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items816\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items817\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items818\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items819\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items820\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"foreColorPicker1.Items821\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"foreColorPicker1.Items822\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"foreColorPicker1.Items823\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items824\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items825\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items826\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items827\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items828\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items829\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items830\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"foreColorPicker1.Items831\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"foreColorPicker1.Items832\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"foreColorPicker1.Items833\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items834\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items835\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"foreColorPicker1.Items836\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"foreColorPicker1.Items837\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"foreColorPicker1.Items838\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items839\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items840\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items841\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items842\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"foreColorPicker1.Items843\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items844\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"foreColorPicker1.Items845\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"foreColorPicker1.Items846\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"foreColorPicker1.Items847\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"foreColorPicker1.Items848\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"foreColorPicker1.Items849\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items850\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items851\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items852\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"foreColorPicker1.Items853\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items854\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"foreColorPicker1.Items855\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"foreColorPicker1.Items856\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items857\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items858\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"foreColorPicker1.Items859\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"foreColorPicker1.Items860\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items861\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items862\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items863\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items864\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items865\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items866\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items867\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items868\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items869\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items870\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items871\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items872\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items873\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items874\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items875\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items876\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items877\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items878\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items879\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items880\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items881\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items882\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"foreColorPicker1.Items883\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items884\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items885\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"foreColorPicker1.Items886\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"foreColorPicker1.Items887\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items888\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"foreColorPicker1.Items889\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items890\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items891\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"foreColorPicker1.Items892\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items893\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"foreColorPicker1.Items894\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items895\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items896\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"foreColorPicker1.Items897\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"foreColorPicker1.Items898\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items899\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"foreColorPicker1.Items900\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"foreColorPicker1.Items901\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items902\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items903\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items904\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items905\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items906\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items907\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items908\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items909\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items910\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items911\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items912\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items913\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items914\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items915\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items916\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"foreColorPicker1.Items917\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items918\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items919\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items920\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items921\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items922\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items923\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items924\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items925\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items926\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items927\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items928\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items929\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items930\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items931\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"foreColorPicker1.Items932\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"foreColorPicker1.Items933\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"foreColorPicker1.Items934\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items935\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"foreColorPicker1.Items936\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"foreColorPicker1.Items937\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"foreColorPicker1.Items938\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"foreColorPicker1.Items939\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items940\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"foreColorPicker1.Items941\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items942\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items943\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items944\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items945\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items946\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"foreColorPicker1.Items947\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"foreColorPicker1.Items948\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"foreColorPicker1.Items949\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items950\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"foreColorPicker1.Items951\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items952\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items953\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"foreColorPicker1.Items954\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items955\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items956\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items957\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items958\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items959\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items960\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"foreColorPicker1.Items961\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"foreColorPicker1.Items962\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"foreColorPicker1.Items963\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items964\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items965\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items966\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items967\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items968\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items969\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items970\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"foreColorPicker1.Items971\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"foreColorPicker1.Items972\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"foreColorPicker1.Items973\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items974\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items975\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"foreColorPicker1.Items976\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"foreColorPicker1.Items977\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"foreColorPicker1.Items978\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items979\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items980\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items981\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items982\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"foreColorPicker1.Items983\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items984\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"foreColorPicker1.Items985\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"foreColorPicker1.Items986\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"foreColorPicker1.Items987\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"foreColorPicker1.Items988\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"foreColorPicker1.Items989\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items990\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items991\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items992\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"foreColorPicker1.Items993\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items994\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"foreColorPicker1.Items995\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"foreColorPicker1.Items996\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items997\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items998\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"foreColorPicker1.Items999\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1000\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1001\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1002\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1003\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1004\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1005\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1006\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1007\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1008\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1009\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1010\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1011\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1012\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1013\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1014\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1015\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1016\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1017\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1018\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1019\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1020\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1021\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1022\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1023\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1024\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1025\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1026\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1027\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1028\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1029\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1030\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1031\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1032\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1033\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1034\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1035\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1036\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1037\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1038\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1039\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1040\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1041\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1042\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1043\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1044\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1045\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1046\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1047\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1048\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1049\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1050\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1051\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1052\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1053\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1054\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1055\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1056\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1057\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1058\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1059\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1060\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1061\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1062\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1063\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1064\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1065\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1066\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1067\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1068\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1069\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1070\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1071\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1072\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1073\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1074\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1075\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1076\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1077\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1078\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1079\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1080\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1081\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1082\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1083\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1084\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1085\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1086\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1087\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1088\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1089\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1090\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1091\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1092\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1093\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1094\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1095\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1096\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1097\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1098\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1099\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1100\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1101\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1102\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1103\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1104\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1105\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1106\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1107\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1108\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1109\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1110\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1111\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1112\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1113\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1114\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1115\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1116\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1117\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1118\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1119\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1120\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1121\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1122\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1123\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1124\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1125\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1126\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1127\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1128\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1129\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1130\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1131\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1132\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1133\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1134\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1135\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1136\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1137\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1138\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1139\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1140\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1141\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1142\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1143\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1144\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1145\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1146\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1147\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1148\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1149\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1150\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1151\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1152\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1153\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1154\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1155\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1156\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1157\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1158\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1159\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1160\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1161\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1162\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1163\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1164\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1165\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1166\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1167\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1168\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1169\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1170\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1171\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1172\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1173\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1174\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1175\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1176\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1177\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1178\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1179\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1180\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1181\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1182\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1183\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1184\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1185\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1186\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1187\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1188\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1189\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1190\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1191\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1192\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1193\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1194\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1195\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1196\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1197\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1198\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1199\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1200\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1201\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1202\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1203\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1204\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1205\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1206\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1207\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1208\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1209\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1210\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1211\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1212\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1213\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1214\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1215\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1216\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1217\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1218\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1219\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1220\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1221\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1222\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1223\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1224\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1225\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1226\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1227\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1228\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1229\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1230\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1231\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1232\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1233\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1234\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1235\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1236\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1237\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1238\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1239\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1240\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1241\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1242\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1243\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1244\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1245\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1246\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1247\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1248\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1249\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1250\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1251\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1252\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1253\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1254\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1255\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1256\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1257\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1258\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1259\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1260\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1261\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1262\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1263\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1264\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1265\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1266\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1267\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1268\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1269\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1270\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1271\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1272\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1273\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1274\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1275\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1276\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1277\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1278\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1279\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1280\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1281\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1282\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1283\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1284\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1285\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1286\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1287\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1288\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1289\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1290\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1291\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1292\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1293\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1294\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1295\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1296\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1297\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1298\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1299\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1300\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1301\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1302\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1303\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1304\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1305\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1306\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1307\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1308\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1309\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1310\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1311\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1312\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1313\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1314\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1315\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1316\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1317\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1318\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1319\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1320\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1321\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1322\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1323\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1324\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1325\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1326\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1327\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1328\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1329\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1330\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1331\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1332\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1333\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1334\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1335\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1336\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1337\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1338\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1339\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1340\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1341\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1342\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1343\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1344\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1345\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1346\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1347\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1348\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1349\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1350\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1351\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1352\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1353\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1354\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1355\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1356\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1357\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1358\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1359\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1360\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1361\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1362\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1363\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1364\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1365\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1366\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1367\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1368\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1369\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1370\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1371\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1372\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1373\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1374\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1375\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1376\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1377\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1378\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1379\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1380\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1381\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1382\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1383\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1384\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1385\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1386\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1387\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1388\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1389\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1390\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1391\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1392\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1393\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1394\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1395\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1396\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1397\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1398\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1399\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1400\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1401\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1402\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1403\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1404\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1405\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1406\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1407\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1408\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1409\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1410\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1411\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1412\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1413\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1414\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1415\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1416\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1417\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1418\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1419\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1420\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1421\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1422\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1423\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1424\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1425\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1426\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1427\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1428\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1429\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1430\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1431\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1432\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1433\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1434\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1435\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1436\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1437\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1438\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1439\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1440\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1441\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1442\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1443\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1444\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1445\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1446\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1447\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1448\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1449\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1450\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1451\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1452\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1453\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1454\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1455\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1456\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1457\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1458\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1459\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1460\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1461\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1462\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1463\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1464\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1465\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1466\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1467\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1468\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1469\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1470\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1471\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1472\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1473\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1474\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1475\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1476\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1477\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1478\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1479\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1480\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1481\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1482\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1483\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1484\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1485\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1486\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1487\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1488\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1489\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1490\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1491\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1492\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1493\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1494\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1495\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1496\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1497\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1498\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1499\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1500\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1501\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1502\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1503\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1504\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1505\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1506\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1507\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1508\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1509\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1510\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1511\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1512\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1513\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1514\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1515\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1516\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1517\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1518\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1519\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1520\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1521\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1522\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1523\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1524\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1525\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1526\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1527\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1528\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1529\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1530\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1531\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1532\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1533\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1534\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1535\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1536\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1537\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1538\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1539\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1540\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1541\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1542\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1543\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1544\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1545\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1546\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1547\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1548\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1549\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1550\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1551\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1552\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1553\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1554\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1555\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1556\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1557\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1558\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1559\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1560\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1561\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1562\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1563\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1564\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1565\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1566\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1567\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1568\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1569\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1570\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1571\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1572\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1573\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1574\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1575\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1576\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1577\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1578\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1579\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1580\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1581\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1582\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1583\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1584\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1585\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1586\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1587\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1588\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1589\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1590\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1591\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1592\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1593\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1594\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1595\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1596\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1597\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1598\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1599\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1600\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1601\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1602\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1603\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1604\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1605\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1606\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1607\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1608\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1609\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1610\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1611\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1612\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1613\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1614\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1615\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1616\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1617\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1618\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1619\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1620\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1621\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1622\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1623\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1624\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1625\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1626\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1627\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1628\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1629\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1630\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1631\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1632\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1633\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1634\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1635\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1636\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1637\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1638\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1639\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1640\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1641\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1642\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1643\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1644\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1645\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1646\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1647\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1648\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1649\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1650\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1651\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1652\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1653\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1654\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1655\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1656\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1657\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1658\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1659\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1660\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1661\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1662\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1663\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1664\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1665\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1666\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1667\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1668\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1669\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1670\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1671\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1672\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1673\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1674\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1675\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1676\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1677\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1678\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1679\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1680\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1681\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1682\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1683\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1684\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1685\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1686\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1687\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1688\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1689\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1690\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1691\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1692\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1693\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1694\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1695\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1696\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1697\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1698\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1699\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1700\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1701\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1702\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1703\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1704\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1705\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1706\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1707\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1708\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1709\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1710\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1711\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1712\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1713\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1714\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1715\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1716\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1717\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1718\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1719\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1720\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1721\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1722\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1723\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1724\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1725\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1726\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1727\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1728\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1729\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1730\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1731\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1732\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1733\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1734\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1735\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1736\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1737\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1738\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1739\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1740\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1741\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1742\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1743\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1744\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1745\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1746\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1747\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1748\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1749\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1750\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1751\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1752\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1753\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1754\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1755\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1756\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1757\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1758\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1759\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1760\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1761\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1762\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1763\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1764\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1765\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1766\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1767\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1768\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1769\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1770\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1771\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1772\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1773\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1774\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1775\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1776\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1777\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1778\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1779\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1780\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1781\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1782\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1783\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1784\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1785\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1786\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1787\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1788\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1789\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1790\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1791\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1792\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1793\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1794\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1795\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1796\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1797\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1798\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1799\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1800\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1801\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1802\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1803\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1804\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1805\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1806\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1807\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1808\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1809\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1810\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1811\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1812\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1813\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1814\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1815\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1816\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1817\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1818\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1819\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1820\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1821\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1822\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1823\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1824\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1825\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1826\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1827\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1828\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1829\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1830\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1831\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1832\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1833\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1834\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1835\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1836\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1837\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1838\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1839\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1840\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1841\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1842\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1843\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1844\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1845\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1846\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1847\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1848\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1849\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1850\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1851\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1852\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1853\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1854\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1855\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1856\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1857\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1858\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1859\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1860\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1861\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1862\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1863\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1864\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1865\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1866\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1867\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1868\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1869\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1870\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1871\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1872\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1873\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1874\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1875\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1876\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1877\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1878\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1879\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1880\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1881\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1882\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1883\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1884\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1885\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1886\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1887\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1888\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1889\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1890\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1891\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1892\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1893\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1894\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1895\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1896\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1897\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1898\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1899\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1900\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1901\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1902\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1903\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1904\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1905\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1906\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1907\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1908\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1909\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1910\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1911\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1912\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1913\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1914\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1915\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1916\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1917\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1918\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1919\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1920\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1921\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1922\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1923\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1924\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1925\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1926\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1927\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1928\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1929\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1930\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1931\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1932\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1933\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1934\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1935\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1936\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1937\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1938\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1939\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1940\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1941\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1942\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1943\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1944\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1945\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1946\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1947\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1948\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1949\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1950\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1951\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1952\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1953\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1954\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1955\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1956\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1957\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1958\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1959\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1960\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1961\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1962\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1963\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1964\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1965\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1966\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1967\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1968\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1969\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1970\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1971\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1972\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1973\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1974\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1975\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1976\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1977\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1978\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1979\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1980\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1981\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1982\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1983\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1984\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1985\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1986\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1987\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1988\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1989\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1990\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1991\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1992\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1993\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1994\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1995\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1996\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1997\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1998\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items1999\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2000\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2001\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2002\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2003\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2004\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2005\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2006\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2007\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2008\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2009\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2010\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2011\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2012\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2013\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2014\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2015\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2016\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2017\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2018\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2019\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2020\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2021\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2022\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2023\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2024\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2025\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2026\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2027\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2028\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2029\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2030\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2031\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2032\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2033\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2034\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2035\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2036\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2037\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2038\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2039\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2040\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2041\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2042\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2043\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2044\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2045\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2046\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2047\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2048\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2049\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2050\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2051\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2052\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2053\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2054\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2055\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2056\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2057\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2058\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2059\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2060\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2061\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2062\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2063\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2064\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2065\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2066\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2067\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2068\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2069\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2070\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2071\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2072\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2073\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2074\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2075\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2076\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2077\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2078\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2079\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2080\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2081\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2082\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2083\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2084\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2085\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2086\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2087\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2088\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2089\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2090\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2091\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2092\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2093\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2094\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2095\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2096\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2097\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2098\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2099\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2100\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2101\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2102\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2103\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2104\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2105\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2106\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2107\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2108\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2109\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2110\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2111\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2112\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2113\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2114\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2115\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2116\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2117\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2118\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2119\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2120\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2121\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2122\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2123\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2124\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2125\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2126\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2127\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2128\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2129\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2130\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2131\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2132\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2133\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2134\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2135\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2136\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2137\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2138\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2139\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2140\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2141\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2142\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2143\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2144\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2145\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2146\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2147\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2148\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2149\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2150\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2151\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2152\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2153\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2154\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2155\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2156\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2157\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2158\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2159\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2160\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2161\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2162\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2163\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2164\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2165\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2166\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2167\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2168\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2169\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2170\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2171\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2172\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2173\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2174\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2175\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2176\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2177\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2178\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2179\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2180\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2181\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2182\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2183\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2184\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2185\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2186\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2187\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2188\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2189\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2190\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2191\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2192\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2193\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2194\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2195\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2196\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2197\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2198\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2199\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2200\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2201\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2202\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2203\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2204\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2205\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2206\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2207\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2208\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2209\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2210\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2211\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2212\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2213\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2214\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2215\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2216\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2217\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2218\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2219\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2220\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2221\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2222\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2223\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2224\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2225\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2226\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2227\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2228\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2229\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2230\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2231\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2232\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2233\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2234\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2235\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2236\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2237\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2238\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2239\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2240\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2241\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2242\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2243\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2244\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2245\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2246\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2247\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2248\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2249\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2250\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2251\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2252\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2253\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2254\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2255\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2256\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2257\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2258\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2259\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2260\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2261\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2262\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2263\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2264\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2265\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2266\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2267\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2268\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2269\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2270\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2271\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2272\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2273\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2274\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2275\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2276\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2277\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2278\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2279\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2280\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2281\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2282\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2283\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2284\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2285\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2286\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2287\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2288\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2289\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2290\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2291\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2292\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2293\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2294\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2295\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2296\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2297\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2298\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2299\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2300\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2301\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2302\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2303\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2304\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2305\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2306\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2307\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2308\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2309\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2310\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2311\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2312\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2313\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2314\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2315\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2316\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2317\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2318\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2319\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2320\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2321\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2322\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2323\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2324\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2325\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2326\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2327\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2328\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2329\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2330\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2331\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2332\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2333\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2334\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2335\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2336\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2337\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2338\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2339\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2340\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2341\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2342\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2343\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2344\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2345\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2346\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2347\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2348\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2349\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2350\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2351\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2352\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2353\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2354\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2355\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2356\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2357\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2358\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2359\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2360\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2361\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2362\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2363\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2364\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2365\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2366\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2367\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2368\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2369\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2370\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2371\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2372\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2373\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2374\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2375\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2376\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2377\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2378\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2379\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2380\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2381\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2382\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2383\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2384\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2385\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2386\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2387\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2388\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2389\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2390\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2391\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2392\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2393\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2394\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2395\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2396\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2397\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2398\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2399\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2400\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2401\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2402\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2403\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2404\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2405\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2406\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2407\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2408\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2409\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2410\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2411\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2412\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2413\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2414\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2415\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2416\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2417\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2418\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2419\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2420\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2421\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2422\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2423\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2424\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2425\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2426\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2427\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2428\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2429\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2430\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2431\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2432\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2433\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2434\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2435\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2436\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2437\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2438\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2439\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2440\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2441\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2442\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2443\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2444\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2445\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2446\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2447\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2448\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2449\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2450\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2451\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2452\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2453\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2454\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2455\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2456\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2457\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2458\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2459\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2460\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2461\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2462\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2463\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2464\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2465\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2466\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2467\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2468\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2469\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2470\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2471\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2472\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2473\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2474\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2475\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2476\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2477\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2478\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2479\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2480\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2481\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2482\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2483\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2484\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2485\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2486\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2487\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2488\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2489\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2490\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2491\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2492\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2493\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2494\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2495\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2496\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2497\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2498\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2499\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2500\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2501\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2502\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2503\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2504\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2505\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2506\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2507\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2508\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2509\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2510\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2511\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2512\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2513\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2514\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2515\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2516\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2517\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2518\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"foreColorPicker1.Items2519\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"foreColorPicker1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>66, 12</value>\n  </data>\n  <data name=\"foreColorPicker1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 21</value>\n  </data>\n  <data name=\"foreColorPicker1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>32</value>\n  </data>\n  <data name=\"&gt;&gt;foreColorPicker1.Name\" xml:space=\"preserve\">\n    <value>foreColorPicker1</value>\n  </data>\n  <data name=\"&gt;&gt;foreColorPicker1.Type\" xml:space=\"preserve\">\n    <value>fyiReporting.RdlDesign.ColorPicker, RdlDesigner, Version=4.18.0.0, Culture=neutral, PublicKeyToken=null</value>\n  </data>\n  <data name=\"&gt;&gt;foreColorPicker1.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;foreColorPicker1.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"backColorPicker1.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"backColorPicker1.IntegralHeight\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"backColorPicker1.Items\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items2\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"backColorPicker1.Items3\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items4\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"backColorPicker1.Items5\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"backColorPicker1.Items6\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"backColorPicker1.Items7\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"backColorPicker1.Items8\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"backColorPicker1.Items9\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"backColorPicker1.Items10\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items11\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"backColorPicker1.Items12\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"backColorPicker1.Items13\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items14\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"backColorPicker1.Items15\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"backColorPicker1.Items16\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"backColorPicker1.Items17\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items18\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"backColorPicker1.Items19\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"backColorPicker1.Items20\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items21\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items22\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items23\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items24\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items25\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items26\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items27\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items28\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items29\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"backColorPicker1.Items30\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items31\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"backColorPicker1.Items32\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items33\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items34\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items35\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items36\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items37\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items38\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"backColorPicker1.Items39\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items40\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items41\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items42\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"backColorPicker1.Items43\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items44\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items45\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"backColorPicker1.Items46\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"backColorPicker1.Items47\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items48\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"backColorPicker1.Items49\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items50\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"backColorPicker1.Items51\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"backColorPicker1.Items52\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items53\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"backColorPicker1.Items54\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items55\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"backColorPicker1.Items56\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"backColorPicker1.Items57\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"backColorPicker1.Items58\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items59\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"backColorPicker1.Items60\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"backColorPicker1.Items61\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items62\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"backColorPicker1.Items63\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items64\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"backColorPicker1.Items65\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items66\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items67\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items68\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items69\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items70\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items71\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items72\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items73\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items74\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items75\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items76\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"backColorPicker1.Items77\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items78\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"backColorPicker1.Items79\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items80\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"backColorPicker1.Items81\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items82\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items83\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items84\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"backColorPicker1.Items85\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items86\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items87\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items88\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items89\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items90\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items91\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"backColorPicker1.Items92\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"backColorPicker1.Items93\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"backColorPicker1.Items94\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items95\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"backColorPicker1.Items96\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"backColorPicker1.Items97\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"backColorPicker1.Items98\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"backColorPicker1.Items99\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"backColorPicker1.Items100\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"backColorPicker1.Items101\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items102\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items103\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items104\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items105\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items106\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"backColorPicker1.Items107\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"backColorPicker1.Items108\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"backColorPicker1.Items109\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"backColorPicker1.Items110\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"backColorPicker1.Items111\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items112\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"backColorPicker1.Items113\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"backColorPicker1.Items114\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items115\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items116\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items117\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items118\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items119\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items120\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"backColorPicker1.Items121\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"backColorPicker1.Items122\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"backColorPicker1.Items123\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items124\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items125\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items126\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"backColorPicker1.Items127\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items128\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items129\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"backColorPicker1.Items130\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"backColorPicker1.Items131\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"backColorPicker1.Items132\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"backColorPicker1.Items133\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items134\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"backColorPicker1.Items135\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"backColorPicker1.Items136\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"backColorPicker1.Items137\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"backColorPicker1.Items138\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items139\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items140\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items141\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items142\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"backColorPicker1.Items143\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items144\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"backColorPicker1.Items145\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"backColorPicker1.Items146\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"backColorPicker1.Items147\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"backColorPicker1.Items148\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"backColorPicker1.Items149\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"backColorPicker1.Items150\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items151\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"backColorPicker1.Items152\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"backColorPicker1.Items153\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items154\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"backColorPicker1.Items155\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"backColorPicker1.Items156\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"backColorPicker1.Items157\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items158\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"backColorPicker1.Items159\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"backColorPicker1.Items160\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items161\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items162\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items163\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items164\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items165\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items166\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items167\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items168\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items169\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"backColorPicker1.Items170\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items171\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"backColorPicker1.Items172\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items173\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items174\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items175\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items176\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items177\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items178\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"backColorPicker1.Items179\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items180\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items181\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items182\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"backColorPicker1.Items183\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items184\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items185\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"backColorPicker1.Items186\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"backColorPicker1.Items187\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items188\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"backColorPicker1.Items189\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items190\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"backColorPicker1.Items191\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"backColorPicker1.Items192\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items193\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"backColorPicker1.Items194\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items195\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"backColorPicker1.Items196\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"backColorPicker1.Items197\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"backColorPicker1.Items198\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items199\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"backColorPicker1.Items200\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"backColorPicker1.Items201\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items202\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"backColorPicker1.Items203\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items204\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"backColorPicker1.Items205\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items206\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items207\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items208\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items209\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items210\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items211\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items212\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items213\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items214\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items215\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items216\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"backColorPicker1.Items217\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items218\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"backColorPicker1.Items219\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items220\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"backColorPicker1.Items221\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items222\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items223\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items224\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"backColorPicker1.Items225\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items226\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items227\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items228\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items229\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items230\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items231\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"backColorPicker1.Items232\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"backColorPicker1.Items233\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"backColorPicker1.Items234\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items235\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"backColorPicker1.Items236\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"backColorPicker1.Items237\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"backColorPicker1.Items238\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"backColorPicker1.Items239\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"backColorPicker1.Items240\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"backColorPicker1.Items241\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items242\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items243\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items244\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items245\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items246\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"backColorPicker1.Items247\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"backColorPicker1.Items248\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"backColorPicker1.Items249\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"backColorPicker1.Items250\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"backColorPicker1.Items251\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items252\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"backColorPicker1.Items253\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"backColorPicker1.Items254\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items255\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items256\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items257\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items258\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items259\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items260\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"backColorPicker1.Items261\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"backColorPicker1.Items262\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"backColorPicker1.Items263\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items264\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items265\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items266\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"backColorPicker1.Items267\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items268\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items269\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"backColorPicker1.Items270\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"backColorPicker1.Items271\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"backColorPicker1.Items272\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"backColorPicker1.Items273\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items274\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"backColorPicker1.Items275\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"backColorPicker1.Items276\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"backColorPicker1.Items277\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"backColorPicker1.Items278\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items279\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items280\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items281\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items282\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"backColorPicker1.Items283\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items284\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"backColorPicker1.Items285\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"backColorPicker1.Items286\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"backColorPicker1.Items287\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"backColorPicker1.Items288\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"backColorPicker1.Items289\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"backColorPicker1.Items290\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items291\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"backColorPicker1.Items292\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"backColorPicker1.Items293\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items294\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"backColorPicker1.Items295\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"backColorPicker1.Items296\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"backColorPicker1.Items297\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items298\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"backColorPicker1.Items299\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"backColorPicker1.Items300\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items301\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items302\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items303\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items304\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items305\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items306\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items307\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items308\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items309\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"backColorPicker1.Items310\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items311\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"backColorPicker1.Items312\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items313\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items314\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items315\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items316\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items317\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items318\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"backColorPicker1.Items319\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items320\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items321\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items322\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"backColorPicker1.Items323\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items324\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items325\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"backColorPicker1.Items326\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"backColorPicker1.Items327\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items328\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"backColorPicker1.Items329\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items330\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"backColorPicker1.Items331\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"backColorPicker1.Items332\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items333\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"backColorPicker1.Items334\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items335\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"backColorPicker1.Items336\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"backColorPicker1.Items337\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"backColorPicker1.Items338\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items339\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"backColorPicker1.Items340\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"backColorPicker1.Items341\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items342\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"backColorPicker1.Items343\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items344\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"backColorPicker1.Items345\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items346\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items347\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items348\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items349\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items350\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items351\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items352\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items353\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items354\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items355\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items356\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"backColorPicker1.Items357\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items358\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"backColorPicker1.Items359\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items360\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"backColorPicker1.Items361\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items362\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items363\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items364\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"backColorPicker1.Items365\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items366\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items367\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items368\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items369\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items370\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items371\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"backColorPicker1.Items372\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"backColorPicker1.Items373\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"backColorPicker1.Items374\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items375\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"backColorPicker1.Items376\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"backColorPicker1.Items377\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"backColorPicker1.Items378\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"backColorPicker1.Items379\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"backColorPicker1.Items380\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"backColorPicker1.Items381\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items382\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items383\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items384\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items385\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items386\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"backColorPicker1.Items387\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"backColorPicker1.Items388\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"backColorPicker1.Items389\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"backColorPicker1.Items390\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"backColorPicker1.Items391\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items392\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"backColorPicker1.Items393\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"backColorPicker1.Items394\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items395\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items396\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items397\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items398\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items399\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items400\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"backColorPicker1.Items401\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"backColorPicker1.Items402\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"backColorPicker1.Items403\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items404\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items405\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items406\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"backColorPicker1.Items407\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items408\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items409\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"backColorPicker1.Items410\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"backColorPicker1.Items411\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"backColorPicker1.Items412\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"backColorPicker1.Items413\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items414\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"backColorPicker1.Items415\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"backColorPicker1.Items416\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"backColorPicker1.Items417\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"backColorPicker1.Items418\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items419\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items420\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items421\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items422\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"backColorPicker1.Items423\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items424\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"backColorPicker1.Items425\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"backColorPicker1.Items426\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"backColorPicker1.Items427\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"backColorPicker1.Items428\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"backColorPicker1.Items429\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"backColorPicker1.Items430\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items431\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"backColorPicker1.Items432\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"backColorPicker1.Items433\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items434\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"backColorPicker1.Items435\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"backColorPicker1.Items436\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"backColorPicker1.Items437\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items438\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"backColorPicker1.Items439\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"backColorPicker1.Items440\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items441\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items442\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items443\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items444\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items445\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items446\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items447\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items448\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items449\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"backColorPicker1.Items450\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items451\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"backColorPicker1.Items452\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items453\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items454\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items455\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items456\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items457\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items458\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"backColorPicker1.Items459\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items460\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items461\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items462\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"backColorPicker1.Items463\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items464\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items465\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"backColorPicker1.Items466\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"backColorPicker1.Items467\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items468\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"backColorPicker1.Items469\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items470\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"backColorPicker1.Items471\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"backColorPicker1.Items472\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items473\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"backColorPicker1.Items474\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items475\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"backColorPicker1.Items476\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"backColorPicker1.Items477\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"backColorPicker1.Items478\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items479\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"backColorPicker1.Items480\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"backColorPicker1.Items481\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items482\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"backColorPicker1.Items483\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items484\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"backColorPicker1.Items485\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items486\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items487\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items488\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items489\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items490\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items491\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items492\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items493\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items494\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items495\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items496\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"backColorPicker1.Items497\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items498\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"backColorPicker1.Items499\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items500\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"backColorPicker1.Items501\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items502\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items503\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items504\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"backColorPicker1.Items505\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items506\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items507\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items508\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items509\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items510\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items511\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"backColorPicker1.Items512\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"backColorPicker1.Items513\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"backColorPicker1.Items514\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items515\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"backColorPicker1.Items516\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"backColorPicker1.Items517\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"backColorPicker1.Items518\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"backColorPicker1.Items519\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"backColorPicker1.Items520\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"backColorPicker1.Items521\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items522\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items523\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items524\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items525\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items526\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"backColorPicker1.Items527\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"backColorPicker1.Items528\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"backColorPicker1.Items529\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"backColorPicker1.Items530\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"backColorPicker1.Items531\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items532\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"backColorPicker1.Items533\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"backColorPicker1.Items534\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items535\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items536\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items537\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items538\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items539\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items540\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"backColorPicker1.Items541\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"backColorPicker1.Items542\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"backColorPicker1.Items543\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items544\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items545\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items546\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"backColorPicker1.Items547\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items548\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items549\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"backColorPicker1.Items550\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"backColorPicker1.Items551\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"backColorPicker1.Items552\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"backColorPicker1.Items553\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items554\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"backColorPicker1.Items555\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"backColorPicker1.Items556\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"backColorPicker1.Items557\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"backColorPicker1.Items558\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items559\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items560\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items561\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items562\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"backColorPicker1.Items563\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items564\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"backColorPicker1.Items565\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"backColorPicker1.Items566\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"backColorPicker1.Items567\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"backColorPicker1.Items568\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"backColorPicker1.Items569\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"backColorPicker1.Items570\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items571\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"backColorPicker1.Items572\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"backColorPicker1.Items573\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items574\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"backColorPicker1.Items575\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"backColorPicker1.Items576\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"backColorPicker1.Items577\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items578\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"backColorPicker1.Items579\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"backColorPicker1.Items580\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items581\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items582\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items583\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items584\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items585\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items586\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items587\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items588\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items589\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"backColorPicker1.Items590\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items591\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"backColorPicker1.Items592\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items593\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items594\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items595\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items596\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items597\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items598\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"backColorPicker1.Items599\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items600\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items601\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items602\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"backColorPicker1.Items603\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items604\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items605\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"backColorPicker1.Items606\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"backColorPicker1.Items607\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items608\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"backColorPicker1.Items609\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items610\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"backColorPicker1.Items611\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"backColorPicker1.Items612\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items613\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"backColorPicker1.Items614\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items615\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"backColorPicker1.Items616\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"backColorPicker1.Items617\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"backColorPicker1.Items618\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items619\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"backColorPicker1.Items620\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"backColorPicker1.Items621\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items622\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"backColorPicker1.Items623\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items624\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"backColorPicker1.Items625\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items626\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items627\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items628\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items629\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items630\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items631\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items632\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items633\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items634\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items635\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items636\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"backColorPicker1.Items637\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items638\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"backColorPicker1.Items639\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items640\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"backColorPicker1.Items641\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items642\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items643\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items644\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"backColorPicker1.Items645\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items646\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items647\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items648\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items649\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items650\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items651\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"backColorPicker1.Items652\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"backColorPicker1.Items653\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"backColorPicker1.Items654\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items655\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"backColorPicker1.Items656\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"backColorPicker1.Items657\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"backColorPicker1.Items658\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"backColorPicker1.Items659\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"backColorPicker1.Items660\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"backColorPicker1.Items661\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items662\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items663\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items664\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items665\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items666\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"backColorPicker1.Items667\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"backColorPicker1.Items668\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"backColorPicker1.Items669\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"backColorPicker1.Items670\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"backColorPicker1.Items671\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items672\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"backColorPicker1.Items673\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"backColorPicker1.Items674\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items675\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items676\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items677\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items678\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items679\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items680\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"backColorPicker1.Items681\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"backColorPicker1.Items682\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"backColorPicker1.Items683\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items684\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items685\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items686\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"backColorPicker1.Items687\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items688\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items689\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"backColorPicker1.Items690\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"backColorPicker1.Items691\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"backColorPicker1.Items692\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"backColorPicker1.Items693\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items694\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"backColorPicker1.Items695\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"backColorPicker1.Items696\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"backColorPicker1.Items697\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"backColorPicker1.Items698\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items699\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items700\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items701\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items702\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"backColorPicker1.Items703\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items704\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"backColorPicker1.Items705\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"backColorPicker1.Items706\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"backColorPicker1.Items707\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"backColorPicker1.Items708\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"backColorPicker1.Items709\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"backColorPicker1.Items710\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items711\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"backColorPicker1.Items712\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"backColorPicker1.Items713\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items714\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"backColorPicker1.Items715\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"backColorPicker1.Items716\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"backColorPicker1.Items717\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items718\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"backColorPicker1.Items719\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"backColorPicker1.Items720\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items721\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items722\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items723\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items724\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items725\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items726\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items727\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items728\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items729\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"backColorPicker1.Items730\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items731\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"backColorPicker1.Items732\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items733\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items734\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items735\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items736\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items737\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items738\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"backColorPicker1.Items739\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items740\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items741\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items742\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"backColorPicker1.Items743\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items744\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items745\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"backColorPicker1.Items746\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"backColorPicker1.Items747\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items748\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"backColorPicker1.Items749\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items750\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"backColorPicker1.Items751\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"backColorPicker1.Items752\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items753\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"backColorPicker1.Items754\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items755\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"backColorPicker1.Items756\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"backColorPicker1.Items757\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"backColorPicker1.Items758\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items759\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"backColorPicker1.Items760\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"backColorPicker1.Items761\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items762\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"backColorPicker1.Items763\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items764\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"backColorPicker1.Items765\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items766\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items767\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items768\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items769\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items770\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items771\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items772\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items773\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items774\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items775\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items776\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"backColorPicker1.Items777\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items778\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"backColorPicker1.Items779\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items780\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"backColorPicker1.Items781\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items782\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items783\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items784\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"backColorPicker1.Items785\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items786\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items787\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items788\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items789\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items790\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items791\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"backColorPicker1.Items792\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"backColorPicker1.Items793\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"backColorPicker1.Items794\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items795\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"backColorPicker1.Items796\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"backColorPicker1.Items797\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"backColorPicker1.Items798\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"backColorPicker1.Items799\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"backColorPicker1.Items800\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"backColorPicker1.Items801\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items802\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items803\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items804\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items805\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items806\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"backColorPicker1.Items807\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"backColorPicker1.Items808\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"backColorPicker1.Items809\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"backColorPicker1.Items810\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"backColorPicker1.Items811\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items812\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"backColorPicker1.Items813\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"backColorPicker1.Items814\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items815\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items816\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items817\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items818\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items819\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items820\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"backColorPicker1.Items821\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"backColorPicker1.Items822\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"backColorPicker1.Items823\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items824\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items825\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items826\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"backColorPicker1.Items827\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items828\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items829\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"backColorPicker1.Items830\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"backColorPicker1.Items831\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"backColorPicker1.Items832\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"backColorPicker1.Items833\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items834\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"backColorPicker1.Items835\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"backColorPicker1.Items836\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"backColorPicker1.Items837\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"backColorPicker1.Items838\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items839\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items840\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items841\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items842\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"backColorPicker1.Items843\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items844\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"backColorPicker1.Items845\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"backColorPicker1.Items846\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"backColorPicker1.Items847\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"backColorPicker1.Items848\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"backColorPicker1.Items849\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"backColorPicker1.Items850\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items851\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"backColorPicker1.Items852\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"backColorPicker1.Items853\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items854\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"backColorPicker1.Items855\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"backColorPicker1.Items856\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"backColorPicker1.Items857\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items858\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"backColorPicker1.Items859\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"backColorPicker1.Items860\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items861\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items862\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items863\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items864\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items865\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items866\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items867\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items868\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items869\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"backColorPicker1.Items870\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items871\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"backColorPicker1.Items872\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items873\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items874\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items875\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items876\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items877\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items878\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"backColorPicker1.Items879\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items880\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items881\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items882\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"backColorPicker1.Items883\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items884\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items885\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"backColorPicker1.Items886\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"backColorPicker1.Items887\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items888\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"backColorPicker1.Items889\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items890\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"backColorPicker1.Items891\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"backColorPicker1.Items892\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items893\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"backColorPicker1.Items894\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items895\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"backColorPicker1.Items896\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"backColorPicker1.Items897\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"backColorPicker1.Items898\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items899\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"backColorPicker1.Items900\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"backColorPicker1.Items901\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items902\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"backColorPicker1.Items903\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items904\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"backColorPicker1.Items905\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items906\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items907\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items908\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items909\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items910\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items911\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items912\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items913\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items914\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items915\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items916\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"backColorPicker1.Items917\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items918\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"backColorPicker1.Items919\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items920\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"backColorPicker1.Items921\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items922\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items923\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items924\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"backColorPicker1.Items925\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items926\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items927\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items928\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items929\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items930\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items931\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"backColorPicker1.Items932\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"backColorPicker1.Items933\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"backColorPicker1.Items934\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items935\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"backColorPicker1.Items936\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"backColorPicker1.Items937\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"backColorPicker1.Items938\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"backColorPicker1.Items939\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"backColorPicker1.Items940\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"backColorPicker1.Items941\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items942\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items943\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items944\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items945\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items946\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"backColorPicker1.Items947\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"backColorPicker1.Items948\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"backColorPicker1.Items949\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"backColorPicker1.Items950\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"backColorPicker1.Items951\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items952\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"backColorPicker1.Items953\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"backColorPicker1.Items954\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items955\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items956\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items957\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items958\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items959\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items960\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"backColorPicker1.Items961\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"backColorPicker1.Items962\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"backColorPicker1.Items963\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items964\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items965\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items966\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"backColorPicker1.Items967\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items968\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items969\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"backColorPicker1.Items970\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"backColorPicker1.Items971\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"backColorPicker1.Items972\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"backColorPicker1.Items973\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items974\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"backColorPicker1.Items975\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"backColorPicker1.Items976\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"backColorPicker1.Items977\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"backColorPicker1.Items978\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items979\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items980\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items981\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items982\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"backColorPicker1.Items983\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items984\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"backColorPicker1.Items985\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"backColorPicker1.Items986\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"backColorPicker1.Items987\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"backColorPicker1.Items988\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"backColorPicker1.Items989\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"backColorPicker1.Items990\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items991\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"backColorPicker1.Items992\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"backColorPicker1.Items993\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items994\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"backColorPicker1.Items995\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"backColorPicker1.Items996\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"backColorPicker1.Items997\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items998\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"backColorPicker1.Items999\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"backColorPicker1.Items1000\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1001\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1002\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1003\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1004\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1005\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1006\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items1007\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items1008\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1009\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"backColorPicker1.Items1010\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1011\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1012\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1013\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1014\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1015\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1016\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1017\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1018\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1019\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1020\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1021\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1022\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"backColorPicker1.Items1023\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1024\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1025\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"backColorPicker1.Items1026\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"backColorPicker1.Items1027\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1028\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"backColorPicker1.Items1029\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1030\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1031\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"backColorPicker1.Items1032\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1033\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"backColorPicker1.Items1034\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1035\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1036\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"backColorPicker1.Items1037\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"backColorPicker1.Items1038\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items1039\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"backColorPicker1.Items1040\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"backColorPicker1.Items1041\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1042\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1043\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1044\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"backColorPicker1.Items1045\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1046\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1047\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1048\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items1049\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1050\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1051\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1052\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1053\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items1054\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1055\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1056\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"backColorPicker1.Items1057\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1058\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1059\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items1060\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1061\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items1062\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1063\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1064\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"backColorPicker1.Items1065\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1066\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1067\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1068\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1069\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1070\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1071\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"backColorPicker1.Items1072\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"backColorPicker1.Items1073\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"backColorPicker1.Items1074\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1075\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"backColorPicker1.Items1076\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"backColorPicker1.Items1077\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"backColorPicker1.Items1078\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"backColorPicker1.Items1079\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"backColorPicker1.Items1080\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"backColorPicker1.Items1081\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1082\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1083\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1084\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1085\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1086\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"backColorPicker1.Items1087\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"backColorPicker1.Items1088\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"backColorPicker1.Items1089\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1090\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"backColorPicker1.Items1091\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1092\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"backColorPicker1.Items1093\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"backColorPicker1.Items1094\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1095\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1096\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1097\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1098\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1099\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1100\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"backColorPicker1.Items1101\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"backColorPicker1.Items1102\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"backColorPicker1.Items1103\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1104\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1105\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1106\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1107\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1108\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1109\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1110\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"backColorPicker1.Items1111\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"backColorPicker1.Items1112\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"backColorPicker1.Items1113\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1114\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1115\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"backColorPicker1.Items1116\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"backColorPicker1.Items1117\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"backColorPicker1.Items1118\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1119\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1120\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1121\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1122\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"backColorPicker1.Items1123\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items1124\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"backColorPicker1.Items1125\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"backColorPicker1.Items1126\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"backColorPicker1.Items1127\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"backColorPicker1.Items1128\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"backColorPicker1.Items1129\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1130\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1131\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1132\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"backColorPicker1.Items1133\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1134\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"backColorPicker1.Items1135\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"backColorPicker1.Items1136\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"backColorPicker1.Items1137\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1138\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"backColorPicker1.Items1139\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"backColorPicker1.Items1140\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1141\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1142\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1143\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1144\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1145\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1146\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items1147\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items1148\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1149\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"backColorPicker1.Items1150\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1151\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1152\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1153\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1154\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1155\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1156\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1157\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1158\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1159\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1160\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1161\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1162\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"backColorPicker1.Items1163\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1164\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1165\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"backColorPicker1.Items1166\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"backColorPicker1.Items1167\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1168\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"backColorPicker1.Items1169\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1170\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1171\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"backColorPicker1.Items1172\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1173\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"backColorPicker1.Items1174\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1175\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1176\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"backColorPicker1.Items1177\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"backColorPicker1.Items1178\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items1179\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"backColorPicker1.Items1180\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"backColorPicker1.Items1181\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1182\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1183\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1184\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"backColorPicker1.Items1185\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1186\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1187\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1188\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items1189\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1190\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1191\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1192\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1193\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items1194\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1195\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1196\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"backColorPicker1.Items1197\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1198\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1199\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items1200\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1201\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items1202\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1203\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1204\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"backColorPicker1.Items1205\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1206\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1207\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1208\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1209\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1210\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1211\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"backColorPicker1.Items1212\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"backColorPicker1.Items1213\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"backColorPicker1.Items1214\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1215\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"backColorPicker1.Items1216\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"backColorPicker1.Items1217\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"backColorPicker1.Items1218\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"backColorPicker1.Items1219\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"backColorPicker1.Items1220\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"backColorPicker1.Items1221\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1222\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1223\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1224\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1225\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1226\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"backColorPicker1.Items1227\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"backColorPicker1.Items1228\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"backColorPicker1.Items1229\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1230\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"backColorPicker1.Items1231\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1232\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"backColorPicker1.Items1233\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"backColorPicker1.Items1234\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1235\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1236\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1237\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1238\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1239\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1240\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"backColorPicker1.Items1241\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"backColorPicker1.Items1242\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"backColorPicker1.Items1243\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1244\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1245\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1246\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1247\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1248\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1249\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1250\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"backColorPicker1.Items1251\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"backColorPicker1.Items1252\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"backColorPicker1.Items1253\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1254\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1255\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"backColorPicker1.Items1256\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"backColorPicker1.Items1257\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"backColorPicker1.Items1258\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1259\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1260\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1261\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1262\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"backColorPicker1.Items1263\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items1264\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"backColorPicker1.Items1265\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"backColorPicker1.Items1266\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"backColorPicker1.Items1267\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"backColorPicker1.Items1268\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"backColorPicker1.Items1269\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1270\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1271\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1272\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"backColorPicker1.Items1273\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1274\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"backColorPicker1.Items1275\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"backColorPicker1.Items1276\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"backColorPicker1.Items1277\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1278\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"backColorPicker1.Items1279\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"backColorPicker1.Items1280\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1281\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1282\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1283\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1284\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1285\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1286\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items1287\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items1288\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1289\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"backColorPicker1.Items1290\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1291\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1292\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1293\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1294\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1295\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1296\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1297\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1298\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1299\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1300\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1301\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1302\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"backColorPicker1.Items1303\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1304\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1305\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"backColorPicker1.Items1306\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"backColorPicker1.Items1307\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1308\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"backColorPicker1.Items1309\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1310\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1311\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"backColorPicker1.Items1312\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1313\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"backColorPicker1.Items1314\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1315\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1316\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"backColorPicker1.Items1317\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"backColorPicker1.Items1318\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items1319\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"backColorPicker1.Items1320\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"backColorPicker1.Items1321\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1322\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1323\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1324\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"backColorPicker1.Items1325\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1326\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1327\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1328\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items1329\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1330\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1331\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1332\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1333\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items1334\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1335\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1336\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"backColorPicker1.Items1337\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1338\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1339\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items1340\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1341\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items1342\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1343\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1344\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"backColorPicker1.Items1345\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1346\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1347\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1348\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1349\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1350\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1351\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"backColorPicker1.Items1352\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"backColorPicker1.Items1353\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"backColorPicker1.Items1354\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1355\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"backColorPicker1.Items1356\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"backColorPicker1.Items1357\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"backColorPicker1.Items1358\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"backColorPicker1.Items1359\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"backColorPicker1.Items1360\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"backColorPicker1.Items1361\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1362\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1363\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1364\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1365\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1366\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"backColorPicker1.Items1367\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"backColorPicker1.Items1368\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"backColorPicker1.Items1369\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1370\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"backColorPicker1.Items1371\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1372\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"backColorPicker1.Items1373\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"backColorPicker1.Items1374\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1375\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1376\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1377\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1378\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1379\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1380\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"backColorPicker1.Items1381\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"backColorPicker1.Items1382\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"backColorPicker1.Items1383\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1384\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1385\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1386\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1387\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1388\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1389\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1390\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"backColorPicker1.Items1391\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"backColorPicker1.Items1392\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"backColorPicker1.Items1393\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1394\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1395\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"backColorPicker1.Items1396\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"backColorPicker1.Items1397\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"backColorPicker1.Items1398\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1399\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1400\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1401\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1402\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"backColorPicker1.Items1403\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items1404\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"backColorPicker1.Items1405\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"backColorPicker1.Items1406\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"backColorPicker1.Items1407\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"backColorPicker1.Items1408\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"backColorPicker1.Items1409\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1410\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1411\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1412\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"backColorPicker1.Items1413\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1414\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"backColorPicker1.Items1415\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"backColorPicker1.Items1416\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"backColorPicker1.Items1417\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1418\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"backColorPicker1.Items1419\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"backColorPicker1.Items1420\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1421\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1422\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1423\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1424\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1425\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1426\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items1427\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items1428\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1429\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"backColorPicker1.Items1430\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1431\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1432\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1433\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1434\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1435\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1436\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1437\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1438\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1439\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1440\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1441\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1442\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"backColorPicker1.Items1443\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1444\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1445\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"backColorPicker1.Items1446\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"backColorPicker1.Items1447\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1448\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"backColorPicker1.Items1449\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1450\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1451\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"backColorPicker1.Items1452\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1453\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"backColorPicker1.Items1454\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1455\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1456\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"backColorPicker1.Items1457\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"backColorPicker1.Items1458\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items1459\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"backColorPicker1.Items1460\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"backColorPicker1.Items1461\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1462\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1463\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1464\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"backColorPicker1.Items1465\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1466\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1467\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1468\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items1469\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1470\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1471\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1472\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1473\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items1474\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1475\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1476\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"backColorPicker1.Items1477\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1478\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1479\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items1480\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1481\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items1482\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1483\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1484\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"backColorPicker1.Items1485\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1486\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1487\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1488\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1489\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1490\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1491\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"backColorPicker1.Items1492\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"backColorPicker1.Items1493\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"backColorPicker1.Items1494\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1495\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"backColorPicker1.Items1496\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"backColorPicker1.Items1497\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"backColorPicker1.Items1498\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"backColorPicker1.Items1499\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"backColorPicker1.Items1500\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"backColorPicker1.Items1501\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1502\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1503\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1504\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1505\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1506\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"backColorPicker1.Items1507\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"backColorPicker1.Items1508\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"backColorPicker1.Items1509\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1510\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"backColorPicker1.Items1511\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1512\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"backColorPicker1.Items1513\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"backColorPicker1.Items1514\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1515\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1516\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1517\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1518\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1519\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1520\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"backColorPicker1.Items1521\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"backColorPicker1.Items1522\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"backColorPicker1.Items1523\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1524\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1525\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1526\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1527\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1528\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1529\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1530\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"backColorPicker1.Items1531\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"backColorPicker1.Items1532\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"backColorPicker1.Items1533\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1534\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1535\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"backColorPicker1.Items1536\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"backColorPicker1.Items1537\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"backColorPicker1.Items1538\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1539\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1540\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1541\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1542\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"backColorPicker1.Items1543\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items1544\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"backColorPicker1.Items1545\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"backColorPicker1.Items1546\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"backColorPicker1.Items1547\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"backColorPicker1.Items1548\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"backColorPicker1.Items1549\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1550\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1551\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1552\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"backColorPicker1.Items1553\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1554\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"backColorPicker1.Items1555\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"backColorPicker1.Items1556\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"backColorPicker1.Items1557\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1558\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"backColorPicker1.Items1559\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"backColorPicker1.Items1560\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1561\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1562\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1563\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1564\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1565\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1566\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items1567\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items1568\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1569\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"backColorPicker1.Items1570\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1571\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1572\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1573\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1574\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1575\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1576\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1577\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1578\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1579\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1580\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1581\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1582\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"backColorPicker1.Items1583\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1584\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1585\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"backColorPicker1.Items1586\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"backColorPicker1.Items1587\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1588\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"backColorPicker1.Items1589\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1590\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1591\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"backColorPicker1.Items1592\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1593\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"backColorPicker1.Items1594\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1595\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1596\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"backColorPicker1.Items1597\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"backColorPicker1.Items1598\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items1599\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"backColorPicker1.Items1600\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"backColorPicker1.Items1601\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1602\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1603\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1604\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"backColorPicker1.Items1605\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1606\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1607\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1608\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items1609\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1610\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1611\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1612\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1613\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items1614\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1615\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1616\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"backColorPicker1.Items1617\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1618\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1619\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items1620\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1621\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items1622\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1623\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1624\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"backColorPicker1.Items1625\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1626\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1627\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1628\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1629\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1630\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1631\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"backColorPicker1.Items1632\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"backColorPicker1.Items1633\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"backColorPicker1.Items1634\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1635\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"backColorPicker1.Items1636\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"backColorPicker1.Items1637\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"backColorPicker1.Items1638\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"backColorPicker1.Items1639\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"backColorPicker1.Items1640\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"backColorPicker1.Items1641\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1642\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1643\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1644\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1645\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1646\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"backColorPicker1.Items1647\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"backColorPicker1.Items1648\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"backColorPicker1.Items1649\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1650\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"backColorPicker1.Items1651\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1652\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"backColorPicker1.Items1653\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"backColorPicker1.Items1654\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1655\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1656\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1657\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1658\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1659\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1660\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"backColorPicker1.Items1661\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"backColorPicker1.Items1662\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"backColorPicker1.Items1663\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1664\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1665\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1666\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1667\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1668\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1669\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1670\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"backColorPicker1.Items1671\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"backColorPicker1.Items1672\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"backColorPicker1.Items1673\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1674\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1675\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"backColorPicker1.Items1676\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"backColorPicker1.Items1677\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"backColorPicker1.Items1678\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1679\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1680\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1681\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1682\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"backColorPicker1.Items1683\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items1684\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"backColorPicker1.Items1685\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"backColorPicker1.Items1686\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"backColorPicker1.Items1687\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"backColorPicker1.Items1688\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"backColorPicker1.Items1689\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1690\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1691\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1692\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"backColorPicker1.Items1693\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1694\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"backColorPicker1.Items1695\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"backColorPicker1.Items1696\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"backColorPicker1.Items1697\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1698\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"backColorPicker1.Items1699\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"backColorPicker1.Items1700\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1701\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1702\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1703\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1704\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1705\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1706\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items1707\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items1708\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1709\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"backColorPicker1.Items1710\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1711\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1712\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1713\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1714\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1715\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1716\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1717\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1718\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1719\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1720\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1721\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1722\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"backColorPicker1.Items1723\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1724\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1725\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"backColorPicker1.Items1726\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"backColorPicker1.Items1727\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1728\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"backColorPicker1.Items1729\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1730\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1731\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"backColorPicker1.Items1732\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1733\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"backColorPicker1.Items1734\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1735\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1736\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"backColorPicker1.Items1737\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"backColorPicker1.Items1738\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items1739\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"backColorPicker1.Items1740\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"backColorPicker1.Items1741\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1742\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1743\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1744\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"backColorPicker1.Items1745\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1746\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1747\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1748\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items1749\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1750\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1751\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1752\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1753\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items1754\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1755\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1756\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"backColorPicker1.Items1757\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1758\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1759\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items1760\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1761\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items1762\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1763\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1764\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"backColorPicker1.Items1765\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1766\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1767\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1768\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1769\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1770\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1771\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"backColorPicker1.Items1772\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"backColorPicker1.Items1773\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"backColorPicker1.Items1774\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1775\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"backColorPicker1.Items1776\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"backColorPicker1.Items1777\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"backColorPicker1.Items1778\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"backColorPicker1.Items1779\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"backColorPicker1.Items1780\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"backColorPicker1.Items1781\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1782\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1783\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1784\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1785\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1786\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"backColorPicker1.Items1787\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"backColorPicker1.Items1788\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"backColorPicker1.Items1789\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1790\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"backColorPicker1.Items1791\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1792\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"backColorPicker1.Items1793\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"backColorPicker1.Items1794\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1795\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1796\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1797\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1798\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1799\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1800\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"backColorPicker1.Items1801\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"backColorPicker1.Items1802\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"backColorPicker1.Items1803\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1804\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1805\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1806\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1807\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1808\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1809\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1810\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"backColorPicker1.Items1811\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"backColorPicker1.Items1812\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"backColorPicker1.Items1813\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1814\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1815\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"backColorPicker1.Items1816\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"backColorPicker1.Items1817\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"backColorPicker1.Items1818\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1819\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1820\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1821\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1822\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"backColorPicker1.Items1823\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items1824\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"backColorPicker1.Items1825\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"backColorPicker1.Items1826\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"backColorPicker1.Items1827\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"backColorPicker1.Items1828\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"backColorPicker1.Items1829\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1830\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1831\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1832\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"backColorPicker1.Items1833\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1834\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"backColorPicker1.Items1835\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"backColorPicker1.Items1836\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"backColorPicker1.Items1837\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1838\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"backColorPicker1.Items1839\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"backColorPicker1.Items1840\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1841\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1842\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1843\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1844\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1845\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1846\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items1847\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items1848\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1849\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"backColorPicker1.Items1850\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1851\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1852\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1853\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1854\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1855\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1856\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1857\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1858\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1859\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1860\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1861\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1862\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"backColorPicker1.Items1863\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1864\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1865\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"backColorPicker1.Items1866\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"backColorPicker1.Items1867\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1868\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"backColorPicker1.Items1869\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1870\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1871\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"backColorPicker1.Items1872\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1873\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"backColorPicker1.Items1874\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1875\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1876\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"backColorPicker1.Items1877\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"backColorPicker1.Items1878\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items1879\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"backColorPicker1.Items1880\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"backColorPicker1.Items1881\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1882\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1883\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1884\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"backColorPicker1.Items1885\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1886\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1887\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1888\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items1889\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1890\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1891\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1892\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1893\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items1894\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1895\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1896\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"backColorPicker1.Items1897\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1898\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1899\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items1900\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1901\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items1902\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1903\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1904\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"backColorPicker1.Items1905\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1906\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1907\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1908\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1909\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1910\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1911\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"backColorPicker1.Items1912\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"backColorPicker1.Items1913\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"backColorPicker1.Items1914\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1915\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"backColorPicker1.Items1916\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"backColorPicker1.Items1917\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"backColorPicker1.Items1918\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"backColorPicker1.Items1919\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"backColorPicker1.Items1920\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"backColorPicker1.Items1921\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1922\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1923\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1924\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1925\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1926\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"backColorPicker1.Items1927\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"backColorPicker1.Items1928\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"backColorPicker1.Items1929\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1930\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"backColorPicker1.Items1931\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1932\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"backColorPicker1.Items1933\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"backColorPicker1.Items1934\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1935\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1936\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1937\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1938\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1939\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1940\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"backColorPicker1.Items1941\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"backColorPicker1.Items1942\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"backColorPicker1.Items1943\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1944\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1945\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1946\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1947\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1948\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1949\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1950\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"backColorPicker1.Items1951\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"backColorPicker1.Items1952\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"backColorPicker1.Items1953\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1954\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1955\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"backColorPicker1.Items1956\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"backColorPicker1.Items1957\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"backColorPicker1.Items1958\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items1959\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1960\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1961\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items1962\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"backColorPicker1.Items1963\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items1964\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"backColorPicker1.Items1965\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"backColorPicker1.Items1966\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"backColorPicker1.Items1967\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"backColorPicker1.Items1968\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"backColorPicker1.Items1969\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1970\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1971\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"backColorPicker1.Items1972\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"backColorPicker1.Items1973\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1974\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"backColorPicker1.Items1975\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"backColorPicker1.Items1976\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"backColorPicker1.Items1977\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1978\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"backColorPicker1.Items1979\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"backColorPicker1.Items1980\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1981\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1982\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items1983\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items1984\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1985\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1986\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items1987\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items1988\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1989\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"backColorPicker1.Items1990\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items1991\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"backColorPicker1.Items1992\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items1993\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items1994\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items1995\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items1996\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items1997\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items1998\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"backColorPicker1.Items1999\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2000\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items2001\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2002\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"backColorPicker1.Items2003\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items2004\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2005\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"backColorPicker1.Items2006\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"backColorPicker1.Items2007\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items2008\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"backColorPicker1.Items2009\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items2010\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"backColorPicker1.Items2011\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"backColorPicker1.Items2012\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items2013\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"backColorPicker1.Items2014\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items2015\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"backColorPicker1.Items2016\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"backColorPicker1.Items2017\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"backColorPicker1.Items2018\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items2019\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"backColorPicker1.Items2020\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"backColorPicker1.Items2021\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2022\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"backColorPicker1.Items2023\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2024\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"backColorPicker1.Items2025\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items2026\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items2027\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2028\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items2029\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items2030\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items2031\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2032\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2033\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items2034\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2035\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items2036\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"backColorPicker1.Items2037\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2038\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2039\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items2040\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"backColorPicker1.Items2041\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items2042\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2043\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items2044\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"backColorPicker1.Items2045\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2046\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2047\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2048\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items2049\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items2050\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2051\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"backColorPicker1.Items2052\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"backColorPicker1.Items2053\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"backColorPicker1.Items2054\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items2055\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"backColorPicker1.Items2056\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"backColorPicker1.Items2057\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"backColorPicker1.Items2058\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"backColorPicker1.Items2059\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"backColorPicker1.Items2060\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"backColorPicker1.Items2061\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items2062\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items2063\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2064\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items2065\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items2066\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"backColorPicker1.Items2067\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"backColorPicker1.Items2068\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"backColorPicker1.Items2069\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"backColorPicker1.Items2070\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"backColorPicker1.Items2071\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2072\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"backColorPicker1.Items2073\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"backColorPicker1.Items2074\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items2075\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2076\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items2077\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items2078\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items2079\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2080\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"backColorPicker1.Items2081\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"backColorPicker1.Items2082\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"backColorPicker1.Items2083\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2084\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2085\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items2086\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"backColorPicker1.Items2087\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2088\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2089\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"backColorPicker1.Items2090\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"backColorPicker1.Items2091\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"backColorPicker1.Items2092\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"backColorPicker1.Items2093\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items2094\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"backColorPicker1.Items2095\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"backColorPicker1.Items2096\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"backColorPicker1.Items2097\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"backColorPicker1.Items2098\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items2099\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2100\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2101\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items2102\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"backColorPicker1.Items2103\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items2104\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"backColorPicker1.Items2105\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"backColorPicker1.Items2106\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"backColorPicker1.Items2107\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"backColorPicker1.Items2108\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"backColorPicker1.Items2109\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2110\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items2111\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"backColorPicker1.Items2112\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"backColorPicker1.Items2113\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2114\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"backColorPicker1.Items2115\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"backColorPicker1.Items2116\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"backColorPicker1.Items2117\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2118\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"backColorPicker1.Items2119\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"backColorPicker1.Items2120\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items2121\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2122\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items2123\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items2124\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items2125\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2126\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items2127\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items2128\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2129\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"backColorPicker1.Items2130\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items2131\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"backColorPicker1.Items2132\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items2133\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2134\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2135\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items2136\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items2137\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items2138\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"backColorPicker1.Items2139\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2140\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items2141\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2142\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"backColorPicker1.Items2143\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items2144\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2145\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"backColorPicker1.Items2146\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"backColorPicker1.Items2147\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items2148\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"backColorPicker1.Items2149\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items2150\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"backColorPicker1.Items2151\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"backColorPicker1.Items2152\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items2153\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"backColorPicker1.Items2154\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items2155\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"backColorPicker1.Items2156\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"backColorPicker1.Items2157\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"backColorPicker1.Items2158\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items2159\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"backColorPicker1.Items2160\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"backColorPicker1.Items2161\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2162\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"backColorPicker1.Items2163\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2164\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"backColorPicker1.Items2165\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items2166\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items2167\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2168\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items2169\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items2170\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items2171\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2172\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2173\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items2174\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2175\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items2176\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"backColorPicker1.Items2177\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2178\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2179\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items2180\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"backColorPicker1.Items2181\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items2182\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2183\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items2184\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"backColorPicker1.Items2185\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2186\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2187\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2188\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items2189\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items2190\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2191\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"backColorPicker1.Items2192\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"backColorPicker1.Items2193\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"backColorPicker1.Items2194\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items2195\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"backColorPicker1.Items2196\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"backColorPicker1.Items2197\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"backColorPicker1.Items2198\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"backColorPicker1.Items2199\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"backColorPicker1.Items2200\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"backColorPicker1.Items2201\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items2202\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items2203\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2204\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items2205\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items2206\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"backColorPicker1.Items2207\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"backColorPicker1.Items2208\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"backColorPicker1.Items2209\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"backColorPicker1.Items2210\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"backColorPicker1.Items2211\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2212\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"backColorPicker1.Items2213\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"backColorPicker1.Items2214\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items2215\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2216\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items2217\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items2218\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items2219\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2220\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"backColorPicker1.Items2221\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"backColorPicker1.Items2222\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"backColorPicker1.Items2223\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2224\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2225\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items2226\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"backColorPicker1.Items2227\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2228\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2229\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"backColorPicker1.Items2230\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"backColorPicker1.Items2231\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"backColorPicker1.Items2232\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"backColorPicker1.Items2233\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items2234\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"backColorPicker1.Items2235\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"backColorPicker1.Items2236\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"backColorPicker1.Items2237\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"backColorPicker1.Items2238\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items2239\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2240\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2241\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items2242\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"backColorPicker1.Items2243\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items2244\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"backColorPicker1.Items2245\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"backColorPicker1.Items2246\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"backColorPicker1.Items2247\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"backColorPicker1.Items2248\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"backColorPicker1.Items2249\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2250\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items2251\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"backColorPicker1.Items2252\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"backColorPicker1.Items2253\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2254\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"backColorPicker1.Items2255\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"backColorPicker1.Items2256\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"backColorPicker1.Items2257\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2258\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"backColorPicker1.Items2259\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"backColorPicker1.Items2260\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items2261\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2262\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items2263\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items2264\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items2265\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2266\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items2267\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items2268\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2269\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"backColorPicker1.Items2270\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items2271\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"backColorPicker1.Items2272\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items2273\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2274\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2275\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items2276\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items2277\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items2278\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"backColorPicker1.Items2279\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2280\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items2281\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2282\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"backColorPicker1.Items2283\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items2284\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2285\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"backColorPicker1.Items2286\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"backColorPicker1.Items2287\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items2288\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"backColorPicker1.Items2289\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items2290\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"backColorPicker1.Items2291\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"backColorPicker1.Items2292\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items2293\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"backColorPicker1.Items2294\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items2295\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"backColorPicker1.Items2296\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"backColorPicker1.Items2297\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"backColorPicker1.Items2298\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items2299\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"backColorPicker1.Items2300\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"backColorPicker1.Items2301\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2302\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"backColorPicker1.Items2303\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2304\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"backColorPicker1.Items2305\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items2306\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items2307\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2308\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items2309\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items2310\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items2311\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2312\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2313\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items2314\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2315\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items2316\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"backColorPicker1.Items2317\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2318\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2319\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items2320\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"backColorPicker1.Items2321\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items2322\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2323\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items2324\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"backColorPicker1.Items2325\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2326\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2327\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2328\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items2329\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items2330\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2331\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"backColorPicker1.Items2332\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"backColorPicker1.Items2333\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"backColorPicker1.Items2334\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items2335\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"backColorPicker1.Items2336\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"backColorPicker1.Items2337\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"backColorPicker1.Items2338\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"backColorPicker1.Items2339\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"backColorPicker1.Items2340\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"backColorPicker1.Items2341\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items2342\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items2343\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2344\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items2345\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items2346\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"backColorPicker1.Items2347\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"backColorPicker1.Items2348\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"backColorPicker1.Items2349\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"backColorPicker1.Items2350\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"backColorPicker1.Items2351\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2352\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"backColorPicker1.Items2353\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"backColorPicker1.Items2354\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items2355\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2356\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items2357\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items2358\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items2359\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2360\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"backColorPicker1.Items2361\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"backColorPicker1.Items2362\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"backColorPicker1.Items2363\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2364\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2365\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items2366\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"backColorPicker1.Items2367\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2368\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2369\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"backColorPicker1.Items2370\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"backColorPicker1.Items2371\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"backColorPicker1.Items2372\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"backColorPicker1.Items2373\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items2374\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"backColorPicker1.Items2375\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"backColorPicker1.Items2376\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"backColorPicker1.Items2377\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"backColorPicker1.Items2378\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items2379\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2380\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2381\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items2382\" xml:space=\"preserve\">\n    <value>Aqua</value>\n  </data>\n  <data name=\"backColorPicker1.Items2383\" xml:space=\"preserve\">\n    <value>Aquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items2384\" xml:space=\"preserve\">\n    <value>Azure</value>\n  </data>\n  <data name=\"backColorPicker1.Items2385\" xml:space=\"preserve\">\n    <value>Beige</value>\n  </data>\n  <data name=\"backColorPicker1.Items2386\" xml:space=\"preserve\">\n    <value>Bisque</value>\n  </data>\n  <data name=\"backColorPicker1.Items2387\" xml:space=\"preserve\">\n    <value>Black</value>\n  </data>\n  <data name=\"backColorPicker1.Items2388\" xml:space=\"preserve\">\n    <value>Blanchedalmond</value>\n  </data>\n  <data name=\"backColorPicker1.Items2389\" xml:space=\"preserve\">\n    <value>Blue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2390\" xml:space=\"preserve\">\n    <value>Blueviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items2391\" xml:space=\"preserve\">\n    <value>Brown</value>\n  </data>\n  <data name=\"backColorPicker1.Items2392\" xml:space=\"preserve\">\n    <value>Burlywood</value>\n  </data>\n  <data name=\"backColorPicker1.Items2393\" xml:space=\"preserve\">\n    <value>Cadetblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2394\" xml:space=\"preserve\">\n    <value>Chartreuse</value>\n  </data>\n  <data name=\"backColorPicker1.Items2395\" xml:space=\"preserve\">\n    <value>Chocolate</value>\n  </data>\n  <data name=\"backColorPicker1.Items2396\" xml:space=\"preserve\">\n    <value>Coral</value>\n  </data>\n  <data name=\"backColorPicker1.Items2397\" xml:space=\"preserve\">\n    <value>Cornflowerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2398\" xml:space=\"preserve\">\n    <value>Cornsilk</value>\n  </data>\n  <data name=\"backColorPicker1.Items2399\" xml:space=\"preserve\">\n    <value>Crimson</value>\n  </data>\n  <data name=\"backColorPicker1.Items2400\" xml:space=\"preserve\">\n    <value>Cyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items2401\" xml:space=\"preserve\">\n    <value>Darkblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2402\" xml:space=\"preserve\">\n    <value>Darkcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items2403\" xml:space=\"preserve\">\n    <value>Darkgoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items2404\" xml:space=\"preserve\">\n    <value>Darkgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items2405\" xml:space=\"preserve\">\n    <value>Darkgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2406\" xml:space=\"preserve\">\n    <value>Darkkhaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items2407\" xml:space=\"preserve\">\n    <value>Darkmagenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items2408\" xml:space=\"preserve\">\n    <value>Darkolivegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2409\" xml:space=\"preserve\">\n    <value>Darkorange</value>\n  </data>\n  <data name=\"backColorPicker1.Items2410\" xml:space=\"preserve\">\n    <value>Darkorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items2411\" xml:space=\"preserve\">\n    <value>Darkred</value>\n  </data>\n  <data name=\"backColorPicker1.Items2412\" xml:space=\"preserve\">\n    <value>Darksalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items2413\" xml:space=\"preserve\">\n    <value>Darkseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2414\" xml:space=\"preserve\">\n    <value>Darkslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2415\" xml:space=\"preserve\">\n    <value>Darkslategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items2416\" xml:space=\"preserve\">\n    <value>Darkturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items2417\" xml:space=\"preserve\">\n    <value>Darkviolet</value>\n  </data>\n  <data name=\"backColorPicker1.Items2418\" xml:space=\"preserve\">\n    <value>Deeppink</value>\n  </data>\n  <data name=\"backColorPicker1.Items2419\" xml:space=\"preserve\">\n    <value>Deepskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2420\" xml:space=\"preserve\">\n    <value>Dimgray</value>\n  </data>\n  <data name=\"backColorPicker1.Items2421\" xml:space=\"preserve\">\n    <value>Dodgerblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2422\" xml:space=\"preserve\">\n    <value>Firebrick</value>\n  </data>\n  <data name=\"backColorPicker1.Items2423\" xml:space=\"preserve\">\n    <value>Floralwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items2424\" xml:space=\"preserve\">\n    <value>Forestgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2425\" xml:space=\"preserve\">\n    <value>Fuchsia</value>\n  </data>\n  <data name=\"backColorPicker1.Items2426\" xml:space=\"preserve\">\n    <value>Gainsboro</value>\n  </data>\n  <data name=\"backColorPicker1.Items2427\" xml:space=\"preserve\">\n    <value>Ghostwhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items2428\" xml:space=\"preserve\">\n    <value>Gold</value>\n  </data>\n  <data name=\"backColorPicker1.Items2429\" xml:space=\"preserve\">\n    <value>Goldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items2430\" xml:space=\"preserve\">\n    <value>Gray</value>\n  </data>\n  <data name=\"backColorPicker1.Items2431\" xml:space=\"preserve\">\n    <value>Green</value>\n  </data>\n  <data name=\"backColorPicker1.Items2432\" xml:space=\"preserve\">\n    <value>Greenyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items2433\" xml:space=\"preserve\">\n    <value>Honeydew</value>\n  </data>\n  <data name=\"backColorPicker1.Items2434\" xml:space=\"preserve\">\n    <value>Hotpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items2435\" xml:space=\"preserve\">\n    <value>Indianred</value>\n  </data>\n  <data name=\"backColorPicker1.Items2436\" xml:space=\"preserve\">\n    <value>Indigo</value>\n  </data>\n  <data name=\"backColorPicker1.Items2437\" xml:space=\"preserve\">\n    <value>Ivory</value>\n  </data>\n  <data name=\"backColorPicker1.Items2438\" xml:space=\"preserve\">\n    <value>Khaki</value>\n  </data>\n  <data name=\"backColorPicker1.Items2439\" xml:space=\"preserve\">\n    <value>Lavender</value>\n  </data>\n  <data name=\"backColorPicker1.Items2440\" xml:space=\"preserve\">\n    <value>Lavenderblush</value>\n  </data>\n  <data name=\"backColorPicker1.Items2441\" xml:space=\"preserve\">\n    <value>Lawngreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2442\" xml:space=\"preserve\">\n    <value>Lemonchiffon</value>\n  </data>\n  <data name=\"backColorPicker1.Items2443\" xml:space=\"preserve\">\n    <value>Lightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2444\" xml:space=\"preserve\">\n    <value>Lightcoral</value>\n  </data>\n  <data name=\"backColorPicker1.Items2445\" xml:space=\"preserve\">\n    <value>Lightcyan</value>\n  </data>\n  <data name=\"backColorPicker1.Items2446\" xml:space=\"preserve\">\n    <value>Lightgoldenrodyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items2447\" xml:space=\"preserve\">\n    <value>Lightgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2448\" xml:space=\"preserve\">\n    <value>Lightgrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items2449\" xml:space=\"preserve\">\n    <value>Lightpink</value>\n  </data>\n  <data name=\"backColorPicker1.Items2450\" xml:space=\"preserve\">\n    <value>Lightsalmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items2451\" xml:space=\"preserve\">\n    <value>Lightseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2452\" xml:space=\"preserve\">\n    <value>Lightskyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2453\" xml:space=\"preserve\">\n    <value>Lightslategrey</value>\n  </data>\n  <data name=\"backColorPicker1.Items2454\" xml:space=\"preserve\">\n    <value>Lightsteelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2455\" xml:space=\"preserve\">\n    <value>Lightyellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items2456\" xml:space=\"preserve\">\n    <value>Lime</value>\n  </data>\n  <data name=\"backColorPicker1.Items2457\" xml:space=\"preserve\">\n    <value>Limegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2458\" xml:space=\"preserve\">\n    <value>Linen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2459\" xml:space=\"preserve\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"backColorPicker1.Items2460\" xml:space=\"preserve\">\n    <value>Maroon</value>\n  </data>\n  <data name=\"backColorPicker1.Items2461\" xml:space=\"preserve\">\n    <value>Mediumaquamarine</value>\n  </data>\n  <data name=\"backColorPicker1.Items2462\" xml:space=\"preserve\">\n    <value>Mediumblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2463\" xml:space=\"preserve\">\n    <value>Mediumorchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items2464\" xml:space=\"preserve\">\n    <value>Mediumpurple</value>\n  </data>\n  <data name=\"backColorPicker1.Items2465\" xml:space=\"preserve\">\n    <value>Mediumseagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2466\" xml:space=\"preserve\">\n    <value>Mediumslateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2467\" xml:space=\"preserve\">\n    <value>Mediumspringgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2468\" xml:space=\"preserve\">\n    <value>Mediumturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items2469\" xml:space=\"preserve\">\n    <value>Mediumvioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items2470\" xml:space=\"preserve\">\n    <value>Midnightblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2471\" xml:space=\"preserve\">\n    <value>Mintcream</value>\n  </data>\n  <data name=\"backColorPicker1.Items2472\" xml:space=\"preserve\">\n    <value>Mistyrose</value>\n  </data>\n  <data name=\"backColorPicker1.Items2473\" xml:space=\"preserve\">\n    <value>Moccasin</value>\n  </data>\n  <data name=\"backColorPicker1.Items2474\" xml:space=\"preserve\">\n    <value>Navajowhite</value>\n  </data>\n  <data name=\"backColorPicker1.Items2475\" xml:space=\"preserve\">\n    <value>Navy</value>\n  </data>\n  <data name=\"backColorPicker1.Items2476\" xml:space=\"preserve\">\n    <value>Oldlace</value>\n  </data>\n  <data name=\"backColorPicker1.Items2477\" xml:space=\"preserve\">\n    <value>Olive</value>\n  </data>\n  <data name=\"backColorPicker1.Items2478\" xml:space=\"preserve\">\n    <value>Olivedrab</value>\n  </data>\n  <data name=\"backColorPicker1.Items2479\" xml:space=\"preserve\">\n    <value>Orange</value>\n  </data>\n  <data name=\"backColorPicker1.Items2480\" xml:space=\"preserve\">\n    <value>Orangered</value>\n  </data>\n  <data name=\"backColorPicker1.Items2481\" xml:space=\"preserve\">\n    <value>Orchid</value>\n  </data>\n  <data name=\"backColorPicker1.Items2482\" xml:space=\"preserve\">\n    <value>Palegoldenrod</value>\n  </data>\n  <data name=\"backColorPicker1.Items2483\" xml:space=\"preserve\">\n    <value>Palegreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2484\" xml:space=\"preserve\">\n    <value>Paleturquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items2485\" xml:space=\"preserve\">\n    <value>Palevioletred</value>\n  </data>\n  <data name=\"backColorPicker1.Items2486\" xml:space=\"preserve\">\n    <value>Papayawhip</value>\n  </data>\n  <data name=\"backColorPicker1.Items2487\" xml:space=\"preserve\">\n    <value>Peachpuff</value>\n  </data>\n  <data name=\"backColorPicker1.Items2488\" xml:space=\"preserve\">\n    <value>Peru</value>\n  </data>\n  <data name=\"backColorPicker1.Items2489\" xml:space=\"preserve\">\n    <value>Pink</value>\n  </data>\n  <data name=\"backColorPicker1.Items2490\" xml:space=\"preserve\">\n    <value>Plum</value>\n  </data>\n  <data name=\"backColorPicker1.Items2491\" xml:space=\"preserve\">\n    <value>Powderblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2492\" xml:space=\"preserve\">\n    <value>Purple</value>\n  </data>\n  <data name=\"backColorPicker1.Items2493\" xml:space=\"preserve\">\n    <value>Red</value>\n  </data>\n  <data name=\"backColorPicker1.Items2494\" xml:space=\"preserve\">\n    <value>Rosybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items2495\" xml:space=\"preserve\">\n    <value>Royalblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2496\" xml:space=\"preserve\">\n    <value>Saddlebrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items2497\" xml:space=\"preserve\">\n    <value>Salmon</value>\n  </data>\n  <data name=\"backColorPicker1.Items2498\" xml:space=\"preserve\">\n    <value>Sandybrown</value>\n  </data>\n  <data name=\"backColorPicker1.Items2499\" xml:space=\"preserve\">\n    <value>Seagreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2500\" xml:space=\"preserve\">\n    <value>Seashell</value>\n  </data>\n  <data name=\"backColorPicker1.Items2501\" xml:space=\"preserve\">\n    <value>Sienna</value>\n  </data>\n  <data name=\"backColorPicker1.Items2502\" xml:space=\"preserve\">\n    <value>Silver</value>\n  </data>\n  <data name=\"backColorPicker1.Items2503\" xml:space=\"preserve\">\n    <value>Skyblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2504\" xml:space=\"preserve\">\n    <value>Slateblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2505\" xml:space=\"preserve\">\n    <value>Slategray</value>\n  </data>\n  <data name=\"backColorPicker1.Items2506\" xml:space=\"preserve\">\n    <value>Snow</value>\n  </data>\n  <data name=\"backColorPicker1.Items2507\" xml:space=\"preserve\">\n    <value>Springgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Items2508\" xml:space=\"preserve\">\n    <value>Steelblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items2509\" xml:space=\"preserve\">\n    <value>Tan</value>\n  </data>\n  <data name=\"backColorPicker1.Items2510\" xml:space=\"preserve\">\n    <value>Teal</value>\n  </data>\n  <data name=\"backColorPicker1.Items2511\" xml:space=\"preserve\">\n    <value>Thistle</value>\n  </data>\n  <data name=\"backColorPicker1.Items2512\" xml:space=\"preserve\">\n    <value>Tomato</value>\n  </data>\n  <data name=\"backColorPicker1.Items2513\" xml:space=\"preserve\">\n    <value>Turquoise</value>\n  </data>\n  <data name=\"backColorPicker1.Items2514\" xml:space=\"preserve\">\n    <value>Violet</value>\n  </data>\n  <data name=\"backColorPicker1.Items2515\" xml:space=\"preserve\">\n    <value>Wheat</value>\n  </data>\n  <data name=\"backColorPicker1.Items2516\" xml:space=\"preserve\">\n    <value>White</value>\n  </data>\n  <data name=\"backColorPicker1.Items2517\" xml:space=\"preserve\">\n    <value>Whitesmoke</value>\n  </data>\n  <data name=\"backColorPicker1.Items2518\" xml:space=\"preserve\">\n    <value>Yellow</value>\n  </data>\n  <data name=\"backColorPicker1.Items2519\" xml:space=\"preserve\">\n    <value>Yellowgreen</value>\n  </data>\n  <data name=\"backColorPicker1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>273, 12</value>\n  </data>\n  <data name=\"backColorPicker1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 21</value>\n  </data>\n  <data name=\"backColorPicker1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>33</value>\n  </data>\n  <data name=\"&gt;&gt;backColorPicker1.Name\" xml:space=\"preserve\">\n    <value>backColorPicker1</value>\n  </data>\n  <data name=\"&gt;&gt;backColorPicker1.Type\" xml:space=\"preserve\">\n    <value>fyiReporting.RdlDesign.ColorPicker, RdlDesigner, Version=4.18.0.0, Culture=neutral, PublicKeyToken=null</value>\n  </data>\n  <data name=\"&gt;&gt;backColorPicker1.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;backColorPicker1.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"panel1.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Top</value>\n  </data>\n  <data name=\"panel1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 89</value>\n  </data>\n  <data name=\"panel1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>1284, 67</value>\n  </data>\n  <data name=\"panel1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>36</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Name\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <metadata name=\"statusStrip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>329, 17</value>\n  </metadata>\n  <data name=\"statusSelected.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>31, 17</value>\n  </data>\n  <data name=\"statusSelected.Text\" xml:space=\"preserve\">\n    <value>        </value>\n  </data>\n  <data name=\"statusSelected.ToolTipText\" xml:space=\"preserve\">\n    <value>Name of selected ReportItem</value>\n  </data>\n  <data name=\"toolStripStatusLabel2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>10, 17</value>\n  </data>\n  <data name=\"toolStripStatusLabel2.Text\" xml:space=\"preserve\">\n    <value>|</value>\n  </data>\n  <data name=\"statusPosition.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>31, 17</value>\n  </data>\n  <data name=\"statusPosition.Text\" xml:space=\"preserve\">\n    <value>        </value>\n  </data>\n  <data name=\"statusPosition.ToolTipText\" xml:space=\"preserve\">\n    <value>Position of selected ReportItem</value>\n  </data>\n  <data name=\"statusStrip1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 620</value>\n  </data>\n  <data name=\"statusStrip1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>1284, 22</value>\n  </data>\n  <data name=\"statusStrip1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>40</value>\n  </data>\n  <data name=\"statusStrip1.Text\" xml:space=\"preserve\">\n    <value>statusStrip1</value>\n  </data>\n  <data name=\"&gt;&gt;statusStrip1.Name\" xml:space=\"preserve\">\n    <value>statusStrip1</value>\n  </data>\n  <data name=\"&gt;&gt;statusStrip1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;statusStrip1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;statusStrip1.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"mainSP.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Right</value>\n  </data>\n  <data name=\"mainSP.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"mainSP.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>1042, 156</value>\n  </data>\n  <data name=\"mainSP.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>2, 464</value>\n  </data>\n  <data name=\"mainSP.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>42</value>\n  </data>\n  <data name=\"&gt;&gt;mainSP.Name\" xml:space=\"preserve\">\n    <value>mainSP</value>\n  </data>\n  <data name=\"&gt;&gt;mainSP.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Splitter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;mainSP.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;mainSP.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <metadata name=\"ContextMenuTB.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>445, 17</value>\n  </metadata>\n  <data name=\"MenuTBClose.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>165, 22</value>\n  </data>\n  <data name=\"MenuTBClose.Text\" xml:space=\"preserve\">\n    <value>&amp;Close</value>\n  </data>\n  <data name=\"MenuTBSave.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>165, 22</value>\n  </data>\n  <data name=\"MenuTBSave.Text\" xml:space=\"preserve\">\n    <value>&amp;Save</value>\n  </data>\n  <data name=\"MenuTBCloseAllButThis.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>165, 22</value>\n  </data>\n  <data name=\"MenuTBCloseAllButThis.Text\" xml:space=\"preserve\">\n    <value>Close All But This</value>\n  </data>\n  <data name=\"ContextMenuTB.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>166, 70</value>\n  </data>\n  <data name=\"&gt;&gt;ContextMenuTB.Name\" xml:space=\"preserve\">\n    <value>ContextMenuTB</value>\n  </data>\n  <data name=\"&gt;&gt;ContextMenuTB.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"mainProperties.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Right</value>\n  </data>\n  <data name=\"mainProperties.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>1044, 156</value>\n  </data>\n  <data name=\"mainProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>240, 464</value>\n  </data>\n  <data name=\"mainProperties.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>41</value>\n  </data>\n  <data name=\"&gt;&gt;mainProperties.Name\" xml:space=\"preserve\">\n    <value>mainProperties</value>\n  </data>\n  <data name=\"&gt;&gt;mainProperties.Type\" xml:space=\"preserve\">\n    <value>fyiReporting.RdlDesign.PropertyCtl, RdlDesigner, Version=4.18.0.0, Culture=neutral, PublicKeyToken=null</value>\n  </data>\n  <data name=\"&gt;&gt;mainProperties.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;mainProperties.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>1284, 642</value>\n  </data>\n  <data name=\"$this.Icon\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        AAABAAIAICAQAAAAAADoAgAAJgAAABAQEAAAAAAAKAEAAA4DAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC\n        AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/\n        AAAA//8A/wAAAP8A/wD//wAA////AP//////////////////////////////////////////////////\n        ////////////////AAAAAAAAAAAAAAAAD////wAAAAAAAAAAAAAAAA////8A//////////////AP////\n        AP/////////////wD////wD/mZmZn/mZzMER8A////8A/5mZmZ/5mczBEfAP////AP//////+ZnMwRHw\n        D////wD///////mZzMER8A////8A/5mZmZ/5mczBEfAP////AP+ZmZmf+ZnMwRHwD////wD///////mZ\n        zM//8A////8A/5mZmZ/5mczP//AP////AP+ZmZmf+ZnMz//wD////wD///////mZzM//8A////8A////\n        ///5mf////AP////AP+ZmZmf+Zn////wD////wD/mZmZn/mZ////8A//u7u7u7u7u7////////AP////\n        /wAPu7u////////wD///AAD7u/u/v///////8A//AP+7vwuwuw//AAAAD/AP//+7AACwCwsP/wAAAA/w\n        D/+7///7D7C/////////8A////APsPvwv/////////AP//AP+wC/D7AAAAAAAAAAD/8P+7D78PsAAAAA\n        AAAAAA///78P+w/7//////////////vw/78Pv/////////////+/D/vw/7//////////////AAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA\n        AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AP//////////8AAAAAAA\n        AA/w////////D/D5mZ/5/C8P8P////n8Lw/w+Zmf+fwvD/D////5/C8P8PmZn/n8/w/w///7uf//D7u7\n        u7u5//8P8Au/u////w8LsLu7/w//D78LC7vwAA8P8L8LC////w8L8LCwAAAAD78LD7//////AAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\n</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Majorsilence Reporting Designer</value>\n  </data>\n  <data name=\"&gt;&gt;fileToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>fileToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;fileToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;newReportToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>newReportToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;newReportToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;openToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>openToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;openToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;closeToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>closeToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;closeToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator1.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator1</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;saveToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>saveToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;saveToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;saveAsToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>saveAsToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;saveAsToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;printToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>printToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;printToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;exportToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>exportToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;exportToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;pDFToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>pDFToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;pDFToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;pDFOldStyleToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>pDFOldStyleToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;pDFOldStyleToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tIFFToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>tIFFToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;tIFFToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cSVToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>cSVToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;cSVToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;excelToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>excelToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;excelToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;Excel2007ToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>Excel2007ToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;Excel2007ToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dOCToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>dOCToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;dOCToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rTFDOCToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>rTFDOCToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;rTFDOCToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;xMLToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>xMLToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;xMLToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;webPageHTMLToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>webPageHTMLToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;webPageHTMLToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;webArchiveSingleFileMHTToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>webArchiveSingleFileMHTToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;webArchiveSingleFileMHTToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator2.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator2</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;recentFilesToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>recentFilesToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;recentFilesToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator3.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator3</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;exitToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>exitToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;exitToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;editToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>editToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;editToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;undoToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>undoToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;undoToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;redoToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>redoToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;redoToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator4.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator4</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cutToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>cutToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;cutToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;copyToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>copyToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;copyToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;pasteToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>pasteToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;pasteToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;deleteToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>deleteToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;deleteToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator5.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator5</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator5.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;selectAllToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>selectAllToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;selectAllToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator6.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator6</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator6.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;findToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>findToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;findToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;findNextToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>findNextToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;findNextToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;replaceToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>replaceToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;replaceToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;goToToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>goToToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;goToToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator7.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator7</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator7.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;formatXMLToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>formatXMLToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;formatXMLToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;viewToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>viewToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;viewToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;designerToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>designerToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;designerToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rDLTextToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>rDLTextToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;rDLTextToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;previewToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>previewToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;previewToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;showReportInBrowserToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>showReportInBrowserToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;showReportInBrowserToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;propertiesWindowsToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>propertiesWindowsToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;propertiesWindowsToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;insertToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>insertToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;insertToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chartToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>chartToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;chartToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;gridToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>gridToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;gridToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;imageToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>imageToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;imageToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lineToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>lineToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;lineToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;listToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>listToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;listToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;matrixToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>matrixToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;matrixToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rectangleToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>rectangleToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;rectangleToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;subReportToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>subReportToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;subReportToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tableToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>tableToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;tableToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;textboxToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>textboxToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;textboxToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dataToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>dataToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;dataToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dataSetsToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>dataSetsToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;dataSetsToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dataSourcesToolStripMenuItem1.Name\" xml:space=\"preserve\">\n    <value>dataSourcesToolStripMenuItem1</value>\n  </data>\n  <data name=\"&gt;&gt;dataSourcesToolStripMenuItem1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator8.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator8</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator8.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;embeddedImagesToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>embeddedImagesToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;embeddedImagesToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator9.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator9</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator9.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;createSharedDataSourceToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>createSharedDataSourceToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;createSharedDataSourceToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;formatToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>formatToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;formatToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;alignToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>alignToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;alignToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;leftsToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>leftsToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;leftsToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;centersToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>centersToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;centersToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rightsToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>rightsToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;rightsToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator10.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator10</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator10.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;topsToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>topsToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;topsToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;middlesToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>middlesToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;middlesToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bottomsToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>bottomsToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;bottomsToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;sizeToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>sizeToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;sizeToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;widthToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>widthToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;widthToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;heightToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>heightToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;heightToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bothToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>bothToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;bothToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;horizontalSpacingToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>horizontalSpacingToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;horizontalSpacingToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;makeEqualToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>makeEqualToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;makeEqualToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;increaseToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>increaseToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;increaseToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;decreaseToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>decreaseToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;decreaseToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;zeroToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>zeroToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;zeroToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;verticalSpacingToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>verticalSpacingToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;verticalSpacingToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;makeEqualToolStripMenuItem1.Name\" xml:space=\"preserve\">\n    <value>makeEqualToolStripMenuItem1</value>\n  </data>\n  <data name=\"&gt;&gt;makeEqualToolStripMenuItem1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;increaseToolStripMenuItem1.Name\" xml:space=\"preserve\">\n    <value>increaseToolStripMenuItem1</value>\n  </data>\n  <data name=\"&gt;&gt;increaseToolStripMenuItem1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;decreaseToolStripMenuItem1.Name\" xml:space=\"preserve\">\n    <value>decreaseToolStripMenuItem1</value>\n  </data>\n  <data name=\"&gt;&gt;decreaseToolStripMenuItem1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;zeroToolStripMenuItem1.Name\" xml:space=\"preserve\">\n    <value>zeroToolStripMenuItem1</value>\n  </data>\n  <data name=\"&gt;&gt;zeroToolStripMenuItem1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator11.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator11</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator11.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;paddingLeftToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>paddingLeftToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;paddingLeftToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;increaseToolStripMenuItem2.Name\" xml:space=\"preserve\">\n    <value>increaseToolStripMenuItem2</value>\n  </data>\n  <data name=\"&gt;&gt;increaseToolStripMenuItem2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;decreaseToolStripMenuItem2.Name\" xml:space=\"preserve\">\n    <value>decreaseToolStripMenuItem2</value>\n  </data>\n  <data name=\"&gt;&gt;decreaseToolStripMenuItem2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;zeroToolStripMenuItem2.Name\" xml:space=\"preserve\">\n    <value>zeroToolStripMenuItem2</value>\n  </data>\n  <data name=\"&gt;&gt;zeroToolStripMenuItem2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;paddingRightToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>paddingRightToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;paddingRightToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;increaseToolStripMenuItem3.Name\" xml:space=\"preserve\">\n    <value>increaseToolStripMenuItem3</value>\n  </data>\n  <data name=\"&gt;&gt;increaseToolStripMenuItem3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;decreaseToolStripMenuItem3.Name\" xml:space=\"preserve\">\n    <value>decreaseToolStripMenuItem3</value>\n  </data>\n  <data name=\"&gt;&gt;decreaseToolStripMenuItem3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;zeroToolStripMenuItem3.Name\" xml:space=\"preserve\">\n    <value>zeroToolStripMenuItem3</value>\n  </data>\n  <data name=\"&gt;&gt;zeroToolStripMenuItem3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;paddintTopToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>paddintTopToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;paddintTopToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;increaseToolStripMenuItem4.Name\" xml:space=\"preserve\">\n    <value>increaseToolStripMenuItem4</value>\n  </data>\n  <data name=\"&gt;&gt;increaseToolStripMenuItem4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;decreaseToolStripMenuItem4.Name\" xml:space=\"preserve\">\n    <value>decreaseToolStripMenuItem4</value>\n  </data>\n  <data name=\"&gt;&gt;decreaseToolStripMenuItem4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;zeroToolStripMenuItem4.Name\" xml:space=\"preserve\">\n    <value>zeroToolStripMenuItem4</value>\n  </data>\n  <data name=\"&gt;&gt;zeroToolStripMenuItem4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;paddingBottomToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>paddingBottomToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;paddingBottomToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;increaseToolStripMenuItem5.Name\" xml:space=\"preserve\">\n    <value>increaseToolStripMenuItem5</value>\n  </data>\n  <data name=\"&gt;&gt;increaseToolStripMenuItem5.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;decreaseToolStripMenuItem5.Name\" xml:space=\"preserve\">\n    <value>decreaseToolStripMenuItem5</value>\n  </data>\n  <data name=\"&gt;&gt;decreaseToolStripMenuItem5.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;zeroToolStripMenuItem5.Name\" xml:space=\"preserve\">\n    <value>zeroToolStripMenuItem5</value>\n  </data>\n  <data name=\"&gt;&gt;zeroToolStripMenuItem5.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem1.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem1</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;centerInContainerToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>centerInContainerToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;centerInContainerToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;centerHorizontallyToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>centerHorizontallyToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;centerHorizontallyToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;centerVerticallyToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>centerVerticallyToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;centerVerticallyToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;centerBothToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>centerBothToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;centerBothToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolsToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>toolsToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;toolsToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;validateRDLToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>validateRDLToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;validateRDLToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator12.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator12</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator12.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;startDesktopServerToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>startDesktopServerToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;startDesktopServerToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator13.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator13</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator13.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;optionsToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>optionsToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;optionsToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;windowToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>windowToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;windowToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cascadeToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>cascadeToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;cascadeToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tileToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>tileToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;tileToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;horizontalToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>horizontalToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;horizontalToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;verticallyToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>verticallyToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;verticallyToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;closeAllToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>closeAllToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;closeAllToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;helpToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>helpToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;helpToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;helpToolStripMenuItem1.Name\" xml:space=\"preserve\">\n    <value>helpToolStripMenuItem1</value>\n  </data>\n  <data name=\"&gt;&gt;helpToolStripMenuItem1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;supportToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>supportToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;supportToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;aboutToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>aboutToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;aboutToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;newToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>newToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;newToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;openToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>openToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;openToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;saveToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>saveToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;saveToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cutToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>cutToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;cutToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;copyToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>copyToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;copyToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;pasteToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>pasteToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;pasteToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;undoToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>undoToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;undoToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;textboxToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>textboxToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;textboxToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chartToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>chartToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;chartToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tableToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>tableToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;tableToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;listToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>listToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;listToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;imageToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>imageToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;imageToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;matrixToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>matrixToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;matrixToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;subreportToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>subreportToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;subreportToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rectangleToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>rectangleToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;rectangleToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lineToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>lineToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;lineToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;fxToolStripLabel1.Name\" xml:space=\"preserve\">\n    <value>fxToolStripLabel1</value>\n  </data>\n  <data name=\"&gt;&gt;fxToolStripLabel1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;ctlEditTextbox.Name\" xml:space=\"preserve\">\n    <value>ctlEditTextbox</value>\n  </data>\n  <data name=\"&gt;&gt;ctlEditTextbox.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;zoomControl.Name\" xml:space=\"preserve\">\n    <value>zoomControl</value>\n  </data>\n  <data name=\"&gt;&gt;zoomControl.Type\" xml:space=\"preserve\">\n    <value>fyiReporting.RdlDesign.ToolStripUserZoomControl, RdlDesigner, Version=4.18.0.0, Culture=neutral, PublicKeyToken=null</value>\n  </data>\n  <data name=\"&gt;&gt;boldToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>boldToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;boldToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;italiacToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>italiacToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;italiacToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;underlineToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>underlineToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;underlineToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;leftAlignToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>leftAlignToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;leftAlignToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;centerAlignToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>centerAlignToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;centerAlignToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rightAlignToolStripButton3.Name\" xml:space=\"preserve\">\n    <value>rightAlignToolStripButton3</value>\n  </data>\n  <data name=\"&gt;&gt;rightAlignToolStripButton3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;fontToolStripComboBox1.Name\" xml:space=\"preserve\">\n    <value>fontToolStripComboBox1</value>\n  </data>\n  <data name=\"&gt;&gt;fontToolStripComboBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;fontSizeToolStripComboBox1.Name\" xml:space=\"preserve\">\n    <value>fontSizeToolStripComboBox1</value>\n  </data>\n  <data name=\"&gt;&gt;fontSizeToolStripComboBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;printToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>printToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;printToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;zoomToolStripComboBox1.Name\" xml:space=\"preserve\">\n    <value>zoomToolStripComboBox1</value>\n  </data>\n  <data name=\"&gt;&gt;zoomToolStripComboBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;selectToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>selectToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;selectToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;pdfToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>pdfToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;pdfToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;htmlToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>htmlToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;htmlToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;excelToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>excelToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;excelToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;XmlToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>XmlToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;XmlToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MhtToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>MhtToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;MhtToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;CsvToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>CsvToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;CsvToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;RtfToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>RtfToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;RtfToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;TifToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>TifToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;TifToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator14.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator14</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator14.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;AlignmentGridEnable.Name\" xml:space=\"preserve\">\n    <value>AlignmentGridEnable</value>\n  </data>\n  <data name=\"&gt;&gt;AlignmentGridEnable.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;statusSelected.Name\" xml:space=\"preserve\">\n    <value>statusSelected</value>\n  </data>\n  <data name=\"&gt;&gt;statusSelected.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripStatusLabel2.Name\" xml:space=\"preserve\">\n    <value>toolStripStatusLabel2</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripStatusLabel2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;statusPosition.Name\" xml:space=\"preserve\">\n    <value>statusPosition</value>\n  </data>\n  <data name=\"&gt;&gt;statusPosition.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTBClose.Name\" xml:space=\"preserve\">\n    <value>MenuTBClose</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTBClose.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTBSave.Name\" xml:space=\"preserve\">\n    <value>MenuTBSave</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTBSave.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTBCloseAllButThis.Name\" xml:space=\"preserve\">\n    <value>MenuTBCloseAllButThis</value>\n  </data>\n  <data name=\"&gt;&gt;MenuTBCloseAllButThis.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>RdlDesigner</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/RdlDesigner.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"fileToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 20</value>\n  </data>\n  <data name=\"fileToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Файл</value>\n  </data>\n  <data name=\"editToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>108, 20</value>\n  </data>\n  <data name=\"editToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Редактирование</value>\n  </data>\n  <data name=\"viewToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>39, 20</value>\n  </data>\n  <data name=\"viewToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Вид</value>\n  </data>\n  <data name=\"insertToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>67, 20</value>\n  </data>\n  <data name=\"insertToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Вставить</value>\n  </data>\n  <data name=\"dataToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>62, 20</value>\n  </data>\n  <data name=\"dataToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Данные</value>\n  </data>\n  <data name=\"formatToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>93, 20</value>\n  </data>\n  <data name=\"formatToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Оформление</value>\n  </data>\n  <data name=\"toolsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>95, 20</value>\n  </data>\n  <data name=\"toolsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Инструменты</value>\n  </data>\n  <data name=\"windowToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>47, 20</value>\n  </data>\n  <data name=\"windowToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Окна</value>\n  </data>\n  <data name=\"helpToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>68, 20</value>\n  </data>\n  <data name=\"helpToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Помощь</value>\n  </data>\n  <data name=\"newReportToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"newReportToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Создать отчёт...</value>\n  </data>\n  <data name=\"openToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"openToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Открыть...</value>\n  </data>\n  <data name=\"closeToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"closeToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Закрыть</value>\n  </data>\n  <data name=\"toolStripSeparator1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>199, 6</value>\n  </data>\n  <data name=\"saveToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"saveToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Сохранить</value>\n  </data>\n  <data name=\"saveAsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"saveAsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Сохранить как...</value>\n  </data>\n  <data name=\"printToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"printToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Печатать</value>\n  </data>\n  <data name=\"exportToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"exportToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Экспорт</value>\n  </data>\n  <data name=\"pDFToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>234, 22</value>\n  </data>\n  <data name=\"pDFOldStyleToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>234, 22</value>\n  </data>\n  <data name=\"pDFOldStyleToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>PDF (Старый формат)...</value>\n  </data>\n  <data name=\"tIFFToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>234, 22</value>\n  </data>\n  <data name=\"cSVToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>234, 22</value>\n  </data>\n  <data name=\"excelToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>234, 22</value>\n  </data>\n  <data name=\"dOCToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>234, 22</value>\n  </data>\n  <data name=\"rTFDOCToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>234, 22</value>\n  </data>\n  <data name=\"xMLToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>234, 22</value>\n  </data>\n  <data name=\"webPageHTMLToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>234, 22</value>\n  </data>\n  <data name=\"webPageHTMLToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Веб-страница, HTML...</value>\n  </data>\n  <data name=\"webArchiveSingleFileMHTToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>234, 22</value>\n  </data>\n  <data name=\"webArchiveSingleFileMHTToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Веб-архив, один файл MHT...</value>\n  </data>\n  <data name=\"toolStripSeparator2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>199, 6</value>\n  </data>\n  <data name=\"recentFilesToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"recentFilesToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Недавние файлы</value>\n  </data>\n  <data name=\"toolStripSeparator3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>199, 6</value>\n  </data>\n  <data name=\"exitToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"exitToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Выйти</value>\n  </data>\n  <data name=\"undoToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"undoToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"redoToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"redoToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Повторить</value>\n  </data>\n  <data name=\"toolStripSeparator4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>185, 6</value>\n  </data>\n  <data name=\"cutToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"cutToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Вырезать</value>\n  </data>\n  <data name=\"copyToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"copyToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Скопировать</value>\n  </data>\n  <data name=\"pasteToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"pasteToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Вставить</value>\n  </data>\n  <data name=\"deleteToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"deleteToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"toolStripSeparator5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>185, 6</value>\n  </data>\n  <data name=\"selectAllToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"selectAllToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Выбрать все</value>\n  </data>\n  <data name=\"toolStripSeparator6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>185, 6</value>\n  </data>\n  <data name=\"findToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"findToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Найти</value>\n  </data>\n  <data name=\"findNextToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"findNextToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Найти далее</value>\n  </data>\n  <data name=\"replaceToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"replaceToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Заменить</value>\n  </data>\n  <data name=\"goToToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"goToToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Перейти к ...</value>\n  </data>\n  <data name=\"toolStripSeparator7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>185, 6</value>\n  </data>\n  <data name=\"formatXMLToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>188, 22</value>\n  </data>\n  <data name=\"formatXMLToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Форматировать XM&amp;L</value>\n  </data>\n  <data name=\"designerToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>238, 22</value>\n  </data>\n  <data name=\"designerToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Дизайнер</value>\n  </data>\n  <data name=\"rDLTextToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>238, 22</value>\n  </data>\n  <data name=\"rDLTextToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Редактор кода</value>\n  </data>\n  <data name=\"previewToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>238, 22</value>\n  </data>\n  <data name=\"previewToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Просмотр</value>\n  </data>\n  <data name=\"showReportInBrowserToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>238, 22</value>\n  </data>\n  <data name=\"showReportInBrowserToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Показать отчёт в браузере</value>\n  </data>\n  <data name=\"propertiesWindowsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>238, 22</value>\n  </data>\n  <data name=\"propertiesWindowsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Свойства окна</value>\n  </data>\n  <data name=\"chartToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>195, 22</value>\n  </data>\n  <data name=\"chartToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Диаграмму...</value>\n  </data>\n  <data name=\"gridToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>195, 22</value>\n  </data>\n  <data name=\"gridToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Сетку</value>\n  </data>\n  <data name=\"imageToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>195, 22</value>\n  </data>\n  <data name=\"imageToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Изображение</value>\n  </data>\n  <data name=\"lineToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>195, 22</value>\n  </data>\n  <data name=\"lineToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Линию</value>\n  </data>\n  <data name=\"listToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>195, 22</value>\n  </data>\n  <data name=\"listToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Список</value>\n  </data>\n  <data name=\"matrixToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>195, 22</value>\n  </data>\n  <data name=\"matrixToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Матрицу...</value>\n  </data>\n  <data name=\"rectangleToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>195, 22</value>\n  </data>\n  <data name=\"rectangleToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Прямоугольник</value>\n  </data>\n  <data name=\"subReportToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>195, 22</value>\n  </data>\n  <data name=\"subReportToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Подотчёт</value>\n  </data>\n  <data name=\"tableToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>195, 22</value>\n  </data>\n  <data name=\"tableToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Таблицу...</value>\n  </data>\n  <data name=\"textboxToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>195, 22</value>\n  </data>\n  <data name=\"textboxToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Текстовое поле</value>\n  </data>\n  <data name=\"barCodeEAN13ToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>195, 22</value>\n  </data>\n  <data name=\"barCodeEAN13ToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Штрих-код EAN-13...</value>\n  </data>\n  <data name=\"barCodeBooklandToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>195, 22</value>\n  </data>\n  <data name=\"barCodeBooklandToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Штрих-код Bookland...</value>\n  </data>\n  <data name=\"dataSetsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>266, 22</value>\n  </data>\n  <data name=\"dataSetsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Наборы данных</value>\n  </data>\n  <data name=\"dataSourcesToolStripMenuItem1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>266, 22</value>\n  </data>\n  <data name=\"dataSourcesToolStripMenuItem1.Text\" xml:space=\"preserve\">\n    <value>Источники данных</value>\n  </data>\n  <data name=\"toolStripSeparator8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>263, 6</value>\n  </data>\n  <data name=\"embeddedImagesToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>266, 22</value>\n  </data>\n  <data name=\"embeddedImagesToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Встроенные изображения...</value>\n  </data>\n  <data name=\"toolStripSeparator9.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>263, 6</value>\n  </data>\n  <data name=\"createSharedDataSourceToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>266, 22</value>\n  </data>\n  <data name=\"createSharedDataSourceToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Создать общий источник данных...</value>\n  </data>\n  <data name=\"alignToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"alignToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Выравнивание</value>\n  </data>\n  <data name=\"leftsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>144, 22</value>\n  </data>\n  <data name=\"leftsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Слева</value>\n  </data>\n  <data name=\"centersToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>144, 22</value>\n  </data>\n  <data name=\"centersToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>По центру</value>\n  </data>\n  <data name=\"rightsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>144, 22</value>\n  </data>\n  <data name=\"rightsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Справа</value>\n  </data>\n  <data name=\"toolStripSeparator10.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>141, 6</value>\n  </data>\n  <data name=\"topsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>144, 22</value>\n  </data>\n  <data name=\"topsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Сверху</value>\n  </data>\n  <data name=\"middlesToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>144, 22</value>\n  </data>\n  <data name=\"middlesToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>По середине</value>\n  </data>\n  <data name=\"bottomsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>144, 22</value>\n  </data>\n  <data name=\"bottomsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Снизу</value>\n  </data>\n  <data name=\"sizeToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"sizeToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Размер</value>\n  </data>\n  <data name=\"widthToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>171, 22</value>\n  </data>\n  <data name=\"widthToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Ширина</value>\n  </data>\n  <data name=\"heightToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>171, 22</value>\n  </data>\n  <data name=\"heightToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Высота</value>\n  </data>\n  <data name=\"bothToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>171, 22</value>\n  </data>\n  <data name=\"bothToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Ширина и высота</value>\n  </data>\n  <data name=\"horizontalSpacingToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"horizontalSpacingToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Горизонтальной интервал</value>\n  </data>\n  <data name=\"makeEqualToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>165, 22</value>\n  </data>\n  <data name=\"makeEqualToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Сделать равным</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>165, 22</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Увеличить</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>165, 22</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Уменьшить</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>165, 22</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Пустой</value>\n  </data>\n  <data name=\"verticalSpacingToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"verticalSpacingToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Вертикальный интервал</value>\n  </data>\n  <data name=\"makeEqualToolStripMenuItem1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>165, 22</value>\n  </data>\n  <data name=\"makeEqualToolStripMenuItem1.Text\" xml:space=\"preserve\">\n    <value>Сделать равным</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>165, 22</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem1.Text\" xml:space=\"preserve\">\n    <value>Увеличить</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>165, 22</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem1.Text\" xml:space=\"preserve\">\n    <value>Уменьшить</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>165, 22</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem1.Text\" xml:space=\"preserve\">\n    <value>Пустой</value>\n  </data>\n  <data name=\"toolStripSeparator11.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 6</value>\n  </data>\n  <data name=\"paddingLeftToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"paddingLeftToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Отступ слева</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>138, 22</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem2.Text\" xml:space=\"preserve\">\n    <value>Увеличить</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>138, 22</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem2.Text\" xml:space=\"preserve\">\n    <value>Уменьшить</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>138, 22</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem2.Text\" xml:space=\"preserve\">\n    <value>Пустой</value>\n  </data>\n  <data name=\"paddingRightToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"paddingRightToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Отступ справа</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>138, 22</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem3.Text\" xml:space=\"preserve\">\n    <value>Увеличить</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>138, 22</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem3.Text\" xml:space=\"preserve\">\n    <value>Уменьшить</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>138, 22</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem3.Text\" xml:space=\"preserve\">\n    <value>Пустой</value>\n  </data>\n  <data name=\"paddintTopToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"paddintTopToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Отступ сверху</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>138, 22</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem4.Text\" xml:space=\"preserve\">\n    <value>Увеличить</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>138, 22</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem4.Text\" xml:space=\"preserve\">\n    <value>Уменьшить</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>138, 22</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem4.Text\" xml:space=\"preserve\">\n    <value>Пустой</value>\n  </data>\n  <data name=\"paddingBottomToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"paddingBottomToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Отступ снизу</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>138, 22</value>\n  </data>\n  <data name=\"increaseToolStripMenuItem5.Text\" xml:space=\"preserve\">\n    <value>Увеличить</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>138, 22</value>\n  </data>\n  <data name=\"decreaseToolStripMenuItem5.Text\" xml:space=\"preserve\">\n    <value>Уменьшить</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>138, 22</value>\n  </data>\n  <data name=\"zeroToolStripMenuItem5.Text\" xml:space=\"preserve\">\n    <value>Пустой</value>\n  </data>\n  <data name=\"validateRDLToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>182, 22</value>\n  </data>\n  <data name=\"validateRDLToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Проверить RDL-код</value>\n  </data>\n  <data name=\"toolStripSeparator12.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>179, 6</value>\n  </data>\n  <data name=\"startDesktopServerToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>182, 22</value>\n  </data>\n  <data name=\"startDesktopServerToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Запустить сервер</value>\n  </data>\n  <data name=\"toolStripSeparator13.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>179, 6</value>\n  </data>\n  <data name=\"optionsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>182, 22</value>\n  </data>\n  <data name=\"optionsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Настройки</value>\n  </data>\n  <data name=\"cascadeToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>218, 22</value>\n  </data>\n  <data name=\"cascadeToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Каскад</value>\n  </data>\n  <data name=\"tileToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>218, 22</value>\n  </data>\n  <data name=\"tileToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Плитка</value>\n  </data>\n  <data name=\"horizontalToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>236, 22</value>\n  </data>\n  <data name=\"horizontalToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>По горизонтали</value>\n  </data>\n  <data name=\"verticallyToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>236, 22</value>\n  </data>\n  <data name=\"verticallyToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>По вертикали</value>\n  </data>\n  <data name=\"closeAllToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>218, 22</value>\n  </data>\n  <data name=\"closeAllToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Закрыть все</value>\n  </data>\n  <data name=\"helpToolStripMenuItem1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>149, 22</value>\n  </data>\n  <data name=\"helpToolStripMenuItem1.Text\" xml:space=\"preserve\">\n    <value>Помощь</value>\n  </data>\n  <data name=\"supportToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>149, 22</value>\n  </data>\n  <data name=\"supportToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Поддержка</value>\n  </data>\n  <data name=\"aboutToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>149, 22</value>\n  </data>\n  <data name=\"aboutToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>О программе</value>\n  </data>\n  <data name=\"newToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Создать</value>\n  </data>\n  <data name=\"openToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Открыть</value>\n  </data>\n  <data name=\"saveToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Сохранить</value>\n  </data>\n  <data name=\"cutToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Вырезать</value>\n  </data>\n  <data name=\"copyToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Скопировать</value>\n  </data>\n  <data name=\"pasteToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Вставить</value>\n  </data>\n  <data name=\"undoToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"textboxToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABOSURBVDhP5YxRCgAgDEK9/6UXgcE2I6LtrwchThNWpGcA\n        wNXb0TOQOX3I/DLgvWTUgJScl4wayKXJusmdGmgf8F4yakBKzktGfaY4YDYA0LdC6GTV0nUAAAAASUVO\n        RK5CYII=\n</value>\n  </data>\n  <data name=\"textboxToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>113, 22</value>\n  </data>\n  <data name=\"textboxToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Текстовое поле</value>\n  </data>\n  <data name=\"chartToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>68, 22</value>\n  </data>\n  <data name=\"chartToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>График</value>\n  </data>\n  <data name=\"tableToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABLSURBVDhP7Y5BCgAgCAT9/6cNo5UtDNIuHRpYVj0Mil7S\n        BSJSyiTIEgpgRkB09+bF4JlZ71vBKbHAmgOC+//AajQvGR78oBIX1FFtqeUDKMm9WRgAAAAASUVORK5C\n        YII=\n</value>\n  </data>\n  <data name=\"tableToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>74, 22</value>\n  </data>\n  <data name=\"tableToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Таблица</value>\n  </data>\n  <data name=\"listToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABrSURBVDhPpZEBCoBACAT9/6cvhBtRucWrBhbbyinK1k9C\n        YGYRyL1fgyJQk9AztX1AC3iSmhstAF8gB2bBQAj6x7qlCPK85d3dB7SAN1FzowXgC+TALBgIQf8L+djp\n        HYogT4clwrlMba9Z6wH7k32tztsDcQAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"listToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>68, 22</value>\n  </data>\n  <data name=\"listToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Список</value>\n  </data>\n  <data name=\"imageToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>103, 22</value>\n  </data>\n  <data name=\"imageToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Изображение</value>\n  </data>\n  <data name=\"matrixToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABcSURBVDhPzY5RDoAwCEO5//l2H7RLauqGmbAPfUkD3ccb\n        5pt0gZmVchNkeSUY37UvBXhjnnqfWjKEAkwGtHMiurOHggyhAJMB/7hA+eYC/qg7CAUZJkEll6CO+wEV\n        wABNUS6u4wAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"matrixToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>76, 22</value>\n  </data>\n  <data name=\"matrixToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Матрица</value>\n  </data>\n  <data name=\"subreportToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABdSURBVDhP7Y5RDsAgCEO5/6VZalYCWuN0v76kEiopmP+k\n        BZjZUjMiYMVspgRwG0WUR0oAUEOAfv8/BHyhLGwPDdQsIvy4KDc76ADULCL8ewHKW3OzwxBwogg4x/0B\n        zrQYE6q0TO4AAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"subreportToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Подотчёт</value>\n  </data>\n  <data name=\"rectangleToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAuSURBVDhPY/hPIaCeAQwMDCRhGEAxgFgwasCoASCA0wBS\n        MAwQby0OMNAG/P8PAC/Ffqw7zhfAAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"rectangleToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>116, 22</value>\n  </data>\n  <data name=\"rectangleToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Прямоугольник</value>\n  </data>\n  <data name=\"lineToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABJSURBVDhP1Yy5DQAgDMSy/9JBLgN5RYFwe2eLXvJhQMQq\n        o8AuQzvgydAKRDKUgUyGdK1kCB8dGdxXV4bjOZHBvKcyzI2N1wHVBZfk3kzElYBzAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"lineToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>62, 22</value>\n  </data>\n  <data name=\"lineToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Линия</value>\n  </data>\n  <data name=\"ctlEditTextbox.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>250, 23</value>\n  </data>\n  <data name=\"boldToolStripButton1.ToolTipText\" xml:space=\"preserve\">\n    <value>Жирный</value>\n  </data>\n  <data name=\"italiacToolStripButton1.ToolTipText\" xml:space=\"preserve\">\n    <value>Курсив</value>\n  </data>\n  <data name=\"underlineToolStripButton2.ToolTipText\" xml:space=\"preserve\">\n    <value>Подчёркнутый</value>\n  </data>\n  <data name=\"leftAlignToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>Слева</value>\n  </data>\n  <data name=\"centerAlignToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>По центру</value>\n  </data>\n  <data name=\"rightAlignToolStripButton3.Text\" xml:space=\"preserve\">\n    <value>Справа</value>\n  </data>\n  <data name=\"fontToolStripComboBox1.ToolTipText\" xml:space=\"preserve\">\n    <value>Шрифт</value>\n  </data>\n  <data name=\"fontSizeToolStripComboBox1.ToolTipText\" xml:space=\"preserve\">\n    <value>Размер шрифта</value>\n  </data>\n  <data name=\"printToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>Печатать</value>\n  </data>\n  <data name=\"zoomToolStripComboBox1.ToolTipText\" xml:space=\"preserve\">\n    <value>Масштаб</value>\n  </data>\n  <data name=\"selectToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAuSURBVDhPY/hPIcBrAAMDAxjjA6MGUMsAmEJSMfUMwAWQ\n        FeICowbQ2gDC4P9/AFoiYMp9UrIYAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"selectToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>Выбор</value>\n  </data>\n  <data name=\"pdfToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABIAAAAQCAYAAAAbBi9cAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABaSURBVDhP3ZPbCQAgDAOdx/1HcZ9KxEKQKj4qiAdRm9D8\n        GcSJB4tCTMJSej5osyIcjM49H7QZmC4Cw2y3iFU8ywT8VtQzM8sE14p4Xi5iMdbOz1+k3sc4FYlkjsIT\n        8WJzcpcAAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"htmlToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABYSURBVDhPY/hPJzAMLWLQugJlIgBMDESjY5g4NoBPHq9F\n        MICNj08MXQ4E6GsRNowMcPEJ0ciAbB8RQyODoWERCGBjo6sHAZpZhIHBMnQAoxaRDehk0f//APc76hR2\n        Y9y2AAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"excelToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABUAAAAQCAYAAAD52jQlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABgSURBVDhP7ZFRCgAgCEM7T/c/SvcxCgdjlB9SH0EPpHRr\n        IBW7wEOhpTYbBbhXTYGuvnSoatzP9TFgYaA9E2p+Lk3hQ9dWnnQogIe96fUV9t75qFD0uxbYzv08yg89\n        jVkHIj6jSQaaleYAAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"XmlToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABaSURBVDhPY/hPZTAEDGTQugJlIgBMDJscCOCTB7sQWQKd\n        ja4JWQxdDgRoYyAI4NJMDI0MaGMgsgQ2NiEaGRBlIAhgYyOLwQDRyQYbG0RjYLAMFcGogZSC//8BGteL\n        dcZuF4EAAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"MhtToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABUAAAAQCAYAAAD52jQlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABnSURBVDhP7YxRCsAwCEN7nt3/KLuPw1IhTbLtp/0Y7IFo\n        oqbFBj4U2o5zjDPluz3uuLqPopgOaJe4e2RfaB8euitEdBlvHWFP9F0Id4Q90Wi4mR8SCWHtgpKa+SGR\n        ENajL+UPXU3EBVw8wzkRFW5BAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"CsvToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABUAAAAQCAYAAAD52jQlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABoSURBVDhP7ZJRCsAgDEN7nt3/KLtPR2SR0Fkp4j4Ge+DU\n        Jr6vmb/AB6V2nH0pOtcs9kjr8aDwPno4ywDmloVgloGY8z6VAuRZZ1lKMnkXSVaWktgfStunUCSV2fIv\n        pTze3PtWfulu3C97Gt8rXJb7sAAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"RtfToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABLSURBVDhPY/hPZTAEDGRguAIkUDEMYJODYdzyQAIdUCZG\n        CwPRMTaATRybPhQXIrPRATY57GJogrgMHTwGggBFYlCaamDUQErB//8A1OuNEoRaw2QAAAAASUVORK5C\n        YII=\n</value>\n  </data>\n  <data name=\"TifToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABUAAAAQCAYAAAD52jQlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAA/SURBVDhPY/hPAzDEDGXQuoKBkQE6HwTQ1SOrQXEpsgQy\n        wCaOSy0IDD5DkTEyGCHexwVobyi1wKih1Ab//wMAw/n1IMf7Fj0AAAAASUVORK5CYII=\n</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label1.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 13</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Цвет текста:</value>\n  </data>\n  <data name=\"label2.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>226, 15</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 13</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Цвет фона:</value>\n  </data>\n  <data name=\"foreColorPicker1.Items9940\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items9941\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>82, 12</value>\n  </data>\n  <data name=\"backColorPicker1.Items10080\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items10081\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"backColorPicker1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>296, 12</value>\n  </data>\n  <data name=\"statusSelected.ToolTipText\" xml:space=\"preserve\">\n    <value>Название выбранного отчёта</value>\n  </data>\n  <data name=\"statusPosition.ToolTipText\" xml:space=\"preserve\">\n    <value>Позиция выбранного отчёта</value>\n  </data>\n  <data name=\"mainSP.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"ContextMenuTB.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>213, 70</value>\n  </data>\n  <data name=\"MenuTBClose.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>212, 22</value>\n  </data>\n  <data name=\"MenuTBClose.Text\" xml:space=\"preserve\">\n    <value>Закрыть</value>\n  </data>\n  <data name=\"MenuTBSave.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>212, 22</value>\n  </data>\n  <data name=\"MenuTBSave.Text\" xml:space=\"preserve\">\n    <value>Сохранить</value>\n  </data>\n  <data name=\"MenuTBCloseAllButThis.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>212, 22</value>\n  </data>\n  <data name=\"MenuTBCloseAllButThis.Text\" xml:space=\"preserve\">\n    <value>Закрыть все кроме этого</value>\n  </data>\n  <data name=\"$this.Icon\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        AAABAAIAICAQAAAAAADoAgAAJgAAABAQEAAAAAAAKAEAAA4DAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC\n        AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/\n        AAAA//8A/wAAAP8A/wD//wAA////AP//////////////////////////////////////////////////\n        ////////////////AAAAAAAAAAAAAAAAD////wAAAAAAAAAAAAAAAA////8A//////////////AP////\n        AP/////////////wD////wD/mZmZn/mZzMER8A////8A/5mZmZ/5mczBEfAP////AP//////+ZnMwRHw\n        D////wD///////mZzMER8A////8A/5mZmZ/5mczBEfAP////AP+ZmZmf+ZnMwRHwD////wD///////mZ\n        zM//8A////8A/5mZmZ/5mczP//AP////AP+ZmZmf+ZnMz//wD////wD///////mZzM//8A////8A////\n        ///5mf////AP////AP+ZmZmf+Zn////wD////wD/mZmZn/mZ////8A//u7u7u7u7u7////////AP////\n        /wAPu7u////////wD///AAD7u/u/v///////8A//AP+7vwuwuw//AAAAD/AP//+7AACwCwsP/wAAAA/w\n        D/+7///7D7C/////////8A////APsPvwv/////////AP//AP+wC/D7AAAAAAAAAAD/8P+7D78PsAAAAA\n        AAAAAA///78P+w/7//////////////vw/78Pv/////////////+/D/vw/7//////////////AAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA\n        AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AP//////////8AAAAAAA\n        AA/w////////D/D5mZ/5/C8P8P////n8Lw/w+Zmf+fwvD/D////5/C8P8PmZn/n8/w/w///7uf//D7u7\n        u7u5//8P8Au/u////w8LsLu7/w//D78LC7vwAA8P8L8LC////w8L8LCwAAAAD78LD7//////AAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\n</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Редактор отчётов</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/RdlDesignerSavedFileEvent.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    public delegate void RdlDesignerSavedFileEventHandler(object sender, RdlDesignerSavedFileEvent e);\n\n    public class RdlDesignerSavedFileEvent : System.EventArgs\n    {\n        private Uri _filePath;\n\n        public RdlDesignerSavedFileEvent(Uri filePath)\n        {\n            _filePath = filePath;\n        }\n\n        public Uri FilePath\n        {\n            get { return _filePath; }\n        }\n\n    }\n}\n"
  },
  {
    "path": "RdlDesign/RdlEditPreview.cs",
    "content": "\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlDesign.Resources;\nusing Majorsilence.Reporting.RdlDesign.Syntax;\nusing Majorsilence.Reporting.RdlViewer;\nusing ScintillaNET;\nusing System;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Drawing.Printing;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// Summary description for RdlEditPreview.\n    /// </summary>\n    internal class RdlEditPreview : System.Windows.Forms.UserControl\n\t{\n\t\tprivate System.Windows.Forms.TabControl tcEHP;\n\t\tprivate System.Windows.Forms.TabPage tpEditor;\n\t\tprivate System.Windows.Forms.TabPage tpBrowser;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n\t\tprivate Majorsilence.Reporting.RdlViewer.RdlViewer rdlPreview;\n\t\tprivate System.Windows.Forms.TabPage tpDesign;\n\t\tprivate DesignCtl dcDesign;\n\n\t\tpublic FindTab FindTab;\n\t\n\t\tpublic delegate void RdlChangeHandler(object sender, EventArgs e);\n\t\tpublic event RdlChangeHandler OnRdlChanged;\n\t\tpublic event DesignCtl.HeightEventHandler OnHeightChanged;\n        public event RdlChangeHandler OnSelectionChanged;\n        public event RdlChangeHandler OnSelectionMoved;\n\t\tpublic event RdlChangeHandler OnReportItemInserted;\n\t\tpublic event RdlChangeHandler OnDesignTabChanged;\n        public event RdlChangeHandler SaveRequested;\n\t\tpublic event DesignCtl.OpenSubreportEventHandler OnOpenSubreport; \n\n\t\t// When toggling between the items we need to track who has latest changes\n\t\tDesignTabs _DesignChanged;\t\t\t// last designer that triggered change\n\t\tDesignTabs _CurrentTab = DesignTabs.Design;\n        public DesignRuler dcTopRuler;\n\t\tpublic DesignRuler dcLeftRuler;\n\n\t\tprivate Scintilla scintilla1;\t\t\t\t// file position; for use with search\n\t\tprivate bool noFireRDLTextChanged;\n\n\t\t// Indicators 0-7 could be in use by a lexer\n\t\t// so we'll use indicator 8 to highlight words.\n\t\tconst int SEARCH_INDICATOR_NUM = 8;\n\n\t\tpublic RdlEditPreview()\n\t\t{\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\trdlPreview.Zoom=1;\t\t\t\t// force default zoom to 1\n\t\t\t// initialize the design tab\n            dcTopRuler = new DesignRuler();\n            dcLeftRuler = new DesignRuler();\n            dcLeftRuler.Vertical = true;    // need to set before setting  Design property\n            dcDesign = new DesignCtl();\n            dcTopRuler.Design = dcDesign;   // associate rulers with design ctl\n            dcLeftRuler.Design = dcDesign;\n\n            tpDesign.Controls.Add(dcTopRuler);\n            tpDesign.Controls.Add(dcLeftRuler);\n            tpDesign.Controls.Add(dcDesign);\n\n            // Top ruler\n            dcTopRuler.Height = 14;\n            dcTopRuler.Width = tpDesign.Width;\n            dcTopRuler.Dock = DockStyle.Top;\n            dcTopRuler.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;\n            dcTopRuler.Enabled = false;\n\n            // Left ruler\n            dcLeftRuler.Width = 14;\n            dcLeftRuler.Height = tpDesign.Height;\n            dcLeftRuler.Dock = DockStyle.Left;\n            dcLeftRuler.Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Top;\n            dcLeftRuler.Enabled = false;\n\n            dcTopRuler.Offset = dcLeftRuler.Width;\n            dcLeftRuler.Offset = dcTopRuler.Height;\n\n           // dcDesign.Dock = System.Windows.Forms.DockStyle.Bottom;\n            dcDesign.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right;\n\t\t\tdcDesign.Location = new System.Drawing.Point(dcLeftRuler.Width, dcTopRuler.Height);\n\t\t\tdcDesign.Name = \"dcDesign\";\n\t\t\tdcDesign.Size = new System.Drawing.Size(tpDesign.Width-dcLeftRuler.Width, tpDesign.Height-dcTopRuler.Height);\n\t\t\tdcDesign.TabIndex = 0;\n\t\t\tdcDesign.ReportChanged += new System.EventHandler(dcDesign_ReportChanged);\n            dcDesign.HeightChanged += new DesignCtl.HeightEventHandler(dcDesign_HeightChanged);\n            dcDesign.SelectionChanged += new System.EventHandler(dcDesign_SelectionChanged);\n\t\t\tdcDesign.SelectionMoved += new System.EventHandler(dcDesign_SelectionMoved);\n\t\t\tdcDesign.ReportItemInserted += new System.EventHandler(dcDesign_ReportItemInserted);\n\t\t\tdcDesign.OpenSubreport += new DesignCtl.OpenSubreportEventHandler(dcDesign_OpenSubreport);\n\n            //ScintillaNET Init\n            ScintillaXMLStyle.ConfigureScintillaStyle(scintilla1);\n\t\t\tscintilla1.SetSavePoint();\n            scintilla1.KeyDown += new KeyEventHandler(scintilla1_KeyDown);\n        }\n\n        void scintilla1_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.Control && e.KeyCode == Keys.S)\n            {\n                e.SuppressKeyPress = true;\n                SaveRequested?.Invoke(this, e);\n            }\n        }\n\n        void scintilla1_TextChanged(object sender, EventArgs e)\n\t\t{\n\t\t\t_DesignChanged = DesignTabs.Edit;\n\t\t\tif (noFireRDLTextChanged)\n\t\t\t\treturn;\n\n\t\t\tif (OnRdlChanged != null)\n\t\t\t{\n\t\t\t\tOnRdlChanged(this, e);\n\t\t\t}\n\t\t}\n \n\t\tinternal DesignCtl DesignCtl\n\t\t{\n\t\t\tget {return dcDesign;}\n\t\t}\n\n        internal RdlViewer.RdlViewer PreviewCtl\n        {\n            get { return rdlPreview; }\n        }\n \n\t\tinternal DesignXmlDraw DrawCtl\n\t\t{\n\t\t\tget {return dcDesign.DrawCtl;}\n\t\t}\n\n\t\tpublic XmlDocument ReportDocument\n\t\t{\n\t\t\tget {return dcDesign.ReportDocument;}\n\t\t}\n        \n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tinternal DesignTabs DesignTab\n\t\t{\n\t\t\tget {return _CurrentTab;}\n\t\t\tset \n\t\t\t{\n\t\t\t\ttcEHP.SelectedIndex = (int)value;\t\t\t\t\n\t\t\t}\n\t\t}\n \t\t\n\t\tinternal void SetFocus()\n\t\t{\n\t\t\tswitch (_CurrentTab)\n\t\t\t{\n\t\t\t\tcase DesignTabs.Edit:\n\t\t\t\t\tscintilla1.Focus();\n\t\t\t\t\tbreak;\n\t\t\t\tcase DesignTabs.Preview:\n\t\t\t\t\trdlPreview.Focus();\n\t\t\t\t\tbreak;\n\t\t\t\tcase DesignTabs.Design:\n\t\t\t\t\tdcDesign.SetFocus();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n        internal void ShowEditLines(bool bShow)\n        {\n\t\t\tscintilla1.Margins[0].Width = bShow ? 40 : 0;\n        }\n\n        internal void ShowPreviewWaitDialog(bool bShow)\n        {\n            rdlPreview.ShowWaitDialog = bShow;\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        internal bool ShowReportItemOutline\n        {\n            get {return dcDesign.ShowReportItemOutline;}\n            set {dcDesign.ShowReportItemOutline = value;}\n        }\n\n\t\toverride public string Text\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_CurrentTab == DesignTabs.Design)\n\t\t\t\t\treturn dcDesign.ReportSource;\n\t\t\t\telse \n\t\t\t\t\treturn scintilla1.Text;\n\t\t\t}\n\t\t\tset \n\t\t\t{\n\t\t\t\tif (_CurrentTab == DesignTabs.Edit)\n\t\t\t\t\tSetTextToScintilla(value);\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tdcDesign.ReportSource = value;\n\t\t\t\t}\n\t\t\t\tif (_CurrentTab == DesignTabs.Preview)\n\t\t\t\t{\n\t\t\t\t\t_CurrentTab = DesignTabs.Design;\n\t\t\t\t\ttcEHP.SelectedIndex = 0;\t// Force current tab to design\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic StyleInfo SelectedStyle\n\t\t{\n\t\t\tget {return dcDesign.SelectedStyle;}\n\t\t}\n\t\t\n\t\tpublic string SelectionName\n\t\t{\n\t\t\tget {return dcDesign.SelectionName;}\n\t\t}\n\t\t\n\t\tpublic PointF SelectionPosition\n\t\t{\n\t\t\tget {return dcDesign.SelectionPosition;}\n\t\t}\n\t\t\n\t\tpublic SizeF SelectionSize\n\t\t{\n\t\t\tget {return dcDesign.SelectionSize;}\n\t\t}\n\n\t\tpublic void ApplyStyleToSelected(string name, string v)\n\t\t{\n\t\t\tif (_CurrentTab == DesignTabs.Design)\n\t\t\t\tdcDesign.ApplyStyleToSelected(name, v);\n\t\t}\n\n\t\tpublic void SetSelectedText(string v)\n\t\t{\n\t\t\tif (_CurrentTab == DesignTabs.Design)\n\t\t\t\tdcDesign.SetSelectedText(v);\n\t\t}\n\n\t\tpublic bool CanEdit\n\t\t{\n\t\t\tget \n\t\t\t{ \n\t\t\t\treturn _CurrentTab != DesignTabs.Preview;\n\t\t\t}\n\t\t}\n\n\t\tprivate bool modified = false;\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tpublic bool Modified\n\t\t{\n\t\t\tget \n\t\t\t{ \n\t\t\t\treturn modified || scintilla1.Modified;\n\t\t\t}\n\t\t\tset \n\t\t\t{ \n\t\t\t\t_DesignChanged = _CurrentTab;\n\t\t\t\tmodified = value;\n\t\t\t\tif (value == false)\n\t\t\t\t\tscintilla1.SetSavePoint();\n\t\t\t}\n\t\t}\n\n\t\tpublic string UndoDescription\n\t\t{\n\t\t\tget \n\t\t\t{ \n\t\t\t\treturn _CurrentTab == DesignTabs.Design? dcDesign.UndoDescription: \"\";\n\t\t\t}\n\t\t}\n\n\t\tpublic void StartUndoGroup(string description)\n\t\t{\n\t\t\tif (_CurrentTab == DesignTabs.Design)\n\t\t\t\tdcDesign.StartUndoGroup(description);\n\t\t}\n\n\t\tpublic void EndUndoGroup(bool keepChanges)\n\t\t{\n\t\t\tif (_CurrentTab == DesignTabs.Design)\n\t\t\t\tdcDesign.EndUndoGroup(keepChanges);\n\t\t}\n\n\t\tpublic bool CanUndo\n\t\t{\n\t\t\tget \n\t\t\t{ \n\t\t\t\tswitch (_CurrentTab)\n\t\t\t\t{\n\t\t\t\t\tcase DesignTabs.Design:\n\t\t\t\t\t\treturn dcDesign.CanUndo;\n\t\t\t\t\tcase DesignTabs.Edit:\n\t\t\t\t\t\treturn scintilla1.CanUndo;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic bool CanRedo\n\t\t{\n\t\t\tget \n\t\t\t{ \n\t\t\t\tswitch (_CurrentTab)\n\t\t\t\t{\n\t\t\t\t\tcase DesignTabs.Design:\n\t\t\t\t\t\treturn dcDesign.CanUndo;\n\t\t\t\t\tcase DesignTabs.Edit:\n\t\t\t\t\t\treturn scintilla1.CanRedo;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic int SelectionLength\n\t\t{\n\t\t\tget \n\t\t\t{ \n\t\t\t\tswitch (_CurrentTab)\n\t\t\t\t{\n\t\t\t\t\tcase DesignTabs.Design:\n\t\t\t\t\t\treturn dcDesign.SelectionCount;\n\t\t\t\t\tcase DesignTabs.Edit:\n\t\t\t\t\t\treturn scintilla1.SelectedText.Length;\n                    case DesignTabs.Preview:\n                        return rdlPreview.CanCopy ? 1 : 0;\n                    default:\n\t\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tpublic string SelectedText\n\t\t{\n\t\t\tget \n\t\t\t{ \n\t\t\t\tswitch (_CurrentTab)\n\t\t\t\t{\n\t\t\t\t\tcase DesignTabs.Design:\n\t\t\t\t\t\treturn dcDesign.SelectedText;\n\t\t\t\t\tcase DesignTabs.Edit:\n\t\t\t\t\t\treturn scintilla1.SelectedText;\n                    case DesignTabs.Preview:\n                        return rdlPreview.SelectText;\n                    default:\n\t\t\t\t\t\treturn \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tset \n\t\t\t{\n\t\t\t\tif (_CurrentTab == DesignTabs.Edit && String.IsNullOrWhiteSpace(value))\n\t\t\t\t\tscintilla1.ClearSelections();\n\t\t\t\telse if (_CurrentTab == DesignTabs.Design && value.Length == 0)\n\t\t\t\t\tdcDesign.Delete();\n\t\t\t}\n\t\t}\n\n\t\tpublic void CleanUp()\n\t\t{\n\t\t}\n\n\t\tpublic void ClearUndo()\n\t\t{\n\t\t\tswitch (_CurrentTab)\n\t\t\t{\n\t\t\t\tcase DesignTabs.Design:\n\t\t\t\t\tdcDesign.ClearUndo();\n\t\t\t\t\tbreak;\n\t\t\t\tcase DesignTabs.Edit:\n\t\t\t\t\tscintilla1.EmptyUndoBuffer();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tpublic void Undo()\n\t\t{\n\t\t\tswitch (_CurrentTab)\n\t\t\t{\n\t\t\t\tcase DesignTabs.Design:\n\t\t\t\t\tdcDesign.Undo();\n\t\t\t\t\tbreak;\n\t\t\t\tcase DesignTabs.Edit:\n\t\t\t\t\tscintilla1.Undo();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tpublic void Redo()\n\t\t{\n\t\t\tswitch (_CurrentTab)\n\t\t\t{\n\t\t\t\tcase DesignTabs.Design:\n\t\t\t\t\tdcDesign.Redo();\n\t\t\t\t\tbreak;\n\t\t\t\tcase DesignTabs.Edit:\n\t\t\t\t\tscintilla1.Redo();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tpublic void Cut()\n\t\t{\n\t\t\tswitch (_CurrentTab)\n\t\t\t{\n\t\t\t\tcase DesignTabs.Design:\n\t\t\t\t\tdcDesign.Cut();\n\t\t\t\t\tbreak;\n\t\t\t\tcase DesignTabs.Edit:\n\t\t\t\t\tscintilla1.Cut();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tpublic void Copy()\n\t\t{\n\t\t\tswitch (_CurrentTab)\n\t\t\t{\n\t\t\t\tcase DesignTabs.Design:\n\t\t\t\t\tdcDesign.Copy();\n\t\t\t\t\tbreak;\n\t\t\t\tcase DesignTabs.Edit:\n\t\t\t\t\tscintilla1.Copy();\n\t\t\t\t\tbreak;\n                case DesignTabs.Preview:\n                    rdlPreview.Copy();\n                    break;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tpublic void Clear()\n\t\t{\n\t\t\tswitch (_CurrentTab)\n\t\t\t{\n\t\t\t\tcase DesignTabs.Design:\n\t\t\t\t\tdcDesign.Clear();\n\t\t\t\t\tbreak;\n\t\t\t\tcase DesignTabs.Edit:\n\t\t\t\t\tscintilla1.Clear();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic void Paste()\n\t\t{\n\t\t\tswitch (_CurrentTab)\n\t\t\t{\n\t\t\t\tcase DesignTabs.Design:\n\t\t\t\t\tdcDesign.Paste();\n\t\t\t\t\tbreak;\n\t\t\t\tcase DesignTabs.Edit:\n\t\t\t\t\tscintilla1.Paste();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tpublic void SelectAll()\n\t\t{\n\t\t\tswitch (_CurrentTab)\n\t\t\t{\n\t\t\t\tcase DesignTabs.Design:\n\t\t\t\t\tdcDesign.SelectAll();\n\t\t\t\t\tbreak;\n\t\t\t\tcase DesignTabs.Edit:\n\t\t\t\t\tscintilla1.SelectAll();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tpublic string CurrentInsert\n\t\t{\n\t\t\tget {return dcDesign.CurrentInsert; }\n\t\t\tset \n\t\t\t{\n\t\t\t\tdcDesign.CurrentInsert = value;\n\t\t\t}\n\t\t}\n\n\t\tpublic int CurrentLine\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\treturn scintilla1.CurrentLine + 1;\n\t\t\t}\n\t\t}\n\n\t\tpublic int CurrentCh\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\treturn scintilla1.GetColumn(scintilla1.CurrentPosition);\n\t\t\t}\n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public bool SelectionTool\n        {\n            get\n            {\n                if (_CurrentTab == DesignTabs.Preview)\n                {\n                    return rdlPreview.SelectTool;\n                }\n                else\n                    return false;\n            }\n            set\n            {\n                if (_CurrentTab == DesignTabs.Preview)\n                {\n                    rdlPreview.SelectTool = value;\n                }\n            }\n        }\n\t\t/// <summary>\n\t\t/// Zoom \n\t\t/// </summary>\n\t\t[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tpublic float Zoom\n\t\t{\n\t\t\tget {return this.rdlPreview.Zoom;}\n\t\t\tset {this.rdlPreview.Zoom = value;}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// ZoomMode \n\t\t/// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tpublic ZoomEnum ZoomMode\n\t\t{\n\t\t\tget {return this.rdlPreview.ZoomMode;}\n\t\t\tset {this.rdlPreview.ZoomMode = value;}\n\t\t}\n\n\t\tpublic void FindNext(Control ctl, string str, bool matchCase, bool revertSearch, bool showEndMsg = true)\n\t\t{\n\t\t\tif (_CurrentTab != DesignTabs.Edit)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tscintilla1.SearchFlags = matchCase ? SearchFlags.MatchCase : SearchFlags.None;\n\t\t\tHighlightWord(str);\n\t\t\tif (revertSearch)\n\t\t\t{\n\t\t\t\tscintilla1.TargetStart = scintilla1.SelectionStart;\n\t\t\t\tscintilla1.TargetEnd = 0;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tscintilla1.TargetStart = scintilla1.SelectionEnd;\n\t\t\t\tscintilla1.TargetEnd = scintilla1.TextLength;\n\t\t\t}\n\t\t\tvar pos = scintilla1.SearchInTarget(str);\n\t\t\tif (pos == -1)\n\t\t\t{\n\t\t\t\tif (showEndMsg)\n\t\t\t\t\tMessageBox.Show(ctl, Strings.RdlEditPreview_ShowI_ReachedEndDocument);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tscintilla1.GotoPosition(pos);\n\t\t\t\tscintilla1.SelectionStart = scintilla1.TargetStart;\n\t\t\t\tscintilla1.SelectionEnd = scintilla1.TargetEnd;\n\t\t\t}\n\t\t}\n\n\t\tprivate void HighlightWord(string text)\n\t\t{\n\t\t\t// Remove all uses of our indicator\n\t\t\tscintilla1.IndicatorCurrent = SEARCH_INDICATOR_NUM;\n\t\t\tscintilla1.IndicatorClearRange(0, scintilla1.TextLength);\n\n\t\t\t// Update indicator appearance\n\t\t\tscintilla1.Indicators[SEARCH_INDICATOR_NUM].Style = IndicatorStyle.StraightBox;\n\t\t\tscintilla1.Indicators[SEARCH_INDICATOR_NUM].Under = true;\n\t\t\tscintilla1.Indicators[SEARCH_INDICATOR_NUM].ForeColor = Color.Orange;\n\t\t\tscintilla1.Indicators[SEARCH_INDICATOR_NUM].OutlineAlpha = 50;\n\t\t\tscintilla1.Indicators[SEARCH_INDICATOR_NUM].Alpha = 30;\n\n\t\t\t// Search the document\n\t\t\tscintilla1.TargetStart = 0;\n\t\t\tscintilla1.TargetEnd = scintilla1.TextLength;\n\t\t\twhile (scintilla1.SearchInTarget(text) != -1)\n\t\t\t{\n\t\t\t\t// Mark the search results with the current indicator\n\t\t\t\tscintilla1.IndicatorFillRange(scintilla1.TargetStart, scintilla1.TargetEnd - scintilla1.TargetStart);\n\n\t\t\t\t// Search the remainder of the document\n\t\t\t\tscintilla1.TargetStart = scintilla1.TargetEnd;\n\t\t\t\tscintilla1.TargetEnd = scintilla1.TextLength;\n\t\t\t}\n\t\t}\n\n\t\tpublic void ClearSearchHighlight()\n\t\t{\n\t\t\tscintilla1.IndicatorCurrent = SEARCH_INDICATOR_NUM;\n\t\t\tscintilla1.IndicatorClearRange(0, scintilla1.TextLength);\n\t\t\tFindTab = null;\n\t\t}\n\n\t\tpublic void ReplaceNext(Control ctl, string str, string strReplace, bool matchCase)\n\t\t{\n\t\t\tif (_CurrentTab != DesignTabs.Edit)\n\t\t\t\treturn;\n\n\t\t\tif (String.Compare(scintilla1.SelectedText, str, !matchCase) == 0)\n\t\t\t{\n\t\t\t\tscintilla1.ReplaceSelection(strReplace);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tFindNext(ctl, str, matchCase, false);\n\t\t\t\tif (String.Compare(scintilla1.SelectedText, str, !matchCase) == 0)\n\t\t\t\t\tscintilla1.ReplaceSelection(strReplace);\n\t\t\t}\n\t\t}\n\n\t\tpublic void ReplaceAll(Control ctl, string str, string strReplace, bool matchCase)\n\t\t{\t\t\t\n\t\t\tif (_CurrentTab != DesignTabs.Edit)\n\t\t\t\treturn;\n\n\t\t\tscintilla1.TargetStart = 0;\n\t\t\tscintilla1.TargetEnd = scintilla1.TextLength;\n\t\t\tscintilla1.SearchFlags = matchCase ? SearchFlags.MatchCase : SearchFlags.None;\n\t\t\twhile (scintilla1.SearchInTarget(str) != -1)\n\t\t\t{\n\t\t\t\tscintilla1.ReplaceTarget(strReplace);\n\n\t\t\t\t// Search the remainder of the document\n\t\t\t\tscintilla1.TargetStart = scintilla1.TargetEnd;\n\t\t\t\tscintilla1.TargetEnd = scintilla1.TextLength;\n\t\t\t}\n\t\t}\n\n\t\tpublic void Goto(Control ctl, int nLine)\n\t\t{\n\t\t\tif (_CurrentTab != DesignTabs.Edit)\n\t\t\t\treturn;\n\n\t\t\tif(nLine > scintilla1.Lines.Count)\n\t\t\t\tnLine = scintilla1.Lines.Count;\n\t\t\tscintilla1.Lines[nLine-1].Goto();\n\t\t\tscintilla1.SelectionStart = scintilla1.Lines[nLine - 1].Position;\n\t\t\tscintilla1.SelectionEnd = scintilla1.Lines[nLine - 1].EndPosition;\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RdlEditPreview));\n            this.DoubleBuffered = true;\n            this.tcEHP = new System.Windows.Forms.TabControl();\n\t\t\tthis.tpDesign = new System.Windows.Forms.TabPage();\n\t\t\tthis.tpEditor = new System.Windows.Forms.TabPage();\n\t\t\tthis.scintilla1 = new ScintillaNET.Scintilla();\n\t\t\tthis.tpBrowser = new System.Windows.Forms.TabPage();\n\t\t\tthis.rdlPreview = new Majorsilence.Reporting.RdlViewer.RdlViewer();\n\t\t\tthis.tcEHP.SuspendLayout();\n\t\t\tthis.tpEditor.SuspendLayout();\n\t\t\tthis.tpBrowser.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// tcEHP\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tcEHP, \"tcEHP\");\n\t\t\tthis.tcEHP.Controls.Add(this.tpDesign);\n\t\t\tthis.tcEHP.Controls.Add(this.tpEditor);\n\t\t\tthis.tcEHP.Controls.Add(this.tpBrowser);\n\t\t\tthis.tcEHP.Name = \"tcEHP\";\n\t\t\tthis.tcEHP.SelectedIndex = 0;\n\t\t\tthis.tcEHP.SelectedIndexChanged += new System.EventHandler(this.tcEHP_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// tpDesign\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tpDesign, \"tpDesign\");\n\t\t\tthis.tpDesign.Name = \"tpDesign\";\n\t\t\tthis.tpDesign.Tag = \"design\";\n\t\t\t// \n\t\t\t// tpEditor\n\t\t\t// \n\t\t\tthis.tpEditor.Controls.Add(this.scintilla1);\n\t\t\tresources.ApplyResources(this.tpEditor, \"tpEditor\");\n\t\t\tthis.tpEditor.Name = \"tpEditor\";\n\t\t\tthis.tpEditor.Tag = \"edit\";\n\t\t\t// \n\t\t\t// scintilla1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.scintilla1, \"scintilla1\");\n\t\t\tthis.scintilla1.Lexer = ScintillaNET.Lexer.Xml;\n\t\t\tthis.scintilla1.Name = \"scintilla1\";\n\t\t\tthis.scintilla1.UseTabs = false;\n\t\t\tthis.scintilla1.UpdateUI += new System.EventHandler<ScintillaNET.UpdateUIEventArgs>(this.scintilla1_UpdateUI);\n\t\t\tthis.scintilla1.TextChanged += new System.EventHandler(this.scintilla1_TextChanged);\n\t\t\t// \n\t\t\t// tpBrowser\n\t\t\t// \n\t\t\tthis.tpBrowser.Controls.Add(this.rdlPreview);\n\t\t\tresources.ApplyResources(this.tpBrowser, \"tpBrowser\");\n\t\t\tthis.tpBrowser.Name = \"tpBrowser\";\n\t\t\tthis.tpBrowser.Tag = \"preview\";\n\t\t\t// \n\t\t\t// rdlPreview\n\t\t\t// \n\t\t\tthis.rdlPreview.Cursor = System.Windows.Forms.Cursors.Default;\n\t\t\tresources.ApplyResources(this.rdlPreview, \"rdlPreview\");\n\t\t\tthis.rdlPreview.dSubReportGetContent = null;\n\t\t\tthis.rdlPreview.Folder = null;\n\t\t\tthis.rdlPreview.HighlightAll = false;\n\t\t\tthis.rdlPreview.HighlightAllColor = System.Drawing.Color.Fuchsia;\n\t\t\tthis.rdlPreview.HighlightCaseSensitive = false;\n\t\t\tthis.rdlPreview.HighlightItemColor = System.Drawing.Color.Aqua;\n\t\t\tthis.rdlPreview.HighlightPageItem = null;\n\t\t\tthis.rdlPreview.HighlightText = null;\n\t\t\tthis.rdlPreview.Name = \"rdlPreview\";\n\t\t\tthis.rdlPreview.PageCurrent = 1;\n\t\t\tthis.rdlPreview.Parameters = \"\";\n\t\t\tthis.rdlPreview.ReportName = null;\n\t\t\tthis.rdlPreview.ScrollMode = Majorsilence.Reporting.RdlViewer.ScrollModeEnum.Continuous;\n\t\t\tthis.rdlPreview.SelectTool = false;\n\t\t\tthis.rdlPreview.ShowFindPanel = false;\n\t\t\tthis.rdlPreview.ShowParameterPanel = true;\n\t\t\tthis.rdlPreview.ShowWaitDialog = true;\n\t\t\tthis.rdlPreview.UseTrueMargins = true;\n\t\t\tthis.rdlPreview.Zoom = 0.5495112F;\n\t\t\tthis.rdlPreview.ZoomMode = Majorsilence.Reporting.RdlViewer.ZoomEnum.FitWidth;\n\t\t\t// \n\t\t\t// RdlEditPreview\n\t\t\t// \n\t\t\tthis.Controls.Add(this.tcEHP);\n\t\t\tthis.Name = \"RdlEditPreview\";\n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.tcEHP.ResumeLayout(false);\n\t\t\tthis.tpEditor.ResumeLayout(false);\n\t\t\tthis.tpBrowser.ResumeLayout(false);\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n\t\tprivate void dcDesign_ReportChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\t_DesignChanged = DesignTabs.Design;\n\t\t\tif (!Modified)\n\t\t\t\tSetTextToScintilla(dcDesign.ReportSource);\n\n\t\t\tif (OnRdlChanged != null)\n\t\t\t{\n\t\t\t\tOnRdlChanged(this, e);\n\t\t\t}\n\t\t}\n\n\t\tprivate void SetTextToScintilla(string text)\n\t\t{\n\t\t\tbool firstSet = String.IsNullOrEmpty(scintilla1.Text);\n\t\t\tnoFireRDLTextChanged = firstSet;\n\t\t\tscintilla1.Text = text;\n\t\t\tif (firstSet)\n\t\t\t{\n\t\t\t\tscintilla1.EmptyUndoBuffer();\n\t\t\t\tscintilla1.SetSavePoint();\n\t\t\t\tnoFireRDLTextChanged = false;\n\t\t\t}\n\t\t}\n\n        private void dcDesign_HeightChanged(object sender, HeightEventArgs e)\n        {\n            if (OnHeightChanged != null)\n            {\n                OnHeightChanged(this, e);\n            }\n        }\n\t\t\n\t\tprivate void dcDesign_ReportItemInserted(object sender, System.EventArgs e)\n\t\t{\n\t\t\tif (OnReportItemInserted != null)\n\t\t\t{\n\t\t\t\tOnReportItemInserted(this, e);\n\t\t\t}\n\t\t}\n\n\t\tprivate void dcDesign_OpenSubreport(object sender, SubReportEventArgs e)\n\t\t{\n\t\t\tif (OnOpenSubreport != null)\n\t\t\t{\n\t\t\t\tOnOpenSubreport(this, e);\n\t\t\t}\n\t\t}\n\t\t\n\t\tprivate void dcDesign_SelectionChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tif (OnSelectionChanged != null)\n\t\t\t{\n\t\t\t\tOnSelectionChanged(this, e);\n\t\t\t}\n\t\t}\n\t\t\n\t\tprivate void dcDesign_SelectionMoved(object sender, System.EventArgs e)\n\t\t{\n\t\t\tif (OnSelectionMoved != null)\n\t\t\t{\n\t\t\t\tOnSelectionMoved(this, e);\n\t\t\t}\n\t\t}\n\t\t\n\t\tprivate async void tcEHP_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tTabControl tc = (TabControl) sender;\n\t\t\tDesignTabs tag = (DesignTabs)tc.SelectedIndex;\n\n\t\t\t// Sync up the various pane whenever they switch so the editor is always accurate\n\t\t\tswitch (_DesignChanged)\n\t\t\t{\t// Sync up the editor in every case\n\t\t\t\tcase DesignTabs.Design:\n\t\t\t\t\t// sync up the editor\n\t\t\t\t\tSetTextToScintilla(dcDesign.ReportSource);\n\t\t\t\t\tbreak;\n\t\t\t\tcase DesignTabs.Edit:\n\t\t\t\tcase DesignTabs.Preview:\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Below sync up the changed item\n\t\t\tif (tag == DesignTabs.Preview)\n\t\t\t{\n\t\t\t\tif (rdlPreview.SourceRdl != scintilla1.Text)\t\t\t// sync up preview\n\t\t\t\t\tawait this.rdlPreview.SetSourceRdl(scintilla1.Text);\n\t\t\t}\n\t\t\telse if (tag == DesignTabs.Design)\n\t\t\t{\n\t\t\t\tif (_DesignChanged != DesignTabs.Design)\n\t\t\t\t{\n\t\t\t\t\ttry\n\t\t\t\t\t{\n\t\t\t\t\t\tdcDesign.ReportSource = scintilla1.Text;\n\t\t\t\t\t}\n\t\t\t\t\tcatch (Exception ge)\n\t\t\t\t\t{\n\t\t\t\t\t\tMessageBox.Show(ge.Message, Strings.RdlEditPreview_Show_Report);\n\t\t\t\t\t\ttc.SelectedIndex = 1;\t// Force current tab to edit syntax\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_CurrentTab = tag;\n\t\t\tif (OnDesignTabChanged != null)\n\t\t\t\tOnDesignTabChanged(this, e);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Print the report.  \n\t\t/// </summary>\n\t\tpublic async void Print(PrintDocument pd)\n\t\t{\n\t\t\tawait this.rdlPreview.Print(pd);\n\t\t}\n\n        public async Task SaveAs(string filename, OutputPresentationType type)\n\t\t{\n\t\t\tawait this.rdlPreview.SaveAs(filename, type);\n\t\t}\n\n\t\tpublic string GetRdlText()\n\t\t{\n\t\t\tif (_CurrentTab == DesignTabs.Design)\n\t\t\t\treturn dcDesign.ReportSource;\n\t\t\telse\n\t\t\t\treturn scintilla1.Text;\n\t\t}\n\n\t\tpublic void SetRdlText(string text)\n\t\t{\n\t\t\tif (_CurrentTab == DesignTabs.Design)\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tdcDesign.ReportSource = text;\n\t\t\t\t\tdcDesign.Refresh();\n\t\t\t\t\tSetTextToScintilla(text);\n\t\t\t\t}\n\t\t\t\tcatch (Exception e)\n\t\t\t\t{\n\t\t\t\t\tMessageBox.Show(e.Message, Strings.RdlEditPreview_Show_Report);\n\t\t\t\t\tSetTextToScintilla(text);\n\t\t\t\t\ttcEHP.SelectedIndex = (int)DesignTabs.Edit;\t// Force current tab to edit syntax\n\t\t\t\t\t_DesignChanged = DesignTabs.Edit;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse \n\t\t\t{\n\t\t\t\tSetTextToScintilla(text);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Number of pages in the report.\n\t\t/// </summary>\n\t\tpublic int PageCount\n\t\t{\n\t\t\tget {return this.rdlPreview.PageCount;}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Current page in view on report\n\t\t/// </summary>\n\t\tpublic int PageCurrent\n\t\t{\n\t\t\tget {return this.rdlPreview.PageCurrent;}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Page height of the report.\n\t\t/// </summary>\n\t\tpublic float PageHeight\n\t\t{\n\t\t\tget {return this.rdlPreview.PageHeight;}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Page width of the report.\n\t\t/// </summary>\n\t\tpublic float PageWidth\n\t\t{\n\t\t\tget {return this.rdlPreview.PageWidth;}\n\t\t}\n\n\t\tpublic Majorsilence.Reporting.RdlViewer.RdlViewer Viewer\n\t\t{\n\t\t\tget {return this.rdlPreview;}\n\t\t}\n\n\t\tprivate void scintilla1_UpdateUI(object sender, UpdateUIEventArgs e)\n\t\t{\n\t\t\tif ((e.Change & UpdateChange.Selection) > 0)\n\t\t\t{\n\t\t\t\tif (OnSelectionChanged != null)\n\t\t\t\t{\n\t\t\t\t\tOnSelectionChanged(this, e);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic enum DesignTabs\n\t{\n\t\tDesign,\n\t\tEdit,\n\t\tPreview\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/RdlEditPreview.fr.resx",
    "content": "﻿<root>\n    <resheader name=\"resmimetype\">\n        <value>text/microsoft-resx</value>\n    </resheader>\n    <resheader name=\"version\">\n        <value>1.3</value>\n    </resheader>\n    <resheader name=\"reader\">\n        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n    </resheader>\n    <resheader name=\"writer\">\n        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n    </resheader>\n    <data name=\"tpBrowser.Text\" xml:space=\"preserve\">\n        <value>Aperçu</value>\n    </data>\n    <data name=\"tpDesign.Text\" xml:space=\"preserve\">\n        <value>Concepteur</value>\n    </data>\n    <data name=\"tpEditor.Text\" xml:space=\"preserve\">\n        <value>Texte RDL</value>\n    </data>\n    <data name=\"tpEditor.ToolTipText\" xml:space=\"preserve\">\n        <value>Modifier la syntaxe du rapport</value>\n    </data>\n</root>"
  },
  {
    "path": "RdlDesign/RdlEditPreview.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"tcEHP.Alignment\" type=\"System.Windows.Forms.TabAlignment, System.Windows.Forms\">\n    <value>Bottom</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"tpDesign.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 4</value>\n  </data>\n  <data name=\"tpDesign.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>480, 350</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"tpDesign.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"tpDesign.Text\" xml:space=\"preserve\">\n    <value>Designer</value>\n  </data>\n  <data name=\"&gt;&gt;tpDesign.Name\" xml:space=\"preserve\">\n    <value>tpDesign</value>\n  </data>\n  <data name=\"&gt;&gt;tpDesign.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tpDesign.Parent\" xml:space=\"preserve\">\n    <value>tcEHP</value>\n  </data>\n  <data name=\"&gt;&gt;tpDesign.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"scintilla1.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Bottom, Left, Right</value>\n  </data>\n  <data name=\"scintilla1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>1, 0</value>\n  </data>\n  <data name=\"scintilla1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>480, 350</value>\n  </data>\n  <data name=\"scintilla1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;scintilla1.Name\" xml:space=\"preserve\">\n    <value>scintilla1</value>\n  </data>\n  <data name=\"&gt;&gt;scintilla1.Type\" xml:space=\"preserve\">\n    <value>ScintillaNET.Scintilla, ScintillaNET, Version=3.5.6.0, Culture=neutral, PublicKeyToken=null</value>\n  </data>\n  <data name=\"&gt;&gt;scintilla1.Parent\" xml:space=\"preserve\">\n    <value>tpEditor</value>\n  </data>\n  <data name=\"&gt;&gt;scintilla1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"tpEditor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 4</value>\n  </data>\n  <data name=\"tpEditor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>480, 350</value>\n  </data>\n  <data name=\"tpEditor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"tpEditor.Text\" xml:space=\"preserve\">\n    <value>RDL Text</value>\n  </data>\n  <data name=\"tpEditor.ToolTipText\" xml:space=\"preserve\">\n    <value>Edit Report Syntax</value>\n  </data>\n  <data name=\"&gt;&gt;tpEditor.Name\" xml:space=\"preserve\">\n    <value>tpEditor</value>\n  </data>\n  <data name=\"&gt;&gt;tpEditor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tpEditor.Parent\" xml:space=\"preserve\">\n    <value>tcEHP</value>\n  </data>\n  <data name=\"&gt;&gt;tpEditor.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"rdlPreview.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Fill</value>\n  </data>\n  <data name=\"rdlPreview.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"rdlPreview.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>480, 350</value>\n  </data>\n  <data name=\"rdlPreview.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;rdlPreview.Name\" xml:space=\"preserve\">\n    <value>rdlPreview</value>\n  </data>\n  <data name=\"&gt;&gt;rdlPreview.Type\" xml:space=\"preserve\">\n    <value>fyiReporting.RdlViewer.RdlViewer, RdlViewer, Version=4.13.5966.25779, Culture=neutral, PublicKeyToken=null</value>\n  </data>\n  <data name=\"&gt;&gt;rdlPreview.Parent\" xml:space=\"preserve\">\n    <value>tpBrowser</value>\n  </data>\n  <data name=\"&gt;&gt;rdlPreview.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"tpBrowser.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 4</value>\n  </data>\n  <data name=\"tpBrowser.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>480, 350</value>\n  </data>\n  <data name=\"tpBrowser.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"tpBrowser.Text\" xml:space=\"preserve\">\n    <value>Preview</value>\n  </data>\n  <data name=\"&gt;&gt;tpBrowser.Name\" xml:space=\"preserve\">\n    <value>tpBrowser</value>\n  </data>\n  <data name=\"&gt;&gt;tpBrowser.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tpBrowser.Parent\" xml:space=\"preserve\">\n    <value>tcEHP</value>\n  </data>\n  <data name=\"&gt;&gt;tpBrowser.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"tcEHP.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Fill</value>\n  </data>\n  <data name=\"tcEHP.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"tcEHP.ShowToolTips\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"tcEHP.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>488, 376</value>\n  </data>\n  <data name=\"tcEHP.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;tcEHP.Name\" xml:space=\"preserve\">\n    <value>tcEHP</value>\n  </data>\n  <data name=\"&gt;&gt;tcEHP.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tcEHP.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tcEHP.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>488, 376</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>RdlEditPreview</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/RdlEditPreview.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"tpDesign.Text\" xml:space=\"preserve\">\n    <value>Дизайнер</value>\n  </data>\n  <data name=\"tpEditor.Text\" xml:space=\"preserve\">\n    <value>Редактор кода</value>\n  </data>\n  <data name=\"tpEditor.ToolTipText\" xml:space=\"preserve\">\n    <value>Редактировать код отчёта</value>\n  </data>\n  <data name=\"tpBrowser.Text\" xml:space=\"preserve\">\n    <value>Просмотр</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/RdlProperties/Categories.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Majorsilence.Reporting.RdlDesign.RdlProperties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Categories {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Categories() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Majorsilence.Reporting.RdlDesign.RdlProperties.Categories\", typeof(Categories).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/RdlProperties/Categories.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n\t<!-- \n\t\tMicrosoft ResX Schema\n\n\t\tVersion 1.3\n\n\t\tThe primary goals of this format is to allow a simple XML format \n\t\tthat is mostly human readable. The generation and parsing of the \n\t\tvarious data types are done through the TypeConverter classes \n\t\tassociated with the data types.\n\n\t\tExample:\n\n\t\t... ado.net/XML headers & schema ...\n\t\t<resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n\t\t<resheader name=\"version\">1.3</resheader>\n\t\t<resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n\t\t<resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n\t\t<data name=\"Name1\">this is my long string</data>\n\t\t<data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n\t\t<data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n\t\t\t[base64 mime encoded serialized .NET Framework object]\n\t\t</data>\n\t\t<data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n\t\t\t[base64 mime encoded string representing a byte array form of the .NET Framework object]\n\t\t</data>\n\n\t\tThere are any number of \"resheader\" rows that contain simple \n\t\tname/value pairs.\n\n\t\tEach data row contains a name, and value. The row also contains a \n\t\ttype or mimetype. Type corresponds to a .NET class that support \n\t\ttext/value conversion through the TypeConverter architecture. \n\t\tClasses that don't support this are serialized and stored with the \n\t\tmimetype set.\n\n\t\tThe mimetype is used for serialized objects, and tells the \n\t\tResXResourceReader how to depersist the object. This is currently not \n\t\textensible. For a given mimetype the value must be set accordingly:\n\n\t\tNote - application/x-microsoft.net.object.binary.base64 is the format \n\t\tthat the ResXResourceWriter will generate, however the reader can \n\t\tread any of the formats listed below.\n\n\t\tmimetype: application/x-microsoft.net.object.binary.base64\n\t\tvalue   : The object must be serialized with \n\t\t\t: System.Serialization.Formatters.Binary.BinaryFormatter\n\t\t\t: and then encoded with base64 encoding.\n\n\t\tmimetype: application/x-microsoft.net.object.soap.base64\n\t\tvalue   : The object must be serialized with \n\t\t\t: System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n\t\t\t: and then encoded with base64 encoding.\n\n\t\tmimetype: application/x-microsoft.net.object.bytearray.base64\n\t\tvalue   : The object must be serialized into a byte array \n\t\t\t: using a System.ComponentModel.TypeConverter\n\t\t\t: and then encoded with base64 encoding.\n\t-->\n\t\n\t<xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n\t\t<xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n\t\t\t<xsd:complexType>\n\t\t\t\t<xsd:choice maxOccurs=\"unbounded\">\n\t\t\t\t\t<xsd:element name=\"data\">\n\t\t\t\t\t\t<xsd:complexType>\n\t\t\t\t\t\t\t<xsd:sequence>\n\t\t\t\t\t\t\t\t<xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t\t<xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n\t\t\t\t\t\t\t</xsd:sequence>\n\t\t\t\t\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t<xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n\t\t\t\t\t\t\t<xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n\t\t\t\t\t\t</xsd:complexType>\n\t\t\t\t\t</xsd:element>\n\t\t\t\t\t<xsd:element name=\"resheader\">\n\t\t\t\t\t\t<xsd:complexType>\n\t\t\t\t\t\t\t<xsd:sequence>\n\t\t\t\t\t\t\t\t<xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t</xsd:sequence>\n\t\t\t\t\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n\t\t\t\t\t\t</xsd:complexType>\n\t\t\t\t\t</xsd:element>\n\t\t\t\t</xsd:choice>\n\t\t\t</xsd:complexType>\n\t\t</xsd:element>\n\t</xsd:schema>\n\t<resheader name=\"resmimetype\">\n\t\t<value>text/microsoft-resx</value>\n\t</resheader>\n\t<resheader name=\"version\">\n\t\t<value>1.3</value>\n\t</resheader>\n\t<resheader name=\"reader\">\n\t\t<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n\t</resheader>\n\t<resheader name=\"writer\">\n\t\t<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n\t</resheader>\n</root>"
  },
  {
    "path": "RdlDesign/RdlProperties/Categories.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Body\" xml:space=\"preserve\">\n    <value>Тело</value>\n  </data>\n  <data name=\"Chart\" xml:space=\"preserve\">\n    <value>Диаграмма</value>\n  </data>\n  <data name=\"ChartData\" xml:space=\"preserve\">\n    <value>Данные диаграммы</value>\n  </data>\n  <data name=\"ChartLegend\" xml:space=\"preserve\">\n    <value>Легенда диаграммы</value>\n  </data>\n  <data name=\"ChartTitle\" xml:space=\"preserve\">\n    <value>Заголовок диаграммы</value>\n  </data>\n  <data name=\"DataRegion\" xml:space=\"preserve\">\n    <value>Область данных</value>\n  </data>\n  <data name=\"Image\" xml:space=\"preserve\">\n    <value>Изображение</value>\n  </data>\n  <data name=\"List\" xml:space=\"preserve\">\n    <value>Список</value>\n  </data>\n  <data name=\"Rectangle\" xml:space=\"preserve\">\n    <value>Прямоугольник</value>\n  </data>\n  <data name=\"Report\" xml:space=\"preserve\">\n    <value>Отчёт</value>\n  </data>\n  <data name=\"Style\" xml:space=\"preserve\">\n    <value>Стиль</value>\n  </data>\n  <data name=\"Subreport\" xml:space=\"preserve\">\n    <value>Подотчёт</value>\n  </data>\n  <data name=\"Textbox\" xml:space=\"preserve\">\n    <value>Текстовое поле</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/RdlProperties/Descriptions.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Majorsilence.Reporting.RdlDesign.RdlProperties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Descriptions {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Descriptions() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Majorsilence.Reporting.RdlDesign.RdlProperties.Descriptions\", typeof(Descriptions).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Text color.\n        /// </summary>\n        internal static string Appearance_Color {\n            get {\n                return ResourceManager.GetString(\"Appearance_Color\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Text is either written left-to-right (LTR) or right-to-left (RTL)..\n        /// </summary>\n        internal static string Appearance_Direction {\n            get {\n                return ResourceManager.GetString(\"Appearance_Direction\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to FontFamily is the name of the font family.  Not all renderers support all fonts..\n        /// </summary>\n        internal static string Appearance_FontFamily {\n            get {\n                return ResourceManager.GetString(\"Appearance_FontFamily\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Font size controls the text size..\n        /// </summary>\n        internal static string Appearance_FontSize {\n            get {\n                return ResourceManager.GetString(\"Appearance_FontSize\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to FontStyle determines if font is italicized..\n        /// </summary>\n        internal static string Appearance_FontStyle {\n            get {\n                return ResourceManager.GetString(\"Appearance_FontStyle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to FontWeight controls the boldness of the font..\n        /// </summary>\n        internal static string Appearance_FontWeight {\n            get {\n                return ResourceManager.GetString(\"Appearance_FontWeight\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Depending on type the value can be formatted..\n        /// </summary>\n        internal static string Appearance_Format {\n            get {\n                return ResourceManager.GetString(\"Appearance_Format\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Horizontal alignment.\n        /// </summary>\n        internal static string Appearance_TextAlign {\n            get {\n                return ResourceManager.GetString(\"Appearance_TextAlign\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to TextDecoration controls underline, overline, and linethrough.  Not all renderers support all options..\n        /// </summary>\n        internal static string Appearance_TextDecoration {\n            get {\n                return ResourceManager.GetString(\"Appearance_TextDecoration\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Vertical alignment.\n        /// </summary>\n        internal static string Appearance_VerticalAlign {\n            get {\n                return ResourceManager.GetString(\"Appearance_VerticalAlign\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Text is either written horizontally (lr-tb) or vertically (tb-rl)..\n        /// </summary>\n        internal static string Appearance_WritingMode {\n            get {\n                return ResourceManager.GetString(\"Appearance_WritingMode\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Background color..\n        /// </summary>\n        internal static string Background_Color {\n            get {\n                return ResourceManager.GetString(\"Background_Color\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to End color when gradient type is not None..\n        /// </summary>\n        internal static string Background_EndColor {\n            get {\n                return ResourceManager.GetString(\"Background_EndColor\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Type of background gradient..\n        /// </summary>\n        internal static string Background_GradientType {\n            get {\n                return ResourceManager.GetString(\"Background_GradientType\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Image to place in the background of the report item.\n        /// </summary>\n        internal static string Background_Image {\n            get {\n                return ResourceManager.GetString(\"Background_Image\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to When Source is Database MIMEType describes the type of image..\n        /// </summary>\n        internal static string BackgroundImage_MIMEType {\n            get {\n                return ResourceManager.GetString(\"BackgroundImage_MIMEType\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Controls repeating of the background image to fill space..\n        /// </summary>\n        internal static string BackgroundImage_Repeat {\n            get {\n                return ResourceManager.GetString(\"BackgroundImage_Repeat\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Background Image Source: None, External, Embedded, Database..\n        /// </summary>\n        internal static string BackgroundImage_Source {\n            get {\n                return ResourceManager.GetString(\"BackgroundImage_Source\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Value depends upon the source of the image..\n        /// </summary>\n        internal static string BackgroundImage_Value {\n            get {\n                return ResourceManager.GetString(\"BackgroundImage_Value\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Defines a hyperlink, bookmark link, or drillthrough action for the report item..\n        /// </summary>\n        internal static string Base_Action {\n            get {\n                return ResourceManager.GetString(\"Base_Action\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Controls the background expressions..\n        /// </summary>\n        internal static string Base_Background {\n            get {\n                return ResourceManager.GetString(\"Base_Background\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to In PDFs, bookmarks are created for each instance of the report item.  For example, putting a bookmark on a report item in a group header will generate a list of the groups in the report..\n        /// </summary>\n        internal static string Base_Bookmark {\n            get {\n                return ResourceManager.GetString(\"Base_Bookmark\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Defines the border of the report item..\n        /// </summary>\n        internal static string Base_Border {\n            get {\n                return ResourceManager.GetString(\"Base_Border\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Report item can span multiple columns..\n        /// </summary>\n        internal static string Base_ColumnSpan {\n            get {\n                return ResourceManager.GetString(\"Base_ColumnSpan\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The name to use for the element or attribute when exporting to XML..\n        /// </summary>\n        internal static string Base_DataElementName {\n            get {\n                return ResourceManager.GetString(\"Base_DataElementName\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to When rendering XML determines how or whether the item appears in the XML..\n        /// </summary>\n        internal static string Base_DataElementOutput {\n            get {\n                return ResourceManager.GetString(\"Base_DataElementOutput\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Location of the report item..\n        /// </summary>\n        internal static string Base_Location {\n            get {\n                return ResourceManager.GetString(\"Base_Location\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Matrix report item properties..\n        /// </summary>\n        internal static string Base_Matrix {\n            get {\n                return ResourceManager.GetString(\"Base_Matrix\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The unique name of the report item..\n        /// </summary>\n        internal static string Base_Name {\n            get {\n                return ResourceManager.GetString(\"Base_Name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Controls the padding expressions..\n        /// </summary>\n        internal static string Base_Padding {\n            get {\n                return ResourceManager.GetString(\"Base_Padding\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Height and width of the report item..\n        /// </summary>\n        internal static string Base_Size {\n            get {\n                return ResourceManager.GetString(\"Base_Size\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Table report item properties..\n        /// </summary>\n        internal static string Base_Table {\n            get {\n                return ResourceManager.GetString(\"Base_Table\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to A ToolTip provides a label that can be used by a renderer.  For example, the Viewer and PDF renderers use this to popup the specified text when the mouse is over the report item..\n        /// </summary>\n        internal static string Base_ToolTip {\n            get {\n                return ResourceManager.GetString(\"Base_ToolTip\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Defines the visibility of the item..\n        /// </summary>\n        internal static string Base_Visibility {\n            get {\n                return ResourceManager.GetString(\"Base_Visibility\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Drawing order of the report item..\n        /// </summary>\n        internal static string Base_ZIndex {\n            get {\n                return ResourceManager.GetString(\"Base_ZIndex\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to CategoryAxis defines the category (X) axis..\n        /// </summary>\n        internal static string Chart_CategoryAxis {\n            get {\n                return ResourceManager.GetString(\"Chart_CategoryAxis\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Properties controlling the display of the chart data..\n        /// </summary>\n        internal static string Chart_ChartData {\n            get {\n                return ResourceManager.GetString(\"Chart_ChartData\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Chart Legend..\n        /// </summary>\n        internal static string Chart_Legend {\n            get {\n                return ResourceManager.GetString(\"Chart_Legend\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Color palette for the chart..\n        /// </summary>\n        internal static string Chart_Palette {\n            get {\n                return ResourceManager.GetString(\"Chart_Palette\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Percentage width for bars and columns..\n        /// </summary>\n        internal static string Chart_PointWidth {\n            get {\n                return ResourceManager.GetString(\"Chart_PointWidth\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Chart Title..\n        /// </summary>\n        internal static string Chart_Title {\n            get {\n                return ResourceManager.GetString(\"Chart_Title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Type of the chart..\n        /// </summary>\n        internal static string Chart_Type {\n            get {\n                return ResourceManager.GetString(\"Chart_Type\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to ValueAxis defines the data (Y) axis..\n        /// </summary>\n        internal static string Chart_ValueAxis {\n            get {\n                return ResourceManager.GetString(\"Chart_ValueAxis\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Properties controlling the display of an axis..\n        /// </summary>\n        internal static string ChartAxis {\n            get {\n                return ResourceManager.GetString(\"ChartAxis\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Font, color, alignment, ... of the axis..\n        /// </summary>\n        internal static string ChartAxis_Appearance {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Appearance\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Background of the axis..\n        /// </summary>\n        internal static string ChartAxis_Background {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Background\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Border properties of the axis..\n        /// </summary>\n        internal static string ChartAxis_Border {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Border\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Value at which to cross the other axis..\n        /// </summary>\n        internal static string ChartAxis_CrossAt {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_CrossAt\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to When true strip lines are drawn every other grid line..\n        /// </summary>\n        internal static string ChartAxis_Interlaced {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Interlaced\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Scalar.\n        /// </summary>\n        internal static string ChartAxis_LogScale {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_LogScale\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Major Grid Lines properties.\n        /// </summary>\n        internal static string ChartAxis_MajorGridLines {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_MajorGridLines\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unit for major gridlines and tickmarks; omit for autodivision..\n        /// </summary>\n        internal static string ChartAxis_MajorInterval {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_MajorInterval\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Major tick marks..\n        /// </summary>\n        internal static string ChartAxis_MajorTickMarks {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_MajorTickMarks\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Is there axis margin?.\n        /// </summary>\n        internal static string ChartAxis_Margin {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Margin\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Maximum value for the axis.  When omitted axis autoscales..\n        /// </summary>\n        internal static string ChartAxis_Max {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Max\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Minimum value for the axis.  When omitted axis autoscales..\n        /// </summary>\n        internal static string ChartAxis_Min {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Min\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Minor Grid Lines properties.\n        /// </summary>\n        internal static string ChartAxis_MinorGridLines {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_MinorGridLines\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unit for minor gridlines and tickmarks; omit for autodivision..\n        /// </summary>\n        internal static string ChartAxis_MinorInterval {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_MinorInterval\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Minor tick marks..\n        /// </summary>\n        internal static string ChartAxis_MinorTickMarks {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_MinorTickMarks\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Padding properties of the axis..\n        /// </summary>\n        internal static string ChartAxis_Padding {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Padding\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Should axis be plotted normally (false) or should the direction be reversed?.\n        /// </summary>\n        internal static string ChartAxis_Reverse {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Reverse\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Scalar.\n        /// </summary>\n        internal static string ChartAxis_Scalar {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Scalar\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Title for the axis.\n        /// </summary>\n        internal static string ChartAxis_Title {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Is the axis visible?.\n        /// </summary>\n        internal static string ChartAxis_Visible {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Visible\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Properties controlling the display of the chart data..\n        /// </summary>\n        internal static string ChartData {\n            get {\n                return ResourceManager.GetString(\"ChartData\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Expression that is to be charted..\n        /// </summary>\n        internal static string ChartData_DataValue {\n            get {\n                return ResourceManager.GetString(\"ChartData_DataValue\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Y Coordinate for Scatter and Bubble charts..\n        /// </summary>\n        internal static string ChartData_DataValue2 {\n            get {\n                return ResourceManager.GetString(\"ChartData_DataValue2\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Bubble size in Bubble charts..\n        /// </summary>\n        internal static string ChartData_DataValue3 {\n            get {\n                return ResourceManager.GetString(\"ChartData_DataValue3\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Appearance of the label when visible..\n        /// </summary>\n        internal static string ChartData_LabelAppearance {\n            get {\n                return ResourceManager.GetString(\"ChartData_LabelAppearance\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Should data label be displayed?.\n        /// </summary>\n        internal static string ChartData_LabelVisible {\n            get {\n                return ResourceManager.GetString(\"ChartData_LabelVisible\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Line color.\n        /// </summary>\n        internal static string ChartGridLines_Color {\n            get {\n                return ResourceManager.GetString(\"ChartGridLines_Color\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Line style: Dotted, Dashed or Solid.\n        /// </summary>\n        internal static string ChartGridLines_LineStyle {\n            get {\n                return ResourceManager.GetString(\"ChartGridLines_LineStyle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Determines if grid lines are shown..\n        /// </summary>\n        internal static string ChartGridLines_ShowGridLines {\n            get {\n                return ResourceManager.GetString(\"ChartGridLines_ShowGridLines\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Width of line.\n        /// </summary>\n        internal static string ChartGridLines_Width {\n            get {\n                return ResourceManager.GetString(\"ChartGridLines_Width\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Properties controlling the display of the chart legend..\n        /// </summary>\n        internal static string ChartLegend {\n            get {\n                return ResourceManager.GetString(\"ChartLegend\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Font, color, alignment, ... of the legend..\n        /// </summary>\n        internal static string ChartLegend_Appearance {\n            get {\n                return ResourceManager.GetString(\"ChartLegend_Appearance\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Background of the legend..\n        /// </summary>\n        internal static string ChartLegend_Background {\n            get {\n                return ResourceManager.GetString(\"ChartLegend_Background\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Border properties of the legend..\n        /// </summary>\n        internal static string ChartLegend_Border {\n            get {\n                return ResourceManager.GetString(\"ChartLegend_Border\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Draw legend inside the plot area when true, otherwise outside..\n        /// </summary>\n        internal static string ChartLegend_InsidePlotArea {\n            get {\n                return ResourceManager.GetString(\"ChartLegend_InsidePlotArea\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Layout of the legend..\n        /// </summary>\n        internal static string ChartLegend_Layout {\n            get {\n                return ResourceManager.GetString(\"ChartLegend_Layout\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Padding properties of the legend..\n        /// </summary>\n        internal static string ChartLegend_Padding {\n            get {\n                return ResourceManager.GetString(\"ChartLegend_Padding\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Position of the legend..\n        /// </summary>\n        internal static string ChartLegend_Position {\n            get {\n                return ResourceManager.GetString(\"ChartLegend_Position\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Is the legend visible?.\n        /// </summary>\n        internal static string ChartLegend_Visible {\n            get {\n                return ResourceManager.GetString(\"ChartLegend_Visible\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Properties controlling the display of the chart title..\n        /// </summary>\n        internal static string ChartTitle {\n            get {\n                return ResourceManager.GetString(\"ChartTitle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Font, color, alignment, ... of the caption..\n        /// </summary>\n        internal static string ChartTitle_Appearance {\n            get {\n                return ResourceManager.GetString(\"ChartTitle_Appearance\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Background of the caption..\n        /// </summary>\n        internal static string ChartTitle_Background {\n            get {\n                return ResourceManager.GetString(\"ChartTitle_Background\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Border properties of the caption..\n        /// </summary>\n        internal static string ChartTitle_Border {\n            get {\n                return ResourceManager.GetString(\"ChartTitle_Border\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The text of the title..\n        /// </summary>\n        internal static string ChartTitle_Caption {\n            get {\n                return ResourceManager.GetString(\"ChartTitle_Caption\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Padding properties of the caption..\n        /// </summary>\n        internal static string ChartTitle_Padding {\n            get {\n                return ResourceManager.GetString(\"ChartTitle_Padding\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Font, color, alignment, ... of NoRows text..\n        /// </summary>\n        internal static string DataRegion_Appearance {\n            get {\n                return ResourceManager.GetString(\"DataRegion_Appearance\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Specifies which data set to use..\n        /// </summary>\n        internal static string DataRegion_DataSetName {\n            get {\n                return ResourceManager.GetString(\"DataRegion_DataSetName\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Filters to apply to each row of data in data region..\n        /// </summary>\n        internal static string DataRegion_Filters {\n            get {\n                return ResourceManager.GetString(\"DataRegion_Filters\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Keep data region on one page if possible..\n        /// </summary>\n        internal static string DataRegion_KeepTogether {\n            get {\n                return ResourceManager.GetString(\"DataRegion_KeepTogether\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Message to display if no rows available..\n        /// </summary>\n        internal static string DataRegion_NoRows {\n            get {\n                return ResourceManager.GetString(\"DataRegion_NoRows\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Cause a page break after rendering..\n        /// </summary>\n        internal static string DataRegion_PageBreakAtEnd {\n            get {\n                return ResourceManager.GetString(\"DataRegion_PageBreakAtEnd\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Cause a page break before rendering..\n        /// </summary>\n        internal static string DataRegion_PageBreakAtStart {\n            get {\n                return ResourceManager.GetString(\"DataRegion_PageBreakAtStart\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The image properties..\n        /// </summary>\n        internal static string Image_Image {\n            get {\n                return ResourceManager.GetString(\"Image_Image\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to When Source is Database MIMEType describes the type of image..\n        /// </summary>\n        internal static string ImageI_MIMEType {\n            get {\n                return ResourceManager.GetString(\"ImageI_MIMEType\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Defines how image is sized when image doesn&apos;t match specified size..\n        /// </summary>\n        internal static string ImageI_Sizing {\n            get {\n                return ResourceManager.GetString(\"ImageI_Sizing\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Image Source:External, Embedded, Database..\n        /// </summary>\n        internal static string ImageI_Source {\n            get {\n                return ResourceManager.GetString(\"ImageI_Source\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Value depends upon the source of the image..\n        /// </summary>\n        internal static string ImageI_Value {\n            get {\n                return ResourceManager.GetString(\"ImageI_Value\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Determines whether list instances appear in the XML..\n        /// </summary>\n        internal static string List_DataInstanceElementOutput {\n            get {\n                return ResourceManager.GetString(\"List_DataInstanceElementOutput\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The name to use for the data element for each instance of this list when exporting to XML..\n        /// </summary>\n        internal static string List_DataInstanceName {\n            get {\n                return ResourceManager.GetString(\"List_DataInstanceName\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Grouping data allows each repeated list region to represent a summarization of the rows in the group..\n        /// </summary>\n        internal static string List_Grouping {\n            get {\n                return ResourceManager.GetString(\"List_Grouping\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Sorting controls the order of the repeated list regions..\n        /// </summary>\n        internal static string List_Sorting {\n            get {\n                return ResourceManager.GetString(\"List_Sorting\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Determines if report will start a new page after the bottom of the rectangle..\n        /// </summary>\n        internal static string Rectangle_PageBreakAtEnd {\n            get {\n                return ResourceManager.GetString(\"Rectangle_PageBreakAtEnd\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Determines if report will start a new page at the top of the rectangle..\n        /// </summary>\n        internal static string Rectangle_PageBreakAtStart {\n            get {\n                return ResourceManager.GetString(\"Rectangle_PageBreakAtStart\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The author of the report.\n        /// </summary>\n        internal static string Report_Author {\n            get {\n                return ResourceManager.GetString(\"Report_Author\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Number of columns in the body region..\n        /// </summary>\n        internal static string Report_BodyColumns {\n            get {\n                return ResourceManager.GetString(\"Report_BodyColumns\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Spacing between columns..\n        /// </summary>\n        internal static string Report_BodyColumnSpacing {\n            get {\n                return ResourceManager.GetString(\"Report_BodyColumnSpacing\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Height of the body region..\n        /// </summary>\n        internal static string Report_BodyHeight {\n            get {\n                return ResourceManager.GetString(\"Report_BodyHeight\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Basic functions defined for use in the report..\n        /// </summary>\n        internal static string Report_Code {\n            get {\n                return ResourceManager.GetString(\"Report_Code\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The top level element name used when rendering XML..\n        /// </summary>\n        internal static string Report_DataElementName {\n            get {\n                return ResourceManager.GetString(\"Report_DataElementName\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Element style is either Attribute or Element..\n        /// </summary>\n        internal static string Report_DataElementStyle {\n            get {\n                return ResourceManager.GetString(\"Report_DataElementStyle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The schema or namespace to specify when rendering XML..\n        /// </summary>\n        internal static string Report_DataSchema {\n            get {\n                return ResourceManager.GetString(\"Report_DataSchema\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to XSL file to use to transform XML after rendering..\n        /// </summary>\n        internal static string Report_DataTransform {\n            get {\n                return ResourceManager.GetString(\"Report_DataTransform\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The description of the report.\n        /// </summary>\n        internal static string Report_Description {\n            get {\n                return ResourceManager.GetString(\"Report_Description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Page margins for the report..\n        /// </summary>\n        internal static string Report_Margins {\n            get {\n                return ResourceManager.GetString(\"Report_Margins\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Modules and instances of classes for use in the report..\n        /// </summary>\n        internal static string Report_ModulesClasses {\n            get {\n                return ResourceManager.GetString(\"Report_ModulesClasses\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to PageFooter options for the report..\n        /// </summary>\n        internal static string Report_PageFooter {\n            get {\n                return ResourceManager.GetString(\"Report_PageFooter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to PageHeader options for the report..\n        /// </summary>\n        internal static string Report_PageHeader {\n            get {\n                return ResourceManager.GetString(\"Report_PageHeader\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The height of the page..\n        /// </summary>\n        internal static string Report_PageHeight {\n            get {\n                return ResourceManager.GetString(\"Report_PageHeight\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The width of the page..\n        /// </summary>\n        internal static string Report_PageWidth {\n            get {\n                return ResourceManager.GetString(\"Report_PageWidth\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Parameters defined in the report..\n        /// </summary>\n        internal static string Report_Parameters {\n            get {\n                return ResourceManager.GetString(\"Report_Parameters\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The width of the report..\n        /// </summary>\n        internal static string Report_Width {\n            get {\n                return ResourceManager.GetString(\"Report_Width\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to When true DataSource connections in subreport will reuse parent report connections when possible..\n        /// </summary>\n        internal static string Subreport_MergeTransactions {\n            get {\n                return ResourceManager.GetString(\"Subreport_MergeTransactions\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The name of the subreport either a full path or a relative path..\n        /// </summary>\n        internal static string Subreport_NoRows {\n            get {\n                return ResourceManager.GetString(\"Subreport_NoRows\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The subreport parameter expressions..\n        /// </summary>\n        internal static string Subreport_Parameters {\n            get {\n                return ResourceManager.GetString(\"Subreport_Parameters\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The name of the subreport either a full path or a relative path..\n        /// </summary>\n        internal static string Subreport_ReportName {\n            get {\n                return ResourceManager.GetString(\"Subreport_ReportName\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Font, color, alignment, ... of text..\n        /// </summary>\n        internal static string Textbox_Appearance {\n            get {\n                return ResourceManager.GetString(\"Textbox_Appearance\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to CanGrow indicates the height of the Textbox can increase depending on its contents..\n        /// </summary>\n        internal static string Textbox_CanGrow {\n            get {\n                return ResourceManager.GetString(\"Textbox_CanGrow\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to CanShrink indicates the height of the Textbox can decrease depending on its contents..\n        /// </summary>\n        internal static string Textbox_CanShrink {\n            get {\n                return ResourceManager.GetString(\"Textbox_CanShrink\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Specifies whether Textbox renders as an Attribute or an Element..\n        /// </summary>\n        internal static string Textbox_DataElementStyle {\n            get {\n                return ResourceManager.GetString(\"Textbox_DataElementStyle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to To HideDuplicate values provide the scope (dataset or group) over which you want to hide the Textbox..\n        /// </summary>\n        internal static string Textbox_HideDuplicates {\n            get {\n                return ResourceManager.GetString(\"Textbox_HideDuplicates\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The value of the textbox..\n        /// </summary>\n        internal static string Textbox_Value {\n            get {\n                return ResourceManager.GetString(\"Textbox_Value\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/RdlProperties/Descriptions.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Appearance_Color\" xml:space=\"preserve\">\n    <value>Text color</value>\n  </data>\n  <data name=\"Appearance_Direction\" xml:space=\"preserve\">\n    <value>Text is either written left-to-right (LTR) or right-to-left (RTL).</value>\n  </data>\n  <data name=\"Appearance_FontFamily\" xml:space=\"preserve\">\n    <value>FontFamily is the name of the font family.  Not all renderers support all fonts.</value>\n  </data>\n  <data name=\"Appearance_FontSize\" xml:space=\"preserve\">\n    <value>Font size controls the text size.</value>\n  </data>\n  <data name=\"Appearance_FontStyle\" xml:space=\"preserve\">\n    <value>FontStyle determines if font is italicized.</value>\n  </data>\n  <data name=\"Appearance_FontWeight\" xml:space=\"preserve\">\n    <value>FontWeight controls the boldness of the font.</value>\n  </data>\n  <data name=\"Appearance_Format\" xml:space=\"preserve\">\n    <value>Depending on type the value can be formatted.</value>\n  </data>\n  <data name=\"Appearance_TextAlign\" xml:space=\"preserve\">\n    <value>Horizontal alignment</value>\n  </data>\n  <data name=\"Appearance_TextDecoration\" xml:space=\"preserve\">\n    <value>TextDecoration controls underline, overline, and linethrough.  Not all renderers support all options.</value>\n  </data>\n  <data name=\"Appearance_VerticalAlign\" xml:space=\"preserve\">\n    <value>Vertical alignment</value>\n  </data>\n  <data name=\"Appearance_WritingMode\" xml:space=\"preserve\">\n    <value>Text is either written horizontally (lr-tb) or vertically (tb-rl).</value>\n  </data>\n  <data name=\"BackgroundImage_MIMEType\" xml:space=\"preserve\">\n    <value>When Source is Database MIMEType describes the type of image.</value>\n  </data>\n  <data name=\"BackgroundImage_Repeat\" xml:space=\"preserve\">\n    <value>Controls repeating of the background image to fill space.</value>\n  </data>\n  <data name=\"BackgroundImage_Source\" xml:space=\"preserve\">\n    <value>Background Image Source: None, External, Embedded, Database.</value>\n  </data>\n  <data name=\"BackgroundImage_Value\" xml:space=\"preserve\">\n    <value>Value depends upon the source of the image.</value>\n  </data>\n  <data name=\"Background_Color\" xml:space=\"preserve\">\n    <value>Background color.</value>\n  </data>\n  <data name=\"Background_EndColor\" xml:space=\"preserve\">\n    <value>End color when gradient type is not None.</value>\n  </data>\n  <data name=\"Background_GradientType\" xml:space=\"preserve\">\n    <value>Type of background gradient.</value>\n  </data>\n  <data name=\"Background_Image\" xml:space=\"preserve\">\n    <value>Image to place in the background of the report item</value>\n  </data>\n  <data name=\"Base_Action\" xml:space=\"preserve\">\n    <value>Defines a hyperlink, bookmark link, or drillthrough action for the report item.</value>\n  </data>\n  <data name=\"Base_Background\" xml:space=\"preserve\">\n    <value>Controls the background expressions.</value>\n  </data>\n  <data name=\"Base_Bookmark\" xml:space=\"preserve\">\n    <value>In PDFs, bookmarks are created for each instance of the report item.  For example, putting a bookmark on a report item in a group header will generate a list of the groups in the report.</value>\n  </data>\n  <data name=\"Base_Border\" xml:space=\"preserve\">\n    <value>Defines the border of the report item.</value>\n  </data>\n  <data name=\"Base_ColumnSpan\" xml:space=\"preserve\">\n    <value>Report item can span multiple columns.</value>\n  </data>\n  <data name=\"Base_DataElementName\" xml:space=\"preserve\">\n    <value>The name to use for the element or attribute when exporting to XML.</value>\n  </data>\n  <data name=\"Base_DataElementOutput\" xml:space=\"preserve\">\n    <value>When rendering XML determines how or whether the item appears in the XML.</value>\n  </data>\n  <data name=\"Base_Location\" xml:space=\"preserve\">\n    <value>Location of the report item.</value>\n  </data>\n  <data name=\"Base_Matrix\" xml:space=\"preserve\">\n    <value>Matrix report item properties.</value>\n  </data>\n  <data name=\"Base_Name\" xml:space=\"preserve\">\n    <value>The unique name of the report item.</value>\n  </data>\n  <data name=\"Base_Padding\" xml:space=\"preserve\">\n    <value>Controls the padding expressions.</value>\n  </data>\n  <data name=\"Base_Size\" xml:space=\"preserve\">\n    <value>Height and width of the report item.</value>\n  </data>\n  <data name=\"Base_Table\" xml:space=\"preserve\">\n    <value>Table report item properties.</value>\n  </data>\n  <data name=\"Base_ToolTip\" xml:space=\"preserve\">\n    <value>A ToolTip provides a label that can be used by a renderer.  For example, the Viewer and PDF renderers use this to popup the specified text when the mouse is over the report item.</value>\n  </data>\n  <data name=\"Base_Visibility\" xml:space=\"preserve\">\n    <value>Defines the visibility of the item.</value>\n  </data>\n  <data name=\"Base_ZIndex\" xml:space=\"preserve\">\n    <value>Drawing order of the report item.</value>\n  </data>\n  <data name=\"ChartAxis\" xml:space=\"preserve\">\n    <value>Properties controlling the display of an axis.</value>\n  </data>\n  <data name=\"ChartAxis_Appearance\" xml:space=\"preserve\">\n    <value>Font, color, alignment, ... of the axis.</value>\n  </data>\n  <data name=\"ChartAxis_Background\" xml:space=\"preserve\">\n    <value>Background of the axis.</value>\n  </data>\n  <data name=\"ChartAxis_Border\" xml:space=\"preserve\">\n    <value>Border properties of the axis.</value>\n  </data>\n  <data name=\"ChartAxis_CrossAt\" xml:space=\"preserve\">\n    <value>Value at which to cross the other axis.</value>\n  </data>\n  <data name=\"ChartAxis_Interlaced\" xml:space=\"preserve\">\n    <value>When true strip lines are drawn every other grid line.</value>\n  </data>\n  <data name=\"ChartAxis_LogScale\" xml:space=\"preserve\">\n    <value>Scalar</value>\n  </data>\n  <data name=\"ChartAxis_MajorGridLines\" xml:space=\"preserve\">\n    <value>Major Grid Lines properties</value>\n  </data>\n  <data name=\"ChartAxis_MajorInterval\" xml:space=\"preserve\">\n    <value>Unit for major gridlines and tickmarks; omit for autodivision.</value>\n  </data>\n  <data name=\"ChartAxis_MajorTickMarks\" xml:space=\"preserve\">\n    <value>Major tick marks.</value>\n  </data>\n  <data name=\"ChartAxis_Margin\" xml:space=\"preserve\">\n    <value>Is there axis margin?</value>\n  </data>\n  <data name=\"ChartAxis_Max\" xml:space=\"preserve\">\n    <value>Maximum value for the axis.  When omitted axis autoscales.</value>\n  </data>\n  <data name=\"ChartAxis_Min\" xml:space=\"preserve\">\n    <value>Minimum value for the axis.  When omitted axis autoscales.</value>\n  </data>\n  <data name=\"ChartAxis_MinorGridLines\" xml:space=\"preserve\">\n    <value>Minor Grid Lines properties</value>\n  </data>\n  <data name=\"ChartAxis_MinorInterval\" xml:space=\"preserve\">\n    <value>Unit for minor gridlines and tickmarks; omit for autodivision.</value>\n  </data>\n  <data name=\"ChartAxis_MinorTickMarks\" xml:space=\"preserve\">\n    <value>Minor tick marks.</value>\n  </data>\n  <data name=\"ChartAxis_Padding\" xml:space=\"preserve\">\n    <value>Padding properties of the axis.</value>\n  </data>\n  <data name=\"ChartAxis_Reverse\" xml:space=\"preserve\">\n    <value>Should axis be plotted normally (false) or should the direction be reversed?</value>\n  </data>\n  <data name=\"ChartAxis_Scalar\" xml:space=\"preserve\">\n    <value>Scalar</value>\n  </data>\n  <data name=\"ChartAxis_Title\" xml:space=\"preserve\">\n    <value>Title for the axis</value>\n  </data>\n  <data name=\"ChartAxis_Visible\" xml:space=\"preserve\">\n    <value>Is the axis visible?</value>\n  </data>\n  <data name=\"ChartData\" xml:space=\"preserve\">\n    <value>Properties controlling the display of the chart data.</value>\n  </data>\n  <data name=\"ChartData_DataValue\" xml:space=\"preserve\">\n    <value>Expression that is to be charted.</value>\n  </data>\n  <data name=\"ChartData_DataValue2\" xml:space=\"preserve\">\n    <value>Y Coordinate for Scatter and Bubble charts.</value>\n  </data>\n  <data name=\"ChartData_DataValue3\" xml:space=\"preserve\">\n    <value>Bubble size in Bubble charts.</value>\n  </data>\n  <data name=\"ChartData_LabelAppearance\" xml:space=\"preserve\">\n    <value>Appearance of the label when visible.</value>\n  </data>\n  <data name=\"ChartData_LabelVisible\" xml:space=\"preserve\">\n    <value>Should data label be displayed?</value>\n  </data>\n  <data name=\"ChartGridLines_Color\" xml:space=\"preserve\">\n    <value>Line color</value>\n  </data>\n  <data name=\"ChartGridLines_LineStyle\" xml:space=\"preserve\">\n    <value>Line style: Dotted, Dashed or Solid</value>\n  </data>\n  <data name=\"ChartGridLines_ShowGridLines\" xml:space=\"preserve\">\n    <value>Determines if grid lines are shown.</value>\n  </data>\n  <data name=\"ChartGridLines_Width\" xml:space=\"preserve\">\n    <value>Width of line</value>\n  </data>\n  <data name=\"ChartLegend\" xml:space=\"preserve\">\n    <value>Properties controlling the display of the chart legend.</value>\n  </data>\n  <data name=\"ChartLegend_Appearance\" xml:space=\"preserve\">\n    <value>Font, color, alignment, ... of the legend.</value>\n  </data>\n  <data name=\"ChartLegend_Background\" xml:space=\"preserve\">\n    <value>Background of the legend.</value>\n  </data>\n  <data name=\"ChartLegend_Border\" xml:space=\"preserve\">\n    <value>Border properties of the legend.</value>\n  </data>\n  <data name=\"ChartLegend_InsidePlotArea\" xml:space=\"preserve\">\n    <value>Draw legend inside the plot area when true, otherwise outside.</value>\n  </data>\n  <data name=\"ChartLegend_Layout\" xml:space=\"preserve\">\n    <value>Layout of the legend.</value>\n  </data>\n  <data name=\"ChartLegend_Padding\" xml:space=\"preserve\">\n    <value>Padding properties of the legend.</value>\n  </data>\n  <data name=\"ChartLegend_Position\" xml:space=\"preserve\">\n    <value>Position of the legend.</value>\n  </data>\n  <data name=\"ChartLegend_Visible\" xml:space=\"preserve\">\n    <value>Is the legend visible?</value>\n  </data>\n  <data name=\"ChartTitle\" xml:space=\"preserve\">\n    <value>Properties controlling the display of the chart title.</value>\n  </data>\n  <data name=\"ChartTitle_Appearance\" xml:space=\"preserve\">\n    <value>Font, color, alignment, ... of the caption.</value>\n  </data>\n  <data name=\"ChartTitle_Background\" xml:space=\"preserve\">\n    <value>Background of the caption.</value>\n  </data>\n  <data name=\"ChartTitle_Border\" xml:space=\"preserve\">\n    <value>Border properties of the caption.</value>\n  </data>\n  <data name=\"ChartTitle_Caption\" xml:space=\"preserve\">\n    <value>The text of the title.</value>\n  </data>\n  <data name=\"ChartTitle_Padding\" xml:space=\"preserve\">\n    <value>Padding properties of the caption.</value>\n  </data>\n  <data name=\"Chart_CategoryAxis\" xml:space=\"preserve\">\n    <value>CategoryAxis defines the category (X) axis.</value>\n  </data>\n  <data name=\"Chart_ChartData\" xml:space=\"preserve\">\n    <value>Properties controlling the display of the chart data.</value>\n  </data>\n  <data name=\"Chart_Legend\" xml:space=\"preserve\">\n    <value>Chart Legend.</value>\n  </data>\n  <data name=\"Chart_Palette\" xml:space=\"preserve\">\n    <value>Color palette for the chart.</value>\n  </data>\n  <data name=\"Chart_PointWidth\" xml:space=\"preserve\">\n    <value>Percentage width for bars and columns.</value>\n  </data>\n  <data name=\"Chart_Title\" xml:space=\"preserve\">\n    <value>Chart Title.</value>\n  </data>\n  <data name=\"Chart_Type\" xml:space=\"preserve\">\n    <value>Type of the chart.</value>\n  </data>\n  <data name=\"Chart_ValueAxis\" xml:space=\"preserve\">\n    <value>ValueAxis defines the data (Y) axis.</value>\n  </data>\n  <data name=\"DataRegion_Appearance\" xml:space=\"preserve\">\n    <value>Font, color, alignment, ... of NoRows text.</value>\n  </data>\n  <data name=\"DataRegion_DataSetName\" xml:space=\"preserve\">\n    <value>Specifies which data set to use.</value>\n  </data>\n  <data name=\"DataRegion_Filters\" xml:space=\"preserve\">\n    <value>Filters to apply to each row of data in data region.</value>\n  </data>\n  <data name=\"DataRegion_KeepTogether\" xml:space=\"preserve\">\n    <value>Keep data region on one page if possible.</value>\n  </data>\n  <data name=\"DataRegion_NoRows\" xml:space=\"preserve\">\n    <value>Message to display if no rows available.</value>\n  </data>\n  <data name=\"DataRegion_PageBreakAtEnd\" xml:space=\"preserve\">\n    <value>Cause a page break after rendering.</value>\n  </data>\n  <data name=\"DataRegion_PageBreakAtStart\" xml:space=\"preserve\">\n    <value>Cause a page break before rendering.</value>\n  </data>\n  <data name=\"ImageI_MIMEType\" xml:space=\"preserve\">\n    <value>When Source is Database MIMEType describes the type of image.</value>\n  </data>\n  <data name=\"ImageI_Sizing\" xml:space=\"preserve\">\n    <value>Defines how image is sized when image doesn't match specified size.</value>\n  </data>\n  <data name=\"ImageI_Source\" xml:space=\"preserve\">\n    <value>Image Source:External, Embedded, Database.</value>\n  </data>\n  <data name=\"ImageI_Value\" xml:space=\"preserve\">\n    <value>Value depends upon the source of the image.</value>\n  </data>\n  <data name=\"Image_Image\" xml:space=\"preserve\">\n    <value>The image properties.</value>\n  </data>\n  <data name=\"List_DataInstanceElementOutput\" xml:space=\"preserve\">\n    <value>Determines whether list instances appear in the XML.</value>\n  </data>\n  <data name=\"List_DataInstanceName\" xml:space=\"preserve\">\n    <value>The name to use for the data element for each instance of this list when exporting to XML.</value>\n  </data>\n  <data name=\"List_Grouping\" xml:space=\"preserve\">\n    <value>Grouping data allows each repeated list region to represent a summarization of the rows in the group.</value>\n  </data>\n  <data name=\"List_Sorting\" xml:space=\"preserve\">\n    <value>Sorting controls the order of the repeated list regions.</value>\n  </data>\n  <data name=\"Rectangle_PageBreakAtEnd\" xml:space=\"preserve\">\n    <value>Determines if report will start a new page after the bottom of the rectangle.</value>\n  </data>\n  <data name=\"Rectangle_PageBreakAtStart\" xml:space=\"preserve\">\n    <value>Determines if report will start a new page at the top of the rectangle.</value>\n  </data>\n  <data name=\"Report_Author\" xml:space=\"preserve\">\n    <value>The author of the report</value>\n  </data>\n  <data name=\"Report_BodyColumns\" xml:space=\"preserve\">\n    <value>Number of columns in the body region.</value>\n  </data>\n  <data name=\"Report_BodyColumnSpacing\" xml:space=\"preserve\">\n    <value>Spacing between columns.</value>\n  </data>\n  <data name=\"Report_BodyHeight\" xml:space=\"preserve\">\n    <value>Height of the body region.</value>\n  </data>\n  <data name=\"Report_Code\" xml:space=\"preserve\">\n    <value>Basic functions defined for use in the report.</value>\n  </data>\n  <data name=\"Report_DataElementName\" xml:space=\"preserve\">\n    <value>The top level element name used when rendering XML.</value>\n  </data>\n  <data name=\"Report_DataElementStyle\" xml:space=\"preserve\">\n    <value>Element style is either Attribute or Element.</value>\n  </data>\n  <data name=\"Report_DataSchema\" xml:space=\"preserve\">\n    <value>The schema or namespace to specify when rendering XML.</value>\n  </data>\n  <data name=\"Report_DataTransform\" xml:space=\"preserve\">\n    <value>XSL file to use to transform XML after rendering.</value>\n  </data>\n  <data name=\"Report_Description\" xml:space=\"preserve\">\n    <value>The description of the report</value>\n  </data>\n  <data name=\"Report_Margins\" xml:space=\"preserve\">\n    <value>Page margins for the report.</value>\n  </data>\n  <data name=\"Report_ModulesClasses\" xml:space=\"preserve\">\n    <value>Modules and instances of classes for use in the report.</value>\n  </data>\n  <data name=\"Report_PageFooter\" xml:space=\"preserve\">\n    <value>PageFooter options for the report.</value>\n  </data>\n  <data name=\"Report_PageHeader\" xml:space=\"preserve\">\n    <value>PageHeader options for the report.</value>\n  </data>\n  <data name=\"Report_PageHeight\" xml:space=\"preserve\">\n    <value>The height of the page.</value>\n  </data>\n  <data name=\"Report_PageWidth\" xml:space=\"preserve\">\n    <value>The width of the page.</value>\n  </data>\n  <data name=\"Report_Parameters\" xml:space=\"preserve\">\n    <value>Parameters defined in the report.</value>\n  </data>\n  <data name=\"Report_Width\" xml:space=\"preserve\">\n    <value>The width of the report.</value>\n  </data>\n  <data name=\"Subreport_MergeTransactions\" xml:space=\"preserve\">\n    <value>When true DataSource connections in subreport will reuse parent report connections when possible.</value>\n  </data>\n  <data name=\"Subreport_NoRows\" xml:space=\"preserve\">\n    <value>The name of the subreport either a full path or a relative path.</value>\n  </data>\n  <data name=\"Subreport_Parameters\" xml:space=\"preserve\">\n    <value>The subreport parameter expressions.</value>\n  </data>\n  <data name=\"Subreport_ReportName\" xml:space=\"preserve\">\n    <value>The name of the subreport either a full path or a relative path.</value>\n  </data>\n  <data name=\"Textbox_Appearance\" xml:space=\"preserve\">\n    <value>Font, color, alignment, ... of text.</value>\n  </data>\n  <data name=\"Textbox_CanGrow\" xml:space=\"preserve\">\n    <value>CanGrow indicates the height of the Textbox can increase depending on its contents.</value>\n  </data>\n  <data name=\"Textbox_CanShrink\" xml:space=\"preserve\">\n    <value>CanShrink indicates the height of the Textbox can decrease depending on its contents.</value>\n  </data>\n  <data name=\"Textbox_DataElementStyle\" xml:space=\"preserve\">\n    <value>Specifies whether Textbox renders as an Attribute or an Element.</value>\n  </data>\n  <data name=\"Textbox_HideDuplicates\" xml:space=\"preserve\">\n    <value>To HideDuplicate values provide the scope (dataset or group) over which you want to hide the Textbox.</value>\n  </data>\n  <data name=\"Textbox_Value\" xml:space=\"preserve\">\n    <value>The value of the textbox.</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/RdlProperties/Descriptions.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Appearance_Color\" xml:space=\"preserve\">\n    <value>Цвет текста.</value>\n  </data>\n  <data name=\"Appearance_Direction\" xml:space=\"preserve\">\n    <value>Слева-направо (LTR) или справа-налево (RTL).</value>\n  </data>\n  <data name=\"Appearance_FontFamily\" xml:space=\"preserve\">\n    <value>Название семейства шрифтов. Не все шрифты поддерживаются.</value>\n  </data>\n  <data name=\"Appearance_FontSize\" xml:space=\"preserve\">\n    <value>Влияет на размер текста.</value>\n  </data>\n  <data name=\"Appearance_FontStyle\" xml:space=\"preserve\">\n    <value>Определяет является ли шрифт курсивом.</value>\n  </data>\n  <data name=\"Appearance_FontWeight\" xml:space=\"preserve\">\n    <value>Влияет на толщину шрифта.</value>\n  </data>\n  <data name=\"Appearance_Format\" xml:space=\"preserve\">\n    <value>Текст форматируется в зависимости от типа.</value>\n  </data>\n  <data name=\"Appearance_TextAlign\" xml:space=\"preserve\">\n    <value>Горизонтальное выравнивание</value>\n  </data>\n  <data name=\"Appearance_TextDecoration\" xml:space=\"preserve\">\n    <value>Определяет является ли шрифт подчёркнутым, зачёркнутым или надчёркнутым.</value>\n  </data>\n  <data name=\"Appearance_VerticalAlign\" xml:space=\"preserve\">\n    <value>Вертикальное выравнивание</value>\n  </data>\n  <data name=\"Appearance_WritingMode\" xml:space=\"preserve\">\n    <value>Горизонтально (lr-tb) или вертикально (tb-rl).</value>\n  </data>\n  <data name=\"BackgroundImage_MIMEType\" xml:space=\"preserve\">\n    <value>Когда источником является база данных тип MIME определяет тип изображения.</value>\n  </data>\n  <data name=\"BackgroundImage_Repeat\" xml:space=\"preserve\">\n    <value>Повторение фонового изображения, чтобы заполнить область.</value>\n  </data>\n  <data name=\"BackgroundImage_Source\" xml:space=\"preserve\">\n    <value>Источник фонового изображения: Отсутствует, Внешний, Встроенный, База данных.</value>\n  </data>\n  <data name=\"BackgroundImage_Value\" xml:space=\"preserve\">\n    <value>Значение зависит от источника изображения.</value>\n  </data>\n  <data name=\"Background_Color\" xml:space=\"preserve\">\n    <value>Цвет фона.</value>\n  </data>\n  <data name=\"Background_EndColor\" xml:space=\"preserve\">\n    <value>Когда выбран тип градиента.</value>\n  </data>\n  <data name=\"Background_GradientType\" xml:space=\"preserve\">\n    <value>Тип градиента фона.</value>\n  </data>\n  <data name=\"Background_Image\" xml:space=\"preserve\">\n    <value>Изображение, которое размещается на фоне.</value>\n  </data>\n  <data name=\"Base_Action\" xml:space=\"preserve\">\n    <value>Гиперссылка, закладка или детализация действия для элемента отчёта.</value>\n  </data>\n  <data name=\"Base_Background\" xml:space=\"preserve\">\n    <value>Фон.</value>\n  </data>\n  <data name=\"Base_Bookmark\" xml:space=\"preserve\">\n    <value>В PDF-файлах, закладки создаются для каждого экземпляра элемента отчета. Например, поставив закладку на элемент отчета в заголовке группы будет генерироваться список групп в отчете.</value>\n  </data>\n  <data name=\"Base_Border\" xml:space=\"preserve\">\n    <value>Определяет границу элемента отчёта.</value>\n  </data>\n  <data name=\"Base_ColumnSpan\" xml:space=\"preserve\">\n    <value>Элемент отчёта может охватывать несколько столбцов.</value>\n  </data>\n  <data name=\"Base_DataElementName\" xml:space=\"preserve\">\n    <value>Имя, которое используется для элемента или атрибута при экспорте в XML.</value>\n  </data>\n  <data name=\"Base_DataElementOutput\" xml:space=\"preserve\">\n    <value>При создании XML определяет, как элемент выводится в XML.</value>\n  </data>\n  <data name=\"Base_Location\" xml:space=\"preserve\">\n    <value>Положение элемента отчёта.</value>\n  </data>\n  <data name=\"Base_Matrix\" xml:space=\"preserve\">\n    <value>Свойства элемента в матричном виде.</value>\n  </data>\n  <data name=\"Base_Name\" xml:space=\"preserve\">\n    <value>Уникальное имя элемента отчёта.</value>\n  </data>\n  <data name=\"Base_Padding\" xml:space=\"preserve\">\n    <value>Отступ от границы.</value>\n  </data>\n  <data name=\"Base_Size\" xml:space=\"preserve\">\n    <value>Высота и ширина элемента отчёта.</value>\n  </data>\n  <data name=\"Base_Table\" xml:space=\"preserve\">\n    <value>Свойства элемента в табличном виде.</value>\n  </data>\n  <data name=\"Base_ToolTip\" xml:space=\"preserve\">\n    <value>Подсказка - это текст, который можно использовать с помощью средства визуализации. Например, обозреватель PDF использует подсказку для вывода указанного текста при наведении курсора мыши на элемент отчета.</value>\n  </data>\n  <data name=\"Base_Visibility\" xml:space=\"preserve\">\n    <value>Определяет видимость элемента.</value>\n  </data>\n  <data name=\"Base_ZIndex\" xml:space=\"preserve\">\n    <value>Порядок элемента отчёта.</value>\n  </data>\n  <data name=\"ChartAxis\" xml:space=\"preserve\">\n    <value>Свойства, управляющие отображением оси.</value>\n  </data>\n  <data name=\"ChartAxis_Appearance\" xml:space=\"preserve\">\n    <value>Шрифт, цвет, выравнивание, ... оси.</value>\n  </data>\n  <data name=\"ChartAxis_Background\" xml:space=\"preserve\">\n    <value>Фон оси.</value>\n  </data>\n  <data name=\"ChartAxis_Border\" xml:space=\"preserve\">\n    <value>Свойства границы оси</value>\n  </data>\n  <data name=\"ChartAxis_CrossAt\" xml:space=\"preserve\">\n    <value>Значение, при котором пересекать другую ось.</value>\n  </data>\n  <data name=\"ChartAxis_Interlaced\" xml:space=\"preserve\">\n    <value>Отрисовывать полосы на каждой нечётной линии?</value>\n  </data>\n  <data name=\"ChartAxis_LogScale\" xml:space=\"preserve\">\n    <value>Логарифмическая шкала</value>\n  </data>\n  <data name=\"ChartAxis_MajorGridLines\" xml:space=\"preserve\">\n    <value>Свойства основный линий оси.</value>\n  </data>\n  <data name=\"ChartAxis_MajorInterval\" xml:space=\"preserve\">\n    <value>Свойства основных линий сетки и делений; пропустить для автоматического деления.</value>\n  </data>\n  <data name=\"ChartAxis_MajorTickMarks\" xml:space=\"preserve\">\n    <value>Основные деления.</value>\n  </data>\n  <data name=\"ChartAxis_Margin\" xml:space=\"preserve\">\n    <value>Отступ оси.</value>\n  </data>\n  <data name=\"ChartAxis_Max\" xml:space=\"preserve\">\n    <value>Максимальное значение для оси. Пропустить для автомасштабирования.</value>\n  </data>\n  <data name=\"ChartAxis_Min\" xml:space=\"preserve\">\n    <value>Минимальное значение для оси. Пропустить для автомасштабирования.</value>\n  </data>\n  <data name=\"ChartAxis_MinorGridLines\" xml:space=\"preserve\">\n    <value>Свойства дополнительный линий оси.</value>\n  </data>\n  <data name=\"ChartAxis_MinorInterval\" xml:space=\"preserve\">\n    <value>Свойства дополнительных линий сетки и делений; пропустить для автоматического деления.</value>\n  </data>\n  <data name=\"ChartAxis_MinorTickMarks\" xml:space=\"preserve\">\n    <value>Дополнительные деления.</value>\n  </data>\n  <data name=\"ChartAxis_Padding\" xml:space=\"preserve\">\n    <value>Свойства отступа от границы.</value>\n  </data>\n  <data name=\"ChartAxis_Reverse\" xml:space=\"preserve\">\n    <value>Отрисовывать ось в обратном направлении?</value>\n  </data>\n  <data name=\"ChartAxis_Scalar\" xml:space=\"preserve\">\n    <value>Скалярная</value>\n  </data>\n  <data name=\"ChartAxis_Title\" xml:space=\"preserve\">\n    <value>Заголовок оси</value>\n  </data>\n  <data name=\"ChartAxis_Visible\" xml:space=\"preserve\">\n    <value>Ось видимая?</value>\n  </data>\n  <data name=\"ChartData\" xml:space=\"preserve\">\n    <value>Свойства влияющие на отображение данных диаграммы.</value>\n  </data>\n  <data name=\"ChartData_DataValue\" xml:space=\"preserve\">\n    <value>Выражение, которое должно быть отображено.</value>\n  </data>\n  <data name=\"ChartData_DataValue2\" xml:space=\"preserve\">\n    <value>Y-координата для точечной и пузырьковой диаграмм.</value>\n  </data>\n  <data name=\"ChartData_DataValue3\" xml:space=\"preserve\">\n    <value>Размер пузырька в пузырьковой диаграмме.</value>\n  </data>\n  <data name=\"ChartData_LabelAppearance\" xml:space=\"preserve\">\n    <value>Внешний вид метки, когда она видимая.</value>\n  </data>\n  <data name=\"ChartData_LabelVisible\" xml:space=\"preserve\">\n    <value>Должна ли метка отображаться?</value>\n  </data>\n  <data name=\"ChartGridLines_Color\" xml:space=\"preserve\">\n    <value>Цвет линии.</value>\n  </data>\n  <data name=\"ChartGridLines_LineStyle\" xml:space=\"preserve\">\n    <value>Стиль линии: Точечная, Штриховая, Сплошная.</value>\n  </data>\n  <data name=\"ChartGridLines_ShowGridLines\" xml:space=\"preserve\">\n    <value>Должны ли линии сетки отображаться?</value>\n  </data>\n  <data name=\"ChartGridLines_Width\" xml:space=\"preserve\">\n    <value>Ширина линии.</value>\n  </data>\n  <data name=\"ChartLegend\" xml:space=\"preserve\">\n    <value>Свойства влияющие на отображение легенды диаграммы.</value>\n  </data>\n  <data name=\"ChartLegend_Appearance\" xml:space=\"preserve\">\n    <value>Шрифт, цвет, выравнивание, ... легенды.</value>\n  </data>\n  <data name=\"ChartLegend_Background\" xml:space=\"preserve\">\n    <value>Фон легенды.</value>\n  </data>\n  <data name=\"ChartLegend_Border\" xml:space=\"preserve\">\n    <value>Свойства границы легенды.</value>\n  </data>\n  <data name=\"ChartLegend_InsidePlotArea\" xml:space=\"preserve\">\n    <value>Рисовать легенду внутри участка? (иначе снаружи)</value>\n  </data>\n  <data name=\"ChartLegend_Layout\" xml:space=\"preserve\">\n    <value>Макет легенды.</value>\n  </data>\n  <data name=\"ChartLegend_Padding\" xml:space=\"preserve\">\n    <value>Отступ от границы легенды.</value>\n  </data>\n  <data name=\"ChartLegend_Position\" xml:space=\"preserve\">\n    <value>Позиция легенды.</value>\n  </data>\n  <data name=\"ChartLegend_Visible\" xml:space=\"preserve\">\n    <value>Легенду должно быть видно?</value>\n  </data>\n  <data name=\"ChartTitle\" xml:space=\"preserve\">\n    <value>Свойства, влияющие на отображение заголовка диаграммы.</value>\n  </data>\n  <data name=\"ChartTitle_Appearance\" xml:space=\"preserve\">\n    <value>Шрифт, цвет, выравнивание, ... заголовка.</value>\n  </data>\n  <data name=\"ChartTitle_Background\" xml:space=\"preserve\">\n    <value>Фон заголовка.</value>\n  </data>\n  <data name=\"ChartTitle_Border\" xml:space=\"preserve\">\n    <value>Свойства границы заголовка.</value>\n  </data>\n  <data name=\"ChartTitle_Caption\" xml:space=\"preserve\">\n    <value>Текст заголовка.</value>\n  </data>\n  <data name=\"ChartTitle_Padding\" xml:space=\"preserve\">\n    <value>Отступ от границы заголовка.</value>\n  </data>\n  <data name=\"Chart_CategoryAxis\" xml:space=\"preserve\">\n    <value>Ось X.</value>\n  </data>\n  <data name=\"Chart_ChartData\" xml:space=\"preserve\">\n    <value>Свойства, управляющие отображением данных диаграммы.</value>\n  </data>\n  <data name=\"Chart_Legend\" xml:space=\"preserve\">\n    <value>Легенда диаграммы.</value>\n  </data>\n  <data name=\"Chart_Palette\" xml:space=\"preserve\">\n    <value>Цветовая палитра для диаграммы.</value>\n  </data>\n  <data name=\"Chart_PointWidth\" xml:space=\"preserve\">\n    <value>Ширина в процентах для баров и столбцов.</value>\n  </data>\n  <data name=\"Chart_Title\" xml:space=\"preserve\">\n    <value>Заголовок диаграммы.</value>\n  </data>\n  <data name=\"Chart_Type\" xml:space=\"preserve\">\n    <value>Тип диаграммы.</value>\n  </data>\n  <data name=\"Chart_ValueAxis\" xml:space=\"preserve\">\n    <value>Ось Y.</value>\n  </data>\n  <data name=\"DataRegion_Appearance\" xml:space=\"preserve\">\n    <value>Шрифт, цвет, выравнивание, ... сообщения, когда нет строк.</value>\n  </data>\n  <data name=\"DataRegion_DataSetName\" xml:space=\"preserve\">\n    <value>Название набора данных, для использования.</value>\n  </data>\n  <data name=\"DataRegion_Filters\" xml:space=\"preserve\">\n    <value>Фильтры, применяемы к каждой строке в области данных.</value>\n  </data>\n  <data name=\"DataRegion_KeepTogether\" xml:space=\"preserve\">\n    <value>Хранить область данных на одной странице (по возможности).</value>\n  </data>\n  <data name=\"DataRegion_NoRows\" xml:space=\"preserve\">\n    <value>Сообщение, отображаемое, когда нет строк.</value>\n  </data>\n  <data name=\"DataRegion_PageBreakAtEnd\" xml:space=\"preserve\">\n    <value>Разрывать страницу после области?</value>\n  </data>\n  <data name=\"DataRegion_PageBreakAtStart\" xml:space=\"preserve\">\n    <value>Разрывать страницы перед областью?</value>\n  </data>\n  <data name=\"ImageI_MIMEType\" xml:space=\"preserve\">\n    <value>Когда источником является база данных  Тип MIME описывает тип изображения.</value>\n  </data>\n  <data name=\"ImageI_Sizing\" xml:space=\"preserve\">\n    <value>Определяет как изображение масштабируется, когда размер изображения не совпадает с указанным размером.</value>\n  </data>\n  <data name=\"ImageI_Source\" xml:space=\"preserve\">\n    <value>Источник изображения: Внешний, Встроенный, База данных.</value>\n  </data>\n  <data name=\"ImageI_Value\" xml:space=\"preserve\">\n    <value>Значение зависит от источника изображения.</value>\n  </data>\n  <data name=\"Image_Image\" xml:space=\"preserve\">\n    <value>Свойства изображения.</value>\n  </data>\n  <data name=\"List_DataInstanceElementOutput\" xml:space=\"preserve\">\n    <value>Определяет появляются ли экземпляры списка в XML.</value>\n  </data>\n  <data name=\"List_DataInstanceName\" xml:space=\"preserve\">\n    <value>Название, которое используется для элемента данных для каждого экземпляра этого списка при экспорте в XML.</value>\n  </data>\n  <data name=\"List_Grouping\" xml:space=\"preserve\">\n    <value>Группировка позволяет суммировать строки.</value>\n  </data>\n  <data name=\"List_Sorting\" xml:space=\"preserve\">\n    <value>Сортировка влияет на порядок элементов.</value>\n  </data>\n  <data name=\"Rectangle_PageBreakAtEnd\" xml:space=\"preserve\">\n    <value>Разрывать страницу после нижней части прямоугольника?</value>\n  </data>\n  <data name=\"Rectangle_PageBreakAtStart\" xml:space=\"preserve\">\n    <value>Разрывать страницу перед верхней частью прямоугольника?</value>\n  </data>\n  <data name=\"Report_Author\" xml:space=\"preserve\">\n    <value>Автор отчёта.</value>\n  </data>\n  <data name=\"Report_BodyColumns\" xml:space=\"preserve\">\n    <value>Количество столбцов в области данных.</value>\n  </data>\n  <data name=\"Report_BodyColumnSpacing\" xml:space=\"preserve\">\n    <value>Растояние между столбцами.</value>\n  </data>\n  <data name=\"Report_BodyHeight\" xml:space=\"preserve\">\n    <value>Высота области данных.</value>\n  </data>\n  <data name=\"Report_Code\" xml:space=\"preserve\">\n    <value>Базовые функции, определённые для использования в отчёте.</value>\n  </data>\n  <data name=\"Report_DataElementName\" xml:space=\"preserve\">\n    <value>Название элемента верхнего уровня для создания XML.</value>\n  </data>\n  <data name=\"Report_DataElementStyle\" xml:space=\"preserve\">\n    <value>Стиль элемента: Атрибут или Элемент.</value>\n  </data>\n  <data name=\"Report_DataSchema\" xml:space=\"preserve\">\n    <value>Схема или пространство имён для создания XML.</value>\n  </data>\n  <data name=\"Report_DataTransform\" xml:space=\"preserve\">\n    <value>XSL-файл для преобразования в XML после отрисовки.</value>\n  </data>\n  <data name=\"Report_Description\" xml:space=\"preserve\">\n    <value>Описание отчёта.</value>\n  </data>\n  <data name=\"Report_Margins\" xml:space=\"preserve\">\n    <value>Отступы страницы.</value>\n  </data>\n  <data name=\"Report_ModulesClasses\" xml:space=\"preserve\">\n    <value>Модули и экземпляры классов для использования в отчёте.</value>\n  </data>\n  <data name=\"Report_PageFooter\" xml:space=\"preserve\">\n    <value>Свойства нижнего колонтитула.</value>\n  </data>\n  <data name=\"Report_PageHeader\" xml:space=\"preserve\">\n    <value>Свойства верхнего колонтитула.</value>\n  </data>\n  <data name=\"Report_PageHeight\" xml:space=\"preserve\">\n    <value>Высота страницы.</value>\n  </data>\n  <data name=\"Report_PageWidth\" xml:space=\"preserve\">\n    <value>Ширина страницы.</value>\n  </data>\n  <data name=\"Report_Parameters\" xml:space=\"preserve\">\n    <value>Параметры, определённые в отчёте.</value>\n  </data>\n  <data name=\"Report_Width\" xml:space=\"preserve\">\n    <value>Ширина отчёта.</value>\n  </data>\n  <data name=\"Subreport_MergeTransactions\" xml:space=\"preserve\">\n    <value>Использовать в подотчёте соединения главного отчёта? (по возможности)</value>\n  </data>\n  <data name=\"Subreport_NoRows\" xml:space=\"preserve\">\n    <value>Сообщение, когда нет строк в отчёте.</value>\n  </data>\n  <data name=\"Subreport_Parameters\" xml:space=\"preserve\">\n    <value>Параметры подотчёта.</value>\n  </data>\n  <data name=\"Subreport_ReportName\" xml:space=\"preserve\">\n    <value>Название подотчёта, полный путь или относительный путь.</value>\n  </data>\n  <data name=\"Textbox_Appearance\" xml:space=\"preserve\">\n    <value>Шрифт, цвет, выравнивание, ... текста.</value>\n  </data>\n  <data name=\"Textbox_CanGrow\" xml:space=\"preserve\">\n    <value>Может ли высота текстового поля увеличиваться в зависимости от содержания?</value>\n  </data>\n  <data name=\"Textbox_CanShrink\" xml:space=\"preserve\">\n    <value>Может ли высота текстового поля уменьшаться в зависимости от содержания?</value>\n  </data>\n  <data name=\"Textbox_DataElementStyle\" xml:space=\"preserve\">\n    <value>Выводить текстовое поле как Атрибут или Элемент?</value>\n  </data>\n  <data name=\"Textbox_HideDuplicates\" xml:space=\"preserve\">\n    <value>Укажите область (набор данных или группа), в которой нужно скрывать повторяющиеся значения текстового поля.</value>\n  </data>\n  <data name=\"Textbox_Value\" xml:space=\"preserve\">\n    <value>Значение текстового поля.</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/RdlProperties/DisplayNames.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Majorsilence.Reporting.RdlDesign.RdlProperties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class DisplayNames {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal DisplayNames() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Majorsilence.Reporting.RdlDesign.RdlProperties.DisplayNames\", typeof(DisplayNames).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Color.\n        /// </summary>\n        internal static string Appearance_Color {\n            get {\n                return ResourceManager.GetString(\"Appearance_Color\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Direction.\n        /// </summary>\n        internal static string Appearance_Direction {\n            get {\n                return ResourceManager.GetString(\"Appearance_Direction\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to FontFamily.\n        /// </summary>\n        internal static string Appearance_FontFamily {\n            get {\n                return ResourceManager.GetString(\"Appearance_FontFamily\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to FontSize.\n        /// </summary>\n        internal static string Appearance_FontSize {\n            get {\n                return ResourceManager.GetString(\"Appearance_FontSize\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to FontStyle.\n        /// </summary>\n        internal static string Appearance_FontStyle {\n            get {\n                return ResourceManager.GetString(\"Appearance_FontStyle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to FontWeight.\n        /// </summary>\n        internal static string Appearance_FontWeight {\n            get {\n                return ResourceManager.GetString(\"Appearance_FontWeight\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Format.\n        /// </summary>\n        internal static string Appearance_Format {\n            get {\n                return ResourceManager.GetString(\"Appearance_Format\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to TextAlign.\n        /// </summary>\n        internal static string Appearance_TextAlign {\n            get {\n                return ResourceManager.GetString(\"Appearance_TextAlign\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to TextDecoration.\n        /// </summary>\n        internal static string Appearance_TextDecoration {\n            get {\n                return ResourceManager.GetString(\"Appearance_TextDecoration\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to VerticalAlign.\n        /// </summary>\n        internal static string Appearance_VerticalAlign {\n            get {\n                return ResourceManager.GetString(\"Appearance_VerticalAlign\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to WritingMode.\n        /// </summary>\n        internal static string Appearance_WritingMode {\n            get {\n                return ResourceManager.GetString(\"Appearance_WritingMode\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Color.\n        /// </summary>\n        internal static string Background_Color {\n            get {\n                return ResourceManager.GetString(\"Background_Color\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to EndColor.\n        /// </summary>\n        internal static string Background_EndColor {\n            get {\n                return ResourceManager.GetString(\"Background_EndColor\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to GradientType.\n        /// </summary>\n        internal static string Background_GradientType {\n            get {\n                return ResourceManager.GetString(\"Background_GradientType\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Image.\n        /// </summary>\n        internal static string Background_Image {\n            get {\n                return ResourceManager.GetString(\"Background_Image\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to MIMEType.\n        /// </summary>\n        internal static string BackgroundImage_MIMEType {\n            get {\n                return ResourceManager.GetString(\"BackgroundImage_MIMEType\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Repeat.\n        /// </summary>\n        internal static string BackgroundImage_Repeat {\n            get {\n                return ResourceManager.GetString(\"BackgroundImage_Repeat\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Source.\n        /// </summary>\n        internal static string BackgroundImage_Source {\n            get {\n                return ResourceManager.GetString(\"BackgroundImage_Source\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Value.\n        /// </summary>\n        internal static string BackgroundImage_Value {\n            get {\n                return ResourceManager.GetString(\"BackgroundImage_Value\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Action.\n        /// </summary>\n        internal static string Base_Action {\n            get {\n                return ResourceManager.GetString(\"Base_Action\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Background.\n        /// </summary>\n        internal static string Base_Background {\n            get {\n                return ResourceManager.GetString(\"Base_Background\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Bookmark.\n        /// </summary>\n        internal static string Base_Bookmark {\n            get {\n                return ResourceManager.GetString(\"Base_Bookmark\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Border.\n        /// </summary>\n        internal static string Base_Border {\n            get {\n                return ResourceManager.GetString(\"Base_Border\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to ColumnSpan.\n        /// </summary>\n        internal static string Base_ColumnSpan {\n            get {\n                return ResourceManager.GetString(\"Base_ColumnSpan\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DataElementName.\n        /// </summary>\n        internal static string Base_DataElementName {\n            get {\n                return ResourceManager.GetString(\"Base_DataElementName\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DataElementOutput.\n        /// </summary>\n        internal static string Base_DataElementOutput {\n            get {\n                return ResourceManager.GetString(\"Base_DataElementOutput\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Location.\n        /// </summary>\n        internal static string Base_Location {\n            get {\n                return ResourceManager.GetString(\"Base_Location\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Matrix.\n        /// </summary>\n        internal static string Base_Matrix {\n            get {\n                return ResourceManager.GetString(\"Base_Matrix\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name.\n        /// </summary>\n        internal static string Base_Name {\n            get {\n                return ResourceManager.GetString(\"Base_Name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Padding.\n        /// </summary>\n        internal static string Base_Padding {\n            get {\n                return ResourceManager.GetString(\"Base_Padding\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Size.\n        /// </summary>\n        internal static string Base_Size {\n            get {\n                return ResourceManager.GetString(\"Base_Size\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Table.\n        /// </summary>\n        internal static string Base_Table {\n            get {\n                return ResourceManager.GetString(\"Base_Table\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to ToolTip.\n        /// </summary>\n        internal static string Base_ToolTip {\n            get {\n                return ResourceManager.GetString(\"Base_ToolTip\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Visibility.\n        /// </summary>\n        internal static string Base_Visibility {\n            get {\n                return ResourceManager.GetString(\"Base_Visibility\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to ZIndex.\n        /// </summary>\n        internal static string Base_ZIndex {\n            get {\n                return ResourceManager.GetString(\"Base_ZIndex\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to CategoryAxis.\n        /// </summary>\n        internal static string Chart_CategoryAxis {\n            get {\n                return ResourceManager.GetString(\"Chart_CategoryAxis\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to ChartData.\n        /// </summary>\n        internal static string Chart_ChartData {\n            get {\n                return ResourceManager.GetString(\"Chart_ChartData\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Legend.\n        /// </summary>\n        internal static string Chart_Legend {\n            get {\n                return ResourceManager.GetString(\"Chart_Legend\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Palette.\n        /// </summary>\n        internal static string Chart_Palette {\n            get {\n                return ResourceManager.GetString(\"Chart_Palette\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to PointWidth.\n        /// </summary>\n        internal static string Chart_PointWidth {\n            get {\n                return ResourceManager.GetString(\"Chart_PointWidth\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Title.\n        /// </summary>\n        internal static string Chart_Title {\n            get {\n                return ResourceManager.GetString(\"Chart_Title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Type.\n        /// </summary>\n        internal static string Chart_Type {\n            get {\n                return ResourceManager.GetString(\"Chart_Type\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to ValueAxis.\n        /// </summary>\n        internal static string Chart_ValueAxis {\n            get {\n                return ResourceManager.GetString(\"Chart_ValueAxis\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Appearance.\n        /// </summary>\n        internal static string ChartAxis_Appearance {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Appearance\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Background.\n        /// </summary>\n        internal static string ChartAxis_Background {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Background\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Border.\n        /// </summary>\n        internal static string ChartAxis_Border {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Border\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to CrossAt.\n        /// </summary>\n        internal static string ChartAxis_CrossAt {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_CrossAt\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Interlaced.\n        /// </summary>\n        internal static string ChartAxis_Interlaced {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Interlaced\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to LogScale.\n        /// </summary>\n        internal static string ChartAxis_LogScale {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_LogScale\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to MajorGridLines.\n        /// </summary>\n        internal static string ChartAxis_MajorGridLines {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_MajorGridLines\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to MajorInterval.\n        /// </summary>\n        internal static string ChartAxis_MajorInterval {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_MajorInterval\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to MajorTickMarks.\n        /// </summary>\n        internal static string ChartAxis_MajorTickMarks {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_MajorTickMarks\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Margin.\n        /// </summary>\n        internal static string ChartAxis_Margin {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Margin\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Max.\n        /// </summary>\n        internal static string ChartAxis_Max {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Max\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Min.\n        /// </summary>\n        internal static string ChartAxis_Min {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Min\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to MinorGridLines.\n        /// </summary>\n        internal static string ChartAxis_MinorGridLines {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_MinorGridLines\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to MinorInterval.\n        /// </summary>\n        internal static string ChartAxis_MinorInterval {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_MinorInterval\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to MinorTickMarks.\n        /// </summary>\n        internal static string ChartAxis_MinorTickMarks {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_MinorTickMarks\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Padding.\n        /// </summary>\n        internal static string ChartAxis_Padding {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Padding\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Reverse.\n        /// </summary>\n        internal static string ChartAxis_Reverse {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Reverse\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Scalar.\n        /// </summary>\n        internal static string ChartAxis_Scalar {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Scalar\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Title.\n        /// </summary>\n        internal static string ChartAxis_Title {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Visible.\n        /// </summary>\n        internal static string ChartAxis_Visible {\n            get {\n                return ResourceManager.GetString(\"ChartAxis_Visible\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DataValue.\n        /// </summary>\n        internal static string ChartData_DataValue {\n            get {\n                return ResourceManager.GetString(\"ChartData_DataValue\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DataValue2.\n        /// </summary>\n        internal static string ChartData_DataValue2 {\n            get {\n                return ResourceManager.GetString(\"ChartData_DataValue2\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DataValue3.\n        /// </summary>\n        internal static string ChartData_DataValue3 {\n            get {\n                return ResourceManager.GetString(\"ChartData_DataValue3\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to LabelAppearance.\n        /// </summary>\n        internal static string ChartData_LabelAppearance {\n            get {\n                return ResourceManager.GetString(\"ChartData_LabelAppearance\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to LabelVisible.\n        /// </summary>\n        internal static string ChartData_LabelVisible {\n            get {\n                return ResourceManager.GetString(\"ChartData_LabelVisible\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Color.\n        /// </summary>\n        internal static string ChartGridLines_Color {\n            get {\n                return ResourceManager.GetString(\"ChartGridLines_Color\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to LineStyle.\n        /// </summary>\n        internal static string ChartGridLines_LineStyle {\n            get {\n                return ResourceManager.GetString(\"ChartGridLines_LineStyle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to ShowGridLines.\n        /// </summary>\n        internal static string ChartGridLines_ShowGridLines {\n            get {\n                return ResourceManager.GetString(\"ChartGridLines_ShowGridLines\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Width.\n        /// </summary>\n        internal static string ChartGridLines_Width {\n            get {\n                return ResourceManager.GetString(\"ChartGridLines_Width\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Appearance.\n        /// </summary>\n        internal static string ChartLegend_Appearance {\n            get {\n                return ResourceManager.GetString(\"ChartLegend_Appearance\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Background.\n        /// </summary>\n        internal static string ChartLegend_Background {\n            get {\n                return ResourceManager.GetString(\"ChartLegend_Background\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Border.\n        /// </summary>\n        internal static string ChartLegend_Border {\n            get {\n                return ResourceManager.GetString(\"ChartLegend_Border\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to InsidePlotArea.\n        /// </summary>\n        internal static string ChartLegend_InsidePlotArea {\n            get {\n                return ResourceManager.GetString(\"ChartLegend_InsidePlotArea\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Layout.\n        /// </summary>\n        internal static string ChartLegend_Layout {\n            get {\n                return ResourceManager.GetString(\"ChartLegend_Layout\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Padding.\n        /// </summary>\n        internal static string ChartLegend_Padding {\n            get {\n                return ResourceManager.GetString(\"ChartLegend_Padding\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Position.\n        /// </summary>\n        internal static string ChartLegend_Position {\n            get {\n                return ResourceManager.GetString(\"ChartLegend_Position\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Visible.\n        /// </summary>\n        internal static string ChartLegend_Visible {\n            get {\n                return ResourceManager.GetString(\"ChartLegend_Visible\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Appearance.\n        /// </summary>\n        internal static string ChartTitle_Appearance {\n            get {\n                return ResourceManager.GetString(\"ChartTitle_Appearance\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Background.\n        /// </summary>\n        internal static string ChartTitle_Background {\n            get {\n                return ResourceManager.GetString(\"ChartTitle_Background\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Border.\n        /// </summary>\n        internal static string ChartTitle_Border {\n            get {\n                return ResourceManager.GetString(\"ChartTitle_Border\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Caption.\n        /// </summary>\n        internal static string ChartTitle_Caption {\n            get {\n                return ResourceManager.GetString(\"ChartTitle_Caption\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Padding.\n        /// </summary>\n        internal static string ChartTitle_Padding {\n            get {\n                return ResourceManager.GetString(\"ChartTitle_Padding\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Appearance.\n        /// </summary>\n        internal static string DataRegion_Appearance {\n            get {\n                return ResourceManager.GetString(\"DataRegion_Appearance\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DataSetName.\n        /// </summary>\n        internal static string DataRegion_DataSetName {\n            get {\n                return ResourceManager.GetString(\"DataRegion_DataSetName\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Filters.\n        /// </summary>\n        internal static string DataRegion_Filters {\n            get {\n                return ResourceManager.GetString(\"DataRegion_Filters\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to KeepTogether.\n        /// </summary>\n        internal static string DataRegion_KeepTogether {\n            get {\n                return ResourceManager.GetString(\"DataRegion_KeepTogether\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to NoRows.\n        /// </summary>\n        internal static string DataRegion_NoRows {\n            get {\n                return ResourceManager.GetString(\"DataRegion_NoRows\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to PageBreakAtEnd.\n        /// </summary>\n        internal static string DataRegion_PageBreakAtEnd {\n            get {\n                return ResourceManager.GetString(\"DataRegion_PageBreakAtEnd\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to PageBreakAtStart.\n        /// </summary>\n        internal static string DataRegion_PageBreakAtStart {\n            get {\n                return ResourceManager.GetString(\"DataRegion_PageBreakAtStart\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Image.\n        /// </summary>\n        internal static string Image_Image {\n            get {\n                return ResourceManager.GetString(\"Image_Image\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to MIMEType.\n        /// </summary>\n        internal static string ImageI_MIMEType {\n            get {\n                return ResourceManager.GetString(\"ImageI_MIMEType\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Sizing.\n        /// </summary>\n        internal static string ImageI_Sizing {\n            get {\n                return ResourceManager.GetString(\"ImageI_Sizing\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Source.\n        /// </summary>\n        internal static string ImageI_Source {\n            get {\n                return ResourceManager.GetString(\"ImageI_Source\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Value.\n        /// </summary>\n        internal static string ImageI_Value {\n            get {\n                return ResourceManager.GetString(\"ImageI_Value\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DataInstanceElementOutput.\n        /// </summary>\n        internal static string List_DataInstanceElementOutput {\n            get {\n                return ResourceManager.GetString(\"List_DataInstanceElementOutput\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DataInstanceName.\n        /// </summary>\n        internal static string List_DataInstanceName {\n            get {\n                return ResourceManager.GetString(\"List_DataInstanceName\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Grouping.\n        /// </summary>\n        internal static string List_Grouping {\n            get {\n                return ResourceManager.GetString(\"List_Grouping\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Sorting.\n        /// </summary>\n        internal static string List_Sorting {\n            get {\n                return ResourceManager.GetString(\"List_Sorting\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Left.\n        /// </summary>\n        internal static string Location_Left {\n            get {\n                return ResourceManager.GetString(\"Location_Left\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Top.\n        /// </summary>\n        internal static string Location_Top {\n            get {\n                return ResourceManager.GetString(\"Location_Top\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Bottom.\n        /// </summary>\n        internal static string Margin_Bottom {\n            get {\n                return ResourceManager.GetString(\"Margin_Bottom\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Left.\n        /// </summary>\n        internal static string Margin_Left {\n            get {\n                return ResourceManager.GetString(\"Margin_Left\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Right.\n        /// </summary>\n        internal static string Margin_Right {\n            get {\n                return ResourceManager.GetString(\"Margin_Right\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Top.\n        /// </summary>\n        internal static string Margin_Top {\n            get {\n                return ResourceManager.GetString(\"Margin_Top\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Bottom.\n        /// </summary>\n        internal static string Padding_Bottom {\n            get {\n                return ResourceManager.GetString(\"Padding_Bottom\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Left.\n        /// </summary>\n        internal static string Padding_Left {\n            get {\n                return ResourceManager.GetString(\"Padding_Left\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Right.\n        /// </summary>\n        internal static string Padding_Right {\n            get {\n                return ResourceManager.GetString(\"Padding_Right\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Top.\n        /// </summary>\n        internal static string Padding_Top {\n            get {\n                return ResourceManager.GetString(\"Padding_Top\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Height.\n        /// </summary>\n        internal static string PrintFirstLast_Height {\n            get {\n                return ResourceManager.GetString(\"PrintFirstLast_Height\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to PrintOnFirstPage.\n        /// </summary>\n        internal static string PrintFirstLast_PrintOnFirstPage {\n            get {\n                return ResourceManager.GetString(\"PrintFirstLast_PrintOnFirstPage\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to PrintOnLastPage.\n        /// </summary>\n        internal static string PrintFirstLast_PrintOnLastPage {\n            get {\n                return ResourceManager.GetString(\"PrintFirstLast_PrintOnLastPage\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to PageBreakAtEnd.\n        /// </summary>\n        internal static string Rectangle_PageBreakAtEnd {\n            get {\n                return ResourceManager.GetString(\"Rectangle_PageBreakAtEnd\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to PageBreakAtStart.\n        /// </summary>\n        internal static string Rectangle_PageBreakAtStart {\n            get {\n                return ResourceManager.GetString(\"Rectangle_PageBreakAtStart\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Author.\n        /// </summary>\n        internal static string Report_Author {\n            get {\n                return ResourceManager.GetString(\"Report_Author\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to BodyColumns.\n        /// </summary>\n        internal static string Report_BodyColumns {\n            get {\n                return ResourceManager.GetString(\"Report_BodyColumns\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to BodyColumnSpacing.\n        /// </summary>\n        internal static string Report_BodyColumnSpacing {\n            get {\n                return ResourceManager.GetString(\"Report_BodyColumnSpacing\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to BodyHeight.\n        /// </summary>\n        internal static string Report_BodyHeight {\n            get {\n                return ResourceManager.GetString(\"Report_BodyHeight\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Code.\n        /// </summary>\n        internal static string Report_Code {\n            get {\n                return ResourceManager.GetString(\"Report_Code\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DataElementName.\n        /// </summary>\n        internal static string Report_DataElementName {\n            get {\n                return ResourceManager.GetString(\"Report_DataElementName\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DataElementStyle.\n        /// </summary>\n        internal static string Report_DataElementStyle {\n            get {\n                return ResourceManager.GetString(\"Report_DataElementStyle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DataSchema.\n        /// </summary>\n        internal static string Report_DataSchema {\n            get {\n                return ResourceManager.GetString(\"Report_DataSchema\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DataTransform.\n        /// </summary>\n        internal static string Report_DataTransform {\n            get {\n                return ResourceManager.GetString(\"Report_DataTransform\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Description.\n        /// </summary>\n        internal static string Report_Description {\n            get {\n                return ResourceManager.GetString(\"Report_Description\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Page Margins.\n        /// </summary>\n        internal static string Report_Margins {\n            get {\n                return ResourceManager.GetString(\"Report_Margins\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to ModulesClasses.\n        /// </summary>\n        internal static string Report_ModulesClasses {\n            get {\n                return ResourceManager.GetString(\"Report_ModulesClasses\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to PageFooter.\n        /// </summary>\n        internal static string Report_PageFooter {\n            get {\n                return ResourceManager.GetString(\"Report_PageFooter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to PageHeader.\n        /// </summary>\n        internal static string Report_PageHeader {\n            get {\n                return ResourceManager.GetString(\"Report_PageHeader\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to PageHeight.\n        /// </summary>\n        internal static string Report_PageHeight {\n            get {\n                return ResourceManager.GetString(\"Report_PageHeight\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to PageWidth.\n        /// </summary>\n        internal static string Report_PageWidth {\n            get {\n                return ResourceManager.GetString(\"Report_PageWidth\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Parameters.\n        /// </summary>\n        internal static string Report_Parameters {\n            get {\n                return ResourceManager.GetString(\"Report_Parameters\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Width.\n        /// </summary>\n        internal static string Report_Width {\n            get {\n                return ResourceManager.GetString(\"Report_Width\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Height.\n        /// </summary>\n        internal static string Size_Height {\n            get {\n                return ResourceManager.GetString(\"Size_Height\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Width.\n        /// </summary>\n        internal static string Size_Width {\n            get {\n                return ResourceManager.GetString(\"Size_Width\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to MergeTransactions.\n        /// </summary>\n        internal static string Subreport_MergeTransactions {\n            get {\n                return ResourceManager.GetString(\"Subreport_MergeTransactions\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to NoRows.\n        /// </summary>\n        internal static string Subreport_NoRows {\n            get {\n                return ResourceManager.GetString(\"Subreport_NoRows\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Parameters.\n        /// </summary>\n        internal static string Subreport_Parameters {\n            get {\n                return ResourceManager.GetString(\"Subreport_Parameters\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to ReportName.\n        /// </summary>\n        internal static string Subreport_ReportName {\n            get {\n                return ResourceManager.GetString(\"Subreport_ReportName\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Appearance.\n        /// </summary>\n        internal static string Textbox_Appearance {\n            get {\n                return ResourceManager.GetString(\"Textbox_Appearance\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to CanGrow.\n        /// </summary>\n        internal static string Textbox_CanGrow {\n            get {\n                return ResourceManager.GetString(\"Textbox_CanGrow\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to CanShrink.\n        /// </summary>\n        internal static string Textbox_CanShrink {\n            get {\n                return ResourceManager.GetString(\"Textbox_CanShrink\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DataElementStyle.\n        /// </summary>\n        internal static string Textbox_DataElementStyle {\n            get {\n                return ResourceManager.GetString(\"Textbox_DataElementStyle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to HideDuplicates.\n        /// </summary>\n        internal static string Textbox_HideDuplicates {\n            get {\n                return ResourceManager.GetString(\"Textbox_HideDuplicates\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Value.\n        /// </summary>\n        internal static string Textbox_Value {\n            get {\n                return ResourceManager.GetString(\"Textbox_Value\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/RdlProperties/DisplayNames.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Appearance_Color\" xml:space=\"preserve\">\n    <value>Color</value>\n  </data>\n  <data name=\"Appearance_Direction\" xml:space=\"preserve\">\n    <value>Direction</value>\n  </data>\n  <data name=\"Appearance_FontFamily\" xml:space=\"preserve\">\n    <value>FontFamily</value>\n  </data>\n  <data name=\"Appearance_FontSize\" xml:space=\"preserve\">\n    <value>FontSize</value>\n  </data>\n  <data name=\"Appearance_FontStyle\" xml:space=\"preserve\">\n    <value>FontStyle</value>\n  </data>\n  <data name=\"Appearance_FontWeight\" xml:space=\"preserve\">\n    <value>FontWeight</value>\n  </data>\n  <data name=\"Appearance_Format\" xml:space=\"preserve\">\n    <value>Format</value>\n  </data>\n  <data name=\"Appearance_TextAlign\" xml:space=\"preserve\">\n    <value>TextAlign</value>\n  </data>\n  <data name=\"Appearance_TextDecoration\" xml:space=\"preserve\">\n    <value>TextDecoration</value>\n  </data>\n  <data name=\"Appearance_VerticalAlign\" xml:space=\"preserve\">\n    <value>VerticalAlign</value>\n  </data>\n  <data name=\"Appearance_WritingMode\" xml:space=\"preserve\">\n    <value>WritingMode</value>\n  </data>\n  <data name=\"BackgroundImage_MIMEType\" xml:space=\"preserve\">\n    <value>MIMEType</value>\n  </data>\n  <data name=\"BackgroundImage_Repeat\" xml:space=\"preserve\">\n    <value>Repeat</value>\n  </data>\n  <data name=\"BackgroundImage_Source\" xml:space=\"preserve\">\n    <value>Source</value>\n  </data>\n  <data name=\"BackgroundImage_Value\" xml:space=\"preserve\">\n    <value>Value</value>\n  </data>\n  <data name=\"Background_Color\" xml:space=\"preserve\">\n    <value>Color</value>\n  </data>\n  <data name=\"Background_EndColor\" xml:space=\"preserve\">\n    <value>EndColor</value>\n  </data>\n  <data name=\"Background_GradientType\" xml:space=\"preserve\">\n    <value>GradientType</value>\n  </data>\n  <data name=\"Background_Image\" xml:space=\"preserve\">\n    <value>Image</value>\n  </data>\n  <data name=\"Base_Action\" xml:space=\"preserve\">\n    <value>Action</value>\n  </data>\n  <data name=\"Base_Background\" xml:space=\"preserve\">\n    <value>Background</value>\n  </data>\n  <data name=\"Base_Bookmark\" xml:space=\"preserve\">\n    <value>Bookmark</value>\n  </data>\n  <data name=\"Base_Border\" xml:space=\"preserve\">\n    <value>Border</value>\n  </data>\n  <data name=\"Base_ColumnSpan\" xml:space=\"preserve\">\n    <value>ColumnSpan</value>\n  </data>\n  <data name=\"Base_DataElementName\" xml:space=\"preserve\">\n    <value>DataElementName</value>\n  </data>\n  <data name=\"Base_DataElementOutput\" xml:space=\"preserve\">\n    <value>DataElementOutput</value>\n  </data>\n  <data name=\"Base_Location\" xml:space=\"preserve\">\n    <value>Location</value>\n  </data>\n  <data name=\"Base_Matrix\" xml:space=\"preserve\">\n    <value>Matrix</value>\n  </data>\n  <data name=\"Base_Name\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"Base_Padding\" xml:space=\"preserve\">\n    <value>Padding</value>\n  </data>\n  <data name=\"Base_Size\" xml:space=\"preserve\">\n    <value>Size</value>\n  </data>\n  <data name=\"Base_Table\" xml:space=\"preserve\">\n    <value>Table</value>\n  </data>\n  <data name=\"Base_ToolTip\" xml:space=\"preserve\">\n    <value>ToolTip</value>\n  </data>\n  <data name=\"Base_Visibility\" xml:space=\"preserve\">\n    <value>Visibility</value>\n  </data>\n  <data name=\"Base_ZIndex\" xml:space=\"preserve\">\n    <value>ZIndex</value>\n  </data>\n  <data name=\"ChartAxis_Appearance\" xml:space=\"preserve\">\n    <value>Appearance</value>\n  </data>\n  <data name=\"ChartAxis_Background\" xml:space=\"preserve\">\n    <value>Background</value>\n  </data>\n  <data name=\"ChartAxis_Border\" xml:space=\"preserve\">\n    <value>Border</value>\n  </data>\n  <data name=\"ChartAxis_CrossAt\" xml:space=\"preserve\">\n    <value>CrossAt</value>\n  </data>\n  <data name=\"ChartAxis_Interlaced\" xml:space=\"preserve\">\n    <value>Interlaced</value>\n  </data>\n  <data name=\"ChartAxis_LogScale\" xml:space=\"preserve\">\n    <value>LogScale</value>\n  </data>\n  <data name=\"ChartAxis_MajorGridLines\" xml:space=\"preserve\">\n    <value>MajorGridLines</value>\n  </data>\n  <data name=\"ChartAxis_MajorInterval\" xml:space=\"preserve\">\n    <value>MajorInterval</value>\n  </data>\n  <data name=\"ChartAxis_MajorTickMarks\" xml:space=\"preserve\">\n    <value>MajorTickMarks</value>\n  </data>\n  <data name=\"ChartAxis_Margin\" xml:space=\"preserve\">\n    <value>Margin</value>\n  </data>\n  <data name=\"ChartAxis_Max\" xml:space=\"preserve\">\n    <value>Max</value>\n  </data>\n  <data name=\"ChartAxis_Min\" xml:space=\"preserve\">\n    <value>Min</value>\n  </data>\n  <data name=\"ChartAxis_MinorGridLines\" xml:space=\"preserve\">\n    <value>MinorGridLines</value>\n  </data>\n  <data name=\"ChartAxis_MinorInterval\" xml:space=\"preserve\">\n    <value>MinorInterval</value>\n  </data>\n  <data name=\"ChartAxis_MinorTickMarks\" xml:space=\"preserve\">\n    <value>MinorTickMarks</value>\n  </data>\n  <data name=\"ChartAxis_Padding\" xml:space=\"preserve\">\n    <value>Padding</value>\n  </data>\n  <data name=\"ChartAxis_Reverse\" xml:space=\"preserve\">\n    <value>Reverse</value>\n  </data>\n  <data name=\"ChartAxis_Scalar\" xml:space=\"preserve\">\n    <value>Scalar</value>\n  </data>\n  <data name=\"ChartAxis_Title\" xml:space=\"preserve\">\n    <value>Title</value>\n  </data>\n  <data name=\"ChartAxis_Visible\" xml:space=\"preserve\">\n    <value>Visible</value>\n  </data>\n  <data name=\"ChartData_DataValue\" xml:space=\"preserve\">\n    <value>DataValue</value>\n  </data>\n  <data name=\"ChartData_DataValue2\" xml:space=\"preserve\">\n    <value>DataValue2</value>\n  </data>\n  <data name=\"ChartData_DataValue3\" xml:space=\"preserve\">\n    <value>DataValue3</value>\n  </data>\n  <data name=\"ChartData_LabelAppearance\" xml:space=\"preserve\">\n    <value>LabelAppearance</value>\n  </data>\n  <data name=\"ChartData_LabelVisible\" xml:space=\"preserve\">\n    <value>LabelVisible</value>\n  </data>\n  <data name=\"ChartGridLines_Color\" xml:space=\"preserve\">\n    <value>Color</value>\n  </data>\n  <data name=\"ChartGridLines_LineStyle\" xml:space=\"preserve\">\n    <value>LineStyle</value>\n  </data>\n  <data name=\"ChartGridLines_ShowGridLines\" xml:space=\"preserve\">\n    <value>ShowGridLines</value>\n  </data>\n  <data name=\"ChartGridLines_Width\" xml:space=\"preserve\">\n    <value>Width</value>\n  </data>\n  <data name=\"ChartLegend_Appearance\" xml:space=\"preserve\">\n    <value>Appearance</value>\n  </data>\n  <data name=\"ChartLegend_Background\" xml:space=\"preserve\">\n    <value>Background</value>\n  </data>\n  <data name=\"ChartLegend_Border\" xml:space=\"preserve\">\n    <value>Border</value>\n  </data>\n  <data name=\"ChartLegend_InsidePlotArea\" xml:space=\"preserve\">\n    <value>InsidePlotArea</value>\n  </data>\n  <data name=\"ChartLegend_Layout\" xml:space=\"preserve\">\n    <value>Layout</value>\n  </data>\n  <data name=\"ChartLegend_Padding\" xml:space=\"preserve\">\n    <value>Padding</value>\n  </data>\n  <data name=\"ChartLegend_Position\" xml:space=\"preserve\">\n    <value>Position</value>\n  </data>\n  <data name=\"ChartLegend_Visible\" xml:space=\"preserve\">\n    <value>Visible</value>\n  </data>\n  <data name=\"ChartTitle_Appearance\" xml:space=\"preserve\">\n    <value>Appearance</value>\n  </data>\n  <data name=\"ChartTitle_Background\" xml:space=\"preserve\">\n    <value>Background</value>\n  </data>\n  <data name=\"ChartTitle_Border\" xml:space=\"preserve\">\n    <value>Border</value>\n  </data>\n  <data name=\"ChartTitle_Caption\" xml:space=\"preserve\">\n    <value>Caption</value>\n  </data>\n  <data name=\"ChartTitle_Padding\" xml:space=\"preserve\">\n    <value>Padding</value>\n  </data>\n  <data name=\"Chart_CategoryAxis\" xml:space=\"preserve\">\n    <value>CategoryAxis</value>\n  </data>\n  <data name=\"Chart_ChartData\" xml:space=\"preserve\">\n    <value>ChartData</value>\n  </data>\n  <data name=\"Chart_Legend\" xml:space=\"preserve\">\n    <value>Legend</value>\n  </data>\n  <data name=\"Chart_Palette\" xml:space=\"preserve\">\n    <value>Palette</value>\n  </data>\n  <data name=\"Chart_PointWidth\" xml:space=\"preserve\">\n    <value>PointWidth</value>\n  </data>\n  <data name=\"Chart_Title\" xml:space=\"preserve\">\n    <value>Title</value>\n  </data>\n  <data name=\"Chart_Type\" xml:space=\"preserve\">\n    <value>Type</value>\n  </data>\n  <data name=\"Chart_ValueAxis\" xml:space=\"preserve\">\n    <value>ValueAxis</value>\n  </data>\n  <data name=\"DataRegion_Appearance\" xml:space=\"preserve\">\n    <value>Appearance</value>\n  </data>\n  <data name=\"DataRegion_DataSetName\" xml:space=\"preserve\">\n    <value>DataSetName</value>\n  </data>\n  <data name=\"DataRegion_Filters\" xml:space=\"preserve\">\n    <value>Filters</value>\n  </data>\n  <data name=\"DataRegion_KeepTogether\" xml:space=\"preserve\">\n    <value>KeepTogether</value>\n  </data>\n  <data name=\"DataRegion_NoRows\" xml:space=\"preserve\">\n    <value>NoRows</value>\n  </data>\n  <data name=\"DataRegion_PageBreakAtEnd\" xml:space=\"preserve\">\n    <value>PageBreakAtEnd</value>\n  </data>\n  <data name=\"DataRegion_PageBreakAtStart\" xml:space=\"preserve\">\n    <value>PageBreakAtStart</value>\n  </data>\n  <data name=\"ImageI_MIMEType\" xml:space=\"preserve\">\n    <value>MIMEType</value>\n  </data>\n  <data name=\"ImageI_Sizing\" xml:space=\"preserve\">\n    <value>Sizing</value>\n  </data>\n  <data name=\"ImageI_Source\" xml:space=\"preserve\">\n    <value>Source</value>\n  </data>\n  <data name=\"ImageI_Value\" xml:space=\"preserve\">\n    <value>Value</value>\n  </data>\n  <data name=\"Image_Image\" xml:space=\"preserve\">\n    <value>Image</value>\n  </data>\n  <data name=\"List_DataInstanceElementOutput\" xml:space=\"preserve\">\n    <value>DataInstanceElementOutput</value>\n  </data>\n  <data name=\"List_DataInstanceName\" xml:space=\"preserve\">\n    <value>DataInstanceName</value>\n  </data>\n  <data name=\"List_Grouping\" xml:space=\"preserve\">\n    <value>Grouping</value>\n  </data>\n  <data name=\"List_Sorting\" xml:space=\"preserve\">\n    <value>Sorting</value>\n  </data>\n  <data name=\"Location_Left\" xml:space=\"preserve\">\n    <value>Left</value>\n  </data>\n  <data name=\"Location_Top\" xml:space=\"preserve\">\n    <value>Top</value>\n  </data>\n  <data name=\"Margin_Bottom\" xml:space=\"preserve\">\n    <value>Bottom</value>\n  </data>\n  <data name=\"Margin_Left\" xml:space=\"preserve\">\n    <value>Left</value>\n  </data>\n  <data name=\"Margin_Right\" xml:space=\"preserve\">\n    <value>Right</value>\n  </data>\n  <data name=\"Margin_Top\" xml:space=\"preserve\">\n    <value>Top</value>\n  </data>\n  <data name=\"Padding_Bottom\" xml:space=\"preserve\">\n    <value>Bottom</value>\n  </data>\n  <data name=\"Padding_Left\" xml:space=\"preserve\">\n    <value>Left</value>\n  </data>\n  <data name=\"Padding_Right\" xml:space=\"preserve\">\n    <value>Right</value>\n  </data>\n  <data name=\"Padding_Top\" xml:space=\"preserve\">\n    <value>Top</value>\n  </data>\n  <data name=\"PrintFirstLast_Height\" xml:space=\"preserve\">\n    <value>Height</value>\n  </data>\n  <data name=\"PrintFirstLast_PrintOnFirstPage\" xml:space=\"preserve\">\n    <value>PrintOnFirstPage</value>\n  </data>\n  <data name=\"PrintFirstLast_PrintOnLastPage\" xml:space=\"preserve\">\n    <value>PrintOnLastPage</value>\n  </data>\n  <data name=\"Rectangle_PageBreakAtEnd\" xml:space=\"preserve\">\n    <value>PageBreakAtEnd</value>\n  </data>\n  <data name=\"Rectangle_PageBreakAtStart\" xml:space=\"preserve\">\n    <value>PageBreakAtStart</value>\n  </data>\n  <data name=\"Report_Author\" xml:space=\"preserve\">\n    <value>Author</value>\n  </data>\n  <data name=\"Report_BodyColumns\" xml:space=\"preserve\">\n    <value>BodyColumns</value>\n  </data>\n  <data name=\"Report_BodyColumnSpacing\" xml:space=\"preserve\">\n    <value>BodyColumnSpacing</value>\n  </data>\n  <data name=\"Report_BodyHeight\" xml:space=\"preserve\">\n    <value>BodyHeight</value>\n  </data>\n  <data name=\"Report_Code\" xml:space=\"preserve\">\n    <value>Code</value>\n  </data>\n  <data name=\"Report_DataElementName\" xml:space=\"preserve\">\n    <value>DataElementName</value>\n  </data>\n  <data name=\"Report_DataElementStyle\" xml:space=\"preserve\">\n    <value>DataElementStyle</value>\n  </data>\n  <data name=\"Report_DataSchema\" xml:space=\"preserve\">\n    <value>DataSchema</value>\n  </data>\n  <data name=\"Report_DataTransform\" xml:space=\"preserve\">\n    <value>DataTransform</value>\n  </data>\n  <data name=\"Report_Description\" xml:space=\"preserve\">\n    <value>Description</value>\n  </data>\n  <data name=\"Report_Margins\" xml:space=\"preserve\">\n    <value>Page Margins</value>\n  </data>\n  <data name=\"Report_ModulesClasses\" xml:space=\"preserve\">\n    <value>ModulesClasses</value>\n  </data>\n  <data name=\"Report_PageFooter\" xml:space=\"preserve\">\n    <value>PageFooter</value>\n  </data>\n  <data name=\"Report_PageHeader\" xml:space=\"preserve\">\n    <value>PageHeader</value>\n  </data>\n  <data name=\"Report_PageHeight\" xml:space=\"preserve\">\n    <value>PageHeight</value>\n  </data>\n  <data name=\"Report_PageWidth\" xml:space=\"preserve\">\n    <value>PageWidth</value>\n  </data>\n  <data name=\"Report_Parameters\" xml:space=\"preserve\">\n    <value>Parameters</value>\n  </data>\n  <data name=\"Report_Width\" xml:space=\"preserve\">\n    <value>Width</value>\n  </data>\n  <data name=\"Size_Height\" xml:space=\"preserve\">\n    <value>Height</value>\n  </data>\n  <data name=\"Size_Width\" xml:space=\"preserve\">\n    <value>Width</value>\n  </data>\n  <data name=\"Subreport_MergeTransactions\" xml:space=\"preserve\">\n    <value>MergeTransactions</value>\n  </data>\n  <data name=\"Subreport_NoRows\" xml:space=\"preserve\">\n    <value>NoRows</value>\n  </data>\n  <data name=\"Subreport_Parameters\" xml:space=\"preserve\">\n    <value>Parameters</value>\n  </data>\n  <data name=\"Subreport_ReportName\" xml:space=\"preserve\">\n    <value>ReportName</value>\n  </data>\n  <data name=\"Textbox_Appearance\" xml:space=\"preserve\">\n    <value>Appearance</value>\n  </data>\n  <data name=\"Textbox_CanGrow\" xml:space=\"preserve\">\n    <value>CanGrow</value>\n  </data>\n  <data name=\"Textbox_CanShrink\" xml:space=\"preserve\">\n    <value>CanShrink</value>\n  </data>\n  <data name=\"Textbox_DataElementStyle\" xml:space=\"preserve\">\n    <value>DataElementStyle</value>\n  </data>\n  <data name=\"Textbox_HideDuplicates\" xml:space=\"preserve\">\n    <value>HideDuplicates</value>\n  </data>\n  <data name=\"Textbox_Value\" xml:space=\"preserve\">\n    <value>Value</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/RdlProperties/DisplayNames.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Appearance_Color\" xml:space=\"preserve\">\n    <value>Цвет</value>\n  </data>\n  <data name=\"Appearance_Direction\" xml:space=\"preserve\">\n    <value>Направление</value>\n  </data>\n  <data name=\"Appearance_FontFamily\" xml:space=\"preserve\">\n    <value>Семейство шрифтов</value>\n  </data>\n  <data name=\"Appearance_FontSize\" xml:space=\"preserve\">\n    <value>Размер шрифта</value>\n  </data>\n  <data name=\"Appearance_FontStyle\" xml:space=\"preserve\">\n    <value>Стиль шрифта</value>\n  </data>\n  <data name=\"Appearance_FontWeight\" xml:space=\"preserve\">\n    <value>Вес шрифта</value>\n  </data>\n  <data name=\"Appearance_Format\" xml:space=\"preserve\">\n    <value>Формат</value>\n  </data>\n  <data name=\"Appearance_TextAlign\" xml:space=\"preserve\">\n    <value>Горизонтальное выравнивание</value>\n  </data>\n  <data name=\"Appearance_TextDecoration\" xml:space=\"preserve\">\n    <value>Оформление</value>\n  </data>\n  <data name=\"Appearance_VerticalAlign\" xml:space=\"preserve\">\n    <value>Вертикальное выравнивание</value>\n  </data>\n  <data name=\"Appearance_WritingMode\" xml:space=\"preserve\">\n    <value>Режим записи</value>\n  </data>\n  <data name=\"BackgroundImage_MIMEType\" xml:space=\"preserve\">\n    <value>Тип MIME</value>\n  </data>\n  <data name=\"BackgroundImage_Repeat\" xml:space=\"preserve\">\n    <value>Повторение</value>\n  </data>\n  <data name=\"BackgroundImage_Source\" xml:space=\"preserve\">\n    <value>Источник</value>\n  </data>\n  <data name=\"BackgroundImage_Value\" xml:space=\"preserve\">\n    <value>Значение</value>\n  </data>\n  <data name=\"Background_Color\" xml:space=\"preserve\">\n    <value>Цвет</value>\n  </data>\n  <data name=\"Background_EndColor\" xml:space=\"preserve\">\n    <value>Конечный цвет</value>\n  </data>\n  <data name=\"Background_GradientType\" xml:space=\"preserve\">\n    <value>Тип градиента</value>\n  </data>\n  <data name=\"Background_Image\" xml:space=\"preserve\">\n    <value>Изображение</value>\n  </data>\n  <data name=\"Base_Action\" xml:space=\"preserve\">\n    <value>Действие</value>\n  </data>\n  <data name=\"Base_Background\" xml:space=\"preserve\">\n    <value>Фон</value>\n  </data>\n  <data name=\"Base_Bookmark\" xml:space=\"preserve\">\n    <value>Закладка</value>\n  </data>\n  <data name=\"Base_Border\" xml:space=\"preserve\">\n    <value>Граница</value>\n  </data>\n  <data name=\"Base_ColumnSpan\" xml:space=\"preserve\">\n    <value>Охват столбцов</value>\n  </data>\n  <data name=\"Base_DataElementName\" xml:space=\"preserve\">\n    <value>Название элемента данных</value>\n  </data>\n  <data name=\"Base_DataElementOutput\" xml:space=\"preserve\">\n    <value>Вывод элеменда данных</value>\n  </data>\n  <data name=\"Base_Location\" xml:space=\"preserve\">\n    <value>Положение</value>\n  </data>\n  <data name=\"Base_Matrix\" xml:space=\"preserve\">\n    <value>Матрица</value>\n  </data>\n  <data name=\"Base_Name\" xml:space=\"preserve\">\n    <value>Имя</value>\n  </data>\n  <data name=\"Base_Padding\" xml:space=\"preserve\">\n    <value>Отступ от границы</value>\n  </data>\n  <data name=\"Base_Size\" xml:space=\"preserve\">\n    <value>Размер</value>\n  </data>\n  <data name=\"Base_Table\" xml:space=\"preserve\">\n    <value>Таблица</value>\n  </data>\n  <data name=\"Base_ToolTip\" xml:space=\"preserve\">\n    <value>Подсказка</value>\n  </data>\n  <data name=\"Base_Visibility\" xml:space=\"preserve\">\n    <value>Видимость</value>\n  </data>\n  <data name=\"Base_ZIndex\" xml:space=\"preserve\">\n    <value>Z-индекс</value>\n  </data>\n  <data name=\"ChartAxis_Appearance\" xml:space=\"preserve\">\n    <value>Внешний вид</value>\n  </data>\n  <data name=\"ChartAxis_Background\" xml:space=\"preserve\">\n    <value>Фон</value>\n  </data>\n  <data name=\"ChartAxis_Border\" xml:space=\"preserve\">\n    <value>Граница</value>\n  </data>\n  <data name=\"ChartAxis_CrossAt\" xml:space=\"preserve\">\n    <value>Пересекать в</value>\n  </data>\n  <data name=\"ChartAxis_Interlaced\" xml:space=\"preserve\">\n    <value>Переплетать</value>\n  </data>\n  <data name=\"ChartAxis_LogScale\" xml:space=\"preserve\">\n    <value>Логарифмическая шкала</value>\n  </data>\n  <data name=\"ChartAxis_MajorGridLines\" xml:space=\"preserve\">\n    <value>Основные линии сетки</value>\n  </data>\n  <data name=\"ChartAxis_MajorInterval\" xml:space=\"preserve\">\n    <value>Основной интервал</value>\n  </data>\n  <data name=\"ChartAxis_MajorTickMarks\" xml:space=\"preserve\">\n    <value>Основные деления</value>\n  </data>\n  <data name=\"ChartAxis_Margin\" xml:space=\"preserve\">\n    <value>Отступ</value>\n  </data>\n  <data name=\"ChartAxis_Max\" xml:space=\"preserve\">\n    <value>Максимум</value>\n  </data>\n  <data name=\"ChartAxis_Min\" xml:space=\"preserve\">\n    <value>Минимум</value>\n  </data>\n  <data name=\"ChartAxis_MinorGridLines\" xml:space=\"preserve\">\n    <value>Дополнительные линии сетки</value>\n  </data>\n  <data name=\"ChartAxis_MinorInterval\" xml:space=\"preserve\">\n    <value>Дополнительный интервал</value>\n  </data>\n  <data name=\"ChartAxis_MinorTickMarks\" xml:space=\"preserve\">\n    <value>Дополнительные деления</value>\n  </data>\n  <data name=\"ChartAxis_Padding\" xml:space=\"preserve\">\n    <value>Отступ от границы</value>\n  </data>\n  <data name=\"ChartAxis_Reverse\" xml:space=\"preserve\">\n    <value>Обратная</value>\n  </data>\n  <data name=\"ChartAxis_Scalar\" xml:space=\"preserve\">\n    <value>Скалярная</value>\n  </data>\n  <data name=\"ChartAxis_Title\" xml:space=\"preserve\">\n    <value>Заголовок</value>\n  </data>\n  <data name=\"ChartAxis_Visible\" xml:space=\"preserve\">\n    <value>Видимая</value>\n  </data>\n  <data name=\"ChartData_DataValue\" xml:space=\"preserve\">\n    <value>Значение данных</value>\n  </data>\n  <data name=\"ChartData_DataValue2\" xml:space=\"preserve\">\n    <value>Значение данных2</value>\n  </data>\n  <data name=\"ChartData_DataValue3\" xml:space=\"preserve\">\n    <value>Значение данных3</value>\n  </data>\n  <data name=\"ChartData_LabelAppearance\" xml:space=\"preserve\">\n    <value>Внешний вид метки</value>\n  </data>\n  <data name=\"ChartData_LabelVisible\" xml:space=\"preserve\">\n    <value>Метку видно</value>\n  </data>\n  <data name=\"ChartGridLines_Color\" xml:space=\"preserve\">\n    <value>Цвет</value>\n  </data>\n  <data name=\"ChartGridLines_LineStyle\" xml:space=\"preserve\">\n    <value>Стиль линии</value>\n  </data>\n  <data name=\"ChartGridLines_ShowGridLines\" xml:space=\"preserve\">\n    <value>Показывать</value>\n  </data>\n  <data name=\"ChartGridLines_Width\" xml:space=\"preserve\">\n    <value>Ширина</value>\n  </data>\n  <data name=\"ChartLegend_Appearance\" xml:space=\"preserve\">\n    <value>Внешний вид</value>\n  </data>\n  <data name=\"ChartLegend_Background\" xml:space=\"preserve\">\n    <value>Фон</value>\n  </data>\n  <data name=\"ChartLegend_Border\" xml:space=\"preserve\">\n    <value>Граница</value>\n  </data>\n  <data name=\"ChartLegend_InsidePlotArea\" xml:space=\"preserve\">\n    <value>Внутри участка</value>\n  </data>\n  <data name=\"ChartLegend_Layout\" xml:space=\"preserve\">\n    <value>Макет</value>\n  </data>\n  <data name=\"ChartLegend_Padding\" xml:space=\"preserve\">\n    <value>Отступ от границы</value>\n  </data>\n  <data name=\"ChartLegend_Position\" xml:space=\"preserve\">\n    <value>Позиция</value>\n  </data>\n  <data name=\"ChartLegend_Visible\" xml:space=\"preserve\">\n    <value>Видимая</value>\n  </data>\n  <data name=\"ChartTitle_Appearance\" xml:space=\"preserve\">\n    <value>Внешний вид</value>\n  </data>\n  <data name=\"ChartTitle_Background\" xml:space=\"preserve\">\n    <value>Фон</value>\n  </data>\n  <data name=\"ChartTitle_Border\" xml:space=\"preserve\">\n    <value>Граница</value>\n  </data>\n  <data name=\"ChartTitle_Caption\" xml:space=\"preserve\">\n    <value>Заголовок</value>\n  </data>\n  <data name=\"ChartTitle_Padding\" xml:space=\"preserve\">\n    <value>Отступ от границы</value>\n  </data>\n  <data name=\"Chart_CategoryAxis\" xml:space=\"preserve\">\n    <value>Ось категории</value>\n  </data>\n  <data name=\"Chart_ChartData\" xml:space=\"preserve\">\n    <value>Данные диаграммы</value>\n  </data>\n  <data name=\"Chart_Legend\" xml:space=\"preserve\">\n    <value>Легенда</value>\n  </data>\n  <data name=\"Chart_Palette\" xml:space=\"preserve\">\n    <value>Палитра</value>\n  </data>\n  <data name=\"Chart_PointWidth\" xml:space=\"preserve\">\n    <value>Ширина точки</value>\n  </data>\n  <data name=\"Chart_Title\" xml:space=\"preserve\">\n    <value>Заголовок</value>\n  </data>\n  <data name=\"Chart_Type\" xml:space=\"preserve\">\n    <value>Тип</value>\n  </data>\n  <data name=\"Chart_ValueAxis\" xml:space=\"preserve\">\n    <value>Ось значения</value>\n  </data>\n  <data name=\"DataRegion_Appearance\" xml:space=\"preserve\">\n    <value>Внешний вид</value>\n  </data>\n  <data name=\"DataRegion_DataSetName\" xml:space=\"preserve\">\n    <value>Набор данных</value>\n  </data>\n  <data name=\"DataRegion_Filters\" xml:space=\"preserve\">\n    <value>Фильтры</value>\n  </data>\n  <data name=\"DataRegion_KeepTogether\" xml:space=\"preserve\">\n    <value>Хранить вместе</value>\n  </data>\n  <data name=\"DataRegion_NoRows\" xml:space=\"preserve\">\n    <value>Нет строк</value>\n  </data>\n  <data name=\"DataRegion_PageBreakAtEnd\" xml:space=\"preserve\">\n    <value>Разрывать в конце</value>\n  </data>\n  <data name=\"DataRegion_PageBreakAtStart\" xml:space=\"preserve\">\n    <value>Разрывать в начале</value>\n  </data>\n  <data name=\"ImageI_MIMEType\" xml:space=\"preserve\">\n    <value>Тип MIME</value>\n  </data>\n  <data name=\"ImageI_Sizing\" xml:space=\"preserve\">\n    <value>Масштабирование</value>\n  </data>\n  <data name=\"ImageI_Source\" xml:space=\"preserve\">\n    <value>Источник</value>\n  </data>\n  <data name=\"ImageI_Value\" xml:space=\"preserve\">\n    <value>Значение</value>\n  </data>\n  <data name=\"Image_Image\" xml:space=\"preserve\">\n    <value>Изображение</value>\n  </data>\n  <data name=\"List_DataInstanceElementOutput\" xml:space=\"preserve\">\n    <value>Элемент экземпляра данных</value>\n  </data>\n  <data name=\"List_DataInstanceName\" xml:space=\"preserve\">\n    <value>Название экземпляра данных</value>\n  </data>\n  <data name=\"List_Grouping\" xml:space=\"preserve\">\n    <value>Группировка</value>\n  </data>\n  <data name=\"List_Sorting\" xml:space=\"preserve\">\n    <value>Сортировка</value>\n  </data>\n  <data name=\"Location_Left\" xml:space=\"preserve\">\n    <value>Слева</value>\n  </data>\n  <data name=\"Location_Top\" xml:space=\"preserve\">\n    <value>Сверху</value>\n  </data>\n  <data name=\"Margin_Bottom\" xml:space=\"preserve\">\n    <value>Снизу</value>\n  </data>\n  <data name=\"Margin_Left\" xml:space=\"preserve\">\n    <value>Слева</value>\n  </data>\n  <data name=\"Margin_Right\" xml:space=\"preserve\">\n    <value>Справа</value>\n  </data>\n  <data name=\"Margin_Top\" xml:space=\"preserve\">\n    <value>Сверху</value>\n  </data>\n  <data name=\"Padding_Bottom\" xml:space=\"preserve\">\n    <value>Снизу</value>\n  </data>\n  <data name=\"Padding_Left\" xml:space=\"preserve\">\n    <value>Слева</value>\n  </data>\n  <data name=\"Padding_Right\" xml:space=\"preserve\">\n    <value>Справа</value>\n  </data>\n  <data name=\"Padding_Top\" xml:space=\"preserve\">\n    <value>Сверху</value>\n  </data>\n  <data name=\"PrintFirstLast_Height\" xml:space=\"preserve\">\n    <value>Высота</value>\n  </data>\n  <data name=\"PrintFirstLast_PrintOnFirstPage\" xml:space=\"preserve\">\n    <value>Печатать на первой странице</value>\n  </data>\n  <data name=\"PrintFirstLast_PrintOnLastPage\" xml:space=\"preserve\">\n    <value>Печатать на последней странице</value>\n  </data>\n  <data name=\"Rectangle_PageBreakAtEnd\" xml:space=\"preserve\">\n    <value>Разрывать в конце</value>\n  </data>\n  <data name=\"Rectangle_PageBreakAtStart\" xml:space=\"preserve\">\n    <value>Разрывать в начале</value>\n  </data>\n  <data name=\"Report_Author\" xml:space=\"preserve\">\n    <value>Автор</value>\n  </data>\n  <data name=\"Report_BodyColumns\" xml:space=\"preserve\">\n    <value>Количество столбцов</value>\n  </data>\n  <data name=\"Report_BodyColumnSpacing\" xml:space=\"preserve\">\n    <value>Расстояние между столбцами</value>\n  </data>\n  <data name=\"Report_BodyHeight\" xml:space=\"preserve\">\n    <value>Высота тела</value>\n  </data>\n  <data name=\"Report_Code\" xml:space=\"preserve\">\n    <value>Код</value>\n  </data>\n  <data name=\"Report_DataElementName\" xml:space=\"preserve\">\n    <value>Название элемента данных</value>\n  </data>\n  <data name=\"Report_DataElementStyle\" xml:space=\"preserve\">\n    <value>Стиль элемента данных</value>\n  </data>\n  <data name=\"Report_DataSchema\" xml:space=\"preserve\">\n    <value>Схема данных</value>\n  </data>\n  <data name=\"Report_DataTransform\" xml:space=\"preserve\">\n    <value>Преобразование данных</value>\n  </data>\n  <data name=\"Report_Description\" xml:space=\"preserve\">\n    <value>Описание</value>\n  </data>\n  <data name=\"Report_Margins\" xml:space=\"preserve\">\n    <value>Отступы страницы</value>\n  </data>\n  <data name=\"Report_ModulesClasses\" xml:space=\"preserve\">\n    <value>Модули и классы</value>\n  </data>\n  <data name=\"Report_PageFooter\" xml:space=\"preserve\">\n    <value>Нижний колонитул</value>\n  </data>\n  <data name=\"Report_PageHeader\" xml:space=\"preserve\">\n    <value>Верхний колонтитул</value>\n  </data>\n  <data name=\"Report_PageHeight\" xml:space=\"preserve\">\n    <value>Высота страницы</value>\n  </data>\n  <data name=\"Report_PageWidth\" xml:space=\"preserve\">\n    <value>Ширина страницы</value>\n  </data>\n  <data name=\"Report_Parameters\" xml:space=\"preserve\">\n    <value>Параметры</value>\n  </data>\n  <data name=\"Report_Width\" xml:space=\"preserve\">\n    <value>Ширина</value>\n  </data>\n  <data name=\"Size_Height\" xml:space=\"preserve\">\n    <value>Высота</value>\n  </data>\n  <data name=\"Size_Width\" xml:space=\"preserve\">\n    <value>Ширина</value>\n  </data>\n  <data name=\"Subreport_MergeTransactions\" xml:space=\"preserve\">\n    <value>Объединять транзакции</value>\n  </data>\n  <data name=\"Subreport_NoRows\" xml:space=\"preserve\">\n    <value>Нет строк</value>\n  </data>\n  <data name=\"Subreport_Parameters\" xml:space=\"preserve\">\n    <value>Параметры</value>\n  </data>\n  <data name=\"Subreport_ReportName\" xml:space=\"preserve\">\n    <value>Путь к отчёту</value>\n  </data>\n  <data name=\"Textbox_Appearance\" xml:space=\"preserve\">\n    <value>Внешний вид</value>\n  </data>\n  <data name=\"Textbox_CanGrow\" xml:space=\"preserve\">\n    <value>Может расти</value>\n  </data>\n  <data name=\"Textbox_CanShrink\" xml:space=\"preserve\">\n    <value>Может сжиматься</value>\n  </data>\n  <data name=\"Textbox_DataElementStyle\" xml:space=\"preserve\">\n    <value>Стиль элемента данных</value>\n  </data>\n  <data name=\"Textbox_HideDuplicates\" xml:space=\"preserve\">\n    <value>Скрывать дубликаты</value>\n  </data>\n  <data name=\"Textbox_Value\" xml:space=\"preserve\">\n    <value>Значение</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/RdlProperties/LocalizedCategoryAttribute.cs",
    "content": "﻿using Majorsilence.Reporting.RdlDesign.RdlProperties;\nusing System.ComponentModel;\nusing System.Threading;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\tinternal class LocalizedCategoryAttribute : CategoryAttribute\n\t{\n\t\tpublic LocalizedCategoryAttribute(string category)\n\t\t\t: base(category)\n\t\t{\n\t\t}\n\n\t\tprotected override string GetLocalizedString(string value)\n\t\t{\n\t\t\treturn Categories.ResourceManager.GetString(value, Categories.Culture) ?? base.GetLocalizedString(value);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/RdlProperties/LocalizedDescriptionAttribute.cs",
    "content": "﻿using System.ComponentModel;\nusing Majorsilence.Reporting.RdlDesign.RdlProperties;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\tpublic class LocalizedDescriptionAttribute : DescriptionAttribute\n\t{\n\t\tpublic LocalizedDescriptionAttribute(string description)\n\t\t\t: base(description)\n\t\t{\n\t\t}\n\n\t\tpublic override string Description\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn Descriptions.ResourceManager.GetString(DescriptionValue, DisplayNames.Culture) ?? base.Description;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/RdlProperties/LocalizedDisplayNameAttribute.cs",
    "content": "﻿using System.ComponentModel;\nusing Majorsilence.Reporting.RdlDesign.RdlProperties;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\tinternal class LocalizedDisplayNameAttribute : DisplayNameAttribute\n\t{\n\t\tpublic LocalizedDisplayNameAttribute(string displayName)\n\t\t\t: base(displayName)\n\t\t{\n\t\t}\n\n\t\tpublic override string DisplayName\n\t\t{\n\t\t\tget { return DisplayNames.ResourceManager.GetString(DisplayNameValue, DisplayNames.Culture) ?? base.DisplayName; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyAction.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Drawing;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Drawing.Design;\nusing System.Xml;\nusing System.Globalization;\nusing System.Windows.Forms;\nusing System.Windows.Forms.Design;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyAction - \n    /// </summary>\n    [TypeConverter(typeof(PropertyActionConverter)),\n        Editor(typeof(PropertyActionUIEditor), typeof(System.Drawing.Design.UITypeEditor))]\n    internal class PropertyAction\n    {\n        PropertyReportItem pri;\n\n        public PropertyAction(PropertyReportItem ri)\n        {\n            pri = ri;\n        }\n        \n        public override string ToString()\n        {\n            string result = \"\";\n            DesignXmlDraw dr = pri.Draw;\n            XmlNode aNode = dr.GetNamedChildNode(pri.Node, \"Action\");\n            if (aNode == null)\n                result = \"None\";\n            else\n            {\n                XmlNode vLink = dr.GetNamedChildNode(aNode, \"Hyperlink\");\n                if (vLink != null)\n                {\t// Hyperlink specified\n                    result = string.Format(\"Hyperlink: {0}\", vLink.InnerText);\n                }\n                else\n                {\n                    vLink = dr.GetNamedChildNode(aNode, \"Drillthrough\");\n                    if (vLink != null)\n                    {\t// Drillthrough specified\n                        result = string.Format(\"Drillthrough: {0}\", dr.GetElementValue(vLink, \"ReportName\", \"\"));\n                    }\n                    else\n                    {\n                        vLink = dr.GetNamedChildNode(aNode, \"BookmarkLink\");\n                        if (vLink != null)\n                        {\t// BookmarkLink specified\n                            result = string.Format(\"BookmarkLink: {0}\", vLink.InnerText);\n                        }\n                    }\n                }\n            }\n\n            return result;\n        }\n    }\n\n    internal class PropertyActionConverter : StringConverter\n    {\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;\n        }\n\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                          System.Type destinationType)\n        {\n            if (destinationType == typeof(PropertyAction))\n                return true;\n            \n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context, \n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyAction)\n            {\n                PropertyAction pa = value as PropertyAction;\n                return pa.ToString();\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n\n    internal class PropertyActionUIEditor : UITypeEditor\n    {\n        public PropertyActionUIEditor()\n        {\n        }\n\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context,\n                                        IServiceProvider provider,\n                                        object value)\n        {\n\n            if ((context == null) || (provider == null))\n                return base.EditValue(context, provider, value);\n\n            // Access the Property Browser's UI display service\n            IWindowsFormsEditorService editorService =\n                (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));\n\n            if (editorService == null)\n                return base.EditValue(context, provider, value);\n\n            // Create an instance of the UI editor form\n            IReportItem iri = context.Instance as IReportItem;\n            if (iri == null)\n                return base.EditValue(context, provider, value);\n            PropertyReportItem pre = iri.GetPRI();\n\n            PropertyAction pa = value as PropertyAction;\n            if (pa == null)\n                return base.EditValue(context, provider, value);\n\n            SingleCtlDialog scd = new SingleCtlDialog(pre.DesignCtl, pre.Draw, pre.Nodes, SingleCtlTypeEnum.InteractivityCtl, null);\n            try\n            {\n                // Display the UI editor dialog\n                if (editorService.ShowDialog(scd) == DialogResult.OK)\n                {\n                    // Return the new property value from the UI editor form\n                    return new PropertyAction(pre);\n                }\n            }\n            finally\n            {\n                scd.Dispose();\n            }\n            return base.EditValue(context, provider, value);\n        }\n    }\n}"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyAppearance.cs",
    "content": "\nusing System;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Drawing.Design;\nusing System.Globalization;\nusing System.Windows.Forms;\nusing System.Windows.Forms.Design;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyAction - \n    /// </summary>\n    [TypeConverter(typeof(PropertyAppearanceConverter))]\n    [Editor(typeof(PropertyAppearanceUIEditor), typeof(UITypeEditor))]\n    internal class PropertyAppearance : IReportItem\n    {\n        PropertyReportItem pri;\n        string[] _subitems;\n        string[] _names;\n\n        public PropertyAppearance(PropertyReportItem ri)\n        {\n            pri = ri;\n            _names = null;\n            _subitems = new string[] { \"Style\", \"\" };\n        }\n\n        public PropertyAppearance(PropertyReportItem ri, params string[] names)\n        {\n            pri = ri;\n            _names = names;\n\n            // now build the array used to get/set values\n            if (names != null)\n            {\n                _subitems = new string[names.Length + 2];\n                int i = 0;\n                foreach (string s in names)\n                    _subitems[i++] = s;\n\n                _subitems[i++] = \"Style\";\n            }\n            else\n                _subitems = new string[] { \"Style\", \"\" };\n        }\n\n        internal string[] Names\n        {\n            get { return _names; }\n        }\n\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[LocalizedDisplayName(\"Appearance_FontFamily\")]\n\t\t[LocalizedDescription(\"Appearance_FontFamily\")]\n        public PropertyExpr FontFamily\n        {\n            get \n            {\n                return new PropertyExpr(GetStyleValue(\"FontFamily\", \"Arial\")); \n            }\n            set\n            {\n                SetStyleValue(\"FontFamily\", value.Expression);\n            }\n        }\n\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[LocalizedDisplayName(\"Appearance_FontSize\")]\n\t\t[LocalizedDescription(\"Appearance_FontSize\")]\n        public PropertyExpr FontSize\n        {\n            get\n            {\n                return new PropertyExpr(GetStyleValue(\"FontSize\", \"10pt\"));\n            }\n            set\n            {\n                if (!pri.IsExpression(value.Expression))\n                    DesignerUtility.ValidateSize(value.Expression, true, false);\n                SetStyleValue(\"FontSize\", value.Expression);\n            }\n        }\n\n        [TypeConverter(typeof(FontStyleConverter))]\n\t\t[LocalizedDisplayName(\"Appearance_FontStyle\")]\n\t\t[LocalizedDescription(\"Appearance_FontStyle\")]\n        public string FontStyle\n        {\n            get\n            {\n                return GetStyleValue(\"FontStyle\", \"Normal\");\n            }\n            set\n            {\n                SetStyleValue(\"FontStyle\", value);\n            }\n        }\n\n        [TypeConverter(typeof(FontWeightConverter))]\n\t\t[LocalizedDisplayName(\"Appearance_FontWeight\")]\n\t\t[LocalizedDescription(\"Appearance_FontWeight\")]\n        public string FontWeight\n        {\n            get\n            {\n                return GetStyleValue(\"FontWeight\", \"Normal\");\n            }\n            set\n            {\n                SetStyleValue(\"FontWeight\", value);\n            }\n        }\n\n        [TypeConverter(typeof(ColorConverter))]\n\t\t[LocalizedDisplayName(\"Appearance_Color\")]\n\t\t[LocalizedDescription(\"Appearance_Color\")]\n        public string Color\n        {\n            get\n            {\n                return GetStyleValue(\"Color\", \"black\");\n            }\n            set\n            {\n                SetStyleValue(\"Color\", value);\n            }\n        }\n\n        [TypeConverter(typeof(TextDecorationConverter))]\n\t\t[LocalizedDisplayName(\"Appearance_TextDecoration\")]\n\t\t[LocalizedDescription(\"Appearance_TextDecoration\")]\n        public string TextDecoration\n        {\n            get\n            {\n                return GetStyleValue(\"TextDecoration\", \"None\");\n            }\n            set\n            {\n                SetStyleValue(\"TextDecoration\", value);\n            }\n        }\n\n        [TypeConverter(typeof(TextAlignConverter))]\n\t\t[LocalizedDisplayName(\"Appearance_TextAlign\")]\n\t\t[LocalizedDescription(\"Appearance_TextAlign\")]\n        public string TextAlign\n        {\n            get\n            {\n                return GetStyleValue(\"TextAlign\", \"General\");\n            }\n            set\n            {\n                SetStyleValue(\"TextAlign\", value);\n            }\n        }\n\n        [TypeConverter(typeof(VerticalAlignConverter))]\n\t\t[LocalizedDisplayName(\"Appearance_VerticalAlign\")]\n\t\t[LocalizedDescription(\"Appearance_VerticalAlign\")]\n        public string VerticalAlign\n        {\n            get\n            {\n                return GetStyleValue(\"VerticalAlign\", \"Top\");\n            }\n            set\n            {\n                SetStyleValue(\"VerticalAlign\", value);\n            }\n        }\n\n        [TypeConverter(typeof(DirectionConverter))]\n\t\t[LocalizedDisplayName(\"Appearance_Direction\")]\n\t\t[LocalizedDescription(\"Appearance_Direction\")]\n        public string Direction\n        {\n            get\n            {\n                return GetStyleValue(\"Direction\", \"LTR\");\n            }\n            set\n            {\n                SetStyleValue(\"Direction\", value);\n            }\n        }\n\n        [TypeConverter(typeof(WritingModeConverter))]\n\t\t[LocalizedDisplayName(\"Appearance_WritingMode\")]\n\t\t[LocalizedDescription(\"Appearance_WritingMode\")]\n        public string WritingMode\n        {\n            get\n            {\n                return GetStyleValue(\"WritingMode\", \"lr-tb\");\n            }\n            set\n            {\n                SetStyleValue(\"WritingMode\", value);\n            }\n        }\n\n        [TypeConverter(typeof(FormatConverter))]\n\t\t[LocalizedDisplayName(\"Appearance_Format\")]\n\t\t[LocalizedDescription(\"Appearance_Format\")]\n        public string Format\n        {\n            get\n            {\n                return GetStyleValue(\"Format\", \"\");\n            }\n            set\n            {\n                SetStyleValue(\"Format\", value);\n            }\n        }\n\n        public override string ToString()\n        {\n            string f = GetStyleValue(\"FontFamily\", \"Arial\");\n            string s = GetStyleValue(\"FontSize\", \"10pt\");\n            string c = GetStyleValue(\"Color\", \"Black\");\n\n            return string.Format(\"{0}, {1}, {2}\", f,s,c);\n        }\n        \n        private string GetStyleValue(string l1, string def)\n        {\n            _subitems[_subitems.Length - 1] = l1;\n            return pri.GetWithList(def, _subitems);\n        }\n\n        private void SetStyleValue(string l1, string val)\n        {\n            _subitems[_subitems.Length - 1] = l1;\n            pri.SetWithList(val, _subitems);\n        }\n\n        #region IReportItem Members\n        public PropertyReportItem GetPRI()\n        {\n            return pri;\n        }\n        #endregion\n    }\n\n    internal class PropertyAppearanceConverter :  ExpandableObjectConverter\n    {\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;\n        }\n\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                          System.Type destinationType)\n        {\n            if (destinationType == typeof(PropertyAppearance))\n                return true;\n            \n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context, \n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyAppearance)\n            {\n                PropertyAppearance pf = value as PropertyAppearance;\n                return pf.ToString();\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n\n    internal class PropertyAppearanceUIEditor : UITypeEditor\n    {\n        public PropertyAppearanceUIEditor()\n        {\n        }\n\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context,\n                                        IServiceProvider provider,\n                                        object value)\n        {\n\n            if ((context == null) || (provider == null))\n                return base.EditValue(context, provider, value);\n\n            // Access the Property Browser's UI display service\n            IWindowsFormsEditorService editorService =\n                (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));\n\n            if (editorService == null)\n                return base.EditValue(context, provider, value);\n\n            // Create an instance of the UI editor form\n            IReportItem iri = context.Instance as IReportItem;\n            if (iri == null)\n                return base.EditValue(context, provider, value);\n            PropertyReportItem pre = iri.GetPRI();\n\n            PropertyAppearance pf = value as PropertyAppearance;\n            if (pf == null)\n                return base.EditValue(context, provider, value);\n\n            using (SingleCtlDialog scd = new SingleCtlDialog(pre.DesignCtl, pre.Draw, pre.Nodes, SingleCtlTypeEnum.FontCtl, pf.Names))\n            {\n                // Display the UI editor dialog\n                if (editorService.ShowDialog(scd) == DialogResult.OK)\n                {\n                    // Return the new property value from the UI editor form\n                    return new PropertyAppearance(pre, pf.Names);\n                }\n            }\n            return base.EditValue(context, provider, value);\n        }\n    }\n    #region FontStyle\n    internal class FontStyleConverter : StringConverter\n    {\n        static readonly string[] StyleList = new string[] {\"Normal\",\"Italic\"};\n        \n        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;   // allow user to also edit the color directly\n        }\n        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n        {\n            return new StandardValuesCollection(StyleList);\n        }\n    }\n    #endregion\n    #region FontWeight\n    internal class FontWeightConverter : StringConverter\n    {\n        static readonly string[] WeightList = new string[] { \"Lighter\", \"Normal\",\"Bold\", \"Bolder\",\n             \"100\", \"200\", \"300\", \"400\", \"500\", \"600\", \"700\", \"800\", \"900\"};\n\n        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;   // allow user to also edit the color directly\n        }\n        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n        {\n            return new StandardValuesCollection(WeightList);\n        }\n    }\n    #endregion\n    #region TextDecoration\n    internal class TextDecorationConverter : StringConverter\n    {\n        static readonly string[] TDList = new string[] { \"Underline\", \"Overline\", \"LineThrough\", \"None\"};\n\n        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;   // allow user to also edit directly\n        }\n        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n        {\n            return new StandardValuesCollection(TDList);\n        }\n    }\n    #endregion\n    #region TextAlign\n    internal class TextAlignConverter : StringConverter\n    {\n        static readonly string[] TAList = new string[] { \"Left\", \"Center\", \"Right\", \"General\" };\n\n        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;   // allow user to also edit directly\n        }\n        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n        {\n            return new StandardValuesCollection(TAList);\n        }\n    }\n    #endregion\n    #region VerticalAlign\n    internal class VerticalAlignConverter : StringConverter\n    {\n        static readonly string[] VAList = new string[] { \"Top\", \"Middle\", \"Bottom\" };\n\n        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;   // allow user to also edit directly\n        }\n        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n        {\n            return new StandardValuesCollection(VAList);\n        }\n    }\n    #endregion\n    #region Direction\n    internal class DirectionConverter : StringConverter\n    {\n        static readonly string[] DirList = new string[] { \"LTR\", \"RTL\" };\n\n        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;   // allow user to also edit directly\n        }\n        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n        {\n            return new StandardValuesCollection(DirList);\n        }\n    }\n    #endregion\n    #region WritingMode\n    internal class WritingModeConverter : StringConverter\n    {\n        static readonly string[] WMList = new string[] { \"lr-tb\", \"tb-rl\", \"tb-lr\" };\n\n        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;   // allow user to also edit directly\n        }\n        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n        {\n            return new StandardValuesCollection(WMList);\n        }\n    }\n    #endregion\n    #region Format\n    internal class FormatConverter : StringConverter\n    {\n        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;   // allow user to also edit directly\n        }\n        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n        {\n            return new StandardValuesCollection(StaticLists.FormatList);\n        }\n    }\n    #endregion\n}"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyBackground.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Drawing.Design;\nusing System.Globalization;\nusing System.Windows.Forms;\nusing System.Windows.Forms.Design;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyAction - \n    /// </summary>\n    [TypeConverter(typeof(PropertyBackgroundConverter))]\n    [Editor(typeof(PropertyBackgroundUIEditor), typeof(UITypeEditor))]\n    internal class PropertyBackground : IReportItem\n    {\n        PropertyReportItem pri;\n        string[] _names;\n        string[] _subitems;\n\n        public PropertyBackground(PropertyReportItem ri)\n        {\n            pri = ri;\n            _names = null;\n            _subitems = new string[] { \"Style\", \"\" };\n        }\n\n        public PropertyBackground(PropertyReportItem ri, params string[] names)\n        {\n            pri = ri;\n            _names = names;\n\n            // now build the array used to get/set values\n            _subitems = new string[names.Length + 2];\n            int i = 0;\n            foreach (string s in names)\n                _subitems[i++] = s;\n\n            _subitems[i++] = \"Style\";\n        }\n\n        internal PropertyReportItem RI\n        {\n            get { return pri; }\n        }\n\n        internal string[] Names\n        {\n            get { return _names; }\n        }\n\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[TypeConverter(typeof(ColorConverter))]\n\t\t[LocalizedDisplayName(\"Background_Color\")]\n\t\t[LocalizedDescription(\"Background_Color\")]\n        public string Color\n        {\n            get \n            {\n                return GetStyleValue(\"BackgroundColor\", \"\"); \n            }\n            set\n            {\n                SetStyleValue(\"BackgroundColor\", value);\n            }\n        }\n\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[TypeConverter(typeof(ColorConverter))]\n\t\t[LocalizedDisplayName(\"Background_EndColor\")]\n\t\t[LocalizedDescription(\"Background_EndColor\")]\n        public string EndColor\n        {\n            get\n            {\n                return GetStyleValue(\"BackgroundGradientEndColor\", \"\");\n            }\n            set\n            {\n                SetStyleValue(\"BackgroundGradientEndColor\", value);\n            }\n        }\n\n\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[TypeConverter(typeof(GradientTypeConverter))]\n\t\t[LocalizedDisplayName(\"Background_GradientType\")]\n\t\t[LocalizedDescription(\"Background_GradientType\")]\n        public string GradientType\n        {\n            get\n            {\n                return GetStyleValue(\"BackgroundGradientType\", \"None\");\n            }\n            set\n            {\n                SetStyleValue(\"BackgroundGradientType\", value);\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"Background_Image\")]\n\t\t[LocalizedDescription(\"Background_Image\")]\n        public PropertyBackgroundImage Image\n        {\n            get\n            {\n                return new PropertyBackgroundImage(pri, _names);\n            }\n        }\n\n        private string GetStyleValue(string l1, string def)\n        {\n            _subitems[_subitems.Length - 1] = l1;\n            return pri.GetWithList(def, _subitems);\n        }\n\n        private void SetStyleValue(string l1, string val)\n        {\n            _subitems[_subitems.Length - 1] = l1;\n            pri.SetWithList(val, _subitems);\n        }\n\n        public override string ToString()\n        {\n            return GetStyleValue(\"BackgroundColor\", \"\"); \n        }\n\n        #region IReportItem Members\n        public PropertyReportItem GetPRI()\n        {\n            return pri;\n        }\n        #endregion\n    }\n\n    internal class PropertyBackgroundConverter :  ExpandableObjectConverter\n    {\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;\n        }\n\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                          System.Type destinationType)\n        {\n            if (destinationType == typeof(PropertyBackground))\n                return true;\n            \n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context, \n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyBackground)\n            {\n                PropertyBackground pf = value as PropertyBackground;\n                return pf.ToString();\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n\n    internal class PropertyBackgroundUIEditor : UITypeEditor\n    {\n        public PropertyBackgroundUIEditor()\n        {\n        }\n\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context,\n                                        IServiceProvider provider,\n                                        object value)\n        {\n\n            if ((context == null) || (provider == null))\n                return base.EditValue(context, provider, value);\n\n            // Access the Property Browser's UI display service\n            IWindowsFormsEditorService editorService =\n                (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));\n\n            if (editorService == null)\n                return base.EditValue(context, provider, value);\n\n            // Create an instance of the UI editor form\n            IReportItem iri = context.Instance as IReportItem;\n            if (iri == null)\n                return base.EditValue(context, provider, value);\n            PropertyReportItem pre = iri.GetPRI();\n\n            string[] names;\n            PropertyBackground pb = value as PropertyBackground;\n            if (pb != null)\n                names = pb.Names;\n            else\n            {\n                PropertyBackgroundImage pbi = value as PropertyBackgroundImage;\n                if (pbi == null)\n                    return base.EditValue(context, provider, value);\n                names = pbi.Names;\n            }\n\n            using (SingleCtlDialog scd = new SingleCtlDialog(pre.DesignCtl, pre.Draw, pre.Nodes,\n                SingleCtlTypeEnum.BackgroundCtl, names))\n            {\n\n                // Display the UI editor dialog\n                if (editorService.ShowDialog(scd) == DialogResult.OK)\n                {\n                    // Return the new property value from the UI editor form\n                    return new PropertyBackground(pre);\n                }\n\n                return base.EditValue(context, provider, value);\n            }\n        }\n    }\n\n    #region GradientType\n    internal class GradientTypeConverter : StringConverter\n    {\n        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;   // allow user to also edit directly\n        }\n        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n        {\n            return new StandardValuesCollection(StaticLists.GradientList);\n        }\n    }\n    #endregion\n\n    [TypeConverter(typeof(PropertyBackgroundImageConverter))]\n    [Editor(typeof(PropertyBackgroundUIEditor), typeof(UITypeEditor))]\n    internal class PropertyBackgroundImage : IReportItem\n    {\n        PropertyReportItem pri;\n        string[] _names;\n        string[] _subitems;\n\n        public PropertyBackgroundImage(PropertyReportItem ri, string[] names)\n        {\n            pri = ri;\n            _names = names;\n            if (names == null)\n            {\n                _subitems = new string[] { \"Style\", \"BackgroundImage\", \"\" };\n            }\n            else\n            {\n                // now build the array used to get/set values\n                _subitems = new string[names.Length + 3];\n                int i = 0;\n                foreach (string s in names)\n                    _subitems[i++] = s;\n\n                _subitems[i++] = \"Style\";\n                _subitems[i++] = \"BackgroundImage\";\n            }\n        }\n\n        internal string[] Names\n        {\n            get { return _names; }\n        }\n\n        public override string ToString()\n        {\n            string s = this.Source;\n            string v = \"\";\n            if (s.ToLower().Trim() != \"none\")\n                v = this.Value.Expression;\n\n            return string.Format(\"{0} {1}\", s, v);\n        }\n\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[TypeConverter(typeof(ImageSourceConverter))]\n\t\t[LocalizedDisplayName(\"BackgroundImage_Source\")]\n\t\t[LocalizedDescription(\"BackgroundImage_Source\")]\n        public string Source\n        {\n            get\n            {\n                _subitems[_subitems.Length-1] = \"Source\";\n                return pri.GetWithList(\"None\", _subitems);\n            }\n            set\n            {\n                if (value.ToLower().Trim() == \"none\")\n                {\n                    List<string> l = new List<string>(_subitems);\n                    l.RemoveAt(l.Count - 1);\n                    pri.RemoveWithList(l.ToArray());\n                }\n                else\n                {\n                    _subitems[_subitems.Length - 1] = \"Source\";\n                    pri.SetWithList(value, _subitems);\n                }\n            }\n        }\n\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[LocalizedDisplayName(\"BackgroundImage_Value\")]\n\t\t[LocalizedDescription(\"BackgroundImage_Value\")]\n        public PropertyExpr Value\n        {\n            get\n            {\n                _subitems[_subitems.Length - 1] = \"Value\";\n                return new PropertyExpr(pri.GetWithList(\"\", _subitems));\n            }\n            set\n            {\n                if (this.Source.ToLower().Trim() == \"none\")\n                    throw new ArgumentException(\"Value isn't relevent when Source=None.\");\n                _subitems[_subitems.Length - 1] = \"Value\";\n                pri.SetWithList(value.Expression, _subitems);\n            }\n        }\n\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[TypeConverter(typeof(ImageMIMETypeConverter))]\n\t\t[LocalizedDisplayName(\"BackgroundImage_MIMEType\")]\n\t\t[LocalizedDescription(\"BackgroundImage_MIMEType\")]\n        public string MIMEType\n        {\n            get\n            {\n                _subitems[_subitems.Length - 1] = \"MIMEType\";\n                return pri.GetWithList(\"\", _subitems);\n            }\n            set\n            {\n                if (this.Source.ToLower().Trim() != \"database\")\n                    throw new ArgumentException(\"MIMEType isn't relevent when Source isn't Database.\");\n                _subitems[_subitems.Length - 1] = \"MIMEType\";\n                pri.SetWithList(value, _subitems);\n            }\n        }\n\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[TypeConverter(typeof(ImageRepeatConverter))]\n\t\t[LocalizedDisplayName(\"BackgroundImage_Repeat\")]\n\t\t[LocalizedDescription(\"BackgroundImage_Repeat\")]\n        public string Repeat\n        {\n            get\n            {\n                _subitems[_subitems.Length - 1] = \"BackgroundRepeat\";\n                return pri.GetWithList(\"Repeat\", _subitems);\n            }\n            set\n            {\n                if (this.Source.ToLower().Trim() == \"none\")\n                    throw new ArgumentException(\"Repeat isn't relevent when Source=None.\");\n                _subitems[_subitems.Length - 1] = \"BackgroundRepeat\";\n                pri.SetWithList(value, _subitems);\n            }\n        }\n\n\n        #region IReportItem Members\n\n        public PropertyReportItem GetPRI()\n        {\n            return pri;\n        }\n\n        #endregion\n    }\n\n    internal class PropertyBackgroundImageConverter : ExpandableObjectConverter\n    {\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;\n        }\n\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                          System.Type destinationType)\n        {\n            if (destinationType == typeof(PropertyBackgroundImage))\n                return true;\n\n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context,\n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyBackgroundImage)\n            {\n                PropertyBackgroundImage pf = value as PropertyBackgroundImage;\n                return pf.ToString();\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n\n\n\t#region ImageSource\n    internal class ImageSourceConverter : StringConverter\n    {\n        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;   // allow user to also edit directly\n        }\n\n        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n        {\n            if (context.Instance is PropertyImageI)\n                return new StandardValuesCollection(new string[] {\n                                    \"External\", \"Embedded\", \"Database\"});\n            else\n                return new StandardValuesCollection(new string[] {\n                                    \"None\", \"External\", \"Embedded\", \"Database\"});\n        }\n    }\n    #endregion\n\n    #region ImageMIMEType\n    internal class ImageMIMETypeConverter : StringConverter\n    {\n        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;   // allow user to also edit directly\n        }\n        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n        {\n            return new StandardValuesCollection(new string[] {\n                                    \"image/bmp\", \"image/jpeg\", \"image/gif\", \"image/png\",\"image/x-png\"});\n        }\n    }\n#endregion\n\n    #region ImageRepeat\n    internal class ImageRepeatConverter : StringConverter\n    {\n        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;   // allow user to also edit directly\n        }\n        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n        {\n            return new StandardValuesCollection(new string[] {\n                                    \"Repeat\", \"NoRepeat\", \"RepeatX\", \"RepeatY\"});\n        }\n    }\n#endregion\n}"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyBorder.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Drawing;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Drawing.Design;\nusing System.Xml;\nusing System.Globalization;\nusing System.Windows.Forms;\nusing System.Windows.Forms.Design;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyAction - \n    /// </summary>\n    [TypeConverter(typeof(PropertyBorderConverter)),\n       Editor(typeof(PropertyBorderUIEditor), typeof(System.Drawing.Design.UITypeEditor))]\n    internal class PropertyBorder : IReportItem\n    {\n        PropertyReportItem pri;\n        string[] _subitems;\n        string[] _names;\n\n        public PropertyBorder(PropertyReportItem ri)\n        {\n            pri = ri;\n            _names = null;\n            _subitems = new string[] { \"Style\", \"\", \"\" };\n        }\n\n        public PropertyBorder(PropertyReportItem ri, params string[] names)\n        {\n            pri = ri;\n            _names = names;\n\n            if (names == null)\n            {\n                _subitems = new string[] { \"Style\", \"\", \"\" };\n            }\n            else\n            {\n                // now build the array used to get/set values\n                _subitems = new string[names.Length + 3];\n                int i = 0;\n                foreach (string s in names)\n                    _subitems[i++] = s;\n\n                _subitems[i++] = \"Style\";\n            }\n        }\n\n        internal string[] Names\n        {\n            get { return _names; }\n        }\n        \n        public override string ToString()\n        {\n            _subitems[_subitems.Length - 2] = \"BorderStyle\";\n            _subitems[_subitems.Length - 1] = \"Default\";\n            return pri.GetWithList(\"none\", _subitems);\n        }\n        #region IReportItem Members\n        public PropertyReportItem GetPRI()\n        {\n            return this.pri;\n        }\n\n        #endregion\n    }\n\n    internal class PropertyBorderConverter : StringConverter\n    {\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;\n        }\n\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                          System.Type destinationType)\n        {\n            if (destinationType == typeof(PropertyBorder))\n                return true;\n            \n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context, \n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyBorder)\n            {\n                PropertyBorder pb = value as PropertyBorder;\n                return pb.ToString();\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n\n    internal class PropertyBorderUIEditor : UITypeEditor\n    {\n        public PropertyBorderUIEditor()\n        {\n        }\n\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context,\n                                        IServiceProvider provider,\n                                        object value)\n        {\n\n            if ((context == null) || (provider == null))\n                return base.EditValue(context, provider, value);\n\n            // Access the Property Browser's UI display service\n            IWindowsFormsEditorService editorService =\n                (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));\n\n            if (editorService == null)\n                return base.EditValue(context, provider, value);\n\n            // Create an instance of the UI editor form\n            IReportItem iri = context.Instance as IReportItem;\n            if (iri == null)\n                return base.EditValue(context, provider, value);\n            PropertyReportItem pri = iri.GetPRI();\n\n            PropertyBorder pb = value as PropertyBorder;\n            if (pb == null)\n                return base.EditValue(context, provider, value);\n\n            using (SingleCtlDialog scd = new SingleCtlDialog(pri.DesignCtl, pri.Draw, pri.Nodes, SingleCtlTypeEnum.BorderCtl, pb.Names))\n            {\n                // Display the UI editor dialog\n                if (editorService.ShowDialog(scd) == DialogResult.OK)\n                {\n                    // Return the new property value from the UI editor form\n                    return new PropertyBorder(pri, pb.Names);\n                }\n\n                return base.EditValue(context, provider, value);\n            }\n\n        }\n    }\n}"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyChart.cs",
    "content": "using Majorsilence.Reporting.Rdl;\n\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Globalization;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyChart - The Chart Properties\n    /// </summary>\n    internal class PropertyChart : PropertyDataRegion\n    {\n        public PropertyChart(DesignXmlDraw d, DesignCtl dc, List<XmlNode> ris) : base(d, dc, ris)\n        {\n        }\n\n        [LocalizedCategory(\"Chart\")]\n        [TypeConverter(typeof(ChartTypeConverter))]\n\t\t[LocalizedDisplayName(\"Chart_Type\")]\n\t\t[LocalizedDescription(\"Chart_Type\")]\n        public string Type\n        {\n            get { return this.GetValue(\"Type\", \"Column\"); }\n            set\n            {\n                this.SetValue(\"Type\", value);\n            }\n        }\n\n        [LocalizedCategory(\"Chart\")]\n        [TypeConverter(typeof(PaletteTypeConverter))]\n\t\t[LocalizedDisplayName(\"Chart_Palette\")]\n\t\t[LocalizedDescription(\"Chart_Palette\")]\n        public string Palette\n        {\n            get { return this.GetValue(\"Palette\", \"Default\"); }\n            set\n            {\n                this.SetValue(\"Palette\", value);\n            }\n        }\n\n        [LocalizedCategory(\"Chart\")]\n\t\t[LocalizedDisplayName(\"Chart_PointWidth\")]\n\t\t[LocalizedDescription(\"Chart_PointWidth\")]\n        public int PointWidth\n        {\n            get \n            {\n                int pw = 100;\n                try\n                {\n                    string spw = this.GetValue(\"PointWidth\", \"100\");\n                    pw = Convert.ToInt32(spw);\n                }\n                catch { }\n                return pw;\n            }\n            set\n            {\n                if (value <= 0)\n                    throw new ArgumentException(\"PointWidth must be greater than 0.\");\n                this.SetValue(\"PointWidth\", value.ToString());\n            }\n        }\n \n        [LocalizedCategory(\"Chart\")]\n\t\t[LocalizedDisplayName(\"Chart_ChartData\")]\n\t\t[LocalizedDescription(\"Chart_ChartData\")]\n        public PropertyChartData ChartData\n        {\n            get { return new PropertyChartData(this);}\n        }\n\n        [LocalizedCategory(\"Chart\")]\n\t\t[TypeConverter(typeof(ChartTitleTypeConverter))]\n\t\t[LocalizedDisplayName(\"Chart_Title\")]\n\t\t[LocalizedDescription(\"Chart_Title\")]\n        public PropertyChartTitle Title\n        {\n            get { return new PropertyChartTitle(this); }\n        }\n\n        [LocalizedCategory(\"Chart\")]\n\t\t[TypeConverter(typeof(ChartLegendTypeConverter))]\n\t\t[LocalizedDisplayName(\"Chart_Legend\")]\n\t\t[LocalizedDescription(\"Chart_Legend\")]\n        public PropertyChartLegend Legend\n        {\n            get { return new PropertyChartLegend(this); }\n        }\n\n        [LocalizedCategory(\"Chart\")]\n\t\t[TypeConverter(typeof(ChartAxisTypeConverter))]\n\t\t[LocalizedDisplayName(\"Chart_CategoryAxis\")]\n\t\t[LocalizedDescription(\"Chart_CategoryAxis\")]\n        public PropertyChartAxis CategoryAxis\n        {\n            get { return new PropertyChartAxis(this, \"CategoryAxis\"); }\n        }\n\n\t\t[LocalizedCategory(\"Chart\")]\n\t\t[TypeConverter(typeof(ChartAxisTypeConverter))]\n\t\t[LocalizedDisplayName(\"Chart_ValueAxis\")]\n\t\t[LocalizedDescription(\"Chart_ValueAxis\")]\n\t\tpublic PropertyChartAxis ValueAxis\n        {\n            get { return new PropertyChartAxis(this, \"ValueAxis\"); }\n        }\n    }\n\n    #region ChartAxis\n    [TypeConverter(typeof(ChartAxisTypeConverter))]\n\t[LocalizedDescription(\"ChartAxis\")]\n    internal class PropertyChartAxis : IReportItem\n    {\n        PropertyChart _pt;\n        string _Axis;\n        internal PropertyChartAxis(PropertyChart pt, string axis)\n        {\n            _pt = pt;\n            _Axis = axis;\n        }\n\n\t\t[LocalizedDisplayName(\"ChartAxis_Visible\")]\n\t\t[LocalizedDescription(\"ChartAxis_Visible\")]\n        public bool Visible\n        {\n            get\n            {\n                string v = _pt.GetWithList(\"true\", _Axis, \"Axis\", \"Visible\");\n                return v == \"true\";\n            }\n            set\n            {\n                _pt.SetWithList(value ? \"true\" : \"false\", _Axis, \"Axis\", \"Visible\");\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartAxis_Margin\")]\n\t\t[LocalizedDescription(\"ChartAxis_Margin\")]\n        public bool Margin\n        {\n            get\n            {\n                string v = _pt.GetWithList(\"false\", _Axis, \"Axis\", \"Margin\");\n                return v == \"true\";\n            }\n            set\n            {\n                _pt.SetWithList(value ? \"true\" : \"false\", _Axis, \"Axis\", \"Margin\");\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartAxis_MajorTickMarks\")]\n\t\t[LocalizedDescription(\"ChartAxis_MajorTickMarks\")]\n        public AxisTickMarksEnum MajorTickMarks\n        {\n            get\n            {\n                string v = _pt.GetWithList(\"None\", _Axis, \"Axis\", \"MajorTickMarks\");\n                return AxisTickMarks.GetStyle(v);\n            }\n            set\n            {\n                _pt.SetWithList(value.ToString(), _Axis, \"Axis\", \"MajorTickMarks\");\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartAxis_MinorTickMarks\")]\n\t\t[LocalizedDescription(\"ChartAxis_MinorTickMarks\")]\n        public AxisTickMarksEnum MinorTickMarks\n        {\n            get\n            {\n                string v = _pt.GetWithList(\"None\", _Axis, \"Axis\", \"MinorTickMarks\");\n                return AxisTickMarks.GetStyle(v);\n            }\n            set\n            {\n                _pt.SetWithList(value.ToString(), _Axis, \"Axis\", \"MinorTickMarks\");\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartAxis_MajorInterval\")]\n\t\t[LocalizedDescription(\"ChartAxis_MajorInterval\")]\n\t\tpublic PropertyExpr MajorInterval\n        {\n            get\n            {\n                string v = _pt.GetWithList(\"\", _Axis, \"Axis\", \"MajorInterval\");\n                return new PropertyExpr(v);\n            }\n            set\n            {\n                _pt.SetWithList(value.Expression, _Axis, \"Axis\", \"MajorInterval\");\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartAxis_MinorInterval\")]\n\t\t[LocalizedDescription(\"ChartAxis_MinorInterval\")]\n        public PropertyExpr MinorInterval\n        {\n            get\n            {\n                string v = _pt.GetWithList(\"\", _Axis, \"Axis\", \"MinorInterval\");\n                return new PropertyExpr(v);\n            }\n            set\n            {\n                _pt.SetWithList(value.Expression, _Axis, \"Axis\", \"MinorInterval\");\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartAxis_CrossAt\")]\n\t\t[LocalizedDescription(\"ChartAxis_CrossAt\")]\n        public PropertyExpr CrossAt\n        {\n            get\n            {\n                string v = _pt.GetWithList(\"\", _Axis, \"Axis\", \"CrossAt\");\n                return new PropertyExpr(v);\n            }\n            set\n            {\n                _pt.SetWithList(value.Expression, _Axis, \"Axis\", \"CrossAt\");\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartAxis_Min\")]\n\t\t[LocalizedDescription(\"ChartAxis_Min\")]\n        public PropertyExpr Min\n        {\n            get\n            {\n                string v = _pt.GetWithList(\"\", _Axis, \"Axis\", \"Min\");\n                return new PropertyExpr(v);\n            }\n            set\n            {\n                _pt.SetWithList(value.Expression, _Axis, \"Axis\", \"Min\");\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartAxis_Max\")]\n\t\t[LocalizedDescription(\"ChartAxis_Max\")]\n        public PropertyExpr Max\n        {\n            get\n            {\n                string v = _pt.GetWithList(\"\", _Axis, \"Axis\", \"Max\");\n                return new PropertyExpr(v);\n            }\n            set\n            {\n                _pt.SetWithList(value.Expression, _Axis, \"Axis\", \"Max\");\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartAxis_Reverse\")]\n\t\t[LocalizedDescription(\"ChartAxis_Reverse\")]\n        public bool Reverse\n        {\n            get\n            {\n                string v = _pt.GetWithList(\"false\", _Axis, \"Axis\", \"Reverse\");\n                return v == \"true\";\n            }\n            set\n            {\n                _pt.SetWithList(value ? \"true\" : \"false\", _Axis, \"Axis\", \"Reverse\");\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartAxis_Interlaced\")]\n\t\t[LocalizedDescription(\"ChartAxis_Interlaced\")]\n        public bool Interlaced\n        {\n            get\n            {\n                string v = _pt.GetWithList(\"false\", _Axis, \"Axis\", \"Interlaced\");\n                return v == \"true\";\n            }\n            set\n            {\n                _pt.SetWithList(value ? \"true\" : \"false\", _Axis, \"Axis\", \"Interlaced\");\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartAxis_Scalar\")]\n\t\t[LocalizedDescription(\"ChartAxis_Scalar\")]\n        public bool Scalar\n        {\n            get\n            {\n                string v = _pt.GetWithList(\"false\", _Axis, \"Axis\", \"Scalar\");\n                return v == \"true\";\n            }\n            set\n            {\n                _pt.SetWithList(value ? \"true\" : \"false\", _Axis, \"Axis\", \"Scalar\");\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartAxis_LogScale\")]\n\t\t[LocalizedDescription(\"ChartAxis_LogScale\")]\n        public bool LogScale\n        {\n            get\n            {\n                string v = _pt.GetWithList(\"false\", _Axis, \"Axis\", \"LogScale\");\n                return v == \"true\";\n            }\n            set\n            {\n                _pt.SetWithList(value ? \"true\" : \"false\", _Axis, \"Axis\", \"LogScale\");\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartAxis_Title\")]\n\t\t[LocalizedDescription(\"ChartAxis_Title\")]\n        public PropertyChartTitle Title\n        {\n            get { return new PropertyChartTitle(_pt, _Axis, \"Axis\"); }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartAxis_Appearance\")]\n\t\t[LocalizedDescription(\"ChartAxis_Appearance\")]\n        public PropertyAppearance Appearance\n        {\n            get { return new PropertyAppearance(_pt, _Axis, \"Axis\"); }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartAxis_Background\")]\n\t\t[LocalizedDescription(\"ChartAxis_Background\")]\n        public PropertyBackground Background\n        {\n            get { return new PropertyBackground(_pt, _Axis, \"Axis\"); }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartAxis_Border\")]\n\t\t[LocalizedDescription(\"ChartAxis_Border\")]\n        public PropertyBorder Border\n        {\n            get { return new PropertyBorder(_pt, _Axis, \"Axis\"); }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartAxis_Padding\")]\n\t\t[LocalizedDescription(\"ChartAxis_Padding\")]\n        public PropertyPadding Padding\n        {\n            get { return new PropertyPadding(_pt, _Axis, \"Axis\"); }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartAxis_MajorGridLines\")]\n\t\t[LocalizedDescription(\"ChartAxis_MajorGridLines\")]\n        public PropertyChartGridLines MajorGridLines\n        {\n            get { return new PropertyChartGridLines(_pt, _Axis, \"Axis\", \"MajorGridLines\"); }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartAxis_MinorGridLines\")]\n\t\t[LocalizedDescription(\"ChartAxis_MinorGridLines\")]\n        public PropertyChartGridLines MinorGridLines\n        {\n            get { return new PropertyChartGridLines(_pt, _Axis, \"Axis\", \"MinorGridLines\"); }\n        }\n\n        public override string ToString()\n        {\n            if (!this.Visible)\n                return \"hidden\";\n            else\n                return this.Title.Caption.Expression;\n        }\n\n        #region IReportItem Members\n\n        public PropertyReportItem GetPRI()\n        {\n            return this._pt;\n        }\n\n        #endregion\n    }\n    internal class ChartAxisTypeConverter : ExpandableObjectConverter\n    {\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;\n        }\n\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                          System.Type destinationType)\n        {\n            if (destinationType == typeof(PropertyChartAxis))\n                return true;\n\n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context,\n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyChartAxis)\n            {\n                PropertyChartAxis pa = value as PropertyChartAxis;\n                return pa.ToString();\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n\n\n    #endregion\n\n    #region ChartData\n    [LocalizedCategory(\"ChartData\")]\n\t[TypeConverter(typeof(ChartDataTypeConverter))]\n\t[LocalizedDescription(\"ChartData\")]\n    [ReadOnly(true)]//Doesn't work with static rows so we have disabled it... 05122007 AJM & GJL\n    internal class PropertyChartData : IReportItem\n    {\n        PropertyChart _pt;\n        internal PropertyChartData(PropertyChart pt)\n        {\n            _pt = pt;\n        }\n\n\t\t[LocalizedDisplayName(\"ChartData_LabelAppearance\")]\n\t\t[LocalizedDescription(\"ChartData_LabelAppearance\")]\n        public PropertyAppearance LabelAppearance\n        {\n            get\n            {\n                return new PropertyAppearance(_pt,\n                                \"ChartData\", \"ChartSeries\", \"DataPoints\", \"DataPoint\", \"DataLabel\");\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartData_LabelVisible\")]\n\t\t[LocalizedDescription(\"ChartData_LabelVisible\")]\n        public bool LabelVisible\n        {\n            get\n            {\n                string cdata = _pt.GetWithList(\"false\",\n                    \"ChartData\", \"ChartSeries\", \"DataPoints\", \"DataPoint\", \"DataLabel\", \"Visible\");\n\n                return cdata.ToLower() == \"true\";\n            }\n            set\n            {\n                _pt.SetWithList(value? \"true\": \"false\", \"ChartData\", \"ChartSeries\", \n                    \"DataPoints\", \"DataPoint\", \"DataLabel\", \"Visible\");\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartData_DataValue\")]\n\t\t[LocalizedDescription(\"ChartData_DataValue\")]\n        public PropertyExpr DataValue\n        {\n            get\n            {\n                // Chart data-- this is a simplification of what is possible (TODO) \n                //        <ChartData>\n                //          <ChartSeries>\n                //            <DataPoints>\n                //              <DataPoint>\n                //                <DataValues>\n                //                  <DataValue>\n                //                    <Value>=Sum(Fields!Sales.Value)</Value>\n                //                  </DataValue>\n                //                </DataValues>\n                //                <DataLabel>\n                //                  <Style>\n                //                    <Format>c</Format>\n                //                  </Style>\n                //                </DataLabel>\n                //                <Marker />\n                //              </DataPoint>\n                //            </DataPoints>\n                //          </ChartSeries>\n                //        </ChartData>\n\n                string cdata = _pt.GetWithList(\"\",\n                    \"ChartData\", \"ChartSeries\", \"DataPoints\", \"DataPoint\", \"DataValues\", \"DataValue\", \"Value\");\n                return new PropertyExpr(cdata);\n            }\n            set\n            {\n                _pt.SetWithList(value.Expression, \"ChartData\", \"ChartSeries\", \"DataPoints\", \"DataPoint\",\n                    \"DataValues\", \"DataValue\", \"Value\");\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartData_DataValue2\")]\n\t\t[LocalizedDescription(\"ChartData_DataValue2\")]\n        public PropertyExpr DataValue2\n        {\n            get\n            {\n                // Chart data-- this is a simplification of what is possible (TODO) \n                //        <ChartData>\n                //          <ChartSeries>\n                //            <DataPoints>\n                //              <DataPoint>\n                //                <DataValues>\n                //                  <DataValue>\n                //                    <Value>=Sum(Fields!Sales.Value)</Value>\n                //                  </DataValue>\n                //                  <DataValue>   ---- this is the second data value\n                //                    <Value>=Sum(Fields!Sales.Value)</Value>\n                //                  </DataValue>\n                //                </DataValues>\n                //                <DataLabel>\n                //                  <Style>\n                //                    <Format>c</Format>\n                //                  </Style>\n                //                </DataLabel>\n                //                <Marker />\n                //              </DataPoint>\n                //            </DataPoints>\n                //          </ChartSeries>\n                //        </ChartData>\n                string type = _pt.Type.ToLowerInvariant();\n                if (!(type == \"scatter\" || type == \"bubble\"))\n                    return new PropertyExpr(\"\");\n\n                return new PropertyExpr(GetChartDataValue(2));\n            }\n            set\n            {\n                string type = _pt.Type.ToLowerInvariant();\n                if (!(type == \"scatter\" || type == \"bubble\"))\n                    throw new ArgumentException(\"Chart type must be 'Scatter' or 'Bubble' to set DataValue2.\"); ;\n                SetChartDataValue(2, value.Expression);\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartData_DataValue3\")]\n\t\t[LocalizedDescription(\"ChartData_DataValue3\")]\n        public PropertyExpr DataValue3\n        {\n            get\n            {\n                // Chart data-- this is a simplification of what is possible \n                //        <ChartData>\n                //          <ChartSeries>\n                //            <DataPoints>\n                //              <DataPoint>\n                //                <DataValues>\n                //                  <DataValue>\n                //                    <Value>=Sum(Fields!Sales.Value)</Value>\n                //                  </DataValue>\n                //                  <DataValue>\n                //                    <Value>=Sum(Fields!Sales.Value)</Value>\n                //                  </DataValue>\n                //                  <DataValue>   ---- this is the third data value-- bubble size\n                //                    <Value>=Sum(Fields!Sales.Value)</Value>\n                //                  </DataValue>\n                //                </DataValues>\n                //                <DataLabel>\n                //                  <Style>\n                //                    <Format>c</Format>\n                //                  </Style>\n                //                </DataLabel>\n                //                <Marker />\n                //              </DataPoint>\n                //            </DataPoints>\n                //          </ChartSeries>\n                //        </ChartData>\n                string type = _pt.Type.ToLowerInvariant();\n                if (type != \"bubble\")\n                    return new PropertyExpr(\"\");\n\n                return new PropertyExpr(GetChartDataValue(3));\n            }\n            set\n            {\n                string type = _pt.Type.ToLowerInvariant();\n                if (type != \"bubble\")\n                    throw new ArgumentException(\"Chart type must be 'Bubble' to set DataValue3.\"); ;\n                SetChartDataValue(3, value.Expression);\n            }\n        }\n\n\t\tprivate string GetChartDataValue(int i)\n        {\n            XmlNode dvs = DesignXmlDraw.FindNextInHierarchy(_pt.Node,\n    \"ChartData\", \"ChartSeries\", \"DataPoints\", \"DataPoint\", \"DataValues\");\n            XmlNode cnode;\n            foreach (XmlNode dv in dvs.ChildNodes)\n            {\n                if (dv.Name != \"DataValue\")\n                    continue;\n                i--;\n                cnode = DesignXmlDraw.FindNextInHierarchy(dv, \"Value\");\n                if (cnode == null)\n                    continue;\n                if (i <= 0)\n                    return cnode.InnerText;\n            }\n            return \"\";\n        }\n \n        private void SetChartDataValue(int i, string expr)\n        {\n            DesignXmlDraw dr = _pt.Draw;\n            string expr1 = i == 1 ? expr : _pt.ChartData.DataValue.Expression;\n            string expr2 = i == 2 ? expr : _pt.ChartData.DataValue2.Expression;\n            string expr3 = i == 3 ? expr : _pt.ChartData.DataValue3.Expression;\n\n            foreach (XmlNode node in _pt.Nodes)\n            {\n                XmlNode chartdata = dr.SetElement(node, \"ChartData\", null);\n                XmlNode chartseries = dr.SetElement(chartdata, \"ChartSeries\", null);\n                XmlNode datapoints = dr.SetElement(chartseries, \"DataPoints\", null);\n                XmlNode datapoint = dr.SetElement(datapoints, \"DataPoint\", null);\n                XmlNode datavalues = dr.SetElement(datapoint, \"DataValues\", null);\n                dr.RemoveElementAll(datavalues, \"DataValue\");\n                XmlNode datavalue = dr.SetElement(datavalues, \"DataValue\", null);\n                dr.SetElement(datavalue, \"Value\", expr1);\n\n                string type = _pt.Type.ToLowerInvariant();\n                if (type == \"scatter\" || type == \"bubble\")\n                {\n                    datavalue = dr.CreateElement(datavalues, \"DataValue\", null);\n                    dr.SetElement(datavalue, \"Value\", expr2);\n                    if (type == \"bubble\")\n                    {\n                        datavalue = dr.CreateElement(datavalues, \"DataValue\", null);\n                        dr.SetElement(datavalue, \"Value\", expr3);\n                    }\n                }\n            }\n        }\n        \n        public override string ToString()\n        {\n            return _pt.GetWithList(\"\",\n                \"ChartData\", \"ChartSeries\", \"DataPoints\", \"DataPoint\", \"DataValues\", \"DataValue\", \"Value\");\n        }\n\n#region IReportItem Members\n\n        public PropertyReportItem GetPRI()\n        {\n            return this._pt;\n        }\n\n        #endregion\n    }\n\n    internal class ChartDataTypeConverter : ExpandableObjectConverter\n    {\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;\n        }\n\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                          System.Type destinationType)\n        {\n            if (destinationType == typeof(PropertyChartData))\n                return true;\n\n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context,\n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyChartData)\n            {\n                PropertyChartData pc = value as PropertyChartData;\n                return pc.ToString();\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n\n\n#endregion\n\n    #region ChartGridLines\n    [TypeConverter(typeof(ChartGridLinesTypeConverter))]\n    internal class PropertyChartGridLines : IReportItem\n    {\n        PropertyChart _pt;\n        string[] _names;\n\n        internal PropertyChartGridLines(PropertyChart pt, params string[] names)\n        {\n            _pt = pt;\n            _names = names;\n        }\n\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[LocalizedDisplayName(\"ChartGridLines_ShowGridLines\")]\n\t\t[LocalizedDescription(\"ChartGridLines_ShowGridLines\")]\n        public bool ShowGridLines\n        {\n            get\n            {\n                List<string> l = new List<string>(_names);\n                l.Add(\"ShowGridLines\");\n                string s = _pt.GetWithList(\"false\", l.ToArray());\n                return s == \"true\";\n            }\n            set\n            {\n                List<string> l = new List<string>(_names);\n                l.Add(\"ShowGridLines\");\n                _pt.SetWithList(value?\"true\":\"false\", l.ToArray());\n            }\n        }\n\n        [TypeConverter(typeof(ColorConverter))]\n\t\t[LocalizedDisplayName(\"ChartGridLines_Color\")]\n\t\t[LocalizedDescription(\"ChartGridLines_Color\")]\n        public string Color\n        {\n            get\n            {\n                List<string> l = new List<string>(_names);\n                l.Add(\"Style\");\n                l.Add(\"BorderColor\");\n                l.Add(\"Default\");\n                return _pt.GetWithList(\"Black\", l.ToArray());\n            }\n            set\n            {\n                List<string> l = new List<string>(_names);\n                l.Add(\"Style\");\n                l.Add(\"BorderColor\");\n                l.Add(\"Default\");\n                _pt.SetWithList(value, l.ToArray());\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartGridLines_LineStyle\")]\n\t\t[LocalizedDescription(\"ChartGridLines_LineStyle\")]\n        public LineStyleEnum LineStyle\n        {\n            get\n            {\n                List<string> l = new List<string>(_names);\n                l.Add(\"Style\");\n                l.Add(\"BorderStyle\");\n                l.Add(\"Default\");\n                string s = _pt.GetWithList(\"Solid\", l.ToArray());\n                switch (s)\n                {\n                    case \"Solid\": return LineStyleEnum.Solid;\n                    case \"Dotted\": return LineStyleEnum.Dotted;\n                    case \"Dashed\": return LineStyleEnum.Dashed;\n                    default: return LineStyleEnum.Solid;\n                }\n            }\n            set\n            {\n                List<string> l = new List<string>(_names);\n                l.Add(\"Style\");\n                l.Add(\"BorderStyle\");\n                l.Add(\"Default\");\n                _pt.SetWithList(value.ToString(), l.ToArray());\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartGridLines_Width\")]\n\t\t[LocalizedDescription(\"ChartGridLines_Width\")]\n        public PropertyExpr Width\n        {\n            get\n            {\n                List<string> l = new List<string>(_names);\n                l.Add(\"Style\");\n                l.Add(\"BorderWidth\");\n                l.Add(\"Default\");\n                return new PropertyExpr(_pt.GetWithList(\"1pt\", l.ToArray()));\n            }\n            set\n            {\n                List<string> l = new List<string>(_names);\n                l.Add(\"Style\");\n                l.Add(\"BorderWidth\");\n                l.Add(\"Default\");\n                _pt.SetWithList(value.Expression, l.ToArray());\n            }\n        }\n        \n        public override string ToString()\n        {\n            return this.ShowGridLines?\"visible\":\"hidden\";\n        }\n\n        #region IReportItem Members\n\n        public PropertyReportItem GetPRI()\n        {\n            return this._pt;\n        }\n\n        #endregion\n    }\n    internal class ChartGridLinesTypeConverter : ExpandableObjectConverter\n    {\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;\n        }\n\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                          System.Type destinationType)\n        {\n            if (destinationType == typeof(PropertyChartGridLines))\n                return true;\n\n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context,\n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyChartGridLines)\n            {\n                PropertyChartGridLines pf = value as PropertyChartGridLines;\n                return pf.ToString();\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n\n    #endregion\n\n    #region ChartLegend\n    [LocalizedCategory(\"ChartLegend\")]\n    [TypeConverter(typeof(ChartLegendTypeConverter))]\n\t[LocalizedDescription(\"ChartLegend\")]\n    internal class PropertyChartLegend : IReportItem\n    {\n        PropertyChart _pt;\n        internal PropertyChartLegend(PropertyChart pt)\n        {\n            _pt = pt;\n        }\n\n\t\t[LocalizedDisplayName(\"ChartLegend_Visible\")]\n\t\t[LocalizedDescription(\"ChartLegend_Visible\")]\n        public bool Visible\n        {\n            get\n            {\n                string v = _pt.GetWithList(\"true\", \"Legend\", \"Visible\");\n                return v == \"true\";\n            }\n            set\n            {\n                _pt.SetWithList(value ? \"true\" : \"false\", \"Legend\", \"Visible\");\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartLegend_Position\")]\n\t\t[LocalizedDescription(\"ChartLegend_Position\")]\n        public LegendPositionEnum Position\n        {\n            get\n            {\n                string v = _pt.GetWithList(\"RightTop\", \"Legend\", \"Position\");\n                return LegendPosition.GetStyle(v);\n            }\n            set\n            {\n                _pt.SetWithList(value.ToString(), \"Legend\", \"Position\");\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartLegend_Layout\")]\n\t\t[LocalizedDescription(\"ChartLegend_Layout\")]\n        public LegendLayoutEnum Layout\n        {\n            get\n            {\n                string v = _pt.GetWithList(\"Column\", \"Legend\", \"Layout\");\n                return LegendLayout.GetStyle(v);\n            }\n            set\n            {\n                _pt.SetWithList(value.ToString(), \"Legend\", \"Layout\");\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartLegend_InsidePlotArea\")]\n\t\t[LocalizedDescription(\"ChartLegend_InsidePlotArea\")]\n        public bool InsidePlotArea\n        {\n            get\n            {\n                string v = _pt.GetWithList(\"true\", \"Legend\", \"InsidePlotArea\");\n                return v.ToLower() == \"true\";\n            }\n            set\n            {\n                _pt.SetWithList(value ? \"true\" : \"false\", \"Legend\", \"InsidePlotArea\");\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartLegend_Appearance\")]\n\t\t[LocalizedDescription(\"ChartLegend_Appearance\")]\n        public PropertyAppearance Appearance\n        {\n            get { return new PropertyAppearance(_pt, \"Legend\"); }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartLegend_Background\")]\n\t\t[LocalizedDescription(\"ChartLegend_Background\")]\n        public PropertyBackground Background\n        {\n            get { return new PropertyBackground(_pt, \"Legend\"); }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartLegend_Border\")]\n\t\t[LocalizedDescription(\"ChartLegend_Border\")]\n        public PropertyBorder Border\n        {\n            get { return new PropertyBorder(_pt, \"Legend\"); }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartLegend_Padding\")]\n\t\t[LocalizedDescription(\"ChartLegend_Padding\")]\n        public PropertyPadding Padding\n        {\n            get { return new PropertyPadding(_pt, \"Legend\"); }\n        }\n\n        public override string ToString()\n        {\n            //return _pt.GetWithList(\"\", \"Title\", \"Caption\");\n            if (!this.Visible)\n                return \"hidden\";\n            else\n                return this.Position.ToString();\n        }\n\n        #region IReportItem Members\n\n        public PropertyReportItem GetPRI()\n        {\n            return this._pt;\n        }\n\n        #endregion\n    }\n    internal class ChartLegendTypeConverter : ExpandableObjectConverter\n    {\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;\n        }\n\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                          System.Type destinationType)\n        {\n            if (destinationType == typeof(PropertyChartLegend))\n                return true;\n\n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context,\n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyChartLegend)\n            {\n                PropertyChartLegend pf = value as PropertyChartLegend;\n                return pf.ToString();\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n\n\n#endregion\n\n    #region ChartTitle\n    [LocalizedCategory(\"ChartTitle\")]\n    [TypeConverter(typeof(ChartTitleTypeConverter))]\n\t[LocalizedDescription(\"ChartTitle\")]\n    internal class PropertyChartTitle : IReportItem\n    {\n        PropertyChart _pt;\n        string[] _subitems;\n        string[] _names;\n\n        internal PropertyChartTitle(PropertyChart pt)\n        {\n            _pt = pt;\n            _names = null;\n            _subitems = new string[] { \"Title\"};\n        }\n\n        internal PropertyChartTitle(PropertyChart pt, params string[] names)\n        {\n            _pt = pt;\n            _names = names;\n\n            // now build the array used to get/set values\n            _subitems = new string[names.Length + 1];\n            int i = 0;\n            foreach (string s in names)\n                _subitems[i++] = s;\n\n            _subitems[i++] = \"Title\";\n        }\n\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[LocalizedDisplayName(\"ChartTitle_Caption\")]\n\t\t[LocalizedDescription(\"ChartTitle_Caption\")]\n        public PropertyExpr Caption\n        {\n            get\n            {\n                List<string> l = new List<string>(_subitems);\n                l.Add(\"Caption\");\n                return new PropertyExpr(_pt.GetWithList(\"\", l.ToArray()));\n            }\n            set\n            {\n                List<string> l = new List<string>(_subitems);\n                l.Add(\"Caption\");\n                _pt.SetWithList(value.Expression, l.ToArray());\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartTitle_Appearance\")]\n\t\t[LocalizedDescription(\"ChartTitle_Appearance\")]\n        public PropertyAppearance Appearance\n        {\n            get { return new PropertyAppearance(_pt, _subitems); }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartTitle_Background\")]\n\t\t[LocalizedDescription(\"ChartTitle_Background\")]\n        public PropertyBackground Background\n        {\n            get { return new PropertyBackground(_pt, _subitems); }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartTitle_Border\")]\n\t\t[LocalizedDescription(\"ChartTitle_Border\")]\n        public PropertyBorder Border\n        {\n            get { return new PropertyBorder(_pt, _subitems); }\n        }\n\n\t\t[LocalizedDisplayName(\"ChartTitle_Padding\")]\n\t\t[LocalizedDescription(\"ChartTitle_Padding\")]\n        public PropertyPadding Padding\n        {\n            get { return new PropertyPadding(_pt, _subitems); }\n        }\n\n        public override string ToString()\n        {\n            return this.Caption.Expression;\n        }\n\n        #region IReportItem Members\n\n        public PropertyReportItem GetPRI()\n        {\n            return this._pt;\n        }\n\n        #endregion\n    }\n    internal class ChartTitleTypeConverter : ExpandableObjectConverter\n    {\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;\n        }\n\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                          System.Type destinationType)\n        {\n            if (destinationType == typeof(PropertyChartTitle))\n                return true;\n\n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context,\n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyChartTitle)\n            {\n                PropertyChartTitle pf = value as PropertyChartTitle;\n                return pf.ToString();\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n\n    #endregion\n\n    #region ChartType\n    internal class ChartTypeConverter : StringConverter\n    {\n        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n        {\n            return new StandardValuesCollection(new string[] {\n                                    \"Column\", \"Bar\", \"Line\", \"Map\", \"Pie\", \"Area\", \"Doughnut\", \"Bubble\", \"Scatter\"});\n        }\n    }\n    #endregion\n\n    #region PaletteType\n    internal class PaletteTypeConverter : StringConverter\n    {\n        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n        {\n            return new StandardValuesCollection(new string[] {\n               \"Default\", \"EarthTones\", \"Excel\", \"GrayScale\", \"Light\", \"Pastel\", \"SemiTransparent\",\"Patterned\",\"PatternedBlack\",\"Custom\"});\n        }\n    }\n    #endregion\n\n    internal enum LineStyleEnum {Solid, Dotted, Dashed };\n}\n"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyDataRegion.cs",
    "content": "\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyChart - The Chart Properties\n    /// </summary>\n    internal class PropertyDataRegion : PropertyReportItem\n    {\n        public PropertyDataRegion(DesignXmlDraw d, DesignCtl dc, List<XmlNode> ris) : base(d, dc, ris)\n        {\n        }\n        \n\t\t[LocalizedCategory(\"DataRegion\")]\n\t\t[LocalizedDisplayName(\"DataRegion_NoRows\")]\n\t\t[LocalizedDescription(\"DataRegion_NoRows\")]\n        public PropertyExpr NoRows\n        {\n            get { return new PropertyExpr(this.GetValue(\"NoRows\", \"\")); }\n            set\n            {\n                if (value.Expression == null || value.Expression.Length == 0)\n                    this.RemoveValue(\"NoRows\");\n                else\n                    this.SetValue(\"NoRows\", value.Expression);\n            }\n        }\n\n        [LocalizedCategory(\"DataRegion\")]\n\t\t[LocalizedDisplayName(\"DataRegion_KeepTogether\")]\n\t\t[LocalizedDescription(\"DataRegion_KeepTogether\")]\n        public bool KeepTogether\n        {\n            get { return this.GetValue(\"KeepTogether\", \"True\").ToLower().Trim() == \"true\"; }\n            set\n            {\n                this.SetValue(\"KeepTogether\", value);\n            }\n        }\n\n        [LocalizedCategory(\"DataRegion\")]\n\t\t[TypeConverter(typeof(DataSetsConverter))]\n\t\t[LocalizedDisplayName(\"DataRegion_DataSetName\")]\n\t\t[LocalizedDescription(\"DataRegion_DataSetName\")]\n        public string DataSetName\n        {\n            get { return this.GetValue(\"DataSetName\", \"\"); }\n            set\n            {\n                if (value == null || value.Length == 0)\n                    this.RemoveValue(\"DataSetName\");\n                else\n                    this.SetValue(\"DataSetName\", value);\n            }\n        }\n\n        [LocalizedCategory(\"DataRegion\")]\n\t\t[LocalizedDisplayName(\"DataRegion_PageBreakAtStart\")]\n\t\t[LocalizedDescription(\"DataRegion_PageBreakAtStart\")]\n        public bool PageBreakAtStart\n        {\n            get { return this.GetValue(\"PageBreakAtStart\", \"True\").ToLower().Trim() == \"true\"; }\n            set\n            {\n                this.SetValue(\"PageBreakAtStart\", value);\n            }\n        }\n\n        [LocalizedCategory(\"DataRegion\")]\n\t\t[LocalizedDisplayName(\"DataRegion_PageBreakAtEnd\")]\n\t\t[LocalizedDescription(\"DataRegion_PageBreakAtEnd\")]\n        public bool PageBreakAtEnd\n        {\n            get { return this.GetValue(\"PageBreakAtEnd\", \"True\").ToLower().Trim() == \"true\"; }\n            set\n            {\n                this.SetValue(\"PageBreakAtEnd\", value);\n            }\n        }\n\n        [LocalizedCategory(\"DataRegion\")]\n\t\t[LocalizedDisplayName(\"DataRegion_Filters\")]\n\t\t[LocalizedDescription(\"DataRegion_Filters\")]\n        public PropertyFilters Filters\n        {\n            get\n            {\n                return new PropertyFilters(this);\n            }\n        }\n\n\t\t[LocalizedCategory(\"DataRegion\")]\n\t\t[LocalizedDisplayName(\"DataRegion_Appearance\")]\n\t\t[LocalizedDescription(\"DataRegion_Appearance\")]\n        public PropertyAppearance Appearance\n        {\n            get { return new PropertyAppearance(this); }\n        }\n    }\n\n    #region DataSets\n    internal class DataSetsConverter : StringConverter\n    {\n        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n        {\n            PropertyReportItem pr = context.Instance as PropertyReportItem;\n            if (pr == null)\n                return base.GetStandardValues(context);\n\n            // Populate with the list of datasets\n            ArrayList ar = new ArrayList();\n            ar.Add(\"\");         // add an empty string to the collection\n            object[] dsn = pr.Draw.DataSetNames;\n            if (dsn != null)\n                ar.AddRange(dsn);\n            return new StandardValuesCollection(ar);\n        }\n    }\n    #endregion\n\n}\n"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyExpr.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Collections;\nusing System.Text;\nusing System.Drawing;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Drawing.Design;\nusing System.Xml;\nusing System.Globalization;\nusing System.Windows.Forms;\nusing System.Windows.Forms.Design;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyExpr - \n    /// </summary>\n    [TypeConverter(typeof(PropertyExprConverter)),\n        Editor(typeof(PropertyExprUIEditor), typeof(System.Drawing.Design.UITypeEditor))]\n    internal class PropertyExpr\n    {\n        string _expr;\n        //ArrayList _list;\n\n        public PropertyExpr(string ex)\n        {\n            _expr = ex;\n        }\n        //internal PropertyExpr(string ex, ArrayList list)\n        //{\n        //    _expr = ex;\n        //    _list = list;\n        //}\n        internal string Expression\n        {\n            get { return _expr; }\n        }\n        \n        public override string ToString()\n        {\n            return _expr;\n        }\n    }\n\n    internal class PropertyExprConverter : StringConverter\n    {\n\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                          System.Type destinationType)\n        {\n            if (destinationType == typeof(PropertyExpr))\n                return true;\n            \n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override bool CanConvertFrom(ITypeDescriptorContext context, Type t)\n        {\n\n            if (t == typeof(string))\n            {\n                return true;\n            }\n            return base.CanConvertFrom(context, t);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context, \n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyExpr)\n            {\n                PropertyExpr pe = value as PropertyExpr;\n                return pe.Expression;\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n\n        public override object ConvertFrom(ITypeDescriptorContext context,\n                                      CultureInfo culture, object value)\n        {\n            if (!(value is string))\n                return base.ConvertFrom(context, culture, value);\n\n            return new PropertyExpr(value as string);\n        }\n    }\n\n    internal class PropertyExprUIEditor : UITypeEditor\n    {\n        public PropertyExprUIEditor()\n        {\n        }\n\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context,\n                                        IServiceProvider provider,\n                                        object value)\n        {\n\n            if ((context == null) || (provider == null))\n                return base.EditValue(context, provider, value);\n\n            // Access the Property Browser's UI display service\n            IWindowsFormsEditorService editorService =\n                (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));\n\n            if (editorService == null)\n                return base.EditValue(context, provider, value);\n\n            // Create an instance of the UI editor form\n            IReportItem iri = context.Instance as IReportItem;\n            if (iri == null)\n                return base.EditValue(context, provider, value);\n            PropertyReportItem pri = iri.GetPRI();\n\n            PropertyExpr pe = value as PropertyExpr;\n            if (pe == null)\n                return base.EditValue(context, provider, value);\n\n            using (DialogExprEditor de = new DialogExprEditor(pri.Draw, pe.Expression, pri.Node))\n            {\n                // Display the UI editor dialog\n                if (editorService.ShowDialog(de) == DialogResult.OK)\n                {\n                    // Return the new property value from the UI editor form\n                    return new PropertyExpr(de.Expression);\n                }\n\n                return base.EditValue(context, provider, value);\n            }\n        }\n    }\n\n\n}"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyFilters.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Drawing;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Drawing.Design;\nusing System.Xml;\nusing System.Globalization;\nusing System.Windows.Forms;\nusing System.Windows.Forms.Design;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyAction - \n    /// </summary>\n    [TypeConverter(typeof(PropertyFiltersConverter)),\n       Editor(typeof(PropertyFiltersUIEditor), typeof(System.Drawing.Design.UITypeEditor))]\n    internal class PropertyFilters : IReportItem\n    {\n        PropertyReportItem pri;\n\n        public PropertyFilters(PropertyReportItem ri)\n        {\n            pri = ri;\n        }\n\n        public override string ToString()\n        {\n            StringBuilder sb = new StringBuilder();\n            XmlNode filters = pri.Draw.GetNamedChildNode(pri.Node, \"Filters\");\n\n            if (filters == null)\n                return \"\";\n\n            foreach (XmlNode fNode in filters.ChildNodes)\n            {\n                if (fNode.NodeType != XmlNodeType.Element ||\n                        fNode.Name != \"Filter\")\n                    continue;\n                if (sb.Length > 0)\n                    sb.Append(\" AND \");\n                // Get the values\n                XmlNode vNodes = pri.Draw.GetNamedChildNode(fNode, \"FilterValues\");\n                StringBuilder vs = new StringBuilder();\n                if (vNodes != null)\n                {\n                    foreach (XmlNode v in vNodes.ChildNodes)\n                    {\n                        if (v.InnerText.Length <= 0)\n                            continue;\n                        if (vs.Length != 0)\n                            vs.Append(\", \");\n                        vs.Append(v.InnerText);\n                    }\n                }\n                // Add the row\n                sb.Append(pri.Draw.GetElementValue(fNode, \"FilterExpression\", \"\"));\n                sb.AppendFormat(\" {0} \", pri.Draw.GetElementValue(fNode, \"Operator\", \"\"));\n                sb.Append(vs.ToString());\n            }\n\n            return sb.ToString();\n        }\n        #region IReportItem Members\n        public PropertyReportItem GetPRI()\n        {\n            return this.pri;\n        }\n\n        #endregion\n    }\n\n    internal class PropertyFiltersConverter : StringConverter\n    {\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;\n        }\n\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                          System.Type destinationType)\n        {\n            if (destinationType == typeof(PropertyFilters))\n                return true;\n            \n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context, \n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyFilters)\n            {\n                PropertyFilters pb = value as PropertyFilters;\n                return pb.ToString();\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n\n    internal class PropertyFiltersUIEditor : UITypeEditor\n    {\n        public PropertyFiltersUIEditor()\n        {\n        }\n\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context,\n                                        IServiceProvider provider,\n                                        object value)\n        {\n\n            if ((context == null) || (provider == null))\n                return base.EditValue(context, provider, value);\n\n            // Access the Property Browser's UI display service\n            IWindowsFormsEditorService editorService =\n                (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));\n\n            if (editorService == null)\n                return base.EditValue(context, provider, value);\n\n            // Create an instance of the UI editor form\n            IReportItem iri = context.Instance as IReportItem;\n            if (iri == null)\n                return base.EditValue(context, provider, value);\n            PropertyReportItem pri = iri.GetPRI();\n\n            PropertyFilters pb = value as PropertyFilters;\n            if (pb == null)\n                return base.EditValue(context, provider, value);\n\n            using (SingleCtlDialog scd = new SingleCtlDialog(pri.DesignCtl, pri.Draw, pri.Nodes, SingleCtlTypeEnum.FiltersCtl, null))\n            {\n                // Display the UI editor dialog\n                if (editorService.ShowDialog(scd) == DialogResult.OK)\n                {\n                    // Return the new property value from the UI editor form\n                    return new PropertyFilters(pri);\n                }\n\n                return base.EditValue(context, provider, value);\n            }\n        }\n    }\n}"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyGrouping.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Drawing;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Drawing.Design;\nusing System.Xml;\nusing System.Globalization;\nusing System.Windows.Forms;\nusing System.Windows.Forms.Design;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyAction - \n    /// </summary>\n    [TypeConverter(typeof(PropertyGroupingConverter)),\n       Editor(typeof(PropertyGroupingUIEditor), typeof(System.Drawing.Design.UITypeEditor))]\n    internal class PropertyGrouping : IReportItem\n    {\n        PropertyReportItem pri;\n\n        public PropertyGrouping(PropertyReportItem ri)\n        {\n            pri = ri;\n        }\n\n        public override string ToString()\n        {\n            XmlNode grouping = pri.Draw.GetNamedChildNode(pri.Node, \"Grouping\");\n\n            if (grouping == null)\n                return \"\";\n\n            return pri.Draw.GetElementAttribute(grouping, \"Name\", \"\");\n        }\n        #region IReportItem Members\n        public PropertyReportItem GetPRI()\n        {\n            return this.pri;\n        }\n\n        #endregion\n    }\n\n    internal class PropertyGroupingConverter : StringConverter\n    {\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;\n        }\n\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                          System.Type destinationType)\n        {\n            if (destinationType == typeof(PropertyGrouping))\n                return true;\n            \n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context, \n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyGrouping)\n            {\n                PropertyGrouping pb = value as PropertyGrouping;\n                return pb.ToString();\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n\n    internal class PropertyGroupingUIEditor : UITypeEditor\n    {\n        public PropertyGroupingUIEditor()\n        {\n        }\n\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context,\n                                        IServiceProvider provider,\n                                        object value)\n        {\n\n            if ((context == null) || (provider == null))\n                return base.EditValue(context, provider, value);\n\n            // Access the Property Browser's UI display service\n            IWindowsFormsEditorService editorService =\n                (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));\n\n            if (editorService == null)\n                return base.EditValue(context, provider, value);\n\n            // Create an instance of the UI editor form\n            IReportItem iri = context.Instance as IReportItem;\n            if (iri == null)\n                return base.EditValue(context, provider, value);\n            PropertyReportItem pri = iri.GetPRI();\n\n            PropertyGrouping pb = value as PropertyGrouping;\n            if (pb == null)\n                return base.EditValue(context, provider, value);\n\n            using (SingleCtlDialog scd = new SingleCtlDialog(pri.DesignCtl, pri.Draw, pri.Nodes,\n                SingleCtlTypeEnum.GroupingCtl, null))\n            {\n\n                // Display the UI editor dialog\n                if (editorService.ShowDialog(scd) == DialogResult.OK)\n                {\n                    // Return the new property value from the UI editor form\n                    return new PropertyGrouping(pri);\n                }\n\n                return base.EditValue(context, provider, value);\n            }\n        }\n    }\n}"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyImage.cs",
    "content": "using Majorsilence.Reporting.Rdl;\n\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Drawing.Design;\nusing System.Globalization;\nusing System.Windows.Forms;\nusing System.Windows.Forms.Design;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyImage - The Image specific Properties\n    /// </summary>\n    internal class PropertyImage : PropertyReportItem\n    {\n        internal PropertyImage(DesignXmlDraw d, DesignCtl dc, List<XmlNode> ris) : base(d, dc, ris)\n        {\n\n        }\n\n        [LocalizedCategory(\"Image\")]\n\t\t[LocalizedDisplayName(\"Image_Image\")]\n\t\t[LocalizedDescription(\"Image_Image\")]\n        public PropertyImageI Image\n        {\n            get { return new PropertyImageI(this); }\n\n        }\n    }\n\n    [TypeConverter(typeof(PropertyImageConverter))]\n\t[Editor(typeof(PropertyImageUIEditor), typeof(System.Drawing.Design.UITypeEditor))]\n    internal class PropertyImageI : IReportItem\n    {\n        PropertyImage _pi;\n\n        public PropertyImageI(PropertyImage pi)\n        {\n            _pi = pi;\n        }\n\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[TypeConverter(typeof(ImageSourceConverter))]\n\t\t[LocalizedDisplayName(\"ImageI_Source\")]\n\t\t[LocalizedDescription(\"ImageI_Source\")]\n        public string Source\n        {\n            get\n            {\n                return _pi.GetValue(\"Source\", \"External\");\n            }\n            set\n            {\n                _pi.SetValue(\"Source\", value);\n            }\n        }\n\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[LocalizedDisplayName(\"ImageI_Value\")]\n\t\t[LocalizedDescription(\"ImageI_Value\")]\n        public PropertyExpr Value\n        {\n            get\n            {\n                return new PropertyExpr(_pi.GetValue(\"Value\", \"\"));\n            }\n            set\n            {\n                _pi.SetValue(\"Value\", value.Expression);\n            }\n        }\n\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[TypeConverter(typeof(ImageMIMETypeConverter))]\n\t\t[LocalizedDisplayName(\"ImageI_MIMEType\")]\n\t\t[LocalizedDescription(\"ImageI_MIMEType\")]\n        public string MIMEType\n        {\n            get\n            {\n                return _pi.GetValue(\"MIMEType\", \"\");\n            }\n            set\n            {\n                if (string.Compare(this.Source.Trim(), \"database\", true) == 0)\n                    throw new ArgumentException(\"MIMEType isn't relevent when Source isn't Database.\");\n                _pi.SetValue(\"MIMEType\", value);\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"ImageI_Sizing\")]\n\t\t[LocalizedDescription(\"ImageI_Sizing\")]\n        public ImageSizingEnum Sizing\n        {\n            get\n            {\n                string s = _pi.GetValue(\"Sizing\", \"AutoSize\");\n                return ImageSizing.GetStyle(s);\n            }\n            set\n            {\n                _pi.SetValue(\"Sizing\", value.ToString());\n            }\n        }\n\n        public override string ToString()\n        {\n            string s = this.Source;\n            string v = \"\";\n            if (s.ToLower().Trim() != \"none\")\n                v = this.Value.Expression;\n\n            return string.Format(\"{0} {1}\", s, v);\n        }\n\n\n        #region IReportItem Members\n\n        public PropertyReportItem GetPRI()\n        {\n            return this._pi;\n        }\n\n        #endregion\n    }\n\n    #region ImageConverter\n    internal class PropertyImageConverter : ExpandableObjectConverter\n    {\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;\n        }\n\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                          System.Type destinationType)\n        {\n            if (destinationType == typeof(PropertyImageI))\n                return true;\n\n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context,\n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyImage)\n            {\n                PropertyImageI pi = value as PropertyImageI;\n                return pi.ToString();\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n#endregion\n\n    #region UIEditor  \n    internal class PropertyImageUIEditor : UITypeEditor\n    {\n        public PropertyImageUIEditor()\n        {\n        }\n\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context,\n                                        IServiceProvider provider,\n                                        object value)\n        {\n\n            if ((context == null) || (provider == null))\n                return base.EditValue(context, provider, value);\n\n            // Access the Property Browser's UI display service\n            IWindowsFormsEditorService editorService =\n                (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));\n\n            if (editorService == null)\n                return base.EditValue(context, provider, value);\n\n            // Create an instance of the UI editor form\n            IReportItem iri = context.Instance as IReportItem;\n            if (iri == null)\n                return base.EditValue(context, provider, value);\n            PropertyImage pre = iri.GetPRI() as PropertyImage;\n\n            PropertyImageI pbi = value as PropertyImageI;\n            if (pbi == null)\n                 return base.EditValue(context, provider, value);\n\n             using (SingleCtlDialog scd = new SingleCtlDialog(pre.DesignCtl, pre.Draw, pre.Nodes,\n                 SingleCtlTypeEnum.ImageCtl, null))\n             {\n                 ///////\n                 // Display the UI editor dialog\n                 if (editorService.ShowDialog(scd) == DialogResult.OK)\n                 {\n                     // Return the new property value from the UI editor form\n                     return new PropertyImageI(pre);\n                 }\n\n                 return base.EditValue(context, provider, value);\n             }\n        }\n    }\n    #endregion\n}\n"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyList.cs",
    "content": "using Majorsilence.Reporting.Rdl;\n\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Globalization;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyList - The List Properties\n    /// </summary>\n    [TypeConverter(typeof(PropertyListConverter))]\n    internal class PropertyList : PropertyDataRegion\n    {\n        public PropertyList(DesignXmlDraw d, DesignCtl dc, List<XmlNode> ris)\n            : base(d, dc, ris)\n        {\n        }\n\n        [LocalizedCategory(\"List\")]\n\t\t[LocalizedDisplayName(\"List_Grouping\")]\n\t\t[LocalizedDescription(\"List_Grouping\")]\n        public PropertyGrouping Grouping\n        {\n            get\n            {\n                return new PropertyGrouping(this);\n            }\n        }\n\n\t\t[LocalizedCategory(\"List\")]\n\t\t[LocalizedDisplayName(\"List_Sorting\")]\n\t\t[LocalizedDescription(\"List_Sorting\")]\n        public PropertySorting Sorting\n        {\n            get\n            {\n                return new PropertySorting(this);\n            }\n        }\n\n        #region XML\n        [LocalizedCategory(\"XML\")]\n\t\t[LocalizedDisplayName(\"List_DataInstanceName\")]\n\t\t[LocalizedDescription(\"List_DataInstanceName\")]\n        public string DataInstanceName\n        {\n            get\n            {\n                return GetValue(\"DataInstanceName\", \"\");\n            }\n            set\n            {\n                SetValue(\"DataInstanceName\", value);\n            }\n        }\n\n        [LocalizedCategory(\"XML\")]\n\t\t[LocalizedDisplayName(\"List_DataInstanceElementOutput\")]\n\t\t[LocalizedDescription(\"List_DataInstanceElementOutput\")]\n        public DataInstanceElementOutputEnum DataInstanceElementOutput\n        {\n            get\n            {\n                string v = GetValue(\"DataInstanceElementOutput\", \"Output\");\n                return Majorsilence.Reporting.Rdl.DataInstanceElementOutput.GetStyle(v);\n            }\n            set\n            {\n                SetValue(\"DataInstanceElementOutput\", value.ToString());\n            }\n        }\n        #endregion\n    }\n\n    internal class PropertyListConverter : ExpandableObjectConverter\n    {\n        public PropertyListConverter(){}\n        public override object ConvertTo(ITypeDescriptorContext context,\n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyList)\n            {\n                PropertyList pe = value as PropertyList;\n                return pe.Name;\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyLocation.cs",
    "content": "\nusing System;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Globalization;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyExpr - \n    /// </summary>\n    [TypeConverter(typeof(PropertyLocationConverter))]\n    internal class PropertyLocation\n    {\n        PropertyReportItem _pri;\n        string _left;\n        string _top;\n\n        public PropertyLocation(PropertyReportItem pri, string x, string y)\n        {\n            _pri = pri;\n            _left = x;\n            _top = y;\n        }\n\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[LocalizedDisplayName(\"Location_Left\")]\n        public string Left\n        {\n            get { return _left; }\n            set \n            {\n                DesignerUtility.ValidateSize(value, true, false);\n                _left = value;\n                _pri.SetValue(\"Left\", value);\n            }\n        }\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[LocalizedDisplayName(\"Location_Top\")]\n\t\tpublic string Top\n        {\n            get { return _top; }\n            set \n            {\n                DesignerUtility.ValidateSize(value, true, false);\n                _top = value;\n                _pri.SetValue(\"Top\", value);\n            }\n        }\n    }\n\n    internal class PropertyLocationConverter : ExpandableObjectConverter\n    {\n        public override object ConvertTo(ITypeDescriptorContext context, \n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyLocation)\n            {\n                PropertyLocation pe = value as PropertyLocation;\n                return string.Format(\"({0}, {1})\", pe.Left, pe.Top);\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n}"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyMargin.cs",
    "content": "\nusing System;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Globalization;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyExpr - \n    /// </summary>\n    [TypeConverter(typeof(PropertyMarginConverter))]\n    internal class PropertyMargin\n    {\n        PropertyReport _pr;\n\n        public PropertyMargin(PropertyReport pr)\n        {\n            _pr = pr;\n        }\n\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[LocalizedDisplayName(\"Margin_Left\")]\n        public string Left\n        {\n            get\n            {\n                return _pr.GetReportValue(\"LeftMargin\");\n            }\n            set\n            {\n                SetMargin(\"LeftMargin\", value);\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"Margin_Right\")]\n\t\t[RefreshProperties(RefreshProperties.Repaint)]\n        public string Right\n        {\n            get\n            {\n                return _pr.GetReportValue(\"RightMargin\");\n            }\n            set\n            {\n                SetMargin(\"RightMargin\", value);\n            }\n        }\n\n\t\t[RefreshProperties(RefreshProperties.Repaint)]\n\t\t[LocalizedDisplayName(\"Margin_Top\")]\n\t\tpublic string Top\n        {\n            get\n            {\n                return _pr.GetReportValue(\"TopMargin\");\n            }\n            set\n            {\n                SetMargin(\"TopMargin\", value);\n            }\n        }\n\n\t\t[RefreshProperties(RefreshProperties.Repaint)]\n\t\t[LocalizedDisplayName(\"Margin_Bottom\")]\n\t\tpublic string Bottom\n        {\n            get\n            {\n                return _pr.GetReportValue(\"BottomMargin\");\n            }\n            set\n            {\n                SetMargin(\"BottomMargin\", value);\n            }\n        }\n\n        void SetMargin(string l, string v)\n        {\n            DesignerUtility.ValidateSize(v, true, false);\n            _pr.SetReportValue(l, v);\n        }\n\n    }\n\n    internal class PropertyMarginConverter : ExpandableObjectConverter\n    {\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                         System.Type destinationType)\n        {\n            if (destinationType == typeof(string))\n                return true;\n\n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context, \n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyMargin)\n            {\n                PropertyMargin pe = value as PropertyMargin;\n                return string.Format(\"(l={0}, t={1}, r={2}, b={3})\", pe.Left, pe.Top, pe.Right, pe.Bottom);\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n}"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyMatrix.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Drawing;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Xml;\nusing System.Text.RegularExpressions;\nusing System.Globalization;\nusing System.Windows.Forms;\nusing System.Windows.Forms.Design;\nusing Majorsilence.Reporting.Rdl;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyMatrix - The Table Properties\n    /// </summary>\n    [TypeConverter(typeof(PropertyMatrixConverter))]\n    internal class PropertyMatrix : PropertyDataRegion\n    {\n        public PropertyMatrix(DesignXmlDraw d, DesignCtl dc, List<XmlNode> ris)\n            : base(d, dc, ris)\n        {\n        }\n    }\n    internal class PropertyMatrixConverter : ExpandableObjectConverter\n    {\n        public override object ConvertTo(ITypeDescriptorContext context,\n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyMatrix)\n            {\n                PropertyMatrix pe = value as PropertyMatrix;\n                return pe.Name;\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyPadding.cs",
    "content": "\nusing System;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Globalization;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyExpr - \n    /// </summary>\n    [TypeConverter(typeof(PropertyPaddingConverter))]\n    internal class PropertyPadding : IReportItem\n    {\n        PropertyReportItem _pri;\n        string[] _names;\n        string[] _subitems;\n\n        public PropertyPadding(PropertyReportItem pri)\n        {\n            _pri = pri;\n            _names = null;\n            _subitems = new string[] { \"Style\", \"\" };\n        }\n\n        public PropertyPadding(PropertyReportItem ri, params string[] names)\n        {\n            _pri = ri;\n            _names = names;\n\n            // now build the array used to get/set values\n            _subitems = new string[names.Length + 2];\n            int i = 0;\n            foreach (string s in names)\n                _subitems[i++] = s;\n\n            _subitems[i++] = \"Style\";\n        }\n        \n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[LocalizedDisplayName(\"Padding_Left\")]\n        public PropertyExpr Left\n        {\n            get\n            {\n                return new PropertyExpr(GetStyleValue(\"PaddingLeft\", \"0pt\"));\n            }\n            set\n            {\n                SetPadding(\"PaddingLeft\", value, true);\n            }\n        }\n\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[LocalizedDisplayName(\"Padding_Right\")]\n\t\tpublic PropertyExpr Right\n        {\n            get\n            {\n                return new PropertyExpr(GetStyleValue(\"PaddingRight\", \"0pt\"));\n            }\n            set\n            {\n                SetPadding(\"PaddingRight\", value, false);\n            }\n        }\n\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[LocalizedDisplayName(\"Padding_Top\")]\n\t\tpublic PropertyExpr Top\n        {\n            get\n            {\n                return new PropertyExpr(GetStyleValue(\"PaddingTop\", \"0pt\"));\n            }\n            set\n            {\n                SetPadding(\"PaddingTop\", value, true); \n            }\n        }\n\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[LocalizedDisplayName(\"Padding_Bottom\")]\n\t\tpublic PropertyExpr Bottom\n        {\n            get\n            {\n                return new PropertyExpr(GetStyleValue(\"PaddingBottom\", \"0pt\"));\n            }\n            set\n            {\n                SetPadding(\"PaddingBottom\", value, false); \n            }\n        }\n\n        void SetPadding(string l, PropertyExpr pe, bool bMinus) //Josh: Eddited to allow negative padding on top and left \n        {\n            if (!_pri.IsExpression(pe.Expression))\n            {\n                DesignerUtility.ValidateSize(pe.Expression, true, /*false*/bMinus);\n            }\n            SetStyleValue(l, pe.Expression);\n        }\n\n        private string GetStyleValue(string l1, string def)\n        {\n            _subitems[_subitems.Length - 1] = l1;\n            return _pri.GetWithList(def, _subitems);\n        }\n\n        private void SetStyleValue(string l1, string val)\n        {\n            _subitems[_subitems.Length - 1] = l1;\n            _pri.SetWithList(val, _subitems);\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"({0}, {1}, {2}, {3})\", Left, Top, Right, Bottom);\n        }\n\n        #region IReportItem Members\n        public PropertyReportItem GetPRI()\n        {\n            return _pri;\n        }\n\n        #endregion\n    }\n\n    internal class PropertyPaddingConverter : ExpandableObjectConverter\n    {\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                         System.Type destinationType)\n        {\n            if (destinationType == typeof(string))\n                return true;\n\n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context, \n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyPadding)\n            {\n                PropertyPadding pe = value as PropertyPadding;\n                return pe.ToString();\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n}"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyPrintFirstLast.cs",
    "content": "using Majorsilence.Reporting.RdlDesign.Resources;\n\nusing System;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Globalization;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyExpr - \n    /// </summary>\n    [TypeConverter(typeof(PropertyPrintFirstLastConverter))]\n    internal class PropertyPrintFirstLast\n    {\n        PropertyReport _pr;\n        XmlNode _parent;\n\n        public PropertyPrintFirstLast(PropertyReport pr, XmlNode phNode)\n        {\n            _pr = pr;\n            _parent = phNode;\n        }\n\n\t\t[LocalizedDisplayName(\"PrintFirstLast_Height\")]\n        public string Height\n        {\n            get\n            {\n                return _pr.Draw.GetElementValue(_parent, \"Height\", \"0pt\");\n            }\n            set\n            {\n                string v = value;\n                if (v.Length == 0)\n                    v = \"0pt\";\n                else\n                    DesignerUtility.ValidateSize(v, true, false);\n\n                SetProp(\"Height\", v);\n                _pr.DesignCtl.SetScrollControls();          // this will force ruler and scroll bars to be updated\n\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"PrintFirstLast_PrintOnFirstPage\")]\n\t\tpublic bool PrintOnFirstPage\n        {\n            get\n            {\n                return _pr.Draw.GetElementValue(_parent, \"PrintOnFirstPage\", \"false\").ToLower() == \"true\" ? true : false;\n            }\n            set\n            {\n                SetPrint(\"PrintOnFirstPage\", value);\n            }\n        }\n\n\t\t[LocalizedDisplayName(\"PrintFirstLast_PrintOnLastPage\")]\n\t\tpublic bool PrintOnLastPage\n        {\n            get\n            {\n                return _pr.Draw.GetElementValue(_parent, \"PrintOnLastPage\", \"false\").ToLower() == \"true\" ? true : false;\n            }\n            set\n            {\n                SetPrint(\"PrintOnLastPage\", value);\n            }\n        }\n\n        void SetPrint(string l, bool b)\n        {\n            SetProp(l, b ? \"true\" : \"false\");\n        }\n\n        void SetProp(string l, string v)\n        {\n            _pr.DesignCtl.StartUndoGroup(l + \" \" + Strings.PropertyPrintFirstLast_SetProp_change);\n            _pr.Draw.SetElement(_parent, l, v);\n            _pr.DesignCtl.EndUndoGroup(true);\n            _pr.DesignCtl.SignalReportChanged();\n            _pr.Draw.Invalidate();\n        }\n\n    }\n\n    internal class PropertyPrintFirstLastConverter : ExpandableObjectConverter\n    {\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                         System.Type destinationType)\n        {\n            if (destinationType == typeof(string))\n                return true;\n\n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context, \n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyPrintFirstLast)\n            {\n                return \"\";\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n}"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyRectangle.cs",
    "content": "\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyRectangle - The Rectangle specific Properties\n    /// </summary>\n    internal class PropertyRectangle : PropertyReportItem\n    {\n        public PropertyRectangle(DesignXmlDraw d, DesignCtl dc, List<XmlNode> ris) : base(d, dc, ris)\n        {\n        }\n\n        [LocalizedCategory(\"Rectangle\")]\n\t\t[LocalizedDisplayName(\"Rectangle_PageBreakAtStart\")]\n\t\t[LocalizedDescription(\"Rectangle_PageBreakAtStart\")]\n        public bool PageBreakAtStart\n        {\n            get { return Draw.GetElementValue(Node, \"PageBreakAtStart\", \"false\").ToLower() == \"true\"; }\n            set\n            {\n                SetValue(\"PageBreakAtStart\", value ? \"true\" : \"false\");\n            }\n        }\n\n        [LocalizedCategory(\"Rectangle\")]\n\t\t[LocalizedDisplayName(\"Rectangle_PageBreakAtEnd\")]\n\t\t[LocalizedDescription(\"Rectangle_PageBreakAtEnd\")]\n        public bool PageBreakAtEnd\n        {\n            get { return Draw.GetElementValue(Node, \"PageBreakAtEnd\", \"false\").ToLower() == \"true\"; }\n            set\n            {\n                SetValue(\"PageBreakAtEnd\", value ? \"true\" : \"false\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyReport.cs",
    "content": "using Majorsilence.Reporting.RdlDesign.Resources;\n\nusing System;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Drawing.Design;\nusing System.Globalization;\nusing System.Text;\nusing System.Windows.Forms;\nusing System.Windows.Forms.Design;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyReportItem - The ReportItem Properties\n    /// </summary>\n    [DefaultProperty(\"Author\")]\n    internal class PropertyReport\n    {\n   \t\tprivate DesignXmlDraw _Draw;\n        private DesignCtl _DesignCtl;\n\n        public PropertyReport(DesignXmlDraw d, DesignCtl dc)\n        {\n            _Draw = d;\n            _DesignCtl = dc;\n        }\n\n        internal DesignXmlDraw Draw\n        {\n            get { return _Draw; }\n        }\n\n        internal DesignCtl DesignCtl\n        {\n            get { return _DesignCtl; }\n        }\n\n        XmlNode ReportNode\n        {\n            get { return _Draw.GetReportNode(); }\n        }\n\n        [LocalizedCategory(\"Report\")]\n\t\t[LocalizedDisplayName(\"Report_Author\")]\n\t\t[LocalizedDescription(\"Report_Author\")]\n        public string Author\n        {\n            get {return GetReportValue(\"Author\"); }\n            set{SetReportValue(\"Author\", value); }\n        }\n\n        [LocalizedCategory(\"Report\")]\n\t\t[LocalizedDisplayName(\"Report_Description\")]\n\t\t[LocalizedDescription(\"Report_Description\")]\n        public string Description\n        {\n            get { return GetReportValue(\"Description\"); }\n            set { SetReportValue(\"Description\", value); }\n        }\n\n        [LocalizedCategory(\"Report\")]\n\t\t[LocalizedDisplayName(\"Report_Width\")]\n\t\t[LocalizedDescription(\"Report_Width\")]\n        public string Width\n        {\n            get { return GetReportValue(\"Width\"); }\n            set\n            {\n                DesignerUtility.ValidateSize(value, false, false);\n                SetReportValue(\"Width\", value);\n                DesignCtl.SetScrollControls();          // this will force ruler and scroll bars to be updated\n            }\n        }\n\n        [LocalizedCategory(\"Report\")]\n\t\t[LocalizedDisplayName(\"Report_Parameters\")]\n\t\t[LocalizedDescription(\"Report_Parameters\")]\n        public PropertyReportParameters Parameters\n        {\n            get { return new PropertyReportParameters(this); }\n        }\n\n        [LocalizedCategory(\"Report\")]\n\t\t[LocalizedDisplayName(\"Report_Code\")]\n\t\t[LocalizedDescription(\"Report_Code\")]\n        public PropertyReportCode Code\n        {\n            get { return new PropertyReportCode(this); }\n        }\n\n        [LocalizedCategory(\"Report\")]\n\t\t[LocalizedDisplayName(\"Report_ModulesClasses\")]\n\t\t[LocalizedDescription(\"Report_ModulesClasses\")]\n        public PropertyReportModulesClasses ModulesClasses\n        {\n            get { return new PropertyReportModulesClasses(this); }\n        }\n\n        [LocalizedCategory(\"Report\")]\n\t\t[LocalizedDisplayName(\"Report_PageWidth\")]\n\t\t[LocalizedDescription(\"Report_PageWidth\")]\n        public string PageWidth\n        {\n            get { return GetReportValue(\"PageWidth\"); }\n            set\n            {\n                DesignerUtility.ValidateSize(value, false, false);\n                SetReportValue(\"PageWidth\", value);\n\n                DesignCtl.SetScrollControls();          // this will force ruler and scroll bars to be updated\n            }\n        }\n\n        [LocalizedCategory(\"Report\")]\n\t\t[LocalizedDisplayName(\"Report_PageHeight\")]\n\t\t[LocalizedDescription(\"Report_PageHeight\")]\n        public string PageHeight\n        {\n            get { return GetReportValue(\"PageHeight\"); }\n            set\n            {\n                DesignerUtility.ValidateSize(value, false, false);\n                SetReportValue(\"PageHeight\", value);\n            }\n        }\n\n        [LocalizedCategory(\"Report\")]\n\t\t[LocalizedDisplayName(\"Report_Margins\")]\n\t\t[LocalizedDescription(\"Report_Margins\")]\n        public PropertyMargin Margins\n        {\n            get\n            {\n                return new PropertyMargin(this);\n            }\n        }\n\n        [LocalizedCategory(\"Report\")]\n\t\t[LocalizedDisplayName(\"Report_PageHeader\")]\n\t\t[LocalizedDescription(\"Report_PageHeader\")]\n        public PropertyPrintFirstLast PageHeader\n        {\n            get\n            {\n                XmlNode phNode = _Draw.GetCreateNamedChildNode(ReportNode, \"PageHeader\");\n                return new PropertyPrintFirstLast(this, phNode);\n            }\n        }\n\n        [LocalizedCategory(\"Report\")]\n\t\t[LocalizedDisplayName(\"Report_PageFooter\")]\n\t\t[LocalizedDescription(\"Report_PageFooter\")]\n        public PropertyPrintFirstLast PageFooter\n        {\n            get\n            {\n                XmlNode phNode = _Draw.GetCreateNamedChildNode(ReportNode, \"PageFooter\");\n                return new PropertyPrintFirstLast(this, phNode);\n            }\n        }\n\n        [LocalizedCategory(\"Body\")]\n\t\t[LocalizedDisplayName(\"Report_BodyHeight\")]\n\t\t[LocalizedDescription(\"Report_BodyHeight\")]\n        public string BodyHeight\n        {\n            get\n            {\n                return GetBodyValue(\"Height\", \"\");\n            }\n            set\n            {\n                DesignerUtility.ValidateSize(value, true, false);\n                SetBodyValue(\"Height\", value);\n                DesignCtl.SetScrollControls();          // this will force ruler and scroll bars to be updated\n            }\n        }\n\n        [LocalizedCategory(\"Body\")]\n\t\t[LocalizedDisplayName(\"Report_BodyColumns\")]\n\t\t[LocalizedDescription(\"Report_BodyColumns\")]\n        public int BodyColumns\n        {\n            get\n            {\n                string c = GetBodyValue(\"Columns\", \"1\");\n                try\n                {\n                    return Convert.ToInt32(c);\n                }\n                catch\n                {\n                    return 1;\n                }\n            }\n            set\n            {\n                if (value < 1)\n                    throw new ArgumentException(\"The number of columns in the body must be greater than 0.\");\n                SetBodyValue(\"Columns\", value.ToString());\n            }\n        }\n\n        [LocalizedCategory(\"Body\")]\n\t\t[LocalizedDisplayName(\"Report_BodyColumnSpacing\")]\n\t\t[LocalizedDescription(\"Report_BodyColumnSpacing\")]\n        public string BodyColumnSpacing\n        {\n            get\n            {\n                return GetBodyValue(\"ColumnSpacing\", \"\");\n            }\n            set\n            {\n                if (value.Length == 0)\n                {\n                    RemoveBodyValue(\"ColumnSpacing\");\n                }\n                else\n                {\n                    DesignerUtility.ValidateSize(value, true, false);\n                    SetBodyValue(\"ColumnSpacing\", value);\n                }\n            }\n        }\n\n        [LocalizedCategory(\"XML\")]\n        [Editor(typeof(FileUIEditor), typeof(UITypeEditor))]\n\t\t[LocalizedDisplayName(\"Report_DataTransform\")]\n\t\t[LocalizedDescription(\"Report_DataTransform\")]\n\t\tpublic string DataTransform\n        {\n            get { return GetReportValue(\"DataTransform\"); }\n            set { SetReportValue(\"DataTransform\", value); }\n        }\n\n        [LocalizedCategory(\"XML\")]\n\t\t[LocalizedDisplayName(\"Report_DataSchema\")]\n\t\t[LocalizedDescription(\"Report_DataSchema\")]\n        public string DataSchema\n        {\n            get { return GetReportValue(\"DataSchema\"); }\n            set { SetReportValue(\"DataSchema\", value); }\n        }\n\n        [LocalizedCategory(\"XML\")]\n\t\t[LocalizedDisplayName(\"Report_DataElementName\")]\n\t\t[LocalizedDescription(\"Report_DataElementName\")]\n        public string DataElementName\n        {\n            get { return GetReportValue(\"DataElementName\"); }\n            set { SetReportValue(\"DataElementName\", value); }\n        }\n\n        [LocalizedCategory(\"XML\")]\n\t\t[TypeConverter(typeof(ElementStyleConverter))]\n\t\t[LocalizedDisplayName(\"Report_DataElementStyle\")]\n\t\t[LocalizedDescription(\"Report_DataElementStyle\")]\n        public string DataElementStyle\n        {\n            get { return GetReportValue(\"DataElementStyle\", \"AttributeNormal\"); }\n            set { SetReportValue(\"DataElementStyle\", value); }\n        }\n\n\n        string GetBodyValue(string l, string def)\n        {\n            XmlNode rNode = _Draw.GetReportNode();\n            XmlNode bNode = _Draw.GetNamedChildNode(rNode, \"Body\");\n            return _Draw.GetElementValue(bNode, l, def);\n        }\n\n        void SetBodyValue(string l, string v)\n        {\n            XmlNode rNode = _Draw.GetReportNode();\n            XmlNode bNode = _Draw.GetNamedChildNode(rNode, \"Body\");\n            _DesignCtl.StartUndoGroup(Strings.PropertyReport_Undo_Body + \" \" + l + \" \" + Strings.PropertyReport_Undo_change);\n            _Draw.SetElement(bNode, l, v);\n            _DesignCtl.EndUndoGroup(true);\n            _DesignCtl.SignalReportChanged();\n            _Draw.Invalidate();\n        }\n\n        void RemoveBodyValue(string l)\n        {\n            XmlNode rNode = _Draw.GetReportNode();\n            XmlNode bNode = _Draw.GetNamedChildNode(rNode, \"Body\");\n\t\t\t_DesignCtl.StartUndoGroup(Strings.PropertyReport_Undo_Body + \" \" + l + \" \" + Strings.PropertyReport_Undo_change);\n            _Draw.RemoveElement(bNode, l);\n            _DesignCtl.EndUndoGroup(true);\n            _DesignCtl.SignalReportChanged();\n            _Draw.Invalidate();\n        }\n\n        internal string GetReportValue(string l)\n        {\n            return GetReportValue(l, \"\");\n        }\n\n        internal string GetReportValue(string l, string def)\n        {\n            XmlNode rNode = _Draw.GetReportNode();\n            return _Draw.GetElementValue(rNode, l, def);\n        }\n\n        internal void SetReportValue(string l, string v)\n        {\n            XmlNode rNode = _Draw.GetReportNode();\n            \n            _DesignCtl.StartUndoGroup(l + \" \" + Strings.PropertyReport_Undo_change);\n            _Draw.SetElement(rNode, l, v);\n            _DesignCtl.EndUndoGroup(true);\n\n            _DesignCtl.SignalReportChanged();\n            _Draw.Invalidate();\n        }\n    }\n\n\t#region Parameters\n    [TypeConverter(typeof(PropertyReportParameterConverter)),\n     Editor(typeof(PropertyReportParameterUIEditor), typeof(System.Drawing.Design.UITypeEditor))]\n    internal class PropertyReportParameters\n    {\n        PropertyReport pr;\n\n        public PropertyReportParameters(PropertyReport r)\n        {\n            pr = r;\n        }\n        \n        public override string ToString()\n        {\n            XmlNode rNode = pr.Draw.GetReportNode();\n            XmlNode rpsNode = pr.Draw.GetNamedChildNode(rNode, \"ReportParameters\");\n\n            string s;\n            if (rpsNode == null)\n                s = \"No parameters defined\";\n            else\n            {\n                // show the list of parameters\n                StringBuilder sb = new StringBuilder();\n                foreach (XmlNode repNode in rpsNode)\n                {\n                    XmlAttribute nAttr = repNode.Attributes[\"Name\"];\n                    if (nAttr == null)\t// shouldn't really happen\n                        continue;\n                    if (sb.Length > 0)\n                        sb.Append(\", \");\n                    sb.Append(nAttr.Value);\n                }\n                sb.Append(\" defined\");\n                s = sb.ToString();\n            }\n            return s;\n        }\n    }\n    internal class PropertyReportParameterConverter  : StringConverter\n    {\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;\n        }\n\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                          System.Type destinationType)\n        {\n            if (destinationType == typeof(PropertyReportParameters))\n                return true;\n\n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context,\n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyReportParameters)\n            {\n                PropertyReportParameters prp = value as PropertyReportParameters;\n                return prp.ToString();\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n\n    internal class PropertyReportParameterUIEditor : UITypeEditor\n    {\n        // Adding a parameterless constructor to resolve the MissingMethodException\n        public PropertyReportParameterUIEditor()\n        {\n        }\n\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context,\n                                        IServiceProvider provider,\n                                        object value)\n        {\n\n            if ((context == null) || (provider == null))\n                return base.EditValue(context, provider, value);\n\n            // Access the Property Browser's UI display service\n            IWindowsFormsEditorService editorService =\n                (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));\n\n            if (editorService == null)\n                return base.EditValue(context, provider, value);\n\n            // Create an instance of the UI editor form\n            PropertyReport pr = context.Instance as PropertyReport;\n\n            if (pr == null)\n                return base.EditValue(context, provider, value);\n\n            using (SingleCtlDialog scd = new SingleCtlDialog(pr.DesignCtl, pr.Draw, null, SingleCtlTypeEnum.ReportParameterCtl, null))\n            {\n                // Display the UI editor dialog\n                if (editorService.ShowDialog(scd) == DialogResult.OK)\n                {\n                    // Return the new property value from the UI editor form\n                    return new PropertyReportParameters(pr);\n                }\n\n                return base.EditValue(context, provider, value);\n            }\n        }\n    }\n\n    #endregion\n\n    #region Code\n    [TypeConverter(typeof(PropertyReportCodeConverter)),\n     Editor(typeof(PropertyReportCodeUIEditor), typeof(System.Drawing.Design.UITypeEditor))]\n    internal class PropertyReportCode\n    {\n        PropertyReport pr;\n\n        public PropertyReportCode(PropertyReport r)\n        {\n            pr = r;\n        }\n\n        public override string ToString()\n        {\n            XmlNode rNode = pr.Draw.GetReportNode();\n            XmlNode cNode = pr.Draw.GetNamedChildNode(rNode, \"Code\");\n            return cNode == null ? \"None defined\" : \"Defined\";\n        }\n    }\n    internal class PropertyReportCodeConverter : StringConverter\n    {\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;\n        }\n\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                          System.Type destinationType)\n        {\n            if (destinationType == typeof(PropertyReportCode))\n                return true;\n\n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context,\n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyReportCode)\n            {\n                PropertyReportCode prc = value as PropertyReportCode;\n                return prc.ToString();\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n\n    internal class PropertyReportCodeUIEditor : UITypeEditor\n    {\n        public PropertyReportCodeUIEditor() : base()\n        {\n        }\n\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context,\n                                        IServiceProvider provider,\n                                        object value)\n        {\n\n            if ((context == null) || (provider == null))\n                return base.EditValue(context, provider, value);\n\n            // Access the Property Browser's UI display service\n            IWindowsFormsEditorService editorService =\n                (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));\n\n            if (editorService == null)\n                return base.EditValue(context, provider, value);\n\n            // Create an instance of the UI editor form\n            PropertyReport pr = context.Instance as PropertyReport;\n\n            if (pr == null)\n                return base.EditValue(context, provider, value);\n\n            using (SingleCtlDialog scd = new SingleCtlDialog(pr.DesignCtl, pr.Draw, null, SingleCtlTypeEnum.ReportCodeCtl, null))\n            {\n                // Display the UI editor dialog\n                if (editorService.ShowDialog(scd) == DialogResult.OK)\n                {\n                    // Return the new property value from the UI editor form\n                    return new PropertyReportCode(pr);\n                }\n\n                return base.EditValue(context, provider, value);\n            }\n        }\n    }\n#endregion\n\n    #region ModulesClasses\n    [TypeConverter(typeof(PropertyReportModulesClassesConverter)),\n    Editor(typeof(PropertyReportModulesClassesUIEditor), typeof(System.Drawing.Design.UITypeEditor))]\n    internal class PropertyReportModulesClasses\n    {\n        PropertyReport pr;\n\n        public PropertyReportModulesClasses(PropertyReport r)\n        {\n            pr = r;\n        }\n\n        public override string ToString()\n        {\n            XmlNode rNode = pr.Draw.GetReportNode();\n            StringBuilder sb = new StringBuilder();\n\n            XmlNode cmsNode = pr.Draw.GetNamedChildNode(rNode, \"CodeModules\");\n            sb.Append(cmsNode == null? \"No Modules, \": \"Modules, \");\n \n   \t\t\tXmlNode clsNode = pr.Draw.GetNamedChildNode(rNode, \"Classes\");\n            sb.Append(clsNode == null? \"No Classes\": \"Classes\");\n\n            sb.Append(\" defined\");\n            return sb.ToString();\n        }\n    }\n    internal class PropertyReportModulesClassesConverter : StringConverter\n    {\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;\n        }\n\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                          System.Type destinationType)\n        {\n            if (destinationType == typeof(PropertyReportModulesClasses))\n                return true;\n\n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context,\n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyReportModulesClasses)\n            {\n                PropertyReportModulesClasses prm = value as PropertyReportModulesClasses;\n                return prm.ToString();\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n\n    internal class PropertyReportModulesClassesUIEditor : UITypeEditor\n    {\n        public PropertyReportModulesClassesUIEditor() : base()\n        {\n        }\n\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context,\n                                        IServiceProvider provider,\n                                        object value)\n        {\n\n            if ((context == null) || (provider == null))\n                return base.EditValue(context, provider, value);\n\n            // Access the Property Browser's UI display service\n            IWindowsFormsEditorService editorService =\n                (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));\n\n            if (editorService == null)\n                return base.EditValue(context, provider, value);\n\n            // Create an instance of the UI editor form\n            PropertyReport pr = context.Instance as PropertyReport;\n\n            if (pr == null)\n                return base.EditValue(context, provider, value);\n\n            using (SingleCtlDialog scd = new SingleCtlDialog(pr.DesignCtl, pr.Draw, null, SingleCtlTypeEnum.ReportModulesClassesCtl, null))\n            {\n                // Display the UI editor dialog\n                if (editorService.ShowDialog(scd) == DialogResult.OK)\n                {\n                    // Return the new property value from the UI editor form\n                    return new PropertyReportModulesClasses(pr);\n                }\n\n                return base.EditValue(context, provider, value);\n            }\n        }\n    }\n#endregion\n\n    #region XSLFile\n    internal class FileUIEditor : UITypeEditor\n    {\n        public FileUIEditor()\n        {\n        }\n\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context,\n                                        IServiceProvider provider,\n                                        object value)\n        {\n\n            if ((context == null) || (provider == null))\n                return base.EditValue(context, provider, value);\n\n            // Access the Property Browser's UI display service\n            IWindowsFormsEditorService editorService =\n                (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));\n\n            if (editorService == null)\n                return base.EditValue(context, provider, value);\n\n            // Create an instance of the UI editor form\n            PropertyReport pr = context.Instance as PropertyReport;\n\n            if (pr == null)\n                return base.EditValue(context, provider, value);\n\n            using (OpenFileDialog ofd = new OpenFileDialog())\n            {\n                ofd.Filter = Strings.FileUIEditor_EditValue_XSLFilesFilter;\n                ofd.FilterIndex = 0;\n                ofd.CheckFileExists = true;\n                if (ofd.ShowDialog() == DialogResult.OK)\n                {\n                    // Return the new property value from the UI editor form\n                    return ofd.FileName;\n                }\n\n                return base.EditValue(context, provider, value);\n            }\n        }\n    }\n    #endregion\n\n    #region ElementStyle\n    internal class ElementStyleConverter : StringConverter\n    {\n        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return true;   \n        }\n        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n        {\n            return new StandardValuesCollection(new string[] {\n                                    \"AttributeNormal\", \"ElementNormal\"});\n        }\n    }\n    #endregion\n}\n"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyReportItem.cs",
    "content": "using Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Text;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyReportItem - The ReportItem Properties\n    /// </summary>\n    //[PropertyTab(typeof(PropertyTableTab), PropertyTabScope.Component),\n    //  DefaultPropertyAttribute(\"Name\")]\n    [DefaultProperty(\"Name\")]\n    internal class PropertyReportItem : ICustomTypeDescriptor, IReportItem \n    {\n   \t\tprivate DesignXmlDraw _Draw;\n        private DesignCtl _DesignCtl;\n        List<XmlNode> _RIs;\n        private XmlNode _node;\n        private XmlNode _tnode = null;\n        private XmlNode _mnode = null;\n        private object _custom = null;\n        bool bGroup = false;\n        bool InTable = false;\n        bool InMatrix = false;\n        bool bCustom = false;\n\n        public PropertyReportItem(DesignXmlDraw d, DesignCtl dc, List<XmlNode> ris)\n        {\n            _Draw = d;\n            _DesignCtl = dc; \n            _RIs = ris;\n            _node = _RIs[0];        // the first node is the model for all of the nodes\n            if (_RIs.Count > 1)\n                bGroup = true;\n            else\n                bCustom = _node.Name == \"CustomReportItem\";\n            \n            InTable = _Draw.InTable(_node);\n            if (InTable)\n                _tnode =  _Draw.GetTableFromReportItem(_node);\n\n            InMatrix = _Draw.InMatrix(_node);\n            if (InMatrix)\n                _mnode = _Draw.GetMatrixFromReportItem(_node);\n        }\n\n        internal XmlNode TableNode\n        {\n            get { return _tnode; }\n        }\n        internal DesignXmlDraw Draw\n        {\n            get { return _Draw; }\n        }\n        internal DesignCtl DesignCtl\n        {\n            get { return _DesignCtl; }\n        }\n\n        internal XmlNode Node\n        {\n            get { return _node; }\n        }\n\n        internal List<XmlNode> Nodes\n        {\n            get { return _RIs; }\n        }\n \n        #region Design\n        [LocalizedCategory(\"Design\")]\n\t\t[LocalizedDisplayName(\"Base_Name\")]\n\t\t[LocalizedDescription(\"Base_Name\")]\n        [ParenthesizePropertyName(true)]\n        public string Name\n        {\n            get\n            {\n                return GetName(_node);\n            }\n            set\n            {\n                SetName(_node, value);\n            }\n        }\n#endregion\n        \n        #region Style\n        [LocalizedCategory(\"Style\")]\n\t\t[LocalizedDisplayName(\"Base_Border\")]\n\t\t[LocalizedDescription(\"Base_Border\")]\n        public PropertyBorder Border\n        {\n            get\n            {\n                return new PropertyBorder(this);\n            }\n        }\n\n        [LocalizedCategory(\"Style\")]\n\t\t[LocalizedDisplayName(\"Base_Padding\")]\n\t\t[LocalizedDescription(\"Base_Padding\")]\n        public PropertyPadding Padding\n        {\n            get\n            {\n                return new PropertyPadding(this);\n            }\n        }\n\n        [LocalizedCategory(\"Style\")]\n\t\t[LocalizedDisplayName(\"Base_Background\")]\n\t\t[LocalizedDescription(\"Base_Background\")]\n        public PropertyBackground Background\n        {\n            get\n            {\n                return new PropertyBackground(this);\n            }\n        }\n        #endregion\n\n        #region Behavior\n\n\t\t[LocalizedCategory(\"Behavior\")]\n\t\t[LocalizedDisplayName(\"Base_Action\")]\n\t\t[LocalizedDescription(\"Base_Action\")]\n        public PropertyAction Action\n        {\n            get\n            {\n                return new PropertyAction(this);\n            }\n        }\n\n        [LocalizedCategory(\"Behavior\")]\n\t\t[LocalizedDisplayName(\"Base_Bookmark\")]\n\t\t[LocalizedDescription(\"Base_Bookmark\")]\n        public PropertyExpr Bookmark\n        {\n            get\n            {\n                string ex = GetValue(\"Bookmark\", \"\");\n                return new PropertyExpr(ex);\n            }\n            set\n            {\n                SetValue(\"Bookmark\", value.Expression);\n            }\n\n        }\n\n        [LocalizedCategory(\"Behavior\")]\n\t\t[LocalizedDisplayName(\"Base_ToolTip\")]\n\t\t[LocalizedDescription(\"Base_ToolTip\")]\n        public PropertyExpr ToolTip\n        {\n            get \n            {\n                string ex = GetValue(\"ToolTip\", \"\");\n                return new PropertyExpr(ex); \n            }\n            set\n            {\n                SetValue(\"ToolTip\", value.Expression);\n            }\n\n        }\n\n        [LocalizedCategory(\"Behavior\")]\n\t\t[LocalizedDisplayName(\"Base_Visibility\")]\n\t\t[LocalizedDescription(\"Base_Visibility\")]\n        public PropertyVisibility Visibility\n        {\n            get\n            {\n                return new PropertyVisibility(this);\n            }\n        }\n\n        #endregion\n         \n        #region XML\n\n        [LocalizedCategory(\"XML\")]\n\t\t[LocalizedDisplayName(\"Base_DataElementName\")]\n\t\t[LocalizedDescription(\"Base_DataElementName\")]\n        public string DataElementName\n        {\n            get\n            {\n                return GetValue(\"DataElementName\", \"\");\n            }\n            set\n            {\n                SetValue(\"DataElementName\", value);\n            }\n        }\n\n        [LocalizedCategory(\"XML\")]\n\t\t[LocalizedDisplayName(\"Base_DataElementOutput\")]\n\t\t[LocalizedDescription(\"Base_DataElementOutput\")]\n        public DataElementOutputEnum DataElementOutput\n        {\n            get\n            {\n                string v = GetValue(\"DataElementOutput\", \"Auto\");\n                return Majorsilence.Reporting.Rdl.DataElementOutput.GetStyle(v);\n            }\n            set\n            {\n                SetValue(\"DataElementOutput\", value.ToString());\n            }\n        }\n\n        [LocalizedCategory(\"Layout\")]\n\t\t[LocalizedDisplayName(\"Base_ZIndex\")]\n\t\t[LocalizedDescription(\"Base_ZIndex\")]\n        public int ZIndex\n        {\n            get\n            {\n                string v = GetValue(\"ZIndex\", \"0\");\n\n                try\n                {\n                    return Convert.ToInt32(v);\n                }\n                catch\n                {\n                    return 0;\n                }\n            }\n            set\n            {\n                if (value < 0)\n                    throw new ArgumentException(\"ZIndex must be greater or equal to 0.\");\n                SetValue(\"ZIndex\", value.ToString());\n            }\n        }\n\n        [LocalizedCategory(\"Layout\")]\n\t\t[LocalizedDisplayName(\"Base_ColumnSpan\")]\n\t\t[LocalizedDescription(\"Base_ColumnSpan\")]\n        public int ColumnSpan\n        {\n            get\n            {\n                XmlNode ris = _node.ParentNode;\n                XmlNode tcell = ris.ParentNode;\n                if (tcell == null)\n                    return 1;\n                string colspan = _Draw.GetElementValue(tcell, \"ColSpan\", \"1\");\n                return Convert.ToInt32(colspan);\n            }\n            set\n            {\n                XmlNode ris = _node.ParentNode;\n                XmlNode tcell = ris.ParentNode;\n                if (tcell != null && tcell.Name == \"TableCell\")\n                {\t// SetTableCellColSpan does all the heavy lifting; \n                    //    ie making sure the # of columns continue to match\n                    _DesignCtl.StartUndoGroup(Strings.PropertyReportItem_Undo_ColumnSpanchange);\n                    _Draw.SetTableCellColSpan(tcell, value.ToString());\n                    _DesignCtl.EndUndoGroup(true);\n                    _DesignCtl.SignalReportChanged();\n                    _Draw.Invalidate();\n                }\n            }\n        }\n\n        [LocalizedCategory(\"Layout\")]\n\t\t[LocalizedDisplayName(\"Base_Size\")]\n\t\t[LocalizedDescription(\"Base_Size\")]\n        public PropertySize Size\n        {\n            get\n            {\n                string w = GetValue(\"Width\", \"\");\n                string h = GetValue(\"Height\", \"\");\n                return new PropertySize(this, h, w);\n            }\n        }\n\n        [LocalizedCategory(\"Layout\")]\n\t\t[LocalizedDisplayName(\"Base_Location\")]\n\t\t[LocalizedDescription(\"Base_Location\")]\n        public PropertyLocation Location\n        {\n            get\n            {\n                string x = GetValue(\"Left\", \"\");\n                string y = GetValue(\"Top\", \"\");\n                return new PropertyLocation(this, x, y);\n            }\n        }\n\n        #endregion\n\n        #region Table\n        [LocalizedCategory(\"Table\")]\n\t\t[LocalizedDisplayName(\"Base_Table\")]\n\t\t[LocalizedDescription(\"Base_Table\")]\n        public PropertyTable Table\n        {\n            get\n            {\n                if (_tnode == null)\n                    return null;\n                List<XmlNode> ris = new List<XmlNode>();\n                ris.Add(_tnode);\n\n                return new PropertyTable(_Draw, _DesignCtl, ris);\n            }\n        }\n        #endregion\n\n\t\t#region Matrix\n        \n\t\t[LocalizedCategory(\"Matrix\")]\n\t\t[LocalizedDisplayName(\"Base_Matrix\")]\n\t\t[LocalizedDescription(\"Base_Matrix\")]\n        public PropertyMatrix Matrix\n        {\n            get\n            {\n                if (_mnode == null)\n                    return null;\n                List<XmlNode> ris = new List<XmlNode>();\n                ris.Add(_mnode);\n\n                return new PropertyMatrix(_Draw, _DesignCtl, ris);\n            }\n        }\n        #endregion\n\n\n        internal bool IsExpression(string e)\n        {\n            if (e == null)\n                return false;\n            string t = e.Trim();\n            if (t.Length == 0)\n                return false;\n\n            return t[0] == '=';\n        }\n\n        internal string GetName(XmlNode node)\n        {\n            if (node == null)\n                return \"\";\n            XmlAttribute xa = node.Attributes[\"Name\"];\n            return xa == null ? \"\" : xa.Value;\n        }\n\n        internal void SetName(XmlNode node, string name)\n        {\n            if (node == null)\n                return;\n\n            string n = name.Trim();\n            string nerr = _Draw.NameError(node, n);\n            if (nerr != null)\n            {\n                throw new ApplicationException(nerr);\n            }\n\n            _DesignCtl.StartUndoGroup(Strings.PropertyReportItem_Undo_NameChange);\n            _Draw.SetName(node, n);\n            _DesignCtl.EndUndoGroup(true);\n            _DesignCtl.SignalReportChanged();\n            _Draw.Invalidate();\n        }\n\n        internal string GetWithList(string def, params string[] names)\n        {\n            return GetWithList(_node, def, names);\n        }\n\n        internal string GetWithList(XmlNode n, string def, params string[] names)\n        {\n            foreach (string nm in names)\n            {\n                n = _Draw.GetNamedChildNode(n, nm);\n                if (n == null)\n                    return def;\n            }\n            return n.InnerText;\n        }\n\n        internal void RemoveWithList(params string[] names)\n        {\n            // build the name of the change\n            StringBuilder sb = new StringBuilder();\n            foreach (string s in names)\n            {\n                sb.Append(s);\n                sb.Append(' ');\n            }\n            sb.Append(Strings.PropertyReport_Undo_change);\n            _DesignCtl.StartUndoGroup(sb.ToString());\n\n            // loop thru all the selected nodes to make the change\n            foreach (XmlNode n in _RIs)\n            {\n                RemoveWithList(n, names);\n            }\n            _DesignCtl.EndUndoGroup(true);\n            _DesignCtl.SignalReportChanged();\n            _Draw.Invalidate();\n        }\n\n        private void RemoveWithList(XmlNode n, params string[] names)\n        {\n            foreach (string nm in names)\n            {\n                n = _Draw.GetNamedChildNode(n, nm);\n                if (n == null)\n                    return;\n            }\n            XmlNode p = n.ParentNode;\n            _Draw.RemoveElement(p, names[names.Length-1]);\n        }\n\n        internal void SetWithList(string v, params string[] names)\n        {\n            // build the name of the change\n            StringBuilder sb = new StringBuilder();\n            foreach (string s in names)\n            {\n                sb.Append(s);\n                sb.Append(' ');\n            }\n            sb.Append(Strings.PropertyReport_Undo_change);\n            _DesignCtl.StartUndoGroup(sb.ToString());\n\n            // loop thru all the selected nodes to make the change\n            foreach (XmlNode n in _RIs)\n            {\n                SetWithList(n, v, names);\n            }\n            _DesignCtl.EndUndoGroup(true);\n            _DesignCtl.SignalReportChanged();\n            _Draw.Invalidate();\n        }\n\n        private void SetWithList(XmlNode n, string v, params string[] names)\n        {\n            foreach (string nm in names)\n            {\n                n = _Draw.GetCreateNamedChildNode(n, nm);\n            }\n            \n            n.InnerText = v;\n        }\n\n        internal string GetValue(string l, string v)\n        {\n            return _Draw.GetElementValue(_node, l, v);\n        }\n        internal string GetValue(string l1, string l2, string v)\n        {\n            XmlNode sNode = _Draw.GetNamedChildNode(_node, l1);\n            if (sNode == null)\n                return v;\n            return _Draw.GetElementValue(sNode, l2, v);\n        }\n        internal string GetValue(string l1, string l2, string l3, string v)\n        {\n            XmlNode sNode = _Draw.GetNamedChildNode(_node, l1);\n            if (sNode == null)\n                return v;\n            sNode = _Draw.GetNamedChildNode(sNode, l2);\n            if (sNode == null)\n                return v;\n            return _Draw.GetElementValue(sNode, l3, v);\n        }\n\n        internal void SetValue(string l, bool b)\n        {\n            SetValue(l, b ? \"true\" : \"false\");\n        }\n\n        internal void SetValue(string l, string v)\n        {\n            _DesignCtl.StartUndoGroup(l+ \" \" + Strings.PropertyReport_Undo_change);\n            foreach (XmlNode n in _RIs)\n            {\n                _Draw.SetElement(n, l, v);\n            }\n            _DesignCtl.EndUndoGroup(true);\n            _DesignCtl.SignalReportChanged();\n            _Draw.Invalidate();\n        }\n\n        internal void SetValue(string l1, string l2, string v)\n        {\n            _DesignCtl.StartUndoGroup(string.Format(\"{0} {1} {2}\", l1, l2, Strings.PropertyReport_Undo_change));\n            foreach (XmlNode n in _RIs)\n            {\n                XmlNode lNode = _Draw.GetCreateNamedChildNode(n, l1);\n                _Draw.SetElement(lNode, l2, v);\n            }\n            _DesignCtl.EndUndoGroup(true);\n            _DesignCtl.SignalReportChanged();\n            _Draw.Invalidate();\n        }\n\n        internal void SetValue(string l1, string l2, string l3, string v)\n        {\n            _DesignCtl.StartUndoGroup(string.Format(\"{0} {1} {2}\", l1, l2, Strings.PropertyReport_Undo_change));\n            foreach (XmlNode n in _RIs)\n            {\n                XmlNode aNode = _Draw.GetCreateNamedChildNode(n, l1);\n                XmlNode lNode = _Draw.GetCreateNamedChildNode(aNode, l2);\n                _Draw.SetElement(lNode, l3, v);\n            }\n            _DesignCtl.EndUndoGroup(true);\n            _DesignCtl.SignalReportChanged();\n            _Draw.Invalidate();\n        }\n\n        internal void RemoveValue(string l1)\n        {\n            _DesignCtl.StartUndoGroup(string.Format(\"{0} {1}\", l1, Strings.PropertyReport_Undo_change));\n            foreach (XmlNode n in _RIs)\n            {\n               _Draw.RemoveElement(n, l1);\n            }\n            _DesignCtl.EndUndoGroup(true);\n            _DesignCtl.SignalReportChanged();\n            _Draw.Invalidate();\n        }\n\n        internal void RemoveValue(string l1, string l2)\n        {\n            _DesignCtl.StartUndoGroup(string.Format(\"{0} {1} {2}\", l1, l2, Strings.PropertyReport_Undo_change));\n            foreach (XmlNode n in _RIs)\n            {\n                XmlNode lNode = _Draw.GetNamedChildNode(n, l1);\n                if (lNode != null)\n                    _Draw.RemoveElement(lNode, l2);\n            }\n            _DesignCtl.EndUndoGroup(true);\n            _DesignCtl.SignalReportChanged();\n            _Draw.Invalidate();\n        }\n\n        #region ICustomTypeDescriptor Members\n        // Implementation of ICustomTypeDescriptor: \n\n        public String GetClassName()\n        {\n            return TypeDescriptor.GetClassName(this, true);\n        }\n\n        public AttributeCollection GetAttributes()\n        {\n            return TypeDescriptor.GetAttributes(this, true);\n        }\n\n        public String GetComponentName()\n        {\n            return TypeDescriptor.GetComponentName(this, true);\n        }\n\n        public TypeConverter GetConverter()\n        {\n            return TypeDescriptor.GetConverter(this, true);\n        }\n\n        public EventDescriptor GetDefaultEvent()\n        {\n            return TypeDescriptor.GetDefaultEvent(this, true);\n        }\n\n        public PropertyDescriptor GetDefaultProperty()\n        {\n            return TypeDescriptor.GetDefaultProperty(this, true);\n        }\n\n        public object GetEditor(Type editorBaseType)\n        {\n            return TypeDescriptor.GetEditor(this, editorBaseType, true);\n        }\n\n        public EventDescriptorCollection GetEvents(Attribute[] attributes)\n        {\n            return TypeDescriptor.GetEvents(this, attributes, true);\n        }\n\n        public EventDescriptorCollection GetEvents()\n        {\n            return TypeDescriptor.GetEvents(this, true);\n        }\n\n        public object GetPropertyOwner(PropertyDescriptor pd)\n        {\n            return this;\n        }\n        \n        public PropertyDescriptorCollection GetProperties(Attribute[] attributes)\n        {\n            return GetProperties();\n        }\n\n        public PropertyDescriptorCollection GetProperties()\n        {\n            // Get the collection of properties\n            PropertyDescriptorCollection bProps = \n                                              TypeDescriptor.GetProperties(this, true);\n            PropertyDescriptorCollection pdc = new PropertyDescriptorCollection(null);\n\n            // For each property use a property descriptor of our own that is able to \n            // be globalized\n            foreach( PropertyDescriptor p in bProps )\n            {\n                if (p.Name == \"Name\" && bGroup)\n                    continue;\n                \n                if (InTable || InMatrix)\n                {   // Never show size or location when in a table or matrix\n                    if (p.Name == \"Size\" || p.Name == \"Location\")\n                        continue;\n                }\n                if (!InTable)\n                {   // Only show table related properties when in a table\n                    if (p.Category == \"Table\")\n                        continue;\n                    if (p.Name == \"ColumnSpan\")\n                        continue;\n                }\n                if (!InMatrix)\n                {   // Only show matrix related properties when in a matrix\n                    if (p.Category == \"Matrix\")\n                        continue;\n                }\n                // create our custom property descriptor and add it to the collection\n                pdc.Add(p);\n            }\n\n            if (bCustom)\n                SetCustomReportItem(pdc);\n            \n            return pdc;\n        }\n        \n        private void SetCustomReportItem(PropertyDescriptorCollection pdc)\n        {\n            ICustomReportItem cri = null;\n            try\n            {\n                string t = _Draw.GetElementValue(this.Node, \"Type\", \"\");\n                string type = _Draw.GetCustomReportItemType(t);\n\n                cri = RdlEngineConfig.CreateCustomReportItem(type);\n\n                _custom = cri.GetPropertiesInstance(_Draw.GetNamedChildNode(this.Node, \"CustomProperties\"));\n                TypeDescriptor.CreateAssociation(this, _custom);\n\n                PropertyDescriptorCollection bProps =\n                                  TypeDescriptor.GetProperties(_custom, true);\n\n                foreach (PropertyDescriptor p in bProps)\n                {\n                    // create our custom property descriptor and add it to the collection\n                    \n                    pdc.Add(p);\n                }\n                \n            }\n            catch\n            {\n            }\n            finally\n            {\n                if (cri != null)\n                    cri.Dispose();\n            }\n\n            return;\n        }\n\n        #endregion\n\n        #region IReportItem Members\n        public PropertyReportItem GetPRI()\n        {\n            return this;\n        }\n        #endregion\n    }\n\n    #region ColorValues\n    internal class ColorConverter : StringConverter\n    {\n        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n        {\n            return true;\n        }\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;   // allow user to also edit the color directly\n        }\n        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n        {\n            return new StandardValuesCollection(StaticLists.ColorList);\n        }\n    }\n    #endregion\n\n    #region IReportItem\n    internal interface IReportItem\n    {\n        PropertyReportItem GetPRI();\n    }\n    #endregion\n}\n"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertySize.cs",
    "content": "\nusing System;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Globalization;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyExpr - \n    /// </summary>\n    [TypeConverter(typeof(PropertySizeConverter))]\n    internal class PropertySize\n    {\n        PropertyReportItem _pri;\n        string _h;\n        string _w;\n\n        public PropertySize(PropertyReportItem pri, string h, string w)\n        {\n            _pri = pri;\n            _h = h;\n            _w = w;\n        }\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[LocalizedDisplayName(\"Size_Height\")]\n        public string Height\n        {\n            get { return _h; }\n            set \n            {\n                DesignerUtility.ValidateSize(value, true, false);\n                _h = value;\n                _pri.SetValue(\"Height\", value);\n            }\n        }\n\n\t\t[RefreshProperties(RefreshProperties.Repaint)]\n\t\t[LocalizedDisplayName(\"Size_Width\")]\n\t\tpublic string Width\n        {\n            get { return _w; }\n            set \n            {\n                DesignerUtility.ValidateSize(value, true, false);\n                _w = value;\n                _pri.SetValue(\"Width\", value);\n            }\n        }\n    }\n\n    internal class PropertySizeConverter : ExpandableObjectConverter\n    {\n        public override object ConvertTo(ITypeDescriptorContext context, \n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertySize)\n            {\n                PropertySize pe = value as PropertySize;\n                return string.Format(\"({0}, {1})\", pe.Height, pe.Width);\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n}"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertySorting.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Drawing;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Drawing.Design;\nusing System.Xml;\nusing System.Globalization;\nusing System.Windows.Forms;\nusing System.Windows.Forms.Design;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyAction - \n    /// </summary>\n    [TypeConverter(typeof(PropertySortingConverter)),\n       Editor(typeof(PropertySortingUIEditor), typeof(System.Drawing.Design.UITypeEditor))]\n    internal class PropertySorting : IReportItem\n    {\n        PropertyReportItem pri;\n\n        public PropertySorting(PropertyReportItem ri)\n        {\n            pri = ri;\n        }\n\n        public override string ToString()\n        {\n            StringBuilder sb = new StringBuilder();\n            XmlNode sorting = pri.Draw.GetNamedChildNode(pri.Node, \"Sorting\");\n\n            if (sorting == null)\n                return \"\";\n\n            foreach (XmlNode sNode in sorting.ChildNodes)\n            {\n                if (sNode.NodeType != XmlNodeType.Element ||\n                        sNode.Name != \"SortBy\")\n                    continue;\n                if (sb.Length > 0)\n                    sb.Append(\", \");\n                // Get the values\n                XmlNode vNodes = pri.Draw.GetNamedChildNode(sNode, \"SortExpression\");\n                if (vNodes != null)\n                {\n                    sb.Append(vNodes.InnerText);\n                    string dir = pri.Draw.GetElementValue(sNode, \"Direction\", \"Ascending\");\n                    sb.Append(' ');\n                    sb.Append(dir);\n                }\n            }\n\n            return sb.ToString();\n        }\n        #region IReportItem Members\n        public PropertyReportItem GetPRI()\n        {\n            return this.pri;\n        }\n\n        #endregion\n    }\n\n    internal class PropertySortingConverter : StringConverter\n    {\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;\n        }\n\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                          System.Type destinationType)\n        {\n            if (destinationType == typeof(PropertySorting))\n                return true;\n            \n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context, \n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertySorting)\n            {\n                PropertySorting pb = value as PropertySorting;\n                return pb.ToString();\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n\n    internal class PropertySortingUIEditor : UITypeEditor\n    {\n        internal PropertySortingUIEditor()\n        {\n        }\n\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context,\n                                        IServiceProvider provider,\n                                        object value)\n        {\n\n            if ((context == null) || (provider == null))\n                return base.EditValue(context, provider, value);\n\n            // Access the Property Browser's UI display service\n            IWindowsFormsEditorService editorService =\n                (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));\n\n            if (editorService == null)\n                return base.EditValue(context, provider, value);\n\n            // Create an instance of the UI editor form\n            IReportItem iri = context.Instance as IReportItem;\n            if (iri == null)\n                return base.EditValue(context, provider, value);\n            PropertyReportItem pri = iri.GetPRI();\n\n            PropertySorting pb = value as PropertySorting;\n            if (pb == null)\n                return base.EditValue(context, provider, value);\n\n            using (SingleCtlDialog scd = new SingleCtlDialog(pri.DesignCtl, pri.Draw, pri.Nodes,\n                SingleCtlTypeEnum.SortingCtl, null))\n            {\n\n                // Display the UI editor dialog\n                if (editorService.ShowDialog(scd) == DialogResult.OK)\n                {\n                    // Return the new property value from the UI editor form\n                    return new PropertySorting(pri);\n                }\n\n                return base.EditValue(context, provider, value);\n            }\n        }\n    }\n}"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertySubreport.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Drawing.Design;\nusing System.Windows.Forms;\nusing System.Windows.Forms.Design;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertySubreport - The Rectangle specific Properties\n    /// </summary>\n    \n    internal class PropertySubreport : PropertyReportItem\n    {\n        public PropertySubreport(DesignXmlDraw d, DesignCtl dc, List<XmlNode> ris) : base(d, dc, ris)\n        {\n        }\n\n        [LocalizedCategory(\"Subreport\")]\n\t\t[LocalizedDisplayName(\"Subreport_ReportName\")]\n\t\t[LocalizedDescription(\"Subreport_ReportName\")]\n        [Editor(typeof(PropertySubreportUIEditor), typeof(UITypeEditor))]\n        public string ReportName\n        {\n            get { return Draw.GetElementValue(Node, \"ReportName\", \"\"); }\n            set\n            {\n                SetValue(\"ReportName\", value);\n            }\n        }\n\n        [LocalizedCategory(\"Subreport\")]\n\t\t[LocalizedDisplayName(\"Subreport_Parameters\")]\n\t\t[LocalizedDescription(\"Subreport_Parameters\")]\n\t\t[Editor(typeof(PropertySubreportParametersUIEditor), typeof(UITypeEditor))]\n        public string Parameters\n        {\n            get \n            { \n                XmlNode pn = this.Draw.GetNamedChildNode(this.Node, \"Parameters\");\n                return (pn == null || pn.ChildNodes == null || pn.ChildNodes.Count == 0) ? \n                    \"none defined\" :\n                    string.Format(\"{0} defined\", pn.ChildNodes.Count);\n            }\n        }\n\n        [LocalizedCategory(\"Subreport\")]\n\t\t[LocalizedDisplayName(\"Subreport_NoRows\")]\n\t\t[LocalizedDescription(\"Subreport_NoRows\")]\n        public PropertyExpr NoRows\n        {\n            get { return new PropertyExpr(this.Draw.GetElementValue(this.Node, \"NoRows\", \"\")); }\n            set\n            {\n                if (value.Expression == null || value.Expression.Length == 0)\n                    this.RemoveValue(\"NoRows\");\n                else\n                    this.SetValue(\"NoRows\", value.Expression);\n            }\n        }\n\n        [LocalizedCategory(\"Subreport\")]\n\t\t[LocalizedDisplayName(\"Subreport_MergeTransactions\")]\n\t\t[LocalizedDescription(\"Subreport_MergeTransactions\")]\n        public bool MergeTransactions\n        {\n            get { return string.Compare(this.Draw.GetElementValue(this.Node, \"MergeTransactions\", \"true\"), \"true\", true)==0; }\n            set\n            {\n                this.SetValue(\"MergeTransactions\", value? \"true\": \"false\");\n            }\n        }\n\n    }\n\n    internal class PropertySubreportUIEditor : UITypeEditor\n    {\n        public PropertySubreportUIEditor()\n        {\n        }\n\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context,\n                                        IServiceProvider provider,\n                                        object value)\n        {\n\n            if ((context == null) || (provider == null))\n                return base.EditValue(context, provider, value);\n\n            // Access the Property Browser's UI display service\n            IWindowsFormsEditorService editorService =\n                (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));\n\n            if (editorService == null)\n                return base.EditValue(context, provider, value);\n\n            // Create an instance of the UI editor form\n            PropertySubreport pr = context.Instance as PropertySubreport;\n            if (pr == null)\n                return base.EditValue(context, provider, value);\n\n            using (SingleCtlDialog scd = new SingleCtlDialog(pr.DesignCtl, pr.Draw, pr.Nodes, SingleCtlTypeEnum.SubreportCtl, null))\n            {\n                // Display the UI editor dialog\n                if (editorService.ShowDialog(scd) == DialogResult.OK)\n                {\n                    // Return the new property value from the UI editor form\n                    return pr.ReportName;\n                }\n\n                return base.EditValue(context, provider, value);\n            }\n        }\n    }\n\n    internal class PropertySubreportParametersUIEditor : UITypeEditor\n    {\n        public PropertySubreportParametersUIEditor()\n        {\n        }\n\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context,\n                                        IServiceProvider provider,\n                                        object value)\n        {\n\n            if ((context == null) || (provider == null))\n                return base.EditValue(context, provider, value);\n\n            // Access the Property Browser's UI display service\n            IWindowsFormsEditorService editorService =\n                (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));\n\n            if (editorService == null)\n                return base.EditValue(context, provider, value);\n\n            // Create an instance of the UI editor form\n            PropertySubreport pr = context.Instance as PropertySubreport;\n            if (pr == null)\n                return base.EditValue(context, provider, value);\n\n            using (SingleCtlDialog scd = new SingleCtlDialog(pr.DesignCtl, pr.Draw, pr.Nodes, SingleCtlTypeEnum.SubreportCtl, null))\n            {\n                // Display the UI editor dialog\n                if (editorService.ShowDialog(scd) == DialogResult.OK)\n                {\n                    // Return the new property value from the UI editor form\n                    return pr.Parameters;\n                }\n\n                return base.EditValue(context, provider, value);\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyTable.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Drawing;\nusing System.Drawing.Design;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Xml;\nusing System.Text.RegularExpressions;\nusing System.Globalization;\nusing System.Windows.Forms;\nusing System.Windows.Forms.Design;\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyTable - The Table Properties\n    /// </summary>\n    [TypeConverter(typeof(PropertyTableConverter)),\n       Editor(typeof(PropertyTableUIEditor), typeof(System.Drawing.Design.UITypeEditor))]\n    internal class PropertyTable : PropertyDataRegion\n    {\n        public PropertyTable(DesignXmlDraw d, DesignCtl dc, List<XmlNode> ris)\n            : base(d, dc, ris)\n        {\n        }\n    }\n    internal class PropertyTableConverter : ExpandableObjectConverter\n    {\n        public override object ConvertTo(ITypeDescriptorContext context,\n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyTable)\n            {\n                PropertyTable pe = value as PropertyTable;\n                return pe.Name;\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n    internal class PropertyTableUIEditor : UITypeEditor\n    {\n        public PropertyTableUIEditor()\n        {\n        }\n\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context,\n                                        IServiceProvider provider,\n                                        object value)\n        {\n\n            if ((context == null) || (provider == null))\n                return base.EditValue(context, provider, value);\n\n            // Access the Property Browser's UI display service\n            IWindowsFormsEditorService editorService =\n                (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));\n\n            if (editorService == null)\n                return base.EditValue(context, provider, value);\n\n            // Create an instance of the UI editor form\n            IReportItem iri = context.Instance as IReportItem;\n            if (iri == null)\n                return base.EditValue(context, provider, value);\n            PropertyReportItem pri = iri.GetPRI();\n\n            PropertyTable pt = value as PropertyTable;\n            if (pt == null)\n                return base.EditValue(context, provider, value);\n\n            //SingleCtlDialog scd = new SingleCtlDialog(pri.DesignCtl, pri.Draw, pri.Nodes, SingleCtlTypeEnum.BorderCtl, pb.Names);\n            DesignCtl dc = pri.DesignCtl;\n            DesignXmlDraw dp = dc.DrawCtl;\n            if (dp.SelectedCount != 1)\n                return base.EditValue(context, provider, value); \n            XmlNode riNode = dp.SelectedList[0];\n            XmlNode table = dp.GetTableFromReportItem(riNode);\n            if (table == null)\n                return base.EditValue(context, provider, value);\n            XmlNode tc = dp.GetTableColumn(riNode);\n            XmlNode tr = dp.GetTableRow(riNode);\n\n            List<XmlNode> ar = new List<XmlNode>();\t\t// need to put this is a list for dialog to handle\n            ar.Add(table);\n            dc.UndoObject.StartUndoGroup(Strings.PropertyTableUIEditor_EditValue_TableDialog);\n            using (PropertyDialog pd = new PropertyDialog(dp, ar, PropertyTypeEnum.ReportItems, tc, tr))\n            {\n                // Display the UI editor dialog\n                DialogResult dr = editorService.ShowDialog(pd);\n                dc.UndoObject.EndUndoGroup(pd.Changed || dr == DialogResult.OK);\n                if (pd.Changed || dr == DialogResult.OK)\n                {\n                    dp.Invalidate();\n                    return new PropertyTable(dp, dc, pt.Nodes);\n                }\n\n                return base.EditValue(context, provider, value);\n            }\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyTableTab.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.ComponentModel.Design;\nusing System.Drawing;\nusing System.Drawing.Drawing2D;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Windows.Forms.Design;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// Our sample PropertyTab.  It is connected to an instance of FunkyButton\n    /// and displayes each of its vertices as a different property.\n    /// </summary>\n    internal class PropertyTableTab : PropertyTab\n    {\n        internal PropertyReportItem _pri;   // the report item we're attached to\n\n        public PropertyTableTab()\n        {\n        }\n\n        /// <summary>\n        /// This is the tooltip string that will be displayed\n        /// for this tab button.\n        /// </summary>\n        public override string TabName\n        {\n            get\n            {\n                return \"Table\";\n            }\n        }\n\n        /// <summary>\n        /// The Image that will be displayed on the PropertyGrid toolbar.\n        /// </summary>\n        public override Bitmap Bitmap\n        {\n            get\n            {\n                // force this to 16x16 to work around a Beta2 PropertyGrid\n                // issue.\n                System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(RdlDesigner));\n                System.Drawing.Image i = ((System.Drawing.Image)(resources.GetObject(\"bTable.Image\")));\n\n                return new Bitmap(i, new Size(16, 16));\n            }\n        }\n\n\n        /// <summary>\n        /// The Table contains a PropertyReportItem\n        /// </summary>\n        /// <param name=\"o\"></param>\n        /// <returns></returns>\n        public override bool CanExtend(object o)\n        {\n            PropertyReportItem pri = o as PropertyReportItem;\n            return !(pri == null || pri.TableNode == null);\n        }\n\n        /// <summary>\n        /// Just call the other version...\n        /// </summary>\n        public override PropertyDescriptorCollection GetProperties(object component, Attribute[] attrs)\n        {\n            return GetProperties(null, component, attrs);\n        }\n\n\n        /// <summary>\n        /// Our main function.  We display the vertices of a FunkyButton as properties by creating\n        /// PropertyDescriptors for each one.\n        /// </summary>\n        /// <param name=\"context\"></param>\n        /// <param name=\"component\"></param>\n        /// <param name=\"attrs\"></param>\n        /// <returns></returns>\n        public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object component, Attribute[] attrs)\n        {\n            PropertyReportItem pri = component as PropertyReportItem;\n\n            // we can get things besides PropertyReportItems here.  Since we want our Point types\n            // to be expandable, the PropertyGrid will still ask this PropertyTab for the properties of\n            // points, so we default to the standard way of getting properties from other types of objects.\n            //\n            if (pri == null)\n            {\n\n                TypeConverter tc = TypeDescriptor.GetConverter(component);\n                if (tc != null)\n                {\n                    return tc.GetProperties(context, component, attrs);\n                }\n                else\n                {\n                    return TypeDescriptor.GetProperties(component, attrs);\n                }\n            }\n\n            _pri = pri;\n            XmlNode tnode = _pri.TableNode;\n\n            // Get the collection of properties\n            PropertyDescriptorCollection pdc = new PropertyDescriptorCollection(null);\n\n            if (tnode == null) // return empty if no table\n                return pdc;\n\n            PropertyDescriptorCollection bProps =\n                              TypeDescriptor.GetProperties(_pri, true);\n\n            // For each property use a property descriptor of our own that is able to \n            // be globalized\n            foreach (PropertyDescriptor p in bProps)\n            {\n                if (p.Category != \"Table\")\n                    continue;\n                pdc.Add(p);\n            }\n            return pdc;\n\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyTextbox.cs",
    "content": "using Majorsilence.Reporting.Rdl;\n\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyTextbox - The Textbox Properties\n    /// </summary>\n    [DefaultProperty(\"Value\")]\n    internal class PropertyTextbox : PropertyReportItem\n    {\n        public PropertyTextbox(DesignXmlDraw d, DesignCtl dc, List<XmlNode> ris) : base(d, dc, ris)\n        {\n        }\n\n        [LocalizedCategory(\"Textbox\")]\n\t\t[LocalizedDisplayName(\"Textbox_Value\")]\n\t\t[LocalizedDescription(\"Textbox_Value\")]\n        public PropertyExpr Value\n        {\n            get { return new PropertyExpr(this.GetValue(\"Value\", \"\")); }\n            set\n            {\n                this.SetValue(\"Value\", value.Expression);\n            }\n        }\n\n        [LocalizedCategory(\"Style\")]\n\t\t[LocalizedDisplayName(\"Textbox_Appearance\")]\n\t\t[LocalizedDescription(\"Textbox_Appearance\")]\n        public PropertyAppearance Appearance\n        {\n            get { return new PropertyAppearance(this); }\n        }\n\n        [LocalizedCategory(\"Textbox\")]\n\t\t[LocalizedDisplayName(\"Textbox_CanGrow\")]\n\t\t[LocalizedDescription(\"Textbox_CanGrow\")]\n        public bool CanGrow\n        {\n            get { return this.GetValue(\"CanGrow\", \"false\").ToLower() == \"true\"; }\n            set\n            {\n                this.SetValue(\"CanGrow\", value? \"true\": \"false\");\n            }\n        }\n\n        [LocalizedCategory(\"Textbox\")]\n\t\t[LocalizedDisplayName(\"Textbox_CanShrink\")]\n\t\t[LocalizedDescription(\"Textbox_CanShrink\")]\n        public bool CanShrink\n        {\n            get { return this.GetValue(\"CanShrink\", \"false\").ToLower() == \"true\"; }\n            set\n            {\n                this.SetValue(\"CanShrink\", value ? \"true\" : \"false\");\n            }\n        }\n\n        [LocalizedCategory(\"Textbox\")]\n\t\t[LocalizedDisplayName(\"Textbox_HideDuplicates\")]\n\t\t[LocalizedDescription(\"Textbox_HideDuplicates\")]\n\t\t[TypeConverter(typeof(HideDuplicatesConverter))]\n        public string HideDuplicates\n        {\n            get { return this.GetValue(\"HideDuplicates\", \"\"); }\n            set\n            {\n                if (value == \"\")\n                    this.RemoveValue(\"HideDuplicates\");\n                else\n                    this.SetValue(\"HideDuplicates\", value);\n            }\n        }\n\n        [LocalizedCategory(\"XML\")]\n\t\t[LocalizedDisplayName(\"Textbox_DataElementStyle\")]\n\t\t[LocalizedDescription(\"Textbox_DataElementStyle\")]\n        public DataElementStyleEnum DataElementStyle\n        {\n            get\n            {\n                string v = GetValue(\"DataElementStyle\", \"Auto\");\n                return Majorsilence.Reporting.Rdl.DataElementStyle.GetStyle(v);\n            }\n            set\n            {\n                SetValue(\"DataElementStyle\", value.ToString());\n            }\n        }\n\n        internal class HideDuplicatesConverter : StringConverter\n        {\n\n            public override bool GetStandardValuesSupported(ITypeDescriptorContext context)\n            {\n                return true;\n            }\n\n            public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n            {\n                // returning false here means the property will\n                // have a drop down and a value that can be manually\n                // entered.      \n                return false;\n            }\n\n            public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)\n            {\n                if (context == null)\n                    return base.GetStandardValues(context);\n\n                PropertyTextbox pt = context.Instance as PropertyTextbox;\n                if (pt == null)\n                    return base.GetStandardValues(context);\n\n                // Populate with the list of datasets and group names\n                ArrayList ar = new ArrayList();\n                ar.Add(\"\");         // add an empty string to the collection\n                object[] dsn = pt.Draw.DataSetNames;\n                if (dsn != null)\n                    ar.AddRange(dsn);\n                object[] grps = pt.Draw.GroupingNames;\n                if (grps != null)\n                    ar.AddRange(grps);\n\n                StandardValuesCollection svc = new StandardValuesCollection(ar);\n                \n                return svc;\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "RdlDesign/RdlProperties/PropertyVisibility.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Drawing;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Drawing.Design;\nusing System.Xml;\nusing System.Globalization;\nusing System.Windows.Forms;\nusing System.Windows.Forms.Design;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// PropertyAction - \n    /// </summary>\n    [TypeConverter(typeof(PropertyVisibilityConverter)),\n       Editor(typeof(PropertyVisibilityUIEditor), typeof(System.Drawing.Design.UITypeEditor))]\n    internal class PropertyVisibility:IReportItem\n    {\n        PropertyReportItem pri;\n\n        public PropertyVisibility(PropertyReportItem ri)\n        {\n            pri = ri;\n        }\n        \n        public override string ToString()\n        {\n            string result = \"\";\n            DesignXmlDraw dr = pri.Draw;\n\n            XmlNode visNode = dr.GetNamedChildNode(pri.Node, \"Visibility\");\n            if (visNode != null)\n            {\n                XmlNode hNode = dr.GetNamedChildNode(pri.Node, \"Visibility\");\n                XmlNode vNode = dr.GetNamedChildNode(hNode, \"Hidden\");\n                if (vNode != null)\n                    result = string.Format(\"Hidden: {0}\", vNode.InnerText);\n            }\n            return result;\n        }\n\n        #region IReportItem Members\n\n        public PropertyReportItem GetPRI()\n        {\n            return this.pri;\n        }\n\n        #endregion\n    }\n\n    internal class PropertyVisibilityConverter : StringConverter\n    {\n        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)\n        {\n            return false;\n        }\n\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n                                          System.Type destinationType)\n        {\n            if (destinationType == typeof(PropertyVisibility))\n                return true;\n            \n            return base.CanConvertTo(context, destinationType);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context, \n            CultureInfo culture, object value, Type destinationType)\n        {\n            if (destinationType == typeof(string) && value is PropertyVisibility)\n            {\n                PropertyVisibility pv = value as PropertyVisibility;\n                return pv.ToString();\n            }\n\n            return base.ConvertTo(context, culture, value, destinationType);\n        }\n\n    }\n\n    internal class PropertyVisibilityUIEditor : UITypeEditor\n    {\n        public PropertyVisibilityUIEditor()\n        {\n        }\n\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context,\n                                        IServiceProvider provider,\n                                        object value)\n        {\n\n            if ((context == null) || (provider == null))\n                return base.EditValue(context, provider, value);\n\n            // Access the Property Browser's UI display service\n            IWindowsFormsEditorService editorService =\n                (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));\n\n            if (editorService == null)\n                return base.EditValue(context, provider, value);\n\n            // Create an instance of the UI editor form\n            IReportItem iri = context.Instance as IReportItem;\n            if (iri == null)\n                return base.EditValue(context, provider, value);\n            PropertyReportItem pre = iri.GetPRI();\n\n            PropertyVisibility pv = value as PropertyVisibility;\n            if (pv == null)\n                return base.EditValue(context, provider, value);\n\n            using (SingleCtlDialog scd = new SingleCtlDialog(pre.DesignCtl, pre.Draw, pre.Nodes, SingleCtlTypeEnum.VisibilityCtl, null))\n            {\n                // Display the UI editor dialog\n                if (editorService.ShowDialog(scd) == DialogResult.OK)\n                {\n                    // Return the new property value from the UI editor form\n                    return new PropertyAction(pre);\n                }\n\n                return base.EditValue(context, provider, value);\n            }\n        }\n    }\n}"
  },
  {
    "path": "RdlDesign/RdlUserControl.Designer.cs",
    "content": "﻿namespace Majorsilence.Reporting.RdlDesign\n{\n    partial class RdlUserControl\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RdlUserControl));\n            this.DoubleBuffered = true;\n\t\t\tthis.splitContainer1 = new System.Windows.Forms.SplitContainer();\n\t\t\tthis.rdlEditPreview1 = new Majorsilence.Reporting.RdlDesign.RdlEditPreview();\n\t\t\tthis.mainProperties = new Majorsilence.Reporting.RdlDesign.PropertyCtl();\n\t\t\tthis.mainTB = new System.Windows.Forms.ToolStrip();\n\t\t\tthis.newToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.openToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.saveToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.cutToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.copyToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.pasteToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.undoToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.textboxToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.chartToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.tableToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.listToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.imageToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.matrixToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.subreportToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.rectangleToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.lineToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.fxToolStripLabel1 = new System.Windows.Forms.ToolStripLabel();\n\t\t\tthis.ctlEditTextbox = new System.Windows.Forms.ToolStripTextBox();\n\t\t\tthis.toolStrip1 = new System.Windows.Forms.ToolStrip();\n\t\t\tthis.boldToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.italiacToolStripButton1 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.underlineToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.leftAlignToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.centerAlignToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.rightAlignToolStripButton3 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.fontToolStripComboBox1 = new System.Windows.Forms.ToolStripComboBox();\n\t\t\tthis.fontSizeToolStripComboBox1 = new System.Windows.Forms.ToolStripComboBox();\n\t\t\tthis.printToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.zoomToolStripComboBox1 = new System.Windows.Forms.ToolStripComboBox();\n\t\t\tthis.selectToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.pdfToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.htmlToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.excelToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.XmlToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.MhtToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.CsvToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.RtfToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.TifToolStripButton2 = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.ButtonShowProperties = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.panel1 = new System.Windows.Forms.Panel();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.foreColorPicker1 = new Majorsilence.Reporting.RdlDesign.ColorPicker();\n\t\t\tthis.backColorPicker1 = new Majorsilence.Reporting.RdlDesign.ColorPicker();\n\t\t\tthis.mainTC = new System.Windows.Forms.TabControl();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n\t\t\tthis.splitContainer1.Panel1.SuspendLayout();\n\t\t\tthis.splitContainer1.Panel2.SuspendLayout();\n\t\t\tthis.splitContainer1.SuspendLayout();\n\t\t\tthis.mainTB.SuspendLayout();\n\t\t\tthis.toolStrip1.SuspendLayout();\n\t\t\tthis.panel1.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// splitContainer1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.splitContainer1, \"splitContainer1\");\n\t\t\tthis.splitContainer1.Name = \"splitContainer1\";\n\t\t\t// \n\t\t\t// splitContainer1.Panel1\n\t\t\t// \n\t\t\tthis.splitContainer1.Panel1.Controls.Add(this.rdlEditPreview1);\n\t\t\t// \n\t\t\t// splitContainer1.Panel2\n\t\t\t// \n\t\t\tthis.splitContainer1.Panel2.Controls.Add(this.mainProperties);\n\t\t\t// \n\t\t\t// rdlEditPreview1\n\t\t\t// \n\t\t\tthis.rdlEditPreview1.CurrentInsert = null;\n\t\t\tresources.ApplyResources(this.rdlEditPreview1, \"rdlEditPreview1\");\n\t\t\tthis.rdlEditPreview1.Modified = false;\n\t\t\tthis.rdlEditPreview1.Name = \"rdlEditPreview1\";\n\t\t\tthis.rdlEditPreview1.SelectedText = \"\";\n\t\t\tthis.rdlEditPreview1.SelectionTool = false;\n\t\t\tthis.rdlEditPreview1.Zoom = 1F;\n\t\t\tthis.rdlEditPreview1.ZoomMode = Majorsilence.Reporting.RdlViewer.ZoomEnum.UseZoom;\n\t\t\t// \n\t\t\t// mainProperties\n\t\t\t// \n\t\t\tresources.ApplyResources(this.mainProperties, \"mainProperties\");\n\t\t\tthis.mainProperties.Name = \"mainProperties\";\n\t\t\t// \n\t\t\t// mainTB\n\t\t\t// \n\t\t\tthis.mainTB.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.newToolStripButton1,\n            this.openToolStripButton1,\n            this.saveToolStripButton1,\n            this.cutToolStripButton1,\n            this.copyToolStripButton1,\n            this.pasteToolStripButton1,\n            this.undoToolStripButton1,\n            this.textboxToolStripButton1,\n            this.chartToolStripButton1,\n            this.tableToolStripButton1,\n            this.listToolStripButton1,\n            this.imageToolStripButton1,\n            this.matrixToolStripButton1,\n            this.subreportToolStripButton1,\n            this.rectangleToolStripButton1,\n            this.lineToolStripButton1,\n            this.fxToolStripLabel1,\n            this.ctlEditTextbox});\n\t\t\tresources.ApplyResources(this.mainTB, \"mainTB\");\n\t\t\tthis.mainTB.Name = \"mainTB\";\n\t\t\t// \n\t\t\t// newToolStripButton1\n\t\t\t// \n\t\t\tthis.newToolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tthis.newToolStripButton1.Image = global::Majorsilence.Reporting.RdlDesign.Properties.Resources.document_new;\n\t\t\tresources.ApplyResources(this.newToolStripButton1, \"newToolStripButton1\");\n\t\t\tthis.newToolStripButton1.Name = \"newToolStripButton1\";\n\t\t\tthis.newToolStripButton1.Tag = \"New\";\n\t\t\tthis.newToolStripButton1.Click += new System.EventHandler(this.newToolStripButton1_Click);\n\t\t\t// \n\t\t\t// openToolStripButton1\n\t\t\t// \n\t\t\tthis.openToolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tthis.openToolStripButton1.Image = global::Majorsilence.Reporting.RdlDesign.Properties.Resources.document_open;\n\t\t\tresources.ApplyResources(this.openToolStripButton1, \"openToolStripButton1\");\n\t\t\tthis.openToolStripButton1.Name = \"openToolStripButton1\";\n\t\t\tthis.openToolStripButton1.Tag = \"Open\";\n\t\t\tthis.openToolStripButton1.Click += new System.EventHandler(this.openToolStripButton1_Click);\n\t\t\t// \n\t\t\t// saveToolStripButton1\n\t\t\t// \n\t\t\tthis.saveToolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tthis.saveToolStripButton1.Image = global::Majorsilence.Reporting.RdlDesign.Properties.Resources.document_save;\n\t\t\tresources.ApplyResources(this.saveToolStripButton1, \"saveToolStripButton1\");\n\t\t\tthis.saveToolStripButton1.Name = \"saveToolStripButton1\";\n\t\t\tthis.saveToolStripButton1.Tag = \"Save\";\n\t\t\tthis.saveToolStripButton1.Click += new System.EventHandler(this.saveToolStripButton1_Click);\n\t\t\t// \n\t\t\t// cutToolStripButton1\n\t\t\t// \n\t\t\tthis.cutToolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tthis.cutToolStripButton1.Image = global::Majorsilence.Reporting.RdlDesign.Properties.Resources.edit_cut;\n\t\t\tresources.ApplyResources(this.cutToolStripButton1, \"cutToolStripButton1\");\n\t\t\tthis.cutToolStripButton1.Name = \"cutToolStripButton1\";\n\t\t\tthis.cutToolStripButton1.Tag = \"Cut\";\n\t\t\tthis.cutToolStripButton1.Click += new System.EventHandler(this.cutToolStripButton1_Click);\n\t\t\t// \n\t\t\t// copyToolStripButton1\n\t\t\t// \n\t\t\tthis.copyToolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tthis.copyToolStripButton1.Image = global::Majorsilence.Reporting.RdlDesign.Properties.Resources.edit_copy;\n\t\t\tresources.ApplyResources(this.copyToolStripButton1, \"copyToolStripButton1\");\n\t\t\tthis.copyToolStripButton1.Name = \"copyToolStripButton1\";\n\t\t\tthis.copyToolStripButton1.Tag = \"Copy\";\n\t\t\tthis.copyToolStripButton1.Click += new System.EventHandler(this.copyToolStripButton1_Click);\n\t\t\t// \n\t\t\t// pasteToolStripButton1\n\t\t\t// \n\t\t\tthis.pasteToolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tthis.pasteToolStripButton1.Image = global::Majorsilence.Reporting.RdlDesign.Properties.Resources.edit_paste;\n\t\t\tresources.ApplyResources(this.pasteToolStripButton1, \"pasteToolStripButton1\");\n\t\t\tthis.pasteToolStripButton1.Name = \"pasteToolStripButton1\";\n\t\t\tthis.pasteToolStripButton1.Tag = \"Paste\";\n\t\t\tthis.pasteToolStripButton1.Click += new System.EventHandler(this.pasteToolStripButton1_Click);\n\t\t\t// \n\t\t\t// undoToolStripButton1\n\t\t\t// \n\t\t\tthis.undoToolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tthis.undoToolStripButton1.Image = global::Majorsilence.Reporting.RdlDesign.Properties.Resources.edit_undo;\n\t\t\tresources.ApplyResources(this.undoToolStripButton1, \"undoToolStripButton1\");\n\t\t\tthis.undoToolStripButton1.Name = \"undoToolStripButton1\";\n\t\t\tthis.undoToolStripButton1.Tag = \"Undo\";\n\t\t\tthis.undoToolStripButton1.Click += new System.EventHandler(this.undoToolStripButton1_Click);\n\t\t\t// \n\t\t\t// textboxToolStripButton1\n\t\t\t// \n\t\t\tthis.textboxToolStripButton1.CheckOnClick = true;\n\t\t\tresources.ApplyResources(this.textboxToolStripButton1, \"textboxToolStripButton1\");\n\t\t\tthis.textboxToolStripButton1.Name = \"textboxToolStripButton1\";\n\t\t\tthis.textboxToolStripButton1.Tag = \"Textbox\";\n\t\t\tthis.textboxToolStripButton1.Click += new System.EventHandler(this.ToolStripButtons_Clicked);\n\t\t\t// \n\t\t\t// chartToolStripButton1\n\t\t\t// \n\t\t\tthis.chartToolStripButton1.CheckOnClick = true;\n\t\t\tthis.chartToolStripButton1.Image = global::Majorsilence.Reporting.RdlDesign.Properties.Resources.chart;\n\t\t\tresources.ApplyResources(this.chartToolStripButton1, \"chartToolStripButton1\");\n\t\t\tthis.chartToolStripButton1.Name = \"chartToolStripButton1\";\n\t\t\tthis.chartToolStripButton1.Tag = \"Chart\";\n\t\t\tthis.chartToolStripButton1.Click += new System.EventHandler(this.ToolStripButtons_Clicked);\n\t\t\t// \n\t\t\t// tableToolStripButton1\n\t\t\t// \n\t\t\tthis.tableToolStripButton1.CheckOnClick = true;\n\t\t\tresources.ApplyResources(this.tableToolStripButton1, \"tableToolStripButton1\");\n\t\t\tthis.tableToolStripButton1.Name = \"tableToolStripButton1\";\n\t\t\tthis.tableToolStripButton1.Tag = \"Table\";\n\t\t\tthis.tableToolStripButton1.Click += new System.EventHandler(this.ToolStripButtons_Clicked);\n\t\t\t// \n\t\t\t// listToolStripButton1\n\t\t\t// \n\t\t\tthis.listToolStripButton1.CheckOnClick = true;\n\t\t\tresources.ApplyResources(this.listToolStripButton1, \"listToolStripButton1\");\n\t\t\tthis.listToolStripButton1.Name = \"listToolStripButton1\";\n\t\t\tthis.listToolStripButton1.Tag = \"List\";\n\t\t\tthis.listToolStripButton1.Click += new System.EventHandler(this.ToolStripButtons_Clicked);\n\t\t\t// \n\t\t\t// imageToolStripButton1\n\t\t\t// \n\t\t\tthis.imageToolStripButton1.CheckOnClick = true;\n\t\t\tthis.imageToolStripButton1.Image = global::Majorsilence.Reporting.RdlDesign.Properties.Resources.Image;\n\t\t\tresources.ApplyResources(this.imageToolStripButton1, \"imageToolStripButton1\");\n\t\t\tthis.imageToolStripButton1.Name = \"imageToolStripButton1\";\n\t\t\tthis.imageToolStripButton1.Tag = \"Image\";\n\t\t\tthis.imageToolStripButton1.Click += new System.EventHandler(this.ToolStripButtons_Clicked);\n\t\t\t// \n\t\t\t// matrixToolStripButton1\n\t\t\t// \n\t\t\tthis.matrixToolStripButton1.CheckOnClick = true;\n\t\t\tresources.ApplyResources(this.matrixToolStripButton1, \"matrixToolStripButton1\");\n\t\t\tthis.matrixToolStripButton1.Name = \"matrixToolStripButton1\";\n\t\t\tthis.matrixToolStripButton1.Tag = \"Matrix\";\n\t\t\tthis.matrixToolStripButton1.Click += new System.EventHandler(this.ToolStripButtons_Clicked);\n\t\t\t// \n\t\t\t// subreportToolStripButton1\n\t\t\t// \n\t\t\tthis.subreportToolStripButton1.CheckOnClick = true;\n\t\t\tresources.ApplyResources(this.subreportToolStripButton1, \"subreportToolStripButton1\");\n\t\t\tthis.subreportToolStripButton1.Name = \"subreportToolStripButton1\";\n\t\t\tthis.subreportToolStripButton1.Tag = \"Subreport\";\n\t\t\tthis.subreportToolStripButton1.Click += new System.EventHandler(this.ToolStripButtons_Clicked);\n\t\t\t// \n\t\t\t// rectangleToolStripButton1\n\t\t\t// \n\t\t\tthis.rectangleToolStripButton1.CheckOnClick = true;\n\t\t\tresources.ApplyResources(this.rectangleToolStripButton1, \"rectangleToolStripButton1\");\n\t\t\tthis.rectangleToolStripButton1.Name = \"rectangleToolStripButton1\";\n\t\t\tthis.rectangleToolStripButton1.Tag = \"Rectangle\";\n\t\t\tthis.rectangleToolStripButton1.Click += new System.EventHandler(this.ToolStripButtons_Clicked);\n\t\t\t// \n\t\t\t// lineToolStripButton1\n\t\t\t// \n\t\t\tthis.lineToolStripButton1.CheckOnClick = true;\n\t\t\tresources.ApplyResources(this.lineToolStripButton1, \"lineToolStripButton1\");\n\t\t\tthis.lineToolStripButton1.Name = \"lineToolStripButton1\";\n\t\t\tthis.lineToolStripButton1.Tag = \"Line\";\n\t\t\tthis.lineToolStripButton1.Click += new System.EventHandler(this.ToolStripButtons_Clicked);\n\t\t\t// \n\t\t\t// fxToolStripLabel1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.fxToolStripLabel1, \"fxToolStripLabel1\");\n\t\t\tthis.fxToolStripLabel1.Name = \"fxToolStripLabel1\";\n\t\t\tthis.fxToolStripLabel1.Tag = \"fx\";\n\t\t\t// \n\t\t\t// ctlEditTextbox\n\t\t\t// \n\t\t\tthis.ctlEditTextbox.Name = \"ctlEditTextbox\";\n\t\t\tresources.ApplyResources(this.ctlEditTextbox, \"ctlEditTextbox\");\n\t\t\tthis.ctlEditTextbox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ctlEditTextbox_KeyDown);\n\t\t\tthis.ctlEditTextbox.Validated += new System.EventHandler(this.ctlEditTextbox_Validated);\n\t\t\t// \n\t\t\t// toolStrip1\n\t\t\t// \n\t\t\tthis.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.boldToolStripButton1,\n            this.italiacToolStripButton1,\n            this.underlineToolStripButton2,\n            this.leftAlignToolStripButton2,\n            this.centerAlignToolStripButton2,\n            this.rightAlignToolStripButton3,\n            this.fontToolStripComboBox1,\n            this.fontSizeToolStripComboBox1,\n            this.printToolStripButton2,\n            this.zoomToolStripComboBox1,\n            this.selectToolStripButton2,\n            this.pdfToolStripButton2,\n            this.htmlToolStripButton2,\n            this.excelToolStripButton2,\n            this.XmlToolStripButton2,\n            this.MhtToolStripButton2,\n            this.CsvToolStripButton2,\n            this.RtfToolStripButton2,\n            this.TifToolStripButton2,\n            this.ButtonShowProperties});\n\t\t\tresources.ApplyResources(this.toolStrip1, \"toolStrip1\");\n\t\t\tthis.toolStrip1.Name = \"toolStrip1\";\n\t\t\t// \n\t\t\t// boldToolStripButton1\n\t\t\t// \n\t\t\tthis.boldToolStripButton1.CheckOnClick = true;\n\t\t\tthis.boldToolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.boldToolStripButton1, \"boldToolStripButton1\");\n\t\t\tthis.boldToolStripButton1.Image = global::Majorsilence.Reporting.RdlDesign.Properties.Resources.format_text_bold;\n\t\t\tthis.boldToolStripButton1.Name = \"boldToolStripButton1\";\n\t\t\tthis.boldToolStripButton1.Tag = \"bold\";\n\t\t\tthis.boldToolStripButton1.Click += new System.EventHandler(this.boldToolStripButton1_Click);\n\t\t\t// \n\t\t\t// italiacToolStripButton1\n\t\t\t// \n\t\t\tthis.italiacToolStripButton1.CheckOnClick = true;\n\t\t\tthis.italiacToolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.italiacToolStripButton1, \"italiacToolStripButton1\");\n\t\t\tthis.italiacToolStripButton1.Image = global::Majorsilence.Reporting.RdlDesign.Properties.Resources.format_text_italic;\n\t\t\tthis.italiacToolStripButton1.Name = \"italiacToolStripButton1\";\n\t\t\tthis.italiacToolStripButton1.Tag = \"italic\";\n\t\t\tthis.italiacToolStripButton1.Click += new System.EventHandler(this.italiacToolStripButton1_Click);\n\t\t\t// \n\t\t\t// underlineToolStripButton2\n\t\t\t// \n\t\t\tthis.underlineToolStripButton2.CheckOnClick = true;\n\t\t\tthis.underlineToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.underlineToolStripButton2, \"underlineToolStripButton2\");\n\t\t\tthis.underlineToolStripButton2.Image = global::Majorsilence.Reporting.RdlDesign.Properties.Resources.format_text_underline;\n\t\t\tthis.underlineToolStripButton2.Name = \"underlineToolStripButton2\";\n\t\t\tthis.underlineToolStripButton2.Tag = \"underline\";\n\t\t\tthis.underlineToolStripButton2.Click += new System.EventHandler(this.underlineToolStripButton2_Click);\n\t\t\t// \n\t\t\t// leftAlignToolStripButton2\n\t\t\t// \n\t\t\tthis.leftAlignToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tthis.leftAlignToolStripButton2.Image = global::Majorsilence.Reporting.RdlDesign.Properties.Resources.format_justify_left;\n\t\t\tresources.ApplyResources(this.leftAlignToolStripButton2, \"leftAlignToolStripButton2\");\n\t\t\tthis.leftAlignToolStripButton2.Name = \"leftAlignToolStripButton2\";\n\t\t\tthis.leftAlignToolStripButton2.Tag = \"Left Align\";\n\t\t\tthis.leftAlignToolStripButton2.Click += new System.EventHandler(this.leftAlignToolStripButton2_Click);\n\t\t\t// \n\t\t\t// centerAlignToolStripButton2\n\t\t\t// \n\t\t\tthis.centerAlignToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tthis.centerAlignToolStripButton2.Image = global::Majorsilence.Reporting.RdlDesign.Properties.Resources.format_justify_center;\n\t\t\tresources.ApplyResources(this.centerAlignToolStripButton2, \"centerAlignToolStripButton2\");\n\t\t\tthis.centerAlignToolStripButton2.Name = \"centerAlignToolStripButton2\";\n\t\t\tthis.centerAlignToolStripButton2.Tag = \"Center Align\";\n\t\t\tthis.centerAlignToolStripButton2.Click += new System.EventHandler(this.leftAlignToolStripButton2_Click);\n\t\t\t// \n\t\t\t// rightAlignToolStripButton3\n\t\t\t// \n\t\t\tthis.rightAlignToolStripButton3.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tthis.rightAlignToolStripButton3.Image = global::Majorsilence.Reporting.RdlDesign.Properties.Resources.format_justify_right;\n\t\t\tresources.ApplyResources(this.rightAlignToolStripButton3, \"rightAlignToolStripButton3\");\n\t\t\tthis.rightAlignToolStripButton3.Name = \"rightAlignToolStripButton3\";\n\t\t\tthis.rightAlignToolStripButton3.Tag = \"Right Align\";\n\t\t\tthis.rightAlignToolStripButton3.Click += new System.EventHandler(this.leftAlignToolStripButton2_Click);\n\t\t\t// \n\t\t\t// fontToolStripComboBox1\n\t\t\t// \n\t\t\tthis.fontToolStripComboBox1.Name = \"fontToolStripComboBox1\";\n\t\t\tresources.ApplyResources(this.fontToolStripComboBox1, \"fontToolStripComboBox1\");\n\t\t\tthis.fontToolStripComboBox1.Tag = \"Font\";\n\t\t\tthis.fontToolStripComboBox1.SelectedIndexChanged += new System.EventHandler(this.fontToolStripComboBox1_SelectedIndexChanged);\n\t\t\tthis.fontToolStripComboBox1.Validated += new System.EventHandler(this.fontToolStripComboBox1_Validated);\n\t\t\t// \n\t\t\t// fontSizeToolStripComboBox1\n\t\t\t// \n\t\t\tthis.fontSizeToolStripComboBox1.Name = \"fontSizeToolStripComboBox1\";\n\t\t\tresources.ApplyResources(this.fontSizeToolStripComboBox1, \"fontSizeToolStripComboBox1\");\n\t\t\tthis.fontSizeToolStripComboBox1.Tag = \"Font Size\";\n\t\t\tthis.fontSizeToolStripComboBox1.SelectedIndexChanged += new System.EventHandler(this.fontSizeToolStripComboBox1_SelectedIndexChanged);\n\t\t\tthis.fontSizeToolStripComboBox1.Validated += new System.EventHandler(this.fontSizeToolStripComboBox1_Validated);\n\t\t\t// \n\t\t\t// printToolStripButton2\n\t\t\t// \n\t\t\tthis.printToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tthis.printToolStripButton2.Image = global::Majorsilence.Reporting.RdlDesign.Properties.Resources.document_print;\n\t\t\tresources.ApplyResources(this.printToolStripButton2, \"printToolStripButton2\");\n\t\t\tthis.printToolStripButton2.Name = \"printToolStripButton2\";\n\t\t\tthis.printToolStripButton2.Tag = \"Print\";\n\t\t\tthis.printToolStripButton2.Click += new System.EventHandler(this.printToolStripButton2_Click);\n\t\t\t// \n\t\t\t// zoomToolStripComboBox1\n\t\t\t// \n\t\t\tthis.zoomToolStripComboBox1.Name = \"zoomToolStripComboBox1\";\n\t\t\tresources.ApplyResources(this.zoomToolStripComboBox1, \"zoomToolStripComboBox1\");\n\t\t\tthis.zoomToolStripComboBox1.Tag = \"Zoom\";\n\t\t\tthis.zoomToolStripComboBox1.SelectedIndexChanged += new System.EventHandler(this.zoomToolStripComboBox1_SelectedIndexChanged);\n\t\t\tthis.zoomToolStripComboBox1.Validated += new System.EventHandler(this.zoomToolStripComboBox1_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// selectToolStripButton2\n\t\t\t// \n\t\t\tthis.selectToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.selectToolStripButton2, \"selectToolStripButton2\");\n\t\t\tthis.selectToolStripButton2.Name = \"selectToolStripButton2\";\n\t\t\tthis.selectToolStripButton2.Tag = \"Select Tool\";\n\t\t\tthis.selectToolStripButton2.Click += new System.EventHandler(this.selectToolStripButton2_Click);\n\t\t\t// \n\t\t\t// pdfToolStripButton2\n\t\t\t// \n\t\t\tthis.pdfToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.pdfToolStripButton2, \"pdfToolStripButton2\");\n\t\t\tthis.pdfToolStripButton2.Name = \"pdfToolStripButton2\";\n\t\t\tthis.pdfToolStripButton2.Tag = \"PDF\";\n\t\t\tthis.pdfToolStripButton2.Click += new System.EventHandler(this.pdfToolStripButton2_Click);\n\t\t\t// \n\t\t\t// htmlToolStripButton2\n\t\t\t// \n\t\t\tthis.htmlToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.htmlToolStripButton2, \"htmlToolStripButton2\");\n\t\t\tthis.htmlToolStripButton2.Name = \"htmlToolStripButton2\";\n\t\t\tthis.htmlToolStripButton2.Tag = \"HTML\";\n\t\t\tthis.htmlToolStripButton2.Click += new System.EventHandler(this.htmlToolStripButton2_Click);\n\t\t\t// \n\t\t\t// excelToolStripButton2\n\t\t\t// \n\t\t\tthis.excelToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.excelToolStripButton2, \"excelToolStripButton2\");\n\t\t\tthis.excelToolStripButton2.Name = \"excelToolStripButton2\";\n\t\t\tthis.excelToolStripButton2.Tag = \"Excel\";\n\t\t\tthis.excelToolStripButton2.Click += new System.EventHandler(this.excelToolStripButton2_Click);\n\t\t\t// \n\t\t\t// XmlToolStripButton2\n\t\t\t// \n\t\t\tthis.XmlToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.XmlToolStripButton2, \"XmlToolStripButton2\");\n\t\t\tthis.XmlToolStripButton2.Name = \"XmlToolStripButton2\";\n\t\t\tthis.XmlToolStripButton2.Tag = \"XML\";\n\t\t\tthis.XmlToolStripButton2.Click += new System.EventHandler(this.XmlToolStripButton2_Click);\n\t\t\t// \n\t\t\t// MhtToolStripButton2\n\t\t\t// \n\t\t\tthis.MhtToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.MhtToolStripButton2, \"MhtToolStripButton2\");\n\t\t\tthis.MhtToolStripButton2.Name = \"MhtToolStripButton2\";\n\t\t\tthis.MhtToolStripButton2.Tag = \"MHT\";\n\t\t\tthis.MhtToolStripButton2.Click += new System.EventHandler(this.MhtToolStripButton2_Click);\n\t\t\t// \n\t\t\t// CsvToolStripButton2\n\t\t\t// \n\t\t\tthis.CsvToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.CsvToolStripButton2, \"CsvToolStripButton2\");\n\t\t\tthis.CsvToolStripButton2.Name = \"CsvToolStripButton2\";\n\t\t\tthis.CsvToolStripButton2.Tag = \"CSV\";\n\t\t\tthis.CsvToolStripButton2.Click += new System.EventHandler(this.CsvToolStripButton2_Click);\n\t\t\t// \n\t\t\t// RtfToolStripButton2\n\t\t\t// \n\t\t\tthis.RtfToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.RtfToolStripButton2, \"RtfToolStripButton2\");\n\t\t\tthis.RtfToolStripButton2.Name = \"RtfToolStripButton2\";\n\t\t\tthis.RtfToolStripButton2.Tag = \"RTF\";\n\t\t\tthis.RtfToolStripButton2.Click += new System.EventHandler(this.RtfToolStripButton2_Click);\n\t\t\t// \n\t\t\t// TifToolStripButton2\n\t\t\t// \n\t\t\tthis.TifToolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tresources.ApplyResources(this.TifToolStripButton2, \"TifToolStripButton2\");\n\t\t\tthis.TifToolStripButton2.Name = \"TifToolStripButton2\";\n\t\t\tthis.TifToolStripButton2.Tag = \"TIF\";\n\t\t\tthis.TifToolStripButton2.Click += new System.EventHandler(this.TifToolStripButton2_Click);\n\t\t\t// \n\t\t\t// ButtonShowProperties\n\t\t\t// \n\t\t\tresources.ApplyResources(this.ButtonShowProperties, \"ButtonShowProperties\");\n\t\t\tthis.ButtonShowProperties.Name = \"ButtonShowProperties\";\n\t\t\tthis.ButtonShowProperties.Click += new System.EventHandler(this.ButtonShowProperties_Click);\n\t\t\t// \n\t\t\t// panel1\n\t\t\t// \n\t\t\tthis.panel1.Controls.Add(this.label1);\n\t\t\tthis.panel1.Controls.Add(this.label2);\n\t\t\tthis.panel1.Controls.Add(this.foreColorPicker1);\n\t\t\tthis.panel1.Controls.Add(this.backColorPicker1);\n\t\t\tthis.panel1.Controls.Add(this.mainTC);\n\t\t\tresources.ApplyResources(this.panel1, \"panel1\");\n\t\t\tthis.panel1.Name = \"panel1\";\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// foreColorPicker1\n\t\t\t// \n\t\t\tthis.foreColorPicker1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;\n\t\t\tthis.foreColorPicker1.DropDownHeight = 1;\n\t\t\tthis.foreColorPicker1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tresources.ApplyResources(this.foreColorPicker1, \"foreColorPicker1\");\n\t\t\tthis.foreColorPicker1.FormattingEnabled = true;\n\t\t\tthis.foreColorPicker1.Name = \"foreColorPicker1\";\n\t\t\tthis.foreColorPicker1.Tag = \"Fore Color\";\n\t\t\tthis.foreColorPicker1.SelectedValueChanged += new System.EventHandler(this.foreColorPicker1_SelectedValueChanged);\n\t\t\tthis.foreColorPicker1.Validated += new System.EventHandler(this.foreColorPicker1_Validated);\n\t\t\t// \n\t\t\t// backColorPicker1\n\t\t\t// \n\t\t\tthis.backColorPicker1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;\n\t\t\tthis.backColorPicker1.DropDownHeight = 1;\n\t\t\tthis.backColorPicker1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tresources.ApplyResources(this.backColorPicker1, \"backColorPicker1\");\n\t\t\tthis.backColorPicker1.FormattingEnabled = true;\n\t\t\tthis.backColorPicker1.Name = \"backColorPicker1\";\n\t\t\tthis.backColorPicker1.Tag = \"Back Color\";\n\t\t\tthis.backColorPicker1.Click += new System.EventHandler(this.backColorPicker1_Click);\n\t\t\tthis.backColorPicker1.Validated += new System.EventHandler(this.backColorPicker1_Validated);\n\t\t\t// \n\t\t\t// mainTC\n\t\t\t// \n\t\t\tresources.ApplyResources(this.mainTC, \"mainTC\");\n\t\t\tthis.mainTC.Name = \"mainTC\";\n\t\t\tthis.mainTC.SelectedIndex = 0;\n\t\t\t// \n\t\t\t// RdlUserControl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;\n\t\t\tthis.Controls.Add(this.splitContainer1);\n\t\t\tthis.Controls.Add(this.panel1);\n\t\t\tthis.Controls.Add(this.toolStrip1);\n\t\t\tthis.Controls.Add(this.mainTB);\n\t\t\tthis.Name = \"RdlUserControl\";\n\t\t\tthis.splitContainer1.Panel1.ResumeLayout(false);\n\t\t\tthis.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n\t\t\tthis.splitContainer1.ResumeLayout(false);\n\t\t\tthis.mainTB.ResumeLayout(false);\n\t\t\tthis.mainTB.PerformLayout();\n\t\t\tthis.toolStrip1.ResumeLayout(false);\n\t\t\tthis.toolStrip1.PerformLayout();\n\t\t\tthis.panel1.ResumeLayout(false);\n\t\t\tthis.panel1.PerformLayout();\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n        }\n\n        #endregion\n\n        private RdlEditPreview rdlEditPreview1;\n        private System.Windows.Forms.ToolStrip mainTB;\n        private System.Windows.Forms.ToolStripButton newToolStripButton1;\n        private System.Windows.Forms.ToolStripButton openToolStripButton1;\n        private System.Windows.Forms.ToolStripButton saveToolStripButton1;\n        private System.Windows.Forms.ToolStripButton cutToolStripButton1;\n        private System.Windows.Forms.ToolStripButton copyToolStripButton1;\n        private System.Windows.Forms.ToolStripButton pasteToolStripButton1;\n        private System.Windows.Forms.ToolStripButton undoToolStripButton1;\n        private System.Windows.Forms.ToolStripButton textboxToolStripButton1;\n        private System.Windows.Forms.ToolStripButton chartToolStripButton1;\n        private System.Windows.Forms.ToolStripButton tableToolStripButton1;\n        private System.Windows.Forms.ToolStripButton listToolStripButton1;\n        private System.Windows.Forms.ToolStripButton imageToolStripButton1;\n        private System.Windows.Forms.ToolStripButton matrixToolStripButton1;\n        private System.Windows.Forms.ToolStripButton subreportToolStripButton1;\n        private System.Windows.Forms.ToolStripButton rectangleToolStripButton1;\n        private System.Windows.Forms.ToolStripButton lineToolStripButton1;\n        private System.Windows.Forms.ToolStripLabel fxToolStripLabel1;\n        private System.Windows.Forms.ToolStripTextBox ctlEditTextbox;\n        private System.Windows.Forms.ToolStrip toolStrip1;\n        private System.Windows.Forms.ToolStripButton boldToolStripButton1;\n        private System.Windows.Forms.ToolStripButton italiacToolStripButton1;\n        private System.Windows.Forms.ToolStripButton underlineToolStripButton2;\n        private System.Windows.Forms.ToolStripButton leftAlignToolStripButton2;\n        private System.Windows.Forms.ToolStripButton centerAlignToolStripButton2;\n        private System.Windows.Forms.ToolStripButton rightAlignToolStripButton3;\n        private System.Windows.Forms.ToolStripComboBox fontToolStripComboBox1;\n        private System.Windows.Forms.ToolStripComboBox fontSizeToolStripComboBox1;\n        private System.Windows.Forms.ToolStripButton printToolStripButton2;\n        private System.Windows.Forms.ToolStripComboBox zoomToolStripComboBox1;\n        private System.Windows.Forms.ToolStripButton selectToolStripButton2;\n        private System.Windows.Forms.ToolStripButton pdfToolStripButton2;\n        private System.Windows.Forms.ToolStripButton htmlToolStripButton2;\n        private System.Windows.Forms.ToolStripButton excelToolStripButton2;\n        private System.Windows.Forms.ToolStripButton XmlToolStripButton2;\n        private System.Windows.Forms.ToolStripButton MhtToolStripButton2;\n        private System.Windows.Forms.ToolStripButton CsvToolStripButton2;\n        private System.Windows.Forms.ToolStripButton RtfToolStripButton2;\n        private System.Windows.Forms.ToolStripButton TifToolStripButton2;\n        private System.Windows.Forms.Panel panel1;\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.Label label2;\n        private ColorPicker foreColorPicker1;\n        private ColorPicker backColorPicker1;\n        private System.Windows.Forms.TabControl mainTC;\n        private System.Windows.Forms.SplitContainer splitContainer1;\n        private PropertyCtl mainProperties;\n        private System.Windows.Forms.ToolStripButton ButtonShowProperties;\n\n    }\n}\n"
  },
  {
    "path": "RdlDesign/RdlUserControl.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing Majorsilence.Reporting.RdlDesign.Resources;\nusing Majorsilence.Reporting.RdlViewer;\nusing Majorsilence.Reporting.Rdl;\nusing System.IO;\nusing System.Globalization;\nusing System.Xml;\nusing System.Drawing.Printing;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    public partial class RdlUserControl : UserControl\n    {\n\n\n        private Rdl.NeedPassword _GetPassword;\n        private bool bGotPassword = false;\n        private string _DataSourceReferencePassword = null;\n        public delegate void RdlChangeHandler(object sender, EventArgs e);\n\n        private ToolStripButton ctlInsertCurrent = null;\n        private ToolStripMenuItem ctlMenuInsertCurrent = null;\n        bool bSuppressChange = false;\n        private bool _ShowProperties = true;\n\n        public event RdlDesign.RdlDesignerSavedFileEventHandler SavedFileEvent;\n\n        public RdlUserControl()\n        {\n            InitializeComponent();\n\n\n            _GetPassword = new Rdl.NeedPassword(this.GetPassword);\n\n\n            rdlEditPreview1.OnSelectionChanged += SelectionChanged;\n            rdlEditPreview1.OnReportItemInserted += ReportItemInserted;\n            rdlEditPreview1.OnOpenSubreport += OpenSubReportEvent;\n            rdlEditPreview1.OnSelectionMoved += SelectionMoved;\n            rdlEditPreview1.OnDesignTabChanged += DesignTabChanged;\n            mainProperties.HidePropertiesClicked += delegate(object sender, EventArgs e)\n            {\n                ShowProperties(!_ShowProperties);\n            };\n        }\n\n\n        /// <summary>\n        /// Open a file programmatically when the designer is already open.\n        /// </summary>\n        /// <param name=\"filePath\">The full path to the rdl report.</param>\n        /// <example>\n        /// An example of opening a designer form and loading one report.\n        /// <code lang=\"cs\">\n        /// Majorsilence.Reporting.RdlDesign.RdlDesigner designer = new Majorsilence.Reporting.RdlDesign.RdlDesigner(\"myFyiChannel\");\n        /// designer.Show();\n        /// designer.OpenFile(@\"Path\\to\\a\\report.rdl\");\n        /// </code>\n        /// <code lang=\"vb\">\n        /// Dim designer As New Majorsilence.Reporting.RdlDesign.RdlDesigner(\"myFyiChannel\")\n        /// designer.Show() \n        /// designer.OpenFile(\"Path\\to\\a\\report.rdl\")\n        /// </code>\n        /// </example>\n        /// <remarks>\n        /// You can open as many reports as you want by calling this function. The only limitation is that\n        /// the designer must already be running by having called the Show() function first.\n        /// </remarks>\n        public void OpenFile(string filePath)\n        {\n            this.OpenFile(new Uri(filePath));\n        }\n        public void OpenFile(Uri filePath)\n        {\n            OpenReport(filePath, null);\n        }\n\n        public Majorsilence.Reporting.RdlViewer.RdlViewer Viewer\n        {\n            get { return rdlEditPreview1.Viewer; }\n        }\n\n        internal void ResetPassword()\n        {\n            bGotPassword = false;\n            _DataSourceReferencePassword = null;\n        }\n\n        Uri _SourceFile;\n        /// <summary>\n        /// The RDL file that should be displayed.\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public Uri SourceFile\n        {\n            get { return _SourceFile; }\n            set\n            {\n                _SourceFile = value;\n                string rdl = GetRdlSource();\n                this.rdlEditPreview1.SetRdlText(rdl == null ? \"\" : rdl);\n            }\n        }\n\n        private string GetRdlSource()\n        {\n            StreamReader fs = null;\n            string prog = null;\n            try\n            {\n   \n\n                fs = new StreamReader(_SourceFile.LocalPath);\n                prog = fs.ReadToEnd();\n            }\n            catch\n            { }\n            finally\n            {\n                if (fs != null)\n                    fs.Close();\n            }\n\n            return prog;\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string SourceRdl\n        {\n            get { return this.rdlEditPreview1.GetRdlText(); }\n            set { this.rdlEditPreview1.SetRdlText(value); }\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string CurrentInsert\n        {\n            get { return rdlEditPreview1.CurrentInsert; }\n            set\n            {\n                rdlEditPreview1.CurrentInsert = value;\n            }\n        }\n\n        internal string GetPassword()\n        {\n            if (bGotPassword)\n            {\n                return _DataSourceReferencePassword;\n            }\n\n            using (DataSourcePassword dlg = new DataSourcePassword())\n            {\n                DialogResult rc = dlg.ShowDialog();\n                bGotPassword = true;\n                if (rc == DialogResult.OK)\n                {\n                    _DataSourceReferencePassword = dlg.PassPhrase;\n                }\n\n                return _DataSourceReferencePassword;\n            }\n        }\n\n        internal Rdl.NeedPassword SharedDatasetPassword\n        {\n            get { return _GetPassword; }\n        }\n\n        private void newToolStripButton1_Click(object sender, EventArgs e)\n        {\n            using (DialogDatabase dlgDB = new DialogDatabase(this))\n            {\n                dlgDB.StartPosition = FormStartPosition.CenterParent;\n                dlgDB.FormBorderStyle = FormBorderStyle.SizableToolWindow;\n\n                // show modally\n                dlgDB.ShowDialog();\n                if (dlgDB.DialogResult == DialogResult.Cancel)\n                    return;\n                string rdl = dlgDB.ResultReport;\n\n                // Create the MDI child using the RDL syntax the wizard generates\n                LoadReport(null, rdl, false);\n         \n\n            }\n        }\n\n        public bool FileSave()\n        {\n            Uri file = SourceFile;\n            if (file == null || file.LocalPath == \"\")\t\t// if no file name then do SaveAs\n            {\n                return FileSaveAs();\n            }\n            string rdl = GetRdlText();\n\n            return FileSave(file, rdl);\n        }\n\n\n        private bool FileSave(Uri file, string rdl)\n        {\n            StreamWriter writer = null;\n            bool bOK = true;\n            try\n            {\n                writer = new StreamWriter(file.LocalPath);\n                writer.Write(rdl);\n                //\t\t\t\teditRDL.ClearUndo();\n                //\t\t\t\teditRDL.Modified = false;\n                //\t\t\t\tSetTitle();\n                //\t\t\t\tstatusBar.Text = \"Saved \" + curFileName;\n            }\n            catch (Exception ae)\n            {\n                bOK = false;\n                MessageBox.Show(ae.Message + \"\\r\\n\" + ae.StackTrace);\n                //\t\t\t\tstatusBar.Text = \"Save of file '\" + curFileName + \"' failed\";\n            }\n            finally\n            {\n                writer.Close();\n            }\n            if (bOK)\n                this.Modified = false;\n            return bOK;\n        }\n\n        public string GetRdlText()\n        {\n            return this.rdlEditPreview1.GetRdlText();\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public bool Modified\n        {\n            get { return rdlEditPreview1.Modified; }\n            set\n            {\n                rdlEditPreview1.Modified = value;\n                SetTitle();\n            }\n        }\n\n        private void SetTitle()\n        {\n            string title = this.Text;\n            if (title.Length < 1)\n                return;\n            char m = title[title.Length - 1];\n            if (this.Modified)\n            {\n                if (m != '*')\n                    title = title + \"*\";\n            }\n            else if (m == '*')\n                title = title.Substring(0, title.Length - 1);\n\n            if (title != this.Text)\n                this.Text = title;\n            return;\n        }\n\n\n        // Create an MDI child.   Only creates it if not already open.\n        private void LoadReport(Uri file, string rdl, bool bMenuUpdate)\n        {\n\n     \n            try\n            {\n\n\n\n                Viewer.GetDataSourceReferencePassword = _GetPassword;\n                if (file != null)\n                {\n                    Viewer.Folder = System.IO.Path.GetDirectoryName(file.LocalPath);\n                    SourceFile = file;\n                    Text = System.IO.Path.GetFileName(file.LocalPath);\n                    Viewer.Folder = System.IO.Path.GetDirectoryName(file.LocalPath);\n                    Viewer.ReportName = System.IO.Path.GetFileNameWithoutExtension(file.LocalPath);\n                }\n                else\n                {\n                    SourceRdl = rdl;\n                    Viewer.ReportName = Text = Strings.RdlDesigner_CreateMDIChild_Untitled;\n                }\n\n                ShowEditLines(true);\n                ShowReportItemOutline = false;\n                ShowPreviewWaitDialog(true);\n        \n   \n       \n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show(ex.Message);\n            }\n\n       \n \n        }\n\n        public void ShowEditLines(bool bShow)\n        {\n            rdlEditPreview1.ShowEditLines(bShow);\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        internal bool ShowReportItemOutline\n        {\n            get { return rdlEditPreview1.ShowReportItemOutline; }\n            set { rdlEditPreview1.ShowReportItemOutline = value; }\n        }\n\n        internal void ShowPreviewWaitDialog(bool bShow)\n        {\n            rdlEditPreview1.ShowPreviewWaitDialog(bShow);\n        }\n\n\n        /// <summary>\n        /// Zoom \n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public float Zoom\n        {\n            get { return rdlEditPreview1.Zoom; }\n            set { rdlEditPreview1.Zoom = value; }\n        }\n\n        /// <summary>\n        /// ZoomMode \n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public ZoomEnum ZoomMode\n        {\n            get { return rdlEditPreview1.ZoomMode; }\n            set { rdlEditPreview1.ZoomMode = value; }\n        }\n\n        private void ReportItemInserted(object sender, System.EventArgs e)\n        {\n\n            // turn off the current selection after an item is inserted\n            if (ctlInsertCurrent != null)\n            {\n                ctlInsertCurrent.Checked = false;\n                CurrentInsert = null;\n                ctlInsertCurrent = null;\n            }\n            if (ctlMenuInsertCurrent != null)\n            {\n                ctlMenuInsertCurrent.Checked = false;\n                CurrentInsert = null;\n                ctlMenuInsertCurrent = null;\n            }\n        }\n\n        private void OpenSubReportEvent(object sender, SubReportEventArgs e)\n        {\n  \n            Uri file = new Uri(this.Viewer.Folder);\n            if (e.SubReportName[0] == Path.DirectorySeparatorChar)\n            {\n                file = new Uri(file.LocalPath + e.SubReportName);\n            }\n            else\n            {\n                file = new Uri(file.LocalPath + Path.DirectorySeparatorChar + e.SubReportName + \".rdl\");\n            }\n\n            LoadReport(file, null, true);\n        }\n\n        private void SelectionMoved(object sender, System.EventArgs e)\n        {\n            SetStatusNameAndPosition();\n        }\n\n        private void SelectionChanged(object sender, System.EventArgs e)\n        {\n            // handle edit tab first\n            if (rdlEditPreview1.DesignTab == DesignTabs.Edit)\n            {\n                SetStatusNameAndPosition();\n                return;\n            }\n\n            bSuppressChange = true;\t\t\t// don't process changes in status bar\n\n            SetStatusNameAndPosition();\n            this.EnableEditTextBox();\t// handling enabling/disabling of textbox\n\n            StyleInfo si = rdlEditPreview1.SelectedStyle;\n            if (si == null)\n                return;\n\n            if (centerAlignToolStripButton2 != null)\n                centerAlignToolStripButton2.Checked = si.TextAlign == TextAlignEnum.Center ? true : false;\n            if (leftAlignToolStripButton2 != null)\n                leftAlignToolStripButton2.Checked = si.TextAlign == TextAlignEnum.Left ? true : false;\n            if (rightAlignToolStripButton3 != null)\n                rightAlignToolStripButton3.Checked = si.TextAlign == TextAlignEnum.Right ? true : false;\n            if (boldToolStripButton1 != null)\n                boldToolStripButton1.Checked = si.IsFontBold() ? true : false;\n            if (italiacToolStripButton1 != null)\n                italiacToolStripButton1.Checked = si.FontStyle == FontStyleEnum.Italic ? true : false;\n            if (underlineToolStripButton2 != null)\n                underlineToolStripButton2.Checked = si.TextDecoration == TextDecorationEnum.Underline ? true : false;\n            if (fontToolStripComboBox1 != null)\n                fontToolStripComboBox1.Text = si.FontFamily;\n            if (fontSizeToolStripComboBox1 != null)\n            {\n                string rs = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.#}\", si.FontSize);\n                fontSizeToolStripComboBox1.Text = rs;\n            }\n            if (foreColorPicker1 != null)\n            {\n                foreColorPicker1.Text = si.Color.IsEmpty ? si.ColorText : ColorTranslator.ToHtml(si.Color);\n            }\n            if (backColorPicker1 != null)\n            {\n                backColorPicker1.Text = si.BackgroundColor.IsEmpty ? si.BackgroundColorText : ColorTranslator.ToHtml(si.BackgroundColor);\n            }\n\n            bSuppressChange = false;\n        }\n\n        private void DesignTabChanged(object sender, System.EventArgs e)\n        {\n            bool bEnableEdit = false;\n            bool bEnableDesign = false;\n            bool bEnablePreview = false;\n            bool bShowProp = _ShowProperties;\n            switch (rdlEditPreview1.DesignTab)\n            {\n                case DesignTabs.Edit:\n                    bEnableEdit = true;\n                    break;\n                case DesignTabs.Design:\n                    bEnableDesign = true;\n                    break;\n                case DesignTabs.Preview:\n                    bEnablePreview = true;\n                    break;\n            }\n \n            ShowProperties(bShowProp);\n            if (leftAlignToolStripButton2 != null)\n            {\n                leftAlignToolStripButton2.Enabled = bEnableDesign;\n            }\n            if (centerAlignToolStripButton2 != null)\n            {\n                centerAlignToolStripButton2.Enabled = bEnableDesign;\n            }\n            if (rightAlignToolStripButton3 != null)\n            {\n                rightAlignToolStripButton3.Enabled = bEnableDesign;\n            }\n            if (boldToolStripButton1 != null)\n            {\n                boldToolStripButton1.Enabled = bEnableDesign;\n            }\n            if (italiacToolStripButton1 != null)\n            {\n                italiacToolStripButton1.Enabled = bEnableDesign;\n            }\n            if (underlineToolStripButton2 != null)\n            {\n                underlineToolStripButton2.Enabled = bEnableDesign;\n            }\n            if (fontToolStripComboBox1 != null)\n            {\n                fontToolStripComboBox1.Enabled = bEnableDesign;\n            }\n            if (fontSizeToolStripComboBox1 != null)\n            {\n                fontSizeToolStripComboBox1.Enabled = bEnableDesign;\n            }\n            if (foreColorPicker1 != null)\n            {\n                foreColorPicker1.Enabled = bEnableDesign;\n            }\n            if (backColorPicker1 != null)\n            {\n                backColorPicker1.Enabled = bEnableDesign;\n            }\n            if (cutToolStripButton1 != null)\n            {\n                cutToolStripButton1.Enabled = bEnableDesign | bEnableEdit;\n            }\n            if (copyToolStripButton1 != null)\n            {\n                copyToolStripButton1.Enabled = bEnableDesign | bEnableEdit | bEnablePreview;\n            }\n            if (undoToolStripButton1 != null)\n            {\n                undoToolStripButton1.Enabled = bEnableDesign | bEnableEdit;\n            }\n            if (pasteToolStripButton1 != null)\n            {\n                pasteToolStripButton1.Enabled = bEnableDesign | bEnableEdit;\n            }\n            if (printToolStripButton2 != null)\n            {\n                printToolStripButton2.Enabled = bEnablePreview;\n            }\n            if (textboxToolStripButton1 != null)\n            {\n                textboxToolStripButton1.Enabled = bEnableDesign;\n            }\n            if (selectToolStripButton2 != null)\n            {\n                selectToolStripButton2.Enabled = bEnablePreview;\n                selectToolStripButton2.Checked = SelectionTool;\n            }\n            if (chartToolStripButton1 != null)\n            {\n                chartToolStripButton1.Enabled = bEnableDesign;\n            }\n            if (rectangleToolStripButton1 != null)\n            {\n                rectangleToolStripButton1.Enabled = bEnableDesign;\n            }\n            if (tableToolStripButton1 != null)\n            {\n                tableToolStripButton1.Enabled = bEnableDesign;\n            }\n            if (matrixToolStripButton1 != null)\n            {\n                matrixToolStripButton1.Enabled = bEnableDesign;\n            }\n            if (listToolStripButton1 != null)\n            {\n                listToolStripButton1.Enabled = bEnableDesign;\n            }\n            if (lineToolStripButton1 != null)\n            {\n                lineToolStripButton1.Enabled = bEnableDesign;\n            }\n            if (imageToolStripButton1 != null)\n            {\n                imageToolStripButton1.Enabled = bEnableDesign;\n            }\n            if (subreportToolStripButton1 != null)\n            {\n                subreportToolStripButton1.Enabled = bEnableDesign;\n            }\n            if (pdfToolStripButton2 != null)\n            {\n                pdfToolStripButton2.Enabled = bEnablePreview;\n            }\n            if (TifToolStripButton2 != null)\n            {\n                TifToolStripButton2.Enabled = bEnablePreview;\n            }\n            if (XmlToolStripButton2 != null)\n            {\n                XmlToolStripButton2.Enabled = bEnablePreview;\n            }\n            if (htmlToolStripButton2 != null)\n            {\n                htmlToolStripButton2.Enabled = bEnablePreview;\n            }\n            if (MhtToolStripButton2 != null)\n            {\n                MhtToolStripButton2.Enabled = bEnablePreview;\n            }\n            if (CsvToolStripButton2 != null)\n            {\n                CsvToolStripButton2.Enabled = bEnablePreview;\n            }\n            if (excelToolStripButton2 != null)\n            {\n                excelToolStripButton2.Enabled = bEnablePreview;\n            }\n            if (RtfToolStripButton2 != null)\n            {\n                RtfToolStripButton2.Enabled = bEnablePreview;\n            }\n            \n            this.EnableEditTextBox();\n\n            if (zoomToolStripComboBox1 != null)\n            {\n                zoomToolStripComboBox1.Enabled = bEnablePreview;\n                string zText = \"Actual Size\";\n\n                switch (ZoomMode)\n                {\n                    case ZoomEnum.FitWidth:\n                        zText = \"Fit Width\";\n                        break;\n                    case ZoomEnum.FitPage:\n                        zText = \"Fit Page\";\n                        break;\n                    case ZoomEnum.UseZoom:\n                        if (Zoom == 1)\n                            zText = \"Actual Size\";\n                        else\n                            zText = string.Format(\"{0:0}\", Zoom * 100f);\n                        break;\n                }\n                zoomToolStripComboBox1.Text = zText;\n                \n            }\n            // when no active sheet\n            if (this.saveToolStripButton1 != null)\n                this.saveToolStripButton1.Enabled = true;\n\n            // Update the status and position information\n            SetStatusNameAndPosition();\n        }\n\n        private void EnableEditTextBox()\n        {\n\n            bool bEnable = false;\n\n            if (this.ctlEditTextbox == null ||\n              rdlEditPreview1.DesignTab != DesignTabs.Design || rdlEditPreview1.DrawCtl.SelectedCount != 1)\n            { }\n            else\n            {\n                XmlNode tn = rdlEditPreview1.DrawCtl.SelectedList[0] as XmlNode;\n                if (tn != null && tn.Name == \"Textbox\")\n                {\n                    ctlEditTextbox.Text = rdlEditPreview1.DrawCtl.GetElementValue(tn, \"Value\", \"\");\n                    bEnable = true;\n                }\n            }\n            if (ctlEditTextbox != null)\n            {\n                if (!bEnable)\n                    ctlEditTextbox.Text = \"\";\n                ctlEditTextbox.Enabled = bEnable;\n                fxToolStripLabel1.Enabled = bEnable;\n            }\n        }\n\n        private void SetStatusNameAndPosition()\n        {\n\n            SetProperties();\n\n\n            return;\n        }\n\n\n        private void SetProperties()\n        {\n            if (!_ShowProperties || rdlEditPreview1.DesignTab != DesignTabs.Design)\n                mainProperties.ResetSelection(null, null);\n            else\n                mainProperties.ResetSelection(rdlEditPreview1.DrawCtl, rdlEditPreview1.DesignCtl);\n        }\n\n        internal void ShowProperties(bool bShow)\n        {\n            _ShowProperties = bShow;\n            if (!_ShowProperties || rdlEditPreview1.DesignTab != DesignTabs.Design)\n                mainProperties.ResetSelection(null, null);\n            else\n                mainProperties.ResetSelection(rdlEditPreview1.DrawCtl, rdlEditPreview1.DesignCtl);\n\n            mainProperties.Visible = splitContainer1.Panel2.Visible = _ShowProperties;\n            if (splitContainer1.Panel2.Visible == false)\n            {\n                splitContainer1.Panel2Collapsed = true;\n                splitContainer1.Panel2.Hide();\n                ButtonShowProperties.Visible = true;\n            }\n            else \n            {\n                ButtonShowProperties.Visible = false;\n                splitContainer1.Panel2Collapsed = false;\n                splitContainer1.Panel2.Show();\n            }\n\n        }\n\n        public void ApplyStyleToSelected(string name, string v)\n        {\n\n            rdlEditPreview1.ApplyStyleToSelected(name, v);\n        }\n\n        /// <summary>\n        /// Turns the Selection Tool on in report preview\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public bool SelectionTool\n        {\n            get\n            {\n                return rdlEditPreview1.SelectionTool;\n            }\n            set\n            {\n                rdlEditPreview1.SelectionTool = value;\n            }\n        }\n\n        public async Task<bool> ExportAsync(Rdl.OutputPresentationType type)\n        {\n            SaveFileDialog sfd = new SaveFileDialog();\n\t\t\tsfd.Title = string.Format(Strings.MDIChild_Export_ExportTitleFormat, type.ToString().ToUpper());\n\t\t\tswitch (type)\n            {\n\t\t\t\tcase OutputPresentationType.CSV:\n\t\t\t\t\tsfd.Filter = Strings.MDIChild_Export_CSV;\n\t\t\t\t\tbreak;\n\t\t\t\tcase OutputPresentationType.XML:\n\t\t\t\t\tsfd.Filter = Strings.MDIChild_Export_XML;\n\t\t\t\t\tbreak;\n\t\t\t\tcase OutputPresentationType.PDF:\n\t\t\t\tcase OutputPresentationType.PDFOldStyle:\n\t\t\t\t\tsfd.Filter = Strings.MDIChild_Export_PDF;\n\t\t\t\t\tbreak;\n\t\t\t\tcase OutputPresentationType.TIF:\n\t\t\t\t\tsfd.Filter = Strings.MDIChild_Export_TIF;\n\t\t\t\t\tbreak;\n\t\t\t\tcase OutputPresentationType.RTF:\n\t\t\t\t\tsfd.Filter = Strings.MDIChild_Export_RTF;\n\t\t\t\t\tbreak;\n\t\t\t\tcase OutputPresentationType.Word:\n\t\t\t\t\tsfd.Filter = Strings.MDIChild_Export_DOC;\n\t\t\t\t\tbreak;\n\t\t\t\tcase OutputPresentationType.ExcelTableOnly:\n\t\t\t\t\tsfd.Filter = Strings.MDIChild_Export_Excel;\n\t\t\t\t\tbreak;\n\t\t\t\tcase OutputPresentationType.HTML:\n\t\t\t\t\tsfd.Filter = Strings.MDIChild_Export_Web_Page;\n\t\t\t\t\tbreak;\n\t\t\t\tcase OutputPresentationType.MHTML:\n\t\t\t\t\tsfd.Filter = Strings.MDIChild_Export_MHT;\n\t\t\t\t\tbreak;\n                default:\n                    throw new Exception(Strings.MDIChild_Error_AllowedExportTypes);\n            }\n            sfd.FilterIndex = 1;\n\n            if (SourceFile != null)\n            {\n                sfd.FileName = Path.GetFileNameWithoutExtension(SourceFile.LocalPath) + \".\" + type.ToString().ToLower();\n            }\n            else\n            {\n                sfd.FileName = \"*.\" + type.ToString().ToLower();\n            }\n\n            try\n            {\n                if (sfd.ShowDialog(this) != DialogResult.OK)\n                    return false;\n\n                // save the report in the requested rendered format \n                bool rc = true;\n                // tif can be either in color or black and white; ask user what they want\n                if (type == OutputPresentationType.TIF)\n                {\n                    DialogResult dr = MessageBox.Show(this, Strings.MDIChild_ShowF_WantDisplayColorsInTIF, Strings.MDIChild_ShowF_Export, MessageBoxButtons.YesNoCancel);\n                    if (dr == DialogResult.No)\n                        type = OutputPresentationType.TIFBW;\n                    else if (dr == DialogResult.Cancel)\n                        return false;\n                }\n                try { await SaveAsAsync(sfd.FileName, type); }\n                catch (Exception ex)\n                {\n                    MessageBox.Show(this,\n                        ex.Message, Strings.MDIChild_ShowG_ExportError,\n                        MessageBoxButtons.OK, MessageBoxIcon.Error);\n                    rc = false;\n                }\n                return rc;\n            }\n            finally\n            {\n                sfd.Dispose();\n            }\n        }\n\n        public async Task SaveAsAsync(string filename, OutputPresentationType type)\n        {\n            await rdlEditPreview1.SaveAs(filename, type);\n        }\n\n        public int PageCount\n        {\n            get { return rdlEditPreview1.PageCount; }\n        }\n\n\n        /// <summary>\n        /// Page height of the report.\n        /// </summary>\n        public float PageHeight\n        {\n            get { return rdlEditPreview1.PageHeight; }\n        }\n\n\n        /// <summary>\n        /// Page width of the report.\n        /// </summary>\n        public float PageWidth\n        {\n            get { return rdlEditPreview1.PageWidth; }\n        }\n\n        /// <summary>\n        /// Current page in view on report\n        /// </summary>\n        public int PageCurrent\n        {\n            get { return rdlEditPreview1.PageCurrent; }\n        }\n\n        /// <summary>\n        /// Print the report.  \n        /// </summary>\n        public void Print(PrintDocument pd)\n        {\n            rdlEditPreview1.Print(pd);\n        }\n\n\n        private void openToolStripButton1_Click(object sender, EventArgs e)\n        {\n            OpenFileDialog ofd = new OpenFileDialog();\n\n            try\n            {\n                ofd.InitialDirectory = Path.GetDirectoryName(SourceFile.LocalPath);\n            }\n            catch\n            {\n            }\n\n            ofd.DefaultExt = \"rdl\";\n            ofd.Filter = Strings.RdlUserControl_openToolStripButton1_Click_ReportFilesFilter;\n            ofd.FilterIndex = 1;\n            ofd.CheckFileExists = true;\n            ofd.Multiselect = true;\n            try\n            {\n                if (ofd.ShowDialog(this) == DialogResult.OK)\n                {\n   \n                    OpenReport(new Uri(ofd.FileName), null);\n\n                }\n            }\n            finally\n            {\n                ofd.Dispose();\n            }\n        }\n\n        private void OpenReport(Uri file, string rdl)\n        {\n\n            try\n            {\n              \n  \n                Viewer.GetDataSourceReferencePassword = _GetPassword;\n                if (file != null)\n                {\n                    Viewer.Folder = Path.GetDirectoryName(file.LocalPath);\n                    SourceFile = file;\n                    Text = Path.GetFileName(file.LocalPath);\n                    Viewer.Folder = Path.GetDirectoryName(file.LocalPath);\n                    Viewer.ReportName = Path.GetFileNameWithoutExtension(file.LocalPath);\n                }\n                else\n                {\n                    SourceRdl = rdl;\n                    Viewer.ReportName = Text = \"Untitled\";\n                }\n                ShowEditLines(true);\n                ShowReportItemOutline = this.ShowReportItemOutline;\n                ShowPreviewWaitDialog(false);\n           \n                \n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show(ex.Message);\n            }\n\n\n        }\n\n        public bool FileSaveAs()\n        {\n            SaveFileDialog sfd = new SaveFileDialog();\n\t\t\tsfd.Filter = Strings.MDIChild_FileSaveAs_RDLFilter;\n            sfd.FilterIndex = 1;\n\n            Uri file = SourceFile;\n\n            sfd.FileName = file == null ? \"*.rdl\" : file.LocalPath;\n            try\n            {\n                if (sfd.ShowDialog(this) != DialogResult.OK)\n                    return false;\n\n                // User wants to save!\n                string rdl = GetRdlText();\n                if (FileSave(new Uri(sfd.FileName), rdl))\n                {\t// Save was successful\n                    Text = sfd.FileName;\n                    _SourceFile = new Uri(sfd.FileName);\n                    return true;\n                }\n            }\n            finally\n            {\n                sfd.Dispose();\n            }\n            return false;\n        }\n\n        private void saveToolStripButton1_Click(object sender, EventArgs e)\n        {\n\n            if (!FileSave())\n                return;\n\n            if (this.SavedFileEvent != null)\n            {\n                this.SavedFileEvent(this, new RdlDesignerSavedFileEvent(SourceFile));\n            }\n\n            if (rdlEditPreview1.CanEdit)\n            {\n                rdlEditPreview1.ClearUndo();\n            }\n\n\n            return;\n        }\n\n        private void cutToolStripButton1_Click(object sender, EventArgs e)\n        {\n            if (this.ctlEditTextbox != null && ctlEditTextbox.Focused)\n            {\n                ctlEditTextbox.Cut();\n                return;\n            }\n\n            RdlEditPreview e1 = rdlEditPreview1;\n            if (e1 == null)\n                return;\n\n            if (e1.SelectionLength > 0)\n                e1.Cut();\n        }\n\n\n        private void copyToolStripButton1_Click(object sender, EventArgs e)\n        {\n            if (this.ctlEditTextbox != null && ctlEditTextbox.Focused)\n            {\n                ctlEditTextbox.Copy();\n                return;\n            }\n\n            RdlEditPreview e1 = rdlEditPreview1;\n            if (e1 == null)\n                return;\n\n            if (e1.SelectionLength > 0)\n                e1.Copy();\n        }\n\n        private void pasteToolStripButton1_Click(object sender, EventArgs e)\n        {\n\n        }\n\n        private void undoToolStripButton1_Click(object sender, EventArgs e)\n        {\n\n        }\n\n        \n        private void lineToolStripButton1_Click(object sender, EventArgs e)\n        {\n\n        }\n\n        private void ctlEditTextbox_Validated(object sender, EventArgs e)\n        {\n\n        }\n\n        private void ctlEditTextbox_KeyDown(object sender, KeyEventArgs e)\n        {\n\n        }\n\n        private void mainTB_ItemClicked(object sender, ToolStripItemClickedEventArgs e)\n        {\n\n        }\n\n\n        private void ToolStripButtons_Clicked(object sender, EventArgs e)\n        {\n            if (ctlInsertCurrent != null)\n                ctlInsertCurrent.Checked = false;\n\n            ToolStripButton ctl = (ToolStripButton)sender;\n            ctlInsertCurrent = ctl.Checked ? ctl : null;\n\n            CurrentInsert = ctlInsertCurrent == null ? null : (string)ctlInsertCurrent.Tag;\n        }\n\n        private void boldToolStripButton1_Click(object sender, EventArgs e)\n        {\n\n            ApplyStyleToSelected(\"FontWeight\", boldToolStripButton1.Checked ? \"Bold\" : \"Normal\");\n            SetProperties();\n\n        }\n\n        private void italiacToolStripButton1_Click(object sender, EventArgs e)\n        {\n\n            ApplyStyleToSelected(\"FontStyle\", italiacToolStripButton1.Checked ? \"Italic\" : \"Normal\");\n            SetProperties();\n\n        }\n\n        private void underlineToolStripButton2_Click(object sender, EventArgs e)\n        {\n\n            ApplyStyleToSelected(\"TextDecoration\", underlineToolStripButton2.Checked ? \"Underline\" : \"None\");\n            SetProperties();\n        }\n\n        private void leftAlignToolStripButton2_Click(object sender, EventArgs e)\n        {\n            TextAlignEnum ta = TextAlignEnum.General;\n\n            if (sender == leftAlignToolStripButton2)\n            {\n                ta = TextAlignEnum.Left;\n                leftAlignToolStripButton2.Checked = true;\n                rightAlignToolStripButton3.Checked = centerAlignToolStripButton2.Checked = false;\n            }\n            else if (sender == rightAlignToolStripButton3)\n            {\n                ta = TextAlignEnum.Right;\n                rightAlignToolStripButton3.Checked = true;\n                leftAlignToolStripButton2.Checked = centerAlignToolStripButton2.Checked = false;\n            }\n            else if (sender == centerAlignToolStripButton2)\n            {\n                ta = TextAlignEnum.Center;\n                centerAlignToolStripButton2.Checked = true;\n                rightAlignToolStripButton3.Checked = leftAlignToolStripButton2.Checked = false;\n            }\n\n            ApplyStyleToSelected(\"TextAlign\", ta.ToString());\n            SetProperties();\n\n        }\n\n        private void fontToolStripComboBox1_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            if (!bSuppressChange)\n            {\n                ApplyStyleToSelected(\"FontFamily\", fontToolStripComboBox1.Text);\n                SetProperties();\n            }\n        }\n\n        private void fontToolStripComboBox1_Validated(object sender, EventArgs e)\n        {\n            if (!bSuppressChange)\n            {\n                ApplyStyleToSelected(\"FontFamily\", fontToolStripComboBox1.Text);\n                SetProperties();\n            }\n        }\n\n        private void fontSizeToolStripComboBox1_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            if (!bSuppressChange)\n            {\n                ApplyStyleToSelected(\"FontSize\", fontSizeToolStripComboBox1.Text + \"pt\");\n                SetProperties();\n            }\n        }\n\n        private void fontSizeToolStripComboBox1_Validated(object sender, EventArgs e)\n        {\n            if (!bSuppressChange)\n            {\n                ApplyStyleToSelected(\"FontSize\", fontSizeToolStripComboBox1.Text + \"pt\");\n                SetProperties();\n            }\n        }\n\n\n        private bool isPrinting = false;\n        private void printToolStripButton2_Click(object sender, EventArgs e)\n        {\n\n            if (isPrinting == true)\t\t\t// already printing\n            {\n                MessageBox.Show(Strings.RdlUserControl_Show_PrintOneFile, Strings.RdlUserControl_Show_RDLDesign);\n                return;\n            }\n\n            isPrinting = true;\n\n            PrintDocument pd = new PrintDocument();\n            pd.DocumentName = SourceFile.LocalPath;\n            pd.PrinterSettings.FromPage = 1;\n            pd.PrinterSettings.ToPage = PageCount;\n            pd.PrinterSettings.MaximumPage = PageCount;\n            pd.PrinterSettings.MinimumPage = 1;\n            pd.DefaultPageSettings.Landscape = PageWidth > PageHeight ? true : false;\n\n            // Set the paper size.\n            if (SourceRdl != null)\n            {\n                System.Xml.XmlDocument docxml = new System.Xml.XmlDocument();\n                docxml.LoadXml(SourceRdl);\n\n                float height = 11;\n                float width = 8.5f;\n                XmlNodeList heightList = docxml.GetElementsByTagName(\"PageHeight\");\n                for (int i = 0; i < heightList.Count; i++)\n                {\n                    height = float.Parse(heightList[i].InnerText.Replace(\"in\", \"\")) * 100;\n                }\n\n                XmlNodeList widthList = docxml.GetElementsByTagName(\"PageWidth\");\n                for (int i = 0; i < widthList.Count; i++)\n                {\n                    width = float.Parse(widthList[i].InnerText.Replace(\"in\", \"\")) * 100;\n                }\n\n                pd.DefaultPageSettings.PaperSize = new PaperSize(\"Custom\", (int)width, (int)height);\n            }\n            using (PrintDialog dlg = new PrintDialog())\n            {\n                dlg.Document = pd;\n                dlg.AllowSelection = true;\n                dlg.AllowSomePages = true;\n                if (dlg.ShowDialog() == DialogResult.OK)\n                {\n                    try\n                    {\n                        if (pd.PrinterSettings.PrintRange == PrintRange.Selection)\n                        {\n                            pd.PrinterSettings.FromPage = PageCurrent;\n                        }\n                        Print(pd);\n                    }\n                    catch (Exception ex)\n                    {\n                        MessageBox.Show(Strings.RdlUserControl_Show_PrintError + ex.Message, Strings.RdlUserControl_Show_RDLDesign);\n                    }\n                }\n                isPrinting = false;\n            }\n        }\n\n        private void zoomToolStripComboBox1_SelectedIndexChanged(object sender, EventArgs e)\n        {\n\n            switch (zoomToolStripComboBox1.Text)\n            {\n                case \"Actual Size\":\n                    Zoom = 1;\n                    break;\n                case \"Fit Page\":\n                    ZoomMode = ZoomEnum.FitPage;\n                    break;\n                case \"Fit Width\":\n                    ZoomMode = ZoomEnum.FitWidth;\n                    break;\n                default:\n                    string s = zoomToolStripComboBox1.Text.Substring(0, zoomToolStripComboBox1.Text.Length - 1);\n                    float z;\n                    try\n                    {\n                        z = Convert.ToSingle(s) / 100f;\n                        Zoom = z;\n                    }\n                    catch (Exception ex)\n                    {\n                        MessageBox.Show(ex.Message, Strings.RdlUserControl_Show_ZoomValueInvalid);\n                    }\n                    break;\n            }\n        }\n\n        private void selectToolStripButton2_Click(object sender, EventArgs e)\n        {\n            SelectionTool = selectToolStripButton2.Checked;\n\n        }\n\n        private async void pdfToolStripButton2_Click(object sender, EventArgs e)\n        {\n\n            await ExportAsync(Rdl.OutputPresentationType.PDF);\n\n        }\n\n        private async void htmlToolStripButton2_Click(object sender, EventArgs e)\n        {\n            await ExportAsync(Rdl.OutputPresentationType.HTML);\n        }\n\n        private async void excelToolStripButton2_Click(object sender, EventArgs e)\n        {\n            await ExportAsync(Rdl.OutputPresentationType.Excel2007);\n        }\n\n        private async void XmlToolStripButton2_Click(object sender, EventArgs e)\n        {\n            await ExportAsync(Rdl.OutputPresentationType.XML);\n        }\n\n        private async void MhtToolStripButton2_Click(object sender, EventArgs e)\n        {\n            await ExportAsync(Rdl.OutputPresentationType.MHTML);\n        }\n\n        private async void CsvToolStripButton2_Click(object sender, EventArgs e)\n        {\n            await ExportAsync(Rdl.OutputPresentationType.CSV);\n        }\n\n        private async void RtfToolStripButton2_Click(object sender, EventArgs e)\n        {\n            await ExportAsync(Rdl.OutputPresentationType.RTF);\n        }\n\n        private async void TifToolStripButton2_Click(object sender, EventArgs e)\n        {\n            await ExportAsync(Rdl.OutputPresentationType.TIF);\n        }\n\n        private void foreColorPicker1_Validated(object sender, EventArgs e)\n        {\n            if (!bSuppressChange)\n            {\n                ApplyStyleToSelected(\"Color\", foreColorPicker1.Text);\n                SetProperties();\n            }\n        }\n\n        private void foreColorPicker1_SelectedValueChanged(object sender, EventArgs e)\n        {\n            if (!bSuppressChange)\n            {\n                ApplyStyleToSelected(\"Color\", foreColorPicker1.Text);\n                SetProperties();\n            }\n        }\n\n        private void backColorPicker1_Validated(object sender, EventArgs e)\n        {\n            if (!bSuppressChange)\n            {\n                ApplyStyleToSelected(\"BackgroundColor\", backColorPicker1.Text);\n                SetProperties();\n            }\n        }\n\n        private void backColorPicker1_Click(object sender, EventArgs e)\n        {\n            if (!bSuppressChange)\n            {\n                ApplyStyleToSelected(\"BackgroundColor\", backColorPicker1.Text);\n                SetProperties();\n            }\n        }\n\n        private void ButtonShowProperties_Click(object sender, EventArgs e)\n        {\n            ShowProperties(!_ShowProperties);\n        }\n\n    }\n}\n"
  },
  {
    "path": "RdlDesign/RdlUserControl.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"splitContainer1.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Bottom, Left, Right</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"splitContainer1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>3, 122</value>\n  </data>\n  <data name=\"rdlEditPreview1.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Fill</value>\n  </data>\n  <data name=\"rdlEditPreview1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"rdlEditPreview1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>782, 344</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"rdlEditPreview1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;rdlEditPreview1.Name\" xml:space=\"preserve\">\n    <value>rdlEditPreview1</value>\n  </data>\n  <data name=\"&gt;&gt;rdlEditPreview1.Type\" xml:space=\"preserve\">\n    <value>fyiReporting.RdlDesign.RdlEditPreview, RdlDesigner, Version=4.5.5088.20753, Culture=neutral, PublicKeyToken=null</value>\n  </data>\n  <data name=\"&gt;&gt;rdlEditPreview1.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel1</value>\n  </data>\n  <data name=\"&gt;&gt;rdlEditPreview1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.Name\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"mainProperties.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Fill</value>\n  </data>\n  <data name=\"mainProperties.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"mainProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>209, 344</value>\n  </data>\n  <data name=\"mainProperties.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>45</value>\n  </data>\n  <data name=\"&gt;&gt;mainProperties.Name\" xml:space=\"preserve\">\n    <value>mainProperties</value>\n  </data>\n  <data name=\"&gt;&gt;mainProperties.Type\" xml:space=\"preserve\">\n    <value>fyiReporting.RdlDesign.PropertyCtl, RdlDesigner, Version=4.5.5088.20753, Culture=neutral, PublicKeyToken=null</value>\n  </data>\n  <data name=\"&gt;&gt;mainProperties.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel2</value>\n  </data>\n  <data name=\"&gt;&gt;mainProperties.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.Name\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel2</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"splitContainer1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>995, 344</value>\n  </data>\n  <data name=\"splitContainer1.SplitterDistance\" type=\"System.Int32, mscorlib\">\n    <value>782</value>\n  </data>\n  <data name=\"splitContainer1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>46</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Name\" xml:space=\"preserve\">\n    <value>splitContainer1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <metadata name=\"mainTB.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <data name=\"newToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"newToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"newToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>New</value>\n  </data>\n  <data name=\"openToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"openToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"openToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Open</value>\n  </data>\n  <data name=\"saveToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"saveToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"saveToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Save</value>\n  </data>\n  <data name=\"cutToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"cutToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"cutToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Cut</value>\n  </data>\n  <data name=\"copyToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"copyToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"copyToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Copy</value>\n  </data>\n  <data name=\"pasteToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"pasteToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"pasteToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Paste</value>\n  </data>\n  <data name=\"undoToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"undoToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"undoToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Undo</value>\n  </data>\n  <data name=\"textboxToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABOSURBVDhP5YxRCgAgDEK9/6UXgcE2I6LtrwchThNWpGcA\n        wNXb0TOQOX3I/DLgvWTUgJScl4wayKXJusmdGmgf8F4yakBKzktGfaY4YDYA0LdC6GTV0nUAAAAASUVO\n        RK5CYII=\n</value>\n  </data>\n  <data name=\"textboxToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"textboxToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>71, 22</value>\n  </data>\n  <data name=\"textboxToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Text Box</value>\n  </data>\n  <data name=\"chartToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"chartToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 22</value>\n  </data>\n  <data name=\"chartToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Chart</value>\n  </data>\n  <data name=\"tableToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABLSURBVDhP7Y5BCgAgCAT9/6cNo5UtDNIuHRpYVj0Mil7S\n        BSJSyiTIEgpgRkB09+bF4JlZ71vBKbHAmgOC+//AajQvGR78oBIX1FFtqeUDKMm9WRgAAAAASUVORK5C\n        YII=\n</value>\n  </data>\n  <data name=\"tableToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"tableToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 22</value>\n  </data>\n  <data name=\"tableToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Table</value>\n  </data>\n  <data name=\"listToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABrSURBVDhPpZEBCoBACAT9/6cvhBtRucWrBhbbyinK1k9C\n        YGYRyL1fgyJQk9AztX1AC3iSmhstAF8gB2bBQAj6x7qlCPK85d3dB7SAN1FzowXgC+TALBgIQf8L+djp\n        HYogT4clwrlMba9Z6wH7k32tztsDcQAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"listToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"listToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>45, 22</value>\n  </data>\n  <data name=\"listToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>List</value>\n  </data>\n  <data name=\"imageToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"imageToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>60, 22</value>\n  </data>\n  <data name=\"imageToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Image</value>\n  </data>\n  <data name=\"matrixToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABcSURBVDhPzY5RDoAwCEO5//l2H7RLauqGmbAPfUkD3ccb\n        5pt0gZmVchNkeSUY37UvBXhjnnqfWjKEAkwGtHMiurOHggyhAJMB/7hA+eYC/qg7CAUZJkEll6CO+wEV\n        wABNUS6u4wAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"matrixToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"matrixToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>60, 22</value>\n  </data>\n  <data name=\"matrixToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Matrix</value>\n  </data>\n  <data name=\"subreportToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABdSURBVDhP7Y5RDsAgCEO5/6VZalYCWuN0v76kEiopmP+k\n        BZjZUjMiYMVspgRwG0WUR0oAUEOAfv8/BHyhLGwPDdQsIvy4KDc76ADULCL8ewHKW3OzwxBwogg4x/0B\n        zrQYE6q0TO4AAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"subreportToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"subreportToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>79, 22</value>\n  </data>\n  <data name=\"subreportToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Subreport</value>\n  </data>\n  <data name=\"rectangleToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAuSURBVDhPY/hPIaCeAQwMDCRhGEAxgFgwasCoASCA0wBS\n        MAwQby0OMNAG/P8PAC/Ffqw7zhfAAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"rectangleToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"rectangleToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>79, 22</value>\n  </data>\n  <data name=\"rectangleToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Rectangle</value>\n  </data>\n  <data name=\"lineToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABJSURBVDhP1Yy5DQAgDMSy/9JBLgN5RYFwe2eLXvJhQMQq\n        o8AuQzvgydAKRDKUgUyGdK1kCB8dGdxXV4bjOZHBvKcyzI2N1wHVBZfk3kzElYBzAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"lineToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"lineToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>49, 22</value>\n  </data>\n  <data name=\"lineToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Line</value>\n  </data>\n  <data name=\"fxToolStripLabel1.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Segoe UI, 9pt, style=Bold</value>\n  </data>\n  <data name=\"fxToolStripLabel1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>19, 22</value>\n  </data>\n  <data name=\"fxToolStripLabel1.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"fxToolStripLabel1.ToolTipText\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"ctlEditTextbox.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>250, 25</value>\n  </data>\n  <data name=\"mainTB.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"mainTB.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>998, 25</value>\n  </data>\n  <data name=\"mainTB.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>31</value>\n  </data>\n  <data name=\"mainTB.Text\" xml:space=\"preserve\">\n    <value>toolStrip1</value>\n  </data>\n  <data name=\"&gt;&gt;mainTB.Name\" xml:space=\"preserve\">\n    <value>mainTB</value>\n  </data>\n  <data name=\"&gt;&gt;mainTB.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;mainTB.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;mainTB.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <metadata name=\"toolStrip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>329, 17</value>\n  </metadata>\n  <data name=\"boldToolStripButton1.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Segoe UI, 9pt, style=Bold</value>\n  </data>\n  <data name=\"boldToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"boldToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"boldToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>B</value>\n  </data>\n  <data name=\"boldToolStripButton1.ToolTipText\" xml:space=\"preserve\">\n    <value>Bold</value>\n  </data>\n  <data name=\"italiacToolStripButton1.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Courier New, 11.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"italiacToolStripButton1.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"italiacToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"italiacToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>I</value>\n  </data>\n  <data name=\"italiacToolStripButton1.ToolTipText\" xml:space=\"preserve\">\n    <value>Italic</value>\n  </data>\n  <data name=\"underlineToolStripButton2.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Segoe UI, 9pt, style=Bold, Underline</value>\n  </data>\n  <data name=\"underlineToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"underlineToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"underlineToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>U</value>\n  </data>\n  <data name=\"underlineToolStripButton2.ToolTipText\" xml:space=\"preserve\">\n    <value>Underline</value>\n  </data>\n  <data name=\"leftAlignToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"leftAlignToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"leftAlignToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>Left Align</value>\n  </data>\n  <data name=\"centerAlignToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"centerAlignToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"centerAlignToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>Center Align</value>\n  </data>\n  <data name=\"rightAlignToolStripButton3.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"rightAlignToolStripButton3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"rightAlignToolStripButton3.Text\" xml:space=\"preserve\">\n    <value>Right Align</value>\n  </data>\n  <data name=\"fontToolStripComboBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 25</value>\n  </data>\n  <data name=\"fontToolStripComboBox1.ToolTipText\" xml:space=\"preserve\">\n    <value>Font</value>\n  </data>\n  <data name=\"fontSizeToolStripComboBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 25</value>\n  </data>\n  <data name=\"fontSizeToolStripComboBox1.ToolTipText\" xml:space=\"preserve\">\n    <value>Font Size</value>\n  </data>\n  <data name=\"printToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"printToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"printToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>Print</value>\n  </data>\n  <data name=\"zoomToolStripComboBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 25</value>\n  </data>\n  <data name=\"zoomToolStripComboBox1.ToolTipText\" xml:space=\"preserve\">\n    <value>Zoom</value>\n  </data>\n  <data name=\"selectToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAuSURBVDhPY/hPIcBrAAMDAxjjA6MGUMsAmEJSMfUMwAWQ\n        FeICowbQ2gDC4P9/AFoiYMp9UrIYAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"selectToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"selectToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"selectToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>Select Tool</value>\n  </data>\n  <data name=\"pdfToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABIAAAAQCAYAAAAbBi9cAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABaSURBVDhP3ZPbCQAgDAOdx/1HcZ9KxEKQKj4qiAdRm9D8\n        GcSJB4tCTMJSej5osyIcjM49H7QZmC4Cw2y3iFU8ywT8VtQzM8sE14p4Xi5iMdbOz1+k3sc4FYlkjsIT\n        8WJzcpcAAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"pdfToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"pdfToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"pdfToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>PDF</value>\n  </data>\n  <data name=\"htmlToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABYSURBVDhPY/hPJzAMLWLQugJlIgBMDESjY5g4NoBPHq9F\n        MICNj08MXQ4E6GsRNowMcPEJ0ciAbB8RQyODoWERCGBjo6sHAZpZhIHBMnQAoxaRDehk0f//APc76hR2\n        Y9y2AAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"htmlToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"htmlToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"htmlToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>HTML</value>\n  </data>\n  <data name=\"excelToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABUAAAAQCAYAAAD52jQlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABgSURBVDhP7ZFRCgAgCEM7T/c/SvcxCgdjlB9SH0EPpHRr\n        IBW7wEOhpTYbBbhXTYGuvnSoatzP9TFgYaA9E2p+Lk3hQ9dWnnQogIe96fUV9t75qFD0uxbYzv08yg89\n        jVkHIj6jSQaaleYAAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"excelToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"excelToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"excelToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>Excel</value>\n  </data>\n  <data name=\"XmlToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABaSURBVDhPY/hPZTAEDGTQugJlIgBMDJscCOCTB7sQWQKd\n        ja4JWQxdDgRoYyAI4NJMDI0MaGMgsgQ2NiEaGRBlIAhgYyOLwQDRyQYbG0RjYLAMFcGogZSC//8BGteL\n        dcZuF4EAAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"XmlToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"XmlToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"XmlToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>XML</value>\n  </data>\n  <data name=\"MhtToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABUAAAAQCAYAAAD52jQlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABnSURBVDhP7YxRCsAwCEN7nt3/KLuPw1IhTbLtp/0Y7IFo\n        oqbFBj4U2o5zjDPluz3uuLqPopgOaJe4e2RfaB8euitEdBlvHWFP9F0Id4Q90Wi4mR8SCWHtgpKa+SGR\n        ENajL+UPXU3EBVw8wzkRFW5BAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"MhtToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"MhtToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"MhtToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>MHT</value>\n  </data>\n  <data name=\"CsvToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABUAAAAQCAYAAAD52jQlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABoSURBVDhP7ZJRCsAgDEN7nt3/KLtPR2SR0Fkp4j4Ge+DU\n        Jr6vmb/AB6V2nH0pOtcs9kjr8aDwPno4ywDmloVgloGY8z6VAuRZZ1lKMnkXSVaWktgfStunUCSV2fIv\n        pTze3PtWfulu3C97Gt8rXJb7sAAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"CsvToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"CsvToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"CsvToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>CSV</value>\n  </data>\n  <data name=\"RtfToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABLSURBVDhPY/hPZTAEDGRguAIkUDEMYJODYdzyQAIdUCZG\n        CwPRMTaATRybPhQXIrPRATY57GJogrgMHTwGggBFYlCaamDUQErB//8A1OuNEoRaw2QAAAAASUVORK5C\n        YII=\n</value>\n  </data>\n  <data name=\"RtfToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"RtfToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"RtfToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>RTF</value>\n  </data>\n  <data name=\"TifToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABUAAAAQCAYAAAD52jQlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAA/SURBVDhPY/hPAzDEDGXQuoKBkQE6HwTQ1SOrQXEpsgQy\n        wCaOSy0IDD5DkTEyGCHexwVobyi1wKih1Ab//wMAw/n1IMf7Fj0AAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"TifToolStripButton2.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"TifToolStripButton2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"TifToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>TIF</value>\n  </data>\n  <data name=\"ButtonShowProperties.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG\n        YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9\n        0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw\n        bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc\n        VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9\n        c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32\n        Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo\n        mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+\n        kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D\n        TgDQASA1MVpwzwAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"ButtonShowProperties.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"ButtonShowProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>112, 22</value>\n  </data>\n  <data name=\"ButtonShowProperties.Text\" xml:space=\"preserve\">\n    <value>Show Properties</value>\n  </data>\n  <data name=\"ButtonShowProperties.Visible\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"toolStrip1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 25</value>\n  </data>\n  <data name=\"toolStrip1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>998, 25</value>\n  </data>\n  <data name=\"toolStrip1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>32</value>\n  </data>\n  <data name=\"toolStrip1.Text\" xml:space=\"preserve\">\n    <value>toolStrip1</value>\n  </data>\n  <data name=\"&gt;&gt;toolStrip1.Name\" xml:space=\"preserve\">\n    <value>toolStrip1</value>\n  </data>\n  <data name=\"&gt;&gt;toolStrip1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStrip1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;toolStrip1.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"label1.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 15</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>58, 13</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Fore Color:</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"label2.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>209, 15</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>62, 13</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>35</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Back Color:</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"foreColorPicker1.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"foreColorPicker1.IntegralHeight\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"foreColorPicker1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>66, 12</value>\n  </data>\n  <data name=\"foreColorPicker1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 21</value>\n  </data>\n  <data name=\"foreColorPicker1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>32</value>\n  </data>\n  <data name=\"&gt;&gt;foreColorPicker1.Name\" xml:space=\"preserve\">\n    <value>foreColorPicker1</value>\n  </data>\n  <data name=\"&gt;&gt;foreColorPicker1.Type\" xml:space=\"preserve\">\n    <value>fyiReporting.RdlDesign.ColorPicker, RdlDesigner, Version=4.5.5088.20753, Culture=neutral, PublicKeyToken=null</value>\n  </data>\n  <data name=\"&gt;&gt;foreColorPicker1.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;foreColorPicker1.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"backColorPicker1.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"backColorPicker1.IntegralHeight\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"backColorPicker1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>273, 12</value>\n  </data>\n  <data name=\"backColorPicker1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>121, 21</value>\n  </data>\n  <data name=\"backColorPicker1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>33</value>\n  </data>\n  <data name=\"&gt;&gt;backColorPicker1.Name\" xml:space=\"preserve\">\n    <value>backColorPicker1</value>\n  </data>\n  <data name=\"&gt;&gt;backColorPicker1.Type\" xml:space=\"preserve\">\n    <value>fyiReporting.RdlDesign.ColorPicker, RdlDesigner, Version=4.5.5088.20753, Culture=neutral, PublicKeyToken=null</value>\n  </data>\n  <data name=\"&gt;&gt;backColorPicker1.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;backColorPicker1.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"mainTC.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>3, 39</value>\n  </data>\n  <data name=\"mainTC.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>712, 21</value>\n  </data>\n  <data name=\"mainTC.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>34</value>\n  </data>\n  <data name=\"&gt;&gt;mainTC.Name\" xml:space=\"preserve\">\n    <value>mainTC</value>\n  </data>\n  <data name=\"&gt;&gt;mainTC.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;mainTC.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;mainTC.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"panel1.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Top</value>\n  </data>\n  <data name=\"panel1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 50</value>\n  </data>\n  <data name=\"panel1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>998, 66</value>\n  </data>\n  <data name=\"panel1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>37</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Name\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <data name=\"$this.AutoScaleDimensions\" type=\"System.Drawing.SizeF, System.Drawing\">\n    <value>96, 96</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>998, 469</value>\n  </data>\n  <data name=\"&gt;&gt;newToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>newToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;newToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;openToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>openToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;openToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;saveToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>saveToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;saveToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cutToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>cutToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;cutToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;copyToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>copyToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;copyToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;pasteToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>pasteToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;pasteToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;undoToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>undoToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;undoToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;textboxToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>textboxToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;textboxToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chartToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>chartToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;chartToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tableToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>tableToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;tableToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;listToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>listToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;listToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;imageToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>imageToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;imageToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;matrixToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>matrixToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;matrixToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;subreportToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>subreportToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;subreportToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rectangleToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>rectangleToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;rectangleToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lineToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>lineToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;lineToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;fxToolStripLabel1.Name\" xml:space=\"preserve\">\n    <value>fxToolStripLabel1</value>\n  </data>\n  <data name=\"&gt;&gt;fxToolStripLabel1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;ctlEditTextbox.Name\" xml:space=\"preserve\">\n    <value>ctlEditTextbox</value>\n  </data>\n  <data name=\"&gt;&gt;ctlEditTextbox.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;boldToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>boldToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;boldToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;italiacToolStripButton1.Name\" xml:space=\"preserve\">\n    <value>italiacToolStripButton1</value>\n  </data>\n  <data name=\"&gt;&gt;italiacToolStripButton1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;underlineToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>underlineToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;underlineToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;leftAlignToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>leftAlignToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;leftAlignToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;centerAlignToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>centerAlignToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;centerAlignToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rightAlignToolStripButton3.Name\" xml:space=\"preserve\">\n    <value>rightAlignToolStripButton3</value>\n  </data>\n  <data name=\"&gt;&gt;rightAlignToolStripButton3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;fontToolStripComboBox1.Name\" xml:space=\"preserve\">\n    <value>fontToolStripComboBox1</value>\n  </data>\n  <data name=\"&gt;&gt;fontToolStripComboBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;fontSizeToolStripComboBox1.Name\" xml:space=\"preserve\">\n    <value>fontSizeToolStripComboBox1</value>\n  </data>\n  <data name=\"&gt;&gt;fontSizeToolStripComboBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;printToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>printToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;printToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;zoomToolStripComboBox1.Name\" xml:space=\"preserve\">\n    <value>zoomToolStripComboBox1</value>\n  </data>\n  <data name=\"&gt;&gt;zoomToolStripComboBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;selectToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>selectToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;selectToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;pdfToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>pdfToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;pdfToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;htmlToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>htmlToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;htmlToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;excelToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>excelToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;excelToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;XmlToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>XmlToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;XmlToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;MhtToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>MhtToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;MhtToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;CsvToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>CsvToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;CsvToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;RtfToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>RtfToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;RtfToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;TifToolStripButton2.Name\" xml:space=\"preserve\">\n    <value>TifToolStripButton2</value>\n  </data>\n  <data name=\"&gt;&gt;TifToolStripButton2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;ButtonShowProperties.Name\" xml:space=\"preserve\">\n    <value>ButtonShowProperties</value>\n  </data>\n  <data name=\"&gt;&gt;ButtonShowProperties.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>RdlUserControl</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/RdlUserControl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"newToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Создать</value>\n  </data>\n  <data name=\"openToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Открыть</value>\n  </data>\n  <data name=\"saveToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Сохранить</value>\n  </data>\n  <data name=\"cutToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Вырезать</value>\n  </data>\n  <data name=\"copyToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Скопировать</value>\n  </data>\n  <data name=\"pasteToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Вставить</value>\n  </data>\n  <data name=\"undoToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"textboxToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABOSURBVDhP5YxRCgAgDEK9/6UXgcE2I6LtrwchThNWpGcA\n        wNXb0TOQOX3I/DLgvWTUgJScl4wayKXJusmdGmgf8F4yakBKzktGfaY4YDYA0LdC6GTV0nUAAAAASUVO\n        RK5CYII=\n</value>\n  </data>\n  <data name=\"textboxToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>113, 22</value>\n  </data>\n  <data name=\"textboxToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Текстовое поле</value>\n  </data>\n  <data name=\"chartToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>90, 22</value>\n  </data>\n  <data name=\"chartToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Диаграмма</value>\n  </data>\n  <data name=\"tableToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABLSURBVDhP7Y5BCgAgCAT9/6cNo5UtDNIuHRpYVj0Mil7S\n        BSJSyiTIEgpgRkB09+bF4JlZ71vBKbHAmgOC+//AajQvGR78oBIX1FFtqeUDKMm9WRgAAAAASUVORK5C\n        YII=\n</value>\n  </data>\n  <data name=\"tableToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>74, 22</value>\n  </data>\n  <data name=\"tableToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Таблица</value>\n  </data>\n  <data name=\"listToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABrSURBVDhPpZEBCoBACAT9/6cvhBtRucWrBhbbyinK1k9C\n        YGYRyL1fgyJQk9AztX1AC3iSmhstAF8gB2bBQAj6x7qlCPK85d3dB7SAN1FzowXgC+TALBgIQf8L+djp\n        HYogT4clwrlMba9Z6wH7k32tztsDcQAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"listToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>68, 22</value>\n  </data>\n  <data name=\"listToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Список</value>\n  </data>\n  <data name=\"imageToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>103, 22</value>\n  </data>\n  <data name=\"imageToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Изображение</value>\n  </data>\n  <data name=\"matrixToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABcSURBVDhPzY5RDoAwCEO5//l2H7RLauqGmbAPfUkD3ccb\n        5pt0gZmVchNkeSUY37UvBXhjnnqfWjKEAkwGtHMiurOHggyhAJMB/7hA+eYC/qg7CAUZJkEll6CO+wEV\n        wABNUS6u4wAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"matrixToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>76, 22</value>\n  </data>\n  <data name=\"matrixToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Матрица</value>\n  </data>\n  <data name=\"subreportToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABdSURBVDhP7Y5RDsAgCEO5/6VZalYCWuN0v76kEiopmP+k\n        BZjZUjMiYMVspgRwG0WUR0oAUEOAfv8/BHyhLGwPDdQsIvy4KDc76ADULCL8ewHKW3OzwxBwogg4x/0B\n        zrQYE6q0TO4AAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"subreportToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Подотчёт</value>\n  </data>\n  <data name=\"rectangleToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAuSURBVDhPY/hPIaCeAQwMDCRhGEAxgFgwasCoASCA0wBS\n        MAwQby0OMNAG/P8PAC/Ffqw7zhfAAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"rectangleToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>116, 22</value>\n  </data>\n  <data name=\"rectangleToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Прямоугольник</value>\n  </data>\n  <data name=\"lineToolStripButton1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABJSURBVDhP1Yy5DQAgDMSy/9JBLgN5RYFwe2eLXvJhQMQq\n        o8AuQzvgydAKRDKUgUyGdK1kCB8dGdxXV4bjOZHBvKcyzI2N1wHVBZfk3kzElYBzAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"lineToolStripButton1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>62, 22</value>\n  </data>\n  <data name=\"lineToolStripButton1.Text\" xml:space=\"preserve\">\n    <value>Линия</value>\n  </data>\n  <data name=\"ctlEditTextbox.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>250, 23</value>\n  </data>\n  <data name=\"boldToolStripButton1.ToolTipText\" xml:space=\"preserve\">\n    <value>Жирный</value>\n  </data>\n  <data name=\"italiacToolStripButton1.ToolTipText\" xml:space=\"preserve\">\n    <value>Курсив</value>\n  </data>\n  <data name=\"underlineToolStripButton2.ToolTipText\" xml:space=\"preserve\">\n    <value>Подчёркнутый</value>\n  </data>\n  <data name=\"leftAlignToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>Слева</value>\n  </data>\n  <data name=\"centerAlignToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>По центру</value>\n  </data>\n  <data name=\"rightAlignToolStripButton3.Text\" xml:space=\"preserve\">\n    <value>Справа</value>\n  </data>\n  <data name=\"fontToolStripComboBox1.ToolTipText\" xml:space=\"preserve\">\n    <value>Шрифт</value>\n  </data>\n  <data name=\"fontSizeToolStripComboBox1.ToolTipText\" xml:space=\"preserve\">\n    <value>Размер шрифта</value>\n  </data>\n  <data name=\"printToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>Печатать</value>\n  </data>\n  <data name=\"zoomToolStripComboBox1.ToolTipText\" xml:space=\"preserve\">\n    <value>Масштаб</value>\n  </data>\n  <data name=\"selectToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAuSURBVDhPY/hPIcBrAAMDAxjjA6MGUMsAmEJSMfUMwAWQ\n        FeICowbQ2gDC4P9/AFoiYMp9UrIYAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"selectToolStripButton2.Text\" xml:space=\"preserve\">\n    <value>Выбор</value>\n  </data>\n  <data name=\"pdfToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABIAAAAQCAYAAAAbBi9cAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABaSURBVDhP3ZPbCQAgDAOdx/1HcZ9KxEKQKj4qiAdRm9D8\n        GcSJB4tCTMJSej5osyIcjM49H7QZmC4Cw2y3iFU8ywT8VtQzM8sE14p4Xi5iMdbOz1+k3sc4FYlkjsIT\n        8WJzcpcAAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"htmlToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABYSURBVDhPY/hPJzAMLWLQugJlIgBMDESjY5g4NoBPHq9F\n        MICNj08MXQ4E6GsRNowMcPEJ0ciAbB8RQyODoWERCGBjo6sHAZpZhIHBMnQAoxaRDehk0f//APc76hR2\n        Y9y2AAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"excelToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABUAAAAQCAYAAAD52jQlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABgSURBVDhP7ZFRCgAgCEM7T/c/SvcxCgdjlB9SH0EPpHRr\n        IBW7wEOhpTYbBbhXTYGuvnSoatzP9TFgYaA9E2p+Lk3hQ9dWnnQogIe96fUV9t75qFD0uxbYzv08yg89\n        jVkHIj6jSQaaleYAAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"XmlToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABaSURBVDhPY/hPZTAEDGTQugJlIgBMDJscCOCTB7sQWQKd\n        ja4JWQxdDgRoYyAI4NJMDI0MaGMgsgQ2NiEaGRBlIAhgYyOLwQDRyQYbG0RjYLAMFcGogZSC//8BGteL\n        dcZuF4EAAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"MhtToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABUAAAAQCAYAAAD52jQlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABnSURBVDhP7YxRCsAwCEN7nt3/KLuPw1IhTbLtp/0Y7IFo\n        oqbFBj4U2o5zjDPluz3uuLqPopgOaJe4e2RfaB8euitEdBlvHWFP9F0Id4Q90Wi4mR8SCWHtgpKa+SGR\n        ENajL+UPXU3EBVw8wzkRFW5BAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"CsvToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABUAAAAQCAYAAAD52jQlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABoSURBVDhP7ZJRCsAgDEN7nt3/KLtPR2SR0Fkp4j4Ge+DU\n        Jr6vmb/AB6V2nH0pOtcs9kjr8aDwPno4ywDmloVgloGY8z6VAuRZZ1lKMnkXSVaWktgfStunUCSV2fIv\n        pTze3PtWfulu3C97Gt8rXJb7sAAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"RtfToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABLSURBVDhPY/hPZTAEDGRguAIkUDEMYJODYdzyQAIdUCZG\n        CwPRMTaATRybPhQXIrPRATY57GJogrgMHTwGggBFYlCaamDUQErB//8A1OuNEoRaw2QAAAAASUVORK5C\n        YII=\n</value>\n  </data>\n  <data name=\"TifToolStripButton2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABUAAAAQCAYAAAD52jQlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAA/SURBVDhPY/hPAzDEDGXQuoKBkQE6HwTQ1SOrQXEpsgQy\n        wCaOSy0IDD5DkTEyGCHexwVobyi1wKih1Ab//wMAw/n1IMf7Fj0AAAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"ButtonShowProperties.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG\n        YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9\n        0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw\n        bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc\n        VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9\n        c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32\n        Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo\n        mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+\n        kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D\n        TgDQASA1MVpwzwAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"ButtonShowProperties.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>129, 22</value>\n  </data>\n  <data name=\"ButtonShowProperties.Text\" xml:space=\"preserve\">\n    <value>Показать свойства</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 13</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Цвет текста:</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 13</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Цвет фона:</value>\n  </data>\n  <data name=\"foreColorPicker1.Items10500\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"foreColorPicker1.Items10501\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"foreColorPicker1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>82, 12</value>\n  </data>\n  <data name=\"backColorPicker1.Items10640\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"backColorPicker1.Items10641\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"backColorPicker1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>279, 12</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/ReportCtl.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\tinternal partial class ReportCtl\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tprivate DesignXmlDraw _Draw;\nprivate System.Windows.Forms.TextBox tbReportAuthor;\nprivate System.Windows.Forms.TextBox tbReportDescription;\nprivate System.Windows.Forms.Label label3;\nprivate System.Windows.Forms.Label label2;\nprivate System.Windows.Forms.GroupBox groupBox1;\nprivate System.Windows.Forms.Label label1;\nprivate System.Windows.Forms.Label label4;\nprivate System.Windows.Forms.TextBox tbPageWidth;\nprivate System.Windows.Forms.TextBox tbPageHeight;\nprivate System.Windows.Forms.GroupBox groupBox2;\nprivate System.Windows.Forms.TextBox tbMarginLeft;\nprivate System.Windows.Forms.Label label5;\nprivate System.Windows.Forms.TextBox tbMarginRight;\nprivate System.Windows.Forms.Label label6;\nprivate System.Windows.Forms.TextBox tbMarginBottom;\nprivate System.Windows.Forms.Label label7;\nprivate System.Windows.Forms.TextBox tbMarginTop;\nprivate System.Windows.Forms.Label label8;\nprivate System.Windows.Forms.TextBox tbWidth;\nprivate System.Windows.Forms.Label label9;\nprivate System.Windows.Forms.GroupBox groupBox3;\nprivate System.Windows.Forms.GroupBox groupBox4;\nprivate System.Windows.Forms.CheckBox chkPFFirst;\nprivate System.Windows.Forms.CheckBox chkPHFirst;\nprivate System.Windows.Forms.CheckBox chkPHLast;\nprivate System.Windows.Forms.CheckBox chkPFLast;\nprivate ComboBox cbPageSize;\nprivate Label label11;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ReportCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.tbReportAuthor = new System.Windows.Forms.TextBox();\n\t\t\tthis.tbReportDescription = new System.Windows.Forms.TextBox();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.groupBox1 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.cbPageSize = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label11 = new System.Windows.Forms.Label();\n\t\t\tthis.tbPageHeight = new System.Windows.Forms.TextBox();\n\t\t\tthis.tbPageWidth = new System.Windows.Forms.TextBox();\n\t\t\tthis.label4 = new System.Windows.Forms.Label();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.groupBox2 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.tbMarginBottom = new System.Windows.Forms.TextBox();\n\t\t\tthis.label7 = new System.Windows.Forms.Label();\n\t\t\tthis.tbMarginTop = new System.Windows.Forms.TextBox();\n\t\t\tthis.label8 = new System.Windows.Forms.Label();\n\t\t\tthis.tbMarginRight = new System.Windows.Forms.TextBox();\n\t\t\tthis.label6 = new System.Windows.Forms.Label();\n\t\t\tthis.tbMarginLeft = new System.Windows.Forms.TextBox();\n\t\t\tthis.label5 = new System.Windows.Forms.Label();\n\t\t\tthis.tbWidth = new System.Windows.Forms.TextBox();\n\t\t\tthis.label9 = new System.Windows.Forms.Label();\n\t\t\tthis.groupBox3 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.chkPHLast = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkPHFirst = new System.Windows.Forms.CheckBox();\n\t\t\tthis.groupBox4 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.chkPFLast = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkPFFirst = new System.Windows.Forms.CheckBox();\n\t\t\tthis.groupBox1.SuspendLayout();\n\t\t\tthis.groupBox2.SuspendLayout();\n\t\t\tthis.groupBox3.SuspendLayout();\n\t\t\tthis.groupBox4.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// tbReportAuthor\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbReportAuthor, \"tbReportAuthor\");\n\t\t\tthis.tbReportAuthor.Name = \"tbReportAuthor\";\n\t\t\t// \n\t\t\t// tbReportDescription\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbReportDescription, \"tbReportDescription\");\n\t\t\tthis.tbReportDescription.Name = \"tbReportDescription\";\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// groupBox1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox1, \"groupBox1\");\n\t\t\tthis.groupBox1.Controls.Add(this.cbPageSize);\n\t\t\tthis.groupBox1.Controls.Add(this.label11);\n\t\t\tthis.groupBox1.Controls.Add(this.tbPageHeight);\n\t\t\tthis.groupBox1.Controls.Add(this.tbPageWidth);\n\t\t\tthis.groupBox1.Controls.Add(this.label4);\n\t\t\tthis.groupBox1.Controls.Add(this.label1);\n\t\t\tthis.groupBox1.Name = \"groupBox1\";\n\t\t\tthis.groupBox1.TabStop = false;\n\t\t\t// \n\t\t\t// cbPageSize\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbPageSize, \"cbPageSize\");\n\t\t\tthis.cbPageSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbPageSize.FormattingEnabled = true;\n\t\t\tthis.cbPageSize.Name = \"cbPageSize\";\n\t\t\tthis.cbPageSize.SelectedIndexChanged += new System.EventHandler(this.cbPageSize_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// label11\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label11, \"label11\");\n\t\t\tthis.label11.Name = \"label11\";\n\t\t\t// \n\t\t\t// tbPageHeight\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbPageHeight, \"tbPageHeight\");\n\t\t\tthis.tbPageHeight.Name = \"tbPageHeight\";\n\t\t\tthis.tbPageHeight.Tag = \"Page Height\";\n\t\t\tthis.tbPageHeight.Validating += new System.ComponentModel.CancelEventHandler(this.tbSize_Validating);\n\t\t\t// \n\t\t\t// tbPageWidth\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbPageWidth, \"tbPageWidth\");\n\t\t\tthis.tbPageWidth.Name = \"tbPageWidth\";\n\t\t\tthis.tbPageWidth.Tag = \"Page Width\";\n\t\t\tthis.tbPageWidth.Validating += new System.ComponentModel.CancelEventHandler(this.tbSize_Validating);\n\t\t\t// \n\t\t\t// label4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label4, \"label4\");\n\t\t\tthis.label4.Name = \"label4\";\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// groupBox2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox2, \"groupBox2\");\n\t\t\tthis.groupBox2.Controls.Add(this.tbMarginBottom);\n\t\t\tthis.groupBox2.Controls.Add(this.label7);\n\t\t\tthis.groupBox2.Controls.Add(this.tbMarginTop);\n\t\t\tthis.groupBox2.Controls.Add(this.label8);\n\t\t\tthis.groupBox2.Controls.Add(this.tbMarginRight);\n\t\t\tthis.groupBox2.Controls.Add(this.label6);\n\t\t\tthis.groupBox2.Controls.Add(this.tbMarginLeft);\n\t\t\tthis.groupBox2.Controls.Add(this.label5);\n\t\t\tthis.groupBox2.Name = \"groupBox2\";\n\t\t\tthis.groupBox2.TabStop = false;\n\t\t\t// \n\t\t\t// tbMarginBottom\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbMarginBottom, \"tbMarginBottom\");\n\t\t\tthis.tbMarginBottom.Name = \"tbMarginBottom\";\n\t\t\tthis.tbMarginBottom.Tag = \"Bottom Margin\";\n\t\t\tthis.tbMarginBottom.Validating += new System.ComponentModel.CancelEventHandler(this.tbSize_Validating);\n\t\t\t// \n\t\t\t// label7\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label7, \"label7\");\n\t\t\tthis.label7.Name = \"label7\";\n\t\t\t// \n\t\t\t// tbMarginTop\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbMarginTop, \"tbMarginTop\");\n\t\t\tthis.tbMarginTop.Name = \"tbMarginTop\";\n\t\t\tthis.tbMarginTop.Tag = \"Top Margin\";\n\t\t\tthis.tbMarginTop.Validating += new System.ComponentModel.CancelEventHandler(this.tbSize_Validating);\n\t\t\t// \n\t\t\t// label8\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label8, \"label8\");\n\t\t\tthis.label8.Name = \"label8\";\n\t\t\t// \n\t\t\t// tbMarginRight\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbMarginRight, \"tbMarginRight\");\n\t\t\tthis.tbMarginRight.Name = \"tbMarginRight\";\n\t\t\tthis.tbMarginRight.Tag = \"Right Margin\";\n\t\t\tthis.tbMarginRight.Validating += new System.ComponentModel.CancelEventHandler(this.tbSize_Validating);\n\t\t\t// \n\t\t\t// label6\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label6, \"label6\");\n\t\t\tthis.label6.Name = \"label6\";\n\t\t\t// \n\t\t\t// tbMarginLeft\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbMarginLeft, \"tbMarginLeft\");\n\t\t\tthis.tbMarginLeft.Name = \"tbMarginLeft\";\n\t\t\tthis.tbMarginLeft.Tag = \"Left Margin\";\n\t\t\tthis.tbMarginLeft.Validating += new System.ComponentModel.CancelEventHandler(this.tbSize_Validating);\n\t\t\t// \n\t\t\t// label5\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label5, \"label5\");\n\t\t\tthis.label5.Name = \"label5\";\n\t\t\t// \n\t\t\t// tbWidth\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbWidth, \"tbWidth\");\n\t\t\tthis.tbWidth.Name = \"tbWidth\";\n\t\t\tthis.tbWidth.Tag = \"Width\";\n\t\t\tthis.tbWidth.Validating += new System.ComponentModel.CancelEventHandler(this.tbSize_Validating);\n\t\t\t// \n\t\t\t// label9\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label9, \"label9\");\n\t\t\tthis.label9.Name = \"label9\";\n\t\t\t// \n\t\t\t// groupBox3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox3, \"groupBox3\");\n\t\t\tthis.groupBox3.Controls.Add(this.chkPHLast);\n\t\t\tthis.groupBox3.Controls.Add(this.chkPHFirst);\n\t\t\tthis.groupBox3.Name = \"groupBox3\";\n\t\t\tthis.groupBox3.TabStop = false;\n\t\t\t// \n\t\t\t// chkPHLast\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkPHLast, \"chkPHLast\");\n\t\t\tthis.chkPHLast.Name = \"chkPHLast\";\n\t\t\t// \n\t\t\t// chkPHFirst\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkPHFirst, \"chkPHFirst\");\n\t\t\tthis.chkPHFirst.Name = \"chkPHFirst\";\n\t\t\t// \n\t\t\t// groupBox4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox4, \"groupBox4\");\n\t\t\tthis.groupBox4.Controls.Add(this.chkPFLast);\n\t\t\tthis.groupBox4.Controls.Add(this.chkPFFirst);\n\t\t\tthis.groupBox4.Name = \"groupBox4\";\n\t\t\tthis.groupBox4.TabStop = false;\n\t\t\t// \n\t\t\t// chkPFLast\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkPFLast, \"chkPFLast\");\n\t\t\tthis.chkPFLast.Name = \"chkPFLast\";\n\t\t\t// \n\t\t\t// chkPFFirst\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkPFFirst, \"chkPFFirst\");\n\t\t\tthis.chkPFFirst.Name = \"chkPFFirst\";\n\t\t\t// \n\t\t\t// ReportCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.groupBox4);\n\t\t\tthis.Controls.Add(this.groupBox3);\n\t\t\tthis.Controls.Add(this.tbWidth);\n\t\t\tthis.Controls.Add(this.label9);\n\t\t\tthis.Controls.Add(this.groupBox2);\n\t\t\tthis.Controls.Add(this.groupBox1);\n\t\t\tthis.Controls.Add(this.tbReportAuthor);\n\t\t\tthis.Controls.Add(this.tbReportDescription);\n\t\t\tthis.Controls.Add(this.label3);\n\t\t\tthis.Controls.Add(this.label2);\n\t\t\tthis.Name = \"ReportCtl\";\n\t\t\tthis.groupBox1.ResumeLayout(false);\n\t\t\tthis.groupBox1.PerformLayout();\n\t\t\tthis.groupBox2.ResumeLayout(false);\n\t\t\tthis.groupBox2.PerformLayout();\n\t\t\tthis.groupBox3.ResumeLayout(false);\n\t\t\tthis.groupBox4.ResumeLayout(false);\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/ReportCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.Drawing.Printing;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// Summary description for ReportCtl.\n    /// </summary>\n    internal partial class ReportCtl : System.Windows.Forms.UserControl, IProperty\n    {\n        public ReportCtl(DesignXmlDraw dxDraw)\n        {\n            _Draw = dxDraw;\n            // This call is required by the Windows.Forms Form Designer.\n            InitializeComponent();\n\n            // Initialize form using the style node values\n            InitValues();\n        }\n\n        private void InitValues()\n        {\n            XmlNode rNode = _Draw.GetReportNode();\n            tbWidth.Text = _Draw.GetElementValue(rNode, \"Width\", \"\");\n            tbReportAuthor.Text = _Draw.GetElementValue(rNode, \"Author\", \"\");\n            tbReportDescription.Text = _Draw.GetElementValue(rNode, \"Description\", \"\");\n            tbPageWidth.Text = _Draw.GetElementValue(rNode, \"PageWidth\", \"8.5in\");\n            tbPageHeight.Text = _Draw.GetElementValue(rNode, \"PageHeight\", \"11in\");\n            tbMarginLeft.Text = _Draw.GetElementValue(rNode, \"LeftMargin\", \"\");\n            tbMarginRight.Text = _Draw.GetElementValue(rNode, \"RightMargin\", \"\");\n            tbMarginBottom.Text = _Draw.GetElementValue(rNode, \"BottomMargin\", \"\");\n            tbMarginTop.Text = _Draw.GetElementValue(rNode, \"TopMargin\", \"\");\n            // Page header settings\n            XmlNode phNode = _Draw.GetCreateNamedChildNode(rNode, \"PageHeader\");\n            this.chkPHFirst.Checked = _Draw.GetElementValue(phNode, \"PrintOnFirstPage\", \"true\").ToLower() == \"true\" ? true : false;\n            this.chkPHLast.Checked = _Draw.GetElementValue(phNode, \"PrintOnLastPage\", \"true\").ToLower() == \"true\" ? true : false;\n            // Page footer settings\n            XmlNode pfNode = _Draw.GetCreateNamedChildNode(rNode, \"PageFooter\");\n            this.chkPFFirst.Checked = _Draw.GetElementValue(pfNode, \"PrintOnFirstPage\", \"true\").ToLower() == \"true\" ? true : false;\n            this.chkPFLast.Checked = _Draw.GetElementValue(pfNode, \"PrintOnLastPage\", \"true\").ToLower() == \"true\" ? true : false;\n\n\n            PrinterSettings settings = new PrinterSettings();\n            cbPageSize.DisplayMember = \"PaperName\";\n\n\n            int width = Conversions.MeasurementTypeAsHundrethsOfAnInch(tbPageWidth.Text);\n            int height = Conversions.MeasurementTypeAsHundrethsOfAnInch(tbPageHeight.Text);\n\n            try\n            {\n                // This conversion may be better converted to mm instead of hundrethds of an inch\n                int count = 0;\n                bool sizeFound = false;\n                foreach (PaperSize psize in settings.PaperSizes)\n                {\n                    cbPageSize.Items.Add(psize);\n\n\n                    if ((psize.Width == width) &&\n                        (psize.Height == height) && \n                        (sizeFound == false))\n                    {   \n                        cbPageSize.SelectedIndex = count;\n                        sizeFound = true;\n                    }\n                    count = count + 1;\n                }\n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show($\"Exception when try get paper sizes: {ex}\");\n            }\n        }\n\n        \n\n        private string GetPaperSizeAsInch(int paperSize)\n        {\n            // paperSize is in hundredths of an inch.\n            return (paperSize / 100.0).ToString() + \"in\";\n        }\n\n        private string GetPaperSizeAsMillimeter(int paperSize)\n        {\n            // paperSize is in hundredths of an inch.\n            return ((paperSize / 100.0) * 25.4).ToString() + \"mm\";\n        }\n\n        public bool IsValid()\n        {\n            return true;\n        }\n\n        public void Apply()\n        {\n            XmlNode rNode = _Draw.GetReportNode();\n            _Draw.SetElement(rNode, \"Width\", DesignerUtility.MakeValidSize(tbWidth.Text, false));\n            _Draw.SetElement(rNode, \"Author\", tbReportAuthor.Text);\n            _Draw.SetElement(rNode, \"Description\", tbReportDescription.Text);\n            _Draw.SetElement(rNode, \"PageWidth\", tbPageWidth.Text);\n            _Draw.SetElement(rNode, \"PageHeight\", tbPageHeight.Text);\n            if (tbMarginLeft.Text.Trim().Length > 0)\n                _Draw.SetElement(rNode, \"LeftMargin\", tbMarginLeft.Text);\n            else\n                _Draw.RemoveElement(rNode, \"LeftMargin\");\n            if (tbMarginRight.Text.Trim().Length > 0)\n                _Draw.SetElement(rNode, \"RightMargin\", tbMarginRight.Text);\n            else\n                _Draw.RemoveElement(rNode, \"RightMargin\");\n            if (tbMarginBottom.Text.Trim().Length > 0)\n                _Draw.SetElement(rNode, \"BottomMargin\", tbMarginBottom.Text);\n            else\n                _Draw.RemoveElement(rNode, \"BottomMargin\");\n            if (tbMarginTop.Text.Trim().Length > 0)\n                _Draw.SetElement(rNode, \"TopMargin\", tbMarginTop.Text);\n            else\n                _Draw.RemoveElement(rNode, \"TopMargin\");\n            // Page header settings\n            XmlNode phNode = _Draw.GetCreateNamedChildNode(rNode, \"PageHeader\");\n            _Draw.SetElement(phNode, \"PrintOnFirstPage\", this.chkPHFirst.Checked ? \"true\" : \"false\");\n            _Draw.SetElement(phNode, \"PrintOnLastPage\", this.chkPHLast.Checked ? \"true\" : \"false\");\n            // Page footer settings\n            XmlNode pfNode = _Draw.GetCreateNamedChildNode(rNode, \"PageFooter\");\n            _Draw.SetElement(pfNode, \"PrintOnFirstPage\", this.chkPFFirst.Checked ? \"true\" : \"false\");\n            _Draw.SetElement(pfNode, \"PrintOnLastPage\", this.chkPFLast.Checked ? \"true\" : \"false\");\n\n        }\n\n        private void tbSize_Validating(object sender, System.ComponentModel.CancelEventArgs e)\n        {\n            TextBox tb = sender as TextBox;\n            if (tb == null)\n                return;\n\n            try { DesignerUtility.ValidateSize(tb.Text, false, false); }\n            catch (Exception ex)\n            {\n                e.Cancel = true;\n                MessageBox.Show(string.Format(Strings.ReportCtl_Show_SizeInvalid, tb.Text, ex.Message), tb.Tag + \" \" + Strings.ReportCtl_Show_Field_Invalid);\n            }\n        }\n\n        private void cbPageSize_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            if (cbPageSize.SelectedItem == null)\n            {\n                return;\n            }\n\n            if (cbPageSize.SelectedItem is PaperSize)\n            {\n                PaperSize size = (PaperSize)cbPageSize.SelectedItem;\n\n                // If the currnent size is in millimeter continue showing as millimeter when changing paper sizes\n                if (tbPageWidth.Text.Trim().ToLower().EndsWith(\"mm\"))\n                {\n                    tbPageWidth.Text = GetPaperSizeAsMillimeter(size.Width);\n                }\n                else\n                {\n                    tbPageWidth.Text = GetPaperSizeAsInch(size.Width);\n                }\n\n                if (tbPageHeight.Text.Trim().ToLower().EndsWith(\"mm\"))\n                {\n                    tbPageHeight.Text = GetPaperSizeAsMillimeter(size.Height);\n                }\n                else\n                {\n                    tbPageHeight.Text = GetPaperSizeAsInch(size.Height);\n                }\n\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/ReportCtl.fr.resx",
    "content": "﻿<root>\n    <resheader name=\"resmimetype\">\n        <value>text/microsoft-resx</value>\n    </resheader>\n    <resheader name=\"version\">\n        <value>1.3</value>\n    </resheader>\n    <resheader name=\"reader\">\n        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n    </resheader>\n    <resheader name=\"writer\">\n        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n    </resheader>\n    <data name=\"chkPFFirst.Text\" xml:space=\"preserve\">\n        <value>Imprimer sur la première page</value>\n    </data>\n    <data name=\"chkPFLast.Text\" xml:space=\"preserve\">\n        <value>Imprimer sur la dernière page</value>\n    </data>\n    <data name=\"chkPHFirst.Text\" xml:space=\"preserve\">\n        <value>Imprimer sur la première page</value>\n    </data>\n    <data name=\"chkPHLast.Text\" xml:space=\"preserve\">\n        <value>Imprimer sur la dernière page</value>\n    </data>\n    <data name=\"groupBox2.Text\" xml:space=\"preserve\">\n        <value>Marges</value>\n    </data>\n    <data name=\"groupBox3.Text\" xml:space=\"preserve\">\n        <value>En-tête de page</value>\n    </data>\n    <data name=\"groupBox4.Text\" xml:space=\"preserve\">\n        <value>Pied de page</value>\n    </data>\n    <data name=\"label1.Text\" xml:space=\"preserve\">\n        <value>Largeur</value>\n    </data>\n    <data name=\"label3.Text\" xml:space=\"preserve\">\n        <value>Auteur:</value>\n    </data>\n    <data name=\"label4.Text\" xml:space=\"preserve\">\n        <value>Hauteur</value>\n    </data>\n    <data name=\"label5.Text\" xml:space=\"preserve\">\n        <value>Gauche</value>\n    </data>\n    <data name=\"label6.Text\" xml:space=\"preserve\">\n        <value>Droite</value>\n    </data>\n    <data name=\"label7.Text\" xml:space=\"preserve\">\n        <value>Fond</value>\n    </data>\n    <data name=\"label8.Text\" xml:space=\"preserve\">\n        <value>Retour au début</value>\n    </data>\n    <data name=\"label9.Text\" xml:space=\"preserve\">\n        <value>Largeur</value>\n    </data>\n</root>"
  },
  {
    "path": "RdlDesign/ReportCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"&gt;&gt;tbMarginBottom.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 23</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"chkPHLast.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"label11.Text\" xml:space=\"preserve\">\n    <value>PageSize</value>\n  </data>\n  <data name=\"&gt;&gt;tbMarginRight.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;tbPageWidth.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkPHFirst.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>76, 28</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label11.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"&gt;&gt;label8.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;chkPFLast.Name\" xml:space=\"preserve\">\n    <value>chkPFLast</value>\n  </data>\n  <data name=\"groupBox3.Text\" xml:space=\"preserve\">\n    <value>Page Header</value>\n  </data>\n  <data name=\"&gt;&gt;chkPHFirst.Name\" xml:space=\"preserve\">\n    <value>chkPHFirst</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidth.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"groupBox3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>184, 56</value>\n  </data>\n  <data name=\"label5.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label6.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>168, 16</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Right</value>\n  </data>\n  <data name=\"groupBox1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Author:</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbMarginBottom.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidth.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label9.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 23</value>\n  </data>\n  <data name=\"chkPHFirst.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 16</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportAuthor.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"chkPFFirst.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;chkPHLast.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label9.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;tbPageWidth.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"tbMarginBottom.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 20</value>\n  </data>\n  <data name=\"chkPFLast.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>76, 28</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportDescription.Name\" xml:space=\"preserve\">\n    <value>tbReportDescription</value>\n  </data>\n  <data name=\"&gt;&gt;chkPFLast.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;label7.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;chkPHLast.Parent\" xml:space=\"preserve\">\n    <value>groupBox3</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;chkPFFirst.Parent\" xml:space=\"preserve\">\n    <value>groupBox4</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"tbMarginTop.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 20</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportAuthor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbMarginLeft.Name\" xml:space=\"preserve\">\n    <value>tbMarginLeft</value>\n  </data>\n  <data name=\"label10.Text\" xml:space=\"preserve\">\n    <value>PageSize</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Name\" xml:space=\"preserve\">\n    <value>label5</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Name\" xml:space=\"preserve\">\n    <value>label10</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportDescription.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox3.Name\" xml:space=\"preserve\">\n    <value>groupBox3</value>\n  </data>\n  <data name=\"&gt;&gt;tbPageHeight.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"label7.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;label11.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Name\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"tbReportAuthor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>304, 20</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 16</value>\n  </data>\n  <data name=\"&gt;&gt;tbPageHeight.Name\" xml:space=\"preserve\">\n    <value>tbPageHeight</value>\n  </data>\n  <data name=\"&gt;&gt;label11.Name\" xml:space=\"preserve\">\n    <value>label11</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>Left</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportDescription.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbPageSize.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>224, 21</value>\n  </data>\n  <data name=\"tbMarginBottom.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>224, 40</value>\n  </data>\n  <data name=\"&gt;&gt;tbMarginTop.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkPFLast.Text\" xml:space=\"preserve\">\n    <value>Print on last page</value>\n  </data>\n  <data name=\"&gt;&gt;cbPageSize.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;cbPageSize.Name\" xml:space=\"preserve\">\n    <value>cbPageSize</value>\n  </data>\n  <data name=\"label8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 16</value>\n  </data>\n  <data name=\"chkPFFirst.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>76, 28</value>\n  </data>\n  <data name=\"tbPageWidth.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 20</value>\n  </data>\n  <data name=\"&gt;&gt;tbMarginTop.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Top</value>\n  </data>\n  <data name=\"label8.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"tbMarginRight.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"label7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 16</value>\n  </data>\n  <data name=\"&gt;&gt;chkPHFirst.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkPHFirst.Parent\" xml:space=\"preserve\">\n    <value>groupBox3</value>\n  </data>\n  <data name=\"cbPageSize.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>72, 13</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>164, 42</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 42</value>\n  </data>\n  <data name=\"tbWidth.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 20</value>\n  </data>\n  <data name=\"label10.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>ReportCtl</value>\n  </data>\n  <data name=\"tbWidth.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidth.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Name\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbPageWidth.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>72, 42</value>\n  </data>\n  <data name=\"&gt;&gt;label4.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbMarginBottom.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportAuthor.Name\" xml:space=\"preserve\">\n    <value>tbReportAuthor</value>\n  </data>\n  <data name=\"&gt;&gt;label5.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbMarginLeft.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 23</value>\n  </data>\n  <data name=\"&gt;&gt;tbMarginRight.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Name\" xml:space=\"preserve\">\n    <value>label7</value>\n  </data>\n  <data name=\"label5.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"&gt;&gt;tbMarginRight.Name\" xml:space=\"preserve\">\n    <value>tbMarginRight</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox3.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"tbPageWidth.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"tbReportDescription.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"label9.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>15</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Name\" xml:space=\"preserve\">\n    <value>label9</value>\n  </data>\n  <data name=\"chkPHLast.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>76, 28</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox4.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;tbMarginTop.Name\" xml:space=\"preserve\">\n    <value>tbMarginTop</value>\n  </data>\n  <data name=\"chkPFLast.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"groupBox1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 82</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox4.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"label10.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"&gt;&gt;tbMarginBottom.Name\" xml:space=\"preserve\">\n    <value>tbMarginBottom</value>\n  </data>\n  <data name=\"tbPageHeight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 20</value>\n  </data>\n  <data name=\"tbMarginLeft.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>72, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbPageSize.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbMarginRight.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Bottom</value>\n  </data>\n  <data name=\"label9.Text\" xml:space=\"preserve\">\n    <value>Width</value>\n  </data>\n  <data name=\"&gt;&gt;tbPageWidth.Name\" xml:space=\"preserve\">\n    <value>tbPageWidth</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"chkPHFirst.Text\" xml:space=\"preserve\">\n    <value>Print on first page</value>\n  </data>\n  <data name=\"&gt;&gt;label10.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 8</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"label6.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"label10.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>472, 302</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Name\" xml:space=\"preserve\">\n    <value>label6</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbMarginLeft.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"chkPFLast.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 16</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"chkPFFirst.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 16</value>\n  </data>\n  <data name=\"groupBox2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"tbReportDescription.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>304, 20</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidth.Name\" xml:space=\"preserve\">\n    <value>tbWidth</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"chkPFFirst.Text\" xml:space=\"preserve\">\n    <value>Print on first page</value>\n  </data>\n  <data name=\"&gt;&gt;tbPageHeight.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label11.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"tbReportAuthor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 9</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"label11.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Description:</value>\n  </data>\n  <data name=\"&gt;&gt;tbMarginLeft.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"label7.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>168, 40</value>\n  </data>\n  <data name=\"tbWidth.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 56</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Name\" xml:space=\"preserve\">\n    <value>label8</value>\n  </data>\n  <data name=\"chkPHLast.Text\" xml:space=\"preserve\">\n    <value>Print on last page</value>\n  </data>\n  <data name=\"groupBox4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;tbMarginBottom.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"groupBox4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>184, 56</value>\n  </data>\n  <data name=\"groupBox3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 16</value>\n  </data>\n  <data name=\"groupBox2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 155</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 32</value>\n  </data>\n  <data name=\"tbPageHeight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>224, 42</value>\n  </data>\n  <data name=\"label8.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 40</value>\n  </data>\n  <data name=\"tbReportDescription.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 32</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Width</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportDescription.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"label9.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 56</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox4.Name\" xml:space=\"preserve\">\n    <value>groupBox4</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportAuthor.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 16</value>\n  </data>\n  <data name=\"groupBox3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 235</value>\n  </data>\n  <data name=\"&gt;&gt;chkPFFirst.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkPHFirst.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;chkPHLast.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;chkPHLast.Name\" xml:space=\"preserve\">\n    <value>chkPHLast</value>\n  </data>\n  <data name=\"tbMarginLeft.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;chkPHFirst.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 16</value>\n  </data>\n  <data name=\"&gt;&gt;tbPageHeight.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Name\" xml:space=\"preserve\">\n    <value>label4</value>\n  </data>\n  <data name=\"&gt;&gt;label6.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Page</value>\n  </data>\n  <data name=\"&gt;&gt;tbPageWidth.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"tbMarginTop.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;chkPFLast.Parent\" xml:space=\"preserve\">\n    <value>groupBox4</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label11.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"chkPHLast.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 16</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>384, 67</value>\n  </data>\n  <data name=\"groupBox4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>216, 235</value>\n  </data>\n  <data name=\"&gt;&gt;chkPFFirst.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;chkPFFirst.Name\" xml:space=\"preserve\">\n    <value>chkPFFirst</value>\n  </data>\n  <data name=\"tbMarginRight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 20</value>\n  </data>\n  <data name=\"&gt;&gt;cbPageSize.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;label11.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"groupBox4.Text\" xml:space=\"preserve\">\n    <value>Page Footer</value>\n  </data>\n  <data name=\"tbReportAuthor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"groupBox2.Text\" xml:space=\"preserve\">\n    <value>Margins</value>\n  </data>\n  <data name=\"label11.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>52, 13</value>\n  </data>\n  <data name=\"&gt;&gt;chkPFLast.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbMarginTop.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>72, 40</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"groupBox2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>384, 72</value>\n  </data>\n  <data name=\"label10.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>52, 13</value>\n  </data>\n  <data name=\"tbPageHeight.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbMarginLeft.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 20</value>\n  </data>\n  <data name=\"tbMarginRight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>224, 16</value>\n  </data>\n  <data name=\"cbPageSize.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Height</value>\n  </data>\n  <data name=\"&gt;&gt;tbMarginTop.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/ReportCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"tbReportAuthor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>368, 20</value>\n  </data>\n  <data name=\"tbReportDescription.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>368, 20</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Автор:</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Описание:</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>448, 67</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Страница</value>\n  </data>\n  <data name=\"label11.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>46, 13</value>\n  </data>\n  <data name=\"label11.Text\" xml:space=\"preserve\">\n    <value>Размер</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Высота</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Ширина</value>\n  </data>\n  <data name=\"groupBox2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>448, 72</value>\n  </data>\n  <data name=\"groupBox2.Text\" xml:space=\"preserve\">\n    <value>Отступы</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Снизу</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Сверху</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Справа</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>Слева</value>\n  </data>\n  <data name=\"label9.Text\" xml:space=\"preserve\">\n    <value>Ширина</value>\n  </data>\n  <data name=\"groupBox3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 68</value>\n  </data>\n  <data name=\"groupBox3.Text\" xml:space=\"preserve\">\n    <value>Верхний колонтитул</value>\n  </data>\n  <data name=\"chkPHLast.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>114, 16</value>\n  </data>\n  <data name=\"chkPHLast.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 46</value>\n  </data>\n  <data name=\"chkPHLast.Text\" xml:space=\"preserve\">\n    <value>Печатать на последней странице</value>\n  </data>\n  <data name=\"chkPHFirst.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>12, 16</value>\n  </data>\n  <data name=\"chkPHFirst.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 46</value>\n  </data>\n  <data name=\"chkPHFirst.Text\" xml:space=\"preserve\">\n    <value>Печатать на первой странице</value>\n  </data>\n  <data name=\"groupBox4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>248, 235</value>\n  </data>\n  <data name=\"groupBox4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 68</value>\n  </data>\n  <data name=\"groupBox4.Text\" xml:space=\"preserve\">\n    <value>Нижний колонтитул</value>\n  </data>\n  <data name=\"chkPFLast.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>114, 16</value>\n  </data>\n  <data name=\"chkPFLast.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 46</value>\n  </data>\n  <data name=\"chkPFLast.Text\" xml:space=\"preserve\">\n    <value>Печатать на последней странице</value>\n  </data>\n  <data name=\"chkPFFirst.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 46</value>\n  </data>\n  <data name=\"chkPFFirst.Text\" xml:space=\"preserve\">\n    <value>Печатать на первой странице</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>480, 320</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/ReportNames.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Linq;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.Text.RegularExpressions;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// ReportNames is used to control the names of objects in the report\n\t/// </summary>\n\tinternal class ReportNames\n\t{\n\t\tXmlDocument _doc;\n\t\tList<XmlNode> _ReportNodes;\t\t// array of report nodes; used for tabbing around the nodes\n\t\tDictionary<string, XmlNode> _ReportItems;\t\t// name/xmlnode pairs of report items\n        Dictionary<string, XmlNode> _Groupings;\t\t// name/xmlnode pairs of grouping names\n\t\tpublic ReportNames(XmlDocument rDoc)\n\t\t{\n\t\t\t_doc = rDoc;\n\t\t\tBuildNames();\t\t\t// build the name hash tables\n\t\t}\n\n\t\tprivate void BuildNames()\n\t\t{\n            _ReportItems = new Dictionary<string, XmlNode>(StringComparer.InvariantCultureIgnoreCase);\n            _Groupings = new Dictionary<string, XmlNode>(StringComparer.InvariantCultureIgnoreCase);\n\t\t\t_ReportNodes = new List<XmlNode>();\n\t\t\tBuildNamesLoop(_doc.LastChild);\n\t\t}\n\n\t\tprivate void BuildNamesLoop(XmlNode xNode)\n\t\t{\n\t\t\tif (xNode == null)\n\t\t\t\treturn;\n\t\t\tforeach (XmlNode cNode in xNode)\n\t\t\t{\n\t\t\t\t// this is not a complete list of object names. It doesn't\n\t\t\t\t//  need to be complete but can be optimized so subobjects aren't \n\t\t\t\t//  pursued unnecessarily.  However, all reportitems and\n\t\t\t\t//  grouping must be traversed to get at all the names.\n\t\t\t\t// List should be built in paint order so\n\t\t\t\t//  that list of nodes is in correct tab order.\n\t\t\t\tswitch (cNode.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Report\":\n\t\t\t\t\t\tBuildNamesLoop(DesignXmlDraw.FindNextInHierarchy(cNode, \"PageHeader\", \"ReportItems\"));\n\t\t\t\t\t\tBuildNamesLoop(DesignXmlDraw.FindNextInHierarchy(cNode, \"Body\", \"ReportItems\"));\n\t\t\t\t\t\tBuildNamesLoop(DesignXmlDraw.FindNextInHierarchy(cNode, \"PageFooter\", \"ReportItems\"));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t// have a name but no subobjects\n\t\t\t\t\tcase \"Textbox\":\n\t\t\t\t\tcase \"Image\":\n\t\t\t\t\tcase \"Line\":\n\t\t\t\t\tcase \"Subreport\":\n                    case \"CustomReportItem\":\n\t\t\t\t\t\tthis.AddNode(cNode);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Chart\":\n\t\t\t\t\t\tthis.AddNode(cNode);\n\t\t\t\t\t\tBuildNamesLoop(DesignXmlDraw.FindNextInHierarchy(cNode, \"SeriesGroupings\"));\n\t\t\t\t\t\tBuildNamesLoop(DesignXmlDraw.FindNextInHierarchy(cNode, \"CategoryGroupings\"));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t// named object having subobjects\n\t\t\t\t\tcase \"Table\":\n\t\t\t\t\t\tthis.AddNode(cNode);\n\t\t\t\t\t\tBuildNamesLoop(DesignXmlDraw.FindNextInHierarchy(cNode, \"Header\", \"TableRows\"));\n\t\t\t\t\t\tBuildNamesLoop(DesignXmlDraw.FindNextInHierarchy(cNode, \"TableGroups\"));\n\t\t\t\t\t\tBuildNamesLoop(DesignXmlDraw.FindNextInHierarchy(cNode, \"Details\"));\n\t\t\t\t\t\tBuildNamesLoop(DesignXmlDraw.FindNextInHierarchy(cNode, \"Footer\", \"TableRows\"));\n\t\t\t\t\t\tbreak;\n                    case \"fyi:Grid\":\n                    case \"Grid\":\n                        this.AddNode(cNode);\n                        BuildNamesLoop(DesignXmlDraw.FindNextInHierarchy(cNode, \"Header\", \"TableRows\"));\n                        BuildNamesLoop(DesignXmlDraw.FindNextInHierarchy(cNode, \"Details\"));\n                        BuildNamesLoop(DesignXmlDraw.FindNextInHierarchy(cNode, \"Footer\", \"TableRows\"));\n                        break;\n                    case \"List\":\n\t\t\t\t\t\tthis.AddNode(cNode);\n\t\t\t\t\t\tBuildNamesLoop(DesignXmlDraw.FindNextInHierarchy(cNode, \"Grouping\"));\n\t\t\t\t\t\tBuildNamesLoop(DesignXmlDraw.FindNextInHierarchy(cNode, \"ReportItems\"));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Rectangle\":\n\t\t\t\t\t\tthis.AddNode(cNode);\n\t\t\t\t\t\tBuildNamesLoop(DesignXmlDraw.FindNextInHierarchy(cNode, \"ReportItems\"));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Matrix\":\n\t\t\t\t\t\tthis.AddNode(cNode);\n\t\t\t\t\t\tBuildNamesLoop(cNode);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t// don't have a name and don't have named subobjects with names\n\t\t\t\t\tcase \"Style\":\n\t\t\t\t\tcase \"Filters\":\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Grouping\":\n\t\t\t\t\t\tXmlAttribute xAttr = cNode.Attributes[\"Name\"];\n                        if (xAttr == null || _Groupings.ContainsKey(xAttr.Value))\n\t\t\t\t\t\t\tthis.GenerateGroupingName(cNode);\n                        else\n\t\t\t\t\t\t\t_Groupings.Add(xAttr.Value, cNode);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t// don't have a name but could have subobjects with names \n\t\t\t\t\tdefault:\n\t\t\t\t\t\tBuildNamesLoop(cNode);\t\t// recursively go thru entire report\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\t\t\t\n\t\t}\n\n\t\tinternal bool ChangeName(XmlNode xNode, string newName)\n\t\t{\n\t\t\tXmlNode fNode;\n            _ReportItems.TryGetValue(newName, out fNode);\n\t\t\tif (fNode != null)\n\t\t\t{\n\t\t\t\tif (fNode != xNode)\n\t\t\t\t\treturn false;\t\t\t\t// this would cause a duplicate\n\t\t\t\treturn true;\t\t\t\t\t// newName and oldName are the same\n\t\t\t}\n\n\t\t\tXmlAttribute xAttr = xNode.Attributes[\"Name\"];\n\t\t\t\n\t\t\t// Remove the old name (if one exists)\n\t\t\tif (xAttr != null)\t\n\t\t\t{\n\t\t\t\tstring oldName = xAttr.Value;\n\t\t\t\tthis._ReportItems.Remove(oldName);\n\t\t\t}\n\t\t\t\n\t\t\t// Set the new name\n\t\t\tSetElementAttribute(xNode, \"Name\", newName);\n\t\t\t_ReportItems.Add(newName, xNode);\t\n\t\t\treturn true;\n\t\t}\n\n\t\tinternal bool ChangeGroupName(XmlNode xNode, string newName)\n\t\t{\n\t\t\tXmlNode fNode;\n            _Groupings.TryGetValue(newName, out fNode);\n\t\t\tif (fNode != null)\n\t\t\t{\n\t\t\t\tif (fNode != xNode)\n\t\t\t\t\treturn false;\t\t\t\t// this would cause a duplicate\n\t\t\t\treturn true;\t\t\t\t\t// newName and oldName are the same\n\t\t\t}\n\n\t\t\tXmlAttribute xAttr = xNode.Attributes[\"Name\"];\n\t\t\t\n\t\t\t// Remove the old name (if one exists)\n\t\t\tif (xAttr != null)\t\n\t\t\t{\n\t\t\t\tstring oldName = xAttr.Value;\n\t\t\t\tthis._Groupings.Remove(oldName);\n\t\t\t}\n\t\t\t\n\t\t\t// Set the new name\n\t\t\tSetElementAttribute(xNode, \"Name\", newName);\n\t\t\t_Groupings.Add(newName, xNode);\t\n\t\t\treturn true;\n\t\t}\n        internal XmlNode GetRINodeFromName(string ri_name)\n        {\n            try\n            {\n                return _ReportItems[ri_name];\n            }\n            catch\n            {\n                return null;\n            }\n        }\n\t\tinternal XmlNode FindNext(XmlNode xNode)\n\t\t{\n\t\t\tif (_ReportNodes.Count <= 0)\n\t\t\t\treturn null;\n\t\t\tif (xNode == null)\n\t\t\t\treturn _ReportNodes[0];\n\t\t\tbool bNext = false;\n\t\t\tforeach (XmlNode nNode in _ReportNodes)\n\t\t\t{\n\t\t\t\tif (bNext)\n\t\t\t\t\treturn nNode;\n\t\t\t\tif (nNode == xNode)\n\t\t\t\t\tbNext = true;\n\t\t\t}\n\t\t\treturn _ReportNodes[0];\n\t\t}\n\t\t\n\t\tinternal XmlNode FindPrior(XmlNode xNode)\n\t\t{\n\t\t\tif (_ReportItems.Count <= 0)\n\t\t\t\treturn null;\n\t\t\tif (xNode == null)\n\t\t\t\treturn _ReportNodes[0];\n\t\t\t\n\t\t\tXmlNode previous=null;\n\t\t\tforeach (XmlNode nNode in _ReportNodes)\n\t\t\t{\n\t\t\t\tif (nNode == xNode)\n\t\t\t\t{\n\t\t\t\t\tif (previous == null)\n\t\t\t\t\t\treturn _ReportNodes[_ReportNodes.Count-1];\n\t\t\t\t\telse\n\t\t\t\t\t\treturn previous;\n\t\t\t\t}\n\t\t\t\tprevious = nNode;\n\t\t\t}\n\t\t\treturn _ReportNodes[_ReportNodes.Count-1];\n\t\t}\n\n\t\tinternal ICollection ReportItemNames\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\treturn _ReportItems.Keys;\n\t\t\t}\n\t\t}\n\t\t\n\t\tinternal ICollection ReportItems\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\treturn _ReportItems.Values;\n\t\t\t}\n\t\t}\n\n\t\tinternal void AddNode(XmlNode xNode)\n\t\t{\n\t\t\tXmlAttribute xAttr = xNode.Attributes[\"Name\"];\n\t\t\tif (xAttr == null)\n\t\t\t\tGenerateName(xNode);\t// when no name; we generate one\n\t\t\telse if (_ReportItems.ContainsKey(xAttr.Value))\n\t\t\t\tGenerateName(xNode);\t// when duplicate name; we generate another; this can be a problem but...\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis._ReportItems.Add(xAttr.Value, xNode);\n\t\t\t\tthis._ReportNodes.Add(xNode);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Generates a new name based on the object type.   Replaces the old name in the node but \n\t\t/// does not delete it from the hash.   Use when you're copying nodes and need another name.\n\t\t/// </summary>\n\t\t/// <param name=\"xNode\"></param>\n\t\t/// <returns></returns>\n\t\tinternal string GenerateName(XmlNode xNode)\n\t\t{\n\t\t\tstring basename = xNode.Name;\n            if (basename.StartsWith(\"fyi:\"))\n                basename = basename.Substring(4);\n\t\t\tstring name;\n\t\t\tint index=1;\n\t\t\twhile (true)\n\t\t\t{\n\t\t\t\tname = basename + index.ToString();\n\t\t\t\tif (!_ReportItems.ContainsKey(name))\n\t\t\t\t{\n\t\t\t\t\tSetElementAttribute(xNode, \"Name\", name);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t}\n\t\t\t_ReportItems.Add(name, xNode);\t\t// add generated name \n\t\t\tthis._ReportNodes.Add(xNode);\n\t\t\treturn name;\n\t\t}\n\n\t\tinternal string GenerateGroupingName(XmlNode xNode)\n\t\t{\n\t\t\tstring basename=xNode.ParentNode.Name + \"Group\";\n\t\t\tstring name;\n\t\t\tint index=1;\n\t\t\tList<string> dsets = new List<string>(this.DataSetNames);\n\t\t\twhile (true)\n\t\t\t{\n\t\t\t\tname = basename + index.ToString();\n\t\t\t\tif (_Groupings.ContainsKey(name) == false && \n\t\t\t\t\tdsets.IndexOf(name) < 0 &&\n\t\t\t\t\t_ReportItems.ContainsKey(name) == false)\n\t\t\t\t{\n\t\t\t\t\tSetElementAttribute(xNode, \"Name\", name);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t}\n\t\t\t_Groupings.Add(name, xNode);\n\t\t\treturn name;\n\t\t}\n\n\t\tinternal string NameError(XmlNode xNode, string name)\n\t\t{\n\t\t\tif (name == null || name.Trim().Length <= 0)\n\t\t\t\treturn \"Name must be provided.\";\n\t\t\tif (!IsNameValid(name))\n\t\t\t\treturn \"Invalid characters in name.\";\n\n            XmlNode fNode;\n            _ReportItems.TryGetValue(name, out fNode);\n\t\t\tif (fNode == xNode)\n\t\t\t\treturn null;\n\n            if (fNode != null)\n                return DescriptionDuplicateNameError(name, fNode);\n\n            // Grouping; also restrict to not being same name as any group or dataset\n            if (xNode.Name == \"Grouping\")\n\t\t\t{\n\t\t\t\t_Groupings.TryGetValue(name, out fNode);\n\t\t\t\tif (fNode != null)\n\t\t\t\t\treturn DescriptionDuplicateNameError(name, fNode);\n                List<string> dsets = new List<string>(this.DataSetNames);\n\t\t\t\tif (dsets.IndexOf(name) >= 0)\n\t\t\t\t\treturn \"Duplicate name of the dataset :\"+name;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n        private string DescriptionDuplicateNameError(string name, XmlNode fNode)\n        {\n            return String.Format(Strings.ReportNames_DescriptionDuplicateNameError, name, fNode.Name);\n        }\n\n\t\tinternal string GroupingNameCheck(XmlNode xNode, string name)\n\t\t{\n\t\t\tif (name == null || name.Trim().Length <= 0)\n\t\t\t\treturn \"Name must be provided.\";\n\t\t\tif (!IsNameValid(name))\n\t\t\t\treturn \"Invalid characters in name.\";\n\n\t\t\t// Grouping; also restrict to not being same name as any group or dataset\n\t\t\tXmlNode fNode;\n            _Groupings.TryGetValue(name, out fNode);\n\t\t\tif (fNode != null && fNode != xNode)\n\t\t\t\treturn \"Duplicate name.\";\n            List<string> dsets = new List<string>(this.DataSetNames);\n\t\t\tif (dsets.IndexOf(name) >= 0)\n\t\t\t\treturn \"Duplicate name.\";\n\n\t\t\treturn null;\n\t\t}\n\n\t\tstatic internal bool IsNameValid(string name)\n\t\t{\n\t\t\tif (name == null || name.Length == 0)\n\t\t\t\treturn false;\n\n\t\t\t// TODO use algorithm in http://www.unicode.org/unicode/reports/tr15/tr15-18.html#Programming%20Language%20Identifiers\n\t\t\t//  below regular expression isn't completely correct but matches most ascii language users\n\t\t\t//  expectations\n\t\t\tMatch m = Regex.Match(name, @\"\\A[a-zA-Z_]+[a-zA-Z_0-9]*\\Z\");\n\t\t\treturn m.Success;\n\t\t}\n\n\t\tinternal void RemoveName(XmlNode xNode)\n\t\t{\n\t\t\tif (xNode == null)\n\t\t\t\treturn;\n\t\t\tXmlAttribute xAttr = xNode.Attributes[\"Name\"];\n\t\t\tif (xAttr == null)\t\n\t\t\t\treturn;\n\n\t\t\t_ReportItems.Remove(xAttr.Value);\n\t\t\t_ReportNodes.Remove(xNode);\n\t\t\tRemoveChildren(xNode);\n\t\t}\n\n\t\tprivate void RemoveChildren(XmlNode xNode)\n\t\t{\n\t\t\tXmlAttribute xAttr;\n\t\t\tforeach (XmlNode cNode in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tswitch (cNode.Name)\n\t\t\t\t{\n\t\t\t\t\t\t// have a name but no subobjects\n\t\t\t\t\tcase \"Textbox\":\n\t\t\t\t\tcase \"Image\":\n\t\t\t\t\tcase \"Line\":\n\t\t\t\t\tcase \"Subreport\":\n\t\t\t\t\tcase \"Chart\":\n\t\t\t\t\t\txAttr = cNode.Attributes[\"Name\"];\n\t\t\t\t\t\tif (xAttr != null)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t_ReportItems.Remove(xAttr.Value);\n\t\t\t\t\t\t\t_ReportNodes.Remove(cNode);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t// named object having subobjects\n\t\t\t\t\tcase \"Table\":\n\t\t\t\t\tcase \"List\":\n\t\t\t\t\tcase \"Rectangle\":\n\t\t\t\t\tcase \"Matrix\":\n\t\t\t\t\t\tRemoveChildren(cNode);\n\t\t\t\t\t\txAttr = cNode.Attributes[\"Name\"];\n\t\t\t\t\t\tif (xAttr != null)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t_ReportItems.Remove(xAttr.Value);\n\t\t\t\t\t\t\t_ReportNodes.Remove(cNode);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t// don't have a name and don't have named subobjects with names\n\t\t\t\t\tcase \"Style\":\n\t\t\t\t\tcase \"Filters\":\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t// don't have a name but could have subobjects with names \n\t\t\t\t\tdefault:\n\t\t\t\t\t\tRemoveChildren(cNode);\t\t// recursively go down the hierarchy\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tprivate void SetElementAttribute(XmlNode parent, string name, string val)\n\t\t{\n\t\t\tXmlAttribute attr = parent.Attributes[name];\n\t\t\tif (attr != null)\n\t\t\t{\n\t\t\t\tattr.Value = val;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tattr = _doc.CreateAttribute(name);\n\t\t\t\tattr.Value = val;\n\t\t\t\tparent.Attributes.Append(attr);\n\t\t\t}\n\t\t\treturn;\n\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a collection of the GroupingNames\n\t\t/// </summary>\n\t\tinternal string[] GroupingNames\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (_Groupings == null ||\n\t\t\t\t\t_Groupings.Count == 0)\n\t\t\t\t\treturn null;\n\t\t\t\tstring[] gn = new string[_Groupings.Count];\n\t\t\t\tint i=0;\n\t\t\t\tforeach (string o in _Groupings.Keys)\n\t\t\t\t\tgn[i++] = o;\n\t\t\t\treturn gn;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a collection of the DataSetNames\n\t\t/// </summary>\n\t\tinternal string[] DataSetNames\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tList<string> ds = new List<string>();\n\t\t\t\tXmlNode rNode = _doc.LastChild;\n\t\t\t\tXmlNode node = DesignXmlDraw.FindNextInHierarchy(rNode, \"DataSets\");\n\t\t\t\tif (node == null)\n\t\t\t\t\treturn ds.ToArray();\n\t\t\t\tforeach (XmlNode cNode in node.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (cNode.NodeType != XmlNodeType.Element || \n\t\t\t\t\t\tcNode.Name != \"DataSet\")\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tXmlAttribute xAttr = cNode.Attributes[\"Name\"];\n\t\t\t\t\tif (xAttr != null)\n\t\t\t\t\t\tds.Add(xAttr.Value);\n\t\t\t\t}\n\n\t\t\t\treturn ds.ToArray();\n\t\t\t}\n\t\t}\n\n\t\tinternal XmlNode DataSourceName(string dsn)\n\t\t{\n\t\t\tXmlNode rNode = _doc.LastChild;\n\t\t\tXmlNode node = DesignXmlDraw.FindNextInHierarchy(rNode, \"DataSources\");\n\t\t\tif (node == null)\n\t\t\t\treturn null;\n\t\t\tforeach (XmlNode cNode in node.ChildNodes)\n\t\t\t{\n\t\t\t\tif (cNode.Name != \"DataSource\")\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlAttribute xAttr = cNode.Attributes[\"Name\"];\n\t\t\t\tif (xAttr != null && xAttr.Value == dsn)\n\t\t\t\t\treturn cNode;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a collection of the DataSourceNames\n\t\t/// </summary>\n\t\tinternal string[] DataSourceNames\n\t\t{\n\t\t\tget \n\t\t\t{\n                List<string> ds = new List<string>();\n\t\t\t\tXmlNode rNode = _doc.LastChild;\n\t\t\t\tXmlNode node = DesignXmlDraw.FindNextInHierarchy(rNode, \"DataSources\");\n\t\t\t\tif (node == null)\n\t\t\t\t\treturn ds.ToArray();\n\t\t\t\tforeach (XmlNode cNode in node.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (cNode.NodeType != XmlNodeType.Element || \n\t\t\t\t\t\tcNode.Name != \"DataSource\")\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tXmlAttribute xAttr = cNode.Attributes[\"Name\"];\n\t\t\t\t\tif (xAttr != null)\n\t\t\t\t\t\tds.Add(xAttr.Value);\n\t\t\t\t}\n\n\t\t\t\treturn ds.ToArray();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a collection of the EmbeddedImage names\n\t\t/// </summary>\n\t\tinternal string[] EmbeddedImageNames\n\t\t{\n\t\t\tget \n\t\t\t{\n                List<string> ds = new List<string>();\n\t\t\t\tXmlNode rNode = _doc.LastChild;\n\t\t\t\tXmlNode node = DesignXmlDraw.FindNextInHierarchy(rNode, \"EmbeddedImages\");\n\t\t\t\tif (node == null)\n\t\t\t\t\treturn ds.ToArray();\n\t\t\t\tforeach (XmlNode cNode in node.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (cNode.NodeType != XmlNodeType.Element || \n\t\t\t\t\t\tcNode.Name != \"EmbeddedImage\")\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tXmlAttribute xAttr = cNode.Attributes[\"Name\"];\n\t\t\t\t\tif (xAttr != null)\n\t\t\t\t\t\tds.Add(xAttr.Value);\n\t\t\t\t}\n\n\t\t\t\treturn ds.ToArray();\n\t\t\t}\n\t\t}\n\n\n\t\t/// <summary>\n\t\t/// Gets the fields within the requested dataset.  If dataset is null then the first\n\t\t/// dataset is used.\n\t\t/// </summary>\n\t\t/// <param name=\"dataSetName\"></param>\n\t\t/// <param name=\"asExpression\">When true names are returned as expressions.</param>\n\t\t/// <returns></returns>\n\t\tinternal string[] GetFields(string dataSetName, bool asExpression)\n\t\t{\n\t\t\tXmlNode nodes = DesignXmlDraw.FindNextInHierarchy(_doc.LastChild, \"DataSets\");\n\t\t\tif (nodes == null || !nodes.HasChildNodes)\n\t\t\t\treturn null;\n\n\t\t\t// Find the right dataset\n\t\t\tXmlNode dataSet=null;\n\t\t\tforeach (XmlNode ds in nodes.ChildNodes)\n\t\t\t{\n\t\t\t\tif (ds.Name != \"DataSet\")\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlAttribute xAttr = ds.Attributes[\"Name\"];\n\t\t\t\tif (xAttr == null)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (xAttr.Value == dataSetName || \n\t\t\t\t\tdataSetName == null || dataSetName == \"\")\n\t\t\t\t{\n\t\t\t\t\tdataSet = ds;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (dataSet == null)\n\t\t\t\treturn null;\n\t\t\t\n\t\t\t// Find the fields\n\t\t\tXmlNode fields = DesignXmlDraw.FindNextInHierarchy(dataSet, \"Fields\");\n\t\t\tif (fields == null || !fields.HasChildNodes)\n\t\t\t\treturn null;\n\t\t\tStringCollection st = new StringCollection();\n\t\t\tforeach (XmlNode f in fields.ChildNodes)\n\t\t\t{\n\t\t\t\tif (f.Attributes == null)\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlAttribute xAttr = f.Attributes[\"Name\"];\n\t\t\t\tif (xAttr == null)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (asExpression)\n\t\t\t\t\tst.Add(string.Format(\"=Fields!{0}.Value\", xAttr.Value));\n\t\t\t\telse\n\t\t\t\t\tst.Add(xAttr.Value);\n\t\t\t}\n\t\t\tif (st.Count <= 0)\n\t\t\t\treturn null;\n\n\t\t\tstring[] result = new string[st.Count];\n\t\t\tst.CopyTo(result, 0);\n\n\t\t\treturn result;\n\t\t}\n\n\n\n        internal string GetReportParameterDefaultValue(string parameterExpression)\n        {\n            var root = _doc.DocumentElement;\n\n            XmlNode rNode = _doc.LastChild;\n            XmlNode rpsNode = DesignXmlDraw.FindNextInHierarchy(rNode, \"ReportParameters\");\n            if (rpsNode == null)\n                return null;\n\n            var parameterName = DesignerUtility.ExtractParameterNameFromParameterExpression(parameterExpression);\n\n            var parameter = rpsNode.ChildNodes.Cast<XmlNode>()\n                .FirstOrDefault(n => n.Attributes[\"Name\"].Value == parameterName);\n\n            if (parameter == null)\n                //ERROR, parameter not found;\n                return null;\n\n            var defaultValue = parameter.ChildNodes.Cast<XmlNode>()\n                .FirstOrDefault(n => n.Name == \"DefaultValue\");\n            if (defaultValue == null)\n            {\n                // ERROR, no default value;\n                return null;\n            }\n\n            // selecting DefaultValue/Values/Value\n            return defaultValue.FirstChild.FirstChild.InnerText;\n        }\n\n        internal string[] GetReportParameters(bool asExpression)\n\t\t{\n\t\t\tXmlNode rNode = _doc.LastChild;\n\t\t\tXmlNode rpsNode = DesignXmlDraw.FindNextInHierarchy(rNode, \"ReportParameters\");\n\t\t\tif (rpsNode == null)\n\t\t\t\treturn null;\n\t\t\tStringCollection st = new StringCollection();\n\t\t\tforeach (XmlNode repNode in rpsNode)\n\t\t\t{\t\n\t\t\t\tif (repNode.Name != \"ReportParameter\")\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlAttribute nAttr = repNode.Attributes[\"Name\"];\n\t\t\t\tif (nAttr == null)\t// shouldn't really happen\n\t\t\t\t\tcontinue;\n\t\t\t\tif (asExpression)\n\t\t\t\t\tst.Add(string.Format(\"=Parameters!{0}.Value\", nAttr.Value));\n\t\t\t\telse\n\t\t\t\t\tst.Add(nAttr.Value);\n\t\t\t}\n\n\t\t\tif (st.Count <= 0)\n\t\t\t\treturn null;\n\n\t\t\tstring[] result = new string[st.Count];\n\t\t\tst.CopyTo(result, 0);\n\n\t\t\treturn result;\n\t\t}\n\n        /// <summary>\n        /// EBN 30/03/2014\n        /// Get the modules defined in the report if any\n        /// </summary>\n        /// <param name=\"asExpression\">When true names are returned as expressions.</param>\n        /// <returns></returns>\n        internal string[] GetReportModules(bool asExpression)\n        {\n            XmlNode rNode = _doc.LastChild;\n            XmlNode rpsNode = DesignXmlDraw.FindNextInHierarchy(rNode, \"CodeModules\");\n            if (rpsNode == null)\n                return null;\n            StringCollection st = new StringCollection();\n            foreach (XmlNode repNode in rpsNode)\n            {\n                if (repNode.Name != \"CodeModule\")\n                    continue;\n                if (repNode.InnerText == \"\")\t// shouldn't really happen\n                    continue;\n                if (asExpression)\n                    st.Add(string.Format(\"=Module!{0}\", repNode.InnerText));\n                else\n                    st.Add(repNode.InnerText);\n            }\n\n            if (st.Count <= 0)\n                return null;\n\n            string[] result = new string[st.Count];\n            st.CopyTo(result, 0);\n\n            return result;\n        }\n\n        /// <summary>\n        /// EBN 30/03/2014\n        /// Get the modules defined in the report if any\n        /// </summary>\n        /// <param name=\"asExpression\">When true names are returned as expressions.</param>\n        /// <returns></returns>\n        internal string[] GetReportClasses(bool asExpression)\n        {\n            XmlNode rNode = _doc.LastChild;\n            XmlNode rpsNode = DesignXmlDraw.FindNextInHierarchy(rNode, \"Classes\");\n            if (rpsNode == null)\n                return null;\n            StringCollection st = new StringCollection();\n            foreach (XmlNode repNode in rpsNode)\n            {\n                string ClassName = \"\";\n                string InstanceName = \"\";\n\n                if (repNode.Name != \"Class\")\n                    continue;\n                if (repNode.InnerText == \"\")\t// shouldn't really happen\n                    continue;\n                foreach (XmlNode claNode in repNode)\n                {\n                    if (claNode.Name == \"ClassName\")\n                        ClassName = claNode.InnerText;\n                    if (claNode.Name == \"InstanceName\")\n                        InstanceName = claNode.InnerText;\n                }\n                if (ClassName != \"\")\n                {\n                    if (asExpression)\n                        st.Add(string.Format(\"=({0}){1}\",ClassName,InstanceName));\n                    else\n                        st.Add(string.Format(\"{0}\", ClassName));\n                }\n            }\n\n            if (st.Count <= 0)\n                return null;\n\n            string[] result = new string[st.Count];\n            st.CopyTo(result, 0);\n\n            return result;\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "RdlDesign/ReportParameterCtl.Designer.cs",
    "content": "namespace Majorsilence.Reporting.RdlDesign\n{\n    partial class ReportParameterCtl\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.Container components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (components != null)\n                {\n                    components.Dispose();\n                }\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ReportParameterCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.lbParameters = new System.Windows.Forms.ListBox();\n\t\t\tthis.bAdd = new System.Windows.Forms.Button();\n\t\t\tthis.bRemove = new System.Windows.Forms.Button();\n\t\t\tthis.bParmDown = new System.Windows.Forms.Button();\n\t\t\tthis.bParmUp = new System.Windows.Forms.Button();\n\t\t\tthis.gbPropertyEdit = new System.Windows.Forms.GroupBox();\n\t\t\tthis.ckbParmMultiValue = new System.Windows.Forms.CheckBox();\n\t\t\tthis.gbValidValues = new System.Windows.Forms.GroupBox();\n\t\t\tthis.cbValidDisplayField = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbValidFields = new System.Windows.Forms.ComboBox();\n\t\t\tthis.bValidValues = new System.Windows.Forms.Button();\n\t\t\tthis.lDisplayField = new System.Windows.Forms.Label();\n\t\t\tthis.lValidValuesField = new System.Windows.Forms.Label();\n\t\t\tthis.cbValidDataSets = new System.Windows.Forms.ComboBox();\n\t\t\tthis.rbValues = new System.Windows.Forms.RadioButton();\n\t\t\tthis.rbDataSet = new System.Windows.Forms.RadioButton();\n\t\t\tthis.tbParmValidValues = new System.Windows.Forms.TextBox();\n\t\t\tthis.ckbParmAllowBlank = new System.Windows.Forms.CheckBox();\n\t\t\tthis.ckbParmAllowNull = new System.Windows.Forms.CheckBox();\n\t\t\tthis.tbParmPrompt = new System.Windows.Forms.TextBox();\n\t\t\tthis.lParmPrompt = new System.Windows.Forms.Label();\n\t\t\tthis.cbParmType = new System.Windows.Forms.ComboBox();\n\t\t\tthis.lParmType = new System.Windows.Forms.Label();\n\t\t\tthis.tbParmName = new System.Windows.Forms.TextBox();\n\t\t\tthis.lParmName = new System.Windows.Forms.Label();\n\t\t\tthis.gbDefaultValues = new System.Windows.Forms.GroupBox();\n\t\t\tthis.cbDefaultValueField = new System.Windows.Forms.ComboBox();\n\t\t\tthis.tbParmDefaultValue = new System.Windows.Forms.TextBox();\n\t\t\tthis.bDefaultValues = new System.Windows.Forms.Button();\n\t\t\tthis.lDefaultValueFields = new System.Windows.Forms.Label();\n\t\t\tthis.cbDefaultDataSets = new System.Windows.Forms.ComboBox();\n\t\t\tthis.rbDefaultValues = new System.Windows.Forms.RadioButton();\n\t\t\tthis.rbDefaultDataSetName = new System.Windows.Forms.RadioButton();\n\t\t\tthis.gbPropertyEdit.SuspendLayout();\n\t\t\tthis.gbValidValues.SuspendLayout();\n\t\t\tthis.gbDefaultValues.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// lbParameters\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lbParameters, \"lbParameters\");\n\t\t\tthis.lbParameters.Name = \"lbParameters\";\n\t\t\tthis.lbParameters.SelectedIndexChanged += new System.EventHandler(this.lbParameters_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// bAdd\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bAdd, \"bAdd\");\n\t\t\tthis.bAdd.Name = \"bAdd\";\n\t\t\tthis.bAdd.Click += new System.EventHandler(this.bAdd_Click);\n\t\t\t// \n\t\t\t// bRemove\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bRemove, \"bRemove\");\n\t\t\tthis.bRemove.Name = \"bRemove\";\n\t\t\tthis.bRemove.Click += new System.EventHandler(this.bRemove_Click);\n\t\t\t// \n\t\t\t// bParmDown\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bParmDown, \"bParmDown\");\n\t\t\tthis.bParmDown.Name = \"bParmDown\";\n\t\t\tthis.bParmDown.Click += new System.EventHandler(this.bParmDown_Click);\n\t\t\t// \n\t\t\t// bParmUp\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bParmUp, \"bParmUp\");\n\t\t\tthis.bParmUp.Name = \"bParmUp\";\n\t\t\tthis.bParmUp.Click += new System.EventHandler(this.bParmUp_Click);\n\t\t\t// \n\t\t\t// gbPropertyEdit\n\t\t\t// \n\t\t\tresources.ApplyResources(this.gbPropertyEdit, \"gbPropertyEdit\");\n\t\t\tthis.gbPropertyEdit.Controls.Add(this.ckbParmMultiValue);\n\t\t\tthis.gbPropertyEdit.Controls.Add(this.gbValidValues);\n\t\t\tthis.gbPropertyEdit.Controls.Add(this.ckbParmAllowBlank);\n\t\t\tthis.gbPropertyEdit.Controls.Add(this.ckbParmAllowNull);\n\t\t\tthis.gbPropertyEdit.Controls.Add(this.tbParmPrompt);\n\t\t\tthis.gbPropertyEdit.Controls.Add(this.lParmPrompt);\n\t\t\tthis.gbPropertyEdit.Controls.Add(this.cbParmType);\n\t\t\tthis.gbPropertyEdit.Controls.Add(this.lParmType);\n\t\t\tthis.gbPropertyEdit.Controls.Add(this.tbParmName);\n\t\t\tthis.gbPropertyEdit.Controls.Add(this.lParmName);\n\t\t\tthis.gbPropertyEdit.Controls.Add(this.gbDefaultValues);\n\t\t\tthis.gbPropertyEdit.Name = \"gbPropertyEdit\";\n\t\t\tthis.gbPropertyEdit.TabStop = false;\n\t\t\t// \n\t\t\t// ckbParmMultiValue\n\t\t\t// \n\t\t\tresources.ApplyResources(this.ckbParmMultiValue, \"ckbParmMultiValue\");\n\t\t\tthis.ckbParmMultiValue.Name = \"ckbParmMultiValue\";\n\t\t\tthis.ckbParmMultiValue.CheckedChanged += new System.EventHandler(this.ckbParmMultiValue_CheckedChanged);\n\t\t\t// \n\t\t\t// gbValidValues\n\t\t\t// \n\t\t\tresources.ApplyResources(this.gbValidValues, \"gbValidValues\");\n\t\t\tthis.gbValidValues.Controls.Add(this.cbValidDisplayField);\n\t\t\tthis.gbValidValues.Controls.Add(this.cbValidFields);\n\t\t\tthis.gbValidValues.Controls.Add(this.bValidValues);\n\t\t\tthis.gbValidValues.Controls.Add(this.lDisplayField);\n\t\t\tthis.gbValidValues.Controls.Add(this.lValidValuesField);\n\t\t\tthis.gbValidValues.Controls.Add(this.cbValidDataSets);\n\t\t\tthis.gbValidValues.Controls.Add(this.rbValues);\n\t\t\tthis.gbValidValues.Controls.Add(this.rbDataSet);\n\t\t\tthis.gbValidValues.Controls.Add(this.tbParmValidValues);\n\t\t\tthis.gbValidValues.Name = \"gbValidValues\";\n\t\t\tthis.gbValidValues.TabStop = false;\n\t\t\t// \n\t\t\t// cbValidDisplayField\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbValidDisplayField, \"cbValidDisplayField\");\n\t\t\tthis.cbValidDisplayField.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbValidDisplayField.Name = \"cbValidDisplayField\";\n\t\t\tthis.cbValidDisplayField.SelectedIndexChanged += new System.EventHandler(this.cbValidDisplayField_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// cbValidFields\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbValidFields, \"cbValidFields\");\n\t\t\tthis.cbValidFields.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbValidFields.Name = \"cbValidFields\";\n\t\t\tthis.cbValidFields.SelectedIndexChanged += new System.EventHandler(this.cbValidFields_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// bValidValues\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bValidValues, \"bValidValues\");\n\t\t\tthis.bValidValues.Name = \"bValidValues\";\n\t\t\tthis.bValidValues.Click += new System.EventHandler(this.bValidValues_Click);\n\t\t\t// \n\t\t\t// lDisplayField\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lDisplayField, \"lDisplayField\");\n\t\t\tthis.lDisplayField.Name = \"lDisplayField\";\n\t\t\t// \n\t\t\t// lValidValuesField\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lValidValuesField, \"lValidValuesField\");\n\t\t\tthis.lValidValuesField.Name = \"lValidValuesField\";\n\t\t\t// \n\t\t\t// cbValidDataSets\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbValidDataSets, \"cbValidDataSets\");\n\t\t\tthis.cbValidDataSets.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbValidDataSets.Name = \"cbValidDataSets\";\n\t\t\tthis.cbValidDataSets.SelectedIndexChanged += new System.EventHandler(this.cbValidDataSets_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// rbValues\n\t\t\t// \n\t\t\tresources.ApplyResources(this.rbValues, \"rbValues\");\n\t\t\tthis.rbValues.Name = \"rbValues\";\n\t\t\tthis.rbValues.CheckedChanged += new System.EventHandler(this.rbValues_CheckedChanged);\n\t\t\t// \n\t\t\t// rbDataSet\n\t\t\t// \n\t\t\tresources.ApplyResources(this.rbDataSet, \"rbDataSet\");\n\t\t\tthis.rbDataSet.Name = \"rbDataSet\";\n\t\t\tthis.rbDataSet.CheckedChanged += new System.EventHandler(this.rbDataSet_CheckedChanged);\n\t\t\t// \n\t\t\t// tbParmValidValues\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbParmValidValues, \"tbParmValidValues\");\n\t\t\tthis.tbParmValidValues.Name = \"tbParmValidValues\";\n\t\t\tthis.tbParmValidValues.ReadOnly = true;\n\t\t\t// \n\t\t\t// ckbParmAllowBlank\n\t\t\t// \n\t\t\tresources.ApplyResources(this.ckbParmAllowBlank, \"ckbParmAllowBlank\");\n\t\t\tthis.ckbParmAllowBlank.Name = \"ckbParmAllowBlank\";\n\t\t\tthis.ckbParmAllowBlank.CheckedChanged += new System.EventHandler(this.ckbParmAllowBlank_CheckedChanged);\n\t\t\t// \n\t\t\t// ckbParmAllowNull\n\t\t\t// \n\t\t\tresources.ApplyResources(this.ckbParmAllowNull, \"ckbParmAllowNull\");\n\t\t\tthis.ckbParmAllowNull.Name = \"ckbParmAllowNull\";\n\t\t\tthis.ckbParmAllowNull.CheckedChanged += new System.EventHandler(this.ckbParmAllowNull_CheckedChanged);\n\t\t\t// \n\t\t\t// tbParmPrompt\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbParmPrompt, \"tbParmPrompt\");\n\t\t\tthis.tbParmPrompt.Name = \"tbParmPrompt\";\n\t\t\tthis.tbParmPrompt.TextChanged += new System.EventHandler(this.tbParmPrompt_TextChanged);\n\t\t\t// \n\t\t\t// lParmPrompt\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lParmPrompt, \"lParmPrompt\");\n\t\t\tthis.lParmPrompt.Name = \"lParmPrompt\";\n\t\t\t// \n\t\t\t// cbParmType\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbParmType, \"cbParmType\");\n\t\t\tthis.cbParmType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbParmType.Items.AddRange(new object[] {\n            resources.GetString(\"cbParmType.Items\"),\n            resources.GetString(\"cbParmType.Items1\"),\n            resources.GetString(\"cbParmType.Items2\"),\n            resources.GetString(\"cbParmType.Items3\"),\n            resources.GetString(\"cbParmType.Items4\")});\n\t\t\tthis.cbParmType.Name = \"cbParmType\";\n\t\t\tthis.cbParmType.SelectedIndexChanged += new System.EventHandler(this.cbParmType_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// lParmType\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lParmType, \"lParmType\");\n\t\t\tthis.lParmType.Name = \"lParmType\";\n\t\t\t// \n\t\t\t// tbParmName\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbParmName, \"tbParmName\");\n\t\t\tthis.tbParmName.Name = \"tbParmName\";\n\t\t\tthis.tbParmName.TextChanged += new System.EventHandler(this.tbParmName_TextChanged);\n\t\t\t// \n\t\t\t// lParmName\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lParmName, \"lParmName\");\n\t\t\tthis.lParmName.Name = \"lParmName\";\n\t\t\t// \n\t\t\t// gbDefaultValues\n\t\t\t// \n\t\t\tresources.ApplyResources(this.gbDefaultValues, \"gbDefaultValues\");\n\t\t\tthis.gbDefaultValues.Controls.Add(this.cbDefaultValueField);\n\t\t\tthis.gbDefaultValues.Controls.Add(this.tbParmDefaultValue);\n\t\t\tthis.gbDefaultValues.Controls.Add(this.bDefaultValues);\n\t\t\tthis.gbDefaultValues.Controls.Add(this.lDefaultValueFields);\n\t\t\tthis.gbDefaultValues.Controls.Add(this.cbDefaultDataSets);\n\t\t\tthis.gbDefaultValues.Controls.Add(this.rbDefaultValues);\n\t\t\tthis.gbDefaultValues.Controls.Add(this.rbDefaultDataSetName);\n\t\t\tthis.gbDefaultValues.Name = \"gbDefaultValues\";\n\t\t\tthis.gbDefaultValues.TabStop = false;\n\t\t\t// \n\t\t\t// cbDefaultValueField\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbDefaultValueField, \"cbDefaultValueField\");\n\t\t\tthis.cbDefaultValueField.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbDefaultValueField.Name = \"cbDefaultValueField\";\n\t\t\tthis.cbDefaultValueField.SelectedIndexChanged += new System.EventHandler(this.cbDefaultValueField_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// tbParmDefaultValue\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbParmDefaultValue, \"tbParmDefaultValue\");\n\t\t\tthis.tbParmDefaultValue.Name = \"tbParmDefaultValue\";\n\t\t\tthis.tbParmDefaultValue.ReadOnly = true;\n\t\t\t// \n\t\t\t// bDefaultValues\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bDefaultValues, \"bDefaultValues\");\n\t\t\tthis.bDefaultValues.Name = \"bDefaultValues\";\n\t\t\tthis.bDefaultValues.Click += new System.EventHandler(this.bDefaultValues_Click);\n\t\t\t// \n\t\t\t// lDefaultValueFields\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lDefaultValueFields, \"lDefaultValueFields\");\n\t\t\tthis.lDefaultValueFields.Name = \"lDefaultValueFields\";\n\t\t\t// \n\t\t\t// cbDefaultDataSets\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbDefaultDataSets, \"cbDefaultDataSets\");\n\t\t\tthis.cbDefaultDataSets.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbDefaultDataSets.Name = \"cbDefaultDataSets\";\n\t\t\tthis.cbDefaultDataSets.SelectedIndexChanged += new System.EventHandler(this.cbDefaultDataSets_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// rbDefaultValues\n\t\t\t// \n\t\t\tresources.ApplyResources(this.rbDefaultValues, \"rbDefaultValues\");\n\t\t\tthis.rbDefaultValues.Name = \"rbDefaultValues\";\n\t\t\tthis.rbDefaultValues.CheckedChanged += new System.EventHandler(this.rbDefaultValues_CheckedChanged);\n\t\t\t// \n\t\t\t// rbDefaultDataSetName\n\t\t\t// \n\t\t\tresources.ApplyResources(this.rbDefaultDataSetName, \"rbDefaultDataSetName\");\n\t\t\tthis.rbDefaultDataSetName.Name = \"rbDefaultDataSetName\";\n\t\t\tthis.rbDefaultDataSetName.CheckedChanged += new System.EventHandler(this.rbDefaultDataSetName_CheckedChanged);\n\t\t\t// \n\t\t\t// ReportParameterCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.gbPropertyEdit);\n\t\t\tthis.Controls.Add(this.bParmDown);\n\t\t\tthis.Controls.Add(this.bParmUp);\n\t\t\tthis.Controls.Add(this.lbParameters);\n\t\t\tthis.Controls.Add(this.bAdd);\n\t\t\tthis.Controls.Add(this.bRemove);\n\t\t\tthis.Name = \"ReportParameterCtl\";\n\t\t\tthis.gbPropertyEdit.ResumeLayout(false);\n\t\t\tthis.gbPropertyEdit.PerformLayout();\n\t\t\tthis.gbValidValues.ResumeLayout(false);\n\t\t\tthis.gbValidValues.PerformLayout();\n\t\t\tthis.gbDefaultValues.ResumeLayout(false);\n\t\t\tthis.gbDefaultValues.PerformLayout();\n\t\t\tthis.ResumeLayout(false);\n\n        }\n        #endregion\n\n        internal System.Windows.Forms.ListBox lbParameters;\n        private System.Windows.Forms.Button bAdd;\n        private System.Windows.Forms.Button bRemove;\n        private System.Windows.Forms.Button bParmDown;\n        private System.Windows.Forms.Button bParmUp;\n        private System.Windows.Forms.GroupBox gbPropertyEdit;\n        private System.Windows.Forms.CheckBox ckbParmMultiValue;\n        private System.Windows.Forms.GroupBox gbValidValues;\n        private System.Windows.Forms.Button bValidValues;\n        private System.Windows.Forms.Label lDisplayField;\n        private System.Windows.Forms.ComboBox cbValidDisplayField;\n        private System.Windows.Forms.Label lValidValuesField;\n        private System.Windows.Forms.ComboBox cbValidFields;\n        private System.Windows.Forms.ComboBox cbValidDataSets;\n        private System.Windows.Forms.RadioButton rbValues;\n        private System.Windows.Forms.RadioButton rbDataSet;\n        private System.Windows.Forms.TextBox tbParmValidValues;\n        private System.Windows.Forms.CheckBox ckbParmAllowBlank;\n        private System.Windows.Forms.CheckBox ckbParmAllowNull;\n        private System.Windows.Forms.TextBox tbParmPrompt;\n        private System.Windows.Forms.Label lParmPrompt;\n        private System.Windows.Forms.ComboBox cbParmType;\n        private System.Windows.Forms.Label lParmType;\n        private System.Windows.Forms.TextBox tbParmName;\n        private System.Windows.Forms.Label lParmName;\n        private System.Windows.Forms.GroupBox gbDefaultValues;\n        private System.Windows.Forms.TextBox tbParmDefaultValue;\n        private System.Windows.Forms.Button bDefaultValues;\n        private System.Windows.Forms.Label lDefaultValueFields;\n        private System.Windows.Forms.ComboBox cbDefaultValueField;\n        private System.Windows.Forms.ComboBox cbDefaultDataSets;\n        private System.Windows.Forms.RadioButton rbDefaultValues;\n        private System.Windows.Forms.RadioButton rbDefaultDataSetName;\n\n    }\n}"
  },
  {
    "path": "RdlDesign/ReportParameterCtl.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Windows.Forms;\nusing System.Xml;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for StyleCtl.\n\t/// </summary>\n\tpublic partial class ReportParameterCtl : UserControl, IProperty\n\t{\n\t\tprivate DesignXmlDraw _Draw;\n\n        public ReportParameterCtl()\n        {\n            // This call is required by the Windows.Forms Form Designer.\n            InitializeComponent();\n        }\n\n\t\tinternal ReportParameterCtl(DesignXmlDraw dxDraw):this()\n\t\t{\n            SetDraw(dxDraw);\t          \n\t\t}\n\n        internal void SetDraw(DesignXmlDraw dxDraw)\n        {\n            _Draw = dxDraw;\n\n            // Initialize form using the style node values\n            InitValues();\n\n            rbDefaultDataSetName.Visible = cbDefaultDataSets.Visible = lDefaultValueFields.Visible =\n                cbDefaultValueField.Visible = rbDataSet.Visible = cbValidDataSets.Visible = lValidValuesField.Visible =\n                cbValidFields.Visible = lDisplayField.Visible = lDisplayField.Visible = cbValidDisplayField.Visible = true;\n        }\n\n        #region IProperty Members\n        public bool IsValid()\n        {\n            return true;\n        }\n\n        public void Apply()\n        {\n            if (_Draw == null) \n                return;\n\n            XmlNode rNode = _Draw.GetReportNode();\n            _Draw.RemoveElement(rNode, \"ReportParameters\");\t// remove old ReportParameters\n            if (this.lbParameters.Items.Count <= 0)\n                return;\t\t\t// nothing in list?  all done\n\n            XmlNode rpsNode = _Draw.SetElement(rNode, \"ReportParameters\", null);\n            foreach (ReportParm repParm in lbParameters.Items)\n            {\n                if (repParm.Name == null || repParm.Name.Length <= 0)\n                    continue;\t// shouldn't really happen\n                XmlNode repNode = _Draw.CreateElement(rpsNode, \"ReportParameter\", null);\n                // Create the name attribute\n                _Draw.SetElementAttribute(repNode, \"Name\", repParm.Name);\n\n                _Draw.SetElement(repNode, \"DataType\", repParm.DataType);\n                // Handle default values\n                ApplyDefaultValues(repNode, repParm);\n\n                _Draw.SetElement(repNode, \"Nullable\", repParm.AllowNull ? \"true\" : \"false\");\n                _Draw.SetElement(repNode, \"AllowBlank\", repParm.AllowBlank ? \"true\" : \"false\");\n                _Draw.SetElement(repNode, \"MultiValue\", repParm.MultiValue ? \"true\" : \"false\");\n                _Draw.SetElement(repNode, \"Prompt\", repParm.Prompt);\n\n                // Handle ValidValues\n                ApplyValidValues(repNode, repParm);\n            }\n        }\n        #endregion IProperty Members\n\n        private void InitValues()\n\t\t{\n\t\t\t// Populate datasets combos\n\t\t\tobject[] datasets = _Draw.DataSetNames;\n\t\t\tthis.cbDefaultDataSets.Items.AddRange(datasets);\n\t\t\tthis.cbValidDataSets.Items.AddRange(datasets);\n\n\t\t\tXmlNode rNode = _Draw.GetReportNode();\n\t\t\tXmlNode rpsNode = _Draw.GetNamedChildNode(rNode, \"ReportParameters\");\n\t\t\tif (rpsNode == null)\n\t\t\t\treturn;\n\t\t\tforeach (XmlNode repNode in rpsNode)\n\t\t\t{\t\n\t\t\t\tXmlAttribute nAttr = repNode.Attributes[\"Name\"];\n\t\t\t\tif (nAttr == null)\t// shouldn't really happen\n\t\t\t\t\tcontinue;\n\t\t\t\tReportParm repParm = new ReportParm(nAttr.Value);\n\t\t\t\trepParm.DataType = _Draw.GetElementValue(repNode, \"DataType\", \"String\");\n\t\t\t\t// Get default values\n\t\t\t\tInitDefaultValues(repNode, repParm);\n\n\t\t\t\tstring nullable  = _Draw.GetElementValue(repNode, \"Nullable\", \"false\");\n\t\t\t\trepParm.AllowNull = (nullable.ToLower() == \"true\"); // Majorsilence.Reporting.Rdl.XmlUtil can do it\n\t\t\t\tstring allowBlank  = _Draw.GetElementValue(repNode, \"AllowBlank\", \"false\");\n\t\t\t\trepParm.AllowBlank = (allowBlank.ToLower() == \"true\");\n                string mvalue = _Draw.GetElementValue(repNode, \"MultiValue\", \"false\");\n                repParm.MultiValue = (mvalue.ToLower() == \"true\");\n                repParm.Prompt = _Draw.GetElementValue(repNode, \"Prompt\", \"\");\n\n\t\t\t\tInitValidValues(repNode, repParm);\n\n\t\t\t\tthis.lbParameters.Items.Add(repParm);\n\t\t\t}\n\t\t\tif (lbParameters.Items.Count > 0)\n\t\t\t\tlbParameters.SelectedIndex = 0;\n\t\t}\n\n\t\tprivate void InitDefaultValues(XmlNode reportParameterNode, ReportParm repParm)\n\t\t{\n\t\t\trepParm.Default = true;\n\t\t\tXmlNode dfNode = _Draw.GetNamedChildNode(reportParameterNode, \"DefaultValue\");\n\t\t\tif (dfNode == null)\n\t\t\t\treturn;\n\n\t\t\tXmlNode vNodes = _Draw.GetNamedChildNode(dfNode, \"Values\");\n\t\t\tif (vNodes != null)\n\t\t\t{\n\t\t\t\tList<string> al = new List<string>();\n\t\t\t\tforeach (XmlNode v in vNodes.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (v.InnerText.Length <= 0)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tal.Add(v.InnerText);\n\t\t\t\t}\n\t\t\t\tif (al.Count >= 1)\n\t\t\t\t\trepParm.DefaultValue  = al;\n\t\t\t}\n\t\t\tXmlNode dsNodes = _Draw.GetNamedChildNode(dfNode, \"DataSetReference\");\n\t\t\tif (dsNodes != null)\n\t\t\t{\n\t\t\t\trepParm.Default = false;\n\t\t\t\trepParm.DefaultDSRDataSetName = _Draw.GetElementValue(dsNodes, \"DataSetName\", \"\");\n\t\t\t\trepParm.DefaultDSRValueField = _Draw.GetElementValue(dsNodes, \"ValueField\", \"\");\n\t\t\t}\n\t\t}\n\n\t\tprivate void InitValidValues(XmlNode reportParameterNode, ReportParm repParm)\n\t\t{\n\t\t\trepParm.Valid = true;\n\t\t\tXmlNode vvsNode = _Draw.GetNamedChildNode(reportParameterNode, \"ValidValues\");\n\t\t\tif (vvsNode == null)\n\t\t\t\treturn;\n\n\t\t\tXmlNode vNodes = _Draw.GetNamedChildNode(vvsNode, \"ParameterValues\");\n\t\t\tif (vNodes != null)\n\t\t\t{\n                List<ParameterValueItem> pvs = new List<ParameterValueItem>();\n\t\t\t\tforeach (XmlNode v in vNodes.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (v.Name != \"ParameterValue\")\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tXmlNode pv = _Draw.GetNamedChildNode(v, \"Value\");\n\t\t\t\t\tif (pv == null)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tif (pv == null || pv.InnerText.Length <= 0)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tParameterValueItem pvi = new ParameterValueItem();\n\t\t\t\t\tpvi.Value = pv.InnerText;\n\t\t\t\t\tpvi.Label = _Draw.GetElementValue(v, \"Label\", null);\n\t\t\t\t\tpvs.Add(pvi);\n\t\t\t\t}\n\t\t\t\tif (pvs.Count > 0)\n\t\t\t\t{\n\t\t\t\t\trepParm.ValidValues = pvs;\n\t\t\t\t}\n\t\t\t}\n\t\t\tXmlNode dsNodes = _Draw.GetNamedChildNode(vvsNode, \"DataSetReference\");\n\t\t\tif (dsNodes != null)\n\t\t\t{\n\t\t\t\trepParm.Valid = false;\n\t\t\t\trepParm.ValidValuesDSRDataSetName = _Draw.GetElementValue(dsNodes, \"DataSetName\", \"\");\n\t\t\t\trepParm.ValidValuesDSRValueField = _Draw.GetElementValue(dsNodes, \"ValueField\", \"\");\n\t\t\t\trepParm.ValidValuesDSRLabelField = _Draw.GetElementValue(dsNodes, \"LabelField\", \"\");\n\t\t\t}\n\t\t}\t\t\t\t\n\n\t\tprivate void ApplyDefaultValues(XmlNode repNode, ReportParm repParm)\n\t\t{\n\t\t\t_Draw.RemoveElement(repNode, \"DefaultValue\");\n\t\t\tif (repParm.Default)\n\t\t\t{\n\t\t\t\tif (repParm.DefaultValue == null || repParm.DefaultValue.Count == 0)\n\t\t\t\t\treturn;\n\n\t\t\t\tXmlNode defNode = _Draw.GetCreateNamedChildNode(repNode, \"DefaultValue\");\n\t\t\t\tXmlNode vNodes = _Draw.GetCreateNamedChildNode(defNode, \"Values\");\n\t\t\t\tforeach (string dv in repParm.DefaultValue)\n\t\t\t\t{\n\t\t\t\t\t_Draw.CreateElement(vNodes, \"Value\", dv);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (repParm.DefaultDSRDataSetName == null || repParm.DefaultDSRDataSetName.Length == 0 ||\n\t\t\t\t\trepParm.DefaultDSRValueField == null || repParm.DefaultDSRValueField.Length == 0)\n\t\t\t\t\treturn;\n\t\t\t\tXmlNode defNode = _Draw.GetCreateNamedChildNode(repNode, \"DefaultValue\");\n\t\t\t\tXmlNode dsrNode = _Draw.GetCreateNamedChildNode(defNode, \"DataSetReference\");\n\t\t\t\t_Draw.CreateElement(dsrNode, \"DataSetName\", repParm.DefaultDSRDataSetName);\n\t\t\t\t_Draw.CreateElement(dsrNode, \"ValueField\", repParm.DefaultDSRValueField);\n\t\t\t}\n\t\t}\n\n\t\tprivate void ApplyValidValues(XmlNode repNode, ReportParm repParm)\n\t\t{\n\t\t\t_Draw.RemoveElement(repNode, \"ValidValues\");\n\t\t\tif (repParm.Valid)\n\t\t\t{\n\t\t\t\tif (repParm.ValidValues == null || repParm.ValidValues.Count == 0)\n\t\t\t\t\treturn;\n\n\t\t\t\tXmlNode vvNode = _Draw.GetCreateNamedChildNode(repNode, \"ValidValues\");\n\t\t\t\tXmlNode vNodes = _Draw.GetCreateNamedChildNode(vvNode, \"ParameterValues\");\n\t\t\t\t// put out the parameter values\n\t\t\t\tforeach (ParameterValueItem dvi in repParm.ValidValues)\n\t\t\t\t{\n\t\t\t\t\tXmlNode pvNode = _Draw.CreateElement(vNodes, \"ParameterValue\", null);\n\t\t\t\t\t_Draw.CreateElement(pvNode, \"Value\", dvi.Value);\n\t\t\t\t\tif (dvi.Label != null)\n\t\t\t\t\t\t_Draw.CreateElement(pvNode, \"Label\", dvi.Label);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (repParm.ValidValuesDSRDataSetName == null || repParm.ValidValuesDSRDataSetName.Length == 0 ||\n\t\t\t\t\trepParm.ValidValuesDSRValueField == null || repParm.ValidValuesDSRValueField.Length == 0)\n\t\t\t\t\treturn;\n\t\t\t\tXmlNode defNode = _Draw.GetCreateNamedChildNode(repNode, \"ValidValues\");\n\t\t\t\tXmlNode dsrNode = _Draw.GetCreateNamedChildNode(defNode, \"DataSetReference\");\n\t\t\t\t_Draw.CreateElement(dsrNode, \"DataSetName\", repParm.ValidValuesDSRDataSetName);\n\t\t\t\t_Draw.CreateElement(dsrNode, \"ValueField\", repParm.ValidValuesDSRValueField);\n\t\t\t\tif (repParm.ValidValuesDSRLabelField != null && repParm.ValidValuesDSRLabelField.Length > 0)\n\t\t\t\t\t_Draw.CreateElement(dsrNode, \"LabelField\", repParm.ValidValuesDSRLabelField);\n\t\t\t}\n\t\t}\n\n        #region Event Handlers\n        private void bAdd_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tReportParm rp = new ReportParm(\"newparm\");\n\t\t\tint cur = this.lbParameters.Items.Add(rp);\n\t\t\tlbParameters.SelectedIndex = cur;\n\t\t\tthis.tbParmName.Focus();\n\t\t}\n\n\t\tprivate void bRemove_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cur = lbParameters.SelectedIndex;\n\t\t\tif (cur < 0)\n\t\t\t\treturn;\n\t\t\tlbParameters.Items.RemoveAt(cur);\n\t\t\tif (lbParameters.Items.Count <= 0)\n\t\t\t\treturn;\n\t\t\tcur--;\n\t\t\tif (cur < 0)\n\t\t\t\tcur = 0;\n\t\t\tlbParameters.SelectedIndex = cur;\n\t\t}\n\n\t\tprivate void lbParameters_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n            if (tbParmName.Focused)\n                return;\n\n            gbPropertyEdit.Enabled = false;\n\t\t\tint cur = lbParameters.SelectedIndex;\n\t\t\tif (cur < 0)\n\t\t\t\treturn;\n\n\t\t\tReportParm rp = lbParameters.Items[cur] as ReportParm;\n\t\t\tif (rp == null)\n\t\t\t\treturn;\n\n            gbPropertyEdit.Enabled = true;\n\n\t\t\ttbParmName.Text = rp.Name;\n\t\t\tcbParmType.Text = rp.DataType;\n\t\t\ttbParmPrompt.Text = rp.Prompt;\n\t\t\tckbParmAllowBlank.Checked = rp.AllowBlank;\n            ckbParmMultiValue.Checked = rp.MultiValue;\n            ckbParmAllowNull.Checked = rp.AllowNull;\n\t\t\t// Handle default values\n\t\t\tif (rp.Default)\n\t\t\t{\n\t\t\t\tthis.rbDefaultValues.Checked = true;\n\t\t\t\ttbParmDefaultValue.Text = rp.DefaultValueDisplay; \t\t\t\n\n\t\t\t\ttbParmDefaultValue.Enabled = bDefaultValues.Enabled = true;\n\t\t\t\tthis.cbDefaultDataSets.Enabled = false;\n\t\t\t\tthis.cbDefaultValueField.Enabled = false;\n\t\t\t\tthis.cbDefaultDataSets.SelectedIndex = -1;\n\t\t\t\tthis.cbDefaultValueField.SelectedIndex = -1;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.rbDefaultDataSetName.Checked = true;\n\t\t\t\tthis.cbDefaultDataSets.Text = rp.DefaultDSRDataSetName;\n\t\t\t\tthis.cbDefaultValueField.Text = rp.DefaultDSRValueField;\n\n\t\t\t\ttbParmDefaultValue.Enabled = bDefaultValues.Enabled =false;\n\t\t\t\ttbParmDefaultValue.Text = \"\";\n\t\t\t\tthis.cbDefaultDataSets.Enabled = true;\n\t\t\t\tthis.cbDefaultValueField.Enabled = true;\n\t\t\t}\n\t\t\t// Handle Valid Values\n\t\t\tif (rp.Valid)\n\t\t\t{\n\t\t\t\tthis.rbValues.Checked = true;\n\t\t\t\ttbParmValidValues.Text = rp.ValidValuesDisplay;\n\n\t\t\t\ttbParmValidValues.Enabled = bValidValues.Enabled = true;\n\t\t\t\tthis.cbValidDataSets.Enabled =\n\t\t\t\t\tthis.cbValidFields.Enabled =\n\t\t\t\t\tthis.cbValidDisplayField.Enabled = false;\n\t\t\t\tthis.cbValidDataSets.SelectedIndex   =\n\t\t\t\t\tthis.cbValidFields.SelectedIndex =\n\t\t\t\t\tthis.cbValidDisplayField.SelectedIndex = -1;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.rbDataSet.Checked = true;\n\t\t\t\tthis.cbValidDataSets.Text = rp.ValidValuesDSRDataSetName;\n\t\t\t\tthis.cbValidFields.Text = rp.ValidValuesDSRValueField;\n\t\t\t\tthis.cbValidDisplayField.Text = rp.ValidValuesDSRLabelField == null? \"\":rp.ValidValuesDSRLabelField;\n\n\t\t\t\tthis.cbValidDataSets.Enabled =\n\t\t\t\t\t\tthis.cbValidFields.Enabled =\n\t\t\t\t\t\tthis.cbValidDisplayField.Enabled = true;\n\t\t\t\ttbParmValidValues.Enabled = bValidValues.Enabled = false;\n\t\t\t\ttbParmValidValues.Text = \"\";\n\t\t\t}\n\t\t}\n\n\t\tprivate void lbParameters_MoveItem(int curloc, int newloc)\n\t\t{\n\t\t\tReportParm rp = lbParameters.Items[curloc] as ReportParm;\n\t\t\tif (rp == null)\n\t\t\t\treturn;\n\n\t\t\tlbParameters.BeginUpdate();\n\t\t\tlbParameters.Items.RemoveAt(curloc);\n\t\t\tlbParameters.Items.Insert(newloc, rp);\n\t\t\tlbParameters.SelectedIndex = newloc;\n\t\t\tlbParameters.EndUpdate();\n\t\t}\n\n\t\tprivate void tbParmName_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cur = lbParameters.SelectedIndex;\n\t\t\tif (cur < 0)\n\t\t\t\treturn;\n\n\t\t\tReportParm rp = lbParameters.Items[cur] as ReportParm;\n\t\t\tif (rp == null)\n\t\t\t\treturn;\n\n\t\t\tif (rp.Name == tbParmName.Text)\n\t\t\t\treturn;\n\n\t\t\trp.Name = tbParmName.Text;\n\t\t\t// text doesn't change in listbox; force change by removing and re-adding item\n\t\t\tlbParameters_MoveItem(cur, cur);\n\t\t}\n\n\t\tprivate void cbParmType_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cur = lbParameters.SelectedIndex;\n\t\t\tif (cur < 0)\n\t\t\t\treturn;\n\n\t\t\tReportParm rp = lbParameters.Items[cur] as ReportParm;\n\t\t\tif (rp == null)\n\t\t\t\treturn;\n\n\t\t\trp.DataType = cbParmType.Text;\n\t\t}\n\n\t\tprivate void tbParmPrompt_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cur = lbParameters.SelectedIndex;\n\t\t\tif (cur < 0)\n\t\t\t\treturn;\n\n\t\t\tReportParm rp = lbParameters.Items[cur] as ReportParm;\n\t\t\tif (rp == null)\n\t\t\t\treturn;\n\n\t\t\trp.Prompt = tbParmPrompt.Text;\n\t\t}\n\n\t\tprivate void ckbParmAllowNull_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cur = lbParameters.SelectedIndex;\n\t\t\tif (cur < 0)\n\t\t\t\treturn;\n\n\t\t\tReportParm rp = lbParameters.Items[cur] as ReportParm;\n\t\t\tif (rp == null)\n\t\t\t\treturn;\n\n\t\t\trp.AllowNull = ckbParmAllowNull.Checked;\n\t\t}\n\n\t\tprivate void ckbParmAllowBlank_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cur = lbParameters.SelectedIndex;\n\t\t\tif (cur < 0)\n\t\t\t\treturn;\n\n\t\t\tReportParm rp = lbParameters.Items[cur] as ReportParm;\n\t\t\tif (rp == null)\n\t\t\t\treturn;\n\n\t\t\trp.AllowBlank = ckbParmAllowBlank.Checked;\n\t\t}\n\n\t\tprivate void bParmUp_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cur = lbParameters.SelectedIndex;\n\t\t\tif (cur <= 0)\n\t\t\t\treturn;\n\t\t\n\t\t\tlbParameters_MoveItem(cur, cur-1);\n\t\t}\n\n\t\tprivate void bParmDown_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cur = lbParameters.SelectedIndex;\n\t\t\tif (cur+1 >= lbParameters.Items.Count)\n\t\t\t\treturn;\n\t\t\n\t\t\tlbParameters_MoveItem(cur, cur+1);\n\t\t}\n\n\t\tprivate void cbDefaultDataSets_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cur = lbParameters.SelectedIndex;\n\t\t\tif (cur < 0)\n\t\t\t\treturn;\n\n\t\t\tReportParm rp = lbParameters.Items[cur] as ReportParm;\n\t\t\tif (rp == null)\n\t\t\t\treturn;\n\n\t\t\trp.DefaultDSRDataSetName = cbDefaultDataSets.Text;\n\n\t\t\t// Populate the fields from the selected dataset\n\t\t\tthis.cbDefaultValueField.Items.Clear();\n\t\t\tstring[] fields = _Draw.GetFields(cbDefaultDataSets.Text, false);\n            if (fields != null)\n\t\t\t    this.cbDefaultValueField.Items.AddRange(fields);\n\t\t}\n\n\t\tprivate void cbValidDataSets_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cur = lbParameters.SelectedIndex;\n\t\t\tif (cur < 0)\n\t\t\t\treturn;\n\n\t\t\tReportParm rp = lbParameters.Items[cur] as ReportParm;\n\t\t\tif (rp == null)\n\t\t\t\treturn;\n\n\t\t\trp.ValidValuesDSRDataSetName = cbValidDataSets.Text;\n\n\t\t\t// Populate the fields from the selected dataset\n\t\t\tthis.cbValidFields.Items.Clear();\n\t\t\tstring[] fields = _Draw.GetFields(cbValidDataSets.Text, false);\n            if (fields != null)\n\t\t\t    this.cbValidFields.Items.AddRange(fields);\n\t\t\tthis.cbValidDisplayField.Items.Clear();\n\t\t\tthis.cbValidDisplayField.Items.Add(\"\");\n            if (fields != null)\n\t\t\t    this.cbValidDisplayField.Items.AddRange(fields);\n\t\t}\n\n\t\tprivate void cbDefaultValueField_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cur = lbParameters.SelectedIndex;\n\t\t\tif (cur < 0)\n\t\t\t\treturn;\n\n\t\t\tReportParm rp = lbParameters.Items[cur] as ReportParm;\n\t\t\tif (rp == null)\n\t\t\t\treturn;\n\n\t\t\trp.DefaultDSRValueField = cbDefaultValueField.Text;\n\t\t}\n\n\t\tprivate void cbValidFields_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cur = lbParameters.SelectedIndex;\n\t\t\tif (cur < 0)\n\t\t\t\treturn;\n\n\t\t\tReportParm rp = lbParameters.Items[cur] as ReportParm;\n\t\t\tif (rp == null)\n\t\t\t\treturn;\n\n\t\t\trp.ValidValuesDSRValueField = cbValidFields.Text;\n\t\t}\n\n\t\tprivate void cbValidDisplayField_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cur = lbParameters.SelectedIndex;\n\t\t\tif (cur < 0)\n\t\t\t\treturn;\n\n\t\t\tReportParm rp = lbParameters.Items[cur] as ReportParm;\n\t\t\tif (rp == null)\n\t\t\t\treturn;\n\n\t\t\trp.ValidValuesDSRLabelField = cbValidDisplayField.Text;\n\t\t}\n\n\t\tprivate void rbDefaultValues_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cur = lbParameters.SelectedIndex;\n\t\t\tif (cur < 0)\n\t\t\t\treturn;\n\n\t\t\tReportParm rp = lbParameters.Items[cur] as ReportParm;\n\t\t\tif (rp == null)\n\t\t\t\treturn;\n\n\t\t\trp.Default = rbDefaultValues.Checked;\n\n\t\t\ttbParmDefaultValue.Enabled = bDefaultValues.Enabled = rbDefaultValues.Checked;\n\t\t\tthis.cbDefaultDataSets.Enabled = \n\t\t\t\tthis.cbDefaultValueField.Enabled = !rbDefaultValues.Checked;\n\t\t}\n\n\t\tprivate void rbDefaultDataSetName_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cur = lbParameters.SelectedIndex;\n\t\t\tif (cur < 0)\n\t\t\t\treturn;\n\n\t\t\tReportParm rp = lbParameters.Items[cur] as ReportParm;\n\t\t\tif (rp == null)\n\t\t\t\treturn;\n\n\t\t\trp.Default = !rbDefaultDataSetName.Checked;\n\n\t\t\ttbParmDefaultValue.Enabled = bDefaultValues.Enabled = !rbDefaultDataSetName.Checked;\n\t\t\tthis.cbDefaultDataSets.Enabled = \n\t\t\t\tthis.cbDefaultValueField.Enabled = rbDefaultDataSetName.Checked;\n\t\t}\n\n\t\tprivate void rbValues_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cur = lbParameters.SelectedIndex;\n\t\t\tif (cur < 0)\n\t\t\t\treturn;\n\n\t\t\tReportParm rp = lbParameters.Items[cur] as ReportParm;\n\t\t\tif (rp == null)\n\t\t\t\treturn;\n\n\t\t\tthis.tbParmValidValues.Enabled = bValidValues.Enabled =  rbValues.Checked;\n\t\t\trp.Valid = rbValues.Checked;\n\n\t\t\tthis.cbValidDisplayField.Enabled = \n\t\t\t\tthis.cbValidFields.Enabled =\n\t\t\t\tthis.cbValidDataSets.Enabled = !rbValues.Checked;\n\t\t}\n\n\t\tprivate void rbDataSet_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cur = lbParameters.SelectedIndex;\n\t\t\tif (cur < 0)\n\t\t\t\treturn;\n\n\t\t\tReportParm rp = lbParameters.Items[cur] as ReportParm;\n\t\t\tif (rp == null)\n\t\t\t\treturn;\n\n\t\t\trp.Valid = !rbDataSet.Checked;\n\t\t\tthis.tbParmValidValues.Enabled = bValidValues.Enabled = !rbDataSet.Checked;\n\t\t\tthis.cbValidDisplayField.Enabled = \n\t\t\t\tthis.cbValidFields.Enabled =\n\t\t\t\tthis.cbValidDataSets.Enabled = rbDataSet.Checked;\n\t\t}\n\n\t\tprivate void bDefaultValues_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cur = lbParameters.SelectedIndex;\n\t\t\tif (cur < 0)\n\t\t\t\treturn;\n\n\t\t\tReportParm rp = lbParameters.Items[cur] as ReportParm;\n\t\t\tif (rp == null)\n\t\t\t\treturn;\n\n            using (DialogListOfStrings dlos = new DialogListOfStrings(rp.DefaultValue))\n            {\n                dlos.Text = Strings.ReportParameterCtl_bDefaultValues_Click_Default_Values;\n                if (dlos.ShowDialog() != DialogResult.OK)\n                    return;\n                rp.DefaultValue = dlos.ListOfStrings;\n                this.tbParmDefaultValue.Text = rp.DefaultValueDisplay;\n            }\n\t\t}\n\n\t\tprivate void bValidValues_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tint cur = lbParameters.SelectedIndex;\n\t\t\tif (cur < 0)\n\t\t\t\treturn;\n\n\t\t\tReportParm rp = lbParameters.Items[cur] as ReportParm;\n\t\t\tif (rp == null)\n\t\t\t\treturn;\n\n            using (DialogValidValues dvv = new DialogValidValues(rp.ValidValues))\n            {\n                if (dvv.ShowDialog() != DialogResult.OK)\n                    return;\n                rp.ValidValues = dvv.ValidValues;\n                this.tbParmValidValues.Text = rp.ValidValuesDisplay;\n            }\n\t\t}\n\n        private void ckbParmMultiValue_CheckedChanged(object sender, EventArgs e)\n        {\n            int cur = lbParameters.SelectedIndex;\n            if (cur < 0)\n                return;\n\n            ReportParm rp = lbParameters.Items[cur] as ReportParm;\n            if (rp == null)\n                return;\n\n            rp.MultiValue = ckbParmMultiValue.Checked;\n\n        }\n        #endregion Event Handlers\n    }\n}\n"
  },
  {
    "path": "RdlDesign/ReportParameterCtl.fr.resx",
    "content": "﻿<root>\n    <resheader name=\"resmimetype\">\n        <value>text/microsoft-resx</value>\n    </resheader>\n    <resheader name=\"version\">\n        <value>1.3</value>\n    </resheader>\n    <resheader name=\"reader\">\n        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n    </resheader>\n    <resheader name=\"writer\">\n        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n    </resheader>\n    <data name=\"bAdd.Text\" xml:space=\"preserve\">\n        <value>Ajouter</value>\n    </data>\n    <data name=\"bRemove.Text\" xml:space=\"preserve\">\n        <value>Enlever</value>\n    </data>\n    <data name=\"ckbParmAllowBlank.Text\" xml:space=\"preserve\">\n        <value>Autoriser les blancs (chaînes uniquement)</value>\n    </data>\n    <data name=\"ckbParmAllowNull.Text\" xml:space=\"preserve\">\n        <value>Autoriser null</value>\n    </data>\n    <data name=\"ckbParmMultiValue.Text\" xml:space=\"preserve\">\n        <value>MultiValeur</value>\n    </data>\n    <data name=\"gbDefaultValues.Text\" xml:space=\"preserve\">\n        <value>Valeurs par défaut</value>\n    </data>\n    <data name=\"gbValidValues.Text\" xml:space=\"preserve\">\n        <value>Valeurs valides</value>\n    </data>\n    <data name=\"lDefaultValueFields.Text\" xml:space=\"preserve\">\n        <value>Champ de valeur</value>\n    </data>\n    <data name=\"lDisplayField.Text\" xml:space=\"preserve\">\n        <value>Champ d'affichage</value>\n    </data>\n    <data name=\"lParmName.Text\" xml:space=\"preserve\">\n        <value>Nom</value>\n    </data>\n    <data name=\"lValidValuesField.Text\" xml:space=\"preserve\">\n        <value>Champ de valeur</value>\n    </data>\n    <data name=\"rbDataSet.Text\" xml:space=\"preserve\">\n        <value>Nom de l'ensemble de données</value>\n    </data>\n    <data name=\"rbDefaultDataSetName.Text\" xml:space=\"preserve\">\n        <value>Nom du DataSet</value>\n    </data>\n    <data name=\"rbDefaultValues.Text\" xml:space=\"preserve\">\n        <value>Valeurs</value>\n    </data>\n    <data name=\"rbValues.Text\" xml:space=\"preserve\">\n        <value>Valeurs</value>\n    </data>\n</root>"
  },
  {
    "path": "RdlDesign/ReportParameterCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"&gt;&gt;bAdd.Name\" xml:space=\"preserve\">\n    <value>bAdd</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"lDefaultValueFields.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>67, 21</value>\n  </data>\n  <data name=\"&gt;&gt;cbDefaultDataSets.Parent\" xml:space=\"preserve\">\n    <value>gbDefaultValues</value>\n  </data>\n  <data name=\"&gt;&gt;bAdd.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bValidValues.Name\" xml:space=\"preserve\">\n    <value>bValidValues</value>\n  </data>\n  <data name=\"&gt;&gt;cbValidDataSets.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;cbParmType.Name\" xml:space=\"preserve\">\n    <value>cbParmType</value>\n  </data>\n  <data name=\"lDisplayField.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 16</value>\n  </data>\n  <data name=\"&gt;&gt;tbParmPrompt.Name\" xml:space=\"preserve\">\n    <value>tbParmPrompt</value>\n  </data>\n  <data name=\"&gt;&gt;tbParmName.Name\" xml:space=\"preserve\">\n    <value>tbParmName</value>\n  </data>\n  <data name=\"rbDefaultValues.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>6, 19</value>\n  </data>\n  <data name=\"bAdd.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>3, 276</value>\n  </data>\n  <data name=\"&gt;&gt;cbValidDisplayField.Parent\" xml:space=\"preserve\">\n    <value>gbValidValues</value>\n  </data>\n  <data name=\"&gt;&gt;rbDataSet.Name\" xml:space=\"preserve\">\n    <value>rbDataSet</value>\n  </data>\n  <data name=\"cbParmType.Items\" xml:space=\"preserve\">\n    <value>Boolean</value>\n  </data>\n  <data name=\"tbParmPrompt.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>260, 20</value>\n  </data>\n  <data name=\"&gt;&gt;cbValidDisplayField.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"cbValidDataSets.Visible\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"&gt;&gt;ckbParmAllowNull.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbValidDataSets.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;gbPropertyEdit.Name\" xml:space=\"preserve\">\n    <value>gbPropertyEdit</value>\n  </data>\n  <data name=\"&gt;&gt;ckbParmMultiValue.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lDefaultValueFields.Visible\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"gbPropertyEdit.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>163, -4</value>\n  </data>\n  <data name=\"cbValidDataSets.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>112, 21</value>\n  </data>\n  <data name=\"&gt;&gt;lParmType.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"lDisplayField.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>223, 86</value>\n  </data>\n  <data name=\"cbValidDisplayField.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>301, 83</value>\n  </data>\n  <data name=\"lValidValuesField.Visible\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"&gt;&gt;cbDefaultDataSets.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"ckbParmAllowBlank.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>51</value>\n  </data>\n  <data name=\"bRemove.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>28</value>\n  </data>\n  <data name=\"lParmPrompt.Text\" xml:space=\"preserve\">\n    <value>Prompt</value>\n  </data>\n  <data name=\"lParmType.Text\" xml:space=\"preserve\">\n    <value>Datatype</value>\n  </data>\n  <data name=\"tbParmDefaultValue.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>76, 19</value>\n  </data>\n  <data name=\"&gt;&gt;tbParmDefaultValue.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbDefaultDataSets.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lParmName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>45, 19</value>\n  </data>\n  <data name=\"rbValues.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 20</value>\n  </data>\n  <data name=\"rbDataSet.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>6, 46</value>\n  </data>\n  <data name=\"&gt;&gt;cbDefaultValueField.Name\" xml:space=\"preserve\">\n    <value>cbDefaultValueField</value>\n  </data>\n  <data name=\"&gt;&gt;ckbParmAllowBlank.Name\" xml:space=\"preserve\">\n    <value>ckbParmAllowBlank</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"gbPropertyEdit.Margin\" type=\"System.Windows.Forms.Padding, System.Windows.Forms\">\n    <value>1, 1, 1, 1</value>\n  </data>\n  <data name=\"bValidValues.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"&gt;&gt;bParmDown.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lValidValuesField.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lParmType.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 21</value>\n  </data>\n  <data name=\"rbDefaultDataSetName.Text\" xml:space=\"preserve\">\n    <value>DataSet Name</value>\n  </data>\n  <data name=\"cbDefaultDataSets.Visible\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"tbParmName.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>47</value>\n  </data>\n  <data name=\"&gt;&gt;lDisplayField.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"cbParmType.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>48</value>\n  </data>\n  <data name=\"lParmType.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleRight</value>\n  </data>\n  <data name=\"tbParmValidValues.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"gbDefaultValues.Text\" xml:space=\"preserve\">\n    <value>Default Values</value>\n  </data>\n  <data name=\"&gt;&gt;gbValidValues.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;tbParmDefaultValue.Name\" xml:space=\"preserve\">\n    <value>tbParmDefaultValue</value>\n  </data>\n  <data name=\"lParmPrompt.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>56</value>\n  </data>\n  <data name=\"&gt;&gt;bParmUp.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbValidDataSets.Parent\" xml:space=\"preserve\">\n    <value>gbValidValues</value>\n  </data>\n  <data name=\"bParmDown.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>48</value>\n  </data>\n  <data name=\"&gt;&gt;tbParmPrompt.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbParmType.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"cbValidFields.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>301, 46</value>\n  </data>\n  <data name=\"&gt;&gt;tbParmValidValues.Name\" xml:space=\"preserve\">\n    <value>tbParmValidValues</value>\n  </data>\n  <data name=\"lDisplayField.Visible\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"&gt;&gt;tbParmValidValues.Parent\" xml:space=\"preserve\">\n    <value>gbValidValues</value>\n  </data>\n  <data name=\"&gt;&gt;rbDefaultValues.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;rbDefaultValues.Parent\" xml:space=\"preserve\">\n    <value>gbDefaultValues</value>\n  </data>\n  <data name=\"gbPropertyEdit.Padding\" type=\"System.Windows.Forms.Padding, System.Windows.Forms\">\n    <value>1, 1, 1, 1</value>\n  </data>\n  <data name=\"bParmDown.Text\" xml:space=\"preserve\">\n    <value></value>\n  </data>\n  <data name=\"&gt;&gt;bAdd.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;bValidValues.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"rbDataSet.Visible\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"&gt;&gt;lValidValuesField.Parent\" xml:space=\"preserve\">\n    <value>gbValidValues</value>\n  </data>\n  <data name=\"&gt;&gt;bRemove.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lDisplayField.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>37</value>\n  </data>\n  <data name=\"&gt;&gt;gbDefaultValues.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;rbDefaultDataSetName.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"cbDefaultDataSets.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"lValidValuesField.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>226, 47</value>\n  </data>\n  <data name=\"bParmUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 24</value>\n  </data>\n  <data name=\"lParmPrompt.ImageAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;tbParmName.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"gbDefaultValues.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>431, 88</value>\n  </data>\n  <data name=\"&gt;&gt;bDefaultValues.Parent\" xml:space=\"preserve\">\n    <value>gbDefaultValues</value>\n  </data>\n  <data name=\"&gt;&gt;lParmName.Name\" xml:space=\"preserve\">\n    <value>lParmName</value>\n  </data>\n  <data name=\"&gt;&gt;bParmDown.Name\" xml:space=\"preserve\">\n    <value>bParmDown</value>\n  </data>\n  <data name=\"lbParameters.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>3, 3</value>\n  </data>\n  <data name=\"cbValidDisplayField.Visible\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"lDisplayField.Text\" xml:space=\"preserve\">\n    <value>Display Field</value>\n  </data>\n  <data name=\"&gt;&gt;lParmType.Parent\" xml:space=\"preserve\">\n    <value>gbPropertyEdit</value>\n  </data>\n  <data name=\"&gt;&gt;rbDefaultValues.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"gbDefaultValues.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>52</value>\n  </data>\n  <data name=\"&gt;&gt;gbPropertyEdit.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"tbParmValidValues.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>313, 20</value>\n  </data>\n  <data name=\"&gt;&gt;cbValidFields.Parent\" xml:space=\"preserve\">\n    <value>gbValidValues</value>\n  </data>\n  <data name=\"&gt;&gt;cbDefaultValueField.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"lDefaultValueFields.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;cbValidDisplayField.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>ReportParameterCtl</value>\n  </data>\n  <data name=\"&gt;&gt;lValidValuesField.Name\" xml:space=\"preserve\">\n    <value>lValidValuesField</value>\n  </data>\n  <data name=\"rbValues.Text\" xml:space=\"preserve\">\n    <value>Values</value>\n  </data>\n  <data name=\"&gt;&gt;rbDefaultDataSetName.Name\" xml:space=\"preserve\">\n    <value>rbDefaultDataSetName</value>\n  </data>\n  <data name=\"&gt;&gt;lParmName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbParmPrompt.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>55, 37</value>\n  </data>\n  <data name=\"cbDefaultDataSets.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>108, 46</value>\n  </data>\n  <data name=\"&gt;&gt;tbParmValidValues.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"rbDefaultDataSetName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 21</value>\n  </data>\n  <data name=\"bParmUp.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Wingdings, 8.25pt, style=Bold</value>\n  </data>\n  <data name=\"&gt;&gt;bDefaultValues.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbDefaultDataSetName.Parent\" xml:space=\"preserve\">\n    <value>gbDefaultValues</value>\n  </data>\n  <data name=\"tbParmName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 20</value>\n  </data>\n  <data name=\"tbParmDefaultValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>313, 20</value>\n  </data>\n  <data name=\"gbPropertyEdit.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>443, 303</value>\n  </data>\n  <data name=\"&gt;&gt;ckbParmAllowNull.Parent\" xml:space=\"preserve\">\n    <value>gbPropertyEdit</value>\n  </data>\n  <data name=\"&gt;&gt;lbParameters.Name\" xml:space=\"preserve\">\n    <value>lbParameters</value>\n  </data>\n  <data name=\"&gt;&gt;gbDefaultValues.Name\" xml:space=\"preserve\">\n    <value>gbDefaultValues</value>\n  </data>\n  <data name=\"&gt;&gt;cbParmType.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lParmPrompt.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 38</value>\n  </data>\n  <data name=\"rbValues.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"cbValidFields.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>124, 21</value>\n  </data>\n  <data name=\"&gt;&gt;rbDefaultDataSetName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bRemove.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>69, 276</value>\n  </data>\n  <data name=\"&gt;&gt;cbValidFields.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lParmPrompt.Parent\" xml:space=\"preserve\">\n    <value>gbPropertyEdit</value>\n  </data>\n  <data name=\"lDefaultValueFields.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>226, 46</value>\n  </data>\n  <data name=\"ckbParmAllowBlank.Text\" xml:space=\"preserve\">\n    <value>Allow blank (strings only)</value>\n  </data>\n  <data name=\"&gt;&gt;bRemove.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bAdd.Text\" xml:space=\"preserve\">\n    <value>Add</value>\n  </data>\n  <data name=\"&gt;&gt;cbDefaultDataSets.Name\" xml:space=\"preserve\">\n    <value>cbDefaultDataSets</value>\n  </data>\n  <data name=\"cbValidFields.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;rbValues.Name\" xml:space=\"preserve\">\n    <value>rbValues</value>\n  </data>\n  <data name=\"&gt;&gt;lParmName.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"gbValidValues.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 187</value>\n  </data>\n  <data name=\"&gt;&gt;lParmType.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbValues.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbValidFields.Name\" xml:space=\"preserve\">\n    <value>cbValidFields</value>\n  </data>\n  <data name=\"&gt;&gt;lDisplayField.Parent\" xml:space=\"preserve\">\n    <value>gbValidValues</value>\n  </data>\n  <data name=\"cbDefaultValueField.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>124, 21</value>\n  </data>\n  <data name=\"&gt;&gt;lParmPrompt.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"gbValidValues.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>431, 108</value>\n  </data>\n  <data name=\"cbDefaultValueField.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"cbValidDisplayField.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>124, 21</value>\n  </data>\n  <data name=\"&gt;&gt;rbDefaultValues.Name\" xml:space=\"preserve\">\n    <value>rbDefaultValues</value>\n  </data>\n  <data name=\"&gt;&gt;gbPropertyEdit.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbDefaultValueField.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>301, 46</value>\n  </data>\n  <data name=\"&gt;&gt;tbParmDefaultValue.Parent\" xml:space=\"preserve\">\n    <value>gbDefaultValues</value>\n  </data>\n  <data name=\"&gt;&gt;lDefaultValueFields.Parent\" xml:space=\"preserve\">\n    <value>gbDefaultValues</value>\n  </data>\n  <data name=\"tbParmPrompt.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>49</value>\n  </data>\n  <data name=\"lValidValuesField.Text\" xml:space=\"preserve\">\n    <value>Value Field</value>\n  </data>\n  <data name=\"lParmName.Text\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"bParmDown.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>135, 43</value>\n  </data>\n  <data name=\"&gt;&gt;ckbParmAllowBlank.Parent\" xml:space=\"preserve\">\n    <value>gbPropertyEdit</value>\n  </data>\n  <data name=\"&gt;&gt;lParmPrompt.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbParmType.Parent\" xml:space=\"preserve\">\n    <value>gbPropertyEdit</value>\n  </data>\n  <data name=\"cbParmType.Items1\" xml:space=\"preserve\">\n    <value>DateTime</value>\n  </data>\n  <data name=\"bAdd.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>60, 23</value>\n  </data>\n  <data name=\"cbParmType.Items2\" xml:space=\"preserve\">\n    <value>Integer</value>\n  </data>\n  <data name=\"rbDefaultDataSetName.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"gbValidValues.Text\" xml:space=\"preserve\">\n    <value>Valid Values</value>\n  </data>\n  <data name=\"&gt;&gt;lDefaultValueFields.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lbParameters.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"bParmUp.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>47</value>\n  </data>\n  <data name=\"&gt;&gt;tbParmPrompt.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;lDefaultValueFields.Name\" xml:space=\"preserve\">\n    <value>lDefaultValueFields</value>\n  </data>\n  <data name=\"bValidValues.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>395, 16</value>\n  </data>\n  <data name=\"&gt;&gt;lDisplayField.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bParmDown.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"rbDefaultValues.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 20</value>\n  </data>\n  <data name=\"&gt;&gt;ckbParmMultiValue.Parent\" xml:space=\"preserve\">\n    <value>gbPropertyEdit</value>\n  </data>\n  <data name=\"&gt;&gt;cbValidFields.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"rbDefaultDataSetName.Visible\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"rbValues.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>6, 19</value>\n  </data>\n  <data name=\"&gt;&gt;lbParameters.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lParmPrompt.Name\" xml:space=\"preserve\">\n    <value>lParmPrompt</value>\n  </data>\n  <data name=\"lParmName.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"ckbParmMultiValue.Text\" xml:space=\"preserve\">\n    <value>MultiValue</value>\n  </data>\n  <data name=\"rbDataSet.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 21</value>\n  </data>\n  <data name=\"tbParmValidValues.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>76, 19</value>\n  </data>\n  <data name=\"cbDefaultDataSets.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>112, 21</value>\n  </data>\n  <data name=\"&gt;&gt;lbParameters.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bRemove.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;bDefaultValues.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;cbDefaultValueField.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;ckbParmAllowNull.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;rbValues.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"ckbParmMultiValue.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>57</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>614, 305</value>\n  </data>\n  <data name=\"&gt;&gt;lValidValuesField.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bValidValues.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"lParmName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 12</value>\n  </data>\n  <data name=\"ckbParmMultiValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>79, 24</value>\n  </data>\n  <data name=\"&gt;&gt;cbValidDataSets.Name\" xml:space=\"preserve\">\n    <value>cbValidDataSets</value>\n  </data>\n  <data name=\"&gt;&gt;lParmType.Name\" xml:space=\"preserve\">\n    <value>lParmType</value>\n  </data>\n  <data name=\"lParmType.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>55</value>\n  </data>\n  <data name=\"tbParmDefaultValue.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bValidValues.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;tbParmName.Parent\" xml:space=\"preserve\">\n    <value>gbPropertyEdit</value>\n  </data>\n  <data name=\"&gt;&gt;bParmUp.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;lDisplayField.Name\" xml:space=\"preserve\">\n    <value>lDisplayField</value>\n  </data>\n  <data name=\"lValidValuesField.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;cbValidDisplayField.Name\" xml:space=\"preserve\">\n    <value>cbValidDisplayField</value>\n  </data>\n  <data name=\"&gt;&gt;gbDefaultValues.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;rbDataSet.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bRemove.Text\" xml:space=\"preserve\">\n    <value>Remove</value>\n  </data>\n  <data name=\"lParmPrompt.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"lDefaultValueFields.Text\" xml:space=\"preserve\">\n    <value>Value Field</value>\n  </data>\n  <data name=\"ckbParmAllowBlank.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>82, 63</value>\n  </data>\n  <data name=\"bDefaultValues.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>395, 18</value>\n  </data>\n  <data name=\"&gt;&gt;tbParmValidValues.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bValidValues.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>30, 23</value>\n  </data>\n  <data name=\"bDefaultValues.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>30, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bDefaultValues.Name\" xml:space=\"preserve\">\n    <value>bDefaultValues</value>\n  </data>\n  <data name=\"cbValidDataSets.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>108, 46</value>\n  </data>\n  <data name=\"ckbParmAllowNull.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>50</value>\n  </data>\n  <data name=\"ckbParmAllowBlank.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>148, 24</value>\n  </data>\n  <data name=\"&gt;&gt;tbParmPrompt.Parent\" xml:space=\"preserve\">\n    <value>gbPropertyEdit</value>\n  </data>\n  <data name=\"&gt;&gt;ckbParmAllowBlank.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;bAdd.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;gbDefaultValues.Parent\" xml:space=\"preserve\">\n    <value>gbPropertyEdit</value>\n  </data>\n  <data name=\"lbParameters.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>26</value>\n  </data>\n  <data name=\"ckbParmMultiValue.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>236, 63</value>\n  </data>\n  <data name=\"lValidValuesField.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>66, 18</value>\n  </data>\n  <data name=\"cbParmType.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>87, 21</value>\n  </data>\n  <data name=\"&gt;&gt;rbValues.Parent\" xml:space=\"preserve\">\n    <value>gbValidValues</value>\n  </data>\n  <data name=\"bParmDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 24</value>\n  </data>\n  <data name=\"bAdd.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>27</value>\n  </data>\n  <data name=\"&gt;&gt;bParmDown.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;ckbParmAllowNull.Name\" xml:space=\"preserve\">\n    <value>ckbParmAllowNull</value>\n  </data>\n  <data name=\"&gt;&gt;gbValidValues.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bDefaultValues.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"bParmUp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>135, 3</value>\n  </data>\n  <data name=\"bDefaultValues.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"rbDefaultValues.Text\" xml:space=\"preserve\">\n    <value>Values</value>\n  </data>\n  <data name=\"&gt;&gt;bParmUp.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"ckbParmAllowNull.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 24</value>\n  </data>\n  <data name=\"&gt;&gt;cbDefaultValueField.Parent\" xml:space=\"preserve\">\n    <value>gbDefaultValues</value>\n  </data>\n  <data name=\"&gt;&gt;ckbParmMultiValue.Name\" xml:space=\"preserve\">\n    <value>ckbParmMultiValue</value>\n  </data>\n  <data name=\"lParmType.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>157, 10</value>\n  </data>\n  <data name=\"&gt;&gt;bParmUp.Name\" xml:space=\"preserve\">\n    <value>bParmUp</value>\n  </data>\n  <data name=\"cbParmType.Items3\" xml:space=\"preserve\">\n    <value>Float</value>\n  </data>\n  <data name=\"&gt;&gt;lParmName.Parent\" xml:space=\"preserve\">\n    <value>gbPropertyEdit</value>\n  </data>\n  <data name=\"lParmName.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>54</value>\n  </data>\n  <data name=\"&gt;&gt;bRemove.Name\" xml:space=\"preserve\">\n    <value>bRemove</value>\n  </data>\n  <data name=\"&gt;&gt;bValidValues.Parent\" xml:space=\"preserve\">\n    <value>gbValidValues</value>\n  </data>\n  <data name=\"gbPropertyEdit.Enabled\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"rbDataSet.Text\" xml:space=\"preserve\">\n    <value>Data Set Name</value>\n  </data>\n  <data name=\"bParmUp.Text\" xml:space=\"preserve\">\n    <value></value>\n  </data>\n  <data name=\"ckbParmAllowNull.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 63</value>\n  </data>\n  <data name=\"&gt;&gt;gbValidValues.Parent\" xml:space=\"preserve\">\n    <value>gbPropertyEdit</value>\n  </data>\n  <data name=\"&gt;&gt;rbDataSet.Parent\" xml:space=\"preserve\">\n    <value>gbValidValues</value>\n  </data>\n  <data name=\"cbDefaultValueField.Visible\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"lParmPrompt.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 19</value>\n  </data>\n  <data name=\"cbParmType.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>228, 10</value>\n  </data>\n  <data name=\"bParmDown.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Wingdings, 8.25pt, style=Bold</value>\n  </data>\n  <data name=\"&gt;&gt;rbDataSet.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;ckbParmAllowBlank.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;ckbParmMultiValue.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;gbValidValues.Name\" xml:space=\"preserve\">\n    <value>gbValidValues</value>\n  </data>\n  <data name=\"&gt;&gt;gbPropertyEdit.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbValidDataSets.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"rbDefaultValues.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"lValidValuesField.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>35</value>\n  </data>\n  <data name=\"bRemove.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>60, 23</value>\n  </data>\n  <data name=\"cbValidDisplayField.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"cbValidFields.Visible\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"lDefaultValueFields.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>35</value>\n  </data>\n  <data name=\"rbDefaultDataSetName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>6, 46</value>\n  </data>\n  <data name=\"&gt;&gt;tbParmDefaultValue.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"cbParmType.Items4\" xml:space=\"preserve\">\n    <value>String</value>\n  </data>\n  <data name=\"ckbParmAllowNull.Text\" xml:space=\"preserve\">\n    <value>Allow null</value>\n  </data>\n  <data name=\"&gt;&gt;tbParmName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"gbValidValues.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>53</value>\n  </data>\n  <data name=\"rbDataSet.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"gbDefaultValues.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>4, 93</value>\n  </data>\n  <data name=\"tbParmName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>55, 11</value>\n  </data>\n  <data name=\"lbParameters.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>126, 264</value>\n  </data>\n  <data name=\"gbPropertyEdit.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>49</value>\n  </data>\n  <data name=\"&gt;&gt;lDefaultValueFields.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/ReportParameterCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bAdd.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>67, 23</value>\n  </data>\n  <data name=\"bAdd.Text\" xml:space=\"preserve\">\n    <value>Добавить</value>\n  </data>\n  <data name=\"bRemove.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"ckbParmMultiValue.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>277, 63</value>\n  </data>\n  <data name=\"ckbParmMultiValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>135, 24</value>\n  </data>\n  <data name=\"ckbParmMultiValue.Text\" xml:space=\"preserve\">\n    <value>несколько значений</value>\n  </data>\n  <data name=\"cbValidDisplayField.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>311, 83</value>\n  </data>\n  <data name=\"cbValidDisplayField.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>114, 21</value>\n  </data>\n  <data name=\"cbValidFields.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>311, 46</value>\n  </data>\n  <data name=\"cbValidFields.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>114, 21</value>\n  </data>\n  <data name=\"lDisplayField.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>199, 86</value>\n  </data>\n  <data name=\"lDisplayField.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>115, 16</value>\n  </data>\n  <data name=\"lDisplayField.Text\" xml:space=\"preserve\">\n    <value>Отображаемое поле</value>\n  </data>\n  <data name=\"lValidValuesField.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>93, 18</value>\n  </data>\n  <data name=\"lValidValuesField.Text\" xml:space=\"preserve\">\n    <value>Поле значения</value>\n  </data>\n  <data name=\"rbValues.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>77, 20</value>\n  </data>\n  <data name=\"rbValues.Text\" xml:space=\"preserve\">\n    <value>Значения</value>\n  </data>\n  <data name=\"rbDataSet.Text\" xml:space=\"preserve\">\n    <value>Набор данных</value>\n  </data>\n  <data name=\"tbParmValidValues.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>108, 19</value>\n  </data>\n  <data name=\"tbParmValidValues.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>281, 20</value>\n  </data>\n  <data name=\"gbValidValues.Text\" xml:space=\"preserve\">\n    <value>Корректность значений</value>\n  </data>\n  <data name=\"ckbParmAllowBlank.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>167, 63</value>\n  </data>\n  <data name=\"ckbParmAllowBlank.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 24</value>\n  </data>\n  <data name=\"ckbParmAllowBlank.Text\" xml:space=\"preserve\">\n    <value>пустые строки</value>\n  </data>\n  <data name=\"ckbParmAllowNull.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>158, 24</value>\n  </data>\n  <data name=\"ckbParmAllowNull.Text\" xml:space=\"preserve\">\n    <value>Разрешить без значения</value>\n  </data>\n  <data name=\"tbParmPrompt.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>74, 37</value>\n  </data>\n  <data name=\"tbParmPrompt.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>249, 20</value>\n  </data>\n  <data name=\"lParmPrompt.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 19</value>\n  </data>\n  <data name=\"lParmPrompt.Text\" xml:space=\"preserve\">\n    <value>Подсказка</value>\n  </data>\n  <data name=\"cbParmType.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>236, 10</value>\n  </data>\n  <data name=\"lParmType.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>73, 21</value>\n  </data>\n  <data name=\"lParmType.Text\" xml:space=\"preserve\">\n    <value>Тип данных</value>\n  </data>\n  <data name=\"tbParmName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>74, 12</value>\n  </data>\n  <data name=\"tbParmName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 20</value>\n  </data>\n  <data name=\"lParmName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>70, 19</value>\n  </data>\n  <data name=\"lParmName.Text\" xml:space=\"preserve\">\n    <value>Название</value>\n  </data>\n  <data name=\"cbDefaultValueField.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>311, 46</value>\n  </data>\n  <data name=\"cbDefaultValueField.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>114, 21</value>\n  </data>\n  <data name=\"tbParmDefaultValue.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>108, 19</value>\n  </data>\n  <data name=\"tbParmDefaultValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>281, 20</value>\n  </data>\n  <data name=\"lDefaultValueFields.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>93, 21</value>\n  </data>\n  <data name=\"lDefaultValueFields.Text\" xml:space=\"preserve\">\n    <value>Поле значения</value>\n  </data>\n  <data name=\"rbDefaultValues.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>77, 20</value>\n  </data>\n  <data name=\"rbDefaultValues.Text\" xml:space=\"preserve\">\n    <value>Значения</value>\n  </data>\n  <data name=\"rbDefaultDataSetName.Text\" xml:space=\"preserve\">\n    <value>Набор данных</value>\n  </data>\n  <data name=\"gbDefaultValues.Text\" xml:space=\"preserve\">\n    <value>Значения по умолчанию</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/ReportXmlCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.IO;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for StyleCtl.\n\t/// </summary>\n\tinternal class ReportXmlCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n\t\tprivate DesignXmlDraw _Draw;\n\t\tprivate System.Windows.Forms.Label label1;\n\t\tprivate System.Windows.Forms.TextBox tbDataTransform;\n\t\tprivate System.Windows.Forms.TextBox tbDataSchema;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\tprivate System.Windows.Forms.TextBox tbDataElementName;\n\t\tprivate System.Windows.Forms.Label label3;\n\t\tprivate System.Windows.Forms.Label label4;\n\t\tprivate System.Windows.Forms.ComboBox cbElementStyle;\n\t\tprivate System.Windows.Forms.Button bOpenXsl;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n\t\tinternal ReportXmlCtl(DesignXmlDraw dxDraw)\n\t\t{\n\t\t\t_Draw = dxDraw;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues();\t\t\t\n\t\t}\n\n\t\tprivate void InitValues()\n\t\t{\n\t\t\tXmlNode rNode = _Draw.GetReportNode();\n\t\t\ttbDataTransform.Text = _Draw.GetElementValue(rNode, \"DataTransform\", \"\");\n\t\t\ttbDataSchema.Text = _Draw.GetElementValue(rNode, \"DataSchema\", \"\");\n\t\t\ttbDataElementName.Text = _Draw.GetElementValue(rNode, \"DataElementName\", \"Report\");\n\t\t\tcbElementStyle.Text = _Draw.GetElementValue(rNode, \"DataElementStyle\", \"AttributeNormal\");\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ReportXmlCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.tbDataTransform = new System.Windows.Forms.TextBox();\n\t\t\tthis.tbDataSchema = new System.Windows.Forms.TextBox();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.tbDataElementName = new System.Windows.Forms.TextBox();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.label4 = new System.Windows.Forms.Label();\n\t\t\tthis.cbElementStyle = new System.Windows.Forms.ComboBox();\n\t\t\tthis.bOpenXsl = new System.Windows.Forms.Button();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// tbDataTransform\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbDataTransform, \"tbDataTransform\");\n\t\t\tthis.tbDataTransform.Name = \"tbDataTransform\";\n\t\t\t// \n\t\t\t// tbDataSchema\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbDataSchema, \"tbDataSchema\");\n\t\t\tthis.tbDataSchema.Name = \"tbDataSchema\";\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// tbDataElementName\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbDataElementName, \"tbDataElementName\");\n\t\t\tthis.tbDataElementName.Name = \"tbDataElementName\";\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// label4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label4, \"label4\");\n\t\t\tthis.label4.Name = \"label4\";\n\t\t\t// \n\t\t\t// cbElementStyle\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbElementStyle, \"cbElementStyle\");\n\t\t\tthis.cbElementStyle.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbElementStyle.Items.AddRange(new object[] {\n            resources.GetString(\"cbElementStyle.Items\"),\n            resources.GetString(\"cbElementStyle.Items1\")});\n\t\t\tthis.cbElementStyle.Name = \"cbElementStyle\";\n\t\t\t// \n\t\t\t// bOpenXsl\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bOpenXsl, \"bOpenXsl\");\n\t\t\tthis.bOpenXsl.Name = \"bOpenXsl\";\n\t\t\tthis.bOpenXsl.Click += new System.EventHandler(this.bOpenXsl_Click);\n\t\t\t// \n\t\t\t// ReportXmlCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.bOpenXsl);\n\t\t\tthis.Controls.Add(this.cbElementStyle);\n\t\t\tthis.Controls.Add(this.label4);\n\t\t\tthis.Controls.Add(this.tbDataElementName);\n\t\t\tthis.Controls.Add(this.label3);\n\t\t\tthis.Controls.Add(this.tbDataSchema);\n\t\t\tthis.Controls.Add(this.label2);\n\t\t\tthis.Controls.Add(this.tbDataTransform);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Name = \"ReportXmlCtl\";\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\n\t\tpublic bool IsValid()\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\tXmlNode rNode = _Draw.GetReportNode();\n\n\t\t\tif (tbDataTransform.Text.Length > 0)\n\t\t\t\t_Draw.SetElement(rNode, \"DataTransform\", tbDataTransform.Text);\n\t\t\telse\n\t\t\t\t_Draw.RemoveElement(rNode, \"DataTransform\");\n\t\t\t\n\t\t\tif (tbDataSchema.Text.Length > 0)\n\t\t\t\t_Draw.SetElement(rNode, \"DataSchema\", tbDataSchema.Text);\n\t\t\telse\n\t\t\t\t_Draw.RemoveElement(rNode, \"DataSchema\");\n\n\t\t\tif (tbDataElementName.Text.Length > 0)\n\t\t\t\t_Draw.SetElement(rNode, \"DataElementName\", tbDataElementName.Text);\n\t\t\telse\n\t\t\t\t_Draw.RemoveElement(rNode, \"DataElementName\");\n\n\t\t\t_Draw.SetElement(rNode, \"DataElementStyle\", cbElementStyle.Text);\n\t\t}\n\n\t\tprivate void bOpenXsl_Click(object sender, System.EventArgs e)\n\t\t{\n            using (OpenFileDialog ofd = new OpenFileDialog())\n            {\n                ofd.Filter = Strings.ReportXmlCtl_bOpenXsl_Click_XSLFilesFilter;\n                ofd.FilterIndex = 1;\n                ofd.FileName = \"*.xsl\";\n\n                ofd.Title = Strings.ReportXmlCtl_bOpenXsl_Click_XslFilerTitle;\n                //\t\t\tofd.DefaultExt = \"xsl\";\n                //\t\t\tofd.AddExtension = true;\n\n                if (ofd.ShowDialog() == DialogResult.OK)\n                {\n                    string file = Path.GetFileName(ofd.FileName);\n\n                    tbDataTransform.Text = file;\n                }\n            }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/ReportXmlCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>XSL Data Transform</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"tbDataSchema.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>248, 20</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>472, 288</value>\n  </data>\n  <data name=\"&gt;&gt;tbDataElementName.Name\" xml:space=\"preserve\">\n    <value>tbDataElementName</value>\n  </data>\n  <data name=\"cbElementStyle.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>136, 152</value>\n  </data>\n  <data name=\"tbDataSchema.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>136, 72</value>\n  </data>\n  <data name=\"&gt;&gt;tbDataSchema.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;tbDataTransform.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;tbDataSchema.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbElementStyle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>144, 21</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;tbDataElementName.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbDataTransform.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"tbDataTransform.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>248, 20</value>\n  </data>\n  <data name=\"tbDataTransform.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>136, 32</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 23</value>\n  </data>\n  <data name=\"&gt;&gt;tbDataTransform.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"&gt;&gt;tbDataSchema.Name\" xml:space=\"preserve\">\n    <value>tbDataSchema</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 112</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"tbDataSchema.Text\" xml:space=\"preserve\">\n    <value>textBox1</value>\n  </data>\n  <data name=\"&gt;&gt;cbElementStyle.Name\" xml:space=\"preserve\">\n    <value>cbElementStyle</value>\n  </data>\n  <data name=\"&gt;&gt;bOpenXsl.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>112, 23</value>\n  </data>\n  <data name=\"cbElementStyle.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"bOpenXsl.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>400, 32</value>\n  </data>\n  <data name=\"cbElementStyle.Items\" xml:space=\"preserve\">\n    <value>AttributeNormal</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbDataElementName.Text\" xml:space=\"preserve\">\n    <value>textBox1</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 23</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Name\" xml:space=\"preserve\">\n    <value>label4</value>\n  </data>\n  <data name=\"bOpenXsl.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"&gt;&gt;tbDataTransform.Name\" xml:space=\"preserve\">\n    <value>tbDataTransform</value>\n  </data>\n  <data name=\"cbElementStyle.Items1\" xml:space=\"preserve\">\n    <value>ElementNormal</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Element Style</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Top Element Name</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbDataSchema.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label4.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"tbDataElementName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>248, 20</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bOpenXsl.Name\" xml:space=\"preserve\">\n    <value>bOpenXsl</value>\n  </data>\n  <data name=\"&gt;&gt;cbElementStyle.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bOpenXsl.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbDataElementName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"tbDataSchema.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>ReportXmlCtl</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 32</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 152</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Data Schema</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 72</value>\n  </data>\n  <data name=\"bOpenXsl.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 23</value>\n  </data>\n  <data name=\"tbDataTransform.Text\" xml:space=\"preserve\">\n    <value>textBox1</value>\n  </data>\n  <data name=\"tbDataElementName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>136, 112</value>\n  </data>\n  <data name=\"&gt;&gt;tbDataElementName.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"tbDataElementName.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"bOpenXsl.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 23</value>\n  </data>\n  <data name=\"&gt;&gt;cbElementStyle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bOpenXsl.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;cbElementStyle.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"tbDataTransform.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/ReportXmlCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>168, 23</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Преобразование данных XSL</value>\n  </data>\n  <data name=\"tbDataTransform.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>190, 32</value>\n  </data>\n  <data name=\"tbDataTransform.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>230, 20</value>\n  </data>\n  <data name=\"tbDataSchema.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>190, 72</value>\n  </data>\n  <data name=\"tbDataSchema.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>230, 20</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>168, 23</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Схема данных</value>\n  </data>\n  <data name=\"tbDataElementName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>190, 112</value>\n  </data>\n  <data name=\"tbDataElementName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>230, 20</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>168, 23</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Название корневого элемента</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>168, 23</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Стиль элемента</value>\n  </data>\n  <data name=\"cbElementStyle.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>190, 149</value>\n  </data>\n  <data name=\"bOpenXsl.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>426, 32</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/Resources/Strings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Majorsilence.Reporting.RdlDesign.Resources {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Strings {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Strings() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Majorsilence.Reporting.RdlDesign.Resources.Strings\", typeof(Strings).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Bitmap Files (*.bmp)|*.bmp|JPEG (*.jpg;*.jpeg;*.jpe;*.jfif)|*.jpg;*.jpeg;*.jpe;*.jfif|GIF (*.gif)|*.gif|TIFF (*.tif;*.tiff)|*.tif;*.tiff|PNG (*.png)|*.png|All Picture Files|*.bmp;*.jpg;*.jpeg;*.jpe;*.jfif;*.gif;*.tif;*.tiff;*.png|All files (*.*)|*.*.\n        /// </summary>\n        internal static string BackgroundCtl_bExternal_Click_ImageFilesFilter {\n            get {\n                return ResourceManager.GetString(\"BackgroundCtl_bExternal_Click_ImageFilesFilter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Code Verification.\n        /// </summary>\n        internal static string CodeCtl_Show_CodeVerification {\n            get {\n                return ResourceManager.GetString(\"CodeCtl_Show_CodeVerification\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to No errors.\n        /// </summary>\n        internal static string CodeCtl_Show_NoErrors {\n            get {\n                return ResourceManager.GetString(\"CodeCtl_Show_NoErrors\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to XML files (*.xml)|*.xml|All files (*.*)|*.*.\n        /// </summary>\n        internal static string DataSetRowsCtl_bRowsFile_Click_XMLFilesFilter {\n            get {\n                return ResourceManager.GetString(\"DataSetRowsCtl_bRowsFile_Click_XMLFilesFilter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Specify XML File Name.\n        /// </summary>\n        internal static string DataSetRowsCtl_bRowsFile_Click_XMLFilesTitle {\n            get {\n                return ResourceManager.GetString(\"DataSetRowsCtl_bRowsFile_Click_XMLFilesTitle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Datasource &apos;{0}&apos; not found..\n        /// </summary>\n        internal static string DataSetRowsCtl_Show_DatasourceNotFound {\n            get {\n                return ResourceManager.GetString(\"DataSetRowsCtl_Show_DatasourceNotFound\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Load Failed.\n        /// </summary>\n        internal static string DataSetRowsCtl_Show_LoadFailed {\n            get {\n                return ResourceManager.GetString(\"DataSetRowsCtl_Show_LoadFailed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error Reading Data Rows.\n        /// </summary>\n        internal static string DataSetRowsCtl_ShowB_ErrorReadingDataRows {\n            get {\n                return ResourceManager.GetString(\"DataSetRowsCtl_ShowB_ErrorReadingDataRows\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unable to convert {1} to {0}: {2}.\n        /// </summary>\n        internal static string DataSetRowsCtl_ShowB_UnableConvert {\n            get {\n                return ResourceManager.GetString(\"DataSetRowsCtl_ShowB_UnableConvert\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Do you want to see any more errors?.\n        /// </summary>\n        internal static string DataSetRowsCtl_ShowB_WantSeeErrors {\n            get {\n                return ResourceManager.GetString(\"DataSetRowsCtl_ShowB_WantSeeErrors\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to File name required when &apos;Use XML file for data checked&apos;.\n        /// </summary>\n        internal static string DataSetRowsCtl_ShowC_FileNameRequired {\n            get {\n                return ResourceManager.GetString(\"DataSetRowsCtl_ShowC_FileNameRequired\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unable to locate DataSource Shared file.  Try saving report first.\n        /// </summary>\n        internal static string DataSetRowsCtl_ShowC_UnableLocateDSR {\n            get {\n                return ResourceManager.GetString(\"DataSetRowsCtl_ShowC_UnableLocateDSR\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name.\n        /// </summary>\n        internal static string DataSetsCtl_Show_Name {\n            get {\n                return ResourceManager.GetString(\"DataSetsCtl_Show_Name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Group.\n        /// </summary>\n        internal static string DesignCtl_SelectionName_Group {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_SelectionName_Group\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Group Selection.\n        /// </summary>\n        internal static string DesignCtl_SelectionName_GroupSelection {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_SelectionName_GroupSelection\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to in.\n        /// </summary>\n        internal static string DesignCtl_SelectionName_in {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_SelectionName_in\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to *Unnamed*.\n        /// </summary>\n        internal static string DesignCtl_SelectionName_Unnamed {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_SelectionName_Unnamed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Charts can only be inserted in the body of the report..\n        /// </summary>\n        internal static string DesignCtl_Show_ChartsInsert {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Show_ChartsInsert\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to CustomReportItem {0} method GetCustomReportItemXml must return XML enclosed by &lt;CustomReportItem&gt; and &lt;/CustomReportItem&gt;\n        ///\n        ///XML in error:\n        ///{1}.\n        /// </summary>\n        internal static string DesignCtl_Show_CustomReportItem {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Show_CustomReportItem\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Exception building CustomReportItem insert: {0}.\n        /// </summary>\n        internal static string DesignCtl_Show_CustomReportItemException {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Show_CustomReportItemException\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Insert.\n        /// </summary>\n        internal static string DesignCtl_Show_Insert {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Show_Insert\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Lists can only be inserted in the body of the report..\n        /// </summary>\n        internal static string DesignCtl_Show_ListsInBody {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Show_ListsInBody\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Matrixs can only be inserted in the body of the report..\n        /// </summary>\n        internal static string DesignCtl_Show_MatrixsInBody {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Show_MatrixsInBody\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Paste.\n        /// </summary>\n        internal static string DesignCtl_Show_Paste {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Show_Paste\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Subreports can only be inserted in the body of the report..\n        /// </summary>\n        internal static string DesignCtl_Show_SubreportsInBody {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Show_SubreportsInBody\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Tables can only be inserted in the body of the report..\n        /// </summary>\n        internal static string DesignCtl_Show_TablesInBody {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Show_TablesInBody\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unable to create RDL syntax.\n        /// </summary>\n        internal static string DesignCtl_Show_UnableCreateRDL {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Show_UnableCreateRDL\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Copy.\n        /// </summary>\n        internal static string DesignCtl_ShowB_Copy {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_ShowB_Copy\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error building CustomReportItem menus: {0}.\n        /// </summary>\n        internal static string DesignCtl_ShowB_CustomReportItemError {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_ShowB_CustomReportItemError\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Do you want to replace contents of TableCell?.\n        /// </summary>\n        internal static string DesignCtl_ShowB_WantReplaceCell {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_ShowB_WantReplaceCell\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Do you want to select the {0}?.\n        /// </summary>\n        internal static string DesignCtl_ShowB_WantSelect {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_ShowB_WantSelect\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Internal error: illegal insert syntax:.\n        /// </summary>\n        internal static string DesignCtl_ShowC_IllegalInsertSyntax {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_ShowC_IllegalInsertSyntax\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Align.\n        /// </summary>\n        internal static string DesignCtl_Undo_Align {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_Align\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Cut.\n        /// </summary>\n        internal static string DesignCtl_Undo_Cut {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_Cut\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Delete.\n        /// </summary>\n        internal static string DesignCtl_Undo_Delete {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_Delete\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Delete Grouping.\n        /// </summary>\n        internal static string DesignCtl_Undo_DeleteGrouping {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_DeleteGrouping\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Delete Table.\n        /// </summary>\n        internal static string DesignCtl_Undo_DeleteTable {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_DeleteTable\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Delete Table Column.\n        /// </summary>\n        internal static string DesignCtl_Undo_DeleteTableColumn {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_DeleteTableColumn\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Delete Table Group.\n        /// </summary>\n        internal static string DesignCtl_Undo_DeleteTableGroup {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_DeleteTableGroup\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Delete Table Row.\n        /// </summary>\n        internal static string DesignCtl_Undo_DeleteTableRow {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_DeleteTableRow\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Dialog.\n        /// </summary>\n        internal static string DesignCtl_Undo_Dialog {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_Dialog\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Dialog Grouping.\n        /// </summary>\n        internal static string DesignCtl_Undo_DialogGrouping {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_DialogGrouping\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Dialog Table Group Edit.\n        /// </summary>\n        internal static string DesignCtl_Undo_DialogTableGroupEdit {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_DialogTableGroupEdit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Insert.\n        /// </summary>\n        internal static string DesignCtl_Undo_Insert {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_Insert\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Insert Category Grouping.\n        /// </summary>\n        internal static string DesignCtl_Undo_InsertCategoryGrouping {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_InsertCategoryGrouping\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Insert Chart.\n        /// </summary>\n        internal static string DesignCtl_Undo_InsertChart {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_InsertChart\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Insert Matrix.\n        /// </summary>\n        internal static string DesignCtl_Undo_InsertMatrix {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_InsertMatrix\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Insert Series Grouping.\n        /// </summary>\n        internal static string DesignCtl_Undo_InsertSeriesGrouping {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_InsertSeriesGrouping\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Insert Table.\n        /// </summary>\n        internal static string DesignCtl_Undo_InsertTable {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_InsertTable\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Insert Table Column.\n        /// </summary>\n        internal static string DesignCtl_Undo_InsertTableColumn {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_InsertTableColumn\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Insert Table Group.\n        /// </summary>\n        internal static string DesignCtl_Undo_InsertTableGroup {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_InsertTableGroup\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Insert Table Row.\n        /// </summary>\n        internal static string DesignCtl_Undo_InsertTableRow {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_InsertTableRow\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Matrix Delete.\n        /// </summary>\n        internal static string DesignCtl_Undo_MatrixDelete {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_MatrixDelete\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Matrix Delete Group.\n        /// </summary>\n        internal static string DesignCtl_Undo_MatrixDeleteGroup {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_MatrixDeleteGroup\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Matrix Dialog.\n        /// </summary>\n        internal static string DesignCtl_Undo_MatrixDialog {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_MatrixDialog\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Matrix Edit.\n        /// </summary>\n        internal static string DesignCtl_Undo_MatrixEdit {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_MatrixEdit\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Matrix Insert Column Group.\n        /// </summary>\n        internal static string DesignCtl_Undo_MatrixInsertColumnGroup {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_MatrixInsertColumnGroup\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Matrix Insert Row Group.\n        /// </summary>\n        internal static string DesignCtl_Undo_MatrixInsertRowGroup {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_MatrixInsertRowGroup\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Move.\n        /// </summary>\n        internal static string DesignCtl_Undo_Move {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_Move\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Move/Size.\n        /// </summary>\n        internal static string DesignCtl_Undo_Move_Size {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_Move_Size\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Padding.\n        /// </summary>\n        internal static string DesignCtl_Undo_Padding {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_Padding\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Paste.\n        /// </summary>\n        internal static string DesignCtl_Undo_Paste {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_Paste\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Size.\n        /// </summary>\n        internal static string DesignCtl_Undo_Size {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_Size\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Spacing.\n        /// </summary>\n        internal static string DesignCtl_Undo_Spacing {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_Spacing\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Style.\n        /// </summary>\n        internal static string DesignCtl_Undo_Style {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_Style\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Table Dialog.\n        /// </summary>\n        internal static string DesignCtl_Undo_TableDialog {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_TableDialog\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Textbox Value.\n        /// </summary>\n        internal static string DesignCtl_Undo_TextboxValue {\n            get {\n                return ResourceManager.GetString(\"DesignCtl_Undo_TextboxValue\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Number format is invalid.  ###.## is the proper form..\n        /// </summary>\n        internal static string DesignerUtility_Error_NumberFormatinvalid {\n            get {\n                return ResourceManager.GetString(\"DesignerUtility_Error_NumberFormatinvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Size can&apos;t be less than zero..\n        /// </summary>\n        internal static string DesignerUtility_Error_SizeLessZero {\n            get {\n                return ResourceManager.GetString(\"DesignerUtility_Error_SizeLessZero\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Size unit is not valid.  Must be in, cm, mm, pt, or pc..\n        /// </summary>\n        internal static string DesignerUtility_Error_SizeUnitInvalid {\n            get {\n                return ResourceManager.GetString(\"DesignerUtility_Error_SizeUnitInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Size can&apos;t be zero..\n        /// </summary>\n        internal static string DesignerUtility_Error_SizeZero {\n            get {\n                return ResourceManager.GetString(\"DesignerUtility_Error_SizeZero\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unable to connect using dataProvider &apos;{0}&apos;.\n        /// </summary>\n        internal static string DesignerUtility_Show_ConnectDataProviderError {\n            get {\n                return ResourceManager.GetString(\"DesignerUtility_Show_ConnectDataProviderError\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error.\n        /// </summary>\n        internal static string DesignerUtility_Show_Error {\n            get {\n                return ResourceManager.GetString(\"DesignerUtility_Show_Error\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unable to open connection.\n        /// </summary>\n        internal static string DesignerUtility_Show_OpenConnectionError {\n            get {\n                return ResourceManager.GetString(\"DesignerUtility_Show_OpenConnectionError\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unable to open shared connection, password or file is invalid..\n        /// </summary>\n        internal static string DesignerUtility_Show_SharedConnectionError {\n            get {\n                return ResourceManager.GetString(\"DesignerUtility_Show_SharedConnectionError\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to SQL Error.\n        /// </summary>\n        internal static string DesignerUtility_Show_SQLError {\n            get {\n                return ResourceManager.GetString(\"DesignerUtility_Show_SQLError\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Test Connection.\n        /// </summary>\n        internal static string DesignerUtility_Show_TestConnection {\n            get {\n                return ResourceManager.GetString(\"DesignerUtility_Show_TestConnection\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Body ↑.\n        /// </summary>\n        internal static string DesignXmlDraw_BodyRegion_Title {\n            get {\n                return ResourceManager.GetString(\"DesignXmlDraw_BodyRegion_Title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to You can&apos;t paste a DataRegion into a page header or footer.\n        /// </summary>\n        internal static string DesignXmlDraw_Error_DataRegionIntoHeaderFooter {\n            get {\n                return ResourceManager.GetString(\"DesignXmlDraw_Error_DataRegionIntoHeaderFooter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to RDL doesn&apos;t contain a report element..\n        /// </summary>\n        internal static string DesignXmlDraw_Error_NoReport {\n            get {\n                return ResourceManager.GetString(\"DesignXmlDraw_Error_NoReport\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to You can&apos;t paste a Subreport into a page header or footer.\n        /// </summary>\n        internal static string DesignXmlDraw_Error_SubreportIntoHeaderFooter {\n            get {\n                return ResourceManager.GetString(\"DesignXmlDraw_Error_SubreportIntoHeaderFooter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Page Footer ↑.\n        /// </summary>\n        internal static string DesignXmlDraw_PageFooterRegion_Title {\n            get {\n                return ResourceManager.GetString(\"DesignXmlDraw_PageFooterRegion_Title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Page Header ↑.\n        /// </summary>\n        internal static string DesignXmlDraw_PageHeaderRegion_Title {\n            get {\n                return ResourceManager.GetString(\"DesignXmlDraw_PageHeaderRegion_Title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to XML is Invalid.\n        /// </summary>\n        internal static string DesignXmlDraw_Show_XMLInvalid {\n            get {\n                return ResourceManager.GetString(\"DesignXmlDraw_Show_XMLInvalid\", resourceCulture);\n            }\n        }\n        \n        internal static string DialogAbout_DialogAbout_About {\n            get {\n                return ResourceManager.GetString(\"DialogAbout_DialogAbout_About\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Version {0}.\n        /// </summary>\n        internal static string DialogAbout_DialogAbout_Version {\n            get {\n                return ResourceManager.GetString(\"DialogAbout_DialogAbout_Version\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Data source reference files (*.dsr)|*.dsr|All files (*.*)|*.*.\n        /// </summary>\n        internal static string DialogDatabase_bShared_Click_DSRFilter {\n            get {\n                return ResourceManager.GetString(\"DialogDatabase_bShared_Click_DSRFilter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Specify Data Source Reference File Name.\n        /// </summary>\n        internal static string DialogDatabase_bShared_Click_DSRTitle {\n            get {\n                return ResourceManager.GetString(\"DialogDatabase_bShared_Click_DSRTitle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to All files (*.*)|*.*.\n        /// </summary>\n        internal static string DialogDatabase_buttonSqliteSelectDatabase_Click_AllFilesFilter {\n            get {\n                return ResourceManager.GetString(\"DialogDatabase_buttonSqliteSelectDatabase_Click_AllFilesFilter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Connection:.\n        /// </summary>\n        internal static string DialogDatabase_cbConnectionTypes_SelectedIndexChanged_Connection {\n            get {\n                return ResourceManager.GetString(\"DialogDatabase_cbConnectionTypes_SelectedIndexChanged_Connection\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Shared Data Source File:.\n        /// </summary>\n        internal static string DialogDatabase_cbConnectionTypes_SelectedIndexChanged_Shared_Data_Source_File {\n            get {\n                return ResourceManager.GetString(\"DialogDatabase_cbConnectionTypes_SelectedIndexChanged_Shared_Data_Source_File\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unknown ifdef element {0} specified in template..\n        /// </summary>\n        internal static string DialogDatabase_Error_UnknownIfdef {\n            get {\n                return ResourceManager.GetString(\"DialogDatabase_Error_UnknownIfdef\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Connection successful!.\n        /// </summary>\n        internal static string DialogDatabase_Show_ConnectionSuccessful {\n            get {\n                return ResourceManager.GetString(\"DialogDatabase_Show_ConnectionSuccessful\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Internal Error.\n        /// </summary>\n        internal static string DialogDatabase_Show_InternalError {\n            get {\n                return ResourceManager.GetString(\"DialogDatabase_Show_InternalError\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error.\n        /// </summary>\n        internal static string DialogDatabase_ShowD_Error {\n            get {\n                return ResourceManager.GetString(\"DialogDatabase_ShowD_Error\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please select a Data Provider before testing..\n        /// </summary>\n        internal static string DialogDatabase_ShowD_SelectDataProvider {\n            get {\n                return ResourceManager.GetString(\"DialogDatabase_ShowD_SelectDataProvider\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Data source reference files (*.dsr)|*.dsr|All files (*.*)|*.*.\n        /// </summary>\n        internal static string DialogDataSourceRef_bGetFilename_Click_DSRFilter {\n            get {\n                return ResourceManager.GetString(\"DialogDataSourceRef_bGetFilename_Click_DSRFilter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Specify Data Source Reference File Name.\n        /// </summary>\n        internal static string DialogDataSourceRef_bGetFilename_Click_DSRTitle {\n            get {\n                return ResourceManager.GetString(\"DialogDataSourceRef_bGetFilename_Click_DSRTitle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unable to create data source reference file.\n        /// </summary>\n        internal static string DialogDataSourceRef_bOK_Click_UnableCreateDSR {\n            get {\n                return ResourceManager.GetString(\"DialogDataSourceRef_bOK_Click_UnableCreateDSR\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Data source reference files (*.dsr)|*.dsr|All files (*.*)|*.*.\n        /// </summary>\n        internal static string DialogDataSources_bGetFilename_Click_DSRFilter {\n            get {\n                return ResourceManager.GetString(\"DialogDataSources_bGetFilename_Click_DSRFilter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Specify Data Source Reference File Name.\n        /// </summary>\n        internal static string DialogDataSources_bGetFilename_Click_DSRTitle {\n            get {\n                return ResourceManager.GetString(\"DialogDataSources_bGetFilename_Click_DSRTitle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Each DataSource must have a unique name. &apos;{0}&apos; is repeated..\n        /// </summary>\n        internal static string DialogDataSources_ShowE_DataSourceMustUniqueN {\n            get {\n                return ResourceManager.GetString(\"DialogDataSources_ShowE_DataSourceMustUniqueN\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Data Sources.\n        /// </summary>\n        internal static string DialogDataSources_ShowE_DataSources {\n            get {\n                return ResourceManager.GetString(\"DialogDataSources_ShowE_DataSources\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name &apos;{0}&apos; contains invalid characters..\n        /// </summary>\n        internal static string DialogDataSources_ShowE_NameInvalid {\n            get {\n                return ResourceManager.GetString(\"DialogDataSources_ShowE_NameInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name must be specified for all DataSources..\n        /// </summary>\n        internal static string DialogDataSources_ShowE_NameMustSpecified {\n            get {\n                return ResourceManager.GetString(\"DialogDataSources_ShowE_NameMustSpecified\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Bitmap Files (*.bmp)|*.bmp|JPEG (*.jpg;*.jpeg;*.jpe;*.jfif)|*.jpg;*.jpeg;*.jpe;*.jfif|GIF (*.gif)|*.gif|TIFF (*.tif;*.tiff)|*.tif;*.tiff|PNG (*.png)|*.png|All Picture Files|*.bmp;*.jpg;*.jpeg;*.jpe;*.jfif;*.gif;*.tif;*.tiff;*.png|All files (*.*)|*.*.\n        /// </summary>\n        internal static string DialogEmbeddedImages_bImport_Click_ImageFilesFilter {\n            get {\n                return ResourceManager.GetString(\"DialogEmbeddedImages_bImport_Click_ImageFilesFilter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Copy image into clipboard before attempting to paste..\n        /// </summary>\n        internal static string DialogEmbeddedImages_ShowE_CopyImageBeforePaste {\n            get {\n                return ResourceManager.GetString(\"DialogEmbeddedImages_ShowE_CopyImageBeforePaste\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error converting image data.\n        /// </summary>\n        internal static string DialogEmbeddedImages_ShowE_ErrorConvertingImage {\n            get {\n                return ResourceManager.GetString(\"DialogEmbeddedImages_ShowE_ErrorConvertingImage\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Image.\n        /// </summary>\n        internal static string DialogEmbeddedImages_ShowE_Image {\n            get {\n                return ResourceManager.GetString(\"DialogEmbeddedImages_ShowE_Image\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Each embedded image must have a unique name. &apos;{0}&apos; is repeated..\n        /// </summary>\n        internal static string DialogEmbeddedImages_ShowE_ImageMustUniqueName {\n            get {\n                return ResourceManager.GetString(\"DialogEmbeddedImages_ShowE_ImageMustUniqueName\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name &apos;{0}&apos; contains invalid characters..\n        /// </summary>\n        internal static string DialogEmbeddedImages_ShowE_NameInvalid {\n            get {\n                return ResourceManager.GetString(\"DialogEmbeddedImages_ShowE_NameInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name must be specified for all embedded images..\n        /// </summary>\n        internal static string DialogEmbeddedImages_ShowE_NameMustSpecified {\n            get {\n                return ResourceManager.GetString(\"DialogEmbeddedImages_ShowE_NameMustSpecified\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Operator &apos;{0}&apos; must be in the operator list.\n        /// </summary>\n        internal static string DialogFilterOperator_Show_OperatorInList {\n            get {\n                return ResourceManager.GetString(\"DialogFilterOperator_Show_OperatorInList\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Pick Filter Operator.\n        /// </summary>\n        internal static string DialogFilterOperator_Show_PickFilterOperator {\n            get {\n                return ResourceManager.GetString(\"DialogFilterOperator_Show_PickFilterOperator\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please fill out the chart data expression, or include a series..\n        /// </summary>\n        internal static string DialogNewChart_ShowC_FillExpression {\n            get {\n                return ResourceManager.GetString(\"DialogNewChart_ShowC_FillExpression\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please fill out the chart Y coordinate and Bubble width expressions..\n        /// </summary>\n        internal static string DialogNewChart_ShowC_FillYAndBubbleExpressions {\n            get {\n                return ResourceManager.GetString(\"DialogNewChart_ShowC_FillYAndBubbleExpressions\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please fill out the chart Y coordinate data expression..\n        /// </summary>\n        internal static string DialogNewChart_ShowC_FillYExpression {\n            get {\n                return ResourceManager.GetString(\"DialogNewChart_ShowC_FillYExpression\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Map files (*.xml)|*.xml|All files (*.*)|*.*.\n        /// </summary>\n        internal static string DialogToolOptions_bAddMap_Click_MapFilesFilter {\n            get {\n                return ResourceManager.GetString(\"DialogToolOptions_bAddMap_Click_MapFilesFilter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Recent files maximum must be an integer between 1 and 50.\n        /// </summary>\n        internal static string DialogToolOptions_Error_RecentFilesMax {\n            get {\n                return ResourceManager.GetString(\"DialogToolOptions_Error_RecentFilesMax\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unable to obtain Desktop config information.\n        ///{0}.\n        /// </summary>\n        internal static string DialogToolOptions_Error_UnableConfig {\n            get {\n                return ResourceManager.GetString(\"DialogToolOptions_Error_UnableConfig\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error processing Desktop Configuration; using defaults.\n        ///{0}.\n        /// </summary>\n        internal static string DialogToolOptions_Show_ConfigError {\n            get {\n                return ResourceManager.GetString(\"DialogToolOptions_Show_ConfigError\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Options.\n        /// </summary>\n        internal static string DialogToolOptions_Show_Options {\n            get {\n                return ResourceManager.GetString(\"DialogToolOptions_Show_Options\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Recent files maximum must be an integer between 1 and 50.\n        /// </summary>\n        internal static string DialogToolOptions_Show_RecentFilesMax {\n            get {\n                return ResourceManager.GetString(\"DialogToolOptions_Show_RecentFilesMax\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Select the &apos;RDL Text&apos; tab before validating..\n        /// </summary>\n        internal static string DialogValidateRdl_ShowC_SelectRDLTab {\n            get {\n                return ResourceManager.GetString(\"DialogValidateRdl_ShowC_SelectRDLTab\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Report files (*.rdl)|*.rdl|All files (*.*)|*.*.\n        /// </summary>\n        internal static string DrillParametersDialog_bFile_Click_ReportFilesFilter {\n            get {\n                return ResourceManager.GetString(\"DrillParametersDialog_bFile_Click_ReportFilesFilter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Specify Report File Name.\n        /// </summary>\n        internal static string DrillParametersDialog_bFile_Click_ReportFilesTitle {\n            get {\n                return ResourceManager.GetString(\"DrillParametersDialog_bFile_Click_ReportFilesTitle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error reading report file.\n        /// </summary>\n        internal static string DrillParametersDialog_Show_ErrorReading {\n            get {\n                return ResourceManager.GetString(\"DrillParametersDialog_Show_ErrorReading\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Report load failed.\n        /// </summary>\n        internal static string DrillParametersDialog_Show_ReportLoadFailed {\n            get {\n                return ResourceManager.GetString(\"DrillParametersDialog_Show_ReportLoadFailed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Value must be specified for every parameter.\n        /// </summary>\n        internal static string DrillParametersDialog_Show_ValueMustSpecified {\n            get {\n                return ResourceManager.GetString(\"DrillParametersDialog_Show_ValueMustSpecified\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Report has errors and cannot be processed..\n        /// </summary>\n        internal static string DrillParametersDialog_ShowC_ReportHasErrors {\n            get {\n                return ResourceManager.GetString(\"DrillParametersDialog_ShowC_ReportHasErrors\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to XSL Files (*.xsl)|*.xsl|All files (*.*)|*.*.\n        /// </summary>\n        internal static string FileUIEditor_EditValue_XSLFilesFilter {\n            get {\n                return ResourceManager.GetString(\"FileUIEditor_EditValue_XSLFilesFilter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid Line Number.\n        /// </summary>\n        internal static string FindTab_ShowE_InvalidLN {\n            get {\n                return ResourceManager.GetString(\"FindTab_ShowE_InvalidLN\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid Font Size.\n        /// </summary>\n        internal static string FontCtl_Show_InvalidFontSize {\n            get {\n                return ResourceManager.GetString(\"FontCtl_Show_InvalidFontSize\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Grid.\n        /// </summary>\n        internal static string GridCtl_Show_Grid {\n            get {\n                return ResourceManager.GetString(\"GridCtl_Show_Grid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Grid must have at least one Header, Details or Footer row defined..\n        /// </summary>\n        internal static string GridCtl_Show_GridRegionsMustDefined {\n            get {\n                return ResourceManager.GetString(\"GridCtl_Show_GridRegionsMustDefined\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Chart.\n        /// </summary>\n        internal static string GroupingCtl_Show_Chart {\n            get {\n                return ResourceManager.GetString(\"GroupingCtl_Show_Chart\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Chart series must have label defined for the legend..\n        /// </summary>\n        internal static string GroupingCtl_Show_ChartSeriesMustHaveLabelForLegend {\n            get {\n                return ResourceManager.GetString(\"GroupingCtl_Show_ChartSeriesMustHaveLabelForLegend\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Group.\n        /// </summary>\n        internal static string GroupingCtl_Show_Group {\n            get {\n                return ResourceManager.GetString(\"GroupingCtl_Show_Group\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Grouping.\n        /// </summary>\n        internal static string GroupingCtl_Show_Grouping {\n            get {\n                return ResourceManager.GetString(\"GroupingCtl_Show_Grouping\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Group must be defined..\n        /// </summary>\n        internal static string GroupingCtl_Show_GroupMustDefined {\n            get {\n                return ResourceManager.GetString(\"GroupingCtl_Show_GroupMustDefined\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Group Name in Error.\n        /// </summary>\n        internal static string GroupingCtl_Show_GroupNameError {\n            get {\n                return ResourceManager.GetString(\"GroupingCtl_Show_GroupNameError\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} is an invalid name..\n        /// </summary>\n        internal static string GroupingCtl_Show_InvalidName {\n            get {\n                return ResourceManager.GetString(\"GroupingCtl_Show_InvalidName\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name.\n        /// </summary>\n        internal static string GroupingCtl_Show_Name {\n            get {\n                return ResourceManager.GetString(\"GroupingCtl_Show_Name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to No expressions have been defined for the group..\n        /// </summary>\n        internal static string GroupingCtl_Show_NoExpressionsForGroup {\n            get {\n                return ResourceManager.GetString(\"GroupingCtl_Show_NoExpressionsForGroup\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Bitmap Files (*.bmp)|*.bmp|JPEG (*.jpg;*.jpeg;*.jpe;*.jfif)|*.jpg;*.jpeg;*.jpe;*.jfif|GIF (*.gif)|*.gif|TIFF (*.tif;*.tiff)|*.tif;*.tiff|PNG (*.png)|*.png|All Picture Files|*.bmp;*.jpg;*.jpeg;*.jpe;*.jfif;*.gif;*.tif;*.tiff;*.png|All files (*.*)|*.*.\n        /// </summary>\n        internal static string ImageCtl_bExternal_Click_ImageFilesFilter {\n            get {\n                return ResourceManager.GetString(\"ImageCtl_bExternal_Click_ImageFilesFilter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Report files (*.rdl)|*.rdl|All files (*.*)|*.*.\n        /// </summary>\n        internal static string InteractivityCtl_bDrillthrough_Click_ReportFilesFilter {\n            get {\n                return ResourceManager.GetString(\"InteractivityCtl_bDrillthrough_Click_ReportFilesFilter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Specify Report File Name.\n        /// </summary>\n        internal static string InteractivityCtl_bDrillthrough_Click_ReportFilesTitle {\n            get {\n                return ResourceManager.GetString(\"InteractivityCtl_bDrillthrough_Click_ReportFilesTitle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Only HTML, MHT, XML, CSV, RTF, DOC, Excel, TIF and PDF are allowed as Export types..\n        /// </summary>\n        internal static string MDIChild_Error_AllowedExportTypes {\n            get {\n                return ResourceManager.GetString(\"MDIChild_Error_AllowedExportTypes\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to CSV file (*.csv)|*.csv|All files (*.*)|*.*.\n        /// </summary>\n        internal static string MDIChild_Export_CSV {\n            get {\n                return ResourceManager.GetString(\"MDIChild_Export_CSV\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DOC file (*.doc)|*.doc|All files (*.*)|*.*.\n        /// </summary>\n        internal static string MDIChild_Export_DOC {\n            get {\n                return ResourceManager.GetString(\"MDIChild_Export_DOC\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Excel file (*.xlsx)|*.xlsx|All files (*.*)|*.*.\n        /// </summary>\n        internal static string MDIChild_Export_Excel {\n            get {\n                return ResourceManager.GetString(\"MDIChild_Export_Excel\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Export to {0}.\n        /// </summary>\n        internal static string MDIChild_Export_ExportTitleFormat {\n            get {\n                return ResourceManager.GetString(\"MDIChild_Export_ExportTitleFormat\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to MHT (*.mht)|*.mhtml;*.mht|All files (*.*)|*.*.\n        /// </summary>\n        internal static string MDIChild_Export_MHT {\n            get {\n                return ResourceManager.GetString(\"MDIChild_Export_MHT\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to PDF file (*.pdf)|*.pdf|All files (*.*)|*.*.\n        /// </summary>\n        internal static string MDIChild_Export_PDF {\n            get {\n                return ResourceManager.GetString(\"MDIChild_Export_PDF\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to RTF file (*.rtf)|*.rtf|All files (*.*)|*.*.\n        /// </summary>\n        internal static string MDIChild_Export_RTF {\n            get {\n                return ResourceManager.GetString(\"MDIChild_Export_RTF\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to TIF file (*.tif, *.tiff)|*.tiff;*.tif|All files (*.*)|*.*.\n        /// </summary>\n        internal static string MDIChild_Export_TIF {\n            get {\n                return ResourceManager.GetString(\"MDIChild_Export_TIF\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Web Page (*.html, *.htm)|*.html;*.htm|All files (*.*)|*.*.\n        /// </summary>\n        internal static string MDIChild_Export_Web_Page {\n            get {\n                return ResourceManager.GetString(\"MDIChild_Export_Web_Page\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to XML file (*.xml)|*.xml|All files (*.*)|*.*.\n        /// </summary>\n        internal static string MDIChild_Export_XML {\n            get {\n                return ResourceManager.GetString(\"MDIChild_Export_XML\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to RDL files (*.rdl)|*.rdl|Encrypted RDL files (*.encrypted)|*.encrypted|All files (*.*)|*.*.\n        /// </summary>\n        internal static string MDIChild_FileSaveAs_RDLFilter {\n            get {\n                return ResourceManager.GetString(\"MDIChild_FileSaveAs_RDLFilter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Export.\n        /// </summary>\n        internal static string MDIChild_ShowF_Export {\n            get {\n                return ResourceManager.GetString(\"MDIChild_ShowF_Export\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Do you want to display colors in TIF?.\n        /// </summary>\n        internal static string MDIChild_ShowF_WantDisplayColorsInTIF {\n            get {\n                return ResourceManager.GetString(\"MDIChild_ShowF_WantDisplayColorsInTIF\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Export Error.\n        /// </summary>\n        internal static string MDIChild_ShowG_ExportError {\n            get {\n                return ResourceManager.GetString(\"MDIChild_ShowG_ExportError\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to fyiReporting Designer.\n        /// </summary>\n        internal static string MDIChild_ShowH_fyiReportingDesigner {\n            get {\n                return ResourceManager.GetString(\"MDIChild_ShowH_fyiReportingDesigner\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Untitled.\n        /// </summary>\n        internal static string MDIChild_ShowH_Untitled {\n            get {\n                return ResourceManager.GetString(\"MDIChild_ShowH_Untitled\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Do you want to save changes you made to &apos;{0}&apos;?.\n        /// </summary>\n        internal static string MDIChild_ShowH_WantSaveChanges {\n            get {\n                return ResourceManager.GetString(\"MDIChild_ShowH_WantSaveChanges\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to change.\n        /// </summary>\n        internal static string NodeChangedUndo_GetDescription_change {\n            get {\n                return ResourceManager.GetString(\"NodeChangedUndo_GetDescription_change\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to insert.\n        /// </summary>\n        internal static string NodeInsertedUndo_GetDescription_insert {\n            get {\n                return ResourceManager.GetString(\"NodeInsertedUndo_GetDescription_insert\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to remove.\n        /// </summary>\n        internal static string NodeRemovedUndo_GetDescription_remove {\n            get {\n                return ResourceManager.GetString(\"NodeRemovedUndo_GetDescription_remove\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Group Selected.\n        /// </summary>\n        internal static string PositionCtl_InitValues_GroupSelected {\n            get {\n                return ResourceManager.GetString(\"PositionCtl_InitValues_GroupSelected\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Height.\n        /// </summary>\n        internal static string PositionCtl_Show_Height {\n            get {\n                return ResourceManager.GetString(\"PositionCtl_Show_Height\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} is invalid.  {1}.\n        /// </summary>\n        internal static string PositionCtl_Show_Invalid {\n            get {\n                return ResourceManager.GetString(\"PositionCtl_Show_Invalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Left.\n        /// </summary>\n        internal static string PositionCtl_Show_Left {\n            get {\n                return ResourceManager.GetString(\"PositionCtl_Show_Left\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name.\n        /// </summary>\n        internal static string PositionCtl_Show_Name {\n            get {\n                return ResourceManager.GetString(\"PositionCtl_Show_Name\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Size is Invalid.\n        /// </summary>\n        internal static string PositionCtl_Show_SizeInvalid {\n            get {\n                return ResourceManager.GetString(\"PositionCtl_Show_SizeInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Top.\n        /// </summary>\n        internal static string PositionCtl_Show_Top {\n            get {\n                return ResourceManager.GetString(\"PositionCtl_Show_Top\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Width.\n        /// </summary>\n        internal static string PositionCtl_Show_Width {\n            get {\n                return ResourceManager.GetString(\"PositionCtl_Show_Width\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Axis.\n        /// </summary>\n        internal static string PropertyDialog_BuildChartAxisTabs_Axis {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildChartAxisTabs_Axis\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Chart Category (X) Axis.\n        /// </summary>\n        internal static string PropertyDialog_BuildChartAxisTabs_ChartCategoryAxis {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildChartAxisTabs_ChartCategoryAxis\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Chart Value (Y) Axis.\n        /// </summary>\n        internal static string PropertyDialog_BuildChartAxisTabs_ChartValueAxis {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildChartAxisTabs_ChartValueAxis\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Chart Legend Properties.\n        /// </summary>\n        internal static string PropertyDialog_BuildChartLegendTabs_ChartLegendProperties {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildChartLegendTabs_ChartLegendProperties\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Legend.\n        /// </summary>\n        internal static string PropertyDialog_BuildChartLegendTabs_Legend {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildChartLegendTabs_Legend\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Data.\n        /// </summary>\n        internal static string PropertyDialog_BuildDataSetsTabs_Data {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildDataSetsTabs_Data\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DataSet.\n        /// </summary>\n        internal static string PropertyDialog_BuildDataSetsTabs_DataSet {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildDataSetsTabs_DataSet\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DataSet.\n        /// </summary>\n        internal static string PropertyDialog_BuildDataSetsTabs_DataSet_Header {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildDataSetsTabs_DataSet_Header\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Query Parameters.\n        /// </summary>\n        internal static string PropertyDialog_BuildDataSetsTabs_QueryParameters {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildDataSetsTabs_QueryParameters\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Category Grouping.\n        /// </summary>\n        internal static string PropertyDialog_BuildGroupingTabs_CategoryGrouping {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildGroupingTabs_CategoryGrouping\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Grouping and Sorting.\n        /// </summary>\n        internal static string PropertyDialog_BuildGroupingTabs_GroupingAndSorting {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildGroupingTabs_GroupingAndSorting\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Series Grouping.\n        /// </summary>\n        internal static string PropertyDialog_BuildGroupingTabs_SeriesGrouping {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildGroupingTabs_SeriesGrouping\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Border.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportItemTabs_Border {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportItemTabs_Border\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Chart.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportItemTabs_Chart {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportItemTabs_Chart\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Filters.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportItemTabs_Filters {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportItemTabs_Filters\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Grid.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportItemTabs_Grid {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportItemTabs_Grid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Grouping.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportItemTabs_Grouping {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportItemTabs_Grouping\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Group Selection Properties.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportItemTabs_GroupSelectionProperties {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportItemTabs_GroupSelectionProperties\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Image.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportItemTabs_Image {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportItemTabs_Image\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Interactivity.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportItemTabs_Interactivity {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportItemTabs_Interactivity\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to List.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportItemTabs_List {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportItemTabs_List\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Matrix.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportItemTabs_Matrix {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportItemTabs_Matrix\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name/Position.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportItemTabs_Name_Position {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportItemTabs_Name_Position\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Properties.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportItemTabs_Properties {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportItemTabs_Properties\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Sorting.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportItemTabs_Sorting {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportItemTabs_Sorting\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Static Series.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportItemTabs_StaticSeries {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportItemTabs_StaticSeries\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Style.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportItemTabs_Style {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportItemTabs_Style\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Subreport.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportItemTabs_Subreport {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportItemTabs_Subreport\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Table.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportItemTabs_Table {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportItemTabs_Table\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Table Column.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportItemTabs_TableColumn {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportItemTabs_TableColumn\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Table Row.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportItemTabs_TableRow {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportItemTabs_TableRow\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Text.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportItemTabs_Text {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportItemTabs_Text\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Body.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportTabs_Body {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportTabs_Body\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Code.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportTabs_Code {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportTabs_Code\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Modules/Classes.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportTabs_Modules_Classes {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportTabs_Modules_Classes\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Parameters.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportTabs_Parameters {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportTabs_Parameters\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Report.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportTabs_Report {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportTabs_Report\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Report Properties.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportTabs_ReportProperties {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportTabs_ReportProperties\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to XML Rendering.\n        /// </summary>\n        internal static string PropertyDialog_BuildReportTabs_XMLRendering {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildReportTabs_XMLRendering\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Category (X) Axis Title.\n        /// </summary>\n        internal static string PropertyDialog_BuildTitle_CategoryAxisTitle {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildTitle_CategoryAxisTitle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Chart Title.\n        /// </summary>\n        internal static string PropertyDialog_BuildTitle_ChartTitle {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildTitle_ChartTitle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Value (Y) Axis (Right) Title.\n        /// </summary>\n        internal static string PropertyDialog_BuildTitle_ValueAxisRightTitle {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildTitle_ValueAxisRightTitle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Value (Y) Axis Title.\n        /// </summary>\n        internal static string PropertyDialog_BuildTitle_ValueAxisTitle {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_BuildTitle_ValueAxisTitle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DataSet.\n        /// </summary>\n        internal static string PropertyDialog_ShowF_DataSet {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_ShowF_DataSet\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Are you sure you want to delete this dataset?.\n        /// </summary>\n        internal static string PropertyDialog_ShowF_WantDeleteDataset {\n            get {\n                return ResourceManager.GetString(\"PropertyDialog_ShowF_WantDeleteDataset\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to change.\n        /// </summary>\n        internal static string PropertyPrintFirstLast_SetProp_change {\n            get {\n                return ResourceManager.GetString(\"PropertyPrintFirstLast_SetProp_change\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Body.\n        /// </summary>\n        internal static string PropertyReport_Undo_Body {\n            get {\n                return ResourceManager.GetString(\"PropertyReport_Undo_Body\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to change.\n        /// </summary>\n        internal static string PropertyReport_Undo_change {\n            get {\n                return ResourceManager.GetString(\"PropertyReport_Undo_change\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Column Span change.\n        /// </summary>\n        internal static string PropertyReportItem_Undo_ColumnSpanchange {\n            get {\n                return ResourceManager.GetString(\"PropertyReportItem_Undo_ColumnSpanchange\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Name change.\n        /// </summary>\n        internal static string PropertyReportItem_Undo_NameChange {\n            get {\n                return ResourceManager.GetString(\"PropertyReportItem_Undo_NameChange\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Table Dialog.\n        /// </summary>\n        internal static string PropertyTableUIEditor_EditValue_TableDialog {\n            get {\n                return ResourceManager.GetString(\"PropertyTableUIEditor_EditValue_TableDialog\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Untitled.\n        /// </summary>\n        internal static string RdlDesigner_CreateMDIChild_Untitled {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_CreateMDIChild_Untitled\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to New....\n        /// </summary>\n        internal static string RdlDesigner_menuData_Popup_New {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_menuData_Popup_New\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Undo.\n        /// </summary>\n        internal static string RdlDesigner_menuEdit_Popup_Undo {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_menuEdit_Popup_Undo\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Report files (*.rdl;*rdlc)|*.rdl;*.rdlc|Encrypted RDL files (*.encrypted)|*.encrypted|All files (*.*)|*.*.\n        /// </summary>\n        internal static string RdlDesigner_menuFileOpen_Click_ReportFilesFilter {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_menuFileOpen_Click_ReportFilesFilter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Start Desktop.\n        /// </summary>\n        internal static string RdlDesigner_menuTools_Popup_StartDesktop {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_menuTools_Popup_StartDesktop\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Stop Desktop.\n        /// </summary>\n        internal static string RdlDesigner_menuTools_Popup_StopDesktop {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_menuTools_Popup_StopDesktop\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Custom Color Save Failed.\n        /// </summary>\n        internal static string RdlDesigner_Show_CustomColorSaveFailed {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Show_CustomColorSaveFailed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error stopping process.\n        /// </summary>\n        internal static string RdlDesigner_Show_ErrorStopProcess {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Show_ErrorStopProcess\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Help URL Invalid.\n        /// </summary>\n        internal static string RdlDesigner_Show_HelpURLInvalid {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Show_HelpURLInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Print error: .\n        /// </summary>\n        internal static string RdlDesigner_Show_PrintError {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Show_PrintError\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Can only print one file at a time..\n        /// </summary>\n        internal static string RdlDesigner_Show_PrintOneFile {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Show_PrintOneFile\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to RDL Design.\n        /// </summary>\n        internal static string RdlDesigner_Show_RDLDesign {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Show_RDLDesign\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Resetting Help URL to default..\n        /// </summary>\n        internal static string RdlDesigner_Show_ResettingHelpURL {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Show_ResettingHelpURL\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Resetting Support URL to default..\n        /// </summary>\n        internal static string RdlDesigner_Show_ResettingSupportURL {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Show_ResettingSupportURL\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Support URL Invalid.\n        /// </summary>\n        internal static string RdlDesigner_Show_SupportURLInvalid {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Show_SupportURLInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unable to Show Report.\n        /// </summary>\n        internal static string RdlDesigner_Show_UnableShowReport {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Show_UnableShowReport\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unable to start Desktop.\n        /// </summary>\n        internal static string RdlDesigner_Show_UnableStartDesktop {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Show_UnableStartDesktop\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Zoom Value Invalid.\n        /// </summary>\n        internal static string RdlDesigner_Show_ZoomValueInvalid {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Show_ZoomValueInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error.\n        /// </summary>\n        internal static string RdlDesigner_ShowD_Error {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_ShowD_Error\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Format XML.\n        /// </summary>\n        internal static string RdlDesigner_Showl_FormatXML {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Showl_FormatXML\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Ch.\n        /// </summary>\n        internal static string RdlDesigner_Status_Ch {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Status_Ch\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to cm.\n        /// </summary>\n        internal static string RdlDesigner_Status_cm {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Status_cm\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to height.\n        /// </summary>\n        internal static string RdlDesigner_Status_Height {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Status_Height\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &quot;.\n        /// </summary>\n        internal static string RdlDesigner_Status_in {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Status_in\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Ln.\n        /// </summary>\n        internal static string RdlDesigner_Status_Ln {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Status_Ln\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DataSet Dialog.\n        /// </summary>\n        internal static string RdlDesigner_Undo_DataSetDialog {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Undo_DataSetDialog\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to DataSources Dialog.\n        /// </summary>\n        internal static string RdlDesigner_Undo_DataSourcesDialog {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Undo_DataSourcesDialog\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Embedded Images Dialog.\n        /// </summary>\n        internal static string RdlDesigner_Undo_EmbeddedImagesDialog {\n            get {\n                return ResourceManager.GetString(\"RdlDesigner_Undo_EmbeddedImagesDialog\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please retry.  Error during find: {0}.\n        /// </summary>\n        internal static string RdlEditPreview_Show_ErrorFind {\n            get {\n                return ResourceManager.GetString(\"RdlEditPreview_Show_ErrorFind\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Internal Error.\n        /// </summary>\n        internal static string RdlEditPreview_Show_InternalError {\n            get {\n                return ResourceManager.GetString(\"RdlEditPreview_Show_InternalError\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Report.\n        /// </summary>\n        internal static string RdlEditPreview_Show_Report {\n            get {\n                return ResourceManager.GetString(\"RdlEditPreview_Show_Report\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Reached End of Document..\n        /// </summary>\n        internal static string RdlEditPreview_ShowI_ReachedEndDocument {\n            get {\n                return ResourceManager.GetString(\"RdlEditPreview_ShowI_ReachedEndDocument\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Report files (*.rdl;*rdlc)|*.rdl;*.rdlc|All files (*.*)|*.*.\n        /// </summary>\n        internal static string RdlUserControl_openToolStripButton1_Click_ReportFilesFilter {\n            get {\n                return ResourceManager.GetString(\"RdlUserControl_openToolStripButton1_Click_ReportFilesFilter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Print error: .\n        /// </summary>\n        internal static string RdlUserControl_Show_PrintError {\n            get {\n                return ResourceManager.GetString(\"RdlUserControl_Show_PrintError\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Can only print one file at a time..\n        /// </summary>\n        internal static string RdlUserControl_Show_PrintOneFile {\n            get {\n                return ResourceManager.GetString(\"RdlUserControl_Show_PrintOneFile\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to RDL Design.\n        /// </summary>\n        internal static string RdlUserControl_Show_RDLDesign {\n            get {\n                return ResourceManager.GetString(\"RdlUserControl_Show_RDLDesign\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Zoom Value Invalid.\n        /// </summary>\n        internal static string RdlUserControl_Show_ZoomValueInvalid {\n            get {\n                return ResourceManager.GetString(\"RdlUserControl_Show_ZoomValueInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Field Invalid.\n        /// </summary>\n        internal static string ReportCtl_Show_Field_Invalid {\n            get {\n                return ResourceManager.GetString(\"ReportCtl_Show_Field_Invalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Size value of {0} is invalid.\n        ///.\n        /// </summary>\n        internal static string ReportCtl_Show_SizeInvalid {\n            get {\n                return ResourceManager.GetString(\"ReportCtl_Show_SizeInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to NameError: duplicate name: {0}, name of the node: {1}.\n        /// </summary>\n        internal static string ReportNames_DescriptionDuplicateNameError {\n            get {\n                return ResourceManager.GetString(\"ReportNames_DescriptionDuplicateNameError\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Default Values.\n        /// </summary>\n        internal static string ReportParameterCtl_bDefaultValues_Click_Default_Values {\n            get {\n                return ResourceManager.GetString(\"ReportParameterCtl_bDefaultValues_Click_Default_Values\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Specify DataTransform File Name.\n        /// </summary>\n        internal static string ReportXmlCtl_bOpenXsl_Click_XslFilerTitle {\n            get {\n                return ResourceManager.GetString(\"ReportXmlCtl_bOpenXsl_Click_XslFilerTitle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to XSL files (*.xsl)|*.xsl|All files (*.*)|*.*.\n        /// </summary>\n        internal static string ReportXmlCtl_bOpenXsl_Click_XSLFilesFilter {\n            get {\n                return ResourceManager.GetString(\"ReportXmlCtl_bOpenXsl_Click_XSLFilesFilter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Appearance change.\n        /// </summary>\n        internal static string SingleCtlDialog_Undo_AppearanceChange {\n            get {\n                return ResourceManager.GetString(\"SingleCtlDialog_Undo_AppearanceChange\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Background change.\n        /// </summary>\n        internal static string SingleCtlDialog_Undo_BackgroundChange {\n            get {\n                return ResourceManager.GetString(\"SingleCtlDialog_Undo_BackgroundChange\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Border change.\n        /// </summary>\n        internal static string SingleCtlDialog_Undo_BorderChange {\n            get {\n                return ResourceManager.GetString(\"SingleCtlDialog_Undo_BorderChange\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Filters change.\n        /// </summary>\n        internal static string SingleCtlDialog_Undo_FiltersChange {\n            get {\n                return ResourceManager.GetString(\"SingleCtlDialog_Undo_FiltersChange\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Grouping change.\n        /// </summary>\n        internal static string SingleCtlDialog_Undo_GroupingChange {\n            get {\n                return ResourceManager.GetString(\"SingleCtlDialog_Undo_GroupingChange\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Image change.\n        /// </summary>\n        internal static string SingleCtlDialog_Undo_ImageChange {\n            get {\n                return ResourceManager.GetString(\"SingleCtlDialog_Undo_ImageChange\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Interactivity change.\n        /// </summary>\n        internal static string SingleCtlDialog_Undo_InteractivityChange {\n            get {\n                return ResourceManager.GetString(\"SingleCtlDialog_Undo_InteractivityChange\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Report code change.\n        /// </summary>\n        internal static string SingleCtlDialog_Undo_ReportCodeChange {\n            get {\n                return ResourceManager.GetString(\"SingleCtlDialog_Undo_ReportCodeChange\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Report Modules/Classes change.\n        /// </summary>\n        internal static string SingleCtlDialog_Undo_ReportModules_ClassesChange {\n            get {\n                return ResourceManager.GetString(\"SingleCtlDialog_Undo_ReportModules_ClassesChange\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Sort change.\n        /// </summary>\n        internal static string SingleCtlDialog_Undo_SortChange {\n            get {\n                return ResourceManager.GetString(\"SingleCtlDialog_Undo_SortChange\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Subreport change.\n        /// </summary>\n        internal static string SingleCtlDialog_Undo_SubreportChange {\n            get {\n                return ResourceManager.GetString(\"SingleCtlDialog_Undo_SubreportChange\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Visibility change.\n        /// </summary>\n        internal static string SingleCtlDialog_Undo_VisibilityChange {\n            get {\n                return ResourceManager.GetString(\"SingleCtlDialog_Undo_VisibilityChange\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Bottom Width.\n        /// </summary>\n        internal static string StyleBorderCtl_Show_BottomWidth {\n            get {\n                return ResourceManager.GetString(\"StyleBorderCtl_Show_BottomWidth\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Default Width.\n        /// </summary>\n        internal static string StyleBorderCtl_Show_DefaultWidth {\n            get {\n                return ResourceManager.GetString(\"StyleBorderCtl_Show_DefaultWidth\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Left Width.\n        /// </summary>\n        internal static string StyleBorderCtl_Show_LeftWidth {\n            get {\n                return ResourceManager.GetString(\"StyleBorderCtl_Show_LeftWidth\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Right Width.\n        /// </summary>\n        internal static string StyleBorderCtl_Show_RightWidth {\n            get {\n                return ResourceManager.GetString(\"StyleBorderCtl_Show_RightWidth\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Size Invalid.\n        /// </summary>\n        internal static string StyleBorderCtl_Show_SizeInvalid {\n            get {\n                return ResourceManager.GetString(\"StyleBorderCtl_Show_SizeInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Top Width.\n        /// </summary>\n        internal static string StyleBorderCtl_Show_TopWidth {\n            get {\n                return ResourceManager.GetString(\"StyleBorderCtl_Show_TopWidth\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Bottom.\n        /// </summary>\n        internal static string StyleCtl_Show_Bottom {\n            get {\n                return ResourceManager.GetString(\"StyleCtl_Show_Bottom\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Left.\n        /// </summary>\n        internal static string StyleCtl_Show_Left {\n            get {\n                return ResourceManager.GetString(\"StyleCtl_Show_Left\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} Padding Invalid.\n        /// </summary>\n        internal static string StyleCtl_Show_PaddingInvalid {\n            get {\n                return ResourceManager.GetString(\"StyleCtl_Show_PaddingInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Right.\n        /// </summary>\n        internal static string StyleCtl_Show_Right {\n            get {\n                return ResourceManager.GetString(\"StyleCtl_Show_Right\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Top.\n        /// </summary>\n        internal static string StyleCtl_Show_Top {\n            get {\n                return ResourceManager.GetString(\"StyleCtl_Show_Top\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Caption.\n        /// </summary>\n        internal static string StyleTextCtl_InitTextStyles_Caption {\n            get {\n                return ResourceManager.GetString(\"StyleTextCtl_InitTextStyles_Caption\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid Font Size.\n        /// </summary>\n        internal static string StyleTextCtl_Show_InvalidFontSize {\n            get {\n                return ResourceManager.GetString(\"StyleTextCtl_Show_InvalidFontSize\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Report files (*.rdl)|*.rdl|All files (*.*)|*.*.\n        /// </summary>\n        internal static string SubreportCtl_bFile_Click_ReportFilesFilter {\n            get {\n                return ResourceManager.GetString(\"SubreportCtl_bFile_Click_ReportFilesFilter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Specify Report File Name.\n        /// </summary>\n        internal static string SubreportCtl_bFile_Click_ReportFilesTitle {\n            get {\n                return ResourceManager.GetString(\"SubreportCtl_bFile_Click_ReportFilesTitle\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error reading report file.\n        /// </summary>\n        internal static string SubreportCtl_Show_ErrorReading {\n            get {\n                return ResourceManager.GetString(\"SubreportCtl_Show_ErrorReading\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Report load failed.\n        /// </summary>\n        internal static string SubreportCtl_Show_ReportLoadFailed {\n            get {\n                return ResourceManager.GetString(\"SubreportCtl_Show_ReportLoadFailed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Subreport.\n        /// </summary>\n        internal static string SubreportCtl_Show_Subreport {\n            get {\n                return ResourceManager.GetString(\"SubreportCtl_Show_Subreport\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Subreport file must be specified..\n        /// </summary>\n        internal static string SubreportCtl_Show_SubreportMustSpecified {\n            get {\n                return ResourceManager.GetString(\"SubreportCtl_Show_SubreportMustSpecified\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} must be an expression or &apos;true&apos; or &apos;false&apos;.\n        /// </summary>\n        internal static string TableColumnCtl_Show_ExpressionTrueFalse {\n            get {\n                return ResourceManager.GetString(\"TableColumnCtl_Show_ExpressionTrueFalse\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Hidden is Invalid.\n        /// </summary>\n        internal static string TableColumnCtl_Show_HiddenInvalid {\n            get {\n                return ResourceManager.GetString(\"TableColumnCtl_Show_HiddenInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Width is Invalid.\n        /// </summary>\n        internal static string TableColumnCtl_Show_WidthInvalid {\n            get {\n                return ResourceManager.GetString(\"TableColumnCtl_Show_WidthInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Table.\n        /// </summary>\n        internal static string TableCtl_Show_Table {\n            get {\n                return ResourceManager.GetString(\"TableCtl_Show_Table\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Table must have at least one Header, Details or Footer row defined..\n        /// </summary>\n        internal static string TableCtl_Show_TableMustHaveRegions {\n            get {\n                return ResourceManager.GetString(\"TableCtl_Show_TableMustHaveRegions\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} must be an expression or &apos;true&apos; or &apos;false&apos;.\n        /// </summary>\n        internal static string TableRowCtl_Show_ExpressionTrueFalse {\n            get {\n                return ResourceManager.GetString(\"TableRowCtl_Show_ExpressionTrueFalse\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Height is Invalid.\n        /// </summary>\n        internal static string TableRowCtl_Show_HeightInvalid {\n            get {\n                return ResourceManager.GetString(\"TableRowCtl_Show_HeightInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Hidden is Invalid.\n        /// </summary>\n        internal static string TableRowCtl_Show_HiddenInvalid {\n            get {\n                return ResourceManager.GetString(\"TableRowCtl_Show_HiddenInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Background.\n        /// </summary>\n        internal static string Tabs_Background {\n            get {\n                return ResourceManager.GetString(\"Tabs_Background\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Borders.\n        /// </summary>\n        internal static string Tabs_Borders {\n            get {\n                return ResourceManager.GetString(\"Tabs_Borders\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Code.\n        /// </summary>\n        internal static string Tabs_Code {\n            get {\n                return ResourceManager.GetString(\"Tabs_Code\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Filter.\n        /// </summary>\n        internal static string Tabs_Filter {\n            get {\n                return ResourceManager.GetString(\"Tabs_Filter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Font.\n        /// </summary>\n        internal static string Tabs_Font {\n            get {\n                return ResourceManager.GetString(\"Tabs_Font\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Grouping.\n        /// </summary>\n        internal static string Tabs_Grouping {\n            get {\n                return ResourceManager.GetString(\"Tabs_Grouping\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Image.\n        /// </summary>\n        internal static string Tabs_Image {\n            get {\n                return ResourceManager.GetString(\"Tabs_Image\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Interactivity.\n        /// </summary>\n        internal static string Tabs_Interactivity {\n            get {\n                return ResourceManager.GetString(\"Tabs_Interactivity\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Modules and Classes.\n        /// </summary>\n        internal static string Tabs_ModulesAndClasses {\n            get {\n                return ResourceManager.GetString(\"Tabs_ModulesAndClasses\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Report Parameters.\n        /// </summary>\n        internal static string Tabs_ReportParameters {\n            get {\n                return ResourceManager.GetString(\"Tabs_ReportParameters\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Sorting.\n        /// </summary>\n        internal static string Tabs_Sorting {\n            get {\n                return ResourceManager.GetString(\"Tabs_Sorting\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Subreport.\n        /// </summary>\n        internal static string Tabs_Subreport {\n            get {\n                return ResourceManager.GetString(\"Tabs_Subreport\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Visibility.\n        /// </summary>\n        internal static string Tabs_Visibility {\n            get {\n                return ResourceManager.GetString(\"Tabs_Visibility\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Internal logic error: EndGroup doesn&apos;t match StartGroup.\n        /// </summary>\n        internal static string Undo_Error_EndGroupNotMatchStartGroup {\n            get {\n                return ResourceManager.GetString(\"Undo_Error_EndGroupNotMatchStartGroup\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unknown Action.\n        /// </summary>\n        internal static string Undo_Error_UnknownAction {\n            get {\n                return ResourceManager.GetString(\"Undo_Error_UnknownAction\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/Resources/Strings.fr.resx",
    "content": "﻿<root>\n    <resheader name=\"resmimetype\">\n        <value>text/microsoft-resx</value>\n    </resheader>\n    <resheader name=\"version\">\n        <value>1.3</value>\n    </resheader>\n    <resheader name=\"reader\">\n        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n    </resheader>\n    <resheader name=\"writer\">\n        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n    </resheader>\n    <data name=\"DesignXmlDraw_PageHeaderRegion_Title\" xml:space=\"preserve\">\n        <value>En-tête de page ↑</value>\n    </data>\n    <data name=\"DesignXmlDraw_PageFooterRegion_Title\" xml:space=\"preserve\">\n        <value>Pied de page ↑</value>\n    </data>\n    <data name=\"CodeCtl_Show_CodeVerification\" xml:space=\"preserve\">\n        <value>Vérification du code</value>\n    </data>\n    <data name=\"CodeCtl_Show_NoErrors\" xml:space=\"preserve\">\n        <value>Aucune erreur</value>\n    </data>\n    <data name=\"DataSetRowsCtl_bRowsFile_Click_XMLFilesTitle\" xml:space=\"preserve\">\n        <value>Spécifier le nom du fichier XML</value>\n    </data>\n    <data name=\"DataSetRowsCtl_ShowB_ErrorReadingDataRows\" xml:space=\"preserve\">\n        <value>Erreur lors de la lecture des lignes de données</value>\n    </data>\n    <data name=\"DataSetRowsCtl_ShowB_UnableConvert\" xml:space=\"preserve\">\n        <value>Impossible de convertir {1} en {0} : {2}</value>\n    </data>\n    <data name=\"DataSetRowsCtl_ShowB_WantSeeErrors\" xml:space=\"preserve\">\n        <value>Voulez-vous voir d'autres erreurs?</value>\n    </data>\n    <data name=\"DataSetRowsCtl_ShowC_FileNameRequired\" xml:space=\"preserve\">\n        <value>Nom de fichier requis lorsque l'option « Utiliser un fichier XML pour les données vérifiées »</value>\n    </data>\n    <data name=\"DataSetRowsCtl_ShowC_UnableLocateDSR\" xml:space=\"preserve\">\n        <value>Impossible de localiser le fichier partagé DataSource. Essayez d'abord d'enregistrer le rapport</value>\n    </data>\n    <data name=\"DataSetRowsCtl_Show_DatasourceNotFound\" xml:space=\"preserve\">\n        <value>Source de données '{0}' introuvable.</value>\n    </data>\n    <data name=\"DataSetRowsCtl_Show_LoadFailed\" xml:space=\"preserve\">\n        <value>Échec du chargement</value>\n    </data>\n    <data name=\"DataSetsCtl_Show_Name\" xml:space=\"preserve\">\n        <value>Nom</value>\n    </data>\n    <data name=\"DesignCtl_SelectionName_Group\" xml:space=\"preserve\">\n        <value>Groupe</value>\n    </data>\n    <data name=\"DesignCtl_SelectionName_GroupSelection\" xml:space=\"preserve\">\n        <value>Sélection de groupe</value>\n    </data>\n    <data name=\"DesignCtl_SelectionName_in\" xml:space=\"preserve\">\n        <value>dans</value>\n    </data>\n    <data name=\"DesignCtl_SelectionName_Unnamed\" xml:space=\"preserve\">\n        <value>*Anonyme*</value>\n    </data>\n    <data name=\"DesignCtl_ShowB_Copy\" xml:space=\"preserve\">\n        <value>Copier</value>\n    </data>\n    <data name=\"DesignCtl_ShowB_CustomReportItemError\" xml:space=\"preserve\">\n        <value>Erreur lors de la création des menus CustomReportItem : {0}</value>\n    </data>\n    <data name=\"DesignCtl_ShowB_WantReplaceCell\" xml:space=\"preserve\">\n        <value>Voulez-vous remplacer le contenu de TableCell?</value>\n    </data>\n    <data name=\"DesignCtl_ShowB_WantSelect\" xml:space=\"preserve\">\n        <value>Voulez-vous sélectionner le {0}?</value>\n    </data>\n    <data name=\"DesignCtl_ShowC_IllegalInsertSyntax\" xml:space=\"preserve\">\n        <value>Erreur interne : insertion illégale syntaxe :</value>\n    </data>\n    <data name=\"DesignCtl_Show_ChartsInsert\" xml:space=\"preserve\">\n        <value>Les graphiques ne peuvent être insérés que dans le corps du rapport.</value>\n    </data>\n    <data name=\"DesignCtl_Show_CustomReportItemException\" xml:space=\"preserve\">\n        <value>Création d'exceptions Insertion CustomReportItem : {0}</value>\n    </data>\n    <data name=\"DesignCtl_Show_Insert\" xml:space=\"preserve\">\n        <value>Insérer</value>\n    </data>\n    <data name=\"DesignCtl_Show_ListsInBody\" xml:space=\"preserve\">\n        <value>Les listes ne peuvent être insérées que dans le corps du rapport.</value>\n    </data>\n    <data name=\"DesignCtl_Show_MatrixsInBody\" xml:space=\"preserve\">\n        <value>Les matrices ne peuvent être insérées que dans le corps du rapport.</value>\n    </data>\n    <data name=\"DesignCtl_Show_SubreportsInBody\" xml:space=\"preserve\">\n        <value>Les sous-rapports ne peuvent être insérés que dans le corps du rapport.</value>\n    </data>\n    <data name=\"DesignCtl_Show_TablesInBody\" xml:space=\"preserve\">\n        <value>Les tableaux ne peuvent être insérés que dans le corps du rapport.</value>\n    </data>\n    <data name=\"DesignCtl_Show_UnableCreateRDL\" xml:space=\"preserve\">\n        <value>Impossible de créer la syntaxe RDL</value>\n    </data>\n    <data name=\"DesignCtl_Undo_Align\" xml:space=\"preserve\">\n        <value>Aligner</value>\n    </data>\n    <data name=\"DesignCtl_Undo_Cut\" xml:space=\"preserve\">\n        <value>Couper</value>\n    </data>\n    <data name=\"DesignCtl_Undo_Delete\" xml:space=\"preserve\">\n        <value>Supprimer</value>\n    </data>\n    <data name=\"DesignCtl_Undo_DeleteGrouping\" xml:space=\"preserve\">\n        <value>Supprimer le regroupement</value>\n    </data>\n    <data name=\"DesignCtl_Undo_DeleteTable\" xml:space=\"preserve\">\n        <value>Supprimer la table</value>\n    </data>\n    <data name=\"DesignCtl_Undo_DeleteTableColumn\" xml:space=\"preserve\">\n        <value>Supprimer la colonne du tableau</value>\n    </data>\n    <data name=\"DesignCtl_Undo_DeleteTableGroup\" xml:space=\"preserve\">\n        <value>Supprimer un groupe de tables</value>\n    </data>\n    <data name=\"DesignCtl_Undo_DeleteTableRow\" xml:space=\"preserve\">\n        <value>Supprimer une ligne de table</value>\n    </data>\n    <data name=\"DesignCtl_Undo_Dialog\" xml:space=\"preserve\">\n        <value>Dialogue</value>\n    </data>\n    <data name=\"DesignCtl_Undo_DialogGrouping\" xml:space=\"preserve\">\n        <value>Groupement de boîtes de dialogue</value>\n    </data>\n    <data name=\"DesignCtl_Undo_DialogTableGroupEdit\" xml:space=\"preserve\">\n        <value>Boîte de dialogue Table d'édition de groupe</value>\n    </data>\n    <data name=\"DesignCtl_Undo_Insert\" xml:space=\"preserve\">\n        <value>Insérer</value>\n    </data>\n    <data name=\"DesignCtl_Undo_InsertCategoryGrouping\" xml:space=\"preserve\">\n        <value>Insérer un regroupement de catégories</value>\n    </data>\n    <data name=\"DesignCtl_Undo_InsertChart\" xml:space=\"preserve\">\n        <value>Insérer un graphique</value>\n    </data>\n    <data name=\"DesignCtl_Undo_InsertMatrix\" xml:space=\"preserve\">\n        <value>Matrice d'insertion</value>\n    </data>\n    <data name=\"DesignCtl_Undo_InsertSeriesGrouping\" xml:space=\"preserve\">\n        <value>Regroupement de séries d'inserts</value>\n    </data>\n    <data name=\"DesignCtl_Undo_InsertTable\" xml:space=\"preserve\">\n        <value>Insérer la table</value>\n    </data>\n    <data name=\"DesignCtl_Undo_InsertTableColumn\" xml:space=\"preserve\">\n        <value>Insérer une colonne de tableau</value>\n    </data>\n    <data name=\"DesignCtl_Undo_InsertTableGroup\" xml:space=\"preserve\">\n        <value>Insérer un groupe de tables</value>\n    </data>\n    <data name=\"DesignCtl_Undo_InsertTableRow\" xml:space=\"preserve\">\n        <value>Insérer une ligne de tableau</value>\n    </data>\n    <data name=\"DesignCtl_Undo_MatrixDelete\" xml:space=\"preserve\">\n        <value>Suppression de matrice</value>\n    </data>\n    <data name=\"DesignCtl_Undo_MatrixDeleteGroup\" xml:space=\"preserve\">\n        <value>Groupe de suppression de matrice</value>\n    </data>\n    <data name=\"DesignCtl_Undo_MatrixDialog\" xml:space=\"preserve\">\n        <value>Boîte de dialogue Matrice</value>\n    </data>\n    <data name=\"DesignCtl_Undo_MatrixEdit\" xml:space=\"preserve\">\n        <value>Édition matricielle</value>\n    </data>\n    <data name=\"DesignCtl_Undo_MatrixInsertColumnGroup\" xml:space=\"preserve\">\n        <value>Groupe de colonnes d'insertion matricielle</value>\n    </data>\n    <data name=\"DesignCtl_Undo_MatrixInsertRowGroup\" xml:space=\"preserve\">\n        <value>Groupe de lignes d'insertion matricielle</value>\n    </data>\n    <data name=\"DesignCtl_Undo_Move\" xml:space=\"preserve\">\n        <value>Bouger</value>\n    </data>\n    <data name=\"DesignCtl_Undo_Move_Size\" xml:space=\"preserve\">\n        <value>Déplacement/Taille</value>\n    </data>\n    <data name=\"DesignCtl_Undo_Padding\" xml:space=\"preserve\">\n        <value>Rembourrage</value>\n    </data>\n    <data name=\"DesignCtl_Undo_Size\" xml:space=\"preserve\">\n        <value>Taille</value>\n    </data>\n    <data name=\"DesignCtl_Undo_Spacing\" xml:space=\"preserve\">\n        <value>Espacement</value>\n    </data>\n    <data name=\"DesignCtl_Undo_TableDialog\" xml:space=\"preserve\">\n        <value>Boîte de dialogue Table</value>\n    </data>\n    <data name=\"DesignCtl_Undo_TextboxValue\" xml:space=\"preserve\">\n        <value>Valeur de la zone de texte</value>\n    </data>\n    <data name=\"DesignerUtility_Error_NumberFormatinvalid\" xml:space=\"preserve\">\n        <value>Le format numérique n'est pas valide. ###.## est la forme appropriée.</value>\n    </data>\n    <data name=\"DesignerUtility_Error_SizeLessZero\" xml:space=\"preserve\">\n        <value>La taille ne peut pas être inférieure à zéro.</value>\n    </data>\n    <data name=\"DesignerUtility_Error_SizeUnitInvalid\" xml:space=\"preserve\">\n        <value>L'unité de taille n'est pas valide. Doit être en, cm, mm, pt ou pc.</value>\n    </data>\n    <data name=\"DesignerUtility_Error_SizeZero\" xml:space=\"preserve\">\n        <value>La taille ne peut pas être nulle.</value>\n    </data>\n    <data name=\"DesignerUtility_Show_ConnectDataProviderError\" xml:space=\"preserve\">\n        <value>Impossible de se connecter à l'aide du dataProvider '{0}'</value>\n    </data>\n    <data name=\"DesignerUtility_Show_Error\" xml:space=\"preserve\">\n        <value>Erreur</value>\n    </data>\n    <data name=\"DesignerUtility_Show_OpenConnectionError\" xml:space=\"preserve\">\n        <value>Impossible d'ouvrir la connexion</value>\n    </data>\n    <data name=\"DesignerUtility_Show_SharedConnectionError\" xml:space=\"preserve\">\n        <value>Impossible d'ouvrir la connexion partagée, le mot de passe ou le fichier n'est pas valide.</value>\n    </data>\n    <data name=\"DesignerUtility_Show_SQLError\" xml:space=\"preserve\">\n        <value>Erreur SQL</value>\n    </data>\n    <data name=\"DesignerUtility_Show_TestConnection\" xml:space=\"preserve\">\n        <value>Tester la connexion</value>\n    </data>\n    <data name=\"DesignXmlDraw_BodyRegion_Title\" xml:space=\"preserve\">\n        <value>Principal↑</value>\n    </data>\n    <data name=\"DesignXmlDraw_Error_DataRegionIntoHeaderFooter\" xml:space=\"preserve\">\n        <value>Vous ne pouvez pas coller une DataRegion dans un en-tête ou un pied de page</value>\n    </data>\n    <data name=\"DesignXmlDraw_Error_NoReport\" xml:space=\"preserve\">\n        <value>RDL ne contient pas d'élément de rapport.</value>\n    </data>\n    <data name=\"DesignXmlDraw_Error_SubreportIntoHeaderFooter\" xml:space=\"preserve\">\n        <value>Vous ne pouvez pas coller un sous-rapport dans un en-tête ou un pied de page</value>\n    </data>\n    <data name=\"DesignXmlDraw_Show_XMLInvalid\" xml:space=\"preserve\">\n        <value>XML n'est pas valide</value>\n    </data>\n    <data name=\"DialogDatabase_bShared_Click_DSRTitle\" xml:space=\"preserve\">\n        <value>Spécifier le nom du fichier de référence de la source de données</value>\n    </data>\n    <data name=\"DialogDatabase_bShared_Click_DSRFilter\" xml:space=\"preserve\">\n        <value>Fichiers de référence de source de données (*.dsr)|*.dsr|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"DialogDatabase_buttonSqliteSelectDatabase_Click_AllFilesFilter\" xml:space=\"preserve\">\n        <value>Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"DialogDatabase_cbConnectionTypes_SelectedIndexChanged_Connection\" xml:space=\"preserve\">\n        <value>Connexion:</value>\n    </data>\n    <data name=\"DialogDatabase_cbConnectionTypes_SelectedIndexChanged_Shared_Data_Source_File\" xml:space=\"preserve\">\n        <value>Fichier de source de données partagé :</value>\n    </data>\n    <data name=\"DialogDatabase_Error_UnknownIfdef\" xml:space=\"preserve\">\n        <value>L'élément ifdef inconnu {0} spécifié dans le modèle.</value>\n    </data>\n    <data name=\"DialogDatabase_ShowD_Error\" xml:space=\"preserve\">\n        <value>Erreur</value>\n    </data>\n    <data name=\"DialogDatabase_ShowD_SelectDataProvider\" xml:space=\"preserve\">\n        <value>Veuillez sélectionner un fournisseur de données avant de tester.</value>\n    </data>\n    <data name=\"DialogDatabase_Show_ConnectionSuccessful\" xml:space=\"preserve\">\n        <value>Connexion réussie !</value>\n    </data>\n    <data name=\"DialogDatabase_Show_InternalError\" xml:space=\"preserve\">\n        <value>Erreur interne</value>\n    </data>\n    <data name=\"DialogDataSourceRef_bGetFilename_Click_DSRFilter\" xml:space=\"preserve\">\n        <value>Fichiers de référence de source de données (*.dsr)|*.dsr|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"DialogDataSourceRef_bGetFilename_Click_DSRTitle\" xml:space=\"preserve\">\n        <value>Spécifier le nom du fichier de référence de la source de données</value>\n    </data>\n    <data name=\"DialogDataSourceRef_bOK_Click_UnableCreateDSR\" xml:space=\"preserve\">\n        <value>Impossible de créer le fichier de référence de la source de données</value>\n    </data>\n    <data name=\"DialogDataSources_bGetFilename_Click_DSRFilter\" xml:space=\"preserve\">\n        <value>Fichiers de référence de source de données (*.dsr)|*.dsr|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"DialogDataSources_bGetFilename_Click_DSRTitle\" xml:space=\"preserve\">\n        <value>Spécifier le nom du fichier de référence de la source de données</value>\n    </data>\n    <data name=\"DialogDataSources_ShowE_DataSourceMustUniqueN\" xml:space=\"preserve\">\n        <value>Chaque DataSource doit avoir un nom unique. « {0} » est répété.</value>\n    </data>\n    <data name=\"DialogDataSources_ShowE_DataSources\" xml:space=\"preserve\">\n        <value>Sources des données</value>\n    </data>\n    <data name=\"DialogDataSources_ShowE_NameInvalid\" xml:space=\"preserve\">\n        <value>Le nom '{0}' contient des caractères non valides.</value>\n    </data>\n    <data name=\"DialogDataSources_ShowE_NameMustSpecified\" xml:space=\"preserve\">\n        <value>Le nom doit être spécifié pour toutes les DataSources.</value>\n    </data>\n    <data name=\"DialogEmbeddedImages_bImport_Click_ImageFilesFilter\" xml:space=\"preserve\">\n        <value>Fichiers bitmap (*.bmp)|*.bmp|JPEG (*.jpg ;*.jpeg ;*.jpe ;*.jfif)|*.jpg ;*.jpeg ;*.jpe ;*.jfif|GIF (*.gif)|*.gif|TIFF (*.tif ;*.tiff)|*.tif ;*.tiff|PNG (*.png)|*.png|Tous les fichiers image|*.bmp ;*.jpg ;*.jpeg ;*.jpe ;*.jfif ;*.gif ;*.tif ;*.tiff ;*.png|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"DialogEmbeddedImages_ShowE_CopyImageBeforePaste\" xml:space=\"preserve\">\n        <value>Copiez l'image dans le presse-papiers avant d'essayer de coller.</value>\n    </data>\n    <data name=\"DialogEmbeddedImages_ShowE_ErrorConvertingImage\" xml:space=\"preserve\">\n        <value>Erreur lors de la conversion des données d'image</value>\n    </data>\n    <data name=\"DialogEmbeddedImages_ShowE_ImageMustUniqueName\" xml:space=\"preserve\">\n        <value>Chaque image intégrée doit avoir un nom unique. « {0} » est répété.</value>\n    </data>\n    <data name=\"DialogEmbeddedImages_ShowE_NameInvalid\" xml:space=\"preserve\">\n        <value>Le nom '{0}' contient des caractères non valides.</value>\n    </data>\n    <data name=\"DialogEmbeddedImages_ShowE_NameMustSpecified\" xml:space=\"preserve\">\n        <value>Le nom doit être spécifié pour toutes les images intégrées.</value>\n    </data>\n    <data name=\"DialogFilterOperator_Show_OperatorInList\" xml:space=\"preserve\">\n        <value>L'opérateur '{0}' doit figurer dans la liste des opérateurs.</value>\n    </data>\n    <data name=\"DialogFilterOperator_Show_PickFilterOperator\" xml:space=\"preserve\">\n        <value>Opérateur de filtre de sélection</value>\n    </data>\n    <data name=\"DialogNewChart_ShowC_FillExpression\" xml:space=\"preserve\">\n        <value>Veuillez remplir l'expression de données du graphique ou inclure une série.</value>\n    </data>\n    <data name=\"DialogNewChart_ShowC_FillYAndBubbleExpressions\" xml:space=\"preserve\">\n        <value>Veuillez remplir le tableau des expressions de coordonnées Y et de largeur de bulle.</value>\n    </data>\n    <data name=\"DialogNewChart_ShowC_FillYExpression\" xml:space=\"preserve\">\n        <value>Veuillez remplir le tableau Expression des données de coordonnées Y.</value>\n    </data>\n    <data name=\"DialogToolOptions_bAddMap_Click_MapFilesFilter\" xml:space=\"preserve\">\n        <value>Fichiers de mappage (*.xml)|*.xml|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"DialogToolOptions_Error_RecentFilesMax\" xml:space=\"preserve\">\n        <value>Les fichiers récents doivent être composés au maximum d'un nombre entier compris entre 1 et 50</value>\n    </data>\n    <data name=\"DialogToolOptions_Error_UnableConfig\" xml:space=\"preserve\">\n        <value>Impossible d'obtenir les informations de configuration du bureau. {0}</value>\n    </data>\n    <data name=\"DialogToolOptions_Show_ConfigError\" xml:space=\"preserve\">\n        <value>Erreur de traitement de la configuration du bureau ; à l'aide des valeurs par défaut. {0}</value>\n    </data>\n    <data name=\"DialogToolOptions_Show_RecentFilesMax\" xml:space=\"preserve\">\n        <value>Les fichiers récents doivent être composés au maximum d'un nombre entier compris entre 1 et 50</value>\n    </data>\n    <data name=\"DialogValidateRdl_ShowC_SelectRDLTab\" xml:space=\"preserve\">\n        <value>Sélectionnez l'onglet 'RDL Text' avant de valider.</value>\n    </data>\n    <data name=\"DrillParametersDialog_bFile_Click_ReportFilesFilter\" xml:space=\"preserve\">\n        <value>Fichiers de rapport (*.rdl)|*.rdl|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"DrillParametersDialog_bFile_Click_ReportFilesTitle\" xml:space=\"preserve\">\n        <value>Spécifier le nom du fichier de rapport</value>\n    </data>\n    <data name=\"DrillParametersDialog_ShowC_ReportHasErrors\" xml:space=\"preserve\">\n        <value>Le rapport contient des erreurs et ne peut pas être traité.</value>\n    </data>\n    <data name=\"DrillParametersDialog_Show_ErrorReading\" xml:space=\"preserve\">\n        <value>Erreur lors de la lecture du fichier de rapport</value>\n    </data>\n    <data name=\"DrillParametersDialog_Show_ReportLoadFailed\" xml:space=\"preserve\">\n        <value>Échec du chargement du rapport</value>\n    </data>\n    <data name=\"DrillParametersDialog_Show_ValueMustSpecified\" xml:space=\"preserve\">\n        <value>La valeur doit être spécifiée pour chaque paramètre</value>\n    </data>\n    <data name=\"FileUIEditor_EditValue_XSLFilesFilter\" xml:space=\"preserve\">\n        <value>Fichiers XSL (*.xsl)|*.xsl|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"FindTab_ShowE_InvalidLN\" xml:space=\"preserve\">\n        <value>Numéro de ligne non valide</value>\n    </data>\n    <data name=\"FontCtl_Show_InvalidFontSize\" xml:space=\"preserve\">\n        <value>Taille de police non valide</value>\n    </data>\n    <data name=\"GridCtl_Show_GridRegionsMustDefined\" xml:space=\"preserve\">\n        <value>La grille doit comporter au moins une ligne d'en-tête, de détails ou de pied de page.</value>\n    </data>\n    <data name=\"GroupingCtl_Show_Chart\" xml:space=\"preserve\">\n        <value>Graphique</value>\n    </data>\n    <data name=\"GroupingCtl_Show_ChartSeriesMustHaveLabelForLegend\" xml:space=\"preserve\">\n        <value>L'étiquette de la série de graphiques doit être définie pour la légende.</value>\n    </data>\n    <data name=\"GroupingCtl_Show_Group\" xml:space=\"preserve\">\n        <value>Groupe</value>\n    </data>\n    <data name=\"GroupingCtl_Show_Grouping\" xml:space=\"preserve\">\n        <value>Groupement</value>\n    </data>\n    <data name=\"GroupingCtl_Show_GroupMustDefined\" xml:space=\"preserve\">\n        <value>Le groupe doit être défini.</value>\n    </data>\n    <data name=\"GroupingCtl_Show_GroupNameError\" xml:space=\"preserve\">\n        <value>Nom du groupe en erreur</value>\n    </data>\n    <data name=\"GroupingCtl_Show_InvalidName\" xml:space=\"preserve\">\n        <value>{0} nom n'est pas valide.</value>\n    </data>\n    <data name=\"GroupingCtl_Show_Name\" xml:space=\"preserve\">\n        <value>Nom</value>\n    </data>\n    <data name=\"GroupingCtl_Show_NoExpressionsForGroup\" xml:space=\"preserve\">\n        <value>Aucune expression n'a été définie pour le groupe.</value>\n    </data>\n    <data name=\"ImageCtl_bExternal_Click_ImageFilesFilter\" xml:space=\"preserve\">\n        <value>Fichiers bitmap (*.bmp)|*.bmp|JPEG (*.jpg ;*.jpeg ;*.jpe ;*.jfif)|*.jpg ;*.jpeg ;*.jpe ;*.jfif|GIF (*.gif)|*.gif|TIFF (*.tif ;*.tiff)|*.tif ;*.tiff|PNG (*.png)|*.png|Tous les fichiers image|*.bmp ;*.jpg ;*.jpeg ;*.jpe ;*.jfif ;*.gif ;*.tif ;*.tiff ;*.png|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"InteractivityCtl_bDrillthrough_Click_ReportFilesFilter\" xml:space=\"preserve\">\n        <value>Fichiers de rapport (*.rdl)|*.rdl|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"InteractivityCtl_bDrillthrough_Click_ReportFilesTitle\" xml:space=\"preserve\">\n        <value>Spécifier le nom du fichier de rapport</value>\n    </data>\n    <data name=\"MDIChild_Error_AllowedExportTypes\" xml:space=\"preserve\">\n        <value>Seuls les formats HTML, MHT, XML, CSV, RTF, DOC, Excel, TIF et PDF sont autorisés en tant que types d'exportation.</value>\n    </data>\n    <data name=\"MDIChild_Export_CSV\" xml:space=\"preserve\">\n        <value>Fichier CSV (*.csv)|*.csv|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"MDIChild_Export_DOC\" xml:space=\"preserve\">\n        <value>Fichier DOC (*.doc)|*.doc|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"MDIChild_Export_Excel\" xml:space=\"preserve\">\n        <value>Fichier Excel (*.xlsx)|*.xlsx|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"MDIChild_Export_ExportTitleFormat\" xml:space=\"preserve\">\n        <value>Exporter vers {0}</value>\n    </data>\n    <data name=\"MDIChild_Export_MHT\" xml:space=\"preserve\">\n        <value>MHT (*.mht)|*.mhtml ;*.mht|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"MDIChild_Export_PDF\" xml:space=\"preserve\">\n        <value>Fichier PDF (*.pdf)|*.pdf|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"MDIChild_Export_RTF\" xml:space=\"preserve\">\n        <value>Fichier RTF (*.rtf)|*.rtf|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"MDIChild_Export_TIF\" xml:space=\"preserve\">\n        <value>Fichier TIF (*.tif, *.tiff)|*.tiff ;*.tif|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"MDIChild_Export_Web_Page\" xml:space=\"preserve\">\n        <value>Page Web (*.html, *.htm)|*.html ;*.htm|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"MDIChild_Export_XML\" xml:space=\"preserve\">\n        <value>Fichier XML (*.xml)|*.xml|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"MDIChild_FileSaveAs_RDLFilter\" xml:space=\"preserve\">\n        <value>Fichiers RDL (*.rdl)|*.rdl|Fichiers RDL cryptés (*.encrypted)|*.encrypted|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"MDIChild_ShowF_Export\" xml:space=\"preserve\">\n        <value>Exportation</value>\n    </data>\n    <data name=\"MDIChild_ShowF_WantDisplayColorsInTIF\" xml:space=\"preserve\">\n        <value>Voulez-vous afficher les couleurs en TIF?</value>\n    </data>\n    <data name=\"MDIChild_ShowG_ExportError\" xml:space=\"preserve\">\n        <value>Erreur d'exportation</value>\n    </data>\n    <data name=\"MDIChild_ShowH_fyiReportingDesigner\" xml:space=\"preserve\">\n        <value>Concepteur de rapports Majorsilence</value>\n    </data>\n    <data name=\"MDIChild_ShowH_WantSaveChanges\" xml:space=\"preserve\">\n        <value>Voulez-vous enregistrer les modifications que vous avez apportées à {0}?</value>\n    </data>\n    <data name=\"NodeChangedUndo_GetDescription_change\" xml:space=\"preserve\">\n        <value>changement</value>\n    </data>\n    <data name=\"NodeInsertedUndo_GetDescription_insert\" xml:space=\"preserve\">\n        <value>insérer</value>\n    </data>\n    <data name=\"NodeRemovedUndo_GetDescription_remove\" xml:space=\"preserve\">\n        <value>enlever</value>\n    </data>\n    <data name=\"PositionCtl_InitValues_GroupSelected\" xml:space=\"preserve\">\n        <value>Groupe sélectionné</value>\n    </data>\n    <data name=\"PositionCtl_Show_Height\" xml:space=\"preserve\">\n        <value>Hauteur</value>\n    </data>\n    <data name=\"PositionCtl_Show_Invalid\" xml:space=\"preserve\">\n        <value>{0} n'est pas valide. {1}</value>\n    </data>\n    <data name=\"PositionCtl_Show_Left\" xml:space=\"preserve\">\n        <value>Gauche</value>\n    </data>\n    <data name=\"PositionCtl_Show_Name\" xml:space=\"preserve\">\n        <value>Nom</value>\n    </data>\n    <data name=\"PositionCtl_Show_SizeInvalid\" xml:space=\"preserve\">\n        <value>La taille n'est pas valide</value>\n    </data>\n    <data name=\"PositionCtl_Show_Top\" xml:space=\"preserve\">\n        <value>Retour au début</value>\n    </data>\n    <data name=\"PositionCtl_Show_Width\" xml:space=\"preserve\">\n        <value>Largeur</value>\n    </data>\n    <data name=\"PropertyDialog_BuildChartAxisTabs_Axis\" xml:space=\"preserve\">\n        <value>Axe</value>\n    </data>\n    <data name=\"PropertyDialog_BuildChartAxisTabs_ChartCategoryAxis\" xml:space=\"preserve\">\n        <value>Axe de la catégorie de graphique (X)</value>\n    </data>\n    <data name=\"PropertyDialog_BuildChartAxisTabs_ChartValueAxis\" xml:space=\"preserve\">\n        <value>Axe des valeurs du graphique (y)</value>\n    </data>\n    <data name=\"PropertyDialog_BuildChartLegendTabs_ChartLegendProperties\" xml:space=\"preserve\">\n        <value>Propriétés de la légende du graphique</value>\n    </data>\n    <data name=\"PropertyDialog_BuildChartLegendTabs_Legend\" xml:space=\"preserve\">\n        <value>Légende</value>\n    </data>\n    <data name=\"PropertyDialog_BuildDataSetsTabs_Data\" xml:space=\"preserve\">\n        <value>Données</value>\n    </data>\n    <data name=\"PropertyDialog_BuildDataSetsTabs_DataSet\" xml:space=\"preserve\">\n        <value>Jeu de données</value>\n    </data>\n    <data name=\"PropertyDialog_BuildDataSetsTabs_DataSet_Header\" xml:space=\"preserve\">\n        <value>Jeu de données</value>\n    </data>\n    <data name=\"PropertyDialog_BuildDataSetsTabs_QueryParameters\" xml:space=\"preserve\">\n        <value>Paramètres de requête</value>\n    </data>\n    <data name=\"PropertyDialog_BuildGroupingTabs_CategoryGrouping\" xml:space=\"preserve\">\n        <value>Regroupement de catégories</value>\n    </data>\n    <data name=\"PropertyDialog_BuildGroupingTabs_GroupingAndSorting\" xml:space=\"preserve\">\n        <value>Regroupement et tri</value>\n    </data>\n    <data name=\"PropertyDialog_BuildGroupingTabs_SeriesGrouping\" xml:space=\"preserve\">\n        <value>Regroupement de séries</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportItemTabs_Border\" xml:space=\"preserve\">\n        <value>Frontière</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportItemTabs_Chart\" xml:space=\"preserve\">\n        <value>Graphique</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportItemTabs_Grouping\" xml:space=\"preserve\">\n        <value>Groupement</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportItemTabs_GroupSelectionProperties\" xml:space=\"preserve\">\n        <value>Propriétés de sélection de groupe</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportItemTabs_Filters\" xml:space=\"preserve\">\n        <value>Filtres</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportItemTabs_Interactivity\" xml:space=\"preserve\">\n        <value>Interactivité</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportItemTabs_List\" xml:space=\"preserve\">\n        <value>Liste</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportItemTabs_Matrix\" xml:space=\"preserve\">\n        <value>Matrice</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportItemTabs_Name_Position\" xml:space=\"preserve\">\n        <value>Nom/Poste</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportItemTabs_Properties\" xml:space=\"preserve\">\n        <value>Propriétés</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportItemTabs_Sorting\" xml:space=\"preserve\">\n        <value>Classement</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportItemTabs_StaticSeries\" xml:space=\"preserve\">\n        <value>Série statique</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportItemTabs_Subreport\" xml:space=\"preserve\">\n        <value>Sous-état</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportItemTabs_TableColumn\" xml:space=\"preserve\">\n        <value>Colonne du tableau</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportItemTabs_TableRow\" xml:space=\"preserve\">\n        <value>Rangée de tableau</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportItemTabs_Table\" xml:space=\"preserve\">\n        <value>Tableau</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportItemTabs_Text\" xml:space=\"preserve\">\n        <value>Texte</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportTabs_Body\" xml:space=\"preserve\">\n        <value>Principal</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportTabs_Parameters\" xml:space=\"preserve\">\n        <value>Paramètres</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportTabs_Report\" xml:space=\"preserve\">\n        <value>Rapport</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportTabs_ReportProperties\" xml:space=\"preserve\">\n        <value>Propriétés du rapport</value>\n    </data>\n    <data name=\"PropertyDialog_BuildReportTabs_XMLRendering\" xml:space=\"preserve\">\n        <value>Rendu XML</value>\n    </data>\n    <data name=\"PropertyDialog_BuildTitle_CategoryAxisTitle\" xml:space=\"preserve\">\n        <value>Catégorie (X) Axe Titre</value>\n    </data>\n    <data name=\"PropertyDialog_BuildTitle_ChartTitle\" xml:space=\"preserve\">\n        <value>Titre du graphique</value>\n    </data>\n    <data name=\"PropertyDialog_BuildTitle_ValueAxisRightTitle\" xml:space=\"preserve\">\n        <value>Valeur (y) Axe (droite) Titre</value>\n    </data>\n    <data name=\"PropertyDialog_BuildTitle_ValueAxisTitle\" xml:space=\"preserve\">\n        <value>Valeur (y) Titre de l'axe</value>\n    </data>\n    <data name=\"PropertyDialog_ShowF_DataSet\" xml:space=\"preserve\">\n        <value>Jeu de données</value>\n    </data>\n    <data name=\"PropertyDialog_ShowF_WantDeleteDataset\" xml:space=\"preserve\">\n        <value>Êtes-vous sûr de vouloir supprimer cet ensemble de données?</value>\n    </data>\n    <data name=\"PropertyPrintFirstLast_SetProp_change\" xml:space=\"preserve\">\n        <value>changement</value>\n    </data>\n    <data name=\"PropertyReportItem_Undo_ColumnSpanchange\" xml:space=\"preserve\">\n        <value>Modification de l'étendue des colonnes</value>\n    </data>\n    <data name=\"PropertyReportItem_Undo_NameChange\" xml:space=\"preserve\">\n        <value>Changement de nom</value>\n    </data>\n    <data name=\"PropertyReport_Undo_Body\" xml:space=\"preserve\">\n        <value>Principal</value>\n    </data>\n    <data name=\"PropertyReport_Undo_change\" xml:space=\"preserve\">\n        <value>changement</value>\n    </data>\n    <data name=\"PropertyTableUIEditor_EditValue_TableDialog\" xml:space=\"preserve\">\n        <value>Boîte de dialogue Table</value>\n    </data>\n    <data name=\"RdlDesigner_menuData_Popup_New\" xml:space=\"preserve\">\n        <value>Nouveau...</value>\n    </data>\n    <data name=\"RdlDesigner_menuEdit_Popup_Undo\" xml:space=\"preserve\">\n        <value>Défaire</value>\n    </data>\n    <data name=\"RdlDesigner_menuFileOpen_Click_ReportFilesFilter\" xml:space=\"preserve\">\n        <value>Fichiers de rapport (*.rdl ;*rdlc)|*.rdl ;*.rdlc|Fichiers RDL cryptés (*.encrypted)|*.encrypted|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"RdlDesigner_menuTools_Popup_StartDesktop\" xml:space=\"preserve\">\n        <value>Démarrer le bureau</value>\n    </data>\n    <data name=\"RdlDesigner_menuTools_Popup_StopDesktop\" xml:space=\"preserve\">\n        <value>Arrêter le bureau</value>\n    </data>\n    <data name=\"RdlDesigner_ShowD_Error\" xml:space=\"preserve\">\n        <value>Erreur</value>\n    </data>\n    <data name=\"RdlDesigner_Show_CustomColorSaveFailed\" xml:space=\"preserve\">\n        <value>Échec de l'enregistrement des couleurs personnalisées</value>\n    </data>\n    <data name=\"RdlDesigner_Show_ErrorStopProcess\" xml:space=\"preserve\">\n        <value>Erreur d'arrêt du processus</value>\n    </data>\n    <data name=\"RdlDesigner_Show_HelpURLInvalid\" xml:space=\"preserve\">\n        <value>URL d'aide non valide</value>\n    </data>\n    <data name=\"RdlDesigner_Show_PrintError\" xml:space=\"preserve\">\n        <value>Erreur d'impression :</value>\n    </data>\n    <data name=\"RdlDesigner_Show_PrintOneFile\" xml:space=\"preserve\">\n        <value>Ne peut imprimer qu'un seul fichier à la fois.</value>\n    </data>\n    <data name=\"RdlDesigner_Show_RDLDesign\" xml:space=\"preserve\">\n        <value>Conception RDL</value>\n    </data>\n    <data name=\"RdlDesigner_Show_ResettingHelpURL\" xml:space=\"preserve\">\n        <value>Réinitialisation de l'URL d'aide par défaut.</value>\n    </data>\n    <data name=\"RdlDesigner_Show_ResettingSupportURL\" xml:space=\"preserve\">\n        <value>Réinitialisation de l'URL d'assistance par défaut.</value>\n    </data>\n    <data name=\"RdlDesigner_Show_SupportURLInvalid\" xml:space=\"preserve\">\n        <value>URL d'assistance non valide</value>\n    </data>\n    <data name=\"RdlDesigner_Show_UnableShowReport\" xml:space=\"preserve\">\n        <value>Impossible d'afficher le rapport</value>\n    </data>\n    <data name=\"RdlDesigner_Show_UnableStartDesktop\" xml:space=\"preserve\">\n        <value>Impossible de démarrer le bureau</value>\n    </data>\n    <data name=\"RdlDesigner_Show_ZoomValueInvalid\" xml:space=\"preserve\">\n        <value>Valeur de zoom non valide</value>\n    </data>\n    <data name=\"RdlDesigner_Status_Height\" xml:space=\"preserve\">\n        <value>hauteur</value>\n    </data>\n    <data name=\"RdlDesigner_Undo_DataSetDialog\" xml:space=\"preserve\">\n        <value>Boîte de dialogue DataSet</value>\n    </data>\n    <data name=\"RdlDesigner_Undo_DataSourcesDialog\" xml:space=\"preserve\">\n        <value>Boîte de dialogue Sources de données</value>\n    </data>\n    <data name=\"RdlDesigner_Undo_EmbeddedImagesDialog\" xml:space=\"preserve\">\n        <value>Boîte de dialogue Images intégrées</value>\n    </data>\n    <data name=\"RdlEditPreview_ShowI_ReachedEndDocument\" xml:space=\"preserve\">\n        <value>Atteint la fin du document.</value>\n    </data>\n    <data name=\"RdlEditPreview_Show_ErrorFind\" xml:space=\"preserve\">\n        <value>Veuillez réessayer. Erreur lors de la recherche : {0}</value>\n    </data>\n    <data name=\"RdlEditPreview_Show_InternalError\" xml:space=\"preserve\">\n        <value>Erreur interne</value>\n    </data>\n    <data name=\"RdlEditPreview_Show_Report\" xml:space=\"preserve\">\n        <value>Rapport</value>\n    </data>\n    <data name=\"RdlUserControl_openToolStripButton1_Click_ReportFilesFilter\" xml:space=\"preserve\">\n        <value>Fichiers de rapport (*.rdl ;*rdlc)|*.rdl ;*.rdlc|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"RdlUserControl_Show_PrintError\" xml:space=\"preserve\">\n        <value>Erreur d'impression:</value>\n    </data>\n    <data name=\"RdlUserControl_Show_PrintOneFile\" xml:space=\"preserve\">\n        <value>Ne peut imprimer qu'un seul fichier à la fois.</value>\n    </data>\n    <data name=\"RdlUserControl_Show_RDLDesign\" xml:space=\"preserve\">\n        <value>Conception RDL</value>\n    </data>\n    <data name=\"RdlUserControl_Show_ZoomValueInvalid\" xml:space=\"preserve\">\n        <value>Valeur de zoom non valide</value>\n    </data>\n    <data name=\"ReportCtl_Show_Field_Invalid\" xml:space=\"preserve\">\n        <value>Champ non valide</value>\n    </data>\n    <data name=\"ReportCtl_Show_SizeInvalid\" xml:space=\"preserve\">\n        <value>La valeur de taille de {0} n'est pas valide.</value>\n    </data>\n    <data name=\"ReportNames_DescriptionDuplicateNameError\" xml:space=\"preserve\">\n        <value>NameError : nom du duplicata : {0}, nom du nœud : {1}</value>\n    </data>\n    <data name=\"ReportParameterCtl_bDefaultValues_Click_Default_Values\" xml:space=\"preserve\">\n        <value>Valeurs par défaut</value>\n    </data>\n    <data name=\"ReportXmlCtl_bOpenXsl_Click_XslFilerTitle\" xml:space=\"preserve\">\n        <value>Spécifier le nom du fichier DataTransform</value>\n    </data>\n    <data name=\"ReportXmlCtl_bOpenXsl_Click_XSLFilesFilter\" xml:space=\"preserve\">\n        <value>Fichiers XSL (*.xsl)|*.xsl|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"SingleCtlDialog_Undo_AppearanceChange\" xml:space=\"preserve\">\n        <value>Changement d'apparence</value>\n    </data>\n    <data name=\"SingleCtlDialog_Undo_BackgroundChange\" xml:space=\"preserve\">\n        <value>Changement d'arrière-plan</value>\n    </data>\n    <data name=\"SingleCtlDialog_Undo_BorderChange\" xml:space=\"preserve\">\n        <value>Changement de frontière</value>\n    </data>\n    <data name=\"SingleCtlDialog_Undo_FiltersChange\" xml:space=\"preserve\">\n        <value>Changement de filtres</value>\n    </data>\n    <data name=\"SingleCtlDialog_Undo_GroupingChange\" xml:space=\"preserve\">\n        <value>Changement de regroupement</value>\n    </data>\n    <data name=\"SingleCtlDialog_Undo_ImageChange\" xml:space=\"preserve\">\n        <value>Changement d'image</value>\n    </data>\n    <data name=\"SingleCtlDialog_Undo_InteractivityChange\" xml:space=\"preserve\">\n        <value>Changement d'interactivité</value>\n    </data>\n    <data name=\"SingleCtlDialog_Undo_ReportCodeChange\" xml:space=\"preserve\">\n        <value>Signaler une modification de code</value>\n    </data>\n    <data name=\"SingleCtlDialog_Undo_ReportModules_ClassesChange\" xml:space=\"preserve\">\n        <value>Modification des modules/classes de rapport</value>\n    </data>\n    <data name=\"SingleCtlDialog_Undo_SortChange\" xml:space=\"preserve\">\n        <value>Trier le changement</value>\n    </data>\n    <data name=\"SingleCtlDialog_Undo_SubreportChange\" xml:space=\"preserve\">\n        <value>Modification du sous-rapport</value>\n    </data>\n    <data name=\"SingleCtlDialog_Undo_VisibilityChange\" xml:space=\"preserve\">\n        <value>Changement de visibilité</value>\n    </data>\n    <data name=\"StyleBorderCtl_Show_BottomWidth\" xml:space=\"preserve\">\n        <value>Largeur inférieure</value>\n    </data>\n    <data name=\"StyleBorderCtl_Show_DefaultWidth\" xml:space=\"preserve\">\n        <value>Largeur par défaut</value>\n    </data>\n    <data name=\"StyleBorderCtl_Show_LeftWidth\" xml:space=\"preserve\">\n        <value>Largeur gauche</value>\n    </data>\n    <data name=\"StyleBorderCtl_Show_RightWidth\" xml:space=\"preserve\">\n        <value>Largeur droite</value>\n    </data>\n    <data name=\"StyleBorderCtl_Show_SizeInvalid\" xml:space=\"preserve\">\n        <value>Taille invalide</value>\n    </data>\n    <data name=\"StyleBorderCtl_Show_TopWidth\" xml:space=\"preserve\">\n        <value>Largeur supérieure</value>\n    </data>\n    <data name=\"StyleCtl_Show_Bottom\" xml:space=\"preserve\">\n        <value>Fond</value>\n    </data>\n    <data name=\"StyleCtl_Show_Left\" xml:space=\"preserve\">\n        <value>Gauche</value>\n    </data>\n    <data name=\"StyleCtl_Show_PaddingInvalid\" xml:space=\"preserve\">\n        <value>{0} remplissage non valide</value>\n    </data>\n    <data name=\"StyleCtl_Show_Right\" xml:space=\"preserve\">\n        <value>Droite</value>\n    </data>\n    <data name=\"StyleCtl_Show_Top\" xml:space=\"preserve\">\n        <value>Retour au début</value>\n    </data>\n    <data name=\"StyleTextCtl_InitTextStyles_Caption\" xml:space=\"preserve\">\n        <value>Légende</value>\n    </data>\n    <data name=\"StyleTextCtl_Show_InvalidFontSize\" xml:space=\"preserve\">\n        <value>Taille de police non valide</value>\n    </data>\n    <data name=\"SubreportCtl_bFile_Click_ReportFilesFilter\" xml:space=\"preserve\">\n        <value>Fichiers de rapport (*.rdl)|*.rdl|Tous les fichiers (*.*)|*.*</value>\n    </data>\n    <data name=\"SubreportCtl_bFile_Click_ReportFilesTitle\" xml:space=\"preserve\">\n        <value>Spécifier le nom du fichier de rapport</value>\n    </data>\n    <data name=\"SubreportCtl_Show_ErrorReading\" xml:space=\"preserve\">\n        <value>Erreur lors de la lecture du fichier de rapport</value>\n    </data>\n    <data name=\"SubreportCtl_Show_ReportLoadFailed\" xml:space=\"preserve\">\n        <value>Échec du chargement du rapport</value>\n    </data>\n    <data name=\"SubreportCtl_Show_Subreport\" xml:space=\"preserve\">\n        <value>Sous-état</value>\n    </data>\n    <data name=\"SubreportCtl_Show_SubreportMustSpecified\" xml:space=\"preserve\">\n        <value>Le fichier de sous-rapport doit être spécifié.</value>\n    </data>\n    <data name=\"TableColumnCtl_Show_ExpressionTrueFalse\" xml:space=\"preserve\">\n        <value>{0} doit être une expression « vrai » ou « faux »</value>\n    </data>\n    <data name=\"TableColumnCtl_Show_HiddenInvalid\" xml:space=\"preserve\">\n        <value>Caché n'est pas valide</value>\n    </data>\n    <data name=\"TableColumnCtl_Show_WidthInvalid\" xml:space=\"preserve\">\n        <value>La largeur n'est pas valide</value>\n    </data>\n    <data name=\"TableCtl_Show_TableMustHaveRegions\" xml:space=\"preserve\">\n        <value>La table doit avoir au moins une ligne d'en-tête, de détails ou de pied de page définie.</value>\n    </data>\n    <data name=\"TableRowCtl_Show_ExpressionTrueFalse\" xml:space=\"preserve\">\n        <value>{0} doit être une expression « vrai » ou « faux »</value>\n    </data>\n    <data name=\"TableRowCtl_Show_HeightInvalid\" xml:space=\"preserve\">\n        <value>La hauteur n'est pas valide</value>\n    </data>\n    <data name=\"TableRowCtl_Show_HiddenInvalid\" xml:space=\"preserve\">\n        <value>Caché n'est pas valide</value>\n    </data>\n    <data name=\"Tabs_Background\" xml:space=\"preserve\">\n        <value>Arrière-plan</value>\n    </data>\n    <data name=\"Tabs_Borders\" xml:space=\"preserve\">\n        <value>Frontières</value>\n    </data>\n    <data name=\"Tabs_Filter\" xml:space=\"preserve\">\n        <value>Filtre</value>\n    </data>\n    <data name=\"Tabs_Font\" xml:space=\"preserve\">\n        <value>Police</value>\n    </data>\n    <data name=\"Tabs_Grouping\" xml:space=\"preserve\">\n        <value>Groupement</value>\n    </data>\n    <data name=\"Tabs_Interactivity\" xml:space=\"preserve\">\n        <value>Interactivité</value>\n    </data>\n    <data name=\"Tabs_ModulesAndClasses\" xml:space=\"preserve\">\n        <value>Modules et cours</value>\n    </data>\n    <data name=\"Tabs_ReportParameters\" xml:space=\"preserve\">\n        <value>Paramètres du rapport</value>\n    </data>\n    <data name=\"Tabs_Sorting\" xml:space=\"preserve\">\n        <value>Classement</value>\n    </data>\n    <data name=\"Tabs_Subreport\" xml:space=\"preserve\">\n        <value>Sous-état</value>\n    </data>\n    <data name=\"Tabs_Visibility\" xml:space=\"preserve\">\n        <value>Visibilité</value>\n    </data>\n    <data name=\"Undo_Error_EndGroupNotMatchStartGroup\" xml:space=\"preserve\">\n        <value>Erreur de logique interne : EndGroup ne correspond pas à StartGroup</value>\n    </data>\n    <data name=\"Undo_Error_UnknownAction\" xml:space=\"preserve\">\n        <value>Action inconnue</value>\n    </data>\n</root>"
  },
  {
    "path": "RdlDesign/Resources/Strings.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"DesignXmlDraw_PageHeaderRegion_Title\" xml:space=\"preserve\">\n    <value>Page Header ↑</value>\n  </data>\n  <data name=\"DesignXmlDraw_BodyRegion_Title\" xml:space=\"preserve\">\n    <value>Body ↑</value>\n  </data>\n  <data name=\"DesignXmlDraw_PageFooterRegion_Title\" xml:space=\"preserve\">\n    <value>Page Footer ↑</value>\n  </data>\n  <data name=\"RdlDesigner_Status_Height\" xml:space=\"preserve\">\n    <value>height</value>\n  </data>\n  <data name=\"RdlDesigner_Status_cm\" xml:space=\"preserve\">\n    <value>cm</value>\n  </data>\n  <data name=\"RdlDesigner_Status_in\" xml:space=\"preserve\">\n    <value>\"</value>\n  </data>\n  <data name=\"DesignCtl_SelectionName_GroupSelection\" xml:space=\"preserve\">\n    <value>Group Selection</value>\n  </data>\n  <data name=\"DesignCtl_SelectionName_Unnamed\" xml:space=\"preserve\">\n    <value>*Unnamed*</value>\n  </data>\n  <data name=\"DesignCtl_SelectionName_in\" xml:space=\"preserve\">\n    <value>in</value>\n  </data>\n  <data name=\"DesignCtl_SelectionName_Group\" xml:space=\"preserve\">\n    <value>Group</value>\n  </data>\n  <data name=\"RdlDesigner_Status_Ln\" xml:space=\"preserve\">\n    <value>Ln</value>\n  </data>\n  <data name=\"RdlDesigner_Status_Ch\" xml:space=\"preserve\">\n    <value>Ch</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_GroupSelectionProperties\" xml:space=\"preserve\">\n    <value>Group Selection Properties</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Text\" xml:space=\"preserve\">\n    <value>Text</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_List\" xml:space=\"preserve\">\n    <value>List</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Filters\" xml:space=\"preserve\">\n    <value>Filters</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Sorting\" xml:space=\"preserve\">\n    <value>Sorting</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Chart\" xml:space=\"preserve\">\n    <value>Chart</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_StaticSeries\" xml:space=\"preserve\">\n    <value>Static Series</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Image\" xml:space=\"preserve\">\n    <value>Image</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Table\" xml:space=\"preserve\">\n    <value>Table</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Grouping\" xml:space=\"preserve\">\n    <value>Grouping</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_TableColumn\" xml:space=\"preserve\">\n    <value>Table Column</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_TableRow\" xml:space=\"preserve\">\n    <value>Table Row</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Grid\" xml:space=\"preserve\">\n    <value>Grid</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Matrix\" xml:space=\"preserve\">\n    <value>Matrix</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Subreport\" xml:space=\"preserve\">\n    <value>Subreport</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Name_Position\" xml:space=\"preserve\">\n    <value>Name/Position</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Border\" xml:space=\"preserve\">\n    <value>Border</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Style\" xml:space=\"preserve\">\n    <value>Style</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Interactivity\" xml:space=\"preserve\">\n    <value>Interactivity</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Properties\" xml:space=\"preserve\">\n    <value>Properties</value>\n  </data>\n  <data name=\"PropertyDialog_BuildTitle_ChartTitle\" xml:space=\"preserve\">\n    <value>Chart Title</value>\n  </data>\n  <data name=\"PropertyDialog_BuildTitle_CategoryAxisTitle\" xml:space=\"preserve\">\n    <value>Category (X) Axis Title</value>\n  </data>\n  <data name=\"PropertyDialog_BuildTitle_ValueAxisRightTitle\" xml:space=\"preserve\">\n    <value>Value (Y) Axis (Right) Title</value>\n  </data>\n  <data name=\"PropertyDialog_BuildTitle_ValueAxisTitle\" xml:space=\"preserve\">\n    <value>Value (Y) Axis Title</value>\n  </data>\n  <data name=\"PropertyDialog_BuildChartAxisTabs_ChartCategoryAxis\" xml:space=\"preserve\">\n    <value>Chart Category (X) Axis</value>\n  </data>\n  <data name=\"PropertyDialog_BuildChartAxisTabs_ChartValueAxis\" xml:space=\"preserve\">\n    <value>Chart Value (Y) Axis</value>\n  </data>\n  <data name=\"PropertyDialog_BuildChartAxisTabs_Axis\" xml:space=\"preserve\">\n    <value>Axis</value>\n  </data>\n  <data name=\"PropertyDialog_BuildChartLegendTabs_ChartLegendProperties\" xml:space=\"preserve\">\n    <value>Chart Legend Properties</value>\n  </data>\n  <data name=\"PropertyDialog_BuildChartLegendTabs_Legend\" xml:space=\"preserve\">\n    <value>Legend</value>\n  </data>\n  <data name=\"PropertyDialog_BuildGroupingTabs_SeriesGrouping\" xml:space=\"preserve\">\n    <value>Series Grouping</value>\n  </data>\n  <data name=\"PropertyDialog_BuildGroupingTabs_CategoryGrouping\" xml:space=\"preserve\">\n    <value>Category Grouping</value>\n  </data>\n  <data name=\"PropertyDialog_BuildGroupingTabs_GroupingAndSorting\" xml:space=\"preserve\">\n    <value>Grouping and Sorting</value>\n  </data>\n  <data name=\"PropertyDialog_BuildDataSetsTabs_DataSet_Header\" xml:space=\"preserve\">\n    <value>DataSet</value>\n  </data>\n  <data name=\"PropertyDialog_BuildDataSetsTabs_DataSet\" xml:space=\"preserve\">\n    <value>DataSet</value>\n  </data>\n  <data name=\"PropertyDialog_BuildDataSetsTabs_QueryParameters\" xml:space=\"preserve\">\n    <value>Query Parameters</value>\n  </data>\n  <data name=\"PropertyDialog_BuildDataSetsTabs_Data\" xml:space=\"preserve\">\n    <value>Data</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportTabs_ReportProperties\" xml:space=\"preserve\">\n    <value>Report Properties</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportTabs_Report\" xml:space=\"preserve\">\n    <value>Report</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportTabs_Parameters\" xml:space=\"preserve\">\n    <value>Parameters</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportTabs_XMLRendering\" xml:space=\"preserve\">\n    <value>XML Rendering</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportTabs_Body\" xml:space=\"preserve\">\n    <value>Body</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportTabs_Code\" xml:space=\"preserve\">\n    <value>Code</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportTabs_Modules_Classes\" xml:space=\"preserve\">\n    <value>Modules/Classes</value>\n  </data>\n  <data name=\"StyleTextCtl_InitTextStyles_Caption\" xml:space=\"preserve\">\n    <value>Caption</value>\n  </data>\n  <data name=\"RdlDesigner_menuData_Popup_New\" xml:space=\"preserve\">\n    <value>New...</value>\n  </data>\n  <data name=\"RdlDesigner_menuEdit_Popup_Undo\" xml:space=\"preserve\">\n    <value>Undo</value>\n  </data>\n  <data name=\"NodeChangedUndo_GetDescription_change\" xml:space=\"preserve\">\n    <value>change</value>\n  </data>\n  <data name=\"NodeRemovedUndo_GetDescription_remove\" xml:space=\"preserve\">\n    <value>remove</value>\n  </data>\n  <data name=\"NodeInsertedUndo_GetDescription_insert\" xml:space=\"preserve\">\n    <value>insert</value>\n  </data>\n  <data name=\"PropertyTableUIEditor_EditValue_TableDialog\" xml:space=\"preserve\">\n    <value>Table Dialog</value>\n  </data>\n  <data name=\"DesignCtl_Undo_TableDialog\" xml:space=\"preserve\">\n    <value>Table Dialog</value>\n  </data>\n  <data name=\"DesignCtl_Undo_InsertTableRow\" xml:space=\"preserve\">\n    <value>Insert Table Row</value>\n  </data>\n  <data name=\"DesignCtl_Undo_InsertTableGroup\" xml:space=\"preserve\">\n    <value>Insert Table Group</value>\n  </data>\n  <data name=\"DesignCtl_Undo_InsertTableColumn\" xml:space=\"preserve\">\n    <value>Insert Table Column</value>\n  </data>\n  <data name=\"DesignCtl_Undo_DialogTableGroupEdit\" xml:space=\"preserve\">\n    <value>Dialog Table Group Edit</value>\n  </data>\n  <data name=\"DesignCtl_Undo_DeleteTableGroup\" xml:space=\"preserve\">\n    <value>Delete Table Group</value>\n  </data>\n  <data name=\"DesignCtl_Undo_DeleteTableRow\" xml:space=\"preserve\">\n    <value>Delete Table Row</value>\n  </data>\n  <data name=\"DesignCtl_Undo_DeleteTable\" xml:space=\"preserve\">\n    <value>Delete Table</value>\n  </data>\n  <data name=\"DesignCtl_Undo_DeleteTableColumn\" xml:space=\"preserve\">\n    <value>Delete Table Column</value>\n  </data>\n  <data name=\"DesignCtl_Undo_MatrixInsertRowGroup\" xml:space=\"preserve\">\n    <value>Matrix Insert Row Group</value>\n  </data>\n  <data name=\"DesignCtl_Undo_MatrixInsertColumnGroup\" xml:space=\"preserve\">\n    <value>Matrix Insert Column Group</value>\n  </data>\n  <data name=\"DesignCtl_Undo_MatrixEdit\" xml:space=\"preserve\">\n    <value>Matrix Edit</value>\n  </data>\n  <data name=\"DesignCtl_Undo_MatrixDeleteGroup\" xml:space=\"preserve\">\n    <value>Matrix Delete Group</value>\n  </data>\n  <data name=\"DesignCtl_Undo_MatrixDelete\" xml:space=\"preserve\">\n    <value>Matrix Delete</value>\n  </data>\n  <data name=\"DesignCtl_Undo_MatrixDialog\" xml:space=\"preserve\">\n    <value>Matrix Dialog</value>\n  </data>\n  <data name=\"DesignCtl_Undo_InsertSeriesGrouping\" xml:space=\"preserve\">\n    <value>Insert Series Grouping</value>\n  </data>\n  <data name=\"DesignCtl_Undo_InsertCategoryGrouping\" xml:space=\"preserve\">\n    <value>Insert Category Grouping</value>\n  </data>\n  <data name=\"DesignCtl_Undo_DialogGrouping\" xml:space=\"preserve\">\n    <value>Dialog Grouping</value>\n  </data>\n  <data name=\"DesignCtl_Undo_DeleteGrouping\" xml:space=\"preserve\">\n    <value>Delete Grouping</value>\n  </data>\n  <data name=\"DesignCtl_Undo_InsertTable\" xml:space=\"preserve\">\n    <value>Insert Table</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Insert\" xml:space=\"preserve\">\n    <value>Insert</value>\n  </data>\n  <data name=\"DesignCtl_Undo_InsertMatrix\" xml:space=\"preserve\">\n    <value>Insert Matrix</value>\n  </data>\n  <data name=\"DesignCtl_Undo_InsertChart\" xml:space=\"preserve\">\n    <value>Insert Chart</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Paste\" xml:space=\"preserve\">\n    <value>Paste</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Move\" xml:space=\"preserve\">\n    <value>Move</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Move_Size\" xml:space=\"preserve\">\n    <value>Move/Size</value>\n  </data>\n  <data name=\"DesignCtl_Undo_TextboxValue\" xml:space=\"preserve\">\n    <value>Textbox Value</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Style\" xml:space=\"preserve\">\n    <value>Style</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Delete\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Cut\" xml:space=\"preserve\">\n    <value>Cut</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Padding\" xml:space=\"preserve\">\n    <value>Padding</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Spacing\" xml:space=\"preserve\">\n    <value>Spacing</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Size\" xml:space=\"preserve\">\n    <value>Size</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Align\" xml:space=\"preserve\">\n    <value>Align</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Dialog\" xml:space=\"preserve\">\n    <value>Dialog</value>\n  </data>\n  <data name=\"PropertyPrintFirstLast_SetProp_change\" xml:space=\"preserve\">\n    <value>change</value>\n  </data>\n  <data name=\"PropertyReport_Undo_Body\" xml:space=\"preserve\">\n    <value>Body</value>\n  </data>\n  <data name=\"PropertyReport_Undo_change\" xml:space=\"preserve\">\n    <value>change</value>\n  </data>\n  <data name=\"PropertyReportItem_Undo_ColumnSpanchange\" xml:space=\"preserve\">\n    <value>Column Span change</value>\n  </data>\n  <data name=\"PropertyReportItem_Undo_NameChange\" xml:space=\"preserve\">\n    <value>Name change</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_InteractivityChange\" xml:space=\"preserve\">\n    <value>Interactivity change</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_VisibilityChange\" xml:space=\"preserve\">\n    <value>Visibility change</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_BorderChange\" xml:space=\"preserve\">\n    <value>Border change</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_AppearanceChange\" xml:space=\"preserve\">\n    <value>Appearance change</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_BackgroundChange\" xml:space=\"preserve\">\n    <value>Background change</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_FiltersChange\" xml:space=\"preserve\">\n    <value>Filters change</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_SortChange\" xml:space=\"preserve\">\n    <value>Sort change</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_GroupingChange\" xml:space=\"preserve\">\n    <value>Grouping change</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_ReportCodeChange\" xml:space=\"preserve\">\n    <value>Report code change</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_ImageChange\" xml:space=\"preserve\">\n    <value>Image change</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_SubreportChange\" xml:space=\"preserve\">\n    <value>Subreport change</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_ReportModules_ClassesChange\" xml:space=\"preserve\">\n    <value>Report Modules/Classes change</value>\n  </data>\n  <data name=\"RdlDesigner_Undo_DataSourcesDialog\" xml:space=\"preserve\">\n    <value>DataSources Dialog</value>\n  </data>\n  <data name=\"RdlDesigner_Undo_DataSetDialog\" xml:space=\"preserve\">\n    <value>DataSet Dialog</value>\n  </data>\n  <data name=\"RdlDesigner_Undo_EmbeddedImagesDialog\" xml:space=\"preserve\">\n    <value>Embedded Images Dialog</value>\n  </data>\n  <data name=\"RdlDesigner_menuTools_Popup_StartDesktop\" xml:space=\"preserve\">\n    <value>Start Desktop</value>\n  </data>\n  <data name=\"RdlDesigner_menuTools_Popup_StopDesktop\" xml:space=\"preserve\">\n    <value>Stop Desktop</value>\n  </data>\n  <data name=\"CodeCtl_Show_NoErrors\" xml:space=\"preserve\">\n    <value>No errors</value>\n  </data>\n  <data name=\"CodeCtl_Show_CodeVerification\" xml:space=\"preserve\">\n    <value>Code Verification</value>\n  </data>\n  <data name=\"DataSetRowsCtl_Show_DatasourceNotFound\" xml:space=\"preserve\">\n    <value>Datasource '{0}' not found.</value>\n  </data>\n  <data name=\"DataSetRowsCtl_Show_LoadFailed\" xml:space=\"preserve\">\n    <value>Load Failed</value>\n  </data>\n  <data name=\"DataSetsCtl_Show_Name\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"DesignCtl_Show_UnableCreateRDL\" xml:space=\"preserve\">\n    <value>Unable to create RDL syntax</value>\n  </data>\n  <data name=\"DesignCtl_Show_Paste\" xml:space=\"preserve\">\n    <value>Paste</value>\n  </data>\n  <data name=\"DesignCtl_Show_Insert\" xml:space=\"preserve\">\n    <value>Insert</value>\n  </data>\n  <data name=\"DesignCtl_Show_ChartsInsert\" xml:space=\"preserve\">\n    <value>Charts can only be inserted in the body of the report.</value>\n  </data>\n  <data name=\"DesignCtl_Show_CustomReportItem\" xml:space=\"preserve\">\n    <value>CustomReportItem {0} method GetCustomReportItemXml must return XML enclosed by &lt;CustomReportItem&gt; and &lt;/CustomReportItem&gt;\n\nXML in error:\n{1}</value>\n  </data>\n  <data name=\"DesignCtl_Show_CustomReportItemException\" xml:space=\"preserve\">\n    <value>Exception building CustomReportItem insert: {0}</value>\n  </data>\n  <data name=\"DesignCtl_Show_ListsInBody\" xml:space=\"preserve\">\n    <value>Lists can only be inserted in the body of the report.</value>\n  </data>\n  <data name=\"DesignCtl_Show_MatrixsInBody\" xml:space=\"preserve\">\n    <value>Matrixs can only be inserted in the body of the report.</value>\n  </data>\n  <data name=\"DesignCtl_Show_SubreportsInBody\" xml:space=\"preserve\">\n    <value>Subreports can only be inserted in the body of the report.</value>\n  </data>\n  <data name=\"DesignCtl_Show_TablesInBody\" xml:space=\"preserve\">\n    <value>Tables can only be inserted in the body of the report.</value>\n  </data>\n  <data name=\"DesignerUtility_Show_TestConnection\" xml:space=\"preserve\">\n    <value>Test Connection</value>\n  </data>\n  <data name=\"DesignerUtility_Show_SharedConnectionError\" xml:space=\"preserve\">\n    <value>Unable to open shared connection, password or file is invalid.</value>\n  </data>\n  <data name=\"DesignerUtility_Show_SQLError\" xml:space=\"preserve\">\n    <value>SQL Error</value>\n  </data>\n  <data name=\"DesignerUtility_Show_Error\" xml:space=\"preserve\">\n    <value>Error</value>\n  </data>\n  <data name=\"DesignerUtility_Show_ConnectDataProviderError\" xml:space=\"preserve\">\n    <value>Unable to connect using dataProvider '{0}'</value>\n  </data>\n  <data name=\"DesignerUtility_Show_OpenConnectionError\" xml:space=\"preserve\">\n    <value>Unable to open connection</value>\n  </data>\n  <data name=\"DesignXmlDraw_Show_XMLInvalid\" xml:space=\"preserve\">\n    <value>XML is Invalid</value>\n  </data>\n  <data name=\"DialogDatabase_Show_InternalError\" xml:space=\"preserve\">\n    <value>Internal Error</value>\n  </data>\n  <data name=\"DialogDatabase_Show_ConnectionSuccessful\" xml:space=\"preserve\">\n    <value>Connection successful!</value>\n  </data>\n  <data name=\"DialogDataSourceRef_bOK_Click_UnableCreateDSR\" xml:space=\"preserve\">\n    <value>Unable to create data source reference file</value>\n  </data>\n  <data name=\"DialogFilterOperator_Show_PickFilterOperator\" xml:space=\"preserve\">\n    <value>Pick Filter Operator</value>\n  </data>\n  <data name=\"DialogFilterOperator_Show_OperatorInList\" xml:space=\"preserve\">\n    <value>Operator '{0}' must be in the operator list</value>\n  </data>\n  <data name=\"DialogToolOptions_Show_Options\" xml:space=\"preserve\">\n    <value>Options</value>\n  </data>\n  <data name=\"DialogToolOptions_Show_ConfigError\" xml:space=\"preserve\">\n    <value>Error processing Desktop Configuration; using defaults.\n{0}</value>\n  </data>\n  <data name=\"DialogToolOptions_Show_RecentFilesMax\" xml:space=\"preserve\">\n    <value>Recent files maximum must be an integer between 1 and 50</value>\n  </data>\n  <data name=\"DrillParametersDialog_Show_ErrorReading\" xml:space=\"preserve\">\n    <value>Error reading report file</value>\n  </data>\n  <data name=\"DrillParametersDialog_Show_ReportLoadFailed\" xml:space=\"preserve\">\n    <value>Report load failed</value>\n  </data>\n  <data name=\"DrillParametersDialog_Show_ValueMustSpecified\" xml:space=\"preserve\">\n    <value>Value must be specified for every parameter</value>\n  </data>\n  <data name=\"FontCtl_Show_InvalidFontSize\" xml:space=\"preserve\">\n    <value>Invalid Font Size</value>\n  </data>\n  <data name=\"GridCtl_Show_Grid\" xml:space=\"preserve\">\n    <value>Grid</value>\n  </data>\n  <data name=\"GridCtl_Show_GridRegionsMustDefined\" xml:space=\"preserve\">\n    <value>Grid must have at least one Header, Details or Footer row defined.</value>\n  </data>\n  <data name=\"GroupingCtl_Show_Grouping\" xml:space=\"preserve\">\n    <value>Grouping</value>\n  </data>\n  <data name=\"GroupingCtl_Show_GroupMustDefined\" xml:space=\"preserve\">\n    <value>Group must be defined.</value>\n  </data>\n  <data name=\"GroupingCtl_Show_GroupNameError\" xml:space=\"preserve\">\n    <value>Group Name in Error</value>\n  </data>\n  <data name=\"GroupingCtl_Show_Group\" xml:space=\"preserve\">\n    <value>Group</value>\n  </data>\n  <data name=\"GroupingCtl_Show_NoExpressionsForGroup\" xml:space=\"preserve\">\n    <value>No expressions have been defined for the group.</value>\n  </data>\n  <data name=\"GroupingCtl_Show_Chart\" xml:space=\"preserve\">\n    <value>Chart</value>\n  </data>\n  <data name=\"GroupingCtl_Show_ChartSeriesMustHaveLabelForLegend\" xml:space=\"preserve\">\n    <value>Chart series must have label defined for the legend.</value>\n  </data>\n  <data name=\"GroupingCtl_Show_Name\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"GroupingCtl_Show_InvalidName\" xml:space=\"preserve\">\n    <value>{0} is an invalid name.</value>\n  </data>\n  <data name=\"PositionCtl_Show_Name\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"PositionCtl_Show_SizeInvalid\" xml:space=\"preserve\">\n    <value>Size is Invalid</value>\n  </data>\n  <data name=\"PositionCtl_Show_Left\" xml:space=\"preserve\">\n    <value>Left</value>\n  </data>\n  <data name=\"PositionCtl_Show_Top\" xml:space=\"preserve\">\n    <value>Top</value>\n  </data>\n  <data name=\"PositionCtl_Show_Width\" xml:space=\"preserve\">\n    <value>Width</value>\n  </data>\n  <data name=\"PositionCtl_Show_Height\" xml:space=\"preserve\">\n    <value>Height</value>\n  </data>\n  <data name=\"PositionCtl_Show_Invalid\" xml:space=\"preserve\">\n    <value>{0} is invalid.  {1}</value>\n  </data>\n  <data name=\"RdlDesigner_Show_ZoomValueInvalid\" xml:space=\"preserve\">\n    <value>Zoom Value Invalid</value>\n  </data>\n  <data name=\"RdlDesigner_Show_RDLDesign\" xml:space=\"preserve\">\n    <value>RDL Design</value>\n  </data>\n  <data name=\"RdlDesigner_Show_PrintOneFile\" xml:space=\"preserve\">\n    <value>Can only print one file at a time.</value>\n  </data>\n  <data name=\"RdlDesigner_Show_PrintError\" xml:space=\"preserve\">\n    <value>Print error: </value>\n  </data>\n  <data name=\"RdlDesigner_Showl_FormatXML\" xml:space=\"preserve\">\n    <value>Format XML</value>\n  </data>\n  <data name=\"RdlDesigner_Show_HelpURLInvalid\" xml:space=\"preserve\">\n    <value>Help URL Invalid</value>\n  </data>\n  <data name=\"RdlDesigner_Show_SupportURLInvalid\" xml:space=\"preserve\">\n    <value>Support URL Invalid</value>\n  </data>\n  <data name=\"RdlDesigner_Show_ResettingHelpURL\" xml:space=\"preserve\">\n    <value>Resetting Help URL to default.</value>\n  </data>\n  <data name=\"RdlDesigner_Show_ResettingSupportURL\" xml:space=\"preserve\">\n    <value>Resetting Support URL to default.</value>\n  </data>\n  <data name=\"RdlDesigner_Show_UnableStartDesktop\" xml:space=\"preserve\">\n    <value>Unable to start Desktop</value>\n  </data>\n  <data name=\"RdlDesigner_Show_ErrorStopProcess\" xml:space=\"preserve\">\n    <value>Error stopping process</value>\n  </data>\n  <data name=\"RdlDesigner_Show_CustomColorSaveFailed\" xml:space=\"preserve\">\n    <value>Custom Color Save Failed</value>\n  </data>\n  <data name=\"RdlDesigner_Show_UnableShowReport\" xml:space=\"preserve\">\n    <value>Unable to Show Report</value>\n  </data>\n  <data name=\"RdlEditPreview_Show_InternalError\" xml:space=\"preserve\">\n    <value>Internal Error</value>\n  </data>\n  <data name=\"RdlEditPreview_Show_ErrorFind\" xml:space=\"preserve\">\n    <value>Please retry.  Error during find: {0}</value>\n  </data>\n  <data name=\"RdlEditPreview_Show_Report\" xml:space=\"preserve\">\n    <value>Report</value>\n  </data>\n  <data name=\"RdlUserControl_Show_RDLDesign\" xml:space=\"preserve\">\n    <value>RDL Design</value>\n  </data>\n  <data name=\"RdlUserControl_Show_PrintOneFile\" xml:space=\"preserve\">\n    <value>Can only print one file at a time.</value>\n  </data>\n  <data name=\"RdlUserControl_Show_PrintError\" xml:space=\"preserve\">\n    <value>Print error: </value>\n  </data>\n  <data name=\"RdlUserControl_Show_ZoomValueInvalid\" xml:space=\"preserve\">\n    <value>Zoom Value Invalid</value>\n  </data>\n  <data name=\"ReportCtl_Show_Field_Invalid\" xml:space=\"preserve\">\n    <value>Field Invalid</value>\n  </data>\n  <data name=\"ReportCtl_Show_SizeInvalid\" xml:space=\"preserve\">\n    <value>Size value of {0} is invalid.\n</value>\n  </data>\n  <data name=\"StyleBorderCtl_Show_SizeInvalid\" xml:space=\"preserve\">\n    <value>Size Invalid</value>\n  </data>\n  <data name=\"StyleBorderCtl_Show_DefaultWidth\" xml:space=\"preserve\">\n    <value>Default Width</value>\n  </data>\n  <data name=\"StyleBorderCtl_Show_LeftWidth\" xml:space=\"preserve\">\n    <value>Left Width</value>\n  </data>\n  <data name=\"StyleBorderCtl_Show_TopWidth\" xml:space=\"preserve\">\n    <value>Top Width</value>\n  </data>\n  <data name=\"StyleBorderCtl_Show_BottomWidth\" xml:space=\"preserve\">\n    <value>Bottom Width</value>\n  </data>\n  <data name=\"StyleBorderCtl_Show_RightWidth\" xml:space=\"preserve\">\n    <value>Right Width</value>\n  </data>\n  <data name=\"StyleCtl_Show_PaddingInvalid\" xml:space=\"preserve\">\n    <value>{0} Padding Invalid</value>\n  </data>\n  <data name=\"StyleCtl_Show_Left\" xml:space=\"preserve\">\n    <value>Left</value>\n  </data>\n  <data name=\"StyleCtl_Show_Right\" xml:space=\"preserve\">\n    <value>Right</value>\n  </data>\n  <data name=\"StyleCtl_Show_Top\" xml:space=\"preserve\">\n    <value>Top</value>\n  </data>\n  <data name=\"StyleCtl_Show_Bottom\" xml:space=\"preserve\">\n    <value>Bottom</value>\n  </data>\n  <data name=\"StyleTextCtl_Show_InvalidFontSize\" xml:space=\"preserve\">\n    <value>Invalid Font Size</value>\n  </data>\n  <data name=\"SubreportCtl_Show_Subreport\" xml:space=\"preserve\">\n    <value>Subreport</value>\n  </data>\n  <data name=\"SubreportCtl_Show_SubreportMustSpecified\" xml:space=\"preserve\">\n    <value>Subreport file must be specified.</value>\n  </data>\n  <data name=\"SubreportCtl_Show_ErrorReading\" xml:space=\"preserve\">\n    <value>Error reading report file</value>\n  </data>\n  <data name=\"SubreportCtl_Show_ReportLoadFailed\" xml:space=\"preserve\">\n    <value>Report load failed</value>\n  </data>\n  <data name=\"TableColumnCtl_Show_WidthInvalid\" xml:space=\"preserve\">\n    <value>Width is Invalid</value>\n  </data>\n  <data name=\"TableColumnCtl_Show_HiddenInvalid\" xml:space=\"preserve\">\n    <value>Hidden is Invalid</value>\n  </data>\n  <data name=\"TableColumnCtl_Show_ExpressionTrueFalse\" xml:space=\"preserve\">\n    <value>{0} must be an expression or 'true' or 'false'</value>\n  </data>\n  <data name=\"TableCtl_Show_Table\" xml:space=\"preserve\">\n    <value>Table</value>\n  </data>\n  <data name=\"TableCtl_Show_TableMustHaveRegions\" xml:space=\"preserve\">\n    <value>Table must have at least one Header, Details or Footer row defined.</value>\n  </data>\n  <data name=\"TableRowCtl_Show_HeightInvalid\" xml:space=\"preserve\">\n    <value>Height is Invalid</value>\n  </data>\n  <data name=\"TableRowCtl_Show_ExpressionTrueFalse\" xml:space=\"preserve\">\n    <value>{0} must be an expression or 'true' or 'false'</value>\n  </data>\n  <data name=\"TableRowCtl_Show_HiddenInvalid\" xml:space=\"preserve\">\n    <value>Hidden is Invalid</value>\n  </data>\n  <data name=\"DataSetRowsCtl_ShowB_ErrorReadingDataRows\" xml:space=\"preserve\">\n    <value>Error Reading Data Rows</value>\n  </data>\n  <data name=\"DataSetRowsCtl_ShowB_WantSeeErrors\" xml:space=\"preserve\">\n    <value>Do you want to see any more errors?</value>\n  </data>\n  <data name=\"DataSetRowsCtl_ShowB_UnableConvert\" xml:space=\"preserve\">\n    <value>Unable to convert {1} to {0}: {2}</value>\n  </data>\n  <data name=\"DesignCtl_ShowB_CustomReportItemError\" xml:space=\"preserve\">\n    <value>Error building CustomReportItem menus: {0}</value>\n  </data>\n  <data name=\"DesignCtl_ShowB_WantReplaceCell\" xml:space=\"preserve\">\n    <value>Do you want to replace contents of TableCell?</value>\n  </data>\n  <data name=\"DesignCtl_ShowB_Copy\" xml:space=\"preserve\">\n    <value>Copy</value>\n  </data>\n  <data name=\"DesignCtl_ShowB_WantSelect\" xml:space=\"preserve\">\n    <value>Do you want to select the {0}?</value>\n  </data>\n  <data name=\"DataSetRowsCtl_ShowC_FileNameRequired\" xml:space=\"preserve\">\n    <value>File name required when 'Use XML file for data checked'</value>\n  </data>\n  <data name=\"DataSetRowsCtl_ShowC_UnableLocateDSR\" xml:space=\"preserve\">\n    <value>Unable to locate DataSource Shared file.  Try saving report first</value>\n  </data>\n  <data name=\"DesignCtl_ShowC_IllegalInsertSyntax\" xml:space=\"preserve\">\n    <value>Internal error: illegal insert syntax:</value>\n  </data>\n  <data name=\"DialogNewChart_ShowC_FillExpression\" xml:space=\"preserve\">\n    <value>Please fill out the chart data expression, or include a series.</value>\n  </data>\n  <data name=\"DialogNewChart_ShowC_FillYExpression\" xml:space=\"preserve\">\n    <value>Please fill out the chart Y coordinate data expression.</value>\n  </data>\n  <data name=\"DialogNewChart_ShowC_FillYAndBubbleExpressions\" xml:space=\"preserve\">\n    <value>Please fill out the chart Y coordinate and Bubble width expressions.</value>\n  </data>\n  <data name=\"DialogValidateRdl_ShowC_SelectRDLTab\" xml:space=\"preserve\">\n    <value>Select the 'RDL Text' tab before validating.</value>\n  </data>\n  <data name=\"DrillParametersDialog_ShowC_ReportHasErrors\" xml:space=\"preserve\">\n    <value>Report has errors and cannot be processed.</value>\n  </data>\n  <data name=\"DialogDatabase_ShowD_SelectDataProvider\" xml:space=\"preserve\">\n    <value>Please select a Data Provider before testing.</value>\n  </data>\n  <data name=\"DialogDatabase_ShowD_Error\" xml:space=\"preserve\">\n    <value>Error</value>\n  </data>\n  <data name=\"RdlDesigner_ShowD_Error\" xml:space=\"preserve\">\n    <value>Error</value>\n  </data>\n  <data name=\"DialogDataSources_ShowE_DataSources\" xml:space=\"preserve\">\n    <value>Data Sources</value>\n  </data>\n  <data name=\"DialogDataSources_ShowE_NameMustSpecified\" xml:space=\"preserve\">\n    <value>Name must be specified for all DataSources.</value>\n  </data>\n  <data name=\"DialogDataSources_ShowE_NameInvalid\" xml:space=\"preserve\">\n    <value>Name '{0}' contains invalid characters.</value>\n  </data>\n  <data name=\"DialogDataSources_ShowE_DataSourceMustUniqueN\" xml:space=\"preserve\">\n    <value>Each DataSource must have a unique name. '{0}' is repeated.</value>\n  </data>\n  <data name=\"DialogEmbeddedImages_ShowE_Image\" xml:space=\"preserve\">\n    <value>Image</value>\n  </data>\n  <data name=\"DialogEmbeddedImages_ShowE_CopyImageBeforePaste\" xml:space=\"preserve\">\n    <value>Copy image into clipboard before attempting to paste.</value>\n  </data>\n  <data name=\"DialogEmbeddedImages_ShowE_ErrorConvertingImage\" xml:space=\"preserve\">\n    <value>Error converting image data</value>\n  </data>\n  <data name=\"DialogEmbeddedImages_ShowE_NameMustSpecified\" xml:space=\"preserve\">\n    <value>Name must be specified for all embedded images.</value>\n  </data>\n  <data name=\"DialogEmbeddedImages_ShowE_NameInvalid\" xml:space=\"preserve\">\n    <value>Name '{0}' contains invalid characters.</value>\n  </data>\n  <data name=\"DialogEmbeddedImages_ShowE_ImageMustUniqueName\" xml:space=\"preserve\">\n    <value>Each embedded image must have a unique name. '{0}' is repeated.</value>\n  </data>\n  <data name=\"FindTab_ShowE_InvalidLN\" xml:space=\"preserve\">\n    <value>Invalid Line Number</value>\n  </data>\n  <data name=\"MDIChild_ShowF_Export\" xml:space=\"preserve\">\n    <value>Export</value>\n  </data>\n  <data name=\"MDIChild_ShowF_WantDisplayColorsInTIF\" xml:space=\"preserve\">\n    <value>Do you want to display colors in TIF?</value>\n  </data>\n  <data name=\"PropertyDialog_ShowF_DataSet\" xml:space=\"preserve\">\n    <value>DataSet</value>\n  </data>\n  <data name=\"PropertyDialog_ShowF_WantDeleteDataset\" xml:space=\"preserve\">\n    <value>Are you sure you want to delete this dataset?</value>\n  </data>\n  <data name=\"MDIChild_ShowG_ExportError\" xml:space=\"preserve\">\n    <value>Export Error</value>\n  </data>\n  <data name=\"MDIChild_ShowH_fyiReportingDesigner\" xml:space=\"preserve\">\n    <value>Majorsilence Reporting Designer</value>\n  </data>\n  <data name=\"MDIChild_ShowH_Untitled\" xml:space=\"preserve\">\n    <value>Untitled</value>\n  </data>\n  <data name=\"MDIChild_ShowH_WantSaveChanges\" xml:space=\"preserve\">\n    <value>Do you want to save changes you made to '{0}'?</value>\n  </data>\n  <data name=\"RdlEditPreview_ShowI_ReachedEndDocument\" xml:space=\"preserve\">\n    <value>Reached End of Document.</value>\n  </data>\n  <data name=\"DialogDatabase_cbConnectionTypes_SelectedIndexChanged_Connection\" xml:space=\"preserve\">\n    <value>Connection:</value>\n  </data>\n  <data name=\"DialogDatabase_cbConnectionTypes_SelectedIndexChanged_Shared_Data_Source_File\" xml:space=\"preserve\">\n    <value>Shared Data Source File:</value>\n  </data>\n  <data name=\"DialogAbout_DialogAbout_About\" xml:space=\"preserve\">\n    <value>RDL Designer creates reports defined using the Report Definition Language Specification.\nCopyright (C) 2004-2008  fyiReporting Software, LLC\nCopyright (C) 2025 Majorsilence Devs\n\t\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nFor additional information, visit\nthe website https://github.com/majorsilence/My-FyiReporting.</value>\n  </data>\n  <data name=\"DialogAbout_DialogAbout_Version\" xml:space=\"preserve\">\n    <value>Version {0}</value>\n  </data>\n  <data name=\"PositionCtl_InitValues_GroupSelected\" xml:space=\"preserve\">\n    <value>Group Selected</value>\n  </data>\n  <data name=\"RdlDesigner_CreateMDIChild_Untitled\" xml:space=\"preserve\">\n    <value>Untitled</value>\n  </data>\n  <data name=\"ReportParameterCtl_bDefaultValues_Click_Default_Values\" xml:space=\"preserve\">\n    <value>Default Values</value>\n  </data>\n  <data name=\"Tabs_Interactivity\" xml:space=\"preserve\">\n    <value>Interactivity</value>\n  </data>\n  <data name=\"Tabs_Visibility\" xml:space=\"preserve\">\n    <value>Visibility</value>\n  </data>\n  <data name=\"Tabs_Borders\" xml:space=\"preserve\">\n    <value>Borders</value>\n  </data>\n  <data name=\"Tabs_Font\" xml:space=\"preserve\">\n    <value>Font</value>\n  </data>\n  <data name=\"Tabs_Background\" xml:space=\"preserve\">\n    <value>Background</value>\n  </data>\n  <data name=\"Tabs_Image\" xml:space=\"preserve\">\n    <value>Image</value>\n  </data>\n  <data name=\"Tabs_Subreport\" xml:space=\"preserve\">\n    <value>Subreport</value>\n  </data>\n  <data name=\"Tabs_Filter\" xml:space=\"preserve\">\n    <value>Filter</value>\n  </data>\n  <data name=\"Tabs_Sorting\" xml:space=\"preserve\">\n    <value>Sorting</value>\n  </data>\n  <data name=\"Tabs_Grouping\" xml:space=\"preserve\">\n    <value>Grouping</value>\n  </data>\n  <data name=\"Tabs_ReportParameters\" xml:space=\"preserve\">\n    <value>Report Parameters</value>\n  </data>\n  <data name=\"Tabs_Code\" xml:space=\"preserve\">\n    <value>Code</value>\n  </data>\n  <data name=\"Tabs_ModulesAndClasses\" xml:space=\"preserve\">\n    <value>Modules and Classes</value>\n  </data>\n  <data name=\"DesignerUtility_Error_SizeUnitInvalid\" xml:space=\"preserve\">\n    <value>Size unit is not valid.  Must be in, cm, mm, pt, or pc.</value>\n  </data>\n  <data name=\"DesignerUtility_Error_NumberFormatinvalid\" xml:space=\"preserve\">\n    <value>Number format is invalid.  ###.## is the proper form.</value>\n  </data>\n  <data name=\"DesignerUtility_Error_SizeZero\" xml:space=\"preserve\">\n    <value>Size can't be zero.</value>\n  </data>\n  <data name=\"DesignerUtility_Error_SizeLessZero\" xml:space=\"preserve\">\n    <value>Size can't be less than zero.</value>\n  </data>\n  <data name=\"DesignXmlDraw_Error_NoReport\" xml:space=\"preserve\">\n    <value>RDL doesn't contain a report element.</value>\n  </data>\n  <data name=\"DesignXmlDraw_Error_DataRegionIntoHeaderFooter\" xml:space=\"preserve\">\n    <value>You can't paste a DataRegion into a page header or footer</value>\n  </data>\n  <data name=\"DesignXmlDraw_Error_SubreportIntoHeaderFooter\" xml:space=\"preserve\">\n    <value>You can't paste a Subreport into a page header or footer</value>\n  </data>\n  <data name=\"DialogDatabase_Error_UnknownIfdef\" xml:space=\"preserve\">\n    <value>Unknown ifdef element {0} specified in template.</value>\n  </data>\n  <data name=\"DialogToolOptions_Error_RecentFilesMax\" xml:space=\"preserve\">\n    <value>Recent files maximum must be an integer between 1 and 50</value>\n  </data>\n  <data name=\"DialogToolOptions_Error_UnableConfig\" xml:space=\"preserve\">\n    <value>Unable to obtain Desktop config information.\n{0}</value>\n  </data>\n  <data name=\"MDIChild_Error_AllowedExportTypes\" xml:space=\"preserve\">\n    <value>Only HTML, MHT, XML, CSV, RTF, DOC, Excel, TIF and PDF are allowed as Export types.</value>\n  </data>\n  <data name=\"Undo_Error_UnknownAction\" xml:space=\"preserve\">\n    <value>Unknown Action</value>\n  </data>\n  <data name=\"Undo_Error_EndGroupNotMatchStartGroup\" xml:space=\"preserve\">\n    <value>Internal logic error: EndGroup doesn't match StartGroup</value>\n  </data>\n  <data name=\"FileUIEditor_EditValue_XSLFilesFilter\" xml:space=\"preserve\">\n    <value>XSL Files (*.xsl)|*.xsl|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"BackgroundCtl_bExternal_Click_ImageFilesFilter\" xml:space=\"preserve\">\n    <value>Bitmap Files (*.bmp)|*.bmp|JPEG (*.jpg;*.jpeg;*.jpe;*.jfif)|*.jpg;*.jpeg;*.jpe;*.jfif|GIF (*.gif)|*.gif|TIFF (*.tif;*.tiff)|*.tif;*.tiff|PNG (*.png)|*.png|All Picture Files|*.bmp;*.jpg;*.jpeg;*.jpe;*.jfif;*.gif;*.tif;*.tiff;*.png|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"DataSetRowsCtl_bRowsFile_Click_XMLFilesFilter\" xml:space=\"preserve\">\n    <value>XML files (*.xml)|*.xml|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"DataSetRowsCtl_bRowsFile_Click_XMLFilesTitle\" xml:space=\"preserve\">\n    <value>Specify XML File Name</value>\n  </data>\n  <data name=\"DialogDatabase_bShared_Click_DSRFilter\" xml:space=\"preserve\">\n    <value>Data source reference files (*.dsr)|*.dsr|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"DialogDatabase_bShared_Click_DSRTitle\" xml:space=\"preserve\">\n    <value>Specify Data Source Reference File Name</value>\n  </data>\n  <data name=\"DialogDatabase_buttonSqliteSelectDatabase_Click_AllFilesFilter\" xml:space=\"preserve\">\n    <value>All files (*.*)|*.*</value>\n  </data>\n  <data name=\"DialogDataSources_bGetFilename_Click_DSRFilter\" xml:space=\"preserve\">\n    <value>Data source reference files (*.dsr)|*.dsr|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"DialogDataSources_bGetFilename_Click_DSRTitle\" xml:space=\"preserve\">\n    <value>Specify Data Source Reference File Name</value>\n  </data>\n  <data name=\"DialogEmbeddedImages_bImport_Click_ImageFilesFilter\" xml:space=\"preserve\">\n    <value>Bitmap Files (*.bmp)|*.bmp|JPEG (*.jpg;*.jpeg;*.jpe;*.jfif)|*.jpg;*.jpeg;*.jpe;*.jfif|GIF (*.gif)|*.gif|TIFF (*.tif;*.tiff)|*.tif;*.tiff|PNG (*.png)|*.png|All Picture Files|*.bmp;*.jpg;*.jpeg;*.jpe;*.jfif;*.gif;*.tif;*.tiff;*.png|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"DialogToolOptions_bAddMap_Click_MapFilesFilter\" xml:space=\"preserve\">\n    <value>Map files (*.xml)|*.xml|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"DrillParametersDialog_bFile_Click_ReportFilesFilter\" xml:space=\"preserve\">\n    <value>Report files (*.rdl)|*.rdl|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"DrillParametersDialog_bFile_Click_ReportFilesTitle\" xml:space=\"preserve\">\n    <value>Specify Report File Name</value>\n  </data>\n  <data name=\"ImageCtl_bExternal_Click_ImageFilesFilter\" xml:space=\"preserve\">\n    <value>Bitmap Files (*.bmp)|*.bmp|JPEG (*.jpg;*.jpeg;*.jpe;*.jfif)|*.jpg;*.jpeg;*.jpe;*.jfif|GIF (*.gif)|*.gif|TIFF (*.tif;*.tiff)|*.tif;*.tiff|PNG (*.png)|*.png|All Picture Files|*.bmp;*.jpg;*.jpeg;*.jpe;*.jfif;*.gif;*.tif;*.tiff;*.png|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"InteractivityCtl_bDrillthrough_Click_ReportFilesFilter\" xml:space=\"preserve\">\n    <value>Report files (*.rdl)|*.rdl|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"InteractivityCtl_bDrillthrough_Click_ReportFilesTitle\" xml:space=\"preserve\">\n    <value>Specify Report File Name</value>\n  </data>\n  <data name=\"RdlDesigner_menuFileOpen_Click_ReportFilesFilter\" xml:space=\"preserve\">\n    <value>Report files (*.rdl;*rdlc)|*.rdl;*.rdlc|Encrypted RDL files (*.encrypted)|*.encrypted|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"RdlUserControl_openToolStripButton1_Click_ReportFilesFilter\" xml:space=\"preserve\">\n    <value>Report files (*.rdl;*rdlc)|*.rdl;*.rdlc|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"ReportXmlCtl_bOpenXsl_Click_XSLFilesFilter\" xml:space=\"preserve\">\n    <value>XSL files (*.xsl)|*.xsl|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"ReportXmlCtl_bOpenXsl_Click_XslFilerTitle\" xml:space=\"preserve\">\n    <value>Specify DataTransform File Name</value>\n  </data>\n  <data name=\"SubreportCtl_bFile_Click_ReportFilesFilter\" xml:space=\"preserve\">\n    <value>Report files (*.rdl)|*.rdl|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"SubreportCtl_bFile_Click_ReportFilesTitle\" xml:space=\"preserve\">\n    <value>Specify Report File Name</value>\n  </data>\n  <data name=\"DialogDataSourceRef_bGetFilename_Click_DSRFilter\" xml:space=\"preserve\">\n    <value>Data source reference files (*.dsr)|*.dsr|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"DialogDataSourceRef_bGetFilename_Click_DSRTitle\" xml:space=\"preserve\">\n    <value>Specify Data Source Reference File Name</value>\n  </data>\n  <data name=\"MDIChild_Export_ExportTitleFormat\" xml:space=\"preserve\">\n    <value>Export to {0}</value>\n  </data>\n  <data name=\"MDIChild_Export_CSV\" xml:space=\"preserve\">\n    <value>CSV file (*.csv)|*.csv|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"MDIChild_Export_XML\" xml:space=\"preserve\">\n    <value>XML file (*.xml)|*.xml|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"MDIChild_Export_PDF\" xml:space=\"preserve\">\n    <value>PDF file (*.pdf)|*.pdf|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"MDIChild_Export_TIF\" xml:space=\"preserve\">\n    <value>TIF file (*.tif, *.tiff)|*.tiff;*.tif|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"MDIChild_Export_RTF\" xml:space=\"preserve\">\n    <value>RTF file (*.rtf)|*.rtf|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"MDIChild_Export_DOC\" xml:space=\"preserve\">\n    <value>DOC file (*.doc)|*.doc|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"MDIChild_Export_Excel\" xml:space=\"preserve\">\n    <value>Excel file (*.xlsx)|*.xlsx|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"MDIChild_Export_Web_Page\" xml:space=\"preserve\">\n    <value>Web Page (*.html, *.htm)|*.html;*.htm|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"MDIChild_Export_MHT\" xml:space=\"preserve\">\n    <value>MHT (*.mht)|*.mhtml;*.mht|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"MDIChild_FileSaveAs_RDLFilter\" xml:space=\"preserve\">\n    <value>RDL files (*.rdl)|*.rdl|Encrypted RDL files (*.encrypted)|*.encrypted|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"ReportNames_DescriptionDuplicateNameError\" xml:space=\"preserve\">\n    <value>NameError: duplicate name: {0}, name of the node: {1}</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/Resources/Strings.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"DesignXmlDraw_BodyRegion_Title\" xml:space=\"preserve\">\n    <value>Тело ↑</value>\n  </data>\n  <data name=\"DesignXmlDraw_PageFooterRegion_Title\" xml:space=\"preserve\">\n    <value>Нижний колонтитул ↑</value>\n  </data>\n  <data name=\"DesignXmlDraw_PageHeaderRegion_Title\" xml:space=\"preserve\">\n    <value>Верхний колонтитул ↑</value>\n  </data>\n  <data name=\"RdlDesigner_Status_cm\" xml:space=\"preserve\">\n    <value>см</value>\n  </data>\n  <data name=\"RdlDesigner_Status_Height\" xml:space=\"preserve\">\n    <value>высота</value>\n  </data>\n  <data name=\"DesignCtl_SelectionName_Group\" xml:space=\"preserve\">\n    <value>Группа</value>\n  </data>\n  <data name=\"DesignCtl_SelectionName_GroupSelection\" xml:space=\"preserve\">\n    <value>Групповое выделение</value>\n  </data>\n  <data name=\"DesignCtl_SelectionName_in\" xml:space=\"preserve\">\n    <value>в</value>\n  </data>\n  <data name=\"DesignCtl_SelectionName_Unnamed\" xml:space=\"preserve\">\n    <value>*Безымянный*</value>\n  </data>\n  <data name=\"RdlDesigner_Status_Ch\" xml:space=\"preserve\">\n    <value>Столбец</value>\n  </data>\n  <data name=\"RdlDesigner_Status_Ln\" xml:space=\"preserve\">\n    <value>Строка</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Border\" xml:space=\"preserve\">\n    <value>Граница</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Chart\" xml:space=\"preserve\">\n    <value>Диаграмма</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Filters\" xml:space=\"preserve\">\n    <value>Фильтры</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Grid\" xml:space=\"preserve\">\n    <value>Сетка</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Grouping\" xml:space=\"preserve\">\n    <value>Группа</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_GroupSelectionProperties\" xml:space=\"preserve\">\n    <value>Свойства группового выделения</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Image\" xml:space=\"preserve\">\n    <value>Изображение</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Interactivity\" xml:space=\"preserve\">\n    <value>Интерактивность</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_List\" xml:space=\"preserve\">\n    <value>Список</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Matrix\" xml:space=\"preserve\">\n    <value>Матрица</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Name_Position\" xml:space=\"preserve\">\n    <value>Название/Позиция</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Properties\" xml:space=\"preserve\">\n    <value />\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Sorting\" xml:space=\"preserve\">\n    <value>Сортировка</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_StaticSeries\" xml:space=\"preserve\">\n    <value>Статические серии</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Style\" xml:space=\"preserve\">\n    <value>Стиль</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Subreport\" xml:space=\"preserve\">\n    <value>Подотчёт</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Table\" xml:space=\"preserve\">\n    <value>Таблица</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_TableColumn\" xml:space=\"preserve\">\n    <value>Столбец таблицы</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_TableRow\" xml:space=\"preserve\">\n    <value>Строка таблицы</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportItemTabs_Text\" xml:space=\"preserve\">\n    <value>Текст</value>\n  </data>\n  <data name=\"PropertyDialog_BuildChartAxisTabs_Axis\" xml:space=\"preserve\">\n    <value>Ось</value>\n  </data>\n  <data name=\"PropertyDialog_BuildChartAxisTabs_ChartCategoryAxis\" xml:space=\"preserve\">\n    <value>Категория (ось X)</value>\n  </data>\n  <data name=\"PropertyDialog_BuildChartAxisTabs_ChartValueAxis\" xml:space=\"preserve\">\n    <value>Значение (ось Y)</value>\n  </data>\n  <data name=\"PropertyDialog_BuildChartLegendTabs_ChartLegendProperties\" xml:space=\"preserve\">\n    <value>Свойства легенды диаграммы</value>\n  </data>\n  <data name=\"PropertyDialog_BuildChartLegendTabs_Legend\" xml:space=\"preserve\">\n    <value>Легенда</value>\n  </data>\n  <data name=\"PropertyDialog_BuildDataSetsTabs_Data\" xml:space=\"preserve\">\n    <value>Данные</value>\n  </data>\n  <data name=\"PropertyDialog_BuildDataSetsTabs_DataSet\" xml:space=\"preserve\">\n    <value>Набор данных</value>\n  </data>\n  <data name=\"PropertyDialog_BuildDataSetsTabs_DataSet_Header\" xml:space=\"preserve\">\n    <value>Набор данных</value>\n  </data>\n  <data name=\"PropertyDialog_BuildDataSetsTabs_QueryParameters\" xml:space=\"preserve\">\n    <value>Параметры запроса</value>\n  </data>\n  <data name=\"PropertyDialog_BuildGroupingTabs_CategoryGrouping\" xml:space=\"preserve\">\n    <value>Группа категории</value>\n  </data>\n  <data name=\"PropertyDialog_BuildGroupingTabs_GroupingAndSorting\" xml:space=\"preserve\">\n    <value>Группировка и сортировка</value>\n  </data>\n  <data name=\"PropertyDialog_BuildGroupingTabs_SeriesGrouping\" xml:space=\"preserve\">\n    <value>Группа серии</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportTabs_Body\" xml:space=\"preserve\">\n    <value>Тело</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportTabs_Code\" xml:space=\"preserve\">\n    <value>Код</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportTabs_Modules_Classes\" xml:space=\"preserve\">\n    <value>Модули/Классы</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportTabs_Parameters\" xml:space=\"preserve\">\n    <value>Параметры</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportTabs_Report\" xml:space=\"preserve\">\n    <value>Отчёт</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportTabs_ReportProperties\" xml:space=\"preserve\">\n    <value>Свойства отчёта</value>\n  </data>\n  <data name=\"PropertyDialog_BuildReportTabs_XMLRendering\" xml:space=\"preserve\">\n    <value>Вывод XML</value>\n  </data>\n  <data name=\"PropertyDialog_BuildTitle_CategoryAxisTitle\" xml:space=\"preserve\">\n    <value>Заголовок категории (ось X)</value>\n  </data>\n  <data name=\"PropertyDialog_BuildTitle_ChartTitle\" xml:space=\"preserve\">\n    <value>Заголовок диаграммы</value>\n  </data>\n  <data name=\"PropertyDialog_BuildTitle_ValueAxisRightTitle\" xml:space=\"preserve\">\n    <value>Заголовок значения (ось Y) справа</value>\n  </data>\n  <data name=\"PropertyDialog_BuildTitle_ValueAxisTitle\" xml:space=\"preserve\">\n    <value>Заголовок значения (ось Y)</value>\n  </data>\n  <data name=\"StyleTextCtl_InitTextStyles_Caption\" xml:space=\"preserve\">\n    <value>Заголовок</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Align\" xml:space=\"preserve\">\n    <value>выравнивание</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Cut\" xml:space=\"preserve\">\n    <value>вырезание</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Delete\" xml:space=\"preserve\">\n    <value>удаление</value>\n  </data>\n  <data name=\"DesignCtl_Undo_DeleteGrouping\" xml:space=\"preserve\">\n    <value>удаление группы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_DeleteTable\" xml:space=\"preserve\">\n    <value>удаление таблицы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_DeleteTableColumn\" xml:space=\"preserve\">\n    <value>удаление столбца таблицы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_DeleteTableGroup\" xml:space=\"preserve\">\n    <value>удаление группы таблицы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_DeleteTableRow\" xml:space=\"preserve\">\n    <value>удаление строки таблицы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Dialog\" xml:space=\"preserve\">\n    <value>диалог</value>\n  </data>\n  <data name=\"DesignCtl_Undo_DialogGrouping\" xml:space=\"preserve\">\n    <value>изменение группы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_DialogTableGroupEdit\" xml:space=\"preserve\">\n    <value>изменение группы таблицы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Insert\" xml:space=\"preserve\">\n    <value>вставку</value>\n  </data>\n  <data name=\"DesignCtl_Undo_InsertCategoryGrouping\" xml:space=\"preserve\">\n    <value>вставку группы категории</value>\n  </data>\n  <data name=\"DesignCtl_Undo_InsertChart\" xml:space=\"preserve\">\n    <value>вставку диаграммы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_InsertMatrix\" xml:space=\"preserve\">\n    <value>вставку матрицы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_InsertSeriesGrouping\" xml:space=\"preserve\">\n    <value>вставку группы серии</value>\n  </data>\n  <data name=\"DesignCtl_Undo_InsertTable\" xml:space=\"preserve\">\n    <value>вставку таблицы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_InsertTableColumn\" xml:space=\"preserve\">\n    <value>вставку столбца таблицы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_InsertTableGroup\" xml:space=\"preserve\">\n    <value>вставку группы таблицы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_InsertTableRow\" xml:space=\"preserve\">\n    <value>вставку строки талбицы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_MatrixDelete\" xml:space=\"preserve\">\n    <value>удаление матрицы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_MatrixDeleteGroup\" xml:space=\"preserve\">\n    <value>удаление группы матрицы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_MatrixDialog\" xml:space=\"preserve\">\n    <value>изменение матрицы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_MatrixEdit\" xml:space=\"preserve\">\n    <value>изменение матрицы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_MatrixInsertColumnGroup\" xml:space=\"preserve\">\n    <value>вставку группы столбца матрицы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_MatrixInsertRowGroup\" xml:space=\"preserve\">\n    <value>вставку группы строки матрицы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Move\" xml:space=\"preserve\">\n    <value>перемещение</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Move_Size\" xml:space=\"preserve\">\n    <value>перемещение/изменение размера</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Padding\" xml:space=\"preserve\">\n    <value>отступ от границы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Paste\" xml:space=\"preserve\">\n    <value>вставку</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Size\" xml:space=\"preserve\">\n    <value>изменение размера</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Spacing\" xml:space=\"preserve\">\n    <value>отступ</value>\n  </data>\n  <data name=\"DesignCtl_Undo_Style\" xml:space=\"preserve\">\n    <value>изменение стиля</value>\n  </data>\n  <data name=\"DesignCtl_Undo_TableDialog\" xml:space=\"preserve\">\n    <value>изменение таблицы</value>\n  </data>\n  <data name=\"DesignCtl_Undo_TextboxValue\" xml:space=\"preserve\">\n    <value>изменение текста</value>\n  </data>\n  <data name=\"NodeChangedUndo_GetDescription_change\" xml:space=\"preserve\">\n    <value>изменение</value>\n  </data>\n  <data name=\"NodeInsertedUndo_GetDescription_insert\" xml:space=\"preserve\">\n    <value>вставку</value>\n  </data>\n  <data name=\"NodeRemovedUndo_GetDescription_remove\" xml:space=\"preserve\">\n    <value>удаление</value>\n  </data>\n  <data name=\"PropertyPrintFirstLast_SetProp_change\" xml:space=\"preserve\">\n    <value>изменение</value>\n  </data>\n  <data name=\"PropertyReportItem_Undo_ColumnSpanchange\" xml:space=\"preserve\">\n    <value>изменение охвата столбцов</value>\n  </data>\n  <data name=\"PropertyReportItem_Undo_NameChange\" xml:space=\"preserve\">\n    <value>изменение названия</value>\n  </data>\n  <data name=\"PropertyReport_Undo_Body\" xml:space=\"preserve\">\n    <value>в теле отчета</value>\n  </data>\n  <data name=\"PropertyReport_Undo_change\" xml:space=\"preserve\">\n    <value>изменение</value>\n  </data>\n  <data name=\"PropertyTableUIEditor_EditValue_TableDialog\" xml:space=\"preserve\">\n    <value>изменение таблицы</value>\n  </data>\n  <data name=\"RdlDesigner_menuData_Popup_New\" xml:space=\"preserve\">\n    <value>Создать...</value>\n  </data>\n  <data name=\"RdlDesigner_menuEdit_Popup_Undo\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"RdlDesigner_Undo_DataSetDialog\" xml:space=\"preserve\">\n    <value>изменение набора данных</value>\n  </data>\n  <data name=\"RdlDesigner_Undo_DataSourcesDialog\" xml:space=\"preserve\">\n    <value>изменение источника данных</value>\n  </data>\n  <data name=\"RdlDesigner_Undo_EmbeddedImagesDialog\" xml:space=\"preserve\">\n    <value>изменение встроенного изображения</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_AppearanceChange\" xml:space=\"preserve\">\n    <value>изменение внешнего вида</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_BackgroundChange\" xml:space=\"preserve\">\n    <value>изменение фона</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_BorderChange\" xml:space=\"preserve\">\n    <value>изменение границы</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_FiltersChange\" xml:space=\"preserve\">\n    <value>изменение фильтров</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_GroupingChange\" xml:space=\"preserve\">\n    <value>изменение группирования</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_ImageChange\" xml:space=\"preserve\">\n    <value>изменение изображения</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_InteractivityChange\" xml:space=\"preserve\">\n    <value>изменение интерактивности</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_ReportCodeChange\" xml:space=\"preserve\">\n    <value>изменение кода отчёта</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_ReportModules_ClassesChange\" xml:space=\"preserve\">\n    <value>изменение модулей/классов отчёта</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_SortChange\" xml:space=\"preserve\">\n    <value>изменение сортировки</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_SubreportChange\" xml:space=\"preserve\">\n    <value>изменение подотчёта</value>\n  </data>\n  <data name=\"SingleCtlDialog_Undo_VisibilityChange\" xml:space=\"preserve\">\n    <value>изменение видимости</value>\n  </data>\n  <data name=\"RdlDesigner_menuTools_Popup_StartDesktop\" xml:space=\"preserve\">\n    <value>Запустить сервер</value>\n  </data>\n  <data name=\"RdlDesigner_menuTools_Popup_StopDesktop\" xml:space=\"preserve\">\n    <value>Остановить сервер</value>\n  </data>\n  <data name=\"CodeCtl_Show_CodeVerification\" xml:space=\"preserve\">\n    <value>Проверка кода</value>\n  </data>\n  <data name=\"CodeCtl_Show_NoErrors\" xml:space=\"preserve\">\n    <value>Без ошибок</value>\n  </data>\n  <data name=\"DataSetRowsCtl_ShowB_ErrorReadingDataRows\" xml:space=\"preserve\">\n    <value>Ошибка чтения строк данных</value>\n  </data>\n  <data name=\"DataSetRowsCtl_ShowB_UnableConvert\" xml:space=\"preserve\">\n    <value>Неудалось преобразовать {1} к {0}: {2}</value>\n  </data>\n  <data name=\"DataSetRowsCtl_ShowB_WantSeeErrors\" xml:space=\"preserve\">\n    <value>Хотите увидеть подробности ошибки?</value>\n  </data>\n  <data name=\"DataSetRowsCtl_ShowC_FileNameRequired\" xml:space=\"preserve\">\n    <value>Название файла необходимо, когда отмечено 'Использовать XML файл для данных'</value>\n  </data>\n  <data name=\"DataSetRowsCtl_ShowC_UnableLocateDSR\" xml:space=\"preserve\">\n    <value>Не удалось найти общий источник данных. Попробуйте сначала сохранить отчёт</value>\n  </data>\n  <data name=\"DataSetRowsCtl_Show_DatasourceNotFound\" xml:space=\"preserve\">\n    <value>Источник данных '{0}' не найден</value>\n  </data>\n  <data name=\"DataSetRowsCtl_Show_LoadFailed\" xml:space=\"preserve\">\n    <value>Ошибка загрузки</value>\n  </data>\n  <data name=\"DataSetsCtl_Show_Name\" xml:space=\"preserve\">\n    <value>Название</value>\n  </data>\n  <data name=\"DesignCtl_ShowB_Copy\" xml:space=\"preserve\">\n    <value>Копирование</value>\n  </data>\n  <data name=\"DesignCtl_ShowB_CustomReportItemError\" xml:space=\"preserve\">\n    <value>Ошибка постоения меню CustomReportItem: {0}</value>\n  </data>\n  <data name=\"DesignCtl_ShowB_WantReplaceCell\" xml:space=\"preserve\">\n    <value>Хотите заменить содержимое ячейки?</value>\n  </data>\n  <data name=\"DesignCtl_ShowB_WantSelect\" xml:space=\"preserve\">\n    <value>Хотите выбрать {0}?</value>\n  </data>\n  <data name=\"DesignCtl_ShowC_IllegalInsertSyntax\" xml:space=\"preserve\">\n    <value>Внутренняя ошибка: некорректный код вставки: </value>\n  </data>\n  <data name=\"DesignCtl_Show_ChartsInsert\" xml:space=\"preserve\">\n    <value>Диаграммы могут быть вставлены только в тело отчёта</value>\n  </data>\n  <data name=\"DesignCtl_Show_CustomReportItem\" xml:space=\"preserve\">\n    <value>Метод {0}.GetCustomReportItemXml должен возвращать XML заключённый в теги &lt;CustomReportItem&gt; и &lt;/CustomReportItem&gt;\n\nОшибка:\n{1}</value>\n  </data>\n  <data name=\"DesignCtl_Show_CustomReportItemException\" xml:space=\"preserve\">\n    <value>Ошибка вставки CustomReportItem: {0}</value>\n  </data>\n  <data name=\"DesignCtl_Show_Insert\" xml:space=\"preserve\">\n    <value>Вставка</value>\n  </data>\n  <data name=\"DesignCtl_Show_ListsInBody\" xml:space=\"preserve\">\n    <value>Списки могут быть вставлены только в тело отчёта</value>\n  </data>\n  <data name=\"DesignCtl_Show_MatrixsInBody\" xml:space=\"preserve\">\n    <value>Матрицы могут быть вставлены только в тело отчёта</value>\n  </data>\n  <data name=\"DesignCtl_Show_Paste\" xml:space=\"preserve\">\n    <value>Вставка</value>\n  </data>\n  <data name=\"DesignCtl_Show_SubreportsInBody\" xml:space=\"preserve\">\n    <value>Подотчёты могут быть вставлены только в тело отчёта</value>\n  </data>\n  <data name=\"DesignCtl_Show_TablesInBody\" xml:space=\"preserve\">\n    <value>Таблицы могут быть вставлены только в тело отчёта</value>\n  </data>\n  <data name=\"DesignCtl_Show_UnableCreateRDL\" xml:space=\"preserve\">\n    <value>Не удалось создать RDL-код</value>\n  </data>\n  <data name=\"DesignerUtility_Show_ConnectDataProviderError\" xml:space=\"preserve\">\n    <value>Не удалось установить соединение через поставщика данных '{0}'</value>\n  </data>\n  <data name=\"DesignerUtility_Show_Error\" xml:space=\"preserve\">\n    <value>Ошибка</value>\n  </data>\n  <data name=\"DesignerUtility_Show_OpenConnectionError\" xml:space=\"preserve\">\n    <value>Не удалось установить соединение</value>\n  </data>\n  <data name=\"DesignerUtility_Show_SharedConnectionError\" xml:space=\"preserve\">\n    <value>Не удалось открыть общее соединение, пароль или файл некорректны</value>\n  </data>\n  <data name=\"DesignerUtility_Show_SQLError\" xml:space=\"preserve\">\n    <value>Ошибка SQL</value>\n  </data>\n  <data name=\"DesignerUtility_Show_TestConnection\" xml:space=\"preserve\">\n    <value>Проверка соединения</value>\n  </data>\n  <data name=\"DesignXmlDraw_Show_XMLInvalid\" xml:space=\"preserve\">\n    <value>Некорректный XML</value>\n  </data>\n  <data name=\"DialogDatabase_ShowD_Error\" xml:space=\"preserve\">\n    <value>Ошибка</value>\n  </data>\n  <data name=\"DialogDatabase_ShowD_SelectDataProvider\" xml:space=\"preserve\">\n    <value>Выберите источник данных перед тестом.</value>\n  </data>\n  <data name=\"DialogDatabase_Show_ConnectionSuccessful\" xml:space=\"preserve\">\n    <value>Соединение успешно установлено!</value>\n  </data>\n  <data name=\"DialogDatabase_Show_InternalError\" xml:space=\"preserve\">\n    <value>Внутренняя ошибка</value>\n  </data>\n  <data name=\"DialogDataSourceRef_bOK_Click_UnableCreateDSR\" xml:space=\"preserve\">\n    <value>Не удалось создать общий источник данных</value>\n  </data>\n  <data name=\"DialogDataSources_ShowE_DataSourceMustUniqueN\" xml:space=\"preserve\">\n    <value>Каждый источник данных должен иметь уникальное имя. '{0}' уже используется.</value>\n  </data>\n  <data name=\"DialogDataSources_ShowE_DataSources\" xml:space=\"preserve\">\n    <value>Источники данных</value>\n  </data>\n  <data name=\"DialogDataSources_ShowE_NameInvalid\" xml:space=\"preserve\">\n    <value>Название '{0}' содержит некорректные символы.</value>\n  </data>\n  <data name=\"DialogDataSources_ShowE_NameMustSpecified\" xml:space=\"preserve\">\n    <value>Название должно быть указано у каждого источника данных.</value>\n  </data>\n  <data name=\"DialogEmbeddedImages_ShowE_CopyImageBeforePaste\" xml:space=\"preserve\">\n    <value>Скопируйте изображение в буфер обмена, прежде чем пытаться вставить.</value>\n  </data>\n  <data name=\"DialogEmbeddedImages_ShowE_ErrorConvertingImage\" xml:space=\"preserve\">\n    <value>Ошибка преобразования изображения</value>\n  </data>\n  <data name=\"DialogEmbeddedImages_ShowE_Image\" xml:space=\"preserve\">\n    <value>Изображение</value>\n  </data>\n  <data name=\"DialogEmbeddedImages_ShowE_ImageMustUniqueName\" xml:space=\"preserve\">\n    <value>Каждое встроенное изображение должно иметь уникальное имя. '{0}' уже повторяется.</value>\n  </data>\n  <data name=\"DialogEmbeddedImages_ShowE_NameInvalid\" xml:space=\"preserve\">\n    <value>Название '{0}' содержит некорректные символы.</value>\n  </data>\n  <data name=\"DialogEmbeddedImages_ShowE_NameMustSpecified\" xml:space=\"preserve\">\n    <value>Название должно быть указано для каждого встроенного изображения.</value>\n  </data>\n  <data name=\"DialogFilterOperator_Show_OperatorInList\" xml:space=\"preserve\">\n    <value>Оператор '{0}' должен быть в списке операторов</value>\n  </data>\n  <data name=\"DialogFilterOperator_Show_PickFilterOperator\" xml:space=\"preserve\">\n    <value>Выберите оператор фильтра</value>\n  </data>\n  <data name=\"DialogNewChart_ShowC_FillExpression\" xml:space=\"preserve\">\n    <value>Пожалуйста, заполните выражение данных диаграммы или включать серию.</value>\n  </data>\n  <data name=\"DialogNewChart_ShowC_FillYAndBubbleExpressions\" xml:space=\"preserve\">\n    <value>Пожалуйста, заполните выражения Y-координаты и ширины пузырька.</value>\n  </data>\n  <data name=\"DialogNewChart_ShowC_FillYExpression\" xml:space=\"preserve\">\n    <value>Пожалуйста, заполните выражение Y-координаты.</value>\n  </data>\n  <data name=\"DialogToolOptions_Show_ConfigError\" xml:space=\"preserve\">\n    <value>Ошибка обработки файла конфигурации; используется конфигурация по умолчанию.\n{0}</value>\n  </data>\n  <data name=\"DialogToolOptions_Show_Options\" xml:space=\"preserve\">\n    <value>Настройки</value>\n  </data>\n  <data name=\"DialogToolOptions_Show_RecentFilesMax\" xml:space=\"preserve\">\n    <value>Максимально количество недавних файлов должно быть целым числом от 1 до 50</value>\n  </data>\n  <data name=\"DialogValidateRdl_ShowC_SelectRDLTab\" xml:space=\"preserve\">\n    <value>Выберите вкладку \"RDL (исходный код)\" перед проверкой.</value>\n  </data>\n  <data name=\"DrillParametersDialog_ShowC_ReportHasErrors\" xml:space=\"preserve\">\n    <value>Отчёт имеет ошибки и не может быть обработан.</value>\n  </data>\n  <data name=\"DrillParametersDialog_Show_ErrorReading\" xml:space=\"preserve\">\n    <value>Ошибка чтения файла отчёта</value>\n  </data>\n  <data name=\"DrillParametersDialog_Show_ReportLoadFailed\" xml:space=\"preserve\">\n    <value>Ошибка загрузки отчёта</value>\n  </data>\n  <data name=\"DrillParametersDialog_Show_ValueMustSpecified\" xml:space=\"preserve\">\n    <value>Значение должно быть указано для каждого параметра</value>\n  </data>\n  <data name=\"FindTab_ShowE_InvalidLN\" xml:space=\"preserve\">\n    <value>Некорректный номер строки.</value>\n  </data>\n  <data name=\"FontCtl_Show_InvalidFontSize\" xml:space=\"preserve\">\n    <value>Некорректный размер шрифта</value>\n  </data>\n  <data name=\"GridCtl_Show_Grid\" xml:space=\"preserve\">\n    <value>Сетка</value>\n  </data>\n  <data name=\"GridCtl_Show_GridRegionsMustDefined\" xml:space=\"preserve\">\n    <value>У сетки должны быть определены как минимум по одной строке в Заголовке, Теле и Окончании.</value>\n  </data>\n  <data name=\"GroupingCtl_Show_Chart\" xml:space=\"preserve\">\n    <value>Диаграмма</value>\n  </data>\n  <data name=\"GroupingCtl_Show_ChartSeriesMustHaveLabelForLegend\" xml:space=\"preserve\">\n    <value>Серии диаграмм должны содержать метки для легенд</value>\n  </data>\n  <data name=\"GroupingCtl_Show_Group\" xml:space=\"preserve\">\n    <value>Группа</value>\n  </data>\n  <data name=\"GroupingCtl_Show_Grouping\" xml:space=\"preserve\">\n    <value>Группировка</value>\n  </data>\n  <data name=\"GroupingCtl_Show_GroupMustDefined\" xml:space=\"preserve\">\n    <value>Группа должна быть объявлена</value>\n  </data>\n  <data name=\"GroupingCtl_Show_GroupNameError\" xml:space=\"preserve\">\n    <value>Ошибка в названии группы</value>\n  </data>\n  <data name=\"GroupingCtl_Show_InvalidName\" xml:space=\"preserve\">\n    <value>Некорректное имя: {0}</value>\n  </data>\n  <data name=\"GroupingCtl_Show_Name\" xml:space=\"preserve\">\n    <value>Название</value>\n  </data>\n  <data name=\"GroupingCtl_Show_NoExpressionsForGroup\" xml:space=\"preserve\">\n    <value>В группе не должно быть выражений</value>\n  </data>\n  <data name=\"MDIChild_ShowF_Export\" xml:space=\"preserve\">\n    <value>Экспорт</value>\n  </data>\n  <data name=\"MDIChild_ShowF_WantDisplayColorsInTIF\" xml:space=\"preserve\">\n    <value>Хотите отобразить изображение в TIF?</value>\n  </data>\n  <data name=\"MDIChild_ShowG_ExportError\" xml:space=\"preserve\">\n    <value>Ошибка экспорта</value>\n  </data>\n  <data name=\"MDIChild_ShowH_fyiReportingDesigner\" xml:space=\"preserve\">\n    <value>Редактор отчётов</value>\n  </data>\n  <data name=\"MDIChild_ShowH_Untitled\" xml:space=\"preserve\">\n    <value>Безымянный</value>\n  </data>\n  <data name=\"MDIChild_ShowH_WantSaveChanges\" xml:space=\"preserve\">\n    <value>Хотите сохранить изменения в '{0}'?</value>\n  </data>\n  <data name=\"PositionCtl_Show_Height\" xml:space=\"preserve\">\n    <value>Высота</value>\n  </data>\n  <data name=\"PositionCtl_Show_Invalid\" xml:space=\"preserve\">\n    <value>{0} некорректно.  {1}</value>\n  </data>\n  <data name=\"PositionCtl_Show_Left\" xml:space=\"preserve\">\n    <value>Слева</value>\n  </data>\n  <data name=\"PositionCtl_Show_Name\" xml:space=\"preserve\">\n    <value>Название</value>\n  </data>\n  <data name=\"PositionCtl_Show_SizeInvalid\" xml:space=\"preserve\">\n    <value>Размер некорректен</value>\n  </data>\n  <data name=\"PositionCtl_Show_Top\" xml:space=\"preserve\">\n    <value>Сверху</value>\n  </data>\n  <data name=\"PositionCtl_Show_Width\" xml:space=\"preserve\">\n    <value>Ширина</value>\n  </data>\n  <data name=\"PropertyDialog_ShowF_DataSet\" xml:space=\"preserve\">\n    <value>Набор данных</value>\n  </data>\n  <data name=\"PropertyDialog_ShowF_WantDeleteDataset\" xml:space=\"preserve\">\n    <value>Вы уверены, что хотите удалить этот набор данных?</value>\n  </data>\n  <data name=\"RdlDesigner_ShowD_Error\" xml:space=\"preserve\">\n    <value>Ошибка</value>\n  </data>\n  <data name=\"RdlDesigner_Showl_FormatXML\" xml:space=\"preserve\">\n    <value>Формат XML</value>\n  </data>\n  <data name=\"RdlDesigner_Show_CustomColorSaveFailed\" xml:space=\"preserve\">\n    <value>Ошибка сохранения пользовательского цвета</value>\n  </data>\n  <data name=\"RdlDesigner_Show_ErrorStopProcess\" xml:space=\"preserve\">\n    <value>Ошибка остановки процесса</value>\n  </data>\n  <data name=\"RdlDesigner_Show_HelpURLInvalid\" xml:space=\"preserve\">\n    <value>Некорректная ссылка на помощь</value>\n  </data>\n  <data name=\"RdlDesigner_Show_PrintError\" xml:space=\"preserve\">\n    <value>Ошибка печати: </value>\n  </data>\n  <data name=\"RdlDesigner_Show_PrintOneFile\" xml:space=\"preserve\">\n    <value>Печатать можно только один файл за раз.</value>\n  </data>\n  <data name=\"RdlDesigner_Show_RDLDesign\" xml:space=\"preserve\">\n    <value>Дизайнер отчётов</value>\n  </data>\n  <data name=\"RdlDesigner_Show_ResettingHelpURL\" xml:space=\"preserve\">\n    <value>Ссылка на помощь установлена по умолчанию.</value>\n  </data>\n  <data name=\"RdlDesigner_Show_ResettingSupportURL\" xml:space=\"preserve\">\n    <value>Ссылка на поддержку установлена по умолчанию.</value>\n  </data>\n  <data name=\"RdlDesigner_Show_SupportURLInvalid\" xml:space=\"preserve\">\n    <value>Некорректная ссылка на поддержку</value>\n  </data>\n  <data name=\"RdlDesigner_Show_UnableShowReport\" xml:space=\"preserve\">\n    <value>Не удалось отобразить отчёт</value>\n  </data>\n  <data name=\"RdlDesigner_Show_UnableStartDesktop\" xml:space=\"preserve\">\n    <value>Не удалось запустить сервер</value>\n  </data>\n  <data name=\"RdlDesigner_Show_ZoomValueInvalid\" xml:space=\"preserve\">\n    <value>Некорректное значение масштаба</value>\n  </data>\n  <data name=\"RdlEditPreview_ShowI_ReachedEndDocument\" xml:space=\"preserve\">\n    <value>Достигнут конец документа.</value>\n  </data>\n  <data name=\"RdlEditPreview_Show_ErrorFind\" xml:space=\"preserve\">\n    <value>Повторите попытку.  Ошибка при поиске: {0}</value>\n  </data>\n  <data name=\"RdlEditPreview_Show_InternalError\" xml:space=\"preserve\">\n    <value>Внутренняя ошибка</value>\n  </data>\n  <data name=\"RdlEditPreview_Show_Report\" xml:space=\"preserve\">\n    <value>Отчёт</value>\n  </data>\n  <data name=\"RdlUserControl_Show_PrintError\" xml:space=\"preserve\">\n    <value>Ошибка печати: </value>\n  </data>\n  <data name=\"RdlUserControl_Show_PrintOneFile\" xml:space=\"preserve\">\n    <value>Печатать можно только один файл за раз.</value>\n  </data>\n  <data name=\"RdlUserControl_Show_RDLDesign\" xml:space=\"preserve\">\n    <value>Дизайнер отчётов</value>\n  </data>\n  <data name=\"RdlUserControl_Show_ZoomValueInvalid\" xml:space=\"preserve\">\n    <value>Некорректное значение масштаба</value>\n  </data>\n  <data name=\"ReportCtl_Show_Field_Invalid\" xml:space=\"preserve\">\n    <value>некорректное поле</value>\n  </data>\n  <data name=\"ReportCtl_Show_SizeInvalid\" xml:space=\"preserve\">\n    <value>Значение размера {0} некорректно.\n</value>\n  </data>\n  <data name=\"StyleBorderCtl_Show_BottomWidth\" xml:space=\"preserve\">\n    <value>Ширина нижней границы</value>\n  </data>\n  <data name=\"StyleBorderCtl_Show_DefaultWidth\" xml:space=\"preserve\">\n    <value>Ширина по умолчанию</value>\n  </data>\n  <data name=\"StyleBorderCtl_Show_LeftWidth\" xml:space=\"preserve\">\n    <value>Ширина левой границы</value>\n  </data>\n  <data name=\"StyleBorderCtl_Show_RightWidth\" xml:space=\"preserve\">\n    <value>Ширина правой границы</value>\n  </data>\n  <data name=\"StyleBorderCtl_Show_SizeInvalid\" xml:space=\"preserve\">\n    <value>некорректна</value>\n  </data>\n  <data name=\"StyleBorderCtl_Show_TopWidth\" xml:space=\"preserve\">\n    <value>Ширина верхней границы</value>\n  </data>\n  <data name=\"StyleCtl_Show_Bottom\" xml:space=\"preserve\">\n    <value>Снизу</value>\n  </data>\n  <data name=\"StyleCtl_Show_Left\" xml:space=\"preserve\">\n    <value>Слева</value>\n  </data>\n  <data name=\"StyleCtl_Show_PaddingInvalid\" xml:space=\"preserve\">\n    <value>{0} некорректный отступ</value>\n  </data>\n  <data name=\"StyleCtl_Show_Right\" xml:space=\"preserve\">\n    <value>Справа</value>\n  </data>\n  <data name=\"StyleCtl_Show_Top\" xml:space=\"preserve\">\n    <value>Сверху</value>\n  </data>\n  <data name=\"StyleTextCtl_Show_InvalidFontSize\" xml:space=\"preserve\">\n    <value>Некорректный размер шрифта</value>\n  </data>\n  <data name=\"SubreportCtl_Show_ErrorReading\" xml:space=\"preserve\">\n    <value>Ошибка чтения отчёта</value>\n  </data>\n  <data name=\"SubreportCtl_Show_ReportLoadFailed\" xml:space=\"preserve\">\n    <value>Ошибка загрузки отчёта</value>\n  </data>\n  <data name=\"SubreportCtl_Show_Subreport\" xml:space=\"preserve\">\n    <value>Подотчёт</value>\n  </data>\n  <data name=\"SubreportCtl_Show_SubreportMustSpecified\" xml:space=\"preserve\">\n    <value>Файл подотчёта должен быть указан</value>\n  </data>\n  <data name=\"TableColumnCtl_Show_ExpressionTrueFalse\" xml:space=\"preserve\">\n    <value>{0} должен быть 'true' или 'false'</value>\n  </data>\n  <data name=\"TableColumnCtl_Show_HiddenInvalid\" xml:space=\"preserve\">\n    <value>Поле \"Скрытый\" некорректно</value>\n  </data>\n  <data name=\"TableColumnCtl_Show_WidthInvalid\" xml:space=\"preserve\">\n    <value>Ширина некорректна</value>\n  </data>\n  <data name=\"TableCtl_Show_Table\" xml:space=\"preserve\">\n    <value>Таблица</value>\n  </data>\n  <data name=\"TableCtl_Show_TableMustHaveRegions\" xml:space=\"preserve\">\n    <value>В таблицы должно быть как минимум по одной строке для Заголовка, Тела и Окончания.</value>\n  </data>\n  <data name=\"TableRowCtl_Show_ExpressionTrueFalse\" xml:space=\"preserve\">\n    <value>{0} должен быть 'true' или 'false'</value>\n  </data>\n  <data name=\"TableRowCtl_Show_HeightInvalid\" xml:space=\"preserve\">\n    <value>Высота некорректна</value>\n  </data>\n  <data name=\"TableRowCtl_Show_HiddenInvalid\" xml:space=\"preserve\">\n    <value>Поле \"Скрытый\" некорректно</value>\n  </data>\n  <data name=\"DialogDatabase_cbConnectionTypes_SelectedIndexChanged_Connection\" xml:space=\"preserve\">\n    <value>Соединение:</value>\n  </data>\n  <data name=\"DialogDatabase_cbConnectionTypes_SelectedIndexChanged_Shared_Data_Source_File\" xml:space=\"preserve\">\n    <value>Общий источник данных (файл):</value>\n  </data>\n  <data name=\"DialogAbout_DialogAbout_About\" xml:space=\"preserve\">\n    <value>Дизайнер отчётов создает отчеты, определенные с помощью языка определения отчетов (RDL).\nCopyright (C) 2004-2008 fyiReporting Software, LLC\n\nПод лицензией Apache, версии 2.0 (the \"License\");\nВы не можете использовать этот файл только в соответствии с лицензией.\nВы можете получить копию лицензии на\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nЕсли иное не требуется применимым законодательством или согласовано в письменной форме, программное обеспечение\nраспространяется под лицензией \"КАК ЕСТЬ\",\nБЕЗ ГАРАНТИЙ ИЛИ УСЛОВИЙ ЛЮБОГО РОДА, явных или подразумеваемых.\nСм. Лицензию на других языках, регулирующих разрешения и\nограничения в рамках лицензии.\n\nДля получения дополнительной информации посетите\nсайт https://github.com/majorsilence/My-FyiReporting.</value>\n  </data>\n  <data name=\"DialogAbout_DialogAbout_Version\" xml:space=\"preserve\">\n    <value>Версия {0}</value>\n  </data>\n  <data name=\"PositionCtl_InitValues_GroupSelected\" xml:space=\"preserve\">\n    <value>Групповое выделение</value>\n  </data>\n  <data name=\"RdlDesigner_CreateMDIChild_Untitled\" xml:space=\"preserve\">\n    <value>Безымянный</value>\n  </data>\n  <data name=\"ReportParameterCtl_bDefaultValues_Click_Default_Values\" xml:space=\"preserve\">\n    <value>Значения по умолчанию</value>\n  </data>\n  <data name=\"Tabs_Background\" xml:space=\"preserve\">\n    <value>Фон</value>\n  </data>\n  <data name=\"Tabs_Borders\" xml:space=\"preserve\">\n    <value>Границы</value>\n  </data>\n  <data name=\"Tabs_Code\" xml:space=\"preserve\">\n    <value>Код</value>\n  </data>\n  <data name=\"Tabs_Filter\" xml:space=\"preserve\">\n    <value>Фильтр</value>\n  </data>\n  <data name=\"Tabs_Font\" xml:space=\"preserve\">\n    <value>Шрифт</value>\n  </data>\n  <data name=\"Tabs_Grouping\" xml:space=\"preserve\">\n    <value>Группировка</value>\n  </data>\n  <data name=\"Tabs_Image\" xml:space=\"preserve\">\n    <value>Изображение</value>\n  </data>\n  <data name=\"Tabs_Interactivity\" xml:space=\"preserve\">\n    <value>Интерактивность</value>\n  </data>\n  <data name=\"Tabs_ModulesAndClasses\" xml:space=\"preserve\">\n    <value>Модули и классы</value>\n  </data>\n  <data name=\"Tabs_ReportParameters\" xml:space=\"preserve\">\n    <value>Параметры отчёта</value>\n  </data>\n  <data name=\"Tabs_Sorting\" xml:space=\"preserve\">\n    <value>Сортировка</value>\n  </data>\n  <data name=\"Tabs_Subreport\" xml:space=\"preserve\">\n    <value>Подотчёт</value>\n  </data>\n  <data name=\"Tabs_Visibility\" xml:space=\"preserve\">\n    <value>Видимость</value>\n  </data>\n  <data name=\"DesignerUtility_Error_NumberFormatinvalid\" xml:space=\"preserve\">\n    <value>Формат числа некорректен. Должен быть: ###.##</value>\n  </data>\n  <data name=\"DesignerUtility_Error_SizeLessZero\" xml:space=\"preserve\">\n    <value>Размер не может быть меньше 0</value>\n  </data>\n  <data name=\"DesignerUtility_Error_SizeUnitInvalid\" xml:space=\"preserve\">\n    <value>Единица размера некорректна. Должно быть: in, cm, mm, pt, or pc.</value>\n  </data>\n  <data name=\"DesignerUtility_Error_SizeZero\" xml:space=\"preserve\">\n    <value>Размер не может быть равен 0</value>\n  </data>\n  <data name=\"DesignXmlDraw_Error_DataRegionIntoHeaderFooter\" xml:space=\"preserve\">\n    <value>Нельзя вставлять регион данных в заголовок или окончание страницы.</value>\n  </data>\n  <data name=\"DesignXmlDraw_Error_NoReport\" xml:space=\"preserve\">\n    <value>RDL не содержит элемента \"Report\".</value>\n  </data>\n  <data name=\"DesignXmlDraw_Error_SubreportIntoHeaderFooter\" xml:space=\"preserve\">\n    <value>Нельзя вставлять подотчёт в заголовок или окончание страницы.</value>\n  </data>\n  <data name=\"DialogDatabase_Error_UnknownIfdef\" xml:space=\"preserve\">\n    <value>Неизвестный элемент \"{0}\" указанный в шаблоне.</value>\n  </data>\n  <data name=\"DialogToolOptions_Error_RecentFilesMax\" xml:space=\"preserve\">\n    <value>Максимальное количество недавних файлов должно быть целым числом от 1 до 50</value>\n  </data>\n  <data name=\"DialogToolOptions_Error_UnableConfig\" xml:space=\"preserve\">\n    <value>Не удалось получить информацию конфигурации рабочего стола.\n{0}</value>\n  </data>\n  <data name=\"MDIChild_Error_AllowedExportTypes\" xml:space=\"preserve\">\n    <value>Для экспорта поддерживаются только следующие форматы: HTML, MHT, XML, CSV, RTF, DOC, Excel, TIF и PDF.</value>\n  </data>\n  <data name=\"Undo_Error_EndGroupNotMatchStartGroup\" xml:space=\"preserve\">\n    <value>Внутренняя логическая ошибка: конец группы не соответствует началу группу</value>\n  </data>\n  <data name=\"Undo_Error_UnknownAction\" xml:space=\"preserve\">\n    <value>Неизвестное действие</value>\n  </data>\n  <data name=\"BackgroundCtl_bExternal_Click_ImageFilesFilter\" xml:space=\"preserve\">\n    <value>BMP (*.bmp)|*.bmp|JPEG (*.jpg;*.jpeg;*.jpe;*.jfif)|*.jpg;*.jpeg;*.jpe;*.jfif|GIF (*.gif)|*.gif|TIFF (*.tif;*.tiff)|*.tif;*.tiff|PNG (*.png)|*.png|Все изображения|*.bmp;*.jpg;*.jpeg;*.jpe;*.jfif;*.gif;*.tif;*.tiff;*.png|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"DataSetRowsCtl_bRowsFile_Click_XMLFilesFilter\" xml:space=\"preserve\">\n    <value>XML (*.xml)|*.xml|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"DataSetRowsCtl_bRowsFile_Click_XMLFilesTitle\" xml:space=\"preserve\">\n    <value>Выберите XML-файл</value>\n  </data>\n  <data name=\"DialogDatabase_bShared_Click_DSRFilter\" xml:space=\"preserve\">\n    <value>Общие источники данных (*.dsr)|*.dsr|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"DialogDatabase_bShared_Click_DSRTitle\" xml:space=\"preserve\">\n    <value>Выберите общий источник данных</value>\n  </data>\n  <data name=\"DialogDatabase_buttonSqliteSelectDatabase_Click_AllFilesFilter\" xml:space=\"preserve\">\n    <value>Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"DialogDataSources_bGetFilename_Click_DSRFilter\" xml:space=\"preserve\">\n    <value>Общие источники данных (*.dsr)|*.dsr|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"DialogDataSources_bGetFilename_Click_DSRTitle\" xml:space=\"preserve\">\n    <value>Выберите общий источник данных</value>\n  </data>\n  <data name=\"DialogEmbeddedImages_bImport_Click_ImageFilesFilter\" xml:space=\"preserve\">\n    <value>BMP (*.bmp)|*.bmp|JPEG (*.jpg;*.jpeg;*.jpe;*.jfif)|*.jpg;*.jpeg;*.jpe;*.jfif|GIF (*.gif)|*.gif|TIFF (*.tif;*.tiff)|*.tif;*.tiff|PNG (*.png)|*.png|Все изображения|*.bmp;*.jpg;*.jpeg;*.jpe;*.jfif;*.gif;*.tif;*.tiff;*.png|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"DialogToolOptions_bAddMap_Click_MapFilesFilter\" xml:space=\"preserve\">\n    <value>Карты (*.xml)|*.xml|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"DrillParametersDialog_bFile_Click_ReportFilesFilter\" xml:space=\"preserve\">\n    <value>Отчёты (*.rdl)|*.rdl|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"DrillParametersDialog_bFile_Click_ReportFilesTitle\" xml:space=\"preserve\">\n    <value>Выберите отчёт</value>\n  </data>\n  <data name=\"FileUIEditor_EditValue_XSLFilesFilter\" xml:space=\"preserve\">\n    <value>XSL (*.xsl)|*.xsl|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"ImageCtl_bExternal_Click_ImageFilesFilter\" xml:space=\"preserve\">\n    <value>BMP (*.bmp)|*.bmp|JPEG (*.jpg;*.jpeg;*.jpe;*.jfif)|*.jpg;*.jpeg;*.jpe;*.jfif|GIF (*.gif)|*.gif|TIFF (*.tif;*.tiff)|*.tif;*.tiff|PNG (*.png)|*.png|Все изображения|*.bmp;*.jpg;*.jpeg;*.jpe;*.jfif;*.gif;*.tif;*.tiff;*.png|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"InteractivityCtl_bDrillthrough_Click_ReportFilesFilter\" xml:space=\"preserve\">\n    <value>Отчёты (*.rdl)|*.rdl|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"InteractivityCtl_bDrillthrough_Click_ReportFilesTitle\" xml:space=\"preserve\">\n    <value>Выберите отчёт</value>\n  </data>\n  <data name=\"RdlDesigner_menuFileOpen_Click_ReportFilesFilter\" xml:space=\"preserve\">\n    <value>Отчёты (*.rdl;*rdlc)|*.rdl;*.rdlc|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"RdlUserControl_openToolStripButton1_Click_ReportFilesFilter\" xml:space=\"preserve\">\n    <value>Отчёты (*.rdl;*rdlc)|*.rdl;*.rdlc|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"ReportXmlCtl_bOpenXsl_Click_XslFilerTitle\" xml:space=\"preserve\">\n    <value>Выберите файл преобразования данных</value>\n  </data>\n  <data name=\"ReportXmlCtl_bOpenXsl_Click_XSLFilesFilter\" xml:space=\"preserve\">\n    <value>XSL (*.xsl)|*.xsl|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"SubreportCtl_bFile_Click_ReportFilesFilter\" xml:space=\"preserve\">\n    <value>Отчёты (*.rdl)|*.rdl| зашифрованный (*.encrypted)|*.encrypted|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"SubreportCtl_bFile_Click_ReportFilesTitle\" xml:space=\"preserve\">\n    <value>Выберите отчёт</value>\n  </data>\n  <data name=\"DialogDataSourceRef_bGetFilename_Click_DSRFilter\" xml:space=\"preserve\">\n    <value>Общие источники данных (*.dsr)|*.dsr|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"DialogDataSourceRef_bGetFilename_Click_DSRTitle\" xml:space=\"preserve\">\n    <value>Укажите название общего источника данных</value>\n  </data>\n  <data name=\"MDIChild_Export_CSV\" xml:space=\"preserve\">\n    <value>CSV (*.csv)|*.csv|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"MDIChild_Export_DOC\" xml:space=\"preserve\">\n    <value>DOC (*.doc)|*.doc|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"MDIChild_Export_Excel\" xml:space=\"preserve\">\n    <value>Excel (*.xlsx)|*.xlsx|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"MDIChild_Export_ExportTitleFormat\" xml:space=\"preserve\">\n    <value>Экспортировать в {0}</value>\n  </data>\n  <data name=\"MDIChild_Export_MHT\" xml:space=\"preserve\">\n    <value>MHT (*.mht)|*.mhtml;*.mht|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"MDIChild_Export_PDF\" xml:space=\"preserve\">\n    <value>PDF (*.pdf)|*.pdf|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"MDIChild_Export_RTF\" xml:space=\"preserve\">\n    <value>RTF (*.rtf)|*.rtf|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"MDIChild_Export_TIF\" xml:space=\"preserve\">\n    <value>TIF (*.tif, *.tiff)|*.tiff;*.tif|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"MDIChild_Export_Web_Page\" xml:space=\"preserve\">\n    <value>Веб-страница (*.html, *.htm)|*.html;*.htm|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"MDIChild_Export_XML\" xml:space=\"preserve\">\n    <value>XML (*.xml)|*.xml|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"MDIChild_FileSaveAs_RDLFilter\" xml:space=\"preserve\">\n    <value>Отчёты (*.rdl)|*.rdl|Все файлы (*.*)|*.*</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/SQLCtl.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    internal partial class SQLCtl : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tDesignXmlDraw _Draw;\nprivate System.Windows.Forms.Panel panel1;\nprivate System.Windows.Forms.Button bOK;\nprivate System.Windows.Forms.Button bCancel;\nprivate SplitContainer splitContainer1;\nprivate TreeView tvTablesColumns;\nprivate TextBox tbSQL;\nprivate Button bMove;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SQLCtl));\n\t\t\tthis.splitContainer1 = new System.Windows.Forms.SplitContainer();\n\t\t\tthis.tvTablesColumns = new System.Windows.Forms.TreeView();\n\t\t\tthis.tbSQL = new System.Windows.Forms.TextBox();\n\t\t\tthis.bMove = new System.Windows.Forms.Button();\n\t\t\tthis.panel1 = new System.Windows.Forms.Panel();\n\t\t\tthis.bOK = new System.Windows.Forms.Button();\n\t\t\tthis.bCancel = new System.Windows.Forms.Button();\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n\t\t\tthis.splitContainer1.Panel1.SuspendLayout();\n\t\t\tthis.splitContainer1.Panel2.SuspendLayout();\n\t\t\tthis.splitContainer1.SuspendLayout();\n\t\t\tthis.panel1.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// splitContainer1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.splitContainer1, \"splitContainer1\");\n\t\t\tthis.splitContainer1.Name = \"splitContainer1\";\n\t\t\t// \n\t\t\t// splitContainer1.Panel1\n\t\t\t// \n\t\t\tthis.splitContainer1.Panel1.Controls.Add(this.tvTablesColumns);\n\t\t\t// \n\t\t\t// splitContainer1.Panel2\n\t\t\t// \n\t\t\tthis.splitContainer1.Panel2.Controls.Add(this.tbSQL);\n\t\t\tthis.splitContainer1.Panel2.Controls.Add(this.bMove);\n\t\t\t// \n\t\t\t// tvTablesColumns\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tvTablesColumns, \"tvTablesColumns\");\n\t\t\tthis.tvTablesColumns.FullRowSelect = true;\n\t\t\tthis.tvTablesColumns.Name = \"tvTablesColumns\";\n\t\t\tthis.tvTablesColumns.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.tvTablesColumns_BeforeExpand);\n\t\t\t// \n\t\t\t// tbSQL\n\t\t\t// \n\t\t\tthis.tbSQL.AcceptsReturn = true;\n\t\t\tthis.tbSQL.AcceptsTab = true;\n\t\t\tthis.tbSQL.AllowDrop = true;\n\t\t\tresources.ApplyResources(this.tbSQL, \"tbSQL\");\n\t\t\tthis.tbSQL.Name = \"tbSQL\";\n\t\t\tthis.tbSQL.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tbSQL_KeyDown);\n\t\t\t// \n\t\t\t// bMove\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bMove, \"bMove\");\n\t\t\tthis.bMove.Name = \"bMove\";\n\t\t\tthis.bMove.Click += new System.EventHandler(this.bMove_Click);\n\t\t\t// \n\t\t\t// panel1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.panel1, \"panel1\");\n\t\t\tthis.panel1.Controls.Add(this.bOK);\n\t\t\tthis.panel1.Controls.Add(this.bCancel);\n\t\t\tthis.panel1.Name = \"panel1\";\n\t\t\t// \n\t\t\t// bOK\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bOK, \"bOK\");\n\t\t\tthis.bOK.Name = \"bOK\";\n\t\t\tthis.bOK.Click += new System.EventHandler(this.bOK_Click);\n\t\t\t// \n\t\t\t// bCancel\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCancel, \"bCancel\");\n\t\t\tthis.bCancel.CausesValidation = false;\n\t\t\tthis.bCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n\t\t\tthis.bCancel.Name = \"bCancel\";\n\t\t\t// \n\t\t\t// SQLCtl\n\t\t\t// \n\t\t\tthis.AcceptButton = this.bOK;\n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.CancelButton = this.bCancel;\n\t\t\tthis.ControlBox = false;\n\t\t\tthis.Controls.Add(this.splitContainer1);\n\t\t\tthis.Controls.Add(this.panel1);\n\t\t\tthis.MaximizeBox = false;\n\t\t\tthis.MinimizeBox = false;\n\t\t\tthis.Name = \"SQLCtl\";\n\t\t\tthis.ShowInTaskbar = false;\n\t\t\tthis.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;\n\t\t\tthis.splitContainer1.Panel1.ResumeLayout(false);\n\t\t\tthis.splitContainer1.Panel2.ResumeLayout(false);\n\t\t\tthis.splitContainer1.Panel2.PerformLayout();\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n\t\t\tthis.splitContainer1.ResumeLayout(false);\n\t\t\tthis.panel1.ResumeLayout(false);\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/SQLCtl.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Text;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// Summary description for ReportCtl.\n    /// </summary>\n    internal partial class SQLCtl\n    {\n\n        string _DataSource;\n        DataTable _QueryParameters;\n\n        internal SQLCtl(DesignXmlDraw dxDraw, string datasource, string sql, DataTable queryParameters)\n        {\n            _Draw = dxDraw;\n            _DataSource = datasource;\n            _QueryParameters = queryParameters;\n            // This call is required by the Windows.Forms Form Designer.\n            InitializeComponent();\n\n            // Initialize form using the style node values\n            InitValues(sql);\n        }\n\n        private void InitValues(string sql)\n        {\n\t\t\tthis.tbSQL.Text = sql.Replace(\"\\r\\n\", \"\\n\").Replace(\"\\n\", Environment.NewLine);\n\n            // Fill out the tables, columns and parameters\n\n            // suppress redraw until tree view is complete\n            tvTablesColumns.BeginUpdate();\n\n            // Get the schema information\n            List<SqlSchemaInfo> si = DesignerUtility.GetSchemaInfo(_Draw, _DataSource);\n            if (si != null && si.Count > 0)\n            {\n                TreeNode ndRoot = new TreeNode(\"Tables\");\n                tvTablesColumns.Nodes.Add(ndRoot);\n                if (si == null)\t\t// Nothing to initialize\n                    return;\n                bool bView = false;\n                foreach (SqlSchemaInfo ssi in si)\n                {\n                    if (!bView && ssi.Type == \"VIEW\")\n                    {\t// Switch over to views\n                        ndRoot = new TreeNode(\"Views\");\n                        tvTablesColumns.Nodes.Add(ndRoot);\n                        bView = true;\n                    }\n\n                    // Add the node to the tree\n                    TreeNode aRoot = new TreeNode(ssi.Name);\n                    ndRoot.Nodes.Add(aRoot);\n                    aRoot.Nodes.Add(\"\");\n                }\n            }\n            // Now do parameters\n            TreeNode qpRoot = null;\n            foreach (DataRow dr in _QueryParameters.Rows)\n            {\n                if (dr[0] == DBNull.Value || dr[1] == null)\n                    continue;\n                string pName = (string)dr[0];\n                if (pName.Length == 0)\n                    continue;\n                if (qpRoot == null)\n                {\n                    qpRoot = new TreeNode(\"Query Parameters\");\n                    tvTablesColumns.Nodes.Add(qpRoot);\n                }\n                if (pName[0] != '@')\n                {\n                    pName = \"@\" + pName;\n                }\n                // Add the node to the tree\n                TreeNode aRoot = new TreeNode(pName);\n                qpRoot.Nodes.Add(aRoot);\n            }\n\n            tvTablesColumns.EndUpdate();\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        internal string SQL\n        {\n            get { return tbSQL.Text; }\n            set { tbSQL.Text = value; }\n        }\n\n        private void bOK_Click(object sender, System.EventArgs e)\n        {\n            this.DialogResult = DialogResult.OK;\n        }\n        private void tvTablesColumns_BeforeExpand(object sender, System.Windows.Forms.TreeViewCancelEventArgs e)\n        {\n            tvTablesColumns_ExpandTable(e.Node);\n        }\n\n        private void tvTablesColumns_ExpandTable(TreeNode tNode)\n        {\n            if (tNode.Parent == null)\t// Check for Tables or Views\n                return;\n\n            if (tNode.FirstNode.Text != \"\")\t// Have we already filled it out?\n                return;\n\n            // Need to obtain the column information for the requested table/view\n            // suppress redraw until tree view is complete\n            tvTablesColumns.BeginUpdate();\n\n            string sql = \"SELECT * FROM \" + DesignerUtility.NormalizeSqlName(tNode.Text);\n            List<SqlColumn> tColumns = DesignerUtility.GetSqlColumns(_Draw, _DataSource, sql);\n            bool bFirstTime = true;\n            foreach (SqlColumn sc in tColumns)\n            {\n                if (bFirstTime)\n                {\n                    bFirstTime = false;\n                    tNode.FirstNode.Text = sc.Name;\n                }\n                else\n                    tNode.Nodes.Add(sc.Name);\n            }\n\n            tvTablesColumns.EndUpdate();\n        }\n\n        private void bMove_Click(object sender, System.EventArgs e)\n        {\n            if (tvTablesColumns.SelectedNode == null ||\n                tvTablesColumns.SelectedNode.Parent == null)\n                return;\t\t// this is the Tables/Views node\n\n            TreeNode node = tvTablesColumns.SelectedNode;\n            string t = node.Text;\n            if (tbSQL.Text == \"\")\n            {\n                if (node.Parent.Parent == null)\n                {\t// select table; generate full select for table\n                    tvTablesColumns_ExpandTable(node);\t// make sure we've obtained the columns\n\n                    StringBuilder sb = new StringBuilder(\"SELECT \");\n                    TreeNode next = node.FirstNode;\n                    while (true)\n                    {\n                        sb.Append(DesignerUtility.NormalizeSqlName(next.Text));\n                        next = next.NextNode;\n                        if (next == null)\n                            break;\n                        sb.Append(\", \");\n                    }\n                    sb.Append(\" FROM \");\n                    sb.Append(DesignerUtility.NormalizeSqlName(node.Text));\n                    t = sb.ToString();\n                }\n                else\n                {\t// select column; generate select of that column\t\n                    t = \"SELECT \" + DesignerUtility.NormalizeSqlName(node.Text) + \" FROM \" + DesignerUtility.NormalizeSqlName(node.Parent.Text);\n                }\n            }\n\n            tbSQL.SelectedText = t;\n        }\n\n\t\tprivate void tbSQL_KeyDown(object sender, KeyEventArgs e)\n\t\t{\n\t\t\tif (e.Control && (e.KeyCode == Keys.A))\n\t\t\t{\n\t\t\t\tif (sender != null)\n\t\t\t\t\t((TextBox)sender).SelectAll();\n\t\t\t\te.Handled = true;\n\t\t\t}\n\t\t}\n    }\n}\n"
  },
  {
    "path": "RdlDesign/SQLCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bMove.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bMove.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bCancel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;tbSQL.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Name\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>468, 255</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bCancel.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Bottom, Right</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>300, 8</value>\n  </data>\n  <data name=\"&gt;&gt;tvTablesColumns.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbSQL.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>37, 0</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"splitContainer1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"tbSQL.Multiline\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"splitContainer1.SplitterDistance\" type=\"System.Int32, mscorlib\">\n    <value>123</value>\n  </data>\n  <data name=\"panel1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>468, 40</value>\n  </data>\n  <data name=\"&gt;&gt;bMove.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbSQL.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel2</value>\n  </data>\n  <data name=\"bMove.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>3, 3</value>\n  </data>\n  <data name=\"panel1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.Name\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel1</value>\n  </data>\n  <data name=\"&gt;&gt;tbSQL.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bMove.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Name\" xml:space=\"preserve\">\n    <value>bCancel</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Name\" xml:space=\"preserve\">\n    <value>splitContainer1</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"tvTablesColumns.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Fill</value>\n  </data>\n  <data name=\"bMove.Text\" xml:space=\"preserve\">\n    <value>&gt;&gt;</value>\n  </data>\n  <data name=\"splitContainer1.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Bottom, Left, Right</value>\n  </data>\n  <data name=\"tbSQL.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Bottom, Left, Right</value>\n  </data>\n  <data name=\"splitContainer1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>468, 215</value>\n  </data>\n  <data name=\"tvTablesColumns.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>123, 215</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"tvTablesColumns.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"tbSQL.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>299, 215</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.Name\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel2</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1</value>\n  </data>\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"panel1.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Bottom, Left, Right</value>\n  </data>\n  <data name=\"tbSQL.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;bMove.Name\" xml:space=\"preserve\">\n    <value>bMove</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>SQLCtl</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>SQL Syntax Helper</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bMove.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel2</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;panel1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bOK.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Bottom, Right</value>\n  </data>\n  <data name=\"panel1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 215</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Parent\" xml:space=\"preserve\">\n    <value>panel1</value>\n  </data>\n  <data name=\"&gt;&gt;tbSQL.Name\" xml:space=\"preserve\">\n    <value>tbSQL</value>\n  </data>\n  <data name=\"&gt;&gt;tvTablesColumns.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>388, 8</value>\n  </data>\n  <data name=\"splitContainer1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;tvTablesColumns.Name\" xml:space=\"preserve\">\n    <value>tvTablesColumns</value>\n  </data>\n  <data name=\"tvTablesColumns.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"bCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1</value>\n  </data>\n  <data name=\"&gt;&gt;tvTablesColumns.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel1</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/SQLCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Помощник SQL</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/SimpleButton.cs",
    "content": "\nusing System;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Drawing.Imaging;\nusing System.Windows.Forms;\n\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\tinternal class SimpleButton : Button\n\t{\n\t\tprivate Color _Transparency;\n\t\tprivate bool bDown=false;\n\t\tprivate bool bIn=false;\n\n\t\tpublic SimpleButton(Control parent) \n\t\t{\t\n\t\t\tthis.Parent = parent;\n\t\t\tthis.TranparencyColor = Color.White;\n            this.DoubleBuffered = true;\n\n\t\t\tthis.BackColor = parent.BackColor;\n\t\t\tthis.ForeColor = this.Enabled? Color.Black: Color.Gray;\n\t\t\tthis.MouseDown +=new MouseEventHandler(SimpleButton_MouseDown);\n\t\t\tthis.MouseUp +=new MouseEventHandler(SimpleButton_MouseUp);\n\t\t\tthis.MouseEnter +=new EventHandler(SimpleButton_MouseEnter);\n\t\t\tthis.MouseLeave +=new EventHandler(SimpleButton_MouseLeave);\n\t\t\tthis.Paint += new PaintEventHandler(this.DrawPanelPaint);\n\t\t}\n\n\t\tprivate void DrawPanelPaint(object sender, System.Windows.Forms.PaintEventArgs e)\n\t\t{\n\n\t\t\tGraphics g = e.Graphics;\n\t\t\tBrush b = null;\n\t\t\tPen p = null;\n\n\t\t\ttry\t\t\t// never want to die in here\n\t\t\t{\n\t\t\t\tb = new SolidBrush(this.Enabled? this.BackColor: Color.LightGray);\n\t\t\t\tg.FillRectangle(b, e.ClipRectangle);\n\t\t\t\tif (bIn && this.Enabled)\n\t\t\t\t\tg.DrawRectangle(Pens.Blue, 0, 0, this.Width-1, this.Height-1);\n\n\t\t\t\tif (this.Image != null)\n\t\t\t\t{\n\t\t\t\t\tint x = (this.Width - this.Image.Width) / 2;\n\t\t\t\t\tint y = (this.Height - this.Image.Height) / 2;\n\t\t\t\t\tif (bDown && bIn)\n\t\t\t\t\t{\n\t\t\t\t\t\tx += 1;\n\t\t\t\t\t\ty += 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Draw Image using the transparency color\n\t\t\t\t\tImageAttributes imageAttr = new ImageAttributes();\n\t\t\t\t\timageAttr.SetColorKey(_Transparency, _Transparency,\n\t\t\t\t\t\tColorAdjustType.Default);\n\n\t\t\t\t\tg.DrawImage(this.Image,         // Image\n\t\t\t\t\t\tnew Rectangle(x, y, this.Image.Width, this.Image.Height),    // Dest. rect.\n\t\t\t\t\t\t0,\t\t\t\t\t\t\t// srcX\n\t\t\t\t\t\t0,\t\t\t\t\t\t\t// srcY\n\t\t\t\t\t\tthis.Image.Width,           // srcWidth\n\t\t\t\t\t\tthis.Image.Height,          // srcHeight\n\t\t\t\t\t\tGraphicsUnit.Pixel,\t\t\t// srcUnit\n\t\t\t\t\t\timageAttr);\t\t\t\t\t// ImageAttributes\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tStringFormat format = new StringFormat(StringFormatFlags.NoWrap);\n\t\t\t\t\tg.DrawString(this.Text, this.Font, Brushes.Black, new Rectangle(2, 2, this.Width, this.Height), format);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch {}\t// todo draw the error message\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (b != null)\n\t\t\t\t\tb.Dispose();\n\t\t\t\tif (p != null)\n\t\t\t\t\tp.Dispose();\n\t\t\t}\n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tpublic Color TranparencyColor\n\t\t{\n\t\t\tget { return this._Transparency;\t}\n\t\t\tset { this._Transparency = value; }\n\t\t}\n\n\t\tprivate void SimpleButton_MouseDown(object sender, MouseEventArgs e)\n\t\t{\n\t\t\tif (e.Button == MouseButtons.Left)\n\t\t\t\tbDown = true;\n\t\t}\n\n\t\tprivate void SimpleButton_MouseUp(object sender, MouseEventArgs e)\n\t\t{\n\t\t\tif (e.Button == MouseButtons.Left)\n\t\t\t\tbDown = false;\n\t\t}\n\n\t\tprivate void SimpleButton_MouseEnter(object sender, EventArgs e)\n\t\t{\n\t\t\tbIn = true;\n\t\t}\n\n\t\tprivate void SimpleButton_MouseLeave(object sender, EventArgs e)\n\t\t{\n\t\t\tbIn = false;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/SimpleButton.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<root>\n\t<xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n\t\t<xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n\t\t\t<xsd:complexType>\n\t\t\t\t<xsd:choice maxOccurs=\"unbounded\">\n\t\t\t\t\t<xsd:element name=\"data\">\n\t\t\t\t\t\t<xsd:complexType>\n\t\t\t\t\t\t\t<xsd:sequence>\n\t\t\t\t\t\t\t\t<xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t\t<xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n\t\t\t\t\t\t\t</xsd:sequence>\n\t\t\t\t\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" />\n\t\t\t\t\t\t\t<xsd:attribute name=\"type\" type=\"xsd:string\" />\n\t\t\t\t\t\t\t<xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n\t\t\t\t\t\t</xsd:complexType>\n\t\t\t\t\t</xsd:element>\n\t\t\t\t\t<xsd:element name=\"resheader\">\n\t\t\t\t\t\t<xsd:complexType>\n\t\t\t\t\t\t\t<xsd:sequence>\n\t\t\t\t\t\t\t\t<xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t</xsd:sequence>\n\t\t\t\t\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n\t\t\t\t\t\t</xsd:complexType>\n\t\t\t\t\t</xsd:element>\n\t\t\t\t</xsd:choice>\n\t\t\t</xsd:complexType>\n\t\t</xsd:element>\n\t</xsd:schema>\n\t<resheader name=\"ResMimeType\">\n\t\t<value>text/microsoft-resx</value>\n\t</resheader>\n\t<resheader name=\"Version\">\n\t\t<value>1.0.0.0</value>\n\t</resheader>\n\t<resheader name=\"Reader\">\n\t\t<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n\t</resheader>\n\t<resheader name=\"Writer\">\n\t\t<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n\t</resheader>\n</root>\n"
  },
  {
    "path": "RdlDesign/SimpleToggle.cs",
    "content": "\nusing System;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Drawing.Imaging;\nusing System.Windows.Forms;\n\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\tinternal class SimpleToggle : CheckBox\n\t{\n\t\tprivate Color _UpColor;\n\t\tprivate Color _DownColor;\n\t\tprivate Color _Transparency;\n\t\tprivate bool bIn=false;\n\n\t\tpublic SimpleToggle() \n\t\t{\t\n\t\t\tthis.Appearance = Appearance.Button; \n\n\t\t\tthis.UpColor = Color.LightGray;\n\t\t\tthis.DownColor = Color.Azure;\n\t\t\tthis.TranparencyColor = Color.White;\n\n\t\t\tthis.BackColor = this.Checked? this.DownColor: this.UpColor;\n\t\t\tthis.ForeColor = this.Enabled? Color.Black: Color.Gray;\n\t\t\tthis.Paint += new PaintEventHandler(this.DrawPanelPaint);\n\t\t\tthis.MouseEnter +=new EventHandler(SimpleToggle_MouseEnter);\n\t\t\tthis.MouseLeave +=new EventHandler(SimpleToggle_MouseLeave);\n\t\t}\n\n\t\tprivate void DrawPanelPaint(object sender, System.Windows.Forms.PaintEventArgs e)\n\t\t{\n\n\t\t\tGraphics g = e.Graphics;\n\t\t\tBrush b = null;\n\t\t\tPen p = null;\n\n\t\t\ttry\t\t\t// never want to die in here\n\t\t\t{\n\n\t\t\t\tb = new SolidBrush(this.BackColor);\n\t\t\t\tg.FillRectangle(b, e.ClipRectangle);\n\t\t\t\tif (this.Checked || bIn)\n\t\t\t\t{\n\t\t\t\t\tg.DrawRectangle(Pens.Blue, 0, 0, this.Width-1, this.Height-1);\n\t\t\t\t}\n\t\t\t\tif (this.Image != null)\n\t\t\t\t{\n\t\t\t\t\tint x = (this.Width - this.Image.Width) / 2;\n\t\t\t\t\tint y = (this.Height - this.Image.Height) / 2;\n\n\t\t\t\t\t// Draw Image using the transparency color\n\t\t\t\t\tImageAttributes imageAttr = new ImageAttributes();\n\t\t\t\t\timageAttr.SetColorKey(_Transparency, _Transparency,\n\t\t\t\t\t\tColorAdjustType.Default);\n\n\t\t\t\t\tg.DrawImage(this.Image,         // Image\n\t\t\t\t\t\tnew Rectangle(x, y, this.Image.Width, this.Image.Height),    // Dest. rect.\n\t\t\t\t\t\t0,\t\t\t\t\t\t\t// srcX\n\t\t\t\t\t\t0,\t\t\t\t\t\t\t// srcY\n\t\t\t\t\t\tthis.Image.Width,           // srcWidth\n\t\t\t\t\t\tthis.Image.Height,          // srcHeight\n\t\t\t\t\t\tGraphicsUnit.Pixel,\t\t\t// srcUnit\n\t\t\t\t\t\timageAttr);\t\t\t\t\t// ImageAttributes\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tStringFormat format = new StringFormat(StringFormatFlags.NoWrap);\n\t\t\t\t\tg.DrawString(this.Text, this.Font, Brushes.Black, new Rectangle(2, 2, this.Width, this.Height), format);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch {}\t// todo draw the error message\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (b != null)\n\t\t\t\t\tb.Dispose();\n\t\t\t\tif (p != null)\n\t\t\t\t\tp.Dispose();\n\t\t\t}\n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tpublic Color TranparencyColor\n\t\t{\n\t\t\tget { return this._Transparency;\t}\n\t\t\tset { this._Transparency = value; }\n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tpublic Color UpColor\n\t\t{\n\t\t\tget { return this._UpColor;\t}\n\t\t\tset { this._UpColor = value; }\n\t\t}\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n\t\tpublic Color DownColor\n\t\t{\n\t\t\tget { return this._DownColor;\t}\n\t\t\tset { this._DownColor = value; }\n\t\t}\n\n\t\tprotected override void OnCheckedChanged(EventArgs e)\n\t\t{\n\t\t\tbase.OnCheckedChanged(e);\t\t// CheckBox OnCheckedChanged method\t \n\t\t\tthis.BackColor = this.Checked? this.DownColor: this.UpColor;\n\t\t}\n\n\t\tprotected override void OnClick(EventArgs e)\n\t\t{\n\t\t\tbase.OnClick(e);\t\t// CheckBox OnClick method\n\t\t\tthis.BackColor = this.Checked? this.DownColor: this.UpColor;\n\t\t}\n\n\t\tprotected override void OnEnabledChanged(EventArgs e)\n\t\t{\n\t\t\tbase.OnEnabledChanged(e);\t\t// CheckBox OnEnabled method\n\t\t\tif (this.Enabled)\n\t\t\t{\n\t\t\t\tthis.ForeColor = Color.Black;\n\t\t\t\tthis.BackColor = this.Checked? this.DownColor: this.UpColor;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.ForeColor = Color.LightGray;\n\t\t\t\tthis.BackColor = Color.LightGray;\n\t\t\t}\n\t\t}\n\n\t\tprivate void SimpleToggle_MouseEnter(object sender, EventArgs e)\n\t\t{\n\t\t\tbIn = true;\n\t\t}\n\n\t\tprivate void SimpleToggle_MouseLeave(object sender, EventArgs e)\n\t\t{\n\t\t\tbIn = false;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/SimpleToggle.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<root>\n\t<xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n\t\t<xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n\t\t\t<xsd:complexType>\n\t\t\t\t<xsd:choice maxOccurs=\"unbounded\">\n\t\t\t\t\t<xsd:element name=\"data\">\n\t\t\t\t\t\t<xsd:complexType>\n\t\t\t\t\t\t\t<xsd:sequence>\n\t\t\t\t\t\t\t\t<xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t\t<xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n\t\t\t\t\t\t\t</xsd:sequence>\n\t\t\t\t\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" />\n\t\t\t\t\t\t\t<xsd:attribute name=\"type\" type=\"xsd:string\" />\n\t\t\t\t\t\t\t<xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n\t\t\t\t\t\t</xsd:complexType>\n\t\t\t\t\t</xsd:element>\n\t\t\t\t\t<xsd:element name=\"resheader\">\n\t\t\t\t\t\t<xsd:complexType>\n\t\t\t\t\t\t\t<xsd:sequence>\n\t\t\t\t\t\t\t\t<xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t</xsd:sequence>\n\t\t\t\t\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n\t\t\t\t\t\t</xsd:complexType>\n\t\t\t\t\t</xsd:element>\n\t\t\t\t</xsd:choice>\n\t\t\t</xsd:complexType>\n\t\t</xsd:element>\n\t</xsd:schema>\n\t<resheader name=\"ResMimeType\">\n\t\t<value>text/microsoft-resx</value>\n\t</resheader>\n\t<resheader name=\"Version\">\n\t\t<value>1.0.0.0</value>\n\t</resheader>\n\t<resheader name=\"Reader\">\n\t\t<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n\t</resheader>\n\t<resheader name=\"Writer\">\n\t\t<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n\t</resheader>\n</root>\n"
  },
  {
    "path": "RdlDesign/SingleCtlDialog.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    internal partial class SingleCtlDialog : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tprivate DesignCtl _DesignCtl;\nprivate DesignXmlDraw _Draw;\nprivate Button bOK;\nprivate Button bCancel;\nprivate Panel pMain;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SingleCtlDialog));\n\t\t\tthis.bOK = new System.Windows.Forms.Button();\n\t\t\tthis.bCancel = new System.Windows.Forms.Button();\n\t\t\tthis.pMain = new System.Windows.Forms.Panel();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// bOK\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bOK, \"bOK\");\n\t\t\tthis.bOK.DialogResult = System.Windows.Forms.DialogResult.OK;\n\t\t\tthis.bOK.Name = \"bOK\";\n\t\t\tthis.bOK.UseVisualStyleBackColor = true;\n\t\t\tthis.bOK.Click += new System.EventHandler(this.bOK_Click);\n\t\t\t// \n\t\t\t// bCancel\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCancel, \"bCancel\");\n\t\t\tthis.bCancel.CausesValidation = false;\n\t\t\tthis.bCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n\t\t\tthis.bCancel.Name = \"bCancel\";\n\t\t\tthis.bCancel.UseVisualStyleBackColor = true;\n\t\t\tthis.bCancel.Click += new System.EventHandler(this.bCancel_Click);\n\t\t\t// \n\t\t\t// pMain\n\t\t\t// \n\t\t\tresources.ApplyResources(this.pMain, \"pMain\");\n\t\t\tthis.pMain.Name = \"pMain\";\n\t\t\t// \n\t\t\t// SingleCtlDialog\n\t\t\t// \n\t\t\tthis.AcceptButton = this.bOK;\n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.CancelButton = this.bCancel;\n\t\t\tthis.Controls.Add(this.pMain);\n\t\t\tthis.Controls.Add(this.bCancel);\n\t\t\tthis.Controls.Add(this.bOK);\n\t\t\tthis.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;\n\t\t\tthis.MaximizeBox = false;\n\t\t\tthis.MinimizeBox = false;\n\t\t\tthis.Name = \"SingleCtlDialog\";\n\t\t\tthis.ShowInTaskbar = false;\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/SingleCtlDialog.cs",
    "content": "\nusing System;\nusing System.Drawing;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing System.Xml;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\tinternal enum SingleCtlTypeEnum\n\t{\n\t\tInteractivityCtl, VisibilityCtl, BorderCtl, FontCtl, BackgroundCtl, BackgroundImage,\n\t\tReportParameterCtl, ReportCodeCtl, ReportModulesClassesCtl, ImageCtl, SubreportCtl,\n\t\tFiltersCtl, SortingCtl, GroupingCtl\n\t}\n\n    /// <summary>\n    /// Summary description for PropertyDialog.\n    /// </summary>\n    internal partial class SingleCtlDialog\n    {\n\n        // design draw \n        private List<XmlNode> _Nodes;\t\t\t// selected nodes\n        private SingleCtlTypeEnum _Type;\n        IProperty _Ctl;\n\n        internal SingleCtlDialog(DesignCtl dc, DesignXmlDraw dxDraw, List<XmlNode> sNodes,\n            SingleCtlTypeEnum type, string[] names)\n        {\n            this._Type = type;\n            this._DesignCtl = dc;\n            this._Draw = dxDraw;\n            this._Nodes = sNodes;\n\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            //   Add the control for the selected ReportItems\n            //     We could have forced the user to create this (and maybe should have) \n            //     instead of using an enum.\n            UserControl uc = null;\n            string title = null;\n            switch (type)\n            {\n                case SingleCtlTypeEnum.InteractivityCtl:\n                    title = Strings.Tabs_Interactivity;\n                    uc = new InteractivityCtl(dxDraw, sNodes);\n                    break;\n                case SingleCtlTypeEnum.VisibilityCtl:\n                    title = Strings.Tabs_Visibility;\n                    uc = new VisibilityCtl(dxDraw, sNodes);\n                    break;\n                case SingleCtlTypeEnum.BorderCtl:\n                    title = Strings.Tabs_Borders;\n                    uc = new StyleBorderCtl(dxDraw, names, sNodes);\n                    break;\n                case SingleCtlTypeEnum.FontCtl:\n                    title = Strings.Tabs_Font;\n                    uc = new FontCtl(dxDraw, names, sNodes);\n                    break;\n                case SingleCtlTypeEnum.BackgroundCtl:\n                    title = Strings.Tabs_Background;\n                    uc = new BackgroundCtl(dxDraw, names, sNodes);\n                    break;\n                case SingleCtlTypeEnum.ImageCtl:\n                    title = Strings.Tabs_Image;\n                    uc = new ImageCtl(dxDraw, sNodes);\n                    break;\n                case SingleCtlTypeEnum.SubreportCtl:\n                    title = Strings.Tabs_Subreport;\n                    uc = new SubreportCtl(dxDraw, sNodes[0]);\n                    break;\n                case SingleCtlTypeEnum.FiltersCtl:\n                    title = Strings.Tabs_Filter;\n                    uc = new FiltersCtl(dxDraw, sNodes[0]);\n                    break;\n                case SingleCtlTypeEnum.SortingCtl:\n                    title = Strings.Tabs_Sorting;\n                    uc = new SortingCtl(dxDraw, sNodes[0]);\n                    break;\n                case SingleCtlTypeEnum.GroupingCtl:\n                    title = Strings.Tabs_Grouping;\n                    uc = new GroupingCtl(dxDraw, sNodes[0]);\n                    break;\n                case SingleCtlTypeEnum.ReportParameterCtl:\n                    title = Strings.Tabs_ReportParameters;\n                    uc = new ReportParameterCtl(dxDraw);\n                    break;\n                case SingleCtlTypeEnum.ReportCodeCtl:\n                    title = Strings.Tabs_Code;\n                    uc = new CodeCtl(dxDraw);\n                    break;\n                case SingleCtlTypeEnum.ReportModulesClassesCtl:\n                    title = Strings.Tabs_ModulesAndClasses;\n                    uc = new ModulesClassesCtl(dxDraw);\n                    break;\n            }\n            _Ctl = uc as IProperty;\n            if (title != null)\n                Text = Text + \" - \" + title;\n\n            if (uc == null)\n                return;\n            int h = uc.Height;\n            int w = uc.Width;\n            uc.Top = 0;\n            uc.Left = 0;\n            uc.Dock = DockStyle.Fill;\n            uc.Parent = this.pMain;\n            this.Height = h + (this.Height - pMain.Height);\n            this.Width = w + (this.Width - pMain.Width);\n            this.ResumeLayout(true);\n        }\n\n        private void bOK_Click(object sender, System.EventArgs e)\n        {\n            string c = \"\";\n            switch (_Type)\n            {\n                case SingleCtlTypeEnum.InteractivityCtl:\n                    c = Strings.SingleCtlDialog_Undo_InteractivityChange;\n                    break;\n                case SingleCtlTypeEnum.VisibilityCtl:\n                    c = Strings.SingleCtlDialog_Undo_VisibilityChange;\n                    break;\n                case SingleCtlTypeEnum.BorderCtl:\n                    c = Strings.SingleCtlDialog_Undo_BorderChange;\n                    break;\n                case SingleCtlTypeEnum.FontCtl:\n                    c = Strings.SingleCtlDialog_Undo_AppearanceChange;\n                    break;\n                case SingleCtlTypeEnum.BackgroundCtl:\n                case SingleCtlTypeEnum.BackgroundImage:\n                    c = Strings.SingleCtlDialog_Undo_BackgroundChange;\n                    break;\n                case SingleCtlTypeEnum.FiltersCtl:\n                    c = Strings.SingleCtlDialog_Undo_FiltersChange;\n                    break;\n                case SingleCtlTypeEnum.SortingCtl:\n                    c = Strings.SingleCtlDialog_Undo_SortChange;\n                    break;\n                case SingleCtlTypeEnum.GroupingCtl:\n                    c = Strings.SingleCtlDialog_Undo_GroupingChange;\n                    break;\n                case SingleCtlTypeEnum.ReportCodeCtl:\n                    c = Strings.SingleCtlDialog_Undo_ReportCodeChange;\n                    break;\n                case SingleCtlTypeEnum.ImageCtl:\n                    c = Strings.SingleCtlDialog_Undo_ImageChange;\n                    break;\n                case SingleCtlTypeEnum.SubreportCtl:\n                    c = Strings.SingleCtlDialog_Undo_SubreportChange;\n                    break;\n                case SingleCtlTypeEnum.ReportModulesClassesCtl:\n                    c = Strings.SingleCtlDialog_Undo_ReportModules_ClassesChange;\n                    break;\n            }\n            this._DesignCtl.StartUndoGroup(c);\n\n            this._Ctl.Apply();\n\n            this._DesignCtl.EndUndoGroup(true);\n            _DesignCtl.SignalReportChanged();\n            _Draw.Invalidate();\n\n            this.DialogResult = DialogResult.OK;\n        }\n\n        private void bCancel_Click(object sender, EventArgs e)\n        {\n            this.DialogResult = DialogResult.Cancel;\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "RdlDesign/SingleCtlDialog.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"&gt;&gt;bCancel.Name\" xml:space=\"preserve\">\n    <value>bCancel</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;pMain.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"pMain.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Bottom, Left, Right</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>SingleCtlDialog</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bCancel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"bOK.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Bottom, Right</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>620, 436</value>\n  </data>\n  <data name=\"pMain.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>614, 401</value>\n  </data>\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <data name=\"bCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"bCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>542, 410</value>\n  </data>\n  <data name=\"pMain.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;pMain.Name\" xml:space=\"preserve\">\n    <value>pMain</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>452, 410</value>\n  </data>\n  <data name=\"pMain.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>3, 3</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;pMain.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;pMain.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bCancel.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Bottom, Right</value>\n  </data>\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Properties</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/SingleCtlDialog.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Свойства</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/SortingCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.Text;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Sorting specification\n\t/// </summary>\n\tinternal class SortingCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n\t\tprivate DesignXmlDraw _Draw;\n\t\tprivate XmlNode _SortingParent;\n\t\tprivate DataGridViewTextBoxColumn dgtbExpr;\n\t\tprivate DataGridViewCheckBoxColumn dgtbDir;\n\n\t\tprivate System.Windows.Forms.Button bDelete;\n\t\tprivate System.Windows.Forms.Button bUp;\n\t\tprivate System.Windows.Forms.Button bDown;\n\t\tprivate System.Windows.Forms.DataGridView dgSorting;\n\t\tprivate System.Windows.Forms.Button bValueExpr;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n\t\tpublic SortingCtl(DesignXmlDraw dxDraw, XmlNode sortingParent)\n\t\t{\n\t\t\t_Draw = dxDraw;\n\t\t\t_SortingParent = sortingParent;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues();\t\t\t\n\t\t}\n\n\t\tprivate void InitValues()\n\t\t{\n\t\t\t// Initialize the DataGrid columns\n\t\t\tdgtbExpr = new DataGridViewTextBoxColumn();\n\t\t\n\t\t\tdgtbDir = new DataGridViewCheckBoxColumn();\n\n            dgSorting.Columns.Add(dgtbExpr);\n            dgSorting.Columns.Add(dgtbDir);\n\n\t\t\t// \n\t\t\t// dgtbExpr\n\t\t\t// \n\t\t\t\n\t\t\tdgtbExpr.HeaderText = \"Sort Expression\";\n            dgtbExpr.Width = 240;\n\t\t\t// Get the parent's dataset name\n//\t\t\tstring dataSetName = _Draw.GetDataSetNameValue(_SortingParent);\n//\n//\t\t\tstring[] fields = _Draw.GetFields(dataSetName, true);\n//\t\t\tif (fields != null)\n//\t\t\t\tdgtbExpr.CB.Items.AddRange(fields);\n\t\t\t// \n\t\t\t// dgtbDir\n\t\t\t// \n\t\t\tdgtbDir.HeaderText = \"Sort Ascending\";\n\t\t\tdgtbDir.Width = 90;\n\n\t\t\tXmlNode sorts = _Draw.GetNamedChildNode(_SortingParent, \"Sorting\");\n\n\t\t\tif (sorts != null)\n\t\t\tforeach (XmlNode sNode in sorts.ChildNodes)\n\t\t\t{\n\t\t\t\tif (sNode.NodeType != XmlNodeType.Element || \n\t\t\t\t\t\tsNode.Name != \"SortBy\")\n\t\t\t\t\tcontinue;\n                dgSorting.Rows.Add(_Draw.GetElementValue(sNode, \"SortExpression\", \"\"),\n\t\t\t\t   _Draw.GetElementValue(sNode, \"Direction\", \"Ascending\") == \"Ascending\");\n\t\t\t}\n\n            if (dgSorting.Rows.Count == 0)\n                dgSorting.Rows.Add(\"\", true);\n        }\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SortingCtl));\n\t\t\tthis.dgSorting = new System.Windows.Forms.DataGridView();\n\t\t\tthis.bDelete = new System.Windows.Forms.Button();\n\t\t\tthis.bUp = new System.Windows.Forms.Button();\n\t\t\tthis.bDown = new System.Windows.Forms.Button();\n\t\t\tthis.bValueExpr = new System.Windows.Forms.Button();\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.dgSorting)).BeginInit();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// dgSorting\n\t\t\t// \n\t\t\tresources.ApplyResources(this.dgSorting, \"dgSorting\");\n\t\t\tthis.dgSorting.Name = \"dgSorting\";\n\t\t\t// \n\t\t\t// bDelete\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bDelete, \"bDelete\");\n\t\t\tthis.bDelete.Name = \"bDelete\";\n\t\t\tthis.bDelete.Click += new System.EventHandler(this.bDelete_Click);\n\t\t\t// \n\t\t\t// bUp\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bUp, \"bUp\");\n\t\t\tthis.bUp.Name = \"bUp\";\n\t\t\tthis.bUp.Click += new System.EventHandler(this.bUp_Click);\n\t\t\t// \n\t\t\t// bDown\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bDown, \"bDown\");\n\t\t\tthis.bDown.Name = \"bDown\";\n\t\t\tthis.bDown.Click += new System.EventHandler(this.bDown_Click);\n\t\t\t// \n\t\t\t// bValueExpr\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bValueExpr, \"bValueExpr\");\n\t\t\tthis.bValueExpr.Name = \"bValueExpr\";\n\t\t\tthis.bValueExpr.Tag = \"value\";\n\t\t\tthis.bValueExpr.Click += new System.EventHandler(this.bValueExpr_Click);\n\t\t\t// \n\t\t\t// SortingCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.bValueExpr);\n\t\t\tthis.Controls.Add(this.bDown);\n\t\t\tthis.Controls.Add(this.bUp);\n\t\t\tthis.Controls.Add(this.bDelete);\n\t\t\tthis.Controls.Add(this.dgSorting);\n\t\t\tthis.Name = \"SortingCtl\";\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.dgSorting)).EndInit();\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n  \n\t\tpublic bool IsValid()\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// Remove the old filters\n\t\t\tXmlNode sorts = null;\n\t\t\t_Draw.RemoveElement(_SortingParent, \"Sorting\");\n\t\t\t// Loop thru and add all the filters\n\t\t\tforeach (DataGridViewRow dr in dgSorting.Rows)\n\t\t\t{\n                string expr = dr.Cells[0].Value as string;\n                bool dir = dr.Cells[1].Value == null? true: (bool) dr.Cells[1].Value;\n\t\t\t\t\n\t\t\t\tif (expr == null || expr.Length <= 0)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tif (sorts == null)\n\t\t\t\t\tsorts = _Draw.CreateElement(_SortingParent, \"Sorting\", null);\n\n\t\t\t\tXmlNode sNode = _Draw.CreateElement(sorts, \"SortBy\", null);\n\t\t\t\t_Draw.CreateElement(sNode, \"SortExpression\", expr);\n\t\t\t\t_Draw.CreateElement(sNode, \"Direction\", dir?\"Ascending\":\"Descending\");\n\t\t\t}\n\t\t}\n\n\t\tprivate void bDelete_Click(object sender, System.EventArgs e)\n\t\t{\n            if (dgSorting.CurrentRow == null)\n                return;\n\n            if (!dgSorting.Rows[dgSorting.CurrentRow.Index].IsNewRow)   // can't delete the new row\n                dgSorting.Rows.RemoveAt(this.dgSorting.CurrentRow.Index);\n            else\n            {   // just empty out the values\n                DataGridViewRow dgrv = dgSorting.Rows[this.dgSorting.CurrentRow.Index];\n                dgrv.Cells[0].Value = null;\n                dgrv.Cells[1].Value = null;\n            }\n        }\n\n\t\tprivate void bUp_Click(object sender, System.EventArgs e)\n\t\t{\n            int cr = dgSorting.CurrentRow == null ? 0 : dgSorting.CurrentRow.Index;\n\t\t\tif (cr <= 0)\t\t// already at the top\n\t\t\t\treturn;\n\t\t\t\n\t\t\tSwapRow(dgSorting.Rows[cr - 1], dgSorting.Rows[cr]);\n            dgSorting.CurrentCell =\n                dgSorting.Rows[cr - 1].Cells[dgSorting.CurrentCell.ColumnIndex];\n        }\n\n\t\tprivate void bDown_Click(object sender, System.EventArgs e)\n\t\t{\n            int cr = dgSorting.CurrentRow == null ? 0 : dgSorting.CurrentRow.Index;\n\t\t\tif (cr < 0)\t\t\t// invalid index\n\t\t\t\treturn;\n\t\t\tif (cr + 1 >= dgSorting.Rows.Count)\n\t\t\t\treturn;\t\t\t// already at end\n\t\t\t\n\t\t\tSwapRow(dgSorting.Rows[cr + 1], dgSorting.Rows[cr]);\n            dgSorting.CurrentCell =\n                dgSorting.Rows[cr + 1].Cells[dgSorting.CurrentCell.ColumnIndex];\n        }\n\n\t\tprivate void SwapRow(DataGridViewRow tdr, DataGridViewRow fdr)\n\t\t{\n            // column 1\n            object save = tdr.Cells[0].Value;\n            tdr.Cells[0].Value = fdr.Cells[0].Value;\n            fdr.Cells[0].Value = save;\n            // column 2\n            save = tdr.Cells[1].Value;\n            tdr.Cells[1].Value = fdr.Cells[1].Value;\n            fdr.Cells[1].Value = save;\n            return;\n        }\n\n\t\tprivate void bValueExpr_Click(object sender, System.EventArgs e)\n\t\t{\n            if (dgSorting.CurrentCell == null)\n                dgSorting.Rows.Add(\"\",true);\n\n            DataGridViewCell dgc = dgSorting.CurrentCell;\n            int cc = dgc.ColumnIndex;\n\n            // >>>>>>>>>> \n            // the only column that should be edited is the first one ( \"Sort expression\" ) \n            if (cc != 0) \n                dgc = dgSorting.CurrentCell = dgSorting.CurrentRow.Cells[0];\n            // <<<<<<<<<< \n            string cv = dgc.Value as string;\n\n            using (DialogExprEditor ee = new DialogExprEditor(_Draw, cv, _SortingParent, false))\n            {\n                DialogResult dlgr = ee.ShowDialog();\n                if (dlgr == DialogResult.OK)\n                    dgc.Value = ee.Expression;\n            }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/SortingCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bDown.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>392, 104</value>\n  </data>\n  <data name=\"bUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Name\" xml:space=\"preserve\">\n    <value>bDelete</value>\n  </data>\n  <data name=\"&gt;&gt;dgSorting.Name\" xml:space=\"preserve\">\n    <value>dgSorting</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bValueExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"dgSorting.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dgSorting.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>SortingCtl</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.Name\" xml:space=\"preserve\">\n    <value>bDown</value>\n  </data>\n  <data name=\"bValueExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"bValueExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>392, 16</value>\n  </data>\n  <data name=\"bUp.Text\" xml:space=\"preserve\">\n    <value>Up</value>\n  </data>\n  <data name=\"&gt;&gt;dgSorting.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dgSorting.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bDelete.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"bDelete.Text\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"bDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bValueExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"bValueExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"dgSorting.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>376, 264</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bValueExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"bDelete.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.Name\" xml:space=\"preserve\">\n    <value>bValueExpr</value>\n  </data>\n  <data name=\"bUp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>392, 72</value>\n  </data>\n  <data name=\"bDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 23</value>\n  </data>\n  <data name=\"bDelete.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>392, 40</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bDown.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bDown.Text\" xml:space=\"preserve\">\n    <value>Down</value>\n  </data>\n  <data name=\"bUp.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"bDown.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"dgSorting.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 8</value>\n  </data>\n  <data name=\"&gt;&gt;bUp.Name\" xml:space=\"preserve\">\n    <value>bUp</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>488, 304</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <metadata name=\"$this.Language\" type=\"System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>ru-RU</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/SortingCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bDelete.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>60, 23</value>\n  </data>\n  <data name=\"bDelete.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"bUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>60, 23</value>\n  </data>\n  <data name=\"bUp.Text\" xml:space=\"preserve\">\n    <value>Вверх</value>\n  </data>\n  <data name=\"bDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>60, 23</value>\n  </data>\n  <data name=\"bDown.Text\" xml:space=\"preserve\">\n    <value>Вниз</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/StaticSeriesCtl - Copy.cs",
    "content": "/* ====================================================================\n   Copyright (C) 2004-2008  fyiReporting Software, LLC\n   Copyright (C) 2011  Peter Gill <peter@majorsilence.com>\n\n   This file is part of the fyiReporting RDL project.\n\t\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n\n   For additional information, email info@fyireporting.com or visit\n   the website www.fyiReporting.com.\n*/\n// written by GJL & AJM\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\n\n//This NEW class allows the modifying of static series on a chart. GJL & AJM\n\n\nnamespace fyiReporting.RdlDesign\n{\n    public partial class StaticSeriesCtl : UserControl, IProperty\n     {\n        private DesignXmlDraw _Draw;\n        private List<XmlNode> _ReportItems;\n        private SeriesItem si;\n        public bool ShowMe;\n\n        internal StaticSeriesCtl(DesignXmlDraw dxDraw, List<XmlNode> ris)\n        {\n            _Draw = dxDraw;\n            _ReportItems = ris;\n            InitializeComponent();\n            InitValues();\n        }                \n        \n        public StaticSeriesCtl()\n        {\n            InitializeComponent();\n        }\n\n        public bool IsValid()\n        {\n            return true;\n        }\n\n        public void Apply()\n        {\n                XmlNode node = _ReportItems[0];\n                XmlNode ncds = DesignXmlDraw.FindNextInHierarchy(node, \"SeriesGroupings\", \"SeriesGrouping\",\"StaticSeries\");\n                XmlNode ncdc = DesignXmlDraw.FindNextInHierarchy(node, \"ChartData\");\n                XmlNode nTyp = DesignXmlDraw.FindNextInHierarchy(node, \"Type\");              \n            \n                ncds.InnerText = \"\";\n                ncdc.InnerText = \"\";\n           \n            foreach (SeriesItem si in lbDataSeries.Items)\n            {              \n                 //Write the staticMember fields \n                ncds.InnerXml += \"<StaticMember><Label>\" + si.Name + \"</Label><Value>\" + si.Data.Replace(\"<\",\"&lt;\").Replace(\">\",\"&gt;\") + \"</Value></StaticMember>\";   \n        \n                 //Write the chartSeries fields \n                //if we have a scatter plot we need to do two datavalues!\n                if (nTyp.InnerXml.Equals(\"Scatter\"))\n                {\n                    ncdc.InnerXml += \"<ChartSeries><PlotType>\" + si.PlotType + \"</PlotType><fyi:NoMarker xmlns:fyi=\\\"http://www.fyireporting.com/schemas\\\">\" + si.NoMarker + \"</fyi:NoMarker><fyi:LineSize xmlns:fyi=\\\"http://www.fyireporting.com/schemas\\\">\" + si.LineSize + \"</fyi:LineSize><YAxis>\" + si.YAxis +\n                        \"</YAxis><DataPoints><DataPoint><DataValues><DataValue><Value>\"\n                        + si.Xplot.Replace(\"<\", \"&lt;\").Replace(\">\", \"&gt;\") + \"</Value></DataValue><DataValue><Value>\" // 20022008 AJM GJL\n                        + si.Data.Replace(\"<\", \"&lt;\").Replace(\">\", \"&gt;\") + \"</Value></DataValue></DataValues><DataLabel><Value>\" + si.Label.Replace(\"<\", \"&lt;\").Replace(\">\", \"&gt;\") + \"</Value><Visible>\" + si.ShowLabel.ToString()\n                        + \"</Visible></DataLabel></DataPoint></DataPoints></ChartSeries>\";\n                }\n                else\n                {\n                    ncdc.InnerXml += \"<ChartSeries><PlotType>\" + si.PlotType + \"</PlotType><fyi:NoMarker xmlns:fyi=\\\"http://www.fyireporting.com/schemas\\\">\" + si.NoMarker + \"</fyi:NoMarker><fyi:LineSize xmlns:fyi=\\\"http://www.fyireporting.com/schemas\\\">\" + si.LineSize + \"</fyi:LineSize><YAxis>\" + si.YAxis + \"</YAxis><DataPoints><DataPoint><DataValues><DataValue><Value>\" // 20022008 AJM GJL\n                        + si.Data.Replace(\"<\", \"&lt;\").Replace(\">\", \"&gt;\") + \"</Value></DataValue></DataValues><DataLabel><Value>\" + si.Label.Replace(\"<\", \"&lt;\").Replace(\">\", \"&gt;\") + \"</Value><Visible>\" + si.ShowLabel.ToString()\n                        + \"</Visible></DataLabel></DataPoint></DataPoints></ChartSeries>\";\n                }\n            }\n        }\n\n        private void FunctionButtonClick(Object sender, EventArgs e)     \n        {\n            Button myButton = (Button)sender;\n            switch (myButton.Name)\n            {\n                case (\"btnSeriesName\"):\n                    functionBox(txtSeriesName);\n                    break;\n                case (\"btnDataValue\"):\n                    functionBox(txtDataValue);\n                    break;\n                case (\"btnLabelValue\"):\n                    functionBox(txtLabelValue);\n                    break;\n                case (\"btnX\"):\n                    functionBox(txtX);\n                    break;\n            }\n        }\n        \n           private void functionBox(TextBox txt)\n           {\n                DialogExprEditor ee = new DialogExprEditor(_Draw, txt.Text,_ReportItems[0] , false);\n                try\n                {\n                    if (ee.ShowDialog() == DialogResult.OK)\n                    {                 \n                        txt.Text = ee.Expression;\n                    }\n\n                }\n            finally\n            {\n                ee.Dispose();\n            }\n            return;\n           }\n\n        private void chkShowLabels_CheckedChanged(object sender, EventArgs e)\n        {\n            txtLabelValue.Enabled = btnLabelValue.Enabled = chkShowLabels.Checked;\n            if (lbDataSeries.SelectedIndex > -1)\n            {              \n                si.ShowLabel = chkShowLabels.Checked;\n            }\n        }\n\t\t//GJL\n        private void chkMarker_CheckedChanged(object sender, EventArgs e)\n        {\n            if (lbDataSeries.SelectedIndex > -1)\n            {\n                si.NoMarker = !chkMarker.Checked;\n            }\n        }\n\n        private void cbLine_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            if (cbLine.SelectedIndex > -1)\n            {\n                si.LineSize = (String)cbLine.Items[cbLine.SelectedIndex];\n            }\n        }\n\n        \n\n       \n\n        private void InitValues()\n        {\n            XmlNode node = _ReportItems[0];\n            XmlNode nTyp = DesignXmlDraw.FindNextInHierarchy(node, \"Type\");\n            XmlNode ncds = DesignXmlDraw.FindNextInHierarchy(node, \"SeriesGroupings\",\"SeriesGrouping\",\"StaticSeries\");\n            ShowMe = ncds != null;\n\n            txtX.Enabled = btnX.Enabled = nTyp.InnerXml == \"Scatter\";\n\n            if (ShowMe)\n            {                \n                XmlNode cd;\n\n                XmlNode cdo = DesignXmlDraw.FindNextInHierarchy(node, \"ChartData\");\n                int i = 0;\n\n                foreach (XmlNode ncd in ncds.ChildNodes)\n                {\n                    cd = cdo.ChildNodes[i];\n                    XmlNode ndv = DesignXmlDraw.FindNextInHierarchy(ncd,\"Label\");\n                    String nameValue = ndv == null? \"\": ndv.InnerText;\n\n                    XmlNode ndv2 = DesignXmlDraw.FindNextInHierarchy(ncd,\"Value\");\n                    String nameStaticValue = ndv2 == null ? \"\" : ndv2.InnerText;\n\n                    XmlNode pt = DesignXmlDraw.FindNextInHierarchy(cd, \"PlotType\");\n                    String PlotValue;\n                    if (pt == null) \n                    {\n                        PlotValue = \"Auto\";\n                    }\n                    else\n                    {\n                        PlotValue = pt.InnerText;\n                    }\n\t\t\t\t\t//GJL 14082008\n                    XmlNode Nm = DesignXmlDraw.FindNextInHierarchy(cd, \"fyi:NoMarker\");\n                    bool NoMarker;\n                    if (Nm == null)\n                    {\n                        NoMarker = false;\n                    }\n                    else\n                    {\n                        NoMarker = Boolean.Parse(Nm.InnerText);\n                    }\n\n                    XmlNode Ls = DesignXmlDraw.FindNextInHierarchy(cd, \"fyi:LineSize\");\n                    String LineSize;\n                    if (Ls== null)\n                    {\n                        LineSize = \"Regular\";\n                    }\n                    else\n                    {\n                        LineSize = Ls.InnerText;\n                    }\n\n                    // 20022008 AJM GJL\n                    XmlNode ya = DesignXmlDraw.FindNextInHierarchy(cd, \"YAxis\");\n                    String Yaxis;\n                    if (ya == null)\n                    { \n                        Yaxis = \"Left\"; \n                    }\n                    else\n                    { \n                        Yaxis = ya.InnerText;\n                    }\n\n                    XmlNode dv = DesignXmlDraw.FindNextInHierarchy(cd, \"DataPoints\",\"DataPoint\",\"DataValues\",\"DataValue\",\"Value\");\n                    String dataValue = dv.InnerText;\n\n                    XmlNode lv = DesignXmlDraw.FindNextInHierarchy(cd, \"DataPoints\",\"DataPoint\",\"DataLabel\",\"Visible\");\n                    bool showLabel = false;\n                    if (lv != null)\n                    {\n                        showLabel = lv.InnerText.ToUpper().Equals(\"TRUE\");\n                    }              \n\n                    XmlNode lva = DesignXmlDraw.FindNextInHierarchy(cd, \"DataPoints\",\"DataPoint\",\"DataLabel\",\"Value\");\n                    String labelValue = \"\";\n                    if (lva != null)\n                    {\n                        labelValue = lva.InnerText;\n                    }               \n\n                    SeriesItem si = new SeriesItem();\n                    si.Name = nameValue;\n                    si.Label = labelValue;\n                    si.ShowLabel = showLabel;\n                    si.Data = nameStaticValue;\n                    si.PlotType = PlotValue;\n                    si.YAxis = Yaxis;// 20022008 AJM GJL\n                    si.Xplot = dataValue; //Only for XY plots\n                    si.NoMarker = NoMarker;//0206208 GJL\n                    si.LineSize = LineSize;\n\n\n                    lbDataSeries.Items.Add(si);\n                    \n                    i++;\n                }\n            }  \n        }\n\n        private void btnDel_Click(object sender, EventArgs e)\n        {\n            if (lbDataSeries.SelectedIndex >= 0)\n            {\n                lbDataSeries.Items.RemoveAt(lbDataSeries.SelectedIndex);\n                txtDataValue.Text = \"\";\n                txtLabelValue.Text = \"\";\n                txtSeriesName.Text = \"\";\n                chkMarker.Checked = true;\n                chkShowLabels.Checked = false;\n              \n            }\n        }\n\n        private void btnAdd_Click(object sender, EventArgs e)\n        {\n            SeriesItem si = new SeriesItem();\n            si.Data = \"\";\n            si.Name = \"<New Series>\";\n            si.ShowLabel = false;\n            si.Label = \"\";\n            si.PlotType = \"Auto\";\n            si.NoMarker = false;\n            si.LineSize = \"Regular\";\n            si.YAxis = \"Left\";// 20022008 AJM GJL\n            lbDataSeries.Items.Add(si);\n            lbDataSeries.SelectedItem = si;\n        }\n\n        private class SeriesItem\n        {\n            public String Data;\n            public String Name;\n            public bool ShowLabel;\n            public String Label;\n            public String PlotType;\n            public String YAxis;// 20022008 AJM GJL\n            public String Xplot; //030308 GJL\n            public bool NoMarker;//020608 GJL\n            public String LineSize = \"Regular\"; //260608 GJL\n            \n            public override String ToString()\n            {\n                return Name;\n            }\n        }\n\n        private void txtSeriesName_TextChanged(object sender, EventArgs e)\n        {\n            if (lbDataSeries.SelectedIndex > -1)\n            { \n                \n                si.Name = txtSeriesName.Text;\n                int i = lbDataSeries.Items.IndexOf(si);\n                lbDataSeries.Items.Remove(si);\n                lbDataSeries.Items.Insert(i,si);\n                lbDataSeries.SelectedItem = si;\n            }\n           \n        }\n\n        private void txtDataValue_TextChanged(object sender, EventArgs e)\n        {\n            if (lbDataSeries.SelectedIndex > -1)\n            {              \n                si.Data = txtDataValue.Text;\n            }\n        }\n\n        private void txtLabelValue_TextChanged(object sender, EventArgs e)\n        {\n            if (lbDataSeries.SelectedIndex > -1)\n            {              \n                si.Label = txtLabelValue.Text;\n            }\n        }\n\n        private void lbDataSeries_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            if (lbDataSeries.SelectedIndex > -1)\n            {\n                si = (SeriesItem)lbDataSeries.SelectedItem;\n                txtDataValue.Text = si.Data;\n                txtLabelValue.Text = si.Label;\n                txtSeriesName.Text = si.Name;\n                chkShowLabels.Checked = si.ShowLabel;\n                cbPlotType.Text = si.PlotType;\n                chkMarker.Checked = !si.NoMarker;\n                cbLine.Text = si.LineSize;\n                if (txtX.Enabled)\n                {\n                    txtX.Text = si.Xplot;\n                }\n                if (si.YAxis == \"Right\")\n                { \n                    chkRight.Checked = true; \n                }\n                else\n                { \n                    chkLeft.Checked = true; \n                }\n            }                 \n        }\n\n        private void cbPlotType_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            if (lbDataSeries.SelectedIndex > -1)\n            {\n                si.PlotType = cbPlotType.Text;\n            }\n        }\n\t\t// 20022008 AJM GJL\n        private void chkLeft_CheckedChanged(object sender, EventArgs e)\n        {\n            chkRight.Checked = !chkLeft.Checked;\n            if (lbDataSeries.SelectedIndex > -1)\n            {              \n                if (chkRight.Checked)\n                { si.YAxis = \"Right\"; }\n                else\n                { si.YAxis = \"Left\"; }\n            }\n        }\n\n        private void btnDown_Click(object sender, EventArgs e)\n        {\n            int index = lbDataSeries.SelectedIndex;\n            if (index < 0 || index + 1 == lbDataSeries.Items.Count)\n                return;\n\n            object postname = lbDataSeries.Items[index + 1];\n            lbDataSeries.Items.RemoveAt(index + 1);\n            lbDataSeries.Items.Insert(index, postname);\n        }\n\n        private void btnUp_Click(object sender, EventArgs e)\n        {\n            int index = lbDataSeries.SelectedIndex;\n            if (index <= 0)\n                return;\n\n            object prename = lbDataSeries.Items[index - 1];\n            lbDataSeries.Items.RemoveAt(index - 1);\n            lbDataSeries.Items.Insert(index, prename);\n        }\n\n        private void txtX_TextChanged(object sender, EventArgs e)\n        {\n            if (lbDataSeries.SelectedIndex > -1)\n            {\n                si.Xplot = txtX.Text;\n            }\n        }\n\n      \n\n      \n\n     \n\n       \n\n       \n\n       \n    }\n}\n"
  },
  {
    "path": "RdlDesign/StaticSeriesCtl.Designer.cs",
    "content": "namespace Majorsilence.Reporting.RdlDesign\n{\n    partial class StaticSeriesCtl\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(StaticSeriesCtl));\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.lbDataSeries = new System.Windows.Forms.ListBox();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.chkShowLabels = new System.Windows.Forms.CheckBox();\n\t\t\tthis.txtSeriesName = new System.Windows.Forms.TextBox();\n\t\t\tthis.txtLabelValue = new System.Windows.Forms.TextBox();\n\t\t\tthis.btnAdd = new System.Windows.Forms.Button();\n\t\t\tthis.btnDel = new System.Windows.Forms.Button();\n\t\t\tthis.btnLabelValue = new System.Windows.Forms.Button();\n\t\t\tthis.btnDataValue = new System.Windows.Forms.Button();\n\t\t\tthis.btnSeriesName = new System.Windows.Forms.Button();\n\t\t\tthis.txtDataValue = new System.Windows.Forms.TextBox();\n\t\t\tthis.label4 = new System.Windows.Forms.Label();\n\t\t\tthis.cbPlotType = new System.Windows.Forms.ComboBox();\n\t\t\tthis.chkLeft = new System.Windows.Forms.RadioButton();\n\t\t\tthis.chkRight = new System.Windows.Forms.RadioButton();\n\t\t\tthis.label5 = new System.Windows.Forms.Label();\n\t\t\tthis.btnUp = new System.Windows.Forms.Button();\n\t\t\tthis.btnDown = new System.Windows.Forms.Button();\n\t\t\tthis.txtX = new System.Windows.Forms.TextBox();\n\t\t\tthis.label6 = new System.Windows.Forms.Label();\n\t\t\tthis.btnX = new System.Windows.Forms.Button();\n\t\t\tthis.chkMarker = new System.Windows.Forms.CheckBox();\n\t\t\tthis.label7 = new System.Windows.Forms.Label();\n\t\t\tthis.cbLine = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label8 = new System.Windows.Forms.Label();\n\t\t\tthis.colorPicker1 = new Majorsilence.Reporting.RdlDesign.ColorPicker();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// lbDataSeries\n\t\t\t// \n\t\t\tthis.lbDataSeries.FormattingEnabled = true;\n\t\t\tresources.ApplyResources(this.lbDataSeries, \"lbDataSeries\");\n\t\t\tthis.lbDataSeries.Name = \"lbDataSeries\";\n\t\t\tthis.lbDataSeries.SelectedIndexChanged += new System.EventHandler(this.lbDataSeries_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// chkShowLabels\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkShowLabels, \"chkShowLabels\");\n\t\t\tthis.chkShowLabels.Name = \"chkShowLabels\";\n\t\t\tthis.chkShowLabels.UseVisualStyleBackColor = true;\n\t\t\tthis.chkShowLabels.CheckedChanged += new System.EventHandler(this.chkShowLabels_CheckedChanged);\n\t\t\t// \n\t\t\t// txtSeriesName\n\t\t\t// \n\t\t\tresources.ApplyResources(this.txtSeriesName, \"txtSeriesName\");\n\t\t\tthis.txtSeriesName.Name = \"txtSeriesName\";\n\t\t\tthis.txtSeriesName.TextChanged += new System.EventHandler(this.txtSeriesName_TextChanged);\n\t\t\t// \n\t\t\t// txtLabelValue\n\t\t\t// \n\t\t\tresources.ApplyResources(this.txtLabelValue, \"txtLabelValue\");\n\t\t\tthis.txtLabelValue.Name = \"txtLabelValue\";\n\t\t\tthis.txtLabelValue.TextChanged += new System.EventHandler(this.txtLabelValue_TextChanged);\n\t\t\t// \n\t\t\t// btnAdd\n\t\t\t// \n\t\t\tresources.ApplyResources(this.btnAdd, \"btnAdd\");\n\t\t\tthis.btnAdd.Name = \"btnAdd\";\n\t\t\tthis.btnAdd.UseVisualStyleBackColor = true;\n\t\t\tthis.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);\n\t\t\t// \n\t\t\t// btnDel\n\t\t\t// \n\t\t\tresources.ApplyResources(this.btnDel, \"btnDel\");\n\t\t\tthis.btnDel.Name = \"btnDel\";\n\t\t\tthis.btnDel.UseVisualStyleBackColor = true;\n\t\t\tthis.btnDel.Click += new System.EventHandler(this.btnDel_Click);\n\t\t\t// \n\t\t\t// btnLabelValue\n\t\t\t// \n\t\t\tresources.ApplyResources(this.btnLabelValue, \"btnLabelValue\");\n\t\t\tthis.btnLabelValue.Name = \"btnLabelValue\";\n\t\t\tthis.btnLabelValue.UseVisualStyleBackColor = true;\n\t\t\tthis.btnLabelValue.Click += new System.EventHandler(this.FunctionButtonClick);\n\t\t\t// \n\t\t\t// btnDataValue\n\t\t\t// \n\t\t\tresources.ApplyResources(this.btnDataValue, \"btnDataValue\");\n\t\t\tthis.btnDataValue.Name = \"btnDataValue\";\n\t\t\tthis.btnDataValue.UseVisualStyleBackColor = true;\n\t\t\tthis.btnDataValue.Click += new System.EventHandler(this.FunctionButtonClick);\n\t\t\t// \n\t\t\t// btnSeriesName\n\t\t\t// \n\t\t\tresources.ApplyResources(this.btnSeriesName, \"btnSeriesName\");\n\t\t\tthis.btnSeriesName.Name = \"btnSeriesName\";\n\t\t\tthis.btnSeriesName.UseVisualStyleBackColor = true;\n\t\t\tthis.btnSeriesName.Click += new System.EventHandler(this.FunctionButtonClick);\n\t\t\t// \n\t\t\t// txtDataValue\n\t\t\t// \n\t\t\tresources.ApplyResources(this.txtDataValue, \"txtDataValue\");\n\t\t\tthis.txtDataValue.Name = \"txtDataValue\";\n\t\t\tthis.txtDataValue.TextChanged += new System.EventHandler(this.txtDataValue_TextChanged);\n\t\t\t// \n\t\t\t// label4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label4, \"label4\");\n\t\t\tthis.label4.Name = \"label4\";\n\t\t\t// \n\t\t\t// cbPlotType\n\t\t\t// \n\t\t\tthis.cbPlotType.FormattingEnabled = true;\n\t\t\tthis.cbPlotType.Items.AddRange(new object[] {\n            resources.GetString(\"cbPlotType.Items\"),\n            resources.GetString(\"cbPlotType.Items1\")});\n\t\t\tresources.ApplyResources(this.cbPlotType, \"cbPlotType\");\n\t\t\tthis.cbPlotType.Name = \"cbPlotType\";\n\t\t\tthis.cbPlotType.SelectedIndexChanged += new System.EventHandler(this.cbPlotType_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// chkLeft\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkLeft, \"chkLeft\");\n\t\t\tthis.chkLeft.Name = \"chkLeft\";\n\t\t\tthis.chkLeft.TabStop = true;\n\t\t\tthis.chkLeft.UseVisualStyleBackColor = true;\n\t\t\tthis.chkLeft.CheckedChanged += new System.EventHandler(this.chkLeft_CheckedChanged);\n\t\t\t// \n\t\t\t// chkRight\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkRight, \"chkRight\");\n\t\t\tthis.chkRight.Name = \"chkRight\";\n\t\t\tthis.chkRight.TabStop = true;\n\t\t\tthis.chkRight.UseVisualStyleBackColor = true;\n\t\t\t// \n\t\t\t// label5\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label5, \"label5\");\n\t\t\tthis.label5.Name = \"label5\";\n\t\t\t// \n\t\t\t// btnUp\n\t\t\t// \n\t\t\tresources.ApplyResources(this.btnUp, \"btnUp\");\n\t\t\tthis.btnUp.Name = \"btnUp\";\n\t\t\tthis.btnUp.UseVisualStyleBackColor = true;\n\t\t\tthis.btnUp.Click += new System.EventHandler(this.btnUp_Click);\n\t\t\t// \n\t\t\t// btnDown\n\t\t\t// \n\t\t\tresources.ApplyResources(this.btnDown, \"btnDown\");\n\t\t\tthis.btnDown.Name = \"btnDown\";\n\t\t\tthis.btnDown.UseVisualStyleBackColor = true;\n\t\t\tthis.btnDown.Click += new System.EventHandler(this.btnDown_Click);\n\t\t\t// \n\t\t\t// txtX\n\t\t\t// \n\t\t\tresources.ApplyResources(this.txtX, \"txtX\");\n\t\t\tthis.txtX.Name = \"txtX\";\n\t\t\tthis.txtX.TextChanged += new System.EventHandler(this.txtX_TextChanged);\n\t\t\t// \n\t\t\t// label6\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label6, \"label6\");\n\t\t\tthis.label6.Name = \"label6\";\n\t\t\t// \n\t\t\t// btnX\n\t\t\t// \n\t\t\tresources.ApplyResources(this.btnX, \"btnX\");\n\t\t\tthis.btnX.Name = \"btnX\";\n\t\t\tthis.btnX.UseVisualStyleBackColor = true;\n\t\t\tthis.btnX.Click += new System.EventHandler(this.FunctionButtonClick);\n\t\t\t// \n\t\t\t// chkMarker\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkMarker, \"chkMarker\");\n\t\t\tthis.chkMarker.Name = \"chkMarker\";\n\t\t\tthis.chkMarker.UseVisualStyleBackColor = true;\n\t\t\tthis.chkMarker.CheckedChanged += new System.EventHandler(this.chkMarker_CheckedChanged);\n\t\t\t// \n\t\t\t// label7\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label7, \"label7\");\n\t\t\tthis.label7.Name = \"label7\";\n\t\t\t// \n\t\t\t// cbLine\n\t\t\t// \n\t\t\tthis.cbLine.FormattingEnabled = true;\n\t\t\tthis.cbLine.Items.AddRange(new object[] {\n            resources.GetString(\"cbLine.Items\"),\n            resources.GetString(\"cbLine.Items1\"),\n            resources.GetString(\"cbLine.Items2\"),\n            resources.GetString(\"cbLine.Items3\"),\n            resources.GetString(\"cbLine.Items4\")});\n\t\t\tresources.ApplyResources(this.cbLine, \"cbLine\");\n\t\t\tthis.cbLine.Name = \"cbLine\";\n\t\t\tthis.cbLine.SelectedIndexChanged += new System.EventHandler(this.cbLine_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// label8\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label8, \"label8\");\n\t\t\tthis.label8.Name = \"label8\";\n\t\t\t// \n\t\t\t// colorPicker1\n\t\t\t// \n\t\t\tthis.colorPicker1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;\n\t\t\tthis.colorPicker1.DropDownHeight = 1;\n\t\t\tthis.colorPicker1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tresources.ApplyResources(this.colorPicker1, \"colorPicker1\");\n\t\t\tthis.colorPicker1.FormattingEnabled = true;\n\t\t\tthis.colorPicker1.Name = \"colorPicker1\";\n\t\t\tthis.colorPicker1.SelectedIndexChanged += new System.EventHandler(this.colorPicker1_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// StaticSeriesCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n\t\t\tthis.Controls.Add(this.label8);\n\t\t\tthis.Controls.Add(this.colorPicker1);\n\t\t\tthis.Controls.Add(this.cbLine);\n\t\t\tthis.Controls.Add(this.label7);\n\t\t\tthis.Controls.Add(this.chkMarker);\n\t\t\tthis.Controls.Add(this.btnX);\n\t\t\tthis.Controls.Add(this.label6);\n\t\t\tthis.Controls.Add(this.txtX);\n\t\t\tthis.Controls.Add(this.btnDown);\n\t\t\tthis.Controls.Add(this.btnUp);\n\t\t\tthis.Controls.Add(this.label5);\n\t\t\tthis.Controls.Add(this.chkRight);\n\t\t\tthis.Controls.Add(this.chkLeft);\n\t\t\tthis.Controls.Add(this.cbPlotType);\n\t\t\tthis.Controls.Add(this.label4);\n\t\t\tthis.Controls.Add(this.txtDataValue);\n\t\t\tthis.Controls.Add(this.btnSeriesName);\n\t\t\tthis.Controls.Add(this.btnDataValue);\n\t\t\tthis.Controls.Add(this.btnLabelValue);\n\t\t\tthis.Controls.Add(this.btnDel);\n\t\t\tthis.Controls.Add(this.btnAdd);\n\t\t\tthis.Controls.Add(this.txtLabelValue);\n\t\t\tthis.Controls.Add(this.txtSeriesName);\n\t\t\tthis.Controls.Add(this.chkShowLabels);\n\t\t\tthis.Controls.Add(this.label3);\n\t\t\tthis.Controls.Add(this.label2);\n\t\t\tthis.Controls.Add(this.lbDataSeries);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Name = \"StaticSeriesCtl\";\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.ListBox lbDataSeries;\n        private System.Windows.Forms.Label label2;\n        private System.Windows.Forms.Label label3;\n        private System.Windows.Forms.CheckBox chkShowLabels;\n        private System.Windows.Forms.TextBox txtSeriesName;\n        private System.Windows.Forms.TextBox txtLabelValue;\n        private System.Windows.Forms.Button btnAdd;\n        private System.Windows.Forms.Button btnDel;\n        private System.Windows.Forms.Button btnLabelValue;\n        private System.Windows.Forms.Button btnDataValue;\n        private System.Windows.Forms.Button btnSeriesName;\n        private System.Windows.Forms.TextBox txtDataValue;\n        private System.Windows.Forms.Label label4;\n        private System.Windows.Forms.ComboBox cbPlotType;\n        private System.Windows.Forms.RadioButton chkLeft;\n        private System.Windows.Forms.RadioButton chkRight;\n        private System.Windows.Forms.Label label5;\n        private System.Windows.Forms.Button btnUp;\n        private System.Windows.Forms.Button btnDown;\n        private System.Windows.Forms.TextBox txtX;\n        private System.Windows.Forms.Label label6;\n        private System.Windows.Forms.Button btnX;\n        private System.Windows.Forms.CheckBox chkMarker;\n        private System.Windows.Forms.Label label7;\n        private System.Windows.Forms.ComboBox cbLine;\n        private ColorPicker colorPicker1;\n        private System.Windows.Forms.Label label8;\n    }\n}\n"
  },
  {
    "path": "RdlDesign/StaticSeriesCtl.cs",
    "content": "\n// written by GJL & AJM\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\n\n//This NEW class allows the modifying of static series on a chart. GJL & AJM\n\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    public partial class StaticSeriesCtl : UserControl, IProperty\n     {\n        private DesignXmlDraw _Draw;\n        private List<XmlNode> _ReportItems;\n        private SeriesItem si;\n        public bool ShowMe;\n\n        internal StaticSeriesCtl(DesignXmlDraw dxDraw, List<XmlNode> ris)\n        {\n            _Draw = dxDraw;\n            _ReportItems = ris;\n            InitializeComponent();\n            InitValues();\n        }                \n        \n        public StaticSeriesCtl()\n        {\n            InitializeComponent();\n        }\n\n        public bool IsValid()\n        {\n            return true;\n        }\n\n        public void Apply()\n        {\n                XmlNode node = _ReportItems[0];\n                XmlNode ncds = DesignXmlDraw.FindNextInHierarchy(node, \"SeriesGroupings\", \"SeriesGrouping\",\"StaticSeries\");\n                XmlNode ncdc = DesignXmlDraw.FindNextInHierarchy(node, \"ChartData\");\n                XmlNode nTyp = DesignXmlDraw.FindNextInHierarchy(node, \"Type\");              \n            \n                ncds.InnerText = \"\";\n                ncdc.InnerText = \"\";\n           \n            foreach (SeriesItem si in lbDataSeries.Items)\n            {              \n                 //Write the staticMember fields \n                ncds.InnerXml += \"<StaticMember><Label>\" + si.Name + \"</Label><Value>\" + si.Data.Replace(\"<\",\"&lt;\").Replace(\">\",\"&gt;\") + \"</Value></StaticMember>\";   \n        \n                 //Write the chartSeries fields \n                //if we have a scatter plot we need to do two datavalues!\n                if (nTyp.InnerXml.Equals(\"Scatter\"))\n                {\n                    ncdc.InnerXml += \"<ChartSeries><fyi:Color xmlns:fyi=\\\"http://www.fyireporting.com/schemas\\\">\" + si.Colour + \"</fyi:Color><PlotType>\" + si.PlotType + \"</PlotType><fyi:NoMarker xmlns:fyi=\\\"http://www.fyireporting.com/schemas\\\">\" + si.NoMarker + \"</fyi:NoMarker><fyi:LineSize xmlns:fyi=\\\"http://www.fyireporting.com/schemas\\\">\" + si.LineSize + \"</fyi:LineSize><YAxis>\" + si.YAxis +\n                        \"</YAxis><DataPoints><DataPoint><DataValues><DataValue><Value>\"\n                        + si.Xplot.Replace(\"<\", \"&lt;\").Replace(\">\", \"&gt;\") + \"</Value></DataValue><DataValue><Value>\" // 20022008 AJM GJL\n                        + si.Data.Replace(\"<\", \"&lt;\").Replace(\">\", \"&gt;\") + \"</Value></DataValue></DataValues><DataLabel><Value>\" + si.Label.Replace(\"<\", \"&lt;\").Replace(\">\", \"&gt;\") + \"</Value><Visible>\" + si.ShowLabel.ToString()\n                        + \"</Visible></DataLabel></DataPoint></DataPoints></ChartSeries>\";\n                }\n                else\n                {\n                    ncdc.InnerXml += \"<ChartSeries><fyi:Color xmlns:fyi=\\\"http://www.fyireporting.com/schemas\\\">\" + si.Colour + \"</fyi:Color><PlotType>\" + si.PlotType + \"</PlotType><fyi:NoMarker xmlns:fyi=\\\"http://www.fyireporting.com/schemas\\\">\" + si.NoMarker + \"</fyi:NoMarker><fyi:LineSize xmlns:fyi=\\\"http://www.fyireporting.com/schemas\\\">\" + si.LineSize + \"</fyi:LineSize><YAxis>\" + si.YAxis + \"</YAxis><DataPoints><DataPoint><DataValues><DataValue><Value>\" // 20022008 AJM GJL\n                        + si.Data.Replace(\"<\", \"&lt;\").Replace(\">\", \"&gt;\") + \"</Value></DataValue></DataValues><DataLabel><Value>\" + si.Label.Replace(\"<\", \"&lt;\").Replace(\">\", \"&gt;\") + \"</Value><Visible>\" + si.ShowLabel.ToString()\n                        + \"</Visible></DataLabel></DataPoint></DataPoints></ChartSeries>\";\n                }\n            }\n        }\n\n        private void FunctionButtonClick(Object sender, EventArgs e)     \n        {\n            Button myButton = (Button)sender;\n            switch (myButton.Name)\n            {\n                case (\"btnSeriesName\"):\n                    functionBox(txtSeriesName);\n                    break;\n                case (\"btnDataValue\"):\n                    functionBox(txtDataValue);\n                    break;\n                case (\"btnLabelValue\"):\n                    functionBox(txtLabelValue);\n                    break;\n                case (\"btnX\"):\n                    functionBox(txtX);\n                    break;\n            }\n        }\n        \n           private void functionBox(TextBox txt)\n           {\n                DialogExprEditor ee = new DialogExprEditor(_Draw, txt.Text,_ReportItems[0] , false);\n                try\n                {\n                    if (ee.ShowDialog() == DialogResult.OK)\n                    {                 \n                        txt.Text = ee.Expression;\n                    }\n\n                }\n            finally\n            {\n                ee.Dispose();\n            }\n            return;\n           }\n\n        private void chkShowLabels_CheckedChanged(object sender, EventArgs e)\n        {\n            txtLabelValue.Enabled = btnLabelValue.Enabled = chkShowLabels.Checked;\n            if (lbDataSeries.SelectedIndex > -1)\n            {              \n                si.ShowLabel = chkShowLabels.Checked;\n            }\n        }\n\t\t//GJL\n        private void chkMarker_CheckedChanged(object sender, EventArgs e)\n        {\n            if (lbDataSeries.SelectedIndex > -1)\n            {\n                si.NoMarker = !chkMarker.Checked;\n            }\n        }\n\n        private void cbLine_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            if (cbLine.SelectedIndex > -1)\n            {\n                si.LineSize = (String)cbLine.Items[cbLine.SelectedIndex];\n            }\n        }\n\n        private void colorPicker1_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            if (colorPicker1.SelectedIndex > -1)\n            {\n              si.Colour =colorPicker1.SelectedItem.ToString();\n                               \n            }\n        }      \n\n       \n\n        private void InitValues()\n        {\n            XmlNode node = _ReportItems[0];\n            XmlNode nTyp = DesignXmlDraw.FindNextInHierarchy(node, \"Type\");\n            XmlNode ncds = DesignXmlDraw.FindNextInHierarchy(node, \"SeriesGroupings\",\"SeriesGrouping\",\"StaticSeries\");\n            ShowMe = ncds != null;\n\n            txtX.Enabled = btnX.Enabled = nTyp.InnerXml == \"Scatter\";\n\n            if (ShowMe)\n            {                \n                XmlNode cd;\n\n                XmlNode cdo = DesignXmlDraw.FindNextInHierarchy(node, \"ChartData\");\n                int i = 0;\n\n                foreach (XmlNode ncd in ncds.ChildNodes)\n                {\n                    cd = cdo.ChildNodes[i];\n                    XmlNode ndv = DesignXmlDraw.FindNextInHierarchy(ncd,\"Label\");\n                    String nameValue = ndv == null? \"\": ndv.InnerText;\n\n                    XmlNode ndv2 = DesignXmlDraw.FindNextInHierarchy(ncd,\"Value\");\n                    String nameStaticValue = ndv2 == null ? \"\" : ndv2.InnerText;\n\n                    //GJL 18092008\n                    XmlNode cl = DesignXmlDraw.FindNextInHierarchy(cd, \"fyi:Color\");\n                    if (cl==null){cl = DesignXmlDraw.FindNextInHierarchy(cd, \"Colour\");}\n                    String Colour;\n                    if (cl == null)\n                    {\n                        Colour = \"\";\n                    }\n                    else\n                    {\n                        Colour = cl.InnerText;\n                    }\n\n                    XmlNode pt = DesignXmlDraw.FindNextInHierarchy(cd, \"PlotType\");\n                    String PlotValue;\n                    if (pt == null) \n                    {\n                        PlotValue = \"\";\n                    }\n                    else\n                    {\n                        PlotValue = pt.InnerText;\n                    }\n\t\t\t\t\t//GJL 14082008\n                    XmlNode Nm = DesignXmlDraw.FindNextInHierarchy(cd, \"fyi:NoMarker\");\n                    if (Nm == null) {Nm = DesignXmlDraw.FindNextInHierarchy(cd, \"NoMarker\");}\n                    bool NoMarker;\n                    if (Nm == null)\n                    {\n                        NoMarker = false;\n                    }\n                    else\n                    {\n                        NoMarker = Boolean.Parse(Nm.InnerText);\n                    }\n\n                    XmlNode Ls = DesignXmlDraw.FindNextInHierarchy(cd, \"fyi:LineSize\");\n                    if (Ls == null) Ls = DesignXmlDraw.FindNextInHierarchy(cd, \"LineSize\");\n                    String LineSize;\n                    if (Ls== null)\n                    {\n                        LineSize = \"Regular\";\n                    }\n                    else\n                    {\n                        LineSize = Ls.InnerText;\n                    }\n\n                    // 20022008 AJM GJL\n                    XmlNode ya = DesignXmlDraw.FindNextInHierarchy(cd, \"YAxis\");\n                    String Yaxis;\n                    if (ya == null)\n                    { \n                        Yaxis = \"Left\"; \n                    }\n                    else\n                    { \n                        Yaxis = ya.InnerText;\n                    }\n\n                    XmlNode dv = DesignXmlDraw.FindNextInHierarchy(cd, \"DataPoints\",\"DataPoint\",\"DataValues\",\"DataValue\",\"Value\");\n                    String dataValue = dv.InnerText;\n\n                    XmlNode lv = DesignXmlDraw.FindNextInHierarchy(cd, \"DataPoints\",\"DataPoint\",\"DataLabel\",\"Visible\");\n                    bool showLabel = false;\n                    if (lv != null)\n                    {\n                        showLabel = lv.InnerText.ToUpper().Equals(\"TRUE\");\n                    }              \n\n                    XmlNode lva = DesignXmlDraw.FindNextInHierarchy(cd, \"DataPoints\",\"DataPoint\",\"DataLabel\",\"Value\");\n                    String labelValue = \"\";\n                    if (lva != null)\n                    {\n                        labelValue = lva.InnerText;\n                    }               \n\n                    SeriesItem si = new SeriesItem();\n                    si.Name = nameValue;\n                    si.Label = labelValue;\n                    si.ShowLabel = showLabel;\n                    si.Data = nameStaticValue;\n                    si.PlotType = PlotValue;\n                    si.YAxis = Yaxis;// 20022008 AJM GJL\n                    si.Xplot = dataValue; //Only for XY plots\n                    si.NoMarker = NoMarker;//0206208 GJL\n                    si.LineSize = LineSize;\n                    si.Colour = Colour;\n\n\n                    lbDataSeries.Items.Add(si);\n                    \n                    i++;\n                }\n            }  \n        }\n\n        private void btnDel_Click(object sender, EventArgs e)\n        {\n            if (lbDataSeries.SelectedIndex >= 0)\n            {\n                lbDataSeries.Items.RemoveAt(lbDataSeries.SelectedIndex);\n                txtDataValue.Text = \"\";\n                txtLabelValue.Text = \"\";\n                txtSeriesName.Text = \"\";\n                chkMarker.Checked = true;\n                chkShowLabels.Checked = false;\n              \n            }\n        }\n\n        private void btnAdd_Click(object sender, EventArgs e)\n        {\n            SeriesItem si = new SeriesItem();\n            si.Data = \"\";\n            si.Name = \"<New Series>\";\n            si.ShowLabel = false;\n            si.Label = \"\";\n            si.PlotType = \"Auto\";\n            si.NoMarker = false;\n            si.LineSize = \"Regular\";\n            si.YAxis = \"Left\";// 20022008 AJM GJL\n            si.Colour = \"\";\n            lbDataSeries.Items.Add(si);\n            lbDataSeries.SelectedItem = si;\n        }\n\n        private class SeriesItem\n        {\n            public String Data;\n            public String Name;\n            public bool ShowLabel;\n            public String Label;\n            public String PlotType;\n            public String YAxis;// 20022008 AJM GJL\n            public String Xplot; //030308 GJL\n            public bool NoMarker;//020608 GJL\n            public String LineSize = \"Regular\"; //260608 GJL\n            public String Colour;\n            \n            public override String ToString()\n            {\n                return Name;\n            }\n        }\n\n        private void txtSeriesName_TextChanged(object sender, EventArgs e)\n        {\n            if (lbDataSeries.SelectedIndex > -1)\n            { \n                \n                si.Name = txtSeriesName.Text;\n                int i = lbDataSeries.Items.IndexOf(si);\n                lbDataSeries.Items.Remove(si);\n                lbDataSeries.Items.Insert(i,si);\n                lbDataSeries.SelectedItem = si;\n            }\n           \n        }\n\n        private void txtDataValue_TextChanged(object sender, EventArgs e)\n        {\n            if (lbDataSeries.SelectedIndex > -1)\n            {              \n                si.Data = txtDataValue.Text;\n            }\n        }\n\n        private void txtLabelValue_TextChanged(object sender, EventArgs e)\n        {\n            if (lbDataSeries.SelectedIndex > -1)\n            {              \n                si.Label = txtLabelValue.Text;\n            }\n        }\n\n        private void lbDataSeries_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            if (lbDataSeries.SelectedIndex > -1)\n            {\n                si = (SeriesItem)lbDataSeries.SelectedItem;\n                txtDataValue.Text = si.Data;\n                txtLabelValue.Text = si.Label;\n                txtSeriesName.Text = si.Name;\n                chkShowLabels.Checked = si.ShowLabel;\n                cbPlotType.Text = si.PlotType;\n                chkMarker.Checked = !si.NoMarker;\n                cbLine.Text = si.LineSize;\n                if (txtX.Enabled)\n                {\n                    txtX.Text = si.Xplot;\n                }\n                if (si.YAxis == \"Right\")\n                { \n                    chkRight.Checked = true; \n                }\n                else\n                { \n                    chkLeft.Checked = true; \n                }\n                if (!String.IsNullOrEmpty(si.Colour))\n                {\n                    colorPicker1.SelectedItem = si.Colour;\n                    foreach (string s in colorPicker1.Items)\n                    {\n                        if (s.ToLower().Equals(si.Colour.ToLower()))\n                        { colorPicker1.SelectedItem = s; break; } \n                    }\n                }\n            }                 \n        }\n\n        private void cbPlotType_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            if (lbDataSeries.SelectedIndex > -1)\n            {\n                si.PlotType = cbPlotType.Text;\n            }\n        }\n\t\t// 20022008 AJM GJL\n        private void chkLeft_CheckedChanged(object sender, EventArgs e)\n        {\n            chkRight.Checked = !chkLeft.Checked;\n            if (lbDataSeries.SelectedIndex > -1)\n            {              \n                if (chkRight.Checked)\n                { si.YAxis = \"Right\"; }\n                else\n                { si.YAxis = \"Left\"; }\n            }\n        }\n\n        private void btnDown_Click(object sender, EventArgs e)\n        {\n            int index = lbDataSeries.SelectedIndex;\n            if (index < 0 || index + 1 == lbDataSeries.Items.Count)\n                return;\n\n            object postname = lbDataSeries.Items[index + 1];\n            lbDataSeries.Items.RemoveAt(index + 1);\n            lbDataSeries.Items.Insert(index, postname);\n        }\n\n        private void btnUp_Click(object sender, EventArgs e)\n        {\n            int index = lbDataSeries.SelectedIndex;\n            if (index <= 0)\n                return;\n\n            object prename = lbDataSeries.Items[index - 1];\n            lbDataSeries.Items.RemoveAt(index - 1);\n            lbDataSeries.Items.Insert(index, prename);\n        }\n\n        private void txtX_TextChanged(object sender, EventArgs e)\n        {\n            if (lbDataSeries.SelectedIndex > -1)\n            {\n                si.Xplot = txtX.Text;\n            }\n        }\n       \n    }\n}\n"
  },
  {
    "path": "RdlDesign/StaticSeriesCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label1.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>13, 12</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>62, 13</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Data Series</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>27</value>\n  </data>\n  <data name=\"lbDataSeries.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 28</value>\n  </data>\n  <data name=\"lbDataSeries.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>120, 134</value>\n  </data>\n  <data name=\"lbDataSeries.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;lbDataSeries.Name\" xml:space=\"preserve\">\n    <value>lbDataSeries</value>\n  </data>\n  <data name=\"&gt;&gt;lbDataSeries.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lbDataSeries.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lbDataSeries.ZOrder\" xml:space=\"preserve\">\n    <value>26</value>\n  </data>\n  <data name=\"label2.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>139, 12</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>67, 13</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Series Name</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>25</value>\n  </data>\n  <data name=\"label3.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>142, 51</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>60, 13</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Data Value</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>24</value>\n  </data>\n  <data name=\"chkShowLabels.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"chkShowLabels.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>145, 132</value>\n  </data>\n  <data name=\"chkShowLabels.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>93, 17</value>\n  </data>\n  <data name=\"chkShowLabels.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"chkShowLabels.Text\" xml:space=\"preserve\">\n    <value>Show Labels?</value>\n  </data>\n  <data name=\"&gt;&gt;chkShowLabels.Name\" xml:space=\"preserve\">\n    <value>chkShowLabels</value>\n  </data>\n  <data name=\"&gt;&gt;chkShowLabels.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkShowLabels.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;chkShowLabels.ZOrder\" xml:space=\"preserve\">\n    <value>23</value>\n  </data>\n  <data name=\"txtSeriesName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>142, 28</value>\n  </data>\n  <data name=\"txtSeriesName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>184, 20</value>\n  </data>\n  <data name=\"txtSeriesName.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;txtSeriesName.Name\" xml:space=\"preserve\">\n    <value>txtSeriesName</value>\n  </data>\n  <data name=\"&gt;&gt;txtSeriesName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;txtSeriesName.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;txtSeriesName.ZOrder\" xml:space=\"preserve\">\n    <value>22</value>\n  </data>\n  <data name=\"txtLabelValue.Enabled\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"txtLabelValue.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>142, 152</value>\n  </data>\n  <data name=\"txtLabelValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>184, 20</value>\n  </data>\n  <data name=\"txtLabelValue.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;txtLabelValue.Name\" xml:space=\"preserve\">\n    <value>txtLabelValue</value>\n  </data>\n  <data name=\"&gt;&gt;txtLabelValue.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;txtLabelValue.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;txtLabelValue.ZOrder\" xml:space=\"preserve\">\n    <value>21</value>\n  </data>\n  <data name=\"btnAdd.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>86, 168</value>\n  </data>\n  <data name=\"btnAdd.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>50, 31</value>\n  </data>\n  <data name=\"btnAdd.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"btnAdd.Text\" xml:space=\"preserve\">\n    <value>New</value>\n  </data>\n  <data name=\"&gt;&gt;btnAdd.Name\" xml:space=\"preserve\">\n    <value>btnAdd</value>\n  </data>\n  <data name=\"&gt;&gt;btnAdd.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;btnAdd.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;btnAdd.ZOrder\" xml:space=\"preserve\">\n    <value>20</value>\n  </data>\n  <data name=\"btnDel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 168</value>\n  </data>\n  <data name=\"btnDel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>50, 31</value>\n  </data>\n  <data name=\"btnDel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"btnDel.Text\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"&gt;&gt;btnDel.Name\" xml:space=\"preserve\">\n    <value>btnDel</value>\n  </data>\n  <data name=\"&gt;&gt;btnDel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;btnDel.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;btnDel.ZOrder\" xml:space=\"preserve\">\n    <value>19</value>\n  </data>\n  <data name=\"btnLabelValue.Enabled\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"btnLabelValue.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"btnLabelValue.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>332, 152</value>\n  </data>\n  <data name=\"btnLabelValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 21</value>\n  </data>\n  <data name=\"btnLabelValue.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>21</value>\n  </data>\n  <data name=\"btnLabelValue.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;btnLabelValue.Name\" xml:space=\"preserve\">\n    <value>btnLabelValue</value>\n  </data>\n  <data name=\"&gt;&gt;btnLabelValue.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;btnLabelValue.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;btnLabelValue.ZOrder\" xml:space=\"preserve\">\n    <value>18</value>\n  </data>\n  <data name=\"btnDataValue.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"btnDataValue.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>332, 67</value>\n  </data>\n  <data name=\"btnDataValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 21</value>\n  </data>\n  <data name=\"btnDataValue.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>22</value>\n  </data>\n  <data name=\"btnDataValue.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;btnDataValue.Name\" xml:space=\"preserve\">\n    <value>btnDataValue</value>\n  </data>\n  <data name=\"&gt;&gt;btnDataValue.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;btnDataValue.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;btnDataValue.ZOrder\" xml:space=\"preserve\">\n    <value>17</value>\n  </data>\n  <data name=\"btnSeriesName.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"btnSeriesName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>332, 27</value>\n  </data>\n  <data name=\"btnSeriesName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 21</value>\n  </data>\n  <data name=\"btnSeriesName.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>23</value>\n  </data>\n  <data name=\"btnSeriesName.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;btnSeriesName.Name\" xml:space=\"preserve\">\n    <value>btnSeriesName</value>\n  </data>\n  <data name=\"&gt;&gt;btnSeriesName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;btnSeriesName.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;btnSeriesName.ZOrder\" xml:space=\"preserve\">\n    <value>16</value>\n  </data>\n  <data name=\"txtDataValue.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>142, 67</value>\n  </data>\n  <data name=\"txtDataValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>184, 20</value>\n  </data>\n  <data name=\"txtDataValue.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>24</value>\n  </data>\n  <data name=\"&gt;&gt;txtDataValue.Name\" xml:space=\"preserve\">\n    <value>txtDataValue</value>\n  </data>\n  <data name=\"&gt;&gt;txtDataValue.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;txtDataValue.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;txtDataValue.ZOrder\" xml:space=\"preserve\">\n    <value>15</value>\n  </data>\n  <data name=\"label4.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>142, 175</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>84, 13</value>\n  </data>\n  <data name=\"label4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>25</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Series Plot Type</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Name\" xml:space=\"preserve\">\n    <value>label4</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label4.ZOrder\" xml:space=\"preserve\">\n    <value>14</value>\n  </data>\n  <data name=\"cbPlotType.Items\" xml:space=\"preserve\">\n    <value>Auto</value>\n  </data>\n  <data name=\"cbPlotType.Items1\" xml:space=\"preserve\">\n    <value>Line</value>\n  </data>\n  <data name=\"cbPlotType.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>142, 191</value>\n  </data>\n  <data name=\"cbPlotType.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>134, 21</value>\n  </data>\n  <data name=\"cbPlotType.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>26</value>\n  </data>\n  <data name=\"&gt;&gt;cbPlotType.Name\" xml:space=\"preserve\">\n    <value>cbPlotType</value>\n  </data>\n  <data name=\"&gt;&gt;cbPlotType.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbPlotType.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbPlotType.ZOrder\" xml:space=\"preserve\">\n    <value>13</value>\n  </data>\n  <data name=\"chkLeft.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"chkLeft.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>246, 229</value>\n  </data>\n  <data name=\"chkLeft.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>43, 17</value>\n  </data>\n  <data name=\"chkLeft.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>27</value>\n  </data>\n  <data name=\"chkLeft.Text\" xml:space=\"preserve\">\n    <value>Left</value>\n  </data>\n  <data name=\"&gt;&gt;chkLeft.Name\" xml:space=\"preserve\">\n    <value>chkLeft</value>\n  </data>\n  <data name=\"&gt;&gt;chkLeft.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkLeft.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;chkLeft.ZOrder\" xml:space=\"preserve\">\n    <value>12</value>\n  </data>\n  <data name=\"chkRight.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"chkRight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>309, 229</value>\n  </data>\n  <data name=\"chkRight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>50, 17</value>\n  </data>\n  <data name=\"chkRight.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>28</value>\n  </data>\n  <data name=\"chkRight.Text\" xml:space=\"preserve\">\n    <value>Right</value>\n  </data>\n  <data name=\"&gt;&gt;chkRight.Name\" xml:space=\"preserve\">\n    <value>chkRight</value>\n  </data>\n  <data name=\"&gt;&gt;chkRight.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkRight.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;chkRight.ZOrder\" xml:space=\"preserve\">\n    <value>11</value>\n  </data>\n  <data name=\"label5.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label5.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>280, 215</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>36, 13</value>\n  </data>\n  <data name=\"label5.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>29</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>Y Axis</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Name\" xml:space=\"preserve\">\n    <value>label5</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label5.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"btnUp.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 28</value>\n  </data>\n  <data name=\"btnUp.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>17, 23</value>\n  </data>\n  <data name=\"btnUp.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>30</value>\n  </data>\n  <data name=\"btnUp.Text\" xml:space=\"preserve\">\n    <value>^</value>\n  </data>\n  <data name=\"&gt;&gt;btnUp.Name\" xml:space=\"preserve\">\n    <value>btnUp</value>\n  </data>\n  <data name=\"&gt;&gt;btnUp.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;btnUp.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;btnUp.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"btnDown.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 139</value>\n  </data>\n  <data name=\"btnDown.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>17, 23</value>\n  </data>\n  <data name=\"btnDown.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>31</value>\n  </data>\n  <data name=\"btnDown.Text\" xml:space=\"preserve\">\n    <value>v</value>\n  </data>\n  <data name=\"&gt;&gt;btnDown.Name\" xml:space=\"preserve\">\n    <value>btnDown</value>\n  </data>\n  <data name=\"&gt;&gt;btnDown.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;btnDown.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;btnDown.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"txtX.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>142, 106</value>\n  </data>\n  <data name=\"txtX.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>184, 20</value>\n  </data>\n  <data name=\"txtX.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>32</value>\n  </data>\n  <data name=\"&gt;&gt;txtX.Name\" xml:space=\"preserve\">\n    <value>txtX</value>\n  </data>\n  <data name=\"&gt;&gt;txtX.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;txtX.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;txtX.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"label6.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label6.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>142, 90</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>106, 13</value>\n  </data>\n  <data name=\"label6.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>33</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>X Value(Scatter only)</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Name\" xml:space=\"preserve\">\n    <value>label6</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label6.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"btnX.Enabled\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"btnX.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"btnX.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>332, 103</value>\n  </data>\n  <data name=\"btnX.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 21</value>\n  </data>\n  <data name=\"btnX.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>34</value>\n  </data>\n  <data name=\"btnX.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;btnX.Name\" xml:space=\"preserve\">\n    <value>btnX</value>\n  </data>\n  <data name=\"&gt;&gt;btnX.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;btnX.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;btnX.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"chkMarker.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"chkMarker.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>244, 132</value>\n  </data>\n  <data name=\"chkMarker.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 17</value>\n  </data>\n  <data name=\"chkMarker.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>35</value>\n  </data>\n  <data name=\"chkMarker.Text\" xml:space=\"preserve\">\n    <value>Show Markers?</value>\n  </data>\n  <data name=\"&gt;&gt;chkMarker.Name\" xml:space=\"preserve\">\n    <value>chkMarker</value>\n  </data>\n  <data name=\"&gt;&gt;chkMarker.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkMarker.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;chkMarker.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"label7.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label7.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>286, 175</value>\n  </data>\n  <data name=\"label7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>58, 13</value>\n  </data>\n  <data name=\"label7.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>36</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Line Width</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Name\" xml:space=\"preserve\">\n    <value>label7</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label7.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"cbLine.Items\" xml:space=\"preserve\">\n    <value>Small</value>\n  </data>\n  <data name=\"cbLine.Items1\" xml:space=\"preserve\">\n    <value>Regular</value>\n  </data>\n  <data name=\"cbLine.Items2\" xml:space=\"preserve\">\n    <value>Large</value>\n  </data>\n  <data name=\"cbLine.Items3\" xml:space=\"preserve\">\n    <value>Extra Large</value>\n  </data>\n  <data name=\"cbLine.Items4\" xml:space=\"preserve\">\n    <value>Super Size</value>\n  </data>\n  <data name=\"cbLine.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>283, 191</value>\n  </data>\n  <data name=\"cbLine.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 21</value>\n  </data>\n  <data name=\"cbLine.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>37</value>\n  </data>\n  <data name=\"&gt;&gt;cbLine.Name\" xml:space=\"preserve\">\n    <value>cbLine</value>\n  </data>\n  <data name=\"&gt;&gt;cbLine.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbLine.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbLine.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"label8.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label8.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>142, 215</value>\n  </data>\n  <data name=\"label8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>69, 13</value>\n  </data>\n  <data name=\"label8.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>39</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Series Colour</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Name\" xml:space=\"preserve\">\n    <value>label8</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label8.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"colorPicker1.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"colorPicker1.IntegralHeight\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"colorPicker1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>142, 236</value>\n  </data>\n  <data name=\"colorPicker1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>98, 21</value>\n  </data>\n  <data name=\"colorPicker1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>38</value>\n  </data>\n  <data name=\"&gt;&gt;colorPicker1.Name\" xml:space=\"preserve\">\n    <value>colorPicker1</value>\n  </data>\n  <data name=\"&gt;&gt;colorPicker1.Type\" xml:space=\"preserve\">\n    <value>fyiReporting.RdlDesign.ColorPicker, RdlDesigner, Version=4.5.5088.20753, Culture=neutral, PublicKeyToken=null</value>\n  </data>\n  <data name=\"&gt;&gt;colorPicker1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;colorPicker1.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <data name=\"$this.AutoScaleDimensions\" type=\"System.Drawing.SizeF, System.Drawing\">\n    <value>6, 13</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>361, 260</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>StaticSeriesCtl</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/StaticSeriesCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label1.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>78, 13</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Серия данных</value>\n  </data>\n  <data name=\"label2.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>57, 13</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Название</value>\n  </data>\n  <data name=\"label3.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>95, 13</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Значение данных</value>\n  </data>\n  <data name=\"chkShowLabels.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"chkShowLabels.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>129, 17</value>\n  </data>\n  <data name=\"chkShowLabels.Text\" xml:space=\"preserve\">\n    <value>Показывать метки?</value>\n  </data>\n  <data name=\"txtSeriesName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 20</value>\n  </data>\n  <data name=\"txtLabelValue.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>142, 178</value>\n  </data>\n  <data name=\"txtLabelValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 20</value>\n  </data>\n  <data name=\"btnAdd.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"btnAdd.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>76, 168</value>\n  </data>\n  <data name=\"btnAdd.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>60, 22</value>\n  </data>\n  <data name=\"btnAdd.Text\" xml:space=\"preserve\">\n    <value>Создать</value>\n  </data>\n  <data name=\"btnDel.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"btnDel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>60, 22</value>\n  </data>\n  <data name=\"btnDel.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"btnLabelValue.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"btnLabelValue.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>366, 180</value>\n  </data>\n  <data name=\"btnDataValue.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"btnDataValue.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>366, 69</value>\n  </data>\n  <data name=\"btnSeriesName.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"btnSeriesName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>366, 29</value>\n  </data>\n  <data name=\"txtDataValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 20</value>\n  </data>\n  <data name=\"label4.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>142, 201</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>68, 13</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Тип участка</value>\n  </data>\n  <data name=\"cbPlotType.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>142, 217</value>\n  </data>\n  <data name=\"chkLeft.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"chkLeft.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>243, 263</value>\n  </data>\n  <data name=\"chkLeft.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 17</value>\n  </data>\n  <data name=\"chkLeft.Text\" xml:space=\"preserve\">\n    <value>Слева</value>\n  </data>\n  <data name=\"chkRight.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"chkRight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>305, 262</value>\n  </data>\n  <data name=\"chkRight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>62, 17</value>\n  </data>\n  <data name=\"chkRight.Text\" xml:space=\"preserve\">\n    <value>Справа</value>\n  </data>\n  <data name=\"label5.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label5.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>280, 244</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>37, 13</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>Ось Y</value>\n  </data>\n  <data name=\"btnUp.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"btnDown.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"txtX.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 20</value>\n  </data>\n  <data name=\"label6.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>157, 13</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Значение X (только точечная)</value>\n  </data>\n  <data name=\"btnX.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"btnX.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>366, 105</value>\n  </data>\n  <data name=\"chkMarker.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"chkMarker.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>145, 155</value>\n  </data>\n  <data name=\"chkMarker.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>144, 17</value>\n  </data>\n  <data name=\"chkMarker.Text\" xml:space=\"preserve\">\n    <value>Показывать маркеры?</value>\n  </data>\n  <data name=\"label7.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label7.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>280, 201</value>\n  </data>\n  <data name=\"label7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>79, 13</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Ширина линии</value>\n  </data>\n  <data name=\"cbLine.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>283, 217</value>\n  </data>\n  <data name=\"label8.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label8.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>142, 244</value>\n  </data>\n  <data name=\"label8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 13</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Цвет</value>\n  </data>\n  <data name=\"colorPicker1.Items700\" xml:space=\"preserve\">\n    <value>Aliceblue</value>\n  </data>\n  <data name=\"colorPicker1.Items701\" xml:space=\"preserve\">\n    <value>Antiquewhite</value>\n  </data>\n  <data name=\"colorPicker1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>142, 262</value>\n  </data>\n  <data name=\"colorPicker1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>95, 21</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>400, 290</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/StyleBorderCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.Globalization;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for StyleCtl.\n\t/// </summary>\n\tinternal class StyleBorderCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n        private List<XmlNode> _ReportItems;\n\t\tprivate DesignXmlDraw _Draw;\n\t\t// flags for controlling whether syntax changed for a particular property\n\t\tprivate bool fStyleDefault, fStyleLeft, fStyleRight, fStyleTop, fStyleBottom;\n\t\tprivate bool fColorDefault, fColorLeft, fColorRight, fColorTop, fColorBottom;\n\t\tprivate bool fWidthDefault, fWidthLeft, fWidthRight, fWidthTop, fWidthBottom;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\tprivate System.Windows.Forms.Label label6;\n\t\tprivate System.Windows.Forms.Label label7;\n\t\tprivate System.Windows.Forms.ComboBox cbStyleLeft;\n\t\tprivate System.Windows.Forms.Label label8;\n\t\tprivate System.Windows.Forms.ComboBox cbStyleBottom;\n\t\tprivate System.Windows.Forms.ComboBox cbStyleTop;\n\t\tprivate System.Windows.Forms.ComboBox cbStyleRight;\n\t\tprivate System.Windows.Forms.Button bColorLeft;\n\t\tprivate System.Windows.Forms.ComboBox cbColorLeft;\n\t\tprivate System.Windows.Forms.Button bColorRight;\n\t\tprivate System.Windows.Forms.ComboBox cbColorRight;\n\t\tprivate System.Windows.Forms.Button bColorTop;\n\t\tprivate System.Windows.Forms.ComboBox cbColorTop;\n\t\tprivate System.Windows.Forms.Button bColorBottom;\n\t\tprivate System.Windows.Forms.ComboBox cbColorBottom;\n\t\tprivate System.Windows.Forms.TextBox tbWidthLeft;\n\t\tprivate System.Windows.Forms.TextBox tbWidthRight;\n\t\tprivate System.Windows.Forms.TextBox tbWidthTop;\n\t\tprivate System.Windows.Forms.TextBox tbWidthBottom;\n\t\tprivate System.Windows.Forms.TextBox tbWidthDefault;\n\t\tprivate System.Windows.Forms.Button bColorDefault;\n\t\tprivate System.Windows.Forms.ComboBox cbColorDefault;\n\t\tprivate System.Windows.Forms.ComboBox cbStyleDefault;\n\t\tprivate System.Windows.Forms.Label lLeft;\n\t\tprivate System.Windows.Forms.Label lBottom;\n\t\tprivate System.Windows.Forms.Label lTop;\n\t\tprivate System.Windows.Forms.Label lRight;\n\t\tprivate System.Windows.Forms.Button bSD;\n\t\tprivate System.Windows.Forms.Button bSL;\n\t\tprivate System.Windows.Forms.Button bSR;\n\t\tprivate System.Windows.Forms.Button bST;\n\t\tprivate System.Windows.Forms.Button bSB;\n\t\tprivate System.Windows.Forms.Button bCD;\n\t\tprivate System.Windows.Forms.Button bCT;\n\t\tprivate System.Windows.Forms.Button bCB;\n\t\tprivate System.Windows.Forms.Button bWB;\n\t\tprivate System.Windows.Forms.Button bWT;\n\t\tprivate System.Windows.Forms.Button bWR;\n\t\tprivate System.Windows.Forms.Button bCR;\n\t\tprivate System.Windows.Forms.Button bWL;\n\t\tprivate System.Windows.Forms.Button bWD;\n\t\tprivate System.Windows.Forms.Button bCL;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n        private string[] _names;\n\n        public StyleBorderCtl(DesignXmlDraw dxDraw, string[] names, List<XmlNode> reportItems)\n\t\t{\n\t\t\t_ReportItems = reportItems;\n\t\t\t_Draw = dxDraw;\n            _names = names;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitBorders(reportItems[0]);\t\t\t\n\t\t}\n\n\t\tprivate void InitBorders(XmlNode node)\n\t\t{\n            cbColorDefault.Items.AddRange(StaticLists.ColorList);\n            cbColorLeft.Items.AddRange(StaticLists.ColorList);\n            cbColorRight.Items.AddRange(StaticLists.ColorList);\n            cbColorTop.Items.AddRange(StaticLists.ColorList);\n            cbColorBottom.Items.AddRange(StaticLists.ColorList);\n\n            if (_names != null)\n            {\n                node = _Draw.FindCreateNextInHierarchy(node, _names);\n            }\n\n            XmlNode sNode = _Draw.GetCreateNamedChildNode(node, \"Style\");\n\n\t\t\t// Handle BorderStyle\n\t\t\tXmlNode bsNode = _Draw.SetElement(sNode, \"BorderStyle\", null);\n\t\t\tcbStyleDefault.Text = _Draw.GetElementValue(bsNode, \"Default\", \"None\");\n\t\t\tcbStyleLeft.Text = _Draw.GetElementValue(bsNode, \"Left\", cbStyleDefault.Text);\n\t\t\tcbStyleRight.Text = _Draw.GetElementValue(bsNode, \"Right\", cbStyleDefault.Text);\n\t\t\tcbStyleTop.Text = _Draw.GetElementValue(bsNode, \"Top\", cbStyleDefault.Text);\n\t\t\tcbStyleBottom.Text = _Draw.GetElementValue(bsNode, \"Bottom\", cbStyleDefault.Text);\n\n\t\t\t// Handle BorderColor\n\t\t\tXmlNode bcNode = _Draw.SetElement(sNode, \"BorderColor\", null);\n\t\t\tcbColorDefault.Text = _Draw.GetElementValue(bcNode, \"Default\", \"Black\");\n\t\t\tcbColorLeft.Text = _Draw.GetElementValue(bcNode, \"Left\", cbColorDefault.Text);\n\t\t\tcbColorRight.Text = _Draw.GetElementValue(bcNode, \"Right\", cbColorDefault.Text);\n\t\t\tcbColorTop.Text = _Draw.GetElementValue(bcNode, \"Top\", cbColorDefault.Text);\n\t\t\tcbColorBottom.Text = _Draw.GetElementValue(bcNode, \"Bottom\", cbColorDefault.Text);\n\n\t\t\t// Handle BorderWidth\n\t\t\tXmlNode bwNode = _Draw.SetElement(sNode, \"BorderWidth\", null);\n\t\t\ttbWidthDefault.Text = _Draw.GetElementValue(bwNode, \"Default\", \"1pt\");\n\t\t\ttbWidthLeft.Text = _Draw.GetElementValue(bwNode, \"Left\", tbWidthDefault.Text);\n\t\t\ttbWidthRight.Text = _Draw.GetElementValue(bwNode, \"Right\", tbWidthDefault.Text);\n\t\t\ttbWidthTop.Text = _Draw.GetElementValue(bwNode, \"Top\", tbWidthDefault.Text);\n\t\t\ttbWidthBottom.Text = _Draw.GetElementValue(bwNode, \"Bottom\", tbWidthDefault.Text);\n\t\t\n\t\t\tif (node.Name == \"Line\")\n\t\t\t{\n\t\t\t\tcbColorLeft.Visible =\n\t\t\t\t\tcbColorRight.Visible =\n\t\t\t\t\tcbColorTop.Visible =\n\t\t\t\t\tcbColorBottom.Visible =\n\t\t\t\t\tbColorLeft.Visible =\n\t\t\t\t\tbColorRight.Visible =\n\t\t\t\t\tbColorTop.Visible =\n\t\t\t\t\tbColorBottom.Visible =\n\t\t\t\t\tcbStyleLeft.Visible =\n\t\t\t\t\tcbStyleRight.Visible =\n\t\t\t\t\tcbStyleTop.Visible =\n\t\t\t\t\tcbStyleBottom.Visible =\n\t\t\t\t\tlLeft.Visible =\n\t\t\t\t\tlRight.Visible =\n\t\t\t\t\tlTop.Visible =\n\t\t\t\t\tlBottom.Visible =\n\t\t\t\t\ttbWidthLeft.Visible =\n\t\t\t\t\ttbWidthRight.Visible =\n\t\t\t\t\ttbWidthTop.Visible =\n\t\t\t\t\ttbWidthBottom.Visible = \n\t\t\t\t\tbCR.Visible = bCL.Visible = bCT.Visible = bCB.Visible =\n\t\t\t\t\tbSR.Visible = bSL.Visible = bST.Visible = bSB.Visible =\n\t\t\t\t\tbWR.Visible = bWL.Visible = bWT.Visible = bWB.Visible =\n\t\t\t\t\tfalse;\n\t\t\t}\n\t\t\tfStyleDefault = fStyleLeft = fStyleRight = fStyleTop = fStyleBottom =\n\t\t\t\tfColorDefault = fColorLeft = fColorRight = fColorTop = fColorBottom =\n\t\t\t\tfWidthDefault = fWidthLeft = fWidthRight = fWidthTop = fWidthBottom= false;\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(StyleBorderCtl));\n\t\t\tthis.lLeft = new System.Windows.Forms.Label();\n\t\t\tthis.lBottom = new System.Windows.Forms.Label();\n\t\t\tthis.lTop = new System.Windows.Forms.Label();\n\t\t\tthis.lRight = new System.Windows.Forms.Label();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.label6 = new System.Windows.Forms.Label();\n\t\t\tthis.label7 = new System.Windows.Forms.Label();\n\t\t\tthis.cbStyleLeft = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbStyleBottom = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbStyleTop = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbStyleRight = new System.Windows.Forms.ComboBox();\n\t\t\tthis.bColorLeft = new System.Windows.Forms.Button();\n\t\t\tthis.cbColorLeft = new System.Windows.Forms.ComboBox();\n\t\t\tthis.bColorRight = new System.Windows.Forms.Button();\n\t\t\tthis.cbColorRight = new System.Windows.Forms.ComboBox();\n\t\t\tthis.bColorTop = new System.Windows.Forms.Button();\n\t\t\tthis.cbColorTop = new System.Windows.Forms.ComboBox();\n\t\t\tthis.bColorBottom = new System.Windows.Forms.Button();\n\t\t\tthis.cbColorBottom = new System.Windows.Forms.ComboBox();\n\t\t\tthis.tbWidthLeft = new System.Windows.Forms.TextBox();\n\t\t\tthis.tbWidthRight = new System.Windows.Forms.TextBox();\n\t\t\tthis.tbWidthTop = new System.Windows.Forms.TextBox();\n\t\t\tthis.tbWidthBottom = new System.Windows.Forms.TextBox();\n\t\t\tthis.tbWidthDefault = new System.Windows.Forms.TextBox();\n\t\t\tthis.bColorDefault = new System.Windows.Forms.Button();\n\t\t\tthis.cbColorDefault = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbStyleDefault = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label8 = new System.Windows.Forms.Label();\n\t\t\tthis.bSD = new System.Windows.Forms.Button();\n\t\t\tthis.bSL = new System.Windows.Forms.Button();\n\t\t\tthis.bSR = new System.Windows.Forms.Button();\n\t\t\tthis.bST = new System.Windows.Forms.Button();\n\t\t\tthis.bSB = new System.Windows.Forms.Button();\n\t\t\tthis.bCD = new System.Windows.Forms.Button();\n\t\t\tthis.bCT = new System.Windows.Forms.Button();\n\t\t\tthis.bCB = new System.Windows.Forms.Button();\n\t\t\tthis.bWB = new System.Windows.Forms.Button();\n\t\t\tthis.bWT = new System.Windows.Forms.Button();\n\t\t\tthis.bWR = new System.Windows.Forms.Button();\n\t\t\tthis.bCR = new System.Windows.Forms.Button();\n\t\t\tthis.bWL = new System.Windows.Forms.Button();\n\t\t\tthis.bWD = new System.Windows.Forms.Button();\n\t\t\tthis.bCL = new System.Windows.Forms.Button();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// lLeft\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lLeft, \"lLeft\");\n\t\t\tthis.lLeft.Name = \"lLeft\";\n\t\t\t// \n\t\t\t// lBottom\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lBottom, \"lBottom\");\n\t\t\tthis.lBottom.Name = \"lBottom\";\n\t\t\t// \n\t\t\t// lTop\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lTop, \"lTop\");\n\t\t\tthis.lTop.Name = \"lTop\";\n\t\t\t// \n\t\t\t// lRight\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lRight, \"lRight\");\n\t\t\tthis.lRight.Name = \"lRight\";\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// label6\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label6, \"label6\");\n\t\t\tthis.label6.Name = \"label6\";\n\t\t\t// \n\t\t\t// label7\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label7, \"label7\");\n\t\t\tthis.label7.Name = \"label7\";\n\t\t\t// \n\t\t\t// cbStyleLeft\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbStyleLeft, \"cbStyleLeft\");\n\t\t\tthis.cbStyleLeft.Items.AddRange(new object[] {\n            resources.GetString(\"cbStyleLeft.Items\"),\n            resources.GetString(\"cbStyleLeft.Items1\"),\n            resources.GetString(\"cbStyleLeft.Items2\"),\n            resources.GetString(\"cbStyleLeft.Items3\"),\n            resources.GetString(\"cbStyleLeft.Items4\"),\n            resources.GetString(\"cbStyleLeft.Items5\"),\n            resources.GetString(\"cbStyleLeft.Items6\"),\n            resources.GetString(\"cbStyleLeft.Items7\"),\n            resources.GetString(\"cbStyleLeft.Items8\"),\n            resources.GetString(\"cbStyleLeft.Items9\")});\n\t\t\tthis.cbStyleLeft.Name = \"cbStyleLeft\";\n\t\t\tthis.cbStyleLeft.SelectedIndexChanged += new System.EventHandler(this.cbStyle_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// cbStyleBottom\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbStyleBottom, \"cbStyleBottom\");\n\t\t\tthis.cbStyleBottom.Items.AddRange(new object[] {\n            resources.GetString(\"cbStyleBottom.Items\"),\n            resources.GetString(\"cbStyleBottom.Items1\"),\n            resources.GetString(\"cbStyleBottom.Items2\"),\n            resources.GetString(\"cbStyleBottom.Items3\"),\n            resources.GetString(\"cbStyleBottom.Items4\"),\n            resources.GetString(\"cbStyleBottom.Items5\"),\n            resources.GetString(\"cbStyleBottom.Items6\"),\n            resources.GetString(\"cbStyleBottom.Items7\"),\n            resources.GetString(\"cbStyleBottom.Items8\"),\n            resources.GetString(\"cbStyleBottom.Items9\")});\n\t\t\tthis.cbStyleBottom.Name = \"cbStyleBottom\";\n\t\t\tthis.cbStyleBottom.SelectedIndexChanged += new System.EventHandler(this.cbStyle_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// cbStyleTop\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbStyleTop, \"cbStyleTop\");\n\t\t\tthis.cbStyleTop.Items.AddRange(new object[] {\n            resources.GetString(\"cbStyleTop.Items\"),\n            resources.GetString(\"cbStyleTop.Items1\"),\n            resources.GetString(\"cbStyleTop.Items2\"),\n            resources.GetString(\"cbStyleTop.Items3\"),\n            resources.GetString(\"cbStyleTop.Items4\"),\n            resources.GetString(\"cbStyleTop.Items5\"),\n            resources.GetString(\"cbStyleTop.Items6\"),\n            resources.GetString(\"cbStyleTop.Items7\"),\n            resources.GetString(\"cbStyleTop.Items8\"),\n            resources.GetString(\"cbStyleTop.Items9\")});\n\t\t\tthis.cbStyleTop.Name = \"cbStyleTop\";\n\t\t\tthis.cbStyleTop.SelectedIndexChanged += new System.EventHandler(this.cbStyle_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// cbStyleRight\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbStyleRight, \"cbStyleRight\");\n\t\t\tthis.cbStyleRight.Items.AddRange(new object[] {\n            resources.GetString(\"cbStyleRight.Items\"),\n            resources.GetString(\"cbStyleRight.Items1\"),\n            resources.GetString(\"cbStyleRight.Items2\"),\n            resources.GetString(\"cbStyleRight.Items3\"),\n            resources.GetString(\"cbStyleRight.Items4\"),\n            resources.GetString(\"cbStyleRight.Items5\"),\n            resources.GetString(\"cbStyleRight.Items6\"),\n            resources.GetString(\"cbStyleRight.Items7\"),\n            resources.GetString(\"cbStyleRight.Items8\"),\n            resources.GetString(\"cbStyleRight.Items9\")});\n\t\t\tthis.cbStyleRight.Name = \"cbStyleRight\";\n\t\t\tthis.cbStyleRight.SelectedIndexChanged += new System.EventHandler(this.cbStyle_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// bColorLeft\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bColorLeft, \"bColorLeft\");\n\t\t\tthis.bColorLeft.Name = \"bColorLeft\";\n\t\t\tthis.bColorLeft.Click += new System.EventHandler(this.bColor_Click);\n\t\t\t// \n\t\t\t// cbColorLeft\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbColorLeft, \"cbColorLeft\");\n\t\t\tthis.cbColorLeft.Name = \"cbColorLeft\";\n\t\t\tthis.cbColorLeft.SelectedIndexChanged += new System.EventHandler(this.cbColor_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// bColorRight\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bColorRight, \"bColorRight\");\n\t\t\tthis.bColorRight.Name = \"bColorRight\";\n\t\t\tthis.bColorRight.Click += new System.EventHandler(this.bColor_Click);\n\t\t\t// \n\t\t\t// cbColorRight\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbColorRight, \"cbColorRight\");\n\t\t\tthis.cbColorRight.Name = \"cbColorRight\";\n\t\t\tthis.cbColorRight.SelectedIndexChanged += new System.EventHandler(this.cbColor_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// bColorTop\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bColorTop, \"bColorTop\");\n\t\t\tthis.bColorTop.Name = \"bColorTop\";\n\t\t\tthis.bColorTop.Click += new System.EventHandler(this.bColor_Click);\n\t\t\t// \n\t\t\t// cbColorTop\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbColorTop, \"cbColorTop\");\n\t\t\tthis.cbColorTop.Name = \"cbColorTop\";\n\t\t\tthis.cbColorTop.SelectedIndexChanged += new System.EventHandler(this.cbColor_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// bColorBottom\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bColorBottom, \"bColorBottom\");\n\t\t\tthis.bColorBottom.Name = \"bColorBottom\";\n\t\t\tthis.bColorBottom.Click += new System.EventHandler(this.bColor_Click);\n\t\t\t// \n\t\t\t// cbColorBottom\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbColorBottom, \"cbColorBottom\");\n\t\t\tthis.cbColorBottom.Name = \"cbColorBottom\";\n\t\t\tthis.cbColorBottom.SelectedIndexChanged += new System.EventHandler(this.cbColor_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// tbWidthLeft\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbWidthLeft, \"tbWidthLeft\");\n\t\t\tthis.tbWidthLeft.Name = \"tbWidthLeft\";\n\t\t\tthis.tbWidthLeft.TextChanged += new System.EventHandler(this.tbWidth_Changed);\n\t\t\t// \n\t\t\t// tbWidthRight\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbWidthRight, \"tbWidthRight\");\n\t\t\tthis.tbWidthRight.Name = \"tbWidthRight\";\n\t\t\tthis.tbWidthRight.TextChanged += new System.EventHandler(this.tbWidth_Changed);\n\t\t\t// \n\t\t\t// tbWidthTop\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbWidthTop, \"tbWidthTop\");\n\t\t\tthis.tbWidthTop.Name = \"tbWidthTop\";\n\t\t\tthis.tbWidthTop.TextChanged += new System.EventHandler(this.tbWidth_Changed);\n\t\t\t// \n\t\t\t// tbWidthBottom\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbWidthBottom, \"tbWidthBottom\");\n\t\t\tthis.tbWidthBottom.Name = \"tbWidthBottom\";\n\t\t\tthis.tbWidthBottom.TextChanged += new System.EventHandler(this.tbWidth_Changed);\n\t\t\t// \n\t\t\t// tbWidthDefault\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbWidthDefault, \"tbWidthDefault\");\n\t\t\tthis.tbWidthDefault.Name = \"tbWidthDefault\";\n\t\t\tthis.tbWidthDefault.TextChanged += new System.EventHandler(this.tbWidthDefault_TextChanged);\n\t\t\t// \n\t\t\t// bColorDefault\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bColorDefault, \"bColorDefault\");\n\t\t\tthis.bColorDefault.Name = \"bColorDefault\";\n\t\t\tthis.bColorDefault.Click += new System.EventHandler(this.bColor_Click);\n\t\t\t// \n\t\t\t// cbColorDefault\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbColorDefault, \"cbColorDefault\");\n\t\t\tthis.cbColorDefault.Name = \"cbColorDefault\";\n\t\t\tthis.cbColorDefault.SelectedIndexChanged += new System.EventHandler(this.cbColorDefault_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// cbStyleDefault\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbStyleDefault, \"cbStyleDefault\");\n\t\t\tthis.cbStyleDefault.Items.AddRange(new object[] {\n            resources.GetString(\"cbStyleDefault.Items\"),\n            resources.GetString(\"cbStyleDefault.Items1\"),\n            resources.GetString(\"cbStyleDefault.Items2\"),\n            resources.GetString(\"cbStyleDefault.Items3\"),\n            resources.GetString(\"cbStyleDefault.Items4\"),\n            resources.GetString(\"cbStyleDefault.Items5\"),\n            resources.GetString(\"cbStyleDefault.Items6\"),\n            resources.GetString(\"cbStyleDefault.Items7\"),\n            resources.GetString(\"cbStyleDefault.Items8\"),\n            resources.GetString(\"cbStyleDefault.Items9\")});\n\t\t\tthis.cbStyleDefault.Name = \"cbStyleDefault\";\n\t\t\tthis.cbStyleDefault.SelectedIndexChanged += new System.EventHandler(this.cbStyleDefault_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// label8\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label8, \"label8\");\n\t\t\tthis.label8.Name = \"label8\";\n\t\t\t// \n\t\t\t// bSD\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bSD, \"bSD\");\n\t\t\tthis.bSD.Name = \"bSD\";\n\t\t\tthis.bSD.Tag = \"sd\";\n\t\t\tthis.bSD.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bSL\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bSL, \"bSL\");\n\t\t\tthis.bSL.Name = \"bSL\";\n\t\t\tthis.bSL.Tag = \"sl\";\n\t\t\tthis.bSL.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bSR\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bSR, \"bSR\");\n\t\t\tthis.bSR.Name = \"bSR\";\n\t\t\tthis.bSR.Tag = \"sr\";\n\t\t\tthis.bSR.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bST\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bST, \"bST\");\n\t\t\tthis.bST.Name = \"bST\";\n\t\t\tthis.bST.Tag = \"st\";\n\t\t\tthis.bST.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bSB\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bSB, \"bSB\");\n\t\t\tthis.bSB.Name = \"bSB\";\n\t\t\tthis.bSB.Tag = \"sb\";\n\t\t\tthis.bSB.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bCD\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCD, \"bCD\");\n\t\t\tthis.bCD.Name = \"bCD\";\n\t\t\tthis.bCD.Tag = \"cd\";\n\t\t\tthis.bCD.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bCT\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCT, \"bCT\");\n\t\t\tthis.bCT.Name = \"bCT\";\n\t\t\tthis.bCT.Tag = \"ct\";\n\t\t\tthis.bCT.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bCB\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCB, \"bCB\");\n\t\t\tthis.bCB.Name = \"bCB\";\n\t\t\tthis.bCB.Tag = \"cb\";\n\t\t\tthis.bCB.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bWB\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bWB, \"bWB\");\n\t\t\tthis.bWB.Name = \"bWB\";\n\t\t\tthis.bWB.Tag = \"wb\";\n\t\t\tthis.bWB.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bWT\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bWT, \"bWT\");\n\t\t\tthis.bWT.Name = \"bWT\";\n\t\t\tthis.bWT.Tag = \"wt\";\n\t\t\tthis.bWT.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bWR\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bWR, \"bWR\");\n\t\t\tthis.bWR.Name = \"bWR\";\n\t\t\tthis.bWR.Tag = \"wr\";\n\t\t\tthis.bWR.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bCR\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCR, \"bCR\");\n\t\t\tthis.bCR.Name = \"bCR\";\n\t\t\tthis.bCR.Tag = \"cr\";\n\t\t\tthis.bCR.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bWL\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bWL, \"bWL\");\n\t\t\tthis.bWL.Name = \"bWL\";\n\t\t\tthis.bWL.Tag = \"wl\";\n\t\t\tthis.bWL.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bWD\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bWD, \"bWD\");\n\t\t\tthis.bWD.Name = \"bWD\";\n\t\t\tthis.bWD.Tag = \"wd\";\n\t\t\tthis.bWD.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bCL\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCL, \"bCL\");\n\t\t\tthis.bCL.Name = \"bCL\";\n\t\t\tthis.bCL.Tag = \"cl\";\n\t\t\tthis.bCL.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// StyleBorderCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.bCL);\n\t\t\tthis.Controls.Add(this.bWD);\n\t\t\tthis.Controls.Add(this.bWL);\n\t\t\tthis.Controls.Add(this.bCR);\n\t\t\tthis.Controls.Add(this.bWR);\n\t\t\tthis.Controls.Add(this.bWT);\n\t\t\tthis.Controls.Add(this.bWB);\n\t\t\tthis.Controls.Add(this.bCB);\n\t\t\tthis.Controls.Add(this.bCT);\n\t\t\tthis.Controls.Add(this.bCD);\n\t\t\tthis.Controls.Add(this.bSB);\n\t\t\tthis.Controls.Add(this.bST);\n\t\t\tthis.Controls.Add(this.bSR);\n\t\t\tthis.Controls.Add(this.bSL);\n\t\t\tthis.Controls.Add(this.bSD);\n\t\t\tthis.Controls.Add(this.tbWidthDefault);\n\t\t\tthis.Controls.Add(this.bColorDefault);\n\t\t\tthis.Controls.Add(this.cbColorDefault);\n\t\t\tthis.Controls.Add(this.cbStyleDefault);\n\t\t\tthis.Controls.Add(this.label8);\n\t\t\tthis.Controls.Add(this.tbWidthBottom);\n\t\t\tthis.Controls.Add(this.tbWidthTop);\n\t\t\tthis.Controls.Add(this.tbWidthRight);\n\t\t\tthis.Controls.Add(this.tbWidthLeft);\n\t\t\tthis.Controls.Add(this.bColorBottom);\n\t\t\tthis.Controls.Add(this.cbColorBottom);\n\t\t\tthis.Controls.Add(this.bColorTop);\n\t\t\tthis.Controls.Add(this.cbColorTop);\n\t\t\tthis.Controls.Add(this.bColorRight);\n\t\t\tthis.Controls.Add(this.cbColorRight);\n\t\t\tthis.Controls.Add(this.bColorLeft);\n\t\t\tthis.Controls.Add(this.cbColorLeft);\n\t\t\tthis.Controls.Add(this.cbStyleRight);\n\t\t\tthis.Controls.Add(this.cbStyleTop);\n\t\t\tthis.Controls.Add(this.cbStyleBottom);\n\t\t\tthis.Controls.Add(this.cbStyleLeft);\n\t\t\tthis.Controls.Add(this.label7);\n\t\t\tthis.Controls.Add(this.label6);\n\t\t\tthis.Controls.Add(this.label2);\n\t\t\tthis.Controls.Add(this.lRight);\n\t\t\tthis.Controls.Add(this.lTop);\n\t\t\tthis.Controls.Add(this.lBottom);\n\t\t\tthis.Controls.Add(this.lLeft);\n\t\t\tthis.Name = \"StyleBorderCtl\";\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n  \n\t\tpublic bool IsValid()\n\t\t{\n\t\t\tstring name=\"\";\n\t\t\ttry\n\t\t\t{\n\t\t\t\tif (fWidthDefault && !tbWidthDefault.Text.StartsWith(\"=\"))\n\t\t\t\t{\n\t\t\t\t\tname = Strings.StyleBorderCtl_Show_DefaultWidth;\n\t\t\t\t\tDesignerUtility.ValidateSize(tbWidthDefault.Text, true, false);\n\t\t\t\t}\n\t\t\t\tif (fWidthLeft && !tbWidthLeft.Text.StartsWith(\"=\"))\n\t\t\t\t{\n\t\t\t\t\tname = Strings.StyleBorderCtl_Show_LeftWidth;\n\t\t\t\t\tDesignerUtility.ValidateSize(tbWidthLeft.Text, true, false);\n\t\t\t\t}\n\t\t\t\tif (fWidthTop && !tbWidthTop.Text.StartsWith(\"=\"))\n\t\t\t\t{\n\t\t\t\t\tname = Strings.StyleBorderCtl_Show_TopWidth;\n\t\t\t\t\tDesignerUtility.ValidateSize(tbWidthTop.Text, true, false);\n\t\t\t\t}\n\t\t\t\tif (fWidthBottom && !tbWidthBottom.Text.StartsWith(\"=\"))\n\t\t\t\t{\n\t\t\t\t\tname = Strings.StyleBorderCtl_Show_BottomWidth;\n\t\t\t\t\tDesignerUtility.ValidateSize(tbWidthBottom.Text, true, false);\n\t\t\t\t}\n\t\t\t\tif (fWidthRight && !tbWidthRight.Text.StartsWith(\"=\"))\n\t\t\t\t{\n\t\t\t\t\tname = Strings.StyleBorderCtl_Show_RightWidth;\n\t\t\t\t\tDesignerUtility.ValidateSize(tbWidthRight.Text, true, false);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\tMessageBox.Show(ex.Message, name + \" \" + Strings.StyleBorderCtl_Show_SizeInvalid);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// take information in control and apply to all the style nodes\n\t\t\t//  Only change information that has been marked as modified;\n\t\t\t//   this way when group is selected it is possible to change just\n\t\t\t//   the items you want and keep the rest the same.\n\t\t\t\n\t\t\tforeach (XmlNode riNode in this._ReportItems)\n\t\t\t\tApplyChanges(riNode);\n\n\t\t\tfStyleDefault = fStyleLeft = fStyleRight = fStyleTop = fStyleBottom =\n\t\t\t\tfColorDefault = fColorLeft = fColorRight = fColorTop = fColorBottom =\n\t\t\t\tfWidthDefault = fWidthLeft = fWidthRight = fWidthTop = fWidthBottom= false;\n\t\t}\n\n\t\tprivate void ApplyChanges(XmlNode xNode)\n\t\t{\n            if (_names != null)\n            {\n                xNode = _Draw.FindCreateNextInHierarchy(xNode, _names);\n            }\n\n            bool bLine = xNode.Name == \"Line\";\n\t\t\tXmlNode sNode = _Draw.GetCreateNamedChildNode(xNode, \"Style\");\n\n\t\t\t// Handle BorderStyle\n\t\t\tXmlNode bsNode = _Draw.SetElement(sNode, \"BorderStyle\", null);\n\t\t\tif (fStyleDefault)\n\t\t\t\t_Draw.SetElement(bsNode, \"Default\", cbStyleDefault.Text);\n\t\t\tif (fStyleLeft && !bLine)\n\t\t\t\t_Draw.SetElement(bsNode, \"Left\", cbStyleLeft.Text);\n\t\t\tif (fStyleRight && !bLine)\n\t\t\t\t_Draw.SetElement(bsNode, \"Right\", cbStyleRight.Text);\n\t\t\tif (fStyleTop && !bLine)\n\t\t\t\t_Draw.SetElement(bsNode, \"Top\", cbStyleTop.Text);\n\t\t\tif (fStyleBottom && !bLine)\n\t\t\t\t_Draw.SetElement(bsNode, \"Bottom\", cbStyleBottom.Text);\n\n\t\t\t// Handle BorderColor\n\t\t\tXmlNode csNode = _Draw.SetElement(sNode, \"BorderColor\", null);\n\t\t\tif (fColorDefault)\n\t\t\t\t_Draw.SetElement(csNode, \"Default\", cbColorDefault.Text);\n\t\t\tif (fColorLeft && !bLine)\n\t\t\t\t_Draw.SetElement(csNode, \"Left\", cbColorLeft.Text);\n\t\t\tif (fColorRight && !bLine)\n\t\t\t\t_Draw.SetElement(csNode, \"Right\", cbColorRight.Text);\n\t\t\tif (fColorTop && !bLine)\n\t\t\t\t_Draw.SetElement(csNode, \"Top\", cbColorTop.Text);\n\t\t\tif (fColorBottom && !bLine)\n\t\t\t\t_Draw.SetElement(csNode, \"Bottom\", cbColorBottom.Text);\n\n\t\t\t// Handle BorderWidth\n\t\t\tXmlNode bwNode = _Draw.SetElement(sNode, \"BorderWidth\", null);\n\t\t\tif (fWidthDefault)\n\t\t\t\t_Draw.SetElement(bwNode, \"Default\", GetSize(tbWidthDefault.Text));\n\t\t\tif (fWidthLeft && !bLine)\n\t\t\t\t_Draw.SetElement(bwNode, \"Left\", GetSize(tbWidthLeft.Text));\n\t\t\tif (fWidthRight && !bLine)\n\t\t\t\t_Draw.SetElement(bwNode, \"Right\", GetSize(tbWidthRight.Text));\n\t\t\tif (fWidthTop && !bLine)\n\t\t\t\t_Draw.SetElement(bwNode, \"Top\", GetSize(tbWidthTop.Text));\n\t\t\tif (fWidthBottom && !bLine)\n\t\t\t\t_Draw.SetElement(bwNode, \"Bottom\", GetSize(tbWidthBottom.Text));\n\t\t}\n\n\t\tprivate string GetSize(string sz)\n\t\t{\n\t\t\tif (sz.Trim().StartsWith(\"=\"))\t\t// Don't mess with expressions\n\t\t\t\treturn sz;\n\n\t\t\tfloat size = DesignXmlDraw.GetSize(sz);\n\t\t\tif (size <= 0)\n\t\t\t{\n\t\t\t\tsize = DesignXmlDraw.GetSize(sz+\"pt\");\t// Try assuming pt\n\t\t\t\tif (size <= 0)\t// still no good\n\t\t\t\t\tsize = 10;\t// just set default value\n\t\t\t}\n\t\t\tstring rs = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.#}pt\", size);\n\t\t\treturn rs;\n\t\t}\n\n\t\tprivate void bColor_Click(object sender, System.EventArgs e)\n\t\t{\n            using (ColorDialog cd = new ColorDialog())\n            {\n                cd.AnyColor = true;\n                cd.FullOpen = true;\n\n                cd.CustomColors = RdlDesigner.GetCustomColors();\n\n                if (cd.ShowDialog() != DialogResult.OK)\n                    return;\n\n                RdlDesigner.SetCustomColors(cd.CustomColors);\n                if (sender == this.bColorDefault)\n                {\n                    cbColorDefault.Text = ColorTranslator.ToHtml(cd.Color);\n                    cbColorLeft.Text = ColorTranslator.ToHtml(cd.Color);\n                    cbColorRight.Text = ColorTranslator.ToHtml(cd.Color);\n                    cbColorTop.Text = ColorTranslator.ToHtml(cd.Color);\n                    cbColorBottom.Text = ColorTranslator.ToHtml(cd.Color);\n                }\n                else if (sender == this.bColorLeft)\n                    cbColorLeft.Text = ColorTranslator.ToHtml(cd.Color);\n                else if (sender == this.bColorRight)\n                    cbColorRight.Text = ColorTranslator.ToHtml(cd.Color);\n                else if (sender == this.bColorTop)\n                    cbColorTop.Text = ColorTranslator.ToHtml(cd.Color);\n                else if (sender == this.bColorBottom)\n                    cbColorBottom.Text = ColorTranslator.ToHtml(cd.Color);\n            }\n\t\t\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void cbStyleDefault_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tcbStyleLeft.Text = cbStyleRight.Text = \n\t\t\t\tcbStyleTop.Text = cbStyleBottom.Text = cbStyleDefault.Text;\n\t\t\tfStyleDefault = fStyleLeft = fStyleRight = fStyleTop = fStyleBottom = true;\n\t\t}\n\n\t\tprivate void cbColorDefault_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tcbColorLeft.Text = cbColorRight.Text = \n\t\t\t\tcbColorTop.Text = cbColorBottom.Text = cbColorDefault.Text;\n\t\t\tfColorDefault = fColorLeft = fColorRight = fColorTop = fColorBottom = true;\n\t\t}\n\n\t\tprivate void tbWidthDefault_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\ttbWidthLeft.Text = tbWidthRight.Text = \n\t\t\t\ttbWidthTop.Text = tbWidthBottom.Text = tbWidthDefault.Text;\n\t\t\tfWidthDefault = fWidthLeft = fWidthRight = fWidthTop = fWidthBottom = true;\n\t\t}\n\n\t\tprivate void cbStyle_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tif (sender == cbStyleLeft)\n\t\t\t\tfStyleLeft = true;\n\t\t\telse if (sender == cbStyleRight)\n\t\t\t\tfStyleRight = true;\n\t\t\telse if (sender == cbStyleTop)\n\t\t\t\tfStyleTop = true;\n\t\t\telse if (sender == cbStyleBottom)\n\t\t\t\tfStyleBottom = true;\n\t\t}\n\n\t\tprivate void cbColor_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tif (sender == cbColorLeft)\n\t\t\t\tfColorLeft = true;\n\t\t\telse if (sender == cbColorRight)\n\t\t\t\tfColorRight = true;\n\t\t\telse if (sender == cbColorTop)\n\t\t\t\tfColorTop = true;\n\t\t\telse if (sender == cbColorBottom)\n\t\t\t\tfColorBottom = true;\n\t\t}\n\n\t\tprivate void tbWidth_Changed(object sender, System.EventArgs e)\n\t\t{\n\t\t\tif (sender == tbWidthLeft)\n\t\t\t\tfWidthLeft = true;\n\t\t\telse if (sender == tbWidthRight)\n\t\t\t\tfWidthRight = true;\n\t\t\telse if (sender == tbWidthTop)\n\t\t\t\tfWidthTop = true;\n\t\t\telse if (sender == tbWidthBottom)\n\t\t\t\tfWidthBottom = true;\n\t\t}\n\n\t\tprivate void bExpr_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tButton b = sender as Button;\n\t\t\tif (b == null)\n\t\t\t\treturn;\n\t\t\tControl c = null;\n\t\t\tbool bColor=false;\n\t\t\tswitch (b.Tag as string)\n\t\t\t{\n\t\t\t\tcase \"sd\":\n\t\t\t\t\tc = cbStyleDefault;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"cd\":\n\t\t\t\t\tc = cbColorDefault;\n\t\t\t\t\tbColor = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"wd\":\n\t\t\t\t\tc = tbWidthDefault;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"sl\":\n\t\t\t\t\tc = cbStyleLeft;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"cl\":\n\t\t\t\t\tc = cbColorLeft;\n\t\t\t\t\tbColor = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"wl\":\n\t\t\t\t\tc = tbWidthLeft;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"sr\":\n\t\t\t\t\tc = cbStyleRight;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"cr\":\n\t\t\t\t\tc = cbColorRight;\n\t\t\t\t\tbColor = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"wr\":\n\t\t\t\t\tc = tbWidthRight;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"st\":\n\t\t\t\t\tc = cbStyleTop;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ct\":\n\t\t\t\t\tc = cbColorTop;\n\t\t\t\t\tbColor = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"wt\":\n\t\t\t\t\tc = tbWidthTop;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"sb\":\n\t\t\t\t\tc = cbStyleBottom;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"cb\":\n\t\t\t\t\tc = cbColorBottom;\n\t\t\t\t\tbColor = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"wb\":\n\t\t\t\t\tc = tbWidthBottom;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (c == null)\n\t\t\t\treturn;\n\n\t\t\tXmlNode sNode = _ReportItems[0];\n            using (DialogExprEditor ee = new DialogExprEditor(_Draw, c.Text, sNode, bColor))\n            {\n                DialogResult dr = ee.ShowDialog();\n                if (dr == DialogResult.OK)\n                    c.Text = ee.Expression;\n            }\n\t\t\treturn;\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/StyleBorderCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"cbStyleTop.Items8\" xml:space=\"preserve\">\n    <value>WindowInset</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidthBottom.Name\" xml:space=\"preserve\">\n    <value>tbWidthBottom</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bWR.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"tbWidthDefault.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"lBottom.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;label6.ZOrder\" xml:space=\"preserve\">\n    <value>37</value>\n  </data>\n  <data name=\"&gt;&gt;lBottom.ZOrder\" xml:space=\"preserve\">\n    <value>41</value>\n  </data>\n  <data name=\"cbStyleTop.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>56, 136</value>\n  </data>\n  <data name=\"bCT.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>276, 140</value>\n  </data>\n  <data name=\"&gt;&gt;bWT.Name\" xml:space=\"preserve\">\n    <value>bWT</value>\n  </data>\n  <data name=\"&gt;&gt;bCL.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbStyleBottom.Name\" xml:space=\"preserve\">\n    <value>cbStyleBottom</value>\n  </data>\n  <data name=\"bColorTop.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>306, 138</value>\n  </data>\n  <data name=\"&gt;&gt;bST.ZOrder\" xml:space=\"preserve\">\n    <value>11</value>\n  </data>\n  <data name=\"&gt;&gt;bColorTop.ZOrder\" xml:space=\"preserve\">\n    <value>26</value>\n  </data>\n  <data name=\"bSR.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>148, 108</value>\n  </data>\n  <data name=\"lTop.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 138</value>\n  </data>\n  <data name=\"bWB.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbStyleDefault.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbStyleDefault.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bWL.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbColorRight.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bCR.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"cbStyleRight.Items5\" xml:space=\"preserve\">\n    <value>Groove</value>\n  </data>\n  <data name=\"bCR.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"cbStyleDefault.Items\" xml:space=\"preserve\">\n    <value>None</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidthDefault.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bWT.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>403, 138</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Color</value>\n  </data>\n  <data name=\"bColorLeft.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"lBottom.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;bColorTop.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bWD.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"lBottom.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bSB.Name\" xml:space=\"preserve\">\n    <value>bSB</value>\n  </data>\n  <data name=\"&gt;&gt;cbStyleBottom.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bCT.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;bColorLeft.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbStyleDefault.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidthLeft.Name\" xml:space=\"preserve\">\n    <value>tbWidthLeft</value>\n  </data>\n  <data name=\"tbWidthRight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>334, 104</value>\n  </data>\n  <data name=\"&gt;&gt;bWD.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bSL.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"lRight.Text\" xml:space=\"preserve\">\n    <value>Right</value>\n  </data>\n  <data name=\"&gt;&gt;bSD.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bWD.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbColorRight.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label6.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>343, 16</value>\n  </data>\n  <data name=\"bColorBottom.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>306, 170</value>\n  </data>\n  <data name=\"bCB.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"cbStyleBottom.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>28</value>\n  </data>\n  <data name=\"cbColorRight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>176, 104</value>\n  </data>\n  <data name=\"bSL.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"lLeft.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;lTop.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbStyleTop.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 21</value>\n  </data>\n  <data name=\"&gt;&gt;bSB.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bCR.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;bWB.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"lLeft.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 74</value>\n  </data>\n  <data name=\"bST.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>148, 139</value>\n  </data>\n  <data name=\"&gt;&gt;bColorDefault.ZOrder\" xml:space=\"preserve\">\n    <value>16</value>\n  </data>\n  <data name=\"&gt;&gt;bCT.Name\" xml:space=\"preserve\">\n    <value>bCT</value>\n  </data>\n  <data name=\"&gt;&gt;cbColorTop.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbStyleRight.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbStyleLeft.ZOrder\" xml:space=\"preserve\">\n    <value>35</value>\n  </data>\n  <data name=\"cbStyleLeft.Items\" xml:space=\"preserve\">\n    <value>None</value>\n  </data>\n  <data name=\"&gt;&gt;bCL.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"cbStyleLeft.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>56, 72</value>\n  </data>\n  <data name=\"bWL.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;cbColorDefault.Name\" xml:space=\"preserve\">\n    <value>cbColorDefault</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbStyleRight.Items9\" xml:space=\"preserve\">\n    <value>Outset</value>\n  </data>\n  <data name=\"bCD.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>276, 42</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bCT.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lRight.Name\" xml:space=\"preserve\">\n    <value>lRight</value>\n  </data>\n  <data name=\"bCT.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"cbStyleRight.Items4\" xml:space=\"preserve\">\n    <value>Double</value>\n  </data>\n  <data name=\"&gt;&gt;cbColorTop.ZOrder\" xml:space=\"preserve\">\n    <value>27</value>\n  </data>\n  <data name=\"&gt;&gt;bColorTop.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bSR.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 16</value>\n  </data>\n  <data name=\"bColorBottom.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"cbStyleRight.Items3\" xml:space=\"preserve\">\n    <value>Solid</value>\n  </data>\n  <data name=\"lRight.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;cbColorLeft.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbStyleLeft.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 21</value>\n  </data>\n  <data name=\"&gt;&gt;cbColorDefault.ZOrder\" xml:space=\"preserve\">\n    <value>17</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Name\" xml:space=\"preserve\">\n    <value>label6</value>\n  </data>\n  <data name=\"cbStyleBottom.Items\" xml:space=\"preserve\">\n    <value>None</value>\n  </data>\n  <data name=\"bST.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"cbStyleRight.Items\" xml:space=\"preserve\">\n    <value>None</value>\n  </data>\n  <data name=\"&gt;&gt;bCB.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bColorRight.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>18</value>\n  </data>\n  <data name=\"bWD.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>403, 42</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidthLeft.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidthTop.Name\" xml:space=\"preserve\">\n    <value>tbWidthTop</value>\n  </data>\n  <data name=\"&gt;&gt;cbStyleLeft.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bWB.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>34</value>\n  </data>\n  <data name=\"bColorBottom.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>32</value>\n  </data>\n  <data name=\"bColorLeft.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"cbStyleRight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 21</value>\n  </data>\n  <data name=\"&gt;&gt;cbStyleRight.ZOrder\" xml:space=\"preserve\">\n    <value>32</value>\n  </data>\n  <data name=\"lLeft.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"bCL.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>276, 75</value>\n  </data>\n  <data name=\"cbStyleLeft.Items7\" xml:space=\"preserve\">\n    <value>Inset</value>\n  </data>\n  <data name=\"&gt;&gt;bCD.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bCL.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;cbColorDefault.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bCR.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbColorRight.ZOrder\" xml:space=\"preserve\">\n    <value>29</value>\n  </data>\n  <data name=\"&gt;&gt;bColorBottom.Name\" xml:space=\"preserve\">\n    <value>bColorBottom</value>\n  </data>\n  <data name=\"&gt;&gt;bColorTop.Name\" xml:space=\"preserve\">\n    <value>bColorTop</value>\n  </data>\n  <data name=\"lRight.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;bSD.Name\" xml:space=\"preserve\">\n    <value>bSD</value>\n  </data>\n  <data name=\"bSB.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;lLeft.Name\" xml:space=\"preserve\">\n    <value>lLeft</value>\n  </data>\n  <data name=\"bSD.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"cbColorTop.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 21</value>\n  </data>\n  <data name=\"cbStyleRight.Items2\" xml:space=\"preserve\">\n    <value>Dashed</value>\n  </data>\n  <data name=\"bWB.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;bWB.Name\" xml:space=\"preserve\">\n    <value>bWB</value>\n  </data>\n  <data name=\"bWL.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>403, 73</value>\n  </data>\n  <data name=\"bCB.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;bWB.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"bWL.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>13</value>\n  </data>\n  <data name=\"&gt;&gt;bCB.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bWB.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"bSD.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>148, 42</value>\n  </data>\n  <data name=\"cbStyleRight.Items8\" xml:space=\"preserve\">\n    <value>WindowInset</value>\n  </data>\n  <data name=\"cbStyleBottom.Items1\" xml:space=\"preserve\">\n    <value>Dotted</value>\n  </data>\n  <data name=\"&gt;&gt;bColorDefault.Name\" xml:space=\"preserve\">\n    <value>bColorDefault</value>\n  </data>\n  <data name=\"bColorBottom.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"bColorRight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>306, 106</value>\n  </data>\n  <data name=\"bWD.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;bColorBottom.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidthTop.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bCT.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;bSD.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbStyleRight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>56, 104</value>\n  </data>\n  <data name=\"&gt;&gt;bWR.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bWT.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"bSR.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bSB.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Name\" xml:space=\"preserve\">\n    <value>label8</value>\n  </data>\n  <data name=\"bSL.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"bWL.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"bWD.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"lRight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 16</value>\n  </data>\n  <data name=\"&gt;&gt;lBottom.Name\" xml:space=\"preserve\">\n    <value>lBottom</value>\n  </data>\n  <data name=\"cbStyleDefault.Items3\" xml:space=\"preserve\">\n    <value>Solid</value>\n  </data>\n  <data name=\"cbStyleBottom.Items3\" xml:space=\"preserve\">\n    <value>Solid</value>\n  </data>\n  <data name=\"&gt;&gt;bSR.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bWR.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"bWD.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"bSL.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>148, 75</value>\n  </data>\n  <data name=\"&gt;&gt;lRight.ZOrder\" xml:space=\"preserve\">\n    <value>39</value>\n  </data>\n  <data name=\"label7.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Name\" xml:space=\"preserve\">\n    <value>label7</value>\n  </data>\n  <data name=\"bColorDefault.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;cbStyleTop.Name\" xml:space=\"preserve\">\n    <value>cbStyleTop</value>\n  </data>\n  <data name=\"cbStyleLeft.Items4\" xml:space=\"preserve\">\n    <value>Double</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidthRight.ZOrder\" xml:space=\"preserve\">\n    <value>22</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidthBottom.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"lBottom.Text\" xml:space=\"preserve\">\n    <value>Bottom</value>\n  </data>\n  <data name=\"&gt;&gt;cbStyleBottom.ZOrder\" xml:space=\"preserve\">\n    <value>34</value>\n  </data>\n  <data name=\"cbStyleBottom.Items2\" xml:space=\"preserve\">\n    <value>Dashed</value>\n  </data>\n  <data name=\"&gt;&gt;bSL.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"lTop.Text\" xml:space=\"preserve\">\n    <value>Top</value>\n  </data>\n  <data name=\"&gt;&gt;bWD.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 16</value>\n  </data>\n  <data name=\"&gt;&gt;lLeft.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbColorRight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 21</value>\n  </data>\n  <data name=\"bCB.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;cbColorRight.Name\" xml:space=\"preserve\">\n    <value>cbColorRight</value>\n  </data>\n  <data name=\"bColorTop.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"cbStyleTop.Items\" xml:space=\"preserve\">\n    <value>None</value>\n  </data>\n  <data name=\"bColorLeft.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>306, 74</value>\n  </data>\n  <data name=\"cbStyleLeft.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;bCB.Name\" xml:space=\"preserve\">\n    <value>bCB</value>\n  </data>\n  <data name=\"bCB.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;cbColorBottom.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbColorDefault.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"bColorTop.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>25</value>\n  </data>\n  <data name=\"&gt;&gt;label7.ZOrder\" xml:space=\"preserve\">\n    <value>36</value>\n  </data>\n  <data name=\"tbWidthLeft.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 20</value>\n  </data>\n  <data name=\"&gt;&gt;cbColorTop.Name\" xml:space=\"preserve\">\n    <value>cbColorTop</value>\n  </data>\n  <data name=\"&gt;&gt;bCD.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lTop.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;lTop.ZOrder\" xml:space=\"preserve\">\n    <value>40</value>\n  </data>\n  <data name=\"cbStyleLeft.Items1\" xml:space=\"preserve\">\n    <value>Dotted</value>\n  </data>\n  <data name=\"cbStyleDefault.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>56, 40</value>\n  </data>\n  <data name=\"bCR.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"cbStyleRight.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>14</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"cbStyleBottom.Items4\" xml:space=\"preserve\">\n    <value>Double</value>\n  </data>\n  <data name=\"label8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 16</value>\n  </data>\n  <data name=\"bWT.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"lLeft.Text\" xml:space=\"preserve\">\n    <value>Left</value>\n  </data>\n  <data name=\"&gt;&gt;bWT.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidthTop.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bColorRight.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bSL.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;bColorBottom.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidthLeft.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbColorDefault.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>176, 40</value>\n  </data>\n  <data name=\"tbWidthTop.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 20</value>\n  </data>\n  <data name=\"bSD.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bWD.Name\" xml:space=\"preserve\">\n    <value>bWD</value>\n  </data>\n  <data name=\"cbStyleBottom.Items7\" xml:space=\"preserve\">\n    <value>Inset</value>\n  </data>\n  <data name=\"bCD.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"bCT.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>24</value>\n  </data>\n  <data name=\"cbColorBottom.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>176, 168</value>\n  </data>\n  <data name=\"lRight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 106</value>\n  </data>\n  <data name=\"tbWidthLeft.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"bSD.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"cbStyleLeft.Items2\" xml:space=\"preserve\">\n    <value>Dashed</value>\n  </data>\n  <data name=\"&gt;&gt;bColorLeft.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bSR.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbStyleBottom.Items6\" xml:space=\"preserve\">\n    <value>Ridge</value>\n  </data>\n  <data name=\"&gt;&gt;bSL.Name\" xml:space=\"preserve\">\n    <value>bSL</value>\n  </data>\n  <data name=\"bColorDefault.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>306, 42</value>\n  </data>\n  <data name=\"&gt;&gt;bWT.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bCB.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>276, 171</value>\n  </data>\n  <data name=\"&gt;&gt;lRight.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbStyleBottom.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 21</value>\n  </data>\n  <data name=\"&gt;&gt;bSD.ZOrder\" xml:space=\"preserve\">\n    <value>14</value>\n  </data>\n  <data name=\"&gt;&gt;bSR.Name\" xml:space=\"preserve\">\n    <value>bSR</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Default</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidthRight.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbColorBottom.Name\" xml:space=\"preserve\">\n    <value>cbColorBottom</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>72, 16</value>\n  </data>\n  <data name=\"label8.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>36</value>\n  </data>\n  <data name=\"bWL.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"cbStyleBottom.Items9\" xml:space=\"preserve\">\n    <value>Outset</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidthDefault.Name\" xml:space=\"preserve\">\n    <value>tbWidthDefault</value>\n  </data>\n  <data name=\"bSB.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"bWR.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;bST.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bWR.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidthBottom.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbColorLeft.ZOrder\" xml:space=\"preserve\">\n    <value>31</value>\n  </data>\n  <data name=\"label8.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;cbColorLeft.Name\" xml:space=\"preserve\">\n    <value>cbColorLeft</value>\n  </data>\n  <data name=\"cbColorTop.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>23</value>\n  </data>\n  <data name=\"bWB.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>403, 170</value>\n  </data>\n  <data name=\"&gt;&gt;cbStyleDefault.Name\" xml:space=\"preserve\">\n    <value>cbStyleDefault</value>\n  </data>\n  <data name=\"lLeft.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 16</value>\n  </data>\n  <data name=\"lTop.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;cbStyleTop.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbStyleDefault.Items1\" xml:space=\"preserve\">\n    <value>Dotted</value>\n  </data>\n  <data name=\"&gt;&gt;bSL.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbStyleDefault.Items2\" xml:space=\"preserve\">\n    <value>Dashed</value>\n  </data>\n  <data name=\"cbStyleDefault.Items5\" xml:space=\"preserve\">\n    <value>Groove</value>\n  </data>\n  <data name=\"cbStyleDefault.Items4\" xml:space=\"preserve\">\n    <value>Double</value>\n  </data>\n  <data name=\"cbStyleDefault.Items7\" xml:space=\"preserve\">\n    <value>Inset</value>\n  </data>\n  <data name=\"cbStyleDefault.Items6\" xml:space=\"preserve\">\n    <value>Ridge</value>\n  </data>\n  <data name=\"cbStyleDefault.Items9\" xml:space=\"preserve\">\n    <value>Outset</value>\n  </data>\n  <data name=\"cbStyleDefault.Items8\" xml:space=\"preserve\">\n    <value>WindowInset</value>\n  </data>\n  <data name=\"bCD.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"tbWidthRight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 20</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbStyleTop.ZOrder\" xml:space=\"preserve\">\n    <value>33</value>\n  </data>\n  <data name=\"bCB.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>31</value>\n  </data>\n  <data name=\"tbWidthRight.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>19</value>\n  </data>\n  <data name=\"bSL.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;cbColorDefault.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lTop.Name\" xml:space=\"preserve\">\n    <value>lTop</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidthDefault.ZOrder\" xml:space=\"preserve\">\n    <value>15</value>\n  </data>\n  <data name=\"cbStyleLeft.Items8\" xml:space=\"preserve\">\n    <value>WindowInset</value>\n  </data>\n  <data name=\"&gt;&gt;cbStyleLeft.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidthRight.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bSD.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;cbStyleLeft.Name\" xml:space=\"preserve\">\n    <value>cbStyleLeft</value>\n  </data>\n  <data name=\"cbStyleRight.Items7\" xml:space=\"preserve\">\n    <value>Inset</value>\n  </data>\n  <data name=\"bWR.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bCB.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidthDefault.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbStyleDefault.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 21</value>\n  </data>\n  <data name=\"&gt;&gt;cbStyleTop.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bWT.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"label7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 16</value>\n  </data>\n  <data name=\"bColorRight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bColorRight.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bSB.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"bSB.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>148, 171</value>\n  </data>\n  <data name=\"bST.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>22</value>\n  </data>\n  <data name=\"cbColorLeft.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>176, 72</value>\n  </data>\n  <data name=\"&gt;&gt;bColorDefault.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbColorLeft.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbColorBottom.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>30</value>\n  </data>\n  <data name=\"cbStyleTop.Items5\" xml:space=\"preserve\">\n    <value>Groove</value>\n  </data>\n  <data name=\"&gt;&gt;bCL.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbStyleLeft.Items5\" xml:space=\"preserve\">\n    <value>Groove</value>\n  </data>\n  <data name=\"&gt;&gt;lLeft.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lBottom.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bCL.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;bColorLeft.ZOrder\" xml:space=\"preserve\">\n    <value>30</value>\n  </data>\n  <data name=\"bCL.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;bCR.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Width</value>\n  </data>\n  <data name=\"tbWidthBottom.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>33</value>\n  </data>\n  <data name=\"tbWidthLeft.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>334, 72</value>\n  </data>\n  <data name=\"bCD.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>StyleBorderCtl</value>\n  </data>\n  <data name=\"&gt;&gt;bColorRight.ZOrder\" xml:space=\"preserve\">\n    <value>28</value>\n  </data>\n  <data name=\"lTop.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 16</value>\n  </data>\n  <data name=\"bWB.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"lBottom.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 170</value>\n  </data>\n  <data name=\"&gt;&gt;cbColorTop.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbColorDefault.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 21</value>\n  </data>\n  <data name=\"&gt;&gt;bWL.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbStyleRight.Name\" xml:space=\"preserve\">\n    <value>cbStyleRight</value>\n  </data>\n  <data name=\"bCD.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"bSB.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"bST.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"label6.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"bSR.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>15</value>\n  </data>\n  <data name=\"&gt;&gt;bST.Name\" xml:space=\"preserve\">\n    <value>bST</value>\n  </data>\n  <data name=\"&gt;&gt;label8.ZOrder\" xml:space=\"preserve\">\n    <value>19</value>\n  </data>\n  <data name=\"&gt;&gt;lRight.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bWL.Name\" xml:space=\"preserve\">\n    <value>bWL</value>\n  </data>\n  <data name=\"cbStyleLeft.Items6\" xml:space=\"preserve\">\n    <value>Ridge</value>\n  </data>\n  <data name=\"cbStyleRight.Items6\" xml:space=\"preserve\">\n    <value>Ridge</value>\n  </data>\n  <data name=\"bColorDefault.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bColorBottom.ZOrder\" xml:space=\"preserve\">\n    <value>24</value>\n  </data>\n  <data name=\"&gt;&gt;bWR.Name\" xml:space=\"preserve\">\n    <value>bWR</value>\n  </data>\n  <data name=\"tbWidthBottom.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 20</value>\n  </data>\n  <data name=\"&gt;&gt;cbColorBottom.ZOrder\" xml:space=\"preserve\">\n    <value>25</value>\n  </data>\n  <data name=\"&gt;&gt;bST.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>38</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbColorLeft.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 21</value>\n  </data>\n  <data name=\"&gt;&gt;lTop.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bSR.ZOrder\" xml:space=\"preserve\">\n    <value>12</value>\n  </data>\n  <data name=\"&gt;&gt;cbColorBottom.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>472, 312</value>\n  </data>\n  <data name=\"&gt;&gt;bWT.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbColorTop.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>176, 136</value>\n  </data>\n  <data name=\"bWL.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"tbWidthBottom.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>334, 168</value>\n  </data>\n  <data name=\"&gt;&gt;bColorDefault.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bCT.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"bCL.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"cbStyleTop.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>21</value>\n  </data>\n  <data name=\"&gt;&gt;cbStyleRight.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bWT.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>27</value>\n  </data>\n  <data name=\"cbStyleLeft.Items3\" xml:space=\"preserve\">\n    <value>Solid</value>\n  </data>\n  <data name=\"&gt;&gt;bSL.ZOrder\" xml:space=\"preserve\">\n    <value>13</value>\n  </data>\n  <data name=\"cbColorLeft.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"bCL.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"tbWidthDefault.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 20</value>\n  </data>\n  <data name=\"bSR.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;bCD.Name\" xml:space=\"preserve\">\n    <value>bCD</value>\n  </data>\n  <data name=\"label8.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 42</value>\n  </data>\n  <data name=\"bWR.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>20</value>\n  </data>\n  <data name=\"&gt;&gt;bCD.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"cbStyleBottom.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>56, 168</value>\n  </data>\n  <data name=\"&gt;&gt;bWB.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bSD.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bWD.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"bCD.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;bCT.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bCR.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>276, 108</value>\n  </data>\n  <data name=\"bSB.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>29</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidthTop.ZOrder\" xml:space=\"preserve\">\n    <value>21</value>\n  </data>\n  <data name=\"bCR.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>17</value>\n  </data>\n  <data name=\"tbWidthTop.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>334, 136</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidthRight.Name\" xml:space=\"preserve\">\n    <value>tbWidthRight</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidthBottom.ZOrder\" xml:space=\"preserve\">\n    <value>20</value>\n  </data>\n  <data name=\"&gt;&gt;bColorLeft.Name\" xml:space=\"preserve\">\n    <value>bColorLeft</value>\n  </data>\n  <data name=\"&gt;&gt;cbStyleDefault.ZOrder\" xml:space=\"preserve\">\n    <value>18</value>\n  </data>\n  <data name=\"cbColorRight.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>16</value>\n  </data>\n  <data name=\"cbStyleBottom.Items5\" xml:space=\"preserve\">\n    <value>Groove</value>\n  </data>\n  <data name=\"cbColorBottom.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 21</value>\n  </data>\n  <data name=\"tbWidthDefault.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>334, 40</value>\n  </data>\n  <data name=\"&gt;&gt;bCL.Name\" xml:space=\"preserve\">\n    <value>bCL</value>\n  </data>\n  <data name=\"&gt;&gt;cbStyleBottom.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bSB.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbStyleBottom.Items8\" xml:space=\"preserve\">\n    <value>WindowInset</value>\n  </data>\n  <data name=\"cbStyleRight.Items1\" xml:space=\"preserve\">\n    <value>Dotted</value>\n  </data>\n  <data name=\"&gt;&gt;tbWidthLeft.ZOrder\" xml:space=\"preserve\">\n    <value>23</value>\n  </data>\n  <data name=\"&gt;&gt;lBottom.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bCR.Name\" xml:space=\"preserve\">\n    <value>bCR</value>\n  </data>\n  <data name=\"bST.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bWL.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;bCR.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bWR.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>403, 107</value>\n  </data>\n  <data name=\"bSR.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"bWT.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"label7.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>192, 16</value>\n  </data>\n  <data name=\"tbWidthTop.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>26</value>\n  </data>\n  <data name=\"&gt;&gt;bColorRight.Name\" xml:space=\"preserve\">\n    <value>bColorRight</value>\n  </data>\n  <data name=\"bST.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;lLeft.ZOrder\" xml:space=\"preserve\">\n    <value>42</value>\n  </data>\n  <data name=\"bColorRight.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"bColorTop.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Style</value>\n  </data>\n  <data name=\"bColorDefault.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"cbStyleTop.Items7\" xml:space=\"preserve\">\n    <value>Inset</value>\n  </data>\n  <data name=\"cbStyleTop.Items6\" xml:space=\"preserve\">\n    <value>Ridge</value>\n  </data>\n  <data name=\"cbStyleLeft.Items9\" xml:space=\"preserve\">\n    <value>Outset</value>\n  </data>\n  <data name=\"cbStyleTop.Items4\" xml:space=\"preserve\">\n    <value>Double</value>\n  </data>\n  <data name=\"cbStyleTop.Items3\" xml:space=\"preserve\">\n    <value>Solid</value>\n  </data>\n  <data name=\"cbStyleTop.Items2\" xml:space=\"preserve\">\n    <value>Dashed</value>\n  </data>\n  <data name=\"cbStyleTop.Items1\" xml:space=\"preserve\">\n    <value>Dotted</value>\n  </data>\n  <data name=\"bCT.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"bWR.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"bColorLeft.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"cbStyleTop.Items9\" xml:space=\"preserve\">\n    <value>Outset</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/StyleBorderCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"lLeft.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"lLeft.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>38, 13</value>\n  </data>\n  <data name=\"lLeft.Text\" xml:space=\"preserve\">\n    <value>Слева</value>\n  </data>\n  <data name=\"lBottom.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"lBottom.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>37, 13</value>\n  </data>\n  <data name=\"lBottom.Text\" xml:space=\"preserve\">\n    <value>Снизу</value>\n  </data>\n  <data name=\"lTop.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"lTop.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>42, 13</value>\n  </data>\n  <data name=\"lTop.Text\" xml:space=\"preserve\">\n    <value>Сверху</value>\n  </data>\n  <data name=\"lRight.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"lRight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>44, 13</value>\n  </data>\n  <data name=\"lRight.Text\" xml:space=\"preserve\">\n    <value>Справа</value>\n  </data>\n  <data name=\"label2.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>98, 19</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>37, 13</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Стиль</value>\n  </data>\n  <data name=\"label6.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label6.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>369, 19</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>46, 13</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Ширина</value>\n  </data>\n  <data name=\"label7.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label7.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>218, 19</value>\n  </data>\n  <data name=\"label7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 13</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Цвет</value>\n  </data>\n  <data name=\"cbStyleLeft.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>95, 70</value>\n  </data>\n  <data name=\"cbStyleBottom.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>95, 166</value>\n  </data>\n  <data name=\"cbStyleTop.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>95, 134</value>\n  </data>\n  <data name=\"cbStyleRight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>95, 102</value>\n  </data>\n  <data name=\"bColorLeft.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>345, 72</value>\n  </data>\n  <data name=\"cbColorLeft.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>215, 70</value>\n  </data>\n  <data name=\"bColorRight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>345, 104</value>\n  </data>\n  <data name=\"cbColorRight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>215, 102</value>\n  </data>\n  <data name=\"bColorTop.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>345, 136</value>\n  </data>\n  <data name=\"cbColorTop.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>215, 134</value>\n  </data>\n  <data name=\"bColorBottom.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>345, 168</value>\n  </data>\n  <data name=\"cbColorBottom.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>215, 166</value>\n  </data>\n  <data name=\"tbWidthLeft.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>373, 70</value>\n  </data>\n  <data name=\"tbWidthRight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>373, 102</value>\n  </data>\n  <data name=\"tbWidthTop.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>373, 134</value>\n  </data>\n  <data name=\"tbWidthBottom.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>373, 166</value>\n  </data>\n  <data name=\"tbWidthDefault.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>373, 38</value>\n  </data>\n  <data name=\"bColorDefault.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>345, 40</value>\n  </data>\n  <data name=\"cbColorDefault.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>215, 38</value>\n  </data>\n  <data name=\"cbStyleDefault.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>95, 38</value>\n  </data>\n  <data name=\"label8.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 13</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>По умолчанию</value>\n  </data>\n  <data name=\"bSD.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>187, 40</value>\n  </data>\n  <data name=\"bSL.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>187, 73</value>\n  </data>\n  <data name=\"bSR.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>187, 106</value>\n  </data>\n  <data name=\"bST.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>187, 137</value>\n  </data>\n  <data name=\"bSB.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>187, 169</value>\n  </data>\n  <data name=\"bCD.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>315, 40</value>\n  </data>\n  <data name=\"bCT.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>315, 138</value>\n  </data>\n  <data name=\"bCB.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>315, 169</value>\n  </data>\n  <data name=\"bWB.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>442, 168</value>\n  </data>\n  <data name=\"bWT.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>442, 136</value>\n  </data>\n  <data name=\"bWR.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>442, 105</value>\n  </data>\n  <data name=\"bCR.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>315, 106</value>\n  </data>\n  <data name=\"bWL.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>442, 71</value>\n  </data>\n  <data name=\"bWD.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>442, 42</value>\n  </data>\n  <data name=\"bCL.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>315, 73</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>480, 312</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/StyleCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for StyleCtl.\n\t/// </summary>\n\tinternal class StyleCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n        private List<XmlNode> _ReportItems;\n\t\tprivate DesignXmlDraw _Draw;\n\t\t// flags for controlling whether syntax changed for a particular property\n\t\tprivate bool fPadLeft, fPadRight, fPadTop, fPadBottom;\n\t\tprivate bool fEndColor, fBackColor, fGradient, fDEName, fDEOutput;\n\n\t\tprivate System.Windows.Forms.Label label11;\n\t\tprivate System.Windows.Forms.Label label12;\n\t\tprivate System.Windows.Forms.Label label13;\n\t\tprivate System.Windows.Forms.Label label14;\n\t\tprivate System.Windows.Forms.TextBox tbPadLeft;\n\t\tprivate System.Windows.Forms.TextBox tbPadRight;\n\t\tprivate System.Windows.Forms.TextBox tbPadTop;\n\t\tprivate System.Windows.Forms.GroupBox grpBoxPadding;\n\t\tprivate System.Windows.Forms.GroupBox groupBox1;\n\t\tprivate System.Windows.Forms.Label label3;\n\t\tprivate System.Windows.Forms.Button bBackColor;\n\t\tprivate System.Windows.Forms.Label label10;\n\t\tprivate System.Windows.Forms.Label label15;\n\t\tprivate System.Windows.Forms.ComboBox cbEndColor;\n\t\tprivate System.Windows.Forms.ComboBox cbBackColor;\n\t\tprivate System.Windows.Forms.Button bEndColor;\n\t\tprivate System.Windows.Forms.ComboBox cbGradient;\n\t\tprivate System.Windows.Forms.TextBox tbPadBottom;\n\t\tprivate System.Windows.Forms.Label label1;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\tprivate System.Windows.Forms.TextBox tbDEName;\n\t\tprivate System.Windows.Forms.ComboBox cbDEOutput;\n\t\tprivate System.Windows.Forms.GroupBox gbXML;\n\t\tprivate System.Windows.Forms.Button bValueExpr;\n\t\tprivate System.Windows.Forms.Button button1;\n\t\tprivate System.Windows.Forms.Button button2;\n\t\tprivate System.Windows.Forms.Button button3;\n\t\tprivate System.Windows.Forms.Button bGradient;\n\t\tprivate System.Windows.Forms.Button bExprBackColor;\n\t\tprivate System.Windows.Forms.Button bExprEndColor;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n        internal StyleCtl(DesignXmlDraw dxDraw, List<XmlNode> reportItems)\n\t\t{\n\t\t\t_ReportItems = reportItems;\n\t\t\t_Draw = dxDraw;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues(_ReportItems[0]);\t\t\t\n\t\t}\n\n\t\tprivate void InitValues(XmlNode node)\n\t\t{\n            cbEndColor.Items.AddRange(StaticLists.ColorList);\n            cbBackColor.Items.AddRange(StaticLists.ColorList);\n\n\t\t\tXmlNode sNode = _Draw.GetNamedChildNode(node, \"Style\");\n\n\t\t\t// Handle padding\n\t\t\ttbPadLeft.Text = _Draw.GetElementValue(sNode, \"PaddingLeft\", \"0pt\");\n\t\t\ttbPadRight.Text = _Draw.GetElementValue(sNode, \"PaddingRight\", \"0pt\");\n\t\t\ttbPadTop.Text = _Draw.GetElementValue(sNode, \"PaddingTop\", \"0pt\");\n\t\t\ttbPadBottom.Text = _Draw.GetElementValue(sNode, \"PaddingBottom\", \"0pt\");\n\n\t\t\tthis.cbBackColor.Text = _Draw.GetElementValue(sNode, \"BackgroundColor\", \"\");\n\t\t\tthis.cbEndColor.Text = _Draw.GetElementValue(sNode, \"BackgroundGradientEndColor\", \"\");\n\t\t\tthis.cbGradient.Text = _Draw.GetElementValue(sNode, \"BackgroundGradientType\", \"None\");\n\t\t\tthis.tbDEName.Text = _Draw.GetElementValue(node, \"DataElementName\", \"\");\n\t\t\tthis.cbDEOutput.Text = _Draw.GetElementValue(node, \"DataElementOutput\", \"Auto\");\n\t\t\tif (node.Name != \"Chart\")\n\t\t\t{   // only chart support gradients\n\t\t\t\tthis.cbEndColor.Enabled = bExprEndColor.Enabled =\n\t\t\t\t\tcbGradient.Enabled = bGradient.Enabled = \n\t\t\t\t\tthis.bEndColor.Enabled = bExprEndColor.Enabled = false;\n\t\t\t}\n\t\t\tif (node.Name == \"Line\" || node.Name == \"Image\")\n\t\t\t{\n\t\t\t\tgbXML.Visible = false;\n\t\t\t}\n\n\t\t\t// nothing has changed now\n\t\t\tfPadLeft = fPadRight = fPadTop = fPadBottom =\n\t\t\t\tfEndColor = fBackColor = fGradient = fDEName = fDEOutput = false;\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(StyleCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.label11 = new System.Windows.Forms.Label();\n\t\t\tthis.label12 = new System.Windows.Forms.Label();\n\t\t\tthis.label13 = new System.Windows.Forms.Label();\n\t\t\tthis.label14 = new System.Windows.Forms.Label();\n\t\t\tthis.tbPadLeft = new System.Windows.Forms.TextBox();\n\t\t\tthis.tbPadRight = new System.Windows.Forms.TextBox();\n\t\t\tthis.tbPadTop = new System.Windows.Forms.TextBox();\n\t\t\tthis.tbPadBottom = new System.Windows.Forms.TextBox();\n\t\t\tthis.grpBoxPadding = new System.Windows.Forms.GroupBox();\n\t\t\tthis.button3 = new System.Windows.Forms.Button();\n\t\t\tthis.button2 = new System.Windows.Forms.Button();\n\t\t\tthis.button1 = new System.Windows.Forms.Button();\n\t\t\tthis.bValueExpr = new System.Windows.Forms.Button();\n\t\t\tthis.groupBox1 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.bGradient = new System.Windows.Forms.Button();\n\t\t\tthis.bExprBackColor = new System.Windows.Forms.Button();\n\t\t\tthis.bExprEndColor = new System.Windows.Forms.Button();\n\t\t\tthis.bEndColor = new System.Windows.Forms.Button();\n\t\t\tthis.cbBackColor = new System.Windows.Forms.ComboBox();\n\t\t\tthis.cbEndColor = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label15 = new System.Windows.Forms.Label();\n\t\t\tthis.cbGradient = new System.Windows.Forms.ComboBox();\n\t\t\tthis.label10 = new System.Windows.Forms.Label();\n\t\t\tthis.bBackColor = new System.Windows.Forms.Button();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.gbXML = new System.Windows.Forms.GroupBox();\n\t\t\tthis.cbDEOutput = new System.Windows.Forms.ComboBox();\n\t\t\tthis.tbDEName = new System.Windows.Forms.TextBox();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.grpBoxPadding.SuspendLayout();\n\t\t\tthis.groupBox1.SuspendLayout();\n\t\t\tthis.gbXML.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// label11\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label11, \"label11\");\n\t\t\tthis.label11.Name = \"label11\";\n\t\t\t// \n\t\t\t// label12\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label12, \"label12\");\n\t\t\tthis.label12.Name = \"label12\";\n\t\t\t// \n\t\t\t// label13\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label13, \"label13\");\n\t\t\tthis.label13.Name = \"label13\";\n\t\t\t// \n\t\t\t// label14\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label14, \"label14\");\n\t\t\tthis.label14.Name = \"label14\";\n\t\t\t// \n\t\t\t// tbPadLeft\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbPadLeft, \"tbPadLeft\");\n\t\t\tthis.tbPadLeft.Name = \"tbPadLeft\";\n\t\t\tthis.tbPadLeft.TextChanged += new System.EventHandler(this.tbPadLeft_TextChanged);\n\t\t\t// \n\t\t\t// tbPadRight\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbPadRight, \"tbPadRight\");\n\t\t\tthis.tbPadRight.Name = \"tbPadRight\";\n\t\t\tthis.tbPadRight.TextChanged += new System.EventHandler(this.tbPadRight_TextChanged);\n\t\t\t// \n\t\t\t// tbPadTop\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbPadTop, \"tbPadTop\");\n\t\t\tthis.tbPadTop.Name = \"tbPadTop\";\n\t\t\tthis.tbPadTop.TextChanged += new System.EventHandler(this.tbPadTop_TextChanged);\n\t\t\t// \n\t\t\t// tbPadBottom\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbPadBottom, \"tbPadBottom\");\n\t\t\tthis.tbPadBottom.Name = \"tbPadBottom\";\n\t\t\tthis.tbPadBottom.TextChanged += new System.EventHandler(this.tbPadBottom_TextChanged);\n\t\t\t// \n\t\t\t// grpBoxPadding\n\t\t\t// \n\t\t\tresources.ApplyResources(this.grpBoxPadding, \"grpBoxPadding\");\n\t\t\tthis.grpBoxPadding.Controls.Add(this.button3);\n\t\t\tthis.grpBoxPadding.Controls.Add(this.button2);\n\t\t\tthis.grpBoxPadding.Controls.Add(this.button1);\n\t\t\tthis.grpBoxPadding.Controls.Add(this.bValueExpr);\n\t\t\tthis.grpBoxPadding.Controls.Add(this.label13);\n\t\t\tthis.grpBoxPadding.Controls.Add(this.tbPadRight);\n\t\t\tthis.grpBoxPadding.Controls.Add(this.label14);\n\t\t\tthis.grpBoxPadding.Controls.Add(this.label11);\n\t\t\tthis.grpBoxPadding.Controls.Add(this.tbPadBottom);\n\t\t\tthis.grpBoxPadding.Controls.Add(this.label12);\n\t\t\tthis.grpBoxPadding.Controls.Add(this.tbPadTop);\n\t\t\tthis.grpBoxPadding.Controls.Add(this.tbPadLeft);\n\t\t\tthis.grpBoxPadding.Name = \"grpBoxPadding\";\n\t\t\tthis.grpBoxPadding.TabStop = false;\n\t\t\t// \n\t\t\t// button3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.button3, \"button3\");\n\t\t\tthis.button3.Name = \"button3\";\n\t\t\tthis.button3.Tag = \"pright\";\n\t\t\tthis.button3.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// button2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.button2, \"button2\");\n\t\t\tthis.button2.Name = \"button2\";\n\t\t\tthis.button2.Tag = \"pbottom\";\n\t\t\tthis.button2.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// button1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.button1, \"button1\");\n\t\t\tthis.button1.Name = \"button1\";\n\t\t\tthis.button1.Tag = \"ptop\";\n\t\t\tthis.button1.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bValueExpr\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bValueExpr, \"bValueExpr\");\n\t\t\tthis.bValueExpr.Name = \"bValueExpr\";\n\t\t\tthis.bValueExpr.Tag = \"pleft\";\n\t\t\tthis.bValueExpr.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// groupBox1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox1, \"groupBox1\");\n\t\t\tthis.groupBox1.Controls.Add(this.bGradient);\n\t\t\tthis.groupBox1.Controls.Add(this.bExprBackColor);\n\t\t\tthis.groupBox1.Controls.Add(this.bExprEndColor);\n\t\t\tthis.groupBox1.Controls.Add(this.bEndColor);\n\t\t\tthis.groupBox1.Controls.Add(this.cbBackColor);\n\t\t\tthis.groupBox1.Controls.Add(this.cbEndColor);\n\t\t\tthis.groupBox1.Controls.Add(this.label15);\n\t\t\tthis.groupBox1.Controls.Add(this.cbGradient);\n\t\t\tthis.groupBox1.Controls.Add(this.label10);\n\t\t\tthis.groupBox1.Controls.Add(this.bBackColor);\n\t\t\tthis.groupBox1.Controls.Add(this.label3);\n\t\t\tthis.groupBox1.Name = \"groupBox1\";\n\t\t\tthis.groupBox1.TabStop = false;\n\t\t\t// \n\t\t\t// bGradient\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bGradient, \"bGradient\");\n\t\t\tthis.bGradient.Name = \"bGradient\";\n\t\t\tthis.bGradient.Tag = \"bgradient\";\n\t\t\tthis.bGradient.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bExprBackColor\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bExprBackColor, \"bExprBackColor\");\n\t\t\tthis.bExprBackColor.Name = \"bExprBackColor\";\n\t\t\tthis.bExprBackColor.Tag = \"bcolor\";\n\t\t\tthis.bExprBackColor.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bExprEndColor\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bExprEndColor, \"bExprEndColor\");\n\t\t\tthis.bExprEndColor.Name = \"bExprEndColor\";\n\t\t\tthis.bExprEndColor.Tag = \"bendcolor\";\n\t\t\tthis.bExprEndColor.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// bEndColor\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bEndColor, \"bEndColor\");\n\t\t\tthis.bEndColor.Name = \"bEndColor\";\n\t\t\tthis.bEndColor.Click += new System.EventHandler(this.bColor_Click);\n\t\t\t// \n\t\t\t// cbBackColor\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbBackColor, \"cbBackColor\");\n\t\t\tthis.cbBackColor.Name = \"cbBackColor\";\n\t\t\tthis.cbBackColor.SelectedIndexChanged += new System.EventHandler(this.cbBackColor_SelectedIndexChanged);\n\t\t\tthis.cbBackColor.TextChanged += new System.EventHandler(this.cbBackColor_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// cbEndColor\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbEndColor, \"cbEndColor\");\n\t\t\tthis.cbEndColor.Name = \"cbEndColor\";\n\t\t\tthis.cbEndColor.SelectedIndexChanged += new System.EventHandler(this.cbEndColor_SelectedIndexChanged);\n\t\t\tthis.cbEndColor.TextChanged += new System.EventHandler(this.cbEndColor_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// label15\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label15, \"label15\");\n\t\t\tthis.label15.Name = \"label15\";\n\t\t\t// \n\t\t\t// cbGradient\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbGradient, \"cbGradient\");\n\t\t\tthis.cbGradient.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbGradient.Items.AddRange(new object[] {\n            resources.GetString(\"cbGradient.Items\"),\n            resources.GetString(\"cbGradient.Items1\"),\n            resources.GetString(\"cbGradient.Items2\"),\n            resources.GetString(\"cbGradient.Items3\"),\n            resources.GetString(\"cbGradient.Items4\"),\n            resources.GetString(\"cbGradient.Items5\"),\n            resources.GetString(\"cbGradient.Items6\"),\n            resources.GetString(\"cbGradient.Items7\")});\n\t\t\tthis.cbGradient.Name = \"cbGradient\";\n\t\t\tthis.cbGradient.SelectedIndexChanged += new System.EventHandler(this.cbGradient_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// label10\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label10, \"label10\");\n\t\t\tthis.label10.Name = \"label10\";\n\t\t\t// \n\t\t\t// bBackColor\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bBackColor, \"bBackColor\");\n\t\t\tthis.bBackColor.Name = \"bBackColor\";\n\t\t\tthis.bBackColor.Click += new System.EventHandler(this.bColor_Click);\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// gbXML\n\t\t\t// \n\t\t\tresources.ApplyResources(this.gbXML, \"gbXML\");\n\t\t\tthis.gbXML.Controls.Add(this.cbDEOutput);\n\t\t\tthis.gbXML.Controls.Add(this.tbDEName);\n\t\t\tthis.gbXML.Controls.Add(this.label2);\n\t\t\tthis.gbXML.Controls.Add(this.label1);\n\t\t\tthis.gbXML.Name = \"gbXML\";\n\t\t\tthis.gbXML.TabStop = false;\n\t\t\t// \n\t\t\t// cbDEOutput\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbDEOutput, \"cbDEOutput\");\n\t\t\tthis.cbDEOutput.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbDEOutput.Items.AddRange(new object[] {\n            resources.GetString(\"cbDEOutput.Items\"),\n            resources.GetString(\"cbDEOutput.Items1\"),\n            resources.GetString(\"cbDEOutput.Items2\"),\n            resources.GetString(\"cbDEOutput.Items3\")});\n\t\t\tthis.cbDEOutput.Name = \"cbDEOutput\";\n\t\t\tthis.cbDEOutput.SelectedIndexChanged += new System.EventHandler(this.cbDEOutput_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// tbDEName\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbDEName, \"tbDEName\");\n\t\t\tthis.tbDEName.Name = \"tbDEName\";\n\t\t\tthis.tbDEName.TextChanged += new System.EventHandler(this.tbDEName_TextChanged);\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// StyleCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.groupBox1);\n\t\t\tthis.Controls.Add(this.grpBoxPadding);\n\t\t\tthis.Controls.Add(this.gbXML);\n\t\t\tthis.Name = \"StyleCtl\";\n\t\t\tthis.grpBoxPadding.ResumeLayout(false);\n\t\t\tthis.grpBoxPadding.PerformLayout();\n\t\t\tthis.groupBox1.ResumeLayout(false);\n\t\t\tthis.groupBox1.PerformLayout();\n\t\t\tthis.gbXML.ResumeLayout(false);\n\t\t\tthis.gbXML.PerformLayout();\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n     \n\t\tpublic bool IsValid()\n\t\t{\n\t\t\tstring name=\"\";\n\t\t\ttry\n\t\t\t{\n\t\t\t\tif (fPadLeft && !tbPadLeft.Text.StartsWith(\"=\"))\n\t\t\t\t{\n\t\t\t\t\tname = Strings.StyleCtl_Show_Left;\n\t\t\t\t\tDesignerUtility.ValidateSize(tbPadLeft.Text, true, false);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (fPadRight && !tbPadRight.Text.StartsWith(\"=\"))\n\t\t\t\t{\n\t\t\t\t\tname = Strings.StyleCtl_Show_Right;\n\t\t\t\t\tDesignerUtility.ValidateSize(tbPadRight.Text, true, false);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (fPadTop && !tbPadTop.Text.StartsWith(\"=\"))\n\t\t\t\t{\n\t\t\t\t\tname = Strings.StyleCtl_Show_Top;\n\t\t\t\t\tDesignerUtility.ValidateSize(tbPadTop.Text, true, false);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (fPadBottom && !tbPadBottom.Text.StartsWith(\"=\"))\n\t\t\t\t{\n\t\t\t\t\tname = Strings.StyleCtl_Show_Bottom;\n\t\t\t\t\tDesignerUtility.ValidateSize(tbPadBottom.Text, true, false);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\tMessageBox.Show(ex.Message, string.Format(Strings.StyleCtl_Show_PaddingInvalid, name));\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// take information in control and apply to all the style nodes\n\t\t\t//  Only change information that has been marked as modified;\n\t\t\t//   this way when group is selected it is possible to change just\n\t\t\t//   the items you want and keep the rest the same.\n\n\t\t\tforeach (XmlNode riNode in this._ReportItems)\n\t\t\t\tApplyChanges(riNode);\n\n\t\t\t// nothing has changed now\n\t\t\tfPadLeft = fPadRight = fPadTop = fPadBottom =\n\t\t\t\tfEndColor = fBackColor = fGradient = fDEName = fDEOutput = false;\n\t\t}\n\n\t\tprivate void bFont_Click(object sender, System.EventArgs e)\n\t\t{\n            using (FontDialog fd = new FontDialog())\n            {\n                fd.ShowColor = true;\n                if (fd.ShowDialog() != DialogResult.OK)\n                    return;\n            } \n            return;\n\t\t}\n\n\t\tprivate void bColor_Click(object sender, System.EventArgs e)\n\t\t{\n            using (ColorDialog cd = new ColorDialog())\n            {\n                cd.AnyColor = true;\n                cd.FullOpen = true;\n                cd.CustomColors = RdlDesigner.GetCustomColors();\n\n                if (cd.ShowDialog() != DialogResult.OK)\n                    return;\n\n                RdlDesigner.SetCustomColors(cd.CustomColors);\n                if (sender == this.bEndColor)\n                    cbEndColor.Text = ColorTranslator.ToHtml(cd.Color);\n                else if (sender == this.bBackColor)\n                    cbBackColor.Text = ColorTranslator.ToHtml(cd.Color);\n            }\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void cbBackColor_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfBackColor = true;\n\t\t}\n\n\t\tprivate void cbGradient_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfGradient = true;\n\t\t}\n\n\t\tprivate void cbEndColor_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfEndColor = true;\n\t\t}\n\n\t\tprivate void tbPadLeft_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPadLeft = true;\n\t\t}\n\n\t\tprivate void tbPadRight_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPadRight = true;\n\t\t}\n\n\t\tprivate void tbPadTop_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPadTop = true;\n\t\t}\n\n\t\tprivate void tbPadBottom_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPadBottom = true;\n\t\t}\n\t\t\n\t\tprivate void ApplyChanges(XmlNode rNode)\n\t\t{\n\t\t\tXmlNode xNode = _Draw.GetNamedChildNode(rNode, \"Style\");\n\n\t\t\tif (fPadLeft)\n\t\t\t{ _Draw.SetElement(xNode, \"PaddingLeft\", tbPadLeft.Text); }\n\t\t\tif (fPadRight)\n\t\t\t{ _Draw.SetElement(xNode, \"PaddingRight\", tbPadRight.Text); }\n\t\t\tif (fPadTop)\n\t\t\t{ _Draw.SetElement(xNode, \"PaddingTop\", tbPadTop.Text); }\n\t\t\tif (fPadBottom)\n\t\t\t{ _Draw.SetElement(xNode, \"PaddingBottom\", tbPadBottom.Text); }\n\t\t\tif (fEndColor)\n\t\t\t{ _Draw.SetElement(xNode, \"BackgroundGradientEndColor\", cbEndColor.Text); }\n\t\t\tif (fBackColor)\n\t\t\t{ _Draw.SetElement(xNode, \"BackgroundColor\", cbBackColor.Text); }\n\t\t\tif (fGradient)\n\t\t\t{ _Draw.SetElement(xNode, \"BackgroundGradientType\", cbGradient.Text); }\n\t\t\tif (fDEName)\n\t\t\t{ _Draw.SetElement(rNode, \"DataElementName\", tbDEName.Text); }\n\t\t\tif (fDEOutput)\n\t\t\t{ _Draw.SetElement(rNode, \"DataElementOutput\", cbDEOutput.Text); }\n\t\t}\n\n\t\tprivate void cbDEOutput_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfDEOutput = true;\n\t\t}\n\n\t\tprivate void tbDEName_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfDEName = true;\n\t\t}\n\t\tprivate void bExpr_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tButton b = sender as Button;\n\t\t\tif (b == null)\n\t\t\t\treturn;\n\t\t\tControl c = null;\n\t\t\tbool bColor=false;\n\t\t\tswitch (b.Tag as string)\n\t\t\t{\n\t\t\t\tcase \"pleft\":\n\t\t\t\t\tc = tbPadLeft;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"pright\":\n\t\t\t\t\tc = tbPadRight;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ptop\":\n\t\t\t\t\tc = tbPadTop;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"pbottom\":\n\t\t\t\t\tc = tbPadBottom;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"bcolor\":\n\t\t\t\t\tc = cbBackColor;\n\t\t\t\t\tbColor = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"bgradient\":\n\t\t\t\t\tc = cbGradient;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"bendcolor\":\n\t\t\t\t\tc = cbEndColor;\n\t\t\t\t\tbColor = true;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (c == null)\n\t\t\t\treturn;\n\n\t\t\tXmlNode sNode = _ReportItems[0];\n\n            using (DialogExprEditor ee = new DialogExprEditor(_Draw, c.Text, sNode, bColor))\n            {\n                DialogResult dr = ee.ShowDialog();\n                if (dr == DialogResult.OK)\n                    c.Text = ee.Expression;\n\n            } \n            return;\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/StyleCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label13.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 16</value>\n  </data>\n  <data name=\"&gt;&gt;gbXML.Name\" xml:space=\"preserve\">\n    <value>gbXML</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.Name\" xml:space=\"preserve\">\n    <value>bValueExpr</value>\n  </data>\n  <data name=\"&gt;&gt;tbPadRight.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label15.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbDEName.Text\" xml:space=\"preserve\">\n    <value>textBox1</value>\n  </data>\n  <data name=\"button1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"bExprBackColor.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;label13.Parent\" xml:space=\"preserve\">\n    <value>grpBoxPadding</value>\n  </data>\n  <data name=\"&gt;&gt;tbPadTop.Parent\" xml:space=\"preserve\">\n    <value>grpBoxPadding</value>\n  </data>\n  <data name=\"cbGradient.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>161, 40</value>\n  </data>\n  <data name=\"tbDEName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>137, 20</value>\n  </data>\n  <data name=\"&gt;&gt;tbPadLeft.Name\" xml:space=\"preserve\">\n    <value>tbPadLeft</value>\n  </data>\n  <data name=\"tbDEName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>279, 20</value>\n  </data>\n  <data name=\"label14.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>216, 56</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Color</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label12.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"cbDEOutput.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>138, 48</value>\n  </data>\n  <data name=\"&gt;&gt;bGradient.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbDEOutput.Parent\" xml:space=\"preserve\">\n    <value>gbXML</value>\n  </data>\n  <data name=\"cbGradient.Items6\" xml:space=\"preserve\">\n    <value>HorizontalCenter</value>\n  </data>\n  <data name=\"button2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>400, 58</value>\n  </data>\n  <data name=\"&gt;&gt;cbGradient.Name\" xml:space=\"preserve\">\n    <value>cbGradient</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"label10.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>161, 24</value>\n  </data>\n  <data name=\"&gt;&gt;gbXML.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;tbPadBottom.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"cbGradient.Items5\" xml:space=\"preserve\">\n    <value>DiagonalRight</value>\n  </data>\n  <data name=\"bGradient.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>253, 42</value>\n  </data>\n  <data name=\"cbGradient.Items7\" xml:space=\"preserve\">\n    <value>VerticalCenter</value>\n  </data>\n  <data name=\"button2.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"cbGradient.Items1\" xml:space=\"preserve\">\n    <value>LeftRight</value>\n  </data>\n  <data name=\"&gt;&gt;bEndColor.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"cbGradient.Items3\" xml:space=\"preserve\">\n    <value>Center</value>\n  </data>\n  <data name=\"bExprBackColor.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"bValueExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label13.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"tbPadBottom.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>264, 56</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"tbPadRight.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>DataElementOutput</value>\n  </data>\n  <data name=\"button1.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"label13.Text\" xml:space=\"preserve\">\n    <value>Top</value>\n  </data>\n  <data name=\"label10.Text\" xml:space=\"preserve\">\n    <value>Gradient</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"cbDEOutput.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>117, 21</value>\n  </data>\n  <data name=\"bEndColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>404, 42</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;bEndColor.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;tbPadTop.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bExprEndColor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label10.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 16</value>\n  </data>\n  <data name=\"button3.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;tbPadBottom.Name\" xml:space=\"preserve\">\n    <value>tbPadBottom</value>\n  </data>\n  <data name=\"tbPadTop.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"cbDEOutput.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;label11.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Name\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"cbEndColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>286, 40</value>\n  </data>\n  <data name=\"&gt;&gt;cbBackColor.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"button3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>400, 26</value>\n  </data>\n  <data name=\"bBackColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>128, 42</value>\n  </data>\n  <data name=\"&gt;&gt;grpBoxPadding.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bValueExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;label11.Name\" xml:space=\"preserve\">\n    <value>label11</value>\n  </data>\n  <data name=\"tbPadTop.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>128, 20</value>\n  </data>\n  <data name=\"&gt;&gt;tbPadTop.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"label13.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>22</value>\n  </data>\n  <data name=\"&gt;&gt;bGradient.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bBackColor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;tbDEName.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;label12.Parent\" xml:space=\"preserve\">\n    <value>grpBoxPadding</value>\n  </data>\n  <data name=\"button3.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;cbDEOutput.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"gbXML.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 200</value>\n  </data>\n  <data name=\"&gt;&gt;cbEndColor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"gbXML.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 80</value>\n  </data>\n  <data name=\"label12.Text\" xml:space=\"preserve\">\n    <value>Right</value>\n  </data>\n  <data name=\"gbXML.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>24</value>\n  </data>\n  <data name=\"&gt;&gt;cbEndColor.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"bValueExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>184, 26</value>\n  </data>\n  <data name=\"&gt;&gt;bExprBackColor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>DataElementName</value>\n  </data>\n  <data name=\"cbEndColor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;button1.Parent\" xml:space=\"preserve\">\n    <value>grpBoxPadding</value>\n  </data>\n  <data name=\"button2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bExprBackColor.Name\" xml:space=\"preserve\">\n    <value>bExprBackColor</value>\n  </data>\n  <data name=\"bExprEndColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>377, 42</value>\n  </data>\n  <data name=\"&gt;&gt;cbDEOutput.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;cbDEOutput.Name\" xml:space=\"preserve\">\n    <value>cbDEOutput</value>\n  </data>\n  <data name=\"&gt;&gt;bExprEndColor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;grpBoxPadding.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>StyleCtl</value>\n  </data>\n  <data name=\"bExprEndColor.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;label15.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>116, 20</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Name\" xml:space=\"preserve\">\n    <value>label10</value>\n  </data>\n  <data name=\"button3.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;button2.Parent\" xml:space=\"preserve\">\n    <value>grpBoxPadding</value>\n  </data>\n  <data name=\"&gt;&gt;gbXML.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bBackColor.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"button1.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"label11.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 24</value>\n  </data>\n  <data name=\"&gt;&gt;tbPadTop.Name\" xml:space=\"preserve\">\n    <value>tbPadTop</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbEndColor.Name\" xml:space=\"preserve\">\n    <value>cbEndColor</value>\n  </data>\n  <data name=\"&gt;&gt;tbPadBottom.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bValueExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"label11.Text\" xml:space=\"preserve\">\n    <value>Left</value>\n  </data>\n  <data name=\"&gt;&gt;tbPadBottom.Parent\" xml:space=\"preserve\">\n    <value>grpBoxPadding</value>\n  </data>\n  <data name=\"&gt;&gt;bExprEndColor.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bExprEndColor.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;grpBoxPadding.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>gbXML</value>\n  </data>\n  <data name=\"&gt;&gt;button3.Parent\" xml:space=\"preserve\">\n    <value>grpBoxPadding</value>\n  </data>\n  <data name=\"bGradient.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;label14.Parent\" xml:space=\"preserve\">\n    <value>grpBoxPadding</value>\n  </data>\n  <data name=\"grpBoxPadding.Text\" xml:space=\"preserve\">\n    <value>Padding</value>\n  </data>\n  <data name=\"label12.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>21</value>\n  </data>\n  <data name=\"button3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"cbGradient.Items\" xml:space=\"preserve\">\n    <value>None</value>\n  </data>\n  <data name=\"cbEndColor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 21</value>\n  </data>\n  <data name=\"tbPadLeft.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>128, 20</value>\n  </data>\n  <data name=\"label15.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"label14.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>23</value>\n  </data>\n  <data name=\"&gt;&gt;cbBackColor.Name\" xml:space=\"preserve\">\n    <value>cbBackColor</value>\n  </data>\n  <data name=\"&gt;&gt;bEndColor.Name\" xml:space=\"preserve\">\n    <value>bEndColor</value>\n  </data>\n  <data name=\"&gt;&gt;tbDEName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbBackColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 40</value>\n  </data>\n  <data name=\"cbDEOutput.Items\" xml:space=\"preserve\">\n    <value>Output</value>\n  </data>\n  <data name=\"&gt;&gt;cbBackColor.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;button2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbDEName.Name\" xml:space=\"preserve\">\n    <value>tbDEName</value>\n  </data>\n  <data name=\"&gt;&gt;bExprEndColor.Name\" xml:space=\"preserve\">\n    <value>bExprEndColor</value>\n  </data>\n  <data name=\"&gt;&gt;bBackColor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbDEOutput.Items2\" xml:space=\"preserve\">\n    <value>ContentsOnly</value>\n  </data>\n  <data name=\"&gt;&gt;label12.Name\" xml:space=\"preserve\">\n    <value>label12</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bBackColor.Name\" xml:space=\"preserve\">\n    <value>bBackColor</value>\n  </data>\n  <data name=\"&gt;&gt;label10.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 24</value>\n  </data>\n  <data name=\"&gt;&gt;cbEndColor.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"bBackColor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"tbPadRight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>264, 24</value>\n  </data>\n  <data name=\"&gt;&gt;cbGradient.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"cbGradient.Items4\" xml:space=\"preserve\">\n    <value>DiagonalLeft</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbDEName.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>472, 312</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"label14.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 16</value>\n  </data>\n  <data name=\"&gt;&gt;button1.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;label13.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label15.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"bExprBackColor.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"bValueExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"button1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"cbBackColor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 21</value>\n  </data>\n  <data name=\"&gt;&gt;bGradient.Name\" xml:space=\"preserve\">\n    <value>bGradient</value>\n  </data>\n  <data name=\"cbBackColor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"grpBoxPadding.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 96</value>\n  </data>\n  <data name=\"bExprEndColor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"&gt;&gt;label13.Name\" xml:space=\"preserve\">\n    <value>label13</value>\n  </data>\n  <data name=\"&gt;&gt;cbGradient.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label11.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>gbXML</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"grpBoxPadding.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"label11.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>20</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.Parent\" xml:space=\"preserve\">\n    <value>grpBoxPadding</value>\n  </data>\n  <data name=\"cbGradient.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;cbGradient.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"button1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>184, 58</value>\n  </data>\n  <data name=\"&gt;&gt;bGradient.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;button1.Name\" xml:space=\"preserve\">\n    <value>button1</value>\n  </data>\n  <data name=\"button2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"tbPadRight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>128, 20</value>\n  </data>\n  <data name=\"label14.Text\" xml:space=\"preserve\">\n    <value>Bottom</value>\n  </data>\n  <data name=\"&gt;&gt;cbBackColor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bGradient.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"label10.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"label15.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>286, 24</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 20</value>\n  </data>\n  <data name=\"bValueExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;tbPadLeft.ZOrder\" xml:space=\"preserve\">\n    <value>11</value>\n  </data>\n  <data name=\"&gt;&gt;tbDEName.Parent\" xml:space=\"preserve\">\n    <value>gbXML</value>\n  </data>\n  <data name=\"&gt;&gt;tbPadRight.Parent\" xml:space=\"preserve\">\n    <value>grpBoxPadding</value>\n  </data>\n  <data name=\"label12.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>224, 24</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>11, 48</value>\n  </data>\n  <data name=\"&gt;&gt;label12.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Background</value>\n  </data>\n  <data name=\"label15.Text\" xml:space=\"preserve\">\n    <value>End Color</value>\n  </data>\n  <data name=\"cbDEOutput.Items1\" xml:space=\"preserve\">\n    <value>NoOutput</value>\n  </data>\n  <data name=\"groupBox1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 8</value>\n  </data>\n  <data name=\"&gt;&gt;button2.Name\" xml:space=\"preserve\">\n    <value>button2</value>\n  </data>\n  <data name=\"&gt;&gt;button3.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbPadBottom.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;label14.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"groupBox1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"cbGradient.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 21</value>\n  </data>\n  <data name=\"button3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;button2.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;tbPadRight.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;tbPadLeft.Parent\" xml:space=\"preserve\">\n    <value>grpBoxPadding</value>\n  </data>\n  <data name=\"bBackColor.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"bGradient.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"label12.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 16</value>\n  </data>\n  <data name=\"bGradient.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;label15.Name\" xml:space=\"preserve\">\n    <value>label15</value>\n  </data>\n  <data name=\"grpBoxPadding.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 88</value>\n  </data>\n  <data name=\"&gt;&gt;bExprBackColor.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"bExprEndColor.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;button3.Name\" xml:space=\"preserve\">\n    <value>button3</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 80</value>\n  </data>\n  <data name=\"button2.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;label14.Name\" xml:space=\"preserve\">\n    <value>label14</value>\n  </data>\n  <data name=\"button1.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"bGradient.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"bExprBackColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>102, 42</value>\n  </data>\n  <data name=\"&gt;&gt;label11.Parent\" xml:space=\"preserve\">\n    <value>grpBoxPadding</value>\n  </data>\n  <data name=\"button2.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"tbPadBottom.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>128, 20</value>\n  </data>\n  <data name=\"bEndColor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"gbXML.Text\" xml:space=\"preserve\">\n    <value>XML</value>\n  </data>\n  <data name=\"&gt;&gt;bBackColor.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"label13.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 56</value>\n  </data>\n  <data name=\"&gt;&gt;bEndColor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbPadLeft.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;tbPadRight.Name\" xml:space=\"preserve\">\n    <value>tbPadRight</value>\n  </data>\n  <data name=\"&gt;&gt;tbPadLeft.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label11.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 16</value>\n  </data>\n  <data name=\"&gt;&gt;gbXML.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bExprBackColor.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"label15.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 16</value>\n  </data>\n  <data name=\"bExprBackColor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;button1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;grpBoxPadding.Name\" xml:space=\"preserve\">\n    <value>grpBoxPadding</value>\n  </data>\n  <data name=\"bEndColor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"cbGradient.Items2\" xml:space=\"preserve\">\n    <value>TopBottom</value>\n  </data>\n  <data name=\"bExprEndColor.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>10, 25</value>\n  </data>\n  <data name=\"bEndColor.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"tbPadTop.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>48, 56</value>\n  </data>\n  <data name=\"cbDEOutput.Items3\" xml:space=\"preserve\">\n    <value>Auto</value>\n  </data>\n  <data name=\"tbPadLeft.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>48, 24</value>\n  </data>\n  <data name=\"bExprBackColor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;button3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label14.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/StyleCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label11.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label11.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>38, 13</value>\n  </data>\n  <data name=\"label11.Text\" xml:space=\"preserve\">\n    <value>Слева</value>\n  </data>\n  <data name=\"label12.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label12.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>216, 24</value>\n  </data>\n  <data name=\"label12.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>44, 13</value>\n  </data>\n  <data name=\"label12.Text\" xml:space=\"preserve\">\n    <value>Справа</value>\n  </data>\n  <data name=\"label13.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label13.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>42, 13</value>\n  </data>\n  <data name=\"label13.Text\" xml:space=\"preserve\">\n    <value>Сверху</value>\n  </data>\n  <data name=\"label14.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label14.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>37, 13</value>\n  </data>\n  <data name=\"label14.Text\" xml:space=\"preserve\">\n    <value>Снизу</value>\n  </data>\n  <data name=\"tbPadLeft.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>52, 24</value>\n  </data>\n  <data name=\"tbPadLeft.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>124, 20</value>\n  </data>\n  <data name=\"tbPadTop.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>52, 56</value>\n  </data>\n  <data name=\"tbPadTop.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>124, 20</value>\n  </data>\n  <data name=\"grpBoxPadding.Text\" xml:space=\"preserve\">\n    <value>Отступ</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Фон</value>\n  </data>\n  <data name=\"label15.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label15.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>83, 13</value>\n  </data>\n  <data name=\"label15.Text\" xml:space=\"preserve\">\n    <value>Конечный цвет</value>\n  </data>\n  <data name=\"label10.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label10.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>54, 13</value>\n  </data>\n  <data name=\"label10.Text\" xml:space=\"preserve\">\n    <value>Градиент</value>\n  </data>\n  <data name=\"label3.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 13</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Цвет</value>\n  </data>\n  <data name=\"label2.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>103, 13</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Выводить элемент</value>\n  </data>\n  <data name=\"label1.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>109, 13</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Название элемента</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/StyleTextCtl.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.Globalization;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    /// <summary>\n    /// Summary description for StyleCtl.\n    /// </summary>\n    internal class StyleTextCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n        private List<XmlNode> _ReportItems;\n\t\tprivate DesignXmlDraw _Draw;\n\t\tprivate string _DataSetName;\n\t\tprivate bool fHorzAlign, fFormat, fDirection, fWritingMode, fTextDecoration;\n\t\tprivate bool fColor, fVerticalAlign, fFontStyle, fFontWeight, fFontSize, fFontFamily;\n\t\tprivate bool fValue;\n\t\tprivate System.Windows.Forms.Label label4;\n\t\tprivate System.Windows.Forms.Label label5;\n\t\tprivate System.Windows.Forms.Label label6;\n\t\tprivate System.Windows.Forms.Label label7;\n\t\tprivate System.Windows.Forms.Label label8;\n\t\tprivate System.Windows.Forms.Label lFont;\n\t\tprivate System.Windows.Forms.Button bFont;\n\t\tprivate System.Windows.Forms.ComboBox cbHorzAlign;\n\t\tprivate System.Windows.Forms.ComboBox cbFormat;\n\t\tprivate System.Windows.Forms.ComboBox cbDirection;\n\t\tprivate System.Windows.Forms.ComboBox cbWritingMode;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\tprivate System.Windows.Forms.ComboBox cbTextDecoration;\n\t\tprivate System.Windows.Forms.Button bColor;\n\t\tprivate System.Windows.Forms.Label label9;\n\t\tprivate System.Windows.Forms.ComboBox cbColor;\n\t\tprivate System.Windows.Forms.ComboBox cbVerticalAlign;\n\t\tprivate System.Windows.Forms.Label label3;\n\t\tprivate System.Windows.Forms.ComboBox cbFontStyle;\n\t\tprivate System.Windows.Forms.ComboBox cbFontWeight;\n\t\tprivate System.Windows.Forms.Label label10;\n\t\tprivate System.Windows.Forms.ComboBox cbFontSize;\n\t\tprivate System.Windows.Forms.Label label11;\n\t\tprivate System.Windows.Forms.ComboBox cbFontFamily;\n\t\tprivate System.Windows.Forms.GroupBox groupBox1;\n\t\tprivate System.Windows.Forms.Label lblValue;\n        private ComboBox cbValue;\n        private System.Windows.Forms.Button bValueExpr;\n\t\tprivate System.Windows.Forms.Button bFamily;\n\t\tprivate System.Windows.Forms.Button bStyle;\n\t\tprivate System.Windows.Forms.Button bColorEx;\n\t\tprivate System.Windows.Forms.Button bSize;\n\t\tprivate System.Windows.Forms.Button bWeight;\n\t\tprivate System.Windows.Forms.Button button2;\n\t\tprivate System.Windows.Forms.Button bAlignment;\n\t\tprivate System.Windows.Forms.Button bDirection;\n\t\tprivate System.Windows.Forms.Button bVertical;\n\t\tprivate System.Windows.Forms.Button bWrtMode;\n\t\tprivate System.Windows.Forms.Button bFormat;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n        internal StyleTextCtl(DesignXmlDraw dxDraw, List<XmlNode> styles, PropertyDialog myDialog)\n\t\t{\n\t\t\t_ReportItems = styles;\n\t\t\t_Draw = dxDraw;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitTextStyles();\n            myDialog.Shown += MyDialog_Shown;\n\t\t}\n\n        private void MyDialog_Shown(object sender, EventArgs e)\n        {\n            cbValue.Focus();\n        }\n\n        private void InitTextStyles()\n\t\t{\n            cbColor.Items.AddRange(StaticLists.ColorList);\n\n\t\t\tXmlNode sNode = _ReportItems[0];\n\t\t\tif (_ReportItems.Count > 1)\n\t\t\t{\n\t\t\t\tcbValue.Text = Strings.PositionCtl_InitValues_GroupSelected;\n\t\t\t\tcbValue.Enabled = false;\n\t\t\t\tlblValue.Enabled = false;\n\t\t\t}\n\t\t\telse if (sNode.Name == \"Textbox\")\n\t\t\t{\n\t\t\t\tXmlNode vNode = _Draw.GetNamedChildNode(sNode, \"Value\");\n\t\t\t\tif (vNode != null)\n\t\t\t\t\tcbValue.Text = vNode.InnerText;\n\t\t\t\t// now populate the combo box\n\t\t\t\t// Find the dataregion that contains the Textbox (if any)\n\t\t\t\tfor (XmlNode pNode = sNode.ParentNode; pNode != null; pNode = pNode.ParentNode)\n\t\t\t\t{\n\t\t\t\t\tif (pNode.Name == \"List\" ||\n\t\t\t\t\t\tpNode.Name == \"Table\" ||\n\t\t\t\t\t\tpNode.Name == \"Matrix\" ||\n\t\t\t\t\t\tpNode.Name == \"Chart\")\n\t\t\t\t\t{\n\t\t\t\t\t\t_DataSetName = _Draw.GetDataSetNameValue(pNode);\n\t\t\t\t\t\tif (_DataSetName != null)\t// found it\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstring[] f = _Draw.GetFields(_DataSetName, true);\n                            if (f != null)\n\t\t\t\t\t\t\t    cbValue.Items.AddRange(f);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// parameters\n\t\t\t\tstring[] ps = _Draw.GetReportParameters(true);\n\t\t\t\tif (ps != null)\n\t\t\t\t\tcbValue.Items.AddRange(ps);\n\t\t\t\t// globals\n\t\t\t\tcbValue.Items.AddRange(StaticLists.GlobalList);\n\t\t\t}\n\t\t\telse if (sNode.Name == \"Title\" || sNode.Name == \"fyi:Title2\" || sNode.Name == \"Title2\")// 20022008 AJM GJL\n\t\t\t{\n\t\t\t\tlblValue.Text = Strings.StyleTextCtl_InitTextStyles_Caption;\t\t// Note: label needs to equal the element name\n\t\t\t\tXmlNode vNode = _Draw.GetNamedChildNode(sNode, \"Caption\");\n\t\t\t\tif (vNode != null)\n\t\t\t\t\tcbValue.Text = vNode.InnerText;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlblValue.Visible = false;\n\t\t\t\tcbValue.Visible = false;\n                bValueExpr.Visible = false;\n\t\t\t}\n\n\t\t\tsNode = _Draw.GetNamedChildNode(sNode, \"Style\");\n\n\t\t\tstring sFontStyle=\"Normal\";\n\t\t\tstring sFontFamily=\"Arial\";\n\t\t\tstring sFontWeight=\"Normal\";\n\t\t\tstring sFontSize=\"10pt\";\n\t\t\tstring sTextDecoration=\"None\";\n\t\t\tstring sHorzAlign=\"General\";\n\t\t\tstring sVerticalAlign=\"Top\";\n\t\t\tstring sColor=\"Black\";\n\t\t\tstring sFormat=\"\";\n\t\t\tstring sDirection=\"LTR\";\n\t\t\tstring sWritingMode=\"lr-tb\";\n\t\t\tforeach (XmlNode lNode in sNode)\n\t\t\t{\n\t\t\t\tif (lNode.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (lNode.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"FontStyle\":\n\t\t\t\t\t\tsFontStyle = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"FontFamily\":\n\t\t\t\t\t\tsFontFamily = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"FontWeight\":\n\t\t\t\t\t\tsFontWeight = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"FontSize\":\n\t\t\t\t\t\tsFontSize = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"TextDecoration\":\n\t\t\t\t\t\tsTextDecoration = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"TextAlign\":\n\t\t\t\t\t\tsHorzAlign = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"VerticalAlign\":\n\t\t\t\t\t\tsVerticalAlign = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Color\":\n\t\t\t\t\t\tsColor = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Format\":\n\t\t\t\t\t\tsFormat = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Direction\":\n\t\t\t\t\t\tsDirection = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"WritingMode\":\n\t\t\t\t\t\tsWritingMode = lNode.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Population Font Family dropdown\n\t\t\tforeach (FontFamily ff in FontFamily.Families)\n\t\t\t{\n\t\t\t\tcbFontFamily.Items.Add(ff.Name);\n\t\t\t}\n\n\t\t\tthis.cbFontStyle.Text = sFontStyle;\n\t\t\tthis.cbFontFamily.Text = sFontFamily;\n\t\t\tthis.cbFontWeight.Text = sFontWeight;\n\t\t\tthis.cbFontSize.Text = sFontSize;\n\t\t\tthis.cbTextDecoration.Text = sTextDecoration;\n\t\t\tthis.cbHorzAlign.Text = sHorzAlign;\n\t\t\tthis.cbVerticalAlign.Text = sVerticalAlign;\n\t\t\tthis.cbColor.Text = sColor;\n\t\t\tthis.cbFormat.Text = sFormat;\n\t\t\tthis.cbDirection.Text = sDirection;\n\t\t\tthis.cbWritingMode.Text = sWritingMode;\n\n\t\t\tfHorzAlign = fFormat = fDirection = fWritingMode = fTextDecoration =\n\t\t\t\tfColor = fVerticalAlign = fFontStyle = fFontWeight = fFontSize = fFontFamily =\n\t\t\t\tfValue = false;\n\n\t\t\treturn;\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(StyleTextCtl));\n            this.DoubleBuffered = true;\n            this.label4 = new System.Windows.Forms.Label();\n            this.label5 = new System.Windows.Forms.Label();\n            this.label6 = new System.Windows.Forms.Label();\n            this.label7 = new System.Windows.Forms.Label();\n            this.label8 = new System.Windows.Forms.Label();\n            this.lFont = new System.Windows.Forms.Label();\n            this.bFont = new System.Windows.Forms.Button();\n            this.cbVerticalAlign = new System.Windows.Forms.ComboBox();\n            this.cbHorzAlign = new System.Windows.Forms.ComboBox();\n            this.cbFormat = new System.Windows.Forms.ComboBox();\n            this.cbDirection = new System.Windows.Forms.ComboBox();\n            this.cbWritingMode = new System.Windows.Forms.ComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.cbTextDecoration = new System.Windows.Forms.ComboBox();\n            this.bColor = new System.Windows.Forms.Button();\n            this.label9 = new System.Windows.Forms.Label();\n            this.cbColor = new System.Windows.Forms.ComboBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.cbFontStyle = new System.Windows.Forms.ComboBox();\n            this.cbFontWeight = new System.Windows.Forms.ComboBox();\n            this.label10 = new System.Windows.Forms.Label();\n            this.cbFontSize = new System.Windows.Forms.ComboBox();\n            this.label11 = new System.Windows.Forms.Label();\n            this.cbFontFamily = new System.Windows.Forms.ComboBox();\n            this.lblValue = new System.Windows.Forms.Label();\n            this.groupBox1 = new System.Windows.Forms.GroupBox();\n            this.button2 = new System.Windows.Forms.Button();\n            this.bWeight = new System.Windows.Forms.Button();\n            this.bSize = new System.Windows.Forms.Button();\n            this.bColorEx = new System.Windows.Forms.Button();\n            this.bStyle = new System.Windows.Forms.Button();\n            this.bFamily = new System.Windows.Forms.Button();\n            this.cbValue = new System.Windows.Forms.ComboBox();\n            this.bValueExpr = new System.Windows.Forms.Button();\n            this.bAlignment = new System.Windows.Forms.Button();\n            this.bDirection = new System.Windows.Forms.Button();\n            this.bVertical = new System.Windows.Forms.Button();\n            this.bWrtMode = new System.Windows.Forms.Button();\n            this.bFormat = new System.Windows.Forms.Button();\n            this.groupBox1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // label4\n            // \n            resources.ApplyResources(this.label4, \"label4\");\n            this.label4.Name = \"label4\";\n            // \n            // label5\n            // \n            resources.ApplyResources(this.label5, \"label5\");\n            this.label5.Name = \"label5\";\n            // \n            // label6\n            // \n            resources.ApplyResources(this.label6, \"label6\");\n            this.label6.Name = \"label6\";\n            // \n            // label7\n            // \n            resources.ApplyResources(this.label7, \"label7\");\n            this.label7.Name = \"label7\";\n            // \n            // label8\n            // \n            resources.ApplyResources(this.label8, \"label8\");\n            this.label8.Name = \"label8\";\n            // \n            // lFont\n            // \n            resources.ApplyResources(this.lFont, \"lFont\");\n            this.lFont.Name = \"lFont\";\n            // \n            // bFont\n            // \n            resources.ApplyResources(this.bFont, \"bFont\");\n            this.bFont.Name = \"bFont\";\n            this.bFont.Click += new System.EventHandler(this.bFont_Click);\n            // \n            // cbVerticalAlign\n            // \n            this.cbVerticalAlign.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbVerticalAlign.Items.AddRange(new object[] {\n            resources.GetString(\"cbVerticalAlign.Items\"),\n            resources.GetString(\"cbVerticalAlign.Items1\"),\n            resources.GetString(\"cbVerticalAlign.Items2\")});\n            resources.ApplyResources(this.cbVerticalAlign, \"cbVerticalAlign\");\n            this.cbVerticalAlign.Name = \"cbVerticalAlign\";\n            this.cbVerticalAlign.SelectedIndexChanged += new System.EventHandler(this.cbVerticalAlign_TextChanged);\n            this.cbVerticalAlign.TextChanged += new System.EventHandler(this.cbVerticalAlign_TextChanged);\n            // \n            // cbHorzAlign\n            // \n            this.cbHorzAlign.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbHorzAlign.Items.AddRange(new object[] {\n            resources.GetString(\"cbHorzAlign.Items\"),\n            resources.GetString(\"cbHorzAlign.Items1\"),\n            resources.GetString(\"cbHorzAlign.Items2\"),\n            resources.GetString(\"cbHorzAlign.Items3\"),\n            resources.GetString(\"cbHorzAlign.Items4\")});\n            resources.ApplyResources(this.cbHorzAlign, \"cbHorzAlign\");\n            this.cbHorzAlign.Name = \"cbHorzAlign\";\n            this.cbHorzAlign.SelectedIndexChanged += new System.EventHandler(this.cbHorzAlign_TextChanged);\n            this.cbHorzAlign.TextChanged += new System.EventHandler(this.cbHorzAlign_TextChanged);\n            // \n            // cbFormat\n            // \n            this.cbFormat.Items.AddRange(new object[] {\n            resources.GetString(\"cbFormat.Items\"),\n            resources.GetString(\"cbFormat.Items1\"),\n            resources.GetString(\"cbFormat.Items2\"),\n            resources.GetString(\"cbFormat.Items3\"),\n            resources.GetString(\"cbFormat.Items4\"),\n            resources.GetString(\"cbFormat.Items5\"),\n            resources.GetString(\"cbFormat.Items6\"),\n            resources.GetString(\"cbFormat.Items7\"),\n            resources.GetString(\"cbFormat.Items8\"),\n            resources.GetString(\"cbFormat.Items9\"),\n            resources.GetString(\"cbFormat.Items10\"),\n            resources.GetString(\"cbFormat.Items11\"),\n            resources.GetString(\"cbFormat.Items12\"),\n            resources.GetString(\"cbFormat.Items13\"),\n            resources.GetString(\"cbFormat.Items14\"),\n            resources.GetString(\"cbFormat.Items15\"),\n            resources.GetString(\"cbFormat.Items16\"),\n            resources.GetString(\"cbFormat.Items17\"),\n            resources.GetString(\"cbFormat.Items18\"),\n            resources.GetString(\"cbFormat.Items19\")});\n            resources.ApplyResources(this.cbFormat, \"cbFormat\");\n            this.cbFormat.Name = \"cbFormat\";\n            this.cbFormat.TextChanged += new System.EventHandler(this.cbFormat_TextChanged);\n            // \n            // cbDirection\n            // \n            this.cbDirection.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbDirection.Items.AddRange(new object[] {\n            resources.GetString(\"cbDirection.Items\"),\n            resources.GetString(\"cbDirection.Items1\")});\n            resources.ApplyResources(this.cbDirection, \"cbDirection\");\n            this.cbDirection.Name = \"cbDirection\";\n            this.cbDirection.SelectedIndexChanged += new System.EventHandler(this.cbDirection_TextChanged);\n            this.cbDirection.TextChanged += new System.EventHandler(this.cbDirection_TextChanged);\n            // \n            // cbWritingMode\n            // \n            this.cbWritingMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbWritingMode.Items.AddRange(new object[] {\n            resources.GetString(\"cbWritingMode.Items\"),\n            resources.GetString(\"cbWritingMode.Items1\"),\n            resources.GetString(\"cbWritingMode.Items2\")});\n            resources.ApplyResources(this.cbWritingMode, \"cbWritingMode\");\n            this.cbWritingMode.Name = \"cbWritingMode\";\n            this.cbWritingMode.SelectedIndexChanged += new System.EventHandler(this.cbWritingMode_TextChanged);\n            this.cbWritingMode.TextChanged += new System.EventHandler(this.cbWritingMode_TextChanged);\n            // \n            // label2\n            // \n            resources.ApplyResources(this.label2, \"label2\");\n            this.label2.Name = \"label2\";\n            // \n            // cbTextDecoration\n            // \n            this.cbTextDecoration.Items.AddRange(new object[] {\n            resources.GetString(\"cbTextDecoration.Items\"),\n            resources.GetString(\"cbTextDecoration.Items1\"),\n            resources.GetString(\"cbTextDecoration.Items2\"),\n            resources.GetString(\"cbTextDecoration.Items3\")});\n            resources.ApplyResources(this.cbTextDecoration, \"cbTextDecoration\");\n            this.cbTextDecoration.Name = \"cbTextDecoration\";\n            this.cbTextDecoration.SelectedIndexChanged += new System.EventHandler(this.cbTextDecoration_TextChanged);\n            this.cbTextDecoration.TextChanged += new System.EventHandler(this.cbTextDecoration_TextChanged);\n            // \n            // bColor\n            // \n            resources.ApplyResources(this.bColor, \"bColor\");\n            this.bColor.Name = \"bColor\";\n            this.bColor.Click += new System.EventHandler(this.bColor_Click);\n            // \n            // label9\n            // \n            resources.ApplyResources(this.label9, \"label9\");\n            this.label9.Name = \"label9\";\n            // \n            // cbColor\n            // \n            resources.ApplyResources(this.cbColor, \"cbColor\");\n            this.cbColor.Name = \"cbColor\";\n            this.cbColor.TextChanged += new System.EventHandler(this.cbColor_TextChanged);\n            // \n            // label3\n            // \n            resources.ApplyResources(this.label3, \"label3\");\n            this.label3.Name = \"label3\";\n            // \n            // cbFontStyle\n            // \n            this.cbFontStyle.Items.AddRange(new object[] {\n            resources.GetString(\"cbFontStyle.Items\"),\n            resources.GetString(\"cbFontStyle.Items1\")});\n            resources.ApplyResources(this.cbFontStyle, \"cbFontStyle\");\n            this.cbFontStyle.Name = \"cbFontStyle\";\n            this.cbFontStyle.TextChanged += new System.EventHandler(this.cbFontStyle_TextChanged);\n            // \n            // cbFontWeight\n            // \n            this.cbFontWeight.Items.AddRange(new object[] {\n            resources.GetString(\"cbFontWeight.Items\"),\n            resources.GetString(\"cbFontWeight.Items1\"),\n            resources.GetString(\"cbFontWeight.Items2\"),\n            resources.GetString(\"cbFontWeight.Items3\"),\n            resources.GetString(\"cbFontWeight.Items4\"),\n            resources.GetString(\"cbFontWeight.Items5\"),\n            resources.GetString(\"cbFontWeight.Items6\"),\n            resources.GetString(\"cbFontWeight.Items7\"),\n            resources.GetString(\"cbFontWeight.Items8\"),\n            resources.GetString(\"cbFontWeight.Items9\"),\n            resources.GetString(\"cbFontWeight.Items10\"),\n            resources.GetString(\"cbFontWeight.Items11\"),\n            resources.GetString(\"cbFontWeight.Items12\")});\n            resources.ApplyResources(this.cbFontWeight, \"cbFontWeight\");\n            this.cbFontWeight.Name = \"cbFontWeight\";\n            this.cbFontWeight.TextChanged += new System.EventHandler(this.cbFontWeight_TextChanged);\n            // \n            // label10\n            // \n            resources.ApplyResources(this.label10, \"label10\");\n            this.label10.Name = \"label10\";\n            // \n            // cbFontSize\n            // \n            this.cbFontSize.Items.AddRange(new object[] {\n            resources.GetString(\"cbFontSize.Items\"),\n            resources.GetString(\"cbFontSize.Items1\"),\n            resources.GetString(\"cbFontSize.Items2\"),\n            resources.GetString(\"cbFontSize.Items3\"),\n            resources.GetString(\"cbFontSize.Items4\"),\n            resources.GetString(\"cbFontSize.Items5\"),\n            resources.GetString(\"cbFontSize.Items6\"),\n            resources.GetString(\"cbFontSize.Items7\"),\n            resources.GetString(\"cbFontSize.Items8\"),\n            resources.GetString(\"cbFontSize.Items9\"),\n            resources.GetString(\"cbFontSize.Items10\"),\n            resources.GetString(\"cbFontSize.Items11\"),\n            resources.GetString(\"cbFontSize.Items12\"),\n            resources.GetString(\"cbFontSize.Items13\"),\n            resources.GetString(\"cbFontSize.Items14\"),\n            resources.GetString(\"cbFontSize.Items15\")});\n            resources.ApplyResources(this.cbFontSize, \"cbFontSize\");\n            this.cbFontSize.Name = \"cbFontSize\";\n            this.cbFontSize.TextChanged += new System.EventHandler(this.cbFontSize_TextChanged);\n            // \n            // label11\n            // \n            resources.ApplyResources(this.label11, \"label11\");\n            this.label11.Name = \"label11\";\n            // \n            // cbFontFamily\n            // \n            this.cbFontFamily.Items.AddRange(new object[] {\n            resources.GetString(\"cbFontFamily.Items\")});\n            resources.ApplyResources(this.cbFontFamily, \"cbFontFamily\");\n            this.cbFontFamily.Name = \"cbFontFamily\";\n            this.cbFontFamily.TextChanged += new System.EventHandler(this.cbFontFamily_TextChanged);\n            // \n            // lblValue\n            // \n            resources.ApplyResources(this.lblValue, \"lblValue\");\n            this.lblValue.Name = \"lblValue\";\n            // \n            // groupBox1\n            // \n            this.groupBox1.Controls.Add(this.cbTextDecoration);\n            this.groupBox1.Controls.Add(this.cbFontFamily);\n            this.groupBox1.Controls.Add(this.button2);\n            this.groupBox1.Controls.Add(this.bWeight);\n            this.groupBox1.Controls.Add(this.bSize);\n            this.groupBox1.Controls.Add(this.bColorEx);\n            this.groupBox1.Controls.Add(this.bStyle);\n            this.groupBox1.Controls.Add(this.bFamily);\n            this.groupBox1.Controls.Add(this.lFont);\n            this.groupBox1.Controls.Add(this.bFont);\n            this.groupBox1.Controls.Add(this.label2);\n            this.groupBox1.Controls.Add(this.bColor);\n            this.groupBox1.Controls.Add(this.label9);\n            this.groupBox1.Controls.Add(this.cbColor);\n            this.groupBox1.Controls.Add(this.label3);\n            this.groupBox1.Controls.Add(this.cbFontStyle);\n            this.groupBox1.Controls.Add(this.cbFontWeight);\n            this.groupBox1.Controls.Add(this.label10);\n            this.groupBox1.Controls.Add(this.cbFontSize);\n            this.groupBox1.Controls.Add(this.label11);\n            resources.ApplyResources(this.groupBox1, \"groupBox1\");\n            this.groupBox1.Name = \"groupBox1\";\n            this.groupBox1.TabStop = false;\n            // \n            // button2\n            // \n            resources.ApplyResources(this.button2, \"button2\");\n            this.button2.Name = \"button2\";\n            this.button2.Tag = \"decoration\";\n            this.button2.Click += new System.EventHandler(this.bExpr_Click);\n            // \n            // bWeight\n            // \n            resources.ApplyResources(this.bWeight, \"bWeight\");\n            this.bWeight.Name = \"bWeight\";\n            this.bWeight.Tag = \"weight\";\n            this.bWeight.Click += new System.EventHandler(this.bExpr_Click);\n            // \n            // bSize\n            // \n            resources.ApplyResources(this.bSize, \"bSize\");\n            this.bSize.Name = \"bSize\";\n            this.bSize.Tag = \"size\";\n            this.bSize.Click += new System.EventHandler(this.bExpr_Click);\n            // \n            // bColorEx\n            // \n            resources.ApplyResources(this.bColorEx, \"bColorEx\");\n            this.bColorEx.Name = \"bColorEx\";\n            this.bColorEx.Tag = \"color\";\n            this.bColorEx.Click += new System.EventHandler(this.bExpr_Click);\n            // \n            // bStyle\n            // \n            resources.ApplyResources(this.bStyle, \"bStyle\");\n            this.bStyle.Name = \"bStyle\";\n            this.bStyle.Tag = \"style\";\n            this.bStyle.Click += new System.EventHandler(this.bExpr_Click);\n            // \n            // bFamily\n            // \n            resources.ApplyResources(this.bFamily, \"bFamily\");\n            this.bFamily.Name = \"bFamily\";\n            this.bFamily.Tag = \"family\";\n            this.bFamily.Click += new System.EventHandler(this.bExpr_Click);\n            // \n            // cbValue\n            // \n            resources.ApplyResources(this.cbValue, \"cbValue\");\n            this.cbValue.Name = \"cbValue\";\n            this.cbValue.TextChanged += new System.EventHandler(this.cbValue_TextChanged);\n            // \n            // bValueExpr\n            // \n            resources.ApplyResources(this.bValueExpr, \"bValueExpr\");\n            this.bValueExpr.Name = \"bValueExpr\";\n            this.bValueExpr.Tag = \"value\";\n            this.bValueExpr.Click += new System.EventHandler(this.bExpr_Click);\n            // \n            // bAlignment\n            // \n            resources.ApplyResources(this.bAlignment, \"bAlignment\");\n            this.bAlignment.Name = \"bAlignment\";\n            this.bAlignment.Tag = \"halign\";\n            this.bAlignment.Click += new System.EventHandler(this.bExpr_Click);\n            // \n            // bDirection\n            // \n            resources.ApplyResources(this.bDirection, \"bDirection\");\n            this.bDirection.Name = \"bDirection\";\n            this.bDirection.Tag = \"direction\";\n            this.bDirection.Click += new System.EventHandler(this.bExpr_Click);\n            // \n            // bVertical\n            // \n            resources.ApplyResources(this.bVertical, \"bVertical\");\n            this.bVertical.Name = \"bVertical\";\n            this.bVertical.Tag = \"valign\";\n            this.bVertical.Click += new System.EventHandler(this.bExpr_Click);\n            // \n            // bWrtMode\n            // \n            resources.ApplyResources(this.bWrtMode, \"bWrtMode\");\n            this.bWrtMode.Name = \"bWrtMode\";\n            this.bWrtMode.Tag = \"writing\";\n            this.bWrtMode.Click += new System.EventHandler(this.bExpr_Click);\n            // \n            // bFormat\n            // \n            resources.ApplyResources(this.bFormat, \"bFormat\");\n            this.bFormat.Name = \"bFormat\";\n            this.bFormat.Tag = \"format\";\n            this.bFormat.Click += new System.EventHandler(this.bExpr_Click);\n            // \n            // StyleTextCtl\n            // \n            this.Controls.Add(this.bFormat);\n            this.Controls.Add(this.bWrtMode);\n            this.Controls.Add(this.bVertical);\n            this.Controls.Add(this.bDirection);\n            this.Controls.Add(this.bAlignment);\n            this.Controls.Add(this.bValueExpr);\n            this.Controls.Add(this.cbValue);\n            this.Controls.Add(this.groupBox1);\n            this.Controls.Add(this.lblValue);\n            this.Controls.Add(this.cbWritingMode);\n            this.Controls.Add(this.cbDirection);\n            this.Controls.Add(this.cbFormat);\n            this.Controls.Add(this.cbHorzAlign);\n            this.Controls.Add(this.cbVerticalAlign);\n            this.Controls.Add(this.label8);\n            this.Controls.Add(this.label7);\n            this.Controls.Add(this.label6);\n            this.Controls.Add(this.label5);\n            this.Controls.Add(this.label4);\n            this.Name = \"StyleTextCtl\";\n            resources.ApplyResources(this, \"$this\");\n            this.groupBox1.ResumeLayout(false);\n            this.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n      \n\n\t\tpublic bool IsValid()\n\t\t{\n\t\t\tif (fFontSize)\n\t\t\t{\n\t\t\t\ttry \n\t\t\t\t{\n\t\t\t\t\tif (!cbFontSize.Text.Trim().StartsWith(\"=\"))\n\t\t\t\t\t\tDesignerUtility.ValidateSize(cbFontSize.Text, false, false);\n\t\t\t\t}\n\t\t\t\tcatch (Exception e)\n\t\t\t\t{\n\t\t\t\t\tMessageBox.Show(e.Message, Strings.StyleTextCtl_Show_InvalidFontSize);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// take information in control and apply to all the style nodes\n\t\t\t//  Only change information that has been marked as modified;\n\t\t\t//   this way when group is selected it is possible to change just\n\t\t\t//   the items you want and keep the rest the same.\n\t\t\t\n\t\t\tforeach (XmlNode riNode in this._ReportItems)\n\t\t\t\tApplyChanges(riNode);\n\n\t\t\tfHorzAlign = fFormat = fDirection = fWritingMode = fTextDecoration =\n\t\t\t\tfColor = fVerticalAlign = fFontStyle = fFontWeight = fFontSize = fFontFamily =\n\t\t\t\tfValue = false;\n\t\t}\n\n\t\tpublic void ApplyChanges(XmlNode node)\n\t\t{\n\t\t\tif (cbValue.Enabled)\n\t\t\t{\n\t\t\t\tif (fValue)\n\t\t\t\t\t_Draw.SetElement(node, \"Value\", cbValue.Text);\t\t// only adjust value when single item selected\n\t\t\t}\n\n\t\t\tXmlNode sNode = _Draw.GetNamedChildNode(node, \"Style\");\n\n\t\t\tif (fFontStyle)\n\t\t\t\t_Draw.SetElement(sNode, \"FontStyle\", cbFontStyle.Text);\n\t\t\tif (fFontFamily)\n\t\t\t\t_Draw.SetElement(sNode, \"FontFamily\", cbFontFamily.Text);\n\t\t\tif (fFontWeight)\n\t\t\t\t_Draw.SetElement(sNode, \"FontWeight\", cbFontWeight.Text);\n\n\t\t\tif (fFontSize)\n\t\t\t{\n\t\t\t\tif(cbFontSize.Text.StartsWith(\"=\"))\n                    _Draw.SetElement(sNode, \"FontSize\", cbFontSize.Text);\n                else\n                {\n                    float size = DesignXmlDraw.GetSize(cbFontSize.Text);\n\t\t\t\t    if (size <= 0){\n\t\t\t\t\t    size = DesignXmlDraw.GetSize(cbFontSize.Text+\"pt\");\t// Try assuming pt\n\t\t\t\t\t    if (size <= 0)\t// still no good\n\t\t\t\t\t\t    size = 10;\t// just set default value\n\t\t\t\t    }\n\t\t\t\t    string rs = string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.#}pt\", size);\n\n\t\t\t\t    _Draw.SetElement(sNode, \"FontSize\", rs);\t// force to string\n                }\n\t\t\t}\n\t\t\tif (fTextDecoration)\n\t\t\t\t_Draw.SetElement(sNode, \"TextDecoration\", cbTextDecoration.Text);    \n\t\t\tif (fHorzAlign)\n\t\t\t\t_Draw.SetElement(sNode, \"TextAlign\", cbHorzAlign.Text);\n\t\t\tif (fVerticalAlign)\n\t\t\t\t_Draw.SetElement(sNode, \"VerticalAlign\", cbVerticalAlign.Text);\n\t\t\tif (fColor)\n\t\t\t\t_Draw.SetElement(sNode, \"Color\", cbColor.Text);\n\t\t\tif (fFormat)\n\t\t\t{\n\t\t\t\tif (cbFormat.Text.Length == 0)\t\t// Don't put out a format if no format value\n\t\t\t\t\t_Draw.RemoveElement(sNode, \"Format\");\n\t\t\t\telse\n\t\t\t\t\t_Draw.SetElement(sNode, \"Format\", cbFormat.Text);\n\t\t\t}\n\t\t\tif (fDirection)\n\t\t\t\t_Draw.SetElement(sNode, \"Direction\", cbDirection.Text);\n\t\t\tif (fWritingMode)\n\t\t\t\t_Draw.SetElement(sNode, \"WritingMode\", cbWritingMode.Text);\n\t\t\t\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void bFont_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tFontDialog fd = new FontDialog();\n\t\t\tfd.ShowColor = true;\n\n\t\t\t// STYLE\n\t\t\tSystem.Drawing.FontStyle fs = 0;\n\t\t\tif (cbFontStyle.Text == \"Italic\")\n\t\t\t\tfs |= System.Drawing.FontStyle.Italic;\n\n\t\t\tif (cbTextDecoration.Text == \"Underline\")\n\t\t\t\tfs |= FontStyle.Underline;\n\t\t\telse if (cbTextDecoration.Text == \"LineThrough\")\n\t\t\t\tfs |= FontStyle.Strikeout;\n\n\t\t\t// WEIGHT\n\t\t\tswitch (cbFontWeight.Text)\n\t\t\t{\n\t\t\t\tcase \"Bold\":\n\t\t\t\tcase \"Bolder\":\n\t\t\t\tcase \"500\":\n\t\t\t\tcase \"600\":\n\t\t\t\tcase \"700\":\n\t\t\t\tcase \"800\":\n\t\t\t\tcase \"900\":\n\t\t\t\t\tfs |= System.Drawing.FontStyle.Bold;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tfloat size=10;\n\t\t\tsize = DesignXmlDraw.GetSize(cbFontSize.Text);\n\t\t\tif (size <= 0)\n\t\t\t{\n\t\t\t\tsize = DesignXmlDraw.GetSize(cbFontSize.Text+\"pt\");\t// Try assuming pt\n\t\t\t\tif (size <= 0)\t// still no good\n\t\t\t\t\tsize = 10;\t// just set default value\n\t\t\t}\n\t\t\tFont drawFont = new Font(cbFontFamily.Text, size, fs);\t// si.FontSize already in points\n\n\n\t\t\tfd.Font = drawFont;\n\t\t\tfd.Color = \n\t\t\t\tDesignerUtility.ColorFromHtml(cbColor.Text, System.Drawing.Color.Black);\n            try\n            {\n                DialogResult dr = fd.ShowDialog();\n                if (dr != DialogResult.OK)\n                {\n                    drawFont.Dispose();\n                    return;\n                }\n\n                // Apply all the font info\n                cbFontWeight.Text = fd.Font.Bold ? \"Bold\" : \"Normal\";\n                cbFontStyle.Text = fd.Font.Italic ? \"Italic\" : \"Normal\";\n                cbFontFamily.Text = fd.Font.FontFamily.Name;\n                cbFontSize.Text = fd.Font.Size.ToString() + \"pt\";\n                cbColor.Text = ColorTranslator.ToHtml(fd.Color);\n                if (fd.Font.Underline)\n                    this.cbTextDecoration.Text = \"Underline\";\n                else if (fd.Font.Strikeout)\n                    this.cbTextDecoration.Text = \"LineThrough\";\n                else\n                    this.cbTextDecoration.Text = \"None\";\n                drawFont.Dispose();\n            }\n            finally\n            {\n                fd.Dispose();\n            }\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void bColor_Click(object sender, System.EventArgs e)\n\t\t{\n            using (ColorDialog cd = new ColorDialog())\n            {\n                cd.AnyColor = true;\n                cd.FullOpen = true;\n\n                cd.CustomColors = RdlDesigner.GetCustomColors();\n                cd.Color =\n                    DesignerUtility.ColorFromHtml(cbColor.Text, System.Drawing.Color.Black);\n\n                if (cd.ShowDialog() != DialogResult.OK)\n                    return;\n\n                RdlDesigner.SetCustomColors(cd.CustomColors);\n                if (sender == this.bColor)\n                    cbColor.Text = ColorTranslator.ToHtml(cd.Color);\n            }\t\t\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void cbValue_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfValue = true;\n\t\t}\n\n\t\tprivate void cbFontFamily_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfFontFamily = true;\n\t\t}\n\n\t\tprivate void cbFontSize_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfFontSize = true;\n\t\t}\n\n\t\tprivate void cbFontStyle_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfFontStyle = true;\n\t\t}\n\n\t\tprivate void cbFontWeight_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfFontWeight = true;\n\t\t}\n\n\t\tprivate void cbColor_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfColor = true;\n\t\t}\n\n\t\tprivate void cbTextDecoration_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfTextDecoration = true;\n\t\t}\n\n\t\tprivate void cbHorzAlign_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfHorzAlign = true;\n\t\t}\n\n\t\tprivate void cbVerticalAlign_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfVerticalAlign = true;\n\t\t}\n\n\t\tprivate void cbDirection_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfDirection = true;\n\t\t}\n\n\t\tprivate void cbWritingMode_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfWritingMode = true;\n\t\t}\n\n\t\tprivate void cbFormat_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfFormat = true;\n\t\t}\n\n\t\tprivate void bExpr_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tButton b = sender as Button;\n\t\t\tif (b == null)\n\t\t\t\treturn;\n\t\t\tControl c = null;\n\t\t\tbool bColor=false;\n\t\t\tswitch (b.Tag as string)\n\t\t\t{\n\t\t\t\tcase \"value\":\n\t\t\t\t\tc = cbValue;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"family\":\n\t\t\t\t\tc = cbFontFamily;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"style\":\n\t\t\t\t\tc = cbFontStyle;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"color\":\n\t\t\t\t\tc = cbColor;\n\t\t\t\t\tbColor = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"size\":\n\t\t\t\t\tc = cbFontSize;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"weight\":\n\t\t\t\t\tc = cbFontWeight;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"decoration\":\n\t\t\t\t\tc = cbTextDecoration;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"halign\":\n\t\t\t\t\tc = cbHorzAlign;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"valign\":\n\t\t\t\t\tc = cbVerticalAlign;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"direction\":\n\t\t\t\t\tc = cbDirection;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"writing\":\n\t\t\t\t\tc = cbWritingMode;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"format\":\n\t\t\t\t\tc = cbFormat;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (c == null)\n\t\t\t\treturn;\n\n\t\t\tXmlNode sNode = _ReportItems[0];\n\n            using (DialogExprEditor ee = new DialogExprEditor(_Draw, c.Text, sNode, bColor))\n            {\n                DialogResult dr = ee.ShowDialog();\n                if (dr == DialogResult.OK)\n                    c.Text = ee.Expression;\n            }\n            return;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/StyleTextCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"&gt;&gt;cbVerticalAlign.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bFont.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"cbFontWeight.Items12\" xml:space=\"preserve\">\n    <value>900</value>\n  </data>\n  <data name=\"&gt;&gt;bDirection.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label9.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>22</value>\n  </data>\n  <data name=\"&gt;&gt;bColorEx.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"cbFormat.Items11\" xml:space=\"preserve\">\n    <value>MM/dd/yyyy HH:mm</value>\n  </data>\n  <data name=\"&gt;&gt;label6.ZOrder\" xml:space=\"preserve\">\n    <value>16</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Direction</value>\n  </data>\n  <data name=\"&gt;&gt;label5.ZOrder\" xml:space=\"preserve\">\n    <value>17</value>\n  </data>\n  <data name=\"&gt;&gt;cbTextDecoration.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"button2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>13</value>\n  </data>\n  <data name=\"bVertical.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;bWrtMode.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbFormat.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontFamily.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbFontSize.Items2\" xml:space=\"preserve\">\n    <value>10pt</value>\n  </data>\n  <data name=\"cbFormat.Items10\" xml:space=\"preserve\">\n    <value>dddd, MMMM dd, yyyy HH:mm:ss</value>\n  </data>\n  <data name=\"groupBox1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"label10.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>27</value>\n  </data>\n  <data name=\"cbTextDecoration.Items1\" xml:space=\"preserve\">\n    <value>Underline</value>\n  </data>\n  <data name=\"cbVerticalAlign.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"cbFontWeight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>264, 48</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bSize.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"button2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>376, 82</value>\n  </data>\n  <data name=\"&gt;&gt;bWeight.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"bColor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"bColor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"cbWritingMode.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"cbFontStyle.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>72, 48</value>\n  </data>\n  <data name=\"cbFormat.Items13\" xml:space=\"preserve\">\n    <value>MMMM dd</value>\n  </data>\n  <data name=\"&gt;&gt;lblValue.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbVerticalAlign.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>304, 168</value>\n  </data>\n  <data name=\"&gt;&gt;cbVerticalAlign.ZOrder\" xml:space=\"preserve\">\n    <value>13</value>\n  </data>\n  <data name=\"cbWritingMode.Items\" xml:space=\"preserve\">\n    <value>lr-tb</value>\n  </data>\n  <data name=\"bFormat.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;bFormat.Name\" xml:space=\"preserve\">\n    <value>bFormat</value>\n  </data>\n  <data name=\"cbFormat.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>296, 21</value>\n  </data>\n  <data name=\"label11.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>29</value>\n  </data>\n  <data name=\"cbFontSize.Items12\" xml:space=\"preserve\">\n    <value>28pt</value>\n  </data>\n  <data name=\"&gt;&gt;bColorEx.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbValue.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 112</value>\n  </data>\n  <data name=\"bVertical.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"cbFontSize.Items4\" xml:space=\"preserve\">\n    <value>12pt</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 48</value>\n  </data>\n  <data name=\"label10.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 16</value>\n  </data>\n  <data name=\"cbDirection.Items\" xml:space=\"preserve\">\n    <value>LTR</value>\n  </data>\n  <data name=\"cbFormat.Items12\" xml:space=\"preserve\">\n    <value>MM/dd/yyyy HH:mm:ss</value>\n  </data>\n  <data name=\"cbFontWeight.Items1\" xml:space=\"preserve\">\n    <value>Normal</value>\n  </data>\n  <data name=\"lFont.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label6.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 168</value>\n  </data>\n  <data name=\"label11.Text\" xml:space=\"preserve\">\n    <value>Size</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Name\" xml:space=\"preserve\">\n    <value>label10</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.Name\" xml:space=\"preserve\">\n    <value>bValueExpr</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbFormat.ZOrder\" xml:space=\"preserve\">\n    <value>11</value>\n  </data>\n  <data name=\"cbFontSize.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 21</value>\n  </data>\n  <data name=\"&gt;&gt;bWrtMode.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bColor.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"cbFontStyle.Items1\" xml:space=\"preserve\">\n    <value>Italic</value>\n  </data>\n  <data name=\"&gt;&gt;cbColor.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"bDirection.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"cbTextDecoration.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"cbFormat.Items\" xml:space=\"preserve\">\n    <value>None</value>\n  </data>\n  <data name=\"cbFontSize.Items15\" xml:space=\"preserve\">\n    <value>72pt</value>\n  </data>\n  <data name=\"cbFormat.Items6\" xml:space=\"preserve\">\n    <value />\n  </data>\n  <data name=\"&gt;&gt;label11.Name\" xml:space=\"preserve\">\n    <value>label11</value>\n  </data>\n  <data name=\"cbFormat.Items14\" xml:space=\"preserve\">\n    <value>Ddd, dd MMM yyyy HH':'mm'\"ss 'GMT'</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontStyle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bSize.Name\" xml:space=\"preserve\">\n    <value>bSize</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bFormat.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"bDirection.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"cbFontFamily.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 21</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbDirection.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>72, 80</value>\n  </data>\n  <data name=\"bAlignment.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;cbWritingMode.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbColor.ZOrder\" xml:space=\"preserve\">\n    <value>13</value>\n  </data>\n  <data name=\"button2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"cbTextDecoration.Items\" xml:space=\"preserve\">\n    <value>None</value>\n  </data>\n  <data name=\"&gt;&gt;cbHorzAlign.ZOrder\" xml:space=\"preserve\">\n    <value>12</value>\n  </data>\n  <data name=\"lFont.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"cbFontSize.Items10\" xml:space=\"preserve\">\n    <value>24pt</value>\n  </data>\n  <data name=\"bAlignment.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"cbFormat.Items15\" xml:space=\"preserve\">\n    <value>yyyy-MM-dd HH:mm:ss</value>\n  </data>\n  <data name=\"bWrtMode.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>384, 202</value>\n  </data>\n  <data name=\"cbFormat.Items16\" xml:space=\"preserve\">\n    <value>yyyy-MM-dd HH:mm:ss GMT</value>\n  </data>\n  <data name=\"cbFontWeight.Items5\" xml:space=\"preserve\">\n    <value>200</value>\n  </data>\n  <data name=\"&gt;&gt;bWeight.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;cbTextDecoration.Name\" xml:space=\"preserve\">\n    <value>cbTextDecoration</value>\n  </data>\n  <data name=\"bAlignment.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>152, 170</value>\n  </data>\n  <data name=\"cbFontSize.Items\" xml:space=\"preserve\">\n    <value>8pt</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"cbColor.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"cbHorzAlign.Items4\" xml:space=\"preserve\">\n    <value>Justified</value>\n  </data>\n  <data name=\"bFamily.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>176, 20</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>224, 80</value>\n  </data>\n  <data name=\"cbHorzAlign.Items\" xml:space=\"preserve\">\n    <value>Left</value>\n  </data>\n  <data name=\"cbDirection.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontFamily.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;bAlignment.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bVertical.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 16</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bFormat.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"&gt;&gt;lFont.Name\" xml:space=\"preserve\">\n    <value>lFont</value>\n  </data>\n  <data name=\"cbWritingMode.Items1\" xml:space=\"preserve\">\n    <value>tb-rl</value>\n  </data>\n  <data name=\"cbWritingMode.Items2\" xml:space=\"preserve\">\n    <value>tb-lr</value>\n  </data>\n  <data name=\"button2.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"label11.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 16</value>\n  </data>\n  <data name=\"cbVerticalAlign.Items2\" xml:space=\"preserve\">\n    <value>Bottom</value>\n  </data>\n  <data name=\"bSize.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"label9.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 80</value>\n  </data>\n  <data name=\"cbFormat.Items18\" xml:space=\"preserve\">\n    <value>HH:mm:ss</value>\n  </data>\n  <data name=\"cbValue.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bVertical.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bColorEx.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Name\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;bFormat.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label11.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;lFont.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;cbFormat.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Format</value>\n  </data>\n  <data name=\"&gt;&gt;bAlignment.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bColorEx.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"cbFormat.Items2\" xml:space=\"preserve\">\n    <value>#,##0</value>\n  </data>\n  <data name=\"label8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 16</value>\n  </data>\n  <data name=\"label11.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>224, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontSize.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Alignment</value>\n  </data>\n  <data name=\"&gt;&gt;bFamily.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bFamily.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbFormat.Items7\" xml:space=\"preserve\">\n    <value>MM/dd/yyyy</value>\n  </data>\n  <data name=\"cbColor.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 21</value>\n  </data>\n  <data name=\"&gt;&gt;bStyle.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"bValueExpr.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"bWeight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>376, 52</value>\n  </data>\n  <data name=\"&gt;&gt;cbDirection.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Name\" xml:space=\"preserve\">\n    <value>label8</value>\n  </data>\n  <data name=\"cbVerticalAlign.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 21</value>\n  </data>\n  <data name=\"label7.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 200</value>\n  </data>\n  <data name=\"label7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 16</value>\n  </data>\n  <data name=\"cbFontWeight.Items6\" xml:space=\"preserve\">\n    <value>300</value>\n  </data>\n  <data name=\"cbFontStyle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 21</value>\n  </data>\n  <data name=\"&gt;&gt;cbValue.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontSize.ZOrder\" xml:space=\"preserve\">\n    <value>18</value>\n  </data>\n  <data name=\"cbFormat.Items17\" xml:space=\"preserve\">\n    <value>HH:mm</value>\n  </data>\n  <data name=\"&gt;&gt;bFamily.Name\" xml:space=\"preserve\">\n    <value>bFamily</value>\n  </data>\n  <data name=\"&gt;&gt;bDirection.Name\" xml:space=\"preserve\">\n    <value>bDirection</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Name\" xml:space=\"preserve\">\n    <value>label9</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbFontSize.Items11\" xml:space=\"preserve\">\n    <value>26pt</value>\n  </data>\n  <data name=\"&gt;&gt;lFont.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;bWrtMode.Name\" xml:space=\"preserve\">\n    <value>bWrtMode</value>\n  </data>\n  <data name=\"lblValue.Text\" xml:space=\"preserve\">\n    <value>Value</value>\n  </data>\n  <data name=\"bColorEx.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>176, 82</value>\n  </data>\n  <data name=\"&gt;&gt;bColor.Name\" xml:space=\"preserve\">\n    <value>bColor</value>\n  </data>\n  <data name=\"&gt;&gt;label10.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontStyle.Name\" xml:space=\"preserve\">\n    <value>cbFontStyle</value>\n  </data>\n  <data name=\"bValueExpr.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;cbColor.Name\" xml:space=\"preserve\">\n    <value>cbColor</value>\n  </data>\n  <data name=\"bFont.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"cbFontSize.Items7\" xml:space=\"preserve\">\n    <value>18pt</value>\n  </data>\n  <data name=\"bValueExpr.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bValueExpr.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 16</value>\n  </data>\n  <data name=\"cbFontFamily.Items\" xml:space=\"preserve\">\n    <value>Arial</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bFamily.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"groupBox1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 40</value>\n  </data>\n  <data name=\"&gt;&gt;bFont.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"cbFontStyle.Items\" xml:space=\"preserve\">\n    <value>Normal</value>\n  </data>\n  <data name=\"&gt;&gt;bDirection.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bSize.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontWeight.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bValueExpr.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;label11.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>Vertical</value>\n  </data>\n  <data name=\"cbFontSize.Items14\" xml:space=\"preserve\">\n    <value>48pt</value>\n  </data>\n  <data name=\"bValueExpr.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"bFormat.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"cbFormat.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>80, 232</value>\n  </data>\n  <data name=\"cbDirection.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>80, 200</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 16</value>\n  </data>\n  <data name=\"label5.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>216, 168</value>\n  </data>\n  <data name=\"cbFormat.Items3\" xml:space=\"preserve\">\n    <value>#,##0.00</value>\n  </data>\n  <data name=\"&gt;&gt;label10.ZOrder\" xml:space=\"preserve\">\n    <value>17</value>\n  </data>\n  <data name=\"label4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"cbFontWeight.Items4\" xml:space=\"preserve\">\n    <value>100</value>\n  </data>\n  <data name=\"cbFontSize.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>264, 16</value>\n  </data>\n  <data name=\"&gt;&gt;button2.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"cbFontSize.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"cbFormat.Items8\" xml:space=\"preserve\">\n    <value>dddd, MMMM dd, yyyy</value>\n  </data>\n  <data name=\"bWrtMode.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;bColorEx.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"bColorEx.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbDirection.ZOrder\" xml:space=\"preserve\">\n    <value>10</value>\n  </data>\n  <data name=\"cbWritingMode.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>304, 200</value>\n  </data>\n  <data name=\"cbFontWeight.Items7\" xml:space=\"preserve\">\n    <value>400</value>\n  </data>\n  <data name=\"&gt;&gt;bAlignment.Name\" xml:space=\"preserve\">\n    <value>bAlignment</value>\n  </data>\n  <data name=\"&gt;&gt;label11.ZOrder\" xml:space=\"preserve\">\n    <value>19</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Decoration</value>\n  </data>\n  <data name=\"&gt;&gt;bFont.Name\" xml:space=\"preserve\">\n    <value>bFont</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontStyle.ZOrder\" xml:space=\"preserve\">\n    <value>15</value>\n  </data>\n  <data name=\"bAlignment.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"cbFormat.Items19\" xml:space=\"preserve\">\n    <value>yyyy-MM-dd HH:mm:ss</value>\n  </data>\n  <data name=\"bVertical.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;bColorEx.Name\" xml:space=\"preserve\">\n    <value>bColorEx</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>25</value>\n  </data>\n  <data name=\"bFamily.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bColor.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Writing Mode</value>\n  </data>\n  <data name=\"&gt;&gt;cbWritingMode.Name\" xml:space=\"preserve\">\n    <value>cbWritingMode</value>\n  </data>\n  <data name=\"&gt;&gt;lblValue.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"bStyle.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"cbHorzAlign.Items1\" xml:space=\"preserve\">\n    <value>Center</value>\n  </data>\n  <data name=\"bValueExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>414, 19</value>\n  </data>\n  <data name=\"lblValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 23</value>\n  </data>\n  <data name=\"bSize.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"label6.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;cbHorzAlign.Name\" xml:space=\"preserve\">\n    <value>cbHorzAlign</value>\n  </data>\n  <data name=\"&gt;&gt;button2.Name\" xml:space=\"preserve\">\n    <value>button2</value>\n  </data>\n  <data name=\"bWeight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 16</value>\n  </data>\n  <data name=\"cbVerticalAlign.Items1\" xml:space=\"preserve\">\n    <value>Middle</value>\n  </data>\n  <data name=\"cbFontWeight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 21</value>\n  </data>\n  <data name=\"&gt;&gt;button2.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"button2.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bVertical.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"cbFontFamily.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label8.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;cbFormat.Name\" xml:space=\"preserve\">\n    <value>cbFormat</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontSize.Name\" xml:space=\"preserve\">\n    <value>cbFontSize</value>\n  </data>\n  <data name=\"bStyle.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"cbFormat.Items4\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"bSize.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>376, 20</value>\n  </data>\n  <data name=\"cbHorzAlign.Items2\" xml:space=\"preserve\">\n    <value>Right</value>\n  </data>\n  <data name=\"&gt;&gt;cbTextDecoration.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"cbFormat.Items9\" xml:space=\"preserve\">\n    <value>dddd, MMMM dd, yyyy HH:mm</value>\n  </data>\n  <data name=\"&gt;&gt;button2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbFontStyle.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;lFont.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontFamily.Name\" xml:space=\"preserve\">\n    <value>cbFontFamily</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Style</value>\n  </data>\n  <data name=\"cbHorzAlign.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>StyleTextCtl</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Font</value>\n  </data>\n  <data name=\"&gt;&gt;bWeight.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"button2.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"bWeight.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"bFont.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>401, 20</value>\n  </data>\n  <data name=\"label5.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;cbHorzAlign.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbWritingMode.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;cbTextDecoration.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbHorzAlign.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbTextDecoration.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>288, 80</value>\n  </data>\n  <data name=\"cbFontSize.Items8\" xml:space=\"preserve\">\n    <value>20pt</value>\n  </data>\n  <data name=\"cbFontSize.Items9\" xml:space=\"preserve\">\n    <value>22pt</value>\n  </data>\n  <data name=\"&gt;&gt;bSize.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbValue.Text\" xml:space=\"preserve\">\n    <value>comboBox1</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 23</value>\n  </data>\n  <data name=\"&gt;&gt;cbVerticalAlign.Name\" xml:space=\"preserve\">\n    <value>cbVerticalAlign</value>\n  </data>\n  <data name=\"cbFontSize.Items3\" xml:space=\"preserve\">\n    <value>11pt</value>\n  </data>\n  <data name=\"bWrtMode.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"cbFontSize.Items5\" xml:space=\"preserve\">\n    <value>14pt</value>\n  </data>\n  <data name=\"cbFontSize.Items6\" xml:space=\"preserve\">\n    <value>16pt</value>\n  </data>\n  <data name=\"cbFontWeight.Items8\" xml:space=\"preserve\">\n    <value>500</value>\n  </data>\n  <data name=\"bWeight.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;bStyle.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>14</value>\n  </data>\n  <data name=\"&gt;&gt;lblValue.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bFont.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lblValue.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 16</value>\n  </data>\n  <data name=\"bStyle.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;label7.Name\" xml:space=\"preserve\">\n    <value>label7</value>\n  </data>\n  <data name=\"&gt;&gt;bAlignment.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"bAlignment.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"bWrtMode.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;label7.ZOrder\" xml:space=\"preserve\">\n    <value>15</value>\n  </data>\n  <data name=\"bFamily.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"cbFormat.Items5\" xml:space=\"preserve\">\n    <value>0.00</value>\n  </data>\n  <data name=\"&gt;&gt;bSize.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"cbFontSize.Items1\" xml:space=\"preserve\">\n    <value>9pt</value>\n  </data>\n  <data name=\"cbFontSize.Items13\" xml:space=\"preserve\">\n    <value>36pt</value>\n  </data>\n  <data name=\"bStyle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bVertical.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bDirection.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontStyle.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;cbWritingMode.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bWeight.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"&gt;&gt;label8.ZOrder\" xml:space=\"preserve\">\n    <value>14</value>\n  </data>\n  <data name=\"label8.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>216, 200</value>\n  </data>\n  <data name=\"bColorEx.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontWeight.ZOrder\" xml:space=\"preserve\">\n    <value>16</value>\n  </data>\n  <data name=\"&gt;&gt;bDirection.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbTextDecoration.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 21</value>\n  </data>\n  <data name=\"bWrtMode.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"bColor.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>200, 82</value>\n  </data>\n  <data name=\"&gt;&gt;label9.ZOrder\" xml:space=\"preserve\">\n    <value>12</value>\n  </data>\n  <data name=\"cbHorzAlign.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>80, 168</value>\n  </data>\n  <data name=\"bFamily.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontSize.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"label10.Text\" xml:space=\"preserve\">\n    <value>Weight</value>\n  </data>\n  <data name=\"label9.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbColor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbFontFamily.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>72, 16</value>\n  </data>\n  <data name=\"bFont.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbFontWeight.Items\" xml:space=\"preserve\">\n    <value>Lighter</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>456, 280</value>\n  </data>\n  <data name=\"bStyle.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>176, 52</value>\n  </data>\n  <data name=\"lFont.Text\" xml:space=\"preserve\">\n    <value>Family</value>\n  </data>\n  <data name=\"bDirection.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"cbDirection.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 21</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontWeight.Name\" xml:space=\"preserve\">\n    <value>cbFontWeight</value>\n  </data>\n  <data name=\"&gt;&gt;bWrtMode.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>19</value>\n  </data>\n  <data name=\"label10.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>224, 48</value>\n  </data>\n  <data name=\"bColorEx.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"bFormat.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>384, 234</value>\n  </data>\n  <data name=\"&gt;&gt;cbFormat.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbHorzAlign.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>64, 21</value>\n  </data>\n  <data name=\"cbFontWeight.Items3\" xml:space=\"preserve\">\n    <value>Bolder</value>\n  </data>\n  <data name=\"cbFontWeight.Items9\" xml:space=\"preserve\">\n    <value>600</value>\n  </data>\n  <data name=\"cbFontWeight.Items2\" xml:space=\"preserve\">\n    <value>Bold</value>\n  </data>\n  <data name=\"cbValue.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>64, 16</value>\n  </data>\n  <data name=\"label9.Text\" xml:space=\"preserve\">\n    <value>Color</value>\n  </data>\n  <data name=\"&gt;&gt;bColor.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Name\" xml:space=\"preserve\">\n    <value>label4</value>\n  </data>\n  <data name=\"&gt;&gt;bFormat.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bAlignment.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"bVertical.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>384, 170</value>\n  </data>\n  <data name=\"cbDirection.Items1\" xml:space=\"preserve\">\n    <value>RTL</value>\n  </data>\n  <data name=\"cbFormat.Items1\" xml:space=\"preserve\">\n    <value />\n  </data>\n  <data name=\"bSize.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;bColor.ZOrder\" xml:space=\"preserve\">\n    <value>11</value>\n  </data>\n  <data name=\"&gt;&gt;label4.ZOrder\" xml:space=\"preserve\">\n    <value>18</value>\n  </data>\n  <data name=\"lFont.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Name\" xml:space=\"preserve\">\n    <value>label5</value>\n  </data>\n  <data name=\"bWeight.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"bFamily.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label7.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;bWeight.Name\" xml:space=\"preserve\">\n    <value>bWeight</value>\n  </data>\n  <data name=\"bFormat.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"cbVerticalAlign.Items\" xml:space=\"preserve\">\n    <value>Top</value>\n  </data>\n  <data name=\"bFormat.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontFamily.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;label9.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;cbVerticalAlign.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbFontWeight.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 232</value>\n  </data>\n  <data name=\"bDirection.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>152, 202</value>\n  </data>\n  <data name=\"&gt;&gt;bStyle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbFontWeight.Items10\" xml:space=\"preserve\">\n    <value>700</value>\n  </data>\n  <data name=\"bSize.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;bStyle.Name\" xml:space=\"preserve\">\n    <value>bStyle</value>\n  </data>\n  <data name=\"&gt;&gt;cbDirection.Name\" xml:space=\"preserve\">\n    <value>cbDirection</value>\n  </data>\n  <data name=\"bDirection.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"cbHorzAlign.Items3\" xml:space=\"preserve\">\n    <value>General</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbWritingMode.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 21</value>\n  </data>\n  <data name=\"&gt;&gt;cbFontWeight.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;bVertical.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"cbValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>344, 21</value>\n  </data>\n  <data name=\"bWrtMode.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"cbFontWeight.Items11\" xml:space=\"preserve\">\n    <value>800</value>\n  </data>\n  <data name=\"&gt;&gt;lblValue.Name\" xml:space=\"preserve\">\n    <value>lblValue</value>\n  </data>\n  <data name=\"cbTextDecoration.Items3\" xml:space=\"preserve\">\n    <value>LineThrough</value>\n  </data>\n  <data name=\"bFont.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"lblValue.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>30</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Name\" xml:space=\"preserve\">\n    <value>label6</value>\n  </data>\n  <data name=\"&gt;&gt;cbValue.Name\" xml:space=\"preserve\">\n    <value>cbValue</value>\n  </data>\n  <data name=\"cbTextDecoration.Items2\" xml:space=\"preserve\">\n    <value>Overline</value>\n  </data>\n  <data name=\"bStyle.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"bFamily.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;cbValue.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;bVertical.Name\" xml:space=\"preserve\">\n    <value>bVertical</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/StyleTextCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label4.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>49, 13</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Формат</value>\n  </data>\n  <data name=\"label5.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label5.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>232, 168</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>77, 13</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>По вертикали</value>\n  </data>\n  <data name=\"label6.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>82, 13</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Выравнивание</value>\n  </data>\n  <data name=\"label7.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 13</value>\n  </data>\n  <data name=\"label7.Text\" xml:space=\"preserve\">\n    <value>Направление</value>\n  </data>\n  <data name=\"label8.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label8.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>232, 200</value>\n  </data>\n  <data name=\"label8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>81, 13</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Режим записи</value>\n  </data>\n  <data name=\"lFont.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"lFont.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 16</value>\n  </data>\n  <data name=\"lFont.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>63, 13</value>\n  </data>\n  <data name=\"lFont.Text\" xml:space=\"preserve\">\n    <value>Семейство</value>\n  </data>\n  <data name=\"bFont.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>436, 17</value>\n  </data>\n  <data name=\"cbVerticalAlign.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>339, 168</value>\n  </data>\n  <data name=\"cbHorzAlign.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>104, 168</value>\n  </data>\n  <data name=\"cbHorzAlign.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 21</value>\n  </data>\n  <data name=\"cbFormat.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>331, 21</value>\n  </data>\n  <data name=\"cbDirection.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>104, 200</value>\n  </data>\n  <data name=\"cbDirection.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 21</value>\n  </data>\n  <data name=\"cbWritingMode.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>339, 200</value>\n  </data>\n  <data name=\"label2.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>73, 13</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Оформление</value>\n  </data>\n  <data name=\"cbTextDecoration.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>299, 77</value>\n  </data>\n  <data name=\"cbTextDecoration.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 21</value>\n  </data>\n  <data name=\"label9.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label9.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 80</value>\n  </data>\n  <data name=\"label9.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>32, 13</value>\n  </data>\n  <data name=\"label9.Text\" xml:space=\"preserve\">\n    <value>Цвет</value>\n  </data>\n  <data name=\"label3.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 48</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>37, 13</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Стиль</value>\n  </data>\n  <data name=\"cbFontWeight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>299, 45</value>\n  </data>\n  <data name=\"label10.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label10.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>26, 13</value>\n  </data>\n  <data name=\"label10.Text\" xml:space=\"preserve\">\n    <value>Вес</value>\n  </data>\n  <data name=\"cbFontSize.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>299, 13</value>\n  </data>\n  <data name=\"label11.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label11.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>46, 13</value>\n  </data>\n  <data name=\"label11.Text\" xml:space=\"preserve\">\n    <value>Размер</value>\n  </data>\n  <data name=\"lblValue.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"lblValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>55, 13</value>\n  </data>\n  <data name=\"lblValue.Text\" xml:space=\"preserve\">\n    <value>Значение</value>\n  </data>\n  <data name=\"button2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>411, 79</value>\n  </data>\n  <data name=\"bWeight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>411, 49</value>\n  </data>\n  <data name=\"bSize.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>411, 17</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>464, 112</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Шрифт</value>\n  </data>\n  <data name=\"cbValue.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>347, 21</value>\n  </data>\n  <data name=\"bValueExpr.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>419, 17</value>\n  </data>\n  <data name=\"bAlignment.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>184, 170</value>\n  </data>\n  <data name=\"bDirection.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>184, 202</value>\n  </data>\n  <data name=\"bVertical.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>419, 170</value>\n  </data>\n  <data name=\"bWrtMode.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>419, 202</value>\n  </data>\n  <data name=\"bFormat.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>419, 234</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>480, 280</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/SubreportCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.Text;\nusing System.IO;\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlDesign.Resources;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Filters specification: used for DataRegions (List, Chart, Table, Matrix), DataSets, group instances\n\t/// </summary>\n\tinternal class SubreportCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n\t\tprivate DesignXmlDraw _Draw;\n\t\tprivate XmlNode _Subreport;\n\t\tprivate DataTable _DataTable;\n\t\tprivate System.Windows.Forms.Label label1;\n\t\tprivate System.Windows.Forms.Button bFile;\n\t\tprivate System.Windows.Forms.TextBox tbReportFile;\n\t\tprivate System.Windows.Forms.TextBox tbNoRows;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\tprivate System.Windows.Forms.CheckBox chkMergeTrans;\n\t\tprivate System.Windows.Forms.DataGridView dgParms;\n\t\tprivate System.Windows.Forms.Button bRefreshParms;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n\t\tinternal SubreportCtl(DesignXmlDraw dxDraw, XmlNode subReport)\n\t\t{\n\t\t\t_Draw = dxDraw;\n\t\t\t_Subreport =subReport;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues();\t\t\t\n\t\t}\n\n\t\tprivate void InitValues()\n\t\t{\n\t\t\tthis.tbReportFile.Text = _Draw.GetElementValue(_Subreport, \"ReportName\", \"\");\n\t\t\tthis.tbNoRows.Text = _Draw.GetElementValue(_Subreport, \"NoRows\", \"\");\n\t\t\tthis.chkMergeTrans.Checked = _Draw.GetElementValue(_Subreport, \"MergeTransactions\", \"false\").ToLower() == \"true\";\n\n//\t\t\tstring[] parms = _Draw.GetReportParameters(true);\n//\t\t\tif (parms != null)\n//\t\t\t\tdgtbFV.CB.Items.AddRange(parms);\n\n\t\t\t// Initialize the DataTable\n\t\t\t_DataTable = new DataTable();\n\t\t\t_DataTable.Columns.Add(new DataColumn(\"ParameterName\", typeof(string)));\n\t\t\t_DataTable.Columns.Add(new DataColumn(\"Value\", typeof(string)));\n\n\t\t\tstring[] rowValues = new string[2];\n\t\t\tXmlNode parameters = _Draw.GetNamedChildNode(_Subreport, \"Parameters\");\n\n\t\t\tif (parameters != null)\n\t\t\tforeach (XmlNode pNode in parameters.ChildNodes)\n\t\t\t{\n\t\t\t\tif (pNode.NodeType != XmlNodeType.Element || \n\t\t\t\t\t\tpNode.Name != \"Parameter\")\n\t\t\t\t\tcontinue;\n\t\t\t\trowValues[0] = _Draw.GetElementAttribute(pNode, \"Name\", \"\");\n\t\t\t\trowValues[1] = _Draw.GetElementValue(pNode, \"Value\", \"\");\n\n\t\t\t\t_DataTable.Rows.Add(rowValues);\n\t\t\t}\n\t\t\t// Don't allow users to add their own rows\n//\t\t\tDataView dv = new DataView(_DataTable);\t\t// bad side effect\n//\t\t\tdv.AllowNew = false;\n\t\t\tthis.dgParms.DataSource = _DataTable;\n\t\t\tdgParms.Columns[0].Width = 140;\n\t\t\tdgParms.Columns[0].ReadOnly = true;\n\t\t\tdgParms.Columns[1].Width = 140;\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SubreportCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.dgParms = new System.Windows.Forms.DataGridView();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.tbReportFile = new System.Windows.Forms.TextBox();\n\t\t\tthis.bFile = new System.Windows.Forms.Button();\n\t\t\tthis.tbNoRows = new System.Windows.Forms.TextBox();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.chkMergeTrans = new System.Windows.Forms.CheckBox();\n\t\t\tthis.bRefreshParms = new System.Windows.Forms.Button();\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.dgParms)).BeginInit();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// dgParms\n\t\t\t// \n\t\t\tresources.ApplyResources(this.dgParms, \"dgParms\");\n\t\t\tthis.dgParms.DataMember = \"\";\n\t\t\tthis.dgParms.Name = \"dgParms\";\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// tbReportFile\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbReportFile, \"tbReportFile\");\n\t\t\tthis.tbReportFile.Name = \"tbReportFile\";\n\t\t\t// \n\t\t\t// bFile\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bFile, \"bFile\");\n\t\t\tthis.bFile.Name = \"bFile\";\n\t\t\tthis.bFile.Click += new System.EventHandler(this.bFile_Click);\n\t\t\t// \n\t\t\t// tbNoRows\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbNoRows, \"tbNoRows\");\n\t\t\tthis.tbNoRows.Name = \"tbNoRows\";\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// chkMergeTrans\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkMergeTrans, \"chkMergeTrans\");\n\t\t\tthis.chkMergeTrans.Name = \"chkMergeTrans\";\n\t\t\t// \n\t\t\t// bRefreshParms\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bRefreshParms, \"bRefreshParms\");\n\t\t\tthis.bRefreshParms.Name = \"bRefreshParms\";\n\t\t\tthis.bRefreshParms.Click += new System.EventHandler(this.bRefreshParms_Click);\n\t\t\t// \n\t\t\t// SubreportCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.bRefreshParms);\n\t\t\tthis.Controls.Add(this.chkMergeTrans);\n\t\t\tthis.Controls.Add(this.tbNoRows);\n\t\t\tthis.Controls.Add(this.label2);\n\t\t\tthis.Controls.Add(this.bFile);\n\t\t\tthis.Controls.Add(this.tbReportFile);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Controls.Add(this.dgParms);\n\t\t\tthis.Name = \"SubreportCtl\";\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.dgParms)).EndInit();\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n       \n\t\tpublic bool IsValid()\n\t\t{\n\t\t\tif (tbReportFile.Text.Length > 0)\n\t\t\t\treturn true;\n\t\t\tMessageBox.Show(Strings.SubreportCtl_Show_SubreportMustSpecified, Strings.SubreportCtl_Show_Subreport);\n\t\t\treturn false;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t_Draw.SetElement(_Subreport, \"ReportName\", this.tbReportFile.Text);\n\t\t\tif (this.tbNoRows.Text.Trim().Length == 0)\n\t\t\t\t_Draw.RemoveElement(_Subreport, \"NoRows\");\n\t\t\telse\n\t\t\t\t_Draw.SetElement(_Subreport, \"NoRows\", tbNoRows.Text);\n\n\t\t\t_Draw.SetElement(_Subreport, \"MergeTransactions\", this.chkMergeTrans.Checked? \"true\": \"false\");\n\n\t\t\t// Remove the old filters\n\t\t\tXmlNode parms = _Draw.GetCreateNamedChildNode(_Subreport, \"Parameters\");\n\t\t\twhile (parms.FirstChild != null)\n\t\t\t{\n\t\t\t\tparms.RemoveChild(parms.FirstChild);\n\t\t\t}\n\t\t\t// Loop thru and add all the filters\n\t\t\tforeach (DataRow dr in _DataTable.Rows)\n\t\t\t{\n\t\t\t\tif (dr[0] == DBNull.Value || dr[1] == DBNull.Value)\n\t\t\t\t\tcontinue;\n\t\t\t\tstring name = (string) dr[0];\n\t\t\t\tstring val = (string) dr[1];\n\t\t\t\tif (name.Length <= 0 || val.Length <= 0)\n\t\t\t\t\tcontinue;\n\t\t\t\tXmlNode pNode = _Draw.CreateElement(parms, \"Parameter\", null);\n\t\t\t\t_Draw.SetElementAttribute(pNode, \"Name\", name);\n\t\t\t\t_Draw.SetElement(pNode, \"Value\", val);\n\t\t\t}\n\t\t\tif (!parms.HasChildNodes)\n\t\t\t\t_Subreport.RemoveChild(parms);\n\t\t}\n\n\t\tprivate void bFile_Click(object sender, System.EventArgs e)\n\t\t{\n            using (OpenFileDialog ofd = new OpenFileDialog())\n            {\n                ofd.Filter = Strings.SubreportCtl_bFile_Click_ReportFilesFilter;\n                ofd.FilterIndex = 1;\n                ofd.FileName = \"*.rdl\";\n\n                ofd.Title = Strings.SubreportCtl_bFile_Click_ReportFilesTitle;\n                ofd.DefaultExt = \"rdl\";\n                ofd.AddExtension = true;\n\n                if (ofd.ShowDialog() == DialogResult.OK)\n                {\n                    string file = Path.GetFileNameWithoutExtension(ofd.FileName);\n\n                    tbReportFile.Text = file;\n                }\n            }\n\t\t}\n\n\t\tprivate async void bRefreshParms_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\t// Obtain the source\n\t\t\tstring filename=\"\";\n\t\t\tif (tbReportFile.Text.Length > 0)\n\t\t\t\tfilename = tbReportFile.Text + \".rdl\";\n\n\t\t\tif (!String.IsNullOrWhiteSpace(_Draw.Folder))\n\t\t\t\tfilename = Path.Combine(_Draw.Folder, filename);\n\n\t\t\tstring source = this.GetSource(filename);\n\t\t\tif (source == null)\n\t\t\t\treturn;\t\t\t\t\t\t// error: message already displayed\n\n\t\t\t// Compile the report\n\t\t\tReport report = await this.GetReport(source, filename);\n\t\t\tif (report == null)\n\t\t\t\treturn;\t\t\t\t\t// error: message already displayed\n\t\t\t\n\t\t\tICollection rps = report.UserReportParameters;\n\t\t\tstring[] rowValues = new string[2];\n\t\t\t_DataTable.Rows.Clear();\n\t\t\tforeach (UserReportParameter rp in rps)\n\t\t\t{\n\t\t\t\trowValues[0] = rp.Name;\n\t\t\t\trowValues[1] = \"\";\n\n\t\t\t\t_DataTable.Rows.Add(rowValues);\n\t\t\t}\n\t\t\tthis.dgParms.Refresh();\n\t\t}\n\n\t\tprivate string GetSource(string file)\n\t\t{\n\t\t\tStreamReader fs=null;\n\t\t\tstring prog=null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tfs = new StreamReader(file);\n\t\t\t\tprog = fs.ReadToEnd();\n\t\t\t}\n\t\t\tcatch(Exception e)\n\t\t\t{\n\t\t\t\tprog = null;\n\t\t\t\tMessageBox.Show(e.Message, Strings.SubreportCtl_Show_ErrorReading);\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (fs != null)\n\t\t\t\t\tfs.Close();\n\t\t\t}\n\t\t\treturn prog;\n\t\t}\n\n\t\tprivate async Task<Report> GetReport(string prog, string file)\n\t\t{\n\t\t\t// Now parse the file\n\t\t\tRDLParser rdlp;\n\t\t\tReport r;\n\t\t\ttry\n\t\t\t{\n\t\t\t\trdlp =  new RDLParser(prog);\n\t\t\t\tstring folder = Path.GetDirectoryName(file);\n\t\t\t\tif (folder == \"\")\n\t\t\t\t\tfolder = Environment.CurrentDirectory;\n\t\t\t\trdlp.Folder = folder;\n\n\t\t\t\tr = await rdlp.Parse();\n\t\t\t\tif (r.ErrorMaxSeverity > 4) \n\t\t\t\t{\n\t\t\t\t\tMessageBox.Show(Strings.DrillParametersDialog_ShowC_ReportHasErrors);\n\t\t\t\t\tr = null;\t\t\t// don't return when severe errors\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch(Exception e)\n\t\t\t{\n\t\t\t\tr = null;\n\t\t\t\tMessageBox.Show(e.Message, Strings.SubreportCtl_Show_ReportLoadFailed);\n\t\t\t}\n\t\t\treturn r;\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/SubreportCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Subreport name</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>464, 304</value>\n  </data>\n  <data name=\"&gt;&gt;chkMergeTrans.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bRefreshParms.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bRefreshParms.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"dgParms.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 112</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;dgParms.Name\" xml:space=\"preserve\">\n    <value>dgParms</value>\n  </data>\n  <data name=\"tbReportFile.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>104, 8</value>\n  </data>\n  <data name=\"&gt;&gt;chkMergeTrans.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbNoRows.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bRefreshParms.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"bRefreshParms.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 23</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportFile.Name\" xml:space=\"preserve\">\n    <value>tbReportFile</value>\n  </data>\n  <data name=\"tbNoRows.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>104, 40</value>\n  </data>\n  <data name=\"&gt;&gt;bFile.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>88, 23</value>\n  </data>\n  <data name=\"bFile.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;dgParms.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"chkMergeTrans.Text\" xml:space=\"preserve\">\n    <value>Use same Data Source connections as parent report when possible</value>\n  </data>\n  <data name=\"&gt;&gt;bFile.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bRefreshParms.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>392, 120</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbNoRows.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"tbReportFile.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;dgTableStyle.Name\" xml:space=\"preserve\">\n    <value>dgTableStyle</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportFile.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bFile.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbNoRows.Name\" xml:space=\"preserve\">\n    <value>tbNoRows</value>\n  </data>\n  <data name=\"&gt;&gt;dgParms.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbReportFile.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>312, 20</value>\n  </data>\n  <data name=\"bRefreshParms.Text\" xml:space=\"preserve\">\n    <value>Refresh</value>\n  </data>\n  <data name=\"&gt;&gt;bRefreshParms.Name\" xml:space=\"preserve\">\n    <value>bRefreshParms</value>\n  </data>\n  <data name=\"&gt;&gt;dgTableStyle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGridTableStyle, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bFile.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>24, 23</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bFile.Name\" xml:space=\"preserve\">\n    <value>bFile</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportFile.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"&gt;&gt;tbNoRows.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>SubreportCtl</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 8</value>\n  </data>\n  <data name=\"&gt;&gt;chkMergeTrans.Name\" xml:space=\"preserve\">\n    <value>chkMergeTrans</value>\n  </data>\n  <data name=\"tbNoRows.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>No rows message</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 23</value>\n  </data>\n  <data name=\"dgParms.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>384, 168</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 40</value>\n  </data>\n  <data name=\"chkMergeTrans.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"bFile.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>424, 8</value>\n  </data>\n  <data name=\"bFile.Text\" xml:space=\"preserve\">\n    <value>...</value>\n  </data>\n  <data name=\"&gt;&gt;bRefreshParms.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;dgParms.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.DataGrid, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkMergeTrans.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 72</value>\n  </data>\n  <data name=\"dgParms.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"chkMergeTrans.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>376, 24</value>\n  </data>\n  <data name=\"&gt;&gt;chkMergeTrans.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbNoRows.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>312, 20</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbReportFile.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/SubreportCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"dgParms.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>365, 168</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label1.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>5, 11</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>111, 13</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Название подотчёта</value>\n  </data>\n  <data name=\"tbReportFile.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>163, 8</value>\n  </data>\n  <data name=\"tbReportFile.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>253, 20</value>\n  </data>\n  <data name=\"tbNoRows.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>163, 40</value>\n  </data>\n  <data name=\"tbNoRows.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>253, 20</value>\n  </data>\n  <data name=\"label2.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>5, 43</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 13</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Сообщение, когда нет строк</value>\n  </data>\n  <data name=\"chkMergeTrans.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>408, 34</value>\n  </data>\n  <data name=\"chkMergeTrans.Text\" xml:space=\"preserve\">\n    <value>Использовать те же соединения с источниками данных, как в родительском отчёте, когда это возможно</value>\n  </data>\n  <data name=\"bRefreshParms.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>379, 112</value>\n  </data>\n  <data name=\"bRefreshParms.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>69, 23</value>\n  </data>\n  <data name=\"bRefreshParms.Text\" xml:space=\"preserve\">\n    <value>Обновить</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/Syntax/RdlScriptLexer.cs",
    "content": "﻿using ScintillaNET;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Text;\n\nnamespace Majorsilence.Reporting.RdlDesign.Syntax\n{\n\tpublic class RdlScriptLexer\n\t{\n\t\tpublic enum Style\n\t\t{\n\t\t\tDefault,\n\t\t\tUserInfo,\n\t\t\tKeyword,\n\t\t\tIdentifier,\n\t\t\tNumber,\n\t\t\tString,\n\t\t\tError,\n\t\t\tGlobals,\n\t\t\tParameter,\n\t\t\tMethod,\n\t\t\tAggrMethod,\n\t\t\tOperator,\n\t\t\tField\n\t\t}\n\n\t\tenum LexerState{\n\t\t\tUnknown,\n\t\t\tIdentifier,\n\t\t\tNumber,\n\t\t\tString,\n\t\t\tBraces,\n\t\t\tOperator\n\t\t}\n\n\t\tenum IdentiferType\n\t\t{\n\t\t\tField,\n\t\t\tClassMethod\n\t\t}\n\n\t\tprivate HashSet<string> userInfo;\n\t\tprivate HashSet<string> globals;\n\t\tprivate HashSet<string> parameters;\n\t\tprivate HashSet<string> simpleMethods;\n\t\tprivate Dictionary<string, HashSet<string>> calssMethods;\n\t\tprivate HashSet<string> aggrMethods;\n\t\tprivate HashSet<string> operators;\n\t\tprivate HashSet<string> fields;\n\n\t\tpublic void StyleText(Scintilla scintilla, int startPos, int endPos)\n\t\t{\n\t\t\tif(scintilla.GetCharAt(0) != '=') //Not Expression\n\t\t\t\treturn;\n\n\t\t\t// Back up to the line start\n\t\t\tvar line = scintilla.LineFromPosition(startPos);\n\t\t\tstartPos = scintilla.Lines[line].Position;\n\n\t\t\tvar length = 0;\n\t\t\tchar stringStartChar = '\"';\n\t\t\tvar state = LexerState.Unknown;\n\t\t\tvar EOF = false;\n\n\t\t\t// Start styling\n\t\t\tscintilla.StartStyling(startPos);\n\t\t\twhile (startPos < endPos)\n\t\t\t{\n\t\t\t\tvar c = (char)scintilla.GetCharAt(startPos);\n\t\t\t\t//lastSymbol = startPos == endPos - 1;\n\n\t\t\tREPROCESS:\n\t\t\t\tswitch (state)\n\t\t\t\t{\n\t\t\t\t\tcase LexerState.Unknown:\n\t\t\t\t\t\tif (c == '\"' || c == '\\'')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Start of \"string\"\n\t\t\t\t\t\t\tstringStartChar = c;\n\t\t\t\t\t\t\tscintilla.SetStyling(1, (int)Style.String);\n\t\t\t\t\t\t\tstate = LexerState.String;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (c == '{')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstate = LexerState.Braces;\n\t\t\t\t\t\t\tgoto REPROCESS;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (Char.IsDigit(c))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstate = LexerState.Number;\n\t\t\t\t\t\t\tgoto REPROCESS;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (Char.IsLetter(c))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstate = LexerState.Identifier;\n\t\t\t\t\t\t\tgoto REPROCESS;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (operators.Any(x => x[0] == c))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstate = LexerState.Operator;\n\t\t\t\t\t\t\tgoto REPROCESS;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Everything else\n\t\t\t\t\t\t\tscintilla.SetStyling(1, (int)Style.Default);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase LexerState.String:\n\t\t\t\t\t\tif (c == stringStartChar)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlength++;\n\t\t\t\t\t\t\tscintilla.SetStyling(length, (int)Style.String);\n\t\t\t\t\t\t\tlength = 0;\n\t\t\t\t\t\t\tstate = LexerState.Unknown;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlength++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase LexerState.Braces:\n\t\t\t\t\t\tif (c == '}')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlength++;\n\t\t\t\t\t\t\tvar style = Style.Identifier;\n\t\t\t\t\t\t\tvar identifier = scintilla.GetTextRange(startPos - length + 2, length - 2);\n\t\t\t\t\t\t\tif (identifier.Length == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstyle = Style.Error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (identifier[0] == '!')\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (userInfo.Contains(identifier.Substring(1)))\n\t\t\t\t\t\t\t\t\tstyle = Style.UserInfo;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tstyle = Style.Error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (identifier[0] == '@')\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (globals.Contains(identifier.Substring(1)))\n\t\t\t\t\t\t\t\t\tstyle = Style.Globals;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tstyle = Style.Error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (identifier[0] == '?' && parameters != null)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (parameters.Contains(identifier.Substring(1)))\n\t\t\t\t\t\t\t\t\tstyle = Style.Parameter;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tstyle = Style.Error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (fields.Contains(identifier))\n\t\t\t\t\t\t\t\t\tstyle = Style.Field;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tstyle = Style.Error;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tscintilla.SetStyling(length, (int)style);\n\t\t\t\t\t\t\tlength = 0;\n\t\t\t\t\t\t\tstate = LexerState.Unknown;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tlength++;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase LexerState.Number:\n\t\t\t\t\t\tif (Char.IsDigit(c) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') || c == 'x')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlength++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tscintilla.SetStyling(length, (int)Style.Number);\n\t\t\t\t\t\t\tlength = 0;\n\t\t\t\t\t\t\tstate = LexerState.Unknown;\n\t\t\t\t\t\t\tgoto REPROCESS;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase LexerState.Identifier:\n\t\t\t\t\t\tif (!EOF && (Char.IsLetterOrDigit(c) || c == '.' || c == '!' || c == '_'))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlength++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar style = Style.Identifier;\n\t\t\t\t\t\t\tvar identifier = scintilla.GetTextRange(startPos - length, length);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tvar endFirstWord = identifier.IndexOf('.');\n\t\t\t\t\t\t\tif (endFirstWord != -1)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvar firstWord = identifier.Substring(0, endFirstWord);\n\t\t\t\t\t\t\t\tvar secondWord = identifier.Substring(endFirstWord + 1);\n\t\t\t\t\t\t\t\tif (calssMethods.ContainsKey(firstWord) && calssMethods[firstWord].Contains(secondWord))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tstyle = Style.Method;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tstyle = Style.Error;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tendFirstWord = identifier.IndexOf('!');\n\t\t\t\t\t\t\tif (endFirstWord != -1)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvar firstWord = identifier.Substring(0, endFirstWord);\n\t\t\t\t\t\t\t\tvar secondWord = identifier.Substring(endFirstWord +1);\n\t\t\t\t\t\t\t\tif (firstWord == \"User\")\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tif (userInfo.Contains(secondWord))\n\t\t\t\t\t\t\t\t\t\tstyle = Style.UserInfo;\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\tstyle = Style.Error;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (firstWord == \"Globals\")\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tif (globals.Contains(secondWord))\n\t\t\t\t\t\t\t\t\t\tstyle = Style.Globals;\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\tstyle = Style.Error;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (firstWord == \"Parameters\")\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tif (globals.Contains(secondWord))\n\t\t\t\t\t\t\t\t\t\tstyle = Style.Parameter;\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\tstyle = Style.Error;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (firstWord == \"Fields\")\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvar field = secondWord.Split('.');\n\t\t\t\t\t\t\t\t\tif (field.Length == 2 && fields.Contains(field[0]) \n\t\t\t\t\t\t\t\t\t\t&& (field[1] == \"Value\" || field[1] == \"IsMissing\"))\n\t\t\t\t\t\t\t\t\t\tstyle = Style.Field;\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\tstyle = Style.Error;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (simpleMethods.Contains(identifier))\n\t\t\t\t\t\t\t\tstyle = Style.Method;\n\n\t\t\t\t\t\t\tif (aggrMethods.Contains(identifier))\n\t\t\t\t\t\t\t\tstyle = Style.AggrMethod;\n\n\t\t\t\t\t\t\tscintilla.SetStyling(length, (int)style);\n\t\t\t\t\t\t\tlength = 0;\n\t\t\t\t\t\t\tstate = LexerState.Unknown;\n\t\t\t\t\t\t\tif(!EOF)\n\t\t\t\t\t\t\t\tgoto REPROCESS;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase LexerState.Operator:\n\t\t\t\t\t\tvar cur = scintilla.GetTextRange(startPos - length, length +1);\n\t\t\t\t\t\tif (operators.Any(x => x.StartsWith(cur)))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlength++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcur = scintilla.GetTextRange(startPos - length, length);\n\t\t\t\t\t\t\tStyle style;\n\t\t\t\t\t\t\tif (operators.Contains(cur))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t//length++;\n\t\t\t\t\t\t\t\tstyle = Style.Operator;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstyle = Style.Error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tscintilla.SetStyling(length, (int)style);\n\t\t\t\t\t\t\tlength = 0;\n\t\t\t\t\t\t\tstate = LexerState.Unknown;\n\t\t\t\t\t\t\tgoto REPROCESS;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tstartPos++;\n\t\t\t\tif (!EOF && startPos == endPos && state == LexerState.Identifier)\n\t\t\t\t{\n\t\t\t\t\tEOF = true;\n\t\t\t\t\tgoto REPROCESS;\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\tpublic RdlScriptLexer()\n\t\t{\n\t\t\tuserInfo = new HashSet<string>(StaticLists.ArrayToFormattedList(StaticLists.UserList, \"\", \"\"));\n\t\t\tglobals = new HashSet<string>(StaticLists.ArrayToFormattedList(StaticLists.GlobalList, \"\", \"\"));\n\t\t\t//Methods\n\t\t\tvar methodsList = StaticLists.FunctionList.Select(x => x.Substring(0, x.IndexOf(\"(\"))).ToList();\n\t\t\tRdl.FontStyleEnum fsi = Majorsilence.Reporting.Rdl.FontStyleEnum.Italic;\t// just want a class from RdlEngine.dll assembly\n            Assembly a = Assembly.GetAssembly(fsi.GetType());\n            if (a == null)\n                return;\n            Type ft = a.GetType(\"Majorsilence.Reporting.Rdl.VBFunctions\");\n            BuildMethods(methodsList, ft);\n\t\t\tsimpleMethods = new HashSet<string>(methodsList);\n\t\t\t\n\t\t\t// build list of methods in class\n\t\t\tcalssMethods = new Dictionary<string, HashSet<string>>();\n\t\t\tmethodsList = new List<string>();\n\t\t\tft = a.GetType(\"Majorsilence.Reporting.Rdl.Financial\");\n\t\t\tBuildMethods(methodsList, ft);\n\t\t\tcalssMethods.Add(\"Financial\", new HashSet<string>(methodsList));\n\n\t\t\tmethodsList = new List<string>();\n\t\t\ta = Assembly.GetAssembly(\"\".GetType());\n\t\t\tft = a.GetType(\"System.Math\");\n\t\t\tBuildMethods(methodsList, ft);\n\t\t\tcalssMethods.Add(\"Math\", new HashSet<string>(methodsList));\n\n\t\t\tmethodsList = new List<string>();\n\t\t\tft = a.GetType(\"System.Convert\");\n\t\t\tBuildMethods(methodsList, ft);\n\t\t\tcalssMethods.Add(\"Convert\", new HashSet<string>(methodsList));\n\n\t\t\tmethodsList = new List<string>();\n\t\t\tft = a.GetType(\"System.String\");\n\t\t\tBuildMethods(methodsList, ft);\n\t\t\tcalssMethods.Add(\"String\", new HashSet<string>(methodsList));\n\n\t\t\t//Aggregate Methods\n\t\t\taggrMethods = new HashSet<string>(StaticLists.AggrFunctionList.Select(x => x.Substring(0, x.IndexOf(\"(\"))));\n\n\t\t\t//Opertors\n\t\t\toperators = new HashSet<string>(StaticLists.OperatorList.Select(x => x.Trim()));\n\t\t}\n\n\t\tpublic void SetParameters(IEnumerable<string> parametersList)\n\t\t{\n\t\t\tparameters = new HashSet<string>(parametersList);\n\t\t}\n\n\t\tpublic void SetFields(IEnumerable<string> fieldsList)\n\t\t{\n\t\t\tfields = new HashSet<string>(fieldsList);\n\t\t}\n\n\t\tvoid BuildMethods(List<string> ar, Type ft)\n\t\t{\n\t\t\tif (ft == null)\n\t\t\t\treturn;\n\t\t\tMethodInfo[] mis = ft.GetMethods(BindingFlags.Static | BindingFlags.Public);\n\t\t\tforeach (MethodInfo mi in mis)\n\t\t\t{\n\t\t\t\tif (mi.Name != null)\n\t\t\t\t\tar.Add(mi.Name);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/Syntax/ScintillaExprStyle.cs",
    "content": "﻿using ScintillaNET;\nusing System;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.RdlDesign.Syntax\n{\n    public class ScintillaExprStyle\n    {\n        private readonly RdlScriptLexer rdlLexer;\n        private readonly Scintilla scintilla;\n\n        public ScintillaExprStyle(RdlScriptLexer rdlLexer, Scintilla scintilla)\n        {\n            this.rdlLexer = rdlLexer ?? throw new ArgumentNullException(nameof(rdlLexer));\n            this.scintilla = scintilla ?? throw new ArgumentNullException(nameof(scintilla));\n        }\n\n        public void ConfigureScintillaStyle()\n        {\n            var selectionColor = Color.FromArgb(255, 192, 192, 192);\n            // Reset the styles\n            scintilla.StyleResetDefault();\n            scintilla.StyleClearAll();\n\n            // Set the XML Lexer\n            scintilla.Lexer = Lexer.Container;\n            scintilla.StyleNeeded += scintilla_StyleNeeded;\n\n            scintilla.Styles[(int)RdlScriptLexer.Style.Default].ForeColor = Color.Black;\n            scintilla.Styles[(int)RdlScriptLexer.Style.Identifier].ForeColor = Color.Black;\n            scintilla.Styles[(int)RdlScriptLexer.Style.Error].ForeColor = Color.Red;\n            scintilla.Styles[(int)RdlScriptLexer.Style.Error].Underline = true;\n            scintilla.Styles[(int)RdlScriptLexer.Style.Number].ForeColor = Color.OrangeRed;\n            scintilla.Styles[(int)RdlScriptLexer.Style.String].ForeColor = Color.Brown;\n            scintilla.Styles[(int)RdlScriptLexer.Style.Method].ForeColor = Color.Blue;\n            scintilla.Styles[(int)RdlScriptLexer.Style.AggrMethod].ForeColor = Color.Blue;\n            scintilla.Styles[(int)RdlScriptLexer.Style.AggrMethod].Bold = true;\n            scintilla.Styles[(int)RdlScriptLexer.Style.UserInfo].ForeColor = Color.BlueViolet;\n            scintilla.Styles[(int)RdlScriptLexer.Style.Globals].ForeColor = Color.BlueViolet;\n            scintilla.Styles[(int)RdlScriptLexer.Style.Parameter].ForeColor = Color.Violet;\n            scintilla.Styles[(int)RdlScriptLexer.Style.Field].ForeColor = Color.DodgerBlue;\n        }\n\n        void scintilla_StyleNeeded(object sender, StyleNeededEventArgs e)\n        {\n            var startPos = scintilla.GetEndStyled();\n            var endPos = e.Position;\n\n            rdlLexer.StyleText(scintilla, startPos, endPos);\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/Syntax/ScintillaSqlStyle.cs",
    "content": "﻿using ScintillaNET;\nusing System.Drawing;\n\nnamespace Majorsilence.Reporting.RdlDesign.Syntax\n{\n    public class ScintillaSqlStyle\n    {\n        private Scintilla scintilla;\n        public ScintillaSqlStyle(Scintilla scintilla)\n        {\n            this.scintilla = scintilla;\n            // Reset the styles\n            scintilla.StyleResetDefault();\n            scintilla.Styles[Style.Default].Font = \"Courier New\";\n            scintilla.Styles[Style.Default].Size = 10;\n            scintilla.StyleClearAll();\n\n            // Set the SQL Lexer\n            scintilla.Lexer = Lexer.Sql;\n\n            // Show line numbers\n            scintilla.Margins[0].Width = 20;\n\n            // Set the Styles\n            scintilla.Styles[Style.LineNumber].ForeColor = Color.FromArgb(255, 128, 128, 128);  //Dark Gray\n            scintilla.Styles[Style.LineNumber].BackColor = Color.FromArgb(255, 228, 228, 228);  //Light Gray\n            scintilla.Styles[Style.Sql.Comment].ForeColor = Color.Green;\n            scintilla.Styles[Style.Sql.CommentLine].ForeColor = Color.Green;\n            scintilla.Styles[Style.Sql.CommentLineDoc].ForeColor = Color.Green;\n            scintilla.Styles[Style.Sql.Number].ForeColor = Color.Maroon;\n            scintilla.Styles[Style.Sql.Word].ForeColor = Color.Blue;\n            scintilla.Styles[Style.Sql.Word2].ForeColor = Color.Fuchsia;\n            scintilla.Styles[Style.Sql.User1].ForeColor = Color.Gray;\n            scintilla.Styles[Style.Sql.User2].ForeColor = Color.FromArgb(255, 00, 128, 192);    //Medium Blue-Green\n            scintilla.Styles[Style.Sql.String].ForeColor = Color.Red;\n            scintilla.Styles[Style.Sql.Character].ForeColor = Color.Red;\n            scintilla.Styles[Style.Sql.Operator].ForeColor = Color.Black;\n\n            //Brace Matching\n            scintilla.IndentationGuides = IndentView.LookBoth;\n            scintilla.Styles[Style.BraceLight].BackColor = Color.LightGray;\n            scintilla.Styles[Style.BraceLight].ForeColor = Color.BlueViolet;\n            scintilla.Styles[Style.BraceBad].ForeColor = Color.Red;\n            scintilla.UpdateUI += scintilla_UpdateUI;\n\n            // Set keyword lists\n            // This keywords base on MSSQL recept with adding MariaDB\\MySQL function lists.\n            // For another SQL servers maybe need create separate style\n            // Word = 0 (commands)\n            scintilla.SetKeywords(0, @\"add alter as authorization backup begin bigint binary bit break browse bulk by cascade case catch check checkpoint close clustered column commit compute constraint containstable continue create current cursor cursor database date datetime datetime2 datetimeoffset dbcc deallocate decimal declare default delete deny desc disk distinct distributed double drop dump else end errlvl escape except exec execute exit external fetch file fillfactor float for foreign freetext freetexttable from full function goto grant group having hierarchyid holdlock identity identity_insert identitycol if image index insert int intersect into key kill lineno load merge money national nchar nocheck nocount nolock nonclustered ntext numeric nvarchar of off offsets on open opendatasource openquery openrowset openxml option order over percent plan precision primary print proc procedure public raiserror read readtext real reconfigure references replication restore restrict return revert revoke rollback rowcount rowguidcol rule save schema securityaudit select set setuser shutdown smalldatetime smallint smallmoney sql_variant statistics table table tablesample text textsize then time timestamp tinyint to top tran transaction trigger truncate try union unique uniqueidentifier update updatetext use user values varbinary varchar varying view waitfor when where while with writetext xml go \");\n            // Word2 = 1 (function)\n            scintilla.SetKeywords(1, \"abs acos adddate addtime aes_decrypt aes_encrypt area asbinary ascii asin astext aswkb aswkt atan atan2 avg \" +\n                \"benchmark bin binlog_gtid_pos bit_and bit_count bit_length bit_or bit_xor boundary buffer \" +\n                \"cast ceil ceiling centroid char charindex character_length char_length charset chr coalesce coercibility collate column_add column_check column_create column_delete column_exists column_get column_json column_list compress concat concat_ws connection_id contains convert conv convert_tz convexhull cos cot count crc32 crosses cume_dist curdate current_date current_role current_time current_timestamp current_user curtime \" +\n                \"database datediff date_add date_format date_sub day dayname dayofmonth dayofweek dayofyear decode decode_histogram default degrees dense_rank des_decrypt des_encrypt dimension disjoint \" +\n                \"elt encode encrypt endpoint envelope equals exp export_set extract extractvalue \" +\n                \"field find_in_set floor format found_rows from_base64 from_days from_unixtime \" +\n                \"get_format greatest group_concat \" +\n                \"hex hour \" +\n                \"ifnull interval inet6_aton inet6_ntoa inet_ntoa instr intersects is_free_lock is_ipv4 is_ipv4_compat is_ipv4_mapped is_ipv6 isnull \" +\n                \"last_day last_insert_id last_value lastval lcase least length linestring load_file localtime localtimestamp locate log log10 log2 lower lpad ltrim \" +\n                \"make_set makedate maketime max md5 median microsecond mid min minute month monthname multilinestring \" +\n                \"name_const nullif nextval now ntile \" +\n                \"object_id oct octet_length old_password ord overlaps \" +\n                \"password percent_rank percent_rank percentile_cont percentile_disc period_add period_diff pi point polygon position pow power \" +\n                \"quarter quote \" +\n                \"radians rand rank regexp regexp_instr regexp_replace regexp_substr release_lock repeat replace reverse right rlike rpad round row_count row_number rtrim \" +\n                \"schema second sec_to_time setval session_user sha sha1 sha2 sign sin soundex space sqrt startpoint str_to_date strcmp subdate substr substring substring_index subtime sum sysdate system_user \" +\n                \"tan time timediff timestamp timestampadd timestampdiff time_format time_to_sec to_base64 to_days to_seconds touches trim truncate tsequal \" +\n                \"ucase unhex uncompress uncompressed_length unix_timestamp updatexml upper user utc_date utc_time utc_timestamp uuid uuid_short \" +\n                \"version \" +\n                \"week weekday weekdaynonamerican weekofyear weight_string within \" +\n                \"year yearweek\");\n            // User1 = 4 (expresions)\n            scintilla.SetKeywords(4, @\"all and any between cross div exists in inner is join left like mod not null or outer pivot right separator some unpivot ( ) * \");\n            // User2 = 5\n            scintilla.SetKeywords(5, @\"sys objects sysobjects \");\n        }\n        \n        private static bool IsBrace(int c)\n        {\n            switch (c)\n            {\n                case '(':\n                case ')':\n                case '[':\n                case ']':\n                case '{':\n                case '}':\n                case '<':\n                case '>':\n                    return true;\n            }\n\n            return false;\n        }\n\n        int lastCaretPos = 0;\n\n        private void scintilla_UpdateUI(object sender, UpdateUIEventArgs e)\n        {\n            // Has the caret changed position?\n            var caretPos = scintilla.CurrentPosition;\n            if (lastCaretPos != caretPos)\n            {\n                lastCaretPos = caretPos;\n                var bracePos1 = -1;\n                var bracePos2 = -1;\n\n                // Is there a brace to the left or right?\n                if (caretPos > 0 && IsBrace(scintilla.GetCharAt(caretPos - 1)))\n                    bracePos1 = (caretPos - 1);\n                else if (IsBrace(scintilla.GetCharAt(caretPos)))\n                    bracePos1 = caretPos;\n\n                if (bracePos1 >= 0)\n                {\n                    // Find the matching brace\n                    bracePos2 = scintilla.BraceMatch(bracePos1);\n                    if (bracePos2 == Scintilla.InvalidPosition)\n                    {\n                        scintilla.BraceBadLight(bracePos1);\n                        scintilla.HighlightGuide = 0;\n                    }\n                    else\n                    {\n                        scintilla.BraceHighlight(bracePos1, bracePos2);\n                        scintilla.HighlightGuide = scintilla.GetColumn(bracePos1);\n                    }\n                }\n                else\n                {\n                    // Turn off brace matching\n                    scintilla.BraceHighlight(Scintilla.InvalidPosition, Scintilla.InvalidPosition);\n                    scintilla.HighlightGuide = 0;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/Syntax/ScintillaXMLStyle.cs",
    "content": "﻿using ScintillaNET;\nusing System.Drawing;\n\nnamespace Majorsilence.Reporting.RdlDesign.Syntax\n{\n    public static class  ScintillaXMLStyle\n    {\n        public static void ConfigureScintillaStyle(ScintillaNET.Scintilla scintilla)\n        {\n            // Reset the styles\n            scintilla.StyleResetDefault();\n            scintilla.Styles[Style.Default].Font = \"Consolas\";\n            scintilla.Styles[Style.Default].Size = 10;\n            scintilla.StyleClearAll();\n\n            // Set the XML Lexer\n            scintilla.Lexer = Lexer.Xml;\n\n            // Show line numbers\n            scintilla.Margins[0].Width = 40;\n\n            // Enable folding\n            scintilla.SetProperty(\"fold\", \"1\");\n            scintilla.SetProperty(\"fold.compact\", \"1\");\n            scintilla.SetProperty(\"fold.html\", \"1\");\n\n            // Use Margin 2 for fold markers\n            scintilla.Margins[2].Type = MarginType.Symbol;\n            scintilla.Margins[2].Mask = Marker.MaskFolders;\n            scintilla.Margins[2].Sensitive = true;\n            scintilla.Margins[2].Width = 20;\n\n            // Reset folder markers\n            for (int i = Marker.FolderEnd; i <= Marker.FolderOpen; i++)\n            {\n                scintilla.Markers[i].SetForeColor(SystemColors.ControlLightLight);\n                scintilla.Markers[i].SetBackColor(SystemColors.ControlDark);\n            }\n\n            // Style the folder markers\n            scintilla.Markers[Marker.Folder].Symbol = MarkerSymbol.BoxPlus;\n            scintilla.Markers[Marker.Folder].SetBackColor(SystemColors.ControlText);\n            scintilla.Markers[Marker.FolderOpen].Symbol = MarkerSymbol.BoxMinus;\n            scintilla.Markers[Marker.FolderEnd].Symbol = MarkerSymbol.BoxPlusConnected;\n            scintilla.Markers[Marker.FolderEnd].SetBackColor(SystemColors.ControlText);\n            scintilla.Markers[Marker.FolderMidTail].Symbol = MarkerSymbol.TCorner;\n            scintilla.Markers[Marker.FolderOpenMid].Symbol = MarkerSymbol.BoxMinusConnected;\n            scintilla.Markers[Marker.FolderSub].Symbol = MarkerSymbol.VLine;\n            scintilla.Markers[Marker.FolderTail].Symbol = MarkerSymbol.LCorner;\n\n            // Enable automatic folding\n            scintilla.AutomaticFold = AutomaticFold.Show | AutomaticFold.Click | AutomaticFold.Change;\n\n            // Set the Styles\n            scintilla.StyleResetDefault();\n            // I like fixed font for XML\n            scintilla.Styles[Style.Default].Font = \"Courier\";\n            scintilla.Styles[Style.Default].Size = 10;\n            scintilla.StyleClearAll();\n            scintilla.Styles[Style.Xml.Attribute].ForeColor = Color.Red;\n            scintilla.Styles[Style.Xml.Entity].ForeColor = Color.Red;\n            scintilla.Styles[Style.Xml.Comment].ForeColor = Color.Green;\n            scintilla.Styles[Style.Xml.Tag].ForeColor = Color.Blue;\n            scintilla.Styles[Style.Xml.TagEnd].ForeColor = Color.Blue;\n            scintilla.Styles[Style.Xml.DoubleString].ForeColor = Color.DeepPink;\n            scintilla.Styles[Style.Xml.SingleString].ForeColor = Color.DeepPink;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesign/TableColumnCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.IO;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for TableColumnCtl.\n\t/// </summary>\n\tinternal class TableColumnCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n\t\tprivate XmlNode _TableColumn;\n\t\tprivate DesignXmlDraw _Draw;\n\t\t// flags for controlling whether syntax changed for a particular property\n\t\tprivate bool fHidden, fToggle, fWidth, fFixedHeader;\n\t\tprivate System.Windows.Forms.GroupBox grpBoxVisibility;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\tprivate System.Windows.Forms.Label label3;\n\t\tprivate System.Windows.Forms.TextBox tbHidden;\n\t\tprivate System.Windows.Forms.ComboBox cbToggle;\n\t\tprivate System.Windows.Forms.Button bHidden;\n\t\tprivate System.Windows.Forms.Label label1;\n\t\tprivate System.Windows.Forms.TextBox tbColumnWidth;\n\t\tprivate System.Windows.Forms.Label label4;\n\t\tprivate System.Windows.Forms.CheckBox chkFixedHeader;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n\t\tpublic TableColumnCtl(DesignXmlDraw dxDraw, XmlNode tc)\n\t\t{\n\t\t\t_TableColumn = tc;\n\t\t\t_Draw = dxDraw;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues(tc);\t\t\t\n\t\t}\n\n\t\tprivate void InitValues(XmlNode node)\n\t\t{\n\t\t\t// Handle Width definition\n\t\t\tthis.tbColumnWidth.Text = _Draw.GetElementValue(node, \"Width\", \"\");\n\t\t\n\t\t\tthis.chkFixedHeader.Checked = _Draw.GetElementValue(node, \"FixedHeader\", \"false\").ToLower() == \"true\"? true: false;\n\n\t\t\t// Handle Visiblity definition\n\t\t\tXmlNode visNode = _Draw.GetNamedChildNode(node, \"Visibility\");\n\t\t\tif (visNode != null)\n\t\t\t{\n\t\t\t\tthis.tbHidden.Text = _Draw.GetElementValue(visNode, \"Hidden\", \"\");\n\t\t\t\tthis.cbToggle.Text = _Draw.GetElementValue(visNode, \"ToggleItem\", \"\");\n\t\t\t}\n\t\t\tIEnumerable list = _Draw.GetReportItems(\"//Textbox\");\n\t\t\tif (list != null)\n\t\t\t{\n\t\t\t\tforeach (XmlNode tNode in list)\n\t\t\t\t{\n\t\t\t\t\tXmlAttribute name = tNode.Attributes[\"Name\"];\n\t\t\t\t\tif (name != null && name.Value != null && name.Value.Length > 0)\n\t\t\t\t\t\tcbToggle.Items.Add(name.Value);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// nothing has changed now\n\t\t\tfWidth = fHidden = fToggle = fFixedHeader = false;\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TableColumnCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.grpBoxVisibility = new System.Windows.Forms.GroupBox();\n\t\t\tthis.bHidden = new System.Windows.Forms.Button();\n\t\t\tthis.cbToggle = new System.Windows.Forms.ComboBox();\n\t\t\tthis.tbHidden = new System.Windows.Forms.TextBox();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.tbColumnWidth = new System.Windows.Forms.TextBox();\n\t\t\tthis.chkFixedHeader = new System.Windows.Forms.CheckBox();\n\t\t\tthis.label4 = new System.Windows.Forms.Label();\n\t\t\tthis.grpBoxVisibility.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// grpBoxVisibility\n\t\t\t// \n\t\t\tresources.ApplyResources(this.grpBoxVisibility, \"grpBoxVisibility\");\n\t\t\tthis.grpBoxVisibility.Controls.Add(this.bHidden);\n\t\t\tthis.grpBoxVisibility.Controls.Add(this.cbToggle);\n\t\t\tthis.grpBoxVisibility.Controls.Add(this.tbHidden);\n\t\t\tthis.grpBoxVisibility.Controls.Add(this.label3);\n\t\t\tthis.grpBoxVisibility.Controls.Add(this.label2);\n\t\t\tthis.grpBoxVisibility.Name = \"grpBoxVisibility\";\n\t\t\tthis.grpBoxVisibility.TabStop = false;\n\t\t\t// \n\t\t\t// bHidden\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bHidden, \"bHidden\");\n\t\t\tthis.bHidden.Name = \"bHidden\";\n\t\t\tthis.bHidden.Tag = \"visibility\";\n\t\t\tthis.bHidden.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// cbToggle\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbToggle, \"cbToggle\");\n\t\t\tthis.cbToggle.Name = \"cbToggle\";\n\t\t\tthis.cbToggle.SelectedIndexChanged += new System.EventHandler(this.cbToggle_SelectedIndexChanged);\n\t\t\tthis.cbToggle.TextChanged += new System.EventHandler(this.cbToggle_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// tbHidden\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbHidden, \"tbHidden\");\n\t\t\tthis.tbHidden.Name = \"tbHidden\";\n\t\t\tthis.tbHidden.TextChanged += new System.EventHandler(this.tbHidden_TextChanged);\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// tbColumnWidth\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbColumnWidth, \"tbColumnWidth\");\n\t\t\tthis.tbColumnWidth.Name = \"tbColumnWidth\";\n\t\t\tthis.tbColumnWidth.TextChanged += new System.EventHandler(this.tbWidth_TextChanged);\n\t\t\t// \n\t\t\t// chkFixedHeader\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkFixedHeader, \"chkFixedHeader\");\n\t\t\tthis.chkFixedHeader.Name = \"chkFixedHeader\";\n\t\t\tthis.chkFixedHeader.CheckedChanged += new System.EventHandler(this.cbFixedHeader_CheckedChanged);\n\t\t\t// \n\t\t\t// label4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label4, \"label4\");\n\t\t\tthis.label4.Name = \"label4\";\n\t\t\t// \n\t\t\t// TableColumnCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.label4);\n\t\t\tthis.Controls.Add(this.chkFixedHeader);\n\t\t\tthis.Controls.Add(this.tbColumnWidth);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Controls.Add(this.grpBoxVisibility);\n\t\t\tthis.Name = \"TableColumnCtl\";\n\t\t\tthis.grpBoxVisibility.ResumeLayout(false);\n\t\t\tthis.grpBoxVisibility.PerformLayout();\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n   \n\t\tpublic bool IsValid()\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tif (fWidth)\n\t\t\t\t\tDesignerUtility.ValidateSize(this.tbColumnWidth.Text, true, false);\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\tMessageBox.Show(ex.Message, Strings.TableColumnCtl_Show_WidthInvalid);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (fHidden)\n\t\t\t{\n\t\t\t\tstring vh = this.tbHidden.Text.Trim();\n\t\t\t\tif (vh.Length > 0)\n\t\t\t\t{\n\t\t\t\t\tif (vh.StartsWith(\"=\"))\n\t\t\t\t\t{}\n\t\t\t\t\telse\n\t\t\t\t\t{ \n\t\t\t\t\t\tvh = vh.ToLower();\n\t\t\t\t\t\tswitch (vh)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcase \"true\":\n\t\t\t\t\t\t\tcase \"false\":\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tMessageBox.Show(String.Format(Strings.TableColumnCtl_Show_ExpressionTrueFalse, tbHidden.Text), Strings.TableColumnCtl_Show_HiddenInvalid);\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// take information in control and apply to all the style nodes\n\t\t\t//  Only change information that has been marked as modified;\n\t\t\t//   this way when group is selected it is possible to change just\n\t\t\t//   the items you want and keep the rest the same.\n\n\t\t\tApplyChanges(this._TableColumn);\n\n\t\t\t// nothing has changed now\n\t\t\tfWidth = fHidden = fToggle = false;\n\t\t}\n\n\t\tprivate void ApplyChanges(XmlNode rNode)\n\t\t{\n\t\t\tif (fHidden || fToggle)\n\t\t\t{\n\t\t\t\tXmlNode visNode = _Draw.SetElement(rNode, \"Visibility\", null);\n\n\t\t\t\tif (fHidden)\n\t\t\t\t{\n\t\t\t\t\tstring vh = this.tbHidden.Text.Trim();\n\t\t\t\t\tif (vh.Length > 0)\n\t\t\t\t\t\t_Draw.SetElement(visNode, \"Hidden\", vh); \n\t\t\t\t\telse\n\t\t\t\t\t\t_Draw.RemoveElement(visNode, \"Hidden\");\n\n\t\t\t\t}\n\t\t\t\tif (fToggle)\n\t\t\t\t\t_Draw.SetElement(visNode, \"ToggleItem\", this.cbToggle.Text); \n\t\t\t}\n\n\t\t\tif (fWidth)\t// already validated\n\t\t\t\t_Draw.SetElement(rNode, \"Width\", this.tbColumnWidth.Text); \n\n\t\t\tif (fFixedHeader)\n\t\t\t{\n\t\t\t\tif (this.chkFixedHeader.Checked)\n\t\t\t\t\t_Draw.SetElement(rNode, \"FixedHeader\", \"true\");\n\t\t\t\telse\n\t\t\t\t\t_Draw.RemoveElement(rNode, \"FixedHeader\");\t\t// just get rid of it\n\t\t\t}\n\t\t}\n\n\t\tprivate void tbHidden_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfHidden = true;\n\t\t}\n\n\t\tprivate void tbWidth_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfWidth = true;\n\t\t}\n\n\t\tprivate void cbToggle_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfToggle = true;\n\t\t}\n\n\t\tprivate void bExpr_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tButton b = sender as Button;\n\t\t\tif (b == null)\n\t\t\t\treturn;\n\t\t\tControl c = null;\n\t\t\tswitch (b.Tag as string)\n\t\t\t{\n\t\t\t\tcase \"visibility\":\n\t\t\t\t\tc = tbHidden;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (c == null)\n\t\t\t\treturn;\n\n            using (DialogExprEditor ee = new DialogExprEditor(_Draw, c.Text, _TableColumn))\n            {\n                DialogResult dr = ee.ShowDialog();\n                if (dr == DialogResult.OK)\n                    c.Text = ee.Expression;\n            }\n            return;\n\t\t}\n\n\t\tprivate void cbFixedHeader_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfFixedHeader = true;\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/TableColumnCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"tbColumnWidth.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>88, 104</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Column Width</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbToggle.Parent\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"grpBoxVisibility.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bHidden.Parent\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"cbToggle.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>168, 48</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>TableColumnCtl</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"bHidden.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;tbColumnWidth.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkFixedHeader.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"label4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 23</value>\n  </data>\n  <data name=\"&gt;&gt;chkFixedHeader.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 48</value>\n  </data>\n  <data name=\"&gt;&gt;tbColumnWidth.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"grpBoxVisibility.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 80</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;cbToggle.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"grpBoxVisibility.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 8</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 16</value>\n  </data>\n  <data name=\"&gt;&gt;tbColumnWidth.Name\" xml:space=\"preserve\">\n    <value>tbColumnWidth</value>\n  </data>\n  <data name=\"&gt;&gt;cbToggle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbToggle.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"tbHidden.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>224, 20</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"tbHidden.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>168, 24</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>120, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bHidden.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;grpBoxVisibility.Name\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"&gt;&gt;bHidden.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;grpBoxVisibility.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Name\" xml:space=\"preserve\">\n    <value>label4</value>\n  </data>\n  <data name=\"grpBoxVisibility.Text\" xml:space=\"preserve\">\n    <value>Visibility</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Note: Fixed headers must be contiguous and start at either the left or the right of the table.  Current renderers ignore this parameter.</value>\n  </data>\n  <data name=\"&gt;&gt;chkFixedHeader.Name\" xml:space=\"preserve\">\n    <value>chkFixedHeader</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Hidden (initial visibility)</value>\n  </data>\n  <data name=\"chkFixedHeader.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 136</value>\n  </data>\n  <data name=\"chkFixedHeader.Text\" xml:space=\"preserve\">\n    <value>Fixed Header</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Toggle Item (Textbox name)</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label4.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"chkFixedHeader.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;chkFixedHeader.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bHidden.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"chkFixedHeader.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 24</value>\n  </data>\n  <data name=\"&gt;&gt;tbHidden.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"tbHidden.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;grpBoxVisibility.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbColumnWidth.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"bHidden.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;tbHidden.Name\" xml:space=\"preserve\">\n    <value>tbHidden</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 104</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>472, 288</value>\n  </data>\n  <data name=\"bHidden.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"tbColumnWidth.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 20</value>\n  </data>\n  <data name=\"&gt;&gt;bHidden.Name\" xml:space=\"preserve\">\n    <value>bHidden</value>\n  </data>\n  <data name=\"tbColumnWidth.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 24</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>112, 136</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>336, 24</value>\n  </data>\n  <data name=\"&gt;&gt;cbToggle.Name\" xml:space=\"preserve\">\n    <value>cbToggle</value>\n  </data>\n  <data name=\"bHidden.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;tbHidden.Parent\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"&gt;&gt;grpBoxVisibility.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"cbToggle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 21</value>\n  </data>\n  <data name=\"&gt;&gt;tbHidden.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bHidden.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>400, 26</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/TableColumnCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label3.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 51</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>139, 13</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Переключающий элемент</value>\n  </data>\n  <data name=\"label2.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 28</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>106, 13</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Скрытый (в начале)</value>\n  </data>\n  <data name=\"grpBoxVisibility.Text\" xml:space=\"preserve\">\n    <value>Видимость</value>\n  </data>\n  <data name=\"label1.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>90, 13</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Ширина столбца</value>\n  </data>\n  <data name=\"tbColumnWidth.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>104, 101</value>\n  </data>\n  <data name=\"chkFixedHeader.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"chkFixedHeader.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>167, 17</value>\n  </data>\n  <data name=\"chkFixedHeader.Text\" xml:space=\"preserve\">\n    <value>Фиксированный заголовок</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 163</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 33</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Примечание: Фиксированные заголовки должны быть смежными и начинаться в левой или правой части таблицы. Текущия версия этот параметр игнорирует.</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/TableCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for ReportCtl.\n\t/// </summary>\n\tinternal class TableCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n        private List<XmlNode> _ReportItems;\n\t\tprivate DesignXmlDraw _Draw;\n\t\tbool fDataSet, fPBBefore, fPBAfter, fNoRows;\n\t\tbool fDetailElementName, fDetailCollectionName, fRenderDetails;\n\t\tbool fCheckRows;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\tprivate System.Windows.Forms.ComboBox cbDataSet;\n\t\tprivate System.Windows.Forms.GroupBox groupBox1;\n\t\tprivate System.Windows.Forms.CheckBox chkPBBefore;\n\t\tprivate System.Windows.Forms.CheckBox chkPBAfter;\n\t\tprivate System.Windows.Forms.Label label1;\n\t\tprivate System.Windows.Forms.TextBox tbNoRows;\n\t\tprivate System.Windows.Forms.GroupBox groupBox2;\n\t\tprivate System.Windows.Forms.Label label3;\n\t\tprivate System.Windows.Forms.Label label4;\n\t\tprivate System.Windows.Forms.CheckBox chkRenderDetails;\n\t\tprivate System.Windows.Forms.TextBox tbDetailElementName;\n\t\tprivate System.Windows.Forms.TextBox tbDetailCollectionName;\n\t\tprivate System.Windows.Forms.GroupBox groupBox3;\n\t\tprivate System.Windows.Forms.CheckBox chkDetails;\n\t\tprivate System.Windows.Forms.CheckBox chkHeaderRows;\n\t\tprivate System.Windows.Forms.CheckBox chkFooterRows;\n        private CheckBox chkFooterRepeat;\n        private CheckBox chkHeaderRepeat;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n        public TableCtl(DesignXmlDraw dxDraw, List<XmlNode> ris)\n\t\t{\n\t\t\t_ReportItems = ris;\n\t\t\t_Draw = dxDraw;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues();\t\t\t\n\t\t}\n\n\t\tprivate void InitValues()\n\t\t{\n\t\t\tXmlNode riNode = _ReportItems[0];\n\n\t\t\ttbNoRows.Text = _Draw.GetElementValue(riNode, \"NoRows\", \"\");\n\t\t\tcbDataSet.Items.AddRange(_Draw.DataSetNames);\n\t\t\tcbDataSet.Text = _Draw.GetDataSetNameValue(riNode);\n\t\t\tif (_Draw.GetReportItemDataRegionContainer(riNode) != null)\n\t\t\t\tcbDataSet.Enabled = false;\n\t\t\tchkPBBefore.Checked = _Draw.GetElementValue(riNode, \"PageBreakAtStart\", \"false\").ToLower()==\"true\"? true:false;\n\t\t\tchkPBAfter.Checked = _Draw.GetElementValue(riNode, \"PageBreakAtEnd\", \"false\").ToLower()==\"true\"? true:false;\n\n\t\t\tthis.chkRenderDetails.Checked = _Draw.GetElementValue(riNode, \"DetailDataElementOutput\", \"output\").ToLower() == \"output\";\n\t\t\tthis.tbDetailElementName.Text = _Draw.GetElementValue(riNode, \"DetailDataElementName\", \"Details\");\n\t\t\tthis.tbDetailCollectionName.Text = _Draw.GetElementValue(riNode, \"DetailDataCollectionName\", \"Details_Collection\");\n\n\t\t\tthis.chkDetails.Checked = _Draw.GetNamedChildNode(riNode, \"Details\") != null;\n            XmlNode fNode = _Draw.GetNamedChildNode(riNode, \"Footer\");\n\t\t\tthis.chkFooterRows.Checked = fNode != null;\n            if (fNode != null)\n            {\n                chkFooterRepeat.Checked = _Draw.GetElementValue(fNode, \"RepeatOnNewPage\", \"false\").ToLower() == \"true\" ? true : false;\n            }\n            else\n                chkFooterRepeat.Enabled = false;\n\n            XmlNode hNode = _Draw.GetNamedChildNode(riNode, \"Header\");\n            this.chkHeaderRows.Checked = hNode != null;\n            if (hNode != null)\n            {\n                chkHeaderRepeat.Checked = _Draw.GetElementValue(hNode, \"RepeatOnNewPage\", \"false\").ToLower() == \"true\" ? true : false;\n            }\n            else\n                chkHeaderRepeat.Enabled = false;\n\n\t\t\tfNoRows = fDataSet = fPBBefore = fPBAfter = \n\t\t\t\tfDetailElementName = fDetailCollectionName = fRenderDetails =\n\t\t\t\tfCheckRows = false;\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TableCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.cbDataSet = new System.Windows.Forms.ComboBox();\n\t\t\tthis.groupBox1 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.chkPBAfter = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkPBBefore = new System.Windows.Forms.CheckBox();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.tbNoRows = new System.Windows.Forms.TextBox();\n\t\t\tthis.groupBox2 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.tbDetailCollectionName = new System.Windows.Forms.TextBox();\n\t\t\tthis.tbDetailElementName = new System.Windows.Forms.TextBox();\n\t\t\tthis.chkRenderDetails = new System.Windows.Forms.CheckBox();\n\t\t\tthis.label4 = new System.Windows.Forms.Label();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.groupBox3 = new System.Windows.Forms.GroupBox();\n\t\t\tthis.chkFooterRepeat = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkHeaderRepeat = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkFooterRows = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkHeaderRows = new System.Windows.Forms.CheckBox();\n\t\t\tthis.chkDetails = new System.Windows.Forms.CheckBox();\n\t\t\tthis.groupBox1.SuspendLayout();\n\t\t\tthis.groupBox2.SuspendLayout();\n\t\t\tthis.groupBox3.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// cbDataSet\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbDataSet, \"cbDataSet\");\n\t\t\tthis.cbDataSet.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n\t\t\tthis.cbDataSet.Name = \"cbDataSet\";\n\t\t\tthis.cbDataSet.SelectedIndexChanged += new System.EventHandler(this.cbDataSet_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// groupBox1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox1, \"groupBox1\");\n\t\t\tthis.groupBox1.Controls.Add(this.chkPBAfter);\n\t\t\tthis.groupBox1.Controls.Add(this.chkPBBefore);\n\t\t\tthis.groupBox1.Name = \"groupBox1\";\n\t\t\tthis.groupBox1.TabStop = false;\n\t\t\t// \n\t\t\t// chkPBAfter\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkPBAfter, \"chkPBAfter\");\n\t\t\tthis.chkPBAfter.Name = \"chkPBAfter\";\n\t\t\tthis.chkPBAfter.CheckedChanged += new System.EventHandler(this.chkPBAfter_CheckedChanged);\n\t\t\t// \n\t\t\t// chkPBBefore\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkPBBefore, \"chkPBBefore\");\n\t\t\tthis.chkPBBefore.Name = \"chkPBBefore\";\n\t\t\tthis.chkPBBefore.CheckedChanged += new System.EventHandler(this.chkPBBefore_CheckedChanged);\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// tbNoRows\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbNoRows, \"tbNoRows\");\n\t\t\tthis.tbNoRows.Name = \"tbNoRows\";\n\t\t\tthis.tbNoRows.TextChanged += new System.EventHandler(this.tbNoRows_TextChanged);\n\t\t\t// \n\t\t\t// groupBox2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox2, \"groupBox2\");\n\t\t\tthis.groupBox2.Controls.Add(this.tbDetailCollectionName);\n\t\t\tthis.groupBox2.Controls.Add(this.tbDetailElementName);\n\t\t\tthis.groupBox2.Controls.Add(this.chkRenderDetails);\n\t\t\tthis.groupBox2.Controls.Add(this.label4);\n\t\t\tthis.groupBox2.Controls.Add(this.label3);\n\t\t\tthis.groupBox2.Name = \"groupBox2\";\n\t\t\tthis.groupBox2.TabStop = false;\n\t\t\t// \n\t\t\t// tbDetailCollectionName\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbDetailCollectionName, \"tbDetailCollectionName\");\n\t\t\tthis.tbDetailCollectionName.Name = \"tbDetailCollectionName\";\n\t\t\tthis.tbDetailCollectionName.TextChanged += new System.EventHandler(this.tbDetailCollectionName_TextChanged);\n\t\t\t// \n\t\t\t// tbDetailElementName\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbDetailElementName, \"tbDetailElementName\");\n\t\t\tthis.tbDetailElementName.Name = \"tbDetailElementName\";\n\t\t\tthis.tbDetailElementName.TextChanged += new System.EventHandler(this.tbDetailElementName_TextChanged);\n\t\t\t// \n\t\t\t// chkRenderDetails\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkRenderDetails, \"chkRenderDetails\");\n\t\t\tthis.chkRenderDetails.Name = \"chkRenderDetails\";\n\t\t\tthis.chkRenderDetails.CheckedChanged += new System.EventHandler(this.chkRenderDetails_CheckedChanged);\n\t\t\t// \n\t\t\t// label4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label4, \"label4\");\n\t\t\tthis.label4.Name = \"label4\";\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// groupBox3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.groupBox3, \"groupBox3\");\n\t\t\tthis.groupBox3.Controls.Add(this.chkFooterRepeat);\n\t\t\tthis.groupBox3.Controls.Add(this.chkHeaderRepeat);\n\t\t\tthis.groupBox3.Controls.Add(this.chkFooterRows);\n\t\t\tthis.groupBox3.Controls.Add(this.chkHeaderRows);\n\t\t\tthis.groupBox3.Controls.Add(this.chkDetails);\n\t\t\tthis.groupBox3.Name = \"groupBox3\";\n\t\t\tthis.groupBox3.TabStop = false;\n\t\t\t// \n\t\t\t// chkFooterRepeat\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkFooterRepeat, \"chkFooterRepeat\");\n\t\t\tthis.chkFooterRepeat.Name = \"chkFooterRepeat\";\n\t\t\tthis.chkFooterRepeat.CheckedChanged += new System.EventHandler(this.chkRows_CheckedChanged);\n\t\t\t// \n\t\t\t// chkHeaderRepeat\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkHeaderRepeat, \"chkHeaderRepeat\");\n\t\t\tthis.chkHeaderRepeat.Name = \"chkHeaderRepeat\";\n\t\t\tthis.chkHeaderRepeat.CheckedChanged += new System.EventHandler(this.chkRows_CheckedChanged);\n\t\t\t// \n\t\t\t// chkFooterRows\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkFooterRows, \"chkFooterRows\");\n\t\t\tthis.chkFooterRows.Name = \"chkFooterRows\";\n\t\t\tthis.chkFooterRows.CheckedChanged += new System.EventHandler(this.chkRows_CheckedChanged);\n\t\t\t// \n\t\t\t// chkHeaderRows\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkHeaderRows, \"chkHeaderRows\");\n\t\t\tthis.chkHeaderRows.Name = \"chkHeaderRows\";\n\t\t\tthis.chkHeaderRows.CheckedChanged += new System.EventHandler(this.chkRows_CheckedChanged);\n\t\t\t// \n\t\t\t// chkDetails\n\t\t\t// \n\t\t\tresources.ApplyResources(this.chkDetails, \"chkDetails\");\n\t\t\tthis.chkDetails.Name = \"chkDetails\";\n\t\t\tthis.chkDetails.CheckedChanged += new System.EventHandler(this.chkRows_CheckedChanged);\n\t\t\t// \n\t\t\t// TableCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.groupBox3);\n\t\t\tthis.Controls.Add(this.groupBox2);\n\t\t\tthis.Controls.Add(this.tbNoRows);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Controls.Add(this.groupBox1);\n\t\t\tthis.Controls.Add(this.cbDataSet);\n\t\t\tthis.Controls.Add(this.label2);\n\t\t\tthis.Name = \"TableCtl\";\n\t\t\tthis.groupBox1.ResumeLayout(false);\n\t\t\tthis.groupBox1.PerformLayout();\n\t\t\tthis.groupBox2.ResumeLayout(false);\n\t\t\tthis.groupBox2.PerformLayout();\n\t\t\tthis.groupBox3.ResumeLayout(false);\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n  \n\t\tpublic bool IsValid()\n\t\t{\n\t\t\tif (chkDetails.Checked || chkFooterRows.Checked || chkHeaderRows.Checked)\n\t\t\t\treturn true;\n\n\t\t\tMessageBox.Show(Strings.TableCtl_Show_TableMustHaveRegions, Strings.TableCtl_Show_Table);\n\n\t\t\treturn false;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// take information in control and apply to all the style nodes\n\t\t\t//  Only change information that has been marked as modified;\n\t\t\t//   this way when group is selected it is possible to change just\n\t\t\t//   the items you want and keep the rest the same.\n\t\t\t\t\n\t\t\tforeach (XmlNode riNode in this._ReportItems)\n\t\t\t\tApplyChanges(riNode);\n\n\t\t\t// No more changes\n\t\t\tfNoRows = fDataSet = fPBBefore = fPBAfter = \n\t\t\t\tfDetailElementName = fDetailCollectionName = fRenderDetails =\n\t\t\t\tfCheckRows = false;\n\t\t}\n\n\t\tpublic void ApplyChanges(XmlNode node)\n\t\t{\n\t\t\tif (fNoRows)\n\t\t\t\t_Draw.SetElement(node, \"NoRows\", this.tbNoRows.Text);\n\t\t\tif (fDataSet)\n\t\t\t\t_Draw.SetElement(node, \"DataSetName\", this.cbDataSet.Text);\n\t\t\tif (fPBBefore)\n\t\t\t\t_Draw.SetElement(node, \"PageBreakAtStart\", this.chkPBBefore.Checked? \"true\":\"false\");\n\t\t\tif (fPBAfter)\n\t\t\t\t_Draw.SetElement(node, \"PageBreakAtEnd\", this.chkPBAfter.Checked? \"true\":\"false\");\n\t\t\tif (fCheckRows)\n\t\t\t{\n\t\t\t\tif (this.chkDetails.Checked)\n\t\t\t\t\tCreateTableRow(node, \"Details\", false);\n\t\t\t\telse\n\t\t\t\t\t_Draw.RemoveElement(node, \"Details\");\n\t\t\t\tif (this.chkHeaderRows.Checked)\n\t\t\t\t\tCreateTableRow(node, \"Header\", chkHeaderRepeat.Checked);\n\t\t\t\telse\n\t\t\t\t\t_Draw.RemoveElement(node, \"Header\");\n\t\t\t\tif (this.chkFooterRows.Checked)\n\t\t\t\t\tCreateTableRow(node, \"Footer\", chkFooterRepeat.Checked);\n\t\t\t\telse\n\t\t\t\t\t_Draw.RemoveElement(node, \"Footer\");\n\t\t\t}\n\t\t\tif (fRenderDetails)\n\t\t\t\t_Draw.SetElement(node, \"DetailDataElementOutput\", this.chkRenderDetails.Checked? \"Output\":\"NoOutput\");\n\t\t\tif (this.fDetailElementName)\n\t\t\t{\n\t\t\t\tif (this.tbDetailElementName.Text.Length > 0)\n\t\t\t\t\t_Draw.SetElement(node, \"DetailDataElementName\", this.tbDetailElementName.Text);\n\t\t\t\telse\n\t\t\t\t\t_Draw.RemoveElement(node, \"DetailDataElementName\");\n\t\t\t}\n\t\t\tif (this.fDetailCollectionName)\n\t\t\t{\n\t\t\t\tif (this.tbDetailCollectionName.Text.Length > 0)\n\t\t\t\t\t_Draw.SetElement(node, \"DetailDataCollectionName\", this.tbDetailCollectionName.Text);\n\t\t\t\telse\n\t\t\t\t\t_Draw.RemoveElement(node, \"DetailDataCollectionName\");\n\t\t\t}\n\t\t}\n\n\t\tprivate void CreateTableRow(XmlNode tblNode, string elementName, bool bRepeatOnNewPage)\n\t\t{\n\t\t\tXmlNode node = _Draw.GetNamedChildNode(tblNode, elementName);\n\t\t\tif (node == null)\n\t\t\t{\n\t\t\t\tnode = _Draw.CreateElement(tblNode, elementName, null);\n\t\t\t\tXmlNode tblRows = _Draw.CreateElement(node, \"TableRows\", null);\n\t\t\t\t_Draw.InsertTableRow(tblRows);\n\t\t\t}\n            if (bRepeatOnNewPage)\n                _Draw.SetElement(node, \"RepeatOnNewPage\", \"true\");\n            else\n                _Draw.RemoveElement(node, \"RepeatOnNewPage\");\n\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void cbDataSet_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfDataSet = true;\n\t\t}\n\n\t\tprivate void chkPBBefore_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPBBefore = true;\n\t\t}\n\n\t\tprivate void chkPBAfter_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfPBAfter = true;\n\t\t}\n\n\t\tprivate void tbNoRows_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfNoRows = true;\n\t\t}\n\n\t\tprivate void chkRows_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tthis.fCheckRows = true;\n            chkFooterRepeat.Enabled = chkFooterRows.Checked;\n            chkHeaderRepeat.Enabled = chkHeaderRows.Checked;\n\t\t}\n\n\t\tprivate void chkRenderDetails_CheckedChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfRenderDetails = true;\n\t\t}\n\n\t\tprivate void tbDetailElementName_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfDetailElementName = true;\n\t\t}\n\n\t\tprivate void tbDetailCollectionName_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfDetailCollectionName = true;\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/TableCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"tbDetailElementName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>224, 20</value>\n  </data>\n  <data name=\"chkRenderDetails.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>160, 24</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>112, 16</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBAfter.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"groupBox3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 120</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"chkHeaderRows.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 24</value>\n  </data>\n  <data name=\"groupBox3.Text\" xml:space=\"preserve\">\n    <value>Include Table Rows</value>\n  </data>\n  <data name=\"&gt;&gt;chkDetails.Name\" xml:space=\"preserve\">\n    <value>chkDetails</value>\n  </data>\n  <data name=\"groupBox3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>400, 64</value>\n  </data>\n  <data name=\"tbDetailCollectionName.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"chkPBAfter.Text\" xml:space=\"preserve\">\n    <value>Insert after Table</value>\n  </data>\n  <data name=\"&gt;&gt;chkHeaderRows.Name\" xml:space=\"preserve\">\n    <value>chkHeaderRows</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbNoRows.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;tbDetailCollectionName.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"chkHeaderRows.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkRenderDetails.Text\" xml:space=\"preserve\">\n    <value>Render Details in Output</value>\n  </data>\n  <data name=\"tbDetailElementName.Text\" xml:space=\"preserve\">\n    <value>textBox1</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;tbDetailElementName.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"chkRenderDetails.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 12</value>\n  </data>\n  <data name=\"tbDetailElementName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>160, 36</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"chkRenderDetails.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;chkFooterRows.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSet.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Name\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;tbDetailElementName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"cbDataSet.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>304, 21</value>\n  </data>\n  <data name=\"chkHeaderRepeat.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>122, 30</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBBefore.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Detail Element Name</value>\n  </data>\n  <data name=\"&gt;&gt;tbNoRows.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBBefore.Parent\" xml:space=\"preserve\">\n    <value>groupBox1</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBAfter.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBBefore.Name\" xml:space=\"preserve\">\n    <value>chkPBBefore</value>\n  </data>\n  <data name=\"tbDetailCollectionName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>224, 20</value>\n  </data>\n  <data name=\"&gt;&gt;chkDetails.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;chkHeaderRows.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkFooterRepeat.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;chkRenderDetails.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"groupBox1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;chkFooterRepeat.Name\" xml:space=\"preserve\">\n    <value>chkFooterRepeat</value>\n  </data>\n  <data name=\"&gt;&gt;tbNoRows.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;chkHeaderRepeat.Parent\" xml:space=\"preserve\">\n    <value>groupBox3</value>\n  </data>\n  <data name=\"chkPBBefore.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>128, 24</value>\n  </data>\n  <data name=\"chkFooterRows.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;tbDetailCollectionName.Name\" xml:space=\"preserve\">\n    <value>tbDetailCollectionName</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox3.Name\" xml:space=\"preserve\">\n    <value>groupBox3</value>\n  </data>\n  <data name=\"chkHeaderRepeat.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;chkHeaderRepeat.Name\" xml:space=\"preserve\">\n    <value>chkHeaderRepeat</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 64</value>\n  </data>\n  <data name=\"chkPBBefore.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 40</value>\n  </data>\n  <data name=\"&gt;&gt;chkFooterRepeat.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"chkPBBefore.Text\" xml:space=\"preserve\">\n    <value>Insert before Table</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>TableCtl</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSet.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbNoRows.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>304, 20</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox3.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;tbDetailCollectionName.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;chkFooterRows.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkHeaderRows.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>144, 13</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox2.Name\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label4.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;tbDetailCollectionName.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 23</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkHeaderRows.Text\" xml:space=\"preserve\">\n    <value>Header Rows</value>\n  </data>\n  <data name=\"&gt;&gt;tbDetailElementName.Name\" xml:space=\"preserve\">\n    <value>tbDetailElementName</value>\n  </data>\n  <data name=\"chkHeaderRepeat.Text\" xml:space=\"preserve\">\n    <value>Repeat header on new page</value>\n  </data>\n  <data name=\"chkHeaderRepeat.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>144, 34</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbDetailElementName.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"chkFooterRows.Text\" xml:space=\"preserve\">\n    <value>Footer Rows</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBAfter.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"groupBox1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 64</value>\n  </data>\n  <data name=\"cbDataSet.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>120, 16</value>\n  </data>\n  <data name=\"chkFooterRows.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 24</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSet.Name\" xml:space=\"preserve\">\n    <value>cbDataSet</value>\n  </data>\n  <data name=\"chkDetails.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Name\" xml:space=\"preserve\">\n    <value>label4</value>\n  </data>\n  <data name=\"&gt;&gt;chkFooterRepeat.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkFooterRepeat.Text\" xml:space=\"preserve\">\n    <value>Repeat footer on new page</value>\n  </data>\n  <data name=\"&gt;&gt;chkRenderDetails.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 38</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBBefore.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"chkPBAfter.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>472, 288</value>\n  </data>\n  <data name=\"chkPBAfter.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>192, 16</value>\n  </data>\n  <data name=\"&gt;&gt;chkHeaderRepeat.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"groupBox2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;chkDetails.Parent\" xml:space=\"preserve\">\n    <value>groupBox3</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkRenderDetails.Name\" xml:space=\"preserve\">\n    <value>chkRenderDetails</value>\n  </data>\n  <data name=\"chkFooterRepeat.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>272, 34</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>DataSet Name</value>\n  </data>\n  <data name=\"&gt;&gt;tbNoRows.Name\" xml:space=\"preserve\">\n    <value>tbNoRows</value>\n  </data>\n  <data name=\"chkDetails.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 24</value>\n  </data>\n  <data name=\"tbNoRows.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>120, 40</value>\n  </data>\n  <data name=\"groupBox3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 23</value>\n  </data>\n  <data name=\"groupBox2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 190</value>\n  </data>\n  <data name=\"&gt;&gt;chkHeaderRows.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"chkFooterRepeat.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>122, 30</value>\n  </data>\n  <data name=\"chkDetails.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 13</value>\n  </data>\n  <data name=\"&gt;&gt;chkPBAfter.Name\" xml:space=\"preserve\">\n    <value>chkPBAfter</value>\n  </data>\n  <data name=\"chkPBAfter.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>128, 24</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>No rows message</value>\n  </data>\n  <data name=\"tbDetailCollectionName.Text\" xml:space=\"preserve\">\n    <value>textBox1</value>\n  </data>\n  <data name=\"tbNoRows.Text\" xml:space=\"preserve\">\n    <value>textBox1</value>\n  </data>\n  <data name=\"&gt;&gt;chkFooterRepeat.Parent\" xml:space=\"preserve\">\n    <value>groupBox3</value>\n  </data>\n  <data name=\"chkDetails.Text\" xml:space=\"preserve\">\n    <value>Detail Rows</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbDataSet.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"tbDetailCollectionName.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>160, 62</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 16</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Page Breaks</value>\n  </data>\n  <data name=\"tbDetailElementName.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>400, 48</value>\n  </data>\n  <data name=\"&gt;&gt;chkFooterRows.Parent\" xml:space=\"preserve\">\n    <value>groupBox3</value>\n  </data>\n  <data name=\"&gt;&gt;chkFooterRows.Name\" xml:space=\"preserve\">\n    <value>chkFooterRows</value>\n  </data>\n  <data name=\"&gt;&gt;chkHeaderRows.Parent\" xml:space=\"preserve\">\n    <value>groupBox3</value>\n  </data>\n  <data name=\"&gt;&gt;chkHeaderRepeat.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;tbNoRows.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkDetails.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"groupBox2.Text\" xml:space=\"preserve\">\n    <value>XML</value>\n  </data>\n  <data name=\"chkFooterRows.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>272, 13</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>120, 16</value>\n  </data>\n  <data name=\"groupBox2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>400, 92</value>\n  </data>\n  <data name=\"chkPBBefore.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Parent\" xml:space=\"preserve\">\n    <value>groupBox2</value>\n  </data>\n  <data name=\"&gt;&gt;cbDataSet.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;chkRenderDetails.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Detail Collection Name</value>\n  </data>\n  <data name=\"&gt;&gt;groupBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/TableCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label2.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>79, 13</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Набор данных</value>\n  </data>\n  <data name=\"cbDataSet.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>182, 16</value>\n  </data>\n  <data name=\"cbDataSet.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>274, 21</value>\n  </data>\n  <data name=\"chkPBAfter.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"chkPBAfter.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>192, 20</value>\n  </data>\n  <data name=\"chkPBAfter.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>158, 17</value>\n  </data>\n  <data name=\"chkPBAfter.Text\" xml:space=\"preserve\">\n    <value>Вставлять после таблицы</value>\n  </data>\n  <data name=\"chkPBBefore.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"chkPBBefore.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 20</value>\n  </data>\n  <data name=\"chkPBBefore.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>162, 17</value>\n  </data>\n  <data name=\"chkPBBefore.Text\" xml:space=\"preserve\">\n    <value>Вставлять перед таблицей</value>\n  </data>\n  <data name=\"groupBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 48</value>\n  </data>\n  <data name=\"groupBox1.Text\" xml:space=\"preserve\">\n    <value>Разрывы страниц</value>\n  </data>\n  <data name=\"label1.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 13</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Сообщение, когда нет строк</value>\n  </data>\n  <data name=\"tbNoRows.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>182, 40</value>\n  </data>\n  <data name=\"tbNoRows.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>274, 20</value>\n  </data>\n  <data name=\"tbDetailCollectionName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>266, 20</value>\n  </data>\n  <data name=\"tbDetailElementName.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>266, 20</value>\n  </data>\n  <data name=\"chkRenderDetails.Text\" xml:space=\"preserve\">\n    <value>Выводить тело</value>\n  </data>\n  <data name=\"label4.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>140, 13</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>Название коллекции тела</value>\n  </data>\n  <data name=\"label3.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>135, 13</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Название элемента тела</value>\n  </data>\n  <data name=\"groupBox2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 192</value>\n  </data>\n  <data name=\"groupBox2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 92</value>\n  </data>\n  <data name=\"chkFooterRepeat.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>285, 34</value>\n  </data>\n  <data name=\"chkFooterRepeat.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>141, 30</value>\n  </data>\n  <data name=\"chkFooterRepeat.Text\" xml:space=\"preserve\">\n    <value>Повторять окончание на новой странице</value>\n  </data>\n  <data name=\"chkHeaderRepeat.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>134, 34</value>\n  </data>\n  <data name=\"chkHeaderRepeat.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>145, 30</value>\n  </data>\n  <data name=\"chkHeaderRepeat.Text\" xml:space=\"preserve\">\n    <value>Повторять заголовок на новой странице</value>\n  </data>\n  <data name=\"chkFooterRows.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>285, 13</value>\n  </data>\n  <data name=\"chkFooterRows.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>122, 24</value>\n  </data>\n  <data name=\"chkFooterRows.Text\" xml:space=\"preserve\">\n    <value>Строки окончания</value>\n  </data>\n  <data name=\"chkHeaderRows.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>134, 13</value>\n  </data>\n  <data name=\"chkHeaderRows.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>122, 24</value>\n  </data>\n  <data name=\"chkHeaderRows.Text\" xml:space=\"preserve\">\n    <value>Строки заголовка</value>\n  </data>\n  <data name=\"chkDetails.Text\" xml:space=\"preserve\">\n    <value>Строки тела</value>\n  </data>\n  <data name=\"groupBox3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 66</value>\n  </data>\n  <data name=\"groupBox3.Text\" xml:space=\"preserve\">\n    <value>Включать строки таблицы</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>480, 290</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/TableRowCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.IO;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for TableRowCtl.\n\t/// </summary>\n\tinternal class TableRowCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n\t\tprivate XmlNode _TableRow;\n\t\tprivate DesignXmlDraw _Draw;\n\t\t// flags for controlling whether syntax changed for a particular property\n\t\tprivate bool fHidden, fToggle, fHeight;\n\t\tprivate System.Windows.Forms.GroupBox grpBoxVisibility;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\tprivate System.Windows.Forms.Label label3;\n\t\tprivate System.Windows.Forms.TextBox tbHidden;\n\t\tprivate System.Windows.Forms.ComboBox cbToggle;\n\t\tprivate System.Windows.Forms.Button bHidden;\n\t\tprivate System.Windows.Forms.Label label1;\n\t\tprivate System.Windows.Forms.TextBox tbRowHeight;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n\t\tinternal TableRowCtl(DesignXmlDraw dxDraw, XmlNode tr)\n\t\t{\n\t\t\t_TableRow = tr;\n\t\t\t_Draw = dxDraw;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues(tr);\t\t\t\n\t\t}\n\n\t\tprivate void InitValues(XmlNode node)\n\t\t{\n\t\t\t// Handle Width definition\n\t\t\tthis.tbRowHeight.Text = _Draw.GetElementValue(node, \"Height\", \"\");\n\t\t\n\t\t\t// Handle Visiblity definition\n\t\t\tXmlNode visNode = _Draw.GetNamedChildNode(node, \"Visibility\");\n\t\t\tif (visNode != null)\n\t\t\t{\n\t\t\t\tthis.tbHidden.Text = _Draw.GetElementValue(visNode, \"Hidden\", \"\");\n\t\t\t\tthis.cbToggle.Text = _Draw.GetElementValue(visNode, \"ToggleItem\", \"\");\n\t\t\t}\n\t\t\tIEnumerable list = _Draw.GetReportItems(\"//Textbox\");\n\t\t\tif (list != null)\n\t\t\t{\n\t\t\t\tforeach (XmlNode tNode in list)\n\t\t\t\t{\n\t\t\t\t\tXmlAttribute name = tNode.Attributes[\"Name\"];\n\t\t\t\t\tif (name != null && name.Value != null && name.Value.Length > 0)\n\t\t\t\t\t\tcbToggle.Items.Add(name.Value);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// nothing has changed now\n\t\t\tfHeight = fHidden = fToggle = false;\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TableRowCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.grpBoxVisibility = new System.Windows.Forms.GroupBox();\n\t\t\tthis.bHidden = new System.Windows.Forms.Button();\n\t\t\tthis.cbToggle = new System.Windows.Forms.ComboBox();\n\t\t\tthis.tbHidden = new System.Windows.Forms.TextBox();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.tbRowHeight = new System.Windows.Forms.TextBox();\n\t\t\tthis.grpBoxVisibility.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// grpBoxVisibility\n\t\t\t// \n\t\t\tresources.ApplyResources(this.grpBoxVisibility, \"grpBoxVisibility\");\n\t\t\tthis.grpBoxVisibility.Controls.Add(this.bHidden);\n\t\t\tthis.grpBoxVisibility.Controls.Add(this.cbToggle);\n\t\t\tthis.grpBoxVisibility.Controls.Add(this.tbHidden);\n\t\t\tthis.grpBoxVisibility.Controls.Add(this.label3);\n\t\t\tthis.grpBoxVisibility.Controls.Add(this.label2);\n\t\t\tthis.grpBoxVisibility.Name = \"grpBoxVisibility\";\n\t\t\tthis.grpBoxVisibility.TabStop = false;\n\t\t\t// \n\t\t\t// bHidden\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bHidden, \"bHidden\");\n\t\t\tthis.bHidden.Name = \"bHidden\";\n\t\t\tthis.bHidden.Tag = \"visibility\";\n\t\t\tthis.bHidden.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// cbToggle\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbToggle, \"cbToggle\");\n\t\t\tthis.cbToggle.Name = \"cbToggle\";\n\t\t\tthis.cbToggle.SelectedIndexChanged += new System.EventHandler(this.cbToggle_SelectedIndexChanged);\n\t\t\tthis.cbToggle.TextChanged += new System.EventHandler(this.cbToggle_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// tbHidden\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbHidden, \"tbHidden\");\n\t\t\tthis.tbHidden.Name = \"tbHidden\";\n\t\t\tthis.tbHidden.TextChanged += new System.EventHandler(this.tbHidden_TextChanged);\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// tbRowHeight\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbRowHeight, \"tbRowHeight\");\n\t\t\tthis.tbRowHeight.Name = \"tbRowHeight\";\n\t\t\tthis.tbRowHeight.TextChanged += new System.EventHandler(this.tbRowHeight_TextChanged);\n\t\t\t// \n\t\t\t// TableRowCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.tbRowHeight);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Controls.Add(this.grpBoxVisibility);\n\t\t\tthis.Name = \"TableRowCtl\";\n\t\t\tthis.grpBoxVisibility.ResumeLayout(false);\n\t\t\tthis.grpBoxVisibility.PerformLayout();\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n       \n\t\tpublic bool IsValid()\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tif (fHeight)\n\t\t\t\t\tDesignerUtility.ValidateSize(this.tbRowHeight.Text, true, false);\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\tMessageBox.Show(ex.Message, Strings.TableRowCtl_Show_HeightInvalid);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (fHidden)\n\t\t\t{\n\t\t\t\tstring vh = this.tbHidden.Text.Trim();\n\t\t\t\tif (vh.Length > 0)\n\t\t\t\t{\n\t\t\t\t\tif (vh.StartsWith(\"=\"))\n\t\t\t\t\t{}\n\t\t\t\t\telse\n\t\t\t\t\t{ \n\t\t\t\t\t\tvh = vh.ToLower();\n\t\t\t\t\t\tswitch (vh)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcase \"true\":\n\t\t\t\t\t\t\tcase \"false\":\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tMessageBox.Show(String.Format(Strings.TableRowCtl_Show_ExpressionTrueFalse, tbHidden.Text), Strings.TableRowCtl_Show_HiddenInvalid);\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// take information in control and apply to all the style nodes\n\t\t\t//  Only change information that has been marked as modified;\n\t\t\t//   this way when group is selected it is possible to change just\n\t\t\t//   the items you want and keep the rest the same.\n\n\t\t\tApplyChanges(this._TableRow);\n\n\t\t\t// nothing has changed now\n\t\t\tfHeight = fHidden = fToggle = false;\n\t\t}\n\n\t\tprivate void ApplyChanges(XmlNode rNode)\n\t\t{\n\t\t\tif (fHidden || fToggle)\n\t\t\t{\n\t\t\t\tXmlNode visNode = _Draw.SetElement(rNode, \"Visibility\", null);\n\n\t\t\t\tif (fHidden)\n\t\t\t\t{\n\t\t\t\t\tstring vh = this.tbHidden.Text.Trim();\n\t\t\t\t\tif (vh.Length > 0)\n\t\t\t\t\t\t_Draw.SetElement(visNode, \"Hidden\", vh); \n\t\t\t\t\telse\n\t\t\t\t\t\t_Draw.RemoveElement(visNode, \"Hidden\");\n\n\t\t\t\t}\n\t\t\t\tif (fToggle)\n\t\t\t\t\t_Draw.SetElement(visNode, \"ToggleItem\", this.cbToggle.Text); \n\t\t\t}\n\n\t\t\tif (fHeight)\t// already validated\n\t\t\t\t_Draw.SetElement(rNode, \"Height\", this.tbRowHeight.Text); \n\t\t}\n\n\t\tprivate void tbHidden_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfHidden = true;\n\t\t}\n\n\t\tprivate void tbRowHeight_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfHeight = true;\n\t\t}\n\n\t\tprivate void cbToggle_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfToggle = true;\n\t\t}\n\n\t\tprivate void bExpr_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tButton b = sender as Button;\n\t\t\tif (b == null)\n\t\t\t\treturn;\n\t\t\tControl c = null;\n\t\t\tswitch (b.Tag as string)\n\t\t\t{\n\t\t\t\tcase \"visibility\":\n\t\t\t\t\tc = tbHidden;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (c == null)\n\t\t\t\treturn;\n\n            using (DialogExprEditor ee = new DialogExprEditor(_Draw, c.Text, _TableRow))\n            {\n                DialogResult dr = ee.ShowDialog();\n                if (dr == DialogResult.OK)\n                    c.Text = ee.Expression;\n                return;\n            }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/TableRowCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Row Height</value>\n  </data>\n  <data name=\"&gt;&gt;cbToggle.Parent\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"grpBoxVisibility.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"tbRowHeight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>88, 104</value>\n  </data>\n  <data name=\"&gt;&gt;bHidden.Parent\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"cbToggle.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>168, 48</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>TableRowCtl</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"bHidden.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Hidden (initial visibility)</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 23</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"&gt;&gt;tbRowHeight.Name\" xml:space=\"preserve\">\n    <value>tbRowHeight</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"grpBoxVisibility.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 80</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;cbToggle.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;cbToggle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"grpBoxVisibility.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 8</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 16</value>\n  </data>\n  <data name=\"tbRowHeight.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>100, 20</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbRowHeight.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"cbToggle.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"tbHidden.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>224, 20</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"tbHidden.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>168, 24</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>120, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bHidden.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;grpBoxVisibility.Name\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"&gt;&gt;bHidden.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;grpBoxVisibility.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"grpBoxVisibility.Text\" xml:space=\"preserve\">\n    <value>Visibility</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Toggle Item (Textbox name)</value>\n  </data>\n  <data name=\"bHidden.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 48</value>\n  </data>\n  <data name=\"&gt;&gt;tbHidden.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"tbHidden.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;grpBoxVisibility.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"bHidden.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;tbHidden.Name\" xml:space=\"preserve\">\n    <value>tbHidden</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 104</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>472, 288</value>\n  </data>\n  <data name=\"bHidden.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"&gt;&gt;bHidden.Name\" xml:space=\"preserve\">\n    <value>bHidden</value>\n  </data>\n  <data name=\"&gt;&gt;tbRowHeight.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 24</value>\n  </data>\n  <data name=\"&gt;&gt;cbToggle.Name\" xml:space=\"preserve\">\n    <value>cbToggle</value>\n  </data>\n  <data name=\"bHidden.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;tbHidden.Parent\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"&gt;&gt;tbRowHeight.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;grpBoxVisibility.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"cbToggle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 21</value>\n  </data>\n  <data name=\"&gt;&gt;tbHidden.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbRowHeight.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bHidden.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>400, 26</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/TableRowCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label3.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>6, 51</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>139, 13</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Переключающий элемент</value>\n  </data>\n  <data name=\"label2.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>6, 27</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>106, 13</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Скрытый (в начале)</value>\n  </data>\n  <data name=\"grpBoxVisibility.Text\" xml:space=\"preserve\">\n    <value>Видимость</value>\n  </data>\n  <data name=\"label1.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>14, 107</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>83, 13</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Высота строки</value>\n  </data>\n  <data name=\"tbRowHeight.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>176, 104</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/ToolStripUserZoomControl.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing System.Windows.Forms;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    //Declare a class that inherits from ToolStripControlHost.\n    public class ToolStripUserZoomControl : ToolStripControlHost\n    {\n        // Call the base constructor passing in a MonthCalendar instance.\n        public ToolStripUserZoomControl() : base(new UserZoomControl()) { }\n\n        public UserZoomControl ZoomControl\n        {\n            get\n            {\n                return Control as UserZoomControl;\n            }\n        }\n\n        [Browsable(true)]\n        public event EventHandler<UserZoomControl.CambiaValori> ZoomChanged;\n\n\n        // Subscribe and unsubscribe the control events you wish to expose.\n        protected override void OnSubscribeControlEvents(Control c)\n        {\n            // Call the base so the base events are connected.\n            base.OnSubscribeControlEvents(c);\n\n            UserZoomControl zoomControl = (UserZoomControl)c;\n            zoomControl.ZoomChanged += new EventHandler<UserZoomControl.CambiaValori>(ZoomControl1_ValueChanged);\n        }\n\n        protected override void OnUnsubscribeControlEvents(Control c)\n        {\n            // Call the base method so the basic events are unsubscribed.\n            base.OnUnsubscribeControlEvents(c);\n\n            UserZoomControl zoomControl = (UserZoomControl)c;\n            zoomControl.ZoomChanged -= new EventHandler<UserZoomControl.CambiaValori>(ZoomControl1_ValueChanged);\n        }\n\n\n        // Raise the DateChanged event.\n        private void ZoomControl1_ValueChanged(object sender, UserZoomControl.CambiaValori e)\n        {\n            if (this.ZoomChanged != null)\n                this.ZoomChanged(this, e);\n        }\n\n    }\n}\n"
  },
  {
    "path": "RdlDesign/Undo.cs",
    "content": "\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Xml;\nusing Majorsilence.Reporting.RdlDesign.Resources;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\tinternal class Undo\n\t{ \n\t\tStack _actions;\n\t\tbool _Undoing = false;\n\t\tXmlDocument _doc;\n\t\tUndoGroup _currentUndoGroup = null;\n\t\tobject _pState=null;\t\t\t\t\t// state saved with previous changing event\n\t\tint _UndoLevels;\n\t\tbool _GroupsOnly=false;\n\n\t\tinternal Undo(XmlDocument doc, int levels)\n\t\t{ \n\t\t\t_doc = doc;\n\t\t\t_UndoLevels = levels;\t\t\t\t// we don't currently support; need to write special Stack\n\t\t\t_doc.NodeChanging +=new XmlNodeChangedEventHandler(NodeChanging);\n\t\t\t_doc.NodeChanged += new XmlNodeChangedEventHandler(NodeChanged);\n\t\t\t_doc.NodeInserting +=new XmlNodeChangedEventHandler(NodeChanging);\n\t\t\t_doc.NodeInserted += new XmlNodeChangedEventHandler(NodeChanged);\n\t\t\t_doc.NodeRemoving +=new XmlNodeChangedEventHandler(NodeChanging);\n\t\t\t_doc.NodeRemoved += new XmlNodeChangedEventHandler(NodeChanged);\n\t\t\t_actions = new Stack();\n\t\t}\n\n\t\tinternal bool GroupsOnly\n\t\t{\n\t\t\tget {return _GroupsOnly;}\n\t\t\tset {_GroupsOnly = value;}\n\t\t}\n\n\t\tinternal bool CanUndo\n\t\t{\n\t\t\tget {return _actions.Count > 0;}\n\t\t}\n\n\t\tinternal string Description\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (_actions.Count == 0)\n\t\t\t\t\treturn \"\";\n\n\t\t\t\tUndoItem ui = (UndoItem) _actions.Peek();\n\t\t\t\treturn ui.GetDescription();\n\t\t\t}\n\t\t}\n\n\t\tinternal void Reset()\n\t\t{\n\t\t\t_actions.Clear();\n\t\t}\n\n\t\tinternal bool Undoing\n\t\t{\n\t\t\tget {return _Undoing;}\n\t\t\tset {_Undoing = value;}\n\t\t}\n\n\t\tprivate void NodeChanging(object sender, XmlNodeChangedEventArgs e)\n\t\t{\n\t\t\tif (_Undoing)\n\t\t\t\treturn;\n\n\t\t\tswitch (e.Action)\n\t\t\t{\n\t\t\t\tcase XmlNodeChangedAction.Insert:\n\t\t\t\t\t_pState = NodeInsertedUndo.PreviousState(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase XmlNodeChangedAction.Remove:\n\t\t\t\t\t_pState = NodeRemovedUndo.PreviousState(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase XmlNodeChangedAction.Change:\n\t\t\t\t\t_pState = NodeChangedUndo.PreviousState(e);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Exception(Strings.Undo_Error_UnknownAction);\n\t\t\t}\n\t\t}\n\n\t\tprivate void NodeChanged(object sender, XmlNodeChangedEventArgs e)\n\t\t{\n\t\t\tif (_Undoing)\n\t\t\t{\n\t\t\t\t// if we're undoing ignore the event since it is the result of an undo\n\t\t\t\t_pState = null;\n\t\t\t\t_Undoing = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tUndoItem undo = null;\n\t\t\tswitch (e.Action)\n\t\t\t{\n\t\t\t\tcase XmlNodeChangedAction.Insert:\n\t\t\t\t\tundo = new NodeInsertedUndo(e, _pState);\n\t\t\t\t\tbreak;\n\t\t\t\tcase XmlNodeChangedAction.Remove:\n\t\t\t\t\tundo = new NodeRemovedUndo(e, _pState);\n\t\t\t\t\tbreak;\n\t\t\t\tcase XmlNodeChangedAction.Change:\n\t\t\t\t\tundo = new NodeChangedUndo(e, _pState);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Exception(Strings.Undo_Error_UnknownAction);\n\t\t\t}\n\t\t\t_pState = null;\n\t\t\tif (_currentUndoGroup != null)\n\t\t\t{\n\t\t\t\t_currentUndoGroup.AddUndoItem(undo);\n\t\t\t}\n\t\t\telse if (GroupsOnly)\n\t\t\t{\n\t\t\t\t_pState = null;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t_actions.Push(undo);\n\t\t\t}\n\t\t}\n\n\t\tinternal void undo()\n\t\t{\n\t\t\tUndoItem undoItem = null;\n\n\t\t\tif (_actions.Count == 0)\n\t\t\t\treturn;\n\n\t\t\tundoItem = (UndoItem)_actions.Pop();\n\n\t\t\t_Undoing = true;\n\t\t\tundoItem.Undo();\n\t\t}\n\n\t\tinternal void StartUndoGroup(String description)\n\t\t{\n\t\t\tUndoGroup ug = new UndoGroup(this, description);\n\t\t\t_currentUndoGroup = ug;\n\t\t\t_actions.Push(ug);\n\t\t}\n\t\t\n\t\tinternal void EndUndoGroup()\n\t\t{\n\t\t\tEndUndoGroup(true);\t\t\t// we want to keep the undo items on the stack\n\t\t}\t\n\n\t\tinternal void EndUndoGroup(bool keepChanges)\n\t\t{\n\t\t\tif (_currentUndoGroup == null)\n\t\t\t\treturn;\n\n\t\t\t// group contains no items; or user doesn't want changes to part of undo\n\t\t\t//   \n\t\t\tif (_currentUndoGroup.Count == 0 || !keepChanges)\t\n\t\t\t{\n\t\t\t\tUndoGroup ug = _actions.Pop() as UndoGroup;\t// get rid of the empty group\n\t\t\t\tif (ug != _currentUndoGroup)\t\t\n\t\t\t\t\tthrow new Exception(Strings.Undo_Error_EndGroupNotMatchStartGroup);\n\t\t\t}\n\t\t\t_currentUndoGroup = null;\n\t\t}\n\t}\n\n    internal interface UndoItem\n    {\n        void Undo();\n        String GetDescription();\n    }\n\n    internal class NodeInsertedUndo : UndoItem\n    {\n        XmlNode iNode;\n\n        public NodeInsertedUndo(XmlNodeChangedEventArgs e, object previous)\n        {\n            iNode = e.Node;\n        }\n\n        public void Undo()\n        {\n            XmlNode parent = iNode.ParentNode;\n\t\t\tif (parent == null)\t\t// happens with attributes but doesn't affect the undo??\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n            parent.RemoveChild(iNode);\n        }\n\n        public String GetDescription()\n        {\n\t\t\treturn Strings.NodeInsertedUndo_GetDescription_insert;\t// could be more explicit using XmlNodeType but ...\n        }\n\t\n\t\tstatic internal object PreviousState(XmlNodeChangedEventArgs e)\n\t\t{\n\t\t\treturn null;\n\t\t}\n\t}\n\n    internal class NodeRemovedUndo : UndoItem\n    {\n        internal XmlNode removedNode;\n        internal XmlNode parentNode;\n        internal XmlNode nextSibling;\n\n        internal NodeRemovedUndo(XmlNodeChangedEventArgs e, object previous)\n        {\n            removedNode = e.Node;\n            parentNode = e.OldParent;\n            nextSibling = previous as XmlNode;\n        }\n\n        public void Undo()\n        {\n            parentNode.InsertBefore(removedNode, nextSibling);\n        }\n\n        public String GetDescription()\n        {\n\t\t\treturn Strings.NodeRemovedUndo_GetDescription_remove;\t\t// could be more specific using NodeType\n        }\n\n\t\tstatic internal object PreviousState(XmlNodeChangedEventArgs e)\n\t\t{\n\t\t\treturn e.Node.NextSibling;\n\t\t}\n\t}\n\n\n    /**\n     * Can be used for both CharacterData and ProcessingInstruction nodes.\n     */\n    internal class NodeChangedUndo : UndoItem\n    {\n        String oldValue;\n        XmlNode node;\n\n        internal NodeChangedUndo(XmlNodeChangedEventArgs e, object pValue)\n        {\n\t\t\toldValue = pValue as string;\n            node = e.Node;\t\t\n        }\n\n        public void Undo()\n        {\n\t\t\tnode.Value = oldValue;\n        }\n\n        public String GetDescription()\n        {\n\t\t\treturn Strings.NodeChangedUndo_GetDescription_change;\n        }\n\t\n\t\tstatic internal object PreviousState(XmlNodeChangedEventArgs e)\n\t\t{\n\t\t\treturn e.Node.Value;\n\t\t}\n\t}\n\n    /**\n     * Groups several undo events into one transaction.  Needed when one\n\t * user action corresponds to multiple dom events\n     * */\n    internal class UndoGroup : UndoItem\n    {\n\t\tUndo _undo;\n        string description;\n        List<UndoItem> undoItems = new List<UndoItem>();\n\n        internal UndoGroup(Undo undo, String description)\n        {\n\t\t\t_undo = undo;\n            this.description = description;\n        }\n\n        internal void AddUndoItem(UndoItem ui)\n        {\n            undoItems.Add(ui);\n        }\n\n\t\tinternal int Count\n\t\t{\n\t\t\tget {return undoItems.Count;}\n\t\t}\n\n        public void Undo()\n        {\n\t\t\t// loop thru group items backwards\n\t\t\tfor (int i=undoItems.Count-1; i >= 0; i--)\n            {\n\t\t\t\tUndoItem ui = undoItems[i] as UndoItem;\n                _undo.Undoing = true;\n                ui.Undo();\n            }\n        }\n\n        public String GetDescription()\n        {\n            return description;\n        }\n    }\n\n}"
  },
  {
    "path": "RdlDesign/UserZoomControl.Designer.cs",
    "content": "﻿namespace Majorsilence.Reporting.RdlDesign\n{\n    partial class UserZoomControl\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.DoubleBuffered = true;\n            this.BtnPlus = new System.Windows.Forms.Button();\n            this.BtnMinus = new System.Windows.Forms.Button();\n            this.TxtZoomValue = new System.Windows.Forms.TextBox();\n            this.SuspendLayout();\n            // \n            // BtnPlus\n            // \n            this.BtnPlus.AutoSize = true;\n            this.BtnPlus.Font = new System.Drawing.Font(\"Segoe UI\", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.BtnPlus.Location = new System.Drawing.Point(86, 1);\n            this.BtnPlus.Margin = new System.Windows.Forms.Padding(0);\n            this.BtnPlus.Name = \"BtnPlus\";\n            this.BtnPlus.Size = new System.Drawing.Size(36, 30);\n            this.BtnPlus.TabIndex = 0;\n            this.BtnPlus.TabStop = false;\n            this.BtnPlus.Text = \"+\";\n            this.BtnPlus.UseVisualStyleBackColor = true;\n            this.BtnPlus.Click += new System.EventHandler(this.BtnPlus_Click);\n            // \n            // BtnMinus\n            // \n            this.BtnMinus.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;\n            this.BtnMinus.Font = new System.Drawing.Font(\"Segoe UI\", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.BtnMinus.Location = new System.Drawing.Point(2, 1);\n            this.BtnMinus.Margin = new System.Windows.Forms.Padding(0);\n            this.BtnMinus.Name = \"BtnMinus\";\n            this.BtnMinus.Size = new System.Drawing.Size(36, 30);\n            this.BtnMinus.TabIndex = 1;\n            this.BtnMinus.TabStop = false;\n            this.BtnMinus.Text = \"-\";\n            this.BtnMinus.UseVisualStyleBackColor = true;\n            this.BtnMinus.Click += new System.EventHandler(this.BtnMinus_Click);\n            // \n            // TxtZoomValue\n            // \n            this.TxtZoomValue.BorderStyle = System.Windows.Forms.BorderStyle.None;\n            this.TxtZoomValue.Font = new System.Drawing.Font(\"Segoe UI\", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.TxtZoomValue.Location = new System.Drawing.Point(38, 6);\n            this.TxtZoomValue.Margin = new System.Windows.Forms.Padding(0);\n            this.TxtZoomValue.Name = \"TxtZoomValue\";\n            this.TxtZoomValue.Size = new System.Drawing.Size(48, 20);\n            this.TxtZoomValue.TabIndex = 2;\n            this.TxtZoomValue.TabStop = false;\n            this.TxtZoomValue.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;\n            // \n            // UserZoomControl\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.AutoSize = true;\n            this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;\n            this.BackColor = System.Drawing.Color.White;\n            this.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;\n            this.Controls.Add(this.TxtZoomValue);\n            this.Controls.Add(this.BtnMinus);\n            this.Controls.Add(this.BtnPlus);\n            this.Font = new System.Drawing.Font(\"Segoe UI Semibold\", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.Margin = new System.Windows.Forms.Padding(0);\n            this.Name = \"UserZoomControl\";\n            this.Size = new System.Drawing.Size(122, 31);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.Button BtnPlus;\n        private System.Windows.Forms.Button BtnMinus;\n        private System.Windows.Forms.TextBox TxtZoomValue;\n    }\n}\n"
  },
  {
    "path": "RdlDesign/UserZoomControl.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Linq;\nusing System.Security.Cryptography.X509Certificates;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n    public partial class UserZoomControl : UserControl\n    {\n        private float _MinValue = 1f;\n        private float _MaxValue=10f;\n        private float _Step=0.1f;\n        private float ValoreCorrente=1f;\n        /// <summary>\n        /// \n        /// </summary>\n        [Browsable(true)]\n        public event EventHandler<CambiaValori> ZoomChanged;\n\n        /// <summary>\n        /// MiniZoomControl\n        /// </summary>\n        public UserZoomControl()\n        {\n            Size s;\n            InitializeComponent();\n            TxtZoomValue.Text=ValoreCorrente.ToString(\"0.0\");\n            s = this.Size;\n            s.Width = BtnMinus.Size.Width+TxtZoomValue.Size.Width+BtnPlus.Size.Width+4;\n      //      this.Size = s;  \n        }\n\n        /// <summary>\n        /// Setta\n        /// </summary>\n        /// <returns></returns>\n        [Browsable(true)]\n        [Category(\"Added\")]\n        [Description(\"Massimo Valore di zoom\")]\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public float MinValue\n        {\n            get  { return _MinValue; }\n            set{\n                if (value < 0f) { _MinValue = 0f; }\n                else _MinValue = value;\n            }\n        }\n        /// <summary>\n        /// \n        /// </summary>\n        [Browsable(true)]\n        [Category(\"Added\")]\n        [Description(\"Massimo zoom\")] \n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public float MaxValue\n        {\n            get { return _MaxValue; }\n            set\n            {\n                if (value > 100f) { _MinValue = 100f; }\n                else _MinValue = value;\n            }\n        }\n        /// <summary>\n        /// \n        /// </summary>\n        [Browsable(true)]\n        [Category(\"Added\")]\n        [Description(\"Step zoom\")]\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public float Step\n        {\n            get { return _Step; }\n            set {   _Step = value;}\n        }\n\n\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// \n        //[Browsable(true)]\n        //[Category(\"Added\")]\n        //[Description(\"Cambio di Valore di zoom\")]\n        protected void FireValueChanged()\n        {\n            CambiaValori e = new CambiaValori\n            {\n                ValoreZoom = ValoreCorrente,\n                MinZoom = _MinValue,\n                MaxZoom = _MaxValue\n            };\n            TxtZoomValue.Text=ValoreCorrente.ToString(\"0.0\");\n            //bubble the event up to the parent\n            if (this.ZoomChanged != null)\n                this.ZoomChanged(this, e);\n            \n        }\n\n        \n\n        private void BtnMinus_Click(object sender, EventArgs e)\n        {\n            if ((ValoreCorrente - _Step) >= MinValue)\n            { ValoreCorrente -= Step;\n                FireValueChanged();\n            }\n        }\n        private void BtnPlus_Click(object sender, EventArgs e)\n        {\n            if ((ValoreCorrente + _Step) <= MaxValue)\n            {\n                ValoreCorrente += Step;\n                FireValueChanged();\n            }\n        }\n\n        /// <summary>\n        /// Classe per determinare i parametri passati a un item della classe event args\n        /// </summary>\n        public class CambiaValori : EventArgs\n        {\n            public float ValoreZoom { get; set; }\n            public float MinZoom { get; set; }\n            public float MaxZoom { get; set; }\n        }\n\n        \n    }\n}\n"
  },
  {
    "path": "RdlDesign/VisibilityCtl.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Windows.Forms;\nusing System.Xml;\nusing System.IO;\n\nnamespace Majorsilence.Reporting.RdlDesign\n{\n\t/// <summary>\n\t/// Summary description for StyleCtl.\n\t/// </summary>\n\tinternal class VisibilityCtl : System.Windows.Forms.UserControl, IProperty\n\t{\n        private List<XmlNode> _ReportItems;\n\t\tprivate DesignXmlDraw _Draw;\n\t\t// flags for controlling whether syntax changed for a particular property\n        private bool fHidden, fToggle;\n        private System.Windows.Forms.GroupBox grpBoxVisibility;\n\t\tprivate System.Windows.Forms.Label label2;\n\t\tprivate System.Windows.Forms.Label label3;\n\t\tprivate System.Windows.Forms.TextBox tbHidden;\n        private System.Windows.Forms.ComboBox cbToggle;\n        private System.Windows.Forms.Button bHidden;\n\t\t/// <summary> \n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n        internal VisibilityCtl(DesignXmlDraw dxDraw, List<XmlNode> reportItems)\n\t\t{\n\t\t\t_ReportItems = reportItems;\n\t\t\t_Draw = dxDraw;\n\t\t\t// This call is required by the Windows.Forms Form Designer.\n\t\t\tInitializeComponent();\n\n\t\t\t// Initialize form using the style node values\n\t\t\tInitValues(_ReportItems[0]);\t\t\t\n\t\t}\n\n\t\tprivate void InitValues(XmlNode node)\n\t\t{\n\t\t\t\n\t\t\t\n\t\t\t// Handle Visiblity definition\n\t\t\tXmlNode visNode = _Draw.GetNamedChildNode(node, \"Visibility\");\n\t\t\tif (visNode != null)\n\t\t\t{\n\t\t\t\tXmlNode hNode = _Draw.GetNamedChildNode(node, \"Visibility\");\n\t\t\t\tthis.tbHidden.Text = _Draw.GetElementValue(visNode, \"Hidden\", \"\");\n\t\t\t\tthis.cbToggle.Text = _Draw.GetElementValue(visNode, \"ToggleItem\", \"\");\n\t\t\t}\n\t\t\tIEnumerable list = _Draw.GetReportItems(\"//Textbox\");\n\t\t\tif (list != null)\n\t\t\t{\n\t\t\t\tforeach (XmlNode tNode in list)\n\t\t\t\t{\n\t\t\t\t\tXmlAttribute name = tNode.Attributes[\"Name\"];\n\t\t\t\t\tif (name != null && name.Value != null && name.Value.Length > 0)\n\t\t\t\t\t\tcbToggle.Items.Add(name.Value);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// nothing has changed now\n\t\t\tfHidden = fToggle = false;\n\t\t}\n\n\t\t/// <summary> \n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Component Designer generated code\n\t\t/// <summary> \n\t\t/// Required method for Designer support - do not modify \n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(VisibilityCtl));\n            this.DoubleBuffered = true;\n\t\t\tthis.grpBoxVisibility = new System.Windows.Forms.GroupBox();\n\t\t\tthis.bHidden = new System.Windows.Forms.Button();\n\t\t\tthis.cbToggle = new System.Windows.Forms.ComboBox();\n\t\t\tthis.tbHidden = new System.Windows.Forms.TextBox();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.label2 = new System.Windows.Forms.Label();\n\t\t\tthis.grpBoxVisibility.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// grpBoxVisibility\n\t\t\t// \n\t\t\tresources.ApplyResources(this.grpBoxVisibility, \"grpBoxVisibility\");\n\t\t\tthis.grpBoxVisibility.Controls.Add(this.bHidden);\n\t\t\tthis.grpBoxVisibility.Controls.Add(this.cbToggle);\n\t\t\tthis.grpBoxVisibility.Controls.Add(this.tbHidden);\n\t\t\tthis.grpBoxVisibility.Controls.Add(this.label3);\n\t\t\tthis.grpBoxVisibility.Controls.Add(this.label2);\n\t\t\tthis.grpBoxVisibility.Name = \"grpBoxVisibility\";\n\t\t\tthis.grpBoxVisibility.TabStop = false;\n\t\t\t// \n\t\t\t// bHidden\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bHidden, \"bHidden\");\n\t\t\tthis.bHidden.Name = \"bHidden\";\n\t\t\tthis.bHidden.Tag = \"visibility\";\n\t\t\tthis.bHidden.Click += new System.EventHandler(this.bExpr_Click);\n\t\t\t// \n\t\t\t// cbToggle\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbToggle, \"cbToggle\");\n\t\t\tthis.cbToggle.Name = \"cbToggle\";\n\t\t\tthis.cbToggle.SelectedIndexChanged += new System.EventHandler(this.cbToggle_SelectedIndexChanged);\n\t\t\tthis.cbToggle.TextChanged += new System.EventHandler(this.cbToggle_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// tbHidden\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbHidden, \"tbHidden\");\n\t\t\tthis.tbHidden.Name = \"tbHidden\";\n\t\t\tthis.tbHidden.TextChanged += new System.EventHandler(this.tbHidden_TextChanged);\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// label2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label2, \"label2\");\n\t\t\tthis.label2.Name = \"label2\";\n\t\t\t// \n\t\t\t// VisibilityCtl\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.grpBoxVisibility);\n\t\t\tthis.Name = \"VisibilityCtl\";\n\t\t\tthis.grpBoxVisibility.ResumeLayout(false);\n\t\t\tthis.grpBoxVisibility.PerformLayout();\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n        \n\t\tpublic bool IsValid()\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Apply()\n\t\t{\n\t\t\t// take information in control and apply to all the style nodes\n\t\t\t//  Only change information that has been marked as modified;\n\t\t\t//   this way when group is selected it is possible to change just\n\t\t\t//   the items you want and keep the rest the same.\n\n\t\t\tforeach (XmlNode riNode in this._ReportItems)\n\t\t\t\tApplyChanges(riNode);\n\n\t\t\t// nothing has changed now\n\t\t\tfHidden = fToggle = false;\n\t\t}\n\n\t\tprivate void ApplyChanges(XmlNode rNode)\n\t\t{\n\t\t\tif (fHidden || fToggle)\n\t\t\t{\n\t\t\t\tXmlNode visNode = _Draw.SetElement(rNode, \"Visibility\", null);\n\n                if (fHidden)\n                {\n                    if (tbHidden.Text.Length == 0)\n                        _Draw.RemoveElement(visNode, \"Hidden\");\n                    else\n                        _Draw.SetElement(visNode, \"Hidden\", tbHidden.Text);\n                }\n\t\t\t\tif (fToggle)\n\t\t\t\t\t_Draw.SetElement(visNode, \"ToggleItem\", this.cbToggle.Text); \n\t\t\t}\n\t\t}\n\n\t\tprivate void tbHidden_TextChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfHidden = true;\n\t\t}\n\n\t\tprivate void cbToggle_SelectedIndexChanged(object sender, System.EventArgs e)\n\t\t{\n\t\t\tfToggle = true;\n\t\t}\n\n\t\tprivate void bExpr_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tButton b = sender as Button;\n\t\t\tif (b == null)\n\t\t\t\treturn;\n\t\t\tControl c = null;\n\t\t\tswitch (b.Tag as string)\n\t\t\t{\n\t\t\t\tcase \"visibility\":\n\t\t\t\t\tc = tbHidden;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (c == null)\n\t\t\t\treturn;\n\n\t\t\tXmlNode sNode = _ReportItems[0];\n\n            using (DialogExprEditor ee = new DialogExprEditor(_Draw, c.Text, sNode))\n            {\n                DialogResult dr = ee.ShowDialog();\n                if (dr == DialogResult.OK)\n                    c.Text = ee.Expression;\n                return;\n            }\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlDesign/VisibilityCtl.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"&gt;&gt;grpBoxVisibility.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>454, 104</value>\n  </data>\n  <data name=\"bHidden.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleLeft</value>\n  </data>\n  <data name=\"&gt;&gt;tbHidden.Name\" xml:space=\"preserve\">\n    <value>tbHidden</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"bHidden.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>400, 26</value>\n  </data>\n  <data name=\"grpBoxVisibility.Text\" xml:space=\"preserve\">\n    <value>Visibility</value>\n  </data>\n  <data name=\"&gt;&gt;cbToggle.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbToggle.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"bHidden.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 8.25pt, style=Bold, Italic</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Parent\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Hidden (initial visibility)</value>\n  </data>\n  <data name=\"&gt;&gt;bHidden.Name\" xml:space=\"preserve\">\n    <value>bHidden</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"grpBoxVisibility.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bHidden.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"tbHidden.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"&gt;&gt;grpBoxVisibility.Name\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"bHidden.Text\" xml:space=\"preserve\">\n    <value>fx</value>\n  </data>\n  <data name=\"&gt;&gt;tbHidden.Parent\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"cbToggle.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Toggle Item (Textbox name)</value>\n  </data>\n  <data name=\"&gt;&gt;tbHidden.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"grpBoxVisibility.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>3, 3</value>\n  </data>\n  <data name=\"&gt;&gt;grpBoxVisibility.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 23</value>\n  </data>\n  <data name=\"cbToggle.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>168, 48</value>\n  </data>\n  <data name=\"cbToggle.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>224, 21</value>\n  </data>\n  <data name=\"&gt;&gt;tbHidden.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bHidden.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>22, 16</value>\n  </data>\n  <data name=\"label2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;label2.Name\" xml:space=\"preserve\">\n    <value>label2</value>\n  </data>\n  <data name=\"label2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>120, 23</value>\n  </data>\n  <data name=\"grpBoxVisibility.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>432, 80</value>\n  </data>\n  <data name=\"label2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 24</value>\n  </data>\n  <data name=\"&gt;&gt;bHidden.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbHidden.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>224, 20</value>\n  </data>\n  <data name=\"&gt;&gt;cbToggle.Parent\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"&gt;&gt;cbToggle.Name\" xml:space=\"preserve\">\n    <value>cbToggle</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 48</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"tbHidden.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>168, 24</value>\n  </data>\n  <data name=\"&gt;&gt;bHidden.Parent\" xml:space=\"preserve\">\n    <value>grpBoxVisibility</value>\n  </data>\n  <data name=\"bHidden.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;label2.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>VisibilityCtl</value>\n  </data>\n  <data name=\"&gt;&gt;grpBoxVisibility.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlDesign/VisibilityCtl.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Переключать элементом</value>\n  </data>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Скрыт (в начале)</value>\n  </data>\n  <data name=\"grpBoxVisibility.Text\" xml:space=\"preserve\">\n    <value>Видимость</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesign/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\" xmlns:asmv3=\"urn:schemas-microsoft-com:asm.v3\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"Majorsilence.Reporting.Designer.app\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <!-- UAC Manifest Options\n             If you want to change the Windows User Account Control level replace the \n             requestedExecutionLevel node with one of the following.\n\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n        <requestedExecutionLevel  level=\"requireAdministrator\" uiAccess=\"false\" />\n        <requestedExecutionLevel  level=\"highestAvailable\" uiAccess=\"false\" />\n\n            Specifying requestedExecutionLevel element will disable file and registry virtualization. \n            Remove this element if your application requires this virtualization for backwards\n            compatibility.\n        -->\n        <requestedExecutionLevel level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on\n           and is designed to work with. Uncomment the appropriate elements\n           and Windows will automatically select the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <!--<supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />-->\n\n      <!-- Windows 7 -->\n      <!--<supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />-->\n\n      <!-- Windows 8 -->\n      <!--<supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />-->\n\n      <!-- Windows 8.1 -->\n      <!--<supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />-->\n\n      <!-- Windows 10 -->\n      <!--<supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />-->\n\n    </application>\n  </compatibility>\n\n\t<asmv3:application>\n\t\t<asmv3:windowsSettings xmlns=\"http://schemas.microsoft.com/SMI/2017/WindowsSettings\">\n\t\t\t<gdiScaling>true</gdiScaling>\n\t\t</asmv3:windowsSettings>\n\t\t<asmv3:windowsSettings xmlns:ws2=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">\n\t\t\t<ws2:longPathAware>true</ws2:longPathAware>\n\t\t</asmv3:windowsSettings>\n\t\t<asmv3:windowsSettings xmlns=\"http://schemas.microsoft.com/SMI/2011/WindowsSettings\">\n\t\t\t<printerDriverIsolation>true</printerDriverIsolation>\n\t\t</asmv3:windowsSettings>\n\t\t<asmv3:windowsSettings xmlns=\"http://schemas.microsoft.com/SMI/2019/WindowsSettings\">\n\t\t\t<activeCodePage>UTF-8</activeCodePage>\n\t\t</asmv3:windowsSettings>\n\t</asmv3:application>\n\n  <!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher\n       DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need \n       to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should \n       also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. \n       \n       Makes the application long-path aware. See https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation -->\n  <!--\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true</dpiAware>\n      <longPathAware xmlns=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">true</longPathAware>\n    </windowsSettings>\n  </application>\n  -->\n\n  <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->\n  <!--\n  <dependency>\n    <dependentAssembly>\n      <assemblyIdentity\n          type=\"win32\"\n          name=\"Microsoft.Windows.Common-Controls\"\n          version=\"6.0.0.0\"\n          processorArchitecture=\"*\"\n          publicKeyToken=\"6595b64144ccf1df\"\n          language=\"*\"\n        />\n    </dependentAssembly>\n  </dependency>\n  -->\n\n</assembly>\n"
  },
  {
    "path": "RdlDesign/desktop.ini",
    "content": "[ViewState]\nMode=\nVid=\nFolderType=NotSpecified\n"
  },
  {
    "path": "RdlDesktop/BackgroundThread.cs",
    "content": "\n\nusing System;\t\nusing System.IO;\nusing System.Text;\nusing System.Threading;\nusing System.Diagnostics;\n\nnamespace Majorsilence.Reporting.RdlDesktop\n{\n\tclass BackgroundThread\n\t{\n\t\tRdlDesktop rserver;\t\t\t\t\t// server we're watching\n\t\tint cacheCheck;\t\t\t\t\t\t\t// check the cache dates every X seconds\n\t\tint fileCacheTimeout;\t\t\t\t\t// files last referenced more than X seconds will go\n\t\tint readCacheTimeout;\t\t\t\t\t// read files last reference more than X seconds will go\n\t\tbool _continue=true;\n\n\t\tpublic BackgroundThread (RdlDesktop rws, int checkSeconds, int fileSeconds, int readSeconds)\n\t\t{\n\t\t\trserver = rws;\n\t\t\tcacheCheck = checkSeconds;\n\t\t\tfileCacheTimeout = fileSeconds;\n\t\t\treadCacheTimeout = readSeconds;\n\t\t}\n\n\t\tpublic bool Continue\n\t\t{\n\t\t\tget { return _continue; }\n\t\t\tset { _continue = value; }\n\t\t}\n\n\t\tpublic void HandleBackground()\n\t\t{\n\t\t\tlong count=0;\n\t\t\twhile(_continue)\n\t\t\t{\n\t\t\t\tThread.Sleep(1000);\t\t// sleep for a second\n\t\t\t\tif (!_continue)\t\t\t// before we do any work check to see \t\n\t\t\t\t\tbreak;\n\t\t\t\tcount++;\n\t\t\t\t// Check on the caches\n\t\t\t\tif (count % cacheCheck == 0)\t// every 5 minutes check on the caches\n\t\t\t\t{\t// run as higher priority because server blocks on the caches\n\t\t\t\t\tThread.CurrentThread.Priority = ThreadPriority.AboveNormal;\t\t// let's get our work done\n\t\t\t\t\tint citems, ritems;\n\t\t\t\t\tcitems = rserver.Cache.Clear(new TimeSpan(0, 0, 0, fileCacheTimeout, 0));\t\t// clear out file cache \n\t\t\t\t\tritems = rserver.ReadCache.Clear(new TimeSpan(0, 0, 0, readCacheTimeout, 0));\t// clear out read cache \n\t\t\t\t\tThread.CurrentThread.Priority = ThreadPriority.Normal;\n\t\t\t\t\t//Console.WriteLine(\"Cache items cleared {0:#,##0}\", citems);\n\t\t\t\t\t//Console.WriteLine(\"Read cache items cleared {0:#,##0}\", ritems);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesktop/ConnectionThread.cs",
    "content": "\n\nusing System;\t\nusing System.IO;\nusing System.Net;\nusing System.Net.Sockets;\nusing System.Text;\nusing System.Collections;\nusing System.Collections.Specialized;\n\nusing Majorsilence.Reporting.Rdl;\nusing System.Threading.Tasks;\n\n\nnamespace Majorsilence.Reporting.RdlDesktop\n{\n\tclass ConnectionThread\n\t{\n\t\tprivate string _WorkingDir;\t// subdirectory name under server root to place generated reports\n\t\tstring serverRoot;\t\t\t// directory we start with\n\t\tpublic TcpListener myListener;\n\t\tprivate RdlDesktop _server;\n\t\t\n\t\t// Some statics used for statistics\n\t\tprivate static int connections = 0;\n\t\tprivate static int peakConnections = 0;\n\t\tprivate static int requests = 0;\n\t\tprivate static double totalts = 0;\n\n\t\tpublic ConnectionThread(RdlDesktop rs, TcpListener l, string sr, string wd)\n\t\t{\n\t\t\t_server = rs;\n\t\t\tserverRoot = sr;\n\t\t\t_WorkingDir = wd;\n\t\t\tmyListener = l;\n\t\t}\n\n\t\tprivate void AccumTimeSpan(TimeSpan ts)\n\t\t{\n\t\t\ttotalts += ts.TotalSeconds;\n\t\t\treturn;\n\t\t}\n\n\t\tstatic public void ClearStatistics()\n\t\t{\n\t\t\t// Clear out the statistics;  not connections, though!!!\n\t\t\tpeakConnections=0;\n\t\t\trequests=0;\n\t\t\ttotalts=0;\n\t\t\treturn;\n\t\t}\n\n\t\tstatic public double GetTotalRequestTime()\n\t\t{\n\t\t\treturn totalts;\n\t\t}\n\n\t\tstatic public int GetConnectionCount()\n\t\t{\n\t\t\treturn connections;\n\t\t}\n\n\t\tstatic public int GetPeakConnectionCount()\n\t\t{\n\t\t\treturn peakConnections;\n\t\t}\n\n\t\tstatic public int GetRequestCount()\n\t\t{\n\t\t\treturn requests;\n\t\t}\n\n\t\tpublic string WorkingDir\n\t\t{\n\t\t\tget { return _WorkingDir; }\n\t\t}\n\n\t\t// Build an HTML page for directories\n\t\tpublic async Task<string> ProcessDirectory(string directory)\n\t\t{\n\t\t\tStringWriter sw = new StringWriter();\n\t\t\tDirectoryInfo di;\n\t\t\tFileSystemInfo[] afsi;\n\n\t\t\t// Check to see of there is an index.html or index.rdl file \n\t\t\tStreamReader sr=null;\n\t\t\tstring result=null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tstring filename = serverRoot + directory + \"index.html\";\n\t\t\t\tFileInfo fi = new FileInfo(filename);\n\n\t\t\t\tif (fi.Exists)\n\t\t\t\t{\n\t\t\t\t\tsr = new StreamReader(filename);\n\t\t\t\t\tresult = sr.ReadToEnd();\n\t\t\t\t\tsr.Close();\n\t\t\t\t\tsr = null;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tfilename = serverRoot + directory + \"index.rdl\";\n\t\t\t\t\tfi = new FileInfo(filename); \n\t\t\t\t\tif (fi.Exists)\n\t\t\t\t\t{\n\t\t\t\n\t\t\t\t\t\t(byte[] ba, string mimeType) = await ProcessReportFile(directory + \"index.rdl\", filename, null, fi.LastWriteTime);\n\t\t\t\t\t\tresult = Encoding.ASCII.GetString(ba);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch\n\t\t\t{\t// clean up a little\n\t\t\t\tif (sr != null)\n\t\t\t\t\tsr.Close();\n\t\t\t}\t\n\t\t\tif (result != null)\n\t\t\t\treturn result;\n\n\t\t\ttry \n\t\t\t{\n\t\t\t\tdi = new DirectoryInfo(serverRoot + directory);\n\t\t\t\tafsi = di.GetFileSystemInfos();\n\t\t\t}\n\t\t\tcatch\n\t\t\t{\n\t\t\t\tsw.WriteLine(\"<html><Body>Illegal File or directory.</body></html>\");\n\t\t\t\treturn sw.ToString();\n\t\t\t} \n\n\t\t\tsw.WriteLine(\"<html>\" +\n\t\t\t\t\t\t\"<style type='text/css'>\" +\n\t\t\t\t\t\t\"a:link img {border-style:none;}\" +\n\t\t\t\t\t\t\"</style>\" +\n\t\t\t\t\t\t\"<title>Directory of \" + directory + \n\t\t\t\t\t\t\"</title><body><h3>Reports in \" + directory + \"</h3><table>\");\n\t\t\tforeach (FileSystemInfo fsi in afsi)\n\t\t\t{\n\t\t\t\tif (fsi.Name == WorkingDir)\t\t// never show the working directory\n\t\t\t\t\tcontinue;\n\t\t\t\tif ((fsi.Attributes & FileAttributes.Directory) == 0 &&\n\t\t\t\t\t fsi.Extension.ToLower() != \".rdl\")\t// only show report files\n\t\t\t\t\tcontinue;\n\t\t\t\tstring name = directory.Replace(\" \", \"%20\");\n\t\t\t\tif (directory[directory.Length-1] != '/')\n\t\t\t\t\tname += \"/\";\n\t\t\t\tname += fsi.Name.Replace(\" \", \"%20\");\n\n\t\t\t\tif ((fsi.Attributes & FileAttributes.Directory) == 0)\t// handle files\n\t\t\t\t{\n\t\t\t\t\tsw.WriteLine(\"<tr><td>{0}</td>\"+\n\t\t\t\t\t\t\t\"<td><a href=\\\"{1}?rs:Format=HTML\\\">HTML</a></td>\"+\n\t\t\t\t\t\t\t\"<td><a href=\\\"{1}?rs:Format=PDF\\\">PDF</a></td>\"+\n\t\t\t\t\t\t\t\"<td><a href=\\\"{1}?rs:Format=XML\\\">XML</a></td></tr>\",\n\t\t\t\t\t\tPath.GetFileNameWithoutExtension(fsi.Name), name);\n\t\t\t\t}\n\t\t\t\telse\t\t// handle directories\n\t\t\t\t\tsw.WriteLine(\"<tr><td><a href=\\\"{1}\\\">{0}<a></td><td></td><td></td></tr>\",\n\t\t\t\t\t\tfsi.Name, name);\n\t\t\t}\n\t\t\tsw.WriteLine(\"</table></body></html>\");\n\n\t\t\treturn sw.ToString();\n\t\t}\n\n\t\t// Handle the processing of a report\n\t\tprivate async Task<(byte[] Report, string MimeType)> ProcessReportFile(string url, string file, string parms, DateTime lastUpdateTime)\n\t\t{\n\t\t\tbyte[] result=null;\n\t\t\tstring source;\n\n\t\t\tstring mimeType = \"text/html\";\t\t\t// set the default\n\n\t\t\t// try finding report in the server cache!\n\t\t\tIList il = _server.Cache.Find(url + (parms==null?\"\":parms), lastUpdateTime);\n\t\t\tif (il != null)\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tstring cfile = (string) il[il.Count-1];\n\t\t\t\t\tresult = _server.ReadCache.Read(cfile);\n\t\t\t\t\tmimeType = GetMimeType(cfile);\t\t// set mimetype based on file's extension\n\t\t\t\t}\n\t\t\t\tcatch (Exception ex)\n\t\t\t\t{\n\t\t\t\t\tif (_server.TraceLevel >= 0) \n\t\t\t\t\t\tConsole.WriteLine(\"Cache read exception in ProcessReportFile: {0} {1}\", il[0], ex.Message);\n\t\t\t\t}\n\t\t\t\treturn (result,mimeType);\n\t\t\t}\n\n\t\t\t// Obtain the source\n\t\t\tif (!ProcessReportGetSource(file, out source))\n\t\t\t{\n\t\t\t\treturn (Encoding.ASCII.GetBytes(source), mimeType);\t\t// we got an error opening file; source contains html error text\n\t\t\t}\n\n\t\t\t// Compile the report\n\t\t\t(Report report, string msgs) = await ProcessReportCompile(file, source);\n\t\t\tif (report == null)\n\t\t\t{\n\t\t\t\tmimeType = \"text/html\";\t\t\t// force to html\n\t\t\t\treturn (Encoding.ASCII.GetBytes(String.Format(\"<H2>Report '{0}' has the following syntax errors.</H2><p>{1}\", url, msgs)), mimeType);\n\t\t\t}\n\n\t\t\t// Obtain the result HTML from running the report\n\t\t\tstring dbgFilename=\"\";\n\t\t\ttry \n\t\t\t{\n\t\t\t\tListDictionary ld = ProcessReportGetParms(parms);\t// split parms into dictionary\n\n\t\t\t\tOutputPresentationType type;\n\t\t\t\tstring stype = (string) ld[\"rs:Format\"];\n\t\t\t\tif (stype == null)\n\t\t\t\t\tstype = \"html\";\n\t\t\t\telse\n\t\t\t\t\tstype = stype.ToLower();\n\t\t\t\tswitch (stype)\n\t\t\t\t{\n\t\t\t\t\tcase \"pdf\":\n\t\t\t\t\t\ttype = OutputPresentationType.PDF;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"xml\":\n\t\t\t\t\t\ttype = OutputPresentationType.XML;\n\t\t\t\t\t\tstring ext = (string) ld[\"rs:FileExtension\"];\n\t\t\t\t\t\tif (ext != null)\n\t\t\t\t\t\t\tstype = ext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"html\":\n\t\t\t\t\t\ttype = OutputPresentationType.HTML;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\ttype = OutputPresentationType.HTML;\n\t\t\t\t\t\tstype = \"html\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tStreamGen sg = new StreamGen(serverRoot, WorkingDir, stype);\n\t\t\t\t\n\t\t\t\tProcessReport pr = new ProcessReport(report, sg);\n\n                await pr.Run(ld, type);\n\n\t\t\t\t// handle any error messages\n\t\t\t\tif (report.ErrorMaxSeverity > 0)\n\t\t\t\t{\n\t\t\t\t\tstring errs=null;\n\t\t\t\t\tif (report.ErrorMaxSeverity > 4)\n\t\t\t\t\t{\n\t\t\t\t\t\tmimeType = \"text/html\";\t\t\t// force to html\n\t\t\t\t\t\terrs = \"<H2>Severe errors encountered when running report.</H2>\";\n\t\t\t\t\t}\n\t\t\t\t\tforeach (String emsg in report.ErrorItems)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (report.ErrorMaxSeverity > 4)\n\t\t\t\t\t\t\terrs += (\"<p>\" + emsg + \"</p>\");\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (_server.TraceLevel > 0) \n\t\t\t\t\t\t\t\tConsole.WriteLine(emsg);\t\t// output message to console\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (errs != null)\n\t\t\t\t\t\tresult = Encoding.ASCII.GetBytes(errs);\n\t\t\t\t\treport.ErrorReset();\n\t\t\t\t}\n\n\t\t\t\t// Only read the result if significant errors didn't occur\n\t\t\t\tif (result == null)\n\t\t\t\t{\t\t\t\t\t\t\n\t\t\t\t\tReportRender rr = new ReportRender(report);\n\t\t\t\t\trr.ActionUrl = \"/\" + url;\n\t\t\t\t\t\n\t\t\t\t\tstring p = rr.ParameterHtml(ld);\n\t\t\t\t\t// put this into a file.\n\t\t\t\t\tstring parmUrl;\n\t\t\t\t\tStreamWriter sw=null;\n\t\t\t\t\ttry \n\t\t\t\t\t{\n\t\t\t\t\t\tsw = new StreamWriter(sg.GetIOStream(out parmUrl, \"html\"));\n\t\t\t\t\t\tsw.Write(p);\n\t\t\t\t\t}\n\t\t\t\t\tfinally\n\t\t\t\t\t{\n\t\t\t\t\t\tif (sw != null)\n\t\t\t\t\t\t\tsw.Close();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add it to the file list\n\t\t\t\t\tIList newlist = _server.Cache.Add(url + (parms==null?\"\":parms), sg.FileList);\n\t\t\t\t\tdbgFilename = (string) newlist[0];\t\t// this is the first fully qualified name\n\n\t\t\t\t\tFileInfo fi = new FileInfo(dbgFilename);\n\t\t\t\t\tstring mHtml = rr.MainHtml(report, parmUrl, sg.RelativeDirectory+fi.Name);\n\t\t\t\t\tstring mUrl;\n\t\t\t\t\tsw=null;\n\t\t\t\t\ttry \n\t\t\t\t\t{\n\t\t\t\t\t\tsw = new StreamWriter(sg.GetIOStream(out mUrl, \"html\"));\n\t\t\t\t\t\tsw.Write(mHtml);\n\t\t\t\t\t}\n\t\t\t\t\tfinally\n\t\t\t\t\t{\n\t\t\t\t\t\tif (sw != null)\n\t\t\t\t\t\t\tsw.Close();\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = Encoding.ASCII.GetBytes(mHtml);\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\tif (_server.TraceLevel >= 0) \n\t\t\t\t\tConsole.WriteLine(\"Exception in ProcessReportFile: {0} {1}\", file, ex.Message);\n\t\t\t\tresult = Encoding.ASCII.GetBytes(string.Format(\"<H2>{0}</H2><p>{1}</p>\", ex.Message, ex.StackTrace));\n\t\t\t\tmimeType = \"text/html\";\t\t\t// force to html\n\t\t\t}\n\t\t\t\n\t\t\treturn (result, mimeType);\n\t\t}\n\n\t\tprivate ListDictionary ProcessReportGetParms(string parms)\n\t\t{\n\t\t\tListDictionary ld= new ListDictionary();\n\t\t\tif (parms == null)\n\t\t\t\treturn ld;\t\t\t\t// dictionary will be empty in this case\n\n\t\t\t// parms are separated by &\n\t\t\tchar[] breakChars = new char[] {'&'};\n\t\t\tstring[] ps = parms.Split(breakChars);\n\t\t\tforeach (string p in ps)\n\t\t\t{\n\t\t\t\tint iEq = p.IndexOf(\"=\");\n\t\t\t\tif (iEq > 0)\n\t\t\t\t{\n\t\t\t\t\tstring name = p.Substring(0, iEq);\n\t\t\t\t\tstring val = p.Substring(iEq+1);\n\t\t\t\t\tld.Add(WebUtility.UrlDecode(name), WebUtility.UrlDecode(val));\t\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn ld;\n\t\t}\n\n\t\tprivate bool ProcessReportGetSource(string file, out string source)\n\t\t{\n\t\t\tStreamReader fs=null;\n\t\t\tstring prog=null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tfs = new StreamReader(file);\n\t\t\t\tprog = fs.ReadToEnd();\n\t\t\t}\n\t\t\tcatch (Exception ae)\n\t\t\t{\n\t\t\t\tsource = string.Format(\"<H2>{0}</H2>\", ae.Message);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (fs != null)\n\t\t\t\t\tfs.Close();\n\t\t\t}\n\t\t\tsource = prog;\n\t\t\treturn true;\n\t\t}\n\n\t\tprivate async Task<(Report Report, string Msgs)> ProcessReportCompile(string file, string prog)\n\t\t{\n\t\t\t// Now parse the file\n\t\t\tRDLParser rdlp;\n\t\t\tReport r;\n\t\t\tstring msgs = \"\";\n\t\t\ttry\n\t\t\t{\n\t\t\t\trdlp =  new RDLParser(prog);\n\t\t\t\trdlp.Folder = Path.GetDirectoryName(file);\n\t\t\t\trdlp.DataSourceReferencePassword = new NeedPassword(this.GetPassword);\n\n\t\t\t\tr = await rdlp.Parse();\n\t\t\t\tif (r.ErrorMaxSeverity > 0) \n\t\t\t\t{\n\t\t\t\t\t// have errors fill out the msgs \n\t\t\t\t\tforeach (String emsg in r.ErrorItems)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (_server.TraceLevel > 0)\n\t\t\t\t\t\t\tConsole.WriteLine(emsg);\t\t// output message to console\n\t\t\t\t\t\tmsgs += (emsg + \"<p>\");\n\t\t\t\t\t}\n\t\t\t\t\tint severity = r.ErrorMaxSeverity;\n\t\t\t\t\tr.ErrorReset();\n\t\t\t\t\tif (severity > 4)\n\t\t\t\t\t\tr = null;\t\t\t// don't return when severe errors\n\t\t\t\t}\n\t\t\t\t// If we've loaded the report; we should tell it where it got loaded from\n\t\t\t\tif (r != null)\n\t\t\t\t{\n\t\t\t\t\tr.Folder = Path.GetDirectoryName(file);\n\t\t\t\t\tr.Name = Path.GetFileNameWithoutExtension(file);\n\t\t\t\t\tr.GetDataSourceReferencePassword = new Rdl.NeedPassword(GetPassword);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\tmsgs = string.Format(\"<H2>{0}</H2>\", ex.Message);\n\t\t\t\tr = null;\n\t\t\t}\n\n\n\t\t\treturn (r, msgs);\n\t\t}\n  \n\t\tprivate string GetPassword()\n\t\t{\n\t\t\treturn _server.DataSourceReferencePassword;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// This function takes a File Name as Input and returns the mime type.\n\t\t/// </summary>\n\t\t/// <param name=\"sRequestedFile\">To indentify the Mime Type</param>\n\t\t/// <returns>Mime Type</returns>\n\t\tprivate string GetMimeType(string file)\n\t\t{\n\t\t\tString mimeType;\n\t\t\tString fileExt;\n\t\t\t\n\t\t\tint startPos = file.IndexOf(\".\") + 1;\n\n\t\t\tfileExt = file.Substring(startPos).ToLower();\n\t\t\tmimeType = (string) ( this._server.Mimes[fileExt]);\n\n\t\t\treturn mimeType; \n\t\t}\n\n\t\t/// <summary>\n\t\t/// This function send the Header Information to the client (Browser)\n\t\t/// </summary>\n\t\t/// <param name=\"sHttpVersion\">HTTP Version</param>\n\t\t/// <param name=\"sMIMEHeader\">Mime Type</param>\n\t\t/// <param name=\"iTotBytes\">Total Bytes to be sent in the body</param>\n\t\t/// <param name=\"mySocket\">Socket reference</param>\n\t\t/// <returns></returns>\n\t\tpublic void SendHeader(string sHttpVersion, string sMIMEHeader, int iTotBytes, string sStatusCode, string modifiedTime, ref Socket mySocket)\n\t\t{\n\n\t\t\tStringBuilder buffer = new StringBuilder();\n\t\t\t\n\t\t\t// if Mime type is not provided set default to text/html\n\t\t\tif (sMIMEHeader == null || sMIMEHeader.Length == 0 )\n\t\t\t{\n\t\t\t\tsMIMEHeader = \"text/html\";  // Default Mime Type is text/html\n\t\t\t}\n\n\t\t\tbuffer.Append(sHttpVersion);\n\t\t\tbuffer.Append(sStatusCode);\n\t\t\tbuffer.Append(\"\\r\\n\");\n\t\t\tbuffer.Append(\"Server: RdlDesktop\\r\\n\");\n\t\t\tbuffer.Append(\"Cache-Control: must-revalidate\\r\\n\");\n\t\t\tbuffer.AppendFormat(\"Content-Type: {0}\\r\\n\", sMIMEHeader);\n\t\t\tif (modifiedTime != null)\n\t\t\t\tbuffer.AppendFormat(\"Last-Modifed: {0}\\r\\n\", modifiedTime);\n\t\t\tbuffer.Append(\"Accept-Ranges: bytes\\r\\n\");\n\t\t\tbuffer.AppendFormat(\"Content-Length: {0}\\r\\n\\r\\n\", iTotBytes);\n\t\t\t\n\t\t\tByte[] data = Encoding.ASCII.GetBytes(buffer.ToString()); \n\n\t\t\tSendToBrowser( data, ref mySocket);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Overloaded Function, takes string, convert to bytes and calls \n\t\t/// overloaded sendToBrowserFunction.\n\t\t/// </summary>\n\t\t/// <param name=\"sData\">The data to be sent to the browser(client)</param>\n\t\t/// <param name=\"mySocket\">Socket reference</param>\n\t\tpublic void SendToBrowser(String sData, ref Socket mySocket)\n\t\t{\n\t\t\tSendToBrowser (Encoding.ASCII.GetBytes(sData), ref mySocket);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sends data to the browser (client)\n\t\t/// </summary>\n\t\t/// <param name=\"bSendData\">Byte Array</param>\n\t\t/// <param name=\"mySocket\">Socket reference</param>\n\t\tpublic void SendToBrowser(Byte[] bSendData, ref Socket mySocket)\n\t\t{\n\t\t\tint numBytes = 0;\n\t\t\t\n\t\t\ttry\n\t\t\t{\n\t\t\t\tif (mySocket.Connected)\n\t\t\t\t{\n\t\t\t\t\tif (( numBytes = mySocket.Send(bSendData, bSendData.Length,0)) == -1)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (_server.TraceLevel >= 0) \n\t\t\t\t\t\t\tConsole.WriteLine(\"Socket Error cannot Send Packet\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif (_server.TraceLevel >= 4) \n\t\t\t\t\t\tConsole.WriteLine(\"Connection Dropped....\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (Exception  e)\n\t\t\t{\n\t\t\t\tif (_server.TraceLevel >= 0) \n\t\t\t\t\tConsole.WriteLine(\"Error Occurred : {0} \", e );\n\t\t\t}\n\t\t}\n\n\t\t//This method Accepts new connection \n\t\tpublic async Task HandleConnection()\n\t\t{\n\t\t\tDateTime sDateTime;\t\t\t// start date time\n\t\t\tint iStartPos = 0;\n\t\t\tstring sRequest;\n\t\t\tstring sDirName;\n\t\t\tstring sRequestedFile;\n\t\t\tstring sErrorMessage;\n\t\t\tstring sPhysicalFilePath = \"\";\n\t\t\tstring sParameters=null;\n\t\t\t\n\t\t\t//Accept a new connection\n\t\t\tSocket mySocket = myListener.AcceptSocket() ;\n\n\t\t\tif(!mySocket.Connected)\n\t\t\t\treturn;\n\n\t\t\tsDateTime = DateTime.Now;\n\t\t\tconnections++;\t\t\t// current number of connections\n\t\t\trequests++;\t\t\t\t// total requests made\n\t\t\tif (connections > peakConnections)\n\t\t\t\tpeakConnections = connections;\t// peak connections\n\n\t\t\tif (_server.TraceLevel >= 4) \n\t\t\t{\n\t\t\t\tConsole.WriteLine(\"\\nClient connected IP={0} -- {1} active connection{2}\", \n\t\t\t\t\tmySocket.RemoteEndPoint, connections, connections > 1? \"s\": \"\") ;\n\t\t\t}\n\n\t\t\t//make a byte array and receive data from the client \n\t\t\tByte[] data = new Byte[1024] ;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tint i = mySocket.Receive(data,data.Length,0) ;\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\tconnections--;\n\t\t\t\tmySocket.Close();\n\t\t\t\tif (_server.TraceLevel >= 0) \n\t\t\t\t\tConsole.WriteLine(\"Error Occurred : {0} \", e );\n\t\t\t\tthis.AccumTimeSpan(DateTime.Now - sDateTime);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\t//Convert Byte to String\n\t\t\tstring sBuffer = Encoding.ASCII.GetString(data);\n\n\t\t\t//At present we will only deal with GET type\n\t\t\tif (sBuffer.Substring(0,3) != \"GET\" )\n\t\t\t{\n\t\t\t\tstring req = sBuffer.Substring(0,30);\n\t\t\t\tif (_server.TraceLevel >= 0) \n\t\t\t\t\tConsole.WriteLine(\"{0} not supported.  Only Get Method is supported.\", req);\n\t\t\t\tmySocket.Close();\n\t\t\t\tconnections--;\n\t\t\t\tthis.AccumTimeSpan(DateTime.Now - sDateTime);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\n\t\t\t// Look for HTTP request\n\t\t\tiStartPos = sBuffer.IndexOf(\"HTTP\",1);\n\n\t\t\t// Get the HTTP text and version e.g. it will return \"HTTP/1.1\"\n\t\t\tstring sHttpVersion = sBuffer.Substring(iStartPos,8);\n\t\t\t\t\t        \t\t\t\n\t\t\t// Extract the Requested Type and Requested file/directory\n\t\t\tsRequest = sBuffer.Substring(0,iStartPos - 1);\n\n\t\t\tif (_server.TraceLevel >= 4) \n\t\t\t\tConsole.WriteLine(\"Request=\" + UnescapeRequest(sRequest));\n\n\t\t\tint iStartParm = sRequest.IndexOf(\"?\");\n\t\t\tif (iStartParm >= 0)\n\t\t\t{\n\t\t\t\tsParameters = sRequest.Substring(iStartParm+1);\n\t\t\t\tsRequest = sRequest.Substring(0, iStartParm);\n\t\t\t}\n\n\t\t\tsRequest = UnescapeRequest(sRequest);\t// can't do this to parameters until they've been separated\n\n\t\t\t//If file name is not supplied add forward slash to indicate \n\t\t\t//that it is a directory and then we will look for the \n\t\t\t//default file name..\n\t\t\tif ((sRequest.IndexOf(\".\") <1) && (!sRequest.EndsWith(\"/\")))\n\t\t\t{\n\t\t\t\tsRequest = sRequest + \"/\"; \n\t\t\t}\n\n\t\t\t//Extract the requested file name\n\t\t\tiStartPos = sRequest.LastIndexOf(\"/\") + 1;\n\t\t\tsRequestedFile = sRequest.Substring(iStartPos);\n\t\t\t\n\t\t\t//Extract The directory Name\n\t\t\tsDirName = sRequest.Substring(sRequest.IndexOf(\"/\"), sRequest.LastIndexOf(\"/\")-3);\n\t\t\t\n\t\t\tif ( sDirName == \"\")\n\t\t\t\tsDirName = \"/\";\n\n\t\t\t// When directory output the index\n\t\t\tif (sRequestedFile.Length == 0 )\n\t\t\t{\n\t\t\t\tstring directoryHTML;\n\t\t\t\tdirectoryHTML = await ProcessDirectory(sDirName);\n\t\t\t\tSendHeader(sHttpVersion, \"text/html\", directoryHTML.Length, \" 200 OK\", null, ref mySocket);\n\n\t\t\t\tSendToBrowser(directoryHTML, ref mySocket);\n\t\t\t\tmySocket.Close();\n\t\t\t\tconnections--;\n\t\t\t\tthis.AccumTimeSpan(DateTime.Now - sDateTime);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Handle files\n\t\t\tString mimeType = GetMimeType(sRequestedFile);\t// get mime type\n\n\t\t\t//Build the physical path\n\t\t\tsPhysicalFilePath = serverRoot + sDirName + sRequestedFile;\n\t\t\tbool bFail= mimeType == null? true: false;\t// mime type can be null if extension isn't in config.xml\n\t\t\tFileInfo fi=null;\n\t\t\tif (!bFail)\n\t\t\t{\n\t\t\t\ttry \n\t\t\t\t{\n\t\t\t\t\tfi = new FileInfo(sPhysicalFilePath);\n\t\t\t\t\tif (fi == null || fi.Exists == false)\n\t\t\t\t\t\tbFail = true;\n\t\t\t\t}\n\t\t\t\tcatch\n\t\t\t\t{\n\t\t\t\t\tbFail = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (bFail)\n\t\t\t{\n\t\t\t\tsErrorMessage = \"<H2>404 File Not Found</H2>\";\n\t\t\t\tSendHeader(sHttpVersion, \"text/html\", sErrorMessage.Length, \" 404 Not Found\", null, ref mySocket);\n\t\t\t\tSendToBrowser( sErrorMessage, ref mySocket);\n\n\t\t\t\tmySocket.Close();\t\t\t\t\t\t\n\t\t\t\tconnections--;\n\t\t\t\tthis.AccumTimeSpan(DateTime.Now - sDateTime);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tstring fileTime = string.Format(\"{0:r}\", fi.LastWriteTime);\n\t\t\t// Handle the primary file type of this server\n\t\t\tif (mimeType == \"application/rdl\")\n\t\t\t{\n\t\t\t\t// Get the url of the request\n\t\t\t\tint uStart = sRequest.IndexOf(\"/\");\t// \"Get /\" precedes the url name\n\t\t\t\tstring url;\n\t\t\t\tif (uStart >= 0)\n\t\t\t\t\turl = sRequest.Substring(uStart+1);\n\t\t\t\telse\n\t\t\t\t\turl = sRequest;\n\t\t\t\tstring mtype;\n\t\t\t\t(byte[] ba, mtype) = await ProcessReportFile(url, sPhysicalFilePath, sParameters, fi.LastWriteTime);\n\t\t\t\tSendHeader(sHttpVersion, mtype, ba.Length, \" 200 OK\", fileTime, ref mySocket);\n\t\t\t\tSendToBrowser(ba, ref mySocket);\n\t\t\t\tmySocket.Close();\n\t\t\t\tconnections--;\n\t\t\t\tthis.AccumTimeSpan(DateTime.Now - sDateTime);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Handle any other kind of file\n\t\t\ttry\n\t\t\t{\n\t\t\t\tbyte[] bytes = _server.ReadCache.Read(sPhysicalFilePath);\n\t\t\t\tSendHeader(sHttpVersion,  mimeType, bytes.Length, \" 200 OK\", fileTime, ref mySocket);\n\t\t\t\tSendToBrowser(bytes, ref mySocket);\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\t\n\t\t\t\tsErrorMessage = string.Format(\"<H2>{0}</H2><p>{1}</p>\", ex.Message, ex.StackTrace);\n\t\t\t\tSendHeader(sHttpVersion, \"text/html\", sErrorMessage.Length, \" 200 OK\", null, ref mySocket);\n\t\t\t\tSendToBrowser( sErrorMessage, ref mySocket);\n\t\t\t}\n\n\t\t\tmySocket.Close();\t\t\t\t\t\t\n\t\t\tconnections--;\n\t\t\tthis.AccumTimeSpan(DateTime.Now - sDateTime);\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tstring UnescapeRequest(string req)\n\t\t{\n\t\t\treq = req.Replace(\"\\\\\",\"/\"); //Replace backslash with Forward Slash, if Any\n\t\t\treturn WebUtility.UrlDecode(req);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesktop/ConsoleThread.cs",
    "content": "\n\nusing System;\t\nusing System.IO;\nusing System.Text;\nusing System.Threading;\nusing System.Diagnostics;\n\nnamespace Majorsilence.Reporting.RdlDesktop\n{\n\tclass ConsoleThread\n\t{\n\t\tRdlDesktop rserver;\t\t\t\t\t// server we're watching\n\t\tBackgroundThread bthread;\t\t\t\t// background thread\n\n\t\tpublic ConsoleThread (RdlDesktop rws, BackgroundThread bk)\n\t\t{\n\t\t\trserver = rws;\n\t\t\tbthread = bk;\n\t\t}\n\n\t\tpublic void HandleConsole()\n\t\t{\n\t\t\tstring input, arg;\n\t\t\tbool bContinue=true;\n\t\t\tProcess p;\t\t\t\t// work variable\n\t\t\twhile(bContinue)\n\t\t\t{\n\t\t\t\tinput = Console.ReadLine().ToLower();\n\t\t\t\tint iStartArg = input.IndexOf(\" \");\n\t\t\t\tif (iStartArg >= 0)\n\t\t\t\t{\n\t\t\t\t\targ = input.Substring(iStartArg+1);\n\t\t\t\t\tinput = input.Substring(0, iStartArg);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\targ = null;\n\n\t\t\t\tswitch(input)\n\t\t\t\t{\n\t\t\t\t\tcase \"clearcache\":\n\t\t\t\t\tcase \"cc\":\n\t\t\t\t\t\tint numFiles = rserver.ReadCache.ClearAll();\n\t\t\t\t\t\tConsole.WriteLine(\"{0:#,##0} read cache files cleared.\", numFiles);\n\t\t\t\t\t\tnumFiles = rserver.Cache.ClearAll();\n\t\t\t\t\t\tConsole.WriteLine(\"{0:#,##0} cache files deleted.\", numFiles);\n\t\t\t\t\t\tConsole.Write(\">\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"clearstatistics\":\n\t\t\t\t\tcase \"cs\":\n\t\t\t\t\t\tConnectionThread.ClearStatistics();\n\t\t\t\t\t\tConsole.WriteLine(\"Statistics cleared.\");\n\t\t\t\t\t\tConsole.Write(\">\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"exit\":\n\t\t\t\t\tcase \"x\":\n\t\t\t\t\t\tbthread.Continue = false;\t\t// tell background thread to stop\n\t\t\t\t\t\trserver.Continue = false;\t\t// tell server to stop\n\t\t\t\t\t\tbContinue=false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"license\":\n\t\t\t\t\tcase \"l\":\n\t\t\t\t\t\tConsole.WriteLine(\"Copyright (C) 2004-2008  fyiReporting Software, LLC\");\n\t\t\t\t\t\tConsole.WriteLine(\"\");\n\t\t\t\t\t\tConsole.WriteLine(\"This file is part of the fyiReporting RDL project.\");\n\t\t\t\t\t\tConsole.WriteLine(\"\");\n\t\t\t\t\t\tConsole.WriteLine(\"Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\");\n\t\t\t\t\t\tConsole.WriteLine(\"you may not use this file except in compliance with the License.\");\n\t\t\t\t\t\tConsole.WriteLine(\"You may obtain a copy of the License at\");\n\t\t\t\t\t\tConsole.WriteLine(\"\");\n\t\t\t\t\t\tConsole.WriteLine(\"    http://www.apache.org/licenses/LICENSE-2.0\");\n\t\t\t\t\t\tConsole.WriteLine(\"\");\n\t\t\t\t\t\tConsole.WriteLine(\"Unless required by applicable law or agreed to in writing, software\");\n\t\t\t\t\t\tConsole.WriteLine(\"distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\");\n\t\t\t\t\t\tConsole.WriteLine(\"WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\");\n\t\t\t\t\t\tConsole.WriteLine(\"See the License for the specific language governing permissions and\");\n\t\t\t\t\t\tConsole.WriteLine(\"limitations under the License.\");\n\t\t\t\t\t\tConsole.WriteLine(\"\");\n\n\t\t\t\t\t\tConsole.WriteLine(\"For additional information visit\");\n\t\t\t\t\t\tConsole.WriteLine(\"the website https://github.com/majorsilence/My-FyiReporting.\");\n\t\t\t\t\t\tConsole.Write(\">\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"threads\":\n\t\t\t\t\tcase \"th\":\n\t\t\t\t\t\tp = Process.GetCurrentProcess();\n\t\t\t\t\t\tProcessThreadCollection threads = p.Threads;   \n\t\t\t\t\t\tforeach (ProcessThread pt in threads)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tConsole.WriteLine(\"Thread: {0} {1} {2}\", pt.Id, pt.ThreadState, pt.ThreadState == System.Diagnostics.ThreadState.Wait? pt.WaitReason.ToString(): \"\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tConsole.Write(\">\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"trace\":\n\t\t\t\t\tcase \"t\":\n\t\t\t\t\t\tif (arg != null)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttry\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tint t = Convert.ToInt32(arg);\n\t\t\t\t\t\t\t\trserver.TraceLevel = t;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcatch\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tConsole.WriteLine(\"trace argument must be a number.\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tConsole.WriteLine(\"Trace level= {0}\", rserver.TraceLevel);\n\t\t\t\t\t\tConsole.Write(\">\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"statistics\":\n\t\t\t\t\tcase \"s\":\n\t\t\t\t\t\tp = Process.GetCurrentProcess();\n\t\t\t\t\t\tConsole.WriteLine(\"Server start= {0}\", p.StartTime);\n\t\t\t\t\t\tConsole.WriteLine(\"Elapsed time= {0}\", DateTime.Now - p.StartTime);\n\t\t\t\t\t\t// output some connection information\n\t\t\t\t\t\tint totalRequests = ConnectionThread.GetRequestCount();\n\t\t\t\t\t\tConsole.WriteLine(\"Total requests= {0:#,##0}\", totalRequests);\n\t\t\t\t\t\tConsole.WriteLine(\"Report cache hits= {0:#,##0}\", rserver.Cache.CacheHits);\n\t\t\t\t\t\tConsole.WriteLine(\"Count of report URLs cached= {0:#,##0}\", rserver.Cache.Count);\n\t\t\t\t\t\tConsole.WriteLine(\"Read cache hits= {0:#,##0}\", rserver.ReadCache.CacheHits);\n\t\t\t\t\t\tConsole.WriteLine(\"Count of read cache files= {0:#,##0}\", rserver.ReadCache.Count);\n\t\t\t\t\t\tConsole.WriteLine(\"Current connections= {0:#,##0}\", ConnectionThread.GetConnectionCount());\n\t\t\t\t\t\tConsole.WriteLine(\"Peak connections= {0:#,##0}\", ConnectionThread.GetPeakConnectionCount());\n\t\t\t\t\t\t// Calculate average length of time per request\n\t\t\t\t\t\tif (totalRequests > 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdouble secs = ConnectionThread.GetTotalRequestTime();\n\t\t\t\t\t\t\tConsole.WriteLine(\"Average response time in seconds= {0:0.0000}\", secs / totalRequests);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Get associated process's physical memory usage.\n\t\t\t\t\t\tConsole.WriteLine(\"Memory usage= {0:#,##0}\", p.WorkingSet64);\n\t\t\t\t\t\tConsole.WriteLine(\"Peak working set= {0:#,##0}\", p.WorkingSet64);\n\t\t\t\t\t\t// Get total processor time for this process.\n\t\t\t\t\t\tConsole.WriteLine(\"Total processor time= \" + p.TotalProcessorTime);\n\t\t\t\t\t\t// Get count of files in cache\n\t\t\t\t\t\tConsole.Write(\">\");\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"help\":\n\t\t\t\t\tcase \"h\":\n\t\t\t\t\tcase \"?\":\n\t\t\t\t\t\tConsole.WriteLine(\"Commands\");\n\t\t\t\t\t\tConsole.WriteLine(\"clearcache (cc): clears out all cache files.\");\n\t\t\t\t\t\tConsole.WriteLine(\"clearstatistics (cs): clears out statistic counters.\");\n\t\t\t\t\t\tConsole.WriteLine(\"exit (x): stops the server.\");\n\t\t\t\t\t\tConsole.WriteLine(\"license (l): shows the license and warranty.\");\n\t\t\t\t\t\tConsole.WriteLine(\"statistics (s): output server statistics\");\n\t\t\t\t\t\tConsole.WriteLine(\"threads (th): lists the current threads.\");\n\t\t\t\t\t\tConsole.WriteLine(\"trace # (t): sets the console error verbosity. If number isn't supplied current trace level is shown.\");\n\t\t\t\t\t\tConsole.WriteLine(\"help (?): this output.\");\n\t\t\t\t\t\tConsole.Write(\">\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tConsole.Write(\">\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesktop/FileCache.cs",
    "content": "\n\nusing System;\t\nusing System.Collections;\nusing System.IO;\n\nnamespace Majorsilence.Reporting.RdlDesktop\n{\n\tclass FileCache\n\t{\n\t\tHashtable urls;\n\t\tint cachehits;\n\t\tint cacherequests;\n\n\t\tpublic FileCache ()\n\t\t{\n\t\t\turls = new Hashtable();\n\t\t\tcachehits = 0;\n\t\t\tcacherequests = 0;\n\t\t}\n\t\t\n\t\t// Add an URL to the cache.   There are times where double work is performed.\n\t\t//   e.g. if we get multiple simultaneous requests for the same URL\n\t\t//    both might have gotten not found requests and proceeded to create\n\t\t//    new entries.  This is a waste as we end up only using one.   But this \n\t\t//    shouldn't occur very often and the inefficiency should be slight and \n\t\t//    temporary.\n\t\t//\t In this case, the passed files are deleted and the old ones are used\n\t\tpublic IList Add(string url, IList files)\n\t\t{\n\t\t\tCacheEntry ce=null;\n\t\t\tlock (this)\n\t\t\t{\n\t\t\t\tce = (CacheEntry) urls[url];\n\t\t\t\tif (ce == null)\n\t\t\t\t{\t// entry isn't found; create new one\n\t\t\t\t\tce = new CacheEntry(url, files);\n\t\t\t\t\turls.Add(url, ce);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\t// We already had this entry; delete the new files\n\t\t\t\t\tConsole.WriteLine(\"debug: Double execution of url {0}\", url);\n\t\t\t\t\tce.Timestamp = DateTime.Now;\t// update the timestamp\n\t\t\t\t\tforeach (string file in files)\n\t\t\t\t\t{\n\t\t\t\t\t\ttry \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tFile.Delete(file);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (Exception e)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tConsole.WriteLine(\"An Exception occurred while clearing file cache :\" +e.ToString());\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn ce.Files;\n\t\t}\n\n\t\tpublic int CacheHits\n\t\t{\n\t\t\tget { return  cachehits; }\n\t\t\tset {  cachehits = value; }\n\t\t}\n\n\t\tpublic int Count\n\t\t{\n\t\t\tget { return urls.Count; }\n\t\t}\n\n\t\tpublic IList Find(string url)\n\t\t{\n\t\t\treturn Find(url, DateTime.MinValue);\n\t\t}\n\n\t\tpublic IList Find(string url, DateTime lastUpdateTime)\n\t\t{\n\t\t\tCacheEntry ce = null;\n\t\t\tlock (this)\n\t\t\t{\n\t\t\t\tcacherequests++;\n\t\t\t\tce = (CacheEntry) urls[url];\n\t\t\t\tif (ce != null)\n\t\t\t\t{\n\t\t\t\t\tif (lastUpdateTime > ce.CreatedTime)\n\t\t\t\t\t{\t// the url has been updated since the cache entry was created\n\t\t\t\t\t\tDeleteUrlEntry(ce);\t\t// remove from cache\n\t\t\t\t\t\tce = null;\t\t\t\t// tell caller we didn't find it\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\t// cache entry should still be valid\n\t\t\t\t\t\tce.Timestamp = DateTime.Now;\t// update the reference timestamp\n\t\t\t\t\t\tcachehits++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (ce == null)\n\t\t\t\treturn null;\n\t\t\telse\n\t\t\t\treturn ce.Files;\n\t\t}\n\n\t\t// Clear out the files based on the when they were last accessed.  Caller passes\n\t\t//  the timespan they want to retain.  Anything older gets tossed.   \n\t\tpublic int Clear(TimeSpan ts)\n\t\t{\n\t\t\tint numDeletedFiles=0;\n\t\t\tlock (this)\n\t\t\t{\n\t\t\t\tDateTime ctime = DateTime.Now - ts;\t\t// anything older than this is deleted\n\t\t\t\t// Build list of entries to be deleted\n\t\t\t\tArrayList f = new ArrayList();\n\t\t\t\tforeach (CacheEntry ce in urls.Values)\n\t\t\t\t{\n\t\t\t\t\tif (ce.Timestamp < ctime)\n\t\t\t\t\t\tf.Add(ce);\n\t\t\t\t}\n\t\t\t\t// Now delete them from the URL hash (and from the file system)\n\t\t\t\tforeach (CacheEntry ce in f)\n\t\t\t\t{\n\t\t\t\t\tnumDeletedFiles += DeleteUrlEntry(ce);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn numDeletedFiles;\n\t\t}\n\n\t\tprivate int DeleteUrlEntry(CacheEntry ce)\n\t\t{\n\t\t\tint numDeletedFiles=0;\n\t\t\turls.Remove(ce.Url);\n\t\t\tforeach (string file in ce.Files)\n\t\t\t{\n\t\t\t\ttry \n\t\t\t\t{\n\t\t\t\t\tFile.Delete(file);\n\t\t\t\t\tnumDeletedFiles++;\n\t\t\t\t}\n\t\t\t\tcatch (Exception e)\n\t\t\t\t{\n\t\t\t\t\tConsole.WriteLine(\"An Exception occurred while clearing file cache :\" +e.ToString());\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn numDeletedFiles;\n\t\t}\n\t\t// Clear out all the cached files.   \n\t\tpublic int ClearAll()\n\t\t{\n\t\t\tint numDeletedFiles=0;\n\t\t\tlock (this)\n\t\t\t{\n\t\t\t\t// Build list of entries to be deleted\n\t\t\t\tforeach (CacheEntry ce in urls.Values)\n\t\t\t\t{\n\t\t\t\t\tforeach (string file in ce.Files)\n\t\t\t\t\t{\n\t\t\t\t\t\ttry \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tFile.Delete(file);\n\t\t\t\t\t\t\tnumDeletedFiles++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (Exception e)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tConsole.WriteLine(\"An Exception occurred while clearing file cache :\" +e.ToString());\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// restart the cache\n\t\t\t\turls = new Hashtable();\n\t\t\t\tcachehits=0;\n\t\t\t\tcacherequests=0;\n\t\t\t}\n\t\t\treturn numDeletedFiles;\n\t\t}\n\t}\n\n\tclass CacheEntry\n\t{\n\t\tstring _Url;\t\t\t\t\t// URL of the report (including args)\n\t\tIList _Files;\t\t\t\t\t// list of files associated with URL\n\t\tDateTime _Timestamp;\t\t\t// time cache entry last referenced\n\t\tDateTime _CreatedTime;\t\t\t// time cache entry created\n\n\t\tpublic CacheEntry(string url, IList files)\n\t\t{\n\t\t\t_Url = url;\n\t\t\t_Files = files;\n\t\t\t_CreatedTime = _Timestamp = DateTime.Now;\n\t\t}\n\n\t\tpublic string Url\n\t\t{\n\t\t\tget { return  _Url; }\n\t\t}\n\n\t\tpublic IList Files\n\t\t{\n\t\t\tget { return  _Files; }\n\t\t}\n\n\t\tpublic DateTime Timestamp\n\t\t{\n\t\t\tget { return  _Timestamp; }\n\t\t\tset {  _Timestamp = value; }\n\t\t}\n\n\t\tpublic DateTime CreatedTime\n\t\t{\n\t\t\tget { return  _CreatedTime; }\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlDesktop/FileReadCache.cs",
    "content": "\n\nusing System;\t\nusing System.Collections;\nusing System.IO;\nusing System.Text;\n\nnamespace Majorsilence.Reporting.RdlDesktop\n{\n\tclass FileReadCache\n\t{\n\t\tHashtable files;\t\t\t// hashtable of file names and contents\n\t\tint maxFiles;\t\t\t\t// maximum number of files allowed in cache\n\t\tint cachehits;\n\t\tint cacherequests;\n\t\tint maxSize;\t\t\t\t// maximum size of a file allowed in cache\n\n\t\tpublic FileReadCache (int maxCount, int maxEntrySize)\n\t\t{\n\t\t\tmaxFiles = maxCount;\n\t\t\tmaxSize = maxEntrySize;\n\t\t\tfiles = new Hashtable();\n\t\t\tcachehits = 0;\n\t\t\tcacherequests = 0;\n\t\t}\n\n\t\tpublic byte[] Read(string file)\n\t\t{\n\t\t\tCacheReadEntry ce=null;\n\t\t\tlock (this)\n\t\t\t{\n\t\t\t\tcacherequests++;\n\t\t\t\tce = (CacheReadEntry) files[file];\n\t\t\t\tif (ce == null)\n\t\t\t\t{\t// entry isn't found; create new one\n\t\t\t\t\tif (files.Count >= maxFiles)\t// Exceeded cache count?\n\t\t\t\t\t\tReduce();\t\t\t\t\t// yes, we need to reduce the file count\n\n\t\t\t\t\tFileStream fs = null;\n\t\t\t\t\tBinaryReader reader = null;\n\t\t\t\t\tbyte[] bytes;\n\t\t\t\t\ttry\n\t\t\t\t\t{\n\t\t\t\t\t\tfs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read);\n\t\t\t\t\t\treader = new BinaryReader(fs);\n\t\t\t\t\t\tbytes = new byte[fs.Length];\n\t\t\t\t\t\tint read;\n\t\t\t\t\t\tint totalRead=0;\n\t\t\t\t\t\twhile((read = reader.Read(bytes, 0, bytes.Length)) != 0) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttotalRead += read;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tce = new CacheReadEntry(file, bytes);\n\t\t\t\t\t\tif (bytes.Length <= this.maxSize)\n\t\t\t\t\t\t\tfiles.Add(file, ce);\t\t// don't actually cache if too big\n\t\t\t\t\t}\n\t\t\t\t\tcatch (Exception e)\n\t\t\t\t\t{\n\t\t\t\t\t\tConsole.WriteLine(\"File read error: {0} \", e );\n\t\t\t\t\t\tthrow;\n\t\t\t\t\t}\n\t\t\t\t\tfinally\n\t\t\t\t\t{\n\t\t\t\t\t\tif (reader != null)\n\t\t\t\t\t\t\treader.Close(); \n\t\t\t\t\t\tif (fs != null)\n\t\t\t\t\t\t\tfs.Close();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tce.Timestamp = DateTime.Now;\n\t\t\t\t\tcachehits++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (ce != null)\n\t\t\t\treturn ce.Value;\n\t\t\telse\n\t\t\t\treturn null;\n\t\t}\n\n\t\tpublic string ReadString(string file)\n\t\t{\n\t\t\tbyte[] bytes = this.Read(file);\n\t\t\n\t\t\treturn Encoding.ASCII.GetString(bytes);\n\t\t}\n\n\t\tpublic int CacheHits\n\t\t{\n\t\t\tget { return  cachehits; }\n\t\t\tset {  cachehits = value; }\n\t\t}\n\n\t\tpublic int Count\n\t\t{\n\t\t\tget { return files.Count; }\n\t\t}\n\n\t\t// Clear out the files based on when they were last referenced.  Caller passes\n\t\t//  the timespan they want to retain.  Anything older gets tossed.   \n\t\tpublic int Clear(TimeSpan ts)\n\t\t{\n\t\t\tint numClearedFiles=0;\n\t\t\tlock (this)\n\t\t\t{\n\t\t\t\tDateTime ctime = DateTime.Now - ts;\t\t// anything older than this is deleted\n\t\t\t\t// Build list of entries to be deleted\n\t\t\t\tArrayList f = new ArrayList();\n\t\t\t\tforeach (CacheReadEntry ce in files.Values)\n\t\t\t\t{\n\t\t\t\t\tif (ce.Timestamp < ctime)\n\t\t\t\t\t\tf.Add(ce);\n\t\t\t\t}\n\t\t\t\t// Now delete them from the File hash\n\t\t\t\tforeach (CacheReadEntry ce in f)\n\t\t\t\t{\n\t\t\t\t\tfiles.Remove(ce.File);\n\t\t\t\t}\n\t\t\t\tnumClearedFiles = f.Count;\n\t\t\t}\n\t\t\treturn numClearedFiles;\n\t\t}\n\n\t\t// Clear out all the cached files.   \n\t\tpublic int ClearAll()\n\t\t{\n\t\t\tint numClearedFiles;\n\t\t\tlock (this)\n\t\t\t{\n\t\t\t\t// restart the cache\n\t\t\t\tnumClearedFiles = files.Count;\n\t\t\t\tfiles = new Hashtable();\n\t\t\t\tcachehits=0;\n\t\t\t\tcacherequests=0;\n\t\t\t}\n\t\t\treturn numClearedFiles;\n\t\t}\n\n\t\t// Reduce the number of entries in the list.  We're about to exceed our size.\n\t\tprivate int Reduce()\n\t\t{\n\t\t\t// Build list of entries to be deleted\n\t\t\tArrayList f = new ArrayList(files.Values);\n\t\t\tf.Sort();\t\t// comparer sorts by last reference time\n\t\t\t// Now delete them from the File hash\n\t\t\tint max = (int) (maxFiles / 4);\n\t\t\tforeach (CacheReadEntry ce in f)\n\t\t\t{\n\t\t\t\tfiles.Remove(ce.File);\n\t\t\t\tmax--;\n\t\t\t\tif (max <= 0)\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn max;\n\t\t}\n\t}\n\n\tclass CacheReadEntry : IComparable\n\t{\n\t\tstring _File;\n\t\tbyte[] _Value;\n\t\tDateTime _Timestamp;\n\t\tDateTime _CreatedTime;\t\t\t// time cache entry created\n\n\t\tpublic CacheReadEntry(string file, byte[] ba)\n\t\t{\n\t\t\t_File = file;\n\t\t\t_CreatedTime = _Timestamp = DateTime.Now;\n\t\t\t_Value = ba;\n\t\t}\n\n\t\tpublic string File\n\t\t{\n\t\t\tget { return  _File; }\n\t\t}\n\n\t\tpublic byte[] Value\n\t\t{\n\t\t\tget { return  _Value; }\n\t\t}\n\n\t\tpublic DateTime CreatedTime\n\t\t{\n\t\t\tget { return  _CreatedTime; }\n\t\t}\n\n\t\tpublic DateTime Timestamp\n\t\t{\n\t\t\tget { return  _Timestamp; }\n\t\t\tset {  _Timestamp = value; }\n\t\t}\n\n\t\t#region IComparable Members\n\n\t\tpublic int CompareTo(object obj)\n\t\t{\n\t\t\tCacheReadEntry ce = obj as CacheReadEntry;\n\n\t\t\tlong t = this.Timestamp.Ticks - ce.Timestamp.Ticks;\n\t\t\tif (t < 0)\n\t\t\t\treturn -1;\n\t\t\telse if (t > 0)\n\t\t\t\treturn 1;\n\t\t\treturn 0;\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlDesktop/RdlDesktop.cs",
    "content": "\n\nusing System;\t\nusing System.IO;\nusing System.Net;\nusing System.Net.Sockets;\nusing System.Threading;\nusing System.Xml;\nusing System.Collections;\nusing System.Reflection;\nusing Majorsilence.Reporting.RdlDesktop.Resources;\n\n\nnamespace Majorsilence.Reporting.RdlDesktop\n{\n\tclass RdlDesktop\n\t{\n\t\tprivate TcpListener myListener ;\n\t\t// These parameters are usually override in the config.xml file \n\t\tprivate int port = 8080 ;\t\t\t// port\n\t\tprivate bool bLocalOnly = true;\t\t// restrict access to the machine it's running on\n\t\tprivate string wd = \"tempreports\";\t// subdirectory name under server root to place generated reports\n\t\tprivate string sr = null;\n\t\tprivate int maxReadCache=100;\n\t\tprivate int maxReadCacheEntrySize=50000;\n\t\tprivate int _TraceLevel=0;\t\t\t// Controls level of messages to console\n\n\t\tprivate bool _continue=true;\n\t\tprivate FileCache _cache;\n\t\tprivate FileReadCache _readCache;\n\t\tprivate Hashtable _mimes;\n\t\tprivate string _dsrPassword;\t\t// data source resource password\n\n\t\tpublic RdlDesktop()\n\t\t{\n\t\t\tGetConfigInfo();\t\t\t\t// obtain the configuation information\n\n\t\t\t_cache = new FileCache();\n\t\t\t_readCache = new FileReadCache(maxReadCache, maxReadCacheEntrySize);\t\n\t\t}\n\t\t\n\t\tpublic FileCache Cache\n\t\t{\n\t\t\tget { return _cache; }\n\t\t}\n\n\t\tpublic string DataSourceReferencePassword\n\t\t{\n\t\t\tget { return _dsrPassword; }\n\t\t\tset { _dsrPassword = value; }\n\t\t}\n\n\t\tpublic FileReadCache ReadCache\n\t\t{\n\t\t\tget { return _readCache; }\n\t\t}\n\t\n\t\tpublic Hashtable Mimes\n\t\t{\n\t\t\tget { return _mimes; }\n\t\t}\n\n\t\tpublic bool Continue\n\t\t{\n\t\t\tget { return _continue; }\n\t\t\tset { _continue = value; }\n\t\t}\n\t\t\n\t\tpublic int TraceLevel\n\t\t{\n\t\t\tget { return _TraceLevel; }\n\t\t\tset { _TraceLevel = value; }\n\t\t}\n\n\t\t// RunServer makes TcpListener start listening on the\n\t\t// given port.  It also calls a Thread on the method StartListen(). \n\t\tpublic void RunServer()\n\t\t{\n\t\t\t// main server loop\n\t\t\ttry\n\t\t\t{\n                //start listing on the given port\n                if (this.bLocalOnly)\n                {\n                    IPAddress ipAddress = Dns.GetHostEntry(\"localhost\").AddressList[0];\n                    myListener = new TcpListener(ipAddress, port);\n                }\n                else\n                {\n                    IPAddress ipAddress = Dns.GetHostEntry(\"0.0.0.0\").AddressList[0];\n                    myListener = new TcpListener(ipAddress, port);\n                }\n\t\t\t\tmyListener.Start();\n//\t\t\t\tint maxThreads;\t\t\t\t// worker threads in the thread pool\n//\t\t\t\tint completionPortThreads;\t// asynchronous I/O threads in the thread pool\n//\t\t\t\tThreadPool.GetMaxThreads(out maxThreads, out completionPortThreads);\n\t\t\t\t\n\t\t\t\tConsole.WriteLine(string.Format(\"RDL Desktop version {0}, Copyright (C) 2005 fyiReporting Software, LLC\",\n\t\t\t\t\t\t\tAssembly.GetExecutingAssembly().GetName().Version.ToString()));\n\n\t\t\t\tConsole.WriteLine(\"\");\n\t\t\t\tConsole.WriteLine(\"RDL Desktop comes with ABSOLUTELY NO WARRANTY.  This is free software,\");\n\t\t\t\tConsole.WriteLine(\"and you are welcome to redistribute it under certain conditions.\");\n\t\t\t\tConsole.WriteLine(\"Type 'license' for details.\");\n\t\t\t\tConsole.WriteLine(\"\");\n\t\t\t\tConsole.WriteLine(\"RDL Desktop running on port {0}\", port);\n\t\t\t\tConsole.WriteLine(\"Type '?' for list of console commands.\");\n\t\t\t\tConsole.Write(\">\");\n\t\t\t\twhile(_continue)\n\t\t\t\t{\n\t\t\t\t\twhile(!myListener.Pending() && _continue)\n\t\t\t\t\t{\n\t\t\t\t\t\tThread.Sleep(100);\n\t\t\t\t\t}\n\t\t\t\t\tif (_continue)\n\t\t\t\t\t{\n\t\t\t\t\t\tConnectionThread c = new ConnectionThread(this, myListener, sr, wd);\n                        ThreadPool.QueueUserWorkItem(async _ => await c.HandleConnection());\n                    }\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch(Exception e)\n\t\t\t{\n\t\t\t\tif (this._TraceLevel >= 0) \n\t\t\t\t\tConsole.WriteLine(\"An Exception Occurred while Listening :\" +e.ToString());\n\t\t\t}\n\t\t}\n\n\t\t// Application Starts Here..\n\t\tpublic static void Main(string[] args) \n\t\t{\n\t\t\tRdlDesktop server = new RdlDesktop();\n\t\t\tserver.HandleArguments(args);\n\n\t\t\t// start up the background thread to handle additional work\n\t\t\tBackgroundThread bk = new BackgroundThread(server, 60 * 5, 60 * 5, 60 * 5);\n\t\t\tThread bThread = new Thread(new ThreadStart(bk.HandleBackground));\n\t\t\tbThread.Name = \"background\";\n\t\t\tbThread.Start();\n\t\t\t\n\t\t\t// start up the console thread so user can see what's going on\n\t\t\tConsoleThread ct = new ConsoleThread(server, bk);\n\t\t\tThread cThread = new Thread(new ThreadStart(ct.HandleConsole));\n\t\t\tcThread.Name = \"console\";\n\t\t\tcThread.Start();\n\n\t\t\t// Run the server\n\t\t\tserver.RunServer();\n\t\t\tserver.Cache.ClearAll();\t\t\t// clean up the report file cache when done\n\t\t}\n\n\t\tprivate void GetConfigInfo()\n\t\t{\n\t\t\t_mimes = new Hashtable();\n\t\t\tstring optFileName = Path.Combine(Majorsilence.Reporting.Rdl.Utility.Paths.MajorsilenceRoamingFolder(), \"config.xml\");\n\t\t\tif (!File.Exists(optFileName))\n\t\t\t{\n\t\t\t\tif (File.Exists(\"config.xml\"))\n\t\t\t\t{\n\t\t\t\t\tFile.Copy(\"config.xml\", optFileName);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\tXmlDocument xDoc = new XmlDocument();\n\t\t\t\txDoc.PreserveWhitespace = false;\n\t\t\t\txDoc.Load(optFileName);\n\t\t\t\tXmlNode xNode;\n\t\t\t\txNode = xDoc.SelectSingleNode(\"//config\");\n\n\t\t\t\t// Loop thru all the child nodes\n\t\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tswitch (xNodeLoop.Name.ToLower())\n\t\t\t\t\t{\n\t\t\t\t\t\tcase \"port\":\n\t\t\t\t\t\t\ttry\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tport = Convert.ToInt32(xNodeLoop.InnerText);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcatch\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tport = 8080;\n\t\t\t\t\t\t\t\tConsole.WriteLine(\"config.xml file: port value is not a valid number.  Defaulting to {0}\", port);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"localhostonly\":\n\t\t\t\t\t\t\tstring tf = xNodeLoop.InnerText.ToLower();\n\t\t\t\t\t\t\tif (tf == \"false\")\n\t\t\t\t\t\t\t\tthis.bLocalOnly = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"serverroot\":\n\t\t\t\t\t\t\tsr = xNodeLoop.InnerText;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"cachedirectory\":\n\t\t\t\t\t\t\twd = xNodeLoop.InnerText;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"tracelevel\":\n\t\t\t\t\t\t\ttry\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t_TraceLevel = Convert.ToInt32(xNodeLoop.InnerText);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcatch\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t_TraceLevel = 0;\n\t\t\t\t\t\t\t\tConsole.WriteLine(\"config.xml file: tracelevel value is not a valid number.  Defaulting to {0}\", _TraceLevel);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"maxreadcache\":\n\t\t\t\t\t\t\ttry\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmaxReadCache = Convert.ToInt32(xNodeLoop.InnerText);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcatch\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmaxReadCache = 100;\n\t\t\t\t\t\t\t\tConsole.WriteLine(\"config.xml file: maxreadcache value is not a valid number.  Defaulting to {0}\", maxReadCache);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"maxreadcacheentrysize\":\n\t\t\t\t\t\t\ttry\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmaxReadCacheEntrySize = Convert.ToInt32(xNodeLoop.InnerText);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcatch\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmaxReadCacheEntrySize = 50000;\n\t\t\t\t\t\t\t\tConsole.WriteLine(\"config.xml file: maxReadCacheEntrySize value is not a valid number.  Defaulting to {0}\", maxReadCacheEntrySize);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"mimetypes\":\n\t\t\t\t\t\t\tGetConfigInfoMimes(xNodeLoop);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tConsole.WriteLine(\"config.xml file: {0} is unknown and will be ignored.\", xNodeLoop.Name);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (sr == null)\t\t\t// no server root specified?\n\t\t\t\t\tthrow new Exception(Strings.RdlDesktop_Error_ServerrootMustSpecified);\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\t\t// Didn't sucessfully get the startup state don't use\n\t\t\t\tConsole.WriteLine(\"Error processing config.xml. {0}\", ex.Message);\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void HandleArguments(string[] args)\n\t\t{\n\t\t\t// Handle command line arguments\n\t\t\tif (args == null || args.Length==0)\n\t\t\t\treturn;\n\n\t\t\tforeach(string s in args)\n\t\t\t{\n\t\t\t\tstring t = s.Substring(0,2);\n\t\t\t\tswitch (t)\n\t\t\t\t{\n\t\t\t\t\tcase \"/p\":\n\t\t\t\t\t\tthis._dsrPassword = s.Substring(2);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"/t\":\n\t\t\t\t\t\ttry\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t_TraceLevel = Convert.ToInt32(s.Substring(2));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tConsole.WriteLine(\"/t value is not a valid number.  Using {0}\", _TraceLevel);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tConsole.WriteLine(\"Unknown command line argument '{0}' ignored.\", s);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprivate void GetConfigInfoMimes(XmlNode xNode)\n\t\t{\n\t\t\tforeach(XmlNode xN in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xN.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xN.Name.ToLower())\n\t\t\t\t{\n\t\t\t\t\tcase \"mimetype\":\n\t\t\t\t\t\tstring extension=null;\n\t\t\t\t\t\tstring type=null;\n\t\t\t\t\t\tforeach(XmlNode xN2 in xN.ChildNodes)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tswitch (xN2.Name.ToLower())\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcase \"extension\":\n\t\t\t\t\t\t\t\t\textension = xN2.InnerText.ToLower();\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"type\":\n\t\t\t\t\t\t\t\t\ttype = xN2.InnerText.ToLower();\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tConsole.WriteLine(\"config.xml file: {0} is unknown and will be ignored.\", xN.Name);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (extension != null && type != null)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (_mimes[extension] == null)\n\t\t\t\t\t\t\t\t_mimes.Add(extension, type);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tConsole.WriteLine(\"config.xml file: {0} is unknown and will be ignored.\", xN.Name);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesktop/RdlDesktop.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\t<PropertyGroup>\n\t\t<ProjectType>Local</ProjectType>\n\t\t<ApplicationIcon>App.ico</ApplicationIcon>\n\t\t<DelaySign>false</DelaySign>\n\t\t<OutputType>Exe</OutputType>\n\t\t<RootNamespace>Majorsilence.Reporting.RdlDesktop</RootNamespace>\n\t\t<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>\n\t\t<StartupObject>Majorsilence.Reporting.RdlDesktop.RdlDesktop</StartupObject>\n\t\t<Configurations>Debug;Release;Debug-DrawingCompat;Release-DrawingCompat</Configurations>\n\t\t<TargetFrameworks>net48;net8.0;net10.0</TargetFrameworks>\n        <TargetFrameworks Condition=\"'$(OS)' == 'Unix'\">net8.0;net10.0</TargetFrameworks>\n\t\t<WarningsAsErrors>4014</WarningsAsErrors>\n\t</PropertyGroup>\n\t<ItemGroup>\n\t\t<Reference Update=\"System\">\n\t\t\t<Name>System</Name>\n\t\t</Reference>\n\t\t<Reference Update=\"System.Data\">\n\t\t\t<Name>System.Data</Name>\n\t\t</Reference>\n\t\t<Reference Update=\"System.Xml\">\n\t\t\t<Name>System.XML</Name>\n\t\t</Reference>\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<Content Include=\"App.ico\" />\n\t\t<None Update=\"config.xml\">\n\t\t\t<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t\t</None>\n\t\t<Compile Update=\"Resources\\Strings.Designer.cs\">\n\t\t\t<AutoGen>True</AutoGen>\n\t\t\t<DesignTime>True</DesignTime>\n\t\t\t<DependentUpon>Strings.resx</DependentUpon>\n\t\t</Compile>\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<ProjectReference Include=\"..\\RdlEngine\\Majorsilence.Reporting.RdlEngine.csproj\" />\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<EmbeddedResource Update=\"Resources\\Strings.resx\">\n\t\t\t<Generator>ResXFileCodeGenerator</Generator>\n\t\t\t<LastGenOutput>Strings.Designer.cs</LastGenOutput>\n\t\t</EmbeddedResource>\n\t</ItemGroup>\n</Project>\n"
  },
  {
    "path": "RdlDesktop/RdlDesktop.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Express 2012 for Web\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlDesktop\", \"RdlDesktop.csproj\", \"{D605B305-BB81-441C-B909-DEA35F33C8BF}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlEngine\", \"..\\RdlEngine\\RdlEngine.csproj\", \"{C97E91F4-B310-44E2-9B6C-96775395722D}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{D605B305-BB81-441C-B909-DEA35F33C8BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D605B305-BB81-441C-B909-DEA35F33C8BF}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D605B305-BB81-441C-B909-DEA35F33C8BF}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{D605B305-BB81-441C-B909-DEA35F33C8BF}.Debug|x64.Build.0 = Debug|x64\n\t\t{D605B305-BB81-441C-B909-DEA35F33C8BF}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{D605B305-BB81-441C-B909-DEA35F33C8BF}.Debug|x86.Build.0 = Debug|x86\n\t\t{D605B305-BB81-441C-B909-DEA35F33C8BF}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D605B305-BB81-441C-B909-DEA35F33C8BF}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D605B305-BB81-441C-B909-DEA35F33C8BF}.Release|x64.ActiveCfg = Release|x64\n\t\t{D605B305-BB81-441C-B909-DEA35F33C8BF}.Release|x64.Build.0 = Release|x64\n\t\t{D605B305-BB81-441C-B909-DEA35F33C8BF}.Release|x86.ActiveCfg = Release|x86\n\t\t{D605B305-BB81-441C-B909-DEA35F33C8BF}.Release|x86.Build.0 = Release|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.Build.0 = Debug|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.Build.0 = Debug|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.ActiveCfg = Release|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.Build.0 = Release|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.ActiveCfg = Release|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.Build.0 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "RdlDesktop/ReportRender.cs",
    "content": "\n\nusing System;\t\nusing System.Collections;\nusing System.Text;\nusing Majorsilence.Reporting.Rdl;\n\nnamespace Majorsilence.Reporting.RdlDesktop\n{\n\t/// <summary>\n\t/// Summary description for ParameterHtml.\n\t/// </summary>\n\tinternal class ReportRender\n\t{\n\t\tprivate Report _Report;\n\t\tprivate string _ParameterHtml;\n\t\tprivate string _ActionUrl;\n\n\t\tinternal ReportRender(Report r)\n\t\t{\n\t\t\t_Report = r;\n\t\t}\n\n\t\tinternal string ActionUrl\n\t\t{\n\t\t\tget {return _ActionUrl;}\n\t\t\tset \n\t\t\t{\n\t\t\t\t_ActionUrl = value;\n\t\t\t\t_ParameterHtml = null;\t\t// this is now invalid\n\t\t\t}\n\t\t}\n\n\t\tinternal string MainHtml(Report report, string parmUrl, string renderUrl)\n\t\t{\n\t\t\tStringBuilder sb = new StringBuilder();\n\t\t\tif (report.Description == null)\n\t\t\t\tsb.Append(\"<html>\");\n\t\t\telse\n\t\t\t\tsb.AppendFormat(\"<html><head><title>{0}</title></head>\", XmlUtil.XmlAnsi(report.Description));\n\t\t\tsb.Append(\"<frameset rows=\\\"20%,*\\\" bordercolor=\\\"#CCCCCC\\\">\");\n\t\t\tsb.AppendFormat(\"<frame src=\\\"{0}\\\" name=\\\"parms\\\" scrolling=\\\"Auto\\\" marginwidth=\\\"0\\\" marginheight=\\\"0\\\"/>\", parmUrl);\n\t\t\tsb.AppendFormat(\"<frame src=\\\"{0}\\\" name=\\\"report\\\" scrolling=\\\"Auto\\\" marginwidth=\\\"0\\\" marginheight=\\\"0\\\"/>\", renderUrl);\n\t\t\tsb.Append(\"</frameset></html>\");\n\t\t\treturn sb.ToString();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the HTML needed to represent the parameters of a report.\n\t\t/// </summary>\n\t\tinternal string ParameterHtml(IDictionary pd)\n\t\t{\n\t\t\tif (_ParameterHtml != null)\n\t\t\t\treturn _ParameterHtml;\n\n\t\t\tStringBuilder pHtml = new StringBuilder();\n\t\t\tpHtml.AppendFormat(\"<html><form target=\\\"_top\\\" method=get action=\\\"{0}\\\"><table width=\\\"100%\\\">\", _ActionUrl);\n\t\t\tint row=0;\n\n\t\t\t// Determine the selection of the render control\n\t\t\tstring render = (string) pd[\"rs:Format\"];\n\t\t\tif (render == null)\n\t\t\t\trender = \"html\";\n\t\t\tstring rHTML=\"\";\n\t\t\tstring rPDF=\"\";\n\t\t\tstring rXML=\"\";\n\t\t\tswitch (render.ToLower())\n\t\t\t{\n\t\t\t\tcase \"xml\":\n\t\t\t\t\trXML=\" selected\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"pdf\":\n\t\t\t\t\trPDF=\" selected\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"html\":\n\t\t\t\tdefault:\n\t\t\t\t\trHTML=\" selected\";\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tforeach (UserReportParameter rp in _Report.UserReportParameters)\n\t\t\t{\n\t\t\t\tif (rp.Prompt == null)\t\t// skip parameters that don't have a prompt\n\t\t\t\t\tcontinue;\n\n\t\t\t\tpHtml.Append(\"<tr>\");\t\t// Create a row for each parameter\n\t\t\t\t\n\t\t\t\t// Create the label\n\t\t\t\tpHtml.Append(\"<td>\");\t\t// Label definition\n\t\t\t\tpHtml.Append(rp.Prompt);\n\n\t\t\t\tpHtml.Append(\"</td><td>\");\t// end of label; start of control\n\n\t\t\t\t// Create the control\n\t\t\t\tstring defaultValue;\n\t\t\t\tif (rp.DefaultValue != null)\n\t\t\t\t{\n\t\t\t\t\tStringBuilder sb = new StringBuilder();\n\t\t\t\t\tfor (int i=0; i < rp.DefaultValue.Length; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (i > 0)\n\t\t\t\t\t\t\tsb.Append(\", \");\n\t\t\t\t\t\tsb.Append(rp.DefaultValue[i].ToString());\n\t\t\t\t\t}\n\t\t\t\t\tdefaultValue = sb.ToString();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tdefaultValue=\"\";\n\n\t\t\t\tif (rp.DisplayValues == null)\n\t\t\t\t{\n\t\t\t\t\tstring pv = (string) pd[rp.Name];\n\n\t\t\t\t\tpHtml.AppendFormat(\"<input type=text name=\\\"{0}\\\" value=\\\"{1}\\\" size=15/></td>\", \n\t\t\t\t\t\trp.Name,\t\t// name\n\t\t\t\t\t\tpv == null? defaultValue: pv);\t\t// provide actual value if passed as parm otherwise default\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tpHtml.AppendFormat(\"<select name=\\\"{0}\\\" size=1>\", rp.Name);\n\t\t\t\t\tstring pv = (string) pd[rp.Name];\n\t\t\t\t\tif (pv == null)\n\t\t\t\t\t\tpv = defaultValue;\n\t\t\t\t\tstring selected;\n\t\t\t\t\tfor (int i=0; i < rp.DisplayValues.Length; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (pv.CompareTo(rp.DataValues[i].ToString()) == 0)\n\t\t\t\t\t\t\tselected = \" selected\";\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tselected = \"\";\n\n\t\t\t\t\t\tif (rp.DataValues[i] is String &&\n\t\t\t\t\t\t\trp.DisplayValues[i].CompareTo(rp.DataValues[i]) == 0)\t// When display and data values are same don't put out a value tag\n\t\t\t\t\t\t\tpHtml.AppendFormat(\"<option{1}>{0}</option>\", XmlUtil.XmlAnsi(rp.DisplayValues[i]), selected);\t\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tpHtml.AppendFormat(\"<option value=\\\"{0}\\\"{2}>{1}</option>\", XmlUtil.XmlAnsi(rp.DataValues[i].ToString()), XmlUtil.XmlAnsi(rp.DisplayValues[i]), selected);\n\t\t\t\t\t}\n\t\t\t\t\tpHtml.Append(\"</select></td>\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (row==0)\n\t\t\t\t{\t// On the first row add a column that will be the submit button\n\t\t\t\t\tpHtml.Append(\"<td rowspan=2><table><tr><td align=right><input type=\\\"submit\\\" value=\\\"Run Report\\\" style=\\\"font-family:Ariel; color: black; font-size=10pt; background: gainsboro;\\\"/></td></tr>\");\n\t\t\t\t\tpHtml.AppendFormat(\"<tr><td align=right><select name=\\\"rs:Format\\\" size=1><option{0}>HTML</option><option{1}>PDF</option><option{2}>XML</option></select></td></tr></table></td>\", rHTML, rPDF, rXML);\n\t\t\t\t}\n\n\t\t\t\tpHtml.Append(\"</tr>\");\t\t// End of row for each parameter\n\t\t\t\trow++;\n\t\t\t}\n\t\t\tif (row==0)\n\t\t\t{\n\t\t\t\tpHtml.Append(\"<tr><td><table><tr><td align=right><input type=\\\"submit\\\" value=\\\"Run Report\\\" style=\\\"font-family:Ariel; color: white; font-size=10pt; background: lightblue;\\\"/></td></tr>\");\n\t\t\t\tpHtml.AppendFormat(\"<tr><td align=right><select name=\\\"rs:Format\\\" size=1><option{0}>HTML</option><option{1}>PDF</option><option{2}>XML</option></select></td></tr></table></td></tr>\", rHTML, rPDF, rXML);\n\t\t\t}\n\t\t\tpHtml.Append(\"</table></form></html>\");\t\t// End of table, form, html\n\t\t\t_ParameterHtml = pHtml.ToString();\n\t\t\treturn _ParameterHtml;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlDesktop/Resources/Strings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Majorsilence.Reporting.RdlDesktop.Resources {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Strings {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Strings() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"fyiReporting.RdlDesktop.Resources.Strings\", typeof(Strings).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &apos;serverroot&apos; must be specified in the config.xml file..\n        /// </summary>\n        internal static string RdlDesktop_Error_ServerrootMustSpecified {\n            get {\n                return ResourceManager.GetString(\"RdlDesktop_Error_ServerrootMustSpecified\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlDesktop/Resources/Strings.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n\t<!-- \n\t\tMicrosoft ResX Schema\n\n\t\tVersion 1.3\n\n\t\tThe primary goals of this format is to allow a simple XML format \n\t\tthat is mostly human readable. The generation and parsing of the \n\t\tvarious data types are done through the TypeConverter classes \n\t\tassociated with the data types.\n\n\t\tExample:\n\n\t\t... ado.net/XML headers & schema ...\n\t\t<resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n\t\t<resheader name=\"version\">1.3</resheader>\n\t\t<resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n\t\t<resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n\t\t<data name=\"Name1\">this is my long string</data>\n\t\t<data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n\t\t<data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n\t\t\t[base64 mime encoded serialized .NET Framework object]\n\t\t</data>\n\t\t<data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n\t\t\t[base64 mime encoded string representing a byte array form of the .NET Framework object]\n\t\t</data>\n\n\t\tThere are any number of \"resheader\" rows that contain simple \n\t\tname/value pairs.\n\n\t\tEach data row contains a name, and value. The row also contains a \n\t\ttype or mimetype. Type corresponds to a .NET class that support \n\t\ttext/value conversion through the TypeConverter architecture. \n\t\tClasses that don't support this are serialized and stored with the \n\t\tmimetype set.\n\n\t\tThe mimetype is used for serialized objects, and tells the \n\t\tResXResourceReader how to depersist the object. This is currently not \n\t\textensible. For a given mimetype the value must be set accordingly:\n\n\t\tNote - application/x-microsoft.net.object.binary.base64 is the format \n\t\tthat the ResXResourceWriter will generate, however the reader can \n\t\tread any of the formats listed below.\n\n\t\tmimetype: application/x-microsoft.net.object.binary.base64\n\t\tvalue   : The object must be serialized with \n\t\t\t: System.Serialization.Formatters.Binary.BinaryFormatter\n\t\t\t: and then encoded with base64 encoding.\n\n\t\tmimetype: application/x-microsoft.net.object.soap.base64\n\t\tvalue   : The object must be serialized with \n\t\t\t: System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n\t\t\t: and then encoded with base64 encoding.\n\n\t\tmimetype: application/x-microsoft.net.object.bytearray.base64\n\t\tvalue   : The object must be serialized into a byte array \n\t\t\t: using a System.ComponentModel.TypeConverter\n\t\t\t: and then encoded with base64 encoding.\n\t-->\n\t\n\t<xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n\t\t<xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n\t\t\t<xsd:complexType>\n\t\t\t\t<xsd:choice maxOccurs=\"unbounded\">\n\t\t\t\t\t<xsd:element name=\"data\">\n\t\t\t\t\t\t<xsd:complexType>\n\t\t\t\t\t\t\t<xsd:sequence>\n\t\t\t\t\t\t\t\t<xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t\t<xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n\t\t\t\t\t\t\t</xsd:sequence>\n\t\t\t\t\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t<xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n\t\t\t\t\t\t\t<xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n\t\t\t\t\t\t</xsd:complexType>\n\t\t\t\t\t</xsd:element>\n\t\t\t\t\t<xsd:element name=\"resheader\">\n\t\t\t\t\t\t<xsd:complexType>\n\t\t\t\t\t\t\t<xsd:sequence>\n\t\t\t\t\t\t\t\t<xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t</xsd:sequence>\n\t\t\t\t\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n\t\t\t\t\t\t</xsd:complexType>\n\t\t\t\t\t</xsd:element>\n\t\t\t\t</xsd:choice>\n\t\t\t</xsd:complexType>\n\t\t</xsd:element>\n\t</xsd:schema>\n\t<resheader name=\"resmimetype\">\n\t\t<value>text/microsoft-resx</value>\n\t</resheader>\n\t<resheader name=\"version\">\n\t\t<value>1.3</value>\n\t</resheader>\n\t<resheader name=\"reader\">\n\t\t<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n\t</resheader>\n\t<resheader name=\"writer\">\n\t\t<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n\t</resheader>\n\t<data name=\"RdlDesktop_Error_ServerrootMustSpecified\" xml:space=\"preserve\">\n    <value>'serverroot' must be specified in the config.xml file.</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesktop/Resources/Strings.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"RdlDesktop_Error_ServerrootMustSpecified\" xml:space=\"preserve\">\n    <value>В файле config.xml должен быть указан параметр.</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlDesktop/config.xml",
    "content": "<?xml version='1.0' encoding='UTF-8' ?>\n<config>\n\t<localhostonly>true</localhostonly>\t<!-- change to 'false' if you want other machine to access -->\n\t<port>8080</port>\n\t<serverroot>C:\\WebServices\\RDL Files</serverroot>\n\t<cachedirectory>tempreports</cachedirectory>\n\t<tracelevel>0</tracelevel>\n\t<maxreadcache>100</maxreadcache>\n\t<maxreadcacheentrysize>100000</maxreadcacheentrysize>\n\t<mimetypes>   <!-- If a mimetype doesn't show in this list; the server won't show it\n\t\t\t\t\t\tin directory lists and gets on the file will get a 404 not found.\n\t\t\t\t\t\tThis can be used as an additional layer of security by eliminating\n\t\t\t\t\t\tfiles types that shouldn't be served.   Note: html, gif, png, rdl, xml, pdf\n\t\t\t\t\t\tshould always be in this list. -->\n\t\t<mimetype>\n\t\t\t<extension>html</extension>\n\t\t\t<type>text/html</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>htm</extension>\n\t\t\t<type>text/html</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>mht</extension>\n\t\t\t<type>message/rfc822</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>mhtml</extension>\n\t\t\t<type>message/rfc822</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>xml</extension>\n\t\t\t<type>application/xml</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>pdf</extension>\n\t\t\t<type>application/pdf</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>xhtml</extension>\n\t\t\t<type>application/xhtml+xml</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>gif</extension>\n\t\t\t<type>image/gif</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>jpeg</extension>\n\t\t\t<type>image/jpeg</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>jpg</extension>\n\t\t\t<type>image/jpeg</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>jpe</extension>\n\t\t\t<type>image/jpeg</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>png</extension>\n\t\t\t<type>image/png</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>txt</extension>\n\t\t\t<type>text/plain</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>rtf</extension>\n\t\t\t<type>text/richtext</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>tiff</extension>\n\t\t\t<type>image/tiff</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>tif</extension>\n\t\t\t<type>image/tiff</type>\n\t\t</mimetype>\n\t\t<mimetype>\n\t\t\t<extension>rdl</extension>\n\t\t\t<type>application/rdl</type>\n\t\t</mimetype>\n\t</mimetypes>\n</config>"
  },
  {
    "path": "RdlEngine/Definition/Action.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Action definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class Action : ReportLink\n\t{\n\t\tExpression _Hyperlink;\t// (URL)An expression that evaluates to the URL of the hyperlink\n\t\tDrillthrough _Drillthrough;\t// The drillthrough report that should be executed\n\t\t\t\t\t\t\t\t\t// by clicking on the hyperlink\n\t\tExpression _BookmarkLink;\t// (string)\n\t\t\t\t\t\t\t\t//An expression that evaluates to the ID of a\n\t\t\t\t\t\t\t\t//bookmark within the report to go to when this\n\t\t\t\t\t\t\t\t//report item is clicked on.\n\t\t\t\t\t\t\t\t//(If no bookmark with this ID is found, the link\n\t\t\t\t\t\t\t\t//will not be included in the report. If the\n\t\t\t\t\t\t\t\t//bookmark is hidden, the link will go to the start\n\t\t\t\t\t\t\t\t//of the page the bookmark is on. If multiple\n\t\t\t\t\t\t\t\t//bookmarks with this ID are found, the link will\n\t\t\t\t\t\t\t\t//go to the first one)\t\t\n\t\t// Constructor\n\t\tinternal Action(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Hyperlink = null;\n\t\t\t_Drillthrough = null;\t\n\t\t\t_BookmarkLink = null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"hyperlink\":\n\t\t\t\t\t\t_Hyperlink = new Expression(r, this, xNodeLoop, ExpressionType.URL);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"drillthrough\":\n\t\t\t\t\t\t_Drillthrough = new Drillthrough(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"bookmarklink\":\n\t\t\t\t\t\t_BookmarkLink = new Expression(r, this, xNodeLoop, ExpressionType.String);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Hyperlink != null)\n                await _Hyperlink.FinalPass();\n\t\t\tif (_Drillthrough != null)\n                await _Drillthrough.FinalPass();\n\t\t\tif (_BookmarkLink != null)\n                await _BookmarkLink.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Expression Hyperlink\n\t\t{\n\t\t\tget { return _Hyperlink; }\n\t\t\tset { _Hyperlink = value; }\n\t\t}\n\n\t\tinternal async Task<String> HyperLinkValue(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Hyperlink == null)\n\t\t\t\treturn null;\n\n\t\t\treturn await _Hyperlink.EvaluateString(rpt, r);\n\t\t}\n\n\t\tinternal Drillthrough Drill\n\t\t{\n\t\t\tget { return _Drillthrough; }\n\t\t\tset { _Drillthrough = value; }\n\t\t}\n\n\t\tinternal Expression BookmarkLink\n\t\t{\n\t\t\tget { return _BookmarkLink; }\n\t\t\tset { _BookmarkLink = value; }\n\t\t}\n\n\t\tinternal async Task<String> BookmarkLinkValue(Report rpt, Row r)\n\t\t{\n\t\t\tif (_BookmarkLink == null)\n\t\t\t\treturn null;\n\n\t\t\treturn await _BookmarkLink.EvaluateString(rpt, r);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Axis.cs",
    "content": "using System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Axis definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class Axis : ReportLink\n\t{\n\t\tbool _Visible;\t// Whether the axis labels are displayed. Defaults to false.\n\t\tStyle _Style;\t// Defines text style properties for the axis labels\n\t\t// and line style properties for the axis line.\n\t\tTitle _Title;\t// Defines a title for the First Y axis\n        Title _Title2;  // 20022008 AJM GJL Defines a title for the Second Y axis\n\t\tbool _Margin;\t// Indicates whether an axis margin will be\n\t\t//\tcreated. The size of the margin is automatically\n\t\t//\tgenerated based on the Scale and the number of\n\t\t//\tdata points. Defaults to false.\n\t\tAxisTickMarksEnum _MajorTickMarks; // None (Default)\n\t\tAxisTickMarksEnum _MinorTickMarks; // None (Default)\n\t\tChartGridLines _MajorGridLines;\t// Indicates major gridlines should be displayed for this axis.\n\t\tChartGridLines _MinorGridLines;\t// Indicates minor gridlines should be displayed for this axis.\n\t\tExpression _MajorInterval;\t\t// Unit for major gridlines/tickmarks\n\t\t// If omitted, the axis is autodivided\n\t\tExpression _MinorInterval;\t\t// Unit for minor gridlines/tickmarks\n\t\t// If omitted, the axis is autodivided\n\t\tbool _Reverse;\t// If false (Default) the axis is plotted normally, if\n\t\t//  true its direction is reversed.\n\t\tint _CrossAt;\t//  Value at which to cross the other axis\n\t\t// If omitted, uses the default behavior for the chart type.\n\t\tbool _Interlaced;\t// If this property is true then strip lines are drawn\n\t\t//every other grid line interval for the axis. If grid\n\t\t//lines are not used for the axis then the axis� tick\n\t\t//marks or labels are used to determine the\n\t\t//interlaced strip lines interval.\n\t\t//Defaults to False.\n\t\tbool _Scalar;\t// Indicates the values along this axis are scalar\n\t\t//values (i.e. numeric or date) which should be\n\t\t//displayed on the chart in a continuous axis.\n\t\t//Scalar cannot be true if the axis has more than\n\t\t//one grouping, if that grouping is static or has\n\t\t//more than one group expression or if the axis\n\t\t//values have a label.\n\t\tExpression _Min;\t\t// Minimum value for the axis\n\t\t// If omitted, the axis autoscales\n\t\tExpression _Max;\t\t// Maximum value for the axis\n\t\t// If omitted, the axis autoscales\n\t\tbool _LogScale;\t// Whether the axis is logarithmic. Default is false.\t\t\n\t    // If checked the axis shows gridlines at change of each month WP 12 May 2008.  Default is false\n        bool _Month;\n\n        \n        bool _CanOmit=false;\t// When display values don't fit, is it OK to drop some from display\n\n\t\tinternal Axis(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Visible =false;\n\t\t\t_Style = null;\n\t\t\t_Title = null;\n            _Title2 = null;// 20022008 AJM GJL\n\t\t\t_Margin = false;\n\t\t\t_MajorTickMarks = AxisTickMarksEnum.None;\n\t\t\t_MinorTickMarks = AxisTickMarksEnum.None;\n\t\t\t_MajorGridLines = null;\n\t\t\t_MinorGridLines = null;\n\t\t\t_MajorInterval = null;\n\t\t\t_MinorInterval =null;\n\t\t\t_Reverse = false;\n\t\t\t_CrossAt = 0;\n\t\t\t_Interlaced = false;\n\t\t\t_Scalar=false;\n\t\t\t_Min=null;\n\t\t\t_Max=null;\n\t\t\t_LogScale=false;\n            _Month = false; //12052008 WP\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"visible\":\n\t\t\t\t\t\t_Visible = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"style\":\n\t\t\t\t\t\t_Style = new Style(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"title\":\n\t\t\t\t\t\t_Title = new Title(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n                    // 20022008 AJM GJL - Second Y axis\n                    case \"title2\":\n                    case \"fyi:title2\":\n                        _Title2 = new Title(r, this, xNodeLoop);\n                       break;\n\t\t\t\t\tcase \"margin\":\n\t\t\t\t\t\t_Margin = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"majortickmarks\":\n\t\t\t\t\t\t_MajorTickMarks = AxisTickMarks.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"minortickmarks\":\n\t\t\t\t\t\t_MinorTickMarks = AxisTickMarks.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"majorgridlines\":\n\t\t\t\t\t\t_MajorGridLines = new ChartGridLines(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"minorgridlines\":\n\t\t\t\t\t\t_MinorGridLines = new ChartGridLines(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"majorinterval\":\n\t\t\t\t\t\t_MajorInterval = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.Integer);\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Axis element MajorInterval is currently ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"minorinterval\":\n\t\t\t\t\t\t_MinorInterval = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.Integer);\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Axis element MinorInterval is currently ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"reverse\":\n\t\t\t\t\t\t_Reverse = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"crossat\":\n\t\t\t\t\t\t_CrossAt = XmlUtil.Integer(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"interlaced\":\n\t\t\t\t\t\t_Interlaced = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"scalar\":\n\t\t\t\t\t\t_Scalar = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"min\":\n\t\t\t\t\t\t_Min = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.Integer);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"max\":\n\t\t\t\t\t\t_Max = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.Integer);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"logscale\":\n\t\t\t\t\t\t_LogScale = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n                    case \"month\":\n                    case \"fyi:month\":\n                        _Month = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n                        break;\n                    case \"fyi:canomit\":\n                        _CanOmit = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n                        break;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Axis element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_MajorInterval != null)\n                await _MajorInterval.FinalPass();\n\t\t\tif (_MinorInterval != null)\n                await _MinorInterval.FinalPass();\n\t\t\tif (_Max != null)\n                await _Max.FinalPass();\n\t\t\tif (_Min != null)\n                await _Min.FinalPass();\n\t\t\tif (_Style != null)\n                await _Style.FinalPass();\n\t\t\tif (_Title != null)\n                await _Title.FinalPass();\n\t\t\t// 20022008 AJM GJL - Second Y axis\n            if (_Title2 != null)\n                await _Title2.FinalPass();\n\t\t\tif (_MajorGridLines != null)\n                await _MajorGridLines.FinalPass();\n\t\t\tif (_MinorGridLines != null)\n                await _MinorGridLines.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal bool Visible\n\t\t{\n\t\t\tget { return  _Visible; }\n\t\t\tset {  _Visible = value; }\n\t\t}\n\n\t\tinternal Style Style\n\t\t{\n\t\t\tget { return  _Style; }\n\t\t\tset {  _Style = value; }\n\t\t}\n\n\t\tinternal Title Title\n\t\t{\n\t\t\tget { return  _Title; }\n\t\t\tset {  _Title = value; }\n\t\t}\n\t\t// 20022008 AJM GJL - Second Y axis\n        internal Title Title2\n        {\n            get { return _Title2; }\n            set { _Title2 = value; }\n        } \n\n\t\tinternal bool Margin\n\t\t{\n\t\t\tget { return  _Margin; }\n\t\t\tset {  _Margin = value; }\n\t\t}\n\n\t\tinternal AxisTickMarksEnum MajorTickMarks\n\t\t{\n\t\t\tget { return  _MajorTickMarks; }\n\t\t\tset {  _MajorTickMarks = value; }\n\t\t}\n\n\t\tinternal AxisTickMarksEnum MinorTickMarks\n\t\t{\n\t\t\tget { return  _MinorTickMarks; }\n\t\t\tset {  _MinorTickMarks = value; }\n\t\t}\n\n\t\tinternal ChartGridLines MajorGridLines\n\t\t{\n\t\t\tget { return  _MajorGridLines; }\n\t\t\tset {  _MajorGridLines = value; }\n\t\t}\n\n\t\tinternal ChartGridLines MinorGridLines\n\t\t{\n\t\t\tget { return  _MinorGridLines; }\n\t\t\tset {  _MinorGridLines = value; }\n\t\t}\n\n\t\tinternal Expression MajorInterval\n\t\t{\n\t\t\tget { return  _MajorInterval; }\n\t\t\tset {  _MajorInterval = value; }\n\t\t}\n\n\t\tinternal Expression MinorInterval\n\t\t{\n\t\t\tget { return  _MinorInterval; }\n\t\t\tset {  _MinorInterval = value; }\n\t\t}\n\n\t\tinternal bool Reverse\n\t\t{\n\t\t\tget { return  _Reverse; }\n\t\t\tset {  _Reverse = value; }\n\t\t}\n\n\t\tinternal int CrossAt\n\t\t{\n\t\t\tget { return  _CrossAt; }\n\t\t\tset {  _CrossAt = value; }\n\t\t}\n\n\t\tinternal bool Interlaced\n\t\t{\n\t\t\tget { return  _Interlaced; }\n\t\t\tset {  _Interlaced = value; }\n\t\t}\n\n\t\tinternal bool Scalar\n\t\t{\n\t\t\tget { return  _Scalar; }\n\t\t\tset {  _Scalar = value; }\n\t\t}\n\n\t\tinternal Expression Min\n\t\t{\n\t\t\tget { return  _Min; }\n\t\t\tset {  _Min = value; }\n\t\t}\n\n\t\tinternal Expression Max\n\t\t{\n\t\t\tget { return  _Max; }\n\t\t\tset {  _Max = value; }\n\t\t}\n        //GJL 010308 --- Changed from int... We may want to start / stop a chart on a decimal\n\t\tinternal async Task<double> MaxEval(Report r, Row row)\n\t\t{\n\t\t\tif (_Max == null)\n\t\t\t\treturn (double)int.MinValue;\n\t\t\treturn await _Max.EvaluateDouble(r, row);\n\t\t}\n\n\t\tinternal async Task<double> MinEval(Report r, Row row)\n\t\t{\n\t\t\tif (_Min == null)\n                return (double)int.MinValue;\n\t\t\treturn await _Min.EvaluateDouble(r, row);\n\t\t}\n        //WP 12 may 2008 -- set up month gridlines for report\n        internal bool Month\n        {\n            get { return _Month; }\n            set { _Month = value; }\n\t\t}\n\n\t\tinternal bool LogScale\n\t\t{\n\t\t\tget { return  _LogScale; }\n\t\t\tset {  _LogScale = value; }\n\t\t}\n\n        internal bool CanOmit\n        {\n            get { return _CanOmit; }\n            set { _CanOmit = value; }\n        }\n    }\t\n}\n"
  },
  {
    "path": "RdlEngine/Definition/AxisTickMarks.cs",
    "content": "using System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// AxisTickMarks definition and processing.\n\t///</summary>\n\tpublic enum AxisTickMarksEnum\n\t{\n\t\tNone,\n\t\tInside,\n\t\tOutside,\n\t\tCross\n\t}\n\n\tpublic class AxisTickMarks\n\t{\n        static public AxisTickMarksEnum GetStyle(string s)\n        {\n            return AxisTickMarks.GetStyle(s, null);\n        }\n\n\t\tstatic internal AxisTickMarksEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tAxisTickMarksEnum rs;\n\n\t\t\tswitch (s.ToLowerInvariant())\n\t\t\t{\t\t\n\t\t\t\tcase \"none\":\n\t\t\t\t\trs = AxisTickMarksEnum.None;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"inside\":\n\t\t\t\t\trs = AxisTickMarksEnum.Inside;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"outside\":\n\t\t\t\t\trs = AxisTickMarksEnum.Outside;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"cross\":\n\t\t\t\t\trs = AxisTickMarksEnum.Cross;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\n                    if (rl != null)\n\t\t\t\t\t    rl.LogError(4, \"Unknown Axis Tick Mark '\" + s + \"'.  None assumed.\");\n\t\t\t\t\trs = AxisTickMarksEnum.None;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn rs;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Body.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.IO;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Body definition and processing.  Contains the elements of the report body.\n\t///</summary>\n\t[Serializable]\n\tinternal class Body : ReportLink\n\t{\n\t\tReportItems _ReportItems;\t\t// The region that contains the elements of the report body\n\t\tRSize _Height;\t\t// Height of the body\n\t\tint _Columns;\t\t// Number of columns for the report\n\t\t\t\t\t\t\t// Default: 1. Min: 1. Max: 1000\n\t\tRSize _ColumnSpacing; // Size Spacing between each column in multi-column\n\t\t\t\t\t\t\t// output \tDefault: 0.5 in\n\t\tStyle _Style;\t\t// Default style information for the body\t\n\t\t\n\t\tinternal Body(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_ReportItems = null;\n\t\t\t_Height = null;\n\t\t\t_Columns = 1;\n\t\t\t_ColumnSpacing=null;\n\t\t\t_Style=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"reportitems\":\n\t\t\t\t\t\t_ReportItems = new ReportItems(r, this, xNodeLoop);\t// need a class for this\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"height\":\n\t\t\t\t\t\t_Height = new RSize(r, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"columns\":\n\t\t\t\t\t\t_Columns = XmlUtil.Integer(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"columnspacing\":\n\t\t\t\t\t\t_ColumnSpacing = new RSize(r, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"style\":\n\t\t\t\t\t\t_Style = new Style(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Body element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Height == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"Body Height not specified.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_ReportItems != null)\n\t\t\t\tawait _ReportItems.FinalPass();\n\t\t\tif (_Style != null)\n                await _Style.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal async Task Run(IPresent ip, Row row)\n\t\t{\n\t\t\tip.BodyStart(this);\n\n\t\t\tif (_ReportItems != null)\n                await _ReportItems.Run(ip, null);\t// not sure about the row here?\n\n\t\t\tip.BodyEnd(this);\n\t\t\treturn ;\n\t\t}\n\n\t\tinternal async Task RunPage(Pages pgs)\n\t\t{\n\t\t\tif (OwnerReport.Subreport == null)\n\t\t\t{\t// Only set bottom of pages when on top level report\n\t\t\t\tpgs.BottomOfPage = OwnerReport.BottomOfPage;\n\t\t\t\tpgs.CurrentPage.YOffset = OwnerReport.TopOfPage;\n\t\t\t}\n\t\t\tthis.SetCurrentColumn(pgs.Report, 0);\n\n\t\t\tif (_ReportItems != null)\n                await _ReportItems.RunPage(pgs, null, OwnerReport.LeftMargin.Points);\n\n\t\t\treturn ;\n\t\t}\n\n\t\tinternal ReportItems ReportItems\n\t\t{\n\t\t\tget { return  _ReportItems; }\n\t\t}\n\n\t\tinternal RSize Height\n\t\t{\n\t\t\tget { return  _Height; }\n\t\t\tset {  _Height = value; }\n\t\t}\n\n\t\tinternal int Columns\n\t\t{\n\t\t\tget { return  _Columns; }\n\t\t\tset {  _Columns = value; }\n\t\t}\n\n\t\tinternal int GetCurrentColumn(Report rpt)\n\t\t{\n\t\t\tOInt cc = rpt.Cache.Get(this, \"currentcolumn\") as OInt;\n\t\t\treturn cc == null? 0: cc.i;\n\t\t}\n\n\t\tinternal int IncrCurrentColumn(Report rpt)\n\t\t{\n\t\t\tOInt cc = rpt.Cache.Get(this, \"currentcolumn\") as OInt;\n\t\t\tif (cc == null)\n\t\t\t{\n\t\t\t\tSetCurrentColumn(rpt, 0);\n\t\t\t\tcc = rpt.Cache.Get(this, \"currentcolumn\") as OInt;\n\t\t\t}\n\t\t\tcc.i++;\n\t\t\treturn cc.i;\n\t\t}\n\n\t\tinternal void SetCurrentColumn(Report rpt, int col)\n\t\t{\n\t\t\tOInt cc = rpt.Cache.Get(this, \"currentcolumn\") as OInt;\n\t\t\tif (cc == null)\n\t\t\t\trpt.Cache.AddReplace(this, \"currentcolumn\", new OInt(col));\n\t\t\telse\n\t\t\t\tcc.i = col;\n\t\t}\n\n\t\tinternal RSize ColumnSpacing\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_ColumnSpacing == null)\n\t\t\t\t\t_ColumnSpacing = new RSize(this.OwnerReport, \".5 in\");\n\n\t\t\t\treturn  _ColumnSpacing; \n\t\t\t}\n\t\t\tset {  _ColumnSpacing = value; }\n\t\t}\n\n\t\tinternal Style Style\n\t\t{\n\t\t\tget { return  _Style; }\n\t\t\tset {  _Style = value; }\n\t\t}\n\n        internal void RemoveWC(Report rpt)\n        {\n            if (_ReportItems == null)\n                return;\n\n            foreach (ReportItem ri in this._ReportItems.Items)\n            {\n                ri.RemoveWC(rpt);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/CategoryAxis.cs",
    "content": "using System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// CategoryAxis definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class CategoryAxis : ReportLink\n\t{\n\t\tAxis _Axis;\t\t// Display properties for the category axis\t\n\t\n\t\tinternal CategoryAxis(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Axis = null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"axis\":\n\t\t\t\t\t\t_Axis = new Axis(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown CategoryAxis element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Axis != null)\n                await _Axis.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\n\t\tinternal Axis Axis\n\t\t{\n\t\t\tget { return  _Axis; }\n\t\t\tset {  _Axis = value; }\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/CategoryGrouping.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// CategoryGrouping definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class CategoryGrouping : ReportLink\n\t{\n\t\t// A CategoryGrouping must have either DynamicCategories or StaticCategories\n\t\t//  but can't have both.\n\t\tDynamicCategories _DynamicCategories;\t// Dynamic Category headings for this grouping\n\t\tStaticCategories _StaticCategories;\t\t// Category headings for this grouping\t\t\n\t\n\t\tinternal CategoryGrouping(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_DynamicCategories=null;\n\t\t\t_StaticCategories=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"dynamiccategories\":\n\t\t\t\t\t\t_DynamicCategories = new DynamicCategories(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"staticcategories\":\n\t\t\t\t\t\t_StaticCategories = new StaticCategories(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown CategoryGrouping element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ((_DynamicCategories == null && _StaticCategories == null) ||\n\t\t\t\t(_DynamicCategories != null && _StaticCategories != null))\n\t\t\t\tOwnerReport.rl.LogError(8, \"CategoryGrouping requires either DynamicCategories element or StaticCategories element, but not both.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_DynamicCategories != null)\n                await _DynamicCategories.FinalPass();\n\t\t\tif (_StaticCategories != null)\n                await _StaticCategories.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal DynamicCategories DynamicCategories\n\t\t{\n\t\t\tget { return  _DynamicCategories; }\n\t\t\tset {  _DynamicCategories = value; }\n\t\t}\n\n\t\tinternal StaticCategories StaticCategories\n\t\t{\n\t\t\tget { return  _StaticCategories; }\n\t\t\tset {  _StaticCategories = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/CategoryGroupings.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// CategoryGroupings definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class CategoryGroupings : ReportLink\n\t{\n        List<CategoryGrouping> _Items;\t\t\t// list of category groupings\n\n\t\tinternal CategoryGroupings(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tCategoryGrouping cg;\n            _Items = new List<CategoryGrouping>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"categorygrouping\":\n\t\t\t\t\t\tcg = new CategoryGrouping(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcg=null;\t\t// don't know what this is\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (cg != null)\n\t\t\t\t\t_Items.Add(cg);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For CategoryGroupings at least one CategoryGrouping is required.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (CategoryGrouping cg in _Items)\n\t\t\t{\n                await cg.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<CategoryGrouping> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Chart.cs",
    "content": "using System;\nusing System.Xml;\nusing System.IO;\nusing System.Threading.Tasks;\n\n\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\nusing Imaging = Majorsilence.Drawing.Imaging;\n#else\nusing Draw2 = System.Drawing;\nusing Imaging = System.Drawing.Imaging;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    ///<summary>\n    /// Defines the Chart.  A DataRegion and ReportItem\n    ///</summary>\n    [Serializable]\n\tinternal class Chart : DataRegion\n\t{\n\t\tstatic readonly Imaging.ImageFormat IMAGEFORMAT = Imaging.ImageFormat.Jpeg;\n\t\tChartTypeEnum _Type;\t// Generic Type of the chart Default: Column\n        Expression _Subtype;\t// Available subtypes (and default subtype) depends on Type //AJM GJL 14022008 Allowing Expressions\n\t\tSeriesGroupings _SeriesGroupings;\t// Set of series groupings for the chart\n\t\tCategoryGroupings _CategoryGroupings;\t// Set of category (X) groupings for the chart\n\t\tChartData _ChartData;\t// Defines the data values for the chart\n\t\tLegend _Legend;\t\t\t\t// Defines the chart legend\n\t\tCategoryAxis _CategoryAxis;\t// Defines the category axis\n\t\tValueAxis _ValueAxis;\t\t// Defines the value axis\n\t\tTitle _Title;\t\t\t\t// Defines a title for the chart\n\t\tint _PointWidth;\t\t\t//Non-zero Percent width for bars and\n\t\t\t\t\t\t\t\t\t//\tcolumns. A value of 100 represents 100%\n\t\t\t\t\t\t\t\t\t//\tof the distance between points (i.e. a\n\t\t\t\t\t\t\t\t\t//\tvalue greater than 100 will cause columns\n\t\t\t\t\t\t\t\t\t//\tto overlap each other).\n\t\tExpression _Palette;\t\t// Determines the color palette for the chart items. //AJM GJL 14022008 Allowing Expressions\n\t\tThreeDProperties _ThreeDProperties;\t//Properties for a 3D chart layout.\n\t\tPlotArea _PlotArea;\t\t\t//Properties for the plot area\n\t\tChartElementOutputEnum _ChartElementOutput;\t// Indicates whether a DataPoints element\n\t\t\t\t\t\t\t\t\t// containing the chart data points should\n\t\t\t\t\t\t\t\t\t// appear in a data rendering.  Default: Output\n\t\tMatrix _ChartMatrix;\t\t// Pseudo matrix to calculate chart data\n        Expression _isHYNEsWonderfulVector; // 14 Aug 08 AJM GJL: If true we will use the wonderful HYNE vector imaging for better, clearer and smaller file sizes.\n        internal Expression _showTooltips; //3 Oct 08 GJL: Show the tooltips for each data point\n        internal Expression _showTooltipsX;\n        internal Expression _ToolTipYFormat;\n        internal Expression _ToolTipXFormat;\n\t\tinternal Chart(ReportDefn r, ReportLink p, XmlNode xNode):base(r, p, xNode)\n\t\t{\n\t\t\t\n            _Type=ChartTypeEnum.Column;\n\t\t\t_Subtype= new Expression(r,p,\"Plain\",ExpressionType.Enum); //AJM GJL 14082008 Allowing Expression\n\t\t\t_SeriesGroupings=null;\n\t\t\t_CategoryGroupings=null;\n\t\t\t_ChartData=null;\n\t\t\t_Legend=null;\n\t\t\t_CategoryAxis=null;\n\t\t\t_ValueAxis=null;\n\t\t\t_Title=null;\n\t\t\t_PointWidth=0;\n            _Palette = new Expression(r, p, \"Default\", ExpressionType.Enum); //AJM GJL 14082008 Allowing Expression\n\t\t\t_ThreeDProperties=null;\n\t\t\t_PlotArea=null;\n\t\t\t_ChartElementOutput=ChartElementOutputEnum.Output;\n            _isHYNEsWonderfulVector = new Expression(r, p, \"False\", ExpressionType.Boolean);\n            _showTooltips = new Expression(r,p,\"False\",ExpressionType.Boolean);\n            _showTooltipsX = new Expression(r, p, \"False\", ExpressionType.Boolean);\n            _ToolTipXFormat = new Expression(r, p, \"\", ExpressionType.String);\n            _ToolTipYFormat = new Expression(r, p, \"\", ExpressionType.String);\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"type\":\n\t\t\t\t\t\t_Type = ChartType.GetStyle(xNodeLoop.InnerText);\n\t\t\t\t\t\tif (_Type == ChartTypeEnum.Stock ||\n\t\t\t\t\t\t\t_Type == ChartTypeEnum.Unknown)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tOwnerReport.rl.LogError(8, \"Chart type '\" + xNodeLoop.InnerText + \"' is not currently supported.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subtype\":\n                        _Subtype = new Expression(r, p, xNodeLoop, ExpressionType.Enum); //AJM GJL 14082008\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"seriesgroupings\":\n\t\t\t\t\t\t_SeriesGroupings = new SeriesGroupings(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"categorygroupings\":\n\t\t\t\t\t\t_CategoryGroupings = new CategoryGroupings(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"chartdata\":\n\t\t\t\t\t\t_ChartData = new ChartData(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"legend\":\n\t\t\t\t\t\t_Legend = new Legend(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"categoryaxis\":\n\t\t\t\t\t\t_CategoryAxis = new CategoryAxis(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"valueaxis\":\n\t\t\t\t\t\t_ValueAxis = new ValueAxis(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"title\":\n\t\t\t\t\t\t_Title = new Title(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"pointwidth\":\n\t\t\t\t\t\t_PointWidth = XmlUtil.Integer(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"palette\":\n                        _Palette = new Expression(r, p, xNodeLoop, ExpressionType.Enum); //AJM GJL 14082008\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"threedproperties\":\n\t\t\t\t\t\t_ThreeDProperties = new ThreeDProperties(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"plotarea\":\n\t\t\t\t\t\t_PlotArea = new PlotArea(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"chartelementoutput\":\n\t\t\t\t\t\t_ChartElementOutput = Majorsilence.Reporting.Rdl.ChartElementOutput.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n                    case \"hynewonderfulvector\": //AJM GJL 14082008\n                    case \"renderasvector\":\n                    case \"fyi:renderasvector\":\n                        _isHYNEsWonderfulVector = new Expression(r,p,xNodeLoop,ExpressionType.Boolean);\n                        break;\n                    case \"fyi:tooltip\":\n                        _showTooltips = new Expression(r, p, xNodeLoop, ExpressionType.Boolean);\n                        break;\n                    case \"fyi:tooltipx\":\n                        _showTooltipsX = new Expression(r, p, xNodeLoop, ExpressionType.Boolean);\n                        break;\n                    case \"fyi:tooltipyformat\":\n                        _ToolTipYFormat = new Expression(r, p, xNodeLoop, ExpressionType.Boolean);\n                        break;\n                    case \"fyi:tooltipxformat\":\n                        _ToolTipXFormat = new Expression(r, p, xNodeLoop, ExpressionType.Boolean);\n                        break;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tif (DataRegionElement(xNodeLoop))\t// try at DataRegion level\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Chart element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tDataRegionFinish();\t\t\t// Tidy up the DataRegion\n\n\t\t\tif (_SeriesGroupings == null && _CategoryGroupings == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"Chart requires either the SeriesGroupings element or CategoryGroupings element or both.\");\n\n            if (OwnerReport.rl.MaxSeverity > 4)     // if we already have severe error don't check for these additional issues\n                return;\n\n            // Do some specific checking based on the type of the Chart specified\n            switch (_Type)\n            {\n                case ChartTypeEnum.Bubble:\n                    if (_ChartData == null || \n                        _ChartData.Items[0].Datapoints.Items[0].DataValues.Items.Count != 3)\n                        OwnerReport.rl.LogError(8, \"Bubble charts require three DataPoints defined.\");\n                    break;\n                case ChartTypeEnum.Scatter:\n                    if (_ChartData == null ||\n                        _ChartData.Items[0].Datapoints.Items[0].DataValues.Items.Count != 2)\n                        OwnerReport.rl.LogError(8, \"Scatter charts require two DataPoints defined.\");\n                    break;\n                default:\n                    break;\n            }\n            \n        }\n\n\t\tasync override internal Task FinalPass()\n\t\t{\n            await base.FinalPass();\n\t\t\tif (_SeriesGroupings != null)\n                await _SeriesGroupings.FinalPass();\n\t\t\tif (_CategoryGroupings != null)\n                await _CategoryGroupings.FinalPass();\n\t\t\tif (_ChartData != null)\n                await _ChartData.FinalPass();\n\t\t\tif (_Legend != null)\n                await _Legend.FinalPass();\n\t\t\tif (_CategoryAxis != null)\n                await _CategoryAxis.FinalPass();\n\t\t\tif (_ValueAxis != null)\n                await _ValueAxis.FinalPass();\n\t\t\tif (_Title != null)\n                await _Title.FinalPass();\n\t\t\tif (_ThreeDProperties != null)\n                await _ThreeDProperties.FinalPass();\n\t\t\tif (_PlotArea != null)\n                await _PlotArea.FinalPass();\n\t\t\t//AJM GJL 14082008\n            if (_Palette != null)\n                await _Palette.FinalPass();\n            if (_isHYNEsWonderfulVector != null)\n                await _isHYNEsWonderfulVector.FinalPass();\n            if (_showTooltips != null)\n                await _showTooltips.FinalPass();\n            if (_showTooltipsX != null)\n                await _showTooltipsX.FinalPass();\n            if (_Subtype != null)\n                await _Subtype.FinalPass();\n            if (_ToolTipXFormat != null)\n                await _ToolTipXFormat.FinalPass();\n            if (_ToolTipYFormat != null)\n                await _ToolTipYFormat.FinalPass();\n\n\n\t\t\tif (this.OwnerReport.rl.MaxSeverity < 8)\t// Don't take this step if already have errors\n\t\t\t{\n\t\t\t\t_ChartMatrix = GenerateMatrix();        //   GenerateMatrix() needs no error in defn to date\n                await _ChartMatrix.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\toverride internal async Task Run(IPresent ip, Row row)\n\t\t{\n\t\t\tReport rpt = ip.Report();\n\n\t\t\t_ChartMatrix.RunReset(rpt);\n\t\t\tRows _Data = await GetFilteredData(ip.Report(), row);\n\t\t\tSetMyData(ip.Report(), _Data);\n\n\t\t\tif (!await AnyRows(ip, _Data))\t\t// if no rows, return\n\t\t\t\treturn;\n\n\t\t\t// Build the Chart bitmap, along with data regions\n\t\t\tChartBase cb=null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tcb = await RunChartBuild(rpt, row);\n\n                await ip.Chart(this, row, cb);\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\trpt.rl.LogError(8, string.Format(\"Exception in Chart handling.\\n{0}\\n{1}\", ex.Message, ex.StackTrace));\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (cb != null)\n\t\t\t\t\tcb.Dispose();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\toverride internal async Task RunPage(Pages pgs, Row row)\n\t\t{\n\t\t\tReport rpt = pgs.Report;\n\n\t\t\tif (await IsHidden(pgs.Report, row))\n\t\t\t\treturn;\n\n\t\t\t_ChartMatrix.RunReset(rpt);\n\t\t\tRows _Data = await GetFilteredData(rpt, row);\n\t\t\tSetMyData(rpt, _Data);\n\n\t\t\tSetPagePositionBegin(pgs);\n\n\t\t\tif (!await AnyRowsPage(pgs, _Data))\t\t// if no rows return\n\t\t\t\treturn;\t\t\t\t\t\t//   nothing left to do\n\n\t\t\t// Build the Chart bitmap, along with data regions\n\t\t\tPage p = pgs.CurrentPage;\n\t\t\tChartBase cb=null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tcb = await RunChartBuild(rpt, row);                   // Build the chart\n\n#if DRAWINGCOMPAT\n                p = await RunPage_Bitmap(pgs, row, rpt, cb);\n#else\n\t\t\t    if (!await _isHYNEsWonderfulVector.EvaluateBoolean(rpt,row)) //AJM GJL 14082008 'Classic' Rendering \n                {\n                    p = await RunPage_Bitmap(pgs, row, rpt, cb);\n                }\n                else //Ultimate Rendering - Vector //AJM GJL 14082008\n                {\n                    p = await RunPage_Emf(pgs, row, rpt, cb);\n                }\t\t\n#endif\n\n            }\n            catch (Exception ex)\n\t\t\t{\n\t\t\t\trpt.rl.LogError(8, string.Format(\"Exception in Chart handling.\\n{0}\\n{1}\", ex.Message, ex.StackTrace));\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (cb != null)\n\t\t\t\t\tcb.Dispose();\n\t\t\t}\n\n            return;\n\t\t}\n\n#if !DRAWINGCOMPAT\n        private async Task<Page> RunPage_Emf(Pages pgs, Row row, Report rpt, ChartBase cb)\n        {\n            Page p;\n            var im = cb.Image(rpt); // Grab the image\n                                    //im could still be saved to a bitmap at this point\n                                    //if we were to offer a choice of raster or vector, it would probably\n                                    //be easiest to draw the chart to the EMF and then save as bitmap if needed\n            int height = im.Height;                         // save height and width\n            int width = im.Width;\n            byte[] ba = cb._aStream.ToArray();\n            cb._aStream.Close();\n\n            PageImage pi = new PageImage(Imaging.ImageFormat.Wmf, ba, width, height);\n\n\n            RunPageRegionBegin(pgs);\n\n            await SetPagePositionAndStyle(rpt, pi, row);\n            pi.SI.BackgroundImage = null;   // chart already has the background image\n\n            if (pgs.CurrentPage.YOffset + pi.Y + pi.H >= pgs.BottomOfPage && !pgs.CurrentPage.IsEmpty())\n            {   // force page break if it doesn't fit on the page\n                pgs.NextOrNew();\n                pgs.CurrentPage.YOffset = OwnerReport.TopOfPage;\n                if (this.YParents != null)\n                    pi.Y = 0;\n            }\n\n            p = pgs.CurrentPage;\n\n            //GJL 25072008 - Charts now draw in EMFplus format and not in bitmap. Still using the \"PageImage\" for the positioning\n            //paging etc, but we don't add it to the page.\n            // ******************************************************************************************************************\n            // New EMF Processing... we want to add the EMF Components to the page and not the actual EMF...\n            EMF emf = new EMF(pi.X, pi.Y, width, height);\n            emf.ProcessEMF(ba); //Process takes the bytearray of EMFplus data and breaks it down into lines,ellipses,text,rectangles\n                                //etc... There are still a lot of GDI+ functions I haven't got to (and some I have no intention of getting to!). \n            foreach (PageItem emfItem in emf.PageItems)\n            {\n                p.AddObject(emfItem);\n\n            }\n            // ******************************************************************************************************************\n\n            //p.AddObject(pi);\n            RunPageRegionEnd(pgs);\n            pi.Y += p.YOffset;\n            if (!this.PageBreakAtEnd && !IsTableOrMatrixCell(rpt))\n            {\n                float newY = pi.Y + pi.H;\n                p.YOffset += newY;  // bump the y location\n            }\n            SetPagePositionEnd(pgs, pi.Y + pi.H); //our emf size seems to be bigger than the jpeg...\n            return p;\n        }\n#endif\n\n        private async Task<Page> RunPage_Bitmap(Pages pgs, Row row, Report rpt, ChartBase cb)\n        {\n            Page p;\n            Draw2.Image im = cb.Image(rpt);   // Grab the image\n            int height = im.Height;                         // save height and width\n            int width = im.Width;\n\n            MemoryStream ostrm = new MemoryStream();\n            /* The following is a new image saving logic which will allow for higher \n             * quality images using JPEG with 100% quality\n             * 06122007AJM */\n            Imaging.ImageCodecInfo[] info;\n            info = Imaging.ImageCodecInfo.GetImageEncoders();\n            Imaging.EncoderParameters encoderParameters;\n            encoderParameters = new Imaging.EncoderParameters(1);\n            // 20022008 AJM GJL - Centralised class with global encoder settings\n            encoderParameters.Param[0] = new Imaging.EncoderParameter(Imaging.Encoder.Quality, ImageQualityManager.ChartImageQuality);\n            Imaging.ImageCodecInfo codec = null;\n            for (int i = 0; i < info.Length; i++)\n            {\n                if (info[i].FormatDescription == \"JPEG\")\n                {\n                    codec = info[i];\n                    break;\n                }\n            }\n            // NOTE: if you are on linux and see \"System.ArgumentException: A null reference or invalid value was found [GDI+ status: InvalidParameter]\"\n            // then you need to install a newer libgdiplus package. This should work on Ubuntu 24.04 or newer \"sudo apt-get install libgdiplus\"\n            im.Save(ostrm, codec, encoderParameters);\n            // 06122007AJM The follow has been replaced with the code above\n            //im.Save(ostrm, info);\t// generate a jpeg   TODO: get png to work with pdf\n\n            byte[] ba = ostrm.ToArray();\n            ostrm.Close();\n            PageImage pi = new PageImage(IMAGEFORMAT, ba, width, height);   // Create an image\n\n            RunPageRegionBegin(pgs);\n\n            await SetPagePositionAndStyle(rpt, pi, row);\n            pi.SI.BackgroundImage = null;   // chart already has the background image\n\n            if (pgs.CurrentPage.YOffset + pi.Y + pi.H >= pgs.BottomOfPage && !pgs.CurrentPage.IsEmpty())\n            {   // force page break if it doesn't fit on the page\n                pgs.NextOrNew();\n                pgs.CurrentPage.YOffset = OwnerReport.TopOfPage;\n                if (this.YParents != null)\n                    pi.Y = 0;\n            }\n\n            p = pgs.CurrentPage;\n\n            p.AddObject(pi);    // Put image onto the current page\n\n            RunPageRegionEnd(pgs);\n\n            if (!this.PageBreakAtEnd && !IsTableOrMatrixCell(rpt))\n            {\n                float newY = pi.Y + pi.H;\n                p.YOffset += newY;  // bump the y location\n            }\n            SetPagePositionEnd(pgs, pi.Y + pi.H);\n            return p;\n        }\n\n        async Task<ChartBase> RunChartBuild(Report rpt, Row row)\n\t\t{\n\t\t\t// Get the matrix that defines the data; \n\t\t\t_ChartMatrix.SetMyData(rpt, GetMyData(rpt));\t// set the data in the matrix\n\t\t\tint maxColumns;\n\t\t\tint maxRows;\n            MatrixCellEntry[,] matrix;\n            (matrix, maxRows, maxColumns)= await _ChartMatrix.RunBuild(rpt);\n\n\t\t\t// Build the Chart bitmap, along with data regions\n\t\t\tChartBase cb=null;\n\t\t\tswitch (_Type)\n\t\t\t{\n\t\t\t\tcase ChartTypeEnum.Column:\n\t\t\t\t\tcb = new ChartColumn(rpt, row, this, matrix,_showTooltips,_showTooltipsX,_ToolTipYFormat,_ToolTipXFormat);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ChartTypeEnum.Line:\n\t\t\t\tcase ChartTypeEnum.Area:\t\t\t// handled by line\n                    cb = new ChartLine(rpt, row, this, matrix, _showTooltips, _showTooltipsX, _ToolTipYFormat, _ToolTipXFormat);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ChartTypeEnum.Bar:\n                    cb = new ChartBar(rpt, row, this, matrix, _showTooltips, _showTooltipsX, _ToolTipYFormat, _ToolTipXFormat);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ChartTypeEnum.Pie:\n\t\t\t\tcase ChartTypeEnum.Doughnut:\t\t// handled by pie\n                    cb = new ChartPie(rpt, row, this, matrix, _showTooltips, _showTooltipsX, _ToolTipYFormat, _ToolTipXFormat);\n\t\t\t\t\tbreak;\n                case ChartTypeEnum.Bubble:\n                case ChartTypeEnum.Scatter:\n                    cb = new ChartBubble(rpt, row, this, matrix, _showTooltips, _showTooltipsX, _ToolTipYFormat, _ToolTipXFormat);\n                    break;\n                case ChartTypeEnum.Map:\n                    cb = new ChartMap(rpt, row, this, matrix, _showTooltips, _showTooltipsX, _ToolTipYFormat, _ToolTipXFormat);\n                    break;\n                case ChartTypeEnum.Stock:\n\t\t\t\tdefault:\n                    cb = new ChartColumn(rpt, row, this, matrix, _showTooltips, _showTooltipsX, _ToolTipYFormat, _ToolTipXFormat);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn cb;\n\t\t}\n\n\t\t// We generate a matrix so at runtime the matrix data engine\n\t\t//  will create the necessary summary data for the chart\n\t\tprivate Matrix GenerateMatrix()\n\t\t{\n\t\t\tXmlDocument mDoc = new XmlDocument();\n\t\t\tXmlElement m = mDoc.CreateElement(\"Matrix\");\n\t\t\tmDoc.AppendChild(m);\n\t\t\t// Add in DataSetName if provided in Chart\n\t\t\tif (this.DataSetName != null)\n\t\t\t{\n\t\t\t\tXmlElement dsn = mDoc.CreateElement(\"DataSetName\");\n\t\t\t\tdsn.InnerText = this.DataSetName;\n\t\t\t\tm.AppendChild(dsn);\n\t\t\t}\n\n\t\t\t/* MatrixColumns -- required but not really used for this case\n\t\t\tXmlElement mcols = mDoc.CreateElement(\"MatrixColumns\");\n\t\t\tm.AppendChild(mcols);\n\t\t\tXmlElement mcol = mDoc.CreateElement(\"MatrixColumn\");\n\t\t\tmcols.AppendChild(mcol);\n\t\t\tXmlElement w = mDoc.CreateElement(\"Width\");\n\t\t\tw.InnerText = \"1in\";\n\t\t\tmcol.AppendChild(w); Moved this to below GJL */ \n\n\t\t\t// ColumnGroupings -- cooresponds to SeriesGroupings\n\t\t\tGenerateMatrixSeries(mDoc, m);\n\n\t\t\t// RowGroupings -- corresponds to CategoryGroupings\n\t\t\tGenerateMatrixCategories(mDoc, m);\n\n\t\t\t// MatrixRows -- corresponds to ChartData\n\t\t\tXmlElement mrs = mDoc.CreateElement(\"MatrixRows\"); // DataPoints\n\t\t\tm.AppendChild(mrs);\n            XmlElement mr = mDoc.CreateElement(\"MatrixRow\"); //DataPoint\n\t\t\tmrs.AppendChild(mr);\n\t\t\tXmlElement h = mDoc.CreateElement(\"Height\");\n\t\t\th.InnerText = \"1in\";\t\t\t\t\n            mr.AppendChild(h);\n            XmlElement mcs = mDoc.CreateElement(\"MatrixCells\"); //DataValues\n\t\t\tmr.AppendChild(mcs);//Moved this out of the loops GJL\n\t\t\tforeach (ChartSeries cs in this.ChartData.Items)\n\t\t\t{\n\t\t\t\t\n                foreach (DataPoint dp in cs.Datapoints.Items)\n\t\t\t\t{\n\t\t\t\t\t\n\t\t\t\t\tXmlElement mc = mDoc.CreateElement(\"MatrixCell\");  //DataValue\n\t\t\t\t\tmcs.AppendChild(mc);\n\t\t\t\t\tXmlElement mcris = mDoc.CreateElement(\"ReportItems\");\n\t\t\t\t\tmc.AppendChild(mcris);\n\t\t\t\t\tXmlElement mcri = mDoc.CreateElement(\"ChartExpression\");\n\t\t\t\t\tmcris.AppendChild(mcri);\n                    \n                    /* Added this so that the plot type can be seen when\n                     * the chart it being drawn\n                     * 05122007AJM */\n                    XmlElement aPlotType = mDoc.CreateElement(\"PlotType\");\n                    aPlotType.InnerText = cs.PlotType.ToString();\n                    mcri.AppendChild(aPlotType);\n\n                    /*Custom Element for Colour GJL 18092008*/\n                    XmlElement aColour = mDoc.CreateElement(\"Color\");\n                    aColour.InnerText = cs.Colour;\n                    mcri.AppendChild(aColour);\n\n                    /*Custom Element for YAxis GJL 14022008*/\n                    XmlElement aYaxis = mDoc.CreateElement(\"YAxis\");\n                    aYaxis.InnerText = cs.YAxis.ToString();\n                    mcri.AppendChild(aYaxis);\n\n                    //Custom Element to stop datapoint from showing // GJL \n                    XmlElement NoMarker = mDoc.CreateElement(\"NoMarker\");\n                    NoMarker.InnerText = cs.NoMarker.ToString();\n                    mcri.AppendChild(NoMarker);\n\n                    //Custom Element to change size of lines // GJL \n                    XmlElement LineSize = mDoc.CreateElement(\"LineSize\");\n                    LineSize.InnerText = cs.LineSize;\n                    mcri.AppendChild(LineSize);\n                     \n\n                    XmlElement dvl = mDoc.CreateElement(\"DataPoint\");\n                    dvl.InnerText = this.OwnerReport.CreateDynamicName(dp);\n                    mcri.AppendChild(dvl);\n\n                    XmlElement dvs = mDoc.CreateElement(\"DataValues\");\n                    mcri.AppendChild(dvs);\n                    foreach (DataValue dv in dp.DataValues.Items)\n                    {\n                        XmlElement dvv = mDoc.CreateElement(\"DataValue\");\n                        dvs.AppendChild(dvv);\n                        XmlElement dve = mDoc.CreateElement(\"Value\");\n                        dvv.AppendChild(dve);\n                        dve.InnerText = dv.Value.Source;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tMatrix mt = new Matrix(this.OwnerReport, this, m);\n\t\t\treturn mt;\t\n\t\t}\n\n        // Handle simple case with single expression\n        void CreateChartExpression(XmlDocument mDoc, XmlElement ce, string expr, Expression label)\n        {\n            XmlElement dvs = mDoc.CreateElement(\"DataValues\");\n            ce.AppendChild(dvs);\n\n            XmlElement dvv = mDoc.CreateElement(\"DataValue\");\n            dvs.AppendChild(dvv);\n            XmlElement dve = mDoc.CreateElement(\"Value\");\n            dvv.AppendChild(dve);\n            dve.InnerText = expr;\n            if (label == null)\n                return;\n\n            XmlElement lbl = mDoc.CreateElement(\"ChartLabel\");\n            ce.AppendChild(lbl);\n            lbl.InnerText = label.Source;\n        }\n\n\t\tvoid GenerateMatrixCategories(XmlDocument mDoc, XmlNode m)\n\t\t{\n\t\t\tXmlElement rgs = mDoc.CreateElement(\"RowGroupings\");\n\t\t\tm.AppendChild(rgs);\n\t\t\tif (this.CategoryGroupings == null)\n\t\t\t{\n\t\t\t\tXmlElement rg = mDoc.CreateElement(\"RowGrouping\");\n\t\t\t\trgs.AppendChild(rg);\n\t\t\t\tXmlElement width = mDoc.CreateElement(\"Width\");\n\t\t\t\twidth.InnerText = \"1in\";\n\t\t\t\trg.AppendChild(width);\n\t\t\t\tXmlElement dr = mDoc.CreateElement(\"DynamicRows\");\n\t\t\t\trg.AppendChild(dr);\n\t\t\t\t\n\t\t\t\tXmlElement drgrp = mDoc.CreateElement(\"Grouping\");\n\t\t\t\tdr.AppendChild(drgrp);\n\t\t\t\tXmlElement drges = mDoc.CreateElement(\"GroupExpressions\");\n\t\t\t\tdrgrp.AppendChild(drges);\n\t\t\t\tXmlElement drris = mDoc.CreateElement(\"ReportItems\");\n\t\t\t\tdr.AppendChild(drris);\n\t\t\t\tXmlElement drge = mDoc.CreateElement(\"GroupExpression\");\n\t\t\t\tdrges.AppendChild(drge);\n\t\t\t\tdrge.InnerText = \"\";\n\t\t\t\tXmlElement drri = mDoc.CreateElement(\"ChartExpression\");\n\t\t\t\tdrris.AppendChild(drri);\n                CreateChartExpression(mDoc, drri, \"\", null);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tforeach (CategoryGrouping catGrp in this.CategoryGroupings.Items)\n\t\t\t{\n\t\t\t\tXmlElement rg = mDoc.CreateElement(\"RowGrouping\");\n\t\t\t\trgs.AppendChild(rg);\n\t\t\t\tXmlElement width = mDoc.CreateElement(\"Width\");\n\t\t\t\twidth.InnerText = \"1in\";\n\t\t\t\trg.AppendChild(width);\n\t\t\t\t//Additional for static rows...not yet implemented\n                if (catGrp.StaticCategories != null)\n                {\n                    XmlElement dr = mDoc.CreateElement(\"StaticRows\");\n                    rg.AppendChild(dr);\n\n                }\n                else\n                {\n                    XmlElement dr = mDoc.CreateElement(\"DynamicRows\");\n                    rg.AppendChild(dr);\n\n                    XmlElement drgrp = mDoc.CreateElement(\"Grouping\");\n                    dr.AppendChild(drgrp);\n                    XmlElement drges = mDoc.CreateElement(\"GroupExpressions\");\n                    drgrp.AppendChild(drges);\n                    XmlElement drris = mDoc.CreateElement(\"ReportItems\");\n                    dr.AppendChild(drris);\n                    foreach (GroupExpression ge in catGrp.DynamicCategories.Grouping.GroupExpressions.Items)\n                    {\n                        XmlElement drge = mDoc.CreateElement(\"GroupExpression\");\n                        drges.AppendChild(drge);\n                        drge.InnerText = ge.Expression.Source;\n                        XmlElement drri = mDoc.CreateElement(\"ChartExpression\");\n                        drris.AppendChild(drri);\n                        CreateChartExpression(mDoc, drri, ge.Expression.Source, catGrp.DynamicCategories.Label);\n\n                    }\n\n                    if (catGrp.DynamicCategories.Sorting != null)\n                    {\n                        XmlElement drsrt = mDoc.CreateElement(\"Sorting\");\n                        dr.AppendChild(drsrt);\n                        foreach (SortBy sb in catGrp.DynamicCategories.Sorting.Items)\n                        {\n                            XmlElement drsrtby = mDoc.CreateElement(\"SortBy\");\n                            drsrt.AppendChild(drsrtby);\n                            XmlElement srtexp = mDoc.CreateElement(\"SortExpression\");\n                            srtexp.InnerText = sb.SortExpression.Source;\n                            drsrtby.AppendChild(srtexp);\n                            if (sb.Direction == SortDirectionEnum.Descending)\n                            {\n                                XmlElement srtdir = mDoc.CreateElement(\"Direction\");\n                                srtdir.InnerText = \"Descending\";\n                                drsrtby.AppendChild(srtdir);\n                            }\n                        }\n                    }\n                }\t\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n\t\tvoid GenerateMatrixSeries(XmlDocument mDoc, XmlNode m)\n\t\t{\n\t\t\tXmlElement cgs = mDoc.CreateElement(\"ColumnGroupings\");\n\t\t\tm.AppendChild(cgs);\n\t\t\tif (this.SeriesGroupings == null)\n\t\t\t{\n\t\t\t\tXmlElement cg = mDoc.CreateElement(\"ColumnGrouping\");\n\t\t\t\tcgs.AppendChild(cg);\n\t\t\t\tXmlElement h = mDoc.CreateElement(\"Height\");\n\t\t\t\th.InnerText = \"1in\";\n\t\t\t\tcg.AppendChild(h);\n\t\t\t\tXmlElement dc = mDoc.CreateElement(\"DynamicColumns\");\n\t\t\t\tcg.AppendChild(dc);\n\t\t\t\t\n\t\t\t\tXmlElement dcgrp = mDoc.CreateElement(\"Grouping\");\n\t\t\t\tdc.AppendChild(dcgrp);\n\t\t\t\tXmlElement dcges = mDoc.CreateElement(\"GroupExpressions\");\n\t\t\t\tdcgrp.AppendChild(dcges);\n\t\t\t\tXmlElement dcris = mDoc.CreateElement(\"ReportItems\");\n\t\t\t\tdc.AppendChild(dcris);\n\t\t\t\tXmlElement dcge = mDoc.CreateElement(\"GroupExpression\");\n\t\t\t\tdcges.AppendChild(dcge);\n\t\t\t\tdcge.InnerText = \"\";\n\t\t\t\tXmlElement dcri = mDoc.CreateElement(\"ChartExpression\");\n\t\t\t\tdcris.AppendChild(dcri);\n                CreateChartExpression(mDoc, dcri, \"\", null);\n\n                XmlElement mcols = mDoc.CreateElement(\"MatrixColumns\");\n                m.AppendChild(mcols);\n                XmlElement mcol = mDoc.CreateElement(\"MatrixColumn\");\n                mcols.AppendChild(mcol);\n                XmlElement w = mDoc.CreateElement(\"Width\");\n                w.InnerText = \"1in\";\n                mcol.AppendChild(w); //GJL\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tforeach (SeriesGrouping serGrp in this.SeriesGroupings.Items)\n\t\t\t{\n                XmlElement cg = mDoc.CreateElement(\"ColumnGrouping\");\n                cgs.AppendChild(cg);\n                XmlElement h = mDoc.CreateElement(\"Height\");\n                h.InnerText = \"1in\";\n                cg.AppendChild(h);\n\t\t\t\t//GJL 041207\n              \n                XmlElement mcols = mDoc.CreateElement(\"MatrixColumns\");\n                m.AppendChild(mcols);\n                if (serGrp.StaticSeries != null)\n                {  \n                    XmlElement sgs = mDoc.CreateElement(\"StaticColumns\");\n                    cg.AppendChild(sgs);\n                    foreach (StaticMember sm in serGrp.StaticSeries.Items)\n                    {\n                        XmlElement sg = mDoc.CreateElement(\"StaticColumn\");\n                        sgs.AppendChild(sg);\n\n                        XmlElement sgRI = mDoc.CreateElement(\"ReportItems\");                        \n                        sg.AppendChild(sgRI);\n                        XmlElement sgRIe = mDoc.CreateElement(\"ChartExpression\");\n                        sgRI.AppendChild(sgRIe);\n                        CreateChartExpression(mDoc, sgRIe, sm.Label.Source, sm.Label);\n\n                   \n                        XmlElement mcol = mDoc.CreateElement(\"MatrixColumn\");\n                        mcols.AppendChild(mcol);\n                        XmlElement w = mDoc.CreateElement(\"Width\");\n                        w.InnerText = \"1in\";\n                        mcol.AppendChild(w);\n\n                    }\n                }\n\n                //end GJL\n                else\n                {                \n                    XmlElement mcol = mDoc.CreateElement(\"MatrixColumn\");\n                    mcols.AppendChild(mcol);\n                    XmlElement w = mDoc.CreateElement(\"Width\");\n                    w.InnerText = \"1in\";\n                    mcol.AppendChild(w); //GJL\n                    \n                    XmlElement dc = mDoc.CreateElement(\"DynamicColumns\");\n                    cg.AppendChild(dc);\n\n                    XmlElement dcgrp = mDoc.CreateElement(\"Grouping\");\n                    dc.AppendChild(dcgrp);\n                    XmlElement dcges = mDoc.CreateElement(\"GroupExpressions\");\n                    dcgrp.AppendChild(dcges);\n                    XmlElement dcris = mDoc.CreateElement(\"ReportItems\");\n                    dc.AppendChild(dcris);\n                    if (serGrp.DynamicSeries != null)\n                    {\n                        foreach (GroupExpression ge in serGrp.DynamicSeries.Grouping.GroupExpressions.Items)\n                        {\n                            XmlElement dcge = mDoc.CreateElement(\"GroupExpression\");\n                            dcges.AppendChild(dcge);\n                            dcge.InnerText = ge.Expression.Source;\n                            XmlElement dcri = mDoc.CreateElement(\"ChartExpression\");\n                            dcris.AppendChild(dcri);\n                            CreateChartExpression(mDoc, dcri, ge.Expression.Source, serGrp.DynamicSeries.Label);\n\n                            if (serGrp.DynamicSeries.Sorting != null)\n                            {\n                                XmlElement dcsrt = mDoc.CreateElement(\"Sorting\");\n                                dc.AppendChild(dcsrt);\n                                foreach (SortBy sb in serGrp.DynamicSeries.Sorting.Items)\n                                {\n                                    XmlElement dcsrtby = mDoc.CreateElement(\"SortBy\");\n                                    dcsrt.AppendChild(dcsrtby);\n                                    XmlElement srtexp = mDoc.CreateElement(\"SortExpression\");\n                                    srtexp.InnerText = sb.SortExpression.Source;\n                                    dcsrtby.AppendChild(srtexp);\n                                    if (sb.Direction == SortDirectionEnum.Descending)\n                                    {\n                                        XmlElement srtdir = mDoc.CreateElement(\"Direction\");\n                                        srtdir.InnerText = \"Descending\";\n                                        dcsrtby.AppendChild(srtdir);\n                                    }\n                                }\n                            }\n                        }\n                    }\n                    else\n                    {\n                        XmlElement dcge = mDoc.CreateElement(\"GroupExpression\");\n                        dcges.AppendChild(dcge);\n                        dcge.InnerText = \"=''\";          // just put in constant expression\n                        XmlElement dcri = mDoc.CreateElement(\"ChartExpression\");\n                        dcris.AppendChild(dcri);\n                        CreateChartExpression(mDoc, dcri, \"=''\", null);\n                    }\n                }\n             }\n\t\t}\n\n\t\tinternal ChartTypeEnum Type\n\t\t{\n\t\t\tget { return  _Type; }\n\t\t\tset {  _Type = value; }\n\t\t}\n\n\t\tinternal Expression Subtype //AJM GJL 14082008\n\t\t{\n\t\t\tget { return  _Subtype; }\n\t\t\t//set {  _Subtype = value; }\n\t\t}\n\n\t\tinternal SeriesGroupings SeriesGroupings\n\t\t{\n\t\t\tget { return  _SeriesGroupings; }\n\t\t\tset {  _SeriesGroupings = value; }\n\t\t}\n\n\t\tinternal CategoryGroupings CategoryGroupings\n\t\t{\n\t\t\tget { return  _CategoryGroupings; }\n\t\t\tset {  _CategoryGroupings = value; }\n\t\t}\n\n\t\tinternal ChartData ChartData\n\t\t{\n\t\t\tget { return  _ChartData; }\n\t\t\tset {  _ChartData = value; }\n\t\t}\n\n\t\tinternal Legend Legend\n\t\t{\n\t\t\tget { return  _Legend; }\n\t\t\tset {  _Legend = value; }\n\t\t}\n\n\t\tinternal CategoryAxis CategoryAxis\n\t\t{\n\t\t\tget { return  _CategoryAxis; }\n\t\t\tset {  _CategoryAxis = value; }\n\t\t}\n\n\t\tinternal ValueAxis ValueAxis\n\t\t{\n\t\t\tget { return  _ValueAxis; }\n\t\t\tset {  _ValueAxis = value; }\n\t\t}\n\n\t\tinternal Title Title\n\t\t{\n\t\t\tget { return  _Title; }\n\t\t\tset {  _Title = value; }\n\t\t}\n\n\t\tinternal int PointWidth\n\t\t{\n\t\t\tget { return  _PointWidth; }\n\t\t\tset {  _PointWidth = value; }\n\t\t}\n\n\t\tinternal Expression Palette\n\t\t{\n\t\t\tget { return  _Palette; }\n\t\t\t//set {  _Palette = value; }\n\t\t}\n\n\t\tinternal ThreeDProperties ThreeDProperties\n\t\t{\n\t\t\tget { return  _ThreeDProperties; }\n\t\t\tset {  _ThreeDProperties = value; }\n\t\t}\n\n\t\tinternal PlotArea PlotArea\n\t\t{\n\t\t\tget { return  _PlotArea; }\n\t\t\tset {  _PlotArea = value; }\n\t\t}\n\n\t\tinternal ChartElementOutputEnum ChartElementOutput\n\t\t{\n\t\t\tget { return  _ChartElementOutput; }\n\t\t\tset {  _ChartElementOutput = value; }\n\t\t}\n\n\t\tinternal Matrix ChartMatrix\n\t\t{\n\t\t\tget { return _ChartMatrix; }\n\t\t}\n\n\t\t// Runtime data; either original query if no groups\n\t\t// or sorting or a copied version that is grouped/sorted\n\t\tprivate Rows GetMyData(Report rpt)\n\t\t{\n\t\t\treturn rpt.Cache.Get(this, \"data\") as Rows;\n\t\t}\n\n\t\tprivate void SetMyData(Report rpt, Rows data)\n\t\t{\n\t\t\tif (data == null)\n\t\t\t\trpt.Cache.Remove(this, \"data\");\n\t\t\telse\n\t\t\t\trpt.Cache.AddReplace(this, \"data\", data);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ChartBar.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Runtime.InteropServices;\nusing System.Threading.Tasks;\n\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    ///<summary>\n    /// Bar chart definition and processing.\n    ///</summary>\n    internal class ChartBar : ChartBase\n    {\n        int _GapSize = 6;\t//  TODO: hard code for now\n\n        internal ChartBar(Report r, Row row, Chart c, MatrixCellEntry[,] m, Expression showTooltips, Expression showTooltipsX, Expression _ToolTipYFormat, Expression _ToolTipXFormat)\n            : base(r, row, c, m, showTooltips, showTooltipsX, _ToolTipYFormat, _ToolTipXFormat)\n        {\n        }\n\n        override internal async Task Draw(Report rpt)\n        {\n            CreateSizedBitmap();\n\n#if !DRAWINGCOMPAT\n            //AJM GJL 14082008 Using Vector Graphics\n            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))\n            {\n                using (Draw2.Graphics g1 = Draw2.Graphics.FromImage(_bm))\n                {\n                    _aStream = new System.IO.MemoryStream();\n                    IntPtr HDC = g1.GetHdc();\n                    _mf = new Draw2.Imaging.Metafile(_aStream, HDC,\n                        new Draw2.RectangleF(0, 0, _bm.Width, _bm.Height), Draw2.Imaging.MetafileFrameUnit.Pixel);\n                    g1.ReleaseHdc(HDC);\n                }\n            }\n\n\n            using (Draw2.Graphics g = Draw2.Graphics.FromImage(_mf != null ? _mf : _bm))\n#else\n            using (Draw2.Graphics g = Draw2.Graphics.FromImage(_bm))\n#endif\n            {\n                // 06122007AJM Used to Force Higher Quality\n                g.InterpolationMode = Draw2.Drawing2D.InterpolationMode.HighQualityBicubic;\n                g.SmoothingMode = Draw2.Drawing2D.SmoothingMode.HighQuality;\n                g.PixelOffsetMode = Draw2.Drawing2D.PixelOffsetMode.None;\n                g.CompositingQuality = Draw2.Drawing2D.CompositingQuality.HighQuality;\n\n                // Adjust the top margin to depend on the title height\n                Draw2.Size titleSize = await DrawTitleMeasure(rpt, g, ChartDefn.Title);\n                Layout.TopMargin = titleSize.Height;\n\n                double max = 0, min = 0;    // Get the max and min values\n                                            // 20022008 AJM GJL - Now requires Y axis identifier\n                (max, min) = await GetValueMaxMin(rpt, max, min, 0, 1);\n\n                await DrawChartStyle(rpt, g);\n\n                // Draw title; routine determines if necessary\n                await DrawTitle(rpt, g, ChartDefn.Title, new Draw2.Rectangle(0, 0, _bm.Width, Layout.TopMargin));\n\n                // Adjust the left margin to depend on the Category Axis\n                Draw2.Size caSize = await CategoryAxisSize(rpt, g);\n                Layout.LeftMargin = caSize.Width;\n\n                // Adjust the bottom margin to depend on the Value Axis\n                Draw2.Size vaSize = await ValueAxisSize(rpt, g, min, max);\n                Layout.BottomMargin = vaSize.Height;\n\n                // Draw legend\n                Draw2.Rectangle lRect = await DrawLegend(rpt, g, false, true);\n                // 20022008 AJM GJL - Requires Rpt and Graphics\n                AdjustMargins(lRect, rpt, g);       // Adjust margins based on legend.\n\n                // Draw Plot area\n                await DrawPlotAreaStyle(rpt, g, lRect);\n\n                // Draw Value Axis\n                if (vaSize.Width > 0)   // If we made room for the axis - we need to draw it\n                    await DrawValueAxis(rpt, g, min, max,\n                        new Draw2.Rectangle(Layout.LeftMargin, _bm.Height - Layout.BottomMargin, _bm.Width - Layout.LeftMargin - Layout.RightMargin, vaSize.Height), Layout.TopMargin, _bm.Height - Layout.BottomMargin);\n\n                // Draw Category Axis\n                if (caSize.Height > 0)\n                    await DrawCategoryAxis(rpt, g,\n                        new Draw2.Rectangle(Layout.LeftMargin - caSize.Width, Layout.TopMargin, caSize.Width, _bm.Height - Layout.TopMargin - Layout.BottomMargin));\n\n                if ((ChartSubTypeEnum)Enum.Parse(typeof(ChartSubTypeEnum), await _ChartDefn.Subtype.EvaluateString(rpt, _row)) == ChartSubTypeEnum.Stacked)\n                    await DrawPlotAreaStacked(rpt, g, min, max);\n                else if ((ChartSubTypeEnum)Enum.Parse(typeof(ChartSubTypeEnum), await _ChartDefn.Subtype.EvaluateString(rpt, _row)) == ChartSubTypeEnum.PercentStacked)\n                    await DrawPlotAreaPercentStacked(rpt, g);\n                else\n                    await DrawPlotAreaPlain(rpt, g, min, max);\n\n                await DrawLegend(rpt, g, false, false);     // after the plot is drawn\n            }\n        }\n\n        async Task DrawPlotAreaPercentStacked(Report rpt, Draw2.Graphics g)\n        {\n            int barsNeeded = CategoryCount;\n            int gapsNeeded = CategoryCount * 2;\n\n            // Draw Plot area data\n            double max = 1;\n\n            int heightBar = (int)((Layout.PlotArea.Height - (gapsNeeded * _GapSize)) / barsNeeded);\n            int maxBarWidth = (int)(Layout.PlotArea.Width);\n\n            // Loop thru calculating all the data points\n            for (int iRow = 1; iRow <= CategoryCount; iRow++)\n            {\n                int barLoc = (int)(Layout.PlotArea.Top + ((iRow - 1) * ((double)(Layout.PlotArea.Height) / CategoryCount)));\n                barLoc += _GapSize; // space before series\n\n                double sum = 0;\n                for (int iCol = 1; iCol <= SeriesCount; iCol++)\n                {\n                    sum += await GetDataValue(rpt, iRow, iCol);\n                }\n                double v = 0;\n                int saveX = 0;\n                double t = 0;\n                for (int iCol = 1; iCol <= SeriesCount; iCol++)\n                {\n                    t = await GetDataValue(rpt, iRow, iCol);\n                    v += t;\n\n                    int x = (int)((Math.Min(v / sum, max) / max) * maxBarWidth);\n\n                    Draw2.Rectangle rect;\n                    rect = new Draw2.Rectangle(Layout.PlotArea.Left + saveX, barLoc, x - saveX, heightBar);\n\n                    await DrawColumnBar(rpt, g,\n                        await GetSeriesBrush(rpt, iRow, iCol),\n                         rect, iRow, iCol);\n\n                    //Add a metafilecomment to use as a tooltip GJL 26092008\n                    if (_showToolTips)\n                    {\n                        String val = \"ToolTip:\" + t.ToString(_tooltipYFormat) + \"|X:\" + (int)rect.X + \"|Y:\" + (int)rect.Y + \"|W:\" + rect.Width + \"|H:\" + rect.Height;\n                        g.AddMetafileComment(new System.Text.ASCIIEncoding().GetBytes(val));\n                    }\n\n                    saveX = x;\n                }\n            }\n\n            return;\n        }\n\n        async Task DrawPlotAreaPlain(Report rpt, Draw2.Graphics g, double min, double max)\n        {\n            int barsNeeded = SeriesCount * CategoryCount;\n            int gapsNeeded = CategoryCount * 2;\n\n            // Draw Plot area data\n            int heightBar = (int)((Layout.PlotArea.Height - (gapsNeeded * _GapSize)) / barsNeeded);\n            int maxBarWidth = (int)(Layout.PlotArea.Width);\n\n            //int barLoc=Layout.LeftMargin;\n            for (int iRow = 1; iRow <= CategoryCount; iRow++)\n            {\n                int barLoc = (int)(Layout.PlotArea.Top + ((iRow - 1) * ((double)(Layout.PlotArea.Height) / CategoryCount)));\n                barLoc += _GapSize; // space before series\n                for (int iCol = 1; iCol <= SeriesCount; iCol++)\n                {\n                    double v = await this.GetDataValue(rpt, iRow, iCol);\n                    int x = (int)(((Math.Min(v, max) - min) / (max - min)) * maxBarWidth);\n\n                    await DrawColumnBar(rpt, g, await GetSeriesBrush(rpt, iRow, iCol),\n                        new Draw2.Rectangle(Layout.PlotArea.Left, barLoc, x, heightBar), iRow, iCol);\n                    //Add a metafilecomment to use as a tooltip GJL 26092008\n                    if (_showToolTips)\n                    {\n                        String val = \"ToolTip:\" + v.ToString(_tooltipYFormat) + \"|X:\" + (int)Layout.PlotArea.Left + \"|Y:\" + (int)(barLoc) + \"|W:\" + x + \"|H:\" + heightBar;\n                        g.AddMetafileComment(new System.Text.ASCIIEncoding().GetBytes(val));\n                    }\n                    barLoc += heightBar;\n                }\n            }\n\n            return;\n        }\n\n        async Task DrawPlotAreaStacked(Report rpt, Draw2.Graphics g, double min, double max)\n        {\n            int barsNeeded = CategoryCount;\n            int gapsNeeded = CategoryCount * 2;\n\n            int heightBar = (int)((Layout.PlotArea.Height - (gapsNeeded * _GapSize)) / barsNeeded);\n            int maxBarWidth = (int)(Layout.PlotArea.Width);\n\n            // Loop thru calculating all the data points\n            for (int iRow = 1; iRow <= CategoryCount; iRow++)\n            {\n                int barLoc = (int)(Layout.PlotArea.Top + ((iRow - 1) * ((double)(Layout.PlotArea.Height) / CategoryCount)));\n                barLoc += _GapSize; // space before series\n\n                double v = 0;\n                double t = 0;\n                int saveX = 0;\n                for (int iCol = 1; iCol <= SeriesCount; iCol++)\n                {\n                    t = await GetDataValue(rpt, iRow, iCol);\n                    v += t;\n\n                    int x = (int)(((Math.Min(v, max) - min) / (max - min)) * maxBarWidth);\n\n                    Draw2.Rectangle rect;\n                    rect = new Draw2.Rectangle(Layout.PlotArea.Left + saveX, barLoc, x - saveX, heightBar);\n\n                    await DrawColumnBar(rpt, g, await GetSeriesBrush(rpt, iRow, iCol), rect, iRow, iCol);\n\n                    if (_showToolTips)\n                    {\n                        String val = \"ToolTip:\" + v.ToString(_tooltipYFormat) + \"|X:\" + (int)rect.X + \"|Y:\" + (int)rect.Y + \"|W:\" + rect.Width + \"|H:\" + rect.Height;\n                        g.AddMetafileComment(new System.Text.ASCIIEncoding().GetBytes(val));\n                    }\n                    saveX = x;\n                }\n            }\n\n            return;\n        }\n\n        // Calculate the size of the category axis\n        async Task<Draw2.Size> CategoryAxisSize(Report rpt, Draw2.Graphics g)\n        {\n            _LastCategoryWidth = 0;\n\n            Draw2.Size size = Draw2.Size.Empty;\n            if (this.ChartDefn.CategoryAxis == null)\n                return size;\n            Axis a = this.ChartDefn.CategoryAxis.Axis;\n            if (a == null)\n                return size;\n            Style s = a.Style;\n\n            // Measure the title\n            size = await DrawTitleMeasure(rpt, g, a.Title);\n\n            if (!a.Visible)     // don't need to calculate the height\n                return size;\n\n            // Calculate the tallest category name\n            TypeCode tc;\n            int maxWidth = 0;\n            for (int iRow = 1; iRow <= CategoryCount; iRow++)\n            {\n                (object v, tc) = await this.GetCategoryValue(rpt, iRow);\n                Draw2.Size tSize;\n                if (s == null)\n                    tSize = await Style.MeasureStringDefaults(rpt, g, v, tc, null, int.MaxValue);\n\n                else\n                    tSize = await s.MeasureString(rpt, g, v, tc, null, int.MaxValue);\n\n                if (tSize.Width > maxWidth)\n                    maxWidth = tSize.Width;\n\n                if (iRow == CategoryCount)\n                    _LastCategoryWidth = tSize.Width;\n            }\n\n            // Add on the widest category name\n            size.Width += maxWidth;\n            return size;\n        }\n\n        // DrawCategoryAxis \n        async Task DrawCategoryAxis(Report rpt, Draw2.Graphics g, Draw2.Rectangle rect)\n        {\n            if (this.ChartDefn.CategoryAxis == null)\n                return;\n            Axis a = this.ChartDefn.CategoryAxis.Axis;\n            if (a == null)\n                return;\n            Style s = a.Style;\n\n            Draw2.Size tSize = await DrawTitleMeasure(rpt, g, a.Title);\n            await DrawTitle(rpt, g, a.Title,\n                new Draw2.Rectangle(rect.Left, rect.Top, tSize.Width, rect.Height));\n\n            int drawHeight = rect.Height / CategoryCount;\n            TypeCode tc;\n            for (int iRow = 1; iRow <= CategoryCount; iRow++)\n            {\n                (object v, tc) = await this.GetCategoryValue(rpt, iRow);\n\n                int drawLoc = (int)(rect.Top + ((iRow - 1) * ((double)rect.Height / CategoryCount)));\n\n                // Draw the category text\n                if (a.Visible)\n                {\n                    Draw2.Rectangle drawRect = new Draw2.Rectangle(rect.Left + tSize.Width, drawLoc, rect.Width - tSize.Width, drawHeight);\n                    if (s == null)\n                        Style.DrawStringDefaults(g, v, drawRect);\n                    else\n                        await s.DrawString(rpt, g, v, tc, null, drawRect);\n                }\n                // Draw the Major Tick Marks (if necessary)\n                DrawCategoryAxisTick(g, true, a.MajorTickMarks, new Draw2.Point(rect.Right, drawLoc));\n            }\n\n            // Draw the end on (if necessary)\n            DrawCategoryAxisTick(g, true, a.MajorTickMarks, new Draw2.Point(rect.Right, rect.Bottom));\n\n            return;\n        }\n\n        protected void DrawCategoryAxisTick(Draw2.Graphics g, bool bMajor, AxisTickMarksEnum tickType, Draw2.Point p)\n        {\n            int len = bMajor ? AxisTickMarkMajorLen : AxisTickMarkMinorLen;\n            switch (tickType)\n            {\n                case AxisTickMarksEnum.Outside:\n                    g.DrawLine(Draw2.Pens.Black, new Draw2.Point(p.X, p.Y), new Draw2.Point(p.X - len, p.Y));\n                    break;\n                case AxisTickMarksEnum.Inside:\n                    g.DrawLine(Draw2.Pens.Black, new Draw2.Point(p.X, p.Y), new Draw2.Point(p.X + len, p.Y));\n                    break;\n                case AxisTickMarksEnum.Cross:\n                    g.DrawLine(Draw2.Pens.Black, new Draw2.Point(p.X - len, p.Y), new Draw2.Point(p.X + len, p.Y));\n                    break;\n                case AxisTickMarksEnum.None:\n                default:\n                    break;\n            }\n            return;\n        }\n\n        async Task DrawColumnBar(Report rpt, Draw2.Graphics g, Draw2.Brush brush, Draw2.Rectangle rect, int iRow, int iCol)\n        {\n            g.FillRectangle(brush, rect);\n            g.DrawRectangle(Draw2.Pens.Black, rect);\n\n            if ((ChartSubTypeEnum)Enum.Parse(typeof(ChartSubTypeEnum), await _ChartDefn.Subtype.EvaluateString(rpt, _row)) == ChartSubTypeEnum.Stacked ||\n                (ChartSubTypeEnum)Enum.Parse(typeof(ChartSubTypeEnum), await _ChartDefn.Subtype.EvaluateString(rpt, _row)) == ChartSubTypeEnum.PercentStacked)\n            {\n                await DrawDataPoint(rpt, g, rect, iRow, iCol);\n            }\n            else\n            {\n                Draw2.Point p;\n                p = new Draw2.Point(rect.Right, rect.Top);\n                await DrawDataPoint(rpt, g, p, iRow, iCol);\n            }\n\n\n            return;\n        }\n\n        protected async Task DrawValueAxis(Report rpt, Draw2.Graphics g, double min, double max, Draw2.Rectangle rect, int plotTop, int plotBottom)\n        {\n            if (this.ChartDefn.ValueAxis == null)\n                return;\n            Axis a = this.ChartDefn.ValueAxis.Axis;\n            if (a == null)\n                return;\n            Style s = a.Style;\n\n            // Account for tick marks\n            int tickSize = 0;\n            if (a.MajorTickMarks == AxisTickMarksEnum.Cross ||\n                a.MajorTickMarks == AxisTickMarksEnum.Outside)\n                tickSize = this.AxisTickMarkMajorLen;\n            else if (a.MinorTickMarks == AxisTickMarksEnum.Cross ||\n                a.MinorTickMarks == AxisTickMarksEnum.Outside)\n                tickSize += this.AxisTickMarkMinorLen;\n\n            int intervalCount;\n            double incr;\n            (incr, intervalCount) = await SetIncrementAndInterval(rpt, a, min, max);      // Calculate the interval count\n\n            int maxValueHeight = 0;\n            double v = min;\n            Draw2.Size size = Draw2.Size.Empty;\n\n            for (int i = 0; i < intervalCount + 1; i++)\n            {\n                int x = (int)(((Math.Min(v, max) - min) / (max - min)) * rect.Width);\n\n                if (!a.Visible)\n                {\n                    // nothing to do\n                }\n                else if (s != null)\n                {\n                    size = await s.MeasureString(rpt, g, v, TypeCode.Double, null, int.MaxValue);\n                    Draw2.Rectangle vRect =\n                        new Draw2.Rectangle(rect.Left + x - (size.Width / 2), rect.Top + tickSize, size.Width, size.Height);\n                    await s.DrawString(rpt, g, v, TypeCode.Double, null, vRect);\n                }\n                else\n                {\n                    size = await Style.MeasureStringDefaults(rpt, g, v, TypeCode.Double, null, int.MaxValue);\n                    Draw2.Rectangle vRect =\n                        new Draw2.Rectangle(rect.Left + x - (size.Width / 2), rect.Top + tickSize, size.Width, size.Height);\n                    Style.DrawStringDefaults(g, v, vRect);\n                }\n                if (size.Height > maxValueHeight)       // Need to keep track of the maximum height\n                    maxValueHeight = size.Height;       //   this is probably overkill since it should always be the same??\n\n                await DrawValueAxisGrid(rpt, g, a.MajorGridLines, new Draw2.Point(rect.Left + x, plotTop), new Draw2.Point(rect.Left + x, plotBottom));\n                await DrawValueAxisTick(rpt, g, true, a.MajorTickMarks, a.MajorGridLines, new Draw2.Point(rect.Left + x, plotBottom));\n\n                v += incr;\n            }\n\n            // Draw the end points of the major grid lines\n            await DrawValueAxisGrid(rpt, g, a.MajorGridLines, new Draw2.Point(rect.Left, plotTop), new Draw2.Point(rect.Left, plotBottom));\n            await DrawValueAxisTick(rpt, g, true, a.MajorTickMarks, a.MajorGridLines, new Draw2.Point(rect.Left, plotBottom));\n            await DrawValueAxisGrid(rpt, g, a.MajorGridLines, new Draw2.Point(rect.Right, plotTop), new Draw2.Point(rect.Right, plotBottom));\n            await DrawValueAxisTick(rpt, g, true, a.MajorTickMarks, a.MajorGridLines, new Draw2.Point(rect.Right, plotBottom));\n\n            Draw2.Size tSize = await DrawTitleMeasure(rpt, g, a.Title);\n            await DrawTitle(rpt, g, a.Title,\n                new Draw2.Rectangle(rect.Left, rect.Top + maxValueHeight + tickSize, rect.Width, tSize.Height));\n\n            return;\n        }\n\n        protected async Task DrawValueAxisGrid(Report rpt, Draw2.Graphics g, ChartGridLines gl, Draw2.Point s, Draw2.Point e)\n        {\n            if (gl == null || !gl.ShowGridLines)\n                return;\n\n            if (gl.Style != null)\n                await gl.Style.DrawStyleLine(rpt, g, null, s, e);\n            else\n                g.DrawLine(Draw2.Pens.Black, s, e);\n\n            return;\n        }\n\n        protected async Task DrawValueAxisTick(Report rpt, Draw2.Graphics g, bool bMajor, AxisTickMarksEnum tickType, ChartGridLines gl, Draw2.Point p)\n        {\n            if (tickType == AxisTickMarksEnum.None)\n                return;\n\n            int len = bMajor ? AxisTickMarkMajorLen : AxisTickMarkMinorLen;\n            Draw2.Point s, e;\n            switch (tickType)\n            {\n                case AxisTickMarksEnum.Inside:\n                    s = new Draw2.Point(p.X, p.Y);\n                    e = new Draw2.Point(p.X, p.Y - len);\n                    break;\n                case AxisTickMarksEnum.Cross:\n                    s = new Draw2.Point(p.X, p.Y - len);\n                    e = new Draw2.Point(p.X, p.Y + len);\n                    break;\n                case AxisTickMarksEnum.Outside:\n                default:\n                    s = new Draw2.Point(p.X, p.Y + len);\n                    e = new Draw2.Point(p.X, p.Y);\n                    break;\n            }\n            Style style = gl.Style;\n\n            if (style != null)\n                await style.DrawStyleLine(rpt, g, null, s, e);\n            else\n                g.DrawLine(Draw2.Pens.Black, s, e);\n\n            return;\n        }\n\n        // Calculate the size of the value axis; width is max value width + title width\n        //\t\t\t\t\t\t\t\t\t\t height is max value height\n        protected async Task<Draw2.Size> ValueAxisSize(Report rpt, Draw2.Graphics g, double min, double max)\n        {\n            Draw2.Size size = Draw2.Size.Empty;\n            if (ChartDefn.ValueAxis == null)\n                return size;\n            Axis a = ChartDefn.ValueAxis.Axis;\n            if (a == null)\n                return size;\n\n            Draw2.Size minSize;\n            Draw2.Size maxSize;\n            if (!a.Visible)\n            {\n                minSize = maxSize = Draw2.Size.Empty;\n            }\n            else if (a.Style != null)\n            {\n                minSize = await a.Style.MeasureString(rpt, g, min, TypeCode.Double, null, int.MaxValue);\n                maxSize = await a.Style.MeasureString(rpt, g, max, TypeCode.Double, null, int.MaxValue);\n            }\n            else\n            {\n                minSize = await Style.MeasureStringDefaults(rpt, g, min, TypeCode.Double, null, int.MaxValue);\n                maxSize = await Style.MeasureStringDefaults(rpt, g, max, TypeCode.Double, null, int.MaxValue);\n            }\n            // Choose the largest\n            size.Width = Math.Max(minSize.Width, maxSize.Width);\n            size.Height = Math.Max(minSize.Height, maxSize.Height);\n\n            // Now we need to add in the height of the title (if any)\n            Draw2.Size titleSize = await DrawTitleMeasure(rpt, g, a.Title);\n            size.Height += titleSize.Height;\n\n            if (a.MajorTickMarks == AxisTickMarksEnum.Cross ||\n                a.MajorTickMarks == AxisTickMarksEnum.Outside)\n                size.Height += this.AxisTickMarkMajorLen;\n            else if (a.MinorTickMarks == AxisTickMarksEnum.Cross ||\n                a.MinorTickMarks == AxisTickMarksEnum.Outside)\n                size.Height += this.AxisTickMarkMinorLen;\n\n            return size;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ChartBase.cs",
    "content": "\nusing NPOI.SS.Formula.Functions;\nusing System;\nusing System.Collections;\nusing System.Threading.Tasks;\n\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\nusing Drawing2D = Majorsilence.Drawing.Drawing2D;\nusing Imaging = Majorsilence.Drawing.Imaging;\n#else\nusing Draw2 = System.Drawing;\nusing Drawing2D = System.Drawing.Drawing2D;\nusing Imaging = System.Drawing.Imaging;\n#endif\n\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    ///<summary>\n    /// Base class of all charts.\n    ///</summary>\n    internal abstract class ChartBase : IDisposable\n    {\n        protected Chart _ChartDefn; // GJL 14082008 Using Vector Graphics\n        MatrixCellEntry[,] _DataDefn;\n        protected Draw2.Bitmap _bm;\n#if !DRAWINGCOMPAT\n        protected Imaging.Metafile _mf = null; // GJL 14082008 Using Vector Graphics\n        public System.IO.MemoryStream _aStream; // GJL 14082008 Using Vector Graphics\n#endif\n        protected ChartLayout Layout;\n        Draw2.Brush[] _SeriesBrush;\n        ChartMarkerEnum[] _SeriesMarker;\n        protected int _LastCategoryWidth = 0;\n        protected Row _row;\t\t\t\t\t// row chart created on\n        protected int _gridIncrs = 10; //PJR 20071113 - made global to class so it can be \"adjusted\" to fit MAX value\n        protected bool _showToolTips;\n        protected bool _showToolTipsX;\n        protected string _tooltipXFormat;\n        protected string _tooltipYFormat;\n\n        internal ChartBase(Report r, Row row, Chart c, MatrixCellEntry[,] m, Expression showTooltips, Expression showTooltipsX, Expression _ToolTipYFormat, Expression _ToolTipXFormat)\n        {\n            _ChartDefn = c;\n            _row = row;\n            _DataDefn = m;\n            _bm = null;\n            int width = _ChartDefn.WidthCalc(r, null);\n            int height = RSize.PixelsFromPoints(_ChartDefn.HeightOrOwnerHeight);\n            Layout = new ChartLayout(width, height);\n            _SeriesBrush = null;\n            _SeriesMarker = null;\n\n            // HACK: async\n            Task.Run(async () => { \n                _showToolTips =  await showTooltips.EvaluateBoolean(r, row);\n                _showToolTipsX = await showTooltipsX.EvaluateBoolean(r, row);\n                _tooltipYFormat = await _ToolTipYFormat.EvaluateString(r, row);\n                _tooltipXFormat = await _ToolTipXFormat.EvaluateString(r, row);\n            }).GetAwaiter().GetResult();\n        }\n\n        internal virtual Task Draw(Report rpt)\n        {\n            return Task.CompletedTask;\n        }\n\n        protected Row ChartRow\n        {\n            get { return _row; }\n        }\n\n        internal void Save(Report rpt, System.IO.Stream stream, Imaging.ImageFormat im)\n        {\n            if (_bm == null)\n                Draw(rpt);\n#if !DRAWINGCOMPAT\n            if (_mf != null)\n            {\n                _mf.Save(stream, im);\n            }\n            else\n            {\n                _bm.Save(stream, im);\n            }\n#else\n            _bm.Save(stream, im);\n#endif\n        }\n\n        internal Draw2.Image Image(Report rpt) // GJL 14082008 Using Vector Graphics\n        {\n            if (_bm == null)\n                Draw(rpt);\n#if !DRAWINGCOMPAT\n            return _mf == null? _bm : _mf;\n#else\n            return _bm;\n#endif\n\n        }\n\n        protected Draw2.Bitmap CreateSizedBitmap()\n        {\n            if (_bm != null)\n            {\n                _bm.Dispose();\n                _bm = null;\n            }\n            _bm = new Draw2.Bitmap(Layout.Width, Layout.Height);\n            return _bm;\n        }\n\n        protected Draw2.Bitmap CreateSizedBitmap(int W, int H)\n        {\n            if (_bm != null)\n            {\n                _bm.Dispose();\n                _bm = null;\n            }\n            _bm = new Draw2.Bitmap(W, H);\n            return _bm;\n        }\n\n        protected int AxisTickMarkMajorLen\n        {\n            get { return 6; }\n        }\n\n        protected int AxisTickMarkMinorLen\n        {\n            get { return 3; }\n        }\n\n        protected int CategoryCount\n        {\n            get { return (_DataDefn.GetLength(0) - 1); }\n        }\n\n        protected Chart ChartDefn\n        {\n            get { return _ChartDefn; }\n        }\n\n        protected MatrixCellEntry[,] DataDefn\n        {\n            get { return _DataDefn; }\n        }\n\n        protected async Task<Draw2.Brush[]> SeriesBrush(Report rpt, Row row, ReportDefn defn)\n        {\n            if (_SeriesBrush == null)\n                _SeriesBrush = await GetSeriesBrushes(rpt, row, defn);  // These are all from Brushes class; so no Dispose should be used\n            return _SeriesBrush;\n        }\n\n        protected ChartMarkerEnum[] SeriesMarker\n        {\n            get\n            {\n                if (_SeriesMarker == null)\n                    _SeriesMarker = GetSeriesMarkers();\n                return _SeriesMarker;\n            }\n        }\n\n        protected int SeriesCount\n        {\n            get { return (_DataDefn.GetLength(1) - 1); }\n        }\n\n        protected async Task DrawChartStyle(Report rpt, Draw2.Graphics g)\n        {\n            Draw2.Rectangle rect = new Draw2.Rectangle(0, 0, Layout.Width, Layout.Height);\n            if (_ChartDefn.Style == null)\n            {\n                g.FillRectangle(Draw2.Brushes.White, rect);\n            }\n            else\n            {\n                Row r = FirstChartRow(rpt);\n                await _ChartDefn.Style.DrawBorder(rpt, g, r, rect);\n                await _ChartDefn.Style.DrawBackground(rpt, g, r, rect);\n            }\n\n            return;\n        }\n\n        // Draws the Legend and then returns the rectangle it drew in\n        protected async Task<Draw2.Rectangle> DrawLegend(Report rpt, Draw2.Graphics g, bool bMarker, bool bBeforePlotDrawn)\n        {\n            Legend l = _ChartDefn.Legend;\n            if (l == null)\n                return Draw2.Rectangle.Empty;\n            if (!l.Visible)\n                return Draw2.Rectangle.Empty;\n            if (_ChartDefn.SeriesGroupings == null)\n                return Draw2.Rectangle.Empty;\n            if (bBeforePlotDrawn)\n            {\n                if (this.IsLegendInsidePlotArea())\n                    return Draw2.Rectangle.Empty;\n            }\n            else if (!IsLegendInsidePlotArea())         // Only draw legend after if inside the plot\n                return Draw2.Rectangle.Empty;\n\n            Draw2.Font drawFont = null;\n            Draw2.Brush drawBrush = null;\n            Draw2.StringFormat drawFormat = null;\n\n            // calculated bounding rectangle of the legend\n            Draw2.Rectangle rRect;\n            Style s = l.Style;\n            try     // no matter what we want to dispose of the graphic resources\n            {\n                if (s == null)\n                {\n                    drawFont = new Draw2.Font(\"Arial\", 10);\n                    drawBrush = new Draw2.SolidBrush(Draw2.Color.Black);\n                    drawFormat = new Draw2.StringFormat();\n                    drawFormat.Alignment = Draw2.StringAlignment.Near;\n                }\n                else\n                {\n                    drawFont = await s.GetFont(rpt, null);\n                    drawBrush = await s.GetBrush(rpt, null);\n                    drawFormat = await s.GetStringFormat(rpt, null, Draw2.StringAlignment.Near);\n                }\n\n                int x, y, h;\n                int maxTextWidth, maxTextHeight;\n                drawFormat.FormatFlags |= Draw2.StringFormatFlags.NoWrap;\n                Draw2.Size[] sizes;\n\n                (sizes, maxTextWidth, maxTextHeight) = await DrawLegendMeasure(rpt, g, drawFont, drawFormat,\n                 new Draw2.SizeF(Layout.Width, Layout.Height));\n                int boxSize = (int)(maxTextHeight * .8);\n                int totalItemWidth = 0;         // width of a legend item\n                int totalWidth, totalHeight;    // final height and width of legend\n\n                // calculate the height and width of the rectangle\n                switch (l.Layout)\n                {\n                    case LegendLayoutEnum.Row:\n                        // we need to loop thru all the width\n                        totalWidth = 0;\n                        for (int i = 0; i < SeriesCount; i++)\n                        {\n                            if (sizes[i].Width != 0)  //14052008WRP when legend valeus are 0 don't add extra boxsize\n                                totalWidth += (sizes[i].Width + (boxSize * 2));\n                        }\n                        totalHeight = (int)(maxTextHeight + (maxTextHeight * .1));\n                        h = totalHeight;\n                        totalItemWidth = maxTextWidth + (boxSize * 2);\n                        drawFormat.Alignment = Draw2.StringAlignment.Near;    // Force alignment to near\n                        break;\n                    case LegendLayoutEnum.Table:\n                        // for table we simplify to have TWO columns (i.e. don't do anything too tricky\n                        totalWidth = totalItemWidth = (maxTextWidth + (boxSize * 2)) * 2;     // make width twice as big as longest entry\n                        h = (int)(maxTextHeight + (maxTextHeight * .1));\n                        totalHeight = h * (SeriesCount + (SeriesCount % 2)) / 2;\n                        break;\n                    case LegendLayoutEnum.Column:\n                    default:\n                        totalWidth = totalItemWidth = maxTextWidth + (boxSize * 2);\n                        h = (int)(maxTextHeight + (maxTextHeight * .1));\n                        totalHeight = h * SeriesCount;\n                        break;\n                }\n\n                // calculate the location of the legend rectangle\n                if (this.IsLegendInsidePlotArea())\n                    switch (l.Position)\n                    {\n                        case LegendPositionEnum.BottomCenter:\n                            x = Layout.PlotArea.X + (Layout.PlotArea.Width / 2) - (totalWidth / 2);\n                            y = Layout.PlotArea.Y + Layout.PlotArea.Height - totalHeight - 2;\n                            break;\n                        case LegendPositionEnum.BottomLeft:\n                        case LegendPositionEnum.LeftBottom:\n                            x = Layout.PlotArea.X + 2;\n                            y = Layout.PlotArea.Y + Layout.PlotArea.Height - totalHeight - 2;\n                            break;\n                        case LegendPositionEnum.BottomRight:\n                        case LegendPositionEnum.RightBottom:\n                            x = Layout.PlotArea.X + Layout.PlotArea.Width - totalWidth;\n                            y = Layout.PlotArea.Y + Layout.PlotArea.Height - totalHeight - 2;\n                            break;\n                        case LegendPositionEnum.LeftCenter:\n                            x = Layout.PlotArea.X + 2;\n                            y = Layout.PlotArea.Y + (Layout.PlotArea.Height / 2) - (totalHeight / 2);\n                            break;\n                        case LegendPositionEnum.LeftTop:\n                        case LegendPositionEnum.TopLeft:\n                            x = Layout.PlotArea.X + 2;\n                            y = Layout.PlotArea.Y + 2;\n                            break;\n                        case LegendPositionEnum.RightCenter:\n                            x = Layout.PlotArea.X + Layout.PlotArea.Width - totalWidth - 2;\n                            y = Layout.PlotArea.Y + (Layout.PlotArea.Height / 2) - (totalHeight / 2);\n                            break;\n                        case LegendPositionEnum.TopCenter:\n                            x = Layout.PlotArea.X + (Layout.PlotArea.Width / 2) - (totalWidth / 2);\n                            y = Layout.PlotArea.Y + +2;\n                            break;\n                        case LegendPositionEnum.TopRight:\n                        case LegendPositionEnum.RightTop:\n                        default:\n                            x = Layout.PlotArea.X + Layout.PlotArea.Width - totalWidth - 2;\n                            y = Layout.PlotArea.Y + +2;\n                            break;\n                    }\n                else switch (l.Position)\n                    {\n                        case LegendPositionEnum.BottomCenter:\n                            x = (Layout.Width / 2) - (totalWidth / 2);\n                            y = Layout.Height - totalHeight - 2;\n                            break;\n                        case LegendPositionEnum.BottomLeft:\n                        case LegendPositionEnum.LeftBottom:\n                            if (IsLegendInsidePlotArea())\n                                x = Layout.LeftMargin;\n                            else\n                                x = 0;\n                            y = Layout.Height - totalHeight - 2;\n                            break;\n                        case LegendPositionEnum.BottomRight:\n                        case LegendPositionEnum.RightBottom:\n                            x = Layout.Width - totalWidth;\n                            y = Layout.Height - totalHeight - 2;\n                            break;\n                        case LegendPositionEnum.LeftCenter:\n                            x = 2;\n                            y = (Layout.Height / 2) - (totalHeight / 2);\n                            break;\n                        case LegendPositionEnum.LeftTop:\n                        case LegendPositionEnum.TopLeft:\n                            x = 2;\n                            y = Layout.TopMargin + 2;\n                            break;\n                        case LegendPositionEnum.RightCenter:\n                            x = Layout.Width - totalWidth - 2;\n                            y = (Layout.Height / 2) - (totalHeight / 2);\n                            break;\n                        case LegendPositionEnum.TopCenter:\n                            x = (Layout.Width / 2) - (totalWidth / 2);\n                            y = Layout.TopMargin + 2;\n                            break;\n                        case LegendPositionEnum.TopRight:\n                        case LegendPositionEnum.RightTop:\n                        default:\n                            x = Layout.Width - totalWidth - 2;\n                            y = Layout.TopMargin + 2;\n                            break;\n                    }\n\n                // We now know enough to calc the bounding rectangle of the legend\n                rRect = new Draw2.Rectangle(x - 1, y - 1, totalWidth + 2, totalHeight + 2);\n                if (s != null)\n                {\n                    await s.DrawBackground(rpt, g, null, rRect);  // draw (or not draw) background \n                    await s.DrawBorder(rpt, g, null, rRect);      // draw (or not draw) border depending on style\n                }\n\n                int saveX = x;\n                ChartMarkerEnum cm = this.ChartDefn.Type == ChartTypeEnum.Bubble ? ChartMarkerEnum.Bubble : ChartMarkerEnum.None;\n                for (int iCol = 1; iCol <= SeriesCount; iCol++)\n                {\n                    string c = await GetSeriesValue(rpt, iCol);\n                    if (c != \"\") //14052008WRP Cater for empty strings in the legend\n                    {\n                        Draw2.Rectangle rect;\n                        // 20022008 AJM GJL - Draw correct legend icon (Column\\Line)\n                        Type t = null;\n                        t = GetSeriesBrush(rpt, 1, iCol).GetType();\n                        /* The following 2 lines have been added to draw the correct legend for column chart with line plot types\n                         * 06122007AJM */\n                        cm = ChartMarkerEnum.None;\n                        bool isLine = GetPlotType(rpt, iCol, 1).ToUpper() == \"LINE\";\n\n                        if ((bMarker || isLine) || (this.ChartDefn.Type == ChartTypeEnum.Scatter && t == typeof(Drawing2D.HatchBrush)))\n                            cm = SeriesMarker[iCol - 1];\n                        if (isLine && this.ChartDefn.Type == ChartTypeEnum.Scatter)\n                        {\n                            cm = ChartMarkerEnum.Line;\n                        }\n\n                        bool NoMarker = getNoMarkerVal(rpt, iCol, 1);\n                        if (NoMarker) { cm = ChartMarkerEnum.Line; }\n\n                        String LineSize = getLineSize(rpt, iCol, 1);\n                        int intLineSize = 2;\n                        switch (LineSize)\n                        {\n                            case \"Small\":\n                                intLineSize = 1;\n                                break;\n                            case \"Regular\":\n                                intLineSize = 2;\n                                break;\n                            case \"Large\":\n                                intLineSize = 3;\n                                break;\n                            case \"Extra Large\":\n                                intLineSize = 4;\n                                break;\n                            case \"Super Size\":\n                                intLineSize = 5;\n                                break;\n                        }\n\n\n                        Draw2.SolidBrush b;\n                        switch (l.Layout)\n                        {\n                            case LegendLayoutEnum.Row:\n                                rect = new Draw2.Rectangle(x + boxSize + (boxSize / 2), y, totalItemWidth - boxSize - (boxSize / 2), h);\n                                if (c != \"\") //14052008WRP to cater for empty strings in the legend\n                                {\n                                    g.DrawString(c, drawFont, drawBrush, rect, drawFormat);\n\n                                    if ((cm != ChartMarkerEnum.None || this.ChartDefn.Type == ChartTypeEnum.Scatter) && (t == typeof(Drawing2D.HatchBrush))) //GJL 110208 - Don't draw pattern for lines or Bubbles\n                                    {\n                                        Drawing2D.HatchBrush hb = (Drawing2D.HatchBrush)await GetSeriesBrush(rpt, 1, iCol);\n                                        b = new Draw2.SolidBrush(hb.ForegroundColor);\n\n                                        DrawLegendBox(g, b,\n                                        cm, x, y + 1, boxSize, intLineSize);\n                                    }\n                                    else\n                                    {\n                                        DrawLegendBox(g, await GetSeriesBrush(rpt, 1, iCol),\n                                            cm, x, y + 1, boxSize, intLineSize);\n                                    }\n\n\n                                    x += (sizes[iCol - 1].Width + (boxSize * 2));\n                                }\n                                break;\n                            case LegendLayoutEnum.Table:\n                                rect = new Draw2.Rectangle(x + boxSize + (boxSize / 2), y, maxTextWidth, h);\n                                g.DrawString(c, drawFont, drawBrush, rect, drawFormat);\n\n                                if (cm != ChartMarkerEnum.None && (t == typeof(Drawing2D.HatchBrush))) //GJL 110208 - Don't draw pattern for lines\n                                {\n                                    Drawing2D.HatchBrush hb = (Drawing2D.HatchBrush)await GetSeriesBrush(rpt, 1, iCol);\n                                    b = new Draw2.SolidBrush(hb.ForegroundColor);\n\n                                    DrawLegendBox(g, /*GetSeriesBrushesExcel(iCol - 1)*/ b,\n                                    cm, x, y + 1, boxSize, intLineSize);\n                                }\n                                else\n                                { DrawLegendBox(g, await GetSeriesBrush(rpt, 1, iCol), cm, x + 1, y, boxSize, intLineSize); }\n\n\n                                if (iCol % 2 == 0)\n                                {\n                                    y += h;\n                                    x = saveX;\n                                }\n                                else\n                                {\n                                    x = saveX + (rRect.Width / 2);\n                                }\n                                break;\n                            case LegendLayoutEnum.Column:\n                            default:\n                                rect = new Draw2.Rectangle(x + boxSize + (boxSize / 2), y, maxTextWidth, h);\n                                g.DrawString(c, drawFont, drawBrush, rect, drawFormat);\n\n\n                                if (cm != ChartMarkerEnum.None && (t == typeof(Drawing2D.HatchBrush)))       //GJL 110208 - Don't draw pattern for lines                          \n                                {\n                                    Drawing2D.HatchBrush hb = (Drawing2D.HatchBrush)await GetSeriesBrush(rpt, 1, iCol);\n                                    b = new Draw2.SolidBrush(hb.ForegroundColor);\n\n                                    DrawLegendBox(g, /*GetSeriesBrushesExcel(iCol - 1)*/ b,\n                                    cm, x, y + 1, boxSize, intLineSize);\n                                }\n                                else\n                                {\n                                    DrawLegendBox(g, await GetSeriesBrush(rpt, 1, iCol),\n                                        cm, x + 1, y, boxSize, intLineSize);\n                                }\n\n                                y += h;\n                                break;\n                        }\n                    }\n                }\n            }\n            finally\n            {\n                if (drawFont != null)\n                    drawFont.Dispose();\n                if (drawBrush != null)\n                    drawBrush.Dispose();\n                if (drawFormat != null)\n                    drawFormat.Dispose();\n            }\n            if (s != null)\n                rRect = await s.PaddingAdjust(rpt, null, rRect, true);\n            return rRect;\n\n        }\n\n        void DrawLegendBox(Draw2.Graphics g, Draw2.Brush b, ChartMarkerEnum marker, int x, int y, int boxSize)\n        {\n            DrawLegendBox(g, b, marker, x, y, boxSize, 2);\n        }\n\n        void DrawLegendBox(Draw2.Graphics g, Draw2.Brush b, ChartMarkerEnum marker, int x, int y, int boxSize, int intLineSize)\n        {\n            Draw2.Pen p = null;\n            int mSize = boxSize / 2;        // Marker size is 1/2 of box size\t\n            try\n            {\n                if (marker < ChartMarkerEnum.Count)\n                {\n                    p = new Draw2.Pen(b, intLineSize);\n                    if (this.ChartDefn.Type != ChartTypeEnum.Scatter)\n                    {\n                        g.DrawLine(p, new Draw2.Point(x, y + ((boxSize + 1) / 2)), new Draw2.Point(x + boxSize, y + ((boxSize + 1) / 2)));\n                    }\n                    x = x + ((boxSize - mSize) / 2);\n                    y = y + ((boxSize - mSize) / 2);\n                    if (mSize % 2 == 0)\n                        mSize++;\n                }\n\n                if (marker == ChartMarkerEnum.None)\n                {\n                    g.FillRectangle(b, x, y, boxSize, boxSize);\n                }\n                else if (marker == ChartMarkerEnum.Bubble)\n                {\n                    g.FillEllipse(b, x, y, boxSize, boxSize);\n                }\n                else if (marker == ChartMarkerEnum.Line)\n                {\n                    // this is only to draw lines for line plot types on scatter charts\n                    p = new Draw2.Pen(b, intLineSize);\n                    g.DrawLine(p, new Draw2.Point(x, y + ((boxSize + 1) / 2)), new Draw2.Point(x + boxSize, y + ((boxSize + 1) / 2)));\n                }\n                else\n                {\n                    DrawLegendMarker(g, b, p, marker, x, y, mSize);\n                }\n            }\n            finally\n            {\n                if (p != null)\n                    p.Dispose();\n            }\n        }\n\n        internal void DrawLegendMarker(Draw2.Graphics g, Draw2.Brush b, Draw2.Pen p, ChartMarkerEnum marker, int x, int y, int mSize)\n        {\n            Draw2.PointF[] points;\n            switch (marker)\n            {\n                case ChartMarkerEnum.Bubble:\n                case ChartMarkerEnum.Circle:\n                    g.FillEllipse(b, x, y, mSize, mSize);\n                    break;\n                case ChartMarkerEnum.Square:\n                    g.FillRectangle(b, x, y, mSize, mSize);\n                    break;\n                case ChartMarkerEnum.Plus:\n                    // 20022008 AJM GJL - Changed to line - plus is hard to see\n                    p = new Draw2.Pen(p.Brush, 2);\n                    g.DrawLine(p, new Draw2.Point(x + ((mSize + 1) / 2), y), new Draw2.Point(x + ((mSize + 1) / 2), y + mSize));\n                    //g.DrawLine(p, new Point(x + (mSize + 1)/2, y + (mSize+1)/2), new Point(x + mSize, y + (mSize+1)/2));\n                    break;\n                case ChartMarkerEnum.Diamond:\n                    points = new Draw2.PointF[5];\n                    points[0] = points[4] = new Draw2.Point(x + ((mSize + 1) / 2), y);    // starting and ending point\n                    points[1] = new Draw2.PointF(x, y + ((mSize + 1) / 2));\n                    points[2] = new Draw2.PointF(x + ((mSize + 1) / 2), y + mSize);\n                    points[3] = new Draw2.PointF(x + mSize, y + ((mSize + 1) / 2));\n                    g.FillPolygon(b, points);\n                    break;\n                case ChartMarkerEnum.Triangle:\n                    points = new Draw2.PointF[4];\n                    points[0] = points[3] = new Draw2.PointF(x + ((mSize + 1) / 2), y);   // starting and ending point\n                    points[1] = new Draw2.PointF(x, y + mSize);\n                    points[2] = new Draw2.PointF(x + mSize, y + mSize);\n                    g.FillPolygon(b, points);\n                    break;\n                case ChartMarkerEnum.X:\n                    p = new Draw2.Pen(p.Brush, 2);// 20022008 AJM GJL\n                    g.DrawLine(p, new Draw2.Point(x, y), new Draw2.Point(x + mSize, y + mSize));\n                    g.DrawLine(p, new Draw2.Point(x, y + mSize), new Draw2.Point(x + mSize, y));// 20022008 AJM GJL\n                    break;\n            }\n            return;\n        }\n\n        // Measures the Legend and then returns the rectangle it drew in\n        protected async Task<(Draw2.Size[] sizes, int maxWidth, int maxHeight)> DrawLegendMeasure(Report rpt, Draw2.Graphics g, Draw2.Font f, Draw2.StringFormat sf, Draw2.SizeF maxSize)\n        {\n            Draw2.Size[] sizes = new Draw2.Size[SeriesCount];\n            int maxHeight = 0;\n            int maxWidth = maxHeight = 0;\n\n            for (int iCol = 1; iCol <= SeriesCount; iCol++)\n            {\n                string c = await GetSeriesValue(rpt, iCol);\n                if (c != \"\")  //14052008WRP cater for empty strings in legend names\n                {\n                    Draw2.SizeF ms = g.MeasureString(c, f, maxSize, sf);\n                    sizes[iCol - 1] = new Draw2.Size((int)Math.Ceiling(ms.Width),\n                                             (int)Math.Ceiling(ms.Height));\n                    if (sizes[iCol - 1].Width > maxWidth)\n                        maxWidth = sizes[iCol - 1].Width;\n                    if (sizes[iCol - 1].Height > maxHeight)\n                        maxHeight = sizes[iCol - 1].Height;\n                }\n\n            }\n            return (sizes, maxWidth, maxHeight);\n        }\n\n        protected async Task DrawPlotAreaStyle(Report rpt, Draw2.Graphics g, Draw2.Rectangle crect)\n        {\n            if (_ChartDefn.PlotArea == null || _ChartDefn.PlotArea.Style == null)\n                return;\n            Draw2.Rectangle rect = Layout.PlotArea;\n            Style s = _ChartDefn.PlotArea.Style;\n\n            Row r = FirstChartRow(rpt);\n\n            if (rect.IntersectsWith(crect))\n            {\n                // This occurs when the legend is drawn inside the plot area\n                //    we don't want to draw in the legend\n                Draw2.Region rg = null;\n                try\n                {\n                    //\t\t\t\trg = new Region(rect);\t// TODO: this doesn't work; nothing draws\n                    //\t\t\t\trg.Complement(crect);\n                    //\t\t\t\tRegion saver = g.Clip;\n                    //\t\t\t\tg.Clip = rg;\n                    await s.DrawBackground(rpt, g, r, rect);\n                    //\t\t\t\tg.Clip = saver;\n                }\n                finally\n                {\n                    if (rg != null)\n                        rg.Dispose();\n                }\n            }\n            else\n                await s.DrawBackground(rpt, g, r, rect);\n\n            return;\n        }\n\n        protected async Task DrawTitle(Report rpt, Draw2.Graphics g, Title t, Draw2.Rectangle rect)\n        {\n            if (t == null)\n                return;\n\n            if (t.Caption == null)\n                return;\n\n            Row r = FirstChartRow(rpt);\n            object title = await t.Caption.Evaluate(rpt, r);\n            if (t.Style != null)\n            {\n                await t.Style.DrawString(rpt, g, title, t.Caption.GetTypeCode(), r, rect);\n                await t.Style.DrawBorder(rpt, g, r, rect);\n            }\n            else\n                Style.DrawStringDefaults(g, title, rect);\n\n            return;\n        }\n\n        protected async Task<Draw2.Size> DrawTitleMeasure(Report rpt, Draw2.Graphics g, Title t)\n        {\n            Draw2.Size size = Draw2.Size.Empty;\n\n            if (t == null || t.Caption == null)\n                return size;\n\n            Row r = FirstChartRow(rpt);\n            object title = await t.Caption.Evaluate(rpt, r);\n            if (t.Style != null)\n                size = await t.Style.MeasureString(rpt, g, title, t.Caption.GetTypeCode(), r, int.MaxValue);\n            else\n                size = await Style.MeasureStringDefaults(rpt, g, title, t.Caption.GetTypeCode(), r, int.MaxValue);\n\n            return size;\n        }\n\n        //15052008WRP - Draw category month labels\n        protected async Task DrawCategoryLabel(Report rpt, Draw2.Graphics g, string t, Style a, Draw2.Rectangle rect)\n        {\n\n            if (t == null)\n                return;\n\n            Row r = FirstChartRow(rpt);\n\n            if (a != null)\n            {\n                await a.DrawString(rpt, g, t, t.GetTypeCode(), r, rect);\n                await a.DrawBorder(rpt, g, r, rect);\n            }\n            else\n                Style.DrawStringDefaults(g, t, rect);\n            return;\n        }\n\n        //15052008WRP - Measure category title size\n        protected async Task<Draw2.Size> DrawCategoryTitleMeasure(Report rpt, Draw2.Graphics g, string t, Style a)\n        {\n            Draw2.Size size = Draw2.Size.Empty;\n            Row r = FirstChartRow(rpt);\n\n            if (t == null || t == \"\")\n                return size;\n\n            if (a != null)\n                size = await a.MeasureString(rpt, g, t, t.GetTypeCode(), r, int.MaxValue);\n            else\n                size = await Style.MeasureStringDefaults(rpt, g, t, t.GetTypeCode(), r, int.MaxValue);\n\n            return size;\n\n        }\n\n        protected async Task<(object value, TypeCode tc)> GetCategoryValue(Report rpt, int row)\n        {\n            MatrixCellEntry mce = _DataDefn[row, 0];\n            TypeCode tc;\n            if (mce == null)\n            {\n                tc = TypeCode.String;\n                return (\"\", tc);                  // Not sure what this really means TODO:\n            }\n\n            Row lrow;\n            this._ChartDefn.ChartMatrix.SetMyData(rpt, mce.Data);       // Must set this for evaluation\n            if (mce.Data.Data.Count > 0)\n                lrow = mce.Data.Data[0];\n            else\n                lrow = null;\n            ChartExpression ce = (ChartExpression)(mce.DisplayItem);\n\n            object v = await ce.Value.Evaluate(rpt, lrow);\n            tc = ce.Value.GetTypeCode();\n            return (v, tc);\n        }\n\n        protected async Task<double> GetDataValue(Report rpt, int row, int col)\n        {\n            return await GetDataValue(rpt, row, col, 0);\n        }\n\n        /* Added this function to return the plot type\n\t\t * 05122007AJM */\n        protected string GetPlotType(Report rpt, int row, int col)\n        {\n            try\n            {\n                if (this is ChartColumn || this is ChartBubble)\n                {\n                    return ((ChartExpression)_DataDefn[col, row].DisplayItem).PlotType.Source;\n                }\n            }\n            catch //(Exception e)\n            {\n                //ignore \n            }\n            return \"Auto\";\n        }\n        // 20022008 AJM GJL\n        protected string GetYAxis(Report rpt, int row, int col)\n        {\n            try\n            {\n                if (this is ChartColumn)\n                {\n                    return ((ChartExpression)_DataDefn[col, row].DisplayItem).YAxis.Source;\n                }\n            }\n            catch //(Exception e)\n            {\n                //ignore \n            }\n            return \"Left\";\n        }\n\n        protected bool getNoMarkerVal(Report rpt, int row, int col)\n        {\n            try\n            {\n                return Boolean.Parse(((ChartExpression)_DataDefn[col, row].DisplayItem).NoMarker.Source);\n\n            }\n            catch\n            {\n            }\n            return false;\n        }\n\n\n        protected String getLineSize(Report rpt, int row, int col)\n        {\n            try\n            {\n                return ((ChartExpression)_DataDefn[col, row].DisplayItem).LineSize.Source;\n\n            }\n            catch\n            {\n            }\n            return \"Regular\";\n        }\n\n        protected String getColour(Report rpt, int row, int col)\n        {\n            try\n            {\n                return ((ChartExpression)_DataDefn[row, col].DisplayItem).Colour.Source;\n            }\n            catch\n            {\n            }\n            return \"\";\n        }\n        protected async Task<double> GetDataValue(Report rpt, int row, int col, int xyb)\n        {\n            MatrixCellEntry mce = _DataDefn[row, col];\n            if (mce == null)\n                return 0;\t\t\t\t\t// Not sure what this really means TODO:\n            if (mce.Value != double.MinValue && xyb == 0)\n                return mce.Value;\n\n            // Calculate this value; usually a fairly expensive operation\n            //   due to the common use of aggregate values.  We need to\n            //   go thru the data more than once if we have to auto scale.\n            Row lrow;\n            this._ChartDefn.ChartMatrix.SetMyData(rpt, mce.Data);\t\t// Must set this for evaluation\n            if (mce.Data.Data.Count > 0)\n                lrow = mce.Data.Data[0];\n            else\n                lrow = null;\n            ChartExpression ce = (ChartExpression)(mce.DisplayItem);\n\n            double v = double.MinValue;\n            if (xyb == 0)\n            {\n                v = await ce.Value.EvaluateDouble(rpt, lrow);\n                mce.Value = v;\t\t\t\t\t// cache so we don't need to calculate again\n            }\n            else if (xyb == 1)\n                v = await ce.Value2.EvaluateDouble(rpt, lrow);\n            else if (xyb == 2)\n                v = await ce.Value3.EvaluateDouble(rpt, lrow);\n\n            return v;\n        }\n        protected async Task<string> GetDataValueString(Report rpt, int row, int col)\n        {\n            MatrixCellEntry mce = _DataDefn[row, col];\n            if (mce == null)\n                return null;\t\t\t\t\t// Not sure what this really means TODO:\n\n            // Calculate this value; usually a fairly expensive operation\n            //   due to the common use of aggregate values.  We need to\n            //   go thru the data more than once if we have to auto scale.\n            Row lrow;\n            this._ChartDefn.ChartMatrix.SetMyData(rpt, mce.Data);\t\t// Must set this for evaluation\n            if (mce.Data.Data.Count > 0)\n                lrow = mce.Data.Data[0];\n            else\n                lrow = null;\n            ChartExpression ce = (ChartExpression)(mce.DisplayItem);\n\n            string v = await ce.Value.EvaluateString(rpt, lrow);\n            return v;\n        }\n\n        protected async Task<Draw2.Brush> GetSeriesBrush(Report rpt, int row, int col)\n        {\n            Draw2.Brush br = (await SeriesBrush(rpt, _row, ChartDefn.OwnerReport))[col - 1];            // this will be the default brush\n\n            //  obtain the rows we're acting upon\n            MatrixCellEntry mce = _DataDefn[row, col];\n            if (mce == null)\n                return br;\n\n            ChartExpression ce = (ChartExpression)(mce.DisplayItem);\n            if (ce.DP == null || ce.DP.Style == null || ce.DP.Style.BackgroundColor == null)\n                return br;\n\n            this._ChartDefn.ChartMatrix.SetMyData(rpt, mce.Data);\t\t// Must set this for evaluation\n            Row lrow = (mce.Data.Data.Count > 0) ? mce.Data.Data[0] : null;\n\n            Style s = ce.DP.Style;\n            string sc = await s.BackgroundColor.EvaluateString(rpt, lrow);\n\n            Draw2.Color rc = XmlUtil.ColorFromHtml(sc, Draw2.Color.Empty, rpt);\n            if (rc != Draw2.Color.Empty)\n                br = new Draw2.SolidBrush(rc);\n\n            return br;\n        }\n\n        protected async Task DrawDataPoint(Report rpt, Draw2.Graphics g, Draw2.Point p, int row, int col)\n        {\n            await DrawDataPoint(rpt, g, p, Draw2.Rectangle.Empty, row, col);\n        }\n\n        protected async Task DrawDataPoint(Report rpt, Draw2.Graphics g, Draw2.Rectangle rect, int row, int col)\n        {\n            await DrawDataPoint(rpt, g, Draw2.Point.Empty, rect, row, col);\n        }\n\n        async Task DrawDataPoint(Report rpt, Draw2.Graphics g, Draw2.Point p, Draw2.Rectangle rect, int row, int col)\n        {\n            MatrixCellEntry mce = _DataDefn[row, col];\n            if (mce == null)\n                return;                 // Not sure what this really means TODO:\n\n            ChartExpression ce = (ChartExpression)(mce.DisplayItem);\n            DataPoint dp = ce.DP;\n\n            if (dp.DataLabel == null || !dp.DataLabel.Visible)\n                return;\n\n            // Calculate the DataPoint value; usually a fairly expensive operation\n            //   due to the common use of aggregate values.  \n            Row lrow;\n            this._ChartDefn.ChartMatrix.SetMyData(rpt, mce.Data);       // Must set this for evaluation\n            if (mce.Data.Data.Count > 0)\n                lrow = mce.Data.Data[0];\n            else\n                lrow = null;\n\n            object v = null;\n            TypeCode tc;\n            if (dp.DataLabel.Value == null)\n            {       // No DataLabel value specified so we use the actual value\n                v = ce.Value.EvaluateDouble(rpt, lrow);\n                tc = TypeCode.Double;\n            }\n            else\n            {       // Evaluate the DataLable value for the display\n                v = await dp.DataLabel.Value.Evaluate(rpt, lrow);\n                tc = dp.DataLabel.Value.GetTypeCode();\n            }\n\n            if (dp.DataLabel.Style == null)\n            {\n                if (rect == Draw2.Rectangle.Empty)\n                {\n                    Draw2.Size size = await Style.MeasureStringDefaults(rpt, g, v, tc, lrow, int.MaxValue);\n                    rect = new Draw2.Rectangle(p, size);\n                }\n                Style.DrawStringDefaults(g, v, rect);\n            }\n            else\n            {\n                if (rect == Draw2.Rectangle.Empty)\n                {\n                    Draw2.Size size = await dp.DataLabel.Style.MeasureString(rpt, g, v, tc, lrow, int.MaxValue);\n                    rect = new Draw2.Rectangle(p, size);\n                }\n                await dp.DataLabel.Style.DrawString(rpt, g, v, tc, lrow, rect);\n            }\n\n            return;\n        }\n\n        protected async Task<string> GetSeriesValue(Report rpt, int iCol)\n        {\n            MatrixCellEntry mce = _DataDefn[0, iCol];\n            Row lrow;\n            if (mce.Data.Data.Count > 0)\n                lrow = mce.Data.Data[0];\n            else\n                lrow = null;\n            ChartExpression ce = (ChartExpression)(mce.DisplayItem);\n\n            string v = ce.ChartLabel == null ?\n                await ce.Value.EvaluateString(rpt, lrow) :\n                await ce.ChartLabel.EvaluateString(rpt, lrow);\n\n            return v;\n        }\n\n        // 20022008 AJM GJL - Should the Second Y axis be shown?\n        protected bool ShowRightYAxis(Report rpt)\n        {\n            for (int iRow = 1; iRow <= CategoryCount; iRow++)\n            {\n                for (int iCol = 1; iCol <= SeriesCount; iCol++)\n                {\n                    if (GetYAxis(rpt, iCol, 1).ToUpper() == \"RIGHT\")\n                    {\n                        return true;\n                    }\n                }\n            }\n            return false;\n        }\n        protected async Task<(double max, double min)> GetMaxMinDataValue(Report rpt, int xyb, int WhichYAxis)\n        {\n            if ((ChartSubTypeEnum)Enum.Parse(typeof(ChartSubTypeEnum), await _ChartDefn.Subtype.EvaluateString(rpt, _row)) == ChartSubTypeEnum.Stacked)\n            {\n                var result = await GetMaxMinDataValueStacked(rpt);\n                return (result.max, result.min);\n            }\n            double min = double.MaxValue;\n            double max = double.MinValue;\n\n            double v = 0;// 20022008 AJM GJL\n            for (int iRow = 1; iRow <= CategoryCount; iRow++)\n            {\n                for (int iCol = 1; iCol <= SeriesCount; iCol++)\n                {\n                    // 20022008 AJM GJL\n                    if (WhichYAxis == 2)\n                    {\n                        if (GetYAxis(rpt, iCol, 1).ToUpper() == \"RIGHT\")\n                        {\n                            v = await GetDataValue(rpt, iRow, iCol, xyb);\n                            if (v < min)\n                                min = v;\n                            if (v > max)\n                                max = v;\n\n                        }\n                    }\n                    else\n                    {\n                        if (GetYAxis(rpt, iCol, 1).ToUpper() != \"RIGHT\")\n                        {\n                            v = await GetDataValue(rpt, iRow, iCol, xyb);\n                            if (v < min)\n                                min = v;\n                            if (v > max)\n                                max = v;\n\n                        }\n                    }\n                }\n            }\n            return (max, min);\n        }\n\n        async Task<(double max, double min)> GetMaxMinDataValueStacked(Report rpt)\n        {\n            double min = double.MaxValue;\n            double max = double.MinValue;\n\n            double v;\n            for (int iRow = 1; iRow <= CategoryCount; iRow++)\n            {\n                v = 0;\n                for (int iCol = 1; iCol <= SeriesCount; iCol++)\n                {\n                    v += await GetDataValue(rpt, iRow, iCol);\n                }\n                if (v < min)\n                    min = v;\n                if (v > max)\n                    max = v;\n            }\n\n            return (max, min);\n        }\n\n        protected async Task<Draw2.Brush[]> GetSeriesBrushes(Report rpt, Row row, ReportDefn defn)\n        {\n            Draw2.Brush[] b = new Draw2.Brush[SeriesCount];\n\n            for (int i = 0; i < SeriesCount; i++)\n            {\n                // TODO: In general all the palettes could use a good going over\n                //   both in terms of the colors in the lists and their order\n                switch (ChartPalette.GetStyle(await ChartDefn.Palette.EvaluateString(rpt, row), defn.rl))\n                {\n                    case ChartPaletteEnum.Default:\n                        b[i] = GetSeriesBrushesExcel(i); break;\n                    case ChartPaletteEnum.EarthTones:\n                        b[i] = GetSeriesBrushesEarthTones(i); break;\n                    case ChartPaletteEnum.Excel:\n                        b[i] = GetSeriesBrushesExcel(i); break;\n                    case ChartPaletteEnum.GrayScale:\n                        b[i] = GetSeriesBrushesGrayScale(i); break;\n                    case ChartPaletteEnum.Light:\n                        b[i] = GetSeriesBrushesLight(i); break;\n                    case ChartPaletteEnum.Pastel:\n                        b[i] = GetSeriesBrushesPastel(i); break;\n                    case ChartPaletteEnum.SemiTransparent:\n                        b[i] = GetSeriesBrushesExcel(i); break; // TODO\n                                                                // 20022008 AJM GJL - New black & white printer friendly palette (NOT TO RDL SPEC BUT REQUIRED!)\n                    case ChartPaletteEnum.Patterned:\n                        b[i] = GetSeriesBrushesPatterned(i); break;\n                    case ChartPaletteEnum.PatternedBlack:\n                        b[i] = GetSeriesBrushesPatternedBlack(i); break;\n                    case ChartPaletteEnum.Custom:\n\n                        b[i] = new Draw2.SolidBrush(Draw2.Color.FromName(getColour(rpt, 1, i + 1))); break;\n                    default:\n                        b[i] = GetSeriesBrushesExcel(i); break;\n                }\n            }\n\n            return b;\n        }\n\n        Draw2.Brush GetSeriesBrushesEarthTones(int i)\n        {\n            switch (i % 22)\n            {\n                case 0: return Draw2.Brushes.Maroon;\n                case 1: return Draw2.Brushes.Brown;\n                case 2: return Draw2.Brushes.Chocolate;\n                case 3: return Draw2.Brushes.IndianRed;\n                case 4: return Draw2.Brushes.Peru;\n                case 5: return Draw2.Brushes.BurlyWood;\n                case 6: return Draw2.Brushes.AntiqueWhite;\n                case 7: return Draw2.Brushes.FloralWhite;\n                case 8: return Draw2.Brushes.Ivory;\n                case 9: return Draw2.Brushes.LightCoral;\n                case 10: return Draw2.Brushes.DarkSalmon;\n                case 11: return Draw2.Brushes.LightSalmon;\n                case 12: return Draw2.Brushes.PeachPuff;\n                case 13: return Draw2.Brushes.NavajoWhite;\n                case 14: return Draw2.Brushes.Moccasin;\n                case 15: return Draw2.Brushes.PapayaWhip;\n                case 16: return Draw2.Brushes.Goldenrod;\n                case 17: return Draw2.Brushes.DarkGoldenrod;\n                case 18: return Draw2.Brushes.DarkKhaki;\n                case 19: return Draw2.Brushes.Khaki;\n                case 20: return Draw2.Brushes.Beige;\n                case 21: return Draw2.Brushes.Cornsilk;\n                default: return Draw2.Brushes.Brown;\n            }\n        }\n\n        Draw2.Brush GetSeriesBrushesExcel(int i)\n        {\n            switch (i % 11)             // Just a guess at what these might actually be\n            {\n                //Gil's Excel 080208 - from excel 2007\n                case 0: return Draw2.Brushes.Blue;\n                case 1: return Draw2.Brushes.Red;\n                case 2: return Draw2.Brushes.Green;\n                case 3: return Draw2.Brushes.Purple;\n                case 4: return Draw2.Brushes.DeepSkyBlue;\n                case 5: return Draw2.Brushes.Orange;\n                case 6: return Draw2.Brushes.Magenta;\n                case 7: return Draw2.Brushes.Gold;\n                case 8: return Draw2.Brushes.Lime;\n                case 9: return Draw2.Brushes.Teal;\n                case 10: return Draw2.Brushes.Pink;\n                default: return Draw2.Brushes.Blue;\n            }\n        }\n        // 20022008 AJM GJL\n        Draw2.Brush GetSeriesBrushesPatterned(int i)\n        {\n            Drawing2D.HatchBrush PatternBrush;\n            switch (i % 10)\n            {\n                case 0:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.LargeConfetti, Draw2.Color.Blue, Draw2.Color.White);\n                    break;\n                case 1:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.Cross, Draw2.Color.Red, Draw2.Color.White); // was weave... but I Especially didn't want to draw that in PDF - GJL\n                    break;\n                case 2:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.DarkDownwardDiagonal, Draw2.Color.Green, Draw2.Color.White);\n                    break;\n                case 3:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.OutlinedDiamond, Draw2.Color.Purple, Draw2.Color.White);\n                    break;\n                case 4:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.DarkHorizontal, Draw2.Color.DeepSkyBlue, Draw2.Color.White);\n                    break;\n                case 5:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.SmallConfetti, Draw2.Color.Orange, Draw2.Color.White);\n                    break;\n                case 6:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.HorizontalBrick, Draw2.Color.Magenta, Draw2.Color.White);\n                    break;\n                case 7:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.LargeCheckerBoard, Draw2.Color.Gold, Draw2.Color.White); // was wave... but I didn't want to draw that in PDF - GJL\n                    break;\n                case 8:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.Vertical, Draw2.Color.Lime, Draw2.Color.White);\n                    break;\n                case 9:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.SolidDiamond, Draw2.Color.Teal, Draw2.Color.White);\n                    break;\n                case 10:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.DiagonalBrick, Draw2.Color.Pink, Draw2.Color.White);\n                    break;\n                default:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.BackwardDiagonal, Draw2.Color.Blue, Draw2.Color.White);\n                    break;\n\n            }\n            return PatternBrush;\n        }\n\n\n        Draw2.Brush GetSeriesBrushesPatternedBlack(int i)\n        {\n            Drawing2D.HatchBrush PatternBrush;\n            switch (i % 10)\n            {\n                case 0:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.LargeConfetti, Draw2.Color.Black, Draw2.Color.White);\n                    break;\n                case 1:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.Weave, Draw2.Color.Black, Draw2.Color.White);\n                    break;\n                case 2:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.DarkDownwardDiagonal, Draw2.Color.Black, Draw2.Color.White);\n                    break;\n                case 3:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.OutlinedDiamond, Draw2.Color.Black, Draw2.Color.White);\n                    break;\n                case 4:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.DarkHorizontal, Draw2.Color.Black, Draw2.Color.White);\n                    break;\n                case 5:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.SmallConfetti, Draw2.Color.Black, Draw2.Color.White);\n                    break;\n                case 6:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.HorizontalBrick, Draw2.Color.Black, Draw2.Color.White);\n                    break;\n                case 7:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.Wave, Draw2.Color.Black, Draw2.Color.White);\n                    break;\n                case 8:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.Vertical, Draw2.Color.Black, Draw2.Color.White);\n                    break;\n                case 9:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.SolidDiamond, Draw2.Color.Black, Draw2.Color.White);\n                    break;\n                case 10:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.DiagonalBrick, Draw2.Color.Black, Draw2.Color.White);\n                    break;\n                default:\n                    PatternBrush = new Drawing2D.HatchBrush(Drawing2D.HatchStyle.BackwardDiagonal, Draw2.Color.Black, Draw2.Color.White);\n                    break;\n\n            }\n            return PatternBrush;\n        }\n\n        Draw2.Brush GetSeriesBrushesGrayScale(int i)\n        {\n            switch (i % 10)\n            {\n                case 0: return Draw2.Brushes.Gray;\n                case 1: return Draw2.Brushes.SlateGray;\n                case 2: return Draw2.Brushes.DarkGray;\n                case 3: return Draw2.Brushes.LightGray;\n                case 4: return Draw2.Brushes.DarkSlateGray;\n                case 5: return Draw2.Brushes.DimGray;\n                case 6: return Draw2.Brushes.LightSlateGray;\n                case 7: return Draw2.Brushes.Black;\n                case 8: return Draw2.Brushes.White;\n                case 9: return Draw2.Brushes.Gainsboro;\n                default: return Draw2.Brushes.Gray;\n            }\n        }\n\n        Draw2.Brush GetSeriesBrushesLight(int i)\n        {\n            switch (i % 13)\n            {\n                case 0: return Draw2.Brushes.LightBlue;\n                case 1: return Draw2.Brushes.LightCoral;\n                case 2: return Draw2.Brushes.LightCyan;\n                case 3: return Draw2.Brushes.LightGoldenrodYellow;\n                case 4: return Draw2.Brushes.LightGray;\n                case 5: return Draw2.Brushes.LightGreen;\n                case 6: return Draw2.Brushes.LightPink;\n                case 7: return Draw2.Brushes.LightSalmon;\n                case 8: return Draw2.Brushes.LightSeaGreen;\n                case 9: return Draw2.Brushes.LightSkyBlue;\n                case 10: return Draw2.Brushes.LightSlateGray;\n                case 11: return Draw2.Brushes.LightSteelBlue;\n                case 12: return Draw2.Brushes.LightYellow;\n                default: return Draw2.Brushes.LightBlue;\n            }\n        }\n\n        Draw2.Brush GetSeriesBrushesPastel(int i)\n        {\n            switch (i % 26)\n            {\n                case 0: return Draw2.Brushes.CadetBlue;\n                case 1: return Draw2.Brushes.MediumTurquoise;\n                case 2: return Draw2.Brushes.Aquamarine;\n                case 3: return Draw2.Brushes.LightCyan;\n                case 4: return Draw2.Brushes.Azure;\n                case 5: return Draw2.Brushes.AliceBlue;\n                case 6: return Draw2.Brushes.MintCream;\n                case 7: return Draw2.Brushes.DarkSeaGreen;\n                case 8: return Draw2.Brushes.PaleGreen;\n                case 9: return Draw2.Brushes.LightGreen;\n                case 10: return Draw2.Brushes.MediumPurple;\n                case 11: return Draw2.Brushes.CornflowerBlue;\n                case 12: return Draw2.Brushes.Lavender;\n                case 13: return Draw2.Brushes.GhostWhite;\n                case 14: return Draw2.Brushes.PaleGoldenrod;\n                case 15: return Draw2.Brushes.LightGoldenrodYellow;\n                case 16: return Draw2.Brushes.LemonChiffon;\n                case 17: return Draw2.Brushes.LightYellow;\n                case 18: return Draw2.Brushes.Orchid;\n                case 19: return Draw2.Brushes.Plum;\n                case 20: return Draw2.Brushes.LightPink;\n                case 21: return Draw2.Brushes.Pink;\n                case 22: return Draw2.Brushes.LavenderBlush;\n                case 23: return Draw2.Brushes.Linen;\n                case 24: return Draw2.Brushes.PaleTurquoise;\n                case 25: return Draw2.Brushes.OldLace;\n                default: return Draw2.Brushes.CadetBlue;\n            }\n        }\n\n        protected ChartMarkerEnum[] GetSeriesMarkers()\n        {\n            ChartMarkerEnum[] m = new ChartMarkerEnum[SeriesCount];\n\n            for (int i = 0; i < SeriesCount; i++)\n            {\n                m[i] = (ChartMarkerEnum)(i % (int)ChartMarkerEnum.Count);\n            }\n\n            return m;\n        }\n\n        protected async Task<(double max, double min)> GetValueMaxMin(Report rpt,  double max,  double min, int xyb, int WhichYAxis)// 20022008 AJM GJL\n        {\n\n            if ((ChartSubTypeEnum)Enum.Parse(typeof(ChartSubTypeEnum), await _ChartDefn.Subtype.EvaluateString(rpt, _row)) == ChartSubTypeEnum.PercentStacked)\n            {   // Percent stacked is easy; and overrides user provided values\n                max = 1;\n                min = 0;\n                return (max, min);\n            }\n            Axis ax;\n            if (_ChartDefn.Type == ChartTypeEnum.Bubble ||\n                _ChartDefn.Type == ChartTypeEnum.Scatter)\n            {\n                // Axis actually depends on the xyb parameter : 0 is X axis: 1 is Y Axis; \n                if (xyb == 0)\n                    ax = _ChartDefn.CategoryAxis != null ? _ChartDefn.CategoryAxis.Axis : null;\n                else if (xyb == 1)\n                    ax = _ChartDefn.ValueAxis != null ? _ChartDefn.ValueAxis.Axis : null;\n                else\n                    ax = null;\n            }\n            else\n            {\n                ax = _ChartDefn.ValueAxis != null ? _ChartDefn.ValueAxis.Axis : null;\n            }\n\n\n            double vAxisMax;\n            double vAxisMin;\n            if (ax != null)\n            {\n                vAxisMax = await ax.MaxEval(rpt, _row);\n                vAxisMin = await ax.MinEval(rpt, _row);\n            }\n            else\n            {\n                vAxisMax = vAxisMin = int.MinValue;\n            }\n\n            // Check for case where both min and max are provided\n            if (vAxisMax != int.MinValue && !vAxisMax.Equals(double.NaN) &&\n                vAxisMin != int.MinValue && !vAxisMin.Equals(double.NaN))\n            {\n                max = vAxisMax;\n                min = vAxisMin;\n                return (max, min);\n            }\n\n            // OK We have to work for it;  Calculate min/max of data\n            (max, min) = await GetMaxMinDataValue(rpt, xyb, 1);  // 20022008 AJM GJL\n\n            if (vAxisMax != int.MinValue && !vAxisMax.Equals(double.NaN))\n                max = vAxisMax;\n            else\n            {\n                //\n                //int gridIncrs=10;\t\t// assume 10 grid increments for now\n                _gridIncrs = 10; //PJR 20071113 - grid incrs set & adjusted in here now\n\n                double incr = max / _gridIncrs; // should be range between max and min?\n                double log = Math.Floor(Math.Log10(Math.Abs(incr)));\n\n\n                double logPow = Math.Pow(10, log) * Math.Sign(max);\n                double logDig = (int)((incr / logPow) + .5);\n\n                // promote the MSD to either 1, 2, or 5\n                if (logDig > 5.0)\n                    logDig = 10.0;\n                else if (logDig > 2.0)\n                    logDig = 5.0;\n                else if (logDig > 1.0)\n                    logDig = 2.0;\n                //PJR 20071113 - reduce scale for large overscale options by decreasing _gridIncrs\n                while (max < logDig * logPow * _gridIncrs)\n                {\n                    _gridIncrs--;\n                }\n                //_gridIncrs++;\n\n                //PJR 20071113 - expand scale so that it is able to fit the max value by increasing _gridIncrs\n                while (max > logDig * logPow * _gridIncrs)\n                {\n                    _gridIncrs++;\n                }\n                // 20022008 AJM GJL\n                double tmpMax = max;\n                // 04032008 AJM - Fixing Strange Number Choice with small numbers\n                max = /*(int)*/ (logDig * logPow * _gridIncrs /*+ 0.5*/);\n\n                if (tmpMax > max - ((max / _gridIncrs) * .5))\n                {\n\n                    max += (max / _gridIncrs);\n                    _gridIncrs++;\n                }\n            }\n\n            if (vAxisMin != int.MinValue && !vAxisMin.Equals(double.NaN))\n                min = vAxisMin;\n            else if (min > 0)\n                min = 0;\n            else\n            {\n                min = Math.Floor(min);\n            }\n\n            return (max, min);\n        }\n\n        protected void AdjustMargins(Draw2.Rectangle legendRect, Report rpt, Draw2.Graphics g)\n        {\n            // //110208AJM GJL Making room for second y axis        \n\n            // if (ShowRightYAxis(rpt) && !(IsLegendRight()))\n            //{              \n            //     Layout.RightMargin = (int)(Layout.LeftMargin * 1.5);\n            //}\n\n\n            // Adjust the margins based on the legend\n            if (!IsLegendInsidePlotArea())  // When inside plot area we don't adjust plot margins\n            {\n                if (IsLegendLeft())\n                    Layout.LeftMargin += legendRect.Width;\n                else if (IsLegendRight())\n                    Layout.RightMargin += legendRect.Width;\n                if (IsLegendTop())\n                    Layout.TopMargin += legendRect.Height;\n                else if (IsLegendBottom())\n                    Layout.BottomMargin += legendRect.Height;\n            }\n            // Force some margins; if any are too small\n            int min = new RSize(ChartDefn.OwnerReport, \".2 in\").PixelsX;\n\n            if (Layout.RightMargin < min + (this._LastCategoryWidth / 2))\n                Layout.RightMargin = min + (this._LastCategoryWidth / 2);\n            if (Layout.LeftMargin < min)\n                Layout.LeftMargin = min;\n            if (Layout.TopMargin < min)\n                Layout.TopMargin = min;\n            if (Layout.BottomMargin < min)\n                Layout.BottomMargin = min;\n        }\n\n        protected bool IsLegendLeft()\n        {\n            Legend l = _ChartDefn.Legend;\n            if (l == null || !l.Visible)\n                return false;\n\n            bool rc;\n            switch (l.Position)\n            {\n                case LegendPositionEnum.BottomLeft:\n                case LegendPositionEnum.LeftBottom:\n                case LegendPositionEnum.LeftCenter:\n                case LegendPositionEnum.LeftTop:\n                case LegendPositionEnum.TopLeft:\n                    rc = true;\n                    break;\n                default:\n                    rc = false;\n                    break;\n            }\n\n            return rc;\n        }\n\n        protected async Task<(double incr, int interval)> SetIncrementAndInterval(Report rpt, Axis a, double min, double max)\n        {\n            int interval = _gridIncrs; //PJR 20071113 - gridincrements set by Max value now                 // assume an interval count of 10 to start\n            double incr;\n\n            if (a.MajorInterval != null)\n            {\n                incr = await a.MajorInterval.EvaluateDouble(rpt, this.ChartRow);\n                if (incr.CompareTo(double.MinValue) == 0)\n                    incr = (max - min) / interval;\n                else\n                {\n                    interval = (int)((int)(Math.Abs(max - min) / incr));\n                }\n            }\n            else\n                incr = (max - min) / interval;\n\n            return (incr, interval);\n        }\n\n        protected bool IsLegendInsidePlotArea()\n        {\n            Legend l = _ChartDefn.Legend;\n            if (l == null || !l.Visible)\n                return false;               // doesn't really matter\n            else\n                return l.InsidePlotArea;\n        }\n\n        protected bool IsLegendRight()\n        {\n            Legend l = _ChartDefn.Legend;\n            if (l == null || !l.Visible)\n                return false;\n\n            bool rc;\n            switch (l.Position)\n            {\n                case LegendPositionEnum.BottomRight:\n                case LegendPositionEnum.RightBottom:\n                case LegendPositionEnum.RightCenter:\n                case LegendPositionEnum.TopRight:\n                case LegendPositionEnum.RightTop:\n                    rc = true;\n                    break;\n                default:\n                    rc = false;\n                    break;\n            }\n            return rc;\n        }\n\n        protected bool IsLegendTop()\n        {\n            Legend l = _ChartDefn.Legend;\n            if (l == null || !l.Visible)\n                return false;\n\n            bool rc;\n            switch (l.Position)\n            {\n                case LegendPositionEnum.LeftTop:\n                case LegendPositionEnum.TopLeft:\n                case LegendPositionEnum.TopCenter:\n                case LegendPositionEnum.TopRight:\n                case LegendPositionEnum.RightTop:\n                    rc = true;\n                    break;\n                default:\n                    rc = false;\n                    break;\n            }\n            return rc;\n        }\n\n        protected bool IsLegendBottom()\n        {\n            Legend l = _ChartDefn.Legend;\n            if (l == null || !l.Visible)\n                return false;\n\n            bool rc;\n            switch (l.Position)\n            {\n                case LegendPositionEnum.BottomCenter:\n                case LegendPositionEnum.BottomLeft:\n                case LegendPositionEnum.LeftBottom:\n                case LegendPositionEnum.BottomRight:\n                case LegendPositionEnum.RightBottom:\n                    rc = true;\n                    break;\n                default:\n                    rc = false;\n                    break;\n            }\n            return rc;\n        }\n\n        private Row FirstChartRow(Report rpt)\n        {\n            Rows _Data = _ChartDefn.ChartMatrix.GetMyData(rpt);\n            if (_Data != null &&\n                _Data.Data.Count > 0)\n                return _Data.Data[0];\n            else\n                return null;\n\n        }\n        #region IDisposable Members\n\n        public void Dispose()\n        {\n            if (_bm != null)\n                _bm.Dispose();\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ChartBubble.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Runtime.InteropServices;\nusing System.Threading.Tasks;\n\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    ///<summary>\n    /// Line chart definition and processing.\n    ///</summary>\n    [Serializable]\n    internal class ChartBubble : ChartBase\n    {\n\n        internal ChartBubble(Report r, Row row, Chart c, MatrixCellEntry[,] m, Expression showTooltips, Expression showTooltipsX, Expression _ToolTipYFormat, Expression _ToolTipXFormat)\n            : base(r, row, c, m, showTooltips, showTooltipsX, _ToolTipYFormat, _ToolTipXFormat)\n        {\n        }\n\n        override internal async Task Draw(Report rpt)\n        {\n            CreateSizedBitmap();\n\n#if !DRAWINGCOMPAT\n            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))\n            {\n                using (Draw2.Graphics g1 = Draw2.Graphics.FromImage(_bm))\n                {\n                    _aStream = new System.IO.MemoryStream();\n                    IntPtr HDC = g1.GetHdc();\n                    _mf = new Draw2.Imaging.Metafile(_aStream, HDC,\n                        new Draw2.RectangleF(0, 0, _bm.Width, _bm.Height), Draw2.Imaging.MetafileFrameUnit.Pixel);\n                    g1.ReleaseHdc(HDC);\n                }\n            }\n\n            using (Draw2.Graphics g = Draw2.Graphics.FromImage(_mf != null ? _mf : _bm))\n#else\n            using (Draw2.Graphics g = Draw2.Graphics.FromImage(_bm))\n#endif\n            {\n                // 06122007AJM Used to Force Higher Quality\n                g.InterpolationMode = Draw2.Drawing2D.InterpolationMode.HighQualityBicubic;\n                g.SmoothingMode = Draw2.Drawing2D.SmoothingMode.HighQuality;\n                g.PixelOffsetMode = Draw2.Drawing2D.PixelOffsetMode.None;\n                g.CompositingQuality = Draw2.Drawing2D.CompositingQuality.HighQuality;\n                g.PageUnit = Draw2.GraphicsUnit.Pixel;\n\n                // Adjust the top margin to depend on the title height\n                Draw2.Size titleSize = await DrawTitleMeasure(rpt, g, ChartDefn.Title);\n                Layout.TopMargin = titleSize.Height;\n\n                // 20022008 AJM GJL - Added new required info \n                double ymax = 0, ymin = 0;  // Get the max and min values for the y axis\n                (ymax, ymin) = await GetValueMaxMin(rpt, ymax, ymin, 1, 1);\n\n                double xmax = 0, xmin = 0;  // Get the max and min values for the x axis\n                (xmax, xmin) = await GetValueMaxMin(rpt, xmax, xmin, 0, 1);\n\n                double bmax = 0, bmin = 0;  // Get the max and min values for the bubble size\n                if (ChartDefn.Type == ChartTypeEnum.Bubble)     // only applies to bubble (not scatter)\n                    (bmax, bmin) = await GetValueMaxMin(rpt, bmax, bmin, 2, 1);\n\n                await DrawChartStyle(rpt, g);\n\n                // Draw title; routine determines if necessary\n                await DrawTitle(rpt, g, ChartDefn.Title, new Draw2.Rectangle(0, 0, Layout.Width, Layout.TopMargin));\n\n                // Adjust the left margin to depend on the Value Axis\n                Draw2.Size vaSize = await ValueAxisSize(rpt, g, ymin, ymax);\n                Layout.LeftMargin = vaSize.Width;\n\n                // Draw legend\n                Draw2.Rectangle lRect = await DrawLegend(rpt, g, false, true);\n\n                // Adjust the bottom margin to depend on the Category Axis\n                Draw2.Size caSize = await CategoryAxisSize(rpt, g, xmin, xmax);\n                Layout.BottomMargin = caSize.Height;\n\n                AdjustMargins(lRect, rpt, g);       // Adjust margins based on legend.\n\n                // Draw Plot area\n                await DrawPlotAreaStyle(rpt, g, lRect);\n\n                // Draw Value Axis\n                if (vaSize.Width > 0)   // If we made room for the axis - we need to draw it\n                    await DrawValueAxis(rpt, g, ymin, ymax,\n                        new Draw2.Rectangle(Layout.LeftMargin - vaSize.Width, Layout.TopMargin, vaSize.Width, Layout.PlotArea.Height), Layout.LeftMargin, _bm.Width - Layout.RightMargin);\n\n                // Draw Category Axis\n                if (caSize.Height > 0)\n                    await DrawCategoryAxis(rpt, g, xmin, xmax,\n                        new Draw2.Rectangle(Layout.LeftMargin, _bm.Height - Layout.BottomMargin, _bm.Width - Layout.LeftMargin - Layout.RightMargin, vaSize.Height),\n                        Layout.TopMargin, _bm.Height - Layout.BottomMargin);\n\n                // Draw Plot area data \n                await DrawPlot(rpt, g, xmin, xmax, ymin, ymax, bmin, bmax);\n                await DrawLegend(rpt, g, false, false);\n            }\n\n        }\n\n        async Task DrawPlot(Report rpt, Draw2.Graphics g, double xmin, double xmax, double ymin, double ymax, double bmin, double bmax)\n        {\n            // Draw Plot area data \n            int maxPointHeight = (int)Layout.PlotArea.Height;\n            int maxPointWidth = (int)Layout.PlotArea.Width;\n\n\n\n            for (int iCol = 1; iCol <= SeriesCount; iCol++)\n            {\n                //handle either line scatter or line plot type GJL 020308\n                Draw2.Point lastPoint = new Draw2.Point();\n                Draw2.Point[] Points = new Draw2.Point[2];\n                bool isLine = GetPlotType(rpt, iCol, 1).ToUpper() == \"LINE\";\n                for (int iRow = 1; iRow <= CategoryCount; iRow++)\n                {\n                    double xv = await this.GetDataValue(rpt, iRow, iCol, 0);\n                    double yv = await this.GetDataValue(rpt, iRow, iCol, 1);\n                    double bv = this.ChartDefn.Type == ChartTypeEnum.Bubble ?\n                        await this.GetDataValue(rpt, iRow, iCol, 2) : 0;\n                    if (xv < xmin || yv < ymin || xv > xmax || yv > ymax)\n                        continue;\n                    int x = (int)(((Math.Min(xv, xmax) - xmin) / (xmax - xmin)) * maxPointWidth);\n                    int y = (int)(((Math.Min(yv, ymax) - ymin) / (ymax - ymin)) * maxPointHeight);\n                    if (y != int.MinValue && x != int.MinValue)\n                    {\n                        Draw2.Point p = new Draw2.Point(Layout.PlotArea.Left + x, Layout.PlotArea.Top + (maxPointHeight - y));\n                        //GJL 010308 Line subtype scatter plot\n                        if ((ChartSubTypeEnum)Enum.Parse(typeof(ChartSubTypeEnum), await _ChartDefn.Subtype.EvaluateString(rpt, _row)) == ChartSubTypeEnum.Line || (ChartSubTypeEnum)Enum.Parse(typeof(ChartSubTypeEnum), await _ChartDefn.Subtype.EvaluateString(rpt, _row)) == ChartSubTypeEnum.SmoothLine || isLine)\n                        {\n                            if (!(lastPoint.IsEmpty))\n                            {\n                                Points[0] = lastPoint;\n                                Points[1] = p;\n                                String LineSize = getLineSize(rpt, iCol, 1);\n                                int intLineSize = 2;\n                                switch (LineSize)\n                                {\n                                    case \"Small\":\n                                        intLineSize = 1;\n                                        break;\n                                    case \"Regular\":\n                                        intLineSize = 2;\n                                        break;\n                                    case \"Large\":\n                                        intLineSize = 3;\n                                        break;\n                                    case \"Extra Large\":\n                                        intLineSize = 4;\n                                        break;\n                                    case \"Super Size\":\n                                        intLineSize = 5;\n                                        break;\n                                }\n                                await DrawLineBetweenPoints(g, rpt, await GetSeriesBrush(rpt, iRow, iCol), Points, intLineSize);\n                                //Add a metafilecomment to use as a tooltip GJL 26092008                          \n\n                                if (_showToolTips || _showToolTipsX)\n                                {\n                                    string display = \"\";\n                                    if (_showToolTipsX) display = xv.ToString(_tooltipXFormat);\n                                    if (_showToolTips)\n                                    {\n                                        if (display.Length > 0) display += \" , \";\n                                        display += yv.ToString(_tooltipYFormat);\n                                    }\n                                    String val = \"ToolTip:\" + display + \"|X:\" + (int)(p.X - 3) + \"|Y:\" + (int)(p.Y - 3) + \"|W:\" + 6 + \"|H:\" + 6;\n                                    g.AddMetafileComment(new System.Text.ASCIIEncoding().GetBytes(val));\n                                }\n\n\n                            }\n                        }\n                        else\n                        {\n                            await DrawBubble(rpt, g, await GetSeriesBrush(rpt, iRow, iCol), p, iRow, iCol, bmin, bmax, bv, xv, yv);\n\n                        }\n                        lastPoint = p;\n                    }\n                }\n            }\n            return;\n        }\n\n        /* This code was copied from the Line drawing class. \n        * 010308 GJL */\n        async Task DrawLineBetweenPoints(Draw2.Graphics g, Report rpt, Draw2.Brush brush, Draw2.Point[] points)\n        {\n            await DrawLineBetweenPoints(g, rpt, brush, points, 2);\n        }\n\n        async Task DrawLineBetweenPoints(Draw2.Graphics g, Report rpt, Draw2.Brush brush, Draw2.Point[] points, int intLineSize)\n        {\n            if (points.Length <= 1)\t\t// Need at least 2 points\n                return;\n\n            Draw2.Pen p = null;\n            try\n            {\n                if (brush.GetType() == typeof(Draw2.Drawing2D.HatchBrush))\n                {\n                    Draw2.Drawing2D.HatchBrush tmpBrush = (Draw2.Drawing2D.HatchBrush)brush;\n                    p = new Draw2.Pen(new Draw2.SolidBrush(tmpBrush.ForegroundColor), intLineSize); //1.5F);    // todo - use line from style ????\n                }\n                else\n                {\n                    p = new Draw2.Pen(brush, intLineSize);\n                }\n\n                if ((ChartSubTypeEnum)Enum.Parse(typeof(ChartSubTypeEnum), await _ChartDefn.Subtype.EvaluateString(rpt, _row)) == ChartSubTypeEnum.Smooth && points.Length > 2)\n                    g.DrawCurve(p, points, 0.5F);\n                else\n                    g.DrawLines(p, points);\n            }\n            finally\n            {\n                if (p != null)\n                    p.Dispose();\n            }\n            return;\n        }\n\n        async Task DrawBubble(Report rpt, Draw2.Graphics g, Draw2.Brush brush, Draw2.Point p, int iRow, int iCol, double bmin, double bmax, double bv, double xv, double yv)\n        {\n            Draw2.Pen pen = null;\n            int diameter = BubbleSize(rpt, iRow, iCol, bmin, bmax, bv);          // set diameter of bubble\n\n            int radius = diameter / 2;\n            try\n            {\n                if (this.ChartDefn.Type == ChartTypeEnum.Scatter &&\n                    brush.GetType() == typeof(Draw2.Drawing2D.HatchBrush))\n                {\n                    Draw2.Drawing2D.HatchBrush tmpBrush = (Draw2.Drawing2D.HatchBrush)brush;\n                    Draw2.SolidBrush br = new Draw2.SolidBrush(tmpBrush.ForegroundColor);\n                    pen = new Draw2.Pen(new Draw2.SolidBrush(tmpBrush.ForegroundColor));\n                    DrawLegendMarker(g, br, pen, SeriesMarker[iCol - 1], p.X - radius, p.Y - radius, diameter);\n                    await DrawDataPoint(rpt, g, new Draw2.Point(p.X - 3, p.Y + 3), iRow, iCol);\n\n                }\n                else\n                {\n                    pen = new Draw2.Pen(brush);\n                    DrawLegendMarker(g, brush, pen, ChartMarkerEnum.Bubble, p.X - radius, p.Y - radius, diameter);\n                    await DrawDataPoint(rpt, g, new Draw2.Point(p.X - 3, p.Y + 3), iRow, iCol);\n                }\n                //Add a metafilecomment to use as a tooltip GJL 26092008               \n\n                if (_showToolTips || _showToolTipsX)\n                {\n                    string display = \"\";\n                    if (_showToolTipsX) display = xv.ToString(_tooltipXFormat);\n                    if (_showToolTips)\n                    {\n                        if (display.Length > 0) display += \" , \";\n                        display += yv.ToString(_tooltipYFormat);\n                    }\n                    String val = \"ToolTip:\" + display + \"|X:\" + (int)(p.X - 3) + \"|Y:\" + (int)(p.Y - 3) + \"|W:\" + 6 + \"|H:\" + 6;\n                    g.AddMetafileComment(new System.Text.ASCIIEncoding().GetBytes(val));\n                }\n            }\n            finally\n            {\n                if (pen != null)\n                    pen.Dispose();\n            }\n\n            return;\n        }\n\n        private int BubbleSize(Report rpt, int iRow, int iCol, double minB, double maxB, double bv)\n        {\n            int diameter = 5;\n            if (ChartDefn.Type != ChartTypeEnum.Bubble)\n                return diameter;\n\n            int bubbleMax = 30;           // maximum bubble size\n            int bubbleMin = 4;          // minimum bubble size\n\n            double diff = maxB - minB;\n            double vdiff = bv - minB;\n\n            if (Math.Abs(diff) < 1e-9d)     // very small difference between max and min?\n                return diameter;            // just use the smallest \n\n            diameter = (int)(((vdiff / diff) * (bubbleMax - bubbleMin)) + bubbleMin);\n\n            return diameter;\n        }\n\n        // Calculate the size of the value axis; width is max value width + title width\n        //\t\t\t\t\t\t\t\t\t\t height is max value height\n        protected async Task<Draw2.Size> ValueAxisSize(Report rpt, Draw2.Graphics g, double min, double max)\n        {\n            Draw2.Size size = Draw2.Size.Empty;\n            if (ChartDefn.ValueAxis == null)\n                return size;\n            Axis a = ChartDefn.ValueAxis.Axis;\n            if (a == null)\n                return size;\n\n            Draw2.Size minSize;\n            Draw2.Size maxSize;\n            if (!a.Visible)\n            {\n                minSize = maxSize = Draw2.Size.Empty;\n            }\n            else if (a.Style != null)\n            {\n                minSize = await a.Style.MeasureString(rpt, g, min, TypeCode.Double, null, int.MaxValue);\n                maxSize = await a.Style.MeasureString(rpt, g, max, TypeCode.Double, null, int.MaxValue);\n            }\n            else\n            {\n                minSize = await Style.MeasureStringDefaults(rpt, g, min, TypeCode.Double, null, int.MaxValue);\n                maxSize = await Style.MeasureStringDefaults(rpt, g, max, TypeCode.Double, null, int.MaxValue);\n            }\n            // Choose the largest\n            size.Width = Math.Max(minSize.Width, maxSize.Width);\n            size.Height = Math.Max(minSize.Height, maxSize.Height);\n\n            // Now we need to add in the width of the title (if any)\n            Draw2.Size titleSize = await DrawTitleMeasure(rpt, g, a.Title);\n            size.Width += titleSize.Width;\n\n            return size;\n        }\n\n        protected async Task DrawValueAxis(Report rpt, Draw2.Graphics g, double min, double max,\n                        Draw2.Rectangle rect, int plotLeft, int plotRight)\n        {\n            if (this.ChartDefn.ValueAxis == null)\n                return;\n            Axis a = this.ChartDefn.ValueAxis.Axis;\n            if (a == null)\n                return;\n            Style s = a.Style;\n\n            int intervalCount;\n            double incr;\n            (incr, intervalCount) = await SetIncrementAndInterval(rpt, a, min, max);      // Calculate the interval count\n\n            Draw2.Size tSize = await DrawTitleMeasure(rpt, g, a.Title);\n            await DrawTitle(rpt, g, a.Title, new Draw2.Rectangle(rect.Left, rect.Top, tSize.Width, rect.Height));\n\n            double v = min;\n            for (int i = 0; i < intervalCount + 1; i++)\n            {\n                int h = (int)(((Math.Min(v, max) - min) / (max - min)) * rect.Height);\n                if (h < 0)\t\t// this is really some form of error\n                {\n                    v += incr;\n                    continue;\n                }\n\n                if (!a.Visible)\n                {\n                    // nothing to do\n                }\n                else if (s != null)\n                {\n                    Draw2.Size size = await s.MeasureString(rpt, g, v, TypeCode.Double, null, int.MaxValue);\n                    Draw2.Rectangle vRect =\n                        new Draw2.Rectangle(rect.Left + tSize.Width, rect.Top + rect.Height - h - (size.Height / 2), rect.Width - tSize.Width, size.Height);\n                    await s.DrawString(rpt, g, v, TypeCode.Double, null, vRect);\n                }\n                else\n                {\n                    Draw2.Size size = await Style.MeasureStringDefaults(rpt, g, v, TypeCode.Double, null, int.MaxValue);\n                    Draw2.Rectangle vRect =\n                        new Draw2.Rectangle(rect.Left + tSize.Width, rect.Top + rect.Height - h - (size.Height / 2), rect.Width - tSize.Width, size.Height);\n                    Style.DrawStringDefaults(g, v, vRect);\n                }\n\n                await DrawValueAxisGrid(rpt, g, a.MajorGridLines, new Draw2.Point(plotLeft, rect.Top + rect.Height - h), new Draw2.Point(plotRight, rect.Top + rect.Height - h));\n                await DrawValueAxisTick(rpt, g, true, a.MajorTickMarks, a.MajorGridLines, new Draw2.Point(plotLeft, rect.Top + rect.Height - h));\n\n                v += incr;\n            }\n\n            // Draw the end points of the major grid lines\n            await DrawValueAxisGrid(rpt, g, a.MajorGridLines, new Draw2.Point(plotLeft, rect.Top), new Draw2.Point(plotLeft, rect.Bottom));\n            await DrawValueAxisTick(rpt, g, true, a.MajorTickMarks, a.MajorGridLines, new Draw2.Point(plotLeft, rect.Top));\n            await DrawValueAxisGrid(rpt, g, a.MajorGridLines, new Draw2.Point(plotRight, rect.Top), new Draw2.Point(plotRight, rect.Bottom));\n            await DrawValueAxisTick(rpt, g, true, a.MajorTickMarks, a.MajorGridLines, new Draw2.Point(plotRight, rect.Bottom));\n\n            return;\n        }\n\n        protected async Task DrawValueAxisGrid(Report rpt, Draw2.Graphics g, ChartGridLines gl, Draw2.Point s, Draw2.Point e)\n        {\n            if (gl == null || !gl.ShowGridLines)\n                return;\n\n            if (gl.Style != null)\n                await gl.Style.DrawStyleLine(rpt, g, null, s, e);\n            else\n                g.DrawLine(Draw2.Pens.Black, s, e);\n\n            return;\n        }\n\n        protected async Task DrawValueAxisTick(Report rpt, Draw2.Graphics g, bool bMajor, AxisTickMarksEnum tickType, ChartGridLines gl, Draw2.Point p)\n        {\n            if (tickType == AxisTickMarksEnum.None)\n                return;\n\n            int len = bMajor ? AxisTickMarkMajorLen : AxisTickMarkMinorLen;\n            Draw2.Point s, e;\n            switch (tickType)\n            {\n                case AxisTickMarksEnum.Inside:\n                    s = new Draw2.Point(p.X, p.Y);\n                    e = new Draw2.Point(p.X + len, p.Y);\n                    break;\n                case AxisTickMarksEnum.Cross:\n                    s = new Draw2.Point(p.X - len, p.Y);\n                    e = new Draw2.Point(p.X + len, p.Y);\n                    break;\n                case AxisTickMarksEnum.Outside:\n                default:\n                    s = new Draw2.Point(p.X - len, p.Y);\n                    e = new Draw2.Point(p.X, p.Y);\n                    break;\n            }\n            Style style = gl.Style;\n\n            if (style != null)\n                await style.DrawStyleLine(rpt, g, null, s, e);\n            else\n                g.DrawLine(Draw2.Pens.Black, s, e);\n\n            return;\n        }\n        /////////////////////////\n        protected async Task DrawCategoryAxis(Report rpt, Draw2.Graphics g, double min, double max, Draw2.Rectangle rect, int plotTop, int plotBottom)\n        {\n            if (this.ChartDefn.CategoryAxis == null)\n                return;\n            Axis a = this.ChartDefn.CategoryAxis.Axis;\n            if (a == null)\n                return;\n            Style s = a.Style;\n\n            // Account for tick marks\n            int tickSize = 0;\n            if (a.MajorTickMarks == AxisTickMarksEnum.Cross ||\n                a.MajorTickMarks == AxisTickMarksEnum.Outside)\n                tickSize = this.AxisTickMarkMajorLen;\n            else if (a.MinorTickMarks == AxisTickMarksEnum.Cross ||\n                a.MinorTickMarks == AxisTickMarksEnum.Outside)\n                tickSize += this.AxisTickMarkMinorLen;\n\n            int intervalCount;\n            double incr;\n            (incr, intervalCount)= await SetIncrementAndInterval(rpt, a, min, max);      // Calculate the interval count\n\n            int maxValueHeight = 0;\n            double v = min;\n            Draw2.Size size = Draw2.Size.Empty;\n\n            for (int i = 0; i < intervalCount + 1; i++)\n            {\n                int x = (int)(((Math.Min(v, max) - min) / (max - min)) * rect.Width);\n\n                if (!a.Visible)\n                {\n                    // nothing to do\n                }\n                else if (s != null)\n                {\n                    size = await s.MeasureString(rpt, g, v, TypeCode.Double, null, int.MaxValue);\n                    Draw2.Rectangle vRect =\n                        new Draw2.Rectangle(rect.Left + x - (size.Width / 2), rect.Top + tickSize, size.Width, size.Height);\n                    await s.DrawString(rpt, g, v, TypeCode.Double, null, vRect);\n                }\n                else\n                {\n                    size = await Style.MeasureStringDefaults(rpt, g, v, TypeCode.Double, null, int.MaxValue);\n                    Draw2.Rectangle vRect =\n                        new Draw2.Rectangle(rect.Left + x - (size.Width / 2), rect.Top + tickSize, size.Width, size.Height);\n                    Style.DrawStringDefaults(g, v, vRect);\n                }\n                if (size.Height > maxValueHeight)\t\t// Need to keep track of the maximum height\n                    maxValueHeight = size.Height;\t\t//   this is probably overkill since it should always be the same??\n\n                await DrawCategoryAxisGrid(rpt, g, a.MajorGridLines, new Draw2.Point(rect.Left + x, plotTop), new Draw2.Point(rect.Left + x, plotBottom));\n                await DrawCategoryAxisTick(rpt, g, true, a.MajorTickMarks, a.MajorGridLines, new Draw2.Point(rect.Left + x, plotBottom));\n\n                v += incr;\n            }\n\n            // Draw the end points of the major grid lines\n            await DrawCategoryAxisGrid(rpt, g, a.MajorGridLines, new Draw2.Point(rect.Left, plotTop), new Draw2.Point(rect.Left, plotBottom));\n            await DrawCategoryAxisTick(rpt, g, true, a.MajorTickMarks, a.MajorGridLines, new Draw2.Point(rect.Left, plotBottom));\n            await DrawCategoryAxisGrid(rpt, g, a.MajorGridLines, new Draw2.Point(rect.Right, plotTop), new Draw2.Point(rect.Right, plotBottom));\n            await DrawCategoryAxisTick(rpt, g, true, a.MajorTickMarks, a.MajorGridLines, new Draw2.Point(rect.Right, plotBottom));\n\n            Draw2.Size tSize = await DrawTitleMeasure(rpt, g, a.Title);\n            await DrawTitle(rpt, g, a.Title,\n                new Draw2.Rectangle(rect.Left, rect.Top + maxValueHeight + tickSize, rect.Width, tSize.Height));\n\n            return;\n        }\n\n        protected async Task DrawCategoryAxisGrid(Report rpt, Draw2.Graphics g, ChartGridLines gl, Draw2.Point s, Draw2.Point e)\n        {\n            if (gl == null || !gl.ShowGridLines)\n                return;\n\n            if (gl.Style != null)\n                await gl.Style.DrawStyleLine(rpt, g, null, s, e);\n            else\n                g.DrawLine(Draw2.Pens.Black, s, e);\n\n            return;\n        }\n\n        protected async Task DrawCategoryAxisTick(Report rpt, Draw2.Graphics g, bool bMajor, AxisTickMarksEnum tickType, ChartGridLines gl, Draw2.Point p)\n        {\n            if (tickType == AxisTickMarksEnum.None)\n                return;\n\n            int len = bMajor ? AxisTickMarkMajorLen : AxisTickMarkMinorLen;\n            Draw2.Point s, e;\n            switch (tickType)\n            {\n                case AxisTickMarksEnum.Inside:\n                    s = new Draw2.Point(p.X, p.Y);\n                    e = new Draw2.Point(p.X, p.Y - len);\n                    break;\n                case AxisTickMarksEnum.Cross:\n                    s = new Draw2.Point(p.X, p.Y - len);\n                    e = new Draw2.Point(p.X, p.Y + len);\n                    break;\n                case AxisTickMarksEnum.Outside:\n                default:\n                    s = new Draw2.Point(p.X, p.Y + len);\n                    e = new Draw2.Point(p.X, p.Y);\n                    break;\n            }\n            Style style = gl.Style;\n\n            if (style != null)\n                await style.DrawStyleLine(rpt, g, null, s, e);\n            else\n                g.DrawLine(Draw2.Pens.Black, s, e);\n\n            return;\n        }\n\n        // Calculate the size of the value axis; width is max value width + title width\n        //\t\t\t\t\t\t\t\t\t\t height is max value height\n        protected async Task<Draw2.Size> CategoryAxisSize(Report rpt, Draw2.Graphics g, double min, double max)\n        {\n            Draw2.Size size = Draw2.Size.Empty;\n            if (ChartDefn.CategoryAxis == null)\n                return size;\n            Axis a = ChartDefn.CategoryAxis.Axis;//Not ValueAxis...\n            if (a == null)\n                return size;\n\n            Draw2.Size minSize;\n            Draw2.Size maxSize;\n            if (!a.Visible)\n            {\n                minSize = maxSize = Draw2.Size.Empty;\n            }\n            else if (a.Style != null)\n            {\n                minSize = await a.Style.MeasureString(rpt, g, min, TypeCode.Double, null, int.MaxValue);\n                maxSize = await a.Style.MeasureString(rpt, g, max, TypeCode.Double, null, int.MaxValue);\n            }\n            else\n            {\n                minSize = await Style.MeasureStringDefaults(rpt, g, min, TypeCode.Double, null, int.MaxValue);\n                maxSize = await Style.MeasureStringDefaults(rpt, g, max, TypeCode.Double, null, int.MaxValue);\n            }\n            // Choose the largest\n            size.Width = Math.Max(minSize.Width, maxSize.Width);\n            size.Height = Math.Max(minSize.Height, maxSize.Height);\n\n            // Now we need to add in the height of the title (if any)\n            Draw2.Size titleSize = await DrawTitleMeasure(rpt, g, a.Title);\n            size.Height += titleSize.Height;\n\n            if (a.MajorTickMarks == AxisTickMarksEnum.Cross ||\n                a.MajorTickMarks == AxisTickMarksEnum.Outside)\n                size.Height += this.AxisTickMarkMajorLen;\n            else if (a.MinorTickMarks == AxisTickMarksEnum.Cross ||\n                a.MinorTickMarks == AxisTickMarksEnum.Outside)\n                size.Height += this.AxisTickMarkMinorLen;\n\n            return size;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ChartColumn.cs",
    "content": "\n\n\n//GJL 110208 - Made some changes to allow second scale...\n\n\nusing System;\nusing System.Collections;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\n//using System.Windows.Forms;JD 20080514 - Why? \nusing System.Reflection.Emit;\nusing System.Runtime.InteropServices;\nusing System.Threading.Tasks;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    ///<summary>\n    /// Column chart definition and processing\n    ///</summary>\n    internal class ChartColumn : ChartBase\n    {\n        int _GapSize = 0;\t\t// TODO: hard code for now - 06122007AJM Removed gap so that large category ranges display better\n\n        internal ChartColumn(Report r, Row row, Chart c, MatrixCellEntry[,] m, Expression showTooltips, Expression showTooltipsX, Expression _ToolTipYFormat, Expression _ToolTipXFormat)\n            : base(r, row, c, m, showTooltips, showTooltipsX, _ToolTipYFormat, _ToolTipXFormat)\n        {\n        }\n\n        override internal async Task Draw(Report rpt)\n        {\n            CreateSizedBitmap();\n\n#if !DRAWINGCOMPAT\n            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))\n            {\n                using (Draw2.Graphics g1 = Draw2.Graphics.FromImage(_bm))\n                {\n                    _aStream = new System.IO.MemoryStream();\n                    IntPtr HDC = g1.GetHdc();\n                    //_mf = new System.Draw2.Imaging.Metafile(_aStream, HDC);\n                    _mf = new Draw2.Imaging.Metafile(_aStream, HDC,\n                        new Draw2.RectangleF(0, 0, _bm.Width, _bm.Height), Draw2.Imaging.MetafileFrameUnit.Pixel);\n                    g1.ReleaseHdc(HDC);\n                }\n            }\n\n            using (Draw2.Graphics g = Draw2.Graphics.FromImage(_mf != null ? _mf : _bm))\n#else\n            using (Draw2.Graphics g = Draw2.Graphics.FromImage(_bm))\n#endif\n            {\n                // 06122007AJM Used to Force Higher Quality\n                g.InterpolationMode = Draw2.Drawing2D.InterpolationMode.HighQualityBicubic;\n                g.SmoothingMode = Draw2.Drawing2D.SmoothingMode.HighQuality;\n                g.PixelOffsetMode = Draw2.Drawing2D.PixelOffsetMode.None;\n                g.CompositingQuality = Draw2.Drawing2D.CompositingQuality.HighQuality;\n\n                // Adjust the top margin to depend on the title height\n                Draw2.Size titleSize = await DrawTitleMeasure(rpt, g, ChartDefn.Title);\n                Layout.TopMargin = titleSize.Height;\n\n                double max = 0, min = 0; // Get the max and min values\n                (max, min) = await GetValueMaxMin(rpt, max, min, 0, 1);\n\n                await DrawChartStyle(rpt, g);\n\n                // Draw title; routine determines if necessary\n                await DrawTitle(rpt, g, ChartDefn.Title, new Draw2.Rectangle(0, 0, _bm.Width, Layout.TopMargin));\n\n                // Adjust the left margin to depend on the Value Axis\n                Draw2.Size vaSize = await ValueAxisSize(rpt, g, min, max);\n                Layout.LeftMargin = vaSize.Width;\n\n                // Adjust the right margin to depend on the Value Axis\n                bool Show2ndY = ShowRightYAxis(rpt);\n                Draw2.Size vaSize2 = vaSize;\n\n                if (Show2ndY)\n                {\n                    double rmax = 0, rmin = 0;\n                    (rmax, rmin) = await GetMaxMinDataValue(rpt, 0, 2);\n                    vaSize2 = await ValueAxisSize(rpt, g, rmin, rmax);\n                    Layout.RightMargin = vaSize2.Width;\n                }\n\n                // Draw legend\n                Draw2.Rectangle lRect = await DrawLegend(rpt, g, false, true);\n\n                // Adjust the bottom margin to depend on the Category Axis\n                Draw2.Size caSize = await CategoryAxisSize(rpt, g);\n                Layout.BottomMargin = caSize.Height;\n\n                AdjustMargins(lRect, rpt, g);       // Adjust margins based on legend.\n\n                // Draw Plot area\n                await DrawPlotAreaStyle(rpt, g, lRect);\n\n                int intervalCount = 0; //GJL - Used to get the interval count out of DrawValueAxis so that we don't recalculate it again.\n                double incr = 0.0;  //GJL - As above\n                                    // Draw Value Axis //GJL now as by ref params to return the values to the above variables\n                if (vaSize.Width > 0)   // If we made room for the axis - we need to draw it\n                    (incr, intervalCount) = await DrawValueAxis(rpt, g, min, max,\n                        new Draw2.Rectangle(Layout.LeftMargin - vaSize.Width, Layout.TopMargin, vaSize.Width, _bm.Height - Layout.TopMargin - Layout.BottomMargin), Layout.LeftMargin, Layout.Width - Layout.RightMargin);\n\n\n                //********************************************************************************************************************************************\n                //Draw the 2nd value axis - obviously we will only want to do this if we choose a second axis        \n\n                double ScaleFactor = 1.0;\n                //Secong value axis            \n                if (Show2ndY)\n                    ScaleFactor = await Draw2ndValueAxis(rpt, g, min, max, new Draw2.Rectangle(Layout.LeftMargin + Layout.PlotArea.Width, Layout.TopMargin, vaSize2.Width, _bm.Height - Layout.TopMargin - Layout.BottomMargin), Layout.LeftMargin, Layout.Width - Layout.RightMargin, incr, intervalCount, ScaleFactor);\n\n                // Draw Category Axis\n                if (caSize.Height > 0)\n                    // 090508ajm passing chart bounds in\n                    await DrawCategoryAxis(rpt, g,\n                        new Draw2.Rectangle(Layout.LeftMargin, _bm.Height - Layout.BottomMargin, Layout.PlotArea.Width, caSize.Height), Layout.TopMargin, caSize.Width);\n                if ((ChartSubTypeEnum)Enum.Parse(typeof(ChartSubTypeEnum), await _ChartDefn.Subtype.EvaluateString(rpt, _row)) == ChartSubTypeEnum.Stacked)\n                    await DrawPlotAreaStacked(rpt, g, max, min);\n                else if ((ChartSubTypeEnum)Enum.Parse(typeof(ChartSubTypeEnum), await _ChartDefn.Subtype.EvaluateString(rpt, _row)) == ChartSubTypeEnum.PercentStacked)\n                    await DrawPlotAreaPercentStacked(rpt, g);\n                else\n                    await DrawPlotAreaPlain(rpt, g, max, min, ScaleFactor);\n\n                await DrawLegend(rpt, g, false, false);\n\n            }\n        }\n\n        async Task DrawPlotAreaPercentStacked(Report rpt, Draw2.Graphics g)\n        {\n            int barsNeeded = CategoryCount;\n            int gapsNeeded = CategoryCount * 2;\n\n            // Draw Plot area data\n            double max = 1;\n\n            int widthBar = (int)((Layout.PlotArea.Width - (gapsNeeded * _GapSize)) / barsNeeded);\n            int maxBarHeight = (int)(Layout.PlotArea.Height);\n\n            // Loop thru calculating all the data points\n            for (int iRow = 1; iRow <= CategoryCount; iRow++)\n            {\n                int barLoc = (int)(Layout.PlotArea.Left + ((iRow - 1) * ((double)(Layout.PlotArea.Width) / CategoryCount)));\n                barLoc += _GapSize; // space before series\n\n                double sum = 0;\n                for (int iCol = 1; iCol <= SeriesCount; iCol++)\n                {\n                    double t = await GetDataValue(rpt, iRow, iCol);\n                    if (t.CompareTo(double.NaN) == 0)\n                        t = 0;\n                    sum += t;\n                }\n                double v = 0;\n                Draw2.Point saveP = Draw2.Point.Empty;\n                for (int iCol = 1; iCol <= SeriesCount; iCol++)\n                {\n                    double t = await GetDataValue(rpt, iRow, iCol);\n                    if (t.CompareTo(double.NaN) == 0)\n                        t = 0;\n                    v += t;\n\n                    int h = (int)((Math.Min(v / sum, max) / max) * maxBarHeight);\n                    Draw2.Point p = new Draw2.Point(barLoc, Layout.PlotArea.Top + (maxBarHeight - h));\n\n                    Draw2.Rectangle rect;\n                    if (saveP == Draw2.Point.Empty)\n                        rect = new Draw2.Rectangle(p, new Draw2.Size(widthBar, h));\n                    else\n                        rect = new Draw2.Rectangle(p, new Draw2.Size(widthBar, saveP.Y - p.Y));\n                    await DrawColumnBar(rpt, g, await GetSeriesBrush(rpt, iRow, iCol), rect, iRow, iCol);\n\n                    //Add a metafilecomment to use as a tooltip GJL 26092008\n                    //if (_showToolTips)\n                    //{\n                    //    String val = \"ToolTip:\" + t + \"|X:\" + (int)rect.X + \"|Y:\" + (int)(rect.Y) + \"|W:\" + rect.Width + \"|H:\" + rect.Height;\n                    //    g.AddMetafileComment(new System.Text.ASCIIEncoding().GetBytes(val));\n                    //}\n\n                    if (_showToolTips)\n                    {\n                        string display = \"\";\n                        if (display.Length > 0) display += \" , \";\n                        display += t.ToString(_tooltipYFormat);\n\n                        String val = \"ToolTip:\" + display + \"|X:\" + (int)rect.X + \"|Y:\" + (int)rect.Y + \"|W:\" + rect.Width + \"|H:\" + rect.Height;\n                        g.AddMetafileComment(new System.Text.ASCIIEncoding().GetBytes(val));\n                    }\n                    saveP = p;\n                }\n            }\n\n            return;\n        }\n\n        /* This method has been modified to allow for a Line plot type and to draw the chart correctly \n         * with selected plot type. \n         * 06122007AJM\n         */\n        async Task DrawPlotAreaPlain(Report rpt, Draw2.Graphics g, double max, double min, double ScaleFactor)\n        {\n            /* Need to adjust bar count to allow for Line plot types\n             * 06122007AJM */\n            int ColumnCount = 0;\n            for (int iCol = 1; iCol <= SeriesCount; iCol++)\n            {\n                if (GetPlotType(rpt, iCol, 1).ToUpper() != \"LINE\")\n                {\n                    ColumnCount++;\n                }\n            }\n            if (ColumnCount == 0) { ColumnCount = 1; } //Handle no bars (All lines)\n            int barsNeeded = ColumnCount * CategoryCount;\n\n            int gapsNeeded = CategoryCount * 2;\n\n            // Draw Plot area data\n            int widthBar = (int)((Layout.PlotArea.Width - (gapsNeeded * _GapSize)) / barsNeeded);\n            int maxBarHeight = (int)(Layout.PlotArea.Height);\n            /* The following list has been added to keep track of the\n             * previous point for drawing a line intead of a column\n             * when the plottype is Line\n             * 05122007AJM */\n            bool DrawPoint;\n            SortedList LastPoints = new SortedList();\n            int lineLoc;\n            for (int iRow = 1; iRow <= CategoryCount; iRow++)\n            {\n                int barLoc = (int)(Layout.PlotArea.Left + ((iRow - 1) * ((double)(Layout.PlotArea.Width) / CategoryCount)));\n\n                barLoc += _GapSize;\t// space before series\n                lineLoc = barLoc + (widthBar * ColumnCount / 2);\n                for (int z = 0; z < 2; z++)\n                {\n                    for (int iCol = 1; iCol <= SeriesCount; iCol++)\n                    {\n                        /* This for loop has been modified to select if the column should\n                         * be drawn based on the Plot type of the column\n                         * 05122007AJM */\n                        if (GetPlotType(rpt, iCol, iRow).ToUpper() != \"LINE\")\n                        {\n                            if (z == 0)\n                            {\n                                double v = await this.GetDataValue(rpt, iRow, iCol);\n                                double tooltipVal = v;\n                                if (GetYAxis(rpt, iCol, iRow).ToUpper() != \"LEFT\")\n                                {\n                                    //Scale the Y data...\n                                    v /= ScaleFactor;\n                                }\n\n                                if (v.CompareTo(double.NaN) == 0)\n                                    v = min;\n                                int h = (int)(((Math.Min(v, max) - min) / (max - min)) * maxBarHeight);\n\n                                await DrawColumnBar(rpt, g, await GetSeriesBrush(rpt, iRow, iCol),\n                                    new Draw2.Rectangle(barLoc, Layout.PlotArea.Top + (maxBarHeight - h), widthBar, h), iRow, iCol);\n\n                                //Add a metafilecomment to use as a tooltip GJL 26092008\n                                if (_showToolTips)\n                                {\n                                    String val = \"ToolTip:\" + tooltipVal.ToString(_tooltipYFormat) + \"|X:\" + barLoc + \"|Y:\" + (int)(Layout.PlotArea.Top + (maxBarHeight - h)) + \"|W:\" + widthBar + \"|H:\" + h;\n                                    g.AddMetafileComment(new System.Text.ASCIIEncoding().GetBytes(val));\n                                }\n\n\n\n                                barLoc += widthBar;\n                            }\n                        }\n                        else //This is a line type plot\n                        {\n                            if (z == 1)\n                            {\n                                double v = await this.GetDataValue(rpt, iRow, iCol);\n                                double tooltipVal = v;\n                                if (GetYAxis(rpt, iCol, iRow).ToUpper() != \"LEFT\")\n                                {\n                                    //Scale the Y data...\n                                    v /= ScaleFactor;\n                                }\n\n                                DrawPoint = true;\n\n                                if (v.CompareTo(double.NaN) == 0)\n                                {\n                                    //don't draw null\n                                    DrawPoint = false;\n                                    //insert empty point\n                                    LastPoints[iCol] = null;\n                                }\n                                if (DrawPoint)\n                                {\n                                    int h = (int)(((Math.Min(v, max) - min) / (max - min)) * maxBarHeight);\n\n                                    Draw2.Rectangle r = new Draw2.Rectangle(lineLoc, Layout.PlotArea.Top + (maxBarHeight - h), widthBar, h);\n\n                                    Draw2.Point p = new Draw2.Point(r.Left, r.Top);\n                                    if (LastPoints[iCol - 1] == null)\n                                        LastPoints[iCol - 1] = p;\n                                    bool DrawMarker = getNoMarkerVal(rpt, iCol, 1) == false;\n                                    await DrawDataPoint(rpt, g, new Draw2.Point(p.X, p.Y - 14), iRow, iCol);  // todo: 14 is arbitrary\n                                    if (DrawMarker) { DrawLegendLineMarker(g, await GetSeriesBrush(rpt, iRow, iCol), new Draw2.Pen(await GetSeriesBrush(rpt, iRow, iCol)), SeriesMarker[iCol - 1], p.X - 5, p.Y - 5, 10); }\n\n\n                                    if (LastPoints.ContainsKey(iCol))\n                                    {\n                                        Draw2.Point[] Points = new Draw2.Point[2];\n                                        Points[0] = p;\n                                        Draw2.Point pt = (Draw2.Point)LastPoints[iCol];\n                                        Points[1] = new Draw2.Point(pt.X - 1, pt.Y);\n                                        // 05052008AJM - Allowing for breaking lines in chart\n                                        if (Points[1] != null)\n                                        {\n                                            String LineSize = getLineSize(rpt, iCol, 1);\n                                            int intLineSize = 1;\n                                            switch (LineSize)\n                                            {\n                                                case \"Small\":\n                                                    intLineSize = 1;\n                                                    break;\n                                                case \"Regular\":\n                                                    intLineSize = 2;\n                                                    break;\n                                                case \"Large\":\n                                                    intLineSize = 3;\n                                                    break;\n                                                case \"Extra Large\":\n                                                    intLineSize = 4;\n                                                    break;\n                                                case \"Super Size\":\n                                                    intLineSize = 5;\n                                                    break;\n                                            }\n\n                                            await DrawLineBetweenPoints(g, rpt, await GetSeriesBrush(rpt, iRow, iCol), Points, intLineSize);\n                                        }\n                                    }\n\n                                    //Add a metafilecomment to use as a tooltip GJL 26092008\n                                    if (_showToolTips)\n                                    {\n                                        String val = \"ToolTip:\" + tooltipVal.ToString(_tooltipYFormat) + \"|X:\" + (int)(p.X - 5) + \"|Y:\" + (int)(p.Y - 5) + \"|W:10|H:10\";\n                                        g.AddMetafileComment(new System.Text.ASCIIEncoding().GetBytes(val));\n                                    }\n\n\n\n                                    LastPoints[iCol] = p;\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n\n        internal void DrawLegendLineMarker(Draw2.Graphics g, Draw2.Brush b, Draw2.Pen p, ChartMarkerEnum marker, int x, int y, int mSize)\n        {\n            if (b.GetType() == typeof(Draw2.Drawing2D.HatchBrush))\n            {\n                Draw2.Drawing2D.HatchBrush hb = (Draw2.Drawing2D.HatchBrush)b;\n                b = new Draw2.SolidBrush(hb.ForegroundColor);\n            }\n\n            Draw2.Pen p2;\n            Draw2.PointF[] points;\n            switch (marker)\n            {\n                case ChartMarkerEnum.Bubble:\n                case ChartMarkerEnum.Circle:\n                    g.FillEllipse(b, x, y, mSize, mSize);\n                    break;\n                case ChartMarkerEnum.Square:\n                    g.FillRectangle(b, x, y, mSize, mSize);\n                    break;\n                case ChartMarkerEnum.Plus:\n\n                    p2 = new Draw2.Pen(b, 2.0f);\n                    g.DrawLine(p2, new Draw2.Point(x + ((mSize + 1) / 2), y), new Draw2.Point(x + ((mSize + 1) / 2), y + mSize));\n                    //g.DrawLine(p2, new Point(x + (mSize + 1) / 2, y + (mSize + 1) / 2), new Point(x + mSize, y + (mSize + 1) / 2));\n                    break;\n                case ChartMarkerEnum.Diamond:\n                    points = new Draw2.PointF[5];\n                    points[0] = points[4] = new Draw2.PointF(x + ((mSize + 1) / 2), y);\t// starting and ending point\n                    points[1] = new Draw2.PointF(x, y + ((mSize + 1) / 2));\n                    points[2] = new Draw2.PointF(x + ((mSize + 1) / 2), y + mSize);\n                    points[3] = new Draw2.PointF(x + mSize, y + ((mSize + 1) / 2));\n                    g.FillPolygon(b, points);\n                    break;\n                case ChartMarkerEnum.Triangle:\n                    points = new Draw2.PointF[4];\n                    points[0] = points[3] = new Draw2.PointF(x + ((mSize + 1) / 2), y);\t// starting and ending point\n                    points[1] = new Draw2.PointF(x, y + mSize);\n                    points[2] = new Draw2.PointF(x + mSize, y + mSize);\n                    g.FillPolygon(b, points);\n                    break;\n                case ChartMarkerEnum.X:\n                    p2 = new Draw2.Pen(b, 2.0f);\n                    g.DrawLine(p2, new Draw2.Point(x, y), new Draw2.Point(x + mSize, y + mSize));\n                    g.DrawLine(p2, new Draw2.Point(x, y + mSize), new Draw2.Point(x + mSize, y));\n                    break;\n            }\n            return;\n        }\n\n        /* This code was copied from the Line drawing class. There may be a better\n         * way to do this by reusing the code from the original class but this \n         * will work, the only issue being that if the line drawing is changed then \n         * this function will need to be updated as well\n         * 05122007 AJM */\n        async Task DrawLineBetweenPoints(Draw2.Graphics g, Report rpt, Draw2.Brush brush, Draw2.Point[] points)\n        {\n            await DrawLineBetweenPoints(g, rpt, brush, points, 2);\n        }\n\n\n        async Task DrawLineBetweenPoints(Draw2.Graphics g, Report rpt, Draw2.Brush brush, Draw2.Point[] points, int intLineSize)\n        {\n            if (points.Length <= 1)\t\t// Need at least 2 points\n                return;\n\n            Draw2.Pen p = null;\n            try\n            {\n                if (brush.GetType() == typeof(Draw2.Drawing2D.HatchBrush))\n                {\n                    Draw2.Drawing2D.HatchBrush tmpBrush = (Draw2.Drawing2D.HatchBrush)brush;\n                    p = new Draw2.Pen(new Draw2.SolidBrush(tmpBrush.ForegroundColor), intLineSize); //1.5F);    // todo - use line from style ????\n                }\n                else\n                {\n                    p = new Draw2.Pen(brush, intLineSize);\n                }\n\n                if ((ChartSubTypeEnum)Enum.Parse(typeof(ChartSubTypeEnum), await _ChartDefn.Subtype.EvaluateString(rpt, _row)) == ChartSubTypeEnum.Smooth && points.Length > 2)\n                    g.DrawCurve(p, points, 0.5F);\n                else\n                    g.DrawLines(p, points);\n            }\n            finally\n            {\n                if (p != null)\n                    p.Dispose();\n            }\n            return;\n        }\n\n        async Task DrawPlotAreaStacked(Report rpt, Draw2.Graphics g, double max, double min)\n        {\n            int barsNeeded = CategoryCount;\n            int gapsNeeded = CategoryCount * 2;\n\n            int widthBar = (int)((Layout.PlotArea.Width - (gapsNeeded * _GapSize)) / barsNeeded);\n            int maxBarHeight = (int)(Layout.PlotArea.Height);\n\n            // Loop thru calculating all the data points\n            for (int iRow = 1; iRow <= CategoryCount; iRow++)\n            {\n                int barLoc = (int)(Layout.PlotArea.Left + ((iRow - 1) * ((double)(Layout.PlotArea.Width) / CategoryCount)));\n                barLoc += _GapSize; // space before series\n\n                double v = 0;\n                Draw2.Point saveP = Draw2.Point.Empty;\n                for (int iCol = 1; iCol <= SeriesCount; iCol++)\n                {\n                    double t = await GetDataValue(rpt, iRow, iCol);\n                    if (t.CompareTo(double.NaN) == 0)\n                        t = 0;\n                    v += t;\n\n                    int h = (int)(((Math.Min(v, max) - min) / (max - min)) * maxBarHeight);\n                    Draw2.Point p = new Draw2.Point(barLoc, Layout.PlotArea.Top + (maxBarHeight - h));\n\n                    Draw2.Rectangle rect;\n                    if (saveP == Draw2.Point.Empty)\n                        rect = new Draw2.Rectangle(p, new Draw2.Size(widthBar, h));\n                    else\n                        rect = new Draw2.Rectangle(p, new Draw2.Size(widthBar, saveP.Y - p.Y));\n                    await DrawColumnBar(rpt, g, await GetSeriesBrush(rpt, iRow, iCol), rect, iRow, iCol);\n\n                    //Add a metafilecomment to use as a tooltip GJL 26092008\n                    if (_showToolTips)\n                    {\n                        String val = \"ToolTip:\" + t.ToString(_tooltipYFormat) + \"|X:\" + (int)rect.X + \"|Y:\" + (int)(rect.Y) + \"|W:\" + rect.Width + \"|H:\" + rect.Height;\n                        g.AddMetafileComment(new System.Text.ASCIIEncoding().GetBytes(val));\n                    }\n\n                    saveP = p;\n                }\n            }\n\n            return;\n        }\n\n        // Calculate the size of the category axis\n        protected async Task<Draw2.Size> CategoryAxisSize(Report rpt, Draw2.Graphics g)\n        {\n            _LastCategoryWidth = 0;\n\n            Draw2.Size size = Draw2.Size.Empty;\n            if (this.ChartDefn.CategoryAxis == null)\n                return size;\n            Axis a = this.ChartDefn.CategoryAxis.Axis;\n            if (a == null)\n                return size;\n            Style s = a.Style;\n\n            // Measure the title\n            size = await DrawTitleMeasure(rpt, g, a.Title);\n\n            if (!a.Visible)     // don't need to calculate the height\n                return size;\n\n            // Calculate the tallest category name\n            TypeCode tc;\n            int maxHeight = 0;\n            int maxWidth = 0;\n            for (int iRow = 1; iRow <= CategoryCount; iRow++)\n            {\n                (object v, tc) = await this.GetCategoryValue(rpt, iRow);\n                Draw2.Size tSize;\n                if (s == null)\n                    tSize = await Style.MeasureStringDefaults(rpt, g, v, tc, null, int.MaxValue);\n                else\n                    tSize = await s.MeasureString(rpt, g, v, tc, null, int.MaxValue);\n\n                if (tSize.Height > maxHeight)\n                    maxHeight = tSize.Height;\n\n                if (tSize.Width > maxWidth)\n                    maxWidth = tSize.Width;\n\n                if (iRow == CategoryCount)\n                    _LastCategoryWidth = tSize.Width;\n            }\n            size.Width = maxWidth;          // set the widest entry\n\n            // Add on the tallest category name\n            size.Height += maxHeight;\n\n            // Account for tick marks\n            int tickSize = 0;\n            if (a.MajorTickMarks == AxisTickMarksEnum.Cross ||\n                a.MajorTickMarks == AxisTickMarksEnum.Outside)\n                tickSize = this.AxisTickMarkMajorLen;\n            else if (a.MinorTickMarks == AxisTickMarksEnum.Cross ||\n                a.MinorTickMarks == AxisTickMarksEnum.Outside)\n                tickSize = this.AxisTickMarkMinorLen;\n\n            size.Height += tickSize;\n            /* This swap is done so that the size will work correctly with rotated\n             * (vertical) category names\n             * 06122007AJM */\n            if (maxWidth > (CategoryCount * SeriesCount) && s == null)  // kas: swap only when no axis style info provided\n            {\n                int tmp = size.Height;\n                size.Height = size.Width;\n                size.Width = tmp;\n            }\n            return size;\n        }\n\n        // DrawCategoryAxis \n        //09052008ajm added plottop variable to collect the top of the chart\n        protected async Task DrawCategoryAxis(Report rpt, Draw2.Graphics g, Draw2.Rectangle rect, int plotTop, int maxWidth)\n        {\n            if (this.ChartDefn.CategoryAxis == null)\n                return;\n            Axis a = this.ChartDefn.CategoryAxis.Axis;\n            if (a == null)\n                return;\n            Style s = a.Style;\n            Draw2.Size tSize = await DrawTitleMeasure(rpt, g, a.Title);\n            await DrawTitle(rpt, g, a.Title, new Draw2.Rectangle(rect.Left, rect.Bottom - tSize.Height, rect.Width, tSize.Height));\n\n            // Account for tick marks\n            int tickSize = 0;\n            if (a.MajorTickMarks == AxisTickMarksEnum.Cross ||\n                a.MajorTickMarks == AxisTickMarksEnum.Outside)\n                tickSize = this.AxisTickMarkMajorLen;\n            else if (a.MinorTickMarks == AxisTickMarksEnum.Cross ||\n                a.MinorTickMarks == AxisTickMarksEnum.Outside)\n                tickSize = this.AxisTickMarkMinorLen;\n\n            int drawWidth;\n            int catCount = ChartDefn.Type == ChartTypeEnum.Area ? CategoryCount - 1 : CategoryCount;\n            drawWidth = rect.Width / catCount;\n            bool mustSize = a.CanOmit && (drawWidth < maxWidth || ChartDefn.Type == ChartTypeEnum.Area);\n            int MajorGrid = 0;\n            // 15052008AJM Fixed for charts without a set major interval\n            if (a.MajorInterval != null)\n            {\n                // 09052008WRP  get major interval value  \n                MajorGrid = (int)await a.MajorInterval.EvaluateDouble(rpt, this._row);\n            }\n            // 12052008WRP\n            // setup month scale gridline plot - must check dealing with date data type\n            DateTime CurrentDate = DateTime.Now; //used for checking change in month \n            DateTime OldDate = DateTime.Now; //used for checking change in month \n            DateTime TempDate = DateTime.Now;//working variable\n            bool date = false; //used for confirming dealing with date data\n            int PreviousLocation = rect.Left; //used to keep track of previous gridline location on x axis - set to x position of category axis at start\n            TypeCode tc;\n            (object first, tc) = await this.GetCategoryValue(rpt, 1);\n            if (first != null)\n            {\n                switch (tc)\n                {\n                    case TypeCode.DateTime:\n                        date = true;\n                        break;\n                    default:\n                        break;\n                }\n            }\n            if (date) //initialising date values for use with date scale\n            {\n                CurrentDate = (DateTime)first;\n                OldDate = CurrentDate;\n                TempDate = CurrentDate;\n            }\n            for (int iRow = 1; iRow <= CategoryCount; iRow++)\n            {\n                (object v, tc) = await this.GetCategoryValue(rpt, iRow);\n                //make sure we are dealing with datetime type\n                if (date)\n                {\n                    CurrentDate = (DateTime)v;\n\n                }\n                int drawLoc = (int)(rect.Left + ((iRow - 1) * ((double)rect.Width / catCount)));\n\n                // Draw the category text\n                int skip = 0;\n                if (a.Visible && !a.Month)  //18052008WRP only show category labels if not month scale\n                {\n                    Draw2.Rectangle drawRect;\n                    Draw2.Size size = Draw2.Size.Empty;\n\n                    if (mustSize)\n                    {\t// Area chart - value is centered under the tick mark\n                        if (s != null)\n                        {\n                            size = await s.MeasureString(rpt, g, v, TypeCode.Double, null, int.MaxValue);\n                        }\n                        else\n                        {\n                            size = await Style.MeasureStringDefaults(rpt, g, v, TypeCode.Double, null, int.MaxValue);\n                        }\n                    }\n\n                    if (ChartDefn.Type == ChartTypeEnum.Area)\n                    {   // Area chart - value is centered under the tick mark\n                        drawRect =\n                                new Draw2.Rectangle(drawLoc - (size.Width / 2), rect.Top + tickSize, size.Width, size.Height);\n                    }\n                    else    // Column/Line charts are just centered in the region.\n                        drawRect = new Draw2.Rectangle(drawLoc, rect.Top + tickSize, drawWidth, rect.Height - tSize.Height);\n\n                    if (mustSize && drawRect.Width < size.Width)\n                    {\n                        skip = (int)(size.Width / drawWidth);\n                        drawRect.Width = size.Width;\n                    }\n\n                    if (s == null)\n                        Style.DrawStringDefaults(g, v, drawRect);\n                    else\n                        await s.DrawString(rpt, g, v, tc, null, drawRect);\n                }\n\n                //09052008WRP Draw major gridlines and place category labels for months scale \n                if (a.Month && date && a.Visible)\n                {\n\n                    if (CurrentDate.Month != OldDate.Month)\n                    {\n                        TempDate = CurrentDate;\n                        await DrawCategoryAxisGrid(rpt, g, a.MajorGridLines, new Draw2.Point(drawLoc, rect.Top), new Draw2.Point(drawLoc, plotTop)); //Don't overdraw the Y axis on the first gridline\n                        CurrentDate = CurrentDate.AddMonths(OldDate.Month - CurrentDate.Month); // get previous category month value\n                        string MonthString = CurrentDate.ToString(\"MMMM\");\n                        Draw2.Size lSize = await DrawCategoryTitleMeasure(rpt, g, MonthString, s);\n                        int catlabelLoc = (int)((drawLoc - PreviousLocation) / 2) + PreviousLocation - (lSize.Width / 2);\n                        await DrawCategoryLabel(rpt, g, MonthString, a.Style, new Draw2.Rectangle(catlabelLoc, rect.Top - (lSize.Height - 25), lSize.Width, lSize.Height));\n                        PreviousLocation = drawLoc;\n                        OldDate = TempDate;\n\n                    }\n                }\n                if ((MajorGrid != 0) && ((iRow - 1) % MajorGrid == 0) && !(a.Month))\n                //if (((iRow - 1) % ((int)a.MajorInterval.EvaluateDouble(rpt, this.ChartRow.RowNumber)) == 0) && !(a.Month)) \n                {\n                    await DrawCategoryAxisGrid(rpt, g, a.MajorGridLines, new Draw2.Point(drawLoc, rect.Top), new Draw2.Point(drawLoc, plotTop));\n                }\n                // Draw the Major Tick Marks (if necessary)\n                DrawCategoryAxisTick(g, true, a.MajorTickMarks, new Draw2.Point(drawLoc, rect.Top));\n                iRow += skip;\n            }//exit from for loop - no more category data\n\n            if (a.Month && date && a.Visible)// 16052008WRP draw last category label for months scale\n            {\n                string MonthString = OldDate.ToString(\"MMMM\");\n                Draw2.Size lSize = await DrawCategoryTitleMeasure(rpt, g, MonthString, s);\n                int catlabelLoc = (int)((rect.Right - PreviousLocation) / 2) + PreviousLocation - (lSize.Width / 2);\n                await DrawCategoryLabel(rpt, g, MonthString, a.Style, new Draw2.Rectangle(catlabelLoc, rect.Top - (lSize.Height - 25), lSize.Width, lSize.Height));\n            }\n\n\n            // Draw the end on (if necessary)\n            DrawCategoryAxisTick(g, true, a.MajorTickMarks, new Draw2.Point(rect.Right, rect.Top));\n\n            return;\n        }\n\n\n\n        protected void DrawCategoryAxisTick(Draw2.Graphics g, bool bMajor, AxisTickMarksEnum tickType, Draw2.Point p)\n        {\n            int len = bMajor ? AxisTickMarkMajorLen : AxisTickMarkMinorLen;\n            switch (tickType)\n            {\n                case AxisTickMarksEnum.Outside:\n                    g.DrawLine(Draw2.Pens.Black, new Draw2.Point(p.X, p.Y), new Draw2.Point(p.X, p.Y + len));\n                    break;\n                case AxisTickMarksEnum.Inside:\n                    g.DrawLine(Draw2.Pens.Black, new Draw2.Point(p.X, p.Y), new Draw2.Point(p.X, p.Y - len));\n                    break;\n                case AxisTickMarksEnum.Cross:\n                    g.DrawLine(Draw2.Pens.Black, new Draw2.Point(p.X, p.Y - len), new Draw2.Point(p.X, p.Y + len));\n                    break;\n                case AxisTickMarksEnum.None:\n                default:\n                    break;\n            }\n            return;\n        }\n\n        protected async Task DrawCategoryAxisGrid(Report rpt, Draw2.Graphics g, ChartGridLines gl, Draw2.Point s, Draw2.Point e)\n        {\n            if (gl == null || !gl.ShowGridLines)\n                return;\n\n            if (gl.Style != null)\n                await gl.Style.DrawStyleLine(rpt, g, null, s, e);\n            else\n                g.DrawLine(Draw2.Pens.Black, s, e);\n\n            return;\n        }\n\n        async Task DrawColumnBar(Report rpt, Draw2.Graphics g, Draw2.Brush brush, Draw2.Rectangle rect, int iRow, int iCol)\n        {\n            if (rect.Height <= 0)\n                return;\n            //we want to separate the bars with some whitespace.. GJL 080208\n            rect = new Draw2.Rectangle(rect.Left + 2, rect.Top, rect.Width - 3, rect.Height);\n            g.FillRectangle(brush, rect);\n            g.DrawRectangle(Draw2.Pens.Black, rect);\n\n            if ((ChartSubTypeEnum)Enum.Parse(typeof(ChartSubTypeEnum), await _ChartDefn.Subtype.EvaluateString(rpt, _row)) == ChartSubTypeEnum.Stacked ||\n                (ChartSubTypeEnum)Enum.Parse(typeof(ChartSubTypeEnum), await _ChartDefn.Subtype.EvaluateString(rpt, _row)) == ChartSubTypeEnum.PercentStacked)\n            {\n                await DrawDataPoint(rpt, g, rect, iRow, iCol);\n            }\n            else\n            {\n                Draw2.Point p;\n                p = new Draw2.Point(rect.Left, rect.Top - 14); // todo: 14 is arbitrary\n                await DrawDataPoint(rpt, g, p, iRow, iCol);\n            }\n\n            return;\n        }\n\n        protected async Task<(double incr, int intervalCount)> DrawValueAxis(Report rpt, Draw2.Graphics g, double min, double max,\n                        Draw2.Rectangle rect, int plotLeft, int plotRight)\n        {\n            double incr = 0;\n            int intervalCount = 0;\n            if (this.ChartDefn.ValueAxis == null)\n                return (incr, intervalCount);\n            Axis a = this.ChartDefn.ValueAxis.Axis;\n            if (a == null)\n                return (incr, intervalCount);\n            Style s = a.Style;\n\n            //int intervalCount;\n            //double incr;\n            (incr, intervalCount) = await SetIncrementAndInterval(rpt, a, min, max);      // Calculate the interval count\n\n            Draw2.Size tSize = await DrawTitleMeasure(rpt, g, a.Title);\n            await DrawTitle(rpt, g, a.Title, new Draw2.Rectangle(rect.Left, rect.Top, tSize.Width, rect.Height));\n\n            double v = min;\n            for (int i = 0; i < intervalCount + 1; i++)\n            {\n                int h = (int)(((Math.Min(v, max) - min) / (max - min)) * rect.Height);\n                if (h < 0)      // this is really some form of error\n                {\n                    v += incr;\n                    continue;\n                }\n\n                if (!a.Visible)\n                {\n                    // nothing to do\n                }\n                else if (s != null)\n                {\n                    Draw2.Size size = await s.MeasureString(rpt, g, v, TypeCode.Double, null, int.MaxValue);\n                    Draw2.Rectangle vRect =\n                        new Draw2.Rectangle(rect.Left + tSize.Width, rect.Top + rect.Height - h - (size.Height / 2), rect.Width - tSize.Width, size.Height);\n                    await s.DrawString(rpt, g, v, TypeCode.Double, null, vRect);\n                }\n                else\n                {\n                    Draw2.Size size = await Style.MeasureStringDefaults(rpt, g, v, TypeCode.Double, null, int.MaxValue);\n                    Draw2.Rectangle vRect =\n                        new Draw2.Rectangle(rect.Left + tSize.Width, rect.Top + rect.Height - h - (size.Height / 2), rect.Width - tSize.Width, size.Height);\n                    Style.DrawStringDefaults(g, v, vRect);\n                }\n\n                await DrawValueAxisGrid(rpt, g, a.MajorGridLines, new Draw2.Point(plotLeft, rect.Top + rect.Height - h), new Draw2.Point(plotRight, rect.Top + rect.Height - h));\n                await DrawValueAxisTick(rpt, g, true, a.MajorTickMarks, a.MajorGridLines, new Draw2.Point(plotLeft, rect.Top + rect.Height - h));\n\n                v += incr;\n            }\n\n            // Draw the end points of the major grid lines\n            await DrawValueAxisGrid(rpt, g, a.MajorGridLines, new Draw2.Point(plotLeft, rect.Top), new Draw2.Point(plotLeft, rect.Bottom));\n            await DrawValueAxisTick(rpt, g, true, a.MajorTickMarks, a.MajorGridLines, new Draw2.Point(plotLeft, rect.Top));\n            await DrawValueAxisGrid(rpt, g, a.MajorGridLines, new Draw2.Point(plotRight, rect.Top), new Draw2.Point(plotRight, rect.Bottom));\n\n            //12052008WRP this line not required adds tick at bottom end of right y axis.\n            //DrawValueAxisTick(rpt, g, true, a.MajorTickMarks, a.MajorGridLines, new Point(plotRight, rect.Bottom));\n\n            return (incr, intervalCount);\n        }\n\n\n        //*******************************************************************************************************************************\n        //Draws the second value axis\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"rpt\"></param>\n        /// <param name=\"g\"></param>\n        /// <param name=\"min\"></param>\n        /// <param name=\"max\"></param>\n        /// <param name=\"rect\"></param>\n        /// <param name=\"plotLeft\"></param>\n        /// <param name=\"plotRight\"></param>\n        /// <param name=\"incr\"></param>\n        /// <param name=\"intervalCount\"></param>\n        /// <param name=\"ScaleFactor\"></param>\n        /// <returns>ScaleFactor</returns>\n        protected async Task<double> Draw2ndValueAxis(Report rpt, Draw2.Graphics g, double min, double max,\n                        Draw2.Rectangle rect, int plotLeft, int plotRight, double incr, int intervalCount, double ScaleFactor)\n        {\n\n            if (this.ChartDefn.ValueAxis == null)\n                return ScaleFactor;\n            Axis a = this.ChartDefn.ValueAxis.Axis;\n            if (a == null)\n                return ScaleFactor;\n            Style s = a.Style;\n\n            double thisMin = 0;\n            double thisMax = 0;\n\n            (thisMax, thisMin) = await GetMaxMinDataValue(rpt, 0, 2);\n            thisMin = 0; //Stop rescaling the min on autoscale\n\n\n            //200208AJM GJL Yet another new scale\n            _gridIncrs = 10; //PJR 20071113 - grid incrs set & adjusted in here now\n\n            incr = thisMax / _gridIncrs;\t// should be range between max and min?\n            double log = Math.Floor(Math.Log10(Math.Abs(incr)));\n\n\n            double logPow = Math.Pow(10, log) * Math.Sign(thisMax);\n            double logDig = (int)((incr / logPow) + .5);\n\n            // promote the MSD to either 1, 2, or 5\n            if (logDig > 5.0)\n                logDig = 10.0;\n            else if (logDig > 2.0)\n                logDig = 5.0;\n            else if (logDig > 1.0)\n                logDig = 2.0;\n            //PJR 20071113 - reduce scale for large overscale options by decreasing _gridIncrs\n            while (thisMax < logDig * logPow * _gridIncrs)\n            {\n                _gridIncrs--;\n            }\n            //_gridIncrs++;\n\n            //PJR 20071113 - expand scale so that it is able to fit the max value by increasing _gridIncrs\n            while (thisMax > logDig * logPow * _gridIncrs)\n            {\n                _gridIncrs++;\n            }\n\n            double tmpMax = thisMax;\n            thisMax = (int)((logDig * logPow * _gridIncrs) + 0.5);\n            if (tmpMax > thisMax - ((thisMax / _gridIncrs) * .5))\n            {\n\n                thisMax += (thisMax / _gridIncrs);\n                _gridIncrs++;\n            }\n            ScaleFactor = thisMax / max;\n            incr = thisMax / _gridIncrs;\n\n            ////19022008AJM New Scaling\n            //bool Happy = false;\n            //double rIncr;\n            //double rInt = intervalCount - 1;\n            //double log;\n            //double logPow;\n            //double logDig;\n            //double lMax = max;\n            //for (int i = 0; i < 2; i++)\n            //{\n            //    rIncr = thisMax / rInt;\n            //    log = Math.Floor(Math.Log10(Math.Abs(rIncr)));\n\n            //    logPow = Math.Pow(10, log) * Math.Sign(thisMax);\n            //    logDig = (int)(rIncr / logPow + .5);\n\n            //    if (logDig > 5.0)\n            //        logDig = 10.0;\n            //    else if (logDig > 2.0)\n            //        logDig = 5.0;\n            //    else if (logDig > 1.0)\n            //        logDig = 2.0;\n\n            //    thisMax = (int)(logDig * logPow * rInt + 0.5);\n            //    ScaleFactor = thisMax / lMax;\n            //    if (thisMax < (ScaleFactor * (lMax - (incr / 2))))\n            //    {\n            //        i ++;\n            //    }\n            //    thisMax += logDig * logPow;\n            //}\n\n\n\n            //OK...  thisMax needs to be rounded up to the next interval...         \n            //Scale based on thisMax and Max...        \n\n            //ScaleFactor = thisMax / (max - (max / intervalCount)) ;\n            //if (thisMax < max)\n            //{\n            //    ScaleFactor = 1 / ScaleFactor;\n            //}\n            //ScaleFactor = Math.Round(ScaleFactor, 1);\n\n\n            //double factor = System.Math.Pow(10, System.Math.Floor(System.Math.Log10(ScaleFactor)));\n\n            //ScaleFactor = System.Math.Round(ScaleFactor / factor,1) * factor;                    \n            //    if( ScaleFactor < 1)\n            //    { \n            //        while ((ScaleFactor * 10) % 5 != 0 && (ScaleFactor * 10) % 2 != 0 && ScaleFactor != 1)\n            //            {\n            //                ScaleFactor += 0.1;\n            //            }             \n            //    }\n            //    else if (ScaleFactor < 10)\n            //    {\n            //        while (ScaleFactor % 5 != 0 || ScaleFactor % 2 != 0)\n            //        {\n            //            ScaleFactor++;\n            //        }\n            //    }\n            //    else\n            //    {\n            //        while (ScaleFactor % 5 != 0)\n            //        {\n            //            ScaleFactor++;\n            //        }\n\n            //    }\n\n            //if (thisMax < max)\n            //{\n            //    ScaleFactor = 1 / ScaleFactor;\n            //    ScaleFactor = Math.Round(ScaleFactor, (int)System.Math.Floor(System.Math.Log10(factor)));\n            //}\n\n\n            Draw2.Size tSize = await DrawTitleMeasure(rpt, g, a.Title2);\n\n            // rect.Width = (int)g.VisibleClipBounds.Width - rect.Left + 20;\n\n            await DrawTitle(rpt, g, a.Title2, new Draw2.Rectangle((int)rect.Right - tSize.Width, rect.Top, tSize.Width, rect.Height));\n\n            double v = min;\n            for (int i = 0; i < _gridIncrs + 1; i++)\n            {\n                int h = (int)(((Math.Min(v, thisMax) - thisMin) / (thisMax - thisMin)) * rect.Height);\n                if (h < 0)\t\t// this is really some form of error\n                {\n                    v += incr;\n                    continue;\n                }\n                if (!a.Visible)\n                {\n                    // nothing to do\n                }\n                else if (s != null)\n                {\n                    Draw2.Size size = await s.MeasureString(rpt, g, v, TypeCode.Double, null, int.MaxValue);\n                    Draw2.Rectangle vRect =\n                        new Draw2.Rectangle(rect.Left - (int)(tSize.Width * .5), rect.Top + rect.Height - h - (size.Height / 2), rect.Width - tSize.Width, size.Height);\n                    await s.DrawString(rpt, g, v, TypeCode.Double, null, vRect);\n                }\n                else\n                {\n                    Draw2.Size size = await Style.MeasureStringDefaults(rpt, g, v, TypeCode.Double, null, int.MaxValue);\n                    Draw2.Rectangle vRect =\n                        new Draw2.Rectangle(rect.Left - (int)(tSize.Width * .5), rect.Top + rect.Height - h - (size.Height / 2), rect.Width - (tSize.Width * 2), size.Height);\n                    Style.DrawStringDefaults(g, v, vRect);\n                }\n\n                v += incr;\n\n                await DrawValueAxisTick(rpt, g, true, a.MajorTickMarks, a.MajorGridLines, new Draw2.Point(plotRight - (AxisTickMarkMajorLen / 2), rect.Top + rect.Height - h));\n\n            }\n\n            return ScaleFactor;\n        }\n        //*******************************************************************************************************************************\n\n        protected async Task DrawValueAxisGrid(Report rpt, Draw2.Graphics g, ChartGridLines gl, Draw2.Point s, Draw2.Point e)\n        {\n            if (gl == null || !gl.ShowGridLines)\n                return;\n\n            if (gl.Style != null)\n                await gl.Style.DrawStyleLine(rpt, g, null, s, e);\n            else\n                g.DrawLine(Draw2.Pens.Black, s, e);\n\n            return;\n        }\n\n        protected async Task DrawValueAxisTick(Report rpt, Draw2.Graphics g, bool bMajor, AxisTickMarksEnum tickType, ChartGridLines gl, Draw2.Point p)\n        {\n            if (tickType == AxisTickMarksEnum.None)\n                return;\n\n            int len = bMajor ? AxisTickMarkMajorLen : AxisTickMarkMinorLen;\n            Draw2.Point s, e;\n            switch (tickType)\n            {\n                case AxisTickMarksEnum.Inside:\n                    s = new Draw2.Point(p.X, p.Y);\n                    e = new Draw2.Point(p.X + len, p.Y);\n                    break;\n                case AxisTickMarksEnum.Cross:\n                    s = new Draw2.Point(p.X - len, p.Y);\n                    e = new Draw2.Point(p.X + len, p.Y);\n                    break;\n                case AxisTickMarksEnum.Outside:\n                default:\n                    s = new Draw2.Point(p.X - len, p.Y);\n                    e = new Draw2.Point(p.X, p.Y);\n                    break;\n            }\n            Style style = gl.Style;\n\n            if (style != null)\n                await style.DrawStyleLine(rpt, g, null, s, e);\n            else\n                g.DrawLine(Draw2.Pens.Black, s, e);\n\n            return;\n        }\n\n        // Calculate the size of the value axis; width is max value width + title width\n        //\t\t\t\t\t\t\t\t\t\t height is max value height\n\n        //WhichAxis.... 1 = Left, 2 = Right GJL 140208\n        protected async Task<Draw2.Size> ValueAxisSize(Report rpt, Draw2.Graphics g, double min, double max)\n        {\n            Draw2.Size size = Draw2.Size.Empty;\n\n            if (ChartDefn.ValueAxis == null)\n                return size;\n\n            Axis a = ChartDefn.ValueAxis.Axis;\n\n            if (a == null)\n                return size;\n\n            Draw2.Size minSize;\n            Draw2.Size maxSize;\n            if (!a.Visible)\n            {\n                minSize = maxSize = Draw2.Size.Empty;\n            }\n            else if (a.Style != null)\n            {\n                minSize = await a.Style.MeasureString(rpt, g, min, TypeCode.Double, null, int.MaxValue);\n                maxSize = await a.Style.MeasureString(rpt, g, max, TypeCode.Double, null, int.MaxValue);\n            }\n            else\n            {\n                minSize = await Style.MeasureStringDefaults(rpt, g, min, TypeCode.Double, null, int.MaxValue);\n                maxSize = await Style.MeasureStringDefaults(rpt, g, max, TypeCode.Double, null, int.MaxValue);\n            }\n            // Choose the largest\n            size.Width = Math.Max(minSize.Width, maxSize.Width);\n            size.Height = Math.Max(minSize.Height, maxSize.Height);\n\n            // Now we need to add in the width of the title (if any)\n            Draw2.Size titleSize = await DrawTitleMeasure(rpt, g, a.Title);\n            size.Width += titleSize.Width;\n\n            return size;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ChartData.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// ChartData definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class ChartData : ReportLink\n\t{\n        List<ChartSeries> _Items;\t\t\t// list of chart series\n\n\t\tinternal ChartData(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tChartSeries cs;\n            _Items = new List<ChartSeries>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"chartseries\":\n\t\t\t\t\t\tcs = new ChartSeries(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tcs=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown ChartData element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (cs != null)\n\t\t\t\t\t_Items.Add(cs);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For ChartData at least one ChartSeries is required.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (ChartSeries cs in _Items)\n\t\t\t{\n                await cs.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<ChartSeries> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ChartElementOutput.cs",
    "content": "using System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// ChartElementOutput parsing.\n\t///</summary>\n\tinternal enum ChartElementOutputEnum\n\t{\n\t\tOutput,\n\t\tNoOutput\n\t}\n\n\tinternal class ChartElementOutput\n\t{\n\t\tstatic internal ChartElementOutputEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tChartElementOutputEnum ceo;\n\n\t\t\tswitch (s.ToLowerInvariant())\n\t\t\t{\t\t\n\t\t\t\tcase \"output\":\n\t\t\t\t\tceo = ChartElementOutputEnum.Output;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nooutput\":\n\t\t\t\t\tceo = ChartElementOutputEnum.NoOutput;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\n\t\t\t\t\trl.LogError(4, \"Unknown ChartElementOutput '\" + s + \"'.  Output assumed.\");\n\t\t\t\t\tceo = ChartElementOutputEnum.Output;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn ceo;\n\t\t}\n\t}\n\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ChartExpression.cs",
    "content": "using System;\nusing System.Xml;\nusing System.IO;\nusing System.Threading.Tasks;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// ChartExpression definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class ChartExpression : ReportItem\n\t{\n        //Expression _Value;\t// (Variant) An expression, the value of which is\n        //                    // displayed in the chart\n        DataValues _Values;     // all the data values\n        DataPoint _DataPoint;\t// The data point that generated this\n        Expression _ChartLabel;    // Chart Label\n        Expression _PlotType; // 05122007 AJM & GJL Added for PlotType Support\n        Expression _YAxis; //140208 GJL Added for left/Right YAxis Support\n        Expression _NoMarker; //30052008 GJL Added to allow lines with no markers\n        Expression _LineSize;\n        Expression _Colour;\n\t\tinternal ChartExpression(ReportDefn r, ReportLink p, XmlNode xNode):base(r,p,xNode)\n\t\t{\n\t\t\t_Values=null;\n\t\t\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n                    //case \"Value\":\n                    //    _Value = new Expression(r, this, xNodeLoop, ExpressionType.Variant);\n                    //    break;\n\n                    case \"datavalues\":\n                        _Values = new DataValues(r, p, xNodeLoop);\n                        break;\n                    case \"datapoint\":\n\t\t\t\t\t\t_DataPoint = (DataPoint) this.OwnerReport.LUDynamicNames[xNodeLoop.InnerText];\n\t\t\t\t\t\tbreak;\n                    case \"chartlabel\":\n                        _ChartLabel = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.Variant);\n                        break;\n                    // 05122007AJM & GJL Added to store PlotType\n                    case \"plottype\":\n                        _PlotType = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.Variant);\n                        break;    \n                    //140208 GJL Added for left/Right YAxis Support\n                    case \"yaxis\":\n                        _YAxis = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.String);\n                        break;\n                    case \"nomarker\":\n                    case \"fyi:nomarker\":\n                        _NoMarker = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.String);\n                        break;\n                    case \"linesize\":\n                    case \"fyi:linesize\":\n                        _LineSize = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.String);\n                        break;\n                    case \"fyi:color\":\n                    case \"color\":\n                    case \"colour\":\n                        _Colour = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.String);\n                        break;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (ReportItemElement(xNodeLoop))\t// try at ReportItem level\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Chart element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n            await base.FinalPass();\n\t\t\tif (_Values != null)\n                await _Values.FinalPass();\n            if (_DataPoint != null)\n                await _DataPoint.FinalPass();\n            if (_ChartLabel != null)\n                await _ChartLabel.FinalPass();\n            if (_PlotType != null)\n                await _PlotType.FinalPass();\n            if (_YAxis != null)\n                await _YAxis.FinalPass();\n            if (_NoMarker != null)\n                await _NoMarker.FinalPass();\n            if (_LineSize != null)\n                await _LineSize.FinalPass();\n            if (_Colour != null)\n                await _Colour.FinalPass();\n            return;\n\t\t}\n\n\t\toverride internal Task Run(IPresent ip, Row row)\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tinternal Expression Value\n\t\t{\n            get { return _Values != null && _Values.Items.Count > 0? _Values.Items[0].Value: null; }\n\t\t}\n\n        internal Expression Value2\n        {\n            get { return _Values != null && _Values.Items.Count > 1 ? _Values.Items[1].Value : null; }\n        }\n\n        internal Expression Value3\n        {\n            get { return _Values != null && _Values.Items.Count > 2 ? _Values.Items[2].Value : null; }\n        }\n \n\t\tinternal DataPoint DP\n\t\t{\n\t\t\tget { return  _DataPoint; }\n\t\t}\n\n        internal Expression ChartLabel\n        {\n            get {return _ChartLabel;}\n        }\n        // 05122007AJM & GJL Added for PlotType support\n        internal Expression PlotType\n        {\n            get { return _PlotType; }\n        }\n\t\t// 20022008 AJM GJL - Added for Second Y axis support\n        internal Expression YAxis\n        {\n            get { return _YAxis; }\n        }\n        //30052008 GJL - Added to allow lines with no markers\n        internal Expression NoMarker\n        {\n            get { return _NoMarker; }\n        }\n\n        internal Expression LineSize\n        {\n            get { return _LineSize; }\n        }\n\n        internal Expression Colour\n        {\n            get { return _Colour; }\n        }\n\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ChartGridLines.cs",
    "content": "using System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// ChartGridLines definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class ChartGridLines : ReportLink\n\t{\n\t\tbool _ShowGridLines;\t// Indicates the gridlines should be shown\n\t\tStyle _Style;\t\t\t// Line style properties for the gridlines and tickmarks\n\t\t\n\t\tinternal ChartGridLines(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_ShowGridLines=true;\n\t\t\t_Style=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"showgridlines\":\n\t\t\t\t\t\t_ShowGridLines = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"style\":\n\t\t\t\t\t\t_Style = new Style(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t// TODO\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown ChartGridLines element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\n\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Style != null)\n                await _Style.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal bool ShowGridLines\n\t\t{\n\t\t\tget { return  _ShowGridLines; }\n\t\t\tset {  _ShowGridLines = value; }\n\t\t}\n\n\t\tinternal Style Style\n\t\t{\n\t\t\tget { return  _Style; }\n\t\t\tset {  _Style = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ChartLayout.cs",
    "content": "\n\nusing System;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\nusing Majorsilence.Reporting.RdlEngine.Resources;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Class for defining chart layout.  For example, the plot area of a chart.\n\t///</summary>\n\tinternal class ChartLayout\n\t{\n\t\tint _Height;\t\t\t// total width of layout\n\t\tint _Width;\t\t\t\t// total height\n\t\tint _LeftMargin;\t\t// Margins\n\t\tint _RightMargin;\n\t\tint _TopMargin;\n\t\tint _BottomMargin;\n\t\tDraw2.Rectangle _PlotArea;\n\t\n\t\tinternal ChartLayout(int width, int height)\n\t\t{\n\t\t\t_Width = width;\n\t\t\t_Height = height;\n\t\t\t_LeftMargin = _RightMargin = _TopMargin = _BottomMargin = 0;\n\t\t\t_PlotArea = Draw2.Rectangle.Empty;\n\t\t}\n\t\t\n\t\tinternal int Width\n\t\t{\n            get { return _Width; }\n\t\t}\n\t\tinternal int Height\n\t\t{\n            get { return _Height; }\n\t\t}\n\t\tinternal int LeftMargin\n\t\t{\n\t\t\tget { return  _LeftMargin; }\n            set { _LeftMargin = value; _PlotArea = Draw2.Rectangle.Empty; }\n\t\t}\n\t\tinternal int RightMargin\n\t\t{\n\t\t\tget { return  _RightMargin; }\n            set { _RightMargin = value; _PlotArea = Draw2.Rectangle.Empty; }\n\t\t}\n\t\tinternal int TopMargin\n\t\t{\n\t\t\tget { return  _TopMargin; }\n            set { _TopMargin = value; _PlotArea = Draw2.Rectangle.Empty; }\n\t\t}\n\t\tinternal int BottomMargin\n\t\t{\n\t\t\tget { return  _BottomMargin; }\n            set { _BottomMargin = value; _PlotArea = Draw2.Rectangle.Empty; }\n\t\t}\n\t\tinternal Draw2.Rectangle PlotArea\n\t\t{\n\t\t\tget \n\t\t\t{ \n\t\t\t\tif (_PlotArea == Draw2.Rectangle.Empty)\n\t\t\t\t{\n\t\t\t\t\tint w = _Width - _LeftMargin - _RightMargin;\n\t\t\t\t\tif (w <= 0)\n\t\t\t\t\t\tthrow new Exception(Strings.ChartLayout_Error_PlotAreaWidthIs0);\n\t\t\t\t\tint h =_Height - _TopMargin - _BottomMargin;\n\t\t\t\t\tif (h <= 0)\n\t\t\t\t\t\tthrow new Exception(Strings.ChartLayout_Error_PlotAreaHeightIs0);\n\t\t\t\t\n\t\t\t\t\t_PlotArea = new Draw2.Rectangle(_LeftMargin, _TopMargin, w, h); \n\t\t\t\t}\n\n\t\t\t\treturn _PlotArea;\n\t\t\t}\n            set\n            {\n                _PlotArea = value;\n            }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ChartLine.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Runtime.InteropServices;\nusing System.Threading.Tasks;\n\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    ///<summary>\n    /// Line chart definition and processing.\n    ///</summary>\n    [Serializable]\n    internal class ChartLine : ChartColumn\n    {\n\n        internal ChartLine(Report r, Row row, Chart c, MatrixCellEntry[,] m, Expression showTooltips, Expression showTooltipsX, Expression _ToolTipYFormat, Expression _ToolTipXFormat)\n            : base(r, row, c, m, showTooltips, showTooltipsX, _ToolTipYFormat, _ToolTipXFormat)\n        {\n        }\n\n        override internal async Task Draw(Report rpt)\n        {\n            CreateSizedBitmap();\n\n#if !DRAWINGCOMPAT\n            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))\n            {\n                using (Draw2.Graphics g1 = Draw2.Graphics.FromImage(_bm))\n                {\n                    _aStream = new System.IO.MemoryStream();\n                    IntPtr HDC = g1.GetHdc();\n                    _mf = new Draw2.Imaging.Metafile(_aStream, HDC,\n                        new Draw2.RectangleF(0, 0, _bm.Width, _bm.Height), Draw2.Imaging.MetafileFrameUnit.Pixel);\n                    g1.ReleaseHdc(HDC);\n                }\n            }\n\n\n            using (Draw2.Graphics g = Draw2.Graphics.FromImage(_mf != null ? _mf : _bm))\n#else\n            using (Draw2.Graphics g = Draw2.Graphics.FromImage(_bm))\n#endif\n            {\n                // 06122007AJM Used to Force Higher Quality\n                g.InterpolationMode = Draw2.Drawing2D.InterpolationMode.HighQualityBicubic;\n                g.SmoothingMode = Draw2.Drawing2D.SmoothingMode.HighQuality;\n                g.PixelOffsetMode = Draw2.Drawing2D.PixelOffsetMode.None;\n                g.CompositingQuality = Draw2.Drawing2D.CompositingQuality.HighQuality;\n\n                // Adjust the top margin to depend on the title height\n                Draw2.Size titleSize = await DrawTitleMeasure(rpt, g, ChartDefn.Title);\n                Layout.TopMargin = titleSize.Height;\n\n                // 20022008 AJM GJL - Added new required info \n                double max = 0, min = 0; // Get the max and min values\n                (max, min) = await GetValueMaxMin(rpt, max, min, 0, 1);\n\n                await DrawChartStyle(rpt, g);\n\n                // Draw title; routine determines if necessary\n                await DrawTitle(rpt, g, ChartDefn.Title, new Draw2.Rectangle(0, 0, Layout.Width, Layout.TopMargin));\n\n                // Adjust the left margin to depend on the Value Axis\n                Draw2.Size vaSize = await ValueAxisSize(rpt, g, min, max);\n                Layout.LeftMargin = vaSize.Width;\n\n                // Draw legend\n                Draw2.Rectangle lRect = await DrawLegend(rpt, g, ChartDefn.Type == ChartTypeEnum.Area ? false : true, true);\n\n                // Adjust the bottom margin to depend on the Category Axis\n                Draw2.Size caSize = await CategoryAxisSize(rpt, g);\n                Layout.BottomMargin = caSize.Height;\n\n                AdjustMargins(lRect, rpt, g);       // Adjust margins based on legend.\n\n                // Draw Plot area\n                await DrawPlotAreaStyle(rpt, g, lRect);\n                int intervalCount = 0;\n                double incr = 0;\n                // Draw Value Axis\n                if (vaSize.Width > 0)   // If we made room for the axis - we need to draw it\n                    (incr, intervalCount) = await DrawValueAxis(rpt, g, min, max,\n                        new Draw2.Rectangle(Layout.LeftMargin - vaSize.Width, Layout.TopMargin, vaSize.Width, Layout.PlotArea.Height), Layout.LeftMargin, _bm.Width - Layout.RightMargin);\n\n                // Draw Category Axis\n                if (caSize.Height > 0)\n                    //09052008ajm passing chart bounds int\n                    await DrawCategoryAxis(rpt, g,\n                        new Draw2.Rectangle(Layout.LeftMargin, _bm.Height - Layout.BottomMargin, Layout.PlotArea.Width, caSize.Height), Layout.TopMargin,\n                        caSize.Width);\n\n                // Draw Plot area data \n                if (ChartDefn.Type == ChartTypeEnum.Area)\n                {\n                    if ((ChartSubTypeEnum)Enum.Parse(typeof(ChartSubTypeEnum), await _ChartDefn.Subtype.EvaluateString(rpt, _row)) == ChartSubTypeEnum.Stacked)\n                        await DrawPlotAreaAreaStacked(rpt, g, min, max);\n                    else if ((ChartSubTypeEnum)Enum.Parse(typeof(ChartSubTypeEnum), await _ChartDefn.Subtype.EvaluateString(rpt, _row)) == ChartSubTypeEnum.PercentStacked)\n                        await DrawPlotAreaAreaPercentStacked(rpt, g);\n                    else\n                        await DrawPlotAreaArea(rpt, g, min, max);\n                }\n                else\n                {\n                    await DrawPlotAreaLine(rpt, g, min, max);\n                }\n                await DrawLegend(rpt, g, ChartDefn.Type == ChartTypeEnum.Area ? false : true, false);\n            }\n        }\n\n        async Task DrawPlotAreaArea(Report rpt, Draw2.Graphics g, double min, double max)\n        {\n            // Draw Plot area data \n            int maxPointHeight = (int)Layout.PlotArea.Height;\n            double widthCat = ((double)(Layout.PlotArea.Width) / (CategoryCount - 1));\n            Draw2.Point[] saveP = new Draw2.Point[CategoryCount];   // used for drawing lines between points\n            for (int iCol = 1; iCol <= SeriesCount; iCol++)\n            {\n                for (int iRow = 1; iRow <= CategoryCount; iRow++)\n                {\n                    double v = await this.GetDataValue(rpt, iRow, iCol);\n\n                    int x = (int)(Layout.PlotArea.Left + ((iRow - 1) * widthCat));\n                    int y = (int)(((Math.Min(v, max) - min) / (max - min)) * maxPointHeight);\n                    Draw2.Point p = new Draw2.Point(x, Layout.PlotArea.Top + (maxPointHeight - y));\n                    saveP[iRow - 1] = p;\n                    await DrawLinePoint(rpt, g, await GetSeriesBrush(rpt, iRow, iCol), ChartMarkerEnum.None, p, iRow, iCol);\n\n                    //Add a metafilecomment to use as a tooltip GJL 26092008\n                    if (_showToolTips)\n                    {\n                        String val = \"ToolTip:\" + v.ToString(_tooltipYFormat) + \"|X:\" + (int)(p.X - 5) + \"|Y:\" + (int)(p.Y - 5) + \"|W:\" + 10 + \"|H:\" + 10;\n                        g.AddMetafileComment(new System.Text.ASCIIEncoding().GetBytes(val));\n                    }\n                }\n                DrawAreaBetweenPoints(g, await GetSeriesBrush(rpt, 1, iCol), saveP, null);\n            }\n            return;\n        }\n\n        async Task DrawPlotAreaAreaPercentStacked(Report rpt, Draw2.Graphics g)\n        {\n            double max = 1;             // 100% is the max\n                                        // Draw Plot area data \n            int maxPointHeight = (int)Layout.PlotArea.Height;\n            double widthCat = ((double)(Layout.PlotArea.Width) / (CategoryCount - 1));\n            Draw2.Point[,] saveAllP = new Draw2.Point[CategoryCount, SeriesCount];  // used to collect all data points\n\n            // Loop thru calculating all the data points\n            for (int iRow = 1; iRow <= CategoryCount; iRow++)\n            {\n                int x = (int)(Layout.PlotArea.Left + ((iRow - 1) * widthCat));\n                double sum = 0;\n                for (int iCol = 1; iCol <= SeriesCount; iCol++)\n                {\n                    sum += await GetDataValue(rpt, iRow, iCol);\n                }\n                double v = 0;\n                for (int iCol = 1; iCol <= SeriesCount; iCol++)\n                {\n                    v += await GetDataValue(rpt, iRow, iCol);\n\n                    int y = (int)((Math.Min(v / sum, max) / max) * maxPointHeight);\n                    Draw2.Point p = new Draw2.Point(x, Layout.PlotArea.Top + (maxPointHeight - y));\n                    saveAllP[iRow - 1, iCol - 1] = p;\n                }\n            }\n\n            // Now loop thru and plot all the points\n            Draw2.Point[] saveP = new Draw2.Point[CategoryCount];   // used for drawing lines between points\n            Draw2.Point[] priorSaveP = new Draw2.Point[CategoryCount];\n            for (int iCol = 1; iCol <= SeriesCount; iCol++)\n            {\n                for (int iRow = 1; iRow <= CategoryCount; iRow++)\n                {\n                    double v = await this.GetDataValue(rpt, iRow, iCol);\n\n                    int x = (int)(Layout.PlotArea.Left + ((iRow - 1) * widthCat));\n                    int y = (int)((Math.Min(v, max) / max) * maxPointHeight);\n                    Draw2.Point p = new Draw2.Point(x, Layout.PlotArea.Top + (maxPointHeight - y));\n                    saveP[iRow - 1] = saveAllP[iRow - 1, iCol - 1];\n                    await DrawLinePoint(rpt, g, await GetSeriesBrush(rpt, iRow, iCol), ChartMarkerEnum.None, p, iRow, iCol);\n\n                    //Add a metafilecomment to use as a tooltip GJL 26092008\n                    if (_showToolTips)\n                    {\n                        String val = \"ToolTip:\" + v.ToString(_tooltipYFormat) + \"|X:\" + (int)(p.X - 5) + \"|Y:\" + (int)(p.Y - 5) + \"|W:\" + 10 + \"|H:\" + 10;\n                        g.AddMetafileComment(new System.Text.ASCIIEncoding().GetBytes(val));\n                    }\n                }\n                DrawAreaBetweenPoints(g, await GetSeriesBrush(rpt, 1, iCol), saveP, iCol == 1 ? null : priorSaveP);\n                // Save prior point values\n                for (int i = 0; i < CategoryCount; i++)\n                    priorSaveP[i] = saveP[i];\n            }\n            return;\n        }\n\n        async Task DrawPlotAreaAreaStacked(Report rpt, Draw2.Graphics g, double min, double max)\n        {\n            // Draw Plot area data \n            int maxPointHeight = (int)Layout.PlotArea.Height;\n            double widthCat = ((double)(Layout.PlotArea.Width) / (CategoryCount - 1));\n            Draw2.Point[,] saveAllP = new Draw2.Point[CategoryCount, SeriesCount];  // used to collect all data points\n\n            // Loop thru calculating all the data points\n            for (int iRow = 1; iRow <= CategoryCount; iRow++)\n            {\n                int x = (int)(Layout.PlotArea.Left + ((iRow - 1) * widthCat));\n                double v = 0;\n                for (int iCol = 1; iCol <= SeriesCount; iCol++)\n                {\n                    v += await GetDataValue(rpt, iRow, iCol);\n                    int y = (int)(((Math.Min(v, max) - min) / (max - min)) * maxPointHeight);\n                    Draw2.Point p = new Draw2.Point(x, Layout.PlotArea.Top + (maxPointHeight - y));\n                    saveAllP[iRow - 1, iCol - 1] = p;\n                }\n            }\n\n            // Now loop thru and plot all the points\n            Draw2.Point[] saveP = new Draw2.Point[CategoryCount];   // used for drawing lines between points\n            Draw2.Point[] priorSaveP = new Draw2.Point[CategoryCount];\n            for (int iCol = 1; iCol <= SeriesCount; iCol++)\n            {\n                for (int iRow = 1; iRow <= CategoryCount; iRow++)\n                {\n                    double v = await this.GetDataValue(rpt, iRow, iCol);\n\n                    int x = (int)(Layout.PlotArea.Left + ((iRow - 1) * widthCat));\n                    int y = (int)(((Math.Min(v, max) - min) / (max - min)) * maxPointHeight);\n                    Draw2.Point p = new Draw2.Point(x, Layout.PlotArea.Top + (maxPointHeight - y));\n                    saveP[iRow - 1] = saveAllP[iRow - 1, iCol - 1];\n                    await DrawLinePoint(rpt, g, await GetSeriesBrush(rpt, iRow, iCol), ChartMarkerEnum.None, p, iRow, iCol);\n                    //Add a metafilecomment to use as a tooltip GJL 26092008\n                    if (_showToolTips)\n                    {\n                        String val = \"ToolTip:\" + v.ToString(_tooltipYFormat) + \"|X:\" + (int)(saveP[iRow - 1].X - 5) + \"|Y:\" + (int)(saveP[iRow - 1].Y - 5) + \"|W:\" + 10 + \"|H:\" + 10;\n                        g.AddMetafileComment(new System.Text.ASCIIEncoding().GetBytes(val));\n                    }\n\n\n                }\n                DrawAreaBetweenPoints(g, await GetSeriesBrush(rpt, 1, iCol), saveP, iCol == 1 ? null : priorSaveP);\n                // Save prior point values\n                for (int i = 0; i < CategoryCount; i++)\n                    priorSaveP[i] = saveP[i];\n            }\n            return;\n        }\n\n        async Task DrawPlotAreaLine(Report rpt, Draw2.Graphics g, double min, double max)\n        {\n            // Draw Plot area data \n            int maxPointHeight = (int)Layout.PlotArea.Height;\n            double widthCat = ((double)(Layout.PlotArea.Width) / CategoryCount);\n            Draw2.Point[] saveP = new Draw2.Point[CategoryCount];   // used for drawing lines between points\n            for (int iCol = 1; iCol <= SeriesCount; iCol++)\n            {\n                for (int iRow = 1; iRow <= CategoryCount; iRow++)\n                {\n                    double v = await this.GetDataValue(rpt, iRow, iCol);\n\n                    int x = (int)(Layout.PlotArea.Left + ((iRow - 1) * widthCat) + (widthCat / 2));\n                    int y = (int)(((Math.Min(v, max) - min) / (max - min)) * maxPointHeight);\n                    Draw2.Point p = new Draw2.Point(x, Layout.PlotArea.Top + (maxPointHeight - y));\n                    saveP[iRow - 1] = p;\n                    bool DrawPoint = getNoMarkerVal(rpt, iCol, 1) == false;\n                    //dont draw the point if I say not to!\n                    if (DrawPoint) { await DrawLinePoint(rpt, g, await GetSeriesBrush(rpt, iRow, iCol), SeriesMarker[iCol - 1], p, iRow, iCol); }\n\n                    //Add a metafilecomment to use as a tooltip GJL 26092008\n                    if (_showToolTips)\n                    {\n                        String val = \"ToolTip:\" + v.ToString(_tooltipYFormat) + \"|X:\" + (int)(p.X - 5) + \"|Y:\" + (int)(p.Y - 5) + \"|W:\" + 10 + \"|H:\" + 10;\n                        g.AddMetafileComment(new System.Text.ASCIIEncoding().GetBytes(val));\n                    }\n                }\n\n                String LineSize = getLineSize(rpt, iCol, 1);\n                int intLineSize = 2;\n                switch (LineSize)\n                {\n                    case \"Small\":\n                        intLineSize = 1;\n                        break;\n                    case \"Regular\":\n                        intLineSize = 2;\n                        break;\n                    case \"Large\":\n                        intLineSize = 3;\n                        break;\n                    case \"Extra Large\":\n                        intLineSize = 4;\n                        break;\n                    case \"Super Size\":\n                        intLineSize = 5;\n                        break;\n                }\n                await DrawLineBetweenPoints(g, rpt, await GetSeriesBrush(rpt, 1, iCol), saveP, intLineSize);\n            }\n            return;\n        }\n\n        void DrawAreaBetweenPoints(Draw2.Graphics g, Draw2.Brush brush, Draw2.Point[] points, Draw2.Point[] previous)\n        {\n            if (points.Length <= 1)     // Need at least 2 points\n                return;\n\n            Draw2.Pen p = null;\n            try\n            {\n                p = new Draw2.Pen(brush, 1);    // todo - use line from style ????\n                g.DrawLines(p, points);\n                Draw2.PointF[] poly;\n                if (previous == null)\n                {   // The bottom is the bottom of the chart\n                    poly = new Draw2.PointF[points.Length + 3];\n                    int i = 0;\n                    foreach (Draw2.Point pt in points)\n                    {\n                        poly[i++] = pt;\n                    }\n                    poly[i++] = new Draw2.PointF(points[points.Length - 1].X, Layout.PlotArea.Bottom);\n                    poly[i++] = new Draw2.PointF(points[0].X, Layout.PlotArea.Bottom);\n                    poly[i] = new Draw2.PointF(points[0].X, points[0].Y);\n                }\n                else\n                {   // The bottom is the previous line\n                    poly = new Draw2.PointF[(points.Length * 2) + 1];\n                    int i = 0;\n                    foreach (Draw2.Point pt in points)\n                    {\n                        poly[i] = pt;\n                        poly[points.Length + i] = previous[previous.Length - 1 - i];\n                        i++;\n                    }\n                    poly[poly.Length - 1] = poly[0];\n                }\n                g.FillPolygon(brush, poly);\n            }\n            finally\n            {\n                if (p != null)\n                    p.Dispose();\n            }\n            return;\n        }\n\n        async Task DrawLineBetweenPoints(Draw2.Graphics g, Report rpt, Draw2.Brush brush, Draw2.Point[] points)\n        {\n            await DrawLineBetweenPoints(g, rpt, brush, points, 2);\n        }\n\n        async Task DrawLineBetweenPoints(Draw2.Graphics g, Report rpt, Draw2.Brush brush, Draw2.Point[] points, int intLineSize)\n        {\n            if (points.Length <= 1)\t\t// Need at least 2 points\n                return;\n\n            Draw2.Pen p = null;\n            try\n            {\n                // 20022008 AJM GJL - Added thicker lines\n\n\n                p = new Draw2.Pen(brush, intLineSize);    // todo - use line from style ????\n\n\n                if ((ChartSubTypeEnum)Enum.Parse(typeof(ChartSubTypeEnum), await _ChartDefn.Subtype.EvaluateString(rpt, _row)) == ChartSubTypeEnum.Smooth && points.Length > 2)\n                    g.DrawCurve(p, points, 0.5F);\n                else\n                    g.DrawLines(p, points);\n            }\n            finally\n            {\n                if (p != null)\n                    p.Dispose();\n            }\n            return;\n        }\n\n        async Task DrawLinePoint(Report rpt, Draw2.Graphics g, Draw2.Brush brush, ChartMarkerEnum marker, Draw2.Point p, int iRow, int iCol)\n        {\n            Draw2.Pen pen = null;\n            try\n            {\n                pen = new Draw2.Pen(brush);\n                // 20022008 AJM GJL - Added bigger points\n                DrawLegendMarker(g, brush, pen, marker, p.X - 5, p.Y - 5, 10);\n                await DrawDataPoint(rpt, g, new Draw2.Point(p.X - 5, p.Y + 5), iRow, iCol);\n            }\n            finally\n            {\n                if (pen != null)\n                    pen.Dispose();\n            }\n\n            return;\n        }\n\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ChartMap.cs",
    "content": "\n\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\nusing Imaging = Majorsilence.Drawing.Imaging;\n#else\nusing Draw2 = System.Drawing;\nusing Imaging = System.Drawing.Imaging;\n#endif\nusing System.Text;\nusing System.Globalization;\nusing System.Runtime.InteropServices;\nusing System.Threading.Tasks;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Column chart definition and processing\n\t///</summary>\n\tinternal class ChartMap: ChartBase\n\t{\n\n        internal ChartMap(Report r, Row row, Chart c, MatrixCellEntry[,] m, Expression showTooltips, Expression showTooltipsX, Expression _ToolTipYFormat, Expression _ToolTipXFormat)\n            : base(r, row, c, m, showTooltips, showTooltipsX, _ToolTipYFormat, _ToolTipXFormat)\n\t\t{\n\t\t}\n\n\t\toverride internal async Task Draw(Report rpt)\n\t\t{\n\t\t\tCreateSizedBitmap();\n#if !DRAWINGCOMPAT\n            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))\n\t\t\t{\n\t\t\t\tusing (Draw2.Graphics g1 = Draw2.Graphics.FromImage(_bm))\n\t\t\t\t{\n\t\t\t\t\t_aStream = new System.IO.MemoryStream();\n\t\t\t\t\tIntPtr HDC = g1.GetHdc();\n\t\t\t\t\t//_mf = new System.Draw2.Imaging.Metafile(_aStream, HDC);\n\t\t\t\t\t_mf = new Imaging.Metafile(_aStream, HDC, new Draw2.RectangleF(0, 0, _bm.Width, _bm.Height),\n\t\t\t\t\t\tImaging.MetafileFrameUnit.Pixel);\n\t\t\t\t\tg1.ReleaseHdc(HDC);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tusing(Draw2.Graphics g = Draw2.Graphics.FromImage(_mf != null ? _mf : _bm))\n#else\n            using (Draw2.Graphics g = Draw2.Graphics.FromImage(_bm))\n#endif\n            {\n                // 06122007AJM Used to Force Higher Quality\n                g.InterpolationMode = Draw2.Drawing2D.InterpolationMode.HighQualityBicubic;\n                g.SmoothingMode = Draw2.Drawing2D.SmoothingMode.HighQuality;\n                g.PixelOffsetMode = Draw2.Drawing2D.PixelOffsetMode.None;\n                g.CompositingQuality = Draw2.Drawing2D.CompositingQuality.HighQuality;\n\n\t\t\t\t// Adjust the top margin to depend on the title height\n\t\t\t\tDraw2.Size titleSize = await DrawTitleMeasure(rpt, g, ChartDefn.Title);\n\t\t\t\tLayout.TopMargin = titleSize.Height;\n\n\t\t\t\tdouble max=0,min=0; // Get the max and min values\n                                    //\t\tGetValueMaxMin(rpt, ref max, ref min,0, 1);\n\n                await DrawChartStyle(rpt, g);\n\n                // Draw title; routine determines if necessary\n                await DrawTitle(rpt, g, ChartDefn.Title, new Draw2.Rectangle(0, 0, _bm.Width, Layout.TopMargin));\n\n\t\t\t\tLayout.LeftMargin = 0;\n                Layout.RightMargin = 0;\n\n\t\t\t\t// Draw legend\n\t\t\t\tDraw2.Rectangle lRect = await DrawLegend(rpt, g, false, true);\n\n\t\t\t\tLayout.BottomMargin = 0;\n\n\t\t\t\tAdjustMargins(lRect,rpt, g);        // Adjust margins based on legend.\n\n                // Draw Plot area\n                await DrawPlotAreaStyle(rpt, g, lRect);\n\n                string subtype = await _ChartDefn.Subtype.EvaluateString(rpt, _row);\n\n                await DrawMap(rpt, g, subtype, max, min);\n\n                await DrawLegend(rpt, g, false, false);\n\n\t\t\t}\n\t\t}\n\n        private async Task DrawMap(Report rpt, Draw2.Graphics g, string mapfile, double max, double min)\n        {\n            string file = XmlUtil.XmlFileExists(mapfile);\n\n            MapData mp;\n            if (file != null)\n                mp = MapData.Create(file);\n            else\n            {\n                rpt.rl.LogError(4, string.Format(\"Map Subtype file {0} not found.\", mapfile));                \n                mp = new MapData();         // we'll at least put up something; but it won't be right\n            }\n            float scale = mp.GetScale(Layout.PlotArea.Width, Layout.PlotArea.Height);\n\n            for (int iRow = 1; iRow <= CategoryCount; iRow++)\n            {\n                for (int iCol = 1; iCol <= SeriesCount; iCol++)\n                {\n                    string sv = await GetSeriesValue(rpt, iCol);\n\n                    string c = await this.GetDataValueString(rpt, iRow, iCol);\n                    List<MapPolygon> pl = mp.GetPolygon(sv);\n                    if (pl == null)\n                        continue;\n                    Draw2.Brush br = new Draw2.SolidBrush(XmlUtil.ColorFromHtml(c, Draw2.Color.Transparent));\n                    foreach (MapPolygon mpoly in pl)\n                    {\n\t                    Draw2.PointF[] polygon = mpoly.Polygon;\n\t                    Draw2.PointF[] drawpoly = new Draw2.PointF[polygon.Length];\n                        // make points relative to plotarea --- need to scale this as well\n                        for (int ip = 0; ip < drawpoly.Length; ip++)\n                        {\n                            drawpoly[ip] = new Draw2.PointF(Layout.PlotArea.X + (polygon[ip].X * scale), Layout.PlotArea.Y + (polygon[ip].Y * scale));\n                        }\n                        g.FillPolygon(br, drawpoly);\n                        if (_showToolTips)\n                        {\n                            StringBuilder sb = new StringBuilder();\n                            sb.Append(\"PolyToolTip:\");\n                            sb.Append(sv.Replace('|', '/'));        // we treat '|' as a separator character; don't allow in string\n                            sb.Append(' ');\n                            sb.Append(c.Replace('|', '/'));\n                            foreach (Draw2.PointF pf in drawpoly)\n                                sb.AppendFormat(NumberFormatInfo.InvariantInfo, \"|{0}|{1}\", pf.X, pf.Y);\n                            g.AddMetafileComment(new System.Text.ASCIIEncoding().GetBytes(sb.ToString()));\n                        }\n                    }\n                    br.Dispose();\n                }\n            }\n            // draw the outline of the map\n            foreach (MapObject mo in mp.MapObjects)\n            {\n                mo.Draw(g, scale, Layout.PlotArea.X, Layout.PlotArea.Y);\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ChartMapData.cs",
    "content": "\n\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\nusing System.IO;\nusing System.Xml;\nusing System.Globalization;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    internal class MapData\n    {\n        static Dictionary<string, MapData> _MapCache = new Dictionary<string, MapData>();               // cache data\n        Dictionary<string, List<MapPolygon>> _DataPoints = new Dictionary<string, List<MapPolygon>>();  // all the data values\n        List<MapObject> _MapObjects = new List<MapObject>();    // keep polygons to draw the outline (ie in case an entry isn't filled\n        float _MaxX=0;         // Maximum x coordinate\n        float _MaxY=0;         // Maximum y coordinate\n        DateTime _TimeStamp;\n\n        /// <summary>\n        /// Creates MapData from XML \n        /// </summary>\n        /// <param name=\"xr\"></param>\n        internal MapData(XmlReader xr)\n        {\n            xr.Read();\n            if (xr.NodeType == XmlNodeType.Element && xr.Name == \"MapData\")\n                ReadXmlMapData(xr);                // Read it\n            return;\n        }\n\n        private void ReadXmlMapData(XmlReader xr)\n        {\n            // Read thru all the mapdata objects\n            while (xr.Read())\n            {\n                if (!xr.IsStartElement())\n                    continue;\n\n                switch (xr.Name)\n                {\n                    case \"Polygon\":\n                        ReadXmlPolygon(xr);\n                        break;\n                    case \"Lines\":\n                        ReadXmlLines(xr);\n                        break;\n                    case \"Text\":\n                        ReadXmlText(xr);\n                        break;\n                    default:                // just skip unknown elements\n                        break;\n                }\n            }\n        }\n\n        private void ReadXmlLines(XmlReader xr)\n        {\n            Draw2.PointF[] pts = null;\n            // Read thru all the Lines objects\n            while (xr.Read())\n            {\n                if (!xr.IsStartElement())\n                {\n                    if (xr.NodeType == XmlNodeType.EndElement && xr.Name == \"Lines\")\n                        break;\n                    continue;\n                }\n\n                switch (xr.Name)\n                {\n                    case \"Points\":\n                        pts = ReadXmlPoints(xr);\n                        break;\n                }\n            }\n            if (pts != null)\n                AddMapObject(new MapLines(pts));\n        }\n\n        private Draw2.PointF[] ReadXmlPoints(XmlReader xr)\n        {\n            string spts = xr.ReadString();\n            string[] pts = spts.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);\n            Draw2.PointF[] pa = new Draw2.PointF[pts.Length / 2];\n            int j=0;\n            for (int i = 0; i < pa.Length; i++)\n            {\n                pa[i].X = Convert.ToSingle(pts[j++], NumberFormatInfo.InvariantInfo);\n                pa[i].Y = Convert.ToSingle(pts[j++], NumberFormatInfo.InvariantInfo);\n            }\n            return pa;\n        }\n        private void ReadXmlPolygon(XmlReader xr)\n        {\n            // Read thru all the Polygon objects\n            Draw2.PointF[] pts = null;\n            string[] keys = null;\n            Draw2.Color fill = Draw2.Color.Empty;\n            while (xr.Read())\n            {\n                if (!xr.IsStartElement())\n                {\n                    if (xr.NodeType == XmlNodeType.EndElement && xr.Name == \"Polygon\")\n                        break;\n                    continue;\n                }\n\n                switch (xr.Name)\n                {\n                    case \"Points\":\n                        pts = ReadXmlPoints(xr);\n                        break;\n                    case \"Keys\":\n                        keys = ReadXmlKeys(xr);\n                        break;\n                    case \"FillColor\":\n                        fill = ReadXmlColor(xr);\n                        break;\n                }\n\n            }\n            if (pts != null)\n                AddPolygon(pts, keys, fill);\n        }\n\n        private string[] ReadXmlKeys(XmlReader xr)\n        {\n            string skeys = xr.ReadString();\n            string[] keys = skeys.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);\n            return keys;\n        }\n\n        private Draw2.Color ReadXmlColor(XmlReader xr)\n        {\n            string sc = xr.ReadString();\n            return XmlUtil.ColorFromHtml(sc, Draw2.Color.Empty);\n        }\n\n        private void ReadXmlText(XmlReader xr)\n        {\n            // Read thru all the Text elements\n            string val = null;\n            Draw2.PointF location= new Draw2.PointF();\n            string family = \"Arial\";\n            float fontsize = 8;\n            bool bBold = false;\n            bool bItalic = false;\n            bool bUnderline = false;\n            bool bLineThrough = false;\n\n            string temp;\n            while (xr.Read())\n            {\n                if (!xr.IsStartElement())\n                {\n                    if (xr.NodeType == XmlNodeType.EndElement && xr.Name == \"Text\")\n                        break;\n                    continue;\n                }\n\n                switch (xr.Name)\n                {\n                    case \"Location\":\n                        Draw2.PointF[] pfa = ReadXmlPoints(xr);\n                        location = pfa[0];\n                        break;\n                    case \"Value\":\n                        val = xr.ReadString();\n                        break;\n                    case \"FontFamily\":\n                        family = xr.ReadString();\n                        break;\n                    case \"FontSize\":\n                        temp = xr.ReadString();\n                        try\n                        {\n                            fontsize = float.Parse(temp, NumberFormatInfo.InvariantInfo);\n                        }\n                        catch\n                        {\n                            fontsize = 8;\n                        }\n                        break;\n                    case \"FontWeight\":\n                        temp = xr.ReadString();\n                        bBold = temp.ToLower() == \"bold\";\n                        break;\n                    case \"FontStyle\":\n                        temp = xr.ReadString();\n                        bItalic = temp.ToLower() == \"italic\";\n                        break;\n                    case \"TextDecoration\":\n                        temp = xr.ReadString();\n                        switch (temp.ToLower())\n                        {\n                            case \"underline\":\n                                bUnderline = true;\n                                break;\n                            case \"linethrough\":\n                                bUnderline = true;\n                                break;\n                        }\n                        break;\n                }\n            }\n            if (val != null && location != null)\n            {\n                MapText mt = new MapText(val, location);\n                mt.FontFamily = family;\n                mt.FontSize = fontsize;\n                mt.bBold = bBold;\n                mt.bItalic = bItalic;\n                mt.bLineThrough = bLineThrough;\n                mt.bUnderline = bUnderline;\n                AddMapObject(mt);\n            }\n        }\n\n        /// <summary>\n        /// Given a file name constructs a MapData\n        /// </summary>\n        /// <param name=\"file\"></param>\n        /// <returns></returns>\n        static internal MapData Create(string file)\n        {\n\n            lock (_MapCache)\n            {\n                DateTime filetime = File.GetLastWriteTimeUtc(file);\n                MapData mp = null;\n                if (_MapCache.TryGetValue(file, out mp))\n                {\n                    if (mp._TimeStamp.Ticks == filetime.Ticks)\n                        return mp;\n                    _MapCache.Remove(file);\n                    mp = null;\n                }\n\n                XmlReaderSettings settings = new XmlReaderSettings();\n                settings.ConformanceLevel = ConformanceLevel.Fragment;\n                settings.IgnoreWhitespace = true;\n                settings.IgnoreComments = true;\n                XmlReader reader = XmlReader.Create(file, settings);\n                try\n                {\n                    mp = new MapData(reader);\n                    mp._TimeStamp = filetime;\n                    _MapCache.Add(file, mp);        // add this to the cache\n                }\n                finally\n                {\n                    reader.Close();\n                }\n                return mp;\n            }\n        }\n        /// <summary>\n        /// this constructor for testing purposes it creates a rough 48 state US map\n        /// </summary>\n        internal MapData()\n\t\t{\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(338, 104), new Draw2.PointF(339, 111), new Draw2.PointF(344, 111), new Draw2.PointF(344, 109) }, new string[] { \"de\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(312, 106), new Draw2.PointF(335, 102), new Draw2.PointF(332, 112), new Draw2.PointF(323, 105) }, new string[] { \"md\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(355, 46), new Draw2.PointF(358, 29), new Draw2.PointF(364, 26), new Draw2.PointF(367, 25), new Draw2.PointF(371, 35), new Draw2.PointF(378, 44), new Draw2.PointF(372, 50), new Draw2.PointF(369, 48), new Draw2.PointF(368, 54), new Draw2.PointF(360, 64) }, new string[] { \"me\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(352, 49), new Draw2.PointF(360, 65), new Draw2.PointF(359, 67), new Draw2.PointF(351, 67) }, new string[] { \"nh\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(358, 76), new Draw2.PointF(360, 77), new Draw2.PointF(360, 80), new Draw2.PointF(359, 80) }, new string[] { \"ri\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(348, 78), new Draw2.PointF(361, 77), new Draw2.PointF(357, 81), new Draw2.PointF(349, 85) }, new string[] { \"ct\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(348, 72), new Draw2.PointF(360, 68), new Draw2.PointF(361, 72), new Draw2.PointF(364, 74), new Draw2.PointF(367, 73), new Draw2.PointF(367, 76), new Draw2.PointF(365, 77), new Draw2.PointF(362, 78), new Draw2.PointF(361, 74), new Draw2.PointF(348, 77) }, new string[] { \"ma\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(343, 53), new Draw2.PointF(352, 50), new Draw2.PointF(350, 70), new Draw2.PointF(347, 69) }, new string[] { \"vt\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(308, 86), new Draw2.PointF(312, 80), new Draw2.PointF(312, 75), new Draw2.PointF(324, 72), new Draw2.PointF(326, 68), new Draw2.PointF(326, 63), new Draw2.PointF(334, 54), new Draw2.PointF(341, 54), new Draw2.PointF(347, 71), new Draw2.PointF(347, 85), new Draw2.PointF(341, 85), new Draw2.PointF(336, 81) }, new string[] { \"ny\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(340, 86), new Draw2.PointF(346, 86), new Draw2.PointF(347, 96), new Draw2.PointF(344, 104), new Draw2.PointF(338, 100), new Draw2.PointF(343, 96), new Draw2.PointF(340, 92) }, new string[] { \"nj\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(304, 88), new Draw2.PointF(336, 81), new Draw2.PointF(339, 86), new Draw2.PointF(339, 91), new Draw2.PointF(341, 94), new Draw2.PointF(339, 100), new Draw2.PointF(306, 106) }, new string[] { \"pa\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(305, 107), new Draw2.PointF(312, 107), new Draw2.PointF(315, 109), new Draw2.PointF(320, 106), new Draw2.PointF(321, 107), new Draw2.PointF(310, 124), new Draw2.PointF(302, 127), new Draw2.PointF(300, 125), new Draw2.PointF(295, 119) }, new string[] { \"wv\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(295, 136), new Draw2.PointF(338, 126), new Draw2.PointF(339, 119), new Draw2.PointF(328, 110), new Draw2.PointF(323, 107), new Draw2.PointF(316, 115), new Draw2.PointF(309, 126), new Draw2.PointF(302, 129), new Draw2.PointF(295, 132) }, new string[] { \"va\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(304, 135), new Draw2.PointF(334, 129), new Draw2.PointF(343, 131), new Draw2.PointF(345, 137), new Draw2.PointF(330, 152), new Draw2.PointF(319, 147), new Draw2.PointF(312, 146), new Draw2.PointF(305, 145), new Draw2.PointF(298, 147), new Draw2.PointF(289, 150) }, new string[] { \"nc\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(296, 150), new Draw2.PointF(303, 147), new Draw2.PointF(310, 146), new Draw2.PointF(312, 148), new Draw2.PointF(319, 148), new Draw2.PointF(328, 154), new Draw2.PointF(315, 170) }, new string[] { \"sc\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(280, 94), new Draw2.PointF(287, 93), new Draw2.PointF(290, 94), new Draw2.PointF(303, 88), new Draw2.PointF(305, 105), new Draw2.PointF(295, 119), new Draw2.PointF(281, 115), new Draw2.PointF(277, 94), new Draw2.PointF(283, 93) }, new string[] { \"oh\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(267, 188), new Draw2.PointF(313, 188), new Draw2.PointF(331, 219), new Draw2.PointF(328, 230), new Draw2.PointF(321, 231), new Draw2.PointF(313, 219), new Draw2.PointF(305, 201), new Draw2.PointF(295, 192), new Draw2.PointF(283, 195), new Draw2.PointF(280, 192), new Draw2.PointF(270, 191) }, new string[] { \"fl\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(279, 152), new Draw2.PointF(294, 150), new Draw2.PointF(313, 170), new Draw2.PointF(311, 186), new Draw2.PointF(307, 186), new Draw2.PointF(287, 183) }, new string[] { \"ga\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(261, 154), new Draw2.PointF(277, 152), new Draw2.PointF(285, 185), new Draw2.PointF(267, 187), new Draw2.PointF(269, 192), new Draw2.PointF(263, 192) }, new string[] { \"al\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(246, 156), new Draw2.PointF(260, 155), new Draw2.PointF(260, 191), new Draw2.PointF(251, 192), new Draw2.PointF(250, 188), new Draw2.PointF(237, 187), new Draw2.PointF(242, 175), new Draw2.PointF(240, 169) }, new string[] { \"ms\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(250, 143), new Draw2.PointF(302, 135), new Draw2.PointF(286, 150), new Draw2.PointF(246, 155) }, new string[] { \"tn\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(250, 140), new Draw2.PointF(291, 135), new Draw2.PointF(298, 126), new Draw2.PointF(295, 120), new Draw2.PointF(279, 116), new Draw2.PointF(271, 126), new Draw2.PointF(262, 129) }, new string[] { \"ky\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(260, 96), new Draw2.PointF(275, 95), new Draw2.PointF(278, 118), new Draw2.PointF(259, 129) }, new string[] { \"in\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(240, 91), new Draw2.PointF(257, 91), new Draw2.PointF(258, 97), new Draw2.PointF(258, 127), new Draw2.PointF(252, 136), new Draw2.PointF(235, 110) }, new string[] { \"il\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(239, 56), new Draw2.PointF(251, 48), new Draw2.PointF(258, 53), new Draw2.PointF(269, 53), new Draw2.PointF(276, 56), new Draw2.PointF(280, 61), new Draw2.PointF(281, 77), new Draw2.PointF(287, 75), new Draw2.PointF(288, 83), new Draw2.PointF(284, 91), new Draw2.PointF(264, 94), new Draw2.PointF(268, 85), new Draw2.PointF(265, 73), new Draw2.PointF(269, 67), new Draw2.PointF(272, 60), new Draw2.PointF(272, 57), new Draw2.PointF(260, 60), new Draw2.PointF(256, 64) }, new string[] { \"mi\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(229, 56), new Draw2.PointF(235, 54), new Draw2.PointF(253, 63), new Draw2.PointF(256, 70), new Draw2.PointF(255, 90), new Draw2.PointF(238, 87), new Draw2.PointF(235, 81), new Draw2.PointF(227, 72), new Draw2.PointF(224, 64) }, new string[] { \"wi\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(219, 173), new Draw2.PointF(239, 174), new Draw2.PointF(236, 188), new Draw2.PointF(251, 190), new Draw2.PointF(251, 194), new Draw2.PointF(251, 200), new Draw2.PointF(246, 203), new Draw2.PointF(235, 199), new Draw2.PointF(232, 201), new Draw2.PointF(223, 199), new Draw2.PointF(223, 189) }, new string[] { \"la\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(216, 145), new Draw2.PointF(244, 143), new Draw2.PointF(245, 149), new Draw2.PointF(238, 172), new Draw2.PointF(219, 168) }, new string[] { \"ar\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(208, 110), new Draw2.PointF(233, 108), new Draw2.PointF(250, 136), new Draw2.PointF(247, 145), new Draw2.PointF(243, 141), new Draw2.PointF(215, 144), new Draw2.PointF(216, 121) }, new string[] { \"mo\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(202, 84), new Draw2.PointF(236, 84), new Draw2.PointF(237, 91), new Draw2.PointF(240, 95), new Draw2.PointF(235, 107), new Draw2.PointF(209, 108) }, new string[] { \"ia\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(200, 37), new Draw2.PointF(210, 35), new Draw2.PointF(241, 43), new Draw2.PointF(227, 56), new Draw2.PointF(225, 64), new Draw2.PointF(224, 72), new Draw2.PointF(234, 82), new Draw2.PointF(203, 83) }, new string[] { \"mn\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(159, 142), new Draw2.PointF(177, 144), new Draw2.PointF(175, 160), new Draw2.PointF(190, 166), new Draw2.PointF(217, 170), new Draw2.PointF(222, 199), new Draw2.PointF(195, 216), new Draw2.PointF(194, 233), new Draw2.PointF(179, 227), new Draw2.PointF(166, 202), new Draw2.PointF(156, 199), new Draw2.PointF(150, 206), new Draw2.PointF(140, 199), new Draw2.PointF(139, 192), new Draw2.PointF(128, 178), new Draw2.PointF(153, 181) }, new string[] { \"tx\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(157, 138), new Draw2.PointF(213, 139), new Draw2.PointF(215, 169), new Draw2.PointF(206, 165), new Draw2.PointF(186, 163), new Draw2.PointF(176, 159), new Draw2.PointF(176, 143), new Draw2.PointF(155, 142) }, new string[] { \"ok\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(166, 112), new Draw2.PointF(209, 112), new Draw2.PointF(214, 122), new Draw2.PointF(214, 138), new Draw2.PointF(162, 137) }, new string[] { \"ks\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(155, 86), new Draw2.PointF(202, 90), new Draw2.PointF(209, 113), new Draw2.PointF(165, 112), new Draw2.PointF(165, 103), new Draw2.PointF(151, 102) }, new string[] { \"ne\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(156, 61), new Draw2.PointF(200, 62), new Draw2.PointF(202, 90), new Draw2.PointF(188, 88), new Draw2.PointF(154, 85) }, new string[] { \"sd\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(159, 34), new Draw2.PointF(197, 36), new Draw2.PointF(200, 62), new Draw2.PointF(158, 60) }, new string[] { \"nd\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(121, 100), new Draw2.PointF(165, 103), new Draw2.PointF(163, 137), new Draw2.PointF(116, 134) }, new string[] { \"co\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(117, 134), new Draw2.PointF(157, 137), new Draw2.PointF(153, 180), new Draw2.PointF(128, 177), new Draw2.PointF(125, 180), new Draw2.PointF(114, 177), new Draw2.PointF(113, 181), new Draw2.PointF(111, 181) }, new string[] { \"nm\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(83, 128), new Draw2.PointF(116, 134), new Draw2.PointF(110, 181), new Draw2.PointF(70, 163) }, new string[] { \"az\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(92, 86), new Draw2.PointF(109, 88), new Draw2.PointF(107, 97), new Draw2.PointF(121, 100), new Draw2.PointF(115, 134), new Draw2.PointF(84, 127) }, new string[] { \"ut\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(113, 63), new Draw2.PointF(155, 69), new Draw2.PointF(151, 102), new Draw2.PointF(108, 97) }, new string[] { \"wy\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(91, 24), new Draw2.PointF(159, 35), new Draw2.PointF(155, 68), new Draw2.PointF(114, 63), new Draw2.PointF(112, 65), new Draw2.PointF(102, 66) }, new string[] { \"mt\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(53, 77), new Draw2.PointF(91, 86), new Draw2.PointF(81, 133), new Draw2.PointF(75, 132), new Draw2.PointF(73, 141), new Draw2.PointF(48, 101) }, new string[] { \"nv\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(86, 23), new Draw2.PointF(90, 23), new Draw2.PointF(89, 34), new Draw2.PointF(95, 46), new Draw2.PointF(93, 55), new Draw2.PointF(97, 55), new Draw2.PointF(101, 66), new Draw2.PointF(112, 65), new Draw2.PointF(108, 88), new Draw2.PointF(73, 81) }, new string[] { \"id\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(29, 69), new Draw2.PointF(53, 76), new Draw2.PointF(47, 101), new Draw2.PointF(75, 144), new Draw2.PointF(76, 149), new Draw2.PointF(69, 162), new Draw2.PointF(51, 159), new Draw2.PointF(48, 147), new Draw2.PointF(42, 143), new Draw2.PointF(32, 136), new Draw2.PointF(32, 131), new Draw2.PointF(29, 117), new Draw2.PointF(28, 108), new Draw2.PointF(33, 105), new Draw2.PointF(27, 103), new Draw2.PointF(22, 91), new Draw2.PointF(22, 81) }, new string[] { \"ca\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(39, 36), new Draw2.PointF(27, 69), new Draw2.PointF(72, 80), new Draw2.PointF(76, 62), new Draw2.PointF(73, 62), new Draw2.PointF(81, 52), new Draw2.PointF(79, 47), new Draw2.PointF(48, 44) }, new string[] { \"or\" });\n            AddPolygon(new Draw2.PointF[] { new Draw2.PointF(53, 14), new Draw2.PointF(54, 24), new Draw2.PointF(49, 29), new Draw2.PointF(46, 27), new Draw2.PointF(48, 24), new Draw2.PointF(50, 21), new Draw2.PointF(43, 16), new Draw2.PointF(40, 34), new Draw2.PointF(45, 37), new Draw2.PointF(47, 43), new Draw2.PointF(79, 46), new Draw2.PointF(85, 22), new Draw2.PointF(53,14) }, new string[] { \"wa\" });\n\t\t    AddMapObject(new MapText(\"Map data failed to load.\", new Draw2.PointF(0,0)));\n        }\n\n        internal void AddMapObject(MapObject mo)\n        {\n            _MapObjects.Add(mo);\n            _MaxX = Math.Max(_MaxX, mo.MaxX);\n            _MaxY = Math.Max(_MaxY, mo.MaxY);\n        }\n\n        internal void AddPolygon(Draw2.PointF[] polygon, string[] entries)\n        {\n            AddPolygon(polygon, entries, Draw2.Color.Empty);\n        }\n\n        internal void AddPolygon(Draw2.PointF[] polygon, string[] entries, Draw2.Color fill)\n        {\n            MapPolygon mp = new MapPolygon(polygon);\n            mp.Fill = fill;\n\n            AddMapObject(mp);\n\n            if (entries == null)\n                return;\n\n            // add the MapPolygon to the entries\n            foreach (string key in entries)\n            {\n                List<MapPolygon> pl;\n                if (!_DataPoints.TryGetValue(key, out pl))\n                {\n                    pl = new List<MapPolygon>();\n                    _DataPoints.Add(key, pl);\n                }\n                pl.Add(mp);\n            }\n        }\n\n\n        internal List<MapPolygon> GetPolygon(string key)\n        {\n            List<MapPolygon> mp = null;\n            if (_DataPoints.TryGetValue(key, out mp))\n                return mp;\n            return null;\n        }\n\n        internal float GetScale(float width, float height)\n        {\n            return Math.Min(width / _MaxX , height / _MaxY);\n        }\n\n        internal float MaxX\n        {\n            get { return _MaxX; }\n        }\n\n        internal float MaxY\n        {\n            get { return _MaxY; }\n        }\n\n        internal List<MapObject> MapObjects\n        {\n            get { return _MapObjects; }\n        }\n    }\n\n    internal abstract class MapObject\n    {\n        internal abstract float MaxX { get;}\n        internal abstract float MaxY { get;}\n        internal abstract void Draw(Draw2.Graphics g, float scale, float offX, float offY);\n    }\n\n    internal class MapLines : MapObject\n    {\n        Draw2.PointF[] _Lines = null;\n        float _MaxX=0;\n        float _MaxY=0;\n\n        internal MapLines(Draw2.PointF[] lines) : base()\n        {\n            _Lines = lines;\n            foreach (Draw2.PointF p in lines)\n            {\n                if (p.X > _MaxX)\n                    _MaxX = p.X;\n                if (p.Y > _MaxY)\n                    _MaxY = p.Y;\n            }\n        }\n\n        internal Draw2.PointF[] Lines\n        {\n            get { return _Lines; }\n        }\n\n        internal override float MaxX\n        {\n            get { return _MaxX; }\n        }\n        internal override float MaxY\n        {\n            get { return _MaxY; }\n        }\n        internal override void Draw(Draw2.Graphics g, float scale, float offX, float offY)\n        {\n            Draw2.PointF[] poly = this.Lines;\n            Draw2.PointF[] drawpoly = new Draw2.PointF[poly.Length];\n            // make points relative to plot area --- need to scale this as well\n            for (int ip = 0; ip < drawpoly.Length; ip++)\n            {\n                drawpoly[ip] = new Draw2.PointF(offX + (poly[ip].X * scale), offY + (poly[ip].Y * scale));\n            }\n            g.DrawPolygon(Draw2.Pens.Black, drawpoly);\n        }\n    }\n\n    internal class MapPolygon : MapObject\n    {\n        Draw2.PointF[] _Polygon = null;\n        float _MaxX=0;\n        float _MaxY=0;\n        Draw2.Color _Fill = Draw2.Color.Empty;\n        internal MapPolygon(Draw2.PointF[] poly) : base()\n        {\n            Draw2.PointF[] fpoly;\n            if (poly[0].X == poly[poly.Length - 1].X &&\n                poly[0].Y == poly[poly.Length - 1].Y)\n                fpoly = poly;\n            else\n            {   // close the polygon;\n                fpoly = new Draw2.PointF[poly.Length + 1];\n                for (int pi = 0; pi < poly.Length; pi++)\n                    fpoly[pi] = poly[pi];\n                fpoly[poly.Length] = fpoly[0];\n            }\n            _Polygon = fpoly;\n            foreach (Draw2.PointF p in _Polygon)\n            {\n                if (p.X > _MaxX)\n                    _MaxX = p.X;\n                if (p.Y > _MaxY)\n                    _MaxY = p.Y;\n            }\n\n        }\n        internal Draw2.Color Fill\n        {\n            get { return _Fill; }\n            set { _Fill = value; }\n        }\n        internal Draw2.PointF[] Polygon\n        {\n            get { return _Polygon; }\n        }\n        internal override float MaxX\n        {\n            get { return _MaxX; }\n        }\n        internal override float MaxY\n        {\n            get { return _MaxY; }\n        }\n        internal override void Draw(Draw2.Graphics g, float scale, float offX, float offY)\n        {\n            Draw2.PointF[] poly = this.Polygon;\n            Draw2.PointF[] drawpoly = new Draw2.PointF[poly.Length];\n            // make points relative to plotarea --- need to scale this as well\n            for (int ip = 0; ip < drawpoly.Length; ip++)\n            {\n                drawpoly[ip] = new Draw2.PointF(offX + (poly[ip].X * scale), offY + (poly[ip].Y * scale));\n            }\n            \n            g.DrawPolygon(Draw2.Pens.Black, drawpoly);\n            if (!Fill.IsEmpty)\n            {\n                Draw2.Brush brush = new Draw2.SolidBrush(Fill);\n                g.FillPolygon(brush, drawpoly);\n                brush.Dispose();\n            }\n        }\n    }\n\n    internal class MapText : MapObject\n    {\n        string _Text;              // text value\n        Draw2.PointF _Location;           // location of text\n        public string FontFamily = \"Arial\";\n        public float FontSize = 8;\n        public bool bBold = false;\n        public bool bItalic = false;\n        public bool bUnderline = false;\n        public bool bLineThrough = false;\n\n        internal MapText(string val, Draw2.PointF xy) : base()\n        {\n            _Text = val;\n            _Location = xy;\n        }\n\n        internal string Text\n        {\n            get { return _Text; }\n        }\n\n        internal Draw2.PointF Location\n        {\n            get { return _Location; }\n        }\n\n        internal override float MaxX\n        {\n            get { return _Location.X; }\n        }\n        internal override float MaxY\n        {\n            get { return _Location.Y; }\n        }\n        internal Draw2.Font GetFont(float scale)\n        {\n            Draw2.FontStyle fs = 0;\n\n            if (bItalic)\n                fs |= Draw2.FontStyle.Italic;\n            if (bBold)\n                fs |= Draw2.FontStyle.Bold;\n            if (bUnderline)\n                fs |= Draw2.FontStyle.Underline;\n            if (bLineThrough)\n                fs |= Draw2.FontStyle.Strikeout;\n            float size = (float)Math.Max(FontSize * scale, .25);\n\n            Draw2.Font font;\n            try     // when fontfamily is bad then sometimes there is an exception \n            {\n                font = new Draw2.Font(FontFamily, size, fs);\n            }\n            catch\n            {\n                font = new Draw2.Font(\"Arial\", size, fs);\n            }\n            return font;\n        }\n\n        internal override void Draw(Draw2.Graphics g, float scale, float offX, float offY)\n        {\n            Draw2.Font f = this.GetFont(scale);\n            g.DrawString(this.Text, f, Draw2.Brushes.Black, new Draw2.PointF(offX + (this.Location.X * scale), offY + (this.Location.Y * scale)));\n            f.Dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ChartPalette.cs",
    "content": "\nusing System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// ChartPalette enum handling.\n\t///</summary>\n\tinternal enum ChartPaletteEnum\n\t{\n\t\tDefault,\n\t\tEarthTones,\n\t\tExcel,\n\t\tGrayScale,\n\t\tLight,\n\t\tPastel,\n\t\tSemiTransparent,// 20022008 AJM GJL\n        Patterned, //GJL\n        PatternedBlack,// 20022008 AJM GJL\n        Custom\n\t}\n\n\tinternal class ChartPalette\n\t{\n\t\tstatic internal ChartPaletteEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tChartPaletteEnum p;\n\n\t\t\tswitch (s)\n\t\t\t{\t\t\n\t\t\t\tcase \"Default\":\n\t\t\t\t\tp = ChartPaletteEnum.Default;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"EarthTones\":\n\t\t\t\t\tp = ChartPaletteEnum.EarthTones;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Excel\":\n\t\t\t\t\tp = ChartPaletteEnum.Excel;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"GrayScale\":\n\t\t\t\t\tp = ChartPaletteEnum.GrayScale;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Light\":\n\t\t\t\t\tp = ChartPaletteEnum.Light;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Pastel\":\n\t\t\t\t\tp = ChartPaletteEnum.Pastel;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"SemiTransparent\":\n\t\t\t\t\tp = ChartPaletteEnum.SemiTransparent;\n\t\t\t\t\tbreak;\n                case \"Patterned\": //GJL\n                    p = ChartPaletteEnum.Patterned;\n                    break;\n                case \"PatternedBlack\": //GJL\n                    p = ChartPaletteEnum.PatternedBlack;\n                    break;\n                case \"Custom\":\n                    p = ChartPaletteEnum.Custom;\n                    break;\n\t\t\t\tdefault:\t\t\n\t\t\t\t\trl.LogError(4, \"Unknown ChartPalette '\" + s + \"'.  Default assumed.\");\n\t\t\t\t\tp = ChartPaletteEnum.Default;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn p;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ChartPie.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Runtime.InteropServices;\nusing System.Threading.Tasks;\n\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Pie chart definition and processing.\n\t///</summary>\n\tinternal class ChartPie: ChartBase\n\t{\n\n        internal ChartPie(Report r, Row row, Chart c, MatrixCellEntry[,] m, Expression showTooltips, Expression showTooltipsX,Expression _ToolTipYFormat, Expression _ToolTipXFormat)\n            : base(r, row, c, m, showTooltips, showTooltipsX, _ToolTipYFormat, _ToolTipXFormat)\n\t\t{\n\t\t}\n\n\t\toverride internal async Task Draw(Report rpt)\n\t\t{\n\t\t\tCreateSizedBitmap();\n\n#if !DRAWINGCOMPAT\n\t\t\tif (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))\n\t\t\t{\n\t            using (Draw2.Graphics g1 = Draw2.Graphics.FromImage(_bm))\n\t            {\n\t                _aStream = new System.IO.MemoryStream();\n\t                IntPtr HDC = g1.GetHdc();\n\t                _mf = new Draw2.Imaging.Metafile(_aStream, HDC, new Draw2.RectangleF(0, 0, _bm.Width, _bm.Height), Draw2.Imaging.MetafileFrameUnit.Pixel);\n\t                g1.ReleaseHdc(HDC);\n\t            }\n\t\t\t}\n\n            using (Draw2.Graphics g = Draw2.Graphics.FromImage(_mf != null ? _mf : _bm))\n#else\n            using (Draw2.Graphics g = Draw2.Graphics.FromImage(_bm))\n#endif\n            {\n                // 06122007AJM Used to Force Higher Quality\n                g.InterpolationMode = Draw2.Drawing2D.InterpolationMode.HighQualityBicubic;\n                g.SmoothingMode = Draw2.Drawing2D.SmoothingMode.HighQuality;\n                g.PixelOffsetMode = Draw2.Drawing2D.PixelOffsetMode.None;\n                g.CompositingQuality = Draw2.Drawing2D.CompositingQuality.HighQuality;\n\t\t\t\n\t\t\t\t// Adjust the top margin to depend on the title height\n\t\t\t\tDraw2.Size titleSize = await DrawTitleMeasure(rpt, g, ChartDefn.Title);\n\t\t\t\tLayout.TopMargin = titleSize.Height;\n\n                await DrawChartStyle(rpt, g);\n\n                // Draw title; routine determines if necessary\n                await DrawTitle(rpt, g, ChartDefn.Title, new Draw2.Rectangle(0, 0, _bm.Width, Layout.TopMargin));\n\n\t\t\t\t// Draw legend\n\t\t\t\tDraw2.Rectangle lRect = await DrawLegend(rpt, g, false, true);\n\n\t\t\t\t// Adjust the bottom margin to depend on the Category Axis\n\t\t\t\tDraw2.Size caSize = await CategoryAxisSize(rpt, g);\n\t\t\t\tLayout.BottomMargin = caSize.Height;\n\n\t\t\t\t// 20022008 AJM GJL - Added required info\n\t\t\t\tAdjustMargins(lRect,rpt,g);     // Adjust margins based on legend.\n\n                // Draw Plot area\n                await DrawPlotAreaStyle(rpt, g, lRect);\n\n\t\t\t\t// Draw Category Axis\n\t\t\t\tif (caSize.Height > 0)\n                    await DrawCategoryAxis(rpt, g,  \n\t\t\t\t\t\tnew Draw2.Rectangle(Layout.LeftMargin, _bm.Height-Layout.BottomMargin, _bm.Width - Layout.LeftMargin - Layout.RightMargin, caSize.Height));\n\n\t\t\t\tif (ChartDefn.Type == ChartTypeEnum.Doughnut)\n                    await DrawPlotAreaDoughnut(rpt, g);\n\t\t\t\telse\n                    await DrawPlotAreaPie(rpt, g);\n\n                await DrawLegend(rpt, g, false, false);\n\t\t\t}\n\t\t}\n\n\t\tasync Task DrawPlotAreaDoughnut(Report rpt, Draw2.Graphics g)\n\t\t{\n\t\t\t// Draw Plot area data\n\t\t\tint widthPie = Layout.PlotArea.Width;\n\t\t\tint maxHeight = Layout.PlotArea.Height;\t\n\t\t\tint maxPieSize = Math.Min(widthPie, maxHeight);\n\t\t\tint doughWidth = maxPieSize / 4 / CategoryCount;\n\t\t\tif (doughWidth < 2)\n\t\t\t\tdoughWidth = 2;\t\t\t// enforce minimum width\n\n\t\t\tfloat startAngle;\n\t\t\tfloat endAngle;\n\t\t\tint pieLocX;\n\t\t\tint pieLocY;\n\t\t\tint pieSize;\n\n\t\t\t// Go and draw the pies\n\t\t\tint left = Layout.PlotArea.Left + (maxPieSize == widthPie? 0: (widthPie - maxPieSize) / 2);\n\t\t\tint top =   Layout.PlotArea.Top + (maxPieSize == maxHeight? 0: (maxHeight - maxPieSize) / 2);\n\t\t\tfor (int iRow=1; iRow <= CategoryCount; iRow++)\n\t\t\t{\n\t\t\t\tpieLocX= left + ((iRow-1) * doughWidth);\n\t\t\t\tpieLocY= top + ((iRow-1) * doughWidth);\n\n\t\t\t\tdouble total=0;\t\t// sum up for this category\n\t\t\t\tfor (int iCol=1; iCol <= SeriesCount; iCol++)\n\t\t\t\t{\n\t\t\t\t\ttotal += await this.GetDataValue(rpt, iRow, iCol);\n\t\t\t\t}\n\n\t\t\t\t// Pie size decreases as we go in\n\t\t\t\tstartAngle=0.0f;\n\t\t\t\tpieSize = maxPieSize - ((iRow - 1) * doughWidth * 2);\n\t\t\t\tfor (int iCol=1; iCol <= SeriesCount; iCol++)\n\t\t\t\t{\n\t\t\t\t\tdouble v = await this.GetDataValue(rpt, iRow, iCol);\n\t\t\t\t\tendAngle = (float) (startAngle + (v / total * 360));\n\n                    await DrawPie(g, rpt, await GetSeriesBrush(rpt, iRow, iCol), \n\t\t\t\t\t\tnew Draw2.Rectangle(pieLocX, pieLocY, pieSize, pieSize), iRow, iCol, startAngle, endAngle);\n\n\t\t\t\t\tstartAngle = endAngle;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Now draw the center hole with the plot area style\n\t\t\tif (ChartDefn.PlotArea == null || ChartDefn.PlotArea.Style == null)\n\t\t\t\treturn;\n\t\t\tpieLocX= left + (CategoryCount * doughWidth);\n\t\t\tpieLocY= top + (CategoryCount * doughWidth);\n\t\t\tpieSize = maxPieSize - (CategoryCount * doughWidth * 2);\n\t\t\tDraw2.Rectangle rect = new Draw2.Rectangle(pieLocX, pieLocY, pieSize, pieSize);\n\t\t\tStyle s = ChartDefn.PlotArea.Style;\n\n\t\t\tRows cData = ChartDefn.ChartMatrix.GetMyData(rpt);\n\t\t\tRow r = cData.Data[0];\n            await s.DrawBackgroundCircle(rpt, g, r, rect);\n\t\t}\n\n\t\tasync Task DrawPlotAreaPie(Report rpt, Draw2.Graphics g)\n\t\t{\n\t\t\tint piesNeeded = CategoryCount; \n\t\t\tint gapsNeeded = CategoryCount + 1;\n\t\t\tint gapSize=13;\n\n\t\t\t// Draw Plot area data\n\t\t\tint widthPie = (int) ((Layout.PlotArea.Width - (gapsNeeded*gapSize)) / piesNeeded);\n\t\t\tint maxHeight = (int) (Layout.PlotArea.Height);\t\n\t\t\tint maxPieSize = Math.Min(widthPie, maxHeight);\n\t\t\tint pieLocY = Layout.PlotArea.Top + ((maxHeight - maxPieSize) / 2);\n\n\t\t\tfloat startAngle;\n\t\t\tfloat endAngle;\n\n\t\t\t// calculate the size of the largest category\n\t\t\t//   all pie sizes will be relative to that maximum\n\t\t\tdouble maxCategory=0;\n\t\t\tfor (int iRow=1; iRow <= CategoryCount; iRow++)\n\t\t\t{\n\t\t\t\tdouble total=0;\n\t\t\t\tfor (int iCol=1; iCol <= SeriesCount; iCol++)\n\t\t\t\t{\n\t\t\t\t\ttotal += await this.GetDataValue(rpt, iRow, iCol);\n\t\t\t\t}\n\t\t\t\tif (total > maxCategory)\n\t\t\t\t\tmaxCategory = total;\n\t\t\t}\n\n\t\t\t// Go and draw the pies\n\t\t\tfor (int iRow=1; iRow <= CategoryCount; iRow++)\n\t\t\t{\n\t\t\t\tint pieLocX=(int) (Layout.PlotArea.Left + ((iRow-1) * ((double) (Layout.PlotArea.Width) / CategoryCount)));\n\n\t\t\t\tpieLocX += gapSize;\t// space before series\n\t\t\t\tdouble total=0;\n\t\t\t\tfor (int iCol=1; iCol <= SeriesCount; iCol++)\n\t\t\t\t{\n\t\t\t\t\ttotal += await this.GetDataValue(rpt, iRow, iCol);\n\t\t\t\t}\n\n\t\t\t\t// Pie size is a ratio of the area of the pies (not the diameter)\n\t\t\t\tstartAngle=0.0f;\n\t\t\t\tint pieSize = (int) (2 * Math.Sqrt(Math.PI * ((maxPieSize/2) * (maxPieSize/2) * total/maxCategory) / Math.PI));\n\t\t\t\tfor (int iCol=1; iCol <= SeriesCount; iCol++)\n\t\t\t\t{\n\t\t\t\t\tdouble v = await this.GetDataValue(rpt, iRow, iCol);\n\t\t\t\t\tendAngle = (float) (startAngle + (v / total * 360));\n\n                    await DrawPie(g, rpt, await GetSeriesBrush(rpt, iRow, iCol), \n\t\t\t\t\t\tnew Draw2.Rectangle(pieLocX, pieLocY, pieSize, pieSize), iRow, iCol, startAngle, endAngle);\n\n\t\t\t\t\tstartAngle = endAngle;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Calculate the size of the category axis\n\t\tprotected async Task<Draw2.Size> CategoryAxisSize(Report rpt, Draw2.Graphics g)\n\t\t{\n\t\t\tDraw2.Size size=Draw2.Size.Empty;\n\t\t\tif (this.ChartDefn.CategoryAxis == null || \n\t\t\t\tthis.ChartDefn.Type == ChartTypeEnum.Doughnut)\t// doughnut doesn't get this\n\t\t\t\treturn size;\n\t\t\tAxis a = this.ChartDefn.CategoryAxis.Axis;\n\t\t\tif (a == null)\n\t\t\t\treturn size;\n\t\t\tStyle s = a.Style;\n\n\t\t\t// Measure the title\n\t\t\tsize = await DrawTitleMeasure(rpt, g, a.Title);\n\n\t\t\tif (!a.Visible)\t\t// don't need to calculate the height\n\t\t\t\treturn size;\n\n\t\t\t// Calculate the tallest category name\n\t\t\tTypeCode tc;\n\t\t\tint maxHeight=0;\n\t\t\tfor (int iRow=1; iRow <= CategoryCount; iRow++)\n\t\t\t{\n\t\t\t\t(object v, tc) = await this.GetCategoryValue(rpt, iRow);\n\t\t\t\tDraw2.Size tSize;\n\t\t\t\tif (s == null)\n\t\t\t\t\ttSize = await Style.MeasureStringDefaults(rpt, g, v, tc, null, int.MaxValue);\n\n\t\t\t\telse\n\t\t\t\t\ttSize = await s.MeasureString(rpt, g, v, tc, null, int.MaxValue);\n\n\t\t\t\tif (tSize.Height > maxHeight)\n\t\t\t\t\tmaxHeight = tSize.Height;\n\t\t\t}\n\n\t\t\t// Add on the tallest category name\n\t\t\tsize.Height += maxHeight;\n\t\t\treturn size;\n\t\t}\n\n\t\t// DrawCategoryAxis \n\t\tprotected async Task DrawCategoryAxis(Report rpt, Draw2.Graphics g, Draw2.Rectangle rect)\n\t\t{\n\t\t\tif (this.ChartDefn.CategoryAxis == null)\n\t\t\t\treturn;\n\t\t\tAxis a = this.ChartDefn.CategoryAxis.Axis;\n\t\t\tif (a == null)\n\t\t\t\treturn;\n\t\t\tStyle s = a.Style;\n\n\t\t\tDraw2.Size tSize = await DrawTitleMeasure(rpt, g, a.Title);\n            await DrawTitle(rpt, g, a.Title, new Draw2.Rectangle(rect.Left, rect.Bottom-tSize.Height, rect.Width, tSize.Height));\n\n\t\t\tint drawWidth = rect.Width / CategoryCount;\n\t\t\tTypeCode tc;\n\t\t\tfor (int iRow=1; iRow <= CategoryCount; iRow++)\n\t\t\t{\n\t\t\t\t(object v, tc) = await this.GetCategoryValue(rpt, iRow);\n\n\t\t\t\tint drawLoc=(int) (rect.Left + ((iRow-1) * ((double) rect.Width / CategoryCount)));\n\n\t\t\t\t// Draw the category text\n\t\t\t\tif (a.Visible)\n\t\t\t\t{\n\t\t\t\t\tDraw2.Rectangle drawRect = new Draw2.Rectangle(drawLoc, rect.Top, drawWidth, rect.Height-tSize.Height);\n\t\t\t\t\tif (s == null)\n\t\t\t\t\t\tStyle.DrawStringDefaults(g, v, drawRect);\n\t\t\t\t\telse\n                        await s.DrawString(rpt, g, v, tc, null, drawRect);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tasync Task DrawPie(Draw2.Graphics g, Report rpt, Draw2.Brush brush, Draw2.Rectangle rect, int iRow, int iCol, float startAngle, float endAngle)\n\t\t{\n            if ((ChartSubTypeEnum)Enum.Parse(typeof(ChartSubTypeEnum), await _ChartDefn.Subtype.EvaluateString(rpt, _row)) == ChartSubTypeEnum.Exploded)\n\t\t\t{\n\t\t\t\t// Need to adjust the rectangle \n\t\t\t\tint side = (int) (rect.Width * .75);\t// side needs to be smaller to account for exploded pies\n\t\t\t\tint offset = (int) (side * .1);\t\t\t//  we add a little to the left and top\n\t\t\t\tint adjX, adjY;\n\t\t\t\tadjX = adjY = (int) (side * .1);\n\n\t\t\t\tfloat midAngle = startAngle + ((endAngle - startAngle)/2);\n\n\t\t\t\tif (midAngle < 90)\n\t\t\t\t{\n\t\t\t\t}\n\t\t\t\telse if (midAngle < 180)\n\t\t\t\t{\n\t\t\t\t\tadjX = -adjX;\n\t\t\t\t}\n\t\t\t\telse if (midAngle < 270)\n\t\t\t\t{\n\t\t\t\t\tadjX = adjY = -adjX;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tadjY = - adjY;\n\t\t\t\t}\n\t\t\t\trect = new Draw2.Rectangle(rect.Left + adjX + offset, rect.Top + adjY + offset, side, side);\n\t\t\t}\n\n\t\t\tg.FillPie(brush, rect, startAngle, endAngle - startAngle);\n\t\t\tg.DrawPie(Draw2.Pens.Black, rect, startAngle, endAngle - startAngle);\n\n\t\t\treturn;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ChartSeries.cs",
    "content": "\n\t\t\t\t// 20022008 AJM GJL - Added Second Y axis support\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Chart series definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class ChartSeries : ReportLink\n\t{\n        String _Colour;\n        DataPoints _Datapoints;\t// Data points within a series\n\t\tPlotTypeEnum _PlotType;\t\t// Indicates whether the series should be plotted\n\t\t\t\t\t\t\t\t// as a line in a Column chart. If set to auto,\n\t\t\t\t\t\t\t\t// should be plotted per the primary chart type.\n\t\t\t\t\t\t\t\t// Auto (Default) | Line\t\n        String _YAxis;          //Indicates if the series uses the left or right axis. GJL 140208\n        bool _NoMarker;          //Indicates if the series should not show its plot markers. GJL 300508\n        String _LineSize;\n\t\n\t\tinternal ChartSeries(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Datapoints=null;\n\t\t\t_PlotType=PlotTypeEnum.Auto;\n            _YAxis = \"Left\";\n            _NoMarker = false;\n            _LineSize = \"Regular\";\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"datapoints\":\n\t\t\t\t\t\t_Datapoints = new DataPoints(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"plottype\":\n\t\t\t\t\t\t_PlotType = Majorsilence.Reporting.Rdl.PlotType.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n                    case \"yaxis\":\n                    case \"fyi:yaxis\":\n                        _YAxis = xNodeLoop.InnerText;\n                        break;\n                    case \"nomarker\":\n                    case \"fyi:nomarker\":\n                        _NoMarker = Boolean.Parse(xNodeLoop.InnerText);\n                        break;\n                    case \"linesize\":\n                    case \"fyi:linesize\":\n                        _LineSize = xNodeLoop.InnerText;\n                        break;\n                    case \"fyi:color\":\n                    case \"color\":\n                    case \"colour\":\n                        _Colour = xNodeLoop.InnerText;\n                        break;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown ChartSeries element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Datapoints == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"ChartSeries requires the DataPoints element.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Datapoints != null)\n                await _Datapoints.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal DataPoints Datapoints\n\t\t{\n\t\t\tget { return  _Datapoints; }\n\t\t\tset {  _Datapoints = value; }\n\t\t}\n\n\t\tinternal PlotTypeEnum PlotType\n\t\t{\n\t\t\tget { return  _PlotType; }\n\t\t\tset {  _PlotType = value; }\n\t\t}\n\n        internal String Colour\n        {\n            get { return _Colour; }\n            set { _Colour = value; }\n        }\n\n        internal String YAxis\n        {\n            get { return _YAxis; }\n            set { _YAxis = value; }\n        }\n\n        internal bool NoMarker\n        {\n            get { return _NoMarker; }\n            set { _NoMarker = value; }\n        }\n\n        internal string LineSize\n        {\n            get { return _LineSize; }\n            set { _LineSize = value; }\n        }\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ChartSubType.cs",
    "content": "\nusing System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// The full list of supported chart subtypes\n\t///</summary>\n\tinternal enum ChartSubTypeEnum\n\t{\n\t\tPlain, \n\t\tStacked,\n\t\tPercentStacked,\n\t\tSmooth,\n\t\tExploded,\n\t\tLine, \n\t\tSmoothLine,\n\t\tHighLowClose, \n\t\tOpenHighLowClose, \n\t\tCandlestick\n\t}\n\n\tinternal class ChartSubType\n\t{\n\t\tstatic internal ChartSubTypeEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tChartSubTypeEnum st;\n\n\t\t\tswitch (s)\n\t\t\t{\t\t\n\t\t\t\tcase \"Plain\":\n\t\t\t\t\tst = ChartSubTypeEnum.Plain;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Stacked\":\n\t\t\t\t\tst = ChartSubTypeEnum.Stacked;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"PercentStacked\":\n\t\t\t\t\tst = ChartSubTypeEnum.PercentStacked;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Smooth\":\n\t\t\t\t\tst = ChartSubTypeEnum.Smooth;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Exploded\":\n\t\t\t\t\tst = ChartSubTypeEnum.Exploded;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Line\":\n\t\t\t\t\tst = ChartSubTypeEnum.Line;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"SmoothLine\":\n\t\t\t\t\tst = ChartSubTypeEnum.SmoothLine;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"HighLowClose\":\n\t\t\t\t\tst = ChartSubTypeEnum.HighLowClose;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"OpenHighLowClose\":\n\t\t\t\t\tst = ChartSubTypeEnum.OpenHighLowClose;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Candlestick\":\n\t\t\t\t\tst = ChartSubTypeEnum.Candlestick;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\n\t\t\t\t\trl.LogError(4, \"Unknown ChartSubType '\" + s + \"'.  Plain assumed.\");\n\t\t\t\t\tst = ChartSubTypeEnum.Plain;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn st;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ChartType.cs",
    "content": "\nusing System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Chart type and marker definition and processing.\n\t///</summary>\n\tinternal enum ChartTypeEnum\n\t{\n\t\tColumn,\n\t\tBar,\n\t\tLine,\n\t\tPie,\n\t\tScatter,\n\t\tBubble,\n\t\tArea,\n\t\tDoughnut,\n\t\tStock,\n        Map,\n\t\tUnknown\n\t}\n\n\tinternal enum ChartMarkerEnum\t\t\t// used for line point markers\n\t{\t\t\t\t\t\t\t\t\t// the order reflects the usage order as well (see GetSeriesMarkers in ChartBase)\n\t\tCircle=0,\n\t\tSquare=1,\n\t\tTriangle=2,\n\t\tPlus=3,\n\t\tX=4,\n\t\tDiamond=5,\t\t\t\t\t\t// TODO: diamond doesn't draw well in small size\n\t\tCount=6,\t\t\t\t\t\t// must equal the number of shapes\n\t\tNone=Count+1,\t\t\t\t\t// above Count\n\t\tBubble=Count+2,\t\t\t\t\t// above None\n        Line=Count+3                    // For scatter lines GJL\n\t}\n\n\tinternal class ChartType\n\t{\n\t\tstatic internal ChartTypeEnum GetStyle(string s)\n\t\t{\n\t\t\tChartTypeEnum ct;\n\n\t\t\tswitch (s)\n\t\t\t{\t\t\n\t\t\t\tcase \"Column\":\n\t\t\t\t\tct = ChartTypeEnum.Column;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Bar\":\n\t\t\t\t\tct = ChartTypeEnum.Bar;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Line\":\n\t\t\t\t\tct = ChartTypeEnum.Line;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Pie\":\n\t\t\t\t\tct = ChartTypeEnum.Pie;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Scatter\":\n\t\t\t\t\tct = ChartTypeEnum.Scatter;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Bubble\":\n\t\t\t\t\tct = ChartTypeEnum.Bubble;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Area\":\n\t\t\t\t\tct = ChartTypeEnum.Area;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Doughnut\":\n\t\t\t\t\tct = ChartTypeEnum.Doughnut;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Stock\":\n\t\t\t\t\tct = ChartTypeEnum.Stock;\n\t\t\t\t\tbreak;\n                case \"Map\":\n                    ct = ChartTypeEnum.Map;\n                    break;\n\t\t\t\tdefault:\t\t// unknown type\n\t\t\t\t\tct = ChartTypeEnum.Unknown;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn ct;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Classes.cs",
    "content": "\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Contains information about which classes to instantiate during report initialization.\n\t/// These instances can then be used in expressions throughout the report.\n\t///</summary>\n\t[Serializable]\n\tinternal class Classes : ReportLink, IEnumerable\n\t{\n        List<ReportClass> _Items;\t\t\t// list of report class\n\n\t\tinternal Classes(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n            _Items = new List<ReportClass>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (xNodeLoop.Name == \"Class\")\n\t\t\t\t{\n\t\t\t\t\tReportClass rc = new ReportClass(r, this, xNodeLoop);\n\t\t\t\t\t_Items.Add(rc);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For Classes at least one Class is required.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tinternal ReportClass this[string s]\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tforeach (ReportClass rc in _Items)\n\t\t\t\t{\n\t\t\t\t\tif (rc.InstanceName.Nm == s)\n\t\t\t\t\t\treturn rc;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (ReportClass rc in _Items)\n\t\t\t{\n                await rc.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tinternal void Load(Report rpt)\n\t\t{\n\t\t\tforeach (ReportClass rc in _Items)\n\t\t\t{\n\t\t\t\trc.Load(rpt);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<ReportClass> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t\t#region IEnumerable Members\n\n\t\tpublic IEnumerator GetEnumerator()\n\t\t{\n\t\t\treturn _Items.GetEnumerator();\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Code.cs",
    "content": "//This file has been modified based on forum user suggestions.\n\n\n\nusing System;\nusing System.Xml;\nusing System.Reflection;\nusing System.CodeDom;\nusing System.CodeDom.Compiler;\nusing Microsoft.VisualBasic;\nusing System.Text;\nusing System.IO;\nusing System.Threading;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Code represents the Code report element. \n\t///</summary>\n\t[Serializable]\n\tinternal class Code : ReportLink\n\t{\n\t\tstring _Source;\t\t\t// The source code\n\t\tstring _Classname;\t\t// Class name of generated class\n\t\tAssembly _Assembly;\t\t// the compiled assembly\n\t\n\t\tinternal Code(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Source=xNode.InnerText;\n\t\t\t_Assembly = GetAssembly();\n\t\t}\n\t\t\n\t\toverride internal Task FinalPass()\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tprivate Assembly GetAssembly()\n\t\t{\n\t\t\t// Generate the proxy source code\n            List<string> lines = new List<string>();\t\t// hold lines in array in case of error\n\n\t\t\tVBCodeProvider vbcp =  new VBCodeProvider();\n\t\t\tStringBuilder sb = new StringBuilder();\n\t\t\t//  Generate code with the following general form\n\n\t\t\t//Imports System\n            //Imports Microsoft.VisualBasic\n            //Imports System.Convert\n            //Imports System.Math \n            //Namespace Majorsilence.Reporting.vbgen\n\t\t\t//Public Class MyClassn\t   // where n is a uniquely generated integer\n\t\t\t//Sub New()\n\t\t\t//End Sub\n\t\t\t//  ' this is the code in the <Code> tag\n\t\t\t//End Class\n\t\t\t//End Namespace\n\t\t\tstring unique = Interlocked.Increment(ref Parser.Counter).ToString();\n\t\t\tlines.Add(\"Imports System\");\n            lines.Add(\"Imports Microsoft.VisualBasic\");\n            lines.Add(\"Imports System.Convert\");\n            lines.Add(\"Imports System.Math\");\n            lines.Add(\"Imports Majorsilence.Reporting.Rdl\");\n            lines.Add(\"Namespace Majorsilence.Reporting.vbgen\");\n\t\t\t_Classname = \"MyClass\" + unique;\n\t\t\tlines.Add(\"Public Class \" + _Classname);\n            lines.Add(\"Private Shared _report As CodeReport\");\n\t\t\tlines.Add(\"Sub New()\");\n\t\t\tlines.Add(\"End Sub\");\n            lines.Add(\"Sub New(byVal def As Report)\");\n            lines.Add(_Classname + \"._report = New CodeReport(def)\");\n            lines.Add(\"End Sub\");\n            lines.Add(\"Public Shared ReadOnly Property Report As CodeReport\");\n            lines.Add(\"Get\");\n            lines.Add(\"Return \" + _Classname + \"._report\");\n            lines.Add(\"End Get\");\n            lines.Add(\"End Property\");\n\t\t\t// Read and write code as lines\n\t\t\tStringReader tr = new StringReader(_Source);\n\t\t\twhile (tr.Peek() >= 0)\n\t\t\t{\n\t\t\t\tstring line = tr.ReadLine();\n\t\t\t\tlines.Add(line);\n\t\t\t}\n\t\t\ttr.Close();\n\t\t\tlines.Add(\"End Class\");\n\t\t\tlines.Add(\"End Namespace\");\n            foreach (string l in lines)\n            {\n                sb.Append(l);\n                sb.Append(\"\\r\\n\");\n            }\n\n\t\t\tstring vbcode = sb.ToString();\n\n\t\t\t// debug code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n//\t\t\t\t\t\tStreamWriter tsw = File.CreateText(@\"c:\\temp\\vbcode.txt\");\n//\t\t\t\t\t\ttsw.Write(vbcode);\n//\t\t\t\t\t\ttsw.Close();\n\t\t\t// debug code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   \n\n\t\t\t// Create Assembly\n\t\t\tCompilerParameters cp = new CompilerParameters();\n\t\t\tcp.ReferencedAssemblies.Add(\"System.dll\");\n            string re;\n            //AJM GJL 250608 - Try the Bin Directory too, for websites\n            if (RdlEngineConfig.DirectoryLoadedFrom == null) {\n                if (System.IO.File.Exists(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"Majorsilence.Reporting.RdlEngine.dll\"))) {\n                    re = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"Majorsilence.Reporting.RdlEngine.dll\");   // this can fail especially in web scenarios\n                }\n                else\n                {\n                    re = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"Bin\");   // this can work especially in web scenarios\n                    re = Path.Combine(re, \"Majorsilence.Reporting.RdlEngine.dll\");  \n                }\n            }\n            else\n                re = Path.Combine(RdlEngineConfig.DirectoryLoadedFrom, \"Majorsilence.Reporting.RdlEngine.dll\");     // use RdlEngineConfig.xml directory when available\n\n\t\t\tcp.ReferencedAssemblies.Add(re);\n            // also allow access to classes that have been added to report\n            if (this.OwnerReport.CodeModules != null)\n            {\n                foreach(CodeModule cm in this.OwnerReport.CodeModules.Items)\n                {\n                    string modulePath = Path.Combine(Path.GetDirectoryName(re), cm.CdModule); \n                    cp.ReferencedAssemblies.Add(modulePath); \n                }\n            }\n\t\t\tcp.GenerateExecutable = false;\n\t\t\tcp.GenerateInMemory = false;\t\t\t// just loading into memory causes problems when instantiating\n\t\t\tcp.IncludeDebugInformation = false; \n\t\t\tCompilerResults cr = vbcp.CompileAssemblyFromSource(cp, vbcode);\n\t\t\tif(cr.Errors.Count > 0)\n\t\t\t{\n\t\t\t\tStringBuilder err = new StringBuilder(string.Format(\"Code element has {0} error(s).  Line numbers are relative to Code element.\", cr.Errors.Count));\n\t\t\t\tforeach (CompilerError ce in cr.Errors)\n\t\t\t\t{\n\t\t\t\t\tstring l;\n\t\t\t\t\tif (ce.Line >= 1 && ce.Line <= lines.Count)\n\t\t\t\t\t\tl = lines[ce.Line - 1] as string;\n\t\t\t\t\telse\n\t\t\t\t\t\tl = \"Unknown\";\n\t\t\t\t\terr.AppendFormat(\"\\r\\nLine {0} '{1}' : {2} {3}\", ce.Line - 5, l, ce.ErrorNumber, ce.ErrorText);\n\t\t\t\t}\n\t\t\t\tthis.OwnerReport.rl.LogError(4, err.ToString());\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn Assembly.LoadFrom(cr.PathToAssembly);\t// We need an assembly loaded from the file system\n\t\t\t//   or instantiation of object complains\n\t\t}\n\n\t\tinternal Type CodeType()\n\t\t{\n\t\t\tif (_Assembly == null)\n\t\t\t\treturn null;\n\n\t\t\tType t=null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tobject instance = _Assembly.CreateInstance(\"Majorsilence.Reporting.vbgen.\" + this._Classname, false); \n\t\t\t\tt = instance.GetType();\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\tOwnerReport.rl.LogError(4, \n\t\t\t\t\tstring.Format(\"Unable to load instance of Code\\r\\n{0}\", e.Message));\n\t\t\t}\n\t\t\treturn t;\n\t\t}\n\n\t\tinternal object Load(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = GetWC(rpt);\n\t\t\tif (wc.bCreateFailed)\t\t// We only try to create once.\n\t\t\t\treturn wc.Instance;\n\n\t\t\tif (wc.Instance != null)\t// Already loaded\n\t\t\t\treturn wc.Instance;\n\n\t\t\tif (_Assembly == null)\n\t\t\t{\n\t\t\t\twc.bCreateFailed = true;\t// we don't have an assembly\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Load an instance of the object\n\t\t\tstring err=\"\";\n\t\t\ttry\n\t\t\t{\n                object[] args = new object[1];\n                args[0] = rpt;\n\t\t\t\twc.Instance = _Assembly.CreateInstance(\"Majorsilence.Reporting.vbgen.\" + this._Classname, false, BindingFlags.CreateInstance, null, args, null, null); \n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\twc.Instance = null;\n\t\t\t\terr = e.Message;\n\t\t\t}\n\n\t\t\tif (wc.Instance == null)\n\t\t\t{\n\t\t\t\tstring e = String.Format(\"Unable to create instance of local code class.\\r\\n{0}\", err);\n\t\t\t\tif (rpt == null)\n\t\t\t\t\tOwnerReport.rl.LogError(4, e);\n\t\t\t\telse\n\t\t\t\t\trpt.rl.LogError(4, e);\n\t\t\t\twc.bCreateFailed = true;\n\t\t\t}\n\t\t\treturn wc.Instance;\t\t\t\n\t\t}\n\n\t\tinternal string Source\n\t\t{\n\t\t\tget { return  _Source; }\n\t\t}\n\n\t\tinternal object Instance(Report rpt)\n\t\t{\n\t\t\treturn Load(rpt);\t\t\t// load if necessary\n\t\t}\n\n\t\tprivate WorkClass GetWC(Report rpt)\n\t\t{\n\t\t\tif (rpt == null)\n\t\t\t\treturn new WorkClass();\n\n\t\t\tWorkClass wc = rpt.Cache.Get(this, \"wc\") as WorkClass;\n\t\t\tif (wc == null)\n\t\t\t{\n\t\t\t\twc = new WorkClass();\n\t\t\t\trpt.Cache.Add(this, \"wc\", wc);\n\t\t\t}\n\t\t\treturn wc;\n\t\t}\n\n\t\tprivate void RemoveWC(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(this, \"wc\");\n\t\t}\n\n\t\tclass WorkClass\n\t\t{\n\t\t\tinternal object Instance;\n\t\t\tinternal bool bCreateFailed;\n\t\t\tinternal WorkClass()\n\t\t\t{\n\t\t\t\tInstance=null;\t// \n\t\t\t\tbCreateFailed=false;\n\t\t\t}\n\t\t}\n\t}\n\n    // The CodeReport code was donated to the RDL Project by \"solidstore\" of the forum.\n    // The classes defined below are for use by the VB code runtime.\n\n    /// <summary>\n    /// This class is only for use with the VB code generation.  \n    /// </summary>\n    public class CodeReport\n    {\n        private readonly CodeGlobals globals;\n        private readonly CodeParameters parameters;\n        private readonly CodeUser user;\n\n        public CodeReport(Report report)\n        {\n            this.globals = new CodeGlobals(report);\n            this.parameters = new CodeParameters(report);\n            this.user = new CodeUser(report);\n        }\n\n        public CodeGlobals Globals\n        {\n            get\n            {\n                return this.globals;\n            }\n        }\n\n        public CodeParameters Parameters\n        {\n            get\n            {\n                return this.parameters;\n            }\n        }\n\n        public CodeUser User\n        {\n            get\n            {\n                return this.user;\n            }\n        }\n    }\n\n    /// <summary>\n    /// This class is only for use with the VB code generation.  \n    /// </summary>\n    public class CodeParameters\n    {\n        private readonly Report report;\n\n        public CodeParameters(Report report)\n        {\n            this.report = report;\n        }\n\n        public object this[string key]\n        {\n            get\n            {\n                foreach (UserReportParameter p in report.UserReportParameters)\n                {\n                    if (p.Name.Equals(key))\n                    {\n                        return p;\n                    }\n                }\n                return null;\n            }\n        }\n    }\n\n    /// <summary>\n    /// This class is only for use with the VB code generation.  \n    /// </summary>\n    public class CodeUser\n    {\n        private readonly Report report;\n\n        public CodeUser(Report report)\n        {\n            this.report = report;\n        }\n\n        public object this[string key]\n        {\n            get\n            {\n                switch (key.ToLower())\n                {\n                    case \"userid\":\n                        return report.UserID;\n                    case \"language\":\n                        return report.ClientLanguage;\n                }\n                return null;\n            }\n        }\n\n        public string Language\n        {\n            get\n            {\n                return report.ClientLanguage;\n            }\n        }\n\n        public string UserID\n        {\n            get\n            {\n                return report.UserID;\n            }\n        }\n    }\n/// <summary>\n/// This class is only for use with the VB code generation.  \n/// </summary>\n    public class CodeGlobals\n    {\n        private readonly Report report;\n\n        public CodeGlobals(Report report)\n        {\n            this.report = report;\n        }\n\n        public object this[string key]\n        {\n            get\n            {\n                switch (key.ToLower())\n                {\n                    case \"pagenumber\":\n                        return report.PageNumber;\n                    case \"totalpages\":\n                        return report.TotalPages;\n                    case \"executiontime\":\n                        return report.ExecutionTime;\n                    case \"reportfolder\":\n                        return report.Folder;\n                    case \"reportname\":\n                        return report.Name;\n                }\n                return null;\n            }\n        }\n\n        public DateTime ExecutionTime\n        {\n            get\n            {\n                return report.ExecutionTime;\n            }\n        }\n        public int PageNumber\n        {\n            get\n            {\n                return report.PageNumber;\n            }\n        }\n\n        public string ReportFolder\n        {\n            get\n            {\n                return report.Folder;\n            }\n        }\n\n        public string ReportName\n        {\n            get\n            {\n                return report.Name;\n            }\n        }\n\n        public int TotalPages\n        {\n            get\n            {\n                return report.TotalPages;\n            }\n        }\n    } \n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/CodeModule.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Reflection;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// CodeModule definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class CodeModule : ReportLink\n\t{\n\t\tstring _CodeModule;\t// Name of the code module to load\n\t\t[NonSerialized] Assembly _LoadedAssembly=null;\t// \n\t\t[NonSerialized] bool bLoadFailed=false;\n\t\n\t\tinternal CodeModule(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_CodeModule=xNode.InnerText;\n            if (!_CodeModule.Contains(\",\"))\n            { // if not a full assembly reference \n                if ((!_CodeModule.ToLower().EndsWith(\".dll\")) && ((!_CodeModule.ToLower().EndsWith(\".exe\"))))\n                { // check .dll ending \n                _CodeModule += \".dll\"; \n                }\n            }\n\t\t}\n\n\t\tinternal Assembly LoadedAssembly()\n\t\t{\n\t\t\tif (bLoadFailed)\t\t// We only try to load once.\n\t\t\t\treturn null;\n\n\t\t\tif (_LoadedAssembly == null)\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\t_LoadedAssembly = XmlUtil.AssemblyLoadFrom(_CodeModule);\n\t\t\t\t}\n\t\t\t\tcatch (Exception e)\n\t\t\t\t{\n\t\t\t\t\tOwnerReport.rl.LogError(4, String.Format(\"CodeModule {0} failed to load.  {1}\",\n\t\t\t\t\t\t_CodeModule, e.Message));\n\t\t\t\t\tbLoadFailed = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn _LoadedAssembly;\n\t\t}\n\n\t\toverride internal Task FinalPass()\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tinternal string CdModule\n\t\t{\n\t\t\tget { return  _CodeModule; }\n\t\t\tset {  _CodeModule = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/CodeModules.cs",
    "content": "\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Xml;\nusing System.Reflection;\nusing System.Threading.Tasks;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// CodeModules definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class CodeModules : ReportLink, IEnumerable\n\t{\n        List<CodeModule> _Items;\t\t\t// list of code module\n\n\t\tinternal CodeModules(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n            _Items = new List<CodeModule>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (xNodeLoop.Name == \"CodeModule\")\n\t\t\t\t{\n\t\t\t\t\tCodeModule cm = new CodeModule(r, this, xNodeLoop);\n\t\t\t\t\t_Items.Add(cm);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown CodeModules element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For CodeModules at least one CodeModule is required.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t/// <summary>\n\t\t/// Return the Type given a class name.  Searches the CodeModules that are specified\n\t\t/// in the report.\n\t\t/// </summary>\n\t\tinternal Type this[string s]\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tType tp=null;\n                if (s == string.Empty)\n                    return null;\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\t// loop thru all the codemodules looking for the assembly\n\t\t\t\t\t//  that contains this type\n\t\t\t\t\tforeach (CodeModule cm in _Items)\n\t\t\t\t\t{\n\t\t\t\t\t\tAssembly a = cm.LoadedAssembly();\n\t\t\t\t\t\tif (a != null)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttp = a.GetType(s,false,true);\n\t\t\t\t\t\t\tif (tp != null)\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch(Exception ex) \n\t\t\t\t{\n\t\t\t\t\tOwnerReport.rl.LogError(4, string.Format(\"Exception finding type. {0}\", ex.Message));\n\t\t\t\t}\n\t\t\t\treturn tp;\n\t\t\t}\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (CodeModule cm in _Items)\n\t\t\t{\n                await cm.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tinternal void LoadModules()\n\t\t{\n\t\t\tforeach (CodeModule cm in _Items)\n\t\t\t{\n\t\t\t\tcm.LoadedAssembly();\n\t\t\t}\n\t\t}\n\n        internal List<CodeModule> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t\t\n\t\t#region IEnumerable Members\n\n\t\tpublic IEnumerator GetEnumerator()\n\t\t{\n\t\t\treturn _Items.GetEnumerator();\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ColumnGrouping.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// ColumnGrouping definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class ColumnGrouping : ReportLink\n\t{\n\t\tRSize _Height;\t\t// Height of the column header\n\t\tDynamicColumns _DynamicColumns;\t// Dynamic column headings for this grouping\n\t\tStaticColumns _StaticColumns;\t\t// Static column headings for this grouping\t\t\n\t\n\t\tinternal ColumnGrouping(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Height=null;\n\t\t\t_DynamicColumns=null;\n\t\t\t_StaticColumns=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Height\":\n\t\t\t\t\t\t_Height = new RSize(r, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"DynamicColumns\":\n\t\t\t\t\t\t_DynamicColumns = new DynamicColumns(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"StaticColumns\":\n\t\t\t\t\t\t_StaticColumns = new StaticColumns(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Height == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"ColumnGrouping requires the Height element to be specified.\");\n\n\t\t\tif ((_DynamicColumns != null && _StaticColumns != null) ||\n\t\t\t\t(_DynamicColumns == null && _StaticColumns == null))\n\t\t\t\tOwnerReport.rl.LogError(8, \"ColumnGrouping requires either the DynamicColumns element or StaticColumns element but not both.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_DynamicColumns != null)\n                await _DynamicColumns.FinalPass();\n\t\t\tif (_StaticColumns != null)\n                await _StaticColumns.FinalPass();\n\t\t\treturn ;\n\t\t}\n\n\n\t\tinternal RSize Height\n\t\t{\n\t\t\tget { return  _Height; }\n\t\t\tset {  _Height = value; }\n\t\t}\n\n\t\tinternal DynamicColumns DynamicColumns\n\t\t{\n\t\t\tget { return  _DynamicColumns; }\n\t\t\tset {  _DynamicColumns = value; }\n\t\t}\n\n\t\tinternal StaticColumns StaticColumns\n\t\t{\n\t\t\tget { return  _StaticColumns; }\n\t\t\tset {  _StaticColumns = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ColumnGroupings.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// ColumnGroupings definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class ColumnGroupings : ReportLink\n\t{\n        List<ColumnGrouping> _Items;\t\t\t// list of report items\n\t\tint _StaticCount;\n\n\t\tinternal ColumnGroupings(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tColumnGrouping g;\n            _Items = new List<ColumnGrouping>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"ColumnGrouping\":\n\t\t\t\t\t\tg = new ColumnGrouping(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tg=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown ColumnGroupings element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (g != null)\n\t\t\t\t\t_Items.Add(g);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For ColumnGroups at least one ColumnGrouping is required.\");\n\t\t\telse\n\t\t\t{\n                _Items.TrimExcess();\n\t\t\t\t_StaticCount = GetStaticCount();\n\t\t\t}\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (ColumnGrouping g in _Items)\n\t\t\t{\n                await g.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tinternal float DefnHeight()\n\t\t{\n\t\t\tfloat height=0;\n\t\t\tforeach (ColumnGrouping g in _Items)\n\t\t\t{\n\t\t\t\theight += g.Height.Points;\n\t\t\t}\n\t\t\treturn height;\n\t\t}\n/// <summary>\n/// Calculates the number of static columns\n/// </summary>\n/// <returns></returns>\n\t\tprivate int GetStaticCount()\n\t\t{\n\t\t\t// Find the static column\n\t\t\tforeach (ColumnGrouping cg in _Items)\n\t\t\t{\n\t\t\t\tif (cg.StaticColumns == null)\n\t\t\t\t\tcontinue;\n\t\t\t\treturn cg.StaticColumns.Items.Count;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n/// <summary>\n/// # of static columns;  0 if no static columns defined\n/// </summary>\n\t\tinternal int StaticCount\n\t\t{\n\t\t\tget {return _StaticCount;}\n\t\t}\n\n        internal List<ColumnGrouping> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\n\t\tinternal MatrixEntry GetME(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = GetWC(rpt);\n\t\t\treturn wc.ME;\n\t\t}\n\n\t\tinternal void SetME(Report rpt, MatrixEntry me)\n\t\t{\n\t\t\tWorkClass wc = GetWC(rpt);\n\t\t\twc.ME = me;\n\t\t}\n\n\t\tprivate WorkClass GetWC(Report rpt)\n\t\t{\n\t\t\tif (rpt == null)\n\t\t\t\treturn new WorkClass();\n\n\t\t\tWorkClass wc = rpt.Cache.Get(this, \"wc\") as WorkClass;\n\t\t\tif (wc == null)\n\t\t\t{\n\t\t\t\twc = new WorkClass();\n\t\t\t\trpt.Cache.Add(this, \"wc\", wc);\n\t\t\t}\n\t\t\treturn wc;\n\t\t}\n\n\t\tprivate void RemoveWC(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(this, \"wc\");\n\t\t}\n\n\t\tclass WorkClass\n\t\t{\n\t\t\tinternal MatrixEntry ME;\t// Used at runtime to contain data values\t\n\t\t\tinternal WorkClass()\n\t\t\t{\n\t\t\t\tME=null;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ConnectionProperties.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Information about how to connect to the data source.\n\t///</summary>\n\t[Serializable]\n\tinternal class ConnectionProperties : ReportLink\n\t{\n\t\tstring _DataProvider;\t// The type of the data source. This will determine\n\t\t\t\t\t\t\t\t// the syntax of the Connectstring and\n\t\t\t\t\t\t\t\t// CommandText. Supported types are SQL, OLEDB, ODBC, Oracle\n\t\tExpression _ConnectString;\t// The connection string for the data source\n\t\tbool _IntegratedSecurity;\t// Indicates that this data source should connected\n\t\t\t\t\t\t\t\t\t// to using integrated security\n\t\tstring _Prompt;\t\t\t// The prompt displayed to the user when\n\t\t\t\t\t\t\t\t// prompting for database credentials for this data source.\n\t\n\t\tinternal ConnectionProperties(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_DataProvider=null;\n\t\t\t_ConnectString=null;\n\t\t\t_IntegratedSecurity=false;\n\t\t\t_Prompt=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"DataProvider\":\n\t\t\t\t\t\t_DataProvider = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ConnectString\":\n\t\t\t\t\t_ConnectString = String.IsNullOrWhiteSpace (r.OverwriteConnectionString) \n\t\t\t\t\t\t? new Expression(r, this, xNodeLoop, ExpressionType.String)\n\t\t\t\t\t\t: new Expression(r, this, r.OverwriteConnectionString, ExpressionType.String);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"IntegratedSecurity\":\n\t\t\t\t\t\t_IntegratedSecurity = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Prompt\":\n\t\t\t\t\t\t_Prompt = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown ConnectionProperties element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_DataProvider == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"ConnectionProperties DataProvider is required.\");\n\t\t\tif (_ConnectString == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"ConnectionProperties ConnectString is required.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_ConnectString != null)\n                await _ConnectString.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal string DataProvider\n\t\t{\n\t\t\tget { return  _DataProvider; }\n\t\t\tset {  _DataProvider = value; }\n\t\t}\n\n\t\tinternal async Task<string> Connectstring(Report rpt)\n\t\t{\n\t\t\treturn await _ConnectString.EvaluateString(rpt, null);\n\t\t}\n\n\t\tinternal string ConnectstringValue\n\t\t{\n\t\t\tget {return _ConnectString==null?null:_ConnectString.Source; }\n\t\t}\n\n\t\tinternal bool IntegratedSecurity\n\t\t{\n\t\t\tget { return  _IntegratedSecurity; }\n\t\t\tset {  _IntegratedSecurity = value; }\n\t\t}\n\n\t\tinternal string Prompt\n\t\t{\n\t\t\tget { return  _Prompt; }\n\t\t\tset {  _Prompt = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Corner.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Matrix Corner definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class Corner : ReportLink\n\t{\n\t\tReportItems _ReportItems;\t// The region that contains the elements of the corner layout\n\t\t\t\t\t\t\t\t\t// This ReportItems collection must contain exactly\n\t\t\t\t\t\t\t\t\t// one ReportItem. The Top, Left, Height and Width\n\t\t\t\t\t\t\t\t\t// for this ReportItem are ignored. The position is\n\t\t\t\t\t\t\t\t\t// taken to be 0, 0 and the size to be 100%, 100%.\t\t\n\t\n\t\tinternal Corner(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_ReportItems=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"ReportItems\":\n\t\t\t\t\t\t_ReportItems = new ReportItems(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\t\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Corner element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_ReportItems != null)\n                await _ReportItems.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal ReportItems ReportItems\n\t\t{\n\t\t\tget { return  _ReportItems; }\n\t\t\tset {  _ReportItems = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Custom.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t///The Custom element allows report design tools to pass information to report output components.\n\t///This element may contain any valid XML. The engine will simply pass the contents of Custom\n\t///unchanged. Client applications using the Custom element are recommended to place their\n\t///custom properties under their own single subelement of Custom, defining a namespace for that\n\t///node.\n\t///  Example: \n\t///   <Table><Custom><HTML><SortAble>True</SortAble></HTML></Custom> .... </Table>\n\t///     The HTML renderer uses this information to generate JavaScript to allow\n\t///     user sorting of the table in the browser.\n\t///</summary>\n\t[Serializable]\n\tinternal class Custom : ReportLink\n\t{\n\t\t//The Custom element allows report design tools to pass information to report output components.\n\t\t//This element may contain any valid XML. The engine will simply pass the contents of Custom\n\t\t//unchanged. Client applications using the Custom element are recommended to place their\n\t\t//custom properties under their own single subelement of Custom, defining a namespace for that\n\t\t//node.\n\t\t//  Example: \n\t\t//   <Table><Custom><HTML><SortAble>True</SortAble></HTML> .... </Table>\n\t\t//     The HTML renderer uses this information to generate JavaScript to allow\n\t\t//     user sorting of the table in the browser.\n\t\tstring _XML;\t// custom information for report.\n\t\tXmlDocument _CustomDoc;\t\t// XML document just for Custom subtree\n\t\n\t\tinternal Custom(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_XML= xNode.OuterXml;\t// this includes the \"Custom\" tag at the top level\n\n\t\t\t// Put the subtree into its own document\n\t\t\tXmlDocument doc = new XmlDocument();\n\t\t\tdoc.PreserveWhitespace = false;\n\t\t\tdoc.LoadXml(_XML);\n\t\t\t_CustomDoc = doc;\n\n\t\t}\n\t\t\n\t\toverride internal Task FinalPass()\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tinternal string XML\n\t\t{\n\t\t\tget { return  _XML; }\n\t\t\tset {  _XML = value; }\n\t\t}\n\n\t\tinternal XmlNode CustomXmlNode\n\t\t{\n\t\t\tget \n\t\t\t{ \n\t\t\t\tXmlNode xNode;\n\t\t\t\txNode = _CustomDoc.LastChild;\n\t\t\t\treturn  xNode; \n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/CustomReportItem.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Collections.Generic;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\nusing Majorsilence.Drawing.Imaging;\n#else\nusing Draw2 = System.Drawing;\nusing System.Drawing.Imaging;\n#endif\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    ///<summary>\n    ///CustomReportItem describes a report item that is not natively defined in RDL.  The \n    /// RdlEngineConfig.xml file (loaded by RdlEngineConfig.cs) contains a list of the \n    /// extensions.   RdlCri.dll is a code module that contains the built-in CustomReportItems.\n    /// However, the runtime dynamically loads this so RdlCrl.dll is not required for the\n    /// report engine to function properly.\n    ///</summary>\n    [Serializable]\n\tinternal class CustomReportItem : Rectangle\n\t{\n        static readonly ImageFormat IMAGEFORMAT = ImageFormat.Jpeg;\n        string _Type;   // The type of the custom report item. Interpreted by a\n\t\t\t\t\t\t// report design tool or server.\n                        private Expression _typeExpression=null;\n\t\tXmlNode xNode;\n        System.Collections.Generic.List<CustomProperty> _Properties;\n\t\n\t\tinternal CustomReportItem(ReportDefn r, ReportLink p, XmlNode xNode):base(r, p, xNode, false)\n\t\t{\n\t\t\t_Type=null;\n\t\t\tReportItems ris=null;\n            bool bVersion2 = true;\n\t\t\tthis.xNode = xNode;\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"type\":\n\t\t\t\t\t\t_Type = xNodeLoop.InnerText;\n                        if (_Type.StartsWith(\"=\"))\n                        {\n                            _typeExpression = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.String);\n                        }\n\n                        break;\n\t\t\t\t\tcase \"reportitems\":         // Version 1 of the specification\n\t\t\t\t\t\tris = new ReportItems(r, this, xNodeLoop);\n                        bVersion2 = false;\n\t\t\t\t\t\tbreak;\n                    case \"altreportitem\":       // Verstion 2 of the specification\n                        ris = new ReportItems(r, this, xNodeLoop);\n                        break;\n                    case \"customproperties\":\n                        _Properties = CustomProperties(xNodeLoop);\n                        break;\n                    case \"source\":\n                        // HACK: support custom report items as embedded\n                        break;\n                    default:\n\t\t\t\t\t\tif (ReportItemElement(xNodeLoop))\t// try at ReportItem level\n\t\t\t\t\t\t\tbreak; \n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown CustomReportItem element \" + xNodeLoop.Name + \" ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tReportItems = ris;\n            if (bVersion2 && ris != null)\n            {\n\t\t\t    if (ris.Items.Count != 1)\n\t\t\t\t    OwnerReport.rl.LogError(8, \"Only one element is allowed within an AltReportItem.\");\n            }\n\n\t\t\tif (_Type == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"CustomReportItem requires the Type element.\");\n\t\t}\n\n        async override internal Task FinalPass()\n        {\n            await base.FinalPass();       // this handles the finalpass of the AltReportItems\n\n            // Handle the final pass for the Custom Properties\n            if (_Properties != null)\n            {\n                foreach (CustomProperty cp in _Properties)\n                {\n                    await cp.Name.FinalPass();\n                    await cp.Value.FinalPass();\n                }\n            }\n            \n            await GetCriType(null, null);\n\n            // Find out whether the type is known\n            ICustomReportItem cri = null;\n            try\n            {\n                cri = RdlEngineConfig.CreateCustomReportItem(_Type);\n            }\n            catch (Exception ex)\n            {   // Not an error since we'll simply use the ReportItems\n                OwnerReport.rl.LogError(4, string.Format(\"CustomReportItem load of {0} failed: {1}\", \n                    _Type, ex.Message));\n            }\n            finally\n            {\n                if (cri != null)\n                    cri.Dispose();\n            }\n\n            return;\n        }\n\n        override internal async Task Run(IPresent ip, Row row)\n        {\n            Report rpt = ip.Report();\n\n            ICustomReportItem cri = null;\n            try\n            {\n                await GetCriType(row, rpt);\n                cri = RdlEngineConfig.CreateCustomReportItem(_Type);\n\t\t\t\tType a = cri.GetType();\n\t\t\t\tDraw2.Bitmap bm = null;\n                await SetProperties(rpt, row, cri);\n\t\t\t\tint width = WidthCalc(rpt, null) -\n\t\t\t\t\t(Style == null ? 0 :\n\t\t\t\t\t\t(await Style.EvalPaddingLeftPx(rpt, row) + await Style.EvalPaddingRightPx(rpt, row)));\n\t\t\t\tint height = RSize.PixelsFromPoints(this.HeightOrOwnerHeight) -\n\t\t\t\t\t(Style == null ? 0 :\n\t\t\t\t\t\t(await Style.EvalPaddingTopPx(rpt, row) + await Style.EvalPaddingBottomPx(rpt, row)));\n\t\t\t\tbm = new Draw2.Bitmap(width, height);\n\t\t\t\tcri.DrawImage(ref bm);\n\n\t\t\t\tMemoryStream ostrm = new MemoryStream();\n\t\t\t\t// 06122007AJM Changed to use high quality JPEG encoding\n\t\t\t\t//bm.Save(ostrm, IMAGEFORMAT);\t// generate a jpeg   TODO: get png to work with pdf\n\t\t\t\tImageCodecInfo[] info;\n\t\t\t\tinfo = ImageCodecInfo.GetImageEncoders();\n\t\t\t\tDraw2.Imaging.EncoderParameters encoderParameters;\n\t\t\t\tencoderParameters = new Draw2.Imaging.EncoderParameters(1);\n\t\t\t\t// 20022008 AJM GJL - Using centralised image quality\n\t\t\t\tencoderParameters.Param[0] = new Draw2.Imaging.EncoderParameter(Draw2.Imaging.Encoder.Quality, ImageQualityManager.CustomImageQuality);\n\t\t\t\tImageCodecInfo codec = null;\n\t\t\t\tfor(int i = 0; i < info.Length; i++) {\n\t\t\t\t\tif(info[i].FormatDescription == \"JPEG\") {\n\t\t\t\t\t\tcodec = info[i];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbm.Save(ostrm, codec, encoderParameters);\n                bm.Dispose();\n\n                await ip.Image(new Image(rpt.ReportDefinition, this, xNode), row, null, ostrm);\n\t\t\t\tostrm.Close();\n            }\n            catch (Exception ex)\n            {\n                rpt.rl.LogError(8, string.Format(\"Exception in CustomReportItem handling.\\n{0}\\n{1}\", ex.Message, ex.StackTrace));\n            }\n            finally\n            {\n                if (cri != null)\n                    cri.Dispose();\n            }\n\n            return;\n        }\n\n        private async Task GetCriType(Row row, Report rpt)\n        {\n            if (_typeExpression != null)\n            {\n                //_Type = await exp.EvaluateString(OwnerReport, null);\n                await _typeExpression.FinalPass();\n                _Type = await _typeExpression.EvaluateString(rpt, row);\n            }\n        }\n\n        override internal async Task RunPage(Pages pgs, Row row)\n        {\n            Report rpt = pgs.Report;\n\n            if (await IsHidden(pgs.Report, row))\n                return;\n\n            SetPagePositionBegin(pgs);\n\n            // Build the Chart bitmap, along with data regions\n            Page p = pgs.CurrentPage;\n            ICustomReportItem cri = null;\n            try\n            {\n                await GetCriType(row, rpt);\n                cri = RdlEngineConfig.CreateCustomReportItem(_Type);\n                await SetProperties(pgs.Report, row, cri);\n                \n                Draw2.Imaging.EncoderParameters encoderParameters = new Draw2.Imaging.EncoderParameters(1);\n                // 20022008 AJM GJL - Using centralised image quality\n                encoderParameters.Param[0] = new Draw2.Imaging.EncoderParameter(Draw2.Imaging.Encoder.Quality, ImageQualityManager.CustomImageQuality);\n                ImageCodecInfo codec = ImageCodecInfo.GetImageEncoders().First(x => x.FormatDescription == \"JPEG\");\n\n                PageImage pi = new PageImage(IMAGEFORMAT, \n                    ((format, width, height) => GenerateImage(codec, encoderParameters, width, height, cri)),\n                    ImageSizingEnum.Clip);\t// Create an image\n\n                await SetPagePositionAndStyle(rpt, pi, row);\n\n                if (pgs.CurrentPage.YOffset + pi.Y + pi.H >= pgs.BottomOfPage && !pgs.CurrentPage.IsEmpty())\n                {\t// force page break if it doesn't fit on the page\n                    pgs.NextOrNew();\n                    pgs.CurrentPage.YOffset = OwnerReport.TopOfPage;\n                    if (this.YParents != null)\n                        pi.Y = 0;\n                }\n\n                p = pgs.CurrentPage;\n\n                p.AddObject(pi);\t// Put image onto the current page\n                SetPagePositionEnd(pgs, pi.Y + pi.H);\n            }\n            catch (Exception ex)\n            {\n                rpt.rl.LogError(8, string.Format(\"Exception in CustomReportItem handling: {0}\", ex.Message));\n            }\n            finally\n            {\n                if (cri != null)\n                    cri.Dispose();\n            }\n            return;\n        }\n\n        byte[] GenerateImage(ImageCodecInfo codec, Draw2.Imaging.EncoderParameters parameters, int width, int height, ICustomReportItem cri)\n\t\t{\n\t\t\tDraw2.Bitmap bm = new Draw2.Bitmap(width, height);\n\t\t\tcri.DrawImage(ref bm);\n\n\t\t\tMemoryStream ostrm = new MemoryStream();\n\t\t\tbm.Save(ostrm, codec, parameters);\n\t\t\tbyte[] ba = ostrm.ToArray();\n\t\t\tostrm.Close();\n            bm.Dispose();\n\t\t\treturn ba;\n\t\t}\n\n        async Task SetProperties(Report rpt, Row row, ICustomReportItem cri)\n        {\n            if (_Properties == null || _Properties.Count == 0)  // Any properties specified?\n                return;\n\n            System.Collections.Generic.Dictionary<string, object> dict =\n                new Dictionary<string, object>(_Properties.Count, StringComparer.OrdinalIgnoreCase);\n            foreach (CustomProperty cp in _Properties)\n            {\n                string name = await cp.Name.EvaluateString(rpt, row);\n                object val = await cp.Value.Evaluate(rpt, row);\n                try { dict.Add(name, val); }\n                catch\n                {\n                    rpt.rl.LogError(4, string.Format(\"Property {0} has already been set.  New value {1} ignored.\", name, val));\n                }\n            }\n            cri.SetProperties(dict);\n        }\n\n\t\tinternal string Type\n\t\t{\n\t\t\tget { return  _Type; }\n\t\t\tset {  _Type = value; }\n\t\t}\n\n        List<CustomProperty> CustomProperties(XmlNode xNode)\n        {\n            if (!xNode.HasChildNodes)\n                return null;\n\n            List<CustomProperty> cps = new List<CustomProperty>(xNode.ChildNodes.Count);\n            foreach (XmlNode xNodeLoop in xNode.ChildNodes)\n            {\n                switch (xNodeLoop.Name.ToLowerInvariant())\n                {\n                    case \"customproperty\":\n                        CustomProperty cp = CustomProperty(xNodeLoop);\n                        if (cp != null)\n                            cps.Add(cp);\n                        break;\n                    default:\n                        OwnerReport.rl.LogError(4, \"Unknown CustomProperties element \" + xNodeLoop.Name + \" ignored.\");\n                        break;\n                }\n            }\n            return cps;\n        }\n        CustomProperty CustomProperty(XmlNode xNode)\n        {\n            Expression name=null;\n            Expression val=null;\n            CustomProperty cp = null;\n            foreach (XmlNode xNodeLoop in xNode.ChildNodes)\n            {\n                switch (xNodeLoop.Name.ToLowerInvariant())\n                {\n                    case \"name\":\n                        name = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.String);\n                        break;\n                    case \"value\":\n                        val = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.Variant);\n                        break;\n                    default:\n                        OwnerReport.rl.LogError(4, \"Unknown CustomProperty element \" + xNodeLoop.Name + \" ignored.\");\n                        break;\n                }\n            }\n            if (name == null || val == null)\n                OwnerReport.rl.LogError(8, \"CustomProperty requires the Name and Value element.\");\n            else\n            {\n                cp = new CustomProperty(name, val);\n            }\n            return cp;            \n        }\n\t}\n\n    class CustomProperty\n    {\n        Expression _Name;           // name of the property\n        Expression _Value;          // value of the property\n        internal CustomProperty(Expression name, Expression val)\n        {\n            _Name = name;\n            _Value = val;\n        }\n        internal Expression Name\n        {\n            get { return _Name; }\n        }\n\n        internal Expression Value\n        {\n            get { return _Value; }\n        }\n    }\n    \n}\n"
  },
  {
    "path": "RdlEngine/Definition/DataElementOutput.cs",
    "content": "\n\nusing System;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Filter operators\n\t///</summary>\n\tpublic enum DataElementOutputEnum\n\t{\n\t\tOutput,\t\t// Indicates the item should appear in the output\n\t\tNoOutput,\t// Indicates the item should not appear in the output\n\t\tContentsOnly,\t// Indicates the item should not appear in the XML, but its contents should be\n\t\t\t\t\t\t// rendered as if they were in this item�s\n\t\t\t\t\t\t// container. Only applies to Lists.\n\t\tAuto\t\t// (Default): Will behave as NoOutput for\n\t\t\t\t\t// Textboxes with constant values,\n\t\t\t\t\t// ContentsOnly for Rectangles and Output for\n\t\t\t\t\t// all other items\t\t\n\n\t}\n\n\tpublic class DataElementOutput\n\t{\n        static public DataElementOutputEnum GetStyle(string s)\n        {\n            return GetStyle(s, null);\n        }\n\n\t\tstatic internal DataElementOutputEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tDataElementOutputEnum rs;\n\n\t\t\tswitch (s.ToLowerInvariant())\n\t\t\t{\t\t\n\t\t\t\tcase \"output\":\n\t\t\t\t\trs = DataElementOutputEnum.Output;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nooutput\":\n\t\t\t\t\trs = DataElementOutputEnum.NoOutput;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"contentsonly\":\n\t\t\t\t\trs = DataElementOutputEnum.ContentsOnly;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"auto\":\n\t\t\t\t\trs = DataElementOutputEnum.Auto;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\n                    if (rl != null)\n\t\t\t\t\t    rl.LogError(4, \"Unknown DataElementOutput '\" + s + \"'.  Auto assumed.\");\n\t\t\t\t\trs = DataElementOutputEnum.Auto;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn rs;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DataElementStyle.cs",
    "content": "\n\nusing System;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t///Indicates whether textboxes should render as elements or attributes.\n\t///</summary>\n\tpublic class DataElementStyle\n\t{\n        static public DataElementStyleEnum GetStyle(string s)\n        {\n            return GetStyle(s, null);\n        }\n\t\tstatic internal DataElementStyleEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tDataElementStyleEnum rs;\n\n\t\t\tswitch (s)\n\t\t\t{\t\t\n\t\t\t\tcase \"Auto\":\n\t\t\t\t\trs = DataElementStyleEnum.Auto;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"AttributeNormal\":\n\t\t\t\t\trs = DataElementStyleEnum.AttributeNormal;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ElementNormal\":\n\t\t\t\t\trs = DataElementStyleEnum.ElementNormal;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\n                    if (rl != null)\n\t\t\t\t\t    rl.LogError(4, \"Unknown DataElementStyle '\" + s + \"'.  AttributeNormal assumed.\");\n\t\t\t\t\trs = DataElementStyleEnum.AttributeNormal;\n\t\t\t\t    break;\n\t\t\t}\n\t\t\treturn rs;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DataElementStyleEnum.cs",
    "content": "\n\nusing System;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t///Indicates whether textboxes should render as elements or attributes.\n\t///</summary>\n\tpublic enum DataElementStyleEnum\n\t{\n\t\tAuto,\n\t\tAttributeNormal,\n\t\tElementNormal\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DataInstanceElementOutput.cs",
    "content": "\n\nusing System;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// DataInstanceElement definition and processing.\n\t///</summary>\n\tpublic enum DataInstanceElementOutputEnum\n\t{\n\t\tOutput,\t\t\t// Indicates the list instances should appear in the output\n\t\tNoOutput\t\t// Indicates the list instances should not appear in the output\t\t\n\t}\n\n\tpublic class DataInstanceElementOutput\n\t{\n        static public DataInstanceElementOutputEnum GetStyle(string s)\n        {\n            return GetStyle(s, null);\n        }\n\t\tstatic internal DataInstanceElementOutputEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tDataInstanceElementOutputEnum rs;\n\n\t\t\tswitch (s)\n\t\t\t{\t\t\n\t\t\t\tcase \"Output\":\n\t\t\t\t\trs = DataInstanceElementOutputEnum.Output;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"NoOutput\":\n\t\t\t\t\trs = DataInstanceElementOutputEnum.NoOutput;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\n                    if (rl != null)\n\t\t\t\t\t    rl.LogError(4, \"Unknown DataInstanceElementOutput '\" + s + \"'.  Output assumed.\");\n\t\t\t\t\trs = DataInstanceElementOutputEnum.Output;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn rs;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DataLabel.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// DataLabel definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class DataLabel : ReportLink\n\t{\n\t\tStyle _Style;\t// Defines text, border and background style\n\t\t\t\t\t\t// properties for the labels\n\t\tExpression _Value;\t//(Variant) Expression for the value labels. If omitted,\n\t\t\t\t\t\t// values of in the ValueAxis are used for labels.\n\t\tbool _Visible;\t// Whether the data label is displayed on the\n\t\t\t\t\t\t// chart. Defaults to False.\n\t\tDataLabelPositionEnum _Position;\t// Position of the label.  Default: auto\n\t\tint _Rotation;\t// Angle of rotation of the label text\t\t\n\t\n\t\tinternal DataLabel(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Style=null;\n\t\t\t_Value=null;\n\t\t\t_Visible=false;\n\t\t\t_Position=DataLabelPositionEnum.Auto;\n\t\t\t_Rotation=0;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"style\":\n\t\t\t\t\t\t_Style = new Style(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"value\":\n\t\t\t\t\t\t_Value = new Expression(r, this, xNodeLoop, ExpressionType.Variant);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"visible\":\n\t\t\t\t\t\t_Visible = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"position\":\n\t\t\t\t\t\t_Position = DataLabelPosition.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"rotation\":\n\t\t\t\t\t\t_Rotation = XmlUtil.Integer(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\n\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Style != null)\n                await _Style.FinalPass();\n\t\t\tif (_Value != null)\n                await _Value.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\n\t\tinternal Style Style\n\t\t{\n\t\t\tget { return  _Style; }\n\t\t\tset {  _Style = value; }\n\t\t}\n\n\t\tinternal Expression Value\n\t\t{\n\t\t\tget { return  _Value; }\n\t\t\tset {  _Value = value; }\n\t\t}\n\n\t\tinternal bool Visible\n\t\t{\n\t\t\tget { return  _Visible; }\n\t\t\tset {  _Visible = value; }\n\t\t}\n\n\t\tinternal DataLabelPositionEnum Position\n\t\t{\n\t\t\tget { return  _Position; }\n\t\t\tset {  _Position = value; }\n\t\t}\n\n\t\tinternal int Rotation\n\t\t{\n\t\t\tget { return  _Rotation; }\n\t\t\tset {  _Rotation = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DataLabelPosition.cs",
    "content": "\n\nusing System;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t\n\tinternal enum DataLabelPositionEnum\n\t{\n\t\tAuto,\n\t\tTop,\n\t\tTopLeft,\n\t\tTopRight,\n\t\tLeft,\n\t\tCenter,\n\t\tRight,\n\t\tBottomRight,\n\t\tBottom,\n\t\tBottomLeft\n\t}\n\n\tinternal class DataLabelPosition\n\t{\n\t\tstatic internal DataLabelPositionEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tDataLabelPositionEnum dlp;\n\n\t\t\tswitch (s.ToLowerInvariant())\n\t\t\t{\t\t\n\t\t\t\tcase \"auto\":\n\t\t\t\t\tdlp = DataLabelPositionEnum.Auto;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"top\":\n\t\t\t\t\tdlp = DataLabelPositionEnum.Top;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"topleft\":\n\t\t\t\t\tdlp = DataLabelPositionEnum.TopLeft;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"topright\":\n\t\t\t\t\tdlp = DataLabelPositionEnum.TopRight;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"left\":\n\t\t\t\t\tdlp = DataLabelPositionEnum.Left;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"center\":\n\t\t\t\t\tdlp = DataLabelPositionEnum.Center;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"right\":\n\t\t\t\t\tdlp = DataLabelPositionEnum.Right;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"bottomright\":\n\t\t\t\t\tdlp = DataLabelPositionEnum.BottomRight;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"bottom\":\n\t\t\t\t\tdlp = DataLabelPositionEnum.Bottom;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"bottomleft\":\n\t\t\t\t\tdlp = DataLabelPositionEnum.BottomLeft;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\n\t\t\t\t\trl.LogError(4, \"Unknown DataLablePosition '\" + s + \"'.  Auto assumed.\");\n\t\t\t\t\tdlp = DataLabelPositionEnum.Auto;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn dlp;\n\t\t}\n\t}\n\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DataPoint.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// DataPoint definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class DataPoint : ReportLink\n\t{\n\t\tDataValues _DataValues;\t//Data value set for the Y axis.\n\t\tDataLabel _DataLabel;\t// Indicates the values should be marked with data labels.\n\t\tAction _Action;\t\t\t// Action to execute.\n\t\tStyle _Style;\t\t\t// Defines border and background style\n\t\t\t\t\t\t\t\t// properties for the data point.\n\t\tMarker _Marker;\t\t\t// Defines marker properties. Markers do\n\t\t\t\t\t\t\t\t//\tnot apply to data points of pie, doughnut\n\t\t\t\t\t\t\t\t//\tand any stacked chart types.\n\t\tstring _DataElementName;\t// The name to use for the data element for\n\t\t\t\t\t\t\t\t\t//\tthis data point.\n\t\t\t\t\t\t\t\t\t//\tDefault: Name of corresponding static\n\t\t\t\t\t\t\t\t\t//\tseries or category. If there is no static\n\t\t\t\t\t\t\t\t\t//\tseries or categories, �Value�\n\t\tDataElementOutputEnum _DataElementOutput;\t// Indicates whether the data point should\n\t\t\t\t\t\t\t\t\t// appear in a data rendering.\n\t\n\t\tinternal DataPoint(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_DataValues=null;\n\t\t\t_DataLabel=null;\n\t\t\t_Action=null;\n\t\t\t_Style=null;\n\t\t\t_Marker=null;\n\t\t\t_DataElementName=null;\n\t\t\t_DataElementOutput=DataElementOutputEnum.Output;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"datavalues\":\n\t\t\t\t\t\t_DataValues = new DataValues(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"datalabel\":\n\t\t\t\t\t\t_DataLabel = new DataLabel(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"action\":\n\t\t\t\t\t\t_Action = new Action(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"style\":\n\t\t\t\t\t\t_Style = new Style(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"marker\":\n\t\t\t\t\t\t_Marker = new Marker(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"dataelementname\":\n\t\t\t\t\t\t_DataElementName = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"dataelementoutput\":\n\t\t\t\t\t\t_DataElementOutput = Majorsilence.Reporting.Rdl.DataElementOutput.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown DataPoint element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_DataValues == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"DataPoint requires the DataValues element.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_DataValues != null)\n                await _DataValues.FinalPass();\n\t\t\tif (_DataLabel != null)\n                await _DataLabel.FinalPass();\n\t\t\tif (_Action != null)\n                await _Action.FinalPass();\n\t\t\tif (_Style != null)\n                await _Style.FinalPass();\n\t\t\tif (_Marker != null)\n                await _Marker.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\n\t\tinternal DataValues DataValues\n\t\t{\n\t\t\tget { return  _DataValues; }\n\t\t\tset {  _DataValues = value; }\n\t\t}\n\n\t\tinternal DataLabel DataLabel\n\t\t{\n\t\t\tget { return  _DataLabel; }\n\t\t\tset {  _DataLabel = value; }\n\t\t}\n\n\t\tinternal Action Action\n\t\t{\n\t\t\tget { return  _Action; }\n\t\t\tset {  _Action = value; }\n\t\t}\n\n\t\tinternal Style Style\n\t\t{\n\t\t\tget { return  _Style; }\n\t\t\tset {  _Style = value; }\n\t\t}\n\n\t\tinternal Marker Marker\n\t\t{\n\t\t\tget { return  _Marker; }\n\t\t\tset {  _Marker = value; }\n\t\t}\n\n\t\tinternal string DataElementName\n\t\t{\n\t\t\tget { return  _DataElementName; }\n\t\t\tset {  _DataElementName = value; }\n\t\t}\n\n\t\tinternal DataElementOutputEnum DataElementOutput\n\t\t{\n\t\t\tget { return  _DataElementOutput; }\n\t\t\tset {  _DataElementOutput = value; }\n\t\t}\n\t}\n\t\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DataPoints.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// DataPoints definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class DataPoints : ReportLink\n\t{\n        List<DataPoint> _Items;\t\t\t// list of datapoint\n\n\t\tinternal DataPoints(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tDataPoint dp;\n            _Items = new List<DataPoint>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"datapoint\":\n\t\t\t\t\t\tdp = new DataPoint(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tdp=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown DataPoints element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (dp != null)\n\t\t\t\t\t_Items.Add(dp);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For DataPoints at least one DataPoint is required.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (DataPoint dp in _Items)\n\t\t\t{\n                await dp.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<DataPoint> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DataRegion.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.IO;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// DataRegion base class definition and processing.\n\t/// Warning if you inherit from DataRegion look at Expression.cs first.\n\t///</summary>\n\t[Serializable]\n\tinternal class DataRegion : ReportItem\n\t{\n\t\tbool _KeepTogether;\t\t// Indicates the entire data region (all\n\t\t\t\t\t\t\t\t// repeated sections) should be kept\n\t\t\t\t\t\t\t\t// together on one page if possible.\n\t\tExpression _NoRows;\t\t// (string) Message to display in the DataRegion\n\t\t\t\t\t\t\t\t// (instead of the region layout) when\n\t\t\t\t\t\t\t\t// no rows of data are available.\n\t\t\t\t\t\t\t\t// Note: Style information on the data region applies to this text\n\t\tstring _DataSetName;\t// Indicates which data set to use for this data region.\n\t\t\t\t\t\t\t\t//Mandatory for top level DataRegions\n\t\t\t\t\t\t\t\t//(not contained within another\n\t\t\t\t\t\t\t\t//DataRegion) if there is not exactly\n\t\t\t\t\t\t\t\t//one data set in the report. If there is\n\t\t\t\t\t\t\t\t//exactly one data set in the report, the\n\t\t\t\t\t\t\t\t//data region uses that data set. (Note:\n\t\t\t\t\t\t\t\t//If there are zero data sets in the\n\t\t\t\t\t\t\t\t//report, data regions can not be used,\n\t\t\t\t\t\t\t\t//as there is no valid DataSetName to\n\t\t\t\t\t\t\t\t//use) Ignored for DataRegions that are\n\t\t\t\t\t\t\t\t//not top level.\n\t\tDataSetDefn _DataSetDefn;\t//  resolved data set name;\n\t\tbool _PageBreakAtStart; // Indicates the report should page break\n\t\t\t\t\t\t\t\t//  at the start of the data region.\n\t\tbool _PageBreakAtEnd;\t// Indicates the report should page break\n\t\t\t\t\t\t\t\t// at the end of the data region.\n\t\tFilters _Filters;\t\t// Filters to apply to each row of data in the data region.\n\t\tDataRegion _ParentDataRegion;   // when DataRegions are nested; the nested regions have the parent set \n        Expression _PageBreakCondition;\n        ReportDefn MyReport;\n        internal DataRegion(ReportDefn r, ReportLink p, XmlNode xNode):base(r,p,xNode)\n\t\t{\n\t\t\t_KeepTogether=false;\n\t\t\t_NoRows=null;\n\t\t\t_DataSetName=null;\n\t\t\t_DataSetDefn=null;\n\t\t\t_PageBreakAtStart=false;\n\t\t\t_PageBreakAtEnd=false;\n\t\t\t_Filters=null;\n            _PageBreakCondition = null;\n            MyReport = r;\n        }\n\n\t\tinternal bool DataRegionElement(XmlNode xNodeLoop)\n\t\t{\n\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t{\n\t\t\t\tcase \"keeptogether\":\n\t\t\t\t\t_KeepTogether = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"norows\":\n\t\t\t\t\t_NoRows = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.String);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"datasetname\":\n\t\t\t\t\t_DataSetName = xNodeLoop.InnerText;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"pagebreakatstart\":\n\t\t\t\t\t_PageBreakAtStart = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"pagebreakatend\":\n\t\t\t\t\t_PageBreakAtEnd = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\tbreak;\n                case \"pagebreakcondition\":\n                    _PageBreakCondition = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.Boolean);\n                    break;\n                case \"filters\":\n\t\t\t\t\t_Filters = new Filters(OwnerReport, this, xNodeLoop);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t// Will get many that are handled by the specific\n\t\t\t\t\t\t\t//  type of data region: ie  list,chart,matrix,table\n\t\t\t\t\tif (ReportItemElement(xNodeLoop))\t// try at ReportItem level\n\t\t\t\t\t\tbreak;\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n            await base.FinalPass();\n\n            if (this is Table)\n            {   // Grids don't have any data responsibilities\n                Table t = this as Table;\n                if (t.IsGrid)\n                    return;\n            }\n\n\t\t\t// DataRegions aren't allowed in PageHeader or PageFooter; \n\t\t\tif (this.InPageHeaderOrFooter())\n\t\t\t\tOwnerReport.rl.LogError(8, String.Format(\"The DataRegion '{0}' is not allowed in a PageHeader or PageFooter\", this.Name == null? \"unknown\": Name.Nm) );\n\n\t\t\tResolveNestedDataRegions();\n\n\t\t\tif (_ParentDataRegion != null)\t\t// when nested we use the dataset of the parent\n\t\t\t{\n\t\t\t\t_DataSetDefn = _ParentDataRegion.DataSetDefn;\n\t\t\t}\n\t\t\telse if (_DataSetName != null)\n\t\t\t{\n\t\t\t\tif (OwnerReport.DataSetsDefn != null)\n\t\t\t\t\t_DataSetDefn = (DataSetDefn) OwnerReport.DataSetsDefn.Items[_DataSetName];\n\t\t\t\tif (_DataSetDefn == null)\n\t\t\t\t{\n\t\t\t\t\tOwnerReport.rl.LogError(8, String.Format(\"DataSetName '{0}' not specified in DataSets list.\", _DataSetName));\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\t\t// No name but maybe we can default to a single Dataset\n\t\t\t\tif (_DataSetDefn == null && OwnerReport.DataSetsDefn != null &&\n\t\t\t\t\tOwnerReport.DataSetsDefn.Items.Count == 1)\n\t\t\t\t{\n\t\t\t\t\tforeach (DataSetDefn d in OwnerReport.DataSetsDefn.Items.Values) \n\t\t\t\t\t{\t\n\t\t\t\t\t\t_DataSetDefn = d;\n\t\t\t\t\t\tbreak;\t// since there is only 1 this will obtain it\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (_DataSetDefn == null)\n\t\t\t\t\tOwnerReport.rl.LogError(8, string.Format(\"{0} must specify a DataSetName.\",this.Name == null? \"DataRegions\": this.Name.Nm));\n\t\t\t}\n\n\t\t\tif (_NoRows != null)\n                await _NoRows.FinalPass();\n\t\t\tif (_Filters != null)\n                await _Filters.FinalPass();\n            if (_PageBreakCondition != null)\n                await _PageBreakCondition.FinalPass();\n\n            return;\n\t\t}\n\n\t\tvoid ResolveNestedDataRegions()\n\t\t{\n\t\t\tReportLink rl = this.Parent;\n\t\t\twhile (rl != null)\n\t\t\t{\n\t\t\t\tif (rl is DataRegion)\n\t\t\t\t{\n\t\t\t\t\tthis._ParentDataRegion = rl as DataRegion;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\trl = rl.Parent;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tasync override internal Task Run(IPresent ip, Row row)\n\t\t{\n            await base.Run(ip, row);\n\t\t}\n\n\t\tinternal void RunPageRegionBegin(Pages pgs)\n\t\t{\n\t\t\tif (this.TC == null && this.PageBreakAtStart && PageBreakCondition && !pgs.CurrentPage.IsEmpty())\n\t\t\t{\t// force page break at beginning of dataregion\n\t\t\t\tpgs.NextOrNew();\n\t\t\t\tpgs.CurrentPage.YOffset = OwnerReport.TopOfPage;\n\t\t\t}\n\t\t}\n\n\t\tinternal void RunPageRegionEnd(Pages pgs)\n\t\t{\n\t\t\tif (this.TC == null && this.PageBreakAtEnd && !pgs.CurrentPage.IsEmpty())\n\t\t\t{\t// force page break at beginning of dataregion\n\t\t\t\tpgs.NextOrNew();\n\t\t\t\tpgs.CurrentPage.YOffset = OwnerReport.TopOfPage;\n\t\t\t}\n\t\t}\n\n\t\tinternal async Task<bool> AnyRows(IPresent ip, Rows data)\n\t\t{\n\t\t\tif (data == null || data.Data == null ||\n\t\t\t\tdata.Data.Count <= 0)\n\t\t\t{\n\t\t\t\tstring msg;\n\t\t\t\tif (this.NoRows != null)\n\t\t\t\t\tmsg = await this.NoRows.EvaluateString(ip.Report(), null);\n\t\t\t\telse\n\t\t\t\t\tmsg = null;\n                await ip.DataRegionNoRows(this, msg);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tinternal async Task<bool> AnyRowsPage(Pages pgs, Rows data)\n\t\t{\n\t\t\tif (data != null && data.Data != null &&\n\t\t\t\tdata.Data.Count > 0)\n\t\t\t\treturn true;\n\n\t\t\tstring msg;\n\t\t\tif (this.NoRows != null)\n\t\t\t\tmsg = await this.NoRows.EvaluateString(pgs.Report, null);\n\t\t\telse\n\t\t\t\tmsg = null;\n\n\t\t\tif (msg == null)\n\t\t\t\treturn false;\n\n\t\t\t// OK we have a message we need to put out\n\t\t\tRunPageRegionBegin(pgs);\t\t\t\t// still perform page break if needed\n\n\t\t\tPageText pt = new PageText(msg);\n            await SetPagePositionAndStyle(pgs.Report, pt, null);\n\n\t\t\tif (pt.SI.BackgroundImage != null)\n\t\t\t\tpt.SI.BackgroundImage.H = pt.H;\t\t//   and in the background image\n\n\t\t\tpgs.CurrentPage.AddObject(pt);\n\n\t\t\tRunPageRegionEnd(pgs);\t\t\t\t\t// perform end page break if needed\n\n            SetPagePositionEnd(pgs, pt.Y + pt.H);\n            \n            return false;\n\t\t}\n\n\t\tinternal async Task<Rows> GetFilteredData(Report rpt, Row row)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tRows data;\n\t\t\t\tif (this._Filters == null)\n\t\t\t\t{\n\t\t\t\t\tif (this._ParentDataRegion == null)\n\t\t\t\t\t{\n\t\t\t\t\t\tdata = DataSetDefn.Query.GetMyData(rpt);\n\t\t\t\t\t\treturn data == null? null: new Rows(rpt, data);\t// We need to copy in case DataSet is shared by multiple DataRegions\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\treturn GetNestedData(rpt, row);\n\t\t\t\t}\n\n\t\t\t\tif (this._ParentDataRegion == null)\n\t\t\t\t{\n\t\t\t\t\tdata = DataSetDefn.Query.GetMyData(rpt);\n\t\t\t\t\tif (data != null)\n\t\t\t\t\t\tdata = new Rows(rpt, data);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tdata = GetNestedData(rpt, row);\n\n\t\t\t\tif (data == null)\n\t\t\t\t\treturn null;\n\n\t\t\t\tList<Row> ar = new List<Row>();\n\t\t\t\tforeach (Row r in data.Data)\n\t\t\t\t{\n\t\t\t\t\tif (await _Filters.Apply(rpt, r))\n\t\t\t\t\t\tar.Add(r);\n\t\t\t\t}\n                ar.TrimExcess();\n\t\t\t\tdata.Data = ar;\n                await _Filters.ApplyFinalFilters(rpt, data, true);\n\n\t\t\t\t// Adjust the rowcount\n\t\t\t\tint rCount = 0;\n\t\t\t\tforeach (Row r in ar)\n\t\t\t\t{\n\t\t\t\t\tr.RowNumber = rCount++;\n\t\t\t\t}\n\t\t\t\treturn data;\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\tthis.OwnerReport.rl.LogError(8, e.Message);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tRows GetNestedData(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn null;\n\n\t\t\tReportLink rl = this.Parent;\n\t\t\twhile (rl != null)\n\t\t\t{\n\t\t\t\tif (rl is TableGroup || rl is List || rl is MatrixCell)\n\t\t\t\t\tbreak;\n\t\t\t\trl = rl.Parent;\n\t\t\t}\n\t\t\tif (rl == null)\n\t\t\t\treturn null;\t\t\t// should have been caught as an error\n\n\t\t\tGrouping g=null;\n\t\t\tif (rl is TableGroup)\n\t\t\t{\n\t\t\t\tTableGroup tg = rl as TableGroup;\n\t\t\t\tg = tg.Grouping;\n\t\t\t}\n\t\t\telse if (rl is List)\n\t\t\t{\n\t\t\t\tList l = rl as List;\n\t\t\t\tg = l.Grouping;\n\t\t\t}\n\t\t\telse if (rl is MatrixCell)\n\t\t\t{\n\t\t\t\tMatrixCellEntry mce = this.GetMC(rpt);\n\t\t\t\treturn new Rows(rpt, mce.Data);\n\t\t\t}\n\t\t\tif (g == null)\n\t\t\t\treturn null;\n\n\t\t\tGroupEntry ge = row.R.CurrentGroups[g.GetIndex(rpt)];\n\n\t\t\treturn new Rows(rpt, row.R, ge.StartRow, ge.EndRow, null);\n\t\t}\n\n\t\tinternal void DataRegionFinish()\n\t\t{\n\t\t\t// All dataregion names need to be saved!\n\t\t\tif (this.Name != null)\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tOwnerReport.LUAggrScope.Add(this.Name.Nm, this);\t\t// add to referenceable regions\n\t\t\t\t}\n\t\t\t\tcatch // wish duplicate had its own exception\n\t\t\t\t{\n\t\t\t\t\tOwnerReport.rl.LogError(8, \"Duplicate name '\" + this.Name.Nm + \"'.\");\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tinternal bool KeepTogether\n\t\t{\n\t\t\tget { return  _KeepTogether; }\n\t\t\tset {  _KeepTogether = value; }\n\t\t}\n\n\t\tinternal Expression NoRows\n\t\t{\n\t\t\tget { return  _NoRows; }\n\t\t\tset {  _NoRows = value; }\n\t\t}\n\n        internal bool PageBreakCondition\n        {\n            get\n            {\n                return false;\n            }\n            //set { _PageBreakCondition = value; }\t\n        }\n\n        internal string DataSetName\n\t\t{\n\t\t\tget { return  _DataSetName; }\n\t\t\tset {  _DataSetName = value; }\n\t\t}\n\n\t\tinternal DataSetDefn DataSetDefn\n\t\t{\n\t\t\tget { return  _DataSetDefn; }\n\t\t\tset {  _DataSetDefn = value; }\n\t\t}\n\n\t\tinternal bool PageBreakAtStart\n\t\t{\n\t\t\tget { return  _PageBreakAtStart; }\n\t\t\tset {  _PageBreakAtStart = value; }\n\t\t}\n\n\t\tinternal bool PageBreakAtEnd\n\t\t{\n\t\t\tget { return  _PageBreakAtEnd; }\n\t\t\tset {  _PageBreakAtEnd = value; }\n\t\t}\n\n\t\tinternal Filters Filters\n\t\t{\n\t\t\tget { return  _Filters; }\n\t\t\tset {  _Filters = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DataSetDefn.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Data;\nusing System.Data.SqlClient;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Information about a set of data that will be retrieved when report data is requested.\n\t///</summary>\n\t[Serializable]\n\tinternal class DataSetDefn : ReportLink\n\t{\n\t\tName _Name;\t\t\t// Name of the data set\n\t\t\t\t\t\t\t// Cannot be the same name as any data region or grouping\n\t\tFields _Fields;\t\t// The fields in the data set\n\t\tQuery _Query;\t\t// Information about the data source, including\n\t\t\t\t\t\t\t//  connection information, query, etc. required to\n\t\t\t\t\t\t\t//  get the data from the data source.\n\t\tstring _XmlRowData;\t// User specified data; instead of invoking query we use inline XML data\n\t\t\t\t\t\t\t//   This is particularlly useful for testing and reporting bugs when\n\t\t\t\t\t\t\t//   you don't have access to the datasource.\n\t\tstring _XmlRowFile; //   - File should be loaded for user data; if not found use XmlRowData\n\t\tTrueFalseAutoEnum _CaseSensitivity;\t// Indicates if the data is case sensitive; true/false/auto\n\t\t\t\t\t\t\t// if auto; should query data provider; Default false if data provider doesn't support.\n\t\tstring _Collation;\t// The locale to use for the collation sequence for sorting data.\n\t\t\t\t\t\t\t//  See Microsoft SQL Server collation codes (http://msdn.microsoft.com/library/enus/tsqlref/ts_ca-co_2e95.asp).\n\t\t\t\t\t\t\t// If no Collation is specified, the application\n\t\t\t\t\t\t\t// should attempt to derive the collation setting by\n\t\t\t\t\t\t\t// querying the data provider.\n\t\t\t\t\t\t\t// Defaults to the application�s locale settings if\n\t\t\t\t\t\t\t// the data provider does not support that method\n\t\t\t\t\t\t\t// or returns an unsupported or invalid value\n\t\tTrueFalseAutoEnum _AccentSensitivity;\t// Indicates whether the data is accent sensitive\n\t\t\t\t\t\t\t// True | False | Auto (Default)\n\t\t\t\t\t\t\t// If Auto is specified, the application should\n\t\t\t\t\t\t\t// attempt to derive the accent sensitivity setting\n\t\t\t\t\t\t\t// by querying the data provider. Defaults to False\n\t\t\t\t\t\t\t// if the data provider does not support that method.\n\t\tTrueFalseAutoEnum _KanatypeSensitivity;\t// Indicates if the data is kanatype sensitive\n\t\t\t\t\t\t\t// True | False | Auto (Default)\n\t\t\t\t\t\t\t// If Auto is specified, the Application should\n\t\t\t\t\t\t\t// attempt to derive the kanatype sensitivity\n\t\t\t\t\t\t\t// setting by querying the data provider. Defaults\n\t\t\t\t\t\t\t// to False if the data provider does not support\n\t\t\t\t\t\t\t// that method.\n\t\tTrueFalseAutoEnum _WidthSensitivity;\t// Indicates if the data is width sensitive\n\t\t\t\t\t\t\t// True | False | Auto (Default)\n\t\t\t\t\t\t\t// If Auto is specified, the Application should\n\t\t\t\t\t\t\t// attempt to derive the width sensitivity setting by\n\t\t\t\t\t\t\t// querying the data provider. Defaults to False if\n\t\t\t\t\t\t\t// the data provider does not support that method.\n\t\tFilters _Filters;\t// Filters to apply to each row of data in the data set\n        List<Textbox> _HideDuplicates;\t// holds any textboxes that use this as a hideduplicate scope\n\t\n\t\tinternal DataSetDefn(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Name=null;\n\t\t\t_Fields=null;\n\t\t\t_Query=null;\n\t\t\t_CaseSensitivity=TrueFalseAutoEnum.True;\t\n\t\t\t_Collation=null;\n\t\t\t_AccentSensitivity=TrueFalseAutoEnum.False;\n\t\t\t_KanatypeSensitivity=TrueFalseAutoEnum.False;\n\t\t\t_WidthSensitivity=TrueFalseAutoEnum.False;\n\t\t\t_Filters=null;\n\t\t\t_HideDuplicates=null;\n\t\t\t// Run thru the attributes\n\t\t\tforeach(XmlAttribute xAttr in xNode.Attributes)\n\t\t\t{\n\t\t\t\tswitch (xAttr.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"name\":\n\t\t\t\t\t\t_Name = new Name(xAttr.Value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"fields\":\n\t\t\t\t\t\t_Fields = new Fields(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"query\":\n\t\t\t\t\t\t_Query = new Query(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"rows\":\t// Extension !!!!!!!!!!!!!!!!!!!!!!!\n\t\t\t\t\tcase \"fyi:rows\":\n\t\t\t\t\t\t_XmlRowData = \"<?xml version='1.0' encoding='UTF-8'?><Rows>\" + xNodeLoop.InnerXml + \"</Rows>\";\n\t\t\t\t\t\tforeach(XmlAttribute xA in xNodeLoop.Attributes)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (xA.Name.ToLowerInvariant() == \"file\")\n\t\t\t\t\t\t\t\t_XmlRowFile = xA.Value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"casesensitivity\":\n\t\t\t\t\t\t_CaseSensitivity = TrueFalseAuto.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"collation\":\n\t\t\t\t\t\t_Collation = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"accentsensitivity\":\n\t\t\t\t\t\t_AccentSensitivity = TrueFalseAuto.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"kanatypesensitivity\":\n\t\t\t\t\t\t_KanatypeSensitivity = TrueFalseAuto.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"widthsensitivity\":\n\t\t\t\t\t\t_WidthSensitivity = TrueFalseAuto.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"filters\":\n\t\t\t\t\t\t_Filters = new Filters(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown DataSet element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.Name != null)\n\t\t\t\tOwnerReport.LUAggrScope.Add(this.Name.Nm, this);\t\t// add to referenceable TextBoxes\n\t\t\telse\n\t\t\t\tOwnerReport.rl.LogError(4, \"Name attribute must be specified in a DataSet.\");\n\n\t\t\tif (_Query == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"Query element must be specified in a DataSet.\");\n\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Query != null)         // query must be resolved before fields\n                await _Query.FinalPass();\n\t\t\tif (_Fields != null)\n                await _Fields.FinalPass();\n\t\t\tif (_Filters != null)\n                await _Filters.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal void AddHideDuplicates(Textbox tb)\n\t\t{\n\t\t\tif (_HideDuplicates == null)\n\t\t\t\t_HideDuplicates = new List<Textbox>();\n\t\t\t_HideDuplicates.Add(tb);\n\t\t}\n\n\t\tinternal async Task<bool> GetData(Report rpt)\n\t\t{\n\t\t\tResetHideDuplicates(rpt);\n\n            bool bRows = false;\n\t\t\tif (_XmlRowData != null)\n\t\t\t{\t\t// Override the query and provide data from XML\n\t\t\t\tstring xdata = await GetDataFile(rpt, _XmlRowFile);\n                if (xdata == null)\n                {\n                    xdata = _XmlRowData;\t\t\t\t\t// didn't find any data\n                }\n\n\t\t\t\tbRows = await _Query.GetData(rpt, xdata, _Fields, _Filters);\t// get the data (and apply the filters\n\t\t\t\treturn bRows;\n\t\t\t}\n\n            if (_Query == null)\n            {\n                return bRows;\n            }\n\n\t\t\tbRows = await _Query.GetData(rpt, this._Fields, _Filters);\t// get the data (and apply the filters\n            return bRows;\n\t\t}\n\n\t\tprivate async Task<string> GetDataFile(Report rpt, string file)\n\t\t{\n            if (file == null)\t\t// no file no data\n            {\n                return null;\n            }\n\n\t\t\tStreamReader fs=null;\n\t\t\tstring d=null;\n\t\t\tstring fullpath;\n\t\t\tstring folder = rpt.Folder;\n            if (folder == null || folder.Length == 0)\n            {\n                fullpath = file;\n            }\n            else\n            {\n                fullpath = folder + Path.DirectorySeparatorChar + file;\n            }\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\tfs = new StreamReader(fullpath);\n\t\t\t\td = await fs.ReadToEndAsync();\n\t\t\t}\n\t\t\tcatch (FileNotFoundException fe)\n\t\t\t{\n\t\t\t\trpt.rl.LogError(4, string.Format(\"XML data file {0} not found.\\n{1}\", fullpath, fe.StackTrace));\n\t\t\t\td = null;\n\t\t\t}\n\t\t\tcatch (Exception ge)\n\t\t\t{\n\t\t\t\trpt.rl.LogError(4, string.Format(\"XML data file error {0}\\n{1}\\n{2}\", fullpath, ge.Message, ge.StackTrace));\n\t\t\t\td = null;\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (fs != null)\n\t\t\t\t\tfs.Close();\n\t\t\t}\n\t\t\treturn d;\n\t\t}\n\n\t\tinternal async Task SetData(Report rpt, IDataReader dr)\n\t\t{\n            await Query.SetData(rpt, dr, _Fields, _Filters);\t\t// get the data (and apply the filters\n\t\t}\n\n\t\tinternal async Task SetData(Report rpt, DataTable dt)\n\t\t{\n            await Query.SetData(rpt, dt, _Fields, _Filters);\n\t\t}\n\n\t\tinternal async Task SetData(Report rpt, XmlDocument xmlDoc)\n\t\t{\n            await Query.SetData(rpt, xmlDoc, _Fields, _Filters);\n\t\t}\n\n\t\tinternal async Task SetData(Report rpt, IEnumerable ie)\n\t\t{\n            await Query.SetData(rpt, ie, _Fields, _Filters);\n\t\t}\n\n\t\tinternal void ResetHideDuplicates(Report rpt)\n\t\t{\n            if (_HideDuplicates == null)\n            {\n                return;\n            }\n\n            foreach (Textbox tb in _HideDuplicates)\n            {\n                tb.ResetPrevious(rpt);\n            }\n\t\t}\n\n\t\tinternal Name Name\n\t\t{\n\t\t\tget { return  _Name; }\n\t\t\tset {  _Name = value; }\n\t\t}\n\n\t\tinternal Fields Fields\n\t\t{\n\t\t\tget { return  _Fields; }\n\t\t\tset {  _Fields = value; }\n\t\t}\n\n\t\tinternal Query Query\n\t\t{\n\t\t\tget { return  _Query; }\n\t\t\tset {  _Query = value; }\n\t\t}\n\n\t\tinternal TrueFalseAutoEnum CaseSensitivity\n\t\t{\n\t\t\tget { return  _CaseSensitivity; }\n\t\t\tset {  _CaseSensitivity = value; }\n\t\t}\n\n\t\tinternal string Collation\n\t\t{\n\t\t\tget { return  _Collation; }\n\t\t\tset {  _Collation = value; }\n\t\t}\n\n\t\tinternal TrueFalseAutoEnum AccentSensitivity\n\t\t{\n\t\t\tget { return  _AccentSensitivity; }\n\t\t\tset {  _AccentSensitivity = value; }\n\t\t}\n\n\t\tinternal TrueFalseAutoEnum KanatypeSensitivity\n\t\t{\n\t\t\tget { return  _KanatypeSensitivity; }\n\t\t\tset {  _KanatypeSensitivity = value; }\n\t\t}\n\n\t\tinternal TrueFalseAutoEnum WidthSensitivity\n\t\t{\n\t\t\tget { return  _WidthSensitivity; }\n\t\t\tset {  _WidthSensitivity = value; }\n\t\t}\n\n\t\tinternal Filters Filters\n\t\t{\n\t\t\tget { return  _Filters; }\n\t\t\tset {  _Filters = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DataSetReference.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// The query to use to obtain a list of values for a parameter.   See ValidValues.\n\t///</summary>\n\t[Serializable]\n\tinternal class DataSetReference : ReportLink\n\t{\n\t\tstring _DataSetName;\t//Name of the data set to use.\n\t\tDataSetDefn _ds;\t\t// DataSet that matches the name\n\t\tstring _ValueField;\t\t//Name of the field to use for the values/defaults for the parameter\n\t\tstring _LabelField;\t\t//Name of the field to use for the value to display to the\t\t\n\t\t\t\t\t\t\t\t// user for the selection.  If not supplied or the returned\n\t\t\t\t\t\t\t\t// value is null, the value in the ValueField is used.\n\t\t\t\t\t\t\t\t//  not used for DefaultValue.\n\t\tField _vField;\t\t\t// resolved value name\n\t\tField _lField;\t\t\t// resolved label name\n\t\tinternal DataSetReference(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_DataSetName=null;\n\t\t\t_ValueField=null;\n\t\t\t_LabelField=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"DataSetName\":\n\t\t\t\t\t\t_DataSetName = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ValueField\":\n\t\t\t\t\t\t_ValueField = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"LabelField\":\n\t\t\t\t\t\t_LabelField = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown DataSetReference element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_DataSetName == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"DataSetReference DataSetName is required but not specified.\");\n\t\t\tif (_ValueField == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"DataSetReference ValueField is required but not specified for\" + _DataSetName==null? \"<unknown name>\": _DataSetName);\n\t\t}\n\t\t\n\t\toverride internal Task FinalPass()\n\t\t{\n\t\t\t_ds = OwnerReport.DataSetsDefn[this._DataSetName];\n\t\t\tif (_ds == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"DataSetReference refers to unknown data set '\" + _DataSetName + \"'\");\n\t\t\telse\n\t\t\t{\n\t\t\t\t_vField = _ds.Fields[_ValueField];\n\t\t\t\tif (_vField == null)\n\t\t\t\t\tOwnerReport.rl.LogError(8, \"ValueField refers to unknown field '\" + _ValueField + \"'\");\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif (_LabelField == null)\n\t\t\t\t\t\t_lField = _vField;\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t_lField = _ds.Fields[_LabelField];\n\t\t\t\t\t\tif (_lField == null)\n\t\t\t\t\t\t\tOwnerReport.rl.LogError(8, \"LabelField refers to unknown field '\" + _LabelField + \"'\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tinternal string DataSetName\n\t\t{\n\t\t\tget { return  _DataSetName; }\n\t\t\tset {  _DataSetName = value; }\n\t\t}\n\n\t\tinternal string ValueField\n\t\t{\n\t\t\tget { return  _ValueField; }\n\t\t\tset {  _ValueField = value; }\n\t\t}\n\n\t\tinternal string LabelField\n\t\t{\n\t\t\tget { return  _LabelField; }\n\t\t\tset {  _LabelField = value; }\n\t\t}\n\n\t\tinternal async Task<(string[] displayValues, object[] dataValues)> SupplyValues(Report rpt)\n\t\t{\n\t\t\tRows rows = _ds.Query.GetMyData(rpt);\n\t\t\tif (rows == null)\t\t// do we already have data?\n\t\t\t{\n\t\t\t\t// TODO:  this is wasteful;  likely to reretrieve the data again when report run with parameters\n\t\t\t\t//   should mark a dataset as only having one retrieval???\n\t\t\t\tbool lConnect = _ds.Query.DataSourceDefn.IsConnected(rpt);\n\t\t\t\tif (!lConnect)\n\t\t\t\t\tawait _ds.Query.DataSourceDefn.ConnectDataSource(rpt);  // connect; since not already connected\n                await _ds.GetData(rpt);\t\t\t\t\t\t\t\t\t// get the data\n\t\t\t\tif (!lConnect)\t\t\t\t\t\t\t\t\t\t// if we connected; then\n\t\t\t\t\t_ds.Query.DataSourceDefn.CleanUp(rpt);\t\t\t\t//   we cleanup\n\t\t\t\trows = _ds.Query.GetMyData(rpt);\n\t\t\t\tif (rows == null)\t\t\t// any data now?\n\t\t\t\t\treturn (null, null);\t\t\t\t\t// no out of luck\n\t\t\t}\n\n\t\t\tvar displayValues = new string[rows.Data.Count];\n\t\t\tvar dataValues = new object[displayValues.Length];\n\t\t\tint index=0;\n\t\t\tobject o;\n\t\t\tforeach (Row r in rows.Data)\n\t\t\t{\n\t\t\t\tdataValues[index] = r.Data[_vField.ColumnNumber];\n\t\t\t\to = r.Data[_lField.ColumnNumber];\n\t\t\t\tif (o == null || o == DBNull.Value)\n\t\t\t\t\tdisplayValues[index] = \"\";\n\t\t\t\telse\n\t\t\t\t\tdisplayValues[index] = o.ToString();\n\t\t\t\tindex++;\n\t\t\t}\n\t\t\treturn (displayValues, dataValues);\n        }\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DataSetsDefn.cs",
    "content": "\n\nusing System;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.Threading.Tasks;\nusing System.Xml;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// The sets of data (defined by DataSet) that are retrieved as part of the Report.\n\t///</summary>\n\t[Serializable]\n\tinternal class DataSetsDefn : ReportLink\n\t{\n\t\tIDictionary _Items;\t\t\t// list of report items\n\n\t\tinternal DataSetsDefn(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tif (xNode.ChildNodes.Count < 10)\n\t\t\t\t_Items = new ListDictionary();\t// Hashtable is overkill for small lists\n\t\t\telse\n\t\t\t\t_Items = new Hashtable(xNode.ChildNodes.Count);\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (xNodeLoop.Name == \"DataSet\")\n\t\t\t\t{\n\t\t\t\t\tDataSetDefn ds = new DataSetDefn(r, this, xNodeLoop);\n\t\t\t\t\tif (ds != null && ds.Name != null)\n\t\t\t\t\t\t_Items.Add(ds.Name.Nm, ds);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinternal DataSetDefn this[string name]\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\treturn _Items[name] as DataSetDefn;\n\t\t\t}\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (DataSetDefn ds in _Items.Values)\n\t\t\t{\n\t\t\t\tawait ds.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tinternal async Task<bool> GetData(Report rpt)\n\t\t{\n            bool haveRows = false;\n\t\t\tforeach (DataSetDefn ds in _Items.Values)\n\t\t\t{\n\t\t\t\thaveRows |= await ds.GetData(rpt);\n\t\t\t}\n\n\t\t\treturn haveRows;\n\t\t}\n\n\t\tinternal IDictionary Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DataSourceDefn.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Data;\nusing System.Data.SqlClient;\nusing System.Data.OleDb;\nusing System.Data.Odbc;\nusing System.IO;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing System.Threading.Tasks;\nusing System.Data.Common;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Information about the data source (e.g. a database connection string).\n\t///</summary>\n\t[Serializable]\n\tinternal class DataSourceDefn : ReportLink\n\t{\n\t\tName _Name;\t\t// The name of the data source\n\t\t\t\t\t\t// Must be unique within the report\n\t\tbool _Transaction;\t// Indicates the data sets that use this data\n\t\t\t\t\t\t\t// source should be executed in a single transaction.\n\t\tConnectionProperties _ConnectionProperties;\t//Information about how to connect to the data source\n\t\tstring _DataSourceReference;\t//The full path (e.g.\n\t\t\t\t\t\t\t// �/salesreports/salesdatabase�) or relative path\n\t\t\t\t\t\t\t// (e.g. �salesdatabase�) to a data source\n\t\t\t\t\t\t\t// reference. Relative paths start in the same\n\t\t\t\t\t\t\t// location as the report.\t\t\n\t\t[NonSerialized] IDbConnection _ParseConnection;\t// while parsing we sometimes need to connect\n\n\t\tinternal DataSourceDefn(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Name=null;\n\t\t\t_Transaction=false;\n\t\t\t_ConnectionProperties=null;\n\t\t\t_DataSourceReference=null;\n\t\t\t// Run thru the attributes\n\t\t\tforeach(XmlAttribute xAttr in xNode.Attributes)\n\t\t\t{\n\t\t\t\tswitch (xAttr.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Name\":\n\t\t\t\t\t\t_Name = new Name(xAttr.Value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Transaction\":\n\t\t\t\t\t\t_Transaction = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ConnectionProperties\":\n\t\t\t\t\t\t_ConnectionProperties = new ConnectionProperties(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"DataSourceReference\":\n\t\t\t\t\t\t_DataSourceReference = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown DataSource element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Name == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"DataSource Name is required but not specified.\");\n\t\t\telse if (_ConnectionProperties == null && _DataSourceReference == null)\n\t\t\t\tOwnerReport.rl.LogError(8, string.Format(\"Either ConnectionProperties or DataSourceReference must be specified for DataSource {0}.\", this._Name.Nm));\n\t\t\telse if (_ConnectionProperties != null && _DataSourceReference != null)\n\t\t\t\tOwnerReport.rl.LogError(8, string.Format(\"Either ConnectionProperties or DataSourceReference must be specified for DataSource {0} but not both.\", this._Name.Nm));\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_ConnectionProperties != null)\n                await _ConnectionProperties.FinalPass();\n\n            await ConnectDataSource(null);\n\t\t\treturn;\n\t\t}\n\n\t\tinternal bool IsConnected(Report rpt)\n\t\t{\n\t\t\treturn GetConnection(rpt) == null? false: true;\n\t\t}\n\n\t\tinternal bool AreSameDataSource(DataSourceDefn dsd)\n\t\t{\n\t\t\tif (this.DataSourceReference != null &&\n\t\t\t\tthis.DataSourceReference == dsd.DataSourceReference)\n\t\t\t\treturn true;\t\t// datasource references are the same\n\n\t\t\tif (this.ConnectionProperties == null ||\n\t\t\t\tdsd.ConnectionProperties == null)\n\t\t\t\treturn false;\n\n\t\t\tConnectionProperties cp1 = this.ConnectionProperties;\n\t\t\tConnectionProperties cp2 = dsd.ConnectionProperties;\n\t\t\treturn (cp1.DataProvider == cp2.DataProvider &&\n\t\t\t\tcp1.ConnectstringValue == cp2.ConnectstringValue &&\n\t\t\t\tcp1.IntegratedSecurity == cp2.IntegratedSecurity);\n\t\t}\n\n\t\tasync internal Task<bool> ConnectDataSource(Report rpt)\n        {\n            IDbConnection cn = GetConnection(rpt);\n            if (cn != null)\n            {\n                return true;\n            }\n\n            if (_DataSourceReference != null)\n            {\n                await ConnectDataSourceReference(rpt);\t// this will create a _ConnectionProperties\n            }\n\n            if (_ConnectionProperties == null ||\n                _ConnectionProperties.ConnectstringValue == null)\n            {\n                return false;\n            }\n\n            bool rc = false;\n            try\n            {\n                cn = RdlEngineConfig.GetConnection(_ConnectionProperties.DataProvider,\n                    await _ConnectionProperties.Connectstring(rpt));\n                if (cn != null)\n                {\n\t\t\t\t\tif (cn is DbConnection dbConnection)\n\t\t\t\t\t{\n\t\t\t\t\t\tawait dbConnection.OpenAsync();\n                    }\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tcn.Open();\n\t\t\t\t\t}\n                    rc = true;\n                }\n            }\n            catch (Exception e)\n            {\n                cn = HandleConnectionError(rpt, cn, e);\n            }\n\n            ConnectDataSourceLogInfoAndCache(rpt, cn);\n            return rc;\n        }\n\n        async internal Task<bool> ConnectDataSourceAsync(Report rpt)\n        {\n            IDbConnection cn = GetConnection(rpt);\n            if (cn != null)\n            {\n                return true;\n            }\n\n            if (_DataSourceReference != null)\n            {\n                await ConnectDataSourceReference(rpt);\t// this will create a _ConnectionProperties\n            }\n\n            if (_ConnectionProperties == null ||\n                _ConnectionProperties.ConnectstringValue == null)\n            {\n                return false;\n            }\n\n            bool rc = false;\n            try\n            {\n                cn = RdlEngineConfig.GetConnection(_ConnectionProperties.DataProvider,\n                    await _ConnectionProperties.Connectstring(rpt));\n                if (cn != null)\n                {\n                    if (cn is DbConnection dbConnection)\n                    {\n                        await dbConnection.OpenAsync();\n                    }\n                    else\n                    {\n                        cn.Open();\n                    }\n                    rc = true;\n                }\n            }\n            catch (Exception e)\n            {\n                cn = HandleConnectionError(rpt, cn, e);\n            }\n\n            ConnectDataSourceLogInfoAndCache(rpt, cn);\n            return rc;\n        }\n\n        private void ConnectDataSourceLogInfoAndCache(Report rpt, IDbConnection cn)\n        {\n            if (cn != null)\n                SetSysConnection(rpt, cn);\n            else\n            {\n                string err = string.Format(\"Unable to connect to datasource '{0}'.\", _Name.Nm);\n                if (rpt == null)\n                    OwnerReport.rl.LogError(4, err);    // error occurred during parse phase\n                else\n                    rpt.rl.LogError(4, err);\n            }\n        }\n\n        private IDbConnection HandleConnectionError(Report rpt, IDbConnection cn, Exception e)\n        {\n            string err = string.Format(\"DataSource '{0}'.\\r\\n{1}\", _Name,\n                                e.InnerException == null ? e.Message : e.InnerException.Message);\n            if (rpt == null)\n                OwnerReport.rl.LogError(4, err);    // error occurred during parse phase\n            else\n                rpt.rl.LogError(4, err);\n            if (cn != null)\n            {\n                cn.Close();\n                cn = null;\n            }\n\n            return cn;\n        }\n\n        async Task ConnectDataSourceReference(Report rpt)\n\t\t{\n\t\t\tif (_ConnectionProperties != null)\n\t\t\t\treturn;\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\tstring file;\n\t\t\t\tstring folder = rpt == null? OwnerReport.ParseFolder: rpt.Folder;\n                if (folder == null)\n                {   // didn't specify folder; check to see if we have a fully formed name \n                    if (!_DataSourceReference.EndsWith(\".dsr\", StringComparison.InvariantCultureIgnoreCase))\n                        file = _DataSourceReference + \".dsr\";\n                    else\n                        file = _DataSourceReference;\n                }\n                else if (_DataSourceReference[0] != Path.DirectorySeparatorChar)\n                    file = folder + Path.DirectorySeparatorChar + _DataSourceReference + \".dsr\";\n                else\n                    file = folder + _DataSourceReference + \".dsr\";\n\n\t\t\t\tstring pswd = OwnerReport.GetDataSourceReferencePassword == null? \n\t\t\t\t\t\t\t\t\tnull: OwnerReport.GetDataSourceReferencePassword();\n\t\t\t\tif (pswd == null)\n\t\t\t\t\tthrow new Exception(Strings.DataSourceDefn_Error_NoPasswordForDSR);\n\n\t\t\t\tstring xml = Rdl.DataSourceReference.Retrieve(file, pswd);\n\t\t\t\tXmlDocument xDoc = new XmlDocument();\n\t\t\t\txDoc.LoadXml(xml);\n\t\t\t\tXmlNode xNodeLoop = xDoc.FirstChild;\n\t\t\t\t\n\t\t\t\t_ConnectionProperties = new ConnectionProperties(OwnerReport, this, xNodeLoop);\n                await _ConnectionProperties.FinalPass();\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\tOwnerReport.rl.LogError(4, e.Message);\n\t\t\t\t_ConnectionProperties = null;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tinternal bool IsUserConnection(Report rpt)\n\t\t{\n\t\t\tif (rpt == null)\n\t\t\t\treturn false;\n\n\t\t\tobject uc = rpt.Cache.Get(this, \"UserConnection\");\n\t\t\treturn uc == null? false: true;\n\t\t}\n\n\t\tinternal void SetUserConnection(Report rpt, IDbConnection cn)\n\t\t{\n            if (cn == null)\n                rpt.Cache.Remove(this, \"UserConnection\");\n            else\n            {\n                rpt.Cache.AddReplace(this, \"UserConnection\", cn);\n            }\n\t\t}\n\n\t\tprivate void SetSysConnection(Report rpt, IDbConnection cn)\n\t\t{\n\t\t\tif (rpt == null)\n\t\t\t\t_ParseConnection = cn;\n\t\t\telse if (cn == null)\n\t\t\t\trpt.Cache.Remove(this, \"SysConnection\");\n\t\t\telse\n\t\t\t\trpt.Cache.Add(this, \"SysConnection\", cn);\n\t\t}\n\n\t\tinternal IDbConnection GetConnection(Report rpt)\n\t\t{\n\t\t\tIDbConnection cn;\n\n            if (rpt == null)\n            {\n                return _ParseConnection;\n            }\n\n\t\t\tcn = rpt.Cache.Get(this, \"UserConnection\") as IDbConnection;\n\t\t\tif (cn == null)\n\t\t\t{\n\t\t\t\tcn = rpt.Cache.Get(this, \"SysConnection\") as IDbConnection;\n\t\t\t}\n\t\t\treturn cn;\n\t\t}\n\n\t\tinternal void CleanUp(Report rpt)\n\t\t{\n\t\t\tif (IsUserConnection(rpt))\n\t\t\t\treturn;\n\t\t\tIDbConnection cn = GetConnection(rpt);\n\t\t\tif (cn == null)\n\t\t\t\treturn;\n\n\t\t\ttry \n\t\t\t{\n\t\t\t\tcn.Close();\n\t\t\t\t// cn.Dispose();\t\t// not good for connection pooling\n\t\t\t}\n\t\t\tcatch (Exception ex) \n\t\t\t{\t// report the error but keep going\n\t\t\t\tif (rpt != null)\n\t\t\t\t\trpt.rl.LogError(4, string.Format(\"Error closing connection. {0}\", ex.Message));\n\t\t\t\telse\n\t\t\t\t\tthis.OwnerReport.rl.LogError(4, string.Format(\"Error closing connection. {0}\", ex.Message));\n\t\t\t}\n\t\t\tSetSysConnection(rpt, null);\t// get rid of connection from cache\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Name Name\n\t\t{\n\t\t\tget { return  _Name; }\n\t\t\tset {  _Name = value; }\n\t\t}\n\n\t\tinternal bool Transaction\n\t\t{\n\t\t\tget { return  _Transaction; }\n\t\t\tset {  _Transaction = value; }\n\t\t}\n\n\t\tinternal ConnectionProperties ConnectionProperties\n\t\t{\n\t\t\tget { return  _ConnectionProperties; }\n\t\t\tset {  _ConnectionProperties = value; }\n\t\t}\n\n\t\tinternal IDbConnection SqlConnect(Report rpt)\n\t\t{\n\t\t\treturn GetConnection(rpt);\n\t\t}\n\n\t\tinternal string DataSourceReference\n\t\t{\n\t\t\tget { return  _DataSourceReference; }\n\t\t\tset {  _DataSourceReference = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DataSourceReference.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.IO;\nusing System.Security.Cryptography;\nusing System.Text;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    ///<summary>\n    /// Utitlity class for reading and writing a DataSourceReference file\n    ///</summary>\n    public sealed class DataSourceReference\n    {\n        const int IV_SIZE = 16;\n        const int KEY_SIZE = 32;\n        /// <summary>\n        /// Create the named file containing the encrypted input data\n        /// </summary>\n        /// <param name=\"filename\">Output file name</param>\n        /// <param name=\"indata\">Input data to place in file encrypted.</param>\n        /// <param name=\"pswd\">Password phrase to use when encrypting</param>\n        static public void Create(string filename, string indata, string pswd)\n        {\n            // create the salt\n            byte[] salt = new byte[IV_SIZE];\n            #if NET6_0_OR_GREATER\n            RandomNumberGenerator.Fill(salt);\n#else\n            RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();\n            rng.GetBytes(salt);\n            rng.Dispose();\n            #endif\n\n            // create the key from the password phrase\n            var pdb = new Rfc2898DeriveBytes(pswd, salt, 10000, HashAlgorithmName.SHA256);\n            byte[] key = pdb.GetBytes(KEY_SIZE);\n\n            // Create an instance of the Aes class\n            using (Aes aes = Aes.Create())\n            using (MemoryStream ms = new MemoryStream())\n            using (CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(key, salt), CryptoStreamMode.Write))\n            {\n                byte[] ta = Encoding.UTF8.GetBytes(indata);\n                cs.Write(ta, 0, ta.Length);\n                cs.Close();\n\n                using (FileStream fs = File.OpenWrite(filename))\n                {\n                    // Write the salt to the beginning of the file\n                    fs.Write(salt, 0, salt.Length);\n                    // Write the encrypted data\n                    byte[] ba = ms.ToArray();\n                    fs.Write(ba, 0, ba.Length);\n                }\n            }\n        }\n\n        /// <summary>\n        /// Retrieve the string data from an encrypted file.   Retrieve assumes \n        /// that Create was used to create the file.\n        /// </summary>\n        /// <param name=\"filename\">File name to retrieve encrypted data from.</param>\n        /// <param name=\"pswd\">Password phrase used when data was encrypted.</param>\n        /// <returns>Unencrypted string contents of file</returns>\n        static public string Retrieve(string filename, string pswd)\n        {\n            byte[] salt = new byte[IV_SIZE];\n            byte[] enc;\n\n            using (FileStream fs = File.OpenRead(filename))\n            {\n                fs.Read(salt, 0, salt.Length);\n                enc = new byte[fs.Length - salt.Length];\n                fs.Read(enc, 0, enc.Length);\n            }\n\n            // create the key from the password phrase\n            var pdb = new Rfc2898DeriveBytes(pswd, salt, 10000, HashAlgorithmName.SHA256);\n            byte[] key = pdb.GetBytes(KEY_SIZE);\n\n            // Create an instance of the Aes class\n            using (Aes aes = Aes.Create())\n            using (MemoryStream ms = new MemoryStream(enc))\n            using (CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(key, salt), CryptoStreamMode.Read))\n            using (MemoryStream ms2 = new MemoryStream())\n            {\n                byte[] ta = new byte[256];\n                int count;\n                while ((count = cs.Read(ta, 0, ta.Length)) > 0)\n                {\n                    ms2.Write(ta, 0, count);\n                }\n                return Encoding.UTF8.GetString(ms2.ToArray());\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DataSourcesDefn.cs",
    "content": "\n\nusing System;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.Threading.Tasks;\nusing System.Xml;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Contains list of DataSource about how to connect to sources of data used by the DataSets.\n\t///</summary>\n\t[Serializable]\n\tinternal class DataSourcesDefn : ReportLink\n\t{\n\t\tListDictionary _Items;\t\t\t// list of report items\n\n\t\tinternal DataSourcesDefn(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t// Run thru the attributes\n//\t\t\tforeach(XmlAttribute xAttr in xNode.Attributes)\n//\t\t\t{\n//\t\t\t}\n\t\t\t_Items = new ListDictionary();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (xNodeLoop.Name == \"DataSource\")\n\t\t\t\t{\n\t\t\t\t\tDataSourceDefn ds = new DataSourceDefn(r, this, xNodeLoop);\n\t\t\t\t\tif (ds.Name != null)\n\t\t\t\t\t\t_Items.Add(ds.Name.Nm, ds);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For DataSources at least one DataSource is required.\");\n\t\t}\n\n\t\tpublic DataSourceDefn this[string name]\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\treturn _Items[name] as DataSourceDefn;\n\t\t\t}\n\t\t}\n\n\t\tinternal void CleanUp(Report rpt)\t\t// closes any connections\n\t\t{\n\t\t\tforeach (DataSourceDefn ds in _Items.Values)\n\t\t\t{\n\t\t\t\tds.CleanUp(rpt);\n\t\t\t}\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (DataSourceDefn ds in _Items.Values)\n\t\t\t{\n                await ds.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tasync internal Task<bool> ConnectDataSources(Report rpt)\n\t\t{\n\t\t\t// Handle any parent connections if any\t(ie we're in a subreport and want to use parent report connections\n\t\t\tif (rpt.ParentConnections != null && rpt.ParentConnections.Items != null)\n\t\t\t{\t// we treat subreport merged transaction connections as set by the User \n\t\t\t\tforeach (DataSourceDefn ds in _Items.Values)\n\t\t\t\t{\n\t\t\t\t\tforeach (DataSourceDefn dsp in rpt.ParentConnections.Items.Values)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (ds.AreSameDataSource(dsp))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tds.SetUserConnection(rpt, dsp.GetConnection(rpt));\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tforeach (DataSourceDefn ds in _Items.Values)\n\t\t\t{\n\t\t\t\tawait ds.ConnectDataSourceAsync(rpt);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\n\t\tinternal ListDictionary Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DataType.cs",
    "content": "\n\nusing System;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t///Data types\n\t///</summary>\n\tpublic class DataType\n\t{\n        static public Type GetStyleType(string s)\n        {\n            TypeCode t = GetStyle(s, (ReportDefn)null);\n            return XmlUtil.GetTypeFromTypeCode(t);\n        }\n\n\t\tstatic internal TypeCode GetStyle(string s, ReportDefn r)\n\t\t{\n\t\t\tTypeCode rs;\n\n\t\t\tif (s.StartsWith(\"System.\"))\n\t\t\t\ts = s.Substring(7);\n\n\t\t\tswitch (s)\n\t\t\t{\t\t\n\t\t\t\tcase \"Boolean\":\n\t\t\t\t\trs = TypeCode.Boolean;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"DateTime\":\n\t\t\t\t\trs = TypeCode.DateTime;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Decimal\":\n\t\t\t\t\trs = TypeCode.Decimal;\n\t\t\t\t\tbreak;\n                case \"Byte\":\n\t\t\t\tcase \"Integer\":\n\t\t\t\tcase \"Int16\":\n\t\t\t\tcase \"Int32\":\n\t\t\t\t\trs = TypeCode.Int32;\n\t\t\t\t\tbreak;   \n\t\t\t\tcase \"Int64\":\n\t\t\t\t\trs = TypeCode.Int64;\n\t\t\t\t\tbreak;\n                case \"UInt16\":\n                case \"UInt32\":\n                    rs = TypeCode.UInt32;\n                    break;\n                case \"UInt64\":\n                    rs = TypeCode.UInt64;\n                    break;   \n\t\t\t\tcase \"Float\":\n\t\t\t\tcase \"Single\":\n\t\t\t\tcase \"Double\":\n\t\t\t\t\trs = TypeCode.Double;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"String\":\n\t\t\t\tcase \"Char\":\n\t\t\t\t\trs = TypeCode.String;\n\t\t\t\t\tbreak;\n                case \"Object\":\n\t\t\t\tcase \"TimeSpan\":\n                    rs = TypeCode.Object;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t// user error\n\t\t\t\t\trs = TypeCode.Object;\n                    if (r != null)\n\t\t\t\t\t    r.rl.LogError(4, string.Format(\"'{0}' is not a recognized type, assuming System.Object.\", s));\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn rs;\n\t\t}\n\n\t\tstatic internal bool IsNumeric(TypeCode tc)\n\t\t{\n\t\t\tswitch (tc)\n\t\t\t{\n\t\t\t\tcase TypeCode.Int64:\n\t\t\t\tcase TypeCode.Int32:\n                case TypeCode.UInt64:\n                case TypeCode.UInt32:\n\t\t\t\tcase TypeCode.Double:\n\t\t\t\tcase TypeCode.Decimal:\n\t\t\t\t\treturn true;\n\t\t\t\tdefault:\t\t// user error\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DataValue.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// In charts, the DataValue defines a single value for the DataPoint.\n\t///</summary>\n\t[Serializable]\n\tinternal class DataValue : ReportLink\n\t{\n\t\tExpression _Value;\t// (Variant) Value expression. Same restrictions as\n\t\t\t\t\t\t\t//  the expressions in a matrix cell\t\t\n\t\tinternal DataValue(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Value=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"value\":\n\t\t\t\t\t\t_Value = new Expression(r, this, xNodeLoop, ExpressionType.Variant);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Value == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"DataValue requires the Value element.\");\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Value != null)\n                await _Value.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\n\t\tinternal Expression Value\n\t\t{\n\t\t\tget { return  _Value; }\n\t\t\tset {  _Value = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DataValues.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// In Charts, the collection of data values for a single data point.\n\t///</summary>\n\t[Serializable]\n\tinternal class DataValues : ReportLink\n\t{\n        List<DataValue> _Items;\t\t\t// list of DataValue\n\n\t\tinternal DataValues(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tDataValue dv;\n            _Items = new List<DataValue>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"datavalue\":\n\t\t\t\t\t\tdv = new DataValue(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tdv=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown DataValues element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (dv != null)\n\t\t\t\t\t_Items.Add(dv);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For DataValues at least one DataValue is required.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (DataValue dv in _Items)\n\t\t\t{\n                await dv.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<DataValue> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DefaultValue.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// The default value for a parameter.\n\t///</summary>\n\t[Serializable]\n\tinternal class DefaultValue : ReportLink\n\t{\n\t\t// Only one of Values and DataSetReference can be specified.\n\t\tDataSetReference _DataSetReference;\t// The query to execute to obtain the default value(s) for the parameter.\n\t\t\t\t\t\t\t\t\t// The default is the first value of the ValueField.\n\t\tValues _Values;\t\t// The default values for the parameter\n\n\t\tinternal DefaultValue(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_DataSetReference=null;\n\t\t\t_Values=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"DataSetReference\":\n\t\t\t\t\t\t_DataSetReference = new DataSetReference(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Values\":\n\t\t\t\t\t\t_Values = new Values(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_DataSetReference != null)\n                await _DataSetReference.FinalPass();\n\t\t\tif (_Values != null)\n                await _Values.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal DataSetReference DataSetReference\n\t\t{\n\t\t\tget { return  _DataSetReference; }\n\t\t\tset {  _DataSetReference = value; }\n\t\t}\n\n\t\tinternal async Task<object[]> GetValue(Report rpt)\n\t\t{\n\t\t\tif (_Values != null)\n\t\t\t\treturn await ValuesCalc(rpt);\n\t\t\tobject[] dValues = this.GetDataValues(rpt);\n\t\t\tif (dValues != null)\n\t\t\t\treturn dValues;\n\n\t\t\tstring[] dsValues;\n\t\t\tif (_DataSetReference != null)\n\t\t\t\t(dsValues, dValues) = await _DataSetReference.SupplyValues(rpt);\n\n\t\t\tthis.SetDataValues(rpt, dValues);\n\t\t\treturn dValues;\n\t\t}\n\n\t\tinternal Values Values\n\t\t{\n\t\t\tget { return  _Values; }\n\t\t\tset {  _Values = value; }\n\t\t}\n\n\t\tinternal async Task<object[]> ValuesCalc(Report rpt)\n\t\t{\n\t\t\tif (_Values == null)\n\t\t\t\treturn null;\n\t\t\tobject[] result = new object[_Values.Count];\n\t\t\tint index=0;\n\t\t\tforeach (Expression v in _Values)\n\t\t\t{\n\t\t\t\tresult[index++] = await v.Evaluate(rpt, null);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tprivate object[] GetDataValues(Report rpt)\n\t\t{\n\t\t\treturn rpt.Cache.Get(this, \"datavalues\") as object[];\n\t\t}\n\n\t\tprivate void SetDataValues(Report rpt, object[] vs)\n\t\t{\n\t\t\tif (vs == null)\n\t\t\t\trpt.Cache.Remove(this, \"datavalues\");\n\t\t\telse\n\t\t\t\trpt.Cache.AddReplace(this, \"datavalues\", vs);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Details.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.IO;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// For tabular reports, defines the detail rows with grouping and sorting.\n\t///</summary>\n\t[Serializable]\n\tinternal class Details : ReportLink\n\t{\n\t\tTableRows _TableRows;\t// The details rows for the table. The details rows\n\t\t\t\t\t\t\t\t// cannot contain any DataRegions in any of their TableCells.\n\t\tGrouping _Grouping;\t\t// The expressions to group the detail data by\n\t\tSorting _Sorting;\t\t// The expressions to sort the detail data by\n\t\tVisibility _Visibility;\t// Indicates if the details should be hidden\t\n\t\tTextbox _ToggleTextbox;\t//  resolved TextBox for toggling visibility\n\t\n\t\tinternal Details(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_TableRows=null;\n\t\t\t_Grouping=null;\n\t\t\t_Sorting=null;\n\t\t\t_Visibility=null;\n\t\t\t_ToggleTextbox = null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"TableRows\":\n\t\t\t\t\t\t_TableRows = new TableRows(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Grouping\":\n\t\t\t\t\t\t_Grouping = new Grouping(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Sorting\":\n\t\t\t\t\t\t_Sorting = new Sorting(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Visibility\":\n\t\t\t\t\t\t_Visibility = new Visibility(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Details element \" + xNodeLoop.Name + \" ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_TableRows == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"Details requires the TableRows element.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n            await _TableRows.FinalPass();\n\t\t\tif (_Grouping != null)\n                await _Grouping.FinalPass();\n\t\t\tif (_Sorting != null)\n                await _Sorting.FinalPass();\n\t\t\tif (_Visibility != null)\n\t\t\t{\n                await _Visibility.FinalPass();\n\t\t\t\tif (_Visibility.ToggleItem != null)\n\t\t\t\t{\n\t\t\t\t\t_ToggleTextbox = (Textbox) (OwnerReport.LUReportItems[_Visibility.ToggleItem]);\n\t\t\t\t\tif (_ToggleTextbox != null)\n\t\t\t\t\t\t_ToggleTextbox.IsToggle = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tinternal async Task Run(IPresent ip, Rows rs, int start, int end)\n\t\t{\n\t\t\t// if no rows output or rows just leave\n\t\t\tif (rs == null || rs.Data == null)\n\t\t\t\treturn;\n            if (this.Visibility != null && await Visibility.IsHidden(ip.Report(), rs.Data[start]) && Visibility.ToggleItem == null)\n                return;                 // not visible\n\n\t\t\tfor (int r=start; r <= end; r++)\n\t\t\t{\n                await _TableRows.Run(ip, rs.Data[r]);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tinternal async Task RunPage(Pages pgs, Rows rs, int start, int end, float footerHeight)\n\t\t{\n\t\t\t// if no rows output or rows just leave\n\t\t\tif (rs == null || rs.Data == null)\n\t\t\t\treturn;\n\n            if (this.Visibility != null && await Visibility.IsHidden(pgs.Report, rs.Data[start]))\n                return;                 // not visible\n\n\t\t\tPage p;\n\n\t\t\tRow row;\n\t\t\tfor (int r=start; r <= end; r++)\n\t\t\t{\n\t\t\t\tp = pgs.CurrentPage;\t\t\t// this can change after running a row\n\t\t\t\trow = rs.Data[r];\n\t\t\t\tfloat hrows = await HeightOfRows(pgs, row);\t// height of all the rows in the details\n\t\t\t\tfloat height = p.YOffset + hrows;\n\n                // add the footerheight that must be on every page\n                height += await OwnerTable.GetPageFooterHeight(pgs, row);\n\n\t\t\t\tif (r == end) \n\t\t\t\t\theight += footerHeight;\t\t// on last row; may need additional room for footer\n\t\t\t\tif (height > pgs.BottomOfPage)\n\t\t\t\t{\n                    await OwnerTable.RunPageFooter(pgs, row, false);\n\t\t\t\t\tp = OwnerTable.RunPageNew(pgs, p);\n                    await OwnerTable.RunPageHeader(pgs, row, false, null);\n                    await _TableRows.RunPage(pgs, row, true);   // force checking since header + hrows might be > BottomOfPage\n                }\n                else\n                    await _TableRows.RunPage(pgs, row, hrows > pgs.BottomOfPage);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n  \n\t\tinternal TableRows TableRows\n\t\t{\n\t\t\tget { return  _TableRows; }\n\t\t\tset {  _TableRows = value; }\n\t\t}\n\n\t\tinternal async Task<float> HeightOfRows(Pages pgs, Row r)\n\t\t{\n            if (this.Visibility != null && await Visibility.IsHidden(pgs.Report, r))\n            {\n                return 0;\n            }\n\n\t\t\treturn await _TableRows.HeightOfRows(pgs, r);\n\t\t}\n\n\t\tinternal Grouping Grouping\n\t\t{\n\t\t\tget { return  _Grouping; }\n\t\t\tset {  _Grouping = value; }\n\t\t}\n\n\t\tinternal Sorting Sorting\n\t\t{\n\t\t\tget { return  _Sorting; }\n\t\t\tset {  _Sorting = value; }\n\t\t}\n\n\t\tinternal Table OwnerTable\n\t\t{\n\t\t\tget { return (Table) (this.Parent); }\n\t\t}\n\n\t\tinternal Visibility Visibility\n\t\t{\n\t\t\tget { return  _Visibility; }\n\t\t\tset {  _Visibility = value; }\n\t\t}\n\n\t\tinternal Textbox ToggleTextbox\n\t\t{\n\t\t\tget { return  _ToggleTextbox; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Drillthrough.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Defines information needed for creating links to URLs in a report.  Primarily HTML.\n\t///</summary>\n\t[Serializable]\n\tinternal class Drillthrough : ReportLink\n\t{\n\t\tstring _ReportName;\t// URL The path of the drillthrough report. Paths may be\n\t\t\t\t\t\t\t// absolute or relative.\n\t\tDrillthroughParameters _DrillthroughParameters;\t// Parameters to the drillthrough report\t\t\n\t\n\t\tinternal Drillthrough(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_ReportName=null;\n\t\t\t_DrillthroughParameters=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"reportname\":\n\t\t\t\t\t\t_ReportName = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"parameters\":\n\t\t\t\t\t\t_DrillthroughParameters = new DrillthroughParameters(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_ReportName == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"Drillthrough requires the ReportName element.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_DrillthroughParameters != null)\n                await _DrillthroughParameters.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal string ReportName\n\t\t{\n\t\t\tget { return  _ReportName; }\n\t\t\tset {  _ReportName = value; }\n\t\t}\n\n\t\tinternal DrillthroughParameters DrillthroughParameters\n\t\t{\n\t\t\tget { return  _DrillthroughParameters; }\n\t\t\tset {  _DrillthroughParameters = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DrillthroughParameter.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// A drillthrough parameter.\n\t///</summary>\n\t[Serializable]\n\tinternal class DrillthroughParameter : ReportLink\n\t{\n\t\tName _Name;\t\t\t// Name of the parameter\n\t\tExpression _Value;\t// (Variant) An expression that evaluates to the value to\n\t\t\t\t\t\t\t// hand in for the parameter to the Drillthough.\n\t\tExpression _Omit;\t// (Boolean) Indicates the parameter should be skipped.\n\t\n\t\tinternal DrillthroughParameter(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Name=null;\n\t\t\t_Value=null;\n\t\t\t_Omit=null;\n\t\t\t// Run thru the attributes\n\t\t\tforeach(XmlAttribute xAttr in xNode.Attributes)\n\t\t\t{\n\t\t\t\tswitch (xAttr.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"name\":\n\t\t\t\t\t\t_Name = new Name(xAttr.Value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (_Name == null)\n\t\t\t{\t// Name is required for parameters\n\t\t\t\tOwnerReport.rl.LogError(8, \"Parameter Name attribute required.'\");\n\t\t\t}\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Value\":\n\t\t\t\t\t\t_Value = new Expression(r, this, xNodeLoop, ExpressionType.Variant);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Omit\":\n\t\t\t\t\t\t_Omit = new Expression(r, this, xNodeLoop, ExpressionType.Boolean);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Parameter element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Value != null)\n                await _Value.FinalPass();\n\t\t\tif (_Omit != null)\n                await _Omit.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Name Name\n\t\t{\n\t\t\tget { return  _Name; }\n\t\t\tset {  _Name = value; }\n\t\t}\n\n\t\tinternal Expression Value\n\t\t{\n\t\t\tget { return  _Value; }\n\t\t\tset {  _Value = value; }\n\t\t}\n\n\t\tinternal async Task<string> ValueValue(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Value == null)\n\t\t\t\treturn \"\";\n\n\t\t\treturn await _Value.EvaluateString(rpt, r);\n\t\t}\n\n\t\tinternal Expression Omit\n\t\t{\n\t\t\tget { return  _Omit; }\n\t\t\tset {  _Omit = value; }\n\t\t}\n\n\t\tinternal async Task<bool> OmitValue(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Omit == null)\n\t\t\t\treturn false;\n\n\t\t\treturn await _Omit.EvaluateBoolean(rpt, r);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DrillthroughParameters.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// The collection of Drillthrough parameters.\n\t///</summary>\n\t[Serializable]\n\tinternal class DrillthroughParameters : ReportLink\n\t{\n        List<DrillthroughParameter> _Items;\t\t\t// list of report items\n\n\t\tinternal DrillthroughParameters(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tDrillthroughParameter d;\n            _Items = new List<DrillthroughParameter>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"parameter\":\n\t\t\t\t\t\td = new DrillthroughParameter(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\td=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Parameters element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (d != null)\n\t\t\t\t\t_Items.Add(d);\n\t\t\t}\n\t\t\tif (_Items.Count > 0)\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (DrillthroughParameter r in _Items)\n\t\t\t{\n                await r.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<DrillthroughParameter> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DynamicCategories.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// In Matrix, the dynamic categories.\n\t///</summary>\n\t[Serializable]\n\tinternal class DynamicCategories : ReportLink\n\t{\n\t\tGrouping _Grouping;\t// The expressions to group the data by. Page\n\t\t\t\t\t\t\t// breaks in the grouping are not allowed.\n\t\tSorting _Sorting;\t// The expressions to sort the data by\n\t\tExpression _Label;\t//(Variant) The label displayed on the axis.\t\t\n\t\n\t\tinternal DynamicCategories(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Grouping=null;\n\t\t\t_Sorting=null;\n\t\t\t_Label=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"grouping\":\n\t\t\t\t\t\t_Grouping = new Grouping(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"sorting\":\n\t\t\t\t\t\t_Sorting = new Sorting(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"label\":\n\t\t\t\t\t\t_Label = new Expression(r, this, xNodeLoop, ExpressionType.Variant);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Grouping == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"DynamicCategories requires the Grouping element.\");\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Grouping != null)\n                await _Grouping.FinalPass();\n\t\t\tif (_Sorting != null)\n                await _Sorting.FinalPass();\n\t\t\tif (_Label != null)\n                await _Label.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Grouping Grouping\n\t\t{\n\t\t\tget { return  _Grouping; }\n\t\t\tset {  _Grouping = value; }\n\t\t}\n\n\t\tinternal Sorting Sorting\n\t\t{\n\t\t\tget { return  _Sorting; }\n\t\t\tset {  _Sorting = value; }\n\t\t}\n\n\t\tinternal Expression Label\n\t\t{\n\t\t\tget { return  _Label; }\n\t\t\tset {  _Label = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DynamicColumns.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Collections;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// In Matrix, the dynamic columns with what subtotal information is needed.\n\t///</summary>\n\t[Serializable]\n\tinternal class DynamicColumns : ReportLink\n\t{\n\t\tGrouping _Grouping;\t// The expressions to group the data by.\n\t\tSorting _Sorting;\t// The expressions to sort the columns by.\n\t\tSubtotal _Subtotal;\t// Indicates an automatic subtotal column should be included\n\t\tReportItems _ReportItems;\t// The elements of the column header layout\n\t\t\t\t\t\t\t// This ReportItems collection must contain exactly one\n\t\t\t\t\t\t\t// ReportItem. The Top, Left, Height and Width for this\n\t\t\t\t\t\t\t// ReportItem are ignored. The position is taken to be 0,\n\t\t\t\t\t\t\t// 0 and the size to be 100%, 100%.\n\t\tVisibility _Visibility;\t// Indicates if all of the dynamic columns for this\n\t\t\t\t\t\t\t// grouping should be hidden and replaced with a\n\t\t\t\t\t\t\t// subtotal column for this grouping scope\t\t\n\n\t\tinternal DynamicColumns(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Grouping=null;\n\t\t\t_Sorting=null;\n\t\t\t_Subtotal=null;\n\t\t\t_ReportItems=null;\n\t\t\t_Visibility=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Grouping\":\n\t\t\t\t\t\t_Grouping = new Grouping(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Sorting\":\n\t\t\t\t\t\t_Sorting = new Sorting(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Subtotal\":\n\t\t\t\t\t\t_Subtotal = new Subtotal(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ReportItems\":\n\t\t\t\t\t\t_ReportItems = new ReportItems(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Visibility\":\n\t\t\t\t\t\t_Visibility = new Visibility(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown DynamicColumn element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Grouping == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"DynamicColumns requires the Grouping element.\");\n\t\t\tif (_ReportItems == null || _ReportItems.Items.Count != 1)\n\t\t\t\tOwnerReport.rl.LogError(8, \"DynamicColumns requires the ReportItems element defined with exactly one report item.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Grouping != null)\n                await _Grouping.FinalPass();\n\t\t\tif (_Sorting != null)\n                await _Sorting.FinalPass();\n\t\t\tif (_Subtotal != null)\n                await _Subtotal.FinalPass();\n\t\t\tif (_ReportItems != null)\n                await _ReportItems.FinalPass();\n\t\t\tif (_Visibility != null)\n                await _Visibility.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Grouping Grouping\n\t\t{\n\t\t\tget { return  _Grouping; }\n\t\t\tset {  _Grouping = value; }\n\t\t}\n\n\t\tinternal Sorting Sorting\n\t\t{\n\t\t\tget { return  _Sorting; }\n\t\t\tset {  _Sorting = value; }\n\t\t}\n\n\t\tinternal Subtotal Subtotal\n\t\t{\n\t\t\tget { return  _Subtotal; }\n\t\t\tset {  _Subtotal = value; }\n\t\t}\n\n\t\tinternal ReportItems ReportItems\n\t\t{\n\t\t\tget { return  _ReportItems; }\n\t\t\tset {  _ReportItems = value; }\n\t\t}\n\n\t\tinternal Visibility Visibility\n\t\t{\n\t\t\tget { return  _Visibility; }\n\t\t\tset {  _Visibility = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DynamicExpression.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.Threading;\nusing Majorsilence.Reporting.Rdl;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// A report expression: includes original source, parsed expression and type information.\n\t///</summary>\n\t[Serializable]\n\tinternal class DynamicExpression: IExpr\n\t{\n\t\tstring _Source;\t\t\t// source of expression\n\t\tIExpr _Expr;\t\t\t// expression after parse\n        TypeCode _Type;\n        ReportLink _rl;\n\t\n\t\tinternal DynamicExpression(Report rpt, ReportLink p, string expr, Row row)\n\t\t{\n\t\t\t_Source=expr;\n\t\t\t_Expr = null;\n            _rl = p;\n\t\t\t// HACK: async\n            _Type = Task.Run(async ()=> await DoParse(rpt)).GetAwaiter().GetResult();\n\t\t}\n\n\t\tinternal async Task<TypeCode> DoParse(Report rpt)\n\t\t{\n\t\t\t// optimization: avoid expression overhead if this isn't really an expression\n\t\t\tif (_Source == null)\n\t\t\t{\n\t\t\t\t_Expr = new Constant(\"\");\n                return _Expr.GetTypeCode();\n\t\t\t}\n\t\t\telse if (_Source == string.Empty ||\t\t\t// empty expression\n\t\t\t\t_Source[0] != '=')\t// if 1st char not '='\n\t\t\t{\n\t\t\t\t_Expr = new Constant(_Source);\t//   this is a constant value\n                return _Expr.GetTypeCode();\n\t\t\t}\n\n\t\t\tParser p = new Parser(new System.Collections.Generic.List<ICacheData>());\n\n\t\t\t// find the fields that are part of the DataRegion (if there is one)\n\t\t\tIDictionary fields=null;\n\t\t\tReportLink dr = _rl.Parent;\n\t\t\tGrouping grp= null;\t\t// remember if in a table group or detail group or list group\n\t\t\tMatrix m=null;\n\n            while (dr != null)\n\t\t\t{\n\t\t\t\tif (dr is Grouping)\n\t\t\t\t\tp.NoAggregateFunctions = true;\n\t\t\t\telse if (dr is TableGroup)\n\t\t\t\t\tgrp = ((TableGroup) dr).Grouping;\n\t\t\t\telse if (dr is Matrix)\n\t\t\t\t{\n\t\t\t\t\tm = (Matrix) dr;\t\t// if matrix we need to pass special\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse if (dr is Details)\n\t\t\t\t{\n\t\t\t\t\tgrp = ((Details) dr).Grouping;\n\t\t\t\t}\n\t\t\t\telse if (dr is List)\n\t\t\t\t{\n\t\t\t\t\tgrp = ((List) dr).Grouping;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse if (dr is DataRegion || dr is DataSetDefn)\n\t\t\t\t\tbreak;\n\t\t\t\tdr = dr.Parent;\n\t\t\t}\n\t\t\tif (dr != null)\n\t\t\t{\n\t\t\t\tif (dr is DataSetDefn)\n\t\t\t\t{\n\t\t\t\t\tDataSetDefn d = (DataSetDefn) dr;\n\t\t\t\t\tif (d.Fields != null)\n\t\t\t\t\t\tfields = d.Fields.Items;\n\t\t\t\t}\n\t\t\t\telse\t// must be a DataRegion\n\t\t\t\t{\n\t\t\t\t\tDataRegion d = (DataRegion) dr;\n\t\t\t\t\tif (d.DataSetDefn != null &&\n\t\t\t\t\t\td.DataSetDefn.Fields != null)\n\t\t\t\t\t\tfields = d.DataSetDefn.Fields.Items;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tNameLookup lu = new NameLookup(fields, rpt.ReportDefinition.LUReportParameters,\n                rpt.ReportDefinition.LUReportItems, rpt.ReportDefinition.LUGlobals,\n                rpt.ReportDefinition.LUUser, rpt.ReportDefinition.LUAggrScope,\n                grp, m, rpt.ReportDefinition.CodeModules, rpt.ReportDefinition.Classes, rpt.ReportDefinition.DataSetsDefn,\n                rpt.ReportDefinition.CodeType);\n\n\t\t\ttry \n\t\t\t{\n\t\t\t\t_Expr = await p.Parse(lu, _Source);\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\t_Expr = new ConstantError(e.Message);\n\t\t\t\t// Invalid expression\n\t\t\t\trpt.rl.LogError(8, ErrorText(e.Message));\n\t\t\t}\n\n\t\t\t// Optimize removing any expression that always result in a constant\n\t\t\ttry\n\t\t\t{\n\t\t\t\t_Expr = await _Expr.ConstantOptimization();\n\t\t\t}\n\t\t\tcatch(Exception ex)\n\t\t\t{\n\t\t\t\trpt.rl.LogError(4, \"Expression:\" + _Source + \"\\r\\nConstant Optimization exception:\\r\\n\" + ex.Message + \"\\r\\nStack trace:\\r\\n\" + ex.StackTrace );\n\t\t\t}\n\n            return _Expr.GetTypeCode();\n\t\t}\n\n        private string ErrorText(string msg)\n        {\n            ReportLink rl = _rl.Parent;\n            while (rl != null)\n            {\n                if (rl is ReportItem)\n                    break;\n                rl = rl.Parent;\n            }\n\n            string prefix=\"Expression\";\n            if (rl != null)\n            {          \n                ReportItem ri = rl as ReportItem;\n                if (ri.Name != null)\n                    prefix = ri.Name.Nm + \" expression\";\n            }\n            return prefix + \" '\" + _Source + \"' failed to parse: \" + msg;\n        }\n\n\t\tprivate void ReportError(Report rpt, int severity, string err)\n\t\t{\n            rpt.rl.LogError(severity, err);\n\t\t}\n\n\t\tinternal string Source\n\t\t{\n\t\t\tget { return  _Source; }\n\t\t}\n\t\tinternal IExpr Expr\n\t\t{\n\t\t\tget { return  _Expr; }\n\t\t}\n\t\tinternal TypeCode Type\n\t\t{\n\t\t\tget { return  _Type; }\n\t\t}\n\t\t#region IExpr Members\n\n\t\tpublic System.TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn _Expr.GetTypeCode();\n\t\t}\n\n\t\tpublic async Task<bool> IsConstant()\n\t\t{\n\t\t\treturn await _Expr.IsConstant();\n\t\t}\n\n\t\tpublic Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\ttry \n\t\t\t{\n\t\t\t\treturn await _Expr.Evaluate(rpt, row);\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\tstring err;\n\t\t\t\tif (e.InnerException != null)\n\t\t\t\t\terr = String.Format(\"Exception evaluating {0}.  {1}.  {2}\", _Source, e.Message, e.InnerException.Message);\n\t\t\t\telse\n\t\t\t\t\terr = String.Format(\"Exception evaluating {0}.  {1}\", _Source, e.Message);\n\n\t\t\t\tReportError(rpt, 4, err);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\ttry \n\t\t\t{\n\t\t\t\treturn await _Expr.EvaluateString(rpt, row);\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\t\n\t\t\t\tstring err = String.Format(\"Exception evaluating {0}.  {1}\", _Source, e.Message);\n\t\t\t\tReportError(rpt, 4, err);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\ttry \n\t\t\t{\n\t\t\t\treturn await _Expr.EvaluateDouble(rpt, row);\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\t\n\t\t\t\tstring err = String.Format(\"Exception evaluating {0}.  {1}\", _Source, e.Message);\n\t\t\t\tReportError(rpt, 4, err);\n\t\t\t\treturn double.NaN;\n\t\t\t}\n\t\t}\n\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\ttry \n\t\t\t{\n\t\t\t\treturn await _Expr.EvaluateDecimal(rpt, row);\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\t\n\t\t\t\tstring err = String.Format(\"Exception evaluating {0}.  {1}\", _Source, e.Message);\n\t\t\t\tReportError(rpt, 4, err);\n\t\t\t\treturn decimal.MinValue;\n\t\t\t}\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            try\n            {\n                return await _Expr.EvaluateInt32(rpt, row);\n            }\n            catch (Exception e)\n            {\n                string err = String.Format(\"Exception evaluating {0}.  {1}\", _Source, e.Message);\n                ReportError(rpt, 4, err);\n                return int.MinValue;\n            }\n        }\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\ttry \n\t\t\t{\n\t\t\t\treturn await _Expr.EvaluateDateTime(rpt, row);\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\t\n\t\t\t\tstring err = String.Format(\"Exception evaluating {0}.  {1}\", _Source, e.Message);\n\t\t\t\tReportError(rpt, 4, err);\n\t\t\t\treturn DateTime.MinValue;\n\t\t\t}\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\ttry \n\t\t\t{\n                return await _Expr.EvaluateBoolean(rpt, row);\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\t\n\t\t\t\tstring err = String.Format(\"Exception evaluating {0}.  {1}\", _Source, e.Message);\n\t\t\t\tReportError(rpt, 4, err);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DynamicRows.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Collections;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// In Matrix, the dynamic rows needed.\n\t///</summary>\n\t[Serializable]\n\tinternal class DynamicRows : ReportLink\n\t{\n\t\tGrouping _Grouping;\t// The expressions to group the data by\n\t\tSorting _Sorting;\t// The expressions to sort the columns by\n\t\tSubtotal _Subtotal;\t// Indicates an automatic subtotal row should be included\n\t\tReportItems _ReportItems;\t// The elements of the row header layout\n\t\t\t\t\t\t\t// This ReportItems collection must contain exactly one\n\t\t\t\t\t\t\t// ReportItem. The Top, Left, Height and Width for this\n\t\t\t\t\t\t\t// ReportItem are ignored. The position is taken to be 0,\n\t\t\t\t\t\t\t// 0 and the size to be 100%, 100%.\n\t\tVisibility _Visibility;\t// Indicates if all of the dynamic rows for this grouping\n\t\t\t\t\t\t\t// should be hidden and replaced with a subtotal row for\n\t\t\t\t\t\t\t// this grouping scope\t\t\n\n\t\tinternal DynamicRows(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Grouping=null;\n\t\t\t_Sorting=null;\n\t\t\t_Subtotal=null;\n\t\t\t_ReportItems=null;\n\t\t\t_Visibility=null;\n\t\t\t// Run thru the attributes\n\t\t\t//\t\t\tforeach(XmlAttribute xAttr in xNode.Attributes)\n\t\t\t//\t\t\t{\n\t\t\t//\t\t\t}\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Grouping\":\n\t\t\t\t\t\t_Grouping = new Grouping(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Sorting\":\n\t\t\t\t\t\t_Sorting = new Sorting(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Subtotal\":\n\t\t\t\t\t\t_Subtotal = new Subtotal(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ReportItems\":\n\t\t\t\t\t\t_ReportItems = new ReportItems(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Visibility\":\n\t\t\t\t\t\t_Visibility = new Visibility(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown DynamicRow element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Grouping == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"DynamicRows requires the Grouping element.\");\n\t\t\tif (_ReportItems == null || _ReportItems.Items.Count != 1)\n\t\t\t\tOwnerReport.rl.LogError(8, \"DynamicRows requires the ReportItems element defined with exactly one report item.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Grouping != null)\n                await _Grouping.FinalPass();\n\t\t\tif (_Sorting != null)\n                await _Sorting.FinalPass();\n\t\t\tif (_Subtotal != null)\n                await _Subtotal.FinalPass();\n\t\t\tif (_ReportItems != null)\n                await _ReportItems.FinalPass();\n\t\t\tif (_Visibility != null)\n                await _Visibility.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Grouping Grouping\n\t\t{\n\t\t\tget { return  _Grouping; }\n\t\t\tset {  _Grouping = value; }\n\t\t}\n\n\t\tinternal Sorting Sorting\n\t\t{\n\t\t\tget { return  _Sorting; }\n\t\t\tset {  _Sorting = value; }\n\t\t}\n\n\t\tinternal Subtotal Subtotal\n\t\t{\n\t\t\tget { return  _Subtotal; }\n\t\t\tset {  _Subtotal = value; }\n\t\t}\n\n\t\tinternal ReportItems ReportItems\n\t\t{\n\t\t\tget { return  _ReportItems; }\n\t\t\tset {  _ReportItems = value; }\n\t\t}\n\n\t\tinternal Visibility Visibility\n\t\t{\n\t\t\tget { return  _Visibility; }\n\t\t\tset {  _Visibility = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/DynamicSeries.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// In Charts, the dynamic series definition.\n\t///</summary>\n\t[Serializable]\n\tinternal class DynamicSeries : ReportLink\n\t{\n\t\tGrouping _Grouping;\t// The expressions to group the data by. Page\n\t\t\t\t\t\t\t// breaks in the grouping are not allowed.\n\t\tSorting _Sorting;\t// The expressions to sort the columns by\n\t\tExpression _Label;\t// (string) The label displayed on the legend.\t\t\n\t\n\t\tinternal DynamicSeries(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Grouping=null;\n\t\t\t_Sorting=null;\n\t\t\t_Label=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"grouping\":\n\t\t\t\t\t\t_Grouping = new Grouping(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"sorting\":\n\t\t\t\t\t\t_Sorting = new Sorting(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"label\":\n\t\t\t\t\t\t_Label = new Expression(r, this, xNodeLoop, ExpressionType.String);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Grouping == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"DynamicSeries requires the Grouping element.\");\n\t\t\tif (_Label == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"DynamicSeries requires the Label element.\");\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Grouping != null)\n                await _Grouping.FinalPass();\n\t\t\tif (_Sorting != null)\n                await _Sorting.FinalPass();\n\t\t\tif (_Label != null)\n                await _Label.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Grouping Grouping\n\t\t{\n\t\t\tget { return  _Grouping; }\n\t\t\tset {  _Grouping = value; }\n\t\t}\n\n\t\tinternal Sorting Sorting\n\t\t{\n\t\t\tget { return  _Sorting; }\n\t\t\tset {  _Sorting = value; }\n\t\t}\n\n\t\tinternal Expression Label\n\t\t{\n\t\t\tget { return  _Label; }\n\t\t\tset {  _Label = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/EMFConverter/EMFRecords/EMF.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\nusing System.DrawingCore.Imaging;\n#else\nusing System.Drawing;\nusing System.Drawing.Imaging;\n#endif\nusing System.Runtime.InteropServices;\nusing Majorsilence.Reporting.Rdl;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    public class EMF\n    {\n        public List<PageItem> PageItems;\n        private System.Collections.Hashtable ObjectTable;        \n        private Metafile _mf;\n        private Bitmap _bm;\n        private MemoryStream _ms;\n        private Graphics g;\n        private Graphics.EnumerateMetafileProc m_delegate;\n        private Single X, Y, Width, Height;\n        //private Single XScale, YScale;\n        internal EMF(Single Xin, Single Yin, Single Widthin, Single Heightin)\n        {\n            X = Xin;\n            Y = Yin;\n            Width = Widthin;\n            Height = Heightin;           \n            ObjectTable = new System.Collections.Hashtable();\n            PageItems = new List<PageItem>();\n           \n        }\n\n        public void ProcessEMF(byte[] emf)\n        {            \n            try\n            {              \n                _ms = new MemoryStream(emf);\n                _mf = new Metafile(_ms);                 \n                _bm = new Bitmap(1,1);\n                g = Graphics.FromImage(_bm);\n                //XScale = Width / _mf.Width;\n                //YScale = Height/ _mf.Height;\n                m_delegate = new Graphics.EnumerateMetafileProc(MetafileCallback);\n                g.EnumerateMetafile(_mf, new Point(0, 0), m_delegate);\n            }\n            finally \n            {\n                if (g != null)\n                    g.Dispose();\n                if (_bm != null)\n                    _bm.Dispose();\n                if (_ms != null)\n                {\n                    _ms.Close();\n                    _ms.Dispose();\n                }\n            }       \n         }\n\n\n        internal bool MetafileCallback(EmfPlusRecordType recordType, int flags, int dataSize, IntPtr data, PlayRecordCallback callbackData)\n        {\n\n            if (!data.Equals(IntPtr.Zero))\n            {\n                byte[] RecordData = new byte[dataSize];\n                Marshal.Copy(data, RecordData, 0, dataSize);\n                ProcessRecord(flags,recordType,RecordData);\n            }\n            return true;\n        }\n\n\n        internal void ProcessRecord(int flags, EmfPlusRecordType recordType,byte[] RecordData)\n        {\n            switch (recordType)\n            {\n                case EmfPlusRecordType.Header:                       \n                    break;      \n                case EmfPlusRecordType.SetPageTransform:\n                    EMFSetPageTransform P = EMFSetPageTransform.getTransform(flags, RecordData);\n                    break;\n                case EmfPlusRecordType.Object:\n                    EMFRecordObject O = EMFRecordObject.getObject(flags,RecordData);\n                    if (O != null)\n                    {                    \n                        if (ObjectTable.Contains(O.ObjectID))\n                        {\n                            ObjectTable[O.ObjectID] = O;\n                        }\n                        else\n                        {\n                            ObjectTable.Add(O.ObjectID,O);\n                        }\n                    }                    \n                    break;\n                case EmfPlusRecordType.DrawLines:\n                    //After each instruction we must do something, as the object table is constantly being changed...\n                    //and we need to use what is currently in the table!\n                    DrawLines DL = new DrawLines(X, Y, Width, Height, ObjectTable);\n                    PageItems.AddRange(DL.Process(flags,RecordData));                  \n                    break;\n                case EmfPlusRecordType.DrawString:\n                    DrawString DS = new DrawString(X, Y, Width, Height, ObjectTable);\n                    PageItems.AddRange(DS.Process(flags, RecordData));                  \n                    break;\n                case EmfPlusRecordType.FillRects:\n                    FillRects FR = new FillRects(X, Y, Width, Height,ObjectTable);\n                    PageItems.AddRange(FR.Process(flags, RecordData));                  \n                    break;\n                case EmfPlusRecordType.DrawRects:\n                    DrawRects DR = new DrawRects(X, Y, Width, Height,ObjectTable);\n                    PageItems.AddRange(DR.Process(flags, RecordData));                   \n                    break;\n                case EmfPlusRecordType.FillPolygon:\n                    FillPolygon FPo = new FillPolygon(X, Y, Width, Height, ObjectTable);\n                    PageItems.AddRange(FPo.Process(flags, RecordData));  \n                    break;\n                case EmfPlusRecordType.DrawEllipse:\n                   DrawEllipse DE = new DrawEllipse(X, Y, Width, Height,ObjectTable);\n                   PageItems.AddRange(DE.Process(flags, RecordData));                   \n                    break;\n                case EmfPlusRecordType.FillEllipse:\n                   FillEllipse FE = new FillEllipse(X, Y, Width, Height,ObjectTable);\n                   PageItems.AddRange(FE.Process(flags, RecordData));                   \n                    break;\n                case EmfPlusRecordType.FillPie:\n                    FillPie FP = new FillPie(X, Y, Width, Height, ObjectTable);\n                    PageItems.AddRange(FP.Process(flags, RecordData));               \n                    break;\n                case EmfPlusRecordType.DrawPie:\n                    DrawPie DP = new DrawPie(X, Y, Width, Height, ObjectTable);\n                    PageItems.AddRange(DP.Process(flags, RecordData));\n                    break;\n                case EmfPlusRecordType.DrawCurve:\n                    DrawCurve DC = new DrawCurve(X, Y, Width, Height, ObjectTable);\n                    PageItems.AddRange(DC.Process(flags, RecordData));     \n                    break;\n                case EmfPlusRecordType.Comment:\n                    Comment CM = new Comment(X, Y, Width, Height, ObjectTable);\n                    PageItems.AddRange(CM.Process(flags, RecordData));\n                    break;\n                default:\n                    break;\n            }\n        }\n\n       \n    }\n}\n    \n\n"
  },
  {
    "path": "RdlEngine/Definition/EMFConverter/EMFRecords/EMFDrawingRecords/Comment.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    //takes the record data and returns the instructions for Draw2...I guess.    \n    internal class Comment : DrawBase\n    {\n        internal Comment(Single Xin, Single Yin, Single WidthIn, Single HeightIn, System.Collections.Hashtable ObjectTableIn)\n        {\n            X = Xin;\n            Y = Yin;\n            Width = WidthIn;\n            Height = HeightIn;\n            ObjectTable = ObjectTableIn;\n            items = new List<PageItem>();\n        }\n\n        public List<PageItem> Process(int Flags, byte[] RecordData)\n        {\n            MemoryStream _ms = null;\n            BinaryReader _br = null;\n            try\n            {\n                _ms = new MemoryStream(RecordData);\n                _br = new BinaryReader(_ms);\n\n                Byte[] PrivateData = _br.ReadBytes(RecordData.Length);\n                //Ok we should have our private data which I am storing my tooltip value in...\n                //now lets interpret it...            \n                string PData = new System.Text.ASCIIEncoding().GetString(PrivateData);\n                //If string starts with \"ToolTip\" then lets do something with it.. otherwise I don't care about it.\n                if (PData.StartsWith(\"ToolTip\"))\n                {\n                    PageRectangle pr = new PageRectangle();\n                    StyleInfo si = new StyleInfo();\n                    pr.SI = si;\n                    //si.BackgroundColor = Color.Blue;// Just a test to see where the tooltip is being drawn\n                    string[] ttd = PData.Split('|');\n                    pr.Tooltip = ttd[0].Split(':')[1];\n                    pr.X = X + (Single.Parse(ttd[1].Split(':')[1]) * SCALEFACTOR);\n                    pr.Y = Y + (Single.Parse(ttd[2].Split(':')[1]) * SCALEFACTOR);\n                    pr.W = Single.Parse(ttd[3].Split(':')[1]) * SCALEFACTOR;\n                    pr.H = Single.Parse(ttd[4].Split(':')[1]) * SCALEFACTOR;\n                    items.Add(pr);\n                }\n                else if (PData.StartsWith(\"PolyToolTip\"))\n                {\n                    PagePolygon pp = new PagePolygon();\n                    StyleInfo si = new StyleInfo();\n                    pp.SI = si;\n                    //si.BackgroundColor = Color.Blue;// Just a test to see where the tooltip is being drawn\n                    string[] ttd = PData.Split('|');\n                    Draw2.PointF[] pts = new Draw2.PointF[(ttd.Length - 1) / 2];\n                    pp.Points = pts;\n                    pp.Tooltip = ttd[0].Split(':')[1];\n                    for (int i = 0; i < pts.Length; i++)\n                    {\n                        pts[i].X = X + (Single.Parse(ttd[(i*2) +1]) * SCALEFACTOR);\n                        pts[i].Y = Y + (Single.Parse(ttd[(i*2) +2]) * SCALEFACTOR);\n                    }\n                    items.Add(pp);\n                }\n                return items;\n            }\n\n            finally\n            {\n                if (_br != null)\n                    _br.Close();\n                if (_ms != null)\n                    _ms.Dispose();\n\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/EMFConverter/EMFRecords/EMFDrawingRecords/DrawBase.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    class DrawBase\n    {\n        protected const float SCALEFACTOR = 72f / 96f;\n        protected System.Collections.Hashtable ObjectTable;\n        protected Single X;\n        protected Single Y;\n        protected Single Width;\n        protected Single Height;\n        protected List<PageItem> items;\n\n        protected static BorderStyleEnum getLineStyle(Draw2.Pen p)\n        {\n            BorderStyleEnum ls = BorderStyleEnum.Solid;\n            switch (p.DashStyle)\n            {               \n                case Draw2.Drawing2D.DashStyle.Dash:\n                    ls = BorderStyleEnum.Dashed;\n                    break;\n                case Draw2.Drawing2D.DashStyle.DashDot:\n                    ls = BorderStyleEnum.Dashed;\n                    break;\n                case Draw2.Drawing2D.DashStyle.DashDotDot:\n                    ls = BorderStyleEnum.Dashed;\n                    break;\n                case Draw2.Drawing2D.DashStyle.Dot: \n                    ls = BorderStyleEnum.Dotted;\n                    break;\n                case Draw2.Drawing2D.DashStyle.Solid:\n                    ls = BorderStyleEnum.Solid;\n                    break;\n                case Draw2.Drawing2D.DashStyle.Custom:\n                    ls = BorderStyleEnum.Solid;\n                    break;\n                default:                   \n                    break;\n            }  \n            return ls;\n        }\n\n       \n    }\n\n    \n}\n"
  },
  {
    "path": "RdlEngine/Definition/EMFConverter/EMFRecords/EMFDrawingRecords/DrawCurve.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    //takes the record data and returns the instructions for Draw2...I guess.    \n    internal class DrawCurve : DrawBase\n    {\n        internal DrawCurve(Single Xin, Single Yin, Single WidthIn, Single HeightIn, System.Collections.Hashtable ObjectTableIn)\n        {\n            X = Xin;\n            Y = Yin;\n            Width = WidthIn;\n            Height = HeightIn;\n            ObjectTable = ObjectTableIn;\n            items = new List<PageItem>();\n        }\n\n        public List<PageItem> Process(int Flags, byte[] RecordData)\n        {\n            MemoryStream _ms = null;\n            BinaryReader _br = null;\n            MemoryStream _fs = null;\n            BinaryReader _fr = null;\n\n            try\n            {\n                _fs = new MemoryStream(BitConverter.GetBytes(Flags));\n                _fr = new BinaryReader(_fs);\n                //Byte 1 will be ObjectID\n                byte ObjectID = _fr.ReadByte();\n                //Byte 2 is the real flags\n                byte RealFlags = _fr.ReadByte();\n                // 0 1 2 3 4 5 6 7\n                // X X X X X X C X            \n                // if C = 1 Points are int16, 0 = Points are Float\n\n                //PJR20220801 - (int) Math.Pow(2,6) !=64 it's 63!!! Argh!!!\n                bool Compressed = ((RealFlags >> 6) & 1) == 1; //((RealFlags & (int)Math.Pow(2, 6)) == (int)Math.Pow(2, 6));                             \n\n                _ms = new MemoryStream(RecordData);\n                _br = new BinaryReader(_ms);\n\n                float  Tension = _br.ReadSingle();// _br.ReadUInt32(); //20081110 PJR & GJL EMF+ Definition is WRONG!!!\n                UInt32 Offset = _br.ReadUInt32();\n                UInt32 NumberOfPoints = _br.ReadUInt32();\n                UInt32 NumberOfSegments = _br.ReadUInt32();\n                EMFPen Emfp = (EMFPen)ObjectTable[ObjectID];\n                Draw2.Pen p = Emfp.myPen;\n                //EMFBrush b = p.myBrush;                \n                if (Compressed)\n                {\n                    DoCompressed(NumberOfPoints, _br, p,Offset,NumberOfSegments, Tension);\n                }               \n                else\n                {\n                    DoFloat(NumberOfPoints, _br, p, Offset, NumberOfSegments, Tension);\n                }\n                return items;\n            }\n\n            finally\n            {\n                if (_br != null)\n                    _br.Close();\n                if (_ms != null)\n                    _ms.Dispose();\n                if (_fr != null)\n                    _fr.Close();\n                if (_fs != null)\n                    _fs.Dispose();\n            }\n        }\n\n        private void DoFloat(UInt32 NumberOfSegments, BinaryReader _br, Draw2.Pen p, UInt32 Offset, UInt32 NumberOfPoints, float Tension)\n        {\n            Draw2.PointF[] Points = null;\n            //bool first = true;\n            for (int i = 0; i < NumberOfPoints; i++)\n            {\n                Points[i].X = _br.ReadSingle();\n                Points[i].Y = _br.ReadSingle();\n            }\n            DoInstructions(Points, p, Offset, NumberOfPoints, Tension);\n        }\n\n\n        private void DoCompressed(UInt32 NumberOfSegments, BinaryReader _br, Draw2.Pen p, UInt32 Offset, UInt32 NumberOfPoints, float Tension)\n        {\n            //bool first = true;\n            Draw2.PointF[] Points = new Draw2.PointF[NumberOfPoints];\n            for (int i = 0; i < NumberOfPoints; i++)\n            {\n                Points[i].X = (float) _br.ReadInt16();\n                Points[i].Y = (float) _br.ReadInt16();\n            }\n            DoInstructions(Points, p, Offset, NumberOfSegments, Tension);\n        }\n\n        private void DoInstructions(Draw2.PointF[] points, Draw2.Pen p, UInt32 Offset, UInt32 NumberOfPoints, float Tension)\n        {\n            BorderStyleEnum ls = getLineStyle(p);\n            //Well we only draw lines at the moment.... \n\n            switch (p.Brush.GetType().Name)\n            {\n                case \"SolidBrush\":\n                   Draw2.SolidBrush theBrush = (Draw2.SolidBrush)p.Brush;\n                    PageCurve pc = new PageCurve();\n                    for (int i = 0; i < points.Length; i++)\n                    {\n                        points[i].X = X + (points[i].X * SCALEFACTOR);\n                        points[i].Y = Y + (points[i].Y * SCALEFACTOR);\n                    }\n                    pc.Points = points;\n                    pc.Offset = (int) Offset;\n                    pc.Tension = Tension;\n                    \n\n                    StyleInfo SI = new StyleInfo();\n                    SI.Color = theBrush.Color;\n                    SI.BColorTop = theBrush.Color;\n                    SI.BStyleTop = ls;\n                    SI.BWidthTop = p.Width * SCALEFACTOR;\n                    SI.BColorBottom = theBrush.Color;\n                    SI.BStyleBottom = ls;\n                    SI.BWidthBottom = p.Width * SCALEFACTOR;\n                    SI.BColorLeft = theBrush.Color;\n                    SI.BStyleLeft = ls;\n                    SI.BWidthLeft = p.Width * SCALEFACTOR;\n                    SI.BColorRight = theBrush.Color;\n                    SI.BStyleRight = ls;\n                    SI.BWidthRight = p.Width * SCALEFACTOR;\n                    pc.SI = SI;\n                    items.Add(pc);\n                    break;\n                default:\n                    break;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/EMFConverter/EMFRecords/EMFDrawingRecords/DrawEllipse.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    internal class DrawEllipse : DrawBase\n    {\n        internal DrawEllipse(Single Xin, Single Yin, Single WidthIn, Single HeightIn, System.Collections.Hashtable ObjectTableIn)\n        {\n            X = Xin;\n            Y = Yin;\n            Width = WidthIn;\n            Height = HeightIn;          \n            items = new List<PageItem>();\n        }\n\n        public List<PageItem> Process(int Flags, byte[] RecordData)\n        {\n            MemoryStream _ms = null;\n            BinaryReader _br = null;\n            MemoryStream _fs = null;\n            BinaryReader _fr = null;\n            try\n            {              \n                _fs = new MemoryStream(BitConverter.GetBytes(Flags));\n                _fr = new BinaryReader(_fs);\n                byte ObjectID = _fr.ReadByte();\n                //Byte 1 will be ignored\n                byte RealFlags = _fr.ReadByte();\n                //Byte 2 will be brushtype\n                // 0 1 2 3 4 5 6 7\n                // X X X X X X C X\n                // if C = 1 int16, 0 = Points are Float (ignore P)              \n                //PJR20220801 - (int) Math.Pow(2,6) !=64 it's 63!!! Argh!!!\n                bool Compressed = ((RealFlags >> 6) & 1) == 1; //((RealFlags & (int)Math.Pow(2, 6)) == (int)Math.Pow(2, 6));\n\n                _ms = new MemoryStream(RecordData);\n                _br = new BinaryReader(_ms);\n\n                EMFPen EMFp = (EMFPen)ObjectTable[ObjectID];\n                Draw2.Pen p = EMFp.myPen;\n\n                if (Compressed)\n                {\n                    Int16 Xp = _br.ReadInt16();\n                    Int16 Yp = _br.ReadInt16();\n                    Int16 Wid = _br.ReadInt16();\n                    Int16 Hgt = _br.ReadInt16();\n                    DoEllipse(p, Xp, Yp, Wid, Hgt);\n                }\n                else\n                {\n                    Single Xp = _br.ReadSingle();\n                    Single Yp = _br.ReadSingle();\n                    Single Wid = _br.ReadSingle();\n                    Single Hgt = _br.ReadSingle();\n                    DoEllipse(p, Xp, Yp, Wid, Hgt);\n                }\n                return items;\n            }\n            finally\n            {\n                if (_br != null)\n                    _br.Close();\n                if (_ms != null)\n                    _ms.Dispose();\n                if (_fr != null)\n                    _fr.Close();\n                if (_fs != null)\n                    _fs.Dispose();\n            }\n        }\n        private void DoEllipse(Draw2.Pen p, Single Xp, Single Yp, Single Wid, Single Hgt)\n        {\n            BorderStyleEnum ls = getLineStyle(p);\n\n            Draw2.Color col = Draw2.Color.Black;\n\n            if (p.Brush.GetType().Name.Equals(\"SolidBrush\"))\n            {\n               Draw2.SolidBrush theBrush = (Draw2.SolidBrush)p.Brush;\n                col = theBrush.Color;\n            }\n\n            PageEllipse pl = new PageEllipse();\n            pl.X = X + (Xp * SCALEFACTOR);\n            pl.Y = Y + (Yp * SCALEFACTOR);\n            pl.W = Wid * SCALEFACTOR;\n            pl.H = Hgt * SCALEFACTOR;\n\n            StyleInfo SI = new StyleInfo();\n            SI.Color = col;\n            SI.BColorTop = col;\n            SI.BStyleTop = ls;\n            SI.BWidthTop = p.Width * SCALEFACTOR;\n            pl.SI = SI;\n            items.Add(pl);  \n\n            //Lines.AppendFormat(\"\\r\\n\"); //CrLf\n            //Lines.AppendFormat(\"q\\t\"); //Push graphics state onto stack\n            //Lines.AppendFormat(\"{0} w\\t\", p.Width * ScaleX); //set width of path\n            //Lines.AppendFormat(\"{0} \\t\", linestyle); //line style from pen... \n            //Lines.AppendFormat(\"{0} {1} {2} RG\\t\", Math.Round(R / 255.0, 3), Math.Round(G / 255.0, 3), Math.Round(B / 255.0, 3)); //Set RGB colours\n            //Lines.AppendFormat(\"{0} {1} {2} rg\\t\", Math.Round(R / 255.0, 3), Math.Round(G / 255.0, 3), Math.Round(B / 255.0, 3)); //Set RGB colours\n            ////Need some bezier curves to  draw an ellipse.. we can't draw a circle, but we can get close.\n            //Double k = 0.5522847498;\n            //Double RadiusX = (Wid / 2.0) * ScaleX;\n            //Double RadiusY = (Hgt / 2.0) * ScaleY;\n            //Double Y4 = Y + Height - Yp * ScaleY;\n            //Double X1 = Xp * ScaleX + X;\n            //Double Y1 = Y4 - RadiusY;\n            //Double X4 = X1 + RadiusX;\n\n            //Lines.AppendFormat(\"{0} {1} m\\t\", X1, Y1);//FirstPoint..\n\n            //Double kRy = k * RadiusY;\n            //Double kRx = k * RadiusX;\n\n            ////Control Point 1 will be on the same X as point 1 and be -kRy Y\n            //Double X2 = X1;\n            //Double Y2 = Y1 + kRy;\n\n            //Double X3 = X4 - kRx;\n            //Double Y3 = Y4;\n\n            //Lines.AppendFormat(\"{0} {1} {2} {3} {4} {5}  c\\t\", X2, Y2, X3, Y3, X4, Y4); //Upper Left Quadrant\n\n            //X1 += 2 * RadiusX;\n            //X2 = X1;\n            //X3 += 2 * kRx;\n\n            //Lines.AppendFormat(\"{0} {1} {2} {3} {4} {5}  c\\t\", X3, Y3, X2, Y2, X1, Y1); //Upper Right Quadrant\n\n            //Y2 -= 2 * kRy;\n            //Y3 -= 2 * RadiusY;\n            //Y4 = Y3;\n\n            //Lines.AppendFormat(\"{0} {1} {2} {3} {4} {5}  c\\t\", X2, Y2, X3, Y3, X4, Y4); //Lower Right Quadrant\n\n            //X1 -= 2 * RadiusX;\n            //X2 = X1;\n            //X3 -= 2 * kRx;\n\n            //Lines.AppendFormat(\"{0} {1} {2} {3} {4} {5}  c\\t\", X3, Y3, X2, Y2, X1, Y1); //Lower Right Quadrant\n\n            //Lines.AppendFormat(\"S\\t\");//Stroke path\n            //Lines.AppendFormat(\"Q\\t\");//Pop graphics state from stack \n\n        } \n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/EMFConverter/EMFRecords/EMFDrawingRecords/DrawLines.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    //takes the record data and returns the instructions for Draw2...I guess.    \n    internal class DrawLines : DrawBase\n    {\n        internal DrawLines(Single Xin, Single Yin, Single WidthIn, Single HeightIn,System.Collections.Hashtable ObjectTableIn)\n        {\n            X = Xin;\n            Y = Yin;\n            Width = WidthIn;\n            Height = HeightIn;          \n            ObjectTable = ObjectTableIn;\n            items = new List<PageItem>();\n        }\n\n        public List<PageItem> Process(int Flags,byte[] RecordData)\n        {\n            MemoryStream _ms = null;\n            BinaryReader _br = null;\n            MemoryStream _fs = null;\n            BinaryReader _fr = null;\n\n            try\n            {              \n                _fs = new MemoryStream(BitConverter.GetBytes(Flags));\n                _fr = new BinaryReader(_fs);\n                //Byte 1 will be ObjectID\n                byte ObjectID = _fr.ReadByte();\n                //Byte 2 is the real flags\n                byte RealFlags = _fr.ReadByte();\n                // 0 1 2 3 4 5 6 7\n                // X X X P X L C X\n                // if P = 1 Points are Relative to previous point (Ignore C)\n                // if C = 1 Points are int16, 0 = Points are Float (ignore P)\n                // if L = 1 Draw a line between last and first points\n                //PJR20220801 - (int) Math.Pow(2,6) !=64 it's 63!!! Argh!!!\n                bool Compressed = ((RealFlags >> 6) & 1) == 1; //((RealFlags & (int)Math.Pow(2, 6)) == (int)Math.Pow(2, 6));\n                bool Relative = false;\n                if (!Compressed)                \n                    Relative = ((RealFlags >> 3) & 1) == 1; //((RealFlags & (int)Math.Pow(2, 3)) == (int)Math.Pow(2, 3));\n                bool CloseShape = ((RealFlags >> 5) & 1) == 1; //((RealFlags & (int)Math.Pow(2, 5)) == (int)Math.Pow(2, 5)); \n                _ms = new MemoryStream(RecordData);\n                _br = new BinaryReader(_ms);\n                UInt32 NumberOfPoints = _br.ReadUInt32(); \n                EMFPen Emfp = (EMFPen)ObjectTable[ObjectID];\n                Draw2.Pen p = Emfp.myPen;               \n                //EMFBrush b = p.myBrush;                \n                if (Compressed)\n                {\n                    DoCompressed(NumberOfPoints, _br,p);\n                }\n                else if (Relative)\n                {\n                    DoRelative(NumberOfPoints, _br, p);\n                }\n                else\n                {\n                    DoFloat(NumberOfPoints, _br, p);\n                }\n                return items;\n            } \n              \n            finally\n            {\n                if (_br != null)\n                    _br.Close();\n                if (_ms != null)\n                    _ms.Dispose();\n                if (_fr != null)\n                    _fr.Close();\n                if (_fs != null)\n                    _fs.Dispose();\n            }\n        }\n\n        private void DoFloat(UInt32 NumberOfPoints, BinaryReader _br, Draw2.Pen p)\n        {\n            Draw2.PointF[] Points = new Draw2.PointF[NumberOfPoints];\n            bool first = true;\n            for (int i = 0; i < NumberOfPoints; i++)\n            {\n                Points[i].X = _br.ReadSingle();\n                Points[i].Y = _br.ReadSingle();\n            }\n            Draw2.PointF PointA = new Draw2.PointF();\n            Draw2.PointF PointB = new Draw2.PointF();\n            for (int i = 0; i < NumberOfPoints; i++)\n            {\n                if (first)\n                {\n                    PointA = Points[i];\n                    first = false;\n                }\n                else\n                {\n                    PointB = Points[i];\n                    DoInstructions(PointA.X, PointB.X, PointA.Y, PointB.Y,p);\n                    PointA = PointB;\n                }\n            }\n        }\n\n        private void DoRelative(UInt32 NumberOfPoints, BinaryReader _br, Draw2.Pen p)\n        {\n            throw new NotSupportedException(\"Relative Points are not supported\");\n        }\n\n        private void DoCompressed(UInt32 NumberOfPoints, BinaryReader _br, Draw2.Pen p)\n        {\n            bool first = true;\n            Draw2.Point[] Points = new Draw2.Point[NumberOfPoints];            \n            for (int i = 0; i < NumberOfPoints; i++)\n            {\n                Points[i].X = _br.ReadInt16();\n                Points[i].Y = _br.ReadInt16();\n            }\n            Draw2.Point PointA= new Draw2.Point();\n            Draw2.Point PointB = new Draw2.Point();\n            for (int i = 0; i < NumberOfPoints; i++)\n            {\n                if (first)\n                {\n                    PointA = Points[i];\n                    first = false;\n                }\n                else\n                {\n                    PointB = Points[i];\n                    DoInstructions(PointA.X, PointB.X, PointA.Y, PointB.Y, p);\n                    PointA = PointB;\n                }\n            }\n        }\n\n        private void DoInstructions(Single Xa,Single Xb, Single Ya, Single Yb,Draw2.Pen p)\n        {\n            BorderStyleEnum ls = getLineStyle(p);\n           \n          \n            switch (p.Brush.GetType().Name)\n            {\n                case \"SolidBrush\":\n                   Draw2.SolidBrush theBrush = (Draw2.SolidBrush)p.Brush;\n                    PageLine pl = new PageLine();\n                    pl.X = X + (Xa * SCALEFACTOR);\n                    pl.Y = Y + (Ya * SCALEFACTOR);\n                    pl.X2 = X + (Xb * SCALEFACTOR);\n                    pl.Y2 = Y + (Yb * SCALEFACTOR);                    \n                    \n                    StyleInfo SI = new StyleInfo();\n                    SI.Color = theBrush.Color;\n                    SI.BColorTop = theBrush.Color;\n                    SI.BStyleTop = ls;\n                    SI.BWidthTop = p.Width * SCALEFACTOR;\n                    SI.BColorBottom = theBrush.Color;\n                    SI.BStyleBottom = ls;\n                    SI.BWidthBottom = p.Width * SCALEFACTOR;\n                    SI.BColorLeft = theBrush.Color;\n                    SI.BStyleLeft = ls;\n                    SI.BWidthLeft = p.Width * SCALEFACTOR;\n                    SI.BColorRight = theBrush.Color;\n                    SI.BStyleRight = ls;\n                    SI.BWidthRight = p.Width * SCALEFACTOR; \n                    pl.SI = SI;\n                    items.Add(pl);\n                    break;\n                default:\n                    break;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/EMFConverter/EMFRecords/EMFDrawingRecords/DrawPie.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    internal class DrawPie : DrawBase\n    {\n        internal DrawPie(Single Xin, Single Yin, Single WidthIn, Single HeightIn, System.Collections.Hashtable ObjectTableIn)\n        {\n            X = Xin;\n            Y = Yin;\n            Width = WidthIn;\n            Height = HeightIn;\n            ObjectTable = ObjectTableIn;\n            items = new List<PageItem>();\n        }\n\n        public List<PageItem> Process(int Flags, byte[] RecordData)\n        {\n            MemoryStream _ms = null;\n            BinaryReader _br = null;\n            MemoryStream _fs = null;\n            BinaryReader _fr = null;\n            try\n            {\n                _fs = new MemoryStream(BitConverter.GetBytes(Flags));\n                _fr = new BinaryReader(_fs);\n                //Byte 1 will be ObjectID\n                byte ObjectID = _fr.ReadByte();\n                //Byte 2 is the real flags\n                byte RealFlags = _fr.ReadByte();\n                // 0 1 2 3 4 5 6 7\n                // X X X X X X C X                \n                // if C = 1 Data int16 else float!\n                //PJR20220801 - (int) Math.Pow(2,6) !=64 it's 63!!! Argh!!!\n                bool Compressed = ((RealFlags >> 6) & 1) == 1; //((RealFlags & (int)Math.Pow(2, 6)) == (int)Math.Pow(2, 6));\n                                \n                _ms = new MemoryStream(RecordData);\n                _br = new BinaryReader(_ms);\n\n                Single StartAngle = _br.ReadSingle();\n                Single SweepAngle = _br.ReadSingle();\n                EMFPen EMFp = (EMFPen)ObjectTable[ObjectID];\n                Draw2.Pen p = EMFp.myPen;\n                if (Compressed)\n                {\n                    DoCompressed(StartAngle,SweepAngle, _br, p);\n                }\n                else\n                {\n                    DoFloat(StartAngle, SweepAngle, _br, p);\n                }\n                return items;\n            }\n            finally\n            {\n                if (_br != null)\n                    _br.Close();\n                if (_ms != null)\n                    _ms.Dispose();\n                if (_fr != null)\n                    _fr.Close();\n                if (_fs != null)\n                    _fs.Dispose();\n            }\n        }\n\n        private void DoFloat(Single StartAngle,Single SweepAngle, BinaryReader _br, Draw2.Pen p)\n        {\n            Single recX = _br.ReadSingle();\n            Single recY = _br.ReadSingle();\n            Single recWidth = _br.ReadSingle();\n            Single recHeight = _br.ReadSingle();\n            DoInstructions(recX, recY, recWidth, recHeight, p,StartAngle,SweepAngle);\n            \n        }\n\n        private void DoCompressed(Single StartAngle,Single SweepAngle, BinaryReader _br, Draw2.Pen p)\n        {           \n            Int16 recX = _br.ReadInt16();\n            Int16 recY = _br.ReadInt16();\n            Int16 recWidth = _br.ReadInt16();\n            Int16 recHeight = _br.ReadInt16();\n            DoInstructions(recX, recY, recWidth, recHeight, p, StartAngle, SweepAngle);\n        }\n\n        private void DoInstructions(Single recX, Single recY, Single recWidth, Single recHeight, Draw2.Pen p,Single StartAngle,Single SweepAngle)\n        {\n         \n            BorderStyleEnum ls = getLineStyle(p);\n            switch (p.Brush.GetType().Name)\n            {\n                case \"SolidBrush\":\n                   Draw2.SolidBrush theBrush = (Draw2.SolidBrush)p.Brush;\n                    PagePie pl = new PagePie();\n                    pl.StartAngle = StartAngle;\n                    pl.SweepAngle = SweepAngle;\n                    pl.X = X + (recX * SCALEFACTOR);\n                    pl.Y = Y + (recY * SCALEFACTOR);\n                    pl.W = recWidth * SCALEFACTOR;\n                    pl.H = recHeight * SCALEFACTOR;\n\n                    StyleInfo SI = new StyleInfo();\n                    SI.Color = theBrush.Color;\n                    SI.BColorTop = SI.BColorBottom = SI.BColorLeft = SI.BColorRight = theBrush.Color;\n                    SI.BStyleTop = SI.BStyleBottom = SI.BStyleLeft = SI.BStyleRight = ls;\n                    SI.BWidthTop = SI.BWidthBottom = SI.BWidthLeft = SI.BWidthRight = p.Width * SCALEFACTOR;\n                    pl.SI = SI;\n                    items.Add(pl);\n                    break;\n                default:\n                    break;\n            }\n        }\n    }\n\n}\n\n\n"
  },
  {
    "path": "RdlEngine/Definition/EMFConverter/EMFRecords/EMFDrawingRecords/DrawRects.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{       \n    internal class DrawRects : DrawBase\n    {\n        internal DrawRects(Single Xin, Single Yin, Single WidthIn, Single HeightIn, System.Collections.Hashtable ObjectTableIn)\n        {\n            X = Xin;\n            Y = Yin;\n            Width = WidthIn;\n            Height = HeightIn;          \n            ObjectTable = ObjectTableIn;\n            items = new List<PageItem>();\n        }\n\n        public List<PageItem> Process(int Flags, byte[] RecordData)\n        {\n            MemoryStream _ms = null;\n            BinaryReader _br = null;\n            MemoryStream _fs = null;\n            BinaryReader _fr = null;\n            try\n            {                \n                _fs = new MemoryStream(BitConverter.GetBytes(Flags));\n                _fr = new BinaryReader(_fs);\n                //Byte 1 will be ObjectID\n                byte ObjectID = _fr.ReadByte();\n                //Byte 2 is the real flags\n                byte RealFlags = _fr.ReadByte();\n                // 0 1 2 3 4 5 6 7\n                // X X X X X X C X                \n                // if C = 1 Data int16 else float!\n                //PJR20220801 - (int) Math.Pow(2,6) !=64 it's 63!!! Argh!!!\n                bool Compressed = ((RealFlags >> 6) & 1) == 1; //((RealFlags & (int)Math.Pow(2, 6)) == (int)Math.Pow(2, 6));\n                                                             \n                _ms = new MemoryStream(RecordData);\n                _br = new BinaryReader(_ms);\n                UInt32 NumberOfRects = _br.ReadUInt32();\n                EMFPen EMFp = (EMFPen)ObjectTable[ObjectID];\n                Draw2.Pen p = EMFp.myPen;\n                if (Compressed)\n                {\n                    DoCompressed(NumberOfRects, _br, p);\n                }\n                else\n                {\n                    DoFloat(NumberOfRects, _br, p);\n                }\n                return items;\n            }                  \n            finally\n            {\n                if (_br != null)\n                    _br.Close();\n                if (_ms != null)\n                    _ms.Dispose();\n                if (_fr != null)\n                    _fr.Close();\n                if (_fs != null)\n                    _fs.Dispose();\n            }\n        }\n\n        private void DoFloat(UInt32 NumberOfRects, BinaryReader _br, Draw2.Pen p)\n        {\n            for (int i = 0; i < NumberOfRects; i++)\n            {\n                Single recX = _br.ReadSingle();\n                Single recY = _br.ReadSingle();\n                Single recWidth = _br.ReadSingle();\n                Single recHeight = _br.ReadSingle();\n                DoInstructions(recX, recY, recWidth, recHeight, p);\n            }\n        }\n\n        private void DoCompressed(UInt32 NumberOfRects, BinaryReader _br, Draw2.Pen p)\n        {\n            for (int i = 0; i < NumberOfRects; i++)\n            {\n                Int16 recX = _br.ReadInt16();\n                Int16 recY = _br.ReadInt16();\n                Int16 recWidth = _br.ReadInt16();\n                Int16 recHeight = _br.ReadInt16();\n                DoInstructions(recX, recY, recWidth, recHeight, p);\n            }\n        }\n\n        private void DoInstructions(Single recX, Single recY, Single recWidth, Single recHeight, Draw2.Pen p)\n        {\n            BorderStyleEnum ls = getLineStyle(p);           \n            switch (p.Brush.GetType().Name)\n            {\n                case \"SolidBrush\":\n                   Draw2.SolidBrush theBrush = (Draw2.SolidBrush)p.Brush;\n                    PageRectangle pl = new PageRectangle();\n                    pl.X = X + (recX * SCALEFACTOR);\n                    pl.Y = Y + (recY * SCALEFACTOR);\n                    pl.W = recWidth * SCALEFACTOR;\n                    pl.H = recHeight * SCALEFACTOR;\n\n                    StyleInfo SI = new StyleInfo();\n                    SI.Color = theBrush.Color;\n                    SI.BColorTop = SI.BColorBottom = SI.BColorLeft = SI.BColorRight = theBrush.Color;\n                    SI.BStyleTop = SI.BStyleBottom = SI.BStyleLeft = SI.BStyleRight = ls;\n                    SI.BWidthTop = SI.BWidthBottom = SI.BWidthLeft = SI.BWidthRight = p.Width * SCALEFACTOR;\n                    pl.SI = SI;\n                    items.Add(pl);  \n                    break;\n                default:\n                    break;\n            }\n        }\n    }\n       \n    }\n\n\n"
  },
  {
    "path": "RdlEngine/Definition/EMFConverter/EMFRecords/EMFDrawingRecords/DrawString.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\nusing Majorsilence.Reporting.Rdl;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    //takes the record data and returns the instructions for Draw2...I guess.    \n    internal class DrawString : DrawBase\n    {\n        internal DrawString(Single Xin, Single Yin, Single WidthIn, Single HeightIn,System.Collections.Hashtable ObjectTableIn)\n        {\n            X = Xin;\n            Y = Yin;\n            Width = WidthIn;\n            Height = HeightIn;           \n            ObjectTable = ObjectTableIn;\n            items = new List<PageItem>();\n        }\n\n        public List<PageItem> Process(int Flags, byte[] RecordData)\n        {\n            MemoryStream _ms = null;\n            BinaryReader _br = null;\n            MemoryStream _fs = null;\n            BinaryReader _fr = null;\n            try\n            {               \n                _fs = new MemoryStream(BitConverter.GetBytes(Flags));\n                _fr = new BinaryReader(_fs);\n                //Byte 1 will be ObjectID - a font in the object table\n                byte ObjectID = _fr.ReadByte();\n                //Byte 2 is the real flags\n                byte RealFlags = _fr.ReadByte();\n                // 0 1 2 3 4 5 6 7\n                // X X X X X X X S\n                // if S = type of brush - if S then ARGB, else a brush object in object table\n\n                _ms = new MemoryStream(RecordData);\n                _br = new BinaryReader(_ms);\n                //PJR20220801 - (int) Math.Pow(2,7) !=128 it's 127!!! Argh!!!\n                bool BrushIsARGB = ((RealFlags >> 7) & 1) == 1; //((RealFlags & (int)Math.Pow(2, 7)) == (int)Math.Pow(2, 7));\n                Draw2.Brush b;\n                if (BrushIsARGB)\n                {\n                    byte A, R, G, B;\n                    B = _br.ReadByte();\n                    G = _br.ReadByte();\n                    R = _br.ReadByte();\n                    A = _br.ReadByte();\n                    b = new Draw2.SolidBrush(Draw2.Color.FromArgb(A, R, G, B));\n                }\n                else\n                {\n                    UInt32 BrushID = _br.ReadUInt32();\n                    EMFBrush EMFb = (EMFBrush)ObjectTable[(byte)BrushID];\n                    b = EMFb.myBrush;\n                }\n\n                UInt32 FormatID = _br.ReadUInt32(); // Index of Optional stringFormatobject in Object Table...\n                UInt32 StringLength = _br.ReadUInt32();\n                //bounding of string...\n                Single recX = _br.ReadSingle();\n                Single recY = _br.ReadSingle();\n                Single recWidth = _br.ReadSingle();\n                Single recHeight = _br.ReadSingle();\n                //Array of Chars...                 \n                char[] StringData = new char[StringLength];\n                System.Text.UnicodeEncoding d = new System.Text.UnicodeEncoding();\n                d.GetChars(_br.ReadBytes((int)StringLength * 2), 0, (int)StringLength * 2, StringData, 0);\n                EMFFont EF = (EMFFont)ObjectTable[(byte)ObjectID];\n                Draw2.Font f = EF.myFont;\n                Draw2.StringFormat sf;\n                if (ObjectTable.Contains((byte)FormatID))\n                {\n                    EMFStringFormat ESF = (EMFStringFormat)ObjectTable[(byte)FormatID];\n                    sf = ESF.myStringFormat;\n                }\n                else\n                {\n                    sf = new Draw2.StringFormat();\n                }\n\n                DoInstructions(f, sf, b, recX, recY, recWidth, recHeight, new String(StringData));\n                return items;\n            }\n            finally\n            {\n                if (_br != null)\n                    _br.Close();\n                if (_ms != null)\n                    _ms.Dispose();\n                if (_fr != null)\n                    _fr.Close();\n                if (_fs != null)\n                    _fs.Dispose();\n            }\n        }\n\n        private void DoInstructions(Draw2.Font f, Draw2.StringFormat sf, Draw2.Brush br, Single recX, Single recY, Single recWidth, Single recHeight, String Text)\n        {\n            Draw2.Color Col = Draw2.Color.Black;\n            if (br.GetType().Name.Equals(\"SolidBrush\"))\n            {\n                Draw2.SolidBrush sb = (Draw2.SolidBrush)br;\n                Col = sb.Color;\n            }\n\n            PageText pt = new PageText(Text);\n\n            pt.X = X + (recX * SCALEFACTOR);\n            pt.Y = Y + (recY * SCALEFACTOR);\n            pt.W = recWidth * SCALEFACTOR;\n            pt.H = recHeight * SCALEFACTOR;          \n            StyleInfo SI = new StyleInfo();\n            SI.Color = Col;           \n            SI.Direction = DirectionEnum.LTR;\n            SI.FontFamily = f.Name;\n            SI.FontSize = f.Size * SCALEFACTOR; \n            if (f.Italic) {SI.FontStyle = FontStyleEnum.Italic;}\n            if (f.Bold) { SI.FontWeight = FontWeightEnum.Bold; }\n            if (f.Underline) { SI.TextDecoration = TextDecorationEnum.Underline; }\n            if (sf.LineAlignment == Draw2.StringAlignment.Center)\n            {\n                SI.TextAlign = TextAlignEnum.Center;\n            }\n            else if (sf.LineAlignment == Draw2.StringAlignment.Far)\n            {\n                SI.TextAlign = TextAlignEnum.Right;\n            }\n\n            if (sf.Alignment == Draw2.StringAlignment.Center)\n            {\n                SI.VerticalAlign = VerticalAlignEnum.Middle;\n            }\n            else if (sf.Alignment == Draw2.StringAlignment.Far)\n            {\n                SI.VerticalAlign = VerticalAlignEnum.Bottom;\n            }\n            if ((sf.FormatFlags & Draw2.StringFormatFlags.DirectionVertical) == Draw2.StringFormatFlags.DirectionVertical)\n            {\n                SI.WritingMode = WritingModeEnum.tb_rl;\n            }\n            else\n            {\n                SI.WritingMode = WritingModeEnum.lr_tb;\n            }\n            pt.SI = SI;\n            items.Add(pt);\n            \n\n            //r = Math.Round((r / 255), 3);\n            //g = Math.Round((g / 255), 3);\n            //b = Math.Round((b / 255), 3);\n\n            //string pdfFont = fonts.GetPdfFont(f.Name);\n            ////need a graphics object...\n            //Bitmap bm = new Bitmap(1, 1);\n            //Graphics gr = Graphics.FromImage(bm);\n            //Font scaleFont = new Font(f.Name, (f.Size * ScaleY) * 1.5f, f.Style, f.Unit);\n            //SizeF TextSize = gr.MeasureString(Text.Substring(0, Text.Length), scaleFont, (int)(recWidth * ScaleX), sf);\n            //float textwidth = TextSize.Width;\n            //float textHeight = TextSize.Height;\n            //float startX = X + recX * ScaleX;\n            //float startY = Y + Height - recY * ScaleY - (scaleFont.Size);\n            //if ((sf.FormatFlags & StringFormatFlags.DirectionVertical) != StringFormatFlags.DirectionVertical)\n            //{\n            //    if (sf.LineAlignment == StringAlignment.Center)\n            //    {\n            //        startX = (startX + (recWidth * ScaleX) / 2) - (textwidth / 4);\n            //    }\n            //    else if (sf.LineAlignment == StringAlignment.Far)\n            //    {\n            //        startX = (startX + recWidth * ScaleX) - (textwidth / 1.8f);\n            //    }\n            //}\n            //else\n            //{\n            //    startX += textwidth / 4;\n            //    if (sf.LineAlignment == StringAlignment.Center)\n            //    {\n            //        startY = (startY - (recHeight * ScaleY) / 2) + (textHeight / 4);\n            //    }\n            //    else if (sf.LineAlignment == StringAlignment.Far)\n            //    {\n            //        startY = (startY - recHeight * ScaleY) + (textHeight / 1.8f);\n            //    }\n            //}\n\n            //Lines.Append(\"\\r\\nq\\t\");\n\n            //string newtext = PdfUtility.UTF16StringQuoter(Text);\n            //if ((sf.FormatFlags & StringFormatFlags.DirectionVertical) != StringFormatFlags.DirectionVertical)\n            //{\n            //    Lines.AppendFormat(System.Globalization.NumberFormatInfo.InvariantInfo,\n            //           \"\\r\\nBT/{0} {1} Tf\\t{5} {6} {7} rg\\t{2} {3} Td \\t({4}) Tj\\tET\\tQ\\t\",\n            //           pdfFont, scaleFont.SizeInPoints, startX, startY, newtext, r, g, b);\n            //}\n            //else\n            //{\n            //    double rads = -283.0 / 180.0;\n            //    double radsCos = Math.Cos(rads);\n            //    double radsSin = Math.Sin(rads);\n\n            //    Lines.AppendFormat(System.Globalization.NumberFormatInfo.InvariantInfo,\n            //                \"\\r\\nBT/{0} {1} Tf\\t{5} {6} {7} rg\\t{8} {9} {10} {11} {2} {3} Tm \\t({4}) Tj\\tET\\tQ\\t\",\n            //                pdfFont, scaleFont.SizeInPoints, startX, startY, newtext, r, g, b,\n            //                radsCos, radsSin, -radsSin, radsCos);\n            //}\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/EMFConverter/EMFRecords/EMFDrawingRecords/FillEllipse.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    internal class FillEllipse : DrawBase\n    {\n        internal FillEllipse(Single Xin, Single Yin, Single WidthIn, Single HeightIn, System.Collections.Hashtable ObjectTableIn)\n        {\n            X = Xin;\n            Y = Yin;\n            Width = WidthIn;\n            Height = HeightIn;           \n            ObjectTable = ObjectTableIn;\n            items = new List<PageItem>();\n        }\n\n        public List<PageItem> Process(int Flags, byte[] RecordData)\n        {\n            MemoryStream _ms = null;\n            BinaryReader _br = null;\n            MemoryStream _fs = null;\n            BinaryReader _fr = null;\n            try\n            {\n              \n                _fs = new MemoryStream(BitConverter.GetBytes(Flags));\n                _fr = new BinaryReader(_fs);\n                _fr.ReadByte();\n                //Byte 1 will be ignored\n                byte RealFlags = _fr.ReadByte();\n                //Byte 2 will be brushtype\n                // 0 1 2 3 4 5 6 7\n                // X X X X X X C S\n                // if S = 1 brushID is an ARGBobject, else its an Index to object table\n                // if C = 1 int16, 0 = Points are Float (ignore P)              \n                //PJR20220801 - (int) Math.Pow(2,6) !=64 it's 63!!! Argh!!!\n                bool Compressed = ((RealFlags >> 6) & 1) == 1; //((RealFlags & (int)Math.Pow(2, 6)) == (int)Math.Pow(2, 6));\n                bool BrushIsARGB = ((RealFlags >> 7) & 1) == 1; //((RealFlags & (int)Math.Pow(2, 7)) == (int)Math.Pow(2, 7));\n\n                _ms = new MemoryStream(RecordData);\n                _br = new BinaryReader(_ms);\n                Draw2.Brush b;\n                if (BrushIsARGB)\n                {\n                    byte A, R, G, B;\n                    B = _br.ReadByte();\n                    G = _br.ReadByte();\n                    R = _br.ReadByte();\n                    A = _br.ReadByte();\n                    b = new Draw2.SolidBrush(Draw2.Color.FromArgb(A, R, G, B));\n                }\n                else\n                {\n                    UInt32 BrushID = _br.ReadUInt32();\n                    EMFBrush EMFb = (EMFBrush)ObjectTable[(byte)BrushID];\n                    b = EMFb.myBrush;\n                }\n                if (Compressed)\n                {\n                    Int16 Xp = _br.ReadInt16();\n                    Int16 Yp = _br.ReadInt16();\n                    Int16 Wid = _br.ReadInt16();\n                    Int16 Hgt = _br.ReadInt16();\n                    DoInstructions(Xp, Yp, Wid, Hgt, b);\n                }\n                else\n                {\n                    Single Xp = _br.ReadSingle();\n                    Single Yp = _br.ReadSingle();\n                    Single Wid = _br.ReadSingle();\n                    Single Hgt = _br.ReadSingle();\n                    DoInstructions(Xp, Yp, Wid, Hgt, b);\n                }\n                return items;\n            }\n            finally\n            {\n                if (_br != null)\n                    _br.Close();\n                if (_ms != null)\n                    _ms.Dispose();\n                if (_fr != null)\n                    _fr.Close();\n                if (_fs != null)\n                    _fs.Dispose();\n            }\n        }\n\n        private void DoInstructions(Single Xp, Single Yp, Single Wid, Single Hgt, Draw2.Brush b)\n        {\n            switch (b.GetType().Name)\n            {\n                case \"SolidBrush\":\n                   Draw2.SolidBrush theBrush = (Draw2.SolidBrush)b;\n                   Draw2.Color col = theBrush.Color;  \n                    PageEllipse pl = new PageEllipse();\n                    pl.X = X + (Xp * SCALEFACTOR);\n                    pl.Y = Y + (Yp * SCALEFACTOR);\n                    pl.W = Wid * SCALEFACTOR;\n                    pl.H = Hgt * SCALEFACTOR;\n\n                    StyleInfo SI = new StyleInfo();                   \n                    SI.BackgroundColor = col;\n                    pl.SI = SI;\n                    items.Add(pl);  \n\n\n\n                    //Lines.AppendFormat(\"\\r\\n\"); //CrLf\n                    //Lines.AppendFormat(\"q\\t\"); //Push graphics state onto stack\n                    //Lines.AppendFormat(\"{0} w\\t\", 1 * ScaleX); //set width of path \n                    //Lines.AppendFormat(\"{0} {1} {2} RG\\t\", Math.Round(theBrush.Color.R / 255.0, 3), Math.Round(theBrush.Color.G / 255.0, 3), Math.Round(theBrush.Color.B / 255.0, 3)); //Set RGB colours\n                    //Lines.AppendFormat(\"{0} {1} {2} rg\\t\", Math.Round(theBrush.Color.R / 255.0, 3), Math.Round(theBrush.Color.G / 255.0, 3), Math.Round(theBrush.Color.B / 255.0, 3)); //Set RGB colours\n                    ////Need some bezier curves to  draw an ellipse.. we can't draw a circle, but we can get close.\n                    //Double k = 0.5522847498;\n                    //Double RadiusX = (Wid / 2.0) * ScaleX;\n                    //Double RadiusY = (Hgt / 2.0) * ScaleY;\n                    //Double Y4 = Y + Height - Yp * ScaleY;\n                    //Double X1 = Xp * ScaleX + X;\n                    //Double Y1 = Y4 - RadiusY;\n                    //Double X4 = X1 + RadiusX;\n                    //Lines.AppendFormat(\"{0} {1} m\\t\", X1, Y1);//FirstPoint..\n                    //Double kRy = k * RadiusY;\n                    //Double kRx = k * RadiusX;\n                    ////Control Point 1 will be on the same X as point 1 and be -kRy Y\n                    //Double X2 = X1;\n                    //Double Y2 = Y1 + kRy;\n                    //Double X3 = X4 - kRx;\n                    //Double Y3 = Y4;\n                    //Lines.AppendFormat(\"{0} {1} {2} {3} {4} {5}  c\\t\", X2, Y2, X3, Y3, X4, Y4); //Upper Left Quadrant\n                    //X1 += 2 * RadiusX;\n                    //X2 = X1;\n                    //X3 += 2 * kRx;\n                    //Lines.AppendFormat(\"{0} {1} {2} {3} {4} {5}  c\\t\", X3, Y3, X2, Y2, X1, Y1); //Upper Right Quadrant\n                    //Y2 -= 2 * kRy;\n                    //Y3 -= 2 * RadiusY;\n                    //Y4 = Y3;\n                    //Lines.AppendFormat(\"{0} {1} {2} {3} {4} {5}  c\\t\", X2, Y2, X3, Y3, X4, Y4); //Lower Right Quadrant\n                    //X1 -= 2 * RadiusX;\n                    //X2 = X1;\n                    //X3 -= 2 * kRx;\n                    //Lines.AppendFormat(\"{0} {1} {2} {3} {4} {5}  c\\t\", X3, Y3, X2, Y2, X1, Y1); //Lower Right Quadrant\n                    //Lines.AppendFormat(\"f\\t\");//fill path\n                    //Lines.AppendFormat(\"Q\\t\");//Pop graphics state from stack \n                    break;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/EMFConverter/EMFRecords/EMFDrawingRecords/FillPie.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    internal class FillPie : DrawBase\n    {\n        internal FillPie(Single Xin, Single Yin, Single WidthIn, Single HeightIn, System.Collections.Hashtable ObjectTableIn)\n        {\n            X = Xin;\n            Y = Yin;\n            Width = WidthIn;\n            Height = HeightIn;\n            ObjectTable = ObjectTableIn;\n            items = new List<PageItem>();\n        }\n        public List<PageItem> Process(int Flags, byte[] RecordData)\n        {\n            MemoryStream _ms = null;\n            BinaryReader _br = null;\n            MemoryStream _fs = null;\n            BinaryReader _fr = null;\n            try\n            {\n                _fs = new MemoryStream(BitConverter.GetBytes(Flags));\n                _fr = new BinaryReader(_fs);\n                _fr.ReadByte();\n                //Byte 2 is the real flags\n                byte RealFlags = _fr.ReadByte();\n                // 0 1 2 3 4 5 6 7\n                // X X X X X X C S                \n                // if C = 1 Data int16 else float!\n                //PJR20220801 - (int) Math.Pow(2,6) !=64 it's 63!!! Argh!!!\n                bool Compressed = ((RealFlags >> 6) & 1) == 1; //((RealFlags & (int)Math.Pow(2, 6)) == (int)Math.Pow(2, 6));\n                bool BrushIsARGB = ((RealFlags >> 7) & 1) == 1; //((RealFlags & (int)Math.Pow(2, 7)) == (int)Math.Pow(2, 7));\n\n                _ms = new MemoryStream(RecordData);\n                _br = new BinaryReader(_ms);\n                Draw2.Brush b;\n                if (BrushIsARGB)\n                {\n                    byte A, R, G, B;\n                    B = _br.ReadByte();\n                    G = _br.ReadByte();\n                    R = _br.ReadByte();\n                    A = _br.ReadByte();\n                    b = new Draw2.SolidBrush(Draw2.Color.FromArgb(A, R, G, B));\n                }\n                else\n                {\n                    UInt32 BrushID = _br.ReadUInt32();\n                    EMFBrush EMFb = (EMFBrush)ObjectTable[(byte)BrushID];\n                    b = EMFb.myBrush;\n                }\n                Single StartAngle = _br.ReadSingle();\n                Single SweepAngle = _br.ReadSingle();\n                if (Compressed)\n                {\n                    DoCompressed(StartAngle,SweepAngle, _br, b);\n                }\n                else\n                {\n                    DoFloat(StartAngle,SweepAngle, _br, b);\n                }\n                return items;\n            }\n            finally\n            {\n                if (_br != null)\n                    _br.Close();\n                if (_ms != null)\n                    _ms.Dispose();\n                if (_fr != null)\n                    _fr.Close();\n                if (_fs != null)\n                    _fs.Dispose();\n            }\n        }\n\n        private void DoFloat(Single StartAngle,Single SweepAngle, BinaryReader _br, Draw2.Brush b)\n        {\n                Single recX = _br.ReadSingle();\n                Single recY = _br.ReadSingle();\n                Single recWidth = _br.ReadSingle();\n                Single recHeight = _br.ReadSingle();\n                DoInstructions(recX, recY, recWidth, recHeight, b, StartAngle, SweepAngle);          \n        }\n\n        private void DoCompressed(Single StartAngle, Single SweepAngle, BinaryReader _br, Draw2.Brush b)\n        {\n            Int16 recX = _br.ReadInt16();\n            Int16 recY = _br.ReadInt16();\n            Int16 recWidth = _br.ReadInt16();\n            Int16 recHeight = _br.ReadInt16();\n            DoInstructions(recX, recY, recWidth, recHeight, b, StartAngle, SweepAngle);            \n        }\n\n        private void DoInstructions(Single recX, Single recY, Single recWidth, Single recHeight, Draw2.Brush b, Single StartAngle, Single SweepAngle)\n        {\n\n            PagePie pl = new PagePie();\n            pl.StartAngle = StartAngle;\n            pl.SweepAngle = SweepAngle;\n\n            StyleInfo SI = new StyleInfo();\n            pl.X = X + (recX * SCALEFACTOR);\n            pl.Y = Y + (recY * SCALEFACTOR);\n            pl.W = recWidth * SCALEFACTOR;\n            pl.H = recHeight * SCALEFACTOR;\n\n            switch (b.GetType().Name)\n            {\n                case \"SolidBrush\":\n                   Draw2.SolidBrush theBrush = (Draw2.SolidBrush)b;\n                    SI.Color = theBrush.Color;\n                    SI.BackgroundColor = theBrush.Color;\n                    break;\n                case \"LinearGradientBrush\":\n                   Draw2.Drawing2D.LinearGradientBrush linBrush = (Draw2.Drawing2D.LinearGradientBrush)b;\n                    SI.BackgroundGradientType = BackgroundGradientTypeEnum.LeftRight;\n                    SI.BackgroundColor = linBrush.LinearColors[0];\n                    SI.BackgroundGradientEndColor = linBrush.LinearColors[1];\n                    break;\n                case \"HatchBrush\":\n                   Draw2.Drawing2D.HatchBrush hatBrush = (Draw2.Drawing2D.HatchBrush)b;\n                    SI.BackgroundColor = hatBrush.BackgroundColor;\n                    SI.Color = hatBrush.ForegroundColor;\n\n                    SI.PatternType = StyleInfo.GetPatternType(hatBrush.HatchStyle);\n                    break;\n                default:\n                    break;\n            }\n\n            pl.SI = SI;\n            items.Add(pl);\n        }\n    }\n}\n\n\n"
  },
  {
    "path": "RdlEngine/Definition/EMFConverter/EMFRecords/EMFDrawingRecords/FillPolygon.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\nusing Drawing2D = Majorsilence.Drawing.Drawing2D;\n#else\nusing Draw2 = System.Drawing;\nusing Drawing2D = System.Drawing.Drawing2D;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    internal class FillPolygon : DrawBase\n    {\n        internal FillPolygon(Single Xin, Single Yin, Single WidthIn, Single HeightIn, System.Collections.Hashtable ObjectTableIn)\n        {\n            X = Xin;\n            Y = Yin;\n            Width = WidthIn;\n            Height = HeightIn;\n            ObjectTable = ObjectTableIn;\n            items = new List<PageItem>();\n        }\n        public List<PageItem> Process(int Flags, byte[] RecordData)\n        {\n            MemoryStream _ms = null;\n            BinaryReader _br = null;\n            MemoryStream _fs = null;\n            BinaryReader _fr = null;\n            try\n            {\n                _fs = new MemoryStream(BitConverter.GetBytes(Flags));\n                _fr = new BinaryReader(_fs);\n                _fr.ReadByte();\n                //Byte 2 is the real flags\n                byte RealFlags = _fr.ReadByte();\n                // 0 1 2 3 4 5 6 7\n                // X X X X X X C S                \n                // if C = 1 Data int16 else float!\n                //PJR20220801 - (int) Math.Pow(2,6) !=64 it's 63!!! Argh!!!\n                bool Compressed = ((RealFlags >> 6) & 1) == 1; //((RealFlags & (int)Math.Pow(2, 6)) == (int)Math.Pow(2, 6));\n                bool BrushIsARGB = ((RealFlags >> 7) & 1) == 1; //((RealFlags & (int)Math.Pow(2, 7)) == (int)Math.Pow(2, 7));\n\n                _ms = new MemoryStream(RecordData);\n                _br = new BinaryReader(_ms);\n                Draw2.Brush b;\n                if (BrushIsARGB)\n                {\n                    byte A, R, G, B;\n                    B = _br.ReadByte();\n                    G = _br.ReadByte();\n                    R = _br.ReadByte();\n                    A = _br.ReadByte();\n                    b = new Draw2.SolidBrush(Draw2.Color.FromArgb(A, R, G, B));\n                }\n                else\n                {\n                    UInt32 BrushID = _br.ReadUInt32();\n                    EMFBrush EMFb = (EMFBrush)ObjectTable[(byte)BrushID];\n                    b = EMFb.myBrush;\n                }\n                UInt32 NumberOfPoints = _br.ReadUInt32();\n                if (Compressed)\n                {\n                    DoCompressed(NumberOfPoints, _br, b);\n                }\n                else\n                {\n                    DoFloat(NumberOfPoints, _br, b);\n                }\n                return items;\n            }\n            finally\n            {\n                if (_br != null)\n                    _br.Close();\n                if (_ms != null)\n                    _ms.Dispose();\n                if (_fr != null)\n                    _fr.Close();\n                if (_fs != null)\n                    _fs.Dispose();\n            }\n        }\n\n        private void DoFloat(UInt32 NumberOfPoints, BinaryReader _br, Draw2.Brush b)\n        {\n            Draw2.PointF[] Ps = new Draw2.PointF[NumberOfPoints];\n            for (int i = 0; i < NumberOfPoints; i++)\n            {\n                  \n                Ps[i].X = (float)(X +(_br.ReadSingle() * SCALEFACTOR));\n                Ps[i].Y = (float)(Y + (_br.ReadSingle() * SCALEFACTOR));  \n            }\n            DoInstructions(Ps, b);\n        }\n\n        private void DoCompressed(UInt32 NumberOfPoints, BinaryReader _br, Draw2.Brush b)\n        {\n            Draw2.PointF[] Ps = new Draw2.PointF[NumberOfPoints];\n            for (int i = 0; i < NumberOfPoints; i++)\n            { \n                Int16 px = _br.ReadInt16();\n                Int16 py = _br.ReadInt16();\n                Ps[i].X = X + (px * SCALEFACTOR);//X + px * SCALEFACTOR;\n                Ps[i].Y = Y + (py * SCALEFACTOR);//Y + py * SCALEFACTOR;\n            } \n            DoInstructions(Ps, b);\n        }\n\n        private void DoInstructions(Draw2.PointF[] Ps, Draw2.Brush b)\n        {\n            PagePolygon pl = new PagePolygon();\n            //pl.X = X * SCALEFACTOR;\n            //pl.Y = Y * SCALEFACTOR;\n            pl.Points = Ps;\n            StyleInfo SI = new StyleInfo();           \n\n            switch (b.GetType().Name)\n            {\n                case \"SolidBrush\":\n                    Draw2.SolidBrush theBrush = (Draw2.SolidBrush)b;\n                    SI.Color = theBrush.Color;\n                    SI.BackgroundColor = theBrush.Color;\n                    break;\n                case \"LinearGradientBrush\":\n                    Drawing2D.LinearGradientBrush linBrush = (Drawing2D.LinearGradientBrush)b;\n                    SI.BackgroundGradientType = BackgroundGradientTypeEnum.LeftRight;\n                    SI.BackgroundColor = linBrush.LinearColors[0];\n                    SI.BackgroundGradientEndColor = linBrush.LinearColors[1];\n                    break;\n                case \"HatchBrush\":\n                    Drawing2D.HatchBrush hatBrush = (Drawing2D.HatchBrush)b;\n                    SI.BackgroundColor = hatBrush.BackgroundColor;\n                    SI.Color = hatBrush.ForegroundColor;\n                    SI.PatternType = StyleInfo.GetPatternType(hatBrush.HatchStyle);\n                    break;\n                default:\n                    break;\n            }\n\n            pl.SI = SI;\n            items.Add(pl);\n        }\n    }\n}\n\n\n"
  },
  {
    "path": "RdlEngine/Definition/EMFConverter/EMFRecords/EMFDrawingRecords/FillRects.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{       \n    internal class FillRects : DrawBase\n    {\n        internal FillRects(Single Xin, Single Yin, Single WidthIn, Single HeightIn,System.Collections.Hashtable ObjectTableIn)\n        {\n            X = Xin;\n            Y = Yin;\n            Width = WidthIn;\n            Height = HeightIn;         \n            ObjectTable = ObjectTableIn;\n            items = new List<PageItem>();\n        }\n        public List<PageItem> Process(int Flags, byte[] RecordData)\n        {\n            MemoryStream _ms = null;\n            BinaryReader _br = null;\n            MemoryStream _fs = null;\n            BinaryReader _fr = null;\n            try\n            {                \n                _fs = new MemoryStream(BitConverter.GetBytes(Flags));\n                _fr = new BinaryReader(_fs);\n                _fr.ReadByte();\n                //Byte 2 is the real flags\n                byte RealFlags = _fr.ReadByte();\n                // 0 1 2 3 4 5 6 7\n                // X X X X X X C S                \n                // if C = 1 Data int16 else float!\n                //PJR20220801 - (int) Math.Pow(2,6) !=64 it's 63!!! Argh!!!\n                bool Compressed = ((RealFlags >> 6) & 1) == 1; //((RealFlags & (int)Math.Pow(2, 6)) == (int)Math.Pow(2, 6));\n                bool BrushIsARGB = ((RealFlags >> 7) & 1) == 1; //((RealFlags & (int)Math.Pow(2, 7)) == (int)Math.Pow(2, 7));\n\n                _ms = new MemoryStream(RecordData);\n                _br = new BinaryReader(_ms);\n                Draw2.Brush b;\n                if (BrushIsARGB)\n                {\n                    byte A, R, G, B;\n                    B = _br.ReadByte();\n                    G = _br.ReadByte();\n                    R = _br.ReadByte();\n                    A = _br.ReadByte();\n                    b = new Draw2.SolidBrush(Draw2.Color.FromArgb(A, R, G, B));\n                }\n                else\n                {\n                    UInt32 BrushID = _br.ReadUInt32();\n                    EMFBrush EMFb = (EMFBrush)ObjectTable[(byte)BrushID];\n                    b = EMFb.myBrush;\n                }\n                UInt32 NumberOfRects = _br.ReadUInt32();\n                if (Compressed)\n                {\n                    DoCompressed(NumberOfRects, _br, b);\n                }\n                else\n                {\n                    DoFloat(NumberOfRects, _br, b);\n                }\n                return items;\n            }\n            finally\n            {\n                if (_br != null)\n                    _br.Close();\n                if (_ms != null)\n                    _ms.Dispose();\n                if (_fr != null)\n                    _fr.Close();\n                if (_fs != null)\n                    _fs.Dispose();\n            }\n        }\n\n        private void DoFloat(UInt32 NumberOfRects, BinaryReader _br, Draw2.Brush b)\n        {\n            for (int i = 0; i < NumberOfRects; i++)\n            {\n                Single recX = _br.ReadSingle();\n                Single recY = _br.ReadSingle();\n                Single recWidth = _br.ReadSingle();\n                Single recHeight = _br.ReadSingle();\n                DoInstructions(recX, recY, recWidth, recHeight, b);\n            }\n        }\n\n        private void DoCompressed(UInt32 NumberOfRects, BinaryReader _br, Draw2.Brush b)\n        {\n            for (int i = 0; i < NumberOfRects; i++)\n            {\n                Int16 recX = _br.ReadInt16();\n                Int16 recY = _br.ReadInt16();\n                Int16 recWidth = _br.ReadInt16();\n                Int16 recHeight = _br.ReadInt16();\n                DoInstructions(recX, recY, recWidth, recHeight, b);\n            }\n        }\n\n        private void DoInstructions(Single recX, Single recY, Single recWidth, Single recHeight, Draw2.Brush b)\n        {\n            PageRectangle pl = new PageRectangle();\n            StyleInfo SI = new StyleInfo();            \n    \t\tpl.X = X + (recX * SCALEFACTOR);\n            pl.Y = Y + (recY * SCALEFACTOR);\n            pl.W = recWidth * SCALEFACTOR;\n            pl.H = recHeight * SCALEFACTOR; \n                    \n            switch (b.GetType().Name)\n            {\n                case \"SolidBrush\":\n                   Draw2.SolidBrush theBrush = (Draw2.SolidBrush)b;\n                    SI.Color = theBrush.Color;                    \n                    SI.BackgroundColor = theBrush.Color;\n                    break;\n                case \"LinearGradientBrush\":\n                   Draw2.Drawing2D.LinearGradientBrush linBrush = (Draw2.Drawing2D.LinearGradientBrush)b;\n                    SI.BackgroundGradientType = BackgroundGradientTypeEnum.LeftRight;\n                    SI.BackgroundColor = linBrush.LinearColors[0];\n                    SI.BackgroundGradientEndColor = linBrush.LinearColors[1];                    \n                    break;\n                case \"HatchBrush\":\n                   Draw2.Drawing2D.HatchBrush hatBrush = (Draw2.Drawing2D.HatchBrush) b;\n                    SI.BackgroundColor = hatBrush.BackgroundColor;\n                    SI.Color = hatBrush.ForegroundColor;                    \n                    SI.PatternType = StyleInfo.GetPatternType(hatBrush.HatchStyle);                    \n                    break;\n                default:\n                    break;\n            }\n            \n            pl.SI = SI;\n            items.Add(pl);\n        }\n    }\n}\n\n\n"
  },
  {
    "path": "RdlEngine/Definition/EMFConverter/EMFRecords/EMFObjects/EMFBrush.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    internal enum EMFBrushType\n    {\n        SolidColor = 0x00000000,\n        HatchFill = 0x00000001,\n        TextureFill = 0x00000002,\n        PathGradient = 0x00000003,\n        LinearGradient = 0x00000004\n    }\n\n    class EMFBrush : EMFRecordObject\n    {\n        //public EMFBrushType BrushType;\n        public Draw2.Brush myBrush;\n        \n        internal EMFBrush()\n        {\n            ObjectType = EmfObjectType.brush;\n        }\n\n        internal static EMFBrush getEMFBrush(byte[] RecordData)\n        {\n            return ProcessBrush(RecordData);\n        }\n\n        internal static EMFBrush ProcessBrush(byte[] RecordData)\n        {\n            //put the Data into a stream and use a binary reader to read the data\n            MemoryStream _ms = null;\n            BinaryReader _br = null;\n            try\n            {\n                _ms = new MemoryStream(RecordData);\n                _br = new BinaryReader(_ms);\n                UInt32 Version = _br.ReadUInt32();\n                UInt32 BrushType = _br.ReadUInt32();\n\n                switch (BrushType)\n                {\n                    case (UInt32)EMFBrushType.SolidColor:                       \n                        return new EmfSolidBrush(_br);\n                       \n                    case (UInt32)EMFBrushType.HatchFill:\n                        return new EmfHatchFillBrush(_br);                      \n                      \n                    case (UInt32)EMFBrushType.TextureFill:\n                        throw new NotSupportedException(\"TextureFill brush Not Supported Yet!\");\n                        \n                    case (UInt32)EMFBrushType.PathGradient:\n                        throw new NotSupportedException(\"PathGradient brush Not Supported Yet!\");\n                       \n                    case (UInt32)EMFBrushType.LinearGradient:\n                        return new EmfLinearGradientBrush(_br);\n                       \n                }\n                return null;\n            }\n            finally\n            {\n                if (_br != null)\n                    _br.Close();\n                if (_ms != null)\n                    _ms.Dispose();            \n            }\n        }\n    }   \n    \n    internal class EmfLinearGradientBrush : EMFBrush\n    {\n        public EmfLinearGradientBrush(BinaryReader _br)\n        {\n            UInt32 BrushFlags = _br.ReadUInt32();\n            Int32 WrapMode = _br.ReadInt32();\n            Single X = _br.ReadSingle();\n            Single Y = _br.ReadSingle();\n            Single Width = _br.ReadSingle();\n            Single Height = _br.ReadSingle();\n            Draw2.RectangleF rf = new Draw2.RectangleF(X,Y,Width,Height);\n\n            byte sA, sR, sG, sB;\n            sB = _br.ReadByte();\n            sG = _br.ReadByte();\n            sR = _br.ReadByte();\n            sA = _br.ReadByte();\n\n            byte eA, eR, eG, eB;\n            eB = _br.ReadByte();\n            eG = _br.ReadByte();\n            eR = _br.ReadByte();\n            eA = _br.ReadByte();\n\n            _br.ReadBytes(8);            \n           Draw2.Drawing2D.LinearGradientBrush tmpB = new Draw2.Drawing2D.LinearGradientBrush(rf, \n               Draw2.Color.FromArgb(sA, sR, sG, sB), Draw2.Color.FromArgb(eA, eR, eG, eB), 0f);\n            tmpB.WrapMode = (Draw2.Drawing2D.WrapMode)WrapMode;\n            \n\n            bool BrushDataTransform = ((BrushFlags & 0x00000002) == 0x00000002);\n            bool BrushDataPresetColors = ((BrushFlags & 0x00000002) == 0x00000004);\n            bool BrushDataBlendFactorsH = ((BrushFlags & 0x00000002) == 0x00000008);\n            bool BrushDataBlendFactorsV = ((BrushFlags & 0x00000002) == 0x00000010);\n            bool BrushDataIsGammaCorrected = ((BrushFlags & 0x00000002) == 0x00000080);\n\n            tmpB.GammaCorrection = BrushDataIsGammaCorrected;\n\n            if (BrushDataTransform)\n            {\n                _br.ReadBytes(24); //Transform matrix (ignored for now)  \n            }\n\n            if (BrushDataPresetColors || BrushDataBlendFactorsH || BrushDataBlendFactorsV)\n            {\n               //there must be a blend pattern\n                if (BrushDataPresetColors)\n                {\n                    //blend colors object\n                }\n                else\n                {\n                    if (!BrushDataBlendFactorsV)\n                    {\n                        //BlendFactors object on vertical (???)\n                    }\n                    else \n                    {\n                        if (!BrushDataBlendFactorsH)\n                        {\n                            //Blendfactors on horizontal (???)\n                        }\n                        else\n                        {\n                            //BlendFactors on vertical and horizontal\n                        }\n                    }\n                }\n                \n            }\n            myBrush = tmpB;\n        }\n    }\n    \n    internal class EmfHatchFillBrush: EMFBrush\n    {\n    \t\n    \tpublic EmfHatchFillBrush(BinaryReader _br)\n    \t{\n    \t\tInt32 HatchStyle = _br.ReadInt32();\n    \t\t\n    \t\tbyte fA,fR,fG,fB;\n            fB = _br.ReadByte();\n            fG = _br.ReadByte();\n            fR = _br.ReadByte();\n            fA = _br.ReadByte(); \n            \n            byte bA,bR,bG,bB;       \n            bB = _br.ReadByte();\n            bG = _br.ReadByte();\n            bR = _br.ReadByte();\n            bA = _br.ReadByte(); \n            \n            myBrush = new Draw2.Drawing2D.HatchBrush((Draw2.Drawing2D.HatchStyle) HatchStyle,\n                Draw2.Color.FromArgb(fA,fR,fG,fB),Draw2.Color.FromArgb(bA,bR,bG,bB));\n            \n            \n    \t\t\n    \t}\n    }\n\n    internal class EmfSolidBrush : EMFBrush\n    {        \n        public EmfSolidBrush(byte A, byte R, byte G, byte B)\n        {            \n            myBrush = new Draw2.SolidBrush(Draw2.Color.FromArgb(A, R, G, B));\n        }\n        public EmfSolidBrush(BinaryReader _br)\n        {            \n            byte A,R,G,B;       \n            B = _br.ReadByte();\n            G = _br.ReadByte();\n            R = _br.ReadByte();\n            A = _br.ReadByte();   \n            myBrush = new Draw2.SolidBrush(Draw2.Color.FromArgb(A,R,G,B));\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/EMFConverter/EMFRecords/EMFObjects/EMFFont.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\n#else\nusing System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    class EMFFont : EMFRecordObject\n    {\n        public Font myFont;\n\n        internal EMFFont()\n        {\n            ObjectType = EmfObjectType.font;\n        }\n\n        internal static EMFFont getEMFFont(byte[] RecordData)\n        {\n            return Process(RecordData);\n        }\n\n        private static EMFFont Process(byte[] RecordData)\n        {\n            //put the Data into a stream and use a binary reader to read the data\n            MemoryStream _ms = null;\n            BinaryReader _br = null;\n            try\n            {\n                _ms = new MemoryStream(RecordData);\n                _br = new BinaryReader(_ms);\n                UInt32 Version = _br.ReadUInt32();\n                Single EmSize = _br.ReadSingle();\n                UInt32 SizeUnit = _br.ReadUInt32();\n                Int32 FontStyleFlags = _br.ReadInt32();\n                _br.ReadUInt32();\n                UInt32 NameLength = _br.ReadUInt32();\n                char[] FontFamily = new char[NameLength]; \n                System.Text.UnicodeEncoding d = new System.Text.UnicodeEncoding();\n                d.GetChars(_br.ReadBytes((int)NameLength * 2),0,(int)NameLength * 2,FontFamily,0);                \n                Font aFont = new Font(new String(FontFamily), EmSize, (FontStyle)FontStyleFlags, (GraphicsUnit)SizeUnit);\n                EMFFont ThisFont = new EMFFont();\n                ThisFont.myFont = aFont;\n                return ThisFont;\n            }\n            finally\n            {\n                if (_br != null)\n                    _br.Close();               \n                if (_ms != null)\n                    _ms.Dispose();            \n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/EMFConverter/EMFRecords/EMFObjects/EMFPen.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    [Flags]\n    internal enum PenDataFlags\n    {\n        PenDataTransform = 0x00000001,\n        PenDataStartCap = 0x00000002,\n        PenDataEndCap = 0x00000004,\n        PenDataJoin = 0x00000008,\n        PenDataMiterLimit = 0x00000010,\n        PenDataLineStyle =0x00000020,\n        PenDataDashedLineCap =0x00000040,\n        PenDataDashedLineOffset =0x00000080,\n        PenDataDashedLine =0x00000100,\n        PenDataNonCenter =0x00000200,\n        PenDataCompoundLine =0x00000400,\n        PenDataCustomStartCap =0x00000800,\n        PenDataCustomEndCap =0x00001000,   \n    }\n\n    internal enum CustomLineCapDataType \n    {\n        CustomLineCapDataTypeDefault = 0x00000000, \n        CustomLineCapDataTypeAdjustableArrow = 0x00000001 \n    }\n\n\n    internal class EMFPen : EMFRecordObject\n    {\n        public Draw2.Pen myPen; \n\n        private EMFPen(byte[] RecordData)        \n        {\n            ObjectType = EmfObjectType.pen;            \n            \n            //put the Data into a stream and use a binary reader to read the data\n            MemoryStream _ms = new MemoryStream(RecordData);\n            BinaryReader _br = new BinaryReader(_ms);\n            myPen = new Draw2.Pen(Draw2.Color.Black); //default just for now..\n            UInt32 Version = _br.ReadUInt32();\n            UInt32 Unknown = _br.ReadUInt32();\n            UInt32 Flags = _br.ReadUInt32();\n             _br.ReadUInt32(); //PenUnit NOT SURE...\n            myPen.Width = _br.ReadSingle();           \n            //Rest of data depends on Flags!\n            byte[] Transform;          \n            Single[] DashLengths;          \n            Single[] CompoundLineData;           \n\n            //For now this will be nowhere near fully implemented... Just getting what I need to get it to work!\n            if ((Flags & (UInt32)PenDataFlags.PenDataTransform) == (UInt32)PenDataFlags.PenDataTransform)\n            {\n                //Read the next 24 bytes... A PenDataTransformObject\n                Transform = _br.ReadBytes(24);\n            }\n            if ((Flags & (UInt32)PenDataFlags.PenDataStartCap) == (UInt32)PenDataFlags.PenDataStartCap)\n            {\n                myPen.StartCap = (Draw2.Drawing2D.LineCap)_br.ReadInt32();               \n            }\n            if ((Flags & (UInt32)PenDataFlags.PenDataEndCap) == (UInt32)PenDataFlags.PenDataEndCap)\n            {\n                myPen.EndCap = (Draw2.Drawing2D.LineCap)_br.ReadInt32();\n            }\n            if ((Flags & (UInt32)PenDataFlags.PenDataJoin) == (UInt32)PenDataFlags.PenDataJoin)\n            {\n                myPen.LineJoin = (Draw2.Drawing2D.LineJoin) _br.ReadUInt32();               \n            }\n            if ((Flags & (UInt32)PenDataFlags.PenDataMiterLimit) == (UInt32)PenDataFlags.PenDataMiterLimit)\n            {\n                myPen.MiterLimit = _br.ReadSingle();               \n            }\n            if ((Flags & (UInt32)PenDataFlags.PenDataLineStyle) == (UInt32)PenDataFlags.PenDataLineStyle)\n            {\n                myPen.DashStyle = (Draw2.Drawing2D.DashStyle) _br.ReadInt32();              \n            }\n            if ((Flags & (UInt32)PenDataFlags.PenDataDashedLineCap) == (UInt32)PenDataFlags.PenDataDashedLineCap)\n            {\n                myPen.DashCap = (Draw2.Drawing2D.DashCap) _br.ReadUInt32();             \n            }\n            if ((Flags & (UInt32)PenDataFlags.PenDataDashedLineOffset) == (UInt32)PenDataFlags.PenDataDashedLineOffset)\n            {\n                myPen.DashOffset = _br.ReadSingle();              \n            }\n            if ((Flags & (UInt32)PenDataFlags.PenDataDashedLine) == (UInt32)PenDataFlags.PenDataDashedLine)\n            {\n                //Woo-hoo... A Variable length field!...\n                UInt32 DashedLineDataSize = _br.ReadUInt32();//Number of floats to read...\n                DashLengths = new Single[DashedLineDataSize];\n                for (int i = 0; i < DashedLineDataSize; i++)\n                {\n                    DashLengths[i] = _br.ReadSingle();\n                }\n                myPen.DashPattern = DashLengths;\n            }\n\n            if ((Flags & (UInt32)PenDataFlags.PenDataNonCenter) == (UInt32)PenDataFlags.PenDataNonCenter)\n            {               \n                myPen.Alignment = (Draw2.Drawing2D.PenAlignment) _br.ReadInt32();             \n            }\n            if ((Flags & (UInt32)PenDataFlags.PenDataCompoundLine) == (UInt32)PenDataFlags.PenDataCompoundLine)\n            {\n                //Joy...more variable length...\n                UInt32 CompoundLineDataSize = _br.ReadUInt32();//Number of floats to read...\n                CompoundLineData = new Single[CompoundLineDataSize];\n                for (int i = 0; i < CompoundLineDataSize; i++)\n                {\n                    CompoundLineData[i] = _br.ReadSingle();\n                }\n                myPen.CompoundArray = CompoundLineData;\n            }\n\n            if ((Flags & (UInt32)PenDataFlags.PenDataCustomStartCap) == (UInt32)PenDataFlags.PenDataCustomStartCap)\n            {\n                //Again...variable length...Hope we don't get this one any time soon... I'm not implementing it!\n                UInt32 CustomStartCapSize = _br.ReadUInt32();\n                _br.ReadBytes((int)CustomStartCapSize);\n            }\n            if ((Flags & (UInt32)PenDataFlags.PenDataCustomEndCap) == (UInt32)PenDataFlags.PenDataCustomEndCap)\n            {\n                //Again...variable length...Hope we don't get this one any time soon... I'm not implementing it either!\n                UInt32 CustomEndCapSize = _br.ReadUInt32();\n                _br.ReadBytes((int)CustomEndCapSize);\n            }\n            //Ok - the rest of the bytes are going to be a brush object\n            EMFBrush myBrush = EMFBrush.getEMFBrush(_br.ReadBytes((int)(_br.BaseStream.Length - _br.BaseStream.Position)));\n            //Now we can make a pen for storage...           \n            myPen.Brush = myBrush.myBrush; \n        }\n\n        internal static EMFPen getEMFPen(byte[] RecordData)\n        {\n            return new EMFPen(RecordData);         \n        }      \n               \n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/EMFConverter/EMFRecords/EMFObjects/EMFStringFormat.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n   \n    internal class EMFStringFormat : EMFRecordObject\n    {\n        public Draw2.StringFormat myStringFormat;\n       \n        private EMFStringFormat(byte[] RecordData)        \n        {\n            ObjectType = EmfObjectType.stringformat;\n            myStringFormat = new Draw2.StringFormat();\n            //put the Data into a stream and use a binary reader to read the data\n            MemoryStream _ms = new MemoryStream(RecordData);\n            BinaryReader _br = new BinaryReader(_ms);           \n            _br.ReadUInt32(); //Who cares about version..not me!            \n            myStringFormat.FormatFlags = (Draw2.StringFormatFlags)_br.ReadUInt32();\n            _br.ReadBytes(4);//Language...Ignore for now!\n            myStringFormat.LineAlignment = (Draw2.StringAlignment)_br.ReadUInt32();\n            myStringFormat.Alignment = (Draw2.StringAlignment)_br.ReadUInt32();\n            UInt32 DigitSubstitutionMethod = _br.ReadUInt32();\n            UInt32 DigitSubstitutionLanguage = _br.ReadUInt32();\n            myStringFormat.SetDigitSubstitution((int)DigitSubstitutionLanguage, (Draw2.StringDigitSubstitute)DigitSubstitutionMethod);\n            \n            Single FirstTabOffSet = _br.ReadSingle();\n\n            myStringFormat.HotkeyPrefix = (Draw2.Text.HotkeyPrefix) _br.ReadInt32();\n\n             _br.ReadSingle();//leading Margin\n             _br.ReadSingle();//trailingMargin           \n             _br.ReadSingle();//tracking\n            myStringFormat.Trimming = (Draw2.StringTrimming)_br.ReadUInt32();           \n            Int32 TabStopCount = _br.ReadInt32();\n            Int32 RangeCount = _br.ReadInt32();\n            //Next is stringformatdata...\n            Single[] TabStopArray;           \n           Draw2.CharacterRange[] RangeArray;\n\n            if (TabStopCount > 0)\n            {\n                TabStopArray = new Single[TabStopCount];\n                for (int i = 0; i < TabStopCount; i++)\n                {\n                    TabStopArray[i] = _br.ReadSingle();\n                }\n                myStringFormat.SetTabStops(FirstTabOffSet, TabStopArray);\n            }\n\n            if (RangeCount > 0)\n            {\n                RangeArray = new Draw2.CharacterRange[RangeCount];\n                for (int i = 0; i < RangeCount; i++)\n                {\n                    RangeArray[i].First = _br.ReadInt32();\n                    RangeArray[i].Length = _br.ReadInt32();\n                }\n                myStringFormat.SetMeasurableCharacterRanges(RangeArray);\n            }\n        }\n\n\n        internal static EMFStringFormat getEMFStringFormat(byte[] RecordData)\n        {\n            return new EMFStringFormat(RecordData);         \n        }      \n               \n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/EMFConverter/EMFRecords/EMFRecordObject.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\nusing System.Drawing.Imaging;\n#else\nusing System.Drawing;\nusing System.Drawing.Imaging;\n#endif\nusing System.Runtime.InteropServices;\nusing System.IO;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    internal enum EmfObjectType\n    { \n        invalid = 0x00000000,\n        brush = 0x00000001,\n        pen = 0x00000002,\n        path = 0x00000003,\n        region = 0x00000004,\n        image = 0x00000005,\n        font = 0x00000006,\n        stringformat = 0x00000007,\n        ImageAttributes = 0x00000008,\n        CustomLineType = 0x00000009\n    }\n    internal class EMFRecordObject\n    {\n        public byte ObjectID;\n        public EmfObjectType ObjectType;\n\n        internal static EMFRecordObject getObject(int flags, byte[] RecordData)\n        {\n            MemoryStream _ms = null;\n            BinaryReader _br = null;\n            try\n            {\n                //Put the Flags into a stream and then use a binary Reader to read the Flags\n                _ms = new MemoryStream(BitConverter.GetBytes(flags));\n                _br = new BinaryReader(_ms);\n                //ObjectID is least significant byte (which will be the first byte in the byte array due to Little Endian)       \n                byte Objectid = _br.ReadByte();\n                //Object Type next...\n                byte ObjectTyp = _br.ReadByte();\n                //Don't know what to do if this object continues on the next one!\n                bool ContinuesOnNextObject = ((ObjectTyp & 128) == 128);\n                if (ContinuesOnNextObject)\n                    ObjectTyp ^= 128;\n\n                switch ((UInt16)ObjectTyp)\n                {\n                    case (UInt16)EmfObjectType.invalid: \n                        break;\n                    case (UInt16)EmfObjectType.brush:\n                        EMFBrush Obrush = EMFBrush.getEMFBrush(RecordData);\n                        Obrush.ObjectID = Objectid;\n                        return Obrush;\n                    case (UInt16)EmfObjectType.pen:\n                        EMFPen OPen = EMFPen.getEMFPen(RecordData);\n                        OPen.ObjectID = Objectid;\n                        return OPen;\n                    case (UInt16)EmfObjectType.path:\n                        break;\n                    case (UInt16)EmfObjectType.region:\n                        break;\n                    case (UInt16)EmfObjectType.image:\n                        break;\n                    case (UInt16)EmfObjectType.font:\n                        EMFFont OFont = EMFFont.getEMFFont(RecordData);\n                        OFont.ObjectID = Objectid;\n                        return OFont;                     \n                    case (UInt16)EmfObjectType.stringformat:\n                        EMFStringFormat Ostringformat = EMFStringFormat.getEMFStringFormat(RecordData);\n                        Ostringformat.ObjectID = Objectid;\n                        return Ostringformat;                       \n                    case (UInt16)EmfObjectType.ImageAttributes:\n                        break;\n                    case (UInt16)EmfObjectType.CustomLineType:\n                        break;\n                }\n                return null;\n            } \n            catch (Exception)            \n            {               \n                throw;\n            }                      \n            finally\n            {\n                if (_br != null)\n                    _br.Close();\n                if (_ms != null)\n                    _ms.Dispose();\n                   \n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/EMFConverter/EMFRecords/EMFTransform/EMFSetPageTransform.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Drawing = Majorsilence.Drawing;\n#else\nusing Drawing = System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n     internal class EMFSetPageTransform\n    {\n        internal Drawing.GraphicsUnit PageUnit;\n        internal bool postMultiplyTransform;\n        internal Single PageScale;\n        internal static EMFSetPageTransform getTransform(int flags, byte[] RecordData)\n        {\n            return new EMFSetPageTransform(flags, RecordData);\n        }\n\n        internal EMFSetPageTransform(int flags, byte[] RecordData)\n        {\n            MemoryStream _fs = null;\n            BinaryReader _fr = null;\n            try\n            {\n                _fs = new MemoryStream(BitConverter.GetBytes(flags));\n                _fr = new BinaryReader(_fs);\n\n                //PageUnit...\n                UInt16 PageU = _fr.ReadByte();\n                PageUnit = (Drawing.GraphicsUnit)PageU;\n\n                UInt16 RealFlags = _fr.ReadByte();\n                //XXXXXAXX - if A = 1 the transform matrix is post-multiplied else pre-multiplied...\n                //01234567\n\n                //PJR20220801 - (int) Math.Pow(2,5) !=32 it's 31!!! Argh!!!\n                postMultiplyTransform = ((RealFlags >> 5) & 1) == 1;//((RealFlags & (UInt16)Math.Pow(2, 5)) == Math.Pow(2, 5));\n\n                PageScale = BitConverter.ToSingle(RecordData, 0);\n                \n            }\n            finally\n           {\n               if (_fr != null)\n                   _fr.Close();\n               if (_fs != null)\n                   _fs.Dispose();\n               \n           }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/EmbeddedImage.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// The defintion of an embedded images, including the actual image data and type.\n\t///</summary>\n\t[Serializable]\n\tinternal class EmbeddedImage : ReportLink\n\t{\n\t\tName _Name;\t\t\t// Name of the image.\n\t\tstring _MIMEType;\t// The MIMEType for the image. Valid values are:\n\t\t\t\t\t\t\t// image/bmp, image/jpeg, image/gif, image/png, image/xpng.\n\t\tstring _ImageData;\t// Base-64 encoded image data.\t\t\n\t\n\t\tinternal EmbeddedImage(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Name=null;\n\t\t\t_MIMEType=null;\n\t\t\t_ImageData=null;\n\t\t\t// Run thru the attributes\n\t\t\tforeach(XmlAttribute xAttr in xNode.Attributes)\n\t\t\t{\n\t\t\t\tswitch (xAttr.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Name\":\n\t\t\t\t\t\t_Name = new Name(xAttr.Value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"MIMEType\":\n\t\t\t\t\t\t_MIMEType = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ImageData\":\n\t\t\t\t\t\t_ImageData = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tthis.OwnerReport.rl.LogError(4, \"Unknown Report element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.Name == null)\n\t\t\t{\n\t\t\t\tOwnerReport.rl.LogError(8, \"EmbeddedImage Name is required but not specified.\");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tOwnerReport.LUEmbeddedImages.Add(this.Name.Nm, this);\t\t// add to referenceable embedded images\n\t\t\t\t}\n\t\t\t\tcatch\t\t// Duplicate name\n\t\t\t\t{\n\t\t\t\t\tOwnerReport.rl.LogError(4, \"Duplicate EmbeddedImage  name '\" + this.Name.Nm + \"' ignored.\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_MIMEType == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"EmbeddedImage MIMEType is required but not specified for \" + (this.Name == null? \"'name not specified'\": this.Name.Nm));\n\n\t\t\tif (_ImageData == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"EmbeddedImage ImageData is required but not specified for \" + (this.Name == null? \"'name not specified'\": this.Name.Nm));\n\t\t}\n\t\t\n\t\toverride internal Task FinalPass()\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tinternal Name Name\n\t\t{\n\t\t\tget { return  _Name; }\n\t\t\tset {  _Name = value; }\n\t\t}\n\n\t\tinternal string MIMEType\n\t\t{\n\t\t\tget { return  _MIMEType; }\n\t\t\tset {  _MIMEType = value; }\n\t\t}\n\n\t\tinternal string ImageData\n\t\t{\n\t\t\tget { return  _ImageData; }\n\t\t\tset {  _ImageData = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/EmbeddedImages.cs",
    "content": "\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// The collection of embedded images in the Report.\n\t///</summary>\n\t[Serializable]\n\tinternal class EmbeddedImages : ReportLink\n\t{\n        List<EmbeddedImage> _Items;\t\t\t// list of EmbeddedImage\n\n\t\tinternal EmbeddedImages(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n            _Items = new List<EmbeddedImage>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (xNodeLoop.Name == \"EmbeddedImage\")\n\t\t\t\t{\n\t\t\t\t\tEmbeddedImage ei = new EmbeddedImage(r, this, xNodeLoop);\n\t\t\t\t\t_Items.Add(ei);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tthis.OwnerReport.rl.LogError(4, \"Unknown Report element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For EmbeddedImages at least one EmbeddedImage is required.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (EmbeddedImage ei in _Items)\n\t\t\t{\n                await ei.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<EmbeddedImage> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Expression.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.Threading;\nusing Majorsilence.Reporting.Rdl;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// A report expression: includes original source, parsed expression and type information.\n\t///</summary>\n\t[Serializable]\n\tinternal class Expression : ReportLink, IExpr\n\t{\n\t\tstring _Source;\t\t\t// source of expression\n\t\tIExpr _Expr;\t\t\t// expression after parse\n\t\tTypeCode _Type;\t\t\t// type of expression; only available after parsed\n\t\tExpressionType _ExpectedType;\t// expected type of expression\n\t\tstring _UniqueName;\t\t// unique name of expression; not always created\n\t\n\t\tinternal Expression(ReportDefn r, ReportLink p, XmlNode xNode, ExpressionType et) : this(r, p, xNode.InnerText, et){}\n\n        internal Expression(ReportDefn r, ReportLink p, String xNode, ExpressionType et) : base(r, p)\n        {\n            _Source = xNode;\n            _Type = TypeCode.Empty;\n            _ExpectedType = et;\n            _Expr = null;\n        }\n\n\t\t// UniqueName of expression\n\t\tinternal string UniqueName\n\t\t{\n\t\t\tget {return _UniqueName;}\n\t\t}\n\n\t\toverride internal async Task FinalPass()\n\t\t{\n\t\t\t// optimization: avoid expression overhead if this isn't really an expression\n\t\t\tif (_Source == null)\n\t\t\t{\n\t\t\t\t_Expr = new Constant(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if (_Source == \"\" ||\t\t\t// empty expression\n\t\t\t\t_Source[0] != '=')\t// if 1st char not '='\n\t\t\t{\n\t\t\t\t_Expr = new Constant(_Source);\t//   this is a constant value\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tParser p = new Parser(OwnerReport.DataCache);\n\n\t\t\t// find the fields that are part of the DataRegion (if there is one)\n\t\t\tIDictionary fields=null;\n\t\t\tReportLink dr = Parent;\n\t\t\tGrouping grp= null;\t\t// remember if in a table group or detail group or list group\n\t\t\tMatrix m=null;\n\t\t\tReportLink phpf=null;\n\t\t\twhile (dr != null)\n\t\t\t{\n\t\t\t\tif (dr is Grouping)\n\t\t\t\t\tp.NoAggregateFunctions = true;\n\t\t\t\telse if (dr is TableGroup)\n\t\t\t\t\tgrp = ((TableGroup) dr).Grouping;\n\t\t\t\telse if (dr is Matrix)\n\t\t\t\t{\n\t\t\t\t\tm = (Matrix) dr;\t\t// if matrix we need to pass special\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse if (dr is Details)\n\t\t\t\t{\n\t\t\t\t\tgrp = ((Details) dr).Grouping;\n\t\t\t\t}\n\t\t\t\telse if (dr is List)\n\t\t\t\t{\n\t\t\t\t\tgrp = ((List) dr).Grouping;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse if (dr is PageHeader || dr is PageFooter)\n\t\t\t\t{\n\t\t\t\t\tphpf = dr;\n\t\t\t\t}\n\t\t\t\telse if (dr is DataRegion || dr is DataSetDefn)\n\t\t\t\t\tbreak;\n\t\t\t\tdr = dr.Parent;\n\t\t\t}\n\t\t\tif (dr != null)\n\t\t\t{\n\t\t\t\tif (dr is DataSetDefn)\n\t\t\t\t{\n\t\t\t\t\tDataSetDefn d = (DataSetDefn) dr;\n\t\t\t\t\tif (d.Fields != null)\n\t\t\t\t\t\tfields = d.Fields.Items;\n\t\t\t\t}\n\t\t\t\telse\t// must be a DataRegion\n\t\t\t\t{\n\t\t\t\t\tDataRegion d = (DataRegion) dr;\n\t\t\t\t\tif (d.DataSetDefn != null &&\n\t\t\t\t\t\td.DataSetDefn.Fields != null)\n\t\t\t\t\t\tfields = d.DataSetDefn.Fields.Items;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tNameLookup lu = new NameLookup(fields, OwnerReport.LUReportParameters,\n\t\t\t\tOwnerReport.LUReportItems,OwnerReport.LUGlobals,\n\t\t\t\tOwnerReport.LUUser, OwnerReport.LUAggrScope,\n\t\t\t\tgrp, m, OwnerReport.CodeModules, OwnerReport.Classes, OwnerReport.DataSetsDefn,\n\t\t\t\tOwnerReport.CodeType);\n\n\t\t\tif (phpf != null)\n\t\t\t{\n\t\t\t\t// Non-null when expression is in PageHeader or PageFooter; \n\t\t\t\t//   Expression name needed for dynamic lookup of ReportItems on a page.\n\t\t\t\tlu.PageFooterHeader = phpf;\n\t\t\t\tlu.ExpressionName = _UniqueName = \"xn_\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\t\t\t}\n\n\t\t\ttry \n\t\t\t{\n\t\t\t\t_Expr = await p.Parse(lu, _Source);\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\t_Expr = new ConstantError(e.Message);\n\t\t\t\t// Invalid expression\n\t\t\t\tOwnerReport.rl.LogError(8, ErrorText(e.Message));\n\t\t\t}\n\n\t\t\t// Optimize removing any expression that always result in a constant\n\t\t\ttry\n\t\t\t{\n\t\t\t\t_Expr = await _Expr.ConstantOptimization();\n\t\t\t}\n\t\t\tcatch(Exception ex)\n\t\t\t{\n\t\t\t\tOwnerReport.rl.LogError(4, \"Expression:\" + _Source + \"\\r\\nConstant Optimization exception:\\r\\n\" + ex.Message + \"\\r\\nStack trace:\\r\\n\" + ex.StackTrace );\n\t\t\t}\n\t\t\t_Type = _Expr.GetTypeCode();\n\n\t\t\treturn;\n\t\t}\n\n        private string ErrorText(string msg)\n        {\n            ReportLink rl = this.Parent;\n            while (rl != null)\n            {\n                if (rl is ReportItem)\n                    break;\n                rl = rl.Parent;\n            }\n\n            string prefix=\"Expression\";\n            if (rl != null)\n            {          \n                ReportItem ri = rl as ReportItem;\n                if (ri.Name != null)\n                    prefix = ri.Name.Nm + \" expression\";\n            }\n            return prefix + \" '\" + _Source + \"' failed to parse: \" + msg;\n        }\n\n\t\tprivate void ReportError(Report rpt, int severity, string err)\n\t\t{\n\t\t\tif (rpt == null)\n\t\t\t\tOwnerReport.rl.LogError(severity, err);\n\t\t\telse\n\t\t\t\trpt.rl.LogError(severity, err);\n\t\t}\n\n\t\tinternal string Source\n\t\t{\n\t\t\tget { return  _Source; }\n\t\t}\n\t\tinternal IExpr Expr\n\t\t{\n\t\t\tget { return  _Expr; }\n\t\t}\n\t\tinternal TypeCode Type\n\t\t{\n\t\t\tget { return  _Type; }\n\t\t}\n\t\tinternal ExpressionType ExpectedType\n\t\t{\n\t\t\tget { return  _ExpectedType; }\n\t\t}\n\t\t#region IExpr Members\n\n\t\tpublic System.TypeCode GetTypeCode()\n\t\t{\n            if (_Expr == null)\n                return System.TypeCode.Object;      // we really don't know the type\n\t\t\treturn _Expr.GetTypeCode();\n\t\t}\n\n\t\tpublic async Task<bool> IsConstant()\n\t\t{\n            if (_Expr == null)\n            {\n                await this.FinalPass();           // expression hasn't been parsed yet -- let try to parse it.\n                if (_Expr == null)\n                    return false;           // no luck; then don't treat as constant\n            }\n            return await _Expr.IsConstant();\n\t\t}\n\n\t\tpublic Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\ttry \n\t\t\t{\n\t\t\t\t// Check to see if we're evaluating an expression in a page header or footer;\n\t\t\t\t//   If that is the case the rows are cached by page.\n\t\t\t\tif (row == null && this.UniqueName != null)\n\t\t\t\t{\n\t\t\t\t\tRows rows = rpt.GetPageExpressionRows(UniqueName);\n\t\t\t\t\tif (rows != null && rows.Data != null && rows.Data.Count > 0)\n\t\t\t\t\t\trow = rows.Data[0];\n\t\t\t\t}\n\n\t\t\t\treturn await _Expr.Evaluate(rpt, row);\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\tstring err;\n\t\t\t\tif (e.InnerException != null)\n\t\t\t\t\terr = String.Format(\"Exception evaluating {0}.  {1}.  {2}\", _Source, e.Message, e.InnerException.Message);\n\t\t\t\telse\n\t\t\t\t\terr = String.Format(\"Exception evaluating {0}.  {1}\", _Source, e.Message);\n\n\t\t\t\tReportError(rpt, 4, err);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\ttry \n\t\t\t{\n\t\t\t\treturn await _Expr.EvaluateString(rpt, row);\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\t\n\t\t\t\tstring err = String.Format(\"Exception evaluating {0}.  {1}\", _Source, e.Message);\n\t\t\t\tReportError(rpt, 4, err);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\ttry \n\t\t\t{\n\t\t\t\treturn await _Expr.EvaluateDouble(rpt, row);\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\t\n\t\t\t\tstring err = String.Format(\"Exception evaluating {0}.  {1}\", _Source, e.Message);\n\t\t\t\tReportError(rpt, 4, err);\n\t\t\t\treturn double.NaN;\n\t\t\t}\n\t\t}\n\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\ttry \n\t\t\t{\n\t\t\t\treturn await _Expr.EvaluateDecimal(rpt, row);\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\t\n\t\t\t\tstring err = String.Format(\"Exception evaluating {0}.  {1}\", _Source, e.Message);\n\t\t\t\tReportError(rpt, 4, err);\n\t\t\t\treturn decimal.MinValue;\n\t\t\t}\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            try\n            {\n                return await _Expr.EvaluateInt32(rpt, row);\n            }\n            catch (Exception e)\n            {\n                string err = String.Format(\"Exception evaluating {0}.  {1}\", _Source, e.Message);\n                ReportError(rpt, 4, err);\n                return int.MinValue;\n            }\n        }\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\ttry \n\t\t\t{\n\t\t\t\treturn await _Expr.EvaluateDateTime(rpt, row);\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\t\n\t\t\t\tstring err = String.Format(\"Exception evaluating {0}.  {1}\", _Source, e.Message);\n\t\t\t\tReportError(rpt, 4, err);\n\t\t\t\treturn DateTime.MinValue;\n\t\t\t}\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\ttry \n\t\t\t{\n\t\t\t\treturn await _Expr.EvaluateBoolean(rpt, row);\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\t\n\t\t\t\tstring err = String.Format(\"Exception evaluating {0}.  {1}\", _Source, e.Message);\n\t\t\t\tReportError(rpt, 4, err);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n        public async Task SetSource(string sql)\n        {\n            this._Source = sql;\n            await FinalPass();\n        }\n\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ExpressionType.cs",
    "content": "\n\nusing System;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Type expression\n\t///</summary>\n\tinternal enum ExpressionType\n\t{\n\t\tVariant,\t\t\t// dynamic at runtime\t\n\t\tString,\t\t\t\t// string\n\t\tInteger,\t\t\t// int\n\t\tBoolean,\t\t\t// true, false\n\t\tColor,\t\t\t\t// Color\n\t\tReportUnit,\t\t\t// CSS style absolute Length unit\n\t\tURL,\t\t\t\t// URL\n\t\tEnum,\t\t\t\t// result corresponds to an enum, like string\n\t\tLanguage\t\t\t// language\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Field.cs",
    "content": "\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Definition of a field within a DataSet.   \n\t///</summary>\n\t[Serializable]\n\tinternal class Field : ReportLink\n\t{\n\t\tName _Name;\t\t\t// Name to use for the field within the report\n\t\t// Note: Field names need only be unique\n\t\t//  within the containing Fields collection\n\t\t// Note: Either _DataField or _Value must be specified but not both\n\t\tstring _DataField;\t// Name of the field in the query\n\t\t// Note: DataField names do not need to be\n\t\t// unique. Multiple fields can refer to the same\n\t\t// data field.\n\t\tint _ColumnNumber;\t// Column number\n\t\tTypeCode _Type;\t// The data type of the field\n\t\tQueryColumn qc;\t\t// Query column: resolved from the query SQL\n\t\tExpression _Value;\t// (Variant) An expression that evaluates to the value of\n\t\t//  this field.  For example, =Fields!Price.Value+Fields!Tax.Value\n\t\t// The expression cannot contain aggregates or references to report items.\t\n\n\t\tinternal Field(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Name=null;\n\t\t\t_DataField=null;\n\t\t\t_Value=null;\n\t\t\t_ColumnNumber = -1;\n\t\t\t_Type = TypeCode.String;\n\t\t\t// Run thru the attributes\n\t\t\tforeach(XmlAttribute xAttr in xNode.Attributes)\n\t\t\t{\n\t\t\t\tswitch (xAttr.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Name\":\n\t\t\t\t\t\t_Name = new Name(xAttr.Value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"DataField\":\n\t\t\t\t\t\t_DataField = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"TypeName\":\t\t// Extension !!!!!!!!!!!!!!!!!\n\t\t\t\t\tcase \"rd:TypeName\":\t\t// Microsoft Designer uses this extension\n\t\t\t\t\t\t_Type = DataType.GetStyle(xNodeLoop.InnerText, this.OwnerReport);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Value\":\n\t\t\t\t\t\t_Value = new Expression(r, this, xNodeLoop, ExpressionType.Variant);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Field element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_DataField != null && _Value != null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"Only DataField or Value may be specified in a Field element, not both.\");\n\t\t\telse if (_DataField == null && _Value == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"Either DataField or Value must be specified in a Field element.\");\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Value != null)\n                await _Value.FinalPass();\n\n\t\t\t// Resolve the field if specified\n\t\t\tif (_DataField != null)\n\t\t\t{\n\t\t\t\tFields f = (Fields) this.Parent;\n\t\t\t\tDataSetDefn ds = (DataSetDefn) f.Parent;\n\t\t\t\tQuery q = ds.Query;\n\t\t\t\tif (q != null && q.Columns != null)\n\t\t\t\t{\n\t\t\t\t\tqc = (QueryColumn) q.Columns[_DataField];\n\t\t\t\t\tif (qc == null)\n\t\t\t\t\t{\t// couldn't find the data field\n\t\t\t\t\t\tOwnerReport.rl.LogError(8, \"DataField '\" + _DataField + \"' not part of query.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Name Name\n\t\t{\n\t\t\tget { return  _Name; }\n\t\t\tset {  _Name = value; }\n\t\t}\n\n\t\tinternal string DataField\n\t\t{\n\t\t\tget { return  _DataField; }\n\t\t\tset {  _DataField = value; }\n\t\t}\n\n\t\tinternal Expression Value\n\t\t{\n\t\t\tget { return  _Value; }\n\t\t\tset {  _Value = value; }\n\t\t}\n\n\t\tinternal int ColumnNumber\n\t\t{\n\t\t\tget { return  _ColumnNumber; }\n\t\t\tset {  _ColumnNumber = value; }\n\t\t}\n\n\t\tinternal QueryColumn qColumn\n\t\t{\n\t\t\tget { return  qc; }\n\t\t}\n\n\t\tinternal TypeCode Type\n\t\t{\n\t\t\tget \n            {\n                if (this._Value == null || this._Value.Expr == null)        // expression?\n                    return  _Type;              //  no just return the type\n                return _Value.Expr.GetTypeCode();\n            }\n\t\t\tset {  _Type = value; }\n\t\t}\n\n\t\tinternal TypeCode RunType\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (qc != null)\n\t\t\t\t\treturn qc.colType;\n\t\t\t\telse \n\t\t\t\t\treturn Type;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Fields.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Collection of fields for a DataSet.\n\t///</summary>\n\t[Serializable]\n\tinternal class Fields : ReportLink, ICollection\n\t{\n\t\tIDictionary _Items;\t\t\t// dictionary of items\n\n\t\tinternal Fields(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tField f;\n\t\t\tif (xNode.ChildNodes.Count < 10)\n\t\t\t\t_Items = new ListDictionary();\t// Hashtable is overkill for small lists\n\t\t\telse\n\t\t\t\t_Items = new Hashtable(xNode.ChildNodes.Count);\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tint iCol=0;\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"field\":\n\t\t\t\t\t\tf = new Field(r, this, xNodeLoop);\n\t\t\t\t\t\tf.ColumnNumber = iCol++;\t\t\t// Assign the column number\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tf=null;\t\n\t\t\t\t\t\tr.rl.LogError(4, \"Unknown element '\" + xNodeLoop.Name + \"' in fields list.\"); \n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (f != null)\n\t\t\t\t{\n\t\t\t\t\tif (_Items.Contains(f.Name.Nm))\n\t\t\t\t\t{\n\t\t\t\t\t\tr.rl.LogError(4, \"Field \" + f.Name + \" has duplicates.\"); \n\t\t\t\t\t}\n\t\t\t\t\telse\t\n\t\t\t\t\t\t_Items.Add(f.Name.Nm, f);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinternal Field this[string s]\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\treturn _Items[s] as Field;\n\t\t\t}\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (Field f in _Items.Values)\n\t\t\t{\n                await f.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tinternal IDictionary Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t\t#region ICollection Members\n\n\t\tpublic bool IsSynchronized\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Items.Values.IsSynchronized;\n\t\t\t}\n\t\t}\n\n\t\tpublic int Count\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Items.Values.Count;\n\t\t\t}\n\t\t}\n\n\t\tpublic void CopyTo(Array array, int index)\n\t\t{\n\t\t\t_Items.Values.CopyTo(array, index);\n\t\t}\n\n\t\tpublic object SyncRoot\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Items.Values.SyncRoot;\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IEnumerable Members\n\n\t\tpublic IEnumerator GetEnumerator()\n\t\t{\n\t\t\treturn _Items.Values.GetEnumerator();\n\t\t}\n\n\t\t#endregion\n\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Filter.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Text.RegularExpressions;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Definition of the filter on a DataSet.  If boolean expression evaluates to false\n\t/// then row is not added to DataSet.\n\t///</summary>\n\t[Serializable]\n\tinternal class Filter : ReportLink\n\t{\n\t\tExpression _FilterExpression;\t//(Variant)\n\t\t\t\t\t\t//An expression that is evaluated for each\n\t\t\t\t\t\t//instance within the group or each row of the\n\t\t\t\t\t\t//data set or data region and compared (via the\n\t\t\t\t\t\t//Operator) to the FilterValues. Failed\n\t\t\t\t\t\t//comparisons result in the row/instance being\n\t\t\t\t\t\t//filtered out of the data set, data region or\n\t\t\t\t\t\t//grouping. See Filter Expression Restrictions\n\t\t\t\t\t\t//below.\n\t\tFilterOperatorEnum _FilterOperator; \n\t\t\t\t\t\t//Notes: Top and Bottom operators include ties\n\t\t\t\t\t\t//in the resulting data. string comparisons are\n\t\t\t\t\t\t//locale-dependent. Null equals Null.\n\t\tFilterValues _FilterValues;\t// The values to compare to the FilterExpression.\n\t\t\t\t\t\t//For Equal, Like, NotEqual, GreaterThan,\n\t\t\t\t\t\t//GreaterThanOrEqual, LessThan, LessThanOrEqual, TopN, BottomN,\n\t\t\t\t\t\t//TopPercent and BottomPercent, there must be\n\t\t\t\t\t\t//exactly one FilterValue\n\t\t\n\t\t\t\t\t\t//For TopN and BottomN, the FilterValue\n\t\t\t\t\t\t//expression must evaluate to an integer.\n\t\t\n\t\t\t\t\t\t//For TopPercent and BottomPercent, the\n\t\t\t\t\t\t//FilterValue expression must evaluate to an\n\t\t\t\t\t\t//integer or float.1\n\t\t\t\t\t\t\n\t\t\t\t\t\t//For Between, there must be exactly two FilterValue elements.\n\t\t\t\t\t\t\n\t\t\t\t\t\t//For In, the FilterValues are treated as a set (if\n\t\t\t\t\t\t//the FilterExpression value appears anywhere in\n\t\t\t\t\t\t//the set of FilterValues, the instance is not\n\t\t\t\t\t\t//filtered out.)\n\t\t\t\t\t\t\n\t\t\t\t\t\t//Like uses the same special characters as the\n\t\t\t\t\t\t//Visual Basic LIKE operator (e.g. �?� to\n\t\t\t\t\t\t//represent a single character and �*� to\n\t\t\t\t\t\t//represent any series of characers). See\n\t\t\t\t\t\t//http://msdn.microsoft.com/library/enus/vblr7/html/vaoprlike.asp.\t\n\t\t\tbool _FilterOperatorSingleRow;\t// false for Top/Bottom N and Percent; otherwise true\n\t\tinternal Filter(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_FilterExpression=null;\n\t\t\t_FilterOperator=FilterOperatorEnum.Unknown;\n\t\t\t_FilterValues=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"FilterExpression\":\n\t\t\t\t\t\t_FilterExpression = new Expression(r, this, xNodeLoop, ExpressionType.Variant);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Operator\":\n\t\t\t\t\t\t_FilterOperator = Rdl.FilterOperator.GetStyle(xNodeLoop.InnerText);\n\t\t\t\t\t\tif (_FilterOperator == FilterOperatorEnum.Unknown)\n\t\t\t\t\t\t\tOwnerReport.rl.LogError(8, \"Unknown Filter operator '\" + xNodeLoop.InnerText + \"'.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"FilterValues\":\n\t\t\t\t\t\t_FilterValues = new FilterValues(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Filter element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_FilterExpression == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"Filter requires the FilterExpression element.\");\n\t\t\tif (_FilterValues == null)\n\t\t\t{\n\t\t\t\tOwnerReport.rl.LogError(8, \"Filter requires the FilterValues element.\");\n\t\t\t\treturn;\t\t// some of the filter operator checks require values\n\t\t\t}\n\t\t\t_FilterOperatorSingleRow = true;\n\t\t\tswitch (_FilterOperator)\n\t\t\t{\n\t\t\t\tcase FilterOperatorEnum.Like:\n\t\t\t\tcase FilterOperatorEnum.Equal:\n\t\t\t\tcase FilterOperatorEnum.NotEqual:\n\t\t\t\tcase FilterOperatorEnum.GreaterThan:\n\t\t\t\tcase FilterOperatorEnum.GreaterThanOrEqual:\n\t\t\t\tcase FilterOperatorEnum.LessThan:\n\t\t\t\tcase FilterOperatorEnum.LessThanOrEqual:\n\t\t\t\t\tif (_FilterValues.Items.Count != 1)\n\t\t\t\t\t\tOwnerReport.rl.LogError(8, \"Filter Operator requires exactly 1 FilterValue.\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase FilterOperatorEnum.TopN:\n\t\t\t\tcase FilterOperatorEnum.BottomN:\n\t\t\t\tcase FilterOperatorEnum.TopPercent:\n\t\t\t\tcase FilterOperatorEnum.BottomPercent:\n\t\t\t\t\t_FilterOperatorSingleRow = false;\n\t\t\t\t\tif (_FilterValues.Items.Count != 1)\n\t\t\t\t\t\tOwnerReport.rl.LogError(8, \"Filter Operator requires exactly 1 FilterValue.\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase FilterOperatorEnum.In:\n\t\t\t\t\tbreak;\n\t\t\t\tcase FilterOperatorEnum.Between:\n\t\t\t\t\tif (_FilterValues.Items.Count != 2)\n\t\t\t\t\t\tOwnerReport.rl.LogError(8, \"Filter Operator Between requires exactly 2 FilterValues.\");\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\n\t\t\t\t\tOwnerReport.rl.LogError(8, \"Valid Filter operator must be specified.\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n            await _FilterExpression.FinalPass();\n            await _FilterValues.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\t// Apply the filters to a row to determine if row is valid\n\t\tinternal async Task<bool> Apply(Report rpt, Row datarow)\n\t\t{\n\t\t\tobject left = await _FilterExpression.Evaluate(rpt, datarow);\n\t\t\tTypeCode tc = _FilterExpression.GetTypeCode();\n\t\t\tobject right = await ((FilterValue)(_FilterValues.Items[0])).Expression.Evaluate(rpt, datarow);\n\t\t\tswitch (_FilterOperator)\n\t\t\t{\n\t\t\t\tcase FilterOperatorEnum.Equal:\n\t\t\t\t\treturn ApplyCompare(tc, left, right) == 0? true: false;\n\t\t\t\tcase FilterOperatorEnum.Like:\t// TODO - this is really regex (not like)\n\t\t\t\t\tif (left == null || right == null)\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tstring s1 = Convert.ToString(left);\n\t\t\t\t\tstring s2 = Convert.ToString(right);\n\t\t\t\t\treturn Regex.IsMatch(s1, s2);\n\t\t\t\tcase FilterOperatorEnum.NotEqual:\n\t\t\t\t\treturn ApplyCompare(tc, left, right) == 0? false: true;\n\t\t\t\tcase FilterOperatorEnum.GreaterThan:\n\t\t\t\t\treturn ApplyCompare(tc, left, right) > 0? true: false;\n\t\t\t\tcase FilterOperatorEnum.GreaterThanOrEqual:\n\t\t\t\t\treturn ApplyCompare(tc, left, right) >= 0? true: false;\n\t\t\t\tcase FilterOperatorEnum.LessThan:\n\t\t\t\t\treturn ApplyCompare(tc, left, right) < 0? true: false;\n\t\t\t\tcase FilterOperatorEnum.LessThanOrEqual:\n\t\t\t\t\treturn ApplyCompare(tc, left, right) <= 0? true: false;\n\t\t\t\tcase FilterOperatorEnum.TopN:\n\t\t\t\tcase FilterOperatorEnum.BottomN:\n\t\t\t\tcase FilterOperatorEnum.TopPercent:\n\t\t\t\tcase FilterOperatorEnum.BottomPercent:\n\t\t\t\t\treturn true;\t\t// This is handled elsewhere\n\t\t\t\tcase FilterOperatorEnum.In:\n\t\t\t\t\tforeach (FilterValue fv in _FilterValues.Items)\n\t\t\t\t\t{\n\t\t\t\t\t\tright = await fv.Expression.Evaluate(rpt, datarow);\n                        if (right is ArrayList)         // this can only happen with MultiValue parameters\n                        {   // check each object in the array\n                            foreach (object v in right as ArrayList)\n                            {\n                                if (ApplyCompare(tc, left, v) == 0)\n                                    return true;\n                            }\n                        }\n\t\t\t\t\t\telse if (ApplyCompare(tc, left, right) == 0)\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\tcase FilterOperatorEnum.Between:\n\t\t\t\t\tif (ApplyCompare(tc, left, right) < 0)\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tright = await ((FilterValue)(_FilterValues.Items[1])).Expression.Evaluate(rpt, datarow);\n\t\t\t\t\treturn ApplyCompare(tc, left, right) <= 0? true: false;\n\t\t\t\tdefault:\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tinternal async Task Apply(Report rpt, Rows data)\n\t\t{\n\t\t\tif (this._FilterOperatorSingleRow)\n                await ApplySingleRowFilter(rpt, data);\n\t\t\telse\n                await ApplyTopBottomFilter(rpt, data);\n\t\t}\n\n\t\tprivate async Task ApplySingleRowFilter(Report rpt, Rows data)\n\t\t{\n\t\t\tList<Row> ar = data.Data;\n\t\t\t// handle a single row operator; by looping thru the rows and applying\n\t\t\t//   the filter\n\t\t\tint iRow = 0;\n\t\t\twhile (iRow < ar.Count)\n\t\t\t{\n\t\t\t\tRow datarow = ar[iRow];\n\t\t\t\tif (await Apply(rpt, datarow))\n\t\t\t\t\tiRow++;\n\t\t\t\telse\n\t\t\t\t\tar.RemoveAt(iRow);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tprivate async Task ApplyTopBottomFilter(Report rpt, Rows data)\n\t\t{\n\t\t\tif (data.Data.Count <= 0)\t\t// No data; nothing to do\n\t\t\t\treturn;\n\n\t\t\t// Get the filter value and validate it \n\t\t\tFilterValue fv = this._FilterValues.Items[0];\n\t\t\tdouble val = await fv.Expression.EvaluateDouble(rpt, data.Data[0]);\n\t\t\tif (val <= 0)\t\t\t// if less than equal 0; then request results in no data\n\t\t\t{\n\t\t\t\tdata.Data.Clear();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Calculate the row number of the affected item and do additional validation\n\t\t\tint ival;\n\t\t\tif (_FilterOperator == FilterOperatorEnum.TopN ||\n\t\t\t\t_FilterOperator == FilterOperatorEnum.BottomN)\n\t\t\t{\n\t\t\t\tival = (int) val;\n\t\t\t\tif (ival != val)\n\t\t\t\t\tthrow new Exception(string.Format(Strings.Filter_Error_TopNAndBottomNRequireInt, val));\n\t\t\t\tif (ival >= data.Data.Count)\t\t// includes all the data?\n\t\t\t\t\treturn;\n\t\t\t\tival--;\t\t\t\t\t// make zero based\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (val >= 100)\t\t\t// greater than 100% means all the data\n\t\t\t\t\treturn;\n\t\t\t\tival = (int) (data.Data.Count * (val/100));\n\t\t\t\tif (ival <= 0)\t\t\t// if less than equal 0; then request results in no data\n\t\t\t\t{\n\t\t\t\t\tdata.Data.Clear();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (ival >= data.Data.Count)\t// make sure rounding hasn't forced us past 100%\n\t\t\t\t\treturn;\n\t\t\t\tival--;\t\t\t\t\t// make zero based\n\t\t\t}\n\n\t\t\t// Sort the data by the FilterExpression\n            List<RowsSortExpression> sl = new List<RowsSortExpression>();\n\t\t\tsl.Add(new RowsSortExpression(this._FilterExpression));\n\t\t\tdata.SortBy = sl;\t\t\t\t\t// update the sort by\n\t\t\tdata.Sort();\t\t\t\t\t\t// sort the data\n\t\t\t\n\t\t\t// reverse the order of the data for top so that data is in the beginning\n\t\t\tif (_FilterOperator == FilterOperatorEnum.TopN ||\n\t\t\t\t_FilterOperator == FilterOperatorEnum.TopPercent)\n\t\t\t\tdata.Data.Reverse();\n\n\t\t\tList<Row> ar = data.Data;\n\t\t\tTypeCode tc = _FilterExpression.GetTypeCode();\n\t\t\tobject o = await this._FilterExpression.Evaluate(rpt, data.Data[ival]);\n\n\t\t\t// adjust the ival based on duplicate values\n\t\t\tival++;\n\t\t\twhile (ival < ar.Count)\n\t\t\t{\n\t\t\t\tobject n = await this._FilterExpression.Evaluate(rpt, data.Data[ival]);\n\t\t\t\tif (ApplyCompare(tc, o, n) != 0)\n\t\t\t\t\tbreak;\n\t\t\t\tival++;\n\t\t\t}\n\t\t\tif (ival < ar.Count)\t// if less than we need to remove the rest of the rows\n\t\t\t{\n\t\t\t\tar.RemoveRange(ival, ar.Count - ival);\n\t\t\t}\t\t\t\n\t\t\treturn;\n\t\t}\n\n\t\tstatic internal int ApplyCompare(TypeCode tc, object left, object right)\n\t\t{\n\t\t\t//Because double.NaN = DBNull for numbers\n\t\t\tif(left == null || (left is double && double.IsNaN((double)left)))\n\t\t\t{\n\t\t\t\treturn (right == null || (right is double && double.IsNaN((double)right))) ? 0: -1;\n\t\t\t}\n\t\t\tif (right == null || (right is double && double.IsNaN((double)right)))\n\t\t\t\treturn 1;\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\tswitch (tc)\n\t\t\t\t{\n\t\t\t\t\tcase TypeCode.DateTime:\n\t\t\t\t\t\treturn ((DateTime) left).CompareTo(Convert.ToDateTime(right));\n                    case TypeCode.Int16:\n\t\t\t\t\t\treturn ((short) left).CompareTo(Convert.ToInt16(right));\n\t\t\t\t\tcase TypeCode.UInt16:\n\t\t\t\t\t\treturn ((ushort) left).CompareTo(Convert.ToUInt16(right));\n\t\t\t\t\tcase TypeCode.Int32:\n\t\t\t\t\t\treturn ((int) left).CompareTo(Convert.ToInt32(right));\n\t\t\t\t\tcase TypeCode.UInt32:\n\t\t\t\t\t\treturn ((uint) left).CompareTo(Convert.ToUInt32(right));\n\t\t\t\t\tcase TypeCode.Int64:\n\t\t\t\t\t\treturn ((long) left).CompareTo(Convert.ToInt64(right));\n\t\t\t\t\tcase TypeCode.UInt64:\n\t\t\t\t\t\treturn ((ulong) left).CompareTo(Convert.ToUInt64(right));\n\t\t\t\t\tcase TypeCode.String:\n\t\t\t\t\t\treturn ((string) left).CompareTo(Convert.ToString(right));\n\t\t\t\t\tcase TypeCode.Decimal:\n\t\t\t\t\t\treturn ((Decimal) left).CompareTo(Convert.ToDecimal(right, NumberFormatInfo.InvariantInfo));\n\t\t\t\t\tcase TypeCode.Single:\n\t\t\t\t\t\treturn ((float) left).CompareTo(Convert.ToSingle(right, NumberFormatInfo.InvariantInfo));\n\t\t\t\t\tcase TypeCode.Double:\n\t\t\t\t\t\treturn ((double) left).CompareTo(Convert.ToDouble(right, NumberFormatInfo.InvariantInfo));\n\t\t\t\t\tcase TypeCode.Boolean:\n\t\t\t\t\t\treturn ((bool) left).CompareTo(Convert.ToBoolean(right));\n\t\t\t\t\tcase TypeCode.Char:\n\t\t\t\t\t\treturn ((char) left).CompareTo(Convert.ToChar(right));\n\t\t\t\t\tcase TypeCode.SByte:\n\t\t\t\t\t\treturn ((sbyte) left).CompareTo(Convert.ToSByte(right));\n\t\t\t\t\tcase TypeCode.Byte:\n\t\t\t\t\t\treturn ((byte) left).CompareTo(Convert.ToByte(right));\n\t\t\t\t\tcase TypeCode.Empty:\n\t\t\t\t\tcase TypeCode.DBNull:\n\t\t\t\t\t\tif (right == null)\n\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\treturn -1;\n\t\t\t\t\tdefault:\t// ok we do this based on the actual type of the arguments\n\t\t\t\t\t\treturn ApplyCompare(left, right);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch\n\t\t\t{\t// do based on actual type of arguments\n\t\t\t\treturn ApplyCompare(left, right);\n\t\t\t}\n\t\t}\n\n\t\tstatic internal int ApplyCompare(object left, object right) \n\t\t{\n\t\t\tif (left is string)\n\t\t\t\treturn ((string) left).CompareTo(Convert.ToString(right));\n\t\t\tif (left is decimal)\n\t\t\t\treturn ((Decimal) left).CompareTo(Convert.ToDecimal(right, NumberFormatInfo.InvariantInfo));\n\t\t\tif (left is Single)\n\t\t\t\treturn ((float) left).CompareTo(Convert.ToSingle(right, NumberFormatInfo.InvariantInfo));\n\t\t\tif (left is double)\n\t\t\t\treturn ((double) left).CompareTo(Convert.ToDouble(right, NumberFormatInfo.InvariantInfo));\n\t\t\tif (left is DateTime)\n\t\t\t\treturn ((DateTime) left).CompareTo(Convert.ToDateTime(right));\n\t\t\tif (left is short)\n\t\t\t\treturn ((short) left).CompareTo(Convert.ToInt16(right));\n\t\t\tif (left is ushort)\n\t\t\t\treturn ((ushort) left).CompareTo(Convert.ToUInt16(right));\n\t\t\tif (left is int)\n\t\t\t\treturn ((int) left).CompareTo(Convert.ToInt32(right));\n\t\t\tif (left is uint)\n\t\t\t\treturn ((uint) left).CompareTo(Convert.ToUInt32(right));\n\t\t\tif (left is long)\n\t\t\t\treturn ((long) left).CompareTo(Convert.ToInt64(right));\n\t\t\tif (left is ulong)\n\t\t\t\treturn ((ulong) left).CompareTo(Convert.ToUInt64(right));\n\t\t\tif (left is bool)\n\t\t\t\treturn ((bool) left).CompareTo(Convert.ToBoolean(right));\n\t\t\tif (left is char)\n\t\t\t\treturn ((char) left).CompareTo(Convert.ToChar(right));\n\t\t\tif (left is sbyte)\n\t\t\t\treturn ((sbyte) left).CompareTo(Convert.ToSByte(right));\n\t\t\tif (left is byte)\n\t\t\t\treturn ((byte) left).CompareTo(Convert.ToByte(right));\n\t\t\tif (left is DBNull)\n\t\t\t{\n\t\t\t\tif (right == null)\n\t\t\t\t\treturn 0;\n\t\t\t\telse\n\t\t\t\t\treturn -1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\n\t\tinternal Expression FilterExpression\n\t\t{\n\t\t\tget { return  _FilterExpression; }\n\t\t\tset {  _FilterExpression = value; }\n\t\t}\n\n\t\tinternal FilterOperatorEnum FilterOperator\n\t\t{\n\t\t\tget { return  _FilterOperator; }\n\t\t\tset {  _FilterOperator = value; }\n\t\t}\n\n\t\tinternal FilterValues FilterValues\n\t\t{\n\t\t\tget { return  _FilterValues; }\n\t\t\tset {  _FilterValues = value; }\n\t\t}\n\n\t\tinternal bool FilterOperatorSingleRow\n\t\t{\n\t\t\tget { return  _FilterOperatorSingleRow; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/FilterOperator.cs",
    "content": "\n\nusing System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Filter operators\n\t///</summary>\n\tinternal enum FilterOperatorEnum\n\t{\n\t\tEqual,\n\t\tLike,\n\t\tNotEqual,\n\t\tGreaterThan,\n\t\tGreaterThanOrEqual,\n\t\tLessThan,\n\t\tLessThanOrEqual,\n\t\tTopN,\n\t\tBottomN,\n\t\tTopPercent,\n\t\tBottomPercent,\n\t\tIn,\n\t\tBetween,\n\t\tUnknown\t\t\t\t\t// prior to definition or illegal value\n\t}\n\tinternal class FilterOperator\n\t{\n\t\tstatic internal FilterOperatorEnum GetStyle(string s)\n\t\t{\n\t\t\tFilterOperatorEnum rs;\n\n\t\t\tswitch (s)\n\t\t\t{\t\t\n\t\t\t\tcase \"Equal\":\n\t\t\t\tcase \"=\":\n\t\t\t\t\trs = FilterOperatorEnum.Equal;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"TopN\":\n\t\t\t\t\trs = FilterOperatorEnum.TopN;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"BottomN\":\n\t\t\t\t\trs = FilterOperatorEnum.BottomN;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"TopPercent\":\n\t\t\t\t\trs = FilterOperatorEnum.TopPercent;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"BottomPercent\":\n\t\t\t\t\trs = FilterOperatorEnum.BottomPercent;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"In\":\n\t\t\t\t\trs = FilterOperatorEnum.In;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"LessThanOrEqual\":\n\t\t\t\tcase \"<=\":\n\t\t\t\t\trs = FilterOperatorEnum.LessThanOrEqual;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"LessThan\":\n\t\t\t\tcase \"<\":\n\t\t\t\t\trs = FilterOperatorEnum.LessThan;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"GreaterThanOrEqual\":\n\t\t\t\tcase \">=\":\n\t\t\t\t\trs = FilterOperatorEnum.GreaterThanOrEqual;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"GreaterThan\":\n\t\t\t\tcase \">\":\n\t\t\t\t\trs = FilterOperatorEnum.GreaterThan;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"NotEqual\":\n\t\t\t\tcase \"!=\":\n\t\t\t\t\trs = FilterOperatorEnum.NotEqual;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Between\":\n\t\t\t\t\trs = FilterOperatorEnum.Between;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Like\":\n\t\t\t\t\trs = FilterOperatorEnum.Like;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t// user error just force to normal TODO\n\t\t\t\t\trs = FilterOperatorEnum.Unknown;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn rs;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/FilterValue.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// A value used in a filter.\n\t///</summary>\n\t[Serializable]\n\tinternal class FilterValue : ReportLink\n\t{\n\t\tExpression _Expression;\t\t\t// \n\n\t\tinternal FilterValue(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Expression = new Expression(r,this,xNode, ExpressionType.Variant);\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Expression != null)\n                await _Expression.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Expression Expression\n\t\t{\n\t\t\tget { return  _Expression; }\n\t\t\tset {  _Expression = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/FilterValues.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t///  Collection of Filter values to compare against in a filter.  Cardinality depends \n\t///  filter operater.\n\t///</summary>\n\t[Serializable]\n\tinternal class FilterValues : ReportLink\n\t{\n        List<FilterValue> _Items;\t\t\t// list of FilterValue\n\n\t\tinternal FilterValues(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tFilterValue f;\n            _Items = new List<FilterValue>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"FilterValue\":\n\t\t\t\t\t\tf = new FilterValue(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tf=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown FilterValues element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (f != null)\n\t\t\t\t\t_Items.Add(f);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For FilterValues at least one FilterValue is required.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (FilterValue f in _Items)\n\t\t\t{\n                await f.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tinternal List<FilterValue> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Filters.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Collection of Filters for a DataSet.\n\t///</summary>\n\t[Serializable]\n\tinternal class Filters : ReportLink\n\t{\n        List<Filter> _Items;\t\t\t// list of Filter\n\n\t\tinternal Filters(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tFilter f;\n            _Items = new List<Filter>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"filter\":\n\t\t\t\t\t\tf = new Filter(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tf=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Filters element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (f != null)\n\t\t\t\t\t_Items.Add(f);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"Filters require at least one Filter be defined.\");\n\t\t\telse\n\t\t\t\t_Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (Filter f in _Items)\n\t\t\t{\n                await f.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tinternal async Task<bool> Apply(Report rpt, Row datarow)\n\t\t{\n\t\t\tforeach (Filter f in _Items)\n\t\t\t{\n\t\t\t\tif (!f.FilterOperatorSingleRow)\t\t// have to handle Top/Bottom in ApplyFinalFilters\n\t\t\t\t\treturn true;\n\t\t\t\tif (!await f.Apply(rpt, datarow))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tinternal async Task ApplyFinalFilters(Report rpt, Rows data, bool makeCopy)\n\t\t{\n\t\t\t// Need to apply the Top/Bottom and then the rest of the data\n\t\t\t\n\t\t\t// Loop to the first top/bottom (Apply has already handled the SingleRow filters prior to\n\t\t\t//   the first top/bottom\n\t\t\tint iFilter;\n\t\t\tfor (iFilter = 0; iFilter < _Items.Count; iFilter++)\n\t\t\t{\n\t\t\t\tFilter f = (Filter) _Items[iFilter];\n\t\t\t\tif (!f.FilterOperatorSingleRow)\t\t\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (iFilter >= _Items.Count)\t// nothing left to do?\n\t\t\t\treturn;\t\t\t\t\t\t// good this is a lot cheaper\n\n\t\t\t// make copy of data if necessary\n\t\t\tif (makeCopy)\n\t\t\t{\n\t\t\t\tList<Row> ar = new List<Row>(data.Data);\t// Make a copy of the data!\n\t\t\t\tdata.Data = ar;\n\t\t\t}\n\n\t\t\t// Handling the remaining filters\n\t\t\tfor (; iFilter < _Items.Count && data.Data.Count > 0; iFilter++)\n\t\t\t{\n\t\t\t\tFilter f = (Filter) _Items[iFilter];\n                await f.Apply(rpt, data);\n\t\t\t}\n\t\t\t\n\t\t\t// trim the space\n            data.Data.TrimExcess();\n\t\t\t\n\t\t\t// reset the row numbers\n\t\t\tint rowCount=0;\n\t\t\tforeach (Row r in data.Data)\n\t\t\t\tr.RowNumber = rowCount++;\n\n\t\t\treturn;\n\t\t}\n\n\t\tinternal List<Filter> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Footer.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.IO;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t///  Definition of footer rows for a table or group.\n\t///</summary>\n\t[Serializable]\n\tinternal class Footer : ReportLink\n\t{\n\t\tTableRows _TableRows;\t// The footer rows for the table or group\n\t\tbool _RepeatOnNewPage;\t// Indicates this footer should be displayed on\n\t\t\t\t\t\t\t\t// each page that the table (or group) is displayed\t\t\n\t\n\t\tinternal Footer(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_TableRows=null;\n\t\t\t_RepeatOnNewPage=false;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"TableRows\":\n\t\t\t\t\t\t_TableRows = new TableRows(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"RepeatOnNewPage\":\n\t\t\t\t\t\t_RepeatOnNewPage = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Footer element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_TableRows == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"TableRows element is required with a Footer but not specified.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n            await _TableRows.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal async Task Run(IPresent ip, Row row)\n\t\t{\n            await _TableRows.Run(ip, row);\n\t\t\treturn;\n\t\t}\n\n\t\tinternal async Task RunPage(Pages pgs, Row row)\n\t\t{\n\n\t\t\tPage p = pgs.CurrentPage;\n\t\t\tif (p.YOffset + await HeightOfRows(pgs, row) > pgs.BottomOfPage)\n\t\t\t{\n\t\t\t\tp = OwnerTable.RunPageNew(pgs, p);\n                await OwnerTable.RunPageHeader(pgs, row, false, null);\n\t\t\t}\n            await _TableRows.RunPage(pgs, row);\n\n\t\t\treturn;\n\t\t}\n\n\t\tinternal TableRows TableRows\n\t\t{\n\t\t\tget { return  _TableRows; }\n\t\t\tset {  _TableRows = value; }\n\t\t}\n\n\t\tinternal async Task<float> HeightOfRows(Pages pgs, Row r)\n\t\t{\n\t\t\treturn await _TableRows.HeightOfRows(pgs, r);\n\t\t}\n\n\t\tinternal bool RepeatOnNewPage\n\t\t{\n\t\t\tget { return  _RepeatOnNewPage; }\n\t\t\tset {  _RepeatOnNewPage = value; }\n\t\t}\n\n\t\tinternal Table OwnerTable\n\t\t{\n\t\t\tget \n\t\t\t{ \n\t\t\t\tReportLink rl = this.Parent;\n\t\t\t\twhile (rl != null)\n\t\t\t\t{\n\t\t\t\t\tif (rl is Table)\n\t\t\t\t\t\treturn rl as Table;\n\t\t\t\t\trl = rl.Parent;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/GroupEntry.cs",
    "content": "\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Runtime data structure representing the group hierarchy\n\t///</summary>\n\tinternal class GroupEntry\n\t{\n\t\tGrouping _Group;\t\t// Group this represents\n\t\tSorting _Sort;\t\t\t// Sort cooresponding to this group\n\t\tint _StartRow;\t\t\t// Starting row of the group (inclusive)\n\t\tint _EndRow;\t\t\t// Endding row of the group (inclusive)\n\t\tList<GroupEntry> _NestedGroup;\t// group one hierarchy below\n\t\n\t\tinternal GroupEntry(Grouping g, Sorting s, int start)\n\t\t{\n\t\t\t_Group = g;\n\t\t\t_Sort = s;\n\t\t\t_StartRow = start;\n\t\t\t_EndRow = -1;\n            _NestedGroup = new List<GroupEntry>();\n\n\t\t\t// Check to see if grouping and sorting are the same\n\t\t\tif (g == null || s == null)\n\t\t\t\treturn;\t\t\t// nothing to check if either is null\n\n\t\t\tif (s.Items.Count != g.GroupExpressions.Items.Count)\n\t\t\t\treturn;\n\n\t\t\tfor (int i = 0; i < s.Items.Count; i++)\n\t\t\t{\n\t\t\t\tSortBy sb = s.Items[i] as SortBy;\n\n\t\t\t\tif (sb.Direction == SortDirectionEnum.Descending)\n\t\t\t\t\treturn;\t\t\t// TODO we could optimize this \n\t\t\t\t\n\t\t\t\tFunctionField ff = sb.SortExpression.Expr as FunctionField;\n\t\t\t\tif (ff == null || ff.GetTypeCode() != TypeCode.String)\n\t\t\t\t\treturn;\n\n\t\t\t\tGroupExpression ge = g.GroupExpressions.Items[i] as GroupExpression;\n\t\t\t\tFunctionField ff2 = ge.Expression.Expr as FunctionField;\n\t\t\t\tif (ff2 == null || ff.Fld != ff2.Fld)\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t\t_Sort = null;\t\t// we won't need to sort since the groupby will handle it correctly\n\t\t}\n\n\t\tinternal int StartRow\n\t\t{\n\t\t\tget { return  _StartRow; }\n\t\t\tset {  _StartRow = value; }\n\t\t}\n\n\t\tinternal int EndRow\n\t\t{\n\t\t\tget { return  _EndRow; }\n\t\t\tset {  _EndRow = value; }\n\t\t}\n\n\t\tinternal List<GroupEntry> NestedGroup\n\t\t{\n\t\t\tget { return  _NestedGroup; }\n\t\t\tset {  _NestedGroup = value; }\n\t\t}\n\n\t\tinternal Grouping Group\n\t\t{\n\t\t\tget { return  _Group; }\n\t\t}\n\n\t\tinternal Sorting Sort\n\t\t{\n\t\t\tget { return  _Sort; }\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/GroupExpression.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Definition of an expression within a group.\n\t///</summary>\n\t[Serializable]\n\tinternal class GroupExpression : ReportLink\n\t{\n\t\tExpression _Expression;\t\t\t// \n\n\t\tinternal GroupExpression(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Expression = new Expression(r,this,xNode,ExpressionType.Variant);\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Expression != null)\n                await _Expression.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Expression Expression\n\t\t{\n\t\t\tget { return  _Expression; }\n\t\t\tset {  _Expression = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/GroupExpressions.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Collection of group expressions.\n\t///</summary>\n\t[Serializable]\n\tinternal class GroupExpressions : ReportLink\n\t{\n        List<GroupExpression> _Items;\t\t\t// list of GroupExpression\n\n\t\tinternal GroupExpressions(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tGroupExpression g;\n            _Items = new List<GroupExpression>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"groupexpression\":\n\t\t\t\t\t\tg = new GroupExpression(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tg=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown GroupExpressions element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (g != null)\n\t\t\t\t\t_Items.Add(g);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"GroupExpressions require at least one GroupExpression be defined.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (GroupExpression g in _Items)\n\t\t\t{\n                await g.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<GroupExpression> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Grouping.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Grouping definition: expressions forming group, paging forced when group changes, ...\n\t///</summary>\n\t[Serializable]\n\tinternal class Grouping : ReportLink\n\t{\n\t\tName _Name;\t\t// Name of the Grouping (for use in\n\t\t\t\t\t\t// RunningValue and RowNumber)\n\t\t\t\t\t\t// No two grouping elements may have the\n\t\t\t\t\t\t// same name. No grouping element may\n\t\t\t\t\t\t// have the same name as a data set or a data\n\t\t\t\t\t\t// region\n\t\tExpression _Label;\t// (string) A label to identify an instance of the group\n\t\t\t\t\t\t//within the client UI (to provide a userfriendly\n\t\t\t\t\t\t// label for searching). See ReportItem.Label\n\t\tGroupExpressions _GroupExpressions;\t//The expressions to group the data by\n\t\tbool _PageBreakAtStart;\t// Indicates the report should page break at\n\t\t\t\t\t\t// the start of the group.\n\t\t\t\t\t\t// Not valid for column groupings in Matrix regions.\n\t\tbool _PageBreakAtEnd;\t// Indicates the report should page break at\n\t\t\t\t\t\t// the end of the group.\n\t\t\t\t\t\t// Not valid for column groupings in Matrix regions.\n\t\tCustom _Custom; // Custom information to be passed to the\n\t\t\t\t\t\t// report output component.\n\t\tFilters _Filters;\t// Filters to apply to each instance of the group.\n\t\tExpression _ParentGroup; //(Variant)\n\t\t\t\t\t\t//An expression that identifies the parent\n\t\t\t\t\t\t//group in a recursive hierarchy. Only\n\t\t\t\t\t\t//allowed if the group has exactly one group\n\t\t\t\t\t\t//expression.\n\t\t\t\t\t\t//Indicates the following:\n\t\t\t\t\t\t//1. Groups should be sorted according\n\t\t\t\t\t\t//to the recursive hierarchy (Sort is\n\t\t\t\t\t\t//still used to sort peer groups).\n\t\t\t\t\t\t//2. Labels (in the document map)\n\t\t\t\t\t\t//should be placed/indented\n\t\t\t\t\t\t//according to the recursive\n\t\t\t\t\t\t//hierarchy.\n\t\t\t\t\t\t//3. Intra-group show/hide should\n\t\t\t\t\t\t//toggle items according to the\n\t\t\t\t\t\t//recursive hierarchy (see\n\t\t\t\t\t\t//ToggleItem)\n\t\t\t\t\t\t//If filters on the group eliminate a group\n\t\t\t\t\t\t// instance�s parent, it is instead treated as a\n\t\t\t\t\t\t// child of the parent�s parent.\n\t\tstring _DataElementName;\t// The name to use for the data element for\n\t\t\t\t\t\t\t\t\t// instances of this group.\n\t\t\t\t\t\t\t\t\t// Default: Name of the group\n\t\tstring _DataCollectionName;\t// The name to use for the data element for\n\t\t\t\t\t\t// the collection of all instances of this group.\n\t\t\t\t\t\t// Default: �DataElementName_Collection�\n\t\tDataElementOutputEnum _DataElementOutput;\t// Indicates whether the group should appear\n\t\t\t\t\t\t// in a data rendering.  Default: Output\n\t\tList<Textbox> _HideDuplicates;\t// holds any textboxes that use this as a hideduplicate scope\n\t\tbool _InMatrix; // true if grouping is in a matrix\n        Expression _PageBreakCondition;\n\n        internal Grouping(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Name=null;\n\t\t\t_Label=null;\n\t\t\t_GroupExpressions=null;\n\t\t\t_PageBreakAtStart=false;\n\t\t\t_PageBreakAtEnd=false;\n\t\t\t_Custom=null;\n\t\t\t_Filters=null;\n\t\t\t_ParentGroup=null;\n\t\t\t_DataElementName=null;\n\t\t\t_DataCollectionName=null;\n\t\t\t_DataElementOutput=DataElementOutputEnum.Output;\n\t\t\t_HideDuplicates=null;\n            _PageBreakCondition = null;\n            // Run thru the attributes\n            foreach (XmlAttribute xAttr in xNode.Attributes)\n\t\t\t{\n\t\t\t\tswitch (xAttr.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"name\":\n\t\t\t\t\t\t_Name = new Name(xAttr.Value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"label\":\n\t\t\t\t\t\t_Label = new Expression(r, this, xNodeLoop, ExpressionType.String);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"groupexpressions\":\n\t\t\t\t\t\t_GroupExpressions = new GroupExpressions(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"pagebreakatstart\":\n\t\t\t\t\t\t_PageBreakAtStart = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"pagebreakatend\":\n\t\t\t\t\t\t_PageBreakAtEnd = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n                    case \"pagebreakcondition\":\n                        _PageBreakCondition = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.Boolean);\n                        break;\n                    case \"custom\":\n\t\t\t\t\t\t_Custom = new Custom(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"filters\":\n\t\t\t\t\t\t_Filters = new Filters(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"parent\":\n\t\t\t\t\t\t_ParentGroup = new Expression(r, this, xNodeLoop, ExpressionType.Variant);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"dataelementname\":\n\t\t\t\t\t\t_DataElementName = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"datacollectionname\":\n\t\t\t\t\t\t_DataCollectionName = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"dataelementoutput\":\n\t\t\t\t\t\t_DataElementOutput = Majorsilence.Reporting.Rdl.DataElementOutput.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Grouping element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.Name != null)\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tOwnerReport.LUAggrScope.Add(this.Name.Nm, this);\t\t// add to referenceable Grouping's\n\t\t\t\t}\n\t\t\t\tcatch\t// wish duplicate had its own exception\n\t\t\t\t{\n\t\t\t\t\tOwnerReport.rl.LogError(8, \"Duplicate Grouping name '\" + this.Name.Nm + \"'.\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_GroupExpressions == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"Group Expressions are required within group '\" + (this.Name==null? \"unnamed\": this.Name.Nm) + \"'.\");\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Label != null)\n                await _Label.FinalPass();\n\t\t\tif (_GroupExpressions != null)\n                await _GroupExpressions.FinalPass();\n\t\t\tif (_Custom != null)\n                await _Custom.FinalPass();\n\t\t\tif (_Filters != null)\n                await _Filters.FinalPass();\n\t\t\tif (_ParentGroup != null)\n                await _ParentGroup.FinalPass();\n            if (_PageBreakCondition != null)\n                await _PageBreakCondition.FinalPass();\n\n            // Determine if group is defined inside of a Matrix;  these get\n            //   different runtime expression handling in FunctionAggr\n            _InMatrix = false;\n\t\t\tfor (ReportLink rl = this.Parent; rl != null; rl = rl.Parent)\n\t\t\t{\n\t\t\t\tif (rl is Matrix)\n\t\t\t\t{\n\t\t\t\t\t_InMatrix = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (rl is Table || rl is List || rl is Chart)\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tinternal void AddHideDuplicates(Textbox tb)\n\t\t{\n\t\t\tif (_HideDuplicates == null)\n                _HideDuplicates = new List<Textbox>();\n\t\t\t_HideDuplicates.Add(tb);\n\t\t}\n\n\t\tinternal void ResetHideDuplicates(Report rpt)\n\t\t{\n\t\t\tif (_HideDuplicates == null)\n\t\t\t\treturn;\n\n\t\t\tforeach (Textbox tb in _HideDuplicates)\n\t\t\t\ttb.ResetPrevious(rpt);\n\t\t}\n\n\t\tinternal bool InMatrix\n\t\t{\n\t\t\tget { return _InMatrix; }\n\t\t}\n\n\t\tinternal Name Name\n\t\t{\n\t\t\tget { return  _Name; }\n\t\t\tset {  _Name = value; }\n\t\t}\n\n\t\tinternal Expression Label\n\t\t{\n\t\t\tget { return  _Label; }\n\t\t\tset {  _Label = value; }\n\t\t}\n\n\t\tinternal GroupExpressions GroupExpressions\n\t\t{\n\t\t\tget { return  _GroupExpressions; }\n\t\t\tset {  _GroupExpressions = value; }\n\t\t}\n\n\t\tinternal bool PageBreakAtStart\n\t\t{\n\t\t\tget { return  _PageBreakAtStart; }\n\t\t\tset {  _PageBreakAtStart = value; }\n\t\t}\n\n\t\tinternal bool PageBreakAtEnd\n\t\t{\n\t\t\tget { return  _PageBreakAtEnd; }\n\t\t\tset {  _PageBreakAtEnd = value; }\n\t\t}\n\n        internal async Task<bool> PageBreakCondition(Report r, Row row, bool SeMancaDefinizione)\n        {\n            bool result;\n            if (_PageBreakCondition != null)\n                result = await _PageBreakCondition.EvaluateBoolean(r, row);\n            else\n                result = SeMancaDefinizione;\n            return result;\n        }\n\n        internal Custom Custom\n\t\t{\n\t\t\tget { return  _Custom; }\n\t\t\tset {  _Custom = value; }\n\t\t}\n\n\t\tinternal Filters Filters\n\t\t{\n\t\t\tget { return  _Filters; }\n\t\t\tset {  _Filters = value; }\n\t\t}\n\n\t\tinternal Expression ParentGroup\n\t\t{\n\t\t\tget { return  _ParentGroup; }\n\t\t\tset {  _ParentGroup = value; }\n\t\t}\n\n\t\tinternal string DataElementName\n\t\t{\n\t\t\tget \n\t\t\t{ \n\t\t\t\tif (_DataElementName == null)\n\t\t\t\t{\n\t\t\t\t\tif (this.Name != null)\n\t\t\t\t\t\treturn this.Name.Nm;\n\t\t\t\t}\n\t\t\t\treturn  _DataElementName; \n\t\t\t}\n\t\t\tset {  _DataElementName = value; }\n\t\t}\n\n\t\tinternal string DataCollectionName\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_DataCollectionName == null)\n\t\t\t\t\treturn DataElementName + \"_Collection\";\n\t\t\t\treturn  _DataCollectionName; \n\t\t\t}\n\t\t\tset {  _DataCollectionName = value; }\n\t\t}\n\n\t\tinternal DataElementOutputEnum DataElementOutput\n\t\t{\n\t\t\tget { return  _DataElementOutput; }\n\t\t\tset {  _DataElementOutput = value; }\n\t\t}\n\n\t\tinternal int GetIndex(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = GetValue(rpt);\n\t\t\treturn wc.index;\n\t\t}\n\n\t\tinternal void SetIndex(Report rpt, int i)\n\t\t{\n\t\t\tWorkClass wc = GetValue(rpt);\n\t\t\twc.index = i;\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Rows GetRows(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = GetValue(rpt);\n\t\t\treturn wc.rows;\n\t\t}\n\n\t\tinternal void SetRows(Report rpt, Rows rows)\n\t\t{\n\t\t\tWorkClass wc = GetValue(rpt);\n\t\t\twc.rows = rows;\n\t\t\treturn;\n\t\t}\n\n\t\tprivate WorkClass GetValue(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = rpt.Cache.Get(this, \"wc\") as WorkClass;\n\t\t\tif (wc == null)\n\t\t\t{\n\t\t\t\twc = new WorkClass();\n\t\t\t\trpt.Cache.Add(this, \"wc\", wc);\n\t\t\t}\n\t\t\treturn wc;\n\t\t}\n\n\t\tclass WorkClass\n\t\t{\n\t\t\tinternal int index;\t\t\t// used by tables (and others) to set grouping values\n\t\t\tinternal Rows rows;\t\t\t// used by matrixes to get/set grouping values\n\t\t\tinternal WorkClass()\n\t\t\t{\n\t\t\t\tindex = -1;\n\t\t\t}\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Header.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.IO;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Definition of the header rows for a table.\n\t///</summary>\n\t[Serializable]\n\tinternal class Header : ReportLink, ICacheData\n\t{\n\t\tTableRows _TableRows;\t// The header rows for the table or group\n\t\tbool _RepeatOnNewPage;\t// Indicates this header should be displayed on\n\t\t\t\t\t\t\t\t// each page that the table (or group) is displayed\t\t\n\n\t\tinternal Header(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_TableRows=null;\n\t\t\t_RepeatOnNewPage=false;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"TableRows\":\n\t\t\t\t\t\t_TableRows = new TableRows(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"RepeatOnNewPage\":\n\t\t\t\t\t\t_RepeatOnNewPage = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_TableRows == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"Header requires the TableRows element.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n            await _TableRows.FinalPass();\n\n\t\t\tOwnerReport.DataCache.Add(this);\n\t\t\treturn;\n\t\t}\n\n\t\tinternal async Task Run(IPresent ip, Row row)\n\t\t{\n            await _TableRows.Run(ip, row);\n\t\t\treturn;\n\t\t}\n\n\t\tinternal async Task RunPage(Pages pgs, Row row)\n\t\t{\n\t\t\tWorkClass wc = this.GetValue(pgs.Report);\n\n\t\t\tif (wc.OutputRow == row && wc.OutputPage == pgs.CurrentPage)\n\t\t\t\treturn;\n\n\t\t\tPage p = pgs.CurrentPage;\n\n\t\t\tfloat height = p.YOffset + await HeightOfRows(pgs, row);\n            height += await OwnerTable.GetPageFooterHeight(pgs, row);\n\t\t\tif (height > pgs.BottomOfPage)\n\t\t\t{\n\t\t\t\tTable t = OwnerTable;\n                await t.RunPageFooter(pgs, row, false);\n\t\t\t\tp = t.RunPageNew(pgs, p);\n                await t.RunPageHeader(pgs, row, false, null);\n\t\t\t\tif (this.RepeatOnNewPage)\n\t\t\t\t\treturn;\t\t// should already be on the page\n\t\t\t}\n\n            await _TableRows.RunPage(pgs, row);\n\t\t\twc.OutputRow = row;\n\t\t\twc.OutputPage = pgs.CurrentPage;\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Table OwnerTable\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tfor (ReportLink rl = this.Parent; rl != null; rl = rl.Parent)\n\t\t\t\t{\n\t\t\t\t\tif (rl is Table)\n\t\t\t\t\t\treturn rl as Table;\n\t\t\t\t}\n\n\t\t\t\treturn null; \n\t\t\t}\n\t\t}\n\n\t\tinternal TableRows TableRows\n\t\t{\n\t\t\tget { return  _TableRows; }\n\t\t\tset {  _TableRows = value; }\n\t\t}\n \n\t\tinternal async Task<float> HeightOfRows(Pages pgs, Row r)\n\t\t{\n\t\t\treturn await _TableRows.HeightOfRows(pgs, r);\n\t\t}\n\n\t\tinternal bool RepeatOnNewPage\n\t\t{\n\t\t\tget { return  _RepeatOnNewPage; }\n\t\t\tset {  _RepeatOnNewPage = value; }\n\t\t}\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(this, \"wc\");\n\t\t}\n\n\t\t#endregion\n\n\t\tprivate WorkClass GetValue(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = rpt.Cache.Get(this, \"wc\") as WorkClass;\n\t\t\tif (wc == null)\n\t\t\t{\n\t\t\t\twc = new WorkClass();\n\t\t\t\trpt.Cache.Add(this, \"wc\", wc);\n\t\t\t}\n\t\t\treturn wc;\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, WorkClass w)\n\t\t{\n\t\t\trpt.Cache.AddReplace(this, \"wc\", w);\n\t\t}\n\n\t\tclass WorkClass\n\t\t{\n\t\t\tinternal Row OutputRow;\t\t// the previous outputed row\n\t\t\tinternal Page OutputPage;\t// the previous outputed row\n\t\t\tinternal WorkClass()\n\t\t\t{\n\t\t\t\tOutputRow = null;\n\t\t\t\tOutputPage = null;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Image.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\nusing Majorsilence.Drawing.Imaging;\n#else\nusing Draw2 = System.Drawing;\nusing System.Drawing.Imaging;\n#endif\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.Threading;\nusing System.Net;\nusing System.Threading.Tasks;\nusing System.Net.Http;\nusing Majorsilence.Reporting.Rdl.Utility;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    ///<summary>\n    /// Represents an image.  Source of image can from database, external or embedded. \n    ///</summary>\n    [Serializable]\n    internal class Image : ReportItem\n    {\n        ImageSourceEnum _ImageSource;   // Identifies the source of the image:\n        Expression _Value;      // See Source. Expected datatype is string or\n                                // binary, depending on Source. If the Value is\n                                // null, no image is displayed.\n        Expression _MIMEType;   // (string) An expression, the value of which is the\n                                //\tMIMEType for the image.\n                                //\tValid values are: image/bmp, image/jpeg,\n                                //\timage/gif, image/png, image/x-png\n                                // Required if Source = Database. Ignored otherwise.\n        ImageSizingEnum _Sizing;    // Defines the behavior if the image does not fit within the specified size.\n\n        bool _ConstantImage;\t// true if Image is a constant at runtime\n\n        string _EmbeddedImageData; // only for RenderHtml and embeddedImage. we need the embedded image code for html.\n\n        private string imageUrl;         \n\n        /// <summary>\n        /// Only gets set for Images which contain urls rather than coming from the database etc..\n        /// </summary>\n        public string ImageUrl\n        {\n            get { return imageUrl; }\n            private set { imageUrl = value; }\n        }\n\n        internal Image(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p, xNode)\n        {\n            _ImageSource = ImageSourceEnum.Unknown;\n            _Value = null;\n            _MIMEType = null;\n            _Sizing = ImageSizingEnum.AutoSize;\n            _ConstantImage = false;\n\n            // Loop thru all the child nodes\n            foreach (XmlNode xNodeLoop in xNode.ChildNodes)\n            {\n                if (xNodeLoop.NodeType != XmlNodeType.Element)\n                    continue;\n                switch (xNodeLoop.Name.ToLowerInvariant())\n                {\n                    case \"source\":\n                        _ImageSource = Majorsilence.Reporting.Rdl.ImageSource.GetStyle(xNodeLoop.InnerText);\n                        break;\n                    case \"value\":\n                        _Value = new Expression(r, this, xNodeLoop, ExpressionType.Variant);\n                        break;\n                    case \"mimetype\":\n                        _MIMEType = new Expression(r, this, xNodeLoop, ExpressionType.String);\n                        break;\n                    case \"sizing\":\n                        _Sizing = ImageSizing.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n                        break;\n                    default:\n                        if (ReportItemElement(xNodeLoop))   // try at ReportItem level\n                            break;\n                        // don't know this element - log it\n                        OwnerReport.rl.LogError(4, \"Unknown Image element \" + xNodeLoop.Name + \" ignored.\");\n                        break;\n                }\n            }\n            if (_ImageSource == ImageSourceEnum.Unknown)\n                OwnerReport.rl.LogError(8, \"Image requires a Source element.\");\n            if (_Value == null)\n                OwnerReport.rl.LogError(8, \"Image requires the Value element.\");\n        }\n\n        // Handle parsing of function in final pass\n        async override internal Task FinalPass()\n        {\n            await base.FinalPass();\n\n            await _Value.FinalPass();\n            if (_MIMEType != null)\n                await _MIMEType.FinalPass();\n\n            _ConstantImage = await this.IsConstant();\n\n            return;\n        }\n\n        // Returns true if the image and style remain constant at runtime\n        async Task<bool> IsConstant()\n        {\n\n            if (await _Value.IsConstant())\n            {\n                if (_MIMEType == null || await _MIMEType.IsConstant())\n                {\n                    //\t\t\t\t\tif (this.Style == null || this.Style.ConstantStyle)\n                    //\t\t\t\t\t\treturn true;\n                    return true;    // ok if style changes\n                }\n            }\n            return false;\n        }\n\n        async override internal Task Run(IPresent ip, Row row)\n        {\n            await base.Run(ip, row);\n\n            string mtype = null;\n            Stream strm = null;\n            try\n            {\n                (strm, mtype) = await GetImageStream(ip.Report(), row);\n\n                await ip.Image(this, row, mtype, strm);\n            }\n            catch\n            {\n                // image failed to load;  continue processing\n            }\n            finally\n            {\n                if (strm != null)\n                    strm.Close();\n            }\n            return;\n        }\n\n        override internal async Task RunPage(Pages pgs, Row row)\n        {\n            Report r = pgs.Report;\n            bool bHidden = await IsHidden(r, row);\n\n            WorkClass wc = GetWC(r);\n            string mtype = null;\n            Stream strm = null;\n            Draw2.Image im = null;\n\n            SetPagePositionBegin(pgs);\n            if (bHidden)\n            {\n                PageImage pi = new PageImage(ImageFormat.Jpeg, (byte[])null, 0, 0);\n                await this.SetPagePositionAndStyle(r, pi, row);\n                SetPagePositionEnd(pgs, pi.Y + pi.H);\n                return;\n            }\n\n            if (wc.PgImage != null)\n            {   // have we already generated this one\n                // reuse most of the work; only position will likely change\n                PageImage pi = new PageImage(wc.PgImage.ImgFormat, wc.PgImage.GetImageData(), wc.PgImage.SamplesW, wc.PgImage.SamplesH);\n                pi.Name = wc.PgImage.Name;              // this is name it will be shared under\n                pi.Sizing = this._Sizing;\n                await this.SetPagePositionAndStyle(r, pi, row);\n                pgs.CurrentPage.AddObject(pi);\n                SetPagePositionEnd(pgs, pi.Y + pi.H);\n                return;\n            }\n\n            try\n            {\n                (strm, mtype) = await GetImageStream(r, row);\n                if (strm == null)\n                {\n                    r.rl.LogError(4, string.Format(\"Unable to load image {0}.\", this.Name.Nm));\n                    return;\n                }\n                im = Draw2.Image.FromStream(strm);\n                int height = im.Height;\n                int width = im.Width;\n                MemoryStream ostrm = new MemoryStream();\n                ImageFormat imf;\n                \n                switch (mtype.ToLower())\n                {\n                    case \"image/jpeg\":\n                        imf = ImageFormat.Jpeg;\n                        im.Save(ostrm, imf);\n                        break;\n                    case \"image/png\":\n                        imf = ImageFormat.Png;\n                        im.Save(ostrm, imf);\n                        break;\n                    default: // from old code where all images convert to jpeg, i don't know why. May be need delete it and add all support formats.\n                        imf = ImageFormat.Jpeg;\n                        ImageCodecInfo[] info;\n                        info = ImageCodecInfo.GetImageEncoders();\n                        Draw2.Imaging.EncoderParameters encoderParameters;\n                        encoderParameters = new Draw2.Imaging.EncoderParameters(1);\n                        encoderParameters.Param[0] = new Draw2.Imaging.EncoderParameter(Draw2.Imaging.Encoder.Quality, ImageQualityManager.EmbeddedImageQuality);\n                        ImageCodecInfo codec = null;\n                        for (int i = 0; i < info.Length; i++)\n                        {\n                            if (info[i].FormatDescription == \"JPEG\")\n                            {\n                                codec = info[i];\n                                break;\n                            }\n                        }\n                        im.Save(ostrm, codec, encoderParameters);\n                        break;\n                }\n\n                byte[] ba = ostrm.ToArray();\n                ostrm.Close();\n                PageImage pi = new PageImage(imf, ba, width, height);\n                pi.Sizing = this._Sizing;\n                await this.SetPagePositionAndStyle(r, pi, row);\n\n                pgs.CurrentPage.AddObject(pi);\n                if (_ConstantImage)\n                {\n                    wc.PgImage = pi;\n                    // create unique name; PDF generation uses this to optimize the saving of the image only once\n                    pi.Name = \"pi\" + Interlocked.Increment(ref Parser.Counter).ToString();  // create unique name\n                }\n\n                SetPagePositionEnd(pgs, pi.Y + pi.H);\n            }\n            catch (Exception e)\n            {\n                // image failed to load, continue processing\n                r.rl.LogError(4, \"Image load failed.  \" + e.Message);\n            }\n            finally\n            {\n                if (strm != null)\n                    strm.Close();\n                if (im != null)\n                    im.Dispose();\n            }\n            return;\n        }\n\n        async Task<(Stream stream, string mtype)> GetImageStream(Report rpt, Row row)\n        {\n            string mtype = null;\n            Stream strm = null;\n            try\n            {\n                switch (this.ImageSource)\n                {\n                    case ImageSourceEnum.Database:\n                        if (_MIMEType == null)\n                            return (null, mtype);\n                        mtype = await _MIMEType.EvaluateString(rpt, row);\n                        object o = await _Value.Evaluate(rpt, row);\n                        strm = new MemoryStream((byte[])o);\n                        break;\n                    case ImageSourceEnum.Embedded:\n                        string name = await _Value.EvaluateString(rpt, row);\n                        EmbeddedImage ei = (EmbeddedImage)OwnerReport.LUEmbeddedImages[name];\n                        mtype = ei.MIMEType;\n                        byte[] ba = Convert.FromBase64String(ei.ImageData);\n                        _EmbeddedImageData = ei.ImageData; // we need this for html embedded image\n                        strm = new MemoryStream(ba);\n                        break;\n                    case ImageSourceEnum.External:\n                        string fname = this.ImageUrl = await _Value.EvaluateString(rpt, row);\n                        mtype = GetMimeType(fname);\n                        if (fname.StartsWith(\"http:\") ||\n                            fname.StartsWith(\"file:\") ||\n                            fname.StartsWith(\"https:\"))\n                        {\n                            using (HttpClient client = new HttpClient())\n                            {\n                                client.AddMajorsilenceReportingUserAgent();\n                                HttpResponseMessage response = await client.GetAsync(fname);\n                                response.EnsureSuccessStatusCode();\n                                strm = await response.Content.ReadAsStreamAsync();\n                            }\n                        }\n                        else\n                            strm = new FileStream(fname, System.IO.FileMode.Open, FileAccess.Read);\n                        break;\n                    default:\n                        return (null, mtype);\n                }\n            }\n            catch (Exception e)\n            {\n                if (strm != null)\n                {\n                    strm.Close();\n                    strm = null;\n                }\n                rpt.rl.LogError(4, string.Format(\"Unable to load image. {0}\", e.Message));\n            }\n\n            return (strm, mtype);\n        }\n\n        internal ImageSourceEnum ImageSource\n        {\n            get { return _ImageSource; }\n            set { _ImageSource = value; }\n        }\n\n        internal Expression Value\n        {\n            get { return _Value; }\n            set { _Value = value; }\n        }\n\n        internal Expression MIMEType\n        {\n            get { return _MIMEType; }\n            set { _MIMEType = value; }\n        }\n\n        internal ImageSizingEnum Sizing\n        {\n            get { return _Sizing; }\n            set { _Sizing = value; }\n        }\n\n        internal bool ConstantImage\n        {\n            get { return _ConstantImage; }\n        }\n\n        internal string EmbeddedImageData\n        {\n            get { return _EmbeddedImageData; }\n        }\n\n\n        static internal string GetMimeType(string file)\n        {\n            String fileExt;\n\n            int startPos = file.LastIndexOf(\".\") + 1;\n\n            fileExt = file.Substring(startPos).ToLower();\n\n            switch (fileExt)\n            {\n                case \"bmp\":\n                    return \"image/bmp\";\n                case \"jpeg\":\n                case \"jpe\":\n                case \"jpg\":\n                case \"jfif\":\n                    return \"image/jpeg\";\n                case \"gif\":\n                    return \"image/gif\";\n                case \"png\":\n                    return \"image/png\";\n                case \"tif\":\n                case \"tiff\":\n                    return \"image/tiff\";\n                default:\n                    return null;\n            }\n        }\n\n        private WorkClass GetWC(Report rpt)\n        {\n            WorkClass wc = rpt.Cache.Get(this, \"wc\") as WorkClass;\n            if (wc == null)\n            {\n                wc = new WorkClass();\n                rpt.Cache.Add(this, \"wc\", wc);\n            }\n            return wc;\n        }\n\n        private void RemoveImageWC(Report rpt)\n        {\n            rpt.Cache.Remove(this, \"wc\");\n        }\n\n        class WorkClass\n        {\n            internal PageImage PgImage; // When ConstantImage is true this will save the PageImage for reuse\n            internal WorkClass()\n            {\n                PgImage = null;\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ImageSizing.cs",
    "content": "\n\nusing System;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Handle the image size enumeration.  AutoSize, Fit, FitProportional, Clip\n\t///</summary>\n\tpublic enum ImageSizingEnum\n\t{\n\t\t/// <summary>\n\t\t/// The borders should grow/shrink to accommodate the image (Default).\n\t\t/// </summary>\n\t\tAutoSize,\t\n\t\t/// <summary>\n\t\t/// The image is resized to exactly match the height and width of the image element.\n\t\t/// </summary>\n\t\tFit,\t\t\n\t\t/// <summary>\n\t\t/// The image should be resized to fit, preserving aspect ratio.\n\t\t/// </summary>\n\t\tFitProportional,\t\n\t\t/// <summary>\n\t\t/// The image should be clipped to fit.\t\t\n\t\t/// </summary>\n\t\tClip\t\t\n\t}\n\t/// <summary>\n\t/// Use ImageSizing when you want to take a string and map it to the ImageSizingEnum. \n\t/// </summary>\n\tpublic class ImageSizing\n\t{\n\t\t/// <summary>\n\t\t/// Given a string return the cooresponding enumeration.\n\t\t/// </summary>\n\t\t/// <param name=\"s\"></param>\n\t\t/// <returns>The enumerated value corresponding to the string.</returns>\n        //[System.Diagnostics.DebuggerStepThrough] \n\t\tstatic public ImageSizingEnum GetStyle(string s)\n\t\t{\n\t\t\treturn GetStyle(s, null);\n\t\t}\n\n\t\tstatic internal ImageSizingEnum GetStyle(string s, ReportLog rl)\n\t\t\t{\n\t\t\tImageSizingEnum rs;\n\n            try\n            {\n                rs = (ImageSizingEnum)Enum.Parse(typeof(ImageSizingEnum), s);\n            }\n            catch \n            {\n                if (rl != null)\n                {\n                    rl.LogError(4, \"Unknown ImageSizing '\" + s + \"'. AutoSize assumed.\");\n                }\n                rs = ImageSizingEnum.AutoSize; \n            }\n            \n            /*\n\t\t\tswitch (s)\n\t\t\t{\t\t\n\t\t\t\tcase \"AutoSize\":\n\t\t\t\t\trs = ImageSizingEnum.AutoSize;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Fit\":\n\t\t\t\t\trs = ImageSizingEnum.Fit;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"FitProportional\":\n\t\t\t\t\trs = ImageSizingEnum.FitProportional;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Clip\":\n\t\t\t\t\trs = ImageSizingEnum.Clip;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\n\t\t\t\t\tif (rl != null)\n\t\t\t\t\t\trl.LogError(4, \"Unknown ImageSizing '\" + s + \"'.  AutoSize assumed.\");\n\n\t\t\t\t\trs = ImageSizingEnum.AutoSize;\n\t\t\t\t\tbreak;\n\t\t\t}\n            */\n\t\t\treturn rs;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ImageSource.cs",
    "content": "\n\nusing System;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t///  Handles the Image source enumeration.  External, Embedded, Database\n\t///</summary>\n\tinternal enum ImageSourceEnum\n\t{\n\t\tExternal,\t// The Value contains a constant or\n\t\t\t\t\t// expression that evaluates to the location of\n\t\t\t\t\t// the image\n\t\tEmbedded,\t// The Value contains a constant\n\t\t\t\t\t// or expression that evaluates to the name of\n\t\t\t\t\t// an EmbeddedImage within the report.\n\t\tDatabase,\t// The Value contains an\n\t\t\t\t\t// expression (typically a field in the database)\n\t\t\t\t\t// that evaluates to the binary data for the\n\t\t\t\t\t// image.\n\t\tUnknown\t\t// Illegal or unspecified\n\t}\n\tinternal class ImageSource\n\t{\n\t\tstatic internal ImageSourceEnum GetStyle(string s)\n\t\t{\n\t\t\tImageSourceEnum rs;\n\n\t\t\tswitch (s)\n\t\t\t{\t\t\n\t\t\t\tcase \"External\":\n\t\t\t\t\trs = ImageSourceEnum.External;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Embedded\":\n\t\t\t\t\trs = ImageSourceEnum.Embedded;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Database\":\n\t\t\t\t\trs = ImageSourceEnum.Database;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\n\t\t\t\t\trs = ImageSourceEnum.Unknown;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn rs;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Legend.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Chart legend definition (style, position, ...)\n\t///</summary>\n\t[Serializable]\n\tinternal class Legend : ReportLink\n\t{\n\t\tbool _Visible;\t\t// Specifies whether a legend is displayed.\n\t\t\t\t\t\t\t// Defaults to false.\n\t\tStyle _Style;\t\t// Defines text, border and background style\n\t\t\t\t\t\t\t// properties for the legend. All Textbox properties apply.\n\t\tLegendPositionEnum _Position;\t// The position of the legend\n\t\t\t\t\t\t\t\t\t// Default: RightTop\n\t\tLegendLayoutEnum _Layout;\t// The arrangement of labels within the legend\n\t\t\t\t\t\t\t\t// Default: Column\n\t\tbool _InsidePlotArea;\t//Boolean If true, draw legend inside plot area, otherwise\n\t\t\t\t\t\t\t\t// draw outside plot area (default).\n\t\n\t\tinternal Legend(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Visible=false;\n\t\t\t_Style=null;\n\t\t\t_Position=LegendPositionEnum.RightTop;\n\t\t\t_Layout=LegendLayoutEnum.Column;\n\t\t\t_InsidePlotArea=false;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"visible\":\n\t\t\t\t\t\t_Visible = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"style\":\n\t\t\t\t\t\t_Style = new Style(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"position\":\n\t\t\t\t\t\t_Position = LegendPosition.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"layout\":\n\t\t\t\t\t\t_Layout = LegendLayout.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"insideplotarea\":\n\t\t\t\t\t\t_InsidePlotArea = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\n\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Style != null)\n                await _Style.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal bool Visible\n\t\t{\n\t\t\tget { return  _Visible; }\n\t\t\tset {  _Visible = value; }\n\t\t}\n\n\t\tinternal Style Style\n\t\t{\n\t\t\tget { return  _Style; }\n\t\t\tset {  _Style = value; }\n\t\t}\n\n\t\tinternal LegendPositionEnum Position\n\t\t{\n\t\t\tget { return  _Position; }\n\t\t\tset {  _Position = value; }\n\t\t}\n\n\t\tinternal LegendLayoutEnum Layout\n\t\t{\n\t\t\tget { return  _Layout; }\n\t\t\tset {  _Layout = value; }\n\t\t}\n\n\t\tinternal bool InsidePlotArea\n\t\t{\n\t\t\tget { return  _InsidePlotArea; }\n\t\t\tset {  _InsidePlotArea = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/LegendLayout.cs",
    "content": "\nusing System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Handle the LegendLayout enumeration: Column, Row, Table\n\t///</summary>\n\tpublic enum LegendLayoutEnum\n\t{\n\t\tColumn,\n\t\tRow,\n\t\tTable\n\t}\n\tpublic class LegendLayout\n\t{\n        static public LegendLayoutEnum GetStyle(string s)\n        {\n            return LegendLayout.GetStyle(s, null);\n        }\n\n\t\tstatic internal LegendLayoutEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tLegendLayoutEnum rs;\n\n\t\t\tswitch (s.ToLowerInvariant())\n\t\t\t{\t\t\n\t\t\t\tcase \"column\":\n\t\t\t\t\trs = LegendLayoutEnum.Column;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"row\":\n\t\t\t\t\trs = LegendLayoutEnum.Row;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"table\":\n\t\t\t\t\trs = LegendLayoutEnum.Table;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\n                    if (rl != null)\n\t\t\t\t\t    rl.LogError(4, \"Unknown LegendLayout '\" + s + \"'.  Column assumed.\");\n\t\t\t\t\trs = LegendLayoutEnum.Column;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn rs;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/LegendPosition.cs",
    "content": "\nusing System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Handle Legend position enumeration: TopLeft, LeftTop, ...\n\t///</summary>\n\tpublic enum LegendPositionEnum\n\t{\n\t\tTopLeft,\n\t\tTopCenter,\n\t\tTopRight,\n\t\tLeftTop,\n\t\tLeftCenter,\n\t\tLeftBottom,\n\t\tRightTop,\n\t\tRightCenter,\n\t\tRightBottom,\n\t\tBottomRight,\n\t\tBottomCenter,\n\t\tBottomLeft\n\t}\n\tpublic class LegendPosition\n\t{\n        static public LegendPositionEnum GetStyle(string s)\n        {\n            return LegendPosition.GetStyle(s, null);\n        }\n\t\tstatic internal LegendPositionEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tLegendPositionEnum rs;\n\n\t\t\tswitch (s.ToLowerInvariant())\n\t\t\t{\t\t\n\t\t\t\tcase \"topleft\":\n\t\t\t\t\trs = LegendPositionEnum.TopLeft;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"topcenter\":\n\t\t\t\t\trs = LegendPositionEnum.TopCenter;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"topright\":\n\t\t\t\t\trs = LegendPositionEnum.TopRight;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"lefttop\":\n\t\t\t\t\trs = LegendPositionEnum.LeftTop;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"leftcenter\":\n\t\t\t\t\trs = LegendPositionEnum.LeftCenter;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"leftbottom\":\n\t\t\t\t\trs = LegendPositionEnum.LeftBottom;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"righttop\":\n\t\t\t\t\trs = LegendPositionEnum.RightTop;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"rightcenter\":\n\t\t\t\t\trs = LegendPositionEnum.RightCenter;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"rightbottom\":\n\t\t\t\t\trs = LegendPositionEnum.RightBottom;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"bottomright\":\n\t\t\t\t\trs = LegendPositionEnum.BottomRight;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"bottomcenter\":\n\t\t\t\t\trs = LegendPositionEnum.BottomCenter;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"bottomleft\":\n\t\t\t\t\trs = LegendPositionEnum.BottomLeft;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\n                    if (rl != null)\n\t\t\t\t\t    rl.LogError(4, \"Unknown LegendPosition '\" + s + \"'.  RightTop assumed.\");\n\t\t\t\t\trs = LegendPositionEnum.RightTop;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn rs;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Line.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Represents the report item for a line.\n\t///</summary>\n\t[Serializable]\n\tinternal class Line : ReportItem\n\t{\n\t\t// Line has no additional elements/attributes beyond ReportItem\n\t\tinternal Line(ReportDefn r, ReportLink p, XmlNode xNode) : base(r,p,xNode)\n\t\t{\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\t// nothing beyond reportitem for now\n\t\t\t\tif (!ReportItemElement(xNodeLoop))\t// try at ReportItem level\n\t\t\t\t{\t\t\t\t\t\n\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Line element \" + xNodeLoop.Name + \" ignored.\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toverride internal Task Run(IPresent ip, Row row)\n\t\t{\n\t\t\tip.Line(this, row);\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\toverride internal async Task RunPage(Pages pgs, Row row)\n\t\t{\n\t\t\tReport r = pgs.Report;\n            bool bHidden = await IsHidden(r, row);\n\n\t\t\tSetPagePositionBegin(pgs);\n\t\t\tPageLine pl = new PageLine();\n            await SetPagePositionAndStyle(r, pl, row);\n            if (!bHidden)\n\t\t\t    pgs.CurrentPage.AddObject(pl);\n\t\t\tSetPagePositionEnd(pgs, pl.Y);\n\t\t}\n\n\t\tinternal float GetX2(Report rpt)\n\t\t{\n\t\t\tfloat x2=GetOffsetCalc(rpt)+LeftCalc(rpt);\n\t\t\tif (Width != null)\n\t\t\t\tx2 += Width.Points;\n\t\t\treturn x2;\n\t\t}\t\t\n\n\t\tinternal int iX2\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tint x2=0;\n\t\t\t\tif (Left != null)\n\t\t\t\t\tx2 = Left.Size;\n\t\t\t\tif (Width != null)\n\t\t\t\t\tx2 += Width.Size;\n\t\t\t\treturn x2;\n\t\t\t}\n\t\t}\n\n        internal int iY2\n        {\n            get\n            {\n                int y2 = 0;\n                if (Top != null)\n                    y2 = Top.Size;\n                if (Height != null)\n                    y2 += Height.Size;\n                return y2;\n            }\n        }\n\n        internal float Y2\n        {\n            get\n            {\n                float y2 = 0;\n                if (Top != null)\n                    y2 = Top.Points;\n                if (Height != null)\n                    y2 += Height.Points;\n                return y2;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/List.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\n#else\nusing System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Represents the report item for a List (i.e. absolute positioning)\n\t///</summary>\n\t[Serializable]\n\tinternal class List : DataRegion\n\t{\n\t\tGrouping _Grouping;\t\t//The expressions to group the data by\n\t\t\t\t\t\t\t\t// Required if there are any DataRegions\n\t\t\t\t\t\t\t\t// contained within this List\n\t\tSorting _Sorting;\t\t// The expressions to sort the repeated list regions by\n\t\tReportItems _ReportItems;\t// The elements of the list layout\n\t\tstring _DataInstanceName;\t// The name to use for the data element for the\n\t\t\t\t\t\t\t\t// each instance of this list. Ignored if there is a\n\t\t\t\t\t\t\t\t// grouping for the list.\n\t\t\t\t\t\t\t\t// Default: \"Item\"\n\t\tDataInstanceElementOutputEnum _DataInstanceElementOutput;\n\t\t\t\t\t\t\t// Indicates whether the list instances should\n\t\t\t\t\t\t\t// appear in a data rendering. Ignored if there is\n\t\t\t\t\t\t\t// a grouping for the list.  Default: output\n\t\tbool _CanGrow;\t\t\t// indicates that row height can increase in size\n\t\tList<Textbox> _GrowList;\t// list of TextBox's that need to be checked for growth\n\n\t\tinternal List(ReportDefn r, ReportLink p, XmlNode xNode):base(r,p,xNode)\n\t\t{\n\t\t\t_Grouping=null;\n\t\t\t_Sorting=null;\n\t\t\t_ReportItems=null;\n\t\t\t_DataInstanceName=\"Item\";\n\t\t\t_DataInstanceElementOutput=DataInstanceElementOutputEnum.Output;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"grouping\":\n\t\t\t\t\t\t_Grouping = new Grouping(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"sorting\":\n\t\t\t\t\t\t_Sorting = new Sorting(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"reportitems\":\n\t\t\t\t\t\t_ReportItems = new ReportItems(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"datainstancename\":\n\t\t\t\t\t\t_DataInstanceName = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"datainstanceelementoutput\":\n\t\t\t\t\t\t_DataInstanceElementOutput = Majorsilence.Reporting.Rdl.DataInstanceElementOutput.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tif (DataRegionElement(xNodeLoop))\t// try at DataRegion level\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown List element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tDataRegionFinish();\t\t\t// Tidy up the DataRegion\n\t\t}\n\n\t\tasync override internal Task FinalPass()\n\t\t{\n            await base.FinalPass();\n\n\t\t\tif (_Grouping != null)\n                await _Grouping.FinalPass();\n\t\t\tif (_Sorting != null)\n                await _Sorting.FinalPass();\n\t\t\tif (_ReportItems != null)\n                await _ReportItems.FinalPass();\n\n\t\t\t// determine if the size is dynamic depending on any of its\n\t\t\t//   contained textbox have cangrow true\n\t\t\tif (ReportItems == null)\t// no report items in List region\n\t\t\t\treturn;\n\n\t\t\tforeach (ReportItem ri in this.ReportItems.Items)\n\t\t\t{\n\t\t\t\tif (!(ri is Textbox tb))\n\t\t\t\t\tcontinue;\n\t\t\t\tif (tb.CanGrow)\n\t\t\t\t{\n\t\t\t\t\tif (this._GrowList == null)\n                        _GrowList = new List<Textbox>();\n\t\t\t\t\t_GrowList.Add(tb);\n\t\t\t\t\t_CanGrow = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (_CanGrow)\t\t\t\t// shrink down the resulting list\n                _GrowList.TrimExcess();\n\n\t\t\treturn;\n\t\t}\n\n\t\tasync override internal Task Run(IPresent ip, Row row)\n\t\t{\n\t\t\tReport r = ip.Report();\n\t\t\tWorkClass wc = GetValue(r);\n\n\t\t\twc.Data = await GetFilteredData(r, row);\n\n\t\t\tif (!await AnyRows(ip, wc.Data))\t\t// if no rows return\n\t\t\t\treturn;                 //   nothing left to do\n\n            await RunSetGrouping(r, wc);\n\n            await base.Run(ip, row);\n\n\t\t\tif (!await ip.ListStart(this, row))\t\n\t\t\t\treturn;                         // renderer doesn't want to continue\n\n            await RunGroups(ip, wc, wc.Groups);\n\n            await ip.ListEnd(this, row);\n\t\t\tRemoveValue(r);\n\t\t}\n\n\t\tasync override internal Task RunPage(Pages pgs, Row row)\n\t\t{\n\t\t\tReport r = pgs.Report;\n\t\t\tif (await IsHidden(r, row))\n\t\t\t\treturn;\n\n\t\t\tWorkClass wc = GetValue(r);\n\t\t\twc.Data = await GetFilteredData(r, row);\n\n\t\t\tSetPagePositionBegin(pgs);\n\n\t\t\tif (!await AnyRowsPage(pgs, wc.Data))\t\t// if no rows return\n\t\t\t\treturn;\t\t\t\t\t\t//   nothing left to do\n\n\t\t\tRunPageRegionBegin(pgs);\n\n            await RunSetGrouping(pgs.Report, wc);\n\n            await RunPageGroups(pgs, wc, wc.Groups);\n\n\t\t\tRunPageRegionEnd(pgs);\n\t\t\tSetPagePositionEnd(pgs, pgs.CurrentPage.YOffset);\n\t\t\tRemoveValue(r);\n\n\t\t\treturn;\n\t\t}\n\n\t\tprivate async Task RunSetGrouping(Report rpt, WorkClass wc)\n\t\t{\n\t\t\tGroupEntry[] currentGroups; \n\n\t\t\t// We have some data\n\t\t\tif (_Grouping != null || \n\t\t\t\t_Sorting != null)\t\t// fix up the data\n\t\t\t{\n\t\t\t\tRows saveData = wc.Data;\n\t\t\t\twc.Data = new Rows(rpt, null, _Grouping, _Sorting);\n\t\t\t\twc.Data.Data = saveData.Data;\n\t\t\t\twc.Data.Sort();\n                await PrepGroups(rpt, wc);\n\t\t\t}\n\t\t\t// If we haven't formed any groups then form one with all rows\n\t\t\tif (wc.Groups == null)\n\t\t\t{\n                wc.Groups = new List<GroupEntry>();\n\t\t\t\tGroupEntry ge = new GroupEntry(null, null, 0);\n\t\t\t\tif (wc.Data.Data != null)\t\t// Do we have any data?\n\t\t\t\t\tge.EndRow = wc.Data.Data.Count-1;\t// yes\n\t\t\t\telse\n\t\t\t\t\tge.EndRow = -1;\t\t\t\t\t// no\n\t\t\t\twc.Groups.Add(ge);\t\t\t// top group\n\t\t\t\tcurrentGroups = new GroupEntry[1];\n\t\t\t}\n\t\t\telse\n\t\t\t\tcurrentGroups = new GroupEntry[1];\n\n\t\t\twc.Data.CurrentGroups = currentGroups;\n\n\t\t\treturn;\n\t\t}\n\n\t\tprivate async Task PrepGroups(Report rpt, WorkClass wc)\n\t\t{\n\t\t\tif (_Grouping == null)\n\t\t\t\treturn;\n\n\t\t\tint i=0;\n\t\t\t// 1) Build array of all GroupExpression objects\n\t\t\tList<GroupExpression> gea = _Grouping.GroupExpressions.Items;\n\t\t\tGroupEntry[] currentGroups = new GroupEntry[1];\n\t\t\t_Grouping.SetIndex(rpt, 0);\t// set the index of this group (so we can find the GroupEntry)\n\t\t\tcurrentGroups[0] = new GroupEntry(_Grouping, _Sorting, 0);\n\n\t\t\t// Save the typecodes, and grouping by groupexpression; for later use\n\t\t\tTypeCode[] tcs = new TypeCode[gea.Count];\n\t\t\tGrouping[] grp = new Grouping[gea.Count];\n\t\t\ti=0;\n\t\t\tforeach (GroupExpression ge in gea)\n\t\t\t{\n\t\t\t\tgrp[i] = (Grouping) (ge.Parent.Parent);\t\t\t// remember the group\n\t\t\t\ttcs[i++] = ge.Expression.GetTypeCode();\t// remember type of expression\n\t\t\t}\n\n\t\t\t// 2) Loop thru the data, then loop thru the GroupExpression list\n\t\t\twc.Groups = new List<GroupEntry>();\n\t\t\tobject[] savValues=null;\n\t\t\tobject[] grpValues=null;\n\t\t\tint rowCurrent = 0;\n\n\t\t\tforeach (Row row in wc.Data.Data)\n\t\t\t{\n\t\t\t\t// Get the values for all the group expressions\n\t\t\t\tif (grpValues == null)\n\t\t\t\t\tgrpValues = new object[gea.Count];\n\n\t\t\t\ti=0;\n\t\t\t\tforeach (GroupExpression ge in gea)  // Could optimize to only calculate as needed in comparison loop below??\n\t\t\t\t{\n\t\t\t\t\tgrpValues[i++] = await ge.Expression.Evaluate(rpt, row);\n\t\t\t\t}\n\n\t\t\t\t// For first row we just primed the pump; action starts on next row\n\t\t\t\tif (rowCurrent == 0)\t\t\t// always start new group on first row\n\t\t\t\t{\n\t\t\t\t\trowCurrent++;\n\t\t\t\t\tsavValues = grpValues;\n\t\t\t\t\tgrpValues = null;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// compare the values; if change then we have a group break\n\t\t\t\tfor (i = 0; i < savValues.Length; i++)\n\t\t\t\t{\n\t\t\t\t\tif (Filter.ApplyCompare(tcs[i], savValues[i], grpValues[i]) != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\t// start a new group; and force a break on every subgroup\n\t\t\t\t\t\tGroupEntry saveGe=null;\t\n\t\t\t\t\t\tfor (int j = grp[i].GetIndex(rpt); j < currentGroups.Length; j++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcurrentGroups[j].EndRow = rowCurrent-1;\n\t\t\t\t\t\t\tif (j == 0)\n\t\t\t\t\t\t\t\twc.Groups.Add(currentGroups[j]);\t\t// top group\n\t\t\t\t\t\t\telse if (saveGe == null)\n\t\t\t\t\t\t\t\tcurrentGroups[j-1].NestedGroup.Add(currentGroups[j]);\n\t\t\t\t\t\t\telse \n\t\t\t\t\t\t\t\tsaveGe.NestedGroup.Add(currentGroups[j]);\n\n\t\t\t\t\t\t\tsaveGe = currentGroups[j];\t// retain this GroupEntry\n\t\t\t\t\t\t\tcurrentGroups[j] = new GroupEntry(currentGroups[j].Group,currentGroups[j].Sort, rowCurrent);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsavValues = grpValues;\n\t\t\t\t\t\tgrpValues = null;\n\t\t\t\t\t\tbreak;\t\t// break out of the value comparison loop\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\trowCurrent++;\n\t\t\t}\n\n\t\t\t// End of all rows force break on end of rows\n\t\t\tfor (i = 0; i < currentGroups.Length; i++)\n\t\t\t{\n\t\t\t\tcurrentGroups[i].EndRow = rowCurrent-1;\n\t\t\t\tif (i == 0)\n\t\t\t\t\twc.Groups.Add(currentGroups[i]);\t\t// top group\n\t\t\t\telse\n\t\t\t\t\tcurrentGroups[i-1].NestedGroup.Add(currentGroups[i]);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tprivate async Task RunGroups(IPresent ip, WorkClass wc, List<GroupEntry> groupEntries)\n\t\t{\n\t\t\tforeach (GroupEntry ge in groupEntries)\n\t\t\t{\n\t\t\t\t// set the group entry value\n\t\t\t\tint index;\n\t\t\t\tif (ge.Group != null)\t// groups?\n\t\t\t\t{\n\t\t\t\t\tge.Group.ResetHideDuplicates(ip.Report());\t// reset duplicate checking\n\t\t\t\t\tindex = ge.Group.GetIndex(ip.Report());\t// yes\n\t\t\t\t}\n\t\t\t\telse\t\t\t\t\t// no; must be main dataset\n\t\t\t\t\tindex = 0;\n\t\t\t\twc.Data.CurrentGroups[index] = ge;\n\t\t\t\tif (ge.NestedGroup.Count > 0)\n\t\t\t\t\tRunGroupsSetGroups(ip.Report(), wc, ge.NestedGroup);\n\n\t\t\t\tif (ge.Group == null)\n\t\t\t\t{\t// need to run all the rows since no group defined\n\t\t\t\t\tfor (int r=ge.StartRow; r <= ge.EndRow; r++)\n\t\t\t\t\t{\n\t\t\t\t\t\tawait ip.ListEntryBegin(this,  wc.Data.Data[r]);\n                        if (_ReportItems != null)\n                            await _ReportItems.Run(ip, wc.Data.Data[r]);\n\t\t\t\t\t\tip.ListEntryEnd(this, wc.Data.Data[r]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\t// need to process just whole group as a List entry\n\t\t\t\t\tawait ip.ListEntryBegin(this,  wc.Data.Data[ge.StartRow]);\n\n\t\t\t\t\t// pass the first row of the group\n                    if (_ReportItems != null)\n                        await _ReportItems.Run(ip, wc.Data.Data[ge.StartRow]);\n\n\t\t\t\t\tip.ListEntryEnd(this, wc.Data.Data[ge.StartRow]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprivate async Task RunPageGroups(Pages pgs, WorkClass wc, List<GroupEntry> groupEntries)\n\t\t{\n\t\t\tReport rpt = pgs.Report;\n\t\t\tPage p = pgs.CurrentPage;\n\t\t\tfloat pagebottom = OwnerReport.BottomOfPage;\n//\t\t\tp.YOffset += (Top == null? 0: this.Top.Points);\n            p.YOffset += this.RelativeY(rpt);\n            float listoffset = GetOffsetCalc(pgs.Report) + LeftCalc(pgs.Report);\n\n\t\t\tfloat height;\t\n\t\t\tRow row;\n\n\t\t\tforeach (GroupEntry ge in groupEntries)\n\t\t\t{\n\t\t\t\t// set the group entry value\n\t\t\t\tint index;\n\t\t\t\tif (ge.Group != null)\t// groups?\n\t\t\t\t{\n\t\t\t\t\tge.Group.ResetHideDuplicates(rpt);\t// reset duplicate checking\n\t\t\t\t\tindex = ge.Group.GetIndex(rpt);\t// yes\n\t\t\t\t}\n\t\t\t\telse\t\t\t\t\t// no; must be main dataset\n\t\t\t\t\tindex = 0;\n\t\t\t\twc.Data.CurrentGroups[index] = ge;\n\t\t\t\tif (ge.NestedGroup.Count > 0)\n\t\t\t\t\tRunGroupsSetGroups(rpt, wc, ge.NestedGroup);\n\n\t\t\t\tif (ge.Group == null)\n\t\t\t\t{\t// need to run all the rows since no group defined\n\t\t\t\t\tfor (int r=ge.StartRow; r <= ge.EndRow; r++)\n\t\t\t\t\t{\n\t\t\t\t\t\trow = wc.Data.Data[r];\n\t\t\t\t\t\theight = await HeightOfList(rpt, pgs.G, row);\n                        \n                        if (p.YOffset + height > pagebottom && !p.IsEmpty())\t\t// need another page for this row?\n                            p = RunPageNew(pgs, p);\t\t\t\t\t// yes; if at end this page is empty\n\n                        float saveYoffset = p.YOffset;              // this can be affected by other page items\n                        PageRectangle border = null;\n                        if (Style != null) {\n\t                        border = new PageRectangle();\n                            await SetPagePositionAndStyle(rpt, border, row);\n\t                        p.AddObject(border);\n                        }\n\n                        if (_ReportItems != null)\n                            await _ReportItems.RunPage(pgs, row, listoffset);\n\n                        if (p == pgs.CurrentPage)       // did subitems force new page?\n                        {   // no use the height of the list\n                            p.YOffset = saveYoffset + height;\n                        }\n                        else\n                        {   // got forced to new page; just add the padding on\n                            p = pgs.CurrentPage;        // set to new page\n                            if (this.Style != null)\n                            {\n                                p.YOffset += await this.Style.EvalPaddingBottom(rpt, row);\n                            }\n                        }\n                        \n                        if(border != null) // fix up the border height\n\t                        border.H = p.YOffset - border.Y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\t// need to process just whole group as a List entry\n\t\t\t\t\tif (ge.Group.PageBreakAtStart && !p.IsEmpty())\n\t\t\t\t\t\tp = RunPageNew(pgs, p);\n\n\t\t\t\t\t// pass the first row of the group\n\t\t\t\t\trow = wc.Data.Data[ge.StartRow];\n\t\t\t\t\theight = await HeightOfList(rpt, pgs.G, row);\n                    \n                    if (p.YOffset + height > pagebottom && !p.IsEmpty())\t\t// need another page for this row?\n                        p = RunPageNew(pgs, p);\t\t\t\t\t// yes; if at end this page is empty\n                    float saveYoffset = p.YOffset;              // this can be affected by other page items\n                    \n                    if (_ReportItems != null)\n                        await _ReportItems.RunPage(pgs, row, listoffset);\n\n\n                    if (p == pgs.CurrentPage)       // did subitems force new page?\n                    {   // no use the height of the list\n                        p.YOffset = saveYoffset + height;\n                    }\n                    else\n                    {   // got forced to new page; just add the padding on\n                        p = pgs.CurrentPage;        // set to new page\n                        if (this.Style != null)\n                        {\n                            p.YOffset += await this.Style.EvalPaddingBottom(rpt, row);\n                        }\n                    }\n\t\t\t\t\t\n                    if (ge.Group.PageBreakAtEnd ||\t\t\t\t\t// need another page for next group?\n\t\t\t\t\t\tp.YOffset + height > pagebottom)\n\t\t\t\t\t{\n\t\t\t\t\t\tp = RunPageNew(pgs, p);\t\t\t\t\t\t// yes; if at end empty page will be cleaned up later\n\t\t\t\t\t}\n\t\t\t\t}\n                RemoveWC(rpt);\n\t\t\t}\n\t\t}\n\n        internal override void RemoveWC(Report rpt)\n        {\n            base.RemoveWC(rpt);\n            \n            if (this._ReportItems == null)\n                return;\n\n            foreach (ReportItem ri in this._ReportItems.Items)\n            {\n                ri.RemoveWC(rpt);\n            }\n        }\n\n\t\tprivate void RunGroupsSetGroups(Report rpt, WorkClass wc, List<GroupEntry> groupEntries)\n\t\t{\n\t\t\t// set the group entry value\n\t\t\tGroupEntry ge = groupEntries[0];\n\t\t\twc.Data.CurrentGroups[ge.Group.GetIndex(rpt)] = ge;\n\n\t\t\tif (ge.NestedGroup.Count > 0)\n\t\t\t\tRunGroupsSetGroups(rpt, wc, ge.NestedGroup);\n\t\t}\n\n\t\tinternal Grouping Grouping\n\t\t{\n\t\t\tget { return  _Grouping; }\n\t\t\tset {  _Grouping = value; }\n\t\t}\n\n\t\tinternal async Task<float> HeightOfList(Report rpt, Graphics g, Row r)\n\t\t{\t\t   \n\t\t\tWorkClass wc = GetValue(rpt);\n\n\t\t\tfloat defnHeight = this.HeightOrOwnerHeight;\n\t\t\tif (!_CanGrow)\n\t\t\t\treturn defnHeight;\n\n\t\t\tfloat height;\n\t\t\tforeach (Textbox tb in this._GrowList)\n\t\t\t{\n\t\t\t\tfloat top = (float) (tb.Top == null? 0.0 : tb.Top.Points);\n\t\t\t\theight = top + await tb.RunTextCalcHeight(rpt, g, r);\n\t\t\t\tif (tb.Style != null)\n\t\t\t\t\theight += (await tb.Style.EvalPaddingBottom(rpt, r) + await tb.Style.EvalPaddingTop(rpt, r));\n\t\t\t\tdefnHeight = Math.Max(height, defnHeight);\n\t\t\t}\n\t\t\twc.CalcHeight = defnHeight;\n\t\t\treturn defnHeight;\n\t\t}\n\n\t\tinternal Sorting Sorting\n\t\t{\n\t\t\tget { return  _Sorting; }\n\t\t\tset {  _Sorting = value; }\n\t\t}\n\n\t\tinternal ReportItems ReportItems\n\t\t{\n\t\t\tget { return  _ReportItems; }\n\t\t\tset {  _ReportItems = value; }\n\t\t}\n\n\t\tinternal string DataInstanceName\n\t\t{\n\t\t\tget { return  _DataInstanceName == null? \"Item\": _DataInstanceName; }\n\t\t\tset {  _DataInstanceName = value; }\n\t\t}\n\n\t\tinternal DataInstanceElementOutputEnum DataInstanceElementOutput\n\t\t{\n\t\t\tget { return  _DataInstanceElementOutput; }\n\t\t\tset {  _DataInstanceElementOutput = value; }\n\t\t}\n\n\t\tprivate WorkClass GetValue(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = rpt.Cache.Get(this, \"wc\") as WorkClass;\n\t\t\tif (wc == null)\n\t\t\t{\n\t\t\t\twc = new WorkClass(this);\n\t\t\t\trpt.Cache.Add(this, \"wc\", wc);\n\t\t\t}\n\t\t\treturn wc;\n\t\t}\n\n\t\tprivate void RemoveValue(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(this, \"wc\");\n\t\t}\n\n\t\tclass WorkClass\n\t\t{\n\t\t\tinternal float CalcHeight;\t\t// dynamic when CanGrow true\n\t\t\tinternal Rows Data;\t// Runtime data; either original query if no groups\n\t\t\t\t\t\t// or sorting or a copied version that is grouped/sorted\n            internal List<GroupEntry> Groups;\t\t\t// Runtime groups; array of GroupEntry\n\t\t\tinternal WorkClass(List l)\n\t\t\t{\n\t\t\t\tCalcHeight = l.Height == null? 0: l.Height.Points;\n\t\t\t\tData=null;\n\t\t\t\tGroups=null;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Marker.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Represents a marker on a chart.\n\t///</summary>\n\t[Serializable]\n\tinternal class Marker : ReportLink\n\t{\n\t\tMarkerTypeEnum _Type;\t// Defines the marker type for values. Default: none\n\t\tRSize _Size;\t\t// Represents the height and width of the\n\t\t\t\t\t\t\t//  plotting area of marker(s).\n\t\tStyle _Style;\t\t// Defines the border and background style\n\t\t\t\t\t\t\t//  properties for the marker(s).\t\t\n\t\n\t\tinternal Marker(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Type=MarkerTypeEnum.None;\n\t\t\t_Size=null;\n\t\t\t_Style=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"type\":\n\t\t\t\t\t\t_Type = MarkerType.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"size\":\n\t\t\t\t\t\t_Size = new RSize(r, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"style\":\n\t\t\t\t\t\t_Style = new Style(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Style != null)\n                await _Style.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal MarkerTypeEnum Type\n\t\t{\n\t\t\tget { return  _Type; }\n\t\t\tset {  _Type = value; }\n\t\t}\n\n\t\tinternal RSize Size\n\t\t{\n\t\t\tget { return  _Size; }\n\t\t\tset {  _Size = value; }\n\t\t}\n\n\t\tinternal Style Style\n\t\t{\n\t\t\tget { return  _Style; }\n\t\t\tset {  _Style = value; }\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/MarkerType.cs",
    "content": "\n\nusing System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Handle MarkerType enumeration: Square, circle, ...\n\t///</summary>\n\tinternal enum MarkerTypeEnum\n\t{\n\t\tNone,\n\t\tSquare,\n\t\tCircle,\n\t\tDiamond,\n\t\tTriangle,\n\t\tCross,\n\t\tAuto\n\t}\n\tinternal class MarkerType\n\t{\n\t\tstatic internal MarkerTypeEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tMarkerTypeEnum rs;\n\n\t\t\tswitch (s.ToLowerInvariant())\n\t\t\t{\t\t\n\t\t\t\tcase \"none\":\n\t\t\t\t\trs = MarkerTypeEnum.None;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"square\":\n\t\t\t\t\trs = MarkerTypeEnum.Square;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"circle\":\n\t\t\t\t\trs = MarkerTypeEnum.Circle;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"diamond\":\n\t\t\t\t\trs = MarkerTypeEnum.Diamond;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"triangle\":\n\t\t\t\t\trs = MarkerTypeEnum.Triangle;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"cross\":\n\t\t\t\t\trs = MarkerTypeEnum.Cross;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"auto\":\n\t\t\t\t\trs = MarkerTypeEnum.Auto;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\n\t\t\t\t\trl.LogError(4, \"Unknown MarkerType '\" + s + \"'.  None assumed.\");\n\t\t\t\t\trs = MarkerTypeEnum.None;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn rs;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Matrix.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Collections;\nusing System.Globalization;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    ///<summary>\n    ///  Represents the report item (and Data region) for a matrix (cross-tabulation)\n    ///</summary>\n    [Serializable]\n    internal class Matrix : DataRegion\n    {\n        Corner _Corner;     // The region that contains the elements of\n                            // the upper left corner area of the matrix.\n                            // If omitted, no report items are output in\n                            // the corner.\n        ColumnGroupings _ColumnGroupings;   // The set of column groupings for the matrix\n        RowGroupings _RowGroupings; // The set of row groupings for the matrix\n        MatrixRows _MatrixRows;     // The rows contained in each detail cell\n                                    // of the matrix layout\n        MatrixColumns _MatrixColumns;   // The columns contained in each detail\n                                        // cell of the matrix layout\n        MatrixLayoutDirectionEnum _LayoutDirection; // Indicates whether the matrix columns\n                                                    // grow left-to-right (with headers on the\n                                                    // left) or right-to-left (with headers on the\n                                                    // right).\n        int _GroupsBeforeRowHeaders;    // The number of instances of the\n                                        // outermost column group that should\n                                        // appear to the left of the row headers\n                                        // (right of the row headers for RTL\n                                        // matrixes). Default is 0.\n        string _CellDataElementName;    // The name to use for the cell element. Default: �Cell�\n        MatrixCellDataElementOutputEnum _CellDataElementOutput; // Indicates whether the cell contents\n                                                                //should appear in a data rendering.  Default is Output.\n        static string nullterminal = '\\ufffe'.ToString();\n        static string terminal = '\\uffff'.ToString();\n\n        internal Matrix(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p, xNode)\n        {\n            _Corner = null;\n            _ColumnGroupings = null;\n            _RowGroupings = null;\n            _MatrixRows = null;\n            _MatrixColumns = null;\n            _LayoutDirection = MatrixLayoutDirectionEnum.LTR;\n            _GroupsBeforeRowHeaders = 0;\n            _CellDataElementName = null;\n            _CellDataElementOutput = MatrixCellDataElementOutputEnum.Output;\n\n            // Loop thru all the child nodes\n            foreach (XmlNode xNodeLoop in xNode.ChildNodes)\n            {\n                if (xNodeLoop.NodeType != XmlNodeType.Element)\n                    continue;\n                switch (xNodeLoop.Name.ToLowerInvariant())\n                {\n                    case \"corner\":\n                        _Corner = new Corner(r, this, xNodeLoop);\n                        break;\n                    case \"columngroupings\":\n                        _ColumnGroupings = new ColumnGroupings(r, this, xNodeLoop);\n                        break;\n                    case \"rowgroupings\":\n                        _RowGroupings = new RowGroupings(r, this, xNodeLoop);\n                        break;\n                    case \"matrixrows\":\n                        _MatrixRows = new MatrixRows(r, this, xNodeLoop);\n                        break;\n                    case \"matrixcolumns\":\n                        _MatrixColumns = new MatrixColumns(r, this, xNodeLoop);\n                        break;\n                    case \"layoutdirection\":\n                        _LayoutDirection = MatrixLayoutDirection.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n                        break;\n                    case \"groupsbeforerowheaders\":\n                        _GroupsBeforeRowHeaders = XmlUtil.Integer(xNodeLoop.InnerText);\n                        break;\n                    case \"celldataelementname\":\n                        _CellDataElementName = xNodeLoop.InnerText;\n                        break;\n                    case \"celldataelementoutput\":\n                        _CellDataElementOutput = MatrixCellDataElementOutput.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n                        break;\n                    default:\n                        if (DataRegionElement(xNodeLoop))   // try at DataRegion level\n                            break;\n                        // don't know this element - log it\n                        OwnerReport.rl.LogError(4, \"Unknown Matrix element '\" + xNodeLoop.Name + \"' ignored.\");\n                        break;\n                }\n            }\n            DataRegionFinish();         // Tidy up the DataRegion\n\n            if (_ColumnGroupings == null)\n                OwnerReport.rl.LogError(8, \"Matrix element ColumnGroupings not specified for \" + (this.Name == null ? \"'name not specified'\" : this.Name.Nm));\n            if (_RowGroupings == null)\n                OwnerReport.rl.LogError(8, \"Matrix element RowGroupings not specified for \" + (this.Name == null ? \"'name not specified'\" : this.Name.Nm));\n            if (_MatrixRows == null)\n                OwnerReport.rl.LogError(8, \"Matrix element MatrixRows not specified for \" + (this.Name == null ? \"'name not specified'\" : this.Name.Nm));\n            if (_MatrixColumns == null)\n                OwnerReport.rl.LogError(8, \"Matrix element MatrixColumns not specified for \" + (this.Name == null ? \"'name not specified'\" : this.Name.Nm));\n\n            // MatrixCells count must be the same as the number of StaticColumns.\n            //   If there are no StaticColumns it must be 1\n            if (OwnerReport.rl.MaxSeverity > 4)\n                return;         // don't perform this check if we've already go errors\n            int mc = _MatrixRows.CellCount; // MatrixCells\n            int sc = Math.Max(1, _ColumnGroupings.StaticCount);\n            if (mc != sc)\n            {\n                OwnerReport.rl.LogError(8, \"The count of MatrixCells must be 1 or equal to the number of StaticColumns if there are any.  Matrix \" + (this.Name == null ? \"unknown.\" : this.Name.Nm));\n            }\n            // matrix columns must also equal the static count (or 1 if no static columns)\n            mc = this.CountMatrixColumns;\n            if (mc != sc)\n            {\n                OwnerReport.rl.LogError(8, \"The count of MatrixColumns must be 1 or equal to the number of StaticColumns if there are any.  Matrix \" + (this.Name == null ? \"unknown.\" : this.Name.Nm));\n            }\n            // matrix rows must also equal the static count (or 1 if no static rows)\n            int mr = this.CountMatrixRows;\n            int sr = Math.Max(1, _RowGroupings.StaticCount);\n            if (mr != sr)\n            {\n                OwnerReport.rl.LogError(8, \"The count of MatrixRows must be 1 or equal to the number of StaticRows if there are any.  Matrix \" + (this.Name == null ? \"unknown.\" : this.Name.Nm));\n            }\n        }\n\n        async override internal Task FinalPass()\n        {\n            await base.FinalPass();\n\n            float totalHeight = 0;\n            if (_Corner != null)\n                await _Corner.FinalPass();\n            if (_ColumnGroupings != null)\n            {\n                await _ColumnGroupings.FinalPass();\n                totalHeight += _ColumnGroupings.DefnHeight();\n            }\n            if (_RowGroupings != null)\n                await _RowGroupings.FinalPass();\n            if (_MatrixRows != null)\n            {\n                await _MatrixRows.FinalPass();\n                totalHeight += _MatrixRows.DefnHeight();\n            }\n            if (_MatrixColumns != null)\n                await _MatrixColumns.FinalPass();\n\n            if (this.Height == null)\n            {   // Calculate a height based on the sum of the TableRows\n                this.Height = new RSize(this.OwnerReport, string.Format(NumberFormatInfo.InvariantInfo, \"{0:0.00}pt\", totalHeight));\n            }\n\n            return;\n        }\n\n        async override internal Task Run(IPresent ip, Row row)\n        {\n            Report rpt = ip.Report();\n            WorkClass wc = GetValue(rpt);\n            wc.FullData = wc.Data = await GetFilteredData(rpt, row);\n\n            if (!await AnyRows(ip, wc.Data))      // if no rows return\n                return;                 //   nothing left to do\n\n            int maxColumns;\n            int maxRows;\n            MatrixCellEntry[,] matrix;\n\n            (matrix, maxRows, maxColumns) = await RunBuild(rpt);\n\n            // Now run thru the rows and columns of the matrix passing the information\n            //   on to the rendering engine\n            int headerRows = _ColumnGroupings.Items.Count;\t// number of column headers we have\n            if (!await ip.MatrixStart(this, matrix, row, headerRows, maxRows, maxColumns))\n                return;\n            for (int iRow = 0; iRow < maxRows; iRow++)\n            {\n                ip.MatrixRowStart(this, iRow, row);\n                for (int iColumn = 0; iColumn < maxColumns; iColumn++)\n                {\n                    MatrixCellEntry mce = matrix[iRow, iColumn];\n                    if (mce == null)\n                    {\n                        await ip.MatrixCellStart(this, null, iRow, iColumn, row, float.MinValue, float.MinValue, 1);\n                        await ip.MatrixCellEnd(this, null, iRow, iColumn, row);\n                    }\n                    else\n                    {\n                        wc.Data = mce.Data;     // Must set this for evaluation\n\n                        Row lrow = wc.Data.Data.Count > 0 ? wc.Data.Data[0] : null;\n                        mce.DisplayItem.SetMC(rpt, mce);    // set for use by the display item\n                        SetGroupingValues(rpt, mce);\n\n                        await ip.MatrixCellStart(this, mce.DisplayItem, iRow, iColumn, lrow, mce.Height, mce.Width, mce.ColSpan);\n\n                        await mce.DisplayItem.Run(ip, lrow);\n                        await ip.MatrixCellEnd(this, mce.DisplayItem, iRow, iColumn, lrow);\n                    }\n                }\n                ip.MatrixRowEnd(this, iRow, row);\n            }\n            await ip.MatrixEnd(this, row);\n            RemoveValue(rpt);\n        }\n\n        async override internal Task RunPage(Pages pgs, Row row)\n        {\n            Report r = pgs.Report;\n            if (await IsHidden(r, row))\n                return;\n\n            WorkClass wc = GetValue(r);\n\n            wc.FullData = wc.Data = await GetFilteredData(r, row);\n\n            SetPagePositionBegin(pgs);\n\n            if (!await AnyRowsPage(pgs, wc.Data))     // if no rows return\n                return;                     //   nothing left to do\n\n            int maxColumns;\n            int maxRows;\n            int headerRows = _ColumnGroupings.Items.Count;  // number of column headers we have\n            MatrixCellEntry[,] matrix;\n\n            (matrix, maxRows, maxColumns) = await RunBuild(r);\n\n            // Now run thru the rows and columns of the matrix creating the pages\n            RunPageRegionBegin(pgs);\n            Page p = pgs.CurrentPage;\n            p.YOffset += this.RelativeY(r);\n\n            for (int iRow = 0; iRow < maxRows; iRow++)\n            {\n                float h = await HeightOfRow(pgs, matrix, iRow);\n                if (h <= 0)     // there were no cells in row\n                    continue;   //     skip the row\n\n                if (p.YOffset + h > pgs.BottomOfPage)\n                {\n                    p = RunPageNew(pgs, p);\n                    // run thru the headers again\n                    for (int aRow = 0; aRow < headerRows; aRow++)\n                    {\n                        await RunPageColumns(pgs, wc, matrix, aRow, maxColumns);\n                        p.YOffset += await HeightOfRow(pgs, matrix, aRow);\n                    }\n                }\n                await RunPageColumns(pgs, wc, matrix, iRow, maxColumns);\n                p.YOffset += h;\n            }\n\n            RunPageRegionEnd(pgs);\n            SetPagePositionEnd(pgs, pgs.CurrentPage.YOffset);\n            RemoveValue(r);\n            return;\n        }\n\n        internal void RunReset(Report rpt)\n        {\n            RemoveValue(rpt);\n        }\n\n        async Task<float> HeightOfRow(Pages pgs, MatrixCellEntry[,] matrix, int iRow)\n        {\n            Report rpt = pgs.Report;\n            WorkClass wc = GetValue(rpt);\n\n            int maxColumns = matrix.GetLength(1);\n            float height = 0;\n            bool bResetAllHeights = false;\n\n            // Handle the corner;  it might span rows & columns\n            bool bCorner = false;\n            float cornerHeight = 0;\n            if (iRow == 0 && matrix[0, 0] != null &&\n                (this.ColumnGroupings.Items.Count > 1 ||\n                this.RowGroupings.Items.Count > 1))\n            {\n                bCorner = true;\n            }\n\n            for (int iCol = 0; iCol < maxColumns; iCol++)\n            {\n                MatrixCellEntry mce = matrix[iRow, iCol];\n                if (mce == null)\n                    continue;\n                if (mce.DisplayItem is Textbox)\n                {\n                    Textbox tb = mce.DisplayItem as Textbox;\n                    if (tb.CanGrow)\n                    {\n                        wc.Data = mce.Data;     // Must set this for evaluation\n\n                        Row lrow = wc.Data.Data.Count > 0 ? wc.Data.Data[0] : null;\n                        mce.DisplayItem.SetMC(rpt, mce);    // set for use by the display item\n                        SetGroupingValues(rpt, mce);\n\n                        float tbh = await tb.RunTextCalcHeight(rpt, pgs.G, lrow);\n                        if (height < tbh)\n                        {\n                            if (bCorner && iCol == 0)\n                            {\n                                cornerHeight = tbh;\n                            }\n                            else\n                            {\n                                bResetAllHeights = true;\n                                height = tbh;\n                            }\n                        }\n                    }\n                }\n\n                if (bCorner && iCol == 0)\n                    continue;\n                if (height < mce.Height)\n                    height = mce.Height;\n            }\n\n            if (bResetAllHeights)   // If any text forces the row to grow; all heights must be fixed\n            {\n                for (int iCol = 0; iCol < maxColumns; iCol++)\n                {\n                    if (bCorner && iCol == 0)\n                        continue;\n                    MatrixCellEntry mce = matrix[iRow, iCol];\n                    if (mce != null)\n                        mce.Height = height;\n                }\n            }\n\n            // Even with expansion room; we might need more space for the corner\n            if (bCorner && cornerHeight > matrix[0, 0].Height)\n            {   // add the additional space needed to the first row's height\n                float newRow0Height;\n                if (ColumnGroupings.Items.Count == 1)\n                    newRow0Height = cornerHeight;\n                else if (matrix[0, 1] != null)\n                    newRow0Height = matrix[0, 1].Height + (cornerHeight - matrix[0, 0].Height);\n                else\n                    newRow0Height = (cornerHeight - matrix[0, 0].Height);\n                height = newRow0Height;\n                matrix[0, 0].Height = cornerHeight;\n                for (int iCol = 1; iCol < maxColumns; iCol++)\n                {\n                    MatrixCellEntry mce = matrix[0, iCol];\n                    if (mce != null)\n                        mce.Height = newRow0Height;\n                }\n            }\n\n            return height;\n        }\n\n        internal float[] ColumnWidths(MatrixCellEntry[,] matrix, int maxColumns)\n        {\n            float[] widths = new float[maxColumns];\n\n            for (int iColumn = 0; iColumn < maxColumns; iColumn++)\n            {\n                widths[iColumn] = WidthOfColumn(matrix, iColumn);\n            }\n            return widths;\n        }\n\n        float WidthOfColumn(MatrixCellEntry[,] matrix, int iCol)\n        {\n            int maxRows = matrix.GetLength(0);\n            for (int iRow = 0; iRow < maxRows; iRow++)\n            {\n                if (matrix[iRow, iCol] != null && matrix[iRow, iCol].ColSpan == 1)\n                    return matrix[iRow, iCol].Width;\n            }\n            return 0;\n        }\n\n        async Task RunPageColumns(Pages pgs, WorkClass wc, MatrixCellEntry[,] matrix, int iRow, int maxColumns)\n        {\n            Report rpt = pgs.Report;\n\n            float xpos = GetOffsetCalc(pgs.Report) + LeftCalc(rpt);\n            for (int iColumn = 0; iColumn < maxColumns; iColumn++)\n            {\n                MatrixCellEntry mce = matrix[iRow, iColumn];\n\n                if (mce == null)\n                {   // have a null column but we need to fill column space\n                    xpos += WidthOfColumn(matrix, iColumn);\n                    continue;\n                }\n                wc.Data = mce.Data;     // Must set this for evaluation\n\n                Row lrow = wc.Data.Data.Count > 0 ? wc.Data.Data[0] : null;\n                SetGroupingValues(rpt, mce);\n                mce.DisplayItem.SetMC(rpt, mce);    // set for use by the display item\n                mce.XPosition = xpos;\n                await mce.DisplayItem.RunPage(pgs, lrow);\n                xpos += mce.Width;\n                iColumn += (mce.ColSpan - 1);           // skip columns already accounted for\n            }\n        }\n\n        // RunBuild is used by both Matrix.Run and Chart.Run to obtain the necessary data\n        //   used by their respective rendering interfaces\n        internal async Task<(MatrixCellEntry[,], int numRows, int numCols)> RunBuild(Report rpt)\n        {\n            int numRows;\n            int numCols;\n\n            WorkClass wc = GetValue(rpt);\n            Rows _Data = wc.Data;\n\n            // loop thru all the data;\n            //    form bitmap arrays for each unique data value of each grouping (row and column) value\n            int maxColumns = _RowGroupings.Items.Count; // maximum # of columns in matrix\n                                                        // at top we need a row per column grouping\n            int maxRows = _ColumnGroupings.Items.Count; // maximum # of rows in matrix\n                                                        // at left we need a column per row grouping\n\n            MatrixEntry mcg = new MatrixEntry(null, \"\", null, _Data.Data.Count);\n            _ColumnGroupings.SetME(rpt, mcg);\n            mcg.FirstRow = 0;\n            mcg.LastRow = _Data.Data.Count - 1;\n            mcg.Rows = new BitArray(_Data.Data.Count, true);    // all data\n\n            MatrixEntry mrg = new MatrixEntry(null, \"\", null, _Data.Data.Count);\n            _RowGroupings.SetME(rpt, mrg);\n            mrg.FirstRow = 0;\n            mrg.LastRow = _Data.Data.Count - 1;\n            mrg.Rows = new BitArray(_Data.Data.Count, true);        // all data\n\n            int iRow = 0;               // row counter\n            foreach (Row r in _Data.Data)\n            {\n                // Handle the column values\n                maxColumns = await HandleColumnGrouping(rpt, wc, _Data, r, mcg, 0, iRow, maxColumns);\n\n                // Handle the row values\n                maxRows = await HandleRowGrouping(rpt, wc, _Data, r, mrg, 0, iRow, maxRows);\n\n                iRow++;\n            }\n\n            // Determine how many subtotal columns are needed\n            maxColumns += RunCountSubtotalColumns(rpt, wc, mcg, 0);\n\n            // Determine how many subtotal rows are needed\n            maxRows += RunCountSubtotalRows(rpt, wc, mrg, 0);\n\n            /////\n            // Build and populate the 2 dimensional table of MatrixCellEntry\n            //    that constitute the matrix\n            /////\n            MatrixCellEntry[,] matrix = new MatrixCellEntry[maxRows, maxColumns];\n\n            // Do the column headings\n            int iColumn = _RowGroupings.Items.Count;\n            RunColumnHeaders(rpt, wc, mcg, matrix, _Data, 0, ref iColumn, 0);\n\n            // Do the row headings\n            iRow = _ColumnGroupings.Items.Count;\n            RunRowHeaders(rpt, wc, mrg, matrix, _Data, ref iRow, 0, 0);\n\n            // Do the row/column data\n            iRow = _ColumnGroupings.Items.Count;\n            RunDataRow(rpt, wc, mrg, mcg, matrix, _Data, ref iRow, _RowGroupings.Items.Count, 0);\n\n            // Do the corner\n            matrix[0, 0] = RunCorner(_Data);\n\n            // now return the matrix data\n            numRows = maxRows;\n            numCols = maxColumns;\n            return (matrix, numRows, numCols);\n        }\n\n        int CountMatrixCells\n        {\n            get\n            {\n                MatrixRow mr = this.MatrixRows.Items[0] as MatrixRow;\n                return mr.MatrixCells.Items.Count;\n            }\n        }\n\n        int CountMatrixColumns\n        {\n            get\n            {\n                return this.MatrixColumns.Items.Count;\n            }\n        }\n\n        int CountMatrixRows\n        {\n            get\n            {\n                return this.MatrixRows.Items.Count;\n            }\n        }\n\n        ColumnGrouping LastCg\n        {\n            get { return (ColumnGrouping)(_ColumnGroupings.Items[_ColumnGroupings.Items.Count - 1]); }\n        }\n\n        RowGrouping LastRg\n        {\n            get { return (RowGrouping)(_RowGroupings.Items[_RowGroupings.Items.Count - 1]); }\n        }\n\n        /// <summary>\n        /// Get the last (dynamic) ColumnGrouping\n        /// </summary>\n        /// <returns></returns>\n        ColumnGrouping LastDynColumnGrouping\n        {\n            get\n            {\n                for (int i = _ColumnGroupings.Items.Count - 1; i >= 0; i--)\n                {\n                    ColumnGrouping cg = (ColumnGrouping)(_ColumnGroupings.Items[i]);\n                    if (cg.StaticColumns == null)\n                        return cg;\n                }\n                return (ColumnGrouping)(_ColumnGroupings.Items[_ColumnGroupings.Items.Count - 1]);\n            }\n        }\n\n        /// <summary>\n        /// Get the last (dynamic) RowGrouping\n        /// </summary>\n        /// <returns></returns>\n        RowGrouping LastDynRowGrouping\n        {\n            get\n            {\n                for (int i = _RowGroupings.Items.Count - 1; i >= 0; i--)\n                {\n                    RowGrouping rg = (RowGrouping)(_RowGroupings.Items[i]);\n                    if (rg.StaticRows == null)\n                        return rg;\n                }\n                return (RowGrouping)(_RowGroupings.Items[_RowGroupings.Items.Count - 1]);\n            }\n        }\n\n        async Task<int> HandleRowGrouping(Report rpt, WorkClass wc, Rows rows, Row r, MatrixEntry m, int rgi, int iRow, int maxRows)\n        {\n            while (rgi < _RowGroupings.Items.Count)\n            {\n                RowGrouping rg = _RowGroupings.Items[rgi] as RowGrouping;\n                Grouping grp = null;\n                string result;\n\n                if (rg.StaticRows != null)  // handle static rows\n                {\n                    for (int sri = 0; sri < rg.StaticRows.Items.Count; sri++)\n                    {\n                        result = Convert.ToChar(Convert.ToInt32('a') + sri).ToString() + terminal;  // static row; put all data in it\n                        StaticRow sr = rg.StaticRows.Items[sri] as StaticRow;\n                        MatrixEntry ame;\n                        m.HashData.TryGetValue(result, out ame);\n                        if (ame == null)\n                        {\n                            ame = new MatrixEntry(r, result, m, rows.Data.Count);\n                            ame.RowGroup = rg;\n                            ame.StaticRow = sri;\n                            m.HashData.Add(result, ame);\n                            if (rg == LastRg)       // Add a row when we add data at lowest level\n                                maxRows++;\n                        }\n                        ame.Rows.Set(iRow, true);\n                        // Logic in FirstRow and Last row determine whether value gets set\n                        ame.FirstRow = iRow;\n                        ame.LastRow = iRow;\n                        maxRows = await HandleRowGrouping(rpt, wc, rows, r, ame, rgi + 1, iRow, maxRows);\n                    }\n                    break;  // handled ones below it recursively\n                }\n                else                            // handle dynamic columns\n                {\n                    grp = rg.DynamicRows.Grouping;\n\n                    StringBuilder sb = new StringBuilder();\n                    foreach (GroupExpression ge in grp.GroupExpressions.Items)\n                    {\n                        string temp = await ge.Expression.EvaluateString(rpt, r);\n                        if (temp == null || temp == \"\")\n                            sb.Append(nullterminal);\n                        else\n                            sb.Append(temp);\n                        sb.Append(terminal);        // mark end of group \n                    }\n                    result = sb.ToString();\n\n                    MatrixEntry ame;\n                    m.HashData.TryGetValue(result, out ame);\n                    if (ame == null)\n                    {\n                        ame = new MatrixEntry(r, result, m, rows.Data.Count);\n                        ame.RowGroup = rg;\n                        m.HashData.Add(result, ame);\n                        if (rg == LastRg)       // Add a row when we add data at lowest level\n                            maxRows++;\n                    }\n                    ame.Rows.Set(iRow, true);\n                    // Logic in FirstRow and Last row determine whether value gets set\n                    ame.FirstRow = iRow;\n                    ame.LastRow = iRow;\n                    m = ame;            // now go down a level\n                    rgi++;\n                }\n            }\n\n            return maxRows;\n        }\n\n        async Task<int> HandleColumnGrouping(Report rpt, WorkClass wc, Rows rows, Row r, MatrixEntry m, int cgi, int iRow, int maxColumns)\n        {\n            while (cgi < _ColumnGroupings.Items.Count)\n            {\n                ColumnGrouping cg = _ColumnGroupings.Items[cgi] as ColumnGrouping;\n                Grouping grp = null;\n                string result;\n\n                if (cg.StaticColumns != null)   // handle static columns\n                {\n                    for (int sci = 0; sci < cg.StaticColumns.Items.Count; sci++)\n                    {\n                        result = Convert.ToChar(Convert.ToInt32('a') + sci).ToString() + terminal;  // static column; put all data in it\n                        StaticColumn sc = cg.StaticColumns.Items[sci] as StaticColumn;\n                        MatrixEntry ame;\n                        m.HashData.TryGetValue(result, out ame);\n                        if (ame == null)\n                        {\n                            ame = new MatrixEntry(r, result, m, rows.Data.Count);\n                            ame.ColumnGroup = cg;\n                            ame.StaticColumn = sci;\n                            m.HashData.Add(result, ame);\n                            if (cg == LastCg)       // Add a column when we add data at lowest level\n                                maxColumns++;\n                        }\n                        ame.Rows.Set(iRow, true);\n                        // Logic in FirstRow and Last row determine whether value gets set\n                        ame.FirstRow = iRow;\n                        ame.LastRow = iRow;\n                        maxColumns = await HandleColumnGrouping(rpt, wc, rows, r, ame, cgi + 1, iRow, maxColumns);\n                    }\n                    break;  // handled ones below it recursively\n                }\n                else                            // handle dynamic columns\n                {\n                    grp = cg.DynamicColumns.Grouping;\n\n                    StringBuilder sb = new StringBuilder();\n                    foreach (GroupExpression ge in grp.GroupExpressions.Items)\n                    {\n                        string temp = await ge.Expression.EvaluateString(rpt, r);\n                        if (temp == null || temp == \"\")\n                            sb.Append(nullterminal);\n                        else\n                            sb.Append(temp);\n                        sb.Append(terminal);        // mark end of group \n                    }\n                    result = sb.ToString();\n\n                    MatrixEntry ame;\n                    m.HashData.TryGetValue(result, out ame);\n                    if (ame == null)\n                    {\n                        ame = new MatrixEntry(r, result, m, rows.Data.Count);\n                        ame.ColumnGroup = cg;\n                        m.HashData.Add(result, ame);\n                        if (cg == LastCg)       // Add a column when we add data at lowest level\n                            maxColumns++;\n                    }\n                    ame.Rows.Set(iRow, true);\n                    // Logic in FirstRow and Last row determine whether value gets set\n                    ame.FirstRow = iRow;\n                    ame.LastRow = iRow;\n                    m = ame;            // now go down a level\n                    cgi++;\n                }\n            }\n\n            return maxColumns;\n\n        }\n\n        int RunCountSubtotalColumns(Report rpt, WorkClass wc, MatrixEntry m, int level)\n        {\n            // Get the number of static columns\n            int scCount = Math.Max(1, this._ColumnGroupings.StaticCount);\n\n            int count = 0;\n            // Increase the column count when subtotal is requested at this level\n            ColumnGrouping cg = (ColumnGrouping)(_ColumnGroupings.Items[level]);\n            if (cg.DynamicColumns != null &&\n                cg.DynamicColumns.Subtotal != null)\n                count = scCount;\n\n            if (m.GetSortedData(rpt) == null || level + 1 >= _ColumnGroupings.Items.Count)\n                return count;\n\n            // Now dive into the data\n            foreach (MatrixEntry ame in m.GetSortedData(rpt))\n            {\n                count += RunCountSubtotalColumns(rpt, wc, ame, level + 1);\n            }\n\n            return count;\n        }\n\n        int RunCountSubtotalRows(Report rpt, WorkClass wc, MatrixEntry m, int level)\n        {\n            // Get the number of static columns\n            int srCount = Math.Max(1, this._RowGroupings.StaticCount);\n\n            int count = 0;\n            // Increase the row count when subtotal is requested at this level\n            RowGrouping rg = (RowGrouping)(_RowGroupings.Items[level]);\n            if (rg.DynamicRows != null &&\n                rg.DynamicRows.Subtotal != null)\n                count = srCount;\n\n            if (m.GetSortedData(rpt) == null || level + 1 >= _RowGroupings.Items.Count)\n                return count;\n\n            // Now dive into the data\n            foreach (MatrixEntry ame in m.GetSortedData(rpt))\n            {\n                count += RunCountSubtotalRows(rpt, wc, ame, level + 1);\n            }\n\n            return count;\n        }\n\n        void RunColumnHeaders(Report rpt, WorkClass wc, MatrixEntry m, MatrixCellEntry[,] matrix, Rows _Data, int iRow, ref int iColumn, int level)\n        {\n            foreach (MatrixEntry ame in m.GetSortedData(rpt))\n            {\n                matrix[iRow, iColumn] = RunGetColumnHeader(rpt, ame, _Data);\n                matrix[iRow, iColumn].Width = RunGetColumnWidth(matrix[iRow, iColumn]);\n                matrix[iRow, iColumn].Height = ame.ColumnGroup.Height == null ? 0 : ame.ColumnGroup.Height.Points;\n                if (ame.GetSortedData(rpt) != null)\n                {\n                    RunColumnHeaders(rpt, wc, ame, matrix, _Data, iRow + 1, ref iColumn, level + 1);\n                }\n                else\n                    iColumn++;\n            }\n\n            ColumnGrouping cg = (ColumnGrouping)(_ColumnGroupings.Items[level]);\n\n            // if we need subtotal on the group\n            if (cg.DynamicColumns != null &&\n                cg.DynamicColumns.Subtotal != null)\n            {\n                ReportItem ri = cg.DynamicColumns.Subtotal.ReportItems.Items[0];\n                matrix[iRow, iColumn] = new MatrixCellEntry(_Data, ri);\n                matrix[iRow, iColumn].Height = cg.Height.Points;\n                matrix[iRow, iColumn].Width = RunGetColumnWidth(matrix[iRow, iColumn]);\n                RunColumnStaticHeaders(rpt, wc, matrix, _Data, iRow, iColumn, level);\n                iColumn += this.CountMatrixCells;\n            }\n        }\n\n        void RunColumnStaticHeaders(Report rpt, WorkClass wc, MatrixCellEntry[,] matrix, Rows _Data, int iRow, int iColumn, int level)\n        {\n            ColumnGrouping cg = null;\n            for (int i = level + 1; i < _ColumnGroupings.Items.Count; i++)\n            {\n                iRow++;             // the row will below the headers\n                cg = (ColumnGrouping)(_ColumnGroupings.Items[i]);\n                if (cg.StaticColumns != null)\n                    break;\n            }\n            if (cg == null || cg.StaticColumns == null)\n                return;\n\n            foreach (StaticColumn sc in cg.StaticColumns.Items)\n            {\n                ReportItem ri = sc.ReportItems.Items[0];\n                matrix[iRow, iColumn] = new MatrixCellEntry(_Data, ri);\n                matrix[iRow, iColumn].Height = cg.Height.Points;\n                matrix[iRow, iColumn].Width = RunGetColumnWidth(matrix[iRow, iColumn]);\n\n                iColumn++;\n            }\n            return;\n        }\n\n        float RunGetColumnWidth(MatrixCellEntry mce)\n        {\n            if (this.MatrixColumns == null)\n                return 0;       // We use this routine for chart(s) and they don't build the matrix columns\n\n            MatrixColumn mcol;  // work variable to hold a MatrixColumn\n\n            mcol = this.MatrixColumns.Items[0] as MatrixColumn;\n            float defWidth = mcol.Width.Points;\n\n            if (CountMatrixColumns == 1)    // if only one column width is easy\n                return defWidth;\n\n            // find out which static column it is.\n            ColumnGrouping cg = null;\n            MatrixCells mcells = null;\n            ReportItem ri = mce.DisplayItem;\n            for (ReportLink rl = ri.Parent; rl != null; rl = rl.Parent)\n            {\n                if (rl is ColumnGrouping)\n                {\n                    cg = rl as ColumnGrouping;\n                    break;\n                }\n                if (rl is MatrixCells)\n                {\n                    mcells = rl as MatrixCells;\n                    break;\n                }\n                if (rl is Matrix)\n                    break;\n            }\n\n            int offset = 0;\n\n            // If the item is one of the MatrixCell; then use same offset\n            if (mcells != null)\n            {\n                foreach (MatrixCell mcell in mcells.Items)\n                {\n                    ReportItem ric = mcell.ReportItems.Items[0] as ReportItem;\n                    if (ric == ri)\n                    {\n                        mcol = this.MatrixColumns.Items[offset] as MatrixColumn;\n                        return mcol.Width.Points;\n                    }\n                    offset++;\n                }\n                return defWidth;\n            }\n\n            if (cg == null || cg.StaticColumns == null)\n                return defWidth;\n\n            // Otherwise find the same relative Matrix Column from the static columns\n            mcol = null;\n            foreach (StaticColumn sc in cg.StaticColumns.Items)\n            {\n                ReportItem cri = sc.ReportItems.Items[0] as ReportItem;\n                if (ri == cri)\n                {\n                    mcol = this.MatrixColumns.Items[offset] as MatrixColumn;\n                    break;\n                }\n                offset++;\n            }\n\n            return mcol == null ? defWidth : mcol.Width.Points;\n        }\n\n        MatrixCellEntry RunGetColumnHeader(Report rpt, MatrixEntry me, Rows _Data)\n        {\n            ReportItem ri;\n            if (me.ColumnGroup.StaticColumns != null)\n            {   // Handle static column reference\n                StaticColumn sc = me.ColumnGroup.StaticColumns.Items[me.StaticColumn] as StaticColumn;\n                ri = sc.ReportItems.Items[0];\n            }\n            else\n                ri = me.ColumnGroup.DynamicColumns.ReportItems.Items[0];    // dynamic column\n            Rows subData = new Rows(rpt, _Data, me.FirstRow, me.LastRow, me.Rows);\n            MatrixCellEntry mce = new MatrixCellEntry(subData, ri);\n\n            return mce;\n        }\n\n        MatrixCellEntry RunCorner(Rows d)\n        {\n            if (_Corner == null)\n                return null;\n\n            ReportItem ri = _Corner.ReportItems.Items[0];\n            MatrixCellEntry mce = new MatrixCellEntry(d, ri);\n\n            float height = 0;\n            foreach (ColumnGrouping cg in this.ColumnGroupings.Items)\n            {\n                height += cg.Height.Points;\n            }\n            mce.Height = height;\n\n            float width = 0;\n            foreach (RowGrouping rg in this.RowGroupings.Items)\n            {\n                width += rg.Width.Points;\n            }\n            mce.Width = width;\n\n            mce.ColSpan = RowGroupings.Items.Count;\n            return mce;\n        }\n\n        void RunDataColumn(Report rpt, WorkClass wc, MatrixEntry rm, MatrixEntry cm, MatrixCellEntry[,] matrix, Rows _Data, int iRow, ref int iColumn, int level, int rowcell)\n        {\n            BitArray andData;\n            MatrixRow mr = this.MatrixRows.Items[rowcell] as MatrixRow;\n            float height = mr.Height == null ? 0 : mr.Height.Points;\n\n            foreach (MatrixEntry ame in cm.GetSortedData(rpt))\n            {\n                if (ame.ColumnGroup != LastCg)\n                {\n                    RunDataColumn(rpt, wc, rm, ame, matrix, _Data, iRow, ref iColumn, level + 1, rowcell);\n                    continue;\n                }\n                andData = new BitArray(ame.Rows);   // copy the data\n                andData.And(rm.Rows);               //  because And is destructive\n                matrix[iRow, iColumn] = RunGetMatrixCell(rpt, ame, iRow, _Data, andData,\n                        Math.Max(rm.FirstRow, ame.FirstRow),\n                        Math.Min(rm.LastRow, ame.LastRow));\n                matrix[iRow, iColumn].Height = height;\n                matrix[iRow, iColumn].Width = RunGetColumnWidth(matrix[iRow, iColumn]);\n                matrix[iRow, iColumn].ColumnME = ame;\n                matrix[iRow, iColumn].RowME = rm;\n\n                iColumn++;\n            }\n            // do we need to subtotal this?\n            ColumnGrouping cg = (ColumnGrouping)(_ColumnGroupings.Items[level]);\n            if (cg.DynamicColumns != null &&\n                cg.DynamicColumns.Subtotal != null)\n            {\n                andData = new BitArray(cm.Rows);    // copy the data\n                andData.And(rm.Rows);               //  because And is destructive\n                for (int i = 0; i < this.CountMatrixCells; i++)\n                {\n                    matrix[iRow, iColumn] = RunGetMatrixCell(rpt, cm, rowcell, i, _Data, andData,\n                        Math.Max(rm.FirstRow, cm.FirstRow),\n                        Math.Min(rm.LastRow, cm.LastRow));\n                    matrix[iRow, iColumn].Height = height;\n                    matrix[iRow, iColumn].Width = RunGetColumnWidth(matrix[iRow, iColumn]);\n                    matrix[iRow, iColumn].ColumnME = cm;\n                    matrix[iRow, iColumn].RowME = rm;\n                    iColumn++;\n                }\n            }\n        }\n\n        void RunDataRow(Report rpt, WorkClass wc, MatrixEntry rm, MatrixEntry cm, MatrixCellEntry[,] matrix, Rows _Data, ref int iRow, int iColumn, int level)\n        {\n            int saveColumn;\n            int headerRows = _ColumnGroupings.Items.Count;  // number of column headers we have\n            int rgsCount = this.RowGroupings.StaticCount;   // count of static row groups\n            foreach (MatrixEntry ame in rm.GetSortedData(rpt))\n            {\n                if (ame.RowGroup != LastRg)\n                {\n                    RunDataRow(rpt, wc, ame, cm, matrix, _Data, ref iRow, iColumn, level + 1);\n                    continue;\n                }\n                saveColumn = iColumn;\n                int rowcell = rgsCount == 0 ? 0 : (iRow - headerRows) % rgsCount;\n                RunDataColumn(rpt, wc, ame, cm, matrix, _Data, iRow, ref saveColumn, 0, rowcell);\n                iRow++;\n            }\n            // do we need to subtotal this?\n            RowGrouping rg = (RowGrouping)(_RowGroupings.Items[level]);\n            if (rg.DynamicRows != null &&\n                rg.DynamicRows.Subtotal != null)\n            {\n                for (int i = 0; i < this.CountMatrixRows; i++)\n                {\n                    saveColumn = iColumn;\n                    RunDataColumn(rpt, wc, rm, cm, matrix, _Data, iRow, ref saveColumn, 0, i);\n                    iRow++;\n                }\n            }\n        }\n\n        void RunRowHeaders(Report rpt, WorkClass wc, MatrixEntry m, MatrixCellEntry[,] matrix, Rows _Data, ref int iRow, int iColumn, int level)\n        {\n            foreach (MatrixEntry ame in m.GetSortedData(rpt))\n            {\n                matrix[iRow, iColumn] = RunGetRowHeader(rpt, ame, _Data);\n                matrix[iRow, iColumn].Height = RunRowHeight(iRow);\n                matrix[iRow, iColumn].Width = ame.RowGroup.Width == null ? 0 : ame.RowGroup.Width.Points;\n                if (ame.GetSortedData(rpt) != null)\n                {\n                    RunRowHeaders(rpt, wc, ame, matrix, _Data, ref iRow, iColumn + 1, level + 1);\n                }\n                else\n                    iRow++;\n            }\n\n            RowGrouping rg = (RowGrouping)(_RowGroupings.Items[level]);\n            // do we need to subtotal this\n            if (rg.DynamicRows != null &&\n                rg.DynamicRows.Subtotal != null)\n            {                      // TODO need to loop thru static??\n                ReportItem ri = rg.DynamicRows.Subtotal.ReportItems.Items[0];\n                matrix[iRow, iColumn] = new MatrixCellEntry(_Data, ri);\n                matrix[iRow, iColumn].Width = rg.Width.Points;\n                matrix[iRow, iColumn].Height = RunRowHeight(iRow);\n                RunRowStaticHeaders(rpt, wc, matrix, _Data, iRow, level);\n                iRow += Math.Max(1, this.RowGroupings.StaticCount);\n            }\n        }\n\n        float RunRowHeight(int iRow)\n        {\n            // calculate the height of this row\n            int headerRows = _ColumnGroupings.Items.Count;  // number of column headers we have\n            int rgsCount = this.RowGroupings.StaticCount;   // count of static row groups\n            int rowcell = rgsCount == 0 ? 0 : (iRow - headerRows) % rgsCount;\n            MatrixRow mr = this.MatrixRows.Items[rowcell] as MatrixRow; // get height\n            float height = mr.Height == null ? 0 : mr.Height.Points;\n            return height;\n        }\n\n        void RunRowStaticHeaders(Report rpt, WorkClass wc, MatrixCellEntry[,] matrix, Rows _Data, int iRow, int level)\n        {\n            RowGrouping rg = null;\n            int i;\n            int iColumn = 0;\n            for (i = level + 1; i < _RowGroupings.Items.Count; i++)\n            {\n                iColumn++;              // Column for the row static headers\n                rg = (RowGrouping)(_RowGroupings.Items[i]);\n                if (rg.StaticRows != null)\n                    break;\n            }\n            if (rg == null || rg.StaticRows == null)\n                return;\n\n            i = 0;\n            foreach (StaticRow sr in rg.StaticRows.Items)\n            {\n                ReportItem ri = sr.ReportItems.Items[0];\n                matrix[iRow, iColumn] = new MatrixCellEntry(_Data, ri);\n                matrix[iRow, iColumn].Width = rg.Width.Points;\n                MatrixRow mr = this.MatrixRows.Items[i++] as MatrixRow;\n                float height = mr.Height == null ? 0 : mr.Height.Points;\n                matrix[iRow, iColumn].Height = height;\n\n                iRow++;\n            }\n            return;\n        }\n\n        MatrixCellEntry RunGetRowHeader(Report rpt, MatrixEntry me, Rows _Data)\n        {\n            ReportItem ri;\n            if (me.RowGroup.StaticRows != null)\n            {   // Handle static row reference\n                StaticRow sr = me.RowGroup.StaticRows.Items[me.StaticRow] as StaticRow;\n                ri = sr.ReportItems.Items[0];\n            }\n            else    // handle dynamic row reference\n                ri = me.RowGroup.DynamicRows.ReportItems.Items[0];\n            Rows subData = new Rows(rpt, _Data, me.FirstRow, me.LastRow, me.Rows);\n            MatrixCellEntry mce = new MatrixCellEntry(subData, ri);\n\n            return mce;\n\n        }\n\n        MatrixCellEntry RunGetMatrixCell(Report rpt, MatrixEntry me, int iRow, Rows _Data, BitArray rows, int firstRow, int lastRow)\n        {\n            int headerRows = _ColumnGroupings.Items.Count;  // number of column headers we have\n            int rgsCount = this.RowGroupings.StaticCount;   // count of static row groups\n            int rowcell = rgsCount == 0 ? 0 : (iRow - headerRows) % rgsCount;\n\n            return RunGetMatrixCell(rpt, me, rowcell, me.StaticColumn, _Data, rows, firstRow, lastRow);\n        }\n\n        MatrixCellEntry RunGetMatrixCell(Report rpt, MatrixEntry me, int rcell, int ccell, Rows _Data, BitArray rows, int firstRow, int lastRow)\n        {\n            MatrixRow mr = this._MatrixRows.Items[rcell];\n            MatrixCell mc = mr.MatrixCells.Items[ccell];\n            ReportItem ri = mc.ReportItems.Items[0];\n            Rows subData = new Rows(rpt, _Data, firstRow, lastRow, rows);\n            MatrixCellEntry mce = new MatrixCellEntry(subData, ri);\n\n            return mce;\n        }\n\n        internal Corner Corner\n        {\n            get { return _Corner; }\n            set { _Corner = value; }\n        }\n\n        internal ColumnGroupings ColumnGroupings\n        {\n            get { return _ColumnGroupings; }\n            set { _ColumnGroupings = value; }\n        }\n\n        internal Rows GetMyData(Report rpt)\n        {\n            WorkClass wc = GetValue(rpt);\n            return wc.Data;\n        }\n\n        internal void SetMyData(Report rpt, Rows data)\n        {\n            WorkClass wc = GetValue(rpt);\n            wc.Data = data;\n        }\n\n        internal RowGroupings RowGroupings\n        {\n            get { return _RowGroupings; }\n            set { _RowGroupings = value; }\n        }\n\n        internal MatrixRows MatrixRows\n        {\n            get { return _MatrixRows; }\n            set { _MatrixRows = value; }\n        }\n\n        internal MatrixColumns MatrixColumns\n        {\n            get { return _MatrixColumns; }\n            set { _MatrixColumns = value; }\n        }\n\n        internal MatrixLayoutDirectionEnum LayoutDirection\n        {\n            get { return _LayoutDirection; }\n            set { _LayoutDirection = value; }\n        }\n\n        internal int GroupsBeforeRowHeaders\n        {\n            get { return _GroupsBeforeRowHeaders; }\n            set { _GroupsBeforeRowHeaders = value; }\n        }\n\n        internal string CellDataElementName\n        {\n            get { return _CellDataElementName; }\n            set { _CellDataElementName = value; }\n        }\n\n        private void SetGroupingValues(Report rpt, MatrixCellEntry mce)\n        {\n            WorkClass wc = GetValue(rpt);\n            Rows data = wc.FullData;\n\n            SetGroupingValuesInit(rpt, data, mce.RowME, mce.ColumnME);\n            SetGroupingValuesMe(rpt, data, mce.RowME);\n            SetGroupingValuesMe(rpt, data, mce.ColumnME);\n\n            return;\n        }\n\n        private void SetGroupingValuesInit(Report rpt, Rows data, MatrixEntry rme, MatrixEntry cme)\n        {\n            // handle the column grouping\n            if (cme != null)\n            {\n                foreach (ColumnGrouping cg in this.ColumnGroupings.Items)\n                {\n                    if (cg.DynamicColumns != null)\n                        SetGrouping(rpt, cg.DynamicColumns.Grouping, cme, data);\n                }\n            }\n            // handle the row grouping\n            if (rme != null)\n            {\n                foreach (RowGrouping rg in this.RowGroupings.Items)\n                {\n                    if (rg.DynamicRows != null)\n                        SetGrouping(rpt, rg.DynamicRows.Grouping, rme, data);\n                }\n            }\n        }\n\n        private void SetGroupingValuesMe(Report rpt, Rows data, MatrixEntry me)\n        {\n            if (me == null)\n                return;\n            // handle the column grouping\n            if (me.ColumnGroup != null && me.ColumnGroup.DynamicColumns != null)\n                SetGrouping(rpt, me.ColumnGroup.DynamicColumns.Grouping, me, data);\n\n            // handle the row grouping\n            if (me.RowGroup != null && me.RowGroup.DynamicRows != null)\n                SetGrouping(rpt, me.RowGroup.DynamicRows.Grouping, me, data);\n\n            if (me.Parent != null)  // go up the tree??\n                SetGroupingValuesMe(rpt, data, me.Parent);\n        }\n\n        private void SetGrouping(Report rpt, Grouping g, MatrixEntry me, Rows data)\n        {\n            if (g == null)\n                return;\n\n            if (me.Data == null)\n                me.Data = new Rows(rpt, data, me.FirstRow, me.LastRow, me.Rows);\n            g.SetRows(rpt, me.Data);\n        }\n\n        internal MatrixCellDataElementOutputEnum CellDataElementOutput\n        {\n            get { return _CellDataElementOutput; }\n            set { _CellDataElementOutput = value; }\n        }\n\n        private WorkClass GetValue(Report rpt)\n        {\n            WorkClass wc = rpt.Cache.Get(this, \"wc\") as WorkClass;\n            if (wc == null)\n            {\n                wc = new WorkClass();\n                rpt.Cache.Add(this, \"wc\", wc);\n            }\n            return wc;\n        }\n\n        private void RemoveValue(Report rpt)\n        {\n            rpt.Cache.Remove(this, \"wc\");\n        }\n\n        class WorkClass\n        {\n            internal Rows Data;\n            internal Rows FullData;\n            internal WorkClass()\n            {\n                Data = null;\n                FullData = null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/MatrixCell.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// A Cell within a Matrix.\n\t///</summary>\n\t[Serializable]\n\tinternal class MatrixCell : ReportLink\n\t{\n\t\tReportItems _ReportItems;\t// The report items contained in each detail cell of the matrix layout.\n\t\t\t\t\t\t// This ReportItems collection must contain exactly one\n\t\t\t\t\t\t// ReportItem. The Top, Left, Height and Width for this\n\t\t\t\t\t\t// ReportItem are ignored. The position is taken to be 0,\n\t\t\t\t\t\t// 0 and the size to be 100%, 100%.\t\t\n\t\n\t\tinternal MatrixCell(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_ReportItems=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"ReportItems\":\n\t\t\t\t\t\t_ReportItems = new ReportItems(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_ReportItems == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"MatrixCell requires the ReportItems element.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_ReportItems != null)\n                await _ReportItems.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal ReportItems ReportItems\n\t\t{\n\t\t\tget { return  _ReportItems; }\n\t\t\tset {  _ReportItems = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/MatrixCellDataElementOutput.cs",
    "content": "\nusing System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Handle the Matrix Cell dataElement enumeration: output, nooutput\n\t///</summary>\n\tinternal enum MatrixCellDataElementOutputEnum\n\t{\n\t\tOutput,\t\t\t\t// Indicates the cell should appear in the output\n\t\tNoOutput\t\t\t// Indicates the cell should not appear in the output\t\t\n\t}\n\tinternal class MatrixCellDataElementOutput\n\t{\n\t\tstatic internal MatrixCellDataElementOutputEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tMatrixCellDataElementOutputEnum rs;\n\n\t\t\tswitch (s)\n\t\t\t{\t\t\n\t\t\t\tcase \"Output\":\n\t\t\t\t\trs = MatrixCellDataElementOutputEnum.Output;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"NoOutput\":\n\t\t\t\t\trs = MatrixCellDataElementOutputEnum.NoOutput;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\n\t\t\t\t\trl.LogError(4, \"Unknown MatrixCellDataElementOutput '\" + s + \"'.  Output assumed.\");\n\t\t\t\t\trs = MatrixCellDataElementOutputEnum.Output;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn rs;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/MatrixCellEntry.cs",
    "content": "\n\nusing System;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Runtime data structure representing the group hierarchy\n\t///</summary>\n\tinternal class MatrixCellEntry\n\t{\n\t\tRows _Data;\t\t\t\t\t\t// Rows matching this cell entry\n\t\tReportItem _DisplayItem;\t\t// Report item to display in report\n\t\tdouble _Value=double.MinValue;\t// used by Charts to optimize data request\n\t\tfloat _XPosition;\t\t\t\t// position of cell\n\t\tfloat _Height;\t\t\t\t\t// height of cell\n\t\tfloat _Width;\t\t\t\t\t// width of cell\n\t\tMatrixEntry _RowME;\t\t\t\t// MatrixEntry for the row that made cell entry\n\t\tMatrixEntry _ColumnME;\t\t\t// MatrixEntry for the column that made cell entry\n\t\tint _ColSpan;\t\t\t\t\t// # of columns spanned\n\t\n\t\tinternal MatrixCellEntry(Rows d, ReportItem ri)\n\t\t{\n\t\t\t_Data = d;\n\t\t\t_DisplayItem = ri;\n\t\t\t_ColSpan = 1;\n\t\t}\n\n\t\tinternal Rows Data\n\t\t{\n\t\t\tget { return  _Data; }\n\t\t}\n\n\t\tinternal int ColSpan\n\t\t{\n\t\t\tget { return _ColSpan;}\n\t\t\tset { _ColSpan = value; }\n\t\t}\n\n\t\tinternal ReportItem DisplayItem\n\t\t{\n\t\t\tget { return  _DisplayItem; }\n\t\t}\n\n\t\tinternal float Height\n\t\t{\n\t\t\tget { return _Height; }\n\t\t\tset { _Height = value; }\n\t\t}\n\n\t\tinternal MatrixEntry ColumnME\n\t\t{\n\t\t\tget { return _ColumnME; }\n\t\t\tset { _ColumnME = value; }\n\t\t}\n\n\t\tinternal MatrixEntry RowME\n\t\t{\n\t\t\tget { return _RowME; }\n\t\t\tset { _RowME = value; }\n\t\t}\n\n\t\tinternal double Value\n\t\t{\n\t\t\tget { return  _Value; }\n\t\t\tset { _Value = value; }\n\t\t}\n\n\t\tinternal float Width\n\t\t{\n\t\t\tget { return _Width; }\n\t\t\tset { _Width = value; }\n\t\t}\n\n\t\tinternal float XPosition\n\t\t{\n\t\t\tget { return _XPosition; }\n\t\t\tset { _XPosition = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/MatrixCells.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Collection of matrix cells.\n\t///</summary>\n\t[Serializable]\n\tinternal class MatrixCells : ReportLink\n\t{\n        List<MatrixCell> _Items;\t\t\t// list of MatrixCell\n\n\t\tinternal MatrixCells(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tMatrixCell m;\n            _Items = new List<MatrixCell>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"MatrixCell\":\n\t\t\t\t\t\tm = new MatrixCell(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tm=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown MatrixCells element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (m != null)\n\t\t\t\t\t_Items.Add(m);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For MatrixCells at least one MatrixCell is required.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (MatrixCell m in _Items)\n\t\t\t{\n                await m.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<MatrixCell> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/MatrixColumn.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Handle a Matrix column.\n\t///</summary>\n\t[Serializable]\n\tinternal class MatrixColumn : ReportLink\n\t{\n\t\tRSize _Width;\t\t// Width of each detail cell in this column\n\t\n\t\tinternal MatrixColumn(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Width=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Width\":\n\t\t\t\t\t\t_Width = new RSize(r, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown MatrixColumn element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\toverride internal Task FinalPass()\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tinternal RSize Width\n\t\t{\n\t\t\tget { return  _Width; }\n\t\t\tset {  _Width = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/MatrixColumns.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Collection of matrix columns\n\t///</summary>\n\t[Serializable]\n\tinternal class MatrixColumns : ReportLink, IEnumerable<MatrixColumn>\n\t{\n        List<MatrixColumn> _Items;\t\t\t// list of MatrixColumn\n\n\t\tinternal MatrixColumns(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tMatrixColumn m;\n            _Items = new List<MatrixColumn>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"MatrixColumn\":\n\t\t\t\t\t\tm = new MatrixColumn(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tm=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown MatrixColumns element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (m != null)\n\t\t\t\t\t_Items.Add(m);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For MatrixColumns at least one MatrixColumn is required.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (MatrixColumn m in _Items)\n\t\t\t{\n                await m.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<MatrixColumn> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\n\n        #region IEnumerable<MatrixColumn> Members\n\n        public IEnumerator<MatrixColumn> GetEnumerator()\n        {\n            return _Items.GetEnumerator();\n        }\n\n        #endregion\n\n        #region IEnumerable Members\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return _Items.GetEnumerator();\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/MatrixEntry.cs",
    "content": "\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    ///<summary>\n    /// Runtime data structure representing the group hierarchy\n    ///</summary>\n    internal class MatrixEntry\n    {\n        Row _r;                 // needed for sort\n        Dictionary<string, MatrixEntry> _HashData;  // Hash table of data values\n        List<MatrixEntry> _SortedData;\t//  Sorted List version of the data \n        string _hash;           // item that is used for hash\n        BitArray _Rows;         // rows \n        MatrixEntry _Parent;    // parent\n        ColumnGrouping _ColumnGroup;    //   Column grouping\n        RowGrouping _RowGroup;  // Row grouping\n        int _FirstRow;          // First row in _Rows marked true\n        int _LastRow;           // Last row in _Rows marked true\n        int _rowCount;          //   we save the rowCount so we can delay creating bitArray\n        int _StaticColumn = 0;  // this is the index to which column to use (always 0 when dynamic)\n        int _StaticRow = 0;     // this is the index to which row to use (always 0 when dynamic)\n        Rows _Data;             // set dynamically when needed\n\n        internal MatrixEntry(Row r, string hash, MatrixEntry p, int rowCount)\n        {\n            _r = r;\n            _hash = hash;\n            _HashData = new Dictionary<string, MatrixEntry>();\n            _ColumnGroup = null;\n            _RowGroup = null;\n            _SortedData = null;\n            _Data = null;\n            _rowCount = rowCount;\n            _Rows = null;\n            _Parent = p;\n            _FirstRow = -1;\n            _LastRow = -1;\n        }\n\n        internal Dictionary<string, MatrixEntry> HashData\n        {\n            get { return _HashData; }\n        }\n\n        internal Rows Data\n        {\n            get { return _Data; }\n            set { _Data = value; }\n        }\n\n        internal string HashItem\n        {\n            get { return _hash; }\n        }\n        internal List<MatrixEntry> GetSortedData(Report rpt)\n        {\n            if (_SortedData == null && _HashData != null && _HashData.Count > 0)\n            {\n                _SortedData = new List<MatrixEntry>(_HashData.Values);\n                _SortedData.Sort(new MatrixEntryComparer(rpt, GetSortBy()));\n                _HashData = null;       // we only keep one\n            }\n\n            return _SortedData;\n        }\n\n        internal MatrixEntry Parent\n        {\n            get { return _Parent; }\n        }\n\n        internal ColumnGrouping ColumnGroup\n        {\n            get { return _ColumnGroup; }\n            set { _ColumnGroup = value; }\n        }\n\n        internal int StaticRow\n        {\n            get { return _StaticRow; }\n            set { _StaticRow = value; }\n        }\n\n        internal int StaticColumn\n        {\n            get { return _StaticColumn; }\n            set { _StaticColumn = value; }\n        }\n\n        internal RowGrouping RowGroup\n        {\n            get { return _RowGroup; }\n            set { _RowGroup = value; }\n        }\n\n        internal int FirstRow\n        {\n            get { return _FirstRow; }\n            set\n            {\n                if (_FirstRow == -1)\n                    _FirstRow = value;\n            }\n        }\n\n        internal int LastRow\n        {\n            get { return _LastRow; }\n            set\n            {\n                if (value >= _LastRow)\n                    _LastRow = value;\n            }\n        }\n\n        internal BitArray Rows\n        {\n            get\n            {\n                if (_Rows == null)\n                    _Rows = new BitArray(_rowCount);\n\n                return _Rows;\n            }\n            set { _Rows = value; }\n        }\n\n        internal Row R\n        {\n            get { return _r; }\n        }\n\n        Sorting GetSortBy()\n        {\n            MatrixEntry me = null;\n            foreach (MatrixEntry m in this.HashData.Values)\n            {   // just get the first one\n                me = m;\n                break;\n            }\n            if (me == null)\n                return null;\n\n            Sorting sb = null;\n            if (me.RowGroup != null)\n            {\n                if (me.RowGroup.DynamicRows != null)\n                    sb = me.RowGroup.DynamicRows.Sorting;\n            }\n            else if (me.ColumnGroup != null)\n            {\n                if (me.ColumnGroup.DynamicColumns != null)\n                    sb = me.ColumnGroup.DynamicColumns.Sorting;\n            }\n            return sb;\n        }\n\n    }\n\n    class MatrixEntryComparer : System.Collections.Generic.IComparer<MatrixEntry>\n    {\n        Report _rpt;\n        Sorting _Sorting;\n\n        public MatrixEntryComparer(Report rpt, Sorting s)\n        {\n            _rpt = rpt;\n            _Sorting = s;\n        }\n\n        #region IComparer Members\n\n        public int Compare(MatrixEntry m1, MatrixEntry m2)\n        {\n            if (_Sorting == null)\n                return m1.HashItem.CompareTo(m2.HashItem);\n\n            object o1 = null, o2 = null;\n            TypeCode tc = TypeCode.Object;\n            int rc;\n            try\n            {\n                foreach (SortBy sb in _Sorting.Items)\n                {\n                    IExpr e = sb.SortExpression.Expr;\n                    // HACK: async\n                    o1 = Task.Run(async () => await e.Evaluate(_rpt, m1.R)).GetAwaiter().GetResult();\n                    o2 = Task.Run(async () => await e.Evaluate(_rpt, m2.R)).GetAwaiter().GetResult();\n                    tc = e.GetTypeCode();\n                    rc = Filter.ApplyCompare(tc, o1, o2);\n                    if (rc != 0)\n                        return sb.Direction == SortDirectionEnum.Ascending ? rc : -rc;\n                }\n            }\n            catch (Exception e)\t\t// this really shouldn't happen\n            {\n                _rpt.rl.LogError(8,\n                    string.Format(\"Matrix Sort rows exception\\r\\nArguments: {0} {1}\\r\\nTypecode: {2}\\r\\n{3}\\r\\n{4}\",\n                    o1, o2, tc.ToString(), e.Message, e.StackTrace));\n                return m1.HashItem.CompareTo(m2.HashItem);\n            }\n            return 0;\t\t    // treat as the same\n\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/MatrixLayoutDirection.cs",
    "content": "\nusing System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Handle Matrix layout direction enumeration: LTR (left to right), RTL (right to left)\n\t///</summary>\n\tinternal enum MatrixLayoutDirectionEnum\n\t{\n\t\tLTR,\t\t\t\t// Left to Right\n\t\tRTL\t\t\t\t\t// Right to Left\n\t}\n\n\tinternal class MatrixLayoutDirection\n\t{\n\t\tstatic internal MatrixLayoutDirectionEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tMatrixLayoutDirectionEnum rs;\n\n\t\t\tswitch (s)\n\t\t\t{\t\t\n\t\t\t\tcase \"LTR\":\n\t\t\t\tcase \"LeftToRight\":\n\t\t\t\t\trs = MatrixLayoutDirectionEnum.LTR;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"RTL\":\n\t\t\t\tcase \"RightToLeft\":\n\t\t\t\t\trs = MatrixLayoutDirectionEnum.RTL;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\n\t\t\t\t\trl.LogError(4, \"Unknown MatrixLayoutDirection '\" + s + \"'.  LTR assumed.\");\n\t\t\t\t\trs = MatrixLayoutDirectionEnum.LTR;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn rs;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/MatrixRow.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Handle a Matrix Row: i.e. height and matrix cells that make up the row.\n\t///</summary>\n\t[Serializable]\n\tinternal class MatrixRow : ReportLink\n\t{\n\t\tRSize _Height;\t// Height of each detail cell in this row.\n\t\tMatrixCells _MatrixCells;\t// The set of cells in a row in the detail section of the Matrix.\t\t\n\t\n\t\tinternal MatrixRow(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Height=null;\n\t\t\t_MatrixCells=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Height\":\n\t\t\t\t\t\t_Height = new RSize(r, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"MatrixCells\":\n\t\t\t\t\t\t_MatrixCells = new MatrixCells(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_MatrixCells == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"MatrixRow requires the MatrixCells element.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_MatrixCells != null)\n                await _MatrixCells.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal RSize Height\n\t\t{\n\t\t\tget { return  _Height; }\n\t\t\tset {  _Height = value; }\n\t\t}\n\n\t\tinternal MatrixCells MatrixCells\n\t\t{\n\t\t\tget { return  _MatrixCells; }\n\t\t\tset {  _MatrixCells = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/MatrixRows.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Collection of matrix rows\n\t///</summary>\n\t[Serializable]\n\tinternal class MatrixRows : ReportLink\n\t{\n        List<MatrixRow> _Items;\t\t\t// list of MatrixRow\n\n\t\tinternal MatrixRows(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tMatrixRow m;\n            _Items = new List<MatrixRow>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"MatrixRow\":\n\t\t\t\t\t\tm = new MatrixRow(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tm=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown MatrixRows element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (m != null)\n\t\t\t\t\t_Items.Add(m);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For MatrixRows at least one MatrixRow is required.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (MatrixRow m in _Items)\n\t\t\t{\n                await m.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tinternal float DefnHeight()\n\t\t{\n\t\t\tfloat height=0;\n\t\t\tforeach (MatrixRow m in _Items)\n\t\t\t{\n\t\t\t\theight += m.Height.Points;\n\t\t\t}\n\t\t\treturn height;\n\t\t}\n\n        internal List<MatrixRow> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// CellCount requires a correctly configured Matrix structure.  This is true at runtime\n\t\t/// but not necessarily true during Matrix parse.\n\t\t/// </summary>\n\t\tinternal int CellCount\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tMatrixRow mr = _Items[0] as MatrixRow;\n\t\t\t\treturn mr.MatrixCells.Items.Count;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Name.cs",
    "content": "\n\nusing System;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// A report object name.   CLS comliant identifier.\n\t///</summary>\n\t[Serializable]\n\tinternal class Name\n\t{\n\t\tstring _Name;\t\t\t// name CLS compliant identifier; www.unicode.org/unicode/reports/tr15/tr15-18.html\n\t\n\t\tinternal Name(string name)\n\t\t{\n\t\t\t_Name=name;\n\t\t}\n\n\t\tinternal string Nm\n\t\t{\n\t\t\tget { return  _Name; }\n\t\t\tset {  _Name = value; }\n\t\t}\n\n\t\tpublic override string ToString()\n\t\t{\n\t\t\treturn _Name;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/NameLookup.cs",
    "content": "\n\nusing System;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Parsing name lookup.  Fields, parameters, report items, globals, user, aggregate scopes, grouping,...\n\t///</summary>\n\tinternal class NameLookup\n\t{\n\t\tIDictionary fields;\n\t\tIDictionary parameters;\n\t\tIDictionary reportitems;\n\t\tIDictionary globals;\n\t\tIDictionary user;\n\t\tIDictionary aggrScope;\n\t\tGrouping g;\t\t\t\t\t// if expression in a table group or detail group\n\t\t\t\t\t\t\t\t\t//   used to default aggregates to the right group\n\t\tMatrix m;\t\t\t\t\t// if expression used in a Matrix\n\t\t\t\t\t\t\t\t\t//   used to default aggregate to the right matrix\n\t\tClasses instances;\n\t\tCodeModules cms;\n\t\tType codeType;\n\t\tDataSetsDefn dsets;\n\t\tReportLink _PageFooterHeader;\t// when expression is in page header or footer this is set\n\t\tstring _ExprName;\t\t\t// name of the expression; this isn't always set\n\n\t\tinternal NameLookup(IDictionary f, IDictionary p, IDictionary r, \n\t\t\tIDictionary gbl, IDictionary u, IDictionary ascope, \n\t\t\tGrouping ag, Matrix mt, CodeModules cm, Classes i, DataSetsDefn ds, Type ct)\n\t\t{\n\t\t\tfields=f;\n\t\t\tparameters=p;\n\t\t\treportitems=r;\n\t\t\tglobals=gbl;\n\t\t\tuser=u;\n\t\t\taggrScope = ascope;\n\t\t\tg=ag;\n\t\t\tm = mt;\n\t\t\tcms = cm;\n\t\t\tinstances = i;\n\t\t\tdsets = ds;\n\t\t\tcodeType = ct;\n\t\t}\n\n\t\tinternal ReportLink PageFooterHeader\n\t\t{\n\t\t\tget {return _PageFooterHeader;}\n\t\t\tset {_PageFooterHeader = value;}\n\t\t}\n\t\t\n\t\tinternal bool IsPageScope\n\t\t{\n\t\t\tget {return _PageFooterHeader != null;}\n\t\t}\n\n\t\tinternal string ExpressionName\n\t\t{\n\t\t\tget {return _ExprName;}\n\t\t\tset {_ExprName = value;}\n\t\t}\n\n\t\tinternal IDictionary Fields\n\t\t{\n\t\t\tget { return fields; }\n\t\t}\n\t\tinternal IDictionary Parameters\n\t\t{\n\t\t\tget { return parameters; }\n\t\t}\n\t\tinternal IDictionary ReportItems\n\t\t{\n\t\t\tget { return reportitems; }\n\t\t}\n\t\tinternal IDictionary User\n\t\t{\n\t\t\tget { return user; }\n\t\t}\n\t\tinternal IDictionary Globals\n\t\t{\n\t\t\tget { return globals; }\n\t\t}\n\n\t\tinternal ReportClass LookupInstance(string name)\n\t\t{\n\t\t\tif (instances == null)\n\t\t\t\treturn null;\n\t\t\treturn instances[name];\n\t\t}\n\n\t\tinternal Field LookupField(string name)\n\t\t{\t\n\t\t\tif (fields == null)\n\t\t\t\treturn null;\n\n\t\t\treturn (Field) fields[name];\n\t\t}\n\n\t\tinternal ReportParameter LookupParameter(string name)\n\t\t{\t\n\t\t\tif (parameters == null)\n\t\t\t\treturn null;\n\t\t\treturn (ReportParameter) parameters[name];\n\t\t}\n\n\t\tinternal Textbox LookupReportItem(string name)\n\t\t{\t\n\t\t\tif (reportitems == null)\n\t\t\t\treturn null;\n\t\t\treturn (Textbox) reportitems[name];\n\t\t}\n\n\t\tinternal IExpr LookupGlobal(string name)\n\t\t{\t\n\t\t\tif (globals == null)\n\t\t\t\treturn null;\n\t\t\treturn (IExpr) globals[name];\n\t\t}\n\n\t\tinternal Type LookupType(string clsname)\n\t\t{\n\t\t\tif (cms == null || clsname == string.Empty)\n\t\t\t\treturn null;\n\t\t\treturn cms[clsname];\n\t\t}\n\n\t\tinternal CodeModules CMS\n\t\t{\n\t\t\tget{return cms;}\n\t\t}\n\n\t\tinternal Type CodeClassType\n\t\t{\n\t\t\tget{return codeType;}\n\t\t}\n\n\t\tinternal IExpr LookupUser(string name)\n\t\t{\t\n\t\t\tif (user == null)\n\t\t\t\treturn null;\n\t\t\treturn (IExpr) user[name];\n\t\t}\n\n\t\tinternal Grouping LookupGrouping()\n\t\t{\n\t\t\treturn g;\n\t\t}\n\n\t\tinternal Matrix LookupMatrix()\n\t\t{\n\t\t\treturn m;\n\t\t}\n\n\t\tinternal object LookupScope(string name)\n\t\t{\n\t\t\tif (aggrScope == null)\n\t\t\t\treturn null;\n\t\t\treturn aggrScope[name];\n\t\t}\n\n\t\tinternal DataSetDefn ScopeDataSet(string name)\n\t\t{\n\t\t\tif (name == null)\n\t\t\t{\t// Only allowed when there is only one dataset\n\t\t\t\tif (dsets.Items.Count != 1)\n\t\t\t\t\treturn null;\n                \n\t\t\t\tforeach (DataSetDefn ds in dsets.Items.Values)\t// No easy way to get the item by index\n\t\t\t\t\treturn ds;\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn dsets[name];\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/PageFooter.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.IO;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Defines the page footer of the report\n\t///</summary>\n\t[Serializable]\n\tinternal class PageFooter : ReportLink\n\t{\n\t\tRSize _Height;\t\t// Height of the page footer\n\t\tbool _PrintOnFirstPage;\t// Indicates if the page footer should be shown on\n\t\t\t\t\t\t\t\t// the first page of the report\n\t\tbool _PrintOnLastPage;\t// Indicates if the page footer should be shown on\n\t\t\t\t\t\t\t\t// the last page of the report. Not used in singlepage reports.\n\t\tReportItems _ReportItems;\t// The region that contains the elements of the footer layout\n\t\t\t\t\t\t\t// No data regions or subreports are allowed in the page footer\n\t\tStyle _Style;\t\t// Style information for the page footer\t\t\n\t\n\t\tinternal PageFooter(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Height=null;\n\t\t\t_PrintOnFirstPage=false;\n\t\t\t_PrintOnLastPage=false;\n\t\t\t_ReportItems=null;\n\t\t\t_Style=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Height\":\n\t\t\t\t\t\t_Height = new RSize(r, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"PrintOnFirstPage\":\n\t\t\t\t\t\t_PrintOnFirstPage = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"PrintOnLastPage\":\n\t\t\t\t\t\t_PrintOnLastPage = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ReportItems\":\n\t\t\t\t\t\t_ReportItems = new ReportItems(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Style\":\n\t\t\t\t\t\t_Style = new Style(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown PageFooter element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Height == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"PageFooter Height is required.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_ReportItems != null)\n                await _ReportItems.FinalPass();\n\t\t\tif (_Style != null)\n                await _Style.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal async Task Run(IPresent ip, Row row)\n\t\t{\n\t\t\tif (OwnerReport.Subreport != null)\n\t\t\t\treturn;\t\t// don't process page footers for sub-reports\n\t\t\tReport rpt = ip.Report();\n\t\t\trpt.TotalPages = rpt.PageNumber = 1;\n\t\t\tip.PageFooterStart(this);\n\t\t\tif (_ReportItems != null)\n                await _ReportItems.Run(ip, row);\n\t\t\tip.PageFooterEnd(this);\n\t\t}\n \n\t\tinternal async Task RunPage(Pages pgs)\n\t\t{\n\t\t\tif (OwnerReport.Subreport != null)\n\t\t\t\treturn;\t\t// don't process page footers for sub-reports\n\t\t\tif (_ReportItems == null)\n\t\t\t\treturn;\n\t\t\tReport rpt = pgs.Report;\n\n\t\t\trpt.TotalPages = pgs.PageCount;\n            for (int i = 0; i < rpt.TotalPages; i++)\n\t\t\t{\n\n                rpt.CurrentPage = pgs[i];\t\t// needs to know for page header/footer expr processing\n\t\t\t\tpgs[i].YOffset = OwnerReport.PageHeight.Points \n\t\t\t\t\t\t\t\t\t- OwnerReport.BottomMargin.Points\n\t\t\t\t\t\t\t\t\t- this._Height.Points;\n                pgs[i].XOffset = 0;\n                pgs.CurrentPage = pgs[i];\n                rpt.PageNumber = pgs[i].PageNumber;\n                if (pgs[i].PageNumber == 1 && pgs.Count > 1 && !_PrintOnFirstPage)\n\t\t\t\t\tcontinue;\t\t// Don't put footer on the first page\n                if (pgs[i].PageNumber == pgs.Count && !_PrintOnLastPage)\n\t\t\t\t\tcontinue;       // Don't put footer on the last page\n                await _ReportItems.RunPage(pgs, null, OwnerReport.LeftMargin.Points);\n\t\t\t}\n\t\t}\n\n\t\tinternal RSize Height\n\t\t{\n\t\t\tget { return  _Height; }\n\t\t\tset {  _Height = value; }\n\t\t}\n\n\t\tinternal bool PrintOnFirstPage\n\t\t{\n\t\t\tget { return  _PrintOnFirstPage; }\n\t\t\tset {  _PrintOnFirstPage = value; }\n\t\t}\n\n\t\tinternal bool PrintOnLastPage\n\t\t{\n\t\t\tget { return  _PrintOnLastPage; }\n\t\t\tset {  _PrintOnLastPage = value; }\n\t\t}\n\n\t\tinternal ReportItems ReportItems\n\t\t{\n\t\t\tget { return  _ReportItems; }\n\t\t\tset {  _ReportItems = value; }\n\t\t}\n\n\t\tinternal Style Style\n\t\t{\n\t\t\tget { return  _Style; }\n\t\t\tset {  _Style = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/PageHeader.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.IO;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Defines the page header of the report\n\t///</summary>\n\t[Serializable]\n\tinternal class PageHeader : ReportLink\n\t{\n\t\tRSize _Height;\t\t// Height of the page header\n\t\tbool _PrintOnFirstPage;\t// Indicates if the page header should be shown on\n\t\t\t\t\t\t\t\t// the first page of the report\n\t\tbool _PrintOnLastPage;\t// Indicates if the page header should be shown on\n\t\t\t\t\t\t\t// the last page of the report. Not used in singlepage reports.\n\t\tReportItems _ReportItems;\t// The region that contains the elements of the header layout\n\t\t\t\t\t\t\t// No data regions or subreports are allowed in the page header\n\t\tStyle _Style;\t\t// Style information for the page header\t\t\n\t\n\t\tinternal PageHeader(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Height=null;\n\t\t\t_PrintOnFirstPage=false;\n\t\t\t_PrintOnLastPage=false;\n\t\t\t_ReportItems=null;\n\t\t\t_Style=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Height\":\n\t\t\t\t\t\t_Height = new RSize(r, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"PrintOnFirstPage\":\n\t\t\t\t\t\t_PrintOnFirstPage = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"PrintOnLastPage\":\n\t\t\t\t\t\t_PrintOnLastPage = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ReportItems\":\n\t\t\t\t\t\t_ReportItems = new ReportItems(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Style\":\n\t\t\t\t\t\t_Style = new Style(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown PageHeader element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Height == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"PageHeader Height is required.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_ReportItems != null)\n                await _ReportItems.FinalPass();\n\t\t\tif (_Style != null)\n                await _Style.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal async Task Run(IPresent ip, Row row)\n\t\t{\n\t\t\tif (OwnerReport.Subreport != null)\n\t\t\t\treturn;\t\t// don't process page headers for sub-reports\n\t\t\tReport rpt = ip.Report();\n\t\t\trpt.TotalPages = rpt.PageNumber = 1;\n\t\t\tip.PageHeaderStart(this);\n\t\t\tif (_ReportItems != null)\n                await _ReportItems.Run(ip, row);\n\t\t\tip.PageHeaderEnd(this);\n\t\t}\n\n\t\tasync internal Task RunPage(Pages pgs)\n\t\t{\n\t\t\tif (OwnerReport.Subreport != null)\n\t\t\t\treturn;\t\t// don't process page headers for sub-reports\n\t\t\tif (_ReportItems == null)\n\t\t\t\treturn;\n\n\t\t\tReport rpt = pgs.Report;\n\t\t\trpt.TotalPages = pgs.PageCount;\n\t\t\tforeach (Page p in pgs)\n\t\t\t{\n\t\t\t\trpt.CurrentPage = p;\t\t// needs to know for page header/footer expr processing\n\t\t\t\tp.YOffset = OwnerReport.TopMargin.Points;\n\t\t\t\tp.XOffset = 0;\n\t\t\t\tpgs.CurrentPage = p;\n\t\t\t\trpt.PageNumber = p.PageNumber;\n\t\t\t\tif (p.PageNumber == 1 && pgs.Count > 1 && !_PrintOnFirstPage)\n\t\t\t\t\tcontinue;\t\t// Don't put header on the first page\n\t\t\t\tif (p.PageNumber == pgs.Count && !_PrintOnLastPage)\n\t\t\t\t\tcontinue;       // Don't put header on the last page\n                await _ReportItems.RunPage(pgs, null, OwnerReport.LeftMargin.Points);\n\t\t\t}\n\t\t}\n\n\t\tinternal RSize Height\n\t\t{\n\t\t\tget { return  _Height; }\n\t\t\tset {  _Height = value; }\n\t\t}\n\n\t\tinternal bool PrintOnFirstPage\n\t\t{\n\t\t\tget { return  _PrintOnFirstPage; }\n\t\t\tset {  _PrintOnFirstPage = value; }\n\t\t}\n\n\t\tinternal bool PrintOnLastPage\n\t\t{\n\t\t\tget { return  _PrintOnLastPage; }\n\t\t\tset {  _PrintOnLastPage = value; }\n\t\t}\n\n\t\tinternal ReportItems ReportItems\n\t\t{\n\t\t\tget { return  _ReportItems; }\n\t\t\tset {  _ReportItems = value; }\n\t\t}\n\n\t\tinternal Style Style\n\t\t{\n\t\t\tget { return  _Style; }\n\t\t\tset {  _Style = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ParameterValue.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// The value of a report paramenter.\n\t///</summary>\n\t[Serializable]\n\tinternal class ParameterValue : ReportLink\n\t{\n\t\tExpression _Value;\t\t// Possible value (variant) for the parameter\n\t\t\t\t\t\t\t\t// For Boolean: use \"true\" and \"false\"\n\t\t\t\t\t\t\t\t// For DateTime: use ISO 8601\n\t\t\t\t\t\t\t\t// For Float: use \".\" as the optional decimal separator.\n\t\tExpression _Label;\t\t// Label (string) for the value to display in the UI\n\t\t\t\t\t\t\t\t// If not supplied, the _Value is used as the label. If\n\t\t\t\t\t\t\t\t// _Value not supplied, _Label is the empty string;\n\t\n\t\tinternal ParameterValue(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Value=null;\n\t\t\t_Label=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Value\":\n\t\t\t\t\t\t_Value = new Expression(r, this, xNodeLoop, ExpressionType.Variant);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Label\":\n\t\t\t\t\t\t_Label = new Expression(r, this, xNodeLoop, ExpressionType.String);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\n\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Value != null)\n                await _Value.FinalPass();\n\t\t\tif (_Label != null)\n                await _Label.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Expression Value\n\t\t{\n\t\t\tget { return  _Value; }\n\t\t\tset {  _Value = value; }\n\t\t}\n\n\n\t\tinternal Expression Label\n\t\t{\n\t\t\tget { return  _Label; }\n\t\t\tset {  _Label = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ParameterValues.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    ///<summary>\n    /// Collection of parameter values.\n    ///</summary>\n    [Serializable]\n    internal class ParameterValues : ReportLink\n    {\n        List<ParameterValue> _Items;            // list of ParameterValue\n\n        internal ParameterValues(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n        {\n            ParameterValue pv;\n            _Items = new List<ParameterValue>();\n            // Loop thru all the child nodes\n            foreach (XmlNode xNodeLoop in xNode.ChildNodes)\n            {\n                if (xNodeLoop.NodeType != XmlNodeType.Element)\n                    continue;\n                switch (xNodeLoop.Name)\n                {\n                    case \"ParameterValue\":\n                        pv = new ParameterValue(r, this, xNodeLoop);\n                        break;\n                    default:\n                        pv = null;      // don't know what this is\n                                        // don't know this element - log it\n                        OwnerReport.rl.LogError(4, \"Unknown ParameterValues element '\" + xNodeLoop.Name + \"' ignored.\");\n                        break;\n                }\n                if (pv != null)\n                    _Items.Add(pv);\n            }\n\n            if (_Items.Count == 0)\n                OwnerReport.rl.LogError(8, \"For ParameterValues at least one ParameterValue is required.\");\n            else\n                _Items.TrimExcess();\n        }\n\n        async override internal Task FinalPass()\n        {\n            foreach (ParameterValue pv in _Items)\n            {\n                await pv.FinalPass();\n            }\n            return;\n        }\n\n        internal List<ParameterValue> Items\n        {\n            get { return _Items; }\n        }\n\n        internal async Task<(string[] displayValues, object[] dataValues)> SupplyValues(Report rpt)\n        {\n            string[] displayValues = new string[_Items.Count];\n            object[] dataValues = new object[_Items.Count];\n            int index = 0;\n            // go thru the parameters extracting the data values\n            foreach (ParameterValue pv in _Items)\n            {\n                if (pv.Value == null)\n                    dataValues[index] = null;\n                else\n                    dataValues[index] = await pv.Value.Evaluate(rpt, null);\n                if (pv.Label == null)\n                {   // if label is null use the data value; if not provided use \"\"\n                    if (dataValues[index] == null)\n                        displayValues[index] = \"\";\n                    else\n                        displayValues[index] = dataValues[index].ToString();\n                }\n                else\n                {\n                    displayValues[index] = await pv.Label.EvaluateString(rpt, null);\n                    if (displayValues[index] == null)\n                        displayValues[index] = \"\";\n                }\n                index++;\n            }\n            return (displayValues, dataValues);\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/PlotArea.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Chart plot area style.\n\t///</summary>\n\t[Serializable]\n\tinternal class PlotArea : ReportLink\n\t{\n\t\tStyle _Style;\t// Defines borders and background for the plot area\t\t\n\t\n\t\tinternal PlotArea(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Style=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"style\":\n\t\t\t\t\t\t_Style = new Style(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown PlotArea element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Style != null)\n                await _Style.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Style Style\n\t\t{\n\t\t\tget { return  _Style; }\n\t\t\tset {  _Style = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/PlotType.cs",
    "content": "\n\nusing System;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t\n\tinternal enum PlotTypeEnum\n\t{\n\t\tAuto,\n\t\tLine\n\t}\n\n\tinternal class PlotType\n\t{\n\t\tstatic internal PlotTypeEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tPlotTypeEnum pt;\n\n\t\t\tswitch (s.ToLowerInvariant())\n\t\t\t{\t\t\n\t\t\t\tcase \"auto\":\n\t\t\t\t\tpt = PlotTypeEnum.Auto;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"line\":\n\t\t\t\t\tpt = PlotTypeEnum.Line;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\n\t\t\t\t\trl.LogError(4, \"Unknown PlotType '\" + s + \"'.  Auto assumed.\");\n\t\t\t\t\tpt = PlotTypeEnum.Auto;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn pt;\n\t\t}\n\t}\n\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Query.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Data;\nusing System.Data.SqlClient;\nusing System.Data.SqlTypes;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Globalization;\nusing System.Reflection;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing System.Threading.Tasks;\nusing System.Data.Common;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    ///<summary>\n    /// Query representation against a data source.  Holds the data at runtime.\n    ///</summary>\n    [Serializable]\n    internal class Query : ReportLink\n    {\n        string _DataSourceName;     // Name of the data source to execute the query against\n        DataSourceDefn _DataSourceDefn; //  the data source object the DataSourceName references.\n        QueryCommandTypeEnum _QueryCommandType; // Indicates what type of query is contained in the CommandText\n        Expression _CommandText;    //\t(string) The query to execute to obtain the data for the report\n        QueryParameters _QueryParameters;   // A list of parameters that are passed to the data\n                                            // source as part of the query.\t\t\n        int _Timeout;               // Number of seconds to allow the query to run before\n                                    // timing out.   Must be >= 0; If omitted or zero; no timeout\n        int _RowLimit;              // Number of rows to retrieve before stopping retrieval; 0 means no limit\n\n        IDictionary _Columns;       // QueryColumn (when SQL)\n\n        internal Query(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n        {\n            _DataSourceName = null;\n            _QueryCommandType = QueryCommandTypeEnum.Text;\n            _CommandText = null;\n            _QueryParameters = null;\n            _Timeout = 0;\n            _RowLimit = 0;\n\n            // Loop thru all the child nodes\n            foreach (XmlNode xNodeLoop in xNode.ChildNodes)\n            {\n                if (xNodeLoop.NodeType != XmlNodeType.Element)\n                    continue;\n                switch (xNodeLoop.Name.ToLowerInvariant())\n                {\n                    case \"datasourcename\":\n                        _DataSourceName = xNodeLoop.InnerText;\n                        break;\n                    case \"commandtype\":\n                        _QueryCommandType = Majorsilence.Reporting.Rdl.QueryCommandType.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n                        break;\n                    case \"commandtext\":\n                        _CommandText = new Expression(r, this, xNodeLoop, ExpressionType.String);\n                        break;\n                    case \"queryparameters\":\n                        _QueryParameters = new QueryParameters(r, this, xNodeLoop);\n                        break;\n                    case \"timeout\":\n                        _Timeout = XmlUtil.Integer(xNodeLoop.InnerText);\n                        break;\n                    case \"rowlimit\":                // Extension of RDL specification\n                        _RowLimit = XmlUtil.Integer(xNodeLoop.InnerText);\n                        break;\n                    default:\n                        // don't know this element - log it\n                        OwnerReport.rl.LogError(4, \"Unknown Query element '\" + xNodeLoop.Name + \"' ignored.\");\n                        break;\n                }   // end of switch\n            }   // end of foreach\n\n            // Resolve the data source name to the object\n            if (_DataSourceName == null)\n            {\n                r.rl.LogError(8, \"DataSourceName element not specified for Query.\");\n                return;\n            }\n        }\n\n        // Handle parsing of function in final pass\n        internal override async Task FinalPass()\n        {\n            if (_CommandText != null)\n                await _CommandText.FinalPass();\n            if (_QueryParameters != null)\n                await _QueryParameters.FinalPass();\n\n            // verify the data source\n            DataSourceDefn ds = null;\n            if (OwnerReport.DataSourcesDefn != null &&\n                OwnerReport.DataSourcesDefn.Items != null)\n            {\n                ds = OwnerReport.DataSourcesDefn[_DataSourceName];\n            }\n            if (ds == null)\n            {\n                OwnerReport.rl.LogError(8, \"Query references unknown data source '\" + _DataSourceName + \"'\");\n                return;\n            }\n            _DataSourceDefn = ds;\n\n            IDbConnection cnSQL = ds.SqlConnect(null);\n            if (cnSQL == null || _CommandText == null)\n                return;\n\n            // Treat this as a SQL statement\n            String sql = await _CommandText.EvaluateString(null, null);\n\n            try\n            {\n                using var cmSQL = cnSQL.CreateCommand();\n                cmSQL.CommandText = await AddParametersAsLiterals(null, cnSQL, sql, false);\n                if (this._QueryCommandType == QueryCommandTypeEnum.StoredProcedure)\n                    cmSQL.CommandType = CommandType.StoredProcedure;\n\n                await AddParameters(null, cnSQL, cmSQL, false);\n                using var dr = await CreateDataReader(cmSQL).ConfigureAwait(false);\n\n                if (dr.FieldCount < 10)\n                    _Columns = new ListDictionary(); // Hashtable is overkill for small lists\n                else\n                    _Columns = new Hashtable(dr.FieldCount);\n\n                for (int i = 0; i < dr.FieldCount; i++)\n                {\n                    QueryColumn qc = new QueryColumn(i, dr.GetName(i), Type.GetTypeCode(dr.GetFieldType(i)));\n\n                    try { _Columns.Add(qc.colName, qc); }\n                    catch // name has already been added to list: \n                    { // According to the RDL spec SQL names are matched by Name not by relative\n                      //   position: this seems wrong to me and causes this problem; but \n                      //   user can fix by using \"as\" keyword to name columns in Select \n                      //    e.g.  Select col as \"col1\", col as \"col2\" from tableA\n                        OwnerReport.rl.LogError(8, String.Format(\"Column '{0}' is not uniquely defined within the SQL Select columns.\", qc.colName));\n                    }\n                }\n            }\n            catch (Exception e)\n            {\n                // Issue #35 - Kept the logging\n                OwnerReport.rl.LogError(4, \"SQL Exception during report compilation: \" + e.Message + \"\\r\\nSQL: \" + sql);\n                throw;\n            }\n        }\n\n        private static async Task<IDataReader> CreateDataReader(IDbCommand cmSQL)\n        {\n            IDataReader dr;\n            if (cmSQL is DbCommand dbCommand)\n            {\n                dr = await dbCommand.ExecuteReaderAsync(CommandBehavior.SchemaOnly).ConfigureAwait(false);\n            }\n            else\n            {\n                dr = cmSQL.ExecuteReader(CommandBehavior.SchemaOnly);\n            }\n\n            return dr;\n        }\n\n        internal async Task<bool> GetData(Report rpt, Fields flds, Filters f)\n        {\n            Rows uData = this.GetMyUserData(rpt);\n            if (uData != null)\n            {\n                this.SetMyData(rpt, uData);\n                return uData.Data == null || uData.Data.Count == 0 ? false : true;\n            }\n\n            // Treat this as a SQL statement\n            DataSourceDefn ds = _DataSourceDefn;\n            if (ds == null || _CommandText == null)\n            {\n                this.SetMyData(rpt, null);\n                return false;\n            }\n\n            IDbConnection cnSQL = ds.SqlConnect(rpt);\n            if (cnSQL == null)\n            {\n                this.SetMyData(rpt, null);\n                return false;\n            }\n\n            Rows _Data = new Rows(rpt, null, null, null);       // no sorting and grouping at base data\n            String sql = await _CommandText.EvaluateString(rpt, null);\n\n            try\n            {\n                using var cmSQL = cnSQL.CreateCommand();\n                cmSQL.CommandText = await AddParametersAsLiterals(rpt, cnSQL, sql, true);\n                if (this._QueryCommandType == QueryCommandTypeEnum.StoredProcedure)\n                    cmSQL.CommandType = CommandType.StoredProcedure;\n                if (this._Timeout > 0)\n                    cmSQL.CommandTimeout = this._Timeout;\n\n                await AddParameters(rpt, cnSQL, cmSQL, true);\n                using var dr = await CreateDataReader(cmSQL);\n\n                List<Row> ar = new List<Row>();\n                _Data.Data = ar;\n                int rowCount = 0;\n                int maxRows = _RowLimit > 0 ? _RowLimit : int.MaxValue;\n                int fieldCount = flds.Items.Count;\n\n                // Determine the query column number for each field\n                int[] qcn = new int[flds.Items.Count];\n                foreach (Field fld in flds)\n                {\n                    qcn[fld.ColumnNumber] = -1;\n                    if (fld.Value != null)\n                        continue;\n                    try\n                    {\n                        qcn[fld.ColumnNumber] = dr.GetOrdinal(fld.DataField);\n                    }\n                    catch\n                    {\n                        qcn[fld.ColumnNumber] = -1;\n                    }\n                }\n\n                while (dr.Read())\n                {\n                    Row or = new Row(_Data, fieldCount);\n\n                    foreach (Field fld in flds)\n                    {\n                        if (qcn[fld.ColumnNumber] != -1)\n                        {\n                            or.Data[fld.ColumnNumber] = dr.GetValue(qcn[fld.ColumnNumber]);\n                        }\n                    }\n\n                    // Apply the filters\n                    if (f == null || await f.Apply(rpt, or))\n                    {\n                        or.RowNumber = rowCount;    // \n                        rowCount++;\n                        ar.Add(or);\n                    }\n                    if (--maxRows <= 0)             // don't retrieve more than max\n                        break;\n                }\n                ar.TrimExcess();        // free up any extraneous space; can be sizeable for large # rows\n                if (f != null)\n                    await f.ApplyFinalFilters(rpt, _Data, false);\n                //#if DEBUG\n                //\t\t\t\trpt.rl.LogError(4, \"Rows Read:\" + ar.Count.ToString() + \" SQL:\" + sql );\n                //#endif\n            }\n            catch (Exception e)\n            {\n                // Issue #35 - Kept the logging\n                rpt.rl.LogError(8, \"SQL Exception\" + e.Message + \"\\r\\n\" + e.StackTrace);\n                throw;\n            }\n\n            this.SetMyData(rpt, _Data);\n            return _Data == null || _Data.Data == null || _Data.Data.Count == 0 ? false : true;\n        }\n\n        // Obtain the data from the XML\n        internal async Task<bool> GetData(Report rpt, string xmlData, Fields flds, Filters f)\n        {\n            Rows uData = this.GetMyUserData(rpt);\n            if (uData != null)\n            {\n                this.SetMyData(rpt, uData);\n                return uData.Data == null || uData.Data.Count == 0 ? false : true;\n            }\n\n            int fieldCount = flds.Items.Count;\n\n            XmlDocument doc = new XmlDocument();\n            doc.PreserveWhitespace = false;\n            doc.LoadXml(xmlData);\n\n            XmlNode xNode;\n            xNode = doc.LastChild;\n            if (xNode == null || !(xNode.Name == \"Rows\" || xNode.Name == \"fyi:Rows\"))\n            {\n                throw new Exception(Strings.Query_Error_XMLMustContainTopLevelRows);\n            }\n\n            Rows _Data = new Rows(rpt, null, null, null);\n            List<Row> ar = new List<Row>();\n            _Data.Data = ar;\n\n            int rowCount = 0;\n            foreach (XmlNode xNodeRow in xNode.ChildNodes)\n            {\n                if (xNodeRow.NodeType != XmlNodeType.Element)\n                {\n                    continue;\n                }\n                if (xNodeRow.Name != \"Row\")\n                {\n                    continue;\n                }\n                Row or = new Row(_Data, fieldCount);\n                foreach (XmlNode xNodeColumn in xNodeRow.ChildNodes)\n                {\n                    Field fld = (Field)(flds.Items[xNodeColumn.Name]);\t// Find the column\n                    if (fld == null)\n                    {\n                        continue;\t\t\t// Extraneous data is ignored\n                    }\n                    TypeCode tc = fld.qColumn != null ? fld.qColumn.colType : fld.Type;\n\n                    if (xNodeColumn.InnerText == null || xNodeColumn.InnerText.Length == 0)\n                    {\n                        or.Data[fld.ColumnNumber] = null;\n                    }\n                    else if (tc == TypeCode.String)\n                    {\n                        or.Data[fld.ColumnNumber] = xNodeColumn.InnerText;\n                    }\n                    else if (tc == TypeCode.DateTime)\n                    {\n                        try\n                        {\n                            or.Data[fld.ColumnNumber] =\n                                Convert.ToDateTime(xNodeColumn.InnerText,\n                                System.Globalization.DateTimeFormatInfo.InvariantInfo);\n                        }\n                        catch\t// all conversion errors result in a null value\n                        {\n                            or.Data[fld.ColumnNumber] = null;\n                        }\n                    }\n                    else\n                    {\n                        try\n                        {\n                            or.Data[fld.ColumnNumber] =\n                                Convert.ChangeType(xNodeColumn.InnerText, tc, NumberFormatInfo.InvariantInfo);\n                        }\n                        catch\t// all conversion errors result in a null value\n                        {\n                            or.Data[fld.ColumnNumber] = null;\n                        }\n                    }\n                }\n                // Apply the filters \n                if (f == null || await f.Apply(rpt, or))\n                {\n                    or.RowNumber = rowCount;    // \n                    rowCount++;\n                    ar.Add(or);\n                }\n            }\n\n            ar.TrimExcess();\t\t// free up any extraneous space; can be sizeable for large # rows\n            if (f != null)\n            {\n                await f.ApplyFinalFilters(rpt, _Data, false);\n            }\n\n            SetMyData(rpt, _Data);\n            return _Data == null || _Data.Data == null || _Data.Data.Count == 0 ? false : true;\n\n        }\n\n        internal async Task SetData(Report rpt, IEnumerable ie, Fields flds, Filters f, bool collection = false)\n        {\n            if (ie == null)         // Does user want to remove user data?\n            {\n                SetMyUserData(rpt, null);\n                return;\n            }\n\n            Rows rows = new Rows(rpt, null, null, null);\t\t// no sorting and grouping at base data\n\n            List<Row> ar = new List<Row>();\n            rows.Data = ar;\n            int rowCount = 0;\n            int maxRows = _RowLimit > 0 ? _RowLimit : int.MaxValue;\n            int fieldCount = flds.Items.Count;\n            Field[] orderedFields = null;\n            foreach (object dt in ie)\n            {\n                // Get the type.\n                Type myType = dt.GetType();\n\n                // Build the row\n                Row or = new Row(rows, fieldCount);\n\n                if (collection)\n                {\n                    if (dt is IDictionary)\n                    {\n                        IDictionary dic = (IDictionary)dt;\n                        foreach (Field fld in flds)\n                        {\n                            if (dic.Contains(fld.Name.Nm))\n                            {\n                                or.Data[fld.ColumnNumber] = dic[fld.Name.Nm];\n                            }\n                        }\n                    }\n                    else if (dt is IEnumerable)\n                    {\n                        if (orderedFields == null)\n                        {\n                            orderedFields = new Field[fieldCount];\n                            foreach (Field fld in flds)\n                            {\n                                orderedFields[fld.ColumnNumber] = fld;\n                            }\n                        }\n                        IEnumerator inum = ((IEnumerable)dt).GetEnumerator();\n                        foreach (Field fld in orderedFields)\n                        {\n                            if (!inum.MoveNext())\n                                break;\n                            or.Data[fld.ColumnNumber] = inum.Current;\n                        }\n                    }\n                }\n                else\n                {\n                    // Go thru each field and try to obtain a value\n                    foreach (Field fld in flds)\n                    {\n                        // Get the type and fields of FieldInfoClass.\n                        FieldInfo fi = myType.GetField(fld.Name.Nm, BindingFlags.Instance | BindingFlags.Public);\n                        if (fi != null)\n                        {\n                            or.Data[fld.ColumnNumber] = fi.GetValue(dt);\n                        }\n                        else\n                        {\n                            // Try getting it as a property as well\n                            PropertyInfo pi = myType.GetProperty(fld.Name.Nm, BindingFlags.Instance | BindingFlags.Public);\n                            if (pi != null)\n                            {\n                                or.Data[fld.ColumnNumber] = pi.GetValue(dt, null);\n                            }\n                        }\n                    }\n                }\n\n                // Apply the filters \n                if (f == null || await f.Apply(rpt, or))\n                {\n                    or.RowNumber = rowCount;    // \n                    rowCount++;\n                    ar.Add(or);\n                }\n                if (--maxRows <= 0)             // don't retrieve more than max\n                    break;\n            }\n            ar.TrimExcess();        // free up any extraneous space; can be sizeable for large # rows\n            if (f != null)\n                await f.ApplyFinalFilters(rpt, rows, false);\n\n            SetMyUserData(rpt, rows);\n        }\n\n        internal async Task SetData(Report rpt, IDataReader dr, Fields flds, Filters f)\n        {\n            if (dr == null)         // Does user want to remove user data?\n            {\n                SetMyUserData(rpt, null);\n                return;\n            }\n\n            Rows rows = new Rows(rpt, null, null, null);\t\t// no sorting and grouping at base data\n\n            List<Row> ar = new List<Row>();\n            rows.Data = ar;\n            int rowCount = 0;\n            int maxRows = _RowLimit > 0 ? _RowLimit : int.MaxValue;\n            \n            while (dr.Read())\n            {\n                Row or = new Row(rows, dr.FieldCount);\n                dr.GetValues(or.Data);\n                // Apply the filters \n                if (f == null || await f.Apply(rpt, or))\n                {\n                    or.RowNumber = rowCount;    // \n                    rowCount++;\n                    ar.Add(or);\n                }\n                if (--maxRows <= 0)             // don't retrieve more than max\n                    break;\n            }\n            ar.TrimExcess();        // free up any extraneous space; can be sizeable for large # rows\n            if (f != null)\n                await f.ApplyFinalFilters(rpt, rows, false);\n\n            SetMyUserData(rpt, rows);\n        }\n\n        internal async Task SetData(Report rpt, DataTable dt, Fields flds, Filters f)\n        {\n            if (dt == null)         // Does user want to remove user data?\n            {\n                SetMyUserData(rpt, null);\n                return;\n            }\n\n            Rows rows = new Rows(rpt, null, null, null);\t\t// no sorting and grouping at base data\n\n            List<Row> ar = new List<Row>();\n            rows.Data = ar;\n            int rowCount = 0;\n            int maxRows = _RowLimit > 0 ? _RowLimit : int.MaxValue;\n\n            int fieldCount = flds.Items.Count;\n            foreach (DataRow dr in dt.Rows)\n            {\n                Row or = new Row(rows, fieldCount);\n                // Loop thru the columns obtaining the data values by name\n                foreach (Field fld in flds.Items.Values)\n                {\n                    or.Data[fld.ColumnNumber] = dr[fld.DataField];\n                }\n                // Apply the filters \n                if (f == null || await f.Apply(rpt, or))\n                {\n                    or.RowNumber = rowCount;    // \n                    rowCount++;\n                    ar.Add(or);\n                }\n                if (--maxRows <= 0)             // don't retrieve more than max\n                    break;\n            }\n            ar.TrimExcess();        // free up any extraneous space; can be sizeable for large # rows\n            if (f != null)\n                await f.ApplyFinalFilters(rpt, rows, false);\n\n            SetMyUserData(rpt, rows);\n        }\n\n        internal async Task SetData(Report rpt, XmlDocument xmlDoc, Fields flds, Filters f)\n        {\n            if (xmlDoc == null)         // Does user want to remove user data?\n            {\n                SetMyUserData(rpt, null);\n                return;\n            }\n\n            Rows rows = new Rows(rpt, null, null, null);        // no sorting and grouping at base data\n\n            XmlNode xNode;\n            xNode = xmlDoc.LastChild;\n            if (xNode == null || !(xNode.Name == \"Rows\" || xNode.Name == \"fyi:Rows\"))\n            {\n                throw new Exception(Strings.Query_Error_XMLMustContainTopLevelRows);\n            }\n\n            List<Row> ar = new List<Row>();\n            rows.Data = ar;\n\n            int rowCount = 0;\n            int fieldCount = flds.Items.Count;\n            foreach (XmlNode xNodeRow in xNode.ChildNodes)\n            {\n                if (xNodeRow.NodeType != XmlNodeType.Element)\n                    continue;\n                if (xNodeRow.Name != \"Row\")\n                    continue;\n                Row or = new Row(rows, fieldCount);\n                foreach (XmlNode xNodeColumn in xNodeRow.ChildNodes)\n                {\n                    Field fld = (Field)(flds.Items[xNodeColumn.Name]);  // Find the column\n                    if (fld == null)\n                        continue;           // Extraneous data is ignored\n                    if (xNodeColumn.InnerText == null || xNodeColumn.InnerText.Length == 0)\n                        or.Data[fld.ColumnNumber] = null;\n                    else if (fld.Type == TypeCode.String)\n                        or.Data[fld.ColumnNumber] = xNodeColumn.InnerText;\n                    else\n                    {\n                        try\n                        {\n                            or.Data[fld.ColumnNumber] =\n                                Convert.ChangeType(xNodeColumn.InnerText, fld.Type, NumberFormatInfo.InvariantInfo);\n                        }\n                        catch   // all conversion errors result in a null value\n                        {\n                            or.Data[fld.ColumnNumber] = null;\n                        }\n                    }\n                }\n                // Apply the filters \n                if (f == null || await f.Apply(rpt, or))\n                {\n                    or.RowNumber = rowCount;    // \n                    rowCount++;\n                    ar.Add(or);\n                }\n            }\n\n            ar.TrimExcess();        // free up any extraneous space; can be sizeable for large # rows\n            if (f != null)\n                await f.ApplyFinalFilters(rpt, rows, false);\n\n            SetMyUserData(rpt, rows);\n        }\n\n        private async Task AddParameters(Report rpt, IDbConnection cn, IDbCommand cmSQL, bool bValue)\n        {\n            // any parameters to substitute\n            if (this._QueryParameters == null ||\n                this._QueryParameters.Items == null ||\n                this._QueryParameters.Items.Count == 0 ||\n                this._QueryParameters.ContainsArray)            // arrays get handled by AddParametersAsLiterals\n                return;\n\n            // AddParametersAsLiterals handles it when there is replacement\n            if (RdlEngineConfig.DoParameterReplacement(Provider, cn))\n                return;\n\n            foreach (QueryParameter qp in this._QueryParameters.Items)\n            {\n                string paramName;\n\n                // force the name to start with @\n                if (qp.Name.Nm[0] == '@')\n                    paramName = qp.Name.Nm;\n                else\n                    paramName = \"@\" + qp.Name.Nm;\n                object pvalue = bValue ? await qp.Value.Evaluate(rpt, null) : null;\n                IDbDataParameter dp = cmSQL.CreateParameter();\n\n                dp.ParameterName = paramName;\n                if (pvalue is ArrayList)    // Probably a MultiValue Report parameter result\n                {\n                    ArrayList ar = (ArrayList)pvalue;\n                    dp.Value = ar.ToArray(ar[0].GetType());\n                }\n                else\n                    dp.Value = pvalue;\n                cmSQL.Parameters.Add(dp);\n            }\n        }\n\n        private async Task<string> AddParametersAsLiterals(Report rpt, IDbConnection cn, string sql, bool bValue)\n        {\n            // No parameters means nothing to do\n            if (this._QueryParameters == null ||\n                this._QueryParameters.Items == null ||\n                this._QueryParameters.Items.Count == 0)\n                return sql;\n\n            // Only do this for ODBC datasources - AddParameters handles it in other cases\n            if (!RdlEngineConfig.DoParameterReplacement(Provider, cn))\n            {\n                if (!_QueryParameters.ContainsArray)    // when array we do substitution\n                    return sql;\n            }\n\n            StringBuilder sb = new StringBuilder(sql);\n            List<QueryParameter> qlist;\n            if (_QueryParameters.Items.Count <= 1)\n                qlist = _QueryParameters.Items;\n            else\n            {   // need to sort the list so that longer items are first in the list\n                // otherwise substitution could be done incorrectly\n                qlist = new List<QueryParameter>(_QueryParameters.Items);\n                qlist.Sort();\n            }\n\n            foreach (QueryParameter qp in qlist)\n            {\n                string paramName;\n\n                // force the name to start with @\n                if (qp.Name.Nm[0] == '@')\n                    paramName = qp.Name.Nm;\n                else\n                    paramName = \"@\" + qp.Name.Nm;\n\n                // build the replacement value\n                string svalue;\n                if (bValue)\n                {\t// use the value provided\n                    svalue = await this.ParameterValue(rpt, qp);\n                }\n                else\n                {   // just need a place holder value that will pass parsing\n                    switch (qp.Value.Expr.GetTypeCode())\n                    {\n                        case TypeCode.Char:\n                            svalue = \"' '\";\n                            break;\n                        case TypeCode.DateTime:\n                            svalue = \"'1900-01-01 00:00:00'\";\n                            break;\n                        case TypeCode.Decimal:\n                        case TypeCode.Double:\n                        case TypeCode.Int32:\n                        case TypeCode.Int64:\n                            svalue = \"0\";\n                            break;\n                        case TypeCode.Boolean:\n                            svalue = \"'false'\";\n                            break;\n                        case TypeCode.String:\n                        default:\n                            svalue = \"' '\";\n                            break;\n                    }\n                }\n                sb.Replace(paramName, svalue);\n            }\n            return sb.ToString();\n        }\n\n        private async Task<string> ParameterValue(Report rpt, QueryParameter qp)\n        {\n            if (!qp.IsArray)\n            {\n                // handle non-array\n                string svalue = await qp.Value.EvaluateString(rpt, null);\n                if (svalue == null)\n                    svalue = \"null\";\n                else switch (qp.Value.Expr.GetTypeCode())\n                    {\n                        case TypeCode.Char:\n                        case TypeCode.DateTime:\n                        case TypeCode.String:\n                            // need to double up on \"'\" and then surround by '\n                            svalue = svalue.Replace(\"'\", \"''\");\n                            svalue = \"'\" + svalue + \"'\";\n                            break;\n                    }\n                return svalue;\n            }\n\n            StringBuilder sb = new StringBuilder();\n            ArrayList ar = await qp.Value.Evaluate(rpt, null) as ArrayList;\n\n            if (ar == null)\n                return null;\n\n            bool bFirst = true;\n            foreach (object v in ar)\n            {\n                if (!bFirst)\n                    sb.Append(\", \");\n                if (v == null)\n                {\n                    sb.Append(\"null\");\n                }\n                else\n                {\n                    string sv = v.ToString();\n                    if (v is string || v is char || v is DateTime)\n                    {\n                        // need to double up on \"'\" and then surround by '\n                        sv = sv.Replace(\"'\", \"''\");\n                        sb.Append(\"'\");\n                        sb.Append(sv);\n                        sb.Append(\"'\");\n                    }\n                    else\n                        sb.Append(sv);\n                }\n                bFirst = false;\n            }\n\n            if (sb.Length == 0)\n            {\n                sb.Append(\"null\");\n            }\n\n            return sb.ToString();\n        }\n\n        private string Provider\n        {\n            get\n            {\n                if (this.DataSourceDefn == null ||\n                    this.DataSourceDefn.ConnectionProperties == null)\n                    return \"\";\n                return this.DataSourceDefn.ConnectionProperties.DataProvider;\n            }\n        }\n\n        internal string DataSourceName\n        {\n            get { return _DataSourceName; }\n        }\n\n        internal DataSourceDefn DataSourceDefn\n        {\n            get { return _DataSourceDefn; }\n        }\n\n        internal QueryCommandTypeEnum QueryCommandType\n        {\n            get { return _QueryCommandType; }\n            set { _QueryCommandType = value; }\n        }\n\n        internal Expression CommandText\n        {\n            get { return _CommandText; }\n            set { _CommandText = value; }\n        }\n\n        internal QueryParameters QueryParameters\n        {\n            get { return _QueryParameters; }\n            set { _QueryParameters = value; }\n        }\n\n        internal int Timeout\n        {\n            get { return _Timeout; }\n            set { _Timeout = value; }\n        }\n\n        internal IDictionary Columns\n        {\n            get { return _Columns; }\n        }\n\n        // Runtime data\n        internal Rows GetMyData(Report rpt)\n        {\n            return rpt.Cache.Get(this, \"data\") as Rows;\n        }\n\n        private void SetMyData(Report rpt, Rows data)\n        {\n            if (data == null)\n            {\n                rpt.Cache.Remove(this, \"data\");\n            }\n            else\n            {\n                rpt.Cache.AddReplace(this, \"data\", data);\n            }\n        }\n\n        private Rows GetMyUserData(Report rpt)\n        {\n            return rpt.Cache.Get(this, \"userdata\") as Rows;\n        }\n\n        private void SetMyUserData(Report rpt, Rows data)\n        {\n            if (data == null)\n            {\n                rpt.Cache.Remove(this, \"userdata\");\n            }\n            else\n            {\n                rpt.Cache.AddReplace(this, \"userdata\", data);\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/QueryColumn.cs",
    "content": "\n\nusing System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// When Query is database SQL; QueryColumn represents actual database column.\n\t///</summary>\n\t[Serializable]\n\tinternal class QueryColumn\n\t{\n\t\tinternal int colNum;\t\t\t// Column # in query select\n\t\tinternal string colName;\t\t// Column name in query\n\t\tinternal TypeCode _colType;\t// TypeCode in query\n\n\t\tinternal QueryColumn(int colnum, string name, TypeCode c)\n\t\t{\n\t\t\tcolNum = colnum;\n            colName = name.TrimEnd('\\0');\n\t\t\t_colType = c;\n\t\t}\n\n\t\tinternal TypeCode colType\n\t\t{\n\t\t\t// Treat Char as String for queries: <sigh> drivers sometimes confuse char and string types\n\t\t\t//    telling me a type is char but actually returning a string (Mono work around)\n\t\t\tget {return _colType == TypeCode.Char? TypeCode.String: _colType; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/QueryCommandType.cs",
    "content": "\n\nusing System;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Three value state; true, false, auto (dependent on context)\n\t///</summary>\n\tinternal enum QueryCommandTypeEnum\n\t{\n\t\tText,\n\t\tStoredProcedure,\n\t\tTableDirect\n\t}\n\tinternal class QueryCommandType\n\t{\n\t\tstatic internal QueryCommandTypeEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tQueryCommandTypeEnum rs;\n\n\t\t\tswitch (s.ToLowerInvariant())\n\t\t\t{\t\t\n\t\t\t\tcase \"text\":\n\t\t\t\t\trs = QueryCommandTypeEnum.Text;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"storedprocedure\":\n\t\t\t\t\trs = QueryCommandTypeEnum.StoredProcedure;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"tabledirect\":\n\t\t\t\t\trs = QueryCommandTypeEnum.TableDirect;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t// user error just force to normal TODO\n\t\t\t\t\trl.LogError(4, \"Unknown Query CommandType '\" + s + \"'.  Text assumed.\");\n\t\t\t\t\trs = QueryCommandTypeEnum.Text;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn rs;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/QueryParameter.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Represent query parameter.\n\t///</summary>\n\t[Serializable]\n\tinternal class QueryParameter : ReportLink, IComparable\n\t{\n\t\tName _Name;\t\t// Name of the parameter\n\t\tExpression _Value;\t// (Variant or Variant Array)\n\t\t\t\t\t//An expression that evaluates to the value to\n\t\t\t\t\t//hand to the data source. The expression can\n\t\t\t\t\t//refer to report parameters but cannot contain\n\t\t\t\t\t//references to report elements, fields in the data\n\t\t\t\t\t//model or aggregate functions.\n\t\t\t\t\t//In the case of a parameter to a Values or\n\t\t\t\t\t//DefaultValue query, the expression can only\n\t\t\t\t\t//refer to report parameters that occur earlier in\n\t\t\t\t\t//the parameters list. The value for this query\n\t\t\t\t\t//parameter is then taken from the user selection\n\t\t\t\t\t//for that earlier report parameter.\n\t\n\t\tinternal QueryParameter(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Name=null;\n\t\t\t_Value=null;\n\t\t\t// Run thru the attributes\n\t\t\tforeach(XmlAttribute xAttr in xNode.Attributes)\n\t\t\t{\n\t\t\t\tswitch (xAttr.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"name\":\n\t\t\t\t\t\t_Name = new Name(xAttr.Value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"value\":\n\t\t\t\t\t\t_Value = new Expression(r, this, xNodeLoop, ExpressionType.Variant);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown QueryParameter element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Name == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"QueryParameter name is required but not specified.\");\n\n\t\t\tif (_Value == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"QueryParameter Value is required but not specified or invalid for \" + _Name==null? \"<unknown name>\": _Name.Nm);\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Value != null)\n                await _Value.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Name Name\n\t\t{\n\t\t\tget { return  _Name; }\n\t\t\tset {  _Name = value; }\n\t\t}\n\n\t\tinternal Expression Value\n\t\t{\n\t\t\tget { return  _Value; }\n\t\t\tset {  _Value = value; }\n\t\t}\n        internal bool IsArray\n        {\n            get\n            {\n                if (_Value == null)         // when null; usually means a parsing error\n                    return false;           //   but we want to continue as far as we can\n                return (_Value.GetTypeCode() == TypeCode.Object);\n            }\n        }\n\t\t#region IComparable Members\n\n\t\tpublic int CompareTo(object obj)\n\t\t{\n\t\t\tQueryParameter qp = obj as QueryParameter;\n\t\t\tif (qp == null)\n\t\t\t\treturn 0;\n\t\t\t\n\t\t\tstring tname = this.Name.Nm;\n\t\t\tstring qpname =\tqp.Name.Nm;\n\n\t\t\tint length_diff = qpname.Length - tname.Length;\n\t\t\tif (length_diff == 0)\n\t\t\t\treturn qpname.CompareTo(tname);\n\n\t\t\treturn length_diff;\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/QueryParameters.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Collection of query parameters.\n\t///</summary>\n\t[Serializable]\n\tinternal class QueryParameters : ReportLink\n\t{\n        List<QueryParameter> _Items;\t\t\t// list of QueryParameter\n        bool _ContainsArray;                   // true if any of the parameters is an array reference\n\n\t\tinternal QueryParameters(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n            _ContainsArray = false;\n\t\t\tQueryParameter q;\n            _Items = new List<QueryParameter>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"queryparameter\":\n\t\t\t\t\t\tq = new QueryParameter(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tq=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown QueryParameters element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (q != null)\n\t\t\t\t\t_Items.Add(q);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For QueryParameters at least one QueryParameter is required.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (QueryParameter q in _Items)\n\t\t\t{\n                await q.FinalPass();\n                if (q.IsArray)\n                    _ContainsArray = true;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<QueryParameter> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n        internal bool ContainsArray\n        {\n            get { return _ContainsArray; }\n        }\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/RDLParser.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Globalization;\nusing System.Xml;\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t///\tThe RDLParser class takes an XML representation (either string or DOM) of a\n\t///\tRDL file and compiles a Report.\n\t/// </summary>\n\tpublic class RDLParser\n\t{\n\t\tXmlDocument _RdlDocument;\t// the RDL XML syntax\n\t\tbool bPassed=false;\t\t// has Report passed definition\n\t\tReport _Report=null;\t// The report; complete if bPassed true\n\t\tNeedPassword _DataSourceReferencePassword;\t// password for decrypting data source reference file\n\t\tstring _Folder;\t\t\t// folder that will contain report; needed when DataSourceReference used\n\t\tstring _overwriteConnectionString; // ConnectionString to be overwrite\n\t\tbool _overwriteInSubreport ;// ConnectionString overwrite in subreport too\n\n        /// <summary>\n        /// EBN 31/03/2014\n        /// Cross-Object parameters\n        /// The SubReportGetContent delegate handles a callback to get the content of a subreport from another source (server, memory, database, ...)\n        /// </summary>\n        /// <param name=\"SubReportName\"></param>\n        /// <returns></returns>\n        public CrossDelegate OnSubReportGetContent = new CrossDelegate();\n\n\t\t/// <summary>\n\t\t/// RDLParser takes in an RDL XML file and creates the\n\t\t/// definition that will be used at runtime.  It validates\n\t\t/// that the syntax is correct according to the specification.\n\t\t/// </summary>\n\t\tpublic RDLParser(String xml) \n\t\t{\n\t\t\ttry \n\t\t\t{\n\t\t\t\t_RdlDocument = new XmlDocument();\n\t\t\t\t_RdlDocument.PreserveWhitespace = false;\n\t\t\t\t_RdlDocument.LoadXml(xml);\n\t\t\t}\n\t\t\tcatch (XmlException ex)\n\t\t\t{\n\t\t\t\tthrow new ParserException(Strings.RDLParser_ErrorP_XMLFailed + ex.Message);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// RDLParser takes in an RDL XmlDocument and creates the\n\t\t/// definition that will be used at runtime.  It validates\n\t\t/// that the syntax is correct according to the specification.\n\t\t/// </summary>\t\t\n\t\tpublic RDLParser(XmlDocument xml) // preparsed XML\n\t\t{\n\t\t\t_RdlDocument = xml;\n\t\t}\n\n\t\tinternal XmlDocument RdlDocument\n\t\t{\n\t\t\tget { return _RdlDocument; }\n\t\t\tset \n\t\t\t{\n\t\t\t\t// With a new document existing report is not valid\n\t\t\t\t_RdlDocument = value; \n\t\t\t\tbPassed = false;\n\t\t\t\t_Report = null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the compiled report.\n\t\t/// </summary>\n\t\tpublic Report Report\n\t\t{\n\t\t\t// Only return a report if it has been fully constructed\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (bPassed)\n\t\t\t\t\treturn  _Report; \n\t\t\t\telse\n\t\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a parsed RPL report instance.\n\t\t/// </summary>\n\t\t/// \n\t\t/// <returns>A Report instance.</returns>\n\t\tpublic async Task<Report> Parse()\n\t\t{\n\t\t\treturn await Parse(0);\n\t\t}\n\t\t\n\t\tinternal async Task<Report> Parse(int oc)\n\t\t\t{\n\t\t\tif (_RdlDocument == null)\t// no document?\n\t\t\t\treturn null;\t\t\t// nothing to do\n\t\t\telse if (bPassed)\t\t\t// If I've already parsed it\n\t\t\t\treturn _Report;\t\t\t// then return existing Report\n\t\t\t//  Need to create a report.\n\t\t\tXmlNode xNode;\n\t\t\txNode = _RdlDocument.LastChild;\n\t\t\tif (xNode == null || xNode.Name != \"Report\")\n\t\t\t{\n\t\t\t\tthrow new ParserException(Strings.RDLParser_ErrorP__NoReport);\n\t\t\t}\n\t\t\t\n\t\t\tReportLog rl = new ReportLog();\t\t// create a report log\n\n\t\t\tReportDefn rd = new ReportDefn(xNode, rl, this._Folder, this._DataSourceReferencePassword, oc, OnSubReportGetContent, OverwriteConnectionString, OverwriteInSubreport);\n\t\t\tawait rd.InitializeAsync();\n\t\t\t_Report = new Report(rd);\n\t\t\t\n\t\t\tbPassed = true;\n\n\t\t\treturn _Report;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// For shared data sources, the DataSourceReferencePassword is the user phrase\n\t\t/// used to decrypt the report.\n\t\t/// </summary>\n        public NeedPassword DataSourceReferencePassword\n\t\t{\n\t\t\tget { return _DataSourceReferencePassword; }\n\t\t\tset { _DataSourceReferencePassword = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Folder is the location of the report.\n\t\t/// </summary>\n\t\tpublic string Folder\n\t\t{\n\t\t\tget { return _Folder; }\n\t\t\tset { _Folder = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// ConnectionString to overwrite\n\t\t/// </summary>\n\t\tpublic string OverwriteConnectionString\n\t\t{\n\t\t\tget { return _overwriteConnectionString; }\n\t\t\tset { _overwriteConnectionString = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// overwrite ConnectionString in subreport\n\t\t/// </summary>\n\t\tpublic bool OverwriteInSubreport\n\t\t{\n\t\t\tget { return _overwriteInSubreport; }\n\t\t\tset { _overwriteInSubreport = value; }\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/RSize.cs",
    "content": "\n\nusing System;\nusing System.Xml;\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\n#else\nusing System.Drawing;\n#endif\nusing System.Globalization;\nusing System.Text.RegularExpressions;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// The Size definition.  Held in a normalized format but convertible to multiple measurements.\n\t///</summary>\n\t[Serializable]\n\tpublic class RSize\n\t{\n\n        internal const decimal PARTS_PER_INCH = 2540;   //25.4 mm/inch\n        internal const decimal PARTS_PER_CM = 1000;     //10 mm/cm\n        internal const decimal PARTS_PER_MM = 100;\n        internal const decimal PARTS_PER_POINT = (decimal)(PARTS_PER_INCH / Majorsilence.Reporting.Rdl.Utility.Measurement.POINTSIZE_M);\n        internal const decimal PARTS_PER_PICA = (decimal)(PARTS_PER_POINT * 12M);\n\n\t\tint _Size;\t\t\t\t\t// Normalized size in 1/100,000 meters\n\t\tstring _Original;\t\t\t// save original string for recreation of syntax\n\n\t\tinternal RSize(ReportDefn r, string t)\n\t\t{\n\t\t\t// Size is specified in CSS Length Units\n\t\t\t// format is <decimal number nnn.nnn><optional space><unit>\n\t\t\t// in -> inches (1 inch = 2.54 cm)\n\t\t\t// cm -> centimeters (.01 meters)\n\t\t\t// mm -> millimeters (.001 meters)\n\t\t\t// pt -> points (1 point = 1/72.27 inches)\n\t\t\t// pc -> Picas (1 pica = 12 points)\n\t\t\t_Original = t;\t\t\t\t\t// Save original string for recreation\n\t\t\tt = t.Trim();\n\t\t\tint space = t.LastIndexOf(' '); \n\t\t\tstring n;\t\t\t\t\t\t// number string\n\t\t\tstring u;\t\t\t\t\t\t// unit string\n\t\t\tdecimal d;\t\t\t\t\t\t// initial number\n\t\t\ttry\t\t// Convert.ToDecimal can be very picky\n\t\t\t{\n\t\t\t\tif (space != -1)\t// any spaces\n\t\t\t\t{\n\t\t\t\t\tn = t.Substring(0,space).Trim();\t// number string\n\t\t\t\t\tu = t.Substring(space).Trim();\t// unit string\n\t\t\t\t}\n\t\t\t\telse if (t.Length >= 3)\n\t\t\t\t{\n\t\t\t\t\tn = t.Substring(0, t.Length-2).Trim();\n\t\t\t\t\tu = t.Substring(t.Length-2).Trim();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// Illegal unit\n                    if (r != null)\n\t\t\t\t\t    r.rl.LogError(4, string.Format(\"Illegal size '{0}' specified, assuming 0 length.\", t));\n\t\t\t\t\t_Size = 0;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!Regex.IsMatch(n, @\"\\A[ ]*[-]?[0-9]*[.]?[0-9]*[ ]*\\Z\"))\n\t\t\t\t{\n\t\t\t\t\tr.rl.LogError(4, string.Format(\"Unknown characters in '{0}' specified.  Number must be of form '###.##'.  Local conversion will be attempted.\", t));\n\t\t\t\t\td = Convert.ToDecimal(n, NumberFormatInfo.CurrentInfo);\t\t// initial number\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\td = Convert.ToDecimal(n, NumberFormatInfo.InvariantInfo);\t\t// initial number\n\t\t\t}\n\t\t\tcatch (Exception ex) \n\t\t\t{\n\t\t\t\t// Illegal unit\n                if (r != null)\n\t\t\t\t    r.rl.LogError(4, \"Illegal size '\" + t + \"' specified, assuming 0 length.\\r\\n\"+ex.Message);\n\t\t\t\t_Size = 0;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tswitch(u)\t\t\t// convert to millimeters\n\t\t\t{\n                case \"in\": //Inches\n                    _Size = (int)(d * PARTS_PER_INCH);\n                    break;\n                case \"cm\": //Centimeters\n                    _Size = (int)(d * PARTS_PER_CM);\n                    break;\n                case \"mm\": //Millimeters\n                    _Size = (int)(d * PARTS_PER_MM);\n                    break;\n                case \"pt\": //Points\n                    _Size = (int)(d * PARTS_PER_POINT);\n                    break;\n                case \"pc\": //Picas\n                    _Size = (int)(d * PARTS_PER_PICA);\n                    break;\n                default:\n                    // Illegal unit\n                    if (r != null)\n                        r.rl.LogError(4, \"Unknown sizing unit '\" + u + \"' specified, assuming inches.\");\n                    _Size = (int)(d * PARTS_PER_INCH);\n                    break;\n\t\t\t}\n\t\t\tif (_Size > 160 * 2540)\t// Size can't be greater than 160 inches according to spec\n\t\t\t{   // but RdlEngine supports higher values so just do a warning\n                if (r != null)\n\t\t\t\t    r.rl.LogError(4, \"Size '\" + this._Original + \"' is larger than the RDL specification maximum of 160 inches.\");\n//\t\t\t\t_Size = 160 * 2540;     // this would force maximum to spec max of 160\n\t\t\t}\n\t\t}\n\n        static public float PointSize(string v)\n        {\n            RSize rs = new RSize(null, v);\n            return rs.Points;\n        }\n\n\t\tinternal RSize(int normalizedSize)\n\t\t{\n\t\t\t_Size = normalizedSize;\n\t\t}\n\n\t\tinternal RSize(ReportDefn r, XmlNode xNode):this(r, xNode.InnerText)\n\t\t{\n\t\t}\n\n\t\tinternal int Size\n\t\t{\n\t\t\tget { return  _Size; }\n\t\t\tset {  _Size = value; }\n\t\t}\n\n\t\t// Return value as if specified as px\n\t\tinternal int PixelsX\n\t\t{\n\t\t\tget\n\t\t\t{\t// For now assume 96 dpi;  TODO: what would be better way; shouldn't use server display pixels\n\t\t\t\tdecimal p = _Size;\n\t\t\t\tp = p / 2540m;\t\t// get it in inches\n\t\t\t\tp = p * 96;\t\t\t\t// \n                if (p != 0)\n                    return (int) p;\n                return (_Size > 0) ? 1 : (int) p;\n\t\t\t}\n\t\t}\n\n\t\tstatic internal readonly float POINTSIZED = 72.27f;\n\t\tstatic internal readonly decimal POINTSIZEM = 72.27m;\n\n\t\tstatic internal int PixelsFromPoints(float x)\n\t\t{\n\t\t\tint result = (int) (x * 96 / POINTSIZED);\t// convert to pixels\n            if (result == 0 && x > .0001f)\n                return 1;\n\t\t\treturn result;\n\t\t}\n\n\t\tstatic internal int PixelsFromPoints(Graphics g, float x)\n\t\t{\n\t\t\tint result = (int) (x * g.DpiX / POINTSIZED);\t// convert to pixels\n            if (result == 0 && x > .0001f)\n                return 1;\n\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\tinternal int PixelsY\n\t\t{\n\t\t\tget\n\t\t\t{\t// For now assume 96 dpi\n\t\t\t\tdecimal p = _Size;\n\t\t\t\tp = p / 2540m;\t\t// get it in inches\n\t\t\t\tp = p * 96;\t\t\t\t// \n                if (p != 0)\n                    return (int)p;\n                return (_Size > 0) ? 1 : (int)p;\n\t\t\t}\n\t\t}\n\n        /// <summary>\n        /// Converts the size into pixels.\n        /// </summary>\n        /// <param name=\"dpi\">The dpi to be used in the convertion.</param>\n        /// <returns>An int containing the size in pixels.</returns>\n        internal int ToPixels(decimal dpi)\n        {\n            return RSize.ToPixels(_Size, dpi);\n        }\n\n        /// <summary>\n        /// Converts the size into pixels.\n        /// </summary>\n        /// <param name=\"size\">The size to be converted.</param>\n        /// <param name=\"dpi\">The dpi to use in the convertion.</param>\n        /// <returns>An int containing the size in pixels based on the specified DPI.</returns>\n        static public int ToPixels(int size, decimal dpi)\n        {\n            // For now assume 96 dpi\n            decimal p = size;\n            p = p / PARTS_PER_INCH;\t\t// get it in inches\n            p = p * dpi;\t\t\t\t// \n            if (p != 0)\n                return (int)p;\n            return (size > 0) ? 1 : (int)p;\n        }\n\n\n\t\tinternal float Points\n\t\t{\n\t\t\tget\n\t\t\t{\t\n\t\t\t\treturn (float) ((double) _Size / 2540.0 * POINTSIZED);\n\t\t\t}\n\t\t}\n\n        internal float ToPoints()\n        {\n            return RSize.ToPoints(_Size);\n        }\n\n        static public float ToPoints(int size)\n        {\n            return (float)((double)size / (double)PARTS_PER_INCH * Majorsilence.Reporting.Rdl.Utility.Measurement.POINTSIZE_F);\n        }\n\n        /// <summary>\n        /// TWIPS is 1/20 th of the size in points\n        /// </summary>\n        internal int Twips\n        {\n            get\n            {\n                return (int) TwipsFromPoints(Points);\n            }\n        }\n\n        static internal int TwipsFromPoints(float pt)\n        {\n            return (int)Math.Round(pt * 20, 0);\n        }\n\n\t\tstatic internal float PointsFromPixels(Graphics g, int x)\n\t\t{\n\t\t\tfloat result = (float) ((x * POINTSIZED) / g.DpiX);\t// convert to points from pixels\n\n\t\t\treturn result;\n\t\t}\n\n\t\tstatic internal float PointsFromPixels(Graphics g, float x)\n\t\t{\n\t\t\tfloat result = (float) ((x * POINTSIZED) / g.DpiX);\t// convert to points from pixels\n\n\t\t\treturn result;\n\t\t}\n\n\t\tinternal string Original\n\t\t{\n\t\t\tget { return  _Original; }\n\t\t\tset {  _Original = value; }\n\t\t}\n        /// <summary>\n        /// The original size is \"almost\" compatible with CSS - except CSS doesn't allow blanks.\n        /// </summary>\n        internal string CSS\n        {\n            get \n            {\n                if (_Original.IndexOf(' ') >= 0)\n                    return _Original.Replace(\" \", \"\");\n\n                return _Original; \n            }\n\t\t}\n\n\t\t#region operators\n\n\t\tpublic static RSize operator +(RSize arg1, RSize arg2)\n\t\t{\n\t\t\treturn new RSize(arg1.Size + arg2.Size);\n\t\t}\n\n\t\tpublic static RSize operator -(RSize arg1, RSize arg2)\n\t\t{\n\t\t\treturn new RSize(arg1.Size - arg2.Size);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Rectangle.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Represent the rectangle report item.\n\t///</summary>\n\t[Serializable]\n\tinternal class Rectangle : ReportItem\n\t{\n\t\tReportItems _ReportItems;\t// Report items contained within the bounds of the rectangle.\n\t\tbool _PageBreakAtStart;\t\t// Indicates the report should page break at the start of the rectangle.\n\t\tbool _PageBreakAtEnd;\t\t// Indicates the report should page break at the end of the rectangle.\t\t\n\n\t\t// constructor that doesn't process syntax\n\t\tinternal Rectangle(ReportDefn r, ReportLink p, XmlNode xNode, bool bNoLoop):base(r,p,xNode)\n\t\t{\n\t\t\t_ReportItems=null;\n\t\t\t_PageBreakAtStart=false;\n\t\t\t_PageBreakAtEnd=false;\n\t\t}\n\n\t\tinternal Rectangle(ReportDefn r, ReportLink p, XmlNode xNode):base(r,p,xNode)\n\t\t{\n\t\t\t_ReportItems=null;\n\t\t\t_PageBreakAtStart=false;\n\t\t\t_PageBreakAtEnd=false;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"reportitems\":\n\t\t\t\t\t\t_ReportItems = new ReportItems(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"pagebreakatstart\":\n\t\t\t\t\t\t_PageBreakAtStart = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"pagebreakatend\":\n\t\t\t\t\t\t_PageBreakAtEnd = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tif (ReportItemElement(xNodeLoop))\t// try at ReportItem level\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Rectangle element \" + xNodeLoop.Name + \" ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n \n\t\tasync override internal Task FinalPass()\n\t\t{\n            await base.FinalPass();\n\n\t\t\tif (_ReportItems != null)\n                await _ReportItems.FinalPass();\n\n\t\t\treturn;\n\t\t}\n \n\t\tasync override internal Task Run(IPresent ip, Row row)\n\t\t{\n            await base.Run(ip, row);\n\n\t\t\tif (_ReportItems == null)\n\t\t\t\treturn;\n\n\t\t\tif (await ip.RectangleStart(this, row))\n\t\t\t{\n                await _ReportItems.Run(ip, row);\n                await ip.RectangleEnd(this, row);\n\t\t\t}\n\t\t}\n\n\t\tasync override internal Task RunPage(Pages pgs, Row row)\n\t\t{\n\t\t\tReport r = pgs.Report;\n            bool bHidden = await IsHidden(r, row);\n\n\t\t\tSetPagePositionBegin(pgs);\n\n            // Handle page breaking at start\n            if (this.PageBreakAtStart && !IsTableOrMatrixCell(r) && !pgs.CurrentPage.IsEmpty() && !bHidden)\n            {\t// force page break at beginning of dataregion\n                pgs.NextOrNew();\n                pgs.CurrentPage.YOffset = OwnerReport.TopOfPage;\n            }\n\n\t\t\tPageRectangle pr = new PageRectangle();\n            await SetPagePositionAndStyle(r, pr, row);\n\t\t\tif (pr.SI.BackgroundImage != null)\n\t\t\t\tpr.SI.BackgroundImage.H = pr.H;\t\t//   and in the background image\n\n            if (!bHidden)\n            {\n                Page p = pgs.CurrentPage;\n                p.AddObject(pr);\n\n                if (_ReportItems != null)\n                {\n                    float saveY = p.YOffset;\n       //             p.YOffset += (Top == null ? 0 : this.Top.Points);\n                    p.YOffset = pr.Y;       // top of rectangle is base for contained report items\n                    await _ReportItems.RunPage(pgs, row, GetOffsetCalc(pgs.Report) + LeftCalc(r));\n                    p.YOffset = saveY;\n                }\n\n                // Handle page breaking at end\n                if (this.PageBreakAtEnd && !IsTableOrMatrixCell(r) && !pgs.CurrentPage.IsEmpty())\n                {\t// force page break at beginning of dataregion\n                    pgs.NextOrNew();\n                    pgs.CurrentPage.YOffset = OwnerReport.TopOfPage;\n                }\n            }\n//\t\t\tSetPagePositionEnd(pgs, pgs.CurrentPage.YOffset);\n            SetPagePositionEnd(pgs, pr.Y + pr.H);\n\n\t\t\treturn;\n        }\n\n        internal override void RemoveWC(Report rpt)\n        {\n            base.RemoveWC(rpt);\n\n            if (this._ReportItems == null)\n                return;\n\n            foreach (ReportItem ri in this._ReportItems.Items)\n            {\n                ri.RemoveWC(rpt);\n            }\n        }\n\n\t\tinternal ReportItems ReportItems\n\t\t{\n\t\t\tget { return  _ReportItems; }\n\t\t\tset {  _ReportItems = value; }\n\t\t}\n\n\t\tinternal bool PageBreakAtStart\n\t\t{\n\t\t\tget { return  _PageBreakAtStart; }\n\t\t\tset {  _PageBreakAtStart = value; }\n\t\t}\n\n\t\tinternal bool PageBreakAtEnd\n\t\t{\n\t\t\tget { return  _PageBreakAtEnd; }\n\t\t\tset {  _PageBreakAtEnd = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ReportClass.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Reflection;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// ReportClass represents the Class report element. \n\t///</summary>\n\t[Serializable]\n\tinternal class ReportClass : ReportLink\n\t{\n\t\tstring _ClassName;\t\t// The name of the class\n\t\tName _InstanceName;\t\t// The name of the variable to assign the class to.\n\t\t\t\t\t\t\t\t// This variable can be used in expressions\n\t\t\t\t\t\t\t\t// throughout the report.\n\t\n\t\tinternal ReportClass(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_ClassName=null;\n\t\t\t_InstanceName = null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"ClassName\":\n\t\t\t\t\t\t_ClassName = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"InstanceName\":\n\t\t\t\t\t\t_InstanceName = new Name(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_ClassName == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"Class ClassName is required but not specified.\");\n\n\t\t\tif (_InstanceName == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"Class InstanceName is required but not specified or invalid for \" + _ClassName==null? \"<unknown name>\": _ClassName);\n\t\t}\n\t\t\n\t\toverride internal Task FinalPass()\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tinternal object Load(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = GetWC(rpt);\n\t\t\tif (wc.bCreateFailed)\t\t// We only try to create once.\n\t\t\t\treturn wc.Instance;\n\n\t\t\tif (wc.Instance != null)\t// Already loaded\n\t\t\t\treturn wc.Instance;\n\n\t\t\tif (OwnerReport.CodeModules == null)\t// nothing to load against\n\t\t\t\treturn null;\n\n\t\t\t// Load an instance of the object\n\t\t\tstring err=\"\";\n\t\t\ttry\n\t\t\t{\n\t\t\t\tType tp = OwnerReport.CodeModules[_ClassName];\n\t\t\t\tif (tp != null)\n\t\t\t\t{\n\t\t\t\t\tAssembly asm = tp.Assembly;\n\t\t\t\t\twc.Instance = asm.CreateInstance(_ClassName, false);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\terr = \"Class not found.\";\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\twc.Instance = null;\n\t\t\t\terr = e.Message;\n\t\t\t}\n\n\t\t\tif (wc.Instance == null)\n\t\t\t{\n\t\t\t\tstring e = String.Format(\"Unable to create instance of class {0}.  {1}\",\n\t\t\t\t\t_ClassName, err);\n\t\t\t\tif (rpt == null)\n\t\t\t\t\tOwnerReport.rl.LogError(4, e);\n\t\t\t\telse\n\t\t\t\t\trpt.rl.LogError(4, e);\n\t\t\t\twc.bCreateFailed = true;\n\t\t\t}\n\t\t\treturn wc.Instance;\t\t\t\n\t\t}\n\n\t\tinternal string ClassName\n\t\t{\n\t\t\tget { return  _ClassName; }\n\t\t}\n\n\t\tinternal Name InstanceName\n\t\t{\n\t\t\tget { return  _InstanceName; }\n\t\t}\n\n\t\tinternal object Instance(Report rpt)\n\t\t{\n\t\t\treturn Load(rpt);\t\t\t// load if necessary\n\t\t}\n\t\tprivate WorkClass GetWC(Report rpt)\n\t\t{\n\t\t\tif (rpt == null)\n\t\t\t\treturn new WorkClass();\n\n\t\t\tWorkClass wc = rpt.Cache.Get(this, \"wc\") as WorkClass;\n\t\t\tif (wc == null)\n\t\t\t{\n\t\t\t\twc = new WorkClass();\n\t\t\t\trpt.Cache.Add(this, \"wc\", wc);\n\t\t\t}\n\t\t\treturn wc;\n\t\t}\n\n\t\tprivate void RemoveWC(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(this, \"wc\");\n\t\t}\n\n\t\tclass WorkClass\n\t\t{\n\t\t\tinternal object Instance;\n\t\t\tinternal bool bCreateFailed;\n\t\t\tinternal WorkClass()\n\t\t\t{\n\t\t\t\tInstance=null;\t// \n\t\t\t\tbCreateFailed=false;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ReportDefn.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Globalization;\nusing System.Data;\nusing System.Data.SqlClient;\nusing Majorsilence.Reporting.Rdl;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Delegate used to ask for a Data Source Reference password used to decrypt the file.\n\t/// </summary>\n\tpublic delegate string NeedPassword();\n\n\t///<summary>\n\t/// Main Report definition; this is the top of the tree that contains the complete\n\t/// definition of a instance of a report.\n\t///</summary>\n\t[Serializable]\n\tpublic class ReportDefn : IDisposable\t\t\t\t\n\t{\n\t\tinternal int _ObjectCount=0;\t// master object counter\n\t\tinternal ReportLog rl;\t// report log\n\t\tName _Name;\t\t\t\t// Name of the report\n\t\tstring _Description;\t// Description of the report\n\t\tstring _Author;\t\t\t// Author of the report\n\t\tint _AutoRefresh;\t\t// Rate at which the report page automatically refreshes, in seconds.  Must be nonnegative.\n\t\t//    If omitted or zero, the report page should not automatically refresh.\n\t\t//    Max: 2147483647\n\t\tDataSourcesDefn _DataSourcesDefn;\t// Describes the data sources from which\n\t\tinternal NeedPassword GetDataSourceReferencePassword=null;\n\n\t\t//\t\tdata sets are taken for this report.\n\t\tDataSetsDefn _DataSetsDefn;\t// Describes the data that is displayed as\n\t\t\t\t\t\t\t\t\t// part of the report\n\t\tBody _Body;\t\t\t\t// Describes how the body of the report is structured\n\t\tReportParameters _ReportParameters;\t// Parameters for the report\n\t\tCustom _Customer;\t\t// Custom information to be handed to the report engine\n\t\tRSize _Width;\t\t\t// Width of the report\n\t\tPageHeader _PageHeader;\t// The header that is output at the top of each page of the report.\n\t\tPageFooter _PageFooter;\t// The footer that is output at the bottom of each page of the report.\n\t\tRSize _PageHeight;\t\t// Default height for the report.  Default is 11 in.\n\t\tRSize _PageWidth;\t\t// Default width for the report. Default is 8.5 in.\n\t\tRSize _LeftMargin;\t\t// Width of the left margin. Default: 0 in\n\t\tRSize _RightMargin;\t\t// Width of the right margin. Default: 0 in\n\t\tRSize _TopMargin;\t\t// Width of the top margin. Default: 0 in\n\t\tRSize _BottomMargin;\t// Width of the bottom margin. Default: 0 in\n\t\tEmbeddedImages _EmbeddedImages;\t// Images embedded within the report\n\t\tExpression _Language;\t// The primary language of the text. Default is server language.\n\t\tCode _Code;\t\t\t\t// The <Code> element support; ie VB functions\n\t\tCodeModules _CodeModules;\t// Code modules to make available to the\n\t\t//\t\t\t\t\t\t\treport for use in expressions.\n\t\tClasses _Classes;\t\t// Classes 0-1 Element Classes to instantiate during report initialization\n\t\tstring _DataTransform;\t// The location to a transformation to apply\n\t\t// to a report data rendering. This can be a full folder path (e.g. �/xsl/xfrm.xsl�),\n\t\t// relative path (e.g. �xfrm.xsl�).\n\t\tstring _DataSchema;\t\t// The schema or namespace to use for a report data rendering.\n\t\tstring _DataElementName;\t// Name of a top level element that\n\t\t//\t\trepresents the report data. Default: Report.\n\t\tDataElementStyleEnum _DataElementStyle;\t\t//Indicates whether textboxes should\n\t\t//\t\trender as elements or attributes.\n\t\tSubreport _Subreport;\t// null if top level report; otherwise the subreport that loaded the report\n\t\tbool _ContainsSubreport;\t// true if report contains a subreport\n\n\t\tint _DynamicNames=0;\t\t// used for creating names on the fly during parsing\n\t\t// Following variables used for parsing/evaluating expressions\n        List<ICacheData> _DataCache;\t// contains all function that implement ICacheData\n\t\tIDictionary _LUGlobals;\t// contains global and user properties\n\t\tIDictionary _LUUser;\t// contains global and user properties\n\t\tIDictionary _LUReportItems;\t// all TextBoxes in the report\tIDictionary _LUGlobalsUser;\t\t// contains global and user properties\n\t\tIDictionary _LUDynamicNames;\t// for dynamic names\n\t\tIDictionary _LUAggrScope;\t// Datasets, Dataregions, grouping names\n\t\tIDictionary _LUEmbeddedImages;\t// Embedded images\n\t\treadonly string _ParseFolder;\t\t\t// temporary folder for looking up things during parse/finalpass\n\t\tType _CodeType;\t\t\t// used for parsing of expressions; DONT USE AT RUNTIME\n\n\t\tstring _OverwriteConnectionString; // To overwrite ConnectionString\n\t\tbool _OverwriteInSubreport; // Overwrite ConnectionString in subreport too\n\t\treadonly XmlNode _xNode;\n\n        /// <summary>\n        /// EBN 31/03/2014\n        /// Cross object\n        /// </summary>\n        private CrossDelegate _SubReportGetContent = new CrossDelegate();\n        public CrossDelegate SubReportGetContent\n        {\n            get { return _SubReportGetContent; }\n            set { _SubReportGetContent = value; }\n        }\n\n\t\t// Constructor\n\t\tinternal ReportDefn(XmlNode xNode, ReportLog replog, string folder, NeedPassword getpswd, int objcount, CrossDelegate crossdel,\n\t\t\tstring overwriteConnectionString, bool overwriteInSubreport)        // report has no parents\n\t\t{\n            _xNode = xNode;\n            rl = replog;                // used for error reporting\n\t\t\t_ObjectCount = objcount;    // starting number for objects in this report; 0 other than for subreports\n\t\t\tGetDataSourceReferencePassword = getpswd;\n\t\t\t_ParseFolder = folder;\n\t\t\t_Description = null;\n\t\t\t_Author = null;\n\t\t\t_AutoRefresh = -1;\n\t\t\t_DataSourcesDefn = null;\n\t\t\t_DataSetsDefn = null;\n\t\t\t_Body = null;\n\t\t\t_Width = null;\n\t\t\t_PageHeader = null;\n\t\t\t_PageFooter = null;\n\t\t\t_PageHeight = null;\n\t\t\t_PageWidth = null;\n\t\t\t_LeftMargin = null;\n\t\t\t_RightMargin = null;\n\t\t\t_TopMargin = null;\n\t\t\t_BottomMargin = null;\n\t\t\t_EmbeddedImages = null;\n\t\t\t_Language = null;\n\t\t\t_CodeModules = null;\n\t\t\t_Code = null;\n\t\t\t_Classes = null;\n\t\t\t_DataTransform = null;\n\t\t\t_DataSchema = null;\n\t\t\t_DataElementName = null;\n\t\t\t_DataElementStyle = DataElementStyleEnum.AttributeNormal;\n\t\t\t_LUReportItems = new Hashtable();       // to hold all the textBoxes\n\t\t\t_LUAggrScope = new ListDictionary();    // to hold all dataset, dataregion, grouping names\n\t\t\t_LUEmbeddedImages = new ListDictionary();   // probably not very many\n\t\t\t_LUDynamicNames = new Hashtable();\n\t\t\t_DataCache = new List<ICacheData>();\n\n\t\t\t// EBN 30/03/2014\n\t\t\tSubReportGetContent = crossdel;\n\n\t\t\t_OverwriteConnectionString = overwriteConnectionString;\n\t\t\t_OverwriteInSubreport = overwriteInSubreport;\n\t\t}\n\n\t\tpublic async Task InitializeAsync() { \n\t\t\t// Run thru the attributes\n\t\t\tforeach(XmlAttribute xAttr in _xNode.Attributes)\n\t\t\t{\n\t\t\t\tswitch (xAttr.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"name\":\n\t\t\t\t\t\t_Name = new Name(xAttr.Value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in _xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"description\":\n\t\t\t\t\t\t_Description = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"author\":\n\t\t\t\t\t\t_Author = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n                    case \"name\":\n                        _Name = new Name(xNodeLoop.InnerText);\n                        break;\n                    case \"autorefresh\":\n\t\t\t\t\t\t_AutoRefresh = XmlUtil.Integer(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"datasources\":\n\t\t\t\t\t\t_DataSourcesDefn = new DataSourcesDefn(this, null, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"datasets\":\n\t\t\t\t\t\t_DataSetsDefn = new DataSetsDefn(this, null, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"body\":\n\t\t\t\t\t\t_Body = new Body(this, null, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"reportparameters\":\n\t\t\t\t\t\t_ReportParameters = new ReportParameters(this, null, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"width\":\n\t\t\t\t\t\t_Width = new RSize(this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"pageheader\":\n\t\t\t\t\t\t_PageHeader = new PageHeader(this, null, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"pagefooter\":\n\t\t\t\t\t\t_PageFooter = new PageFooter(this, null, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"pageheight\":\n\t\t\t\t\t\t_PageHeight = new RSize(this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"pagewidth\":\n\t\t\t\t\t\t_PageWidth = new RSize(this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"leftmargin\":\n\t\t\t\t\t\t_LeftMargin = new RSize(this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"rightmargin\":\n\t\t\t\t\t\t_RightMargin = new RSize(this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"topmargin\":\n\t\t\t\t\t\t_TopMargin = new RSize(this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"bottommargin\":\n\t\t\t\t\t\t_BottomMargin = new RSize(this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"embeddedimages\":\n\t\t\t\t\t\t_EmbeddedImages = new EmbeddedImages(this, null, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"language\":\n\t\t\t\t\t\t_Language =  new Expression(this, null, xNodeLoop, ExpressionType.String);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"code\":\n\t\t\t\t\t\t_Code = new Code(this, null, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"codemodules\":\n\t\t\t\t\t\t_CodeModules = new CodeModules(this, null, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"classes\":\n\t\t\t\t\t\t_Classes = new Classes(this, null, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"datatransform\":\n\t\t\t\t\t\t_DataTransform = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"dataschema\":\n\t\t\t\t\t\t_DataSchema = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"dataelementname\":\n\t\t\t\t\t\t_DataElementName = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"dataelementstyle\":\n\t\t\t\t\t\t_DataElementStyle = Majorsilence.Reporting.Rdl.DataElementStyle.GetStyle(xNodeLoop.InnerText, this.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tthis.rl.LogError(4, \"Unknown Report element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (_Body == null)\n\t\t\t\trl.LogError(8, \"Body not specified for report.\");\n\n\t\t\tif (_Width == null)\n\t\t\t\trl.LogError(4, \"Width not specified for report.  Assuming page width.\");\n\n\t\t\tif (rl.MaxSeverity <= 4)\t// don't do final pass if already have serious errors\n\t\t\t{\n\t\t\t\tawait FinalPass(_ParseFolder);\t// call final parser pass for expression resolution\n\t\t\t}\n\n\t\t\t// Cleanup any dangling resources\n\t\t\tif (_DataSourcesDefn != null)\n\t\t\t\t_DataSourcesDefn.CleanUp(null);\n\t\t}\n\n\t\t//\n\t\tasync Task FinalPass(string folder)\n\t\t{\n\t\t\t// Now do some addition validation and final preparation\n\n\t\t\t// Create the Globals and User lookup dictionaries\n\t\t\t_LUGlobals = new ListDictionary();\t// if entries grow beyond 10; make hashtable\n\t\t\t_LUGlobals.Add(\"PageNumber\", new FunctionPageNumber());\n\t\t\t_LUGlobals.Add(\"TotalPages\", new FunctionTotalPages());\n\t\t\t_LUGlobals.Add(\"ExecutionTime\", new FunctionExecutionTime());\n\t\t\t_LUGlobals.Add(\"ReportFolder\", new FunctionReportFolder());\n\t\t\t_LUGlobals.Add(\"ReportName\", new FunctionReportName());\n\t\t\t_LUUser = new ListDictionary();\t\t// if entries grow beyond 10; make hashtable\n\t\t\t_LUUser.Add(\"UserID\", new FunctionUserID());\n\t\t\t_LUUser.Add(\"Language\", new FunctionUserLanguage());\n\t\t\tif (_CodeModules != null)\n\t\t\t{\n                await _CodeModules.FinalPass();\n\t\t\t\t_CodeModules.LoadModules();\n\t\t\t}\n\t\t\tif (_Classes != null)\n\t\t\t{\n                await _Classes.FinalPass();\n\t\t\t\t// _Classes.Load();\n\t\t\t}\n\t\t\tif (_Code != null)\n\t\t\t{\n                await _Code.FinalPass();\n\t\t\t\t_CodeType = _Code.CodeType();\n\t\t\t}\n\n\t\t\tif (_ReportParameters != null)      // report parameters might be used in data source connection strings\n                await _ReportParameters.FinalPass();\n\t\t\tif (_DataSourcesDefn != null)\n                await _DataSourcesDefn.FinalPass();\n\t\t\tif (_DataSetsDefn != null)\n\t\t\t\tawait _DataSetsDefn.FinalPass();\n            await _Body.FinalPass();\n\t\t\tif (_PageHeader != null)\n                await _PageHeader.FinalPass();\n\t\t\tif (_PageFooter != null)\n                await _PageFooter.FinalPass();\n\t\t\tif (_EmbeddedImages != null)\n                await _EmbeddedImages.FinalPass();\n\t\t\tif (_Language != null)\n                await _Language.FinalPass();\n\n            _DataCache.TrimExcess();\t// reduce size of array of expressions that cache data\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Type CodeType\n\t\t{\n\t\t\tget {return _CodeType;}\n\t\t}\n\n\t\tinternal string ParseFolder\n\t\t{\n\t\t\tget {return _ParseFolder;}\n\t\t}\n\n\t\tinternal int GetObjectNumber()\n\t\t{\n\t\t\t_ObjectCount++;\n\t\t\treturn _ObjectCount;\n\t\t}\n\n\t\tinternal void SetObjectNumber(int oc)\n\t\t{\n\t\t\t_ObjectCount = oc;\n\t\t}\n\n\t\t// Obtain the data for the report\n\t\tasync internal Task<bool> RunGetData(Report rpt, IDictionary parms)\n\t\t{\n            bool bRows = false;\n\t\t\t// Step 1- set the parameter values for the runtime\n            if (parms != null && ReportParameters != null)\n            {\n                await ReportParameters.SetRuntimeValues(rpt, parms);\t// set the parameters\n            }\n\n\t\t\t// Step 2- prep the datasources (ie connect and execute the queries)\n            if (this._DataSourcesDefn != null)\n            {\n                await _DataSourcesDefn.ConnectDataSources(rpt);\n            }\n\n\t\t\t// Step 3- obtain the data; applying filters\n\t\t\tif (_DataSetsDefn != null)\n\t\t\t{\n\t\t\t\tResetCachedData(rpt);\n\t\t\t\tbRows = await _DataSetsDefn.GetData(rpt);\n\t\t\t}\n\n\t\t\t// Step 4- cleanup any DB connections\n            if (_DataSourcesDefn != null)\n            {\n                if (!this.ContainsSubreport)\n                {\n                    _DataSourcesDefn.CleanUp(rpt);\t// no subreports means that nothing will use this transaction\n                }\n            }\n\n\t\t\treturn bRows;\n\t\t}\n\n\t\tinternal string CreateDynamicName(object ro)\n\t\t{\n\t\t\t_DynamicNames++;\t\t\t\t\t// increment the name generator\n\t\t\tstring name = \"o\" + _DynamicNames.ToString();\n\t\t\t_LUDynamicNames.Add(name, ro);\n\t\t\treturn name;\t\t\t\n\t\t}\n\n\t\tinternal IDictionary LUDynamicNames\n\t\t{\n\t\t\tget { return _LUDynamicNames; }\n\t\t}\n \n\t\tprivate void ResetCachedData(Report rpt)\n\t\t{\n            foreach (ICacheData icd in this._DataCache)\n            {\n                icd.ClearCache(rpt);\n            }\n\t\t}\n\n\t\tinternal async Task Run(IPresent ip)\n\t\t{\n\t\t\tif (_Subreport == null)\n\t\t\t{\t// do true intialization\n\t\t\t\tip.Start();\n\t\t\t}\n\n\t\t\tif (ip.IsPagingNeeded())\n\t\t\t{\n                await RunPage(ip);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (_PageHeader != null && !(ip is RenderXml))\n                    await _PageHeader.Run(ip, null);\n                await _Body.Run(ip, null);\n\t\t\t\tif (_PageFooter != null && !(ip is RenderXml))\n                    await _PageFooter.Run(ip, null);\n\t\t\t}\n\n\t\t\tif (_Subreport == null)\n\t\t\t\tawait ip.End();\n\n\t\t\tif (_DataSourcesDefn != null)\n\t\t\t\t_DataSourcesDefn.CleanUp(ip.Report());\t// datasets may not have been cleaned up\n\t\t}\n\n\t\tinternal async Task RunPage(IPresent ip)\n\t\t{\n\t\t\tPages pgs = new Pages(ip.Report());\n\t\t\ttry\n\t\t\t{\n\t\t\t\tPage p = new Page(1);\t\t\t\t// kick it off with a new page\n\t\t\t\tpgs.AddPage(p);\n\n                // Create all the pages\n                await _Body.RunPage(pgs);\n\n \t\t\t\tif (pgs.LastPage.IsEmpty()&& pgs.PageCount > 1)\t// get rid of extraneous pages which\n\t\t\t\t\tpgs.RemoveLastPage();\t\t\t//   can be caused by region page break at end\n\n\t\t\t\t// Now create the headers and footers for all the pages (as needed)\n\t\t\t\tif (_PageHeader != null)\n                    await _PageHeader.RunPage(pgs);\n\t\t\t\tif (_PageFooter != null)\n                    await _PageFooter.RunPage(pgs);\n\n                pgs.SortPageItems();             // Handle ZIndex ordering of pages\n\n                await ip.RunPages(pgs);\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tpgs.CleanUp();\t\t// always want to make sure we clean this up since \n\t\t\t\tif (_DataSourcesDefn != null)\n\t\t\t\t\t_DataSourcesDefn.CleanUp(pgs.Report);\t// ensure datasets are cleaned up\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tinternal string Description\n\t\t{\n\t\t\tget { return  _Description; }\n\t\t\tset {  _Description = value; }\n\t\t}\n\n\t\tinternal string Author\n\t\t{\n\t\t\tget { return  _Author; }\n\t\t\tset {  _Author = value; }\n\t\t}\n\n\t\tinternal int AutoRefresh\n\t\t{\n\t\t\tget { return  _AutoRefresh; }\n\t\t\tset {  _AutoRefresh = value; }\n\t\t}\n\n        internal List<ICacheData> DataCache\n\t\t{\n\t\t\tget { return _DataCache; }\n\t\t}\n\n\t\tinternal DataSourcesDefn DataSourcesDefn\n\t\t{\n\t\t\tget { return  _DataSourcesDefn; }\n\t\t}\n\n\t\tinternal DataSetsDefn DataSetsDefn\n\t\t{\n\t\t\tget { return  _DataSetsDefn; }\n\t\t}\n\n\t\tinternal Body Body\n\t\t{\n\t\t\tget { return  _Body; }\n\t\t\tset {  _Body = value; }\n\t\t}\n\n\t\tinternal Code Code\n\t\t{\n\t\t\tget {return _Code;}\n\t\t}\n\n\t\tinternal ReportParameters ReportParameters\n\t\t{\n\t\t\tget { return  _ReportParameters; }\n\t\t\tset {  _ReportParameters = value; }\n\t\t}\n\n\t\tinternal Custom Customer\n\t\t{\n\t\t\tget { return  _Customer; }\n\t\t\tset {  _Customer = value; }\n\t\t}\n\n\t\tinternal string Name\n\t\t{\n\t\t\tget { return _Name == null? null: _Name.Nm; }\n\t\t\tset { _Name = new Name(value); }\n\t\t}\n\n\t\tinternal RSize Width\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_Width == null)\t\t\t// Shouldn't be need since technically Width is required (I let it slip)\t\n\t\t\t\t\t_Width = PageWidth;\t\t// Not specified; assume page width\n\n\t\t\t\treturn  _Width; \n\t\t\t}\n\t\t\tset {  _Width = value; }\n\t\t}\n\n\t\tinternal PageHeader PageHeader\n\t\t{\n\t\t\tget { return  _PageHeader; }\n\t\t\tset {  _PageHeader = value; }\n\t\t}\n\n\t\tinternal PageFooter PageFooter\n\t\t{\n\t\t\tget { return  _PageFooter; }\n\t\t\tset {  _PageFooter = value; }\n\t\t}\n\n\t\tinternal RSize PageHeight\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (this.Subreport != null)\n\t\t\t\t\treturn Subreport.OwnerReport.PageHeight;\n\n\t\t\t\tif (_PageHeight == null)\t\t\t// default height is 11 inches\n\t\t\t\t\t_PageHeight = new RSize(this, \"11 in\");\n\t\t\t\treturn  _PageHeight; \n\t\t\t}\n\t\t\tset {  _PageHeight = value; }\n\t\t}\n\n\t\tinternal float PageHeightPoints\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\treturn PageHeight.Points;\n\t\t\t}\n\t\t}\n\n\t\tinternal RSize PageWidth\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (this.Subreport != null)\n\t\t\t\t\treturn Subreport.OwnerReport.PageWidth;\n\n\t\t\t\tif (_PageWidth == null)\t\t\t\t// default width is 8.5 inches\n\t\t\t\t\t_PageWidth = new RSize(this, \"8.5 in\");\n\n\t\t\t\treturn  _PageWidth; \n\t\t\t}\n\t\t\tset {  _PageWidth = value; }\n\t\t}\n\n\t\tinternal float PageWidthPoints\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\treturn PageWidth.Points;\n\t\t\t}\n\t\t}\n\n\t\tinternal RSize LeftMargin\n\t\t{\n\t\t\tget \n\t\t\t{\n                if (Subreport != null)\n                {\n                    if (Subreport.Left == null)\n                        Subreport.Left = new RSize(this, \"0 in\");\n                    return Subreport.Left + Subreport.OwnerReport.LeftMargin;\n                }\n\n\t\t\t\tif (_LeftMargin == null)\n\t\t\t\t\t_LeftMargin = new RSize(this, \"0 in\");\n\t\t\t\treturn  _LeftMargin; \n\t\t\t}\n\t\t\tset {  _LeftMargin = value; }\n\t\t}\n\n\t\tinternal RSize RightMargin\n\t\t{\n\t\t\tget \n\t\t\t{ \n\t\t\t\tif (Subreport != null)\n\t\t\t\t\treturn Subreport.OwnerReport.RightMargin;\n\n\t\t\t\tif (_RightMargin == null)\n\t\t\t\t\t_RightMargin = new RSize(this, \"0 in\");\n\t\t\t\treturn  _RightMargin; \n\t\t\t}\n\t\t\tset {  _RightMargin = value; }\n\t\t}\n\n\t\tinternal RSize TopMargin\n\t\t{\n\t\t\tget \n\t\t\t{ \n\t\t\t\tif (Subreport != null)\n\t\t\t\t\treturn Subreport.OwnerReport.TopMargin;\n\n\t\t\t\tif (_TopMargin == null)\n\t\t\t\t\t_TopMargin = new RSize(this, \"0 in\");\n\t\t\t\treturn  _TopMargin; \n\t\t\t}\n\t\t\tset {  _TopMargin = value; }\n\t\t}\n\n\t\tinternal float TopOfPage\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (this.Subreport != null)\n\t\t\t\t\treturn Subreport.OwnerReport.TopOfPage;\n\n\t\t\t\tfloat y = TopMargin.Points;\n\t\t\t\tif (this._PageHeader != null)\n\t\t\t\t\ty += _PageHeader.Height.Points;\n\t\t\t\treturn y;\n\t\t\t}\n\t\t}\n\n\t\tinternal RSize BottomMargin\n\t\t{\n\t\t\tget \n\t\t\t{ \n\t\t\t\tif (Subreport != null)\n\t\t\t\t\treturn Subreport.OwnerReport.BottomMargin;\n\n\t\t\t\tif (_BottomMargin == null)\n\t\t\t\t\t_BottomMargin = new RSize(this, \"0 in\");\n\t\t\t\treturn  _BottomMargin; \n\t\t\t}\n\t\t\tset {  _BottomMargin = value; }\n\t\t}\n \n\t\tinternal float BottomOfPage\t\t// this is the y coordinate just above the page footer\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (this.Subreport != null)\n\t\t\t\t\treturn Subreport.OwnerReport.BottomOfPage;\n\n\t\t\t\t// calc size of bottom margin + footer\n\t\t\t\tfloat y = BottomMargin.Points;\t\t\n\t\t\t\tif (this._PageFooter != null)\n\t\t\t\t\ty += _PageFooter.Height.Points;\n\n\t\t\t\t// now get the absolute coordinate\n\t\t\t\ty = PageHeight.Points - y;\n\t\t\t\treturn y;\n\t\t\t}\n\t\t}\n\n\t\tinternal EmbeddedImages EmbeddedImages\n\t\t{\n\t\t\tget { return  _EmbeddedImages; }\n\t\t\tset {  _EmbeddedImages = value; }\n\t\t}\n\n\t\tinternal Expression Language\n\t\t{\n\t\t\tget { return  _Language; }\n\t\t\tset {  _Language = value; }\n\t\t}\n\n\t\tinternal async Task<string> EvalLanguage(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Language == null)\n\t\t\t{\n\t\t\t\tCultureInfo ci = CultureInfo.CurrentCulture;\n\t\t\t\treturn ci.Name;\t\t\t\t\n\t\t\t}\n\n\t\t\treturn await _Language.EvaluateString(rpt, r);\n\t\t}\n\n\t\tinternal CodeModules CodeModules\n\t\t{\n\t\t\tget { return  _CodeModules; }\n\t\t\tset {  _CodeModules = value; }\n\t\t}\n\n\t\tinternal Classes Classes\t\t\t  \n\t\t{\n\t\t\tget { return  _Classes; }\n\t\t\tset {  _Classes = value; }\n\t\t}\n\n\t\tinternal string DataTransform\n\t\t{\n\t\t\tget { return  _DataTransform; }\n\t\t\tset {  _DataTransform = value; }\n\t\t}\n\n\t\tinternal string DataSchema\n\t\t{\n\t\t\tget { return  _DataSchema; }\n\t\t\tset {  _DataSchema = value; }\n\t\t}\n\n\t\tinternal string DataElementName\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\treturn _DataElementName == null? \"Report\": _DataElementName;\n\t\t\t}\n\t\t\tset {  _DataElementName = value; }\n\t\t}\n\n\t\tinternal DataElementStyleEnum DataElementStyle\n\t\t{\n\t\t\tget { return  _DataElementStyle; }\n\t\t\tset {  _DataElementStyle = value; }\n\t\t}\n\n\t\tinternal IDictionary LUGlobals\n\t\t{\n\t\t\tget { return  _LUGlobals; }\n\t\t}\n\n\t\tinternal IDictionary LUUser\n\t\t{\n\t\t\tget { return  _LUUser; }\n\t\t}\n\t\t\n\t\tinternal IDictionary LUReportItems\n\t\t{\n\t\t\tget { return  _LUReportItems; }\n\t\t}\n\t\t\n\t\tinternal IDictionary LUAggrScope\n\t\t{\n\t\t\tget { return  _LUAggrScope; }\n\t\t}\n\n\t\tinternal IDictionary LUReportParameters\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_ReportParameters != null && \n\t\t\t\t\t_ReportParameters.Items != null)\n\t\t\t\t\treturn  _ReportParameters.Items; \n\t\t\t\telse\n\t\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tinternal IDictionary LUEmbeddedImages\n\t\t{\n\t\t\tget { return _LUEmbeddedImages; }\n\t\t}\n\n\t\tinternal Subreport Subreport\n\t\t{\n\t\t\tget { return _Subreport; }\n\t\t\tset { _Subreport = value; }\n\t\t}\n\n\t\tinternal bool ContainsSubreport\n\t\t{\n\t\t\tget {return _ContainsSubreport;}\n\t\t\tset {_ContainsSubreport = value;}\n\t\t}\n\n\t\tinternal string OverwriteConnectionString\n\t\t{\n\t\t\tget {return _OverwriteConnectionString;}\n\t\t\tset {_OverwriteConnectionString = value;}\n\t\t}\n\n\t\tinternal bool OverwriteInSubreport\n\t\t{\n\t\t\tget {return _OverwriteInSubreport;}\n\t\t\tset {_OverwriteInSubreport = value;}\n\t\t}\n\n\t\tinternal int ErrorMaxSeverity\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (this.rl == null)\n\t\t\t\t\treturn 0;\n\t\t\t\telse\n\t\t\t\t\treturn rl.MaxSeverity;\n\t\t\t}\n\t\t}\n\n\t\tinternal IList ErrorItems\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (this.rl == null)\n\t\t\t\t\treturn null;\n\t\t\t\telse\n\t\t\t\t\treturn rl.ErrorItems;\n\t\t\t}\n\t\t}\n\n\t\tinternal void ErrorReset()\n\t\t{\n\t\t\tif (this.rl == null)\n\t\t\t\treturn;\n\t\t\trl.Reset();\n\t\t\treturn;\n\t\t}\n\n\t\tprivate bool _disposed = false;\n\n\t\t/// <summary>\n\t\t/// Dispose of resources held by ReportDefn including data sources and embedded images.\n\t\t/// </summary>\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tDispose(true);\n\t\t\tGC.SuppressFinalize(this);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Protected implementation of Dispose pattern.\n\t\t/// </summary>\n\t\t/// <param name=\"disposing\">True if called from Dispose(), false if called from finalizer</param>\n\t\tprotected virtual void Dispose(bool disposing)\n\t\t{\n\t\t\tif (_disposed)\n\t\t\t\treturn;\n\n\t\t\tif (disposing)\n\t\t\t{\n\t\t\t\t// Dispose managed resources\n\t\t\t\tif (_DataSourcesDefn != null)\n\t\t\t\t{\n\t\t\t\t\t_DataSourcesDefn.CleanUp(null);\n\t\t\t\t\t_DataSourcesDefn = null;\n\t\t\t\t}\n\n\t\t\t\t// Clear collections that may hold references to resources\n\t\t\t\tif (_DataCache != null)\n\t\t\t\t{\n\t\t\t\t\t_DataCache.Clear();\n\t\t\t\t\t_DataCache = null;\n\t\t\t\t}\n\n\t\t\t\tif (_LUReportItems != null)\n\t\t\t\t{\n\t\t\t\t\t_LUReportItems.Clear();\n\t\t\t\t\t_LUReportItems = null;\n\t\t\t\t}\n\n\t\t\t\tif (_LUAggrScope != null)\n\t\t\t\t{\n\t\t\t\t\t_LUAggrScope.Clear();\n\t\t\t\t\t_LUAggrScope = null;\n\t\t\t\t}\n\n\t\t\t\tif (_LUEmbeddedImages != null)\n\t\t\t\t{\n\t\t\t\t\t_LUEmbeddedImages.Clear();\n\t\t\t\t\t_LUEmbeddedImages = null;\n\t\t\t\t}\n\n\t\t\t\tif (_LUDynamicNames != null)\n\t\t\t\t{\n\t\t\t\t\t_LUDynamicNames.Clear();\n\t\t\t\t\t_LUDynamicNames = null;\n\t\t\t\t}\n\n\t\t\t\tif (_LUGlobals != null)\n\t\t\t\t{\n\t\t\t\t\t_LUGlobals.Clear();\n\t\t\t\t\t_LUGlobals = null;\n\t\t\t\t}\n\n\t\t\t\tif (_LUUser != null)\n\t\t\t\t{\n\t\t\t\t\t_LUUser.Clear();\n\t\t\t\t\t_LUUser = null;\n\t\t\t\t}\n\n\t\t\t\t// Clear references to other objects\n\t\t\t\t_DataSetsDefn = null;\n\t\t\t\t_Body = null;\n\t\t\t\t_PageHeader = null;\n\t\t\t\t_PageFooter = null;\n\t\t\t\t_EmbeddedImages = null;\n\t\t\t\t_ReportParameters = null;\n\t\t\t\t_Code = null;\n\t\t\t\t_CodeModules = null;\n\t\t\t\t_Classes = null;\n\t\t\t}\n\n\t\t\t_disposed = true;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ReportItem.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\n#else\nusing System.Drawing;\n#endif\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Base class of all display items in a report.  e.g. Textbox, Matrix, Table, ...\n\t///</summary>\n\t[Serializable]\n\tinternal class ReportItem : ReportLink, IComparable\n\t{\n\t\tName _Name;\t\t\t// Name of the report item\n\t\tStyle _Style;\t\t// Style information for the element\n\t\tAction _Action;\t\t// An action (e.g. a hyperlink) associated with\n\t\t\t\t\t\t\t// the ReportItem\n\t\tRSize _Top;\t\t\t// The distance of the item from the top of the\n\t\t\t\t\t\t\t// containing object.\n\t\t\t\t\t\t\t// Defaults to 0 if omitted.\n\t\tRSize _Left;\t\t// The distance of the item from the left of the\n\t\t\t\t\t\t\t// containing object.  Defaults to 0 if omitted.\n\t\tRSize _Height;\t\t// Height of the item. Negative sizes allowed\n\t\t\t\t\t\t\t// only for lines (The height/width gives the\n\t\t\t\t\t\t\t// offset of the endpoint of the line from the start\n\t\t\t\t\t\t\t// point).\n\t\t\t\t\t\t\t//Defaults to the height of the containing object\n\t\t\t\t\t\t\t//minus Top if omitted.\n\t\tRSize _Width;\t\t// Width of the item. Negative sizes allowed\n\t\t\t\t\t\t\t// only for lines.\n\t\t\t\t\t\t\t// Defaults to the width of the containing object\n\t\t\t\t\t\t\t// minus Left if omitted.\n\t\tint _ZIndex;\t\t// Drawing order of the report item within the\n\t\t\t\t\t\t\t// containing object. Items with lower indices\n\t\t\t\t\t\t\t// are drawn first (appearing behind items with\n\t\t\t\t\t\t\t// higher indices). Items with equal indices\n\t\t\t\t\t\t\t// have an unspecified order.\n\t\t\t\t\t\t\t// Default: 0 Min: 0 Max: 2147483647\n\t\tVisibility _Visibility;\t// Indicates if the item should be hidden.\n\t\tExpression _ToolTip;\t// (string) A textual label for the report item. Used for\n\t\t\t\t\t\t\t// such things as including TITLE and ALT\n\t\t\t\t\t\t\t// attributes in HTML reports.\n\t\tExpression _Label;\t// A label to identify an instance of a report item\n\t\t\t\t\t\t\t// (Variant) within the client UI (to provide a user-friendly\n\t\t\t\t\t\t\t// label for searching)\n\t\t\t\t\t\t\t//Hierarchical listing of report item and group\n\t\t\t\t\t\t\t//labels within the UI (the Document Map)\n\t\t\t\t\t\t\t//should reflect the object containment\n\t\t\t\t\t\t\t//hierarchy in the report definition. Peer items\n\t\t\t\t\t\t\t//should be listed in left-to-right top-to-bottom\n\t\t\t\t\t\t\t//order.\n\t\t\t\t\t\t\t//If the expression returns null, no item is added\n\t\t\t\t\t\t\t//to the Document Map. Not used for report\n\t\t\t\t\t\t\t//items in the page header or footer.\n\t\tstring _LinkToChild;\t// The name of a report item contained directly\n\t\t\t\t\t\t\t//within this report item that is the target\n\t\t\t\t\t\t\t//location for the Document Map label (if any).\n\t\t\t\t\t\t\t//Ignored if Label is not present. Used only for\n\t\t\t\t\t\t\t//Rectangle.\n\t\tExpression _Bookmark; // (string)A bookmark that can be linked to via a\n\t\t\t\t\t\t\t// Bookmark action\n\t\tstring _RepeatWith;\t// The name of a data region that this report item\n\t\t\t\t\t\t\t// should be repeated with if that data region\n\t\t\t\t\t\t\t// spans multiple pages.\n\t\t\t\t\t\t\t//The data region must be in the same\n\t\t\t\t\t\t\t//ReportItems collection as this ReportItem\n\t\t\t\t\t\t\t//(Since data regions are not allowed in page\n\t\t\t\t\t\t\t//headers/footers, this means RepeatWith will\n\t\t\t\t\t\t\t//be unusable in page headers/footers).\n\t\t\t\t\t\t\t//Not allowed if this report item is a data\n\t\t\t\t\t\t\t//region, subreport or rectangle that contains a\n\t\t\t\t\t\t\t//data region or subreport.\n\t\tCustom _Custom;\t\t// Custom information to be handed to a report\n\t\t\t\t\t\t\t//  output component.\n\t\tstring _DataElementName;\t//The name to use for the data element/attribute\n\t\t\t\t\t\t\t// for this report item.\n\t\t\t\t\t\t\t// Default: Name of the report item\n\t\tDataElementOutputEnum _DataElementOutput;\t// should item appear in data rendering?\n\n\t\tTableCell _TC;\t\t// TableCell- if part of a Table\n\t\tList<ReportItem> _YParents;\t// calculated: when calculating the y position these are the items above it\n\t\tbool _InMatrix;\t\t// true if reportitem is in a matrix\n\t\tinternal ReportItem(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Name=null;\n\t\t\t_Style=null;\n\t\t\t_Action=null;\n\t\t\t_Top=null;\n\t\t\t_Left=null;\n\t\t\t_Height=null;\n\t\t\t_Width=null;\n\t\t\t_ZIndex=0;\n\t\t\t_Visibility=null;\n\t\t\t_ToolTip=null;\n\t\t\t_Label=null;\n\t\t\t_LinkToChild=null;\n\t\t\t_Bookmark=null;\n\t\t\t_RepeatWith=null;\n\t\t\t_Custom=null;\n\t\t\t_DataElementName=null;\n\t\t\t_DataElementOutput=DataElementOutputEnum.Auto;\n\t\t\t// Run thru the attributes\n\t\t\tforeach(XmlAttribute xAttr in xNode.Attributes)\n\t\t\t{\n\t\t\t\tswitch (xAttr.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"name\":\n\t\t\t\t\t\t_Name = new Name(xAttr.Value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinternal bool ReportItemElement(XmlNode xNodeLoop)\n\t\t{\n\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t{\n\t\t\t\tcase \"style\":\n\t\t\t\t\t_Style = new Style(OwnerReport, this, xNodeLoop);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"action\":\n\t\t\t\t\t_Action = new Action(OwnerReport, this, xNodeLoop);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"top\":\n\t\t\t\t\t_Top = new RSize(OwnerReport, xNodeLoop);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"left\":\n\t\t\t\t\t_Left = new RSize(OwnerReport, xNodeLoop);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"height\":\n\t\t\t\t\t_Height = new RSize(OwnerReport, xNodeLoop);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"width\":\n\t\t\t\t\t_Width = new RSize(OwnerReport, xNodeLoop);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"zindex\":\n\t\t\t\t\t_ZIndex = XmlUtil.Integer(xNodeLoop.InnerText);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"visibility\":\n\t\t\t\t\t_Visibility = new Visibility(OwnerReport, this, xNodeLoop);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"tooltip\":\n\t\t\t\t\t_ToolTip = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.String);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"label\":\n\t\t\t\t\t_Label = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.Variant);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"linktochild\":\n\t\t\t\t\t_LinkToChild = xNodeLoop.InnerText;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"bookmark\":\n\t\t\t\t\t_Bookmark = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.String);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"repeatwith\":\n\t\t\t\t\t_RepeatWith = xNodeLoop.InnerText;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"custom\":\n\t\t\t\t\t_Custom = new Custom(OwnerReport, this, xNodeLoop);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"dataelementname\":\n\t\t\t\t\t_DataElementName = xNodeLoop.InnerText;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"dataelementoutput\":\n\t\t\t\t\t_DataElementOutput = Majorsilence.Reporting.Rdl.DataElementOutput.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\tbreak;\n                case \"rd:defaultname\":\n                    break;      // MS tag: we don't use but don't want to generate a warning\n\t\t\t\tdefault:  \n\t\t\t\t\treturn false;\t// Not a report item element\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Style != null)\n                await _Style.FinalPass();\n\t\t\tif (_Action != null)\n                await _Action.FinalPass();\n\t\t\tif (_Visibility != null)\n                await _Visibility.FinalPass();\n\t\t\tif (_ToolTip != null)\n                await _ToolTip.FinalPass();\n\t\t\tif (_Label != null)\n                await _Label.FinalPass();\n\t\t\tif (_Bookmark != null)\n                await _Bookmark.FinalPass();\n\t\t\tif (_Custom != null)\n                await _Custom.FinalPass();\n\n\t\t\tif (Parent.Parent is TableCell)\t// This is part of a table\n\t\t\t{\n\t\t\t\t_TC = Parent.Parent as TableCell;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t_TC = null;\n\t\t\t}\n\n\t\t\t// Determine if ReportItem is defined inside of a Matrix\n\t\t\t_InMatrix = false;\n\t\t\tfor (ReportLink rl = this.Parent; rl != null; rl = rl.Parent)\n\t\t\t{\n\t\t\t\tif (rl is Matrix)\n\t\t\t\t{\n\t\t\t\t\t_InMatrix = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (rl is Table || rl is List || rl is Chart)\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tinternal void PositioningFinalPass(int i, List<ReportItem> items)\n\t\t{\n\t\t\tif (items.Count == 1 || i==0)\t\t// Nothing to do if only one item in list or 1st item in list\n\t\t\t\treturn;\n\n\t\t    int x = this.Left == null? 0: this.Left.Size;\n\t\t\tint w = PositioningWidth(this);\n\t\t\tint right = x + w;\n\t\t\tint y = (this.Top == null? 0: this.Top.Size);\n            if (this is Line)\n            {   // normalize the width\n                if (w < 0)\n                {\n                    x -= w;\n                    w = -w;\n                }\n            }\n\n            this._YParents = new List<ReportItem>();\n            int maxParents = 100;               // heuristic to limit size of parents; otherwise processing in\n                                                //   extreme cases can blow up\n            for (int ti = i-1; ti >= 0 && maxParents > 0; ti--)\n\t\t\t{\n                ReportItem ri = items[ti];\n\n\t\t\t\tint xw = ri.Left == null? 0: ri.Left.Size;\n\t\t\t\tint w2 = PositioningWidth(ri);\n                if (ri is Line)\n                {   // normalize the width\n                    if (w2 < 0)\n                    {\n                        xw -= w2;\n                        w2 = -w2;\n                    }\n                }\n                if (ri.Height == null || ri.Top == null) // if position/height not specified don't use to reposition\n                    continue;\n                if (y < ri.Top.Size + ri.Height.Size)\n                    continue;\n                _YParents.Add(ri);\t\t// X coordinate overlap\n                maxParents--;\n                if (xw <= x && xw + w2 >= x + w &&       // if item above completely covers the report item then it will be pushed down first\n                    maxParents > 30)                      //   and we haven't already set the maxParents.   \n                    maxParents=30;                        //   just add a few more if necessary \n            }\n            //foreach (ReportItem ri in items)\n            //{\n            //    if (ri == this)\n            //        break;\n\n            //    int xw = ri.Left == null ? 0 : ri.Left.Size;\n            //    int w2 = PositioningWidth(ri);\n            //    if (ri is Line)\n            //    {   // normalize the width\n            //        if (w2 < 0)\n            //        {\n            //            xw -= w2;\n            //            w2 = -w2;\n            //        }\n            //    }\n            //    //if (xw > right || x > xw + w2)                    // this allows items to be repositioned only based on what's above them\n            //    //    continue;\n            //    if (ri.Height == null || ri.Top == null)          // if position/height not specified don't use to reposition\n            //        continue;\n            //    if (y < ri.Top.Size + ri.Height.Size)\n            //        continue;\n            //    _YParents.Add(ri);\t\t// X coordinate overlap\n            //}\n\n\t\t\t// Reduce the overhead\n\t\t\tif (this._YParents.Count == 0)\n\t\t\t\tthis._YParents = null;\n\t\t\telse\n                this._YParents.TrimExcess();\n\n\t\t\treturn;\n\t\t}\n\n\t\tint PositioningWidth(ReportItem ri)\n\t\t{\n\t\t\tint w;\n\t\t\tif (ri.Width == null)\n\t\t\t{\n\t\t\t\tif (ri is Table)\n\t\t\t\t{\n\t\t\t\t\tTable t = ri as Table;\n\t\t\t\t\tw = t.WidthInUnits;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tw = int.MaxValue/2;\t// MaxValue/2 is just meant to be a large number (but won't overflow when adding in the x)\n\t\t\t}\n\t\t\telse\n\t\t\t\tw = ri.Width.Size;\n\n\t\t\treturn w;\n\t\t}\n\n        internal virtual Task Run(IPresent ip, Row row)\n        {\n            return Task.CompletedTask;\n        }\n\n        virtual internal Task RunPage(Pages pgs, Row row)\n        {\n            return Task.CompletedTask;\n        }\n\n        internal bool IsTableOrMatrixCell(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = GetWC(rpt);\n\t\t\treturn (_TC != null || wc.MC != null || this._InMatrix);\n\t\t}\n\n\t\tinternal Name Name\n\t\t{\n\t\t\tget { return  _Name; }\n\t\t\tset {  _Name = value; }\n\t\t}\n\n\t\tinternal Style Style\n\t\t{\n\t\t\tget { return  _Style; }\n\t\t\tset {  _Style = value; }\n\t\t}\n\n\t\tinternal Action Action\n\t\t{\n\t\t\tget { return  _Action; }\n\t\t\tset {  _Action = value; }\n\t\t}\n\n\t\tinternal RSize Top\n\t\t{\n\t\t\tget { return  _Top; }\n\t\t\tset {  _Top = value; }\n\t\t}\n\n\t\tinternal RSize Left\n\t\t{\n\t\t\tget { return  _Left; }\n\t\t\tset {  _Left = value; }\n\t\t}\n\n\t\tinternal float LeftCalc(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = GetWC(rpt);\n\t\t\tif (_TC != null || wc.MC != null || _Left == null)\n\t\t\t\treturn 0;\n\t\t\telse\n\t\t\t\treturn _Left.Points;\n\t\t}\n\n\t\tinternal float GetOffsetCalc(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = GetWC(rpt);\n\t\t\tfloat x;\n\t\t\tif (this._TC != null)\t\t\n\t\t\t{\t// must be part of a table\n\t\t\t\tTable t = _TC.OwnerTable;\n\t\t\t\tint colindex = _TC.ColIndex;\n\n\t\t\t\tTableColumn tc;\n\t\t\t\ttc = (TableColumn) (t.TableColumns.Items[colindex]);\n\t\t\t\tx = tc.GetXPosition(rpt);\n\t\t\t}\n\t\t\telse if (wc.MC != null)\n\t\t\t{\t// must be part of a matrix\n\t\t\t\tx = wc.MC.XPosition;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tReportItems ris = this.Parent as ReportItems;\n\t\t\t\tx = ris.GetXOffset(rpt);\n\t\t\t}\n\t\t\t\n\t\t\treturn x;\n\t\t}\n\n\t\tinternal RSize Height\n\t\t{\n\t\t\tget { return  _Height; }\n\t\t\tset {  _Height = value; }\n\t\t}\n\n\t\t// routine returns the height; If not specified go up the owner chain\n\t\t//   to find an appropriate containing object\n\t\tinternal float HeightOrOwnerHeight\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (_Height != null)\n\t\t\t\t\treturn _Height.Points;\n\n\t\t\t\tfloat yloc = this.Top == null? 0: this.Top.Points;\n\n\t\t\t\tfor (ReportLink rl = this.Parent; rl != null; rl = rl.Parent)\n\t\t\t\t{\n\t\t\t\t\tif (rl is ReportItem)\n\t\t\t\t\t{\n\t\t\t\t\t\tReportItem ri = rl as ReportItem;\n\t\t\t\t\t\tif (ri.Height != null)\n\t\t\t\t\t\t\treturn ri.Height.Points - yloc;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (rl is PageHeader)\n\t\t\t\t\t{\n\t\t\t\t\t\tPageHeader ph = rl as PageHeader;\n\t\t\t\t\t\tif (ph.Height != null)\n\t\t\t\t\t\t\treturn ph.Height.Points - yloc;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (rl is PageFooter)\n\t\t\t\t\t{\n\t\t\t\t\t\tPageFooter pf = rl as PageFooter;\n\t\t\t\t\t\tif (pf.Height != null)\n\t\t\t\t\t\t\treturn pf.Height.Points - yloc;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (rl is TableRow)\n\t\t\t\t\t{\n\t\t\t\t\t\tTableRow tr = rl as TableRow;\n\t\t\t\t\t\tif (tr.Height != null)\n\t\t\t\t\t\t\treturn tr.Height.Points - yloc;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (rl is MatrixRow)\n\t\t\t\t\t{\n\t\t\t\t\t\tMatrixRow mr = rl as MatrixRow;\n\t\t\t\t\t\tif (mr.Height != null)\n\t\t\t\t\t\t\treturn mr.Height.Points - yloc;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (rl is Body)\n\t\t\t\t\t{\n\t\t\t\t\t\tBody b = rl as Body;\n\t\t\t\t\t\tif (b.Height != null)\n\t\t\t\t\t\t\treturn b.Height.Points - yloc;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn OwnerReport.PageHeight.Points;\n\t\t\t}\n\t\t}\n\t\t\n\t\tinternal async Task<bool> IsHidden(Report rpt, Row r)\n\t\t{\n\t\t\tif (this._Visibility == null)\n\t\t\t\treturn false;\n\t\t\treturn await _Visibility.IsHidden(rpt, r);\n\t\t}\n\n\t\tinternal void SetPageLeft(Report rpt)\n\t\t{\n\t\t\tif (this._TC != null)\t\t\n\t\t\t{\t// must be part of a table\n\t\t\t\tTable t = _TC.OwnerTable;\n\t\t\t\tint colindex = _TC.ColIndex;\n\t\t\t\tTableColumn tc = (TableColumn) (t.TableColumns.Items[colindex]);\n\t\t\t\tLeft = new RSize(OwnerReport, tc.GetXPosition(rpt).ToString() + \"pt\");\n\t\t\t}\n\t\t\telse if (Left == null)\n\t\t\t\tLeft = new RSize(OwnerReport, \"0pt\");\n\t\t}\n\n\t\tinternal async Task SetPagePositionAndStyle(Report rpt, PageItem pi, Row row)\n\t\t{\n\t\t\tWorkClass wc = GetWC(rpt);\n\t\t\tpi.X = GetOffsetCalc(rpt) + LeftCalc(rpt);\n\t\t\tif (this._TC != null)\t\t\n\t\t\t{\t// must be part of a table\n\t\t\t\tTable t = _TC.OwnerTable;\n\t\t\t\tint colindex = _TC.ColIndex;\n\n\t\t\t\t// Calculate width: add up all columns within the column span\n\t\t\t\tfloat width=0;\n\t\t\t\tTableColumn tc;\n\t\t\t\tfor (int ci=colindex; ci < colindex + _TC.ColSpan; ci++)\n\t\t\t\t{\n\t\t\t\t\ttc = (TableColumn) (t.TableColumns.Items[ci]);\n\t\t\t\t\twidth += tc.Width.Points;\n\t\t\t\t}\n\t\t\t\tpi.W = width;\n\t\t\t\tpi.Y = 0;\n\n\t\t\t\tTableRow tr = (TableRow) (_TC.Parent.Parent);\n\t\t\t\tpi.H = tr.HeightCalc(rpt);\t// this is a cached item; note tr.HeightOfRow must already be called on row\n\t\t\t}\n\t\t\telse if (wc.MC != null)\n\t\t\t{\t// must be part of a matrix\n\t\t\t\tpi.W = wc.MC.Width;\n\t\t\t\tpi.Y = 0;\n\t\t\t\tpi.H = wc.MC.Height;\n\t\t\t}\n            else if (pi is PageLine)\n            {   // don't really handle if line is part of table???  TODO\n                PageLine pl = (PageLine) pi;\n                if (Top != null)\n                    pl.Y = this.Gap(rpt);\t\t //  y will get adjusted when pageitem added to page\n                float y2 = pl.Y;\n                if (Height != null)\n                    y2 += Height.Points;\n                pl.Y2 = y2;\n                pl.X2 = pl.X;\n                if (Width != null)\n                    pl.X2 += Width.Points;\n            }\n            else\n            {\t// not part of a table or matrix\n                if (Top != null)\n                    pi.Y = this.Gap(rpt);\t\t //  y will get adjusted when pageitem added to page\n                if (Height != null)\n                    pi.H = Height.Points;\n                else\n                    pi.H = this.HeightOrOwnerHeight;\n                if (Width != null)\n                    pi.W = Width.Points;\n                else\n                    pi.W = this.WidthOrOwnerWidth(rpt);\n            }\n\t\t\tif (Style != null)\n\t\t\t\tpi.SI = await Style.GetStyleInfo(rpt, row);\n\t\t\telse\n\t\t\t\tpi.SI = new StyleInfo();\t// this will just default everything\n\n            pi.ZIndex = this.ZIndex;        // retain the zindex of the object\n\n\t\t\t// Catch any action needed\n\t\t\tif (this._Action != null)\n\t\t\t{\n\t\t\t\tpi.BookmarkLink = await _Action.BookmarkLinkValue(rpt, row);\n\t\t\t\tpi.HyperLink = await _Action.HyperLinkValue(rpt, row);\n\t\t\t}\n\n            if (this._Bookmark != null)\n                pi.Bookmark = await _Bookmark.EvaluateString(rpt, row);\n\n\t\t\tif (this._ToolTip != null)\n\t\t\t\tpi.Tooltip = await _ToolTip.EvaluateString(rpt, row);\n\t\t}\n\n\t\tinternal MatrixCellEntry GetMC(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = GetWC(rpt);\n\t\t\treturn wc.MC;\n\t\t}\n\n\t\tinternal void SetMC(Report rpt, MatrixCellEntry mce)\n\t\t{\n\t\t\tWorkClass wc = GetWC(rpt);\n\t\t\twc.MC = mce;\n\t\t}\n\n\t\tinternal RSize Width\n\t\t{\n\t\t\tget { return  _Width; }\n\t\t\tset {  _Width = value; }\n\t\t}\n\n\t\tinternal float WidthOrOwnerWidth(Report rpt)\n\t\t{\n\t\t\tif (_Width != null)\n\t\t\t\treturn _Width.Points;\n\t\t\tfloat xloc = this.LeftCalc(rpt);\n\n\t\t\tfor (ReportLink rl = this.Parent; rl != null; rl = rl.Parent)\n\t\t\t{\n\t\t\t\tif (rl is ReportItem)\n\t\t\t\t{\n\t\t\t\t\tReportItem ri = rl as ReportItem;\n\t\t\t\t\tif (ri.Width != null)\n\t\t\t\t\t\treturn ri.Width.Points - xloc;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (rl is PageHeader ||\n\t\t\t\t\trl is PageFooter ||\n\t\t\t\t\trl is Body)\n\t\t\t\t{\n\t\t\t\t\treturn OwnerReport.Width.Points - xloc;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn OwnerReport.Width.Points - xloc;\n\t\t}\n\n\t\tinternal int WidthCalc(Report rpt, Graphics g)\n\t\t{\n\t\t\tWorkClass wc = GetWC(rpt);\n\t\t\tint width;\n\t\t\tif (this._TC != null)\n\t\t\t{\t// must be part of a table\n\t\t\t\tTable t = _TC.OwnerTable;\n\t\t\t\tint colindex = _TC.ColIndex;\n\n\t\t\t\t// Calculate width: add up all columns within the column span\n\t\t\t\twidth=0;\n\t\t\t\tTableColumn tc;\n\t\t\t\tfor (int ci=colindex; ci < colindex + _TC.ColSpan; ci++)\n\t\t\t\t{\n\t\t\t\t\ttc = (TableColumn) (t.TableColumns.Items[ci]);\n\t\t\t\t\twidth += tc.Width.PixelsX;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (wc.MC != null)\n\t\t\t{\t// must be part of a matrix\n\t\t\t\twidth = g==null? RSize.PixelsFromPoints(wc.MC.Width): RSize.PixelsFromPoints(g, wc.MC.Width);\n\t\t\t}\n\t\t\telse\n\t\t\t{\t// not part of a table or matrix\n\t\t\t\tif (Width != null)\n\t\t\t\t\twidth = Width.PixelsX;\n\t\t\t\telse\n\t\t\t\t\twidth = RSize.PixelsFromPoints(WidthOrOwnerWidth(rpt));\n\t\t\t}\n\t\t\treturn width;\n\t\t}\n\n\t\tinternal Page RunPageNew(Pages pgs, Page p)\n\t\t{\n\t\t\tif (p.IsEmpty())\t\t\t// if the page is empty it won't help to create another one\n\t\t\t\treturn p;\n\n\t\t\t// Do we need a new page or have should we fill out more body columns\n\t\t\tBody b = OwnerReport.Body;\n\t\t\tint ccol = b.IncrCurrentColumn(pgs.Report);\t// bump to next column\n\n\t\t\tfloat top = OwnerReport.TopOfPage;\t// calc top of page\n\n\t\t\tif (ccol < b.Columns)\n\t\t\t{\t\t// Stay on same page but move to new column\n\t\t\t\tp.XOffset = \n\t\t\t\t\t((OwnerReport.Width.Points + b.ColumnSpacing.Points) * ccol);\n\t\t\t\tp.YOffset = top;\n\t\t\t\tp.SetEmpty();\t\t\t// consider this page empty\n\t\t\t}\n\t\t\telse\n\t\t\t{\t\t// Go to new page\n\t\t\t\tb.SetCurrentColumn(pgs.Report, 0);\n\t\t\t\tpgs.NextOrNew();\n\t\t\t\tp = pgs.CurrentPage;\n\t\t\t\tp.YOffset = top;\n\t\t\t\tp.XOffset = 0;\n\t\t\t}\n\n\t\t\treturn p;\n\t\t}\n\t\t\n\t\t/// <summary>\n\t\t/// Updates the current page and location based on the ReportItems \n\t\t/// that are above it in the report.\n\t\t/// </summary>\n\t\t/// <param name=\"pgs\"></param>\n\t\tinternal void SetPagePositionBegin(Pages pgs)\n\t\t{\n\t\t\t// Update the current page\n\t\t\tif (this._YParents != null)\n\t\t\t{\t\n\t\t\t\tReportItem saveri=GetReportItemAbove(pgs.Report);\n\t\t\t\tif (saveri != null)\n\t\t\t\t{\n\t\t\t\t\tWorkClass wc = saveri.GetWC(pgs.Report);\n\t\t\t\t\tpgs.CurrentPage = wc.CurrentPage;\n\t\t\t\t\tpgs.CurrentPage.YOffset = wc.BottomPosition;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (this.Parent.Parent is PageHeader)\n\t\t\t{\n\t\t\t\tpgs.CurrentPage.YOffset = OwnerReport.TopMargin.Points;\n\n\t\t\t}\n\t\t\telse if (this.Parent.Parent is PageFooter)\n\t\t\t{\n\t\t\t\tpgs.CurrentPage.YOffset = OwnerReport.PageHeight.Points \n\t\t\t\t\t- OwnerReport.BottomMargin.Points\n\t\t\t\t\t- OwnerReport.PageFooter.Height.Points;\n\t\t\t}\n\t\t\telse if (!(this.Parent.Parent is Body))\n\t\t\t{\t// if not body then we don't need to do anything\n\t\t\t}\n\t\t\telse if (this.OwnerReport.Subreport != null)\n\t\t\t{\n\t\t\t\t//\t\t\t\tpgs.CurrentPage = this.OwnerReport.Subreport.FirstPage;\n\t\t\t\t//\t\t\t\tpgs.CurrentPage.YOffset = top;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tpgs.CurrentPage =  pgs.FirstPage;\t// if nothing above it (in body) then it goes on first page\n\t\t\t\tpgs.CurrentPage.YOffset = OwnerReport.TopOfPage;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tinternal void SetPagePositionEnd(Pages pgs, float pos)\n\t\t{\n\t\t\tif (_TC != null || _InMatrix)\t\t\t// don't mess with page if part of a table or in a matrix\n\t\t\t\treturn;\n\t\t\tWorkClass wc = GetWC(pgs.Report);\n\t\t\twc.CurrentPage = pgs.CurrentPage;\n\t\t\twc.BottomPosition = pos;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Calculates the runtime y position of the object based on the height of objects \n\t\t/// above it vertically.\n\t\t/// </summary>\n\t\tinternal float Gap(Report rpt)\n\t\t{\n\t\t\tfloat top = _Top == null? 0: _Top.Points;\n\t\t\tReportItem saveri=GetReportItemAbove(rpt);\n\t\t\tif (saveri == null)\n\t\t\t\treturn top;\n\n\t\t\tfloat gap = top;\n            float s_top = saveri.Top == null ? 0 : saveri.Top.Points;\n            float s_h = saveri.Height == null ? 0 : saveri.Height.Points;\n\n            gap -= saveri.Top.Points;\n            if (top < s_top + s_h)          // do we have an overlap;\n                gap = top - (s_top + s_h);    // yes; force overlap even when moving report item down\n            else\n                gap -= saveri.Height.Points;  // no; move report item down just the gap between the items  \n\n\t\t\treturn gap;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Calculates the runtime y position of the object based on the height of objects \n\t\t/// above it vertically.\n\t\t/// </summary>\n\t\tinternal float RelativeY(Report rpt)\n\t\t{\n\t\t\tfloat top = _Top == null? 0: _Top.Points;\n\t\t\tReportItem saveri=GetReportItemAbove(rpt);\n\t\t\tif (saveri == null)\n\t\t\t\treturn top;\n\n\t\t\tfloat gap = top;\n\t\t\tif (saveri.Top != null)\n\t\t\t\tgap -= saveri.Top.Points;\n\t\t\tif (saveri.Height != null)\n\t\t\t\tgap -= saveri.Height.Points;\n\n\t\t\treturn gap;\n\t\t}\n\n\t\tprivate ReportItem GetReportItemAbove(Report rpt)\n\t\t{\n\t\t\tif (this._YParents == null)\n\t\t\t\treturn null;\n\n\t\t\tfloat maxy=float.MinValue;\n\t\t\tReportItem saveri=null;\n\t\t\tint pgno=0;\n\n\t\t\tforeach (ReportItem ri in this._YParents)\n\t\t\t{\n\t\t\t\tif(ri.ZIndex > this.ZIndex)\n\t\t\t\t\tcontinue;\n\t\t\t\tWorkClass wc = ri.GetWC(rpt);\n\t\t\t\tif (wc.BottomPosition.CompareTo(float.NaN) == 0 ||\n\t\t\t\t\twc.CurrentPage == null ||\n\t\t\t\t\tpgno > wc.CurrentPage.PageNumber)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (maxy < wc.BottomPosition || pgno < wc.CurrentPage.PageNumber)\n\t\t\t\t{\n\t\t\t\t\tpgno = wc.CurrentPage.PageNumber;\n\t\t\t\t\tmaxy = wc.BottomPosition;\n\t\t\t\t\tsaveri = ri;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn saveri;\n\t\t}\n\n\t\tinternal int ZIndex\n\t\t{\n\t\t\tget { return  _ZIndex; }\n\t\t\tset {  _ZIndex = value; }\n\t\t}\n\n\t\tinternal Visibility Visibility\n\t\t{\n\t\t\tget { return  _Visibility; }\n\t\t\tset {  _Visibility = value; }\n\t\t}\n\n\t\tinternal Expression ToolTip\n\t\t{\n\t\t\tget { return  _ToolTip; }\n\t\t\tset {  _ToolTip = value; }\n\t\t}\n\n\t\tinternal async Task<string> ToolTipValue(Report rpt, Row r)\n\t\t{\n\t\t\tif (_ToolTip == null)\n\t\t\t\treturn null;\n\n\t\t\treturn await _ToolTip.EvaluateString(rpt, r);\n\t\t}\n\n\t\tinternal Expression Label\n\t\t{\n\t\t\tget { return  _Label; }\n\t\t\tset {  _Label = value; }\n\t\t}\n\n\t\tinternal string LinkToChild\n\t\t{\n\t\t\tget { return  _LinkToChild; }\n\t\t\tset {  _LinkToChild = value; }\n\t\t}\n\n\t\tinternal Expression Bookmark\n\t\t{\n\t\t\tget { return  _Bookmark; }\n\t\t\tset {  _Bookmark = value; }\n\t\t}\n\n\t\tinternal async Task<string> BookmarkValue(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Bookmark == null)\n\t\t\t\treturn null;\n\n\t\t\treturn await _Bookmark.EvaluateString(rpt, r);\n\t\t}\n\n\t\tinternal TableCell TC\n\t\t{\n\t\t\tget {return _TC;}\n\t\t}\n\n\t\tinternal string RepeatWith\n\t\t{\n\t\t\tget { return  _RepeatWith; }\n\t\t\tset {  _RepeatWith = value; }\n\t\t}\n\n\t\tinternal Custom Custom\n\t\t{\n\t\t\tget { return  _Custom; }\n\t\t\tset {  _Custom = value; }\n\t\t}\n\n\t\tinternal string DataElementName\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_DataElementName != null)\n\t\t\t\t\treturn  _DataElementName; \n\t\t\t\telse if (_Name != null)\n\t\t\t\t\treturn _Name.Nm;\n\t\t\t\telse\n\t\t\t\t\treturn null;\n\t\t\t}\n\t\t\tset {  _DataElementName = value; }\n\t\t}\n\n        internal List<ReportItem> YParents\n\t\t{\n\t\t\tget { return this._YParents; }\n\t\t}\n\n\t\tvirtual internal DataElementOutputEnum DataElementOutput\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_DataElementOutput == DataElementOutputEnum.Auto)\n\t\t\t\t{\n\t\t\t\t\tif (this is Textbox)\n\t\t\t\t\t{\n\t\t\t\t\t\tTextbox tb = this as Textbox;\n\t\t\t\t\t\t// HACK: async\n\t\t\t\t\t\tbool isConstant = Task.Run(async () => await tb.Value.IsConstant()).GetAwaiter().GetResult();\n                        if (isConstant)\n\t\t\t\t\t\t\treturn DataElementOutputEnum.NoOutput;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\treturn DataElementOutputEnum.Output;\n\t\t\t\t\t}\n\t\t\t\t\tif (this is Rectangle)\n\t\t\t\t\t\treturn DataElementOutputEnum.ContentsOnly;\n\n\t\t\t\t\treturn DataElementOutputEnum.Output;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\treturn  _DataElementOutput; \n\t\t\t}\n\t\t\tset {  _DataElementOutput = value; }\n\t\t}\n\n        internal bool IsInBody\n        {\n            get { return this.Parent.Parent is Body; }\n        }\n\n\t\tprivate WorkClass GetWC(Report rpt)\n\t\t{\n\t\t\tif (rpt == null)\t\n\t\t\t\treturn new WorkClass();\n\n\t\t\tWorkClass wc = rpt.Cache.Get(this, \"riwc\") as WorkClass;\n\t\t\tif (wc == null)\n\t\t\t{\n\t\t\t\twc = new WorkClass();\n\t\t\t\trpt.Cache.Add(this, \"riwc\", wc);\n\t\t\t}\n\t\t\treturn wc;\n\t\t}\n\n\t\tinternal virtual void RemoveWC(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(this, \"riwc\");\n\t\t}\n\n\t\tclass WorkClass\n\t\t{\n\t\t\tinternal MatrixCellEntry MC;\t// matrix cell entry\n\t\t\tinternal float BottomPosition;\t// used when calculating position of objects below this one.\n\t\t\t\t\t\t\t\t\t\t\t// this must be initialized by the inheriting class.\n\t\t\tinternal Page CurrentPage;\t\t// the page this reportitem was last put on; \n\t\t\tinternal WorkClass()\n\t\t\t{\n\t\t\t\tMC=null;\n\t\t\t\tBottomPosition=float.NaN;\n\t\t\t\tCurrentPage=null;\n\t\t\t}\n\t\t}\n\t\t#region IComparable Members\n\n\t\t// Sort report items based on top down, left to right\n\t\tpublic int CompareTo(object obj)\n\t\t{\n\t\t\tReportItem ri = obj as ReportItem;\n\n\t\t\tint t1 = this.Top == null? 0: this.Top.Size;\n\t\t\tint t2 = ri.Top == null? 0: ri.Top.Size;\n\n\t\t\tint rc = t1 - t2;\n\t\t\tif (rc != 0)\n\t\t\t\treturn rc;\n\n\t\t\tint l1 = this.Left == null? 0: this.Left.Size;\n\t\t\tint l2 = ri.Left == null? 0: ri.Left.Size;\n\n\t\t\treturn l1 - l2;\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ReportItems.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Xml;\nusing System.IO;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Collection of specific reportitems (e.g. TextBoxs, Images, ...)\n\t///</summary>\n\t[Serializable]\n    internal class ReportItems : ReportLink, IEnumerable\n\t{\n\t\tList<ReportItem> _Items;\t\t\t\t// list of report items\n\n\t\tinternal ReportItems(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tReportItem ri;\n            _Items = new List<ReportItem>();\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"rectangle\":\n\t\t\t\t\t\tri = new Rectangle(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"line\":\n\t\t\t\t\t\tri = new Line(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"textbox\":\n\t\t\t\t\t\tri = new Textbox(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image\":\n\t\t\t\t\t\tri = new Image(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subreport\":\n\t\t\t\t\t\tri = new Subreport(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t// DataRegions: list, table, matrix, chart\n\t\t\t\t\tcase \"list\": \n\t\t\t\t\t\tri = new List(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"table\":\n                    case \"grid\":\n                    case \"fyi:grid\":\n                        ri = new Table(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"matrix\": \n\t\t\t\t\t\tri = new Matrix(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"chart\": \n\t\t\t\t\t\tri = new Chart(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"chartexpression\":\t\t// For internal use only \n\t\t\t\t\t\tri = new ChartExpression(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n                    case \"customreportitem\":\n                        ri = new CustomReportItem(r, this, xNodeLoop);\n                        break;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tri=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown ReportItems element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (ri != null)\n\t\t\t\t{\n\t\t\t\t\t_Items.Add(ri);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"At least one item must be in the ReportItems.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\n        internal ReportItem this[int i]\n        {\n            get\n            {\n                return _Items[i];\n            }\n        }\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (ReportItem ri in _Items)\n\t\t\t{\t\t\n\t\t\t\tawait ri.FinalPass(); \n\t\t\t}\n\t\t\t_Items.Sort();\t\t\t\t// sort on ZIndex; y, x (see ReportItem compare routine)\n\n            for (int i = 0; i < _Items.Count; i++)\n            {\n                ReportItem ri = _Items[i];\n                ri.PositioningFinalPass(i, _Items);\n            }\n            //foreach (ReportItem ri in _Items)\t\n            //    ri.PositioningFinalPass(_Items);\n\n\t\t\treturn;\n\t\t}\n\n\t\tinternal async Task Run(IPresent ip, Row row)\n\t\t{\n\t\t\tforeach (ReportItem ri in _Items)\n\t\t\t{\n\t\t\t\tawait ri.Run(ip, row);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tinternal async Task RunPage(Pages pgs, Row row, float xOffset)\n\t\t{\n\t\t\tSetXOffset(pgs.Report, xOffset);\n\t\t\tforeach (ReportItem ri in _Items)\n\t\t\t{\n                await ri.RunPage(pgs, row);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<ReportItem> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\n\t\tinternal float GetXOffset(Report rpt)\n\t\t{\n\t\t\tOFloat of = rpt.Cache.Get(this, \"xoffset\") as OFloat;\n\t\t\treturn of == null? 0: of.f;\n\t\t}\n\n\t\tinternal void SetXOffset(Report rpt, float f)\n\t\t{\n\t\t\tOFloat of = rpt.Cache.Get(this, \"xoffset\") as OFloat;\n\t\t\tif (of == null)\n\t\t\t\trpt.Cache.Add(this, \"xoffset\", new OFloat(f));\n\t\t\telse\n\t\t\t\tof.f = f;\n\t\t}\n\n        #region IEnumerable Members\n\n        public IEnumerator GetEnumerator()\n        {\n            return _Items.GetEnumerator();\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ReportLink.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Linking mechanism defining the tree of the report.\n\t///</summary>\n\t[Serializable]\n\tabstract public class ReportLink\n\t{\n\t\tinternal ReportDefn OwnerReport;\t\t\t// Main Report instance\n\t\tinternal ReportLink Parent;\t\t\t// Parent instance\n\t\tinternal int ObjectNumber;\n\n\t\tinternal ReportLink(ReportDefn r, ReportLink p)\n\t\t{\n\t\t\tOwnerReport = r;\n\t\t\tParent = p;\n\t\t\tObjectNumber = r.GetObjectNumber();\n\t\t}\n\n\t\t// Give opportunity for report elements to do additional work\n\t\t//   e.g.  expressions should be parsed at this point\n\n\t\tvirtual internal Task FinalPass()\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tinternal bool InPageHeaderOrFooter()\n\t\t{\n\t\t\tfor (ReportLink rl = this.Parent; rl != null; rl = rl.Parent)\n\t\t\t{\n\t\t\t\tif (rl is PageHeader || rl is PageFooter)\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ReportLog.cs",
    "content": "\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Xml;\nusing Majorsilence.Reporting.RdlEngine.Resources;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Error logging (parse and runtime) within report.\n\t///</summary>\n\t[Serializable]\n\tinternal class ReportLog\n\t{\n\t\tList<string> _ErrorItems=null;\t\t\t// list of report items\n\t\tint _MaxSeverity=0;\t\t\t\t// maximum severity encountered\t\t\t\t\n\n\t\tinternal ReportLog()\n\t\t{\n\t\t}\n\n\t\tinternal ReportLog(ReportLog rl)\n\t\t{\n\t\t\tif (rl != null && rl.ErrorItems != null)\n\t\t\t{\n\t\t\t\t_MaxSeverity = rl.MaxSeverity;\n                _ErrorItems = new List<string>(rl.ErrorItems);\n\t\t\t}\n\t\t}\n\n\t\tinternal void LogError(ReportLog rl)\n\t\t{\n\t\t\tif (rl.ErrorItems.Count == 0)\n\t\t\t\treturn;\n\t\t\tLogError(rl.MaxSeverity, rl.ErrorItems);\n\t\t}\n\n\t\tinternal void LogError(int severity, string item)\n\t\t{\n\t\t\tif (_ErrorItems == null)\t\t\t// create log if first time\n                _ErrorItems = new List<string>();\n\n\t\t\tif (severity > _MaxSeverity)\n\t\t\t\t_MaxSeverity = severity;\n\n\t\t\tvar msg = Strings.ReportLog_Error_Severity + \": \" + Convert.ToString(severity) + \" - \" + item;\n\n\t\t\t_ErrorItems.Add(msg);\n\n\t\t\tif (severity >= 12)\t\t\n\t\t\t\tthrow new Exception(msg);\t\t// terminate the processing\n\t\t}\n\n\t\tinternal void LogError(int severity, List<string> list)\n\t\t{\n\t\t\tif (_ErrorItems == null)\t\t\t// create log if first time\n                _ErrorItems = new List<string>();\n\n\t\t\tif (severity > _MaxSeverity)\n\t\t\t\t_MaxSeverity = severity;\n\n\t\t\t_ErrorItems.AddRange(list);\n\t\t}\n\n\t\tinternal void Reset()\n\t\t{\n\t\t\t_ErrorItems=null;\n\t\t\tif (_MaxSeverity < 8)\t\t\t\t// we keep the severity to indicate we can't run report\n\t\t\t\t_MaxSeverity=0;\n\t\t}\n\n        internal List<string> ErrorItems\n\t\t{\n\t\t\tget { return  _ErrorItems; }\n\t\t}\n\n\n\t\tinternal int MaxSeverity\n\t\t{\n\t\t\tget { return  _MaxSeverity; }\n\t\t\tset {  _MaxSeverity = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ReportParameter.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Collections;\nusing System.Globalization;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Represent a report parameter (name, default value, runtime value,\n\t///</summary>\n\t[Serializable]\n\tinternal class ReportParameter : ReportLink\n\t{\n\t\tName _Name;\t\t\t// Name of the parameter \n\t\t// Note: Parameter names need only be\n\t\t// unique within the containing Parameters collection\n\t\tTypeCode _dt;\t// The data type of the parameter\n\t\tbool _NumericType=false;\t// true if _dt is a numeric type\n\t\tbool _Nullable;\t\t// Indicates the value for this parameter is allowed to be Null.\n\t\tDefaultValue _DefaultValue;\t\t// Default value to use for the parameter (if not provided by the user)\n\t\t// If no value is provided as a part of the\n\t\t//\t  definition or by the user, the value is\n\t\t// null. Required if there is no Prompt and\n\t\t//  either Nullable is False or a ValidValues\n\t\t// list is provided that does not contain Null\n\t\t// (an omitted Value).\n\t\tbool _AllowBlank;\t// Indicates the value for this parameter is\n\t\t// allowed to be the empty string. Ignored\n\t\t// if DataType is not string.\n\t\tstring _Prompt;\t\t// The user prompt to display when asking\n\t\t// for parameter values\n\t\t// If omitted, the user should not be\n\t\t// prompted for a value for this parameter.\n\t\tValidValues _ValidValues; // Possible values for the parameter (for an\n\t\t//\tend-user prompting interface)\n\t\tbool _Hidden=false;\t\t\t\t\t// indicates parameter should not be showed to user\n\t\tbool _MultiValue=false;\t\t\t\t// indicates parameter is a collection - expressed as 0 based arrays Parameters!p1.Value(0)\n\t\tTrueFalseAutoEnum _UsedInQuery; // Enum True | False | Auto (default)\n\t\t//\tIndicates whether or not the parameter is\n\t\t//\tused in a query in the report. This is\n\t\t//\tneeded to determine if the queries need\n\t\t//\tto be re-executed if the parameter\n\t\t//\tchanges. Auto indicates the\n\t\t//\tUsedInQuery setting should be\n\t\t//\tautodetected as follows: True if the\n\t\t//\tparameter is referenced in any query\n\t\t//\tvalue expression.\t\t\n\t\n\t\tinternal ReportParameter(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Name=null;\n\t\t\t_dt = TypeCode.Object;\n\t\t\t_Nullable = false;\n\t\t\t_DefaultValue=null;\n\t\t\t_AllowBlank=false;\n\t\t\t_Prompt=null;\n\t\t\t_ValidValues=null;\n\t\t\t_UsedInQuery = TrueFalseAutoEnum.Auto;\n\t\t\t// Run thru the attributes\n\t\t\tforeach(XmlAttribute xAttr in xNode.Attributes)\n\t\t\t{\n\t\t\t\tswitch (xAttr.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Name\":\n\t\t\t\t\t\t_Name = new Name(xAttr.Value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"DataType\":\n\t\t\t\t\t\t_dt = DataType.GetStyle(xNodeLoop.InnerText, this.OwnerReport);\n\t\t\t\t\t\t_NumericType = DataType.IsNumeric(_dt);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Nullable\":\n\t\t\t\t\t\t_Nullable = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"DefaultValue\":\n\t\t\t\t\t\t_DefaultValue = new DefaultValue(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"AllowBlank\":\n\t\t\t\t\t\t_AllowBlank = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Prompt\":\n\t\t\t\t\t\t_Prompt = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Hidden\":\n\t\t\t\t\t\t_Hidden = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"ReportParameter element Hidden is currently ignored.\");\t// TODO\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"MultiValue\":\n\t\t\t\t\t\t_MultiValue = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ValidValues\":\n\t\t\t\t\t\t_ValidValues = new ValidValues(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"UsedInQuery\":\n\t\t\t\t\t\t_UsedInQuery = TrueFalseAuto.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown ReportParameter element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Name == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"ReportParameter name is required but not specified.\");\n\n\t\t\tif (_dt == TypeCode.Object)\n\t\t\t\tOwnerReport.rl.LogError(8, string.Format(\"ReportParameter DataType is required but not specified or invalid for {0}.\", _Name==null? \"<unknown name>\": _Name.Nm));\n\t\t}\n\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_DefaultValue != null)\n                await _DefaultValue.FinalPass();\n\t\t\tif (_ValidValues != null)\n                await _ValidValues.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Name Name\n\t\t{\n\t\t\tget { return  _Name; }\n\t\t\tset {  _Name = value; }\n\t\t}\n\n\t\tinternal async Task<object> GetRuntimeValue(Report rpt)\n\t\t{\n\t\t\tobject rtv = rpt == null? null:\n\t\t\t\trpt.Cache.Get(this, \"runtimevalue\");\n\n\t\t\tif (rtv != null)\n\t\t\t\treturn rtv; \n\t\t\tif (_DefaultValue == null)\n\t\t\t\treturn null;\n\t\t\t\t\n\t\t\tobject[] result = await _DefaultValue.GetValue(rpt);\n\t\t\tif (result == null)\n\t\t\t\treturn null;\n\t\t\tobject v = result[0];\n\t\t\tif (v is String && _NumericType)\n\t\t\t\tv = ConvertStringToNumber((string) v);\n\n\t\t\trtv = Convert.ChangeType(v, _dt);\n\t\t\tif (rpt != null)\n\t\t\t\trpt.Cache.Add(this, \"runtimevalue\", rtv);\n\n\t\t\treturn rtv;\n\t\t}\n\n        internal async Task <ArrayList> GetRuntimeValues(Report rpt)\n        {\n            ArrayList rtv = rpt == null ? null :\n                (ArrayList) rpt.Cache.Get(this, \"rtvs\");\n\n            if (rtv != null)\n                return rtv;\n\n            if (_DefaultValue == null)\n                return null;\n\n            object[] result = await _DefaultValue.GetValue(rpt);\n            if (result == null)\n                return null;\n\n            ArrayList ar = new ArrayList(result.Length);\n            foreach (object v in result)\n            {\n                object nv = v;\n                if (nv is String && _NumericType)\n                    nv = ConvertStringToNumber((string)nv);\n\n                ar.Add( Convert.ChangeType(nv, _dt));\n            }\n\n            if (rpt != null)\n                rpt.Cache.Add(this, \"rtvs\", ar);\n\n            return ar;\n        }\n\n\t\tinternal void SetRuntimeValue(Report rpt, object v)\n\t\t{\n            if (this.MultiValue)\n            {   // ok to only set one parameter of multiValue;  but we still save as MultiValue\n                ArrayList ar;\n                if (v is string)\n                {   // when the value is a string we parse it looking for multiple arguments\n                    ParameterLexer pl = new ParameterLexer(v as string);\n                    ar = pl.Lex();\n                }\n                else if (v is ICollection)\n                {   // when collection put it in local array\n                    ar = new ArrayList(v as ICollection);\n                }\n                else\n                {\n                    ar = new ArrayList(1);\n                    ar.Add(v);\n                } \n\n                SetRuntimeValues(rpt, ar);\n                return;\n            }\n\n\t\t\tobject rtv;\n            if (v is Guid)\n            {\n                v = ((Guid)v).ToString(\"B\"); \n            }\n\t\t\tif (!AllowBlank && _dt == TypeCode.String && (string) v == \"\")\n\t\t\t\tthrow new ArgumentException(string.Format(\"Empty string isn't allowed for {0}.\", Name.Nm));\n\t\t\ttry \n\t\t\t{\n\t\t\t\tif (v is String && _NumericType)\n\t\t\t\t\tv = ConvertStringToNumber((string) v);\n\t\t\t\trtv = Convert.ChangeType(v, _dt); \n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\t// illegal parameter passed\n                string err = \"Illegal parameter value for '\" + Name.Nm + \"' provided.  Value =\" + v.ToString();\n                if (rpt == null)\n                    OwnerReport.rl.LogError(4, err);\n                else\n                    rpt.rl.LogError(4, err);\n\t\t\t\tthrow new ArgumentException(string.Format(\"Unable to convert '{0}' to {1} for {2}\", v, _dt, Name.Nm),e);\n\t\t\t}\n\t\t\trpt.Cache.AddReplace(this, \"runtimevalue\", rtv);\n\t\t}\n\n        internal void SetRuntimeValues(Report rpt, ArrayList vs)\n        {\n            if (!this.MultiValue)\n                throw new ArgumentException(string.Format(\"{0} is not a MultiValue parameter. SetRuntimeValues only valid for MultiValue parameters\", this.Name.Nm));\n\n            ArrayList ar = new ArrayList(vs.Count);\n            foreach (object v in vs)\n            {\n                object rtv;\n                if (!AllowBlank && _dt == TypeCode.String && v.ToString() == \"\")\n                {\n                    string err = string.Format(\"Empty string isn't allowed for {0}.\", Name.Nm);\n                    if (rpt == null)\n                        OwnerReport.rl.LogError(4, err);\n                    else\n                        rpt.rl.LogError(4, err);\n                    throw new ArgumentException(err);\n                }\n                try\n                {\n                    object nv = v;\n                    if (nv is String && _NumericType)\n                        nv = ConvertStringToNumber((string)nv);\n                    rtv = Convert.ChangeType(nv, _dt);\n                    ar.Add(rtv);\n                }\n                catch (Exception e)\n                {\n                    // illegal parameter passed\n                    string err = \"Illegal parameter value for '\" + Name.Nm + \"' provided.  Value =\" + v.ToString();\n                    if (rpt == null)\n                        OwnerReport.rl.LogError(4, err);\n                    else\n                        rpt.rl.LogError(4, err);\n                    throw new ArgumentException(string.Format(\"Unable to convert '{0}' to {1} for {2}\", v, _dt, Name.Nm), e);\n                }\n            }\n            rpt.Cache.AddReplace(this, \"rtvs\", ar);\n        }\n\n\t\tprivate object ConvertStringToNumber(string newv)\n\t\t{\n\t\t\t// remove any commas, currency symbols (internationalized)\n\t\t\tNumberFormatInfo nfi = NumberFormatInfo.CurrentInfo;\n\t\t\tif(!String.IsNullOrEmpty(nfi.NumberGroupSeparator))\n\t\t\t\tnewv = newv.Replace(nfi.NumberGroupSeparator, \"\");\n\t\t\tif (!String.IsNullOrEmpty(nfi.CurrencySymbol))\n\t\t\t\tnewv = newv.Replace(nfi.CurrencySymbol, \"\");\n\t\t\treturn newv;\n\t\t}\n\n\t\tinternal TypeCode dt\n\t\t{\n\t\t\tget { return  _dt; }\n\t\t\tset {  _dt = value; }\n\t\t}\n\n\t\tinternal bool Nullable\n\t\t{\n\t\t\tget { return  _Nullable; }\n\t\t\tset {  _Nullable = value; }\n\t\t}\n\t\t\n\t\tinternal bool Hidden\n\t\t{\n\t\t\tget { return  _Hidden; }\n\t\t\tset {  _Hidden = value; }\n\t\t}\n\n\t\tinternal bool MultiValue\n\t\t{\n\t\t\tget { return  _MultiValue; }\n\t\t\tset {  _MultiValue = value; }\n\t\t}\n\n\t\tinternal DefaultValue DefaultValue\n\t\t{\n\t\t\tget { return  _DefaultValue; }\n\t\t\tset {  _DefaultValue = value; }\n\t\t}\n\n\t\tinternal bool AllowBlank\n\t\t{\n\t\t\tget { return  _AllowBlank; }\n\t\t\tset {  _AllowBlank = value; }\n\t\t}\n\n\t\tinternal string Prompt\n\t\t{\n\t\t\tget { return  _Prompt; }\n\t\t\tset {  _Prompt = value; }\n\t\t}\n\n\t\tinternal ValidValues ValidValues\n\t\t{\n\t\t\tget { return  _ValidValues; }\n\t\t\tset {  _ValidValues = value; }\n\t\t}\n\t\t\n\n\t\tinternal TrueFalseAutoEnum UsedInQuery\n\t\t{\n\t\t\tget { return  _UsedInQuery; }\n\t\t\tset {  _UsedInQuery = value; }\n\t\t}\n\t}\n/// <summary>\n/// Public class used to pass user provided report parameters.\n/// </summary>\n\tpublic class UserReportParameter\n\t{\n\t\tReport _rpt;\n\t\tReportParameter _rp;\n\t\tobject[] _DefaultValue;\n\t\tstring[] _DisplayValues;\n\t\tobject[] _DataValues;\n\n\t\tinternal UserReportParameter(Report rpt, ReportParameter rp)\n\t\t{\n\t\t\t_rpt = rpt;\n\t\t\t_rp = rp;\n\t\t}\n\t\t/// <summary>\n\t\t/// Name of the report paramenter.\n\t\t/// </summary>\n\t\tpublic string Name\n\t\t{\n\t\t\tget { return  _rp.Name.Nm; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Type of the report parameter.\n\t\t/// </summary>\n\t\tpublic TypeCode dt\n\t\t{\n\t\t\tget { return  _rp.dt; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Is parameter allowed to be null.\n\t\t/// </summary>\n\t\tpublic bool Nullable\n\t\t{\n\t\t\tget { return  _rp.Nullable; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Default value(s) of the parameter.\n\t\t/// </summary>\n\t\tpublic object[] DefaultValue\n\t\t{\n\t\t\tget \n\t\t\t{ \n\t\t\t\tif (_DefaultValue == null)\n\t\t\t\t{\n\t\t\t\t\tif (_rp.DefaultValue != null)\n\t\t\t\t\t{\n\t\t\t\t\t\t// HACK: async\n\t\t\t\t\t\t_DefaultValue = Task.Run(async () => await _rp.DefaultValue.ValuesCalc(this._rpt)).GetAwaiter().GetResult();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn _DefaultValue;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Is parameter allowed to be the empty string?\n\t\t/// </summary>\n\t\tpublic bool AllowBlank\n\t\t{\n\t\t\tget { return  _rp.AllowBlank; }\n\t\t}\n        /// <summary>\n        /// Does parameters accept multiple values?\n        /// </summary>\n        public bool MultiValue\n        {\n            get { return _rp.MultiValue; }\n        }\n\n\t\t/// <summary>\n\t\t/// Text used to prompt for the parameter.\n\t\t/// </summary>\n\t\tpublic string Prompt\n\t\t{\n\t\t\tget { return  _rp.Prompt; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// The display values for the parameter.  These may differ from the data values.\n\t\t/// </summary>\n\t\tpublic string[] DisplayValues\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_DisplayValues == null)\n\t\t\t\t{\n\t\t\t\t\tif (_rp.ValidValues != null)\n\t\t\t\t\t{\n\t\t\t\t\t\t// HACK: async\n\t\t\t\t\t\t_DisplayValues = Task.Run(async () => await _rp.ValidValues.DisplayValues(_rpt)).GetAwaiter().GetResult();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn  _DisplayValues;\t\t \n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// The data values of the parameter.\n\t\t/// </summary>\n\t\tpublic object[] DataValues\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_DataValues == null)\n\t\t\t\t{\n\t\t\t\t\tif (_rp.ValidValues != null)\n\t\t\t\t\t{\n\t\t\t\t\t\t// HACK: async\n\t\t\t\t\t\t_DataValues = Task.Run(async () => await _rp.ValidValues.DataValues(this._rpt)).GetAwaiter().GetResult();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn  _DataValues;\t\t \n\t\t\t}\n\t\t}\n\n        /// <summary>\n        /// Obtain the data value from a (potentially) display value\n        /// </summary>\n        /// <param name=\"dvalue\">Display value</param>\n        /// <returns>The data value cooresponding to the display value.</returns>\n        private object GetDataValueFromDisplay(object dvalue)\n        {\n            object val = dvalue;\n\n            if (dvalue != null &&\n                DisplayValues != null &&\n                DataValues != null &&\n                DisplayValues.Length == DataValues.Length)\t\t// this should always be true\n            {\t// if display values are provided then we may need to \n                //  use the provided value with a display value and use\n                //  the cooresponding data value\n                string sval = dvalue.ToString();\n                for (int index = 0; index < DisplayValues.Length; index++)\n                {\n                    if (DisplayValues[index].CompareTo(sval) == 0)\n                    {\n                        val = DataValues[index];\n                        break;\n                    }\n                }\n            }\n            return val;\n        }\n\n\t\t/// <summary>\n\t\t/// The runtime value of the parameter.\n\t\t/// Prefer using GetValueAsync() to avoid synchronous blocking on an async call.\n\t\t/// </summary>\n\t\tpublic object Value\n\t\t{\n            get\n            {\n                // HACK: async - synchronous wrapper needed for property getter;\n                // use GetValueAsync() when an async context is available.\n                return Task.Run(async () => await _rp.GetRuntimeValue(this._rpt)).GetAwaiter().GetResult();\n            }\n\t\t\tset \n\t\t\t{\n                if (this.MultiValue && value is string)\n                {   // treat this as a multiValue request\n                    Values = ParseValue(value as string);\n                    return;\n                }\n\n                object dvalue = GetDataValueFromDisplay(value);\n\n                _rp.SetRuntimeValue(_rpt, dvalue); \n\t\t\t}\n\t\t}\n\n        /// <summary>\n        /// Asynchronously gets the runtime value of the parameter.\n        /// Prefer this over the synchronous Value getter when an async context is available.\n        /// </summary>\n        public async Task<object> GetValueAsync()\n        {\n            return await _rp.GetRuntimeValue(this._rpt);\n        }\n\n        /// <summary>\n        /// Take a string and parse it into multiple values\n        /// </summary>\n        /// <param name=\"v\"></param>\n        /// <returns></returns>\n        private ArrayList ParseValue(string v)\n        {\n            ParameterLexer pl = new ParameterLexer(v);\n            return pl.Lex();\n        }\n\n        /// <summary>\n        /// The runtime values of the parameter when MultiValue.\n        /// </summary>\n        public ArrayList Values\n        {\n            get { \n\t\t\t\t// HACK: async\n\t\t\t\treturn Task.Run(async () => await _rp.GetRuntimeValues(this._rpt)).GetAwaiter().GetResult(); \n\t\t\t}\n            set\n            {\n                ArrayList ar = new ArrayList(value.Count);\n                foreach (object v in value)\n                {\n                    ar.Add(GetDataValueFromDisplay(v));\n                }\n                _rp.SetRuntimeValues(_rpt, ar);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ReportParameters.cs",
    "content": "\n\nusing System;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.Threading.Tasks;\nusing System.Xml;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Collection of report parameters.\n\t///</summary>\n\t[Serializable]\n\tinternal class ReportParameters : ReportLink, ICollection\n\t{\n\t\tIDictionary _Items;\t\t\t// list of report items\n\n\t\tinternal ReportParameters(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tif (xNode.ChildNodes.Count < 10)\n\t\t\t\t_Items = new ListDictionary( StringComparer.OrdinalIgnoreCase );\t// Hashtable is overkill for small lists\n\t\t\telse\n\t\t\t\t_Items = new Hashtable(xNode.ChildNodes.Count, StringComparer.OrdinalIgnoreCase);\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (string.Equals(xNodeLoop.Name, \"ReportParameter\", StringComparison.InvariantCultureIgnoreCase))\n\t\t\t\t{\n\t\t\t\t\tReportParameter rp = new ReportParameter(r, this, xNodeLoop);\n                    if (rp.Name != null)\n\t\t\t\t\t    _Items.Add(rp.Name.Nm, rp);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown ReportParameters element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t}\n\t\t}\n\t\t\n\t\tinternal async Task SetRuntimeValues(Report rpt, IDictionary parms)\n\t\t{\n\t\t\t// Fill the values to use in the report parameters\n\t\t\tforeach (string pname in parms.Keys)\t// Loop thru the passed parameters\n\t\t\t{\n\t\t\t\tReportParameter rp = (ReportParameter) _Items[pname];\n\t\t\t\tif (rp == null)\n\t\t\t\t{\t// When not found treat it as a warning message\n\t\t\t\t\tif (!pname.StartsWith(\"rs:\"))\t// don't care about report server parameters\n\t\t\t\t\t\trpt.rl.LogError(4, \"Unknown ReportParameter passed '\" + pname + \"' ignored.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n                // Search for the valid values\n                object parmValue = parms[pname];\n                if (parmValue is string && rp.ValidValues != null)\n                {\n                    string[] dvs = await rp.ValidValues.DisplayValues(rpt);\n                    if (dvs != null && dvs.Length > 0)\n                    {\n                        for (int i = 0; i < dvs.Length; i++)\n                        {\n                            if (dvs[i] == (string) parmValue)\n                            {\n                                object[] dv = await rp.ValidValues.DataValues(rpt);\n                                parmValue = dv[i];\n                                break;\n                            }\n                        }\n                    }\n                }\n\t\t\t\trp.SetRuntimeValue(rpt, parmValue);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (ReportParameter rp in _Items.Values)\n\t\t\t{\n                await rp.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tinternal IDictionary Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t\t#region ICollection Members\n\n\t\tpublic bool IsSynchronized\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Items.IsSynchronized;\n\t\t\t}\n\t\t}\n\n\t\tpublic int Count\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Items.Count;\n\t\t\t}\n\t\t}\n\n\t\tpublic void CopyTo(Array array, int index)\n\t\t{\n\t\t\t_Items.CopyTo(array, index);\n\t\t}\n\n\t\tpublic object SyncRoot\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Items.SyncRoot;\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IEnumerable Members\n\n\t\tpublic IEnumerator GetEnumerator()\n\t\t{\n\t\t\treturn _Items.Values.GetEnumerator();\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Row.cs",
    "content": "\n\nusing System;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// A Row in a data set.\n\t///</summary>\n\tinternal class Row\n\t{\n\t\tint _RowNumber;\t\t// Original row #\n\t\tint _Level;\t\t\t// Usually 0; set when row is part of group with ParentGroup (ie recursive hierarchy)\n\t\tGroupEntry _GroupEntry;\t\t//   like level; \n\t\tRows _R;\t\t\t// Owner of row collection\n\t\tobject[] _Data;\t\t// Row of data\n\t\n\t\tinternal Row(Rows r, Row rd)\t\t\t// Constructor that uses existing Row data\n\t\t{\n\t\t\t_R = r;\n\t\t\t_Data = rd.Data;\n\t\t\t_Level = rd.Level;\n\t\t}\n\n\t\tinternal Row(Rows r, int columnCount)\n\t\t{\n\t\t\t_R = r;\n\t\t\t_Data = new object[columnCount];\n\t\t\t_Level=0;\n\t\t}\n\n\t\tinternal object[] Data\n\t\t{\n\t\t\tget { return  _Data; }\n\t\t\tset { _Data = value; }\n\t\t}\n\n\t\tinternal Rows R\n\t\t{\n\t\t\tget { return  _R; }\n\t\t\tset { _R = value; }\n\t\t}\n\n\t\tinternal GroupEntry GroupEntry\n\t\t{\n\t\t\tget { return  _GroupEntry; }\n\t\t\tset {  _GroupEntry = value; }\n\t\t}\n\n\t\tinternal int Level\n\t\t{\n\t\t\tget { return  _Level; }\n\t\t\tset {  _Level = value; }\n\t\t}\n\n\t\tinternal int RowNumber\n\t\t{\n\t\t\tget { return  _RowNumber; }\n\t\t\tset {  _RowNumber = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/RowGrouping.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Matrix row grouping definition.\n\t///</summary>\n\t[Serializable]\n\tinternal class RowGrouping : ReportLink\n\t{\n\t\tRSize _Width;\t// Width of the row header\n\t\tDynamicRows _DynamicRows;\t// Dynamic row headings for this grouping\n\t\tStaticRows _StaticRows;\t// Static row headings for this grouping\t\t\n\t\n\t\tinternal RowGrouping(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Width=null;\n\t\t\t_DynamicRows=null;\n\t\t\t_StaticRows=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Width\":\n\t\t\t\t\t\t_Width = new RSize(r, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"DynamicRows\":\n\t\t\t\t\t\t_DynamicRows = new DynamicRows(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"StaticRows\":\n\t\t\t\t\t\t_StaticRows = new StaticRows(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown RowGrouping element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Width == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"RowGrouping requires the Width element.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_DynamicRows != null)\n                await _DynamicRows.FinalPass();\n\t\t\tif (_StaticRows != null)\n                await _StaticRows.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal RSize Width\n\t\t{\n\t\t\tget { return  _Width; }\n\t\t\tset {  _Width = value; }\n\t\t}\n\n\t\tinternal DynamicRows DynamicRows\n\t\t{\n\t\t\tget { return  _DynamicRows; }\n\t\t\tset {  _DynamicRows = value; }\n\t\t}\n\n\t\tinternal StaticRows StaticRows\n\t\t{\n\t\t\tget { return  _StaticRows; }\n\t\t\tset {  _StaticRows = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/RowGroupings.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Collection of row groupings.\n\t///</summary>\n\t[Serializable]\n\tinternal class RowGroupings : ReportLink\n\t{\n        List<RowGrouping> _Items;\t\t\t// list of RowGrouping\n\t\tint _StaticCount;\n\n\t\tinternal RowGroupings(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tRowGrouping g;\n            _Items = new List<RowGrouping>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"RowGrouping\":\n\t\t\t\t\t\tg = new RowGrouping(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tg=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown RowGroupings element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (g != null)\n\t\t\t\t\t_Items.Add(g);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For RowGroupings at least one RowGrouping is required.\");\n\t\t\telse\n\t\t\t{\n                _Items.TrimExcess();\n\t\t\t\t_StaticCount = GetStaticCount();\n\t\t\t}\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (RowGrouping g in _Items)\n\t\t\t{\n                await g.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<RowGrouping> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\n\t\tinternal MatrixEntry GetME(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = GetWC(rpt);\n\t\t\treturn wc.ME;\n\t\t}\n\n\t\tinternal void SetME(Report rpt, MatrixEntry me)\n\t\t{\n\t\t\tWorkClass wc = GetWC(rpt);\n\t\t\twc.ME = me;\n\t\t}\n\n\t\tprivate WorkClass GetWC(Report rpt)\n\t\t{\n\t\t\tif (rpt == null)\n\t\t\t\treturn new WorkClass();\n\n\t\t\tWorkClass wc = rpt.Cache.Get(this, \"wc\") as WorkClass;\n\t\t\tif (wc == null)\n\t\t\t{\n\t\t\t\twc = new WorkClass();\n\t\t\t\trpt.Cache.Add(this, \"wc\", wc);\n\t\t\t}\n\t\t\treturn wc;\n\t\t}\n\n\t\tprivate void RemoveWC(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(this, \"wc\");\n\t\t}\n\n\t\tprivate int GetStaticCount()\n\t\t{\n\t\t\t// Find the static column\n\t\t\tforeach (RowGrouping rg in _Items)\n\t\t\t{\n\t\t\t\tif (rg.StaticRows == null)\n\t\t\t\t\tcontinue;\n\t\t\t\treturn rg.StaticRows.Items.Count;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\n\t\tinternal int StaticCount\n\t\t{\n\t\t\tget {return _StaticCount;}\n\t\t}\n\n\t\tclass WorkClass\n\t\t{\n\t\t\tinternal MatrixEntry ME;\t// Used at runtime to contain data values\t\n\t\t\tinternal WorkClass()\n\t\t\t{\n\t\t\t\tME=null;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Rows.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// A collection of rows.\n\t///</summary>\n    internal class Rows : System.Collections.Generic.IComparer<Row>, IDisposable\n\t{\n\t\tList<Row> _Data;\t// array of Row object;\n        List<RowsSortExpression> _SortBy;\t// array of expressions used to sort the data\n\t\tGroupEntry[] _CurrentGroups;\t// group\n\t\tReport _Rpt;\n\n\t\tinternal Rows(Report rpt)\n\t\t{\n\t\t\t_Rpt = rpt;\n\t\t\t_SortBy = null;\n\t\t\t_CurrentGroups = null;\n\t\t}\n\n\t\t// Constructor that takes existing Rows; a start, end and bitArray with the rows wanted\n\t\tinternal Rows(Report rpt, Rows r, int start, int end, BitArray ba)\n\t\t{\n\t\t\t_Rpt = rpt;\n\t\t\t_SortBy = null;\n\t\t\t_CurrentGroups = null;\n\t\t\tif (end - start < 0)\t\t\t// null set?\n\t\t\t{\n\t\t\t\t_Data = new List<Row>(1);\n                _Data.TrimExcess();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_Data = new List<Row>(end - start + 1);\n\n\t\t\tfor (int iRow = start; iRow <= end; iRow++)\n\t\t\t{\n\t\t\t\tif (ba == null || ba.Get(iRow))\n\t\t\t\t{\n\t\t\t\t\tRow or = r.Data[iRow]; \n\t\t\t\t\tRow nr = new Row(this, or);\n\t\t\t\t\tnr.RowNumber = or.RowNumber;\n\t\t\t\t\t_Data.Add(nr);\n\t\t\t\t}\n\t\t\t}\n\n            _Data.TrimExcess();\n\t\t}\n\n\t\t// Constructor that takes existing Rows\n\t\tinternal Rows(Report rpt, Rows r)\n\t\t{\n\t\t\t_Rpt = rpt;\n\t\t\t_SortBy = null;\n\t\t\t_CurrentGroups = null;\n\t\t\tif (r.Data == null || r.Data.Count <= 0)\t\t\t// null set?\n\t\t\t{\n\t\t\t\t_Data = new List<Row>(1);\n                _Data.TrimExcess();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_Data = new List<Row>(r.Data.Count);\n\n\t\t\tfor (int iRow = 0; iRow < r.Data.Count; iRow++)\n\t\t\t{\n\t\t\t\tRow or = r.Data[iRow]; \n\t\t\t\tRow nr = new Row(this, or);\n\t\t\t\tnr.RowNumber = or.RowNumber;\n\t\t\t\t_Data.Add(nr);\n\t\t\t}\n\n            _Data.TrimExcess();\n\t\t}\n\n        // Constructor that creates exactly one row and one column\n        static internal Rows CreateOneRow(Report rpt)\n        {\n            Rows or = new Rows(rpt);\n\n            or._Data = new List<Row>(1);\n            Row nr = new Row(or, 1);\n            nr.RowNumber = 0;\n            or._Data.Add(nr);\n            or._Data.TrimExcess();\n            return or;\n        }\n\n\t\tinternal Rows(Report rpt, TableGroups tg, Grouping g, Sorting s)\n\t\t{\n\t\t\t_Rpt = rpt;\n            _SortBy = new List<RowsSortExpression>();\n\t\t\t// Pull all the sort expression together\n\t\t\tif (tg != null)\n\t\t\t{\n\t\t\t\tforeach(TableGroup t in tg.Items)\n\t\t\t\t{\n\t\t\t\t\tforeach(GroupExpression ge in t.Grouping.GroupExpressions.Items)\n\t\t\t\t\t{\n\t\t\t\t\t\t_SortBy.Add(new RowsSortExpression(ge.Expression));\n\t\t\t\t\t}\n\t\t\t\t\t// TODO what to do with the sort expressions!!!!\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (g != null)\n\t\t\t{\n\t\t\t\tif (g.ParentGroup != null)\n\t\t\t\t\t_SortBy.Add(new RowsSortExpression(g.ParentGroup));\n\t\t\t\telse if (g.GroupExpressions != null)\n\t\t\t\t{\n\t\t\t\t\tforeach (GroupExpression ge in g.GroupExpressions.Items)\n\t\t\t\t\t{\n\t\t\t\t\t\t_SortBy.Add(new RowsSortExpression(ge.Expression));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (s != null)\n\t\t\t{\n\t\t\t\tforeach (SortBy sb in s.Items)\n\t\t\t\t{\n\t\t\t\t\t_SortBy.Add(new RowsSortExpression(sb.SortExpression, sb.Direction == SortDirectionEnum.Ascending));\n\t\t\t\t}\n\t\t\t}\n            if (_SortBy.Count > 0)\n            {\n                _SortBy.TrimExcess();\n            }\n            else\n            {\n                _SortBy = null;\n            }\n\t\t}\n\n\t\tinternal Report Report\n\t\t{\n\t\t\tget {return this._Rpt;}\n\t\t}\n\n\t\tinternal void Sort()\n\t\t{\n\t\t\t// sort the data array by the data.\n\t\t\t_Data.Sort(this);\n\t\t}\n\n\t\tinternal List<Row> Data\n\t\t{\n\t\t\tget { return  _Data; }\n\t\t\tset \n\t\t\t{ \n\t\t\t\t_Data = value;\t\t\t// Assign the new value\n\t\t\t\tforeach(Row r in _Data)\t// Updata all rows\n\t\t\t\t{\n\t\t\t\t\tr.R = this;\n\t\t\t\t}\n\t\t\n\t\t\t}\n\t\t}\n\n        internal List<RowsSortExpression> SortBy\n\t\t{\n\t\t\tget { return  _SortBy; }\n\t\t\tset { _SortBy = value; }\n\t\t}\n\n\t\tinternal GroupEntry[] CurrentGroups\n\t\t{\n\t\t\tget { return  _CurrentGroups; }\n\t\t\tset { _CurrentGroups = value; }\n\t\t}\n\n\t\t#region IComparer Members\n\n\t\tpublic int Compare(Row r1, Row r2)\n\t\t{\n\t\t\tif (r1 == r2)\t\t\t\t// why does the sort routine do this??\n\t\t\t\treturn 0;\n\n\t\t\tobject o1=null,o2=null;\n\t\t\tTypeCode tc = TypeCode.Object;\n\t\t\tint rc;\n\t\t\ttry \n\t\t\t{\n\t\t\t\tforeach (RowsSortExpression se in _SortBy)\n\t\t\t\t{\n\t\t\t\t\t// HACK: async\n\t\t\t\t\to1 = Task.Run(async () => await se.expr.Evaluate(this._Rpt, r1)).GetAwaiter().GetResult();\n\t\t\t\t\to2 = Task.Run(async () => await se.expr.Evaluate(this._Rpt, r2)).GetAwaiter().GetResult();\n\t\t\t\t\ttc = se.expr.GetTypeCode();\n\t\t\t\t\trc = Filter.ApplyCompare(tc, o1, o2);\n\t\t\t\t\tif (rc != 0)\n\t\t\t\t\t\treturn se.bAscending? rc: -rc;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (Exception e)\t\t// this really shouldn't happen\n\t\t\t{\n\t\t\t\t_Rpt.rl.LogError(8, \n                    string.Format(\"Sort rows exception\\r\\nArguments: {0} {1}\\r\\nTypecode: {2}\\r\\n{3}\\r\\n{4}\", \n                    o1, o2, tc.ToString(), e.Message, e.StackTrace));\n\t\t\t}\n\t\t\treturn r1.RowNumber - r2.RowNumber;\t\t// in case of tie use original row number\n\t\t}\n\n\t\t#endregion\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\t_Data.Clear();\n\t\t}\n\t}\n\n\tclass RowsSortExpression\n\t{\n\t\tinternal Expression expr;\n\t\tinternal bool bAscending;\n\n\t\tinternal RowsSortExpression(Expression e, bool asc)\n\t\t{\n\t\t\texpr = e;\n\t\t\tbAscending = asc;\n\t\t}\n\n\t\tinternal RowsSortExpression(Expression e)\n\t\t{\n\t\t\texpr = e;\n\t\t\tbAscending = true;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/SeriesGrouping.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Chart Series grouping (both dynamic and static).\n\t///</summary>\n\t[Serializable]\n\tinternal class SeriesGrouping : ReportLink\n\t{\n\t\tDynamicSeries _DynamicSeries;\t// Dynamic Series headings for this grouping\n\t\tStaticSeries _StaticSeries;\t\t// Static Series headings for this grouping\t\n\t\tStyle _Style;\t\t\t\t\t// border and background properties for series legend itmes and data points\n\t\t\t\t\t\t\t\t\t\t//   when dynamic exprs are evaluated per group instance\n\t\n\t\tinternal SeriesGrouping(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_DynamicSeries=null;\n\t\t\t_StaticSeries=null;\n\t\t\t_Style=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"dynamicseries\":\n\t\t\t\t\t\t_DynamicSeries = new DynamicSeries(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"staticseries\":\n\t\t\t\t\t\t_StaticSeries = new StaticSeries(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"style\":\n\t\t\t\t\t\t_Style = new Style(OwnerReport, this, xNodeLoop);\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Style element in SeriesGrouping is currently ignored.\"); // TODO\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown SeriesGrouping element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_DynamicSeries != null)\n                await _DynamicSeries.FinalPass();\n\t\t\tif (_StaticSeries != null)\n                await _StaticSeries.FinalPass();\n\t\t\tif (_Style != null)\n                await _Style.FinalPass();\n\n\t\t\treturn;\n\t\t}\n\n\t\tinternal DynamicSeries DynamicSeries\n\t\t{\n\t\t\tget { return  _DynamicSeries; }\n\t\t\tset {  _DynamicSeries = value; }\n\t\t}\n\n\t\tinternal StaticSeries StaticSeries\n\t\t{\n\t\t\tget { return  _StaticSeries; }\n\t\t\tset {  _StaticSeries = value; }\n\t\t}\n\n\t\tinternal Style Style\n\t\t{\n\t\t\tget { return  _Style; }\n\t\t\tset {  _Style = value; }\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/SeriesGroupings.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Collection of Chart series groupings.\n\t///</summary>\n\t[Serializable]\n\tinternal class SeriesGroupings : ReportLink\n\t{\n        List<SeriesGrouping> _Items;\t\t\t// list of SeriesGrouping\n\n\t\tinternal SeriesGroupings(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tSeriesGrouping sg;\n            _Items = new List<SeriesGrouping>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"seriesgrouping\":\n\t\t\t\t\t\tsg = new SeriesGrouping(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsg=null;\t\t// don't know what this is\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (sg != null)\n\t\t\t\t\t_Items.Add(sg);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For SeriesGroupings at least one SeriesGrouping is required.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (SeriesGrouping sg in _Items)\n\t\t\t{\n                await sg.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<SeriesGrouping> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/SortBy.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// A single sort expression and direction.\n\t///</summary>\n\t[Serializable]\n\tinternal class SortBy : ReportLink\n\t{\n\t\t\tExpression _SortExpression;\t// (Variant) The expression to sort the groups by.\n\t\t\t\t\t\t// The functions RunningValue and RowNumber\n\t\t\t\t\t\t// are not allowed in SortExpression.\n\t\t\t\t\t\t// References to report items are not allowed.\n\t\t\tSortDirectionEnum _Direction;\t// Indicates the direction of the sort\n\t\t\t\t\t\t\t\t\t\t// Ascending (Default) | Descending\n\t\n\t\tinternal SortBy(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_SortExpression=null;\n\t\t\t_Direction=SortDirectionEnum.Ascending;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"sortexpression\":\n\t\t\t\t\t\t_SortExpression = new Expression(r, this, xNodeLoop, ExpressionType.Variant);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"direction\":\n\t\t\t\t\t\t_Direction = SortDirection.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown SortBy element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_SortExpression == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"SortBy requires the SortExpression element.\");\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_SortExpression != null)\n                await _SortExpression.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Expression SortExpression\n\t\t{\n\t\t\tget { return  _SortExpression; }\n\t\t\tset {  _SortExpression = value; }\n\t\t}\n\n\t\tinternal SortDirectionEnum Direction\n\t\t{\n\t\t\tget { return  _Direction; }\n\t\t\tset {  _Direction = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/SortDirection.cs",
    "content": "\nusing System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Handle sort direction enumeration: ascending, descending.\n\t///</summary>\n\tinternal enum SortDirectionEnum\n\t{\n\t\tAscending,\n\t\tDescending\n\t}\n\tinternal class SortDirection\n\t{\n\t\tstatic internal SortDirectionEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tSortDirectionEnum rs;\n\n\t\t\tswitch (s.ToLowerInvariant())\n\t\t\t{\t\t\n\t\t\t\tcase \"ascending\":\n\t\t\t\t\trs = SortDirectionEnum.Ascending;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"descending\":\n\t\t\t\t\trs = SortDirectionEnum.Descending;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\n\t\t\t\t\trl.LogError(4, \"Unknown SortDirection '\" + s + \"'.  Ascending assumed.\");\n\t\t\t\t\trs = SortDirectionEnum.Ascending;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn rs;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Sorting.cs",
    "content": "\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Collection of sort bys.\n\t///</summary>\n\t[Serializable]\n\tinternal class Sorting : ReportLink\n\t{\n        List<SortBy> _Items;\t\t\t// list of SortBy\n\n\t\tinternal Sorting(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tSortBy s;\n            _Items = new List<SortBy>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"sortby\":\n\t\t\t\t\t\ts = new SortBy(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\ts=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Sorting element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (s != null)\n\t\t\t\t\t_Items.Add(s);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"Sorting requires at least one SortBy be defined.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (SortBy s in _Items)\n\t\t\t{\n                await s.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<SortBy> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/StaticCategories.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Collection of Chart static categories.\n\t///</summary>\n\t[Serializable]\n\tinternal class StaticCategories : ReportLink\n\t{\n        List<StaticMember> _Items;\t\t\t// list of StaticMember\n\n\t\tinternal StaticCategories(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tStaticMember sm;\n            _Items = new List<StaticMember>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"staticmember\":\n\t\t\t\t\t\tsm = new StaticMember(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\t\n\t\t\t\t\t\tsm=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown StaticCategories element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (sm != null)\n\t\t\t\t\t_Items.Add(sm);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For StaticCategories at least one StaticMember is required.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (StaticMember sm in _Items)\n\t\t\t{\n                await sm.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<StaticMember> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/StaticColumn.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Matrix static column definition.\n\t///</summary>\n\t[Serializable]\n\tinternal class StaticColumn : ReportLink\n\t{\n\t\tReportItems _ReportItems;\t// The elements of the column header layout\n\t\t\t\t\t\t// This ReportItems collection must contain exactly\n\t\t\t\t\t\t// one ReportItem. The Top, Left, Height and Width\n\t\t\t\t\t\t// for this ReportItem are ignored. The position is\n\t\t\t\t\t\t// taken to be 0, 0 and the size to be 100%, 100%.\t\t\n\t\n\t\tinternal StaticColumn(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_ReportItems=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"ReportItems\":\n\t\t\t\t\t\t_ReportItems = new ReportItems(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_ReportItems == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"StaticColumn requires the ReportItems element.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_ReportItems != null)\n                await _ReportItems.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal ReportItems ReportItems\n\t\t{\n\t\t\tget { return  _ReportItems; }\n\t\t\tset {  _ReportItems = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/StaticColumns.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Collection of matrix static columns.\n\t///</summary>\n\t[Serializable]\n\tinternal class StaticColumns : ReportLink\n\t{\n        List<StaticColumn> _Items;\t\t\t// list of StaticColumn\n\n\t\tinternal StaticColumns(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tStaticColumn sc;\n            _Items = new List<StaticColumn>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"StaticColumn\":\n\t\t\t\t\t\tsc = new StaticColumn(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tsc=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown StaticColumns element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (sc != null)\n\t\t\t\t\t_Items.Add(sc);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For StaticColumns at least one StaticColumn is required.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (StaticColumn sc in _Items)\n\t\t\t{\n                await sc.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<StaticColumn> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/StaticMember.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Chart static member.\n\t///</summary>\n\t[Serializable]\n\tinternal class StaticMember : ReportLink\n\t{\n\t\tExpression _Label;\t//(Variant) The label for the static member (displayed either on\n\t\t\t\t\t\t\t// the category axis or legend, as appropriate).\t\t\n\t\n\t\tinternal StaticMember(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Label=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"label\":\n\t\t\t\t\t\t_Label = new Expression(r, this, xNodeLoop, ExpressionType.Variant);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Label == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"StaticMember requires the Label element.\");\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Label != null)\n                await _Label.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Expression Label\n\t\t{\n\t\t\tget { return  _Label; }\n\t\t\tset {  _Label = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/StaticRow.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Matrix static row definition.\n\t///</summary>\n\t[Serializable]\n\tinternal class StaticRow : ReportLink\n\t{\n\t\tReportItems _ReportItems;\t// The elements of the row header layout\n\t\t\t\t\t\t\t// This ReportItems collection must contain exactly one\n\t\t\t\t\t\t\t// ReportItem. The Top, Left, Height and Width for this\n\t\t\t\t\t\t\t// ReportItem are ignored. The position is taken to be 0,\n\t\t\t\t\t\t\t// 0 and the size to be 100%, 100%.\t\t\n\t\n\t\tinternal StaticRow(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_ReportItems=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"ReportItems\":\n\t\t\t\t\t\t_ReportItems = new ReportItems(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_ReportItems == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"StaticRow requires the ReportItems element.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_ReportItems != null)\n                await _ReportItems.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal ReportItems ReportItems\n\t\t{\n\t\t\tget { return  _ReportItems; }\n\t\t\tset {  _ReportItems = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/StaticRows.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Collection of matrix static rows.\n\t///</summary>\n\t[Serializable]\n\tinternal class StaticRows : ReportLink\n\t{\n        List<StaticRow> _Items;\t\t\t// list of StaticRow\n\n\t\tinternal StaticRows(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tStaticRow sr;\n            _Items = new List<StaticRow>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"StaticRow\":\n\t\t\t\t\t\tsr = new StaticRow(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tsr=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown StaticRows element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (sr != null)\n\t\t\t\t\t_Items.Add(sr);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For StaticRows at least one StaticRow is required.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (StaticRow r in _Items)\n\t\t\t{\n                await r.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<StaticRow> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/StaticSeries.cs",
    "content": "\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Collection of chart static series.\n\t///</summary>\n\t[Serializable]\n\tinternal class StaticSeries : ReportLink\n\t{\n        List<StaticMember> _Items;\t\t\t// list of StaticMember\n\n\t\tinternal StaticSeries(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tStaticMember sm;\n            _Items = new List<StaticMember>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"staticmember\":\n\t\t\t\t\t\tsm = new StaticMember(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tsm=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown StaticSeries element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (sm != null)\n\t\t\t\t\t_Items.Add(sm);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For StaticSeries at least one StaticMember is required.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (StaticMember sm in _Items)\n\t\t\t{\n                await sm.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<StaticMember> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Style.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.IO;\nusing System.Text;\nusing System.Threading.Tasks;\n\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\nusing Drawing2D = Majorsilence.Drawing.Drawing2D;\n#else\nusing Draw2 = System.Drawing;\nusing Drawing2D = System.Drawing.Drawing2D;\n#endif\nusing System.Globalization;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Style (borders, fonts, background, padding, ...) of a ReportItem.\n\t///</summary>\n\t[Serializable]\n\tinternal class Style : ReportLink\n\t{\n\t\tStyleBorderColor _BorderColor;\t// Color of the border\n\t\tStyleBorderStyle _BorderStyle;\t// Style of the border\n\t\tStyleBorderWidth _BorderWidth;\t// Width of the border\n\t\tExpression _BackgroundColor;\t//(Color) Color of the background\n\t\t// If omitted, the background is transparent\n\t\tExpression _BackgroundGradientType;\t// The type of background gradient\n\t\tExpression _BackgroundGradientEndColor;\t//(Color) End color for the background gradient. If\n\t\t// omitted, there is no gradient.\n\t\tStyleBackgroundImage _BackgroundImage;\t// A background image for the report item.\n\t\t// If omitted, there is no background image.\n\t\tExpression _FontStyle;\t\t// (Enum FontStyle) Font style Default: Normal\n\t\tExpression _FontFamily;\t\t//(string)Name of the font family Default: Arial\n\t\tExpression _FontSize;\t\t//(Size) Point size of the font\n\t\t// Default: 10 pt. Min: 1 pt. Max: 200 pt.\n\t\tExpression _FontWeight;\t\t//(Enum FontWeight) Thickness of the font\n\t\tExpression _Format;\t\t\t//(string) .NET Framework formatting string1\n\t\t//\tNote: Locale-dependent currency\n\t\t//\tformatting (format code �C�) is based on\n\t\t//\tthe language setting for the report item\n\t\t//\tLocale-dependent date formatting is\n\t\t//\tsupported and should be based on the\n\t\t//\tlanguage property of the ReportItem.\n\t\t//\tDefault: No formatting.\n\t\tExpression _TextDecoration;\t// (Enum TextDecoration) Special text formatting Default: none\n\t\tExpression _TextAlign;\t\t// (Enum TextAlign) Horizontal alignment of the text Default: General\n\t\t\n\t\tExpression _VerticalAlign;\t// (Enum VerticalAlign)\tVertical alignment of the text Default: Top\n\t\tExpression _Color;\t\t\t// (Color) The foreground color\tDefault: Black\n\t\tExpression _PaddingLeft;\t// (Size)Padding between the left edge of the\n\t\t// report item and its contents1\n\t\t// Default: 0 pt. Max: 1000 pt.\n\t\tExpression _PaddingRight;\t// (Size) Padding between the right edge of the\n\t\t// report item and its contents\n\t\t// Default: 0 pt. Max: 1000 pt.\n\t\tExpression _PaddingTop;\t\t// (Size) Padding between the top edge of the\n\t\t// report item and its contents\n\t\t// Default: 0 pt. Max: 1000 pt.\n\t\tExpression _PaddingBottom;\t// (Size) Padding between the top edge of the\n\t\t//\treport item and its contents\n\t\t// Default: 0 pt. Max: 1000 pt\n\t\tExpression _LineHeight;\t\t// (Size) Height of a line of text\n\t\t// Default: Report output format determines\n\t\t// line height based on font size\n\t\t// Min: 1 pt. Max: 1000 pt.\n\t\tExpression _Direction;\t\t// (Enum Direction) Indicates whether text is written left-to-right (default)\n\t\t// or right-to-left.\n\t\t// Does not impact the alignment of text\n\t\t// unless using General alignment.\n\t\tExpression _WritingMode;\t// (Enum WritingMode) Indicates whether text is written\n\t\t// horizontally or vertically.\n\t\tExpression _Language;\t\t// (Language) The primary language of the text.\n\t\t// Default is Report.Language.\n\t\tExpression _UnicodeBiDirectional;\t// (Enum UnicodeBiDirection) \n\t\t// Indicates the level of embedding with\n\t\t// respect to the Bi-directional algorithm. Default: normal\n\t\tExpression _Calendar;\t\t// (Enum Calendar)\n\t\t//\tIndicates the calendar to use for\n\t\t//\tformatting dates. Must be compatible in\n\t\t//\t.NET framework with the Language\n\t\t//\tsetting.\n\t\tExpression _NumeralLanguage;\t// (Language) The digit format to use as described by its\n\t\t// primary language. Any language is legal.\n\t\t// Default is the Language property.\n\t\tExpression _NumeralVariant;\t//(Integer) The variant of the digit format to use.\n\t\t// Currently defined values are:\n\t\t// 1: default, follow Unicode context rules\n\t\t// 2: 0123456789\n\t\t// 3: traditional digits for the script as\n\t\t//     defined in GDI+. Currently supported for:\n\t\t//\t\tar | bn | bo | fa | gu | hi | kn | kok | lo | mr |\n\t\t//\t\tms | or | pa | sa | ta | te | th | ur and variants.\n\t\t// 4: ko, ja, zh-CHS, zh-CHT only\n\t\t// 5: ko, ja, zh-CHS, zh-CHT only\n\t\t// 6: ko, ja, zh-CHS, zh-CHT only [Wide\n\t\t//     versions of regular digits]\n\t\t// 7: ko only\n\t\tbool _ConstantStyle;\t\t//  true if all Style elements are constant\n\n\t\tinternal Style(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_BorderColor=null;\n\t\t\t_BorderStyle=null;\n\t\t\t_BorderWidth=null;\n\t\t\t_BackgroundColor=null;\n\t\t\t_BackgroundGradientType=null;\n\t\t\t_BackgroundGradientEndColor=null;\n\t\t\t_BackgroundImage=null;\n\t\t\t_FontStyle=null;\n\t\t\t_FontFamily=null;\n\t\t\t_FontSize=null;\n\t\t\t_FontWeight=null;\n\t\t\t_Format=null;\n\t\t\t_TextDecoration=null;\n\t\t\t_TextAlign=null;\n\t\t\t_VerticalAlign=null;\n\t\t\t_Color=null;\n\t\t\t_PaddingLeft=null;\n\t\t\t_PaddingRight=null;\n\t\t\t_PaddingTop=null;\n\t\t\t_PaddingBottom=null;\n\t\t\t_LineHeight=null;\n\t\t\t_Direction=null;\n\t\t\t_WritingMode=null;\n\t\t\t_Language=null;\n\t\t\t_UnicodeBiDirectional=null;\n\t\t\t_Calendar=null;\n\t\t\t_NumeralLanguage=null;\n\t\t\t_NumeralVariant=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"bordercolor\":\n\t\t\t\t\t\t_BorderColor = new StyleBorderColor(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"borderstyle\":\n\t\t\t\t\t\t_BorderStyle = new StyleBorderStyle(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"borderwidth\":\n\t\t\t\t\t\t_BorderWidth = new StyleBorderWidth(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"backgroundcolor\":\n\t\t\t\t\t\t_BackgroundColor = new Expression(r, this, xNodeLoop, ExpressionType.Color);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"backgroundgradienttype\": \n\t\t\t\t\t\t_BackgroundGradientType = new Expression(r, this, xNodeLoop, ExpressionType.Enum);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"backgroundgradientendcolor\":\n\t\t\t\t\t\t_BackgroundGradientEndColor = new Expression(r, this, xNodeLoop, ExpressionType.Color);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"backgroundimage\":\n\t\t\t\t\t\t_BackgroundImage = new StyleBackgroundImage(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"fontstyle\":\n\t\t\t\t\t\t_FontStyle = new Expression(r, this, xNodeLoop, ExpressionType.Enum);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"fontfamily\":\n\t\t\t\t\t\t_FontFamily = new Expression(r, this, xNodeLoop, ExpressionType.String);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"fontsize\":\n\t\t\t\t\t\t_FontSize = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"fontweight\":\n\t\t\t\t\t\t_FontWeight = new Expression(r, this, xNodeLoop, ExpressionType.Enum);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"format\":\n\t\t\t\t\t\t_Format =  new Expression(r, this, xNodeLoop, ExpressionType.String);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"textdecoration\":\n\t\t\t\t\t\t_TextDecoration = new Expression(r, this, xNodeLoop, ExpressionType.Enum);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"textalign\":\n\t\t\t\t\t\t_TextAlign = new Expression(r, this, xNodeLoop, ExpressionType.Enum);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"verticalalign\":\n\t\t\t\t\t\t_VerticalAlign = new Expression(r, this, xNodeLoop, ExpressionType.Enum);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"color\":\n\t\t\t\t\t\t_Color =  new Expression(r, this, xNodeLoop, ExpressionType.Color);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"paddingleft\":\n\t\t\t\t\t\t_PaddingLeft = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"paddingright\":\n\t\t\t\t\t\t_PaddingRight = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"paddingtop\":\n\t\t\t\t\t\t_PaddingTop =  new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"paddingbottom\":\n\t\t\t\t\t\t_PaddingBottom = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"lineheight\":\n\t\t\t\t\t\t_LineHeight = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"direction\":\n\t\t\t\t\t\t_Direction = new Expression(r, this, xNodeLoop, ExpressionType.Enum);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"writingmode\":\n\t\t\t\t\t\t_WritingMode = new Expression(r, this, xNodeLoop, ExpressionType.Enum);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"language\":\n\t\t\t\t\t\t_Language = new Expression(r, this, xNodeLoop, ExpressionType.Language);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"unicodebidirectional\":\n\t\t\t\t\t\t_UnicodeBiDirectional = new Expression(r, this, xNodeLoop, ExpressionType.Enum);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"calendar\":\n\t\t\t\t\t\t_Calendar = new Expression(r, this, xNodeLoop, ExpressionType.Enum);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"numerallanguage\":\n\t\t\t\t\t\t_NumeralLanguage = new Expression(r, this, xNodeLoop, ExpressionType.Language);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"numeralvariant\":\n\t\t\t\t\t\t_NumeralVariant = new Expression(r, this, xNodeLoop, ExpressionType.Integer);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Style element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_BorderColor != null)\n\t\t\t\tawait _BorderColor.FinalPass();\n\t\t\tif (_BorderStyle != null)\n                await _BorderStyle.FinalPass();\n\t\t\tif (_BorderWidth != null)\n                await _BorderWidth.FinalPass();\n\t\t\tif (_BackgroundColor != null)\n                await _BackgroundColor.FinalPass();\n\t\t\tif (_BackgroundGradientType != null)\n                await _BackgroundGradientType.FinalPass();\n\t\t\tif (_BackgroundGradientEndColor != null)\n                await _BackgroundGradientEndColor.FinalPass();\n\t\t\tif (_BackgroundImage != null)\n                await _BackgroundImage.FinalPass();\n\t\t\tif (_FontStyle != null)\n                await _FontStyle.FinalPass();\n\t\t\tif (_FontFamily != null)\n                await _FontFamily.FinalPass();\n\t\t\tif (_FontSize != null)\n                await _FontSize.FinalPass();\n\t\t\tif (_FontWeight != null)\n                await _FontWeight.FinalPass();\n\t\t\tif (_Format != null)\n                await _Format.FinalPass();\n\t\t\tif (_TextDecoration != null)\n                await _TextDecoration.FinalPass();\n\t\t\tif (_TextAlign != null)\n                await _TextAlign.FinalPass();\n\t\t\tif (_VerticalAlign != null)\n                await _VerticalAlign.FinalPass();\n\t\t\tif (_Color != null)\n                await _Color.FinalPass();\n\t\t\tif (_PaddingLeft != null)\n                await _PaddingLeft.FinalPass();\n\t\t\tif (_PaddingRight != null)\n                await _PaddingRight.FinalPass();\n\t\t\tif (_PaddingTop != null)\n                await _PaddingTop.FinalPass();\n\t\t\tif (_PaddingBottom != null)\n                await _PaddingBottom.FinalPass();\n\t\t\tif (_LineHeight != null)\n                await _LineHeight.FinalPass();\n\t\t\tif (_Direction != null)\n                await _Direction.FinalPass();\n\t\t\tif (_WritingMode != null)\n                await _WritingMode.FinalPass();\n\t\t\tif (_Language != null)\n                await _Language.FinalPass();\n\t\t\tif (_UnicodeBiDirectional != null)\n                await _UnicodeBiDirectional.FinalPass();\n\t\t\tif (_Calendar != null)\n                await _Calendar.FinalPass();\n\t\t\tif (_NumeralLanguage != null)\n                await _NumeralLanguage.FinalPass();\n\t\t\tif (_NumeralVariant != null)\n                await _NumeralVariant.FinalPass();\n\n\t\t\t_ConstantStyle = await this.IsConstant();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal async Task DrawBackground(Report rpt, Draw2.Graphics g, Row r, Draw2.Rectangle rect)\n\t\t{\n\t\t\tDrawing2D.LinearGradientBrush linGrBrush = null;\n\n\t\t\tif (this.BackgroundGradientType != null &&\n\t\t\t\tthis.BackgroundGradientEndColor != null &&\n\t\t\t\tthis.BackgroundColor != null)\n\t\t\t{\n\t\t\t\tstring bgt = await this.BackgroundGradientType.EvaluateString(rpt, r);\n\t\t\t\tstring bgc = await this.BackgroundColor.EvaluateString(rpt, r);\n\t\t\t\t\n\t\t\t\tDraw2.Color c = XmlUtil.ColorFromHtml(bgc, Draw2.Color.White, rpt);\n\n\t\t\t\tstring bgec = await this.BackgroundGradientEndColor.EvaluateString(rpt, r);\n\t\t\t\tDraw2.Color ec = XmlUtil.ColorFromHtml(bgec, Draw2.Color.White, rpt);\n\n\t\t\t\tswitch (bgt)\n\t\t\t\t{\n\t\t\t\t\tcase \"LeftRight\":\n\t\t\t\t\t\tlinGrBrush = new Drawing2D.LinearGradientBrush(rect, c, ec, Drawing2D.LinearGradientMode.Horizontal); \n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"TopBottom\":\n\t\t\t\t\t\tlinGrBrush = new Drawing2D.LinearGradientBrush(rect, c, ec, Drawing2D.LinearGradientMode.Vertical); \n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Center\":\t//??\n\t\t\t\t\t\tlinGrBrush = new Drawing2D.LinearGradientBrush(rect, c, ec, Drawing2D.LinearGradientMode.Horizontal); \n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"DiagonalLeft\":\n\t\t\t\t\t\tlinGrBrush = new Drawing2D.LinearGradientBrush(rect, c, ec, Drawing2D.LinearGradientMode.ForwardDiagonal); \n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"DiagonalRight\":\n\t\t\t\t\t\tlinGrBrush = new Drawing2D.LinearGradientBrush(rect, c, ec, Drawing2D.LinearGradientMode.BackwardDiagonal); \n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"HorizontalCenter\":\n\t\t\t\t\t\tlinGrBrush = new Drawing2D.LinearGradientBrush(rect, c, ec, Drawing2D.LinearGradientMode.Horizontal); \n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"VerticalCenter\":\n\t\t\t\t\t\tlinGrBrush = new Drawing2D.LinearGradientBrush(rect, c, ec, Drawing2D.LinearGradientMode.Vertical); \n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"None\":\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (linGrBrush != null)\n\t\t\t{\n\t\t\t\tg.FillRectangle(linGrBrush, rect);\n\t\t\t\tlinGrBrush.Dispose();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (this.BackgroundColor != null)\n\t\t\t\t{\n\t\t\t\t\tstring bgc = await this.BackgroundColor.EvaluateString(rpt, r);\n\t\t\t\t\tDraw2.Color c = XmlUtil.ColorFromHtml(bgc, Draw2.Color.White, rpt);\n\n\t\t\t\t\tusing (Draw2.SolidBrush sb = new Draw2.SolidBrush(c)) {\n\t\t\t\t\t\tg.FillRectangle(sb, rect);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n \n\t\tinternal async Task DrawBackgroundCircle(Report rpt, Draw2.Graphics g, Row r, Draw2.Rectangle rect)\n\t\t{\n\t\t\t// Don't use the gradient in this case (since it won't match) the rest of the \n\t\t\t//    background.  (Routine is only used by ChartPie in the doughnut case.)\n\t\t\tif (this.BackgroundColor != null)\n\t\t\t{\n\t\t\t\tstring bgc = await this.BackgroundColor.EvaluateString(rpt, r);\n\t\t\t\tDraw2.Color c = XmlUtil.ColorFromHtml(bgc, Draw2.Color.White, rpt);\n\n\t\t\t\tusing (Draw2.SolidBrush sb = new Draw2.SolidBrush(c)) {\n\t\t\t\t\tg.FillEllipse(sb, rect);\n\t\t\t\t\tg.DrawEllipse(Draw2.Pens.Black, rect);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Draw a border using the current style\n\t\tinternal async Task DrawBorder(Report rpt, Draw2.Graphics g, Row r, Draw2.Rectangle rect)\n\t\t{\n\t\t\tif (this.BorderStyle == null)\n\t\t\t\treturn;\n\n\t\t\tStyleBorderStyle bs = this.BorderStyle;\n\n\t\t\t// Create points for each part of rectangular border\n\t\t\tDraw2.Point tl = new Draw2.Point(rect.Left, rect.Top);\n\t\t\tDraw2.Point tr = new Draw2.Point(rect.Right, rect.Top);\n\t\t\tDraw2.Point bl = new Draw2.Point(rect.Left, rect.Bottom);\n\t\t\tDraw2.Point br = new Draw2.Point(rect.Right, rect.Bottom);\n\t\t\t// Determine characteristics for each line to be drawn\n\t\t\tBorderStyleEnum topBS, bottomBS, leftBS, rightBS;\n\t\t\ttopBS = bottomBS = leftBS = rightBS = BorderStyleEnum.None;\n\t\t\tstring v;\t\t\t// temporary work value\n\t\t\tif (BorderStyle != null)\n\t\t\t{\n\t\t\t\tif (BorderStyle.Default != null)\n\t\t\t\t{\n\t\t\t\t\tv = await BorderStyle.Default.EvaluateString(rpt, r);\n\t\t\t\t\ttopBS = bottomBS = leftBS = rightBS = StyleBorderStyle.GetBorderStyle(v, BorderStyleEnum.None);\n\t\t\t\t}\n\t\t\t\tif (BorderStyle.Top != null)\n\t\t\t\t{\n\t\t\t\t\tv = await BorderStyle.Top.EvaluateString(rpt, r);\n\t\t\t\t\ttopBS = StyleBorderStyle.GetBorderStyle(v, topBS);\n\t\t\t\t}\n\t\t\t\tif (BorderStyle.Bottom != null)\n\t\t\t\t{\n\t\t\t\t\tv = await BorderStyle.Bottom.EvaluateString(rpt, r);\n\t\t\t\t\tbottomBS = StyleBorderStyle.GetBorderStyle(v, bottomBS);\n\t\t\t\t}\n\t\t\t\tif (BorderStyle.Left != null)\n\t\t\t\t{\n\t\t\t\t\tv = await BorderStyle.Left.EvaluateString(rpt, r);\n\t\t\t\t\tleftBS = StyleBorderStyle.GetBorderStyle(v, leftBS);\n\t\t\t\t}\n\t\t\t\tif (BorderStyle.Right != null)\n\t\t\t\t{\n\t\t\t\t\tv = await BorderStyle.Right.EvaluateString(rpt, r);\n\t\t\t\t\trightBS = StyleBorderStyle.GetBorderStyle(v, rightBS);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tDraw2.Color topColor, bottomColor, leftColor, rightColor;\n\t\t\ttopColor = bottomColor = leftColor = rightColor = Draw2.Color.Black;\n\t\t\tif (BorderColor != null)\n\t\t\t{\n\t\t\t\tif (BorderColor.Default != null)\n\t\t\t\t{\n\t\t\t\t\tv = await BorderColor.Default.EvaluateString(rpt, r);\n\t\t\t\t\ttopColor = bottomColor = leftColor = rightColor = \n\t\t\t\t\t\tXmlUtil.ColorFromHtml(v, Draw2.Color.Black, rpt);\n\t\t\t\t}\n\t\t\t\tif (BorderColor.Top != null)\n\t\t\t\t{\n\t\t\t\t\tv = await BorderColor.Top.EvaluateString(rpt, r);\n\t\t\t\t\ttopColor = XmlUtil.ColorFromHtml(v, Draw2.Color.Black, rpt);\n\t\t\t\t}\n\t\t\t\tif (BorderColor.Bottom != null)\n\t\t\t\t{\n\t\t\t\t\tv = await BorderColor.Bottom.EvaluateString(rpt, r);\n\t\t\t\t\tbottomColor = XmlUtil.ColorFromHtml(v, Draw2.Color.Black, rpt);\n\t\t\t\t}\n\t\t\t\tif (BorderColor.Left != null)\n\t\t\t\t{\n\t\t\t\t\tv = await BorderColor.Left.EvaluateString(rpt, r);\n\t\t\t\t\tleftColor = XmlUtil.ColorFromHtml(v, Draw2.Color.Black, rpt);\n\t\t\t\t}\n\t\t\t\tif (BorderColor.Right != null)\n\t\t\t\t{\n\t\t\t\t\tv = await BorderColor.Right.EvaluateString(rpt, r);\n\t\t\t\t\trightColor = XmlUtil.ColorFromHtml(v, Draw2.Color.Black, rpt);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tint topWidth, bottomWidth, leftWidth, rightWidth;\n\t\t\ttopWidth = bottomWidth = leftWidth = rightWidth = 1;\n\t\t\tif (BorderWidth != null)\n\t\t\t{\n\t\t\t\tif (BorderWidth.Default != null)\n\t\t\t\t{\n\t\t\t\t\ttopWidth = bottomWidth = leftWidth = rightWidth = (int) new RSize(this.OwnerReport, await BorderWidth.Default.EvaluateString(rpt, r)).PixelsX;\n\t\t\t\t}\n\t\t\t\tif (BorderWidth.Top != null)\n\t\t\t\t{\n\t\t\t\t\ttopWidth = (int) new RSize(this.OwnerReport, await BorderWidth.Top.EvaluateString(rpt, r)).PixelsX;\n\t\t\t\t}\n\t\t\t\tif (BorderWidth.Bottom != null)\n\t\t\t\t{\n\t\t\t\t\tbottomWidth = (int) new RSize(this.OwnerReport, await BorderWidth.Bottom.EvaluateString(rpt, r)).PixelsX;\n\t\t\t\t}\n\t\t\t\tif (BorderWidth.Left != null)\n\t\t\t\t{\n\t\t\t\t\tleftWidth = (int) new RSize(this.OwnerReport, await BorderWidth.Left.EvaluateString(rpt, r)).PixelsY;\n\t\t\t\t}\n\t\t\t\tif (BorderWidth.Right != null)\n\t\t\t\t{\n\t\t\t\t\trightWidth = (int) new RSize(this.OwnerReport, await BorderWidth.Right.EvaluateString(rpt, r)).PixelsY;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// top line\n\t\t\tif (topBS != BorderStyleEnum.None)\n\t\t\t{\n\t\t\t\tusing (Draw2.Brush b = new Draw2.SolidBrush(topColor))\n\t\t\t\tusing (Draw2.Pen p = new Draw2.Pen(b, topWidth))\n\t\t\t\t{\n\t\t\t\t\tDrawBorderDashStyle(p, topBS);\n\t\t\t\t\tg.DrawLine(p, tl, tr);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// right line\n\t\t\tif (rightBS != BorderStyleEnum.None)\n\t\t\t{\n\t\t\t\tusing (Draw2.Brush b = new Draw2.SolidBrush(rightColor))\n\t\t\t\tusing (Draw2.Pen p = new Draw2.Pen(b, rightWidth))\n\t\t\t\t{\n\t\t\t\t\tDrawBorderDashStyle(p, rightBS);\n\t\t\t\t\tg.DrawLine(p, tr, br);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// bottom line\n\t\t\tif (bottomBS != BorderStyleEnum.None)\n\t\t\t{\n\t\t\t\tusing (Draw2.Brush b = new Draw2.SolidBrush(bottomColor))\n\t\t\t\tusing (Draw2.Pen p = new Draw2.Pen(b, bottomWidth))\n\t\t\t\t{\n\t\t\t\t\tDrawBorderDashStyle(p, bottomBS);\n\t\t\t\t\tg.DrawLine(p, br, bl);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// left line\n\t\t\tif (leftBS != BorderStyleEnum.None)\n\t\t\t{\n\t\t\t\tusing (Draw2.Brush b = new Draw2.SolidBrush(leftColor))\n\t\t\t\tusing (Draw2.Pen p = new Draw2.Pen(b, leftWidth))\n\t\t\t\t{\n\t\t\t\t\tDrawBorderDashStyle(p, leftBS);\n\t\t\t\t\tg.DrawLine(p, bl, tl);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprivate void DrawBorderDashStyle(Draw2.Pen p, BorderStyleEnum bs)\n\t\t{\n\t\t\tswitch (bs)\n\t\t\t{\n\t\t\t\tcase BorderStyleEnum.Dashed:\n\t\t\t\t\tp.DashStyle = Drawing2D.DashStyle.Dash;\n\t\t\t\t\tbreak;\n\t\t\t\tcase BorderStyleEnum.Dotted:\n\t\t\t\t\tp.DashStyle = Drawing2D.DashStyle.Dot;\n\t\t\t\t\tbreak;\n\t\t\t\tcase BorderStyleEnum.Double:\n\t\t\t\t\tp.DashStyle = Drawing2D.DashStyle.Solid;\t\t// TODO:\treally need to create custom?\n\t\t\t\t\tbreak;\n\t\t\t\tcase BorderStyleEnum.Groove:\n\t\t\t\t\tp.DashStyle = Drawing2D.DashStyle.Solid;\t\t// TODO:\n\t\t\t\t\tbreak;\n\t\t\t\tcase BorderStyleEnum.Inset:\n\t\t\t\t\tp.DashStyle = Drawing2D.DashStyle.Solid;\t\t// TODO:\n\t\t\t\t\tbreak;\n\t\t\t\tcase BorderStyleEnum.None:\n\t\t\t\t\tp.DashStyle = Drawing2D.DashStyle.Solid;\t\t// only happens for lines\n\t\t\t\t\tbreak;\n\t\t\t\tcase BorderStyleEnum.Outset:\n\t\t\t\t\tp.DashStyle = Drawing2D.DashStyle.Solid;\t\t// TODO:\n\t\t\t\t\tbreak;\n\t\t\t\tcase BorderStyleEnum.Ridge:\n\t\t\t\t\tp.DashStyle = Drawing2D.DashStyle.Solid;\t\t// TODO:\n\t\t\t\t\tbreak;\n\t\t\t\tcase BorderStyleEnum.Solid:\n\t\t\t\t\tp.DashStyle = Drawing2D.DashStyle.Solid;\n\t\t\t\t\tbreak;\n\t\t\t\tcase BorderStyleEnum.WindowInset:\n\t\t\t\t\tp.DashStyle = Drawing2D.DashStyle.Solid;\t\t// TODO:\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tp.DashStyle = Drawing2D.DashStyle.Solid;\t\t// really an error\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Draw a line into the specified graphics object using the current style\n\t\tinternal async Task DrawStyleLine(Report rpt, Draw2.Graphics g, Row r, Draw2.Point s, Draw2.Point e)\n\t\t{\n\t\t\tint width;\n\t\t\tDraw2.Color color;\n\t\t\tBorderStyleEnum bs;\n\n\t\t\t// Border Width default is used for the line width\n\t\t\tif (BorderWidth != null && BorderWidth.Default != null)\n\t\t\t\twidth = (int) new RSize(this.OwnerReport, await BorderWidth.Default.EvaluateString(rpt, r)).PixelsX;\n\t\t\telse\n\t\t\t\twidth = 1;\n\n\t\t\t// Border Color default is used for the line color\n\t\t\tif (BorderColor != null && BorderColor.Default != null)\n\t\t\t{\n\t\t\t\tstring v = await BorderColor.Default.EvaluateString(rpt, r);\n\t\t\t\tcolor = XmlUtil.ColorFromHtml(v, Draw2.Color.Black, rpt);\n\t\t\t}\n\t\t\telse\n\t\t\t\tcolor = Draw2.Color.Black;\n\t\t\t\n\t\t\tif (BorderStyle != null && BorderStyle.Default != null)\n\t\t\t{\n\t\t\t\tstring v = await BorderStyle.Default.EvaluateString(rpt, r);\n\t\t\t\tbs = StyleBorderStyle.GetBorderStyle(v, BorderStyleEnum.None);\n\t\t\t}\n\t\t\telse\n\t\t\t\tbs = BorderStyleEnum.Solid;\n\n\t\t\tusing (var b = new Draw2.SolidBrush(color))\n\t\t\tusing (var p = new Draw2.Pen(b, width))\n\t\t\t{\n\t\t\t\tDrawBorderDashStyle(p, bs);\n\t\t\t\tg.DrawLine(p, s, e);\n\t\t\t}\n\t\t}\n\n\t\t// Draw a string into the specified graphics object using the current style\n\t\t//  information\n\t\tinternal async Task DrawString(Report rpt, Draw2.Graphics g, object o, TypeCode tc, Row r, Draw2.Rectangle rect)\n\t\t{\n\t\t\t// the string to draw\n\t\t\tvar s = await Style.GetFormatedString(rpt, this, r, o, tc);\n\t\t\t\t\n\t\t\tusing (Draw2.Font drawFont = await GetFont(rpt, r)) // Font we'll draw with\n\t\t\tusing (Draw2.Brush drawBrush = await GetBrush(rpt, r)) // Brush we'll draw with\n\t\t\tusing (Draw2.StringFormat drawFormat = await GetStringFormat(rpt, r)) // StringFormat we'll draw with\n\t\t\t{\n\t\t\t\t// Draw string\n\t\t\t\tdrawFormat.FormatFlags |= Draw2.StringFormatFlags.NoWrap;\n\t\t\t\tg.DrawString(s, drawFont, drawBrush, rect, drawFormat);\n\t\t\t}\n\t\t}\n\n\t\tstatic internal void DrawStringDefaults(Draw2.Graphics g, object o, Draw2.Rectangle rect)\n\t\t{\n\t\t\t// Just use defaults to Create font and brush.\n\t\t\tusing (var drawFont = new Draw2.Font(\"Arial\", 10))\n\t\t\tusing (var drawBrush = new Draw2.SolidBrush(Draw2.Color.Black)) \n\t\t\t// Set format of string.\n\t\t\tusing (var drawFormat = new Draw2.StringFormat())\n\t\t\t{\n\t\t\t\tdrawFormat.Alignment = Draw2.StringAlignment.Center;\n\n\t\t\t\t// 06122007AJM Fixed so that long names are written vertically\n\t\t\t\t// need to add w to make slightly bigger\n\t\t\t\tDraw2.SizeF len = g.MeasureString(o.ToString() + \"w\", drawFont);\n\t\t\t\tif (len.Width > rect.Width)\n\t\t\t\t{\n\t\t\t\t\tdrawFormat.FormatFlags = Draw2.StringFormatFlags.DirectionVertical;\n\t\t\t\t\trect = (new Draw2.Rectangle(rect.X, rect.Y, rect.Width, (int)len.Width));\n\t\t\t\t\tdrawFormat.Alignment = Draw2.StringAlignment.Near;\n\t\t\t\t}\n\n\t\t\t\t// Draw string to image\n\t\t\t\tg.DrawString(o.ToString(), drawFont, drawBrush, rect, drawFormat);\n\t\t\t}\n\t\t}\n\n\t\t// Calc size of a string with the specified graphics object using the current style\n\t\t//  information\n\t\tinternal async Task<Draw2.Size> MeasureString(Report rpt, Draw2.Graphics g, object o, TypeCode tc, Row r, int maxWidth)\n\t\t{\n\t\t\tstring s = await Style.GetFormatedString(rpt, this, r, o, tc); // the string to draw\n\n\t\t\tusing (Draw2.Font drawFont = await GetFont(rpt, r)) // Font we'll draw with\n\t\t\tusing (Draw2.StringFormat drawFormat = await GetStringFormat(rpt, r)) // StringFormat we'll draw with\n\t\t\t{\n\t\t\t\t// Measure string\n\t\t\t\tif (maxWidth == int.MaxValue)\n\t\t\t\t\tdrawFormat.FormatFlags |= Draw2.StringFormatFlags.NoWrap;\n\n\t\t\t\t// 06122007AJM need to add w to make slightly bigger\n\t\t\t\tDraw2.SizeF ms = g.MeasureString(s + \"w\", drawFont, maxWidth, drawFormat);\n\t\t\t\treturn new Draw2.Size((int) Math.Ceiling(ms.Width), \n\t\t\t\t\t(int) Math.Ceiling(ms.Height));\n\t\t\t}\n\t\t}\n\n\t\t// Measure a string using the defaults for a Style font\n\t\tstatic internal async Task<Draw2.Size> MeasureStringDefaults(Report rpt, Draw2.Graphics g, object o, TypeCode tc, Row r, int maxWidth)\n\t\t{\n\t\t\tstring s = await Style.GetFormatedString(rpt, null, r, o, tc); // the string to draw\n\n\t\t\tDraw2.Size size = Draw2.Size.Empty;\n\t\t\tusing (Draw2.Font drawFont = new Draw2.Font(\"Arial\", 10)) // Font we'll draw with\n\t\t\tusing (Draw2.StringFormat drawFormat = new Draw2.StringFormat()) // StringFormat we'll draw with\n\t\t\t{\n\t\t\t\tdrawFormat.Alignment = Draw2.StringAlignment.Near;\n\n\t\t\t\t// Measure string\n\t\t\t\tif (maxWidth == int.MaxValue)\n\t\t\t\t\tdrawFormat.FormatFlags |= Draw2.StringFormatFlags.NoWrap;\n                // 06122007AJM need to add w to make slightly bigger\n                Draw2.SizeF ms = g.MeasureString(s + \"w\", drawFont, maxWidth, drawFormat);\n\t\t\t\treturn new Draw2.Size((int) Math.Ceiling(ms.Width), \n\t\t\t\t\t(int) Math.Ceiling(ms.Height));\n\t\t\t}\n\t\t}\n\n\t\tinternal async Task<Draw2.Brush> GetBrush(Report rpt, Row r)\n\t\t{\n\t\t\tDraw2.Brush drawBrush;\n\t\t\t// Get the brush information\n\t\t\tif (this.Color != null)\n\t\t\t{\n\t\t\t\tstring c = await this.Color.EvaluateString(rpt, r);\n\t\t\t\tDraw2.Color color = XmlUtil.ColorFromHtml(c, Draw2.Color.Black, rpt);\n\t\t\t\tdrawBrush = new Draw2.SolidBrush(color);\n\t\t\t}\n\t\t\telse\n\t\t\t\tdrawBrush = new Draw2.SolidBrush(Draw2.Color.Black);\n\t\t\treturn drawBrush;\n\t\t}\n\n\t\tinternal async Task<Draw2.Font> GetFont(Report rpt, Row r)\n\t\t{\n\t\t\t// Get the font information\n\t\t\t// FAMILY\n\t\t\tstring ff;\n\t\t\tif (this.FontFamily != null)\n\t\t\t\tff = await this.FontFamily.EvaluateString(rpt, r);\n\t\t\telse\n\t\t\t\tff = \"Arial\";\n\n\t\t\t// STYLE\n\t\t\tDraw2.FontStyle fs = 0;\n\t\t\tif (this.FontStyle != null)\n\t\t\t{\n\t\t\t\tstring fStyle = await this.FontStyle.EvaluateString(rpt, r);\n\t\t\t\tif (fStyle == \"Italic\")\n\t\t\t\t\tfs |= Draw2.FontStyle.Italic;\n\t\t\t}\n\t\t\tif (this.TextDecoration != null)\n\t\t\t{\n\t\t\t\tstring td = await this.TextDecoration.EvaluateString(rpt, r);\n\t\t\t\tswitch (td)\n\t\t\t\t{\n\t\t\t\t\tcase \"Underline\":\n\t\t\t\t\t\tfs |= Draw2.FontStyle.Underline;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Overline\":\t// Don't support this\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"LineThrough\":\n\t\t\t\t\t\tfs |= Draw2.FontStyle.Strikeout;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"None\":\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// WEIGHT\n\t\t\tif (this.FontWeight != null)\n\t\t\t{\n\t\t\t\tstring weight = await this.FontWeight.EvaluateString(rpt, r);\n\t\t\t\tswitch(weight.ToLower())\n\t\t\t\t{\n\t\t\t\t\tcase \"bold\":\n\t\t\t\t\tcase \"bolder\":\n\t\t\t\t\tcase \"500\":\n\t\t\t\t\tcase \"600\":\n\t\t\t\t\tcase \"700\":\n\t\t\t\t\tcase \"800\":\n\t\t\t\t\tcase \"900\":\n\t\t\t\t\t\tfs |= Draw2.FontStyle.Bold;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t// Nothing to do otherwise since we don't have finer gradations\n\t\t\t\t\tcase \"normal\":\n\t\t\t\t\tcase \"lighter\":\n\t\t\t\t\tcase \"100\":\n\t\t\t\t\tcase \"200\":\n\t\t\t\t\tcase \"300\":\n\t\t\t\t\tcase \"400\":\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// SIZE\n\t\t\tfloat size;\t\t\t// Value is in points\n\t\t\tif (this.FontSize != null)\n\t\t\t{\n\t\t\t\tstring lsize = await this.FontSize.EvaluateString(rpt, r);\n\t\t\t\tRSize rs = new RSize(this.OwnerReport, lsize);\n\t\t\t\tsize = rs.Points;\n\t\t\t}\n\t\t\telse\n\t\t\t\tsize = 10;\n\t\t\t\n\t\t\tDraw2.FontFamily fFamily = StyleInfo.GetFontFamily(ff);\n\t\t\treturn new Draw2.Font(fFamily, size, fs);\n\t\t}\n        \n        internal async Task<Draw2.StringFormat> GetStringFormat(Report rpt, Row r)\n        {\n            return await GetStringFormat(rpt, r, Draw2.StringAlignment.Center);\n        }\n\n\t\tinternal async Task<Draw2.StringFormat> GetStringFormat(Report rpt, Row r, Draw2.StringAlignment defTextAlign)\n\t\t{\n\t\t\t// Set format of string.\n\t\t\tDraw2.StringFormat drawFormat = new Draw2.StringFormat();\n\t\t\t\n\t\t\tif (this.Direction != null)\n\t\t\t{\n\t\t\t\tstring dir = await this.Direction.EvaluateString(rpt, r);\n\t\t\t\tif (dir == \"RTL\")\n\t\t\t\t\tdrawFormat.FormatFlags |= Draw2.StringFormatFlags.DirectionRightToLeft;\n\t\t\t}\n\t\t\tif (this.WritingMode != null)\n\t\t\t{\n\t\t\t\tstring wm = await this.WritingMode.EvaluateString(rpt, r);\n\t\t\t\tif (wm == \"tb-rl\")\n\t\t\t\t\tdrawFormat.FormatFlags |= Draw2.StringFormatFlags.DirectionVertical;\n\t\t\t}\n\n\t\t\tif (this.TextAlign != null)\n\t\t\t{\n\t\t\t\tstring ta = await this.TextAlign.EvaluateString(rpt, r);\n\t\t\t\tswitch (ta.ToLower())\n\t\t\t\t{\n\t\t\t\t\tcase \"left\":\n\t\t\t\t\t\tdrawFormat.Alignment = Draw2.StringAlignment.Near;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\tdrawFormat.Alignment = Draw2.StringAlignment.Far;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"general\":\n                        drawFormat.Alignment = defTextAlign;\n                        break;\n                    case \"center\":\n                    default:\n\t\t\t\t\t\tdrawFormat.Alignment = Draw2.StringAlignment.Center;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t\tdrawFormat.Alignment = defTextAlign;\n\n\t\t\tif (this.VerticalAlign != null)\n\t\t\t{\n\t\t\t\tstring va = await this.VerticalAlign.EvaluateString(rpt, r);\n\t\t\t\tswitch (va.ToLower())\n\t\t\t\t{\n\t\t\t\t\tcase \"top\":\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tdrawFormat.LineAlignment = Draw2.StringAlignment.Near;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"bottom\":\n\t\t\t\t\t\tdrawFormat.LineAlignment = Draw2.StringAlignment.Far;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"middle\":\n\t\t\t\t\t\tdrawFormat.LineAlignment = Draw2.StringAlignment.Center;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t\tdrawFormat.LineAlignment = Draw2.StringAlignment.Near;\n\n\t\t\tdrawFormat.Trimming = Draw2.StringTrimming.None;\n\t\t\treturn drawFormat;\n\t\t}\n\n\t\t// Generate a CSS string from the specified styles\n\t\tinternal async Task<string> GetCSS(Report rpt, Row row, bool bDefaults)\n\t\t{\n\t\t\tWorkClass wc = GetWC(rpt);\n\t\t\tif (wc != null && wc.CssStyle != null)\t// When CssStyle is available; style is a constant\n\t\t\t\treturn wc.CssStyle;\t\t\t\t\t//   The first time called bDefaults will affect all subsequant calls\n\n\t\t\tStringBuilder sb = new StringBuilder();\n\n\t\t\tif (this.Parent is Table || this.Parent is Matrix)\n\t\t\t\tsb.Append(\"border-collapse:collapse;\");\t// collapse the borders\n\n\t\t\tif (_BorderColor != null)\n\t\t\t\tsb.Append(await _BorderColor.GetCSS(rpt, row, bDefaults));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(StyleBorderColor.GetCSSDefaults());\n\n\t\t\tif (_BorderStyle != null)\n\t\t\t\tsb.Append(await _BorderStyle.GetCSS(rpt, row, bDefaults));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(StyleBorderStyle.GetCSSDefaults());\n\n\t\t\tif (_BorderWidth != null)\n\t\t\t\tsb.Append(await _BorderWidth.GetCSS(rpt, row, bDefaults));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(StyleBorderWidth.GetCSSDefaults());\n\n\t\t\tif (_BackgroundColor != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"background-color:{0};\", await _BackgroundColor.EvaluateString(rpt, row));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(\"background-color:transparent;\");\n\n\t\t\tif (_BackgroundImage != null)\n\t\t\t\tsb.Append(await _BackgroundImage.GetCSS(rpt, row, bDefaults));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(StyleBackgroundImage.GetCSSDefaults());\n\n\t\t\tif (_FontStyle != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"font-style:{0};\",await _FontStyle.EvaluateString(rpt, row));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(\"font-style:normal;\");\n\n\t\t\tif (_FontFamily != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"font-family:{0};\",await _FontFamily.EvaluateString(rpt, row));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(\"font-family:Arial;\");\n\n\t\t\tif (_FontSize != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"font-size:{0};\", await _FontSize.EvaluateString(rpt, row));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(\"font-size:10pt;\");\n\n\t\t\tif (_FontWeight != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"font-weight:{0};\",await _FontWeight.EvaluateString(rpt, row));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(\"font-weight:normal;\");\n\n\t\t\tif (_TextDecoration != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"text-decoration:{0};\",await _TextDecoration.EvaluateString(rpt, row));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(\"text-decoration:none;\");\n\n\t\t\tif (_TextAlign != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"text-align:{0};\",await _TextAlign.EvaluateString(rpt, row));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(\"\");\t// no CSS default for text align\n\n\t\t\tif (_VerticalAlign != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"vertical-align:{0};\",await _VerticalAlign.EvaluateString(rpt, row));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(\"vertical-align:top;\");\n\n\t\t\tif (_Color != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"color:{0};\",await _Color.EvaluateString(rpt, row));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(\"color:black;\");\n\n\t\t\tif (_PaddingLeft != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"padding-left:{0};\",await _PaddingLeft.EvaluateString(rpt, row));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(\"padding-left:0pt;\");\n\n\t\t\tif (_PaddingRight != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"padding-right:{0};\",await _PaddingRight.EvaluateString(rpt, row));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(\"padding-right:0pt;\");\n\n\t\t\tif (_PaddingTop != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"padding-top:{0};\",await _PaddingTop.EvaluateString(rpt, row));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(\"padding-top:0pt;\");\n\n\t\t\tif (_PaddingBottom != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"padding-bottom:{0};\",await _PaddingBottom.EvaluateString(rpt, row));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(\"padding-bottom:0pt;\");\n\n\t\t\tif (_LineHeight != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"line-height:{0};\",await _LineHeight.EvaluateString(rpt, row));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(\"line-height:normal;\");\n\n\t\t\tif (this._ConstantStyle)\t\t// We'll only do this work once\n\t\t\t{\t\t\t\t\t\t\t\t//   when all are constant\n\t\t\t\twc.CssStyle = sb.ToString();\n\t\t\t\treturn wc.CssStyle;\n\t\t\t}\n\n\t\t\treturn sb.ToString();\n\t\t}\n\n\t\t// Generate an evaluated version of all the style parameters; used for page processing\n\t\tinternal async Task<StyleInfo> GetStyleInfo(Report rpt, Row r)\n\t\t{\n\t\t\tWorkClass wc = GetWC(rpt);\n\t\t\tif (wc != null && wc.StyleInfo != null)\t\t// When StyleInfo is available; style is a constant\n\t\t\t{\n\t\t\t\treturn (StyleInfo) wc.StyleInfo.Clone();\t// clone it because others can modify it after this\t\t\n\t\t\t}\n\n\t\t\tStyleInfo si = new StyleInfo();\n\n\t\t\tif (this.BorderColor != null)\n\t\t\t{\n\t\t\t\tStyleBorderColor bc = this.BorderColor;\n\t\t\t\tsi.BColorLeft = await bc.EvalLeft(rpt, r);\n\t\t\t\tsi.BColorRight = await bc.EvalRight(rpt, r);\n\t\t\t\tsi.BColorTop = await bc.EvalTop(rpt, r);\n\t\t\t\tsi.BColorBottom = await bc.EvalBottom(rpt, r);\n\t\t\t}\n\n\t\t\tif (this.BorderStyle != null)\n\t\t\t{\n\t\t\t\tStyleBorderStyle bs = this.BorderStyle;\n\t\t\t\tsi.BStyleLeft = await bs.EvalLeft(rpt, r);\n\t\t\t\tsi.BStyleRight = await bs.EvalRight(rpt, r);\n\t\t\t\tsi.BStyleTop = await bs.EvalTop(rpt, r);\n\t\t\t\tsi.BStyleBottom = await bs.EvalBottom(rpt, r);\n\t\t\t}\n\n\t\t\tif (this.BorderWidth != null)\n\t\t\t{\n\t\t\t\tStyleBorderWidth bw = this.BorderWidth;\n\t\t\t\tsi.BWidthLeft = await bw.EvalLeft(rpt, r);\n\t\t\t\tsi.BWidthRight = await bw.EvalRight(rpt, r);\n\t\t\t\tsi.BWidthTop = await bw.EvalTop(rpt, r);\n\t\t\t\tsi.BWidthBottom = await bw.EvalBottom(rpt, r);\n\t\t\t}\n\n\t\t\tsi.BackgroundColor = await this.EvalBackgroundColor(rpt, r);\n\t\t\t// When background color not specified; and reportitem part of table\n\t\t\t//   use the tables background color\n\t\t\tif (si.BackgroundColor == Draw2.Color.Empty)\n\t\t\t{\n\t\t\t\tReportItem ri = this.Parent as ReportItem;\n\t\t\t\tif (ri != null)\n\t\t\t\t{\n\t\t\t\t\tif (ri.TC != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tTable t = ri.TC.OwnerTable;\n\t\t\t\t\t\tif (t.Style != null)\n\t\t\t\t\t\t\tsi.BackgroundColor = await t.Style.EvalBackgroundColor(rpt, r);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tsi.BackgroundGradientType = await this.EvalBackgroundGradientType(rpt, r);\n\t\t\tsi.BackgroundGradientEndColor = await this.EvalBackgroundGradientEndColor(rpt, r);\n\t\t\tif (this._BackgroundImage != null)\n\t\t\t{\n\t\t\t\tsi.BackgroundImage = await _BackgroundImage.GetPageImage(rpt, r);\n\t\t\t}\n\t\t\telse\n\t\t\t\tsi.BackgroundImage = null;\n\n\t\t\tsi.FontStyle = await this.EvalFontStyle(rpt, r);\n\t\t\tsi.FontFamily = await this.EvalFontFamily(rpt, r);\n\t\t\tsi.FontSize = await this.EvalFontSize(rpt, r);\n\t\t\tsi.FontWeight = await this.EvalFontWeight(rpt, r);\n\t\t\tsi._Format = await this.EvalFormat(rpt, r);\t\t\t//(string) .NET Framework formatting string1\n\t\t\tsi.TextDecoration = await this.EvalTextDecoration(rpt, r);\n\t\t\tsi.TextAlign = await this.EvalTextAlign(rpt, r);\n\t\t\tsi.VerticalAlign = await this.EvalVerticalAlign(rpt, r);\n\t\t\tsi.Color = await this.EvalColor(rpt, r);\n\t\t\tsi.PaddingLeft = await this.EvalPaddingLeft(rpt, r);\n\t\t\tsi.PaddingRight = await this.EvalPaddingRight(rpt, r);\n\t\t\tsi.PaddingTop = await this.EvalPaddingTop(rpt, r);\n\t\t\tsi.PaddingBottom = await this.EvalPaddingBottom(rpt, r);\n\t\t\tsi.LineHeight = await this.EvalLineHeight(rpt, r);\n\t\t\tsi.Direction = await this.EvalDirection(rpt, r);\n\t\t\tsi.WritingMode = await this.EvalWritingMode(rpt, r);\n\t\t\tsi.Language = await this.EvalLanguage(rpt, r);\n\t\t\tsi.UnicodeBiDirectional = await this.EvalUnicodeBiDirectional(rpt, r);\n\t\t\tsi.Calendar = await this.EvalCalendar(rpt, r);\n\t\t\tsi.NumeralLanguage = await this.EvalNumeralLanguage(rpt, r);\n\t\t\tsi.NumeralVariant = await this.EvalNumeralVariant(rpt, r);\n\n\t\t\tif (this._ConstantStyle)\t\t// We'll only do this work once\n\t\t\t{\n\t\t\t\twc.StyleInfo = si;\t\t\t//   when all are constant\n\t\t\t\tsi = (StyleInfo) wc.StyleInfo.Clone();\n\t\t\t}\n\n\t\t\treturn si;\n\t\t}\n\n\t\t// Format a string; passed a style but style may be null;\n\t\tstatic internal async Task<string> GetFormatedString(Report rpt, Style s, Row row, object o, TypeCode tc)\n\t\t{\n\t\t\tstring t = null;\n\t\t\tif (o == null)\n\t\t\t\treturn \"\";\n\n\t\t\tstring format = null;\n\t\t\ttry \n\t\t\t{\n                if (s != null && s.Format != null)\n                {\n                    format = await s.Format.EvaluateString(rpt, row);\n                    if (format != null && format.Length > 0)\n                    {\n                        switch (tc)\n                        {\n                            case TypeCode.DateTime:\n                                t = ((DateTime)o).ToString(format);\n                                break;\n                            case TypeCode.Int16:\n                                t = ((short)o).ToString(format);\n                                break;\n                            case TypeCode.UInt16:\n                                t = ((ushort)o).ToString(format);\n                                break;\n                            case TypeCode.Int32:\n                                t = ((int)o).ToString(format);\n                                break;\n                            case TypeCode.UInt32:\n                                t = ((uint)o).ToString(format);\n                                break;\n                            case TypeCode.Int64:\n                                t = ((long)o).ToString(format);\n                                break;\n                            case TypeCode.UInt64:\n                                t = ((ulong)o).ToString(format);\n                                break;\n                            case TypeCode.String:\n                                t = (string)o;\n                                break;\n                            case TypeCode.Decimal:\n                                t = ((decimal)o).ToString(format);\n                                break;\n                            case TypeCode.Single:\n                                t = ((float)o).ToString(format);\n                                break;\n                            case TypeCode.Double:\n                                t = ((double)o).ToString(format);\n                                break;\n                            default:\n\t\t\t\t\t\t\t\tvar formatedMethod = o.GetType().GetMethod(\"ToString\", new Type[] { typeof(string) });\n\t\t\t\t\t\t\t\tif (formatedMethod != null)\n\t\t\t\t\t\t\t\t\tt = (string)formatedMethod.Invoke(o, new object[] { format });\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tt = o.ToString();\n                                break;\n                        }\n                    }\n                    else    \n                        t = o.ToString();       // No format provided\n                }\n                else\n                {   // No style provided\n                    t = o.ToString();\n                }\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\trpt.rl.LogError(1, string.Format(\"Value:{0} Format:{1} exception: {2}\", o, format,\n\t\t\t\t\tex.InnerException != null ? ex.InnerException.Message : ex.Message));\n\t\t\t\tt = o.ToString();       // probably type mismatch from expectation\n\t\t\t}\n\t\t\treturn t;\n\t\t}\n\n\t\tprivate async Task<bool> IsConstant()\n\t\t{\n\t\t\tbool rc = true;\n\n\t\t\tif (_BorderColor != null)\n\t\t\t\trc = await _BorderColor.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_BorderStyle != null)\n\t\t\t\trc = await _BorderStyle.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_BorderWidth != null)\n\t\t\t\trc = await _BorderWidth.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_BackgroundColor != null)\n\t\t\t\trc = await _BackgroundColor.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_BackgroundImage != null)\n\t\t\t\trc = await _BackgroundImage.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_FontStyle != null)\n\t\t\t\trc = await _FontStyle.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_FontFamily != null)\n\t\t\t\trc = await _FontFamily.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_FontSize != null)\n\t\t\t\trc = await _FontSize.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_FontWeight != null)\n\t\t\t\trc = await _FontWeight.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_TextDecoration != null)\n\t\t\t\trc = await _TextDecoration.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_TextAlign != null)\n\t\t\t\trc = await _TextAlign.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_VerticalAlign != null)\n\t\t\t\trc = await _VerticalAlign.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_Color != null)\n\t\t\t\trc = await _Color.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_PaddingLeft != null)\n\t\t\t\trc = await _PaddingLeft.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_PaddingRight != null)\n\t\t\t\trc = await _PaddingRight.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_PaddingTop != null)\n\t\t\t\trc = await _PaddingTop.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_PaddingBottom != null)\n\t\t\t\trc = await _PaddingBottom.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_LineHeight != null)\n\t\t\t\trc = await _LineHeight.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\treturn rc;\n\t\t}\n\n\t\tinternal async Task<Draw2.Rectangle> PaddingAdjust(Report rpt, Row r, Draw2.Rectangle rect, bool bAddIn)\n\t\t{\n\t\t\tint pbottom = await this.EvalPaddingBottomPx(rpt, r);\n\t\t\tint ptop = await this.EvalPaddingTopPx(rpt, r);\n\t\t\tint pleft = await this.EvalPaddingLeftPx(rpt, r);\n\t\t\tint pright = await this.EvalPaddingRightPx(rpt, r);\n\n\t\t\tDraw2.Rectangle rt;\n\t\t\tif (bAddIn)\t\t// add in when trying to size the object\n\t\t\t\trt = new Draw2.Rectangle(rect.Left - pleft, rect.Top - ptop, \n\t\t\t\t\trect.Width + pleft + pright, rect.Height + ptop + pbottom);\n\t\t\telse\t\t\t// otherwise you want the rectangle of the embedded object\n\t\t\t\trt = new Draw2.Rectangle(rect.Left + pleft, rect.Top + ptop, \n\t\t\t\t\trect.Width - pleft - pright, rect.Height - ptop - pbottom);\n\t\t\treturn rt;\n\t\t}\n\n\t\tinternal StyleBorderColor BorderColor\n\t\t{\n\t\t\tget { return  _BorderColor; }\n\t\t\tset {  _BorderColor = value; }\n\t\t}\n\n\t\tinternal StyleBorderStyle BorderStyle\n\t\t{\n\t\t\tget { return  _BorderStyle; }\n\t\t\tset {  _BorderStyle = value; }\n\t\t}\n\n\t\tinternal StyleBorderWidth BorderWidth\n\t\t{\n\t\t\tget { return  _BorderWidth; }\n\t\t\tset {  _BorderWidth = value; }\n\t\t}\n\n\t\tinternal Expression BackgroundColor\n\t\t{\n\t\t\tget { return  _BackgroundColor; }\n\t\t\tset {  _BackgroundColor = value; }\n\t\t}\n\n\t\tinternal async Task<Draw2.Color> EvalBackgroundColor(Report rpt, Row row)\n\t\t{\n\t\t\tif (_BackgroundColor == null)\n\t\t\t\treturn Draw2.Color.Empty;\n\n\t\t\tstring c = await _BackgroundColor.EvaluateString(rpt, row);\n\t\t\treturn XmlUtil.ColorFromHtml(c, Draw2.Color.Empty, rpt);\n\t\t}\n\n\t\tinternal Expression BackgroundGradientType\n\t\t{\n\t\t\tget { return  _BackgroundGradientType; }\n\t\t\tset {  _BackgroundGradientType = value; }\n\t\t}\n\n\t\tinternal async Task<BackgroundGradientTypeEnum> EvalBackgroundGradientType(Report rpt, Row r)\n\t\t{\n\t\t\tif (_BackgroundGradientType == null)\n\t\t\t\treturn BackgroundGradientTypeEnum.None;\n\n\t\t\tstring bgt = await _BackgroundGradientType.EvaluateString(rpt, r);\n\t\t\treturn \tStyleInfo.GetBackgroundGradientType(bgt, BackgroundGradientTypeEnum.None);\n\t\t}\n\n\t\tinternal Expression BackgroundGradientEndColor\n\t\t{\n\t\t\tget { return  _BackgroundGradientEndColor; }\n\t\t\tset {  _BackgroundGradientEndColor = value; }\n\t\t}\n\n\t\tinternal async Task<Draw2.Color> EvalBackgroundGradientEndColor(Report rpt, Row r)\n\t\t{\n\t\t\tif (_BackgroundGradientEndColor == null)\n\t\t\t\treturn Draw2.Color.Empty;\n\n\t\t\tstring c = await _BackgroundGradientEndColor.EvaluateString(rpt, r);\n\t\t\treturn XmlUtil.ColorFromHtml(c, Draw2.Color.Empty, rpt);\n\t\t}\n\n\t\tinternal StyleBackgroundImage BackgroundImage\n\t\t{\n\t\t\tget { return  _BackgroundImage; }\n\t\t\tset {  _BackgroundImage = value; }\n\t\t}\n\n\t\tinternal bool ConstantStyle\n\t\t{\n\t\t\tget { return _ConstantStyle; }\n\t\t}\n\n\t\tinternal Expression FontStyle\n\t\t{\n\t\t\tget { return  _FontStyle; }\n\t\t\tset {  _FontStyle = value; }\n\t\t}\n\n\t\tinternal async Task<bool> IsFontItalic(Report rpt, Row r)\n\t\t{\n\t\t\tif (await EvalFontStyle(rpt, r) == FontStyleEnum.Italic)\n\t\t\t\treturn true;\n\n\t\t\treturn false;\n\t\t}\n\n\t\tinternal async Task<FontStyleEnum> EvalFontStyle(Report rpt, Row row)\n\t\t{\n\t\t\tif (_FontStyle == null)\n\t\t\t\treturn FontStyleEnum.Normal;\n\n\t\t\tstring fs = await _FontStyle.EvaluateString(rpt, row);\n\t\t\treturn StyleInfo.GetFontStyle(fs, FontStyleEnum.Normal);\n\t\t}\n\n\t\tinternal Expression FontFamily\n\t\t{\n\t\t\tget { return  _FontFamily; }\n\t\t\tset {  _FontFamily = value; }\n\t\t}\n\n\t\tinternal async Task<string> EvalFontFamily(Report rpt, Row row)\n\t\t{\n\t\t\tif (_FontFamily == null)\n\t\t\t\treturn \"Arial\";\n\n\t\t\treturn await _FontFamily.EvaluateString(rpt, row);\n\t\t}\n\n\t\tinternal Expression FontSize\n\t\t{\n\t\t\tget { return  _FontSize; }\n\t\t\tset {  _FontSize = value; }\n\t\t}\n\n\t\tinternal async Task<float> EvalFontSize(Report rpt, Row row)\n\t\t{\n\t\t\tif (_FontSize == null)\n\t\t\t\treturn 10;\n\n\t\t\tstring pts;\n\t\t\tpts = await _FontSize.EvaluateString(rpt, row);\n\t\t\tRSize sz = new RSize(this.OwnerReport, pts);\n\n\t\t\treturn sz.Points;\n\t\t}\n\n\t\tinternal Expression FontWeight\n\t\t{\n\t\t\tget { return  _FontWeight; }\n\t\t\tset {  _FontWeight = value; }\n\t\t}\n\n\t\tinternal async Task<FontWeightEnum> EvalFontWeight(Report rpt, Row row)\n\t\t{\n\t\t\tif (_FontWeight == null)\n\t\t\t\treturn FontWeightEnum.Normal;\n\n\t\t\tstring weight = await this.FontWeight.EvaluateString(rpt, row);\n\t\t\treturn StyleInfo.GetFontWeight(weight, FontWeightEnum.Normal);\n\t\t}\n\n\t\tinternal async Task<bool> IsFontBold(Report rpt, Row r)\n\t\t{\n\t\t\tif (this.FontWeight == null)\n\t\t\t\treturn false;\n\n\t\t\tstring weight = await this.FontWeight.EvaluateString(rpt, r);\n\t\t\tswitch(weight.ToLower())\n\t\t\t{\n\t\t\t\tcase \"bold\":\n\t\t\t\tcase \"bolder\":\n\t\t\t\tcase \"500\":\n\t\t\t\tcase \"600\":\n\t\t\t\tcase \"700\":\n\t\t\t\tcase \"800\":\n\t\t\t\tcase \"900\":\n\t\t\t\t\treturn true;\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tinternal Expression Format\n\t\t{\n\t\t\tget { return  _Format; }\n\t\t\tset {  _Format = value; }\n\t\t}\n\n        internal async Task<string> EvalFormat(Report rpt, Row row)\n        {\n            if (_Format == null)\n                return \"General\";\n            \n            string f = await _Format.EvaluateString(rpt, row);\n\n            if (f == null || f.Length == 0)\n                return \"General\";\n            return f;\n        }\n\n        \n        \n\t\tinternal Expression TextDecoration\n\t\t{\n\t\t\tget { return  _TextDecoration; }\n\t\t\tset {  _TextDecoration = value; }\n\t\t}\n\n\t\tinternal async Task<TextDecorationEnum> EvalTextDecoration(Report rpt, Row r)\n\t\t{\n\t\t\tif (_TextDecoration == null)\n\t\t\t\treturn TextDecorationEnum.None;\n\n\t\t\tstring td = await _TextDecoration.EvaluateString(rpt, r);\n\t\t\treturn StyleInfo.GetTextDecoration(td, TextDecorationEnum.None);\n\t\t}\n\n\t\tinternal Expression TextAlign\n\t\t{\n\t\t\tget { return  _TextAlign; }\n\t\t\tset {  _TextAlign = value; }\n\t\t}\n\n\t\tinternal async Task<TextAlignEnum> EvalTextAlign(Report rpt, Row row)\n\t\t{\n\t\t\tif (_TextAlign == null)\n\t\t\t\treturn TextAlignEnum.General;\n\t\n\t\t\tstring a = await _TextAlign.EvaluateString(rpt, row);\n\t\t\treturn StyleInfo.GetTextAlign(a, TextAlignEnum.General);\n\t\t}\n\n\t\tinternal Expression VerticalAlign\n\t\t{\n\t\t\tget { return  _VerticalAlign; }\n\t\t\tset {  _VerticalAlign = value; }\n\t\t}\n\n\t\tinternal async Task<VerticalAlignEnum> EvalVerticalAlign(Report rpt, Row row)\n\t\t{\n\t\t\tif (_VerticalAlign == null)\n\t\t\t\treturn VerticalAlignEnum.Top;\n\n\t\t\tstring v = await _VerticalAlign.EvaluateString(rpt, row);\n\t\t\treturn StyleInfo.GetVerticalAlign(v, VerticalAlignEnum.Top);\n\t\t}\n\n\t\tinternal Expression Color\n\t\t{\n\t\t\tget { return  _Color; }\n\t\t\tset {  _Color = value; }\n\t\t}\n\n\t\tinternal async Task<Draw2.Color> EvalColor(Report rpt, Row row)\n\t\t{\n\t\t\tif (_Color == null)\n\t\t\t\treturn Draw2.Color.Black;\n\n\t\t\tstring c = await _Color.EvaluateString(rpt, row);\n\t\t\treturn XmlUtil.ColorFromHtml(c, Draw2.Color.Black, rpt);\n\t\t}\n\n\t\tinternal Expression PaddingLeft\n\t\t{\n\t\t\tget { return  _PaddingLeft; }\n\t\t\tset {  _PaddingLeft = value; }\n\t\t}\n\n\t\tinternal async Task<float> EvalPaddingLeft(Report rpt, Row row)\n\t\t{\n\t\t\tif (_PaddingLeft == null)\n\t\t\t\treturn 0;\n\n\t\t\tstring v = await _PaddingLeft.EvaluateString(rpt, row);\n\t\t\tRSize rz = new RSize(OwnerReport, v);\n\t\t\treturn rz.Points;\n\t\t}\n\n\t\tinternal async Task<int> EvalPaddingLeftPx(Report rpt, Row row)\n\t\t{\n\t\t\tif (_PaddingLeft == null)\n\t\t\t\treturn 0;\n\n\t\t\tstring v = await _PaddingLeft.EvaluateString(rpt, row);\n\t\t\tRSize rz = new RSize(OwnerReport, v);\n\t\t\treturn rz.PixelsX;\n\t\t}\n\n\t\tinternal Expression PaddingRight\n\t\t{\n\t\t\tget { return  _PaddingRight; }\n\t\t\tset {  _PaddingRight = value; }\n\t\t}\n\n\t\tinternal async Task<float> EvalPaddingRight(Report rpt, Row row)\n\t\t{\n\t\t\tif (_PaddingRight == null)\n\t\t\t\treturn 0;\n\n\t\t\tstring v = await _PaddingRight.EvaluateString(rpt, row);\n\t\t\tRSize rz = new RSize(OwnerReport, v);\n\t\t\treturn rz.Points;\n\t\t}\n\n\t\tinternal async Task<int> EvalPaddingRightPx(Report rpt, Row row)\n\t\t{\n\t\t\tif (_PaddingRight == null)\n\t\t\t\treturn 0;\n\n\t\t\tstring v = await _PaddingRight.EvaluateString(rpt, row);\n\t\t\tRSize rz = new RSize(OwnerReport, v);\n\t\t\treturn rz.PixelsX;\n\t\t}\n\n\t\tinternal Expression PaddingTop\n\t\t{\n\t\t\tget { return  _PaddingTop; }\n\t\t\tset {  _PaddingTop = value; }\n\t\t}\n\n\t\tinternal async Task<float> EvalPaddingTop(Report rpt, Row row)\n\t\t{\n\t\t\tif (_PaddingTop == null)\n\t\t\t\treturn 0;\n\n\t\t\tstring v = await _PaddingTop.EvaluateString(rpt, row);\n\t\t\tRSize rz = new RSize(OwnerReport, v);\n\t\t\treturn rz.Points;\n\t\t}\n\n\t\tinternal async Task<int> EvalPaddingTopPx(Report rpt, Row row)\n\t\t{\n\t\t\tif (_PaddingTop == null)\n\t\t\t\treturn 0;\n\n\t\t\tstring v = await _PaddingTop.EvaluateString(rpt, row);\n\t\t\tRSize rz = new RSize(OwnerReport, v);\n\t\t\treturn rz.PixelsY;\n\t\t}\n\n\t\tinternal Expression PaddingBottom\n\t\t{\n\t\t\tget { return  _PaddingBottom; }\n\t\t\tset {  _PaddingBottom = value; }\n\t\t}\n\n\t\tinternal async Task<float> EvalPaddingBottom(Report rpt, Row row)\n\t\t{\n\t\t\tif (_PaddingBottom == null)\n\t\t\t\treturn 0;\n\n\t\t\tstring v = await _PaddingBottom.EvaluateString(rpt, row);\n\t\t\tRSize rz = new RSize(OwnerReport, v);\n\t\t\treturn rz.Points;\n\t\t}\n\n\t\tinternal async Task<int> EvalPaddingBottomPx(Report rpt, Row row)\n\t\t{\n\t\t\tif (_PaddingBottom == null)\n\t\t\t\treturn 0;\n\n\t\t\tstring v = await _PaddingBottom.EvaluateString(rpt, row);\n\t\t\tRSize rz = new RSize(OwnerReport, v);\n\t\t\treturn rz.PixelsY;\n\t\t}\n\n\t\tinternal Expression LineHeight\n\t\t{\n\t\t\tget { return  _LineHeight; }\n\t\t\tset {  _LineHeight = value; }\n\t\t}\n\n\t\tinternal async Task<float> EvalLineHeight(Report rpt, Row r)\n\t\t{\n\t\t\tif (_LineHeight == null)\n\t\t\t\treturn float.NaN;\n\n\t\t\tstring sz = await _LineHeight.EvaluateString(rpt, r);\n\t\t\tRSize rz = new RSize(OwnerReport, sz);\n\t\t\treturn rz.Points;\n\t\t}\n\n\t\tinternal Expression Direction\n\t\t{\n\t\t\tget { return  _Direction; }\n\t\t\tset {  _Direction = value; }\n\t\t}\n\n\t\tinternal async Task<DirectionEnum> EvalDirection(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Direction == null)\n\t\t\t\treturn DirectionEnum.LTR;\n\n\t\t\tstring d = await _Direction.EvaluateString(rpt, r);\n\t\t\treturn StyleInfo.GetDirection(d, DirectionEnum.LTR);\n\t\t}\n\n\t\tinternal Expression WritingMode\n\t\t{\n\t\t\tget { return  _WritingMode; }\n\t\t\tset {  _WritingMode = value; }\n\t\t}\n\n\t\tinternal async Task<WritingModeEnum> EvalWritingMode(Report rpt, Row r)\n\t\t{\n\t\t\tif (_WritingMode == null)\n\t\t\t\treturn WritingModeEnum.lr_tb;\n\n\t\t\tstring w = await _WritingMode.EvaluateString(rpt, r);\n\n\t\t\treturn StyleInfo.GetWritingMode(w, WritingModeEnum.lr_tb ); \n\t\t}\n\n\t\tinternal Expression Language\n\t\t{\n\t\t\tget { return  _Language; }\n\t\t\tset {  _Language = value; }\n\t\t}\n\n\t\tinternal async Task<string> EvalLanguage(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Language == null)\n\t\t\t\treturn await OwnerReport.EvalLanguage(rpt, r);\n\n\t\t\treturn await _Language.EvaluateString(rpt, r);\n\t\t}\n\n\t\tinternal Expression UnicodeBiDirectional\n\t\t{\n\t\t\tget { return  _UnicodeBiDirectional; }\n\t\t\tset {  _UnicodeBiDirectional = value; }\n\t\t}\n\n\t\tinternal async Task<UnicodeBiDirectionalEnum> EvalUnicodeBiDirectional(Report rpt, Row r)\n\t\t{\n\t\t\tif (_UnicodeBiDirectional == null)\n\t\t\t\treturn UnicodeBiDirectionalEnum.Normal;\n\n\t\t\tstring u = await _UnicodeBiDirectional.EvaluateString(rpt, r);\n\t\t\treturn StyleInfo.GetUnicodeBiDirectional(u, UnicodeBiDirectionalEnum.Normal);\n\t\t}\n\n\t\tinternal Expression Calendar\n\t\t{\n\t\t\tget { return  _Calendar; }\n\t\t\tset {  _Calendar = value; }\n\t\t}\n\n\t\tinternal async Task<CalendarEnum> EvalCalendar(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Calendar == null)\n\t\t\t\treturn CalendarEnum.Gregorian;\n\n\t\t\tstring c = await _Calendar.EvaluateString(rpt, r);\n\t\t\treturn StyleInfo.GetCalendar(c, CalendarEnum.Gregorian);\n\t\t}\n\n\t\tinternal Expression NumeralLanguage\n\t\t{\n\t\t\tget { return  _NumeralLanguage; }\n\t\t\tset {  _NumeralLanguage = value; }\n\t\t}\n\n\t\tinternal async Task<string> EvalNumeralLanguage(Report rpt, Row r)\n\t\t{\n\t\t\tif (_NumeralLanguage == null)\n\t\t\t\treturn await EvalLanguage(rpt, r);\n\n\t\t\treturn await _NumeralLanguage.EvaluateString(rpt, r);\n\t\t}\n\n\t\tinternal Expression NumeralVariant\n\t\t{\n\t\t\tget { return  _NumeralVariant; }\n\t\t\tset {  _NumeralVariant = value; }\n\t\t}\n\n\t\tinternal async Task<int> EvalNumeralVariant(Report rpt, Row r)\n\t\t{\n\t\t\tif (_NumeralVariant == null)\n\t\t\t\treturn 1;\n\n\t\t\tint v = (int)await _NumeralVariant.EvaluateDouble(rpt, r);\n\t\t\tif (v < 1 || v > 7)\t\t// correct for bad data\n\t\t\t\tv = 1;\n\t\t\treturn v;\n\t\t}\n\n\t\tprivate WorkClass GetWC(Report rpt)\n\t\t{\n\t\t\tif (!this.ConstantStyle)\n\t\t\t\treturn null;\n\n\t\t\tWorkClass wc = rpt.Cache.Get(this, \"wc\") as WorkClass;\n\t\t\tif (wc == null)\n\t\t\t{\n\t\t\t\twc = new WorkClass();\n\t\t\t\trpt.Cache.Add(this, \"wc\", wc);\n\t\t\t}\n\t\t\treturn wc;\n\t\t}\n\n\t\tprivate void RemoveWC(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(this, \"wc\");\n\t\t}\n\n\t\tclass WorkClass\n\t\t{\n\t\t\tinternal string CssStyle;\t\t// When ConstantStyle is true; this will hold cache of css\n\t\t\tinternal StyleInfo StyleInfo;\t// When ConstantStyle is true; this will hold cache of StyleInfo\n\t\t\tinternal WorkClass()\n\t\t\t{\n\t\t\t\tCssStyle = null;\n\t\t\t\tStyleInfo = null;\n\t\t\t}\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/StyleBackgroundImage.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Text;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\nusing Majorsilence.Drawing.Imaging;\n#else\nusing Draw2 = System.Drawing;\nusing System.Drawing.Imaging;\n#endif\nusing System.Globalization;\nusing System.Threading;\nusing System.Net;\nusing System.Threading.Tasks;\nusing System.Net.Http;\nusing Majorsilence.Reporting.Rdl.Utility;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    ///<summary>\n    /// Represents the background image information in a Style.\n    ///</summary>\n    [Serializable]\n\tinternal class StyleBackgroundImage : ReportLink\n\t{\n\t\tStyleBackgroundImageSourceEnum _Source;\t// Identifies the source of the image:\n\t\tExpression _Value;\t// (string) See Source. Expected datatype is string or\n\t\t\t\t\t\t\t// binary, depending on Source. If the Value is\n\t\t\t\t\t\t\t// null, no background image is displayed.\n\t\tExpression _MIMEType;\t// (string) The MIMEType for the image.\n\t\t\t\t\t\t\t// Valid values are: image/bmp, image/jpeg,\n\t\t\t\t\t\t\t// image/gif, image/png, image/x-png\n\t\t\t\t\t\t\t// Required if Source = Database. Ignored otherwise.\n\t\tExpression _BackgroundRepeat;\t// (Enum BackgroundRepeat) Indicates how the background image should\n\t\t\t\t\t\t\t// repeat to fill the available space: Default: Repeat\n\t\tbool _ConstantImage;\t// true if constant image\n\t\n\t\tinternal StyleBackgroundImage(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Source=StyleBackgroundImageSourceEnum.Unknown;\n\t\t\t_Value=null;\n\t\t\t_MIMEType=null;\n\t\t\t_BackgroundRepeat=null;\n\t\t\t_ConstantImage=false;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Source\":\n\t\t\t\t\t\t_Source = StyleBackgroundImageSource.GetStyle(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Value\":\n\t\t\t\t\t\t_Value = new Expression(r, this, xNodeLoop, ExpressionType.String);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"MIMEType\":\n\t\t\t\t\t\t_MIMEType = new Expression(r, this, xNodeLoop, ExpressionType.String);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"BackgroundRepeat\":\n\t\t\t\t\t\t_BackgroundRepeat = new Expression(r, this, xNodeLoop, ExpressionType.Enum);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown BackgroundImage element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Source == StyleBackgroundImageSourceEnum.Unknown)\n\t\t\t\tOwnerReport.rl.LogError(8, \"BackgroundImage requires the Source element.\");\n\t\t\tif (_Value == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"BackgroundImage requires the Value element.\");\n\t\t\t\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Value != null)\n                await _Value.FinalPass();\n\t\t\tif (_MIMEType != null)\n                await _MIMEType.FinalPass();\n\t\t\tif (_BackgroundRepeat != null)\n                await _BackgroundRepeat.FinalPass();\n\n\t\t\t_ConstantImage = await this.IsConstant();\n\t\t\treturn;\n\t\t}\n\n\t\t// Generate a CSS string from the specified styles\n\t\tinternal async Task<string> GetCSS(Report rpt, Row row, bool bDefaults)\n\t\t{\n\t\t\tStringBuilder sb = new StringBuilder();\n\n\t\t\t// TODO: need to handle other types of sources\n\t\t\tif (_Value != null && _Source==StyleBackgroundImageSourceEnum.External)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"background-image:url(\\\"{0}\\\");\", await _Value.EvaluateString(rpt, row));\n\t\t\telse if (bDefaults)\n\t\t\t\treturn \"background-image:none;\";\t\n            \t\t\t\n\t\t\tif (_BackgroundRepeat != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"background-repeat:{0};\", await _BackgroundRepeat.EvaluateString(rpt, row));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"background-repeat:repeat;\");\n\n\t\t\treturn sb.ToString();\n\t\t}\n\n\t\tinternal async Task<bool> IsConstant()\n\t\t{\n\t\t\tif (_Source == StyleBackgroundImageSourceEnum.Database)\n\t\t\t\treturn false;\n\n\t\t\tbool rc = true;\n\n\t\t\tif (_Value != null)\n\t\t\t\trc = await _Value.IsConstant();\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_BackgroundRepeat != null)\n\t\t\t\trc = await _BackgroundRepeat.IsConstant();\n\n\t\t\treturn rc;\n\t\t}\n\t\n\t\tinternal async Task<PageImage> GetPageImage(Report rpt, Row row)\n\t\t{\n\t\t\tstring mtype=null; \n\t\t\tStream strm=null;\n\t\t\tDraw2.Image im=null;\n\t\t\tPageImage pi=null;\n\n\t\t\tWorkClass wc = GetWC(rpt);\n\t\t\tif (wc.PgImage != null)\n\t\t\t{\t// have we already generated this one\n\t\t\t\t// reuse most of the work; only position will likely change\n\t\t\t\tpi = new PageImage(wc.PgImage.ImgFormat, wc.PgImage.GetImageData(), wc.PgImage.SamplesW, wc.PgImage.SamplesH);\n\t\t\t\tpi.Name = wc.PgImage.Name;\t\t\t\t// this is name it will be shared under\n\t\t\t\treturn pi;\n\t\t\t}\n\n\t\t\ttry \n\t\t\t{\n\t\t\t\t(strm, mtype) = await GetImageStream(rpt, row);\n                if (strm == null)\n                {\n                    rpt.rl.LogError(4, string.Format(\"Unable to load image {0}.\", \n                        this._Value==null?\"\": this._Value.EvaluateString(rpt, row)));\n                    return null;\n                }\n                im = Draw2.Image.FromStream(strm);\n\t\t\t\tint height = im.Height;\n\t\t\t\tint width = im.Width;\n\t\t\t\tMemoryStream ostrm = new MemoryStream();\n\t\t\t\tImageFormat imf;\n\t\t\t\t//\t\t\t\tif (mtype.ToLower() == \"image/jpeg\")    //TODO: how do we get png to work\n\t\t\t\t//\t\t\t\t\timf = ImageFormat.Jpeg;\n\t\t\t\t//\t\t\t\telse\n\n                imf = ImageFormat.Jpeg;\n               ImageCodecInfo[] info;\n                info = ImageCodecInfo.GetImageEncoders();\n                Draw2.Imaging.EncoderParameters encoderParameters;\n                encoderParameters = new Draw2.Imaging.EncoderParameters(1);\n                encoderParameters.Param[0] = new Draw2.Imaging.EncoderParameter(Draw2.Imaging.Encoder.Quality, ImageQualityManager.EmbeddedImageQuality);\n               ImageCodecInfo codec = null;\n                for (int i = 0; i < info.Length; i++)\n                {\n                    if (info[i].FormatDescription == \"JPEG\")\n                    {\n                        codec = info[i];\n                        break;\n                    }\n                }\n                im.Save(ostrm, codec, encoderParameters);\n\n\t\t\t\tbyte[] ba = ostrm.ToArray();\n\t\t\t\tostrm.Close();\n\t\t\t\tpi = new PageImage(imf, ba, width, height);\n\t\t\t\tpi.SI = new StyleInfo();\t// this will just default everything\n\t\t\t\tif (_BackgroundRepeat != null)\n\t\t\t\t{\n\t\t\t\t\tstring r = (await _BackgroundRepeat.EvaluateString(rpt, row)).ToLower();\n\t\t\t\t\tswitch (r)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase \"repeat\":\n\t\t\t\t\t\t\tpi.Repeat = ImageRepeat.Repeat;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"repeatx\":\n\t\t\t\t\t\t\tpi.Repeat = ImageRepeat.RepeatX;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"repeaty\":\n\t\t\t\t\t\t\tpi.Repeat = ImageRepeat.RepeatY;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"norepeat\":\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tpi.Repeat = ImageRepeat.NoRepeat;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tpi.Repeat = ImageRepeat.Repeat;\n\n\t\t\t\tif (_ConstantImage)\n\t\t\t\t{\n\t\t\t\t\twc.PgImage = pi;\n\t\t\t\t\t// create unique name; PDF generation uses this to optimize the saving of the image only once\n\t\t\t\t\tpi.Name = \"pi\" + Interlocked.Increment(ref Parser.Counter).ToString();\t// create unique name\n\t\t\t\t}\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (strm != null)\n\t\t\t\t\tstrm.Close();\n\t\t\t\tif (im != null)\n\t\t\t\t\tim.Dispose();\n\t\t\t}\n\t\t\treturn pi;\n\t\t}\n\n        async Task<(Stream stream, string mtype)> GetImageStream(Report rpt, Row row)\n        {\n            string mtype = null;\n            Stream strm = null;\n            try\n            {\n                switch (this._Source)\n                {\n                    case StyleBackgroundImageSourceEnum.Database:\n                        if (_MIMEType == null)\n                            return (null, mtype);\n                        mtype = await _MIMEType.EvaluateString(rpt, row);\n                        object o = await _Value.Evaluate(rpt, row);\n                        strm = new MemoryStream((byte[])o);\n                        break;\n                    case StyleBackgroundImageSourceEnum.Embedded:\n                        string name = await _Value.EvaluateString(rpt, row);\n                        EmbeddedImage ei = (EmbeddedImage)OwnerReport.LUEmbeddedImages[name];\n                        mtype = ei.MIMEType;\n                        byte[] ba = Convert.FromBase64String(ei.ImageData);\n                        strm = new MemoryStream(ba);\n                        break;\n                    case StyleBackgroundImageSourceEnum.External:\n                        string fname = await _Value.EvaluateString(rpt, row);\n                        mtype = Image.GetMimeType(fname);\n                        if (fname.StartsWith(\"http:\") ||\n                            fname.StartsWith(\"file:\") ||\n                            fname.StartsWith(\"https:\"))\n                        {\n                            using (HttpClient client = new HttpClient())\n                            {\n                                client.AddMajorsilenceReportingUserAgent();\n                                HttpResponseMessage response = await client.GetAsync(fname);\n                                if (response.IsSuccessStatusCode)\n                                {\n                                    strm = await response.Content.ReadAsStreamAsync();\n                                }\n                            }\n                        }\n                        else\n                            strm = new FileStream(fname, System.IO.FileMode.Open, FileAccess.Read);\n                        break;\n                    default:\n                        return (null, mtype);\n                }\n            }\n            catch\n            {\n                if (strm != null)\n                {\n                    strm.Close();\n                    strm = null;\n                }\n            }\n\n            return (strm, mtype);\n        }\n\n\t\tstatic internal string GetCSSDefaults()\n\t\t{\n\t\t\treturn \"background-image:none;\";\n\t\t}\n\n\t\tinternal StyleBackgroundImageSourceEnum Source\n\t\t{\n\t\t\tget { return  _Source; }\n\t\t\tset {  _Source = value; }\n\t\t}\n\n\t\tinternal Expression Value\n\t\t{\n\t\t\tget { return  _Value; }\n\t\t\tset {  _Value = value; }\n\t\t}\n\n\t\tinternal Expression MIMEType\n\t\t{\n\t\t\tget { return  _MIMEType; }\n\t\t\tset {  _MIMEType = value; }\n\t\t}\n\n\t\tinternal Expression BackgroundRepeat\n\t\t{\n\t\t\tget { return  _BackgroundRepeat; }\n\t\t\tset {  _BackgroundRepeat = value; }\n\t\t}\n\n\t\tprivate WorkClass GetWC(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = rpt.Cache.Get(this, \"wc\") as WorkClass;\n\t\t\tif (wc == null)\n\t\t\t{\n\t\t\t\twc = new WorkClass();\n\t\t\t\trpt.Cache.Add(this, \"wc\", wc);\n\t\t\t}\n\t\t\treturn wc;\n\t\t}\n\n\t\tprivate void RemoveWC(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(this, \"wc\");\n\t\t}\n\n\t\tclass WorkClass\n\t\t{\n\t\t\tinternal PageImage PgImage;\t// When ConstantImage is true this will save the PageImage for reuse\n\t\t\tinternal WorkClass()\n\t\t\t{\n\t\t\t\tPgImage=null;\n\t\t\t}\n\t\t}\n\t}\n\n\tinternal enum BackgroundRepeat\n\t{\n\t\tRepeat,\t\t\t// repeat image in both x and y directions\n\t\tNoRepeat,\t\t// don't repeat\n\t\tRepeatX,\t\t// repeat image in x direction\n\t\tRepeatY\t\t\t// repeat image in y direction\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/StyleBackgroundImageSource.cs",
    "content": "\n\nusing System;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Style Background image source enumeration\n\t///</summary>\n\n\tinternal enum StyleBackgroundImageSourceEnum\n\t{\n\t\tExternal,\t\t// The Value contains a constant or\n\t\t// expression that evaluates to for the location\n\t\t// of the image\n\t\tEmbedded,\t\t// The Value contains a constant\n\t\t// or expression that evaluates to the name of\n\t\t// an EmbeddedImage within the report\n\t\tDatabase,\t\t// The Value contains an expression\n\t\t// (a field in the database) that evaluates to the\n\t\t// binary data for the image.\n\t\tUnknown\t\t\t// Illegal (or no) value specified\n\t}\n\n\tinternal class StyleBackgroundImageSource\n\t{\n\t\tstatic internal StyleBackgroundImageSourceEnum GetStyle(string s)\n\t\t{\n\t\t\tStyleBackgroundImageSourceEnum rs;\n\n\t\t\tswitch (s)\n\t\t\t{\t\t\n\t\t\t\tcase \"External\":\n\t\t\t\t\trs = StyleBackgroundImageSourceEnum.External;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Embedded\":\n\t\t\t\t\trs = StyleBackgroundImageSourceEnum.Embedded;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Database\":\n\t\t\t\t\trs = StyleBackgroundImageSourceEnum.Database;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t// user error just force to normal TODO\n\t\t\t\t\trs = StyleBackgroundImageSourceEnum.External;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn rs;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/StyleBorderColor.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Text;\nusing System.Threading.Tasks;\n\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\nusing System.Globalization;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// The style of the border colors.  Expressions for all sides as well as default expression.\n\t///</summary>\n\t[Serializable]\n\tinternal class StyleBorderColor : ReportLink\n\t{\n\t\tExpression _Default;\t// (Color) Color of the border (unless overridden for a specific\n\t\t\t\t\t\t\t\t//   side). Default: Black.\n\t\tExpression _Left;\t\t// (Color) Color of the left border\n\t\tExpression _Right;\t\t// (Color) Color of the right border\n\t\tExpression _Top;\t\t// (Color) Color of the top border\n\t\tExpression _Bottom;\t\t// (Color) Color of the bottom border\n\t\n\t\tinternal StyleBorderColor(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Default=null;\n\t\t\t_Left=null;\n\t\t\t_Right=null;\n\t\t\t_Top=null;\n\t\t\t_Bottom=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Default\":\n\t\t\t\t\t\t_Default = new Expression(r, this, xNodeLoop, ExpressionType.Color);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Left\":\n\t\t\t\t\t\t_Left = new Expression(r, this, xNodeLoop, ExpressionType.Color);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Right\":\n\t\t\t\t\t\t_Right = new Expression(r, this, xNodeLoop, ExpressionType.Color);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Top\":\n\t\t\t\t\t\t_Top = new Expression(r, this, xNodeLoop, ExpressionType.Color);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Bottom\":\n\t\t\t\t\t\t_Bottom = new Expression(r, this, xNodeLoop, ExpressionType.Color);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown BorderColor element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Default != null)\n                await _Default.FinalPass();\n\t\t\tif (_Left != null)\n                await _Left.FinalPass();\n\t\t\tif (_Right != null)\n                await _Right.FinalPass();\n\t\t\tif (_Top != null)\n                await _Top.FinalPass();\n\t\t\tif (_Bottom != null)\n                await _Bottom.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\t// Generate a CSS string from the specified styles\n\t\tinternal async Task<string> GetCSS(Report rpt, Row row, bool bDefaults)\n\t\t{\n\t\t\tStringBuilder sb = new StringBuilder();\n\n\t\t\tif (_Default != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"border-color:{0};\", await _Default.EvaluateString(rpt, row));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(\"border-color:black;\");\n\n\t\t\tif (_Left != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"border-left:{0};\", await _Left.EvaluateString(rpt, row));\n\n\t\t\tif (_Right != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"border-right:{0};\", await _Right.EvaluateString(rpt, row));\n\n\t\t\tif (_Top != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"border-top:{0};\", await _Top.EvaluateString(rpt, row));\n\n\t\t\tif (_Bottom != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"border-bottom:{0};\", await _Bottom.EvaluateString(rpt, row));\n\n\t\t\treturn sb.ToString();\n\t\t}\n\n\t\tinternal async Task<bool> IsConstant()\n\t\t{\n\t\t\tbool rc = true;\n\n\t\t\tif (_Default != null)\n\t\t\t\trc = await _Default.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_Left != null)\n\t\t\t\trc = await _Left.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_Right != null)\n\t\t\t\trc = await _Right.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_Top != null)\n\t\t\t\trc = await _Top.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_Bottom != null)\n\t\t\t\trc = await _Bottom.IsConstant();\n\n\t\t\treturn rc;\n\t\t}\n\n\t\tstatic internal string GetCSSDefaults()\n\t\t{\n\t\t\treturn \"border-color:black;\";\n\t\t}\n\n\t\tinternal Expression Default\n\t\t{\n\t\t\tget { return  _Default; }\n\t\t\tset {  _Default = value; }\n\t\t}\n\n\t\tinternal async Task<Draw2.Color> EvalDefault(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Default == null)\n\t\t\t\treturn Draw2.Color.Black;\n\t\t\t\n\t\t\tstring c = await _Default.EvaluateString(rpt, r);\n\t\t\treturn XmlUtil.ColorFromHtml(c, Draw2.Color.Black, rpt);\n\t\t}\n\n\t\tinternal Expression Left\n\t\t{\n\t\t\tget { return  _Left; }\n\t\t\tset {  _Left = value; }\n\t\t}\n\n\t\tinternal async Task<Draw2.Color> EvalLeft(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Left == null)\n\t\t\t\treturn await EvalDefault(rpt, r);\n\t\t\t\n\t\t\tstring c = await _Left.EvaluateString(rpt, r);\n\t\t\treturn XmlUtil.ColorFromHtml(c, Draw2.Color.Black, rpt);\n\t\t}\n\n\t\tinternal Expression Right\n\t\t{\n\t\t\tget { return  _Right; }\n\t\t\tset {  _Right = value; }\n\t\t}\n\n\t\tinternal async Task<Draw2.Color> EvalRight(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Right == null)\n\t\t\t\treturn await EvalDefault(rpt, r);\n\t\t\t\n\t\t\tstring c = await _Right.EvaluateString(rpt, r);\n\t\t\treturn XmlUtil.ColorFromHtml(c, Draw2.Color.Black, rpt);\n\t\t}\n\n\t\tinternal Expression Top\n\t\t{\n\t\t\tget { return  _Top; }\n\t\t\tset {  _Top = value; }\n\t\t}\n\n\t\tinternal async Task<Draw2.Color> EvalTop(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Top == null)\n\t\t\t\treturn await EvalDefault(rpt, r);\n\t\t\t\n\t\t\tstring c = await _Top.EvaluateString(rpt, r);\n\t\t\treturn XmlUtil.ColorFromHtml(c, Draw2.Color.Black, rpt);\n\t\t}\n\n\t\tinternal Expression Bottom\n\t\t{\n\t\t\tget { return  _Bottom; }\n\t\t\tset {  _Bottom = value; }\n\t\t}\n\n\t\tinternal async Task<Draw2.Color> EvalBottom(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Bottom == null)\n\t\t\t\treturn await EvalDefault(rpt, r);\n\t\t\t\n\t\t\tstring c = await _Bottom.EvaluateString(rpt, r);\n\t\t\treturn XmlUtil.ColorFromHtml(c, Draw2.Color.Black, rpt);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/StyleBorderStyle.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// The type (dotted, solid, ...) of border.  Expressions for all sides as well as default expression.\n\t///</summary>\n\t[Serializable]\n\tinternal class StyleBorderStyle : ReportLink\n\t{\n\t\tExpression _Default;\t// (Enum BorderStyle) Style of the border (unless overridden for a specific side)\n\t\t// Default: none\t\t\n\t\tExpression _Left;\t\t// (Enum BorderStyle) Style of the left border\n\t\tExpression _Right;\t\t// (Enum BorderStyle) Style of the right border\n\t\tExpression _Top;\t\t// (Enum BorderStyle) Style of the top border\n\t\tExpression _Bottom;\t\t// (Enum BorderStyle) Style of the bottom border\n\t\n\t\tinternal StyleBorderStyle(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Default=null;\n\t\t\t_Left=null;\n\t\t\t_Right=null;\n\t\t\t_Top=null;\n\t\t\t_Bottom=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Default\":\n\t\t\t\t\t\t_Default = new Expression(r, this, xNodeLoop, ExpressionType.Enum);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Left\":\n\t\t\t\t\t\t_Left = new Expression(r, this, xNodeLoop, ExpressionType.Enum);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Right\":\n\t\t\t\t\t\t_Right = new Expression(r, this, xNodeLoop, ExpressionType.Enum);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Top\":\n\t\t\t\t\t\t_Top = new Expression(r, this, xNodeLoop, ExpressionType.Enum);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Bottom\":\n\t\t\t\t\t\t_Bottom = new Expression(r, this, xNodeLoop, ExpressionType.Enum);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown BorderStyle element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Default != null)\n                await _Default.FinalPass();\n\t\t\tif (_Left != null)\n                await _Left.FinalPass();\n\t\t\tif (_Right != null)\n                await _Right.FinalPass();\n\t\t\tif (_Top != null)\n                await _Top.FinalPass();\n\t\t\tif (_Bottom != null)\n                await _Bottom.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\t// Generate a CSS string from the specified styles\n\t\tinternal async Task<string> GetCSS(Report rpt, Row row, bool bDefaults)\n\t\t{\n\t\t\tStringBuilder sb = new StringBuilder();\n\n\t\t\tif (_Default != null)\n\t\t\t\tsb.AppendFormat(\"border-style:{0};\", await _Default.EvaluateString(rpt, row));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(\"border-style:none;\");\n\n\t\t\tif (_Left != null)\n\t\t\t\tsb.AppendFormat(\"border-left-style:{0};\", await _Left.EvaluateString(rpt, row));\n\n\t\t\tif (_Right != null)\n\t\t\t\tsb.AppendFormat(\"border-right-style:{0};\", await _Right.EvaluateString(rpt, row));\n\n\t\t\tif (_Top != null)\n\t\t\t\tsb.AppendFormat(\"border-top-style:{0};\", await _Top.EvaluateString(rpt, row));\n\n\t\t\tif (_Bottom != null)\n\t\t\t\tsb.AppendFormat(\"border-bottom-style:{0};\", await _Bottom.EvaluateString(rpt, row));\n\n\t\t\treturn sb.ToString();\n\t\t}\n\n\t\tinternal async Task<bool> IsConstant()\n\t\t{\n\t\t\tbool rc = true;\n\n\t\t\tif (_Default != null)\n\t\t\t\trc = await _Default.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_Left != null)\n\t\t\t\trc = await _Left.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_Right != null)\n\t\t\t\trc = await _Right.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_Top != null)\n\t\t\t\trc = await _Top.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_Bottom != null)\n\t\t\t\trc = await _Bottom.IsConstant();\n\n\t\t\treturn rc;\n\t\t}\n\n\t\tstatic internal string GetCSSDefaults()\n\t\t{\n\t\t\treturn \"border-style:none;\";\n\t\t}\n\n\t\tinternal Expression Default\n\t\t{\n\t\t\tget { return  _Default; }\n\t\t\tset {  _Default = value; }\n\t\t}\n \n\t\tinternal async Task<BorderStyleEnum> EvalDefault(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Default == null)\n\t\t\t\treturn BorderStyleEnum.None;\n\n\t\t\tstring bs = await _Default.EvaluateString(rpt, r);\n\t\t\treturn GetBorderStyle(bs, BorderStyleEnum.Solid);\n\t\t}\n\n\t\tinternal Expression Left\n\t\t{\n\t\t\tget { return  _Left; }\n\t\t\tset {  _Left = value; }\n\t\t}\n\n\t\tinternal async Task<BorderStyleEnum> EvalLeft(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Left == null)\n\t\t\t\treturn await EvalDefault(rpt, r);\n\n\t\t\tstring bs = await _Left.EvaluateString(rpt, r);\n\t\t\treturn GetBorderStyle(bs, BorderStyleEnum.Solid);\n\t\t}\n\n\t\tinternal Expression Right\n\t\t{\n\t\t\tget { return  _Right; }\n\t\t\tset {  _Right = value; }\n\t\t}\n\n\t\tinternal async Task<BorderStyleEnum> EvalRight(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Right == null)\n\t\t\t\treturn await EvalDefault(rpt, r);\n\n\t\t\tstring bs = await _Right.EvaluateString(rpt, r);\n\t\t\treturn GetBorderStyle(bs, BorderStyleEnum.Solid);\n\t\t}\n\n\t\tinternal Expression Top\n\t\t{\n\t\t\tget { return  _Top; }\n\t\t\tset {  _Top = value; }\n\t\t}\n\n\t\tinternal async Task<BorderStyleEnum> EvalTop(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Top == null)\n\t\t\t\treturn await EvalDefault(rpt, r);\n\n\t\t\tstring bs = await _Top.EvaluateString(rpt, r);\n\t\t\treturn GetBorderStyle(bs, BorderStyleEnum.Solid);\n\t\t}\n\n\t\tinternal Expression Bottom\n\t\t{\n\t\t\tget { return  _Bottom; }\n\t\t\tset {  _Bottom = value; }\n\t\t}\n\n\t\tinternal async Task<BorderStyleEnum> EvalBottom(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Bottom == null)\n\t\t\t\treturn await EvalDefault(rpt, r);\n\n\t\t\tstring bs = await _Bottom.EvaluateString(rpt, r);\n\t\t\treturn GetBorderStyle(bs, BorderStyleEnum.Solid);\n\t\t}\n\n\t\t// return the BorderStyleEnum given a particular string value\n\t\tstatic internal BorderStyleEnum GetBorderStyle(string v, BorderStyleEnum def)\n\t\t{\n\t\t\tBorderStyleEnum bs;\n\t\t\tswitch (v)\n\t\t\t{\n\t\t\t\tcase \"None\":\n\t\t\t\t\tbs = BorderStyleEnum.None;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Dotted\":\n\t\t\t\t\tbs = BorderStyleEnum.Dotted;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Dashed\":\n\t\t\t\t\tbs = BorderStyleEnum.Dashed;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Solid\":\n\t\t\t\t\tbs = BorderStyleEnum.Solid;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Double\":\n\t\t\t\t\tbs = BorderStyleEnum.Double;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Groove\":\n\t\t\t\t\tbs = BorderStyleEnum.Groove;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Ridge\":\n\t\t\t\t\tbs = BorderStyleEnum.Ridge;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Inset\":\n\t\t\t\t\tbs = BorderStyleEnum.Inset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"WindowInset\":\n\t\t\t\t\tbs = BorderStyleEnum.WindowInset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Outset\":\n\t\t\t\t\tbs = BorderStyleEnum.Outset;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbs = def;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn bs;\n\t\t}\n\t}\n\t/// <summary>\n\t/// Allowed values for border styles.  Note: these may not be actually supported depending\n\t/// on the renderer used.\n\t/// </summary>\n\tpublic enum BorderStyleEnum\n\t{\n\t\t/// <summary>\n\t\t/// No border\n\t\t/// </summary>\n\t\tNone,\n\t\t/// <summary>\n\t\t/// Dotted line border\n\t\t/// </summary>\n\t\tDotted,\n\t\t/// <summary>\n\t\t/// Dashed lin border\n\t\t/// </summary>\n\t\tDashed,\n\t\t/// <summary>\n\t\t/// Solid line border\n\t\t/// </summary>\n\t\tSolid,\n\t\t/// <summary>\n\t\t/// Double line border\n\t\t/// </summary>\n\t\tDouble,\n\t\t/// <summary>\n\t\t/// Grooved border\n\t\t/// </summary>\n\t\tGroove,\n\t\t/// <summary>\n\t\t/// Ridge border\n\t\t/// </summary>\n\t\tRidge,\n\t\t/// <summary>\n\t\t/// Inset border\n\t\t/// </summary>\n\t\tInset,\n\t\t/// <summary>\n\t\t/// Windows Inset border\n\t\t/// </summary>\n\t\tWindowInset,\n\t\t/// <summary>\n\t\t/// Outset border\n\t\t/// </summary>\n\t\tOutset\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/StyleBorderWidth.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// The width of the border.  Expressions for all sides as well as default expression.\n\t///</summary>\n\t[Serializable]\n\tinternal class StyleBorderWidth : ReportLink\n\t{\n\t\tExpression _Default;\t//(Size) Width of the border (unless overridden for a specific side)\n\t\t\t\t\t\t\t\t// Borders are centered on the edge of the object\n\t\t\t\t\t\t\t\t// Default: 1 pt Max: 20 pt Min: 0.25 pt\n\t\tExpression _Left;\t//(Size) Width of the left border. Max: 20 pt Min: 0.25 pt\n\t\tExpression _Right;\t//(Size) Width of the right border. Max: 20 pt Min: 0.25 pt\n\t\tExpression _Top;\t//(Size) Width of the top border. Max: 20 pt Min: 0.25 pt\n\t\tExpression _Bottom;\t//(Size) Width of the bottom border. Max: 20 pt Min: 0.25 pt\n\t\n\t\tinternal StyleBorderWidth(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Default=null;\n\t\t\t_Left=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Default\":\n\t\t\t\t\t\t_Default = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Left\":\n\t\t\t\t\t\t_Left = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Right\":\n\t\t\t\t\t\t_Right = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Top\":\n\t\t\t\t\t\t_Top = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Bottom\":\n\t\t\t\t\t\t_Bottom = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown BorderWidth element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Default != null)\n                await _Default.FinalPass();\n\t\t\tif (_Left != null)\n                await _Left.FinalPass();\n\t\t\tif (_Right != null)\n                await _Right.FinalPass();\n\t\t\tif (_Top != null)\n                await _Top.FinalPass();\n\t\t\tif (_Bottom != null)\n                await _Bottom.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\t// Generate a CSS string from the specified styles\n\t\tinternal async Task<string> GetCSS(Report rpt, Row row, bool bDefaults)\n\t\t{\n\t\t\tStringBuilder sb = new StringBuilder();\n\n\t\t\tif (_Default != null)\n\t\t\t\tsb.AppendFormat(\"border-width:{0};\", await _Default.EvaluateString(rpt, row));\n\t\t\telse if (bDefaults)\n\t\t\t\tsb.Append(\"border-width:1pt;\");\n\n\t\t\tif (_Left != null)\n\t\t\t\tsb.AppendFormat(\"border-left-width:{0};\", await _Left.EvaluateString(rpt, row));\n\n\t\t\tif (_Right != null)\n\t\t\t\tsb.AppendFormat(\"border-right-width:{0};\", await _Right.EvaluateString(rpt, row));\n\n\t\t\tif (_Top != null)\n\t\t\t\tsb.AppendFormat(\"border-top-width:{0};\", await _Top.EvaluateString(rpt, row));\n\n\t\t\tif (_Bottom != null)\n\t\t\t\tsb.AppendFormat(\"border-bottom-width:{0};\", await _Bottom.EvaluateString(rpt, row));\n\n\t\t\treturn sb.ToString();\n\t\t}\n\n\t\tinternal async Task<bool> IsConstant()\n\t\t{\n\t\t\tbool rc = true;\n\n\t\t\tif (_Default != null)\n\t\t\t\trc = await _Default.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_Left != null)\n\t\t\t\trc = await _Left.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_Right != null)\n\t\t\t\trc = await _Right.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_Top != null)\n\t\t\t\trc = await _Top.IsConstant();\n\n\t\t\tif (!rc)\n\t\t\t\treturn false;\n\n\t\t\tif (_Bottom != null)\n\t\t\t\trc = await _Bottom.IsConstant();\n\n\t\t\treturn rc;\n\t\t}\n\n\t\tstatic internal string GetCSSDefaults()\n\t\t{\n\t\t\treturn \"border-width:1pt;\";\n\t\t}\n\n\t\tinternal Expression Default\n\t\t{\n\t\t\tget { return  _Default; }\n\t\t\tset {  _Default = value; }\n\t\t}\n\n\t\tinternal async Task<float> EvalDefault(Report rpt, Row r)\t// return points\n\t\t{\n\t\t\tif (_Default == null)\n\t\t\t\treturn 1;\n\n\t\t\tstring sw;\n\t\t\tsw = await _Default.EvaluateString(rpt, r);\n\n\t\t\tRSize rs = new RSize(this.OwnerReport, sw);\n\t\t\treturn rs.Points;\n\t\t}\n\n\t\tinternal Expression Left\n\t\t{\n\t\t\tget { return  _Left; }\n\t\t\tset {  _Left = value; }\n\t\t}\n\n\t\tinternal async Task<float> EvalLeft(Report rpt, Row r)\t// return points\n\t\t{\n\t\t\tif (_Left == null)\n\t\t\t\treturn await EvalDefault(rpt, r);\n\n\t\t\tstring sw = await _Left.EvaluateString(rpt, r);\n\t\t\tRSize rs = new RSize(this.OwnerReport, sw);\n\t\t\treturn rs.Points;\n\t\t}\n\n\t\tinternal Expression Right\n\t\t{\n\t\t\tget { return  _Right; }\n\t\t\tset {  _Right = value; }\n\t\t}\n\n\t\tinternal async Task<float> EvalRight(Report rpt, Row r)\t// return points\n\t\t{\n\t\t\tif (_Right == null)\n\t\t\t\treturn await EvalDefault(rpt, r);\n\n\t\t\tstring sw = await _Right.EvaluateString(rpt, r);\n\t\t\tRSize rs = new RSize(this.OwnerReport, sw);\n\t\t\treturn rs.Points;\n\t\t}\n\n\t\tinternal Expression Top\n\t\t{\n\t\t\tget { return  _Top; }\n\t\t\tset {  _Top = value; }\n\t\t}\n\n\t\tinternal async Task<float> EvalTop(Report rpt, Row r)\t// return points\n\t\t{\n\t\t\tif (_Top == null)\n\t\t\t\treturn await EvalDefault(rpt, r);\n\n\t\t\tstring sw = await _Top.EvaluateString(rpt, r);\n\t\t\tRSize rs = new RSize(this.OwnerReport, sw);\n\t\t\treturn rs.Points;\n\t\t}\n\n\t\tinternal Expression Bottom\n\t\t{\n\t\t\tget { return  _Bottom; }\n\t\t\tset {  _Bottom = value; }\n\t\t}\n\n\t\tinternal async Task<float> EvalBottom(Report rpt, Row r)\t// return points\n\t\t{\n\t\t\tif (_Bottom == null)\n\t\t\t\treturn await EvalDefault(rpt, r);\n\n\t\t\tstring sw = await _Bottom.EvaluateString(rpt, r);\n\t\t\tRSize rs = new RSize(this.OwnerReport, sw);\n\t\t\treturn rs.Points;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Subreport.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.IO;\nusing System.Collections;\nusing System.Text;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// The definition of a Subreport (report name, parameters, ...).\n\t///</summary>\n\t[Serializable]\n\tinternal class Subreport : ReportItem\n\t{\n\t\tstring _ReportName;\t\t// The full path (e.g. �/salesreports/orderdetails�) or\n\t\t\t\t\t\t\t\t// relative path (e.g. �orderdetails�) to a subreport.\n\t\t\t\t\t\t\t\t// Relative paths start in the same folder as the current\n\t\t\t\t\t\t\t\t// \n\t\t\t\t\t\t\t\t// Cannot be an empty string (ignoring whitespace)\n\t\tSubReportParameters _Parameters;\t//Parameters to the Subreport\n\t\t\t\t\t\t\t\t// If the subreport is executed without parameters\n\t\t\t\t\t\t\t\t// (and contains no Toggle elements), it will only be\n\t\t\t\t\t\t\t\t// executed once (even if it appears inside of a list,\n\t\t\t\t\t\t\t\t// table or matrix)\n\t\tExpression _NoRows;\t\t// (string)\tMessage to display in the subreport (instead of the\n\t\t\t\t\t\t\t\t// region layout) when no rows of data are available\n\t\t\t\t\t\t\t\t// in any data set in the subreport\n\t\t\t\t\t\t\t\t// Note: Style information on the subreport applies to\n\t\t\t\t\t\t\t\t// this text.\n\t\tbool _MergeTransactions;\t// Indicates that transactions in the subreport should\n\t\t\t\t\t\t\t\t//be merged with transactions in the parent report\n\t\t\t\t\t\t\t\t//(into a single transaction for the entire report) if the\n\t\t\t\t\t\t\t\t//data sources use the same connection.\t\n\t\n\t\tReportDefn _ReportDefn;\t// loaded report definition\n\n        // EBN 30/03/2014\n        // Store the cross object\n        CrossDelegate _SubReportGetContent = new CrossDelegate();\n\n\t\tinternal Subreport(ReportDefn r, ReportLink p, XmlNode xNode) :base(r, p, xNode)\n\t\t{\n\t\t\t_ReportName=null;\n\t\t\t_Parameters=null;\n\t\t\t_NoRows=null;\n\t\t\t_MergeTransactions=true;\n            _SubReportGetContent = r.SubReportGetContent;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"reportname\":\n\t\t\t\t\t\t_ReportName = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"parameters\":\n\t\t\t\t\t\t_Parameters = new SubReportParameters(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"norows\":\n\t\t\t\t\t\t_NoRows = new Expression(r, this, xNodeLoop, ExpressionType.String);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"mergetransactions\":\n\t\t\t\t\t\t_MergeTransactions = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tif (ReportItemElement(xNodeLoop))\t// try at ReportItem level\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Image element \" + xNodeLoop.Name + \" ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\n\t\t\tif (_ReportName == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"Subreport requires the ReportName element.\");\n\t\t\t\n\t\t\tOwnerReport.ContainsSubreport = true;\t// owner report contains a subreport\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\toverride async internal Task FinalPass()\n\t\t{\n\t\t\tawait base.FinalPass();\n\n\t\t\t// Subreports aren't allowed in PageHeader or PageFooter; \n\t\t\tif (this.InPageHeaderOrFooter())\n\t\t\t\tOwnerReport.rl.LogError(8, String.Format(\"The Subreport '{0}' is not allowed in a PageHeader or PageFooter\", this.Name == null? \"unknown\": Name.Nm) );\n\n\t\t\tif (_Parameters != null)\n                await _Parameters.FinalPass();\n\t\t\tif (_NoRows != null)\n                await _NoRows.FinalPass();\n\n\t\t\t_ReportDefn = await GetReport(OwnerReport.ParseFolder);\n            if (_ReportDefn != null)    // only null in error case (e.g. subreport not found)\n\t\t\t    _ReportDefn.Subreport = this;\n\t\t\treturn;\n\t\t}\n\n\t\tasync override internal Task Run(IPresent ip, Row row)\n\t\t{\n\t\t\tReport r = ip.Report();\n            await base.Run(ip, row);\n\n\t\t\t// need to save the owner report and nest in this defintion\n\t\t\tReportDefn saveReport = r.ReportDefinition;\n            NeedPassword np = r.GetDataSourceReferencePassword;   // get current password\n            r.SetReportDefinition(_ReportDefn);\n\t\t\tr.Folder = _ReportDefn.ParseFolder;\t\t// folder needs to get set since the id of the report is used by the cache\n            r.GetDataSourceReferencePassword = np;\n\t\t\n            DataSourcesDefn saveDS = r.ParentConnections;\n\t\t\tif (this.MergeTransactions)\n\t\t\t\tr.ParentConnections = saveReport.DataSourcesDefn;\n\t\t\telse\n\t\t\t\tr.ParentConnections = null;\n\n            r.SubreportDataRetrievalTriggerEvent();\n\n\t\t\tif (_Parameters == null)\n\t\t\t{\t// When no parameters we only retrieve data once\n\t\t\t\tif (r.Cache.Get(this, \"report\") == null)\n\t\t\t\t{\n                    await r.RunGetData(null);\n                    if (!r.IsSubreportDataRetrievalDefined)       // if use has defined subreportdataretrieval they might\n                        r.Cache.Add(this, \"report\", this);      //    set the data; so we don't cache\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n                await SetSubreportParameters(r, row);\n                await r.RunGetData(null);\n\t\t\t}\n\n            await ip.Subreport(this, row);\n\n\t\t\tr.SetReportDefinition(saveReport);\t\t\t// restore the current report\n\t\t\tr.ParentConnections = saveDS;\t\t\t\t// restore the data connnections\n\t\t}\n\n        async override internal Task RunPage(Pages pgs, Row row)\n\t\t{\n\t\t\tReport r = pgs.Report;\n\t\t\tif (await IsHidden(r, row))\n\t\t\t\treturn;\n\n            await base.RunPage(pgs, row);\n\n\t\t\t// need to save the owner report and nest in this defintion\n\t\t\tReportDefn saveReport = r.ReportDefinition;\n            NeedPassword np = r.GetDataSourceReferencePassword;   // get current password\n\n\t\t\tr.SetReportDefinition(_ReportDefn);\n\t\t\tr.Folder = _ReportDefn.ParseFolder;\t\t// folder needs to get set since the id of the report is used by the cache\n            r.GetDataSourceReferencePassword = np;\n\n\t\t\tDataSourcesDefn saveDS = r.ParentConnections;\n\t\t\tif (this.MergeTransactions)\n\t\t\t\tr.ParentConnections = saveReport.DataSourcesDefn;\n\t\t\telse\n\t\t\t    r.ParentConnections = null;\n\n            r.SubreportDataRetrievalTriggerEvent();\n\n            bool bRows = true;\n\t\t\tif (_Parameters == null)\n\t\t\t{\t// When no parameters we only retrieve data once\n                SubreportWorkClass wc = r.Cache.Get(this, \"report\") as SubreportWorkClass;\n\n\t\t\t\tif (wc == null)\n\t\t\t\t{   // run report first time; \n\t\t\t\t\tbRows = await r.RunGetData(null);\n                    if (!r.IsSubreportDataRetrievalDefined)       // if use has defined subreportdataretrieval they might set data\n                        r.Cache.Add(this, \"report\", new SubreportWorkClass(bRows));\t    // so we can't cache\n\t\t\t\t}\n                else\n                    bRows = wc.bRows;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n                await SetSubreportParameters(r, row);\t\t// apply the parameters\n\t\t\t\tbRows = await r.RunGetData(null);\n\t\t\t}\n\n\t\t\tSetPageLeft(r);\t\t\t\t// Set the Left attribute since this will be the margin for this report\n\n\t\t\tSetPagePositionBegin(pgs);\n\n            float yOffset;\n\n            if (bRows)  // Only run subreport if have a row in some Dataset\n            {\n                //\n                // Run the subreport -- this is the major effort in creating the display objects in the page\n                //\n                await r.ReportDefinition.Body.RunPage(pgs);\t\t// create a the subreport items\n                yOffset = pgs.CurrentPage.YOffset;\n            }\n            else\n            {   // Handle NoRows message \n                string msg;\n                if (this.NoRows != null)\n                    msg = await this.NoRows.EvaluateString(pgs.Report, null);\n                else\n                    msg = null;\n\n                if (msg != null)\n                {\n                    PageText pt = new PageText(msg);\n                    await SetPagePositionAndStyle(pgs.Report, pt, null);\n\n                    if (pt.SI.BackgroundImage != null)\n                        pt.SI.BackgroundImage.H = pt.H;\t\t//   and in the background image\n\n                    pgs.CurrentPage.AddObject(pt);\n\n                    yOffset = pt.Y + pt.H;\n                }\n                else\n                    yOffset = pgs.CurrentPage.YOffset;\n            }\n\n\t\t\tr.SetReportDefinition(saveReport);\t\t\t// restore the current report\n\t\t\tr.ParentConnections = saveDS;\t\t\t\t// restore the data connnections\n\n\t\t\tSetPagePositionEnd(pgs, yOffset);\n\t\t}\n\n        internal override void RemoveWC(Report rpt)\n        {\n            base.RemoveWC(rpt);\n\n            if (_ReportDefn == null)\n                return;\n\n            _ReportDefn.Body.RemoveWC(rpt);\n        }\n\n\t\tprivate async Task<ReportDefn> GetReport(string folder)\n\t\t{\n\t\t\tstring prog;\n\t\t\tstring name;\n\n\t\t\tif (_ReportName[0] == Path.DirectorySeparatorChar ||\n\t\t\t\t_ReportName[0] == Path.AltDirectorySeparatorChar)\n\t\t\t\tname = _ReportName;\n\t\t\telse \n\t\t\t\tname = Path.Combine (folder, _ReportName);\n\n\t\t\tif(!Path.HasExtension (name))\n\t\t\t\tname = Path.ChangeExtension (name, \".rdl\");\n\n\t\t\t// Load and Compile the report\n\t\t\tRDLParser rdlp;\n\t\t\tReport r;\n\t\t\tReportDefn rdefn=null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tprog = GetRdlSource(name);\n\t\t\t\trdlp =  new RDLParser(prog);\n\t\t\t\trdlp.Folder = folder;\n\t\t\t\tif(OwnerReport.OverwriteInSubreport)\n\t\t\t\t{\n\t\t\t\t\trdlp.OverwriteConnectionString = OwnerReport.OverwriteConnectionString;\n\t\t\t\t\trdlp.OverwriteInSubreport = OwnerReport.OverwriteInSubreport;\n\t\t\t\t}\n\n\t\t\t\tr = await rdlp.Parse(OwnerReport.GetObjectNumber());\n\t\t\t\tOwnerReport.SetObjectNumber(r.ReportDefinition.GetObjectNumber());\n\t\t\t\tif (r.ErrorMaxSeverity > 0) \n\t\t\t\t{\n\t\t\t\t\tstring err;\n\t\t\t\t\tif (r.ErrorMaxSeverity > 4)\n\t\t\t\t\t\terr = string.Format(\"Subreport {0} failed to compile with the following errors.\", this._ReportName);\n\t\t\t\t\telse\n\t\t\t\t\t\terr = string.Format(\"Subreport {0} compiled with the following warnings.\", this._ReportName);\n\t\t\t\t\tOwnerReport.rl.LogError(r.ErrorMaxSeverity, err);\n\t\t\t\t\tOwnerReport.rl.LogError(r.rl);\t// log all these errors\n\t\t\t\t\tOwnerReport.rl.LogError(0, \"End of Subreport errors\");\n\t\t\t\t}\n\t\t\t\t// If we've loaded the report; we should tell it where it got loaded from\n\t\t\t\tif (r.ErrorMaxSeverity <= 4) \n\t\t\t\t{\t\n\t\t\t\t\trdefn = r.ReportDefinition;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\tOwnerReport.rl.LogError(8, string.Format(\"Subreport {0} failed with exception. {1}\", this._ReportName, ex.Message));\n\t\t\t}\n\t\t\treturn rdefn;\n\t\t}\n\n\t\tprivate string GetRdlSource(string name)\n\t\t{\n\t\t\t// TODO: at some point might want to provide interface so that read can be controlled\n\t\t\t//         by server:  would allow for caching etc.\n            //if (this.OwnerReport)\n\n            // EBN 30/03/2014\n            // If a cross object has been defined, use it to get the content of the sub report\n            if (_SubReportGetContent.SubReportGetContent != null)\n            {\n                try\n                {\n                    return _SubReportGetContent.SubReportGetContent(name);\n                }\n                catch\n                {\n                    return null;\n                }\n            }\n   \n            StreamReader fs=null;\n\t\t\tstring prog=null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tfs = new StreamReader(name);\t\t\n\t\t\t\tprog = fs.ReadToEnd();\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (fs != null)\n\t\t\t\t\tfs.Close();\n\t\t\t}\n\n\t\t\treturn prog;\n\t\t}\n\n\t\tprivate async Task SetSubreportParameters(Report rpt, Row row)\n\t\t{\n\t\t\tUserReportParameter userp;\n\t\t\tforeach (SubreportParameter srp in _Parameters.Items)\n\t\t\t{\n\t\t\t\tuserp=null;\t\t\t\t\t\t\n\t\t\t\tforeach (UserReportParameter urp in rpt.UserReportParameters)\n\t\t\t\t{\n\t\t\t\t\tif (urp.Name == srp.Name.Nm)\n\t\t\t\t\t{\n\t\t\t\t\t\tuserp = urp;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (userp == null)\n\t\t\t\t{\t// parameter name not found\n\t\t\t\t\tthrow new Exception(\n\t\t\t\t\t\tstring.Format(Strings.Subreport_Error_SubreportNotParameter, _ReportName, srp.Name.Nm));\n\t\t\t\t}\n\t\t\t\tobject v = await srp.Value.Evaluate(rpt, row);\n\t\t\t\tuserp.Value = v;\n\t\t\t}\n\t\t}\n\n\t\tinternal string ReportName\n\t\t{\n\t\t\tget { return  _ReportName; }\n\t\t\tset {  _ReportName = value; }\n\t\t}\n\n\t\tinternal ReportDefn ReportDefn\n\t\t{\n\t\t\tget { return _ReportDefn; }\n\t\t}\n\n\t\tinternal SubReportParameters Parameters\n\t\t{\n\t\t\tget { return  _Parameters; }\n\t\t\tset {  _Parameters = value; }\n\t\t}\n\n\t\tinternal Expression NoRows\n\t\t{\n\t\t\tget { return  _NoRows; }\n\t\t\tset {  _NoRows = value; }\n\t\t}\n\n\t\tinternal bool MergeTransactions\n\t\t{\n\t\t\tget { return  _MergeTransactions; }\n\t\t\tset {  _MergeTransactions = value; }\n\t\t}\n\t}\n\n    class SubreportWorkClass\n    {\n        internal bool bRows;\n        internal SubreportWorkClass(bool rows)\n        {\n            bRows = rows;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/SubreportParameter.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// A parameter for a subreport.\n\t///</summary>\n\t[Serializable]\n\tinternal class SubreportParameter : ReportLink\n\t{\n\t\tName _Name;\t\t// Name of the parameter\n\t\tExpression _Value;\t// (Variant) An expression that evaluates to the value to\n\t\t\t\t\t\t\t// hand in for the parameter to the Subreport.\n\t\n\t\tinternal SubreportParameter(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Name=null;\n\t\t\t_Value=null;\n\t\t\t// Run thru the attributes\n\t\t\tforeach(XmlAttribute xAttr in xNode.Attributes)\n\t\t\t{\n\t\t\t\tswitch (xAttr.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Name\":\n\t\t\t\t\t\t_Name = new Name(xAttr.Value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (_Name == null)\n\t\t\t{\t// Name is required for parameters\n\t\t\t\tOwnerReport.rl.LogError(8, \"Parameter Name attribute required.\");\n\t\t\t}\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Value\":\n\t\t\t\t\t\t_Value = new Expression(r, this, xNodeLoop, ExpressionType.Variant);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Subreport parameter element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (_Value == null)\n\t\t\t{\t// Value is required for parameters\n\t\t\t\tOwnerReport.rl.LogError(8, \"The Parameter Value element is required but was not specified.\");\n\t\t\t}\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Value != null)\n                await _Value.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Name Name\n\t\t{\n\t\t\tget { return  _Name; }\n\t\t\tset {  _Name = value; }\n\t\t}\n\n\t\tinternal Expression Value\n\t\t{\n\t\t\tget { return  _Value; }\n\t\t\tset {  _Value = value; }\n\t\t}\n\n\t\tinternal async Task<string> ValueValue(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Value == null)\n\t\t\t\treturn \"\";\n\n\t\t\treturn await _Value.EvaluateString(rpt, r);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/SubreportParameters.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// The collection of parameters for a subreport.\n\t///</summary>\n\t[Serializable]\n\tinternal class SubReportParameters : ReportLink\n\t{\n        List<SubreportParameter> _Items;\t\t\t// list of SubreportParameter\n\n\t\tinternal SubReportParameters(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tSubreportParameter rp;\n            _Items = new List<SubreportParameter>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Parameter\":\n\t\t\t\t\t\trp = new SubreportParameter(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\trp=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown SubreportParameters element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (rp != null)\n\t\t\t\t\t_Items.Add(rp);\n\t\t\t}\n\t\t\tif (_Items.Count > 0)\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (SubreportParameter rp in _Items)\n\t\t\t{\n                await rp.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<SubreportParameter> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Subtotal.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Definition of a subtotal column or row.\n\t///</summary>\n\t[Serializable]\n\tinternal class Subtotal : ReportLink\n\t{\n\t\tReportItems _ReportItems;\t// The header cell for a subtotal column or row.\n\t\t\t\t\t// This ReportItems collection must contain\n\t\t\t\t\t// exactly one Textbox. The Top, Left, Height\n\t\t\t\t\t// and Width for this ReportItem are ignored.\n\t\t\t\t\t// The position is taken to be 0, 0 and the size to\n\t\t\t\t\t// be 100%, 100%.\n\t\tStyle _Style;\t// Style properties that override the style\n\t\t\t\t\t\t// properties for all top-level report items\n\t\t\t\t\t\t// contained in the subtotal column/row\n\t\t\t\t\t\t// At Subtotal Column/Row intersections, Row\n\t\t\t\t\t\t// style takes priority\n\t\tSubtotalPositionEnum _Position;\t// Before | After (default)\n\t\t\t\t\t\t\t// Indicates whether this subtotal column/row\n\t\t\t\t\t\t\t// should appear before (left/above) or after\n\t\t\t\t\t\t\t// (right/below) the detail columns/rows.\n\t\tstring _DataElementName;\t// The name to use for this subtotal.\n\t\t\t\t\t\t\t\t\t//  Default: �Total�\n\t\tDataElementOutputEnum _DataElementOutput;\t// Indicates whether the subtotal should appear in a data rendering.\n\t\t\t\t\t\t\t\t\t// Default: NoOutput\n\t\n\t\tinternal Subtotal(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_ReportItems=null;\n\t\t\t_Style=null;\n\t\t\t_Position=SubtotalPositionEnum.After;\n\t\t\t_DataElementName=\"Total\";\n\t\t\t_DataElementOutput=DataElementOutputEnum.NoOutput;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"ReportItems\":\n\t\t\t\t\t\t_ReportItems = new ReportItems(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Style\":\n\t\t\t\t\t\t_Style = new Style(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Position\":\n\t\t\t\t\t\t_Position = SubtotalPosition.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"DataElementName\":\n\t\t\t\t\t\t_DataElementName = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"DataElementOutput\":\n\t\t\t\t\t\t_DataElementOutput = Majorsilence.Reporting.Rdl.DataElementOutput.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_ReportItems == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"Subtotal requires the ReportItems element.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_ReportItems != null)\n                await _ReportItems.FinalPass();\n\t\t\tif (_Style != null)\n                await _Style.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal ReportItems ReportItems\n\t\t{\n\t\t\tget { return  _ReportItems; }\n\t\t\tset {  _ReportItems = value; }\n\t\t}\n\n\t\tinternal Style Style\n\t\t{\n\t\t\tget { return  _Style; }\n\t\t\tset {  _Style = value; }\n\t\t}\n\n\t\tinternal SubtotalPositionEnum Position\n\t\t{\n\t\t\tget { return  _Position; }\n\t\t\tset {  _Position = value; }\n\t\t}\n\n\t\tinternal string DataElementName\n\t\t{\n\t\t\tget { return  _DataElementName; }\n\t\t\tset {  _DataElementName = value; }\n\t\t}\n\n\t\tinternal DataElementOutputEnum DataElementOutput\n\t\t{\n\t\t\tget { return  _DataElementOutput; }\n\t\t\tset {  _DataElementOutput = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/SubtotalPosition.cs",
    "content": "\nusing System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Handle the matrix subtotal position: before, after\n\t///</summary>\n\tinternal enum SubtotalPositionEnum\n\t{\n\t\tBefore,\t\t\t// left/above\n\t\tAfter\t\t\t// right/below\n\n\t}\n\n\tinternal class SubtotalPosition\n\t{\n\t\tstatic internal SubtotalPositionEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tSubtotalPositionEnum rs;\n\n\t\t\tswitch (s)\n\t\t\t{\t\t\n\t\t\t\tcase \"Before\":\n\t\t\t\t\trs = SubtotalPositionEnum.Before;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"After\":\n\t\t\t\t\trs = SubtotalPositionEnum.After;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\n\t\t\t\t\trl.LogError(4, \"Unknown SubtotalPosition '\" + s + \"'.  Before assumed.\");\n\t\t\t\t\trs = SubtotalPositionEnum.Before;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn rs;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Table.cs",
    "content": "﻿\nusing System;\nusing System.Xml;\nusing System.IO;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Diagnostics;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Table definition and processing.  Inherits from DataRegion which inherits from ReportItem.\n\t///</summary>\n\t[Serializable]\n\tinternal class Table : DataRegion\n\t{\n\t\tTableColumns _TableColumns;\t// The columns in the table\n\t\tHeader _Header;\t\t\t// The table header rows\n\t\tTableGroups _TableGroups;\t// The groups (group expressions/headers/footers) for the table\n\t\tDetails _Details;\t\t// The details rows for the table\n\t\t\t\t\t\t\t\t//\tThe table must have at least one of:\n\t\t\t\t\t\t\t\t//\tDetails, Header or Footer\n\t\tFooter _Footer;\t\t\t// The table footer rows\n\t\tbool _FillPage;\t\t\t// Indicates the table should expand to\n\t\t\t\t\t\t\t\t//\tfill the page, pushing items below it\n\t\t\t\t\t\t\t\t//\tto the bottom of the page.\n\t\tstring _DetailDataElementName;\t//The name to use for the data element\n\t\t\t\t\t\t\t\t\t// for instances of this group. Ignored if\n\t\t\t\t\t\t\t\t\t// there is a grouping defined for the details.\n\t\t\t\t\t\t\t\t\t// Default: �Details�\n\t\tstring _DetailDataCollectionName;\t// The name to use for the data element\n\t\t\t\t\t\t\t\t\t\t\t// for the collection of all instances of this group.\n\t\t\t\t\t\t\t\t\t\t\t// Default: �Details_Collection�\n\t\tDataElementOutputEnum _DetailDataElementOutput;\t// Indicates whether the details should appear in a data rendering.\n        bool _IsGrid;\n\t\n\t\tinternal Table(ReportDefn r, ReportLink p, XmlNode xNode):base(r,p,xNode)\n\t\t{\n\t\t\t_TableColumns=null;\n\t\t\t_Header=null;\n\t\t\t_TableGroups=null;\n\t\t\t_Details=null;\n\t\t\t_Footer=null;\n\t\t\t_FillPage=true;\n\t\t\t_DetailDataElementName=\"Details\";\n\t\t\t_DetailDataCollectionName=\"Details_Collection\";\n\t\t\t_DetailDataElementOutput=DataElementOutputEnum.Output;\n            _IsGrid = xNode.Name != \"Table\";                 // a grid is a restricted table to no data behind it\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"tablecolumns\":\n\t\t\t\t\t\t_TableColumns = new TableColumns(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"header\":\n\t\t\t\t\t\t_Header = new Header(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"tablegroups\":\n\t\t\t\t\t\t_TableGroups = new TableGroups(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"details\":\n\t\t\t\t\t\t_Details = new Details(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"gooter\":\n\t\t\t\t\t\t_Footer = new Footer(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"fillpage\":\n\t\t\t\t\t\t_FillPage = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"detaildataelementname\":\n\t\t\t\t\t\t_DetailDataElementName = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"detaildatacollectionname\":\n\t\t\t\t\t\t_DetailDataCollectionName = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"detaildataelementoutput\":\n\t\t\t\t\t\t_DetailDataElementOutput = Majorsilence.Reporting.Rdl.DataElementOutput.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tif (DataRegionElement(xNodeLoop))\t// try at DataRegion level\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t// don't know this element - log it\n                        OwnerReport.rl.LogError(4, \"Unknown \" + xNode.Name + \" element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tDataRegionFinish();\t\t\t// Tidy up the DataRegion\n\t\t\tif (_TableColumns == null)\n\t\t\t{\n\t\t\t\tOwnerReport.rl.LogError(8, \"TableColumns element must be specified for a \"+xNode.Name+\".\");\n\t\t\t\treturn;\n\t\t\t}\n\n            // Verify Grid restrictions\n            if (_IsGrid)\n            {\n                if (_TableGroups != null)\n                    OwnerReport.rl.LogError(8, \"TableGroups not allowed in Grid element '\" + xNode.Name + \"'.\");\n            }\n\n\t\t\tif (OwnerReport.rl.MaxSeverity < 8)\n\t\t\t\tVerifyCC();\t\t\t// Verify column count\n\t\t}\n\n\t\tprivate void VerifyCC()\n\t\t{\n\t\t\tint colCount = this._TableColumns.Items.Count;\n\t\t\tif (this._Header != null)\n\t\t\t\tVerifyCCTableRows(\"Table Header\", _Header.TableRows, colCount);\n\n\t\t\tif (this._Footer != null)\n\t\t\t\tVerifyCCTableRows(\"Table Footer\", _Footer.TableRows, colCount);\n\n\t\t\tif (this._Details != null)\n\t\t\t\tVerifyCCTableRows(\"Table Details\", _Details.TableRows, colCount);\n\n\t\t\tif (this._TableGroups != null)\n\t\t\t{\n\t\t\t\tforeach (TableGroup tg in _TableGroups.Items)\n\t\t\t\t{\n\t\t\t\t\tif (tg.Header != null)\n\t\t\t\t\t\tVerifyCCTableRows(\"TableGroup Header\", tg.Header.TableRows, colCount);\n\n\t\t\t\t\tif (tg.Footer != null)\n\t\t\t\t\t\tVerifyCCTableRows(\"TableGroup Footer\", tg.Footer.TableRows, colCount);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprivate void VerifyCCTableRows(string label, TableRows trs, int colCount)\n\t\t{\n\t\t\tforeach (TableRow tr in trs.Items)\n\t\t\t{\n\t\t\t\tint cols=0;\n\t\t\t\tforeach (TableCell tc in tr.TableCells.Items)\n\t\t\t\t{\n\t\t\t\t\tcols += tc.ColSpan;\n\t\t\t\t}\n\t\t\t\tif (cols != colCount)\n\t\t\t\t\tOwnerReport.rl.LogError(8, String.Format(\"{0} must have the same number of columns as TableColumns.\", label));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tasync override internal Task FinalPass()\n\t\t{\n            await base.FinalPass();\n\t\t\tfloat totalHeight=0;\n\n\t\t\tif (_TableColumns != null)\n                await _TableColumns.FinalPass();\n\t\t\tif (_Header != null)\n\t\t\t{\n                await _Header.FinalPass();\n\t\t\t\ttotalHeight += _Header.TableRows.DefnHeight();\n\t\t\t}\n\t\t\tif (_TableGroups != null)\n\t\t\t{\n                await _TableGroups.FinalPass();\n\t\t\t\ttotalHeight += _TableGroups.DefnHeight();\n\t\t\t}\n\t\t\tif (_Details != null)\n\t\t\t{\n                await _Details.FinalPass();\n\t\t\t\ttotalHeight += _Details.TableRows.DefnHeight();\n\t\t\t}\n\t\t\tif (_Footer != null)\n\t\t\t{\n                await _Footer.FinalPass();\n\t\t\t\ttotalHeight += _Footer.TableRows.DefnHeight();\n\t\t\t}\n\n\t\t\tif (this.Height == null)\n\t\t\t{\t// Calculate a height based on the sum of the TableRows\n\t\t\t\tthis.Height = new RSize(this.OwnerReport, \n\t\t\t\t\tstring.Format(NumberFormatInfo.InvariantInfo,\"{0:0.00}pt\", totalHeight));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tasync override internal Task Run(IPresent ip, Row row)\n\t\t{\n\t\t\tReport r = ip.Report();\n\t\t\tTableWorkClass wc = GetValue(r);\n\n            if (_IsGrid)\n                wc.Data = Rows.CreateOneRow(r);\n            else\n\t\t\t    wc.Data = await GetFilteredData(r, row);\n\n\t\t\tif (!await AnyRows(ip, wc.Data))\t\t// if no rows return\n\t\t\t\treturn;                 //   nothing left to do\n\n            await RunPrep(r, row, wc);\n\n\t\t\tif (!await ip.TableStart(this, row))\n\t\t\t\treturn;\t\t\t\t\t\t// render doesn't want to continue\n\n\t\t\tif (_TableColumns != null)\n\t\t\t\t_TableColumns.Run(ip, row);\n\n\t\t\t// Header\n\t\t\tif (_Header != null)\n\t\t\t{\n\t\t\t\tip.TableHeaderStart(_Header, row);\n\t\t\t\tRow frow = wc.Data.Data.Count > 0?  wc.Data.Data[0]: null;\n                await _Header.Run(ip, frow);\n\t\t\t\tip.TableHeaderEnd(_Header, row);\n\t\t\t}\n\t\t\t\t\t\t   \n\t\t\t// Body\n\t\t\tip.TableBodyStart(this, row);\n\t\t\tif (wc.RecursiveGroup != null)\n                await RunRecursiveGroups(ip, wc);\n\t\t\telse\n                await RunGroups(ip, wc.Groups, wc);\n\t\t\tip.TableBodyEnd(this, row);\n\n\t\t\t// Footer\n\t\t\tif (_Footer != null)\n\t\t\t{\n\t\t\t\tip.TableFooterStart(_Footer, row);\n\t\t\t\tRow lrow = wc.Data.Data.Count > 0?  wc.Data.Data[wc.Data.Data.Count-1]: null;\n                await _Footer.Run(ip, lrow);\n\t\t\t\tip.TableFooterEnd(_Footer, row);\n\t\t\t}\n\n            await ip.TableEnd(this, row);\n\t\t\tRemoveValue(r);\n\n\t\t\treturn;\n\t\t}\n\n\t\tasync override internal Task RunPage(Pages pgs, Row row)\n\t\t{\t\n\t\t\tReport r = pgs.Report;\n\t\t\tif (await IsHidden(r, row))\n\t\t\t\treturn;\n\n\t\t\tTableWorkClass wc = GetValue(r);\n            if (_IsGrid)\n                wc.Data = Rows.CreateOneRow(r);\n            else\n                wc.Data = await GetFilteredData(r, row);\n\n\t\t\tSetPagePositionBegin(pgs);\n\n\t\t\tif (!await AnyRowsPage(pgs, wc.Data))\t\t// if no rows return\n\t\t\t\treturn;                     //   nothing left to do\n\n            await RunPrep(r, row, wc);\n\n\t\t\tRunPageRegionBegin(pgs);\n\n\t\t\tPage p = pgs.CurrentPage;\n\t\t\tp.YOffset += this.RelativeY(r);\n\n            // Calculate the xpositions of the columns\n            await TableColumns.CalculateXPositions(r, GetOffsetCalc(r) + LeftCalc(r), row);\n\n            await RunPageHeader(pgs, wc.Data.Data[0], true, null);\n\n            if (wc.RecursiveGroup != null)\n            {\n                await RunRecursiveGroupsPage(pgs, wc);\n            }\n            else\n            {\n                float groupHeight = 0;\n                if (wc.Data.Data.Count > 0 && _Footer != null)\n                    groupHeight = await _Footer.HeightOfRows(pgs, wc.Data.Data[0]);\n                await RunGroupsPage(pgs, wc, wc.Groups, wc.Data.Data.Count - 1, groupHeight);\n            }\n\n\t\t    // Footer\n            if (row == null)\n            {\n                // Row == null means the inital/last page\n                Row lRow = wc.Data.Data.Count > 0 ? wc.Data.Data[wc.Data.Data.Count - 1] : null;\n                await RunPageFooter(pgs, lRow, true);\n            }\n\n            // dst, use the code above\n\t\t    //if (_Footer != null)\n            //{\n            //    Row lrow = wc.Data.Data.Count > 0?  wc.Data.Data[wc.Data.Data.Count-1]: null;\n            //    p = pgs.CurrentPage;\n            //    // make sure the footer fits on the page\n            //    if (p.YOffset + _Footer.HeightOfRows(pgs, lrow) > pgs.BottomOfPage)\n            //    {\n            //        p = RunPageNew(pgs, p);\n            //        RunPageHeader(pgs, row, false, null);\n            //    }\n            //    _Footer.RunPage(pgs, lrow);\n            //}\n\n\t\t\tRunPageRegionEnd(pgs);\n\n\t\t\tSetPagePositionEnd(pgs, pgs.CurrentPage.YOffset);\n\t\t\tRemoveValue(r);\n\t\t\treturn;\n\t\t}\n\n        internal bool IsGrid { get { return _IsGrid; } }\n\n        internal async Task RunPageFooter(Pages pgs, Row row, bool bLast)\n        {\n            if (_Footer != null && (_Footer.RepeatOnNewPage || bLast))\n            {\n                Page p = pgs.CurrentPage;\n                if (p.YOffset + await _Footer.HeightOfRows(pgs, row) > pgs.BottomOfPage)\n                {\n                    p = RunPageNew(pgs, p);\n                    await RunPageHeader(pgs, row, false, null);\n                }\n                await _Footer.RunPage(pgs, row);                \n            }\n        }\n\n        internal async Task<float> GetPageFooterHeight(Pages pgs, Row row)\n        {\n            // Calculate height of footer on every page\n            float FooterHeight = 0;\n\n            if (Footer != null && Footer.RepeatOnNewPage)\n                FooterHeight += await Footer.HeightOfRows(pgs, row);\n\n            // Need add calculation for group footer which show on every page\n            return FooterHeight;\n        }\n\n\t\tinternal async Task RunPageHeader(Pages pgs, Row frow, bool bFirst, TableGroup stoptg)\n\t\t{\n\t\t\t// Do the table headers\n\t\t\tbool isEmpty = pgs.CurrentPage.IsEmpty();\n\n\t\t\tif (_Header != null && (_Header.RepeatOnNewPage || bFirst))\n\t\t\t{\n                await _Header.RunPage(pgs, frow);\n\t\t\t\tif (isEmpty)\n\t\t\t\t\tpgs.CurrentPage.SetEmpty();\t\t// Consider this empty of data\n\t\t\t}\n\t\t\t\n\t\t\tif (bFirst)\t\t\t\t\t\t\t// the very first time we'll output the header (and not consider page empty)\n\t\t\t\treturn;\n\n\t\t\tif (_TableGroups == null)\n\t\t\t{\n\t\t\t\tpgs.CurrentPage.SetEmpty();\t\t// Consider this empty of data\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Do the group headers\n\t\t\tforeach (TableGroup tg in _TableGroups.Items)\n\t\t\t{\n\t\t\t\tif (stoptg != null && tg == stoptg)\n\t\t\t\t\tbreak;\n\t\t\t\tif (tg.Header != null)\n\t\t\t\t{\n\t\t\t\t\tif (tg.Header.RepeatOnNewPage)\n\t\t\t\t\t{\n                        await tg.Header.RunPage(pgs, frow);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpgs.CurrentPage.SetEmpty();\t\t// Consider this empty of data\n\n\t\t\treturn;\n\t\t}\n\n\t\tasync Task RunPrep(Report rpt, Row row, TableWorkClass wc)\n\t\t{\n\t\t\tGroupEntry[] currentGroups; \n\n\t\t\t// We have some data\n\t\t\tif (_TableGroups != null || \n\t\t\t\t(_Details != null &&\n\t\t\t\t (_Details.Sorting != null ||\n\t\t\t\t _Details.Grouping != null)))\t\t// fix up the data\n\t\t\t{\n\t\t\t\tList<Row> saveData = wc.Data.Data;\n\t\t\t\tGrouping gr;\n\t\t\t\tSorting srt; \n\t\t\t\tif (_Details == null)\n\t\t\t\t{\n\t\t\t\t\tgr = null;  srt = null;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tgr = _Details.Grouping;\n\t\t\t\t\tsrt = _Details.Sorting;\n\t\t\t\t}\n\n\t\t\t\twc.Data = new Rows(rpt, _TableGroups, gr, srt);\n\t\t\t\twc.Data.Data = saveData;\n\t\t\t\twc.Data.Sort();\n                await PrepGroups(rpt, wc);\n\t\t\t}\n\n\t\t\t// If we haven't formed any groups then form one with all rows\n\t\t\tif (wc.Groups == null)\n\t\t\t{\n\t\t\t\twc.Groups = new List<GroupEntry>();\n\t\t\t\tGroupEntry ge = new GroupEntry(null, null, 0);\n\t\t\t\tif (wc.Data.Data != null)\t\t// Do we have any data?\n\t\t\t\t\tge.EndRow = wc.Data.Data.Count-1;\t// yes\n\t\t\t\telse\n\t\t\t\t\tge.EndRow = -1;\t\t\t\t\t// no\n\t\t\t\twc.Groups.Add(ge);\t\t\t// top group\n\t\t\t\tcurrentGroups = new GroupEntry[1];\n\t\t\t}\n\t\t\telse if (_TableGroups != null)\n\t\t\t{\n\t\t\t\tint count = _TableGroups.Items.Count;\n\t\t\t\tif (_Details != null && _Details.Grouping != null)\n\t\t\t\t\tcount++;\n\n\t\t\t\tcurrentGroups = new GroupEntry[count];\n\t\t\t}\n\t\t\telse\n\t\t\t\tcurrentGroups = new GroupEntry[1];\n\n\t\t\twc.Data.CurrentGroups = currentGroups;\n\n\t\t\tSortGroups(rpt, wc.Groups, wc);\n\t\t}\n\n\t\tprivate void SortGroups(Report rpt, List<GroupEntry> groupEntries, TableWorkClass wc)\n\t\t{\n\t\t\tGroupEntry fge = (GroupEntry) (groupEntries[0]);\n\t\t\tif (fge.Sort != null)\n\t\t\t{\n\t\t\t\tGroupEntryCompare gec = new GroupEntryCompare(rpt, wc);\n\t\t\t\tRunGroupsSetGroups(rpt, wc, groupEntries);\n\t\t\t\tgroupEntries.Sort(gec);\n\t\t\t}\n\n\t\t\t// drill down into nested groups\n\t\t\tforeach (GroupEntry ge in groupEntries)\n\t\t\t{\n\t\t\t\tif (ge.NestedGroup.Count > 0)\n\t\t\t\t\tSortGroups(rpt, ge.NestedGroup, wc);\n\t\t\t}\n\t\t}\n\n\t\tprivate async Task PrepGroups(Report rpt, TableWorkClass wc)\n\t\t{\n\t\t\twc.RecursiveGroup = null;\t\t\n\t\t\tif (_TableGroups == null)\n\t\t\t{\t// no tablegroups; check to ensure details is grouped\n\t\t\t\tif (_Details == null || _Details.Grouping == null)\n\t\t\t\t\treturn;\t\t\t// no groups to prepare\n\t\t\t}\n\n\t\t\tint i=0;\n\t\t\t// 1) Build array of all GroupExpression objects\n            List<GroupExpression> gea = new List<GroupExpression>();\n\t\t\t//    count the number of groups\n\t\t\tint countG=0;\n\t\t\tif (_TableGroups != null)\n\t\t\t\tcountG = _TableGroups.Items.Count;\n\t\t\t\n\t\t\tGrouping dg=null;\n\t\t\tSorting ds=null;\n\t\t\tif (_Details != null && _Details.Grouping != null)\n\t\t\t{\n\t\t\t\tdg = _Details.Grouping;\n\t\t\t\tds = _Details.Sorting;\n\t\t\t\tcountG++;\n\t\t\t}\n\t\t\tGroupEntry[] currentGroups = new GroupEntry[countG++];\n\t\t\tif (_TableGroups != null)\n\t\t\t{\t// add in the groups for the tablegroup\n\t\t\t\tforeach (TableGroup tg in _TableGroups.Items)\n\t\t\t\t{\n\t\t\t\t\tif (tg.Grouping.ParentGroup != null)\n\t\t\t\t\t\twc.RecursiveGroup = tg.Grouping;\n\t\t\t\t\ttg.Grouping.SetIndex(rpt, i);\t\t// set the index of this group (so we can find the GroupEntry)\n\t\t\t\t\tcurrentGroups[i++] = new GroupEntry(tg.Grouping, tg.Sorting, 0);\n\t\t\t\t\tforeach (GroupExpression ge in tg.Grouping.GroupExpressions.Items)\n\t\t\t\t\t{\n\t\t\t\t\t\tgea.Add(ge);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (dg != null)\n\t\t\t{\t// add in the groups for the details grouping\n\t\t\t\tif (dg.ParentGroup != null)\n\t\t\t\t\twc.RecursiveGroup = dg;\n\t\t\t\tdg.SetIndex(rpt, i);\t\t// set the index of this group (so we can find the GroupEntry)\n\t\t\t\tcurrentGroups[i++] = new GroupEntry(dg, ds, 0);\n\t\t\t\tforeach (GroupExpression ge in dg.GroupExpressions.Items)\n\t\t\t\t{\n\t\t\t\t\tgea.Add(ge);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (wc.RecursiveGroup != null)\n\t\t\t{\n\t\t\t\tif (gea.Count != 1)\t\t// Limitiation of implementation\n\t\t\t\t\tthrow new Exception(Strings.Table_Error_RecursiveGroupsMustOnlyGroupDefinition);\n\n                await PrepRecursiveGroup(rpt, wc);\t// only one group and it's recursive: optimization \n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Save the typecodes, and grouping by groupexpression; for later use\n\t\t\tTypeCode[] tcs = new TypeCode[gea.Count];\n\t\t\tGrouping[] grp = new Grouping[gea.Count];\n\t\t\ti=0;\n\t\t\tforeach (GroupExpression ge in gea)\n\t\t\t{\n\t\t\t\tgrp[i] = (Grouping) (ge.Parent.Parent);\t\t\t// remember the group\n\t\t\t\ttcs[i++] = ge.Expression.GetTypeCode();\t// remember type of expression\n\t\t\t}\n\n\t\t\t// 2) Loop thru the data, then loop thru the GroupExpression list\n\t\t\twc.Groups = new List<GroupEntry>();\n\t\t\tobject[] savValues=null;\n\t\t\tobject[] grpValues=null;\n\t\t\tint rowCurrent = 0;\n\n\t\t\tforeach (Row row in wc.Data.Data)\n\t\t\t{\n\t\t\t\t// Get the values for all the group expressions\n\t\t\t\tif (grpValues == null)\n\t\t\t\t\tgrpValues = new object[gea.Count];\n\n\t\t\t\ti=0;\n\t\t\t\tforeach (GroupExpression ge in gea)\n\t\t\t\t{\n\t\t\t\t\tif (((Grouping)(ge.Parent.Parent)).ParentGroup == null)\t\n\t\t\t\t\t\tgrpValues[i++] = await ge.Expression.Evaluate(rpt, row);\n\t\t\t\t\telse\n\t\t\t\t\t\tgrpValues[i++] = null;\t// Want all the parentGroup to evaluate equal\n\t\t\t\t}\n\n\t\t\t\t// For first row we just primed the pump; action starts on next row\n\t\t\t\tif (rowCurrent == 0)\t\t\t// always start new group on first row\n\t\t\t\t{\n\t\t\t\t\trowCurrent++;\n\t\t\t\t\tsavValues = grpValues;\n\t\t\t\t\tgrpValues = null;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// compare the values; if change then we have a group break\n\t\t\t\tfor (i = 0; i < savValues.Length; i++)\n\t\t\t\t{\n\t\t\t\t\tif (Filter.ApplyCompare(tcs[i], savValues[i], grpValues[i]) != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\t// start a new group; and force a break on every subgroup\n\t\t\t\t\t\tGroupEntry saveGe=null;\t\n\t\t\t\t\t\tfor (int j = grp[i].GetIndex(rpt); j < currentGroups.Length; j++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcurrentGroups[j].EndRow = rowCurrent-1;\n\t\t\t\t\t\t\tif (j == 0)\n\t\t\t\t\t\t\t\twc.Groups.Add(currentGroups[j]);\t\t// top group\n\t\t\t\t\t\t\telse if (saveGe == null)\n\t\t\t\t\t\t\t\tcurrentGroups[j-1].NestedGroup.Add(currentGroups[j]);\n\t\t\t\t\t\t\telse \n\t\t\t\t\t\t\t\tsaveGe.NestedGroup.Add(currentGroups[j]);\n\n\t\t\t\t\t\t\tsaveGe = currentGroups[j];\t// retain this GroupEntry\n\t\t\t\t\t\t\tcurrentGroups[j] = new GroupEntry(currentGroups[j].Group,currentGroups[j].Sort, rowCurrent);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsavValues = grpValues;\n\t\t\t\t\t\tgrpValues = null;\n\t\t\t\t\t\tbreak;\t\t// break out of the value comparison loop\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\trowCurrent++;\n\t\t\t}\n\n\t\t\t// End of all rows force break on end of rows\n\t\t\tfor (i = 0; i < currentGroups.Length; i++)\n\t\t\t{\n\t\t\t\tcurrentGroups[i].EndRow = rowCurrent-1;\n\t\t\t\tif (i == 0)\n\t\t\t\t\twc.Groups.Add(currentGroups[i]);\t\t// top group\n\t\t\t\telse\n\t\t\t\t\tcurrentGroups[i-1].NestedGroup.Add(currentGroups[i]);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tprivate async Task PrepRecursiveGroup(Report rpt, TableWorkClass wc)\n\t\t{\n\t\t\t// Prepare for processing recursive group\n\t\t\tGrouping g = wc.RecursiveGroup;\n\t\t\tIExpr parentExpr = g.ParentGroup;\n\t\t\tGroupExpression gexpr = g.GroupExpressions.Items[0] as GroupExpression;\n\t\t\tIExpr groupExpr = gexpr.Expression;\n\t\t\tTypeCode tc = groupExpr.GetTypeCode();\n            List<Row> odata = new List<Row>(wc.Data.Data);\t\t\t// this is the old data that we'll recreate using the recursive hierarchy\n            List<Row> newrows = new List<Row>(odata.Count);\n\n\t\t\t// For now we assume on a single top of tree (and it must sort first as null)\n\t\t\t//   spec is incomplete: should have ability to specify starting value of tree\n\t\t\t// TODO: pull all of the rows that start with null\n\t\t\tnewrows.Add(odata[0]);\t\t\t\t\t// add the starting row\n\t\t\todata.RemoveAt(0);\t\t\t\t\t\t//   remove olddata\n\n\t\t\t// we need to build the group entry stack\n\t\t\t// Build the initial one\n\t\t\twc.Groups = new List<GroupEntry>();\n\t\t\tGroupEntry ge = new GroupEntry(null,null, 0);\n\t\t\tge.EndRow = odata.Count-1;\n\t\t\twc.Groups.Add(ge);\t\t\t\t// top group\n\n            List<GroupEntry> ges = new List<GroupEntry>();\n\t\t\tges.Add(ge);\n\n\t\t\t// loop thru the rows and find their children\n\t\t\t//   we place the children right after the parent\n\t\t\t//   this reorders the rows in the form of the hierarchy\n\t\t\tRow r;\n\t\t\tRecursiveCompare rc = new RecursiveCompare(rpt, parentExpr, tc, groupExpr);\n\t\t\tfor (int iRow=0; iRow < newrows.Count; iRow++)\t// go thru the temp rows\n\t\t\t{\n\t\t\t\tr = newrows[iRow];\n\t\t\t\t\n\t\t\t\tr.GroupEntry = ge = new GroupEntry(g, null, iRow);\t// TODO: sort for this group??\n\t\t\t\tr.GroupEntry.EndRow = iRow;\n\n\t\t\t\t// pull out all the rows that match this value\n\t\t\t\tint iMainRow=odata.BinarySearch(r, rc);\n\t\t\t\tif (iMainRow < 0)\n\t\t\t\t{\n\t\t\t\t\tfor (int i=0; i <= r.Level+1 && i < ges.Count; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tge = ges[i] as GroupEntry;\n\t\t\t\t\t\tRow rr = newrows[ge.StartRow];\t// start row has the base level of group\t\n\t\t\t\t\t\tif (rr.Level < r.Level)\t\t\t\t\t\n\t\t\t\t\t\t\tge.EndRow = iRow;\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// look backward for starting row; \n\t\t\t\t//   in case of duplicates, BinarySearch can land on any of the rows\n                object cmpvalue = await groupExpr.Evaluate(rpt, r);\n\n\t\t\t\tint sRow = iMainRow-1;\n\t\t\t\twhile (sRow >= 0)\n\t\t\t\t{\n\t\t\t\t\tobject v = await parentExpr.Evaluate(rpt, odata[sRow]);\n\t\t\t\t\tif (Filter.ApplyCompare(tc, cmpvalue, v) != 0)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tsRow--;\n\t\t\t\t}\n\t\t\t\tsRow++;\t\t// adjust; since we went just prior it\n\t\t\t\t// look forward for ending row\n\t\t\t\tint eRow = iMainRow+1;\n\t\t\t\twhile (eRow < odata.Count)\n\t\t\t\t{\n\t\t\t\t\tobject v = await parentExpr.Evaluate(rpt, odata[eRow]);\n\t\t\t\t\tif (Filter.ApplyCompare(tc, cmpvalue, v) != 0)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\teRow++;\n\t\t\t\t}\n\t\t\t\t// Build a group entry for this\n\t\t\t\tGroupEntry ge2 = ges[r.Level] as GroupEntry;\n\t\t\t\tge2.NestedGroup.Add(ge);\n\t\t\t\tif (r.Level+1 >= ges.Count)\t// ensure we have room in the array (based on level)\n\t\t\t\t\tges.Add(ge);\t\t\t\t\t\t// add to the array\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tges[r.Level+1] = ge;\t\t\t\t// put this in the array\n\t\t\t\t}\n\n\t\t\t\t// add all of them in; want the same order for these rows.\n\t\t\t\tint offset=1;\n\t\t\t\tfor (int tRow=sRow ; tRow < eRow; tRow++)\n\t\t\t\t{\n\t\t\t\t\tRow tr = odata[tRow];\n\t\t\t\t\ttr.Level = r.Level+1;\n\t\t\t\t\tnewrows.Insert(iRow+offset, tr);\n\t\t\t\t\toffset++;\t\n\t\t\t\t}\n\t\t\t\t// remove from old data\n\t\t\t\todata.RemoveRange(sRow, eRow-sRow);\n\t\t\t}\n\n\t\t\t// update the groupentries for the very last row\n\t\t\tint lastrow = newrows.Count-1;\n\t\t\tr = newrows[lastrow];\n\t\t\tfor (int i=0; i < r.Level+1 && i < ges.Count; i++)\n\t\t\t{\n\t\t\t\tge = ges[i] as GroupEntry;\n\t\t\t\tge.EndRow = lastrow;\n\t\t\t}\n\n\t\t\twc.Data.Data = newrows;\t\t// we've completely replaced the rows\n\t\t\treturn;\n\t\t}\n\n\t\tprivate async Task RunGroups(IPresent ip, List<GroupEntry> groupEntries, TableWorkClass wc)\n\t\t{\n\t\t\tReport rpt = ip.Report();\n\t\t\tGroupEntry fge = (GroupEntry) (groupEntries[0]);\n\t\t\tif (fge.Group != null)\n\t\t\t\tip.GroupingStart(fge.Group);\n\n\t\t\tforeach (GroupEntry ge in groupEntries)\n\t\t\t{\n\t\t\t\t// set the group entry value\n\t\t\t\tint index;\n\t\t\t\tif (ge.Group != null)\t// groups?\n\t\t\t\t{\n\t\t\t\t\tip.GroupingInstanceStart(ge.Group);\n\t\t\t\t\tge.Group.ResetHideDuplicates(rpt);\t// reset duplicate checking\n\t\t\t\t\tindex = ge.Group.GetIndex(rpt);\t// yes\n\t\t\t\t}\n\t\t\t\telse\t\t\t\t\t// no; must be main dataset\n\t\t\t\t\tindex = 0;\n\t\t\t\twc.Data.CurrentGroups[index] = ge;\n\n\t\t\t\tif (ge.NestedGroup.Count > 0)\n\t\t\t\t\tRunGroupsSetGroups(rpt, wc, ge.NestedGroup);\n\n\t\t\t\t// Handle the group header\n\t\t\t\tif (ge.Group != null && ge.Group.Parent != null)\n\t\t\t\t{\n\t\t\t\t\tTableGroup tg = ge.Group.Parent as TableGroup;\n\t\t\t\t\tif (tg != null && tg.Header != null)\n\t\t\t\t\t{\n\t\t\t\t\t\t// Calculate the number of table rows below this group; header, footer, details count\n\t\t\t\t\t\tif (ge.NestedGroup.Count > 0)\n\t\t\t\t\t\t\twc.GroupNestCount = RunGroupsCount(ge.NestedGroup, 0);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twc.GroupNestCount = (ge.EndRow - ge.StartRow + 1) * DetailsCount;\n                        await tg.Header.Run(ip, wc.Data.Data[ge.StartRow]);\n\t\t\t\t\t\twc.GroupNestCount = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Handle the nested groups if any\n\t\t\t\tif (ge.NestedGroup.Count > 0)\n                    await RunGroups(ip, ge.NestedGroup, wc);\n\t\t\t\t// If no nested groups then handle the detail rows for the group\n\t\t\t\telse if (_Details != null)\n\t\t\t\t{\n\t\t\t\t\tif (ge.Group != null &&\n\t\t\t\t\t\tge.Group.Parent as TableGroup == null)\n\t\t\t\t\t{   // Group defined on table; means that Detail rows only put out once per group\n                        await _Details.Run(ip, wc.Data, ge.StartRow, ge.StartRow);\n\t\t\t\t\t}\n\t\t\t\t\telse\n                        await _Details.Run(ip, wc.Data, ge.StartRow, ge.EndRow);\n\t\t\t\t}\n\n\t\t\t\t// Do the group footer\n\t\t\t\tif (ge.Group != null)\n\t\t\t\t{\n\t\t\t\t\tif (ge.Group.Parent != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tTableGroup tg = ge.Group.Parent as TableGroup;\t// detail groups will result in null\n\t\t\t\t\t\tif (tg != null && tg.Footer != null)\n                            await tg.Footer.Run(ip, wc.Data.Data[ge.EndRow]);\n\t\t\t\t\t}\n\t\t\t\t\tip.GroupingInstanceEnd(ge.Group);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (fge.Group != null)\n\t\t\t\tip.GroupingEnd(fge.Group);\n\t\t}\n\n        private async Task RunGroupsPage(Pages pgs, TableWorkClass wc, List<GroupEntry> groupEntries, int endRow, float groupHeight)\n\t\t{\n\t\t\tReport rpt = pgs.Report;\n\t\t\tforeach (GroupEntry ge in groupEntries)\n\t\t\t{\n\t\t\t\t// set the group entry value\n\t\t\t\tint index;\n\t\t\t\tif (ge.Group != null)\t// groups?\n\t\t\t\t{\n\t\t\t\t\tge.Group.ResetHideDuplicates(rpt);\t// reset duplicate checking\n\t\t\t\t\tindex = ge.Group.GetIndex(rpt);\t// yes\n\t\t\t\t}\n\t\t\t\telse\t\t\t\t\t// no; must be main dataset\n\t\t\t\t\tindex = 0;\n\t\t\t\twc.Data.CurrentGroups[index] = ge;\n\n\t\t\t\tif (ge.NestedGroup.Count > 0)\n\t\t\t\t\tRunGroupsSetGroups(rpt, wc, ge.NestedGroup);\n\n\t\t\t\t// Handle the group header\n\t\t\t\tif (ge.Group != null)\n\t\t\t\t{\n\t\t\t\t\tTableGroup tg = ge.Group.Parent as TableGroup;\n                     //   if (ge.Group.PageBreakAtStart && !pgs.CurrentPage.IsEmpty())\n\t\t\t\t\t // Add check PageBreakCondition not only PageBreakAtStart\n                    if (ge.Group.PageBreakAtStart && await ge.Group.PageBreakCondition(rpt, wc.Data.Data[ge.StartRow], ge.Group.PageBreakAtStart) && !pgs.CurrentPage.IsEmpty())\n                    {\n\t\t\t\t\t\tRunPageNew(pgs, pgs.CurrentPage);\n                        await RunPageHeader(pgs, wc.Data.Data[ge.StartRow], false, tg);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tg != null && tg.Header != null)\n\t\t\t\t\t{\n\t\t\t\t\t\t// Calculate the number of table rows below this group; header, footer, details count\n\t\t\t\t\t\tif (ge.NestedGroup.Count > 0)\n\t\t\t\t\t\t\twc.GroupNestCount = RunGroupsCount(ge.NestedGroup, 0);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twc.GroupNestCount = (ge.EndRow - ge.StartRow + 1) * DetailsCount;\n\n                        await tg.Header.RunPage(pgs, wc.Data.Data[ge.StartRow]);\n\t\t\t\t\t\twc.GroupNestCount = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfloat footerHeight = await RunGroupsFooterHeight(pgs, wc, ge);\n\n\n                if (ge.EndRow == endRow && (  Footer != null ? !Footer.RepeatOnNewPage: true))\n                {\n                    footerHeight += groupHeight;\n                    }        \n      \n\t\t\t\t// Handle the nested groups if any\n\t\t\t\tif (ge.NestedGroup.Count > 0)\n                    await RunGroupsPage(pgs, wc, ge.NestedGroup, ge.EndRow, footerHeight);\n\t\t\t\t// If no nested groups then handle the detail rows for the group\n\t\t\t\telse if (_Details != null)\n\t\t\t\t{\n\t\t\t\t\tif (ge.Group != null &&\n\t\t\t\t\t\tge.Group.Parent as TableGroup == null)\n\t\t\t\t\t{   // Group defined on table; means that Detail rows only put out once per group\n                        await _Details.RunPage(pgs, wc.Data, ge.StartRow, ge.StartRow, footerHeight);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n                        await _Details.RunPage(pgs, wc.Data, ge.StartRow, ge.EndRow, footerHeight);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\t// When no details we need to figure out whether any more fits on a page\n\t\t\t\t{\n\t\t\t\t\tPage p = pgs.CurrentPage;\n\t\t\t\t\tif (p.YOffset + footerHeight > pgs.BottomOfPage) //\tDo we need new page to fit footer?\n\t\t\t\t\t{\n\t\t\t\t\t\tp = RunPageNew(pgs, p);\n                        await RunPageHeader(pgs, wc.Data.Data[ge.EndRow], false, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Do the group footer\n\t\t\t\tif (ge.Group != null && ge.Group.Parent != null)\n\t\t\t\t{\n\t\t\t\t\tTableGroup tg = ge.Group.Parent as TableGroup;\t// detail groups will result in null\n\t\t\t\t\tif (tg != null && tg.Footer != null)\n                        await tg.Footer.RunPage(pgs, wc.Data.Data[ge.EndRow]);\n\n\t\t\t\t\tif (ge.Group.PageBreakAtEnd && !pgs.CurrentPage.IsEmpty())\n\t\t\t\t\t{\n\t\t\t\t\t\tRunPageNew(pgs, pgs.CurrentPage);\n                        await RunPageHeader(pgs, wc.Data.Data[ge.StartRow], false, tg);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\tprivate async Task<float> RunGroupsFooterHeight(Pages pgs, TableWorkClass wc, GroupEntry ge)\n\t\t{\n\t\t\tGrouping g = ge.Group;\n\t\t\tif (g == null)\n\t\t\t\treturn 0;\n\n\t\t\tTableGroup tg = g.Parent as TableGroup;\t\t// detail groups will result in null\n\t\t\tif (tg == null || tg.Footer == null)\n\t\t\t\treturn 0;\n\n\t\t\treturn await tg.Footer.HeightOfRows(pgs, wc.Data.Data[ge.EndRow]);\n\t\t}\n\n        private int RunGroupsCount(List<GroupEntry> groupEntries, int count)\n\t\t{\n\t\t\tforeach (GroupEntry ge in groupEntries)\n\t\t\t{\n\t\t\t\tGrouping g = ge.Group;\n\t\t\t\tif (g != null)\n\t\t\t\t{\n\t\t\t\t\tTableGroup tg = g.Parent as TableGroup;\n\t\t\t\t\tif (tg != null)\n\t\t\t\t\t\tcount += (tg.HeaderCount + tg.FooterCount);\n\t\t\t\t}\n\t\t\t\tif (ge.NestedGroup.Count > 0)\n\t\t\t\t\tcount = RunGroupsCount(ge.NestedGroup, count);\n\t\t\t\telse\n\t\t\t\t\tcount += (ge.EndRow - ge.StartRow + 1) * DetailsCount;\n\t\t\t}\n\t\t\treturn count;\n\t\t}\n\n        internal void RunGroupsSetGroups(Report rpt, TableWorkClass wc, List<GroupEntry> groupEntries)\n\t\t{\n\t\t\t// set the group entry value\n\t\t\tGroupEntry ge = groupEntries[0];\n\t\t\twc.Data.CurrentGroups[ge.Group.GetIndex(rpt)] = ge;\n\n\t\t\tif (ge.NestedGroup.Count > 0)\n\t\t\t\tRunGroupsSetGroups(rpt, wc, ge.NestedGroup);\n\t\t}\n\n\t\tprivate async Task RunRecursiveGroups(IPresent ip, TableWorkClass wc)\n\t\t{\n\t\t\tList<Row> rows=wc.Data.Data;\n\t\t\tRow r;\n\n\t\t\t// Get any header/footer information for use in loop\n\t\t\tHeader header=null;\n\t\t\tFooter footer=null;\n\t\t\tTableGroup tg = wc.RecursiveGroup.Parent as TableGroup;\n\t\t\tif (tg != null)\n\t\t\t{\n\t\t\t\theader = tg.Header;\n\t\t\t\tfooter = tg.Footer;\n\t\t\t}\n\n\t\t\tbool bHeader = true;\n\t\t\tfor (int iRow=0; iRow < rows.Count; iRow++)\n\t\t\t{\n\t\t\t\tr = rows[iRow];\n\t\t\t\twc.Data.CurrentGroups[0] = r.GroupEntry;\n\t\t\t\twc.GroupNestCount = r.GroupEntry.EndRow - r.GroupEntry.StartRow;\n\t\t\t\tif (bHeader)\n\t\t\t\t{\n\t\t\t\t\tbHeader = false;\n\t\t\t\t\tif (header != null)\n                        await header.Run(ip, r);\n\t\t\t\t}\n\n\t\t\t\tif (_Details != null)\n\t\t\t\t{\n                    await _Details.Run(ip, wc.Data, iRow, iRow);\n\t\t\t\t}\n\n\t\t\t\t// determine need for group headers and/or footers\n\t\t\t\tif (iRow < rows.Count - 1)\n\t\t\t\t{\n\t\t\t\t\tRow r2 = rows[iRow+1];\n\t\t\t\t\tif (r.Level > r2.Level)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (footer != null)\n                            await footer.Run(ip, r);\n\t\t\t\t\t}\n\t\t\t\t\telse if (r.Level < r2.Level)\n\t\t\t\t\t\tbHeader = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (footer != null)\n                await footer.Run(ip, rows[rows.Count-1] as Row);\n\t\t}\n\n\t\tprivate async Task RunRecursiveGroupsPage(Pages pgs, TableWorkClass wc)\n\t\t{\n\t\t\tList<Row> rows=wc.Data.Data;\n\t\t\tRow r;\n\n\t\t\t// Get any header/footer information for use in loop\n\t\t\tHeader header=null;\n\t\t\tFooter footer=null;\n\t\t\tTableGroup tg = wc.RecursiveGroup.Parent as TableGroup;\n\t\t\tif (tg != null)\n\t\t\t{\n\t\t\t\theader = tg.Header;\n\t\t\t\tfooter = tg.Footer;\n\t\t\t}\n\n\t\t\tbool bHeader = true;\n\t\t\tfor (int iRow=0; iRow < rows.Count; iRow++)\n\t\t\t{\n\t\t\t\tr = rows[iRow];\n\t\t\t\twc.Data.CurrentGroups[0] = r.GroupEntry;\n\t\t\t\twc.GroupNestCount = r.GroupEntry.EndRow - r.GroupEntry.StartRow;\n\t\t\t\tif (bHeader)\n\t\t\t\t{\n\t\t\t\t\tbHeader = false;\n\t\t\t\t\tif (header != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tPage p = pgs.CurrentPage;\t\t\t// this can change after running a row\n\t\t\t\t\t\tfloat height = p.YOffset + await header.HeightOfRows(pgs, r);\n\t\t\t\t\t\tif (height > pgs.BottomOfPage)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tp = RunPageNew(pgs, p);\n                            await RunPageHeader(pgs, r, false, null);\n\t\t\t\t\t\t\tif (!header.RepeatOnNewPage)\n                                await header.RunPage(pgs, r);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n                            await header.RunPage(pgs, r);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// determine need for group headers and/or footers\n\t\t\t\tbool bFooter = false;\n\t\t\t\tfloat footerHeight=0;\n \n\t\t\t\tif (iRow < rows.Count - 1)\n\t\t\t\t{\n\t\t\t\t\tRow r2 = rows[iRow+1];\n\t\t\t\t\tif (r.Level > r2.Level)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (footer != null)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbFooter = true;\n\t\t\t\t\t\t\tfooterHeight = await footer.HeightOfRows(pgs, r);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (r.Level < r2.Level)\n\t\t\t\t\t\tbHeader = true;\n\t\t\t\t}\n\n\t\t\t\tif (_Details != null)\n\t\t\t\t{\n                    await _Details.RunPage(pgs, wc.Data, iRow, iRow, footerHeight);\n\t\t\t\t}\n\n\t\t\t\t// and output the footer if needed\n\t\t\t\tif (bFooter)\n                    await footer.RunPage(pgs, r);\n\t\t\t}\n\t\t\tif (footer != null)\n                await footer.RunPage(pgs, rows[rows.Count-1] as Row);\n\t\t}\n\n\t\tinternal TableColumns TableColumns\n\t\t{\n\t\t\tget { return  _TableColumns; }\n\t\t\tset {  _TableColumns = value; }\n\t\t}\n\n\t\tinternal int ColumnCount\n\t\t{\n\t\t\tget { return _TableColumns.Items.Count; }\n\t\t}\n\n\t\tinternal Header Header\n\t\t{\n\t\t\tget { return  _Header; }\n\t\t\tset {  _Header = value; }\n\t\t}\n\n\t\tinternal TableGroups TableGroups\n\t\t{\n\t\t\tget { return  _TableGroups; }\n\t\t\tset {  _TableGroups = value; }\n\t\t}\n\n\t\tinternal Details Details\n\t\t{\n\t\t\tget { return  _Details; }\n\t\t\tset {  _Details = value; }\n\t\t}\n\n\t\tinternal int DetailsCount\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_Details == null)\n\t\t\t\t\treturn 0;\n\t\t\t\treturn  \n\t\t\t\t\t_Details.TableRows.Items.Count; \n\t\t\t}\n\t\t}\n\n\t\tinternal Footer Footer\n\t\t{\n\t\t\tget { return  _Footer; }\n\t\t\tset {  _Footer = value; }\n\t\t}\n\n\t\tinternal bool FillPage\n\t\t{\n\t\t\tget { return  _FillPage; }\n\t\t\tset {  _FillPage = value; }\n\t\t}\n\n\t\tinternal string DetailDataElementName\n\t\t{\n\t\t\tget { return  _DetailDataElementName; }\n\t\t\tset {  _DetailDataElementName = value; }\n\t\t}\n\n\t\tinternal string DetailDataCollectionName\n\t\t{\n\t\t\tget { return  _DetailDataCollectionName; }\n\t\t\tset {  _DetailDataCollectionName = value; }\n\t\t}\n\n\t\tinternal DataElementOutputEnum DetailDataElementOutput\n\t\t{\n\t\t\tget { return  _DetailDataElementOutput; }\n\t\t\tset {  _DetailDataElementOutput = value; }\n\t\t}\n\n\t\tinternal int GetGroupNestCount(Report rpt)\n\t\t{\n\t\t\tTableWorkClass wc = GetValue(rpt);\n\t\t\treturn wc.GroupNestCount;\n\t\t}\n\n\t\tinternal async Task<int> WidthInPixels(Report rpt, Row row)\n\t\t{\n\t\t\t// Calculate this based on the sum of TableColumns\n\t\t\tint width=0;\n\t\t\tforeach (TableColumn tc in this.TableColumns.Items)\n\t\t\t{\n                if (tc.Visibility == null || !await tc.Visibility.Hidden.EvaluateBoolean(rpt, row))\n\t\t\t\t\twidth += tc.Width.PixelsX;\n\t\t\t}\n\t\t\treturn width;\n\t\t}\n\n\t\tinternal int WidthInUnits\n\t\t{\n\t\t\tget \n\t\t\t{\n\n\t\t\t\t// Calculate this based on the sum of TableColumns\n\t\t\t\tint width=0;\n\t\t\t\tforeach (TableColumn tc in this.TableColumns.Items)\n\t\t\t\t{\n\t\t\t\t\twidth += tc.Width.Size;\n\t\t\t\t}\n\t\t\t\treturn width;\n\t\t\t}\n\t\t}\n\n\t\tprivate TableWorkClass GetValue(Report rpt)\n\t\t{\n\t\t\tTableWorkClass wc = rpt.Cache.Get(this, \"wc\") as TableWorkClass;\n\t\t\tif (wc == null)\n\t\t\t{\n\t\t\t\twc = new TableWorkClass();\n\t\t\t\trpt.Cache.Add(this, \"wc\", wc);\n\t\t\t}\n\t\t\treturn wc;\n\t\t}\n\n\t\tprivate void RemoveValue(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(this, \"wc\");\n\t\t}\n\n\t}\n\n\tclass TableWorkClass\n\t{\n\t\tinternal Rows Data;\t// Runtime data; either original query if no groups\n\t\t// or sorting or a copied version that is grouped/sorted\n\t\tinternal List<GroupEntry> Groups;\t\t// Runtime groups; array of GroupEntry\n\t\tinternal int GroupNestCount;\t// Runtime: calculated on fly for # of table rows that are part of a group\n\t\t//    used to handle toggling of a group \n\t\tinternal Grouping RecursiveGroup;\t// Runtime: set with a recursive; currently on support a single recursive group\n\t\tinternal TableWorkClass()\n\t\t{\n\t\t\tData = null;\n\t\t\tGroups = null;\n\t\t\tGroupNestCount = 0;\n\t\t\tRecursiveGroup = null;\n\t\t}\n\t}\n\n\tclass RecursiveCompare: IComparer<Row>\n\t{\n        Report rpt;\n\t\tTypeCode _Type;\n\t\tIExpr parentExpr;\n        IExpr groupExpr;\n\n        internal RecursiveCompare(Report r, IExpr pExpr, TypeCode tc, IExpr gExpr)\n\t\t{\n            rpt = r;\n\t\t\t_Type = tc;\n\t\t\tparentExpr = pExpr;\n            groupExpr = gExpr;\n\t\t}\n\n\t\t#region IComparer Members\n\n\t\tpublic int Compare(Row x, Row y)\n\t\t{\n\t\t\t// HACK: async\n            object xv = Task.Run(async () => await parentExpr.Evaluate(rpt, x)).GetAwaiter().GetResult();\n            object yv = Task.Run(async () => await groupExpr.Evaluate(rpt, y)).GetAwaiter().GetResult();\n\n\t\t\treturn -Filter.ApplyCompare(_Type, yv, xv);\n\t\t}\n\n\t\t#endregion\n\t}\n\tclass GroupEntryCompare: IComparer<GroupEntry>\n\t{\n\t\tReport rpt;\n\t\tTableWorkClass wc;\n\n\t\tinternal GroupEntryCompare(Report r, TableWorkClass w )\n\t\t{\n\t\t\trpt = r;\n\t\t\twc = w;\n\t\t}\n\n\t\t#region IComparer<GroupEntry> Members\n\n        public int Compare(GroupEntry x1, GroupEntry y1)\n\t\t{\n\t\t\tDebug.Assert(x1 != null && y1 != null && x1.Sort != null, \"Illegal arguments to GroupEntryCompare\", \n\t\t\t\t\"Compare requires object to be of type GroupEntry and that sort be defined.\");\n\n\t\t\tint rc = 0;\n\t\t\tforeach (SortBy sb in x1.Sort.Items)\n\t\t\t{\n\t\t\t\tTypeCode tc = sb.SortExpression.Type;\n\t\t\t\t\n\t\t\t\tint index = x1.Group.GetIndex(rpt);\n\t\t\t\twc.Data.CurrentGroups[index] = x1;\n\t\t\t\t// HACK: async\n\t\t\t\tobject o1 = Task.Run(async () => await sb.SortExpression.Evaluate(rpt, wc.Data.Data[x1.StartRow])).GetAwaiter().GetResult();\n\t\t\t\tindex = y1.Group.GetIndex(rpt);\t\n\t\t\t\twc.Data.CurrentGroups[index] = y1;\n\t\t\t\t// HACK: async\n\t\t\t\tobject o2 = Task.Run(async () => await sb.SortExpression.Evaluate(rpt, wc.Data.Data[y1.StartRow])).GetAwaiter().GetResult();\n\n\t\t\t\trc = Filter.ApplyCompare(tc, o1, o2);\n\t\t\t\tif (rc != 0)\n\t\t\t\t{\n\t\t\t\t\tif (sb.Direction == SortDirectionEnum.Descending)\n\t\t\t\t\t\trc = -rc;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn rc;\n\t\t}\n\n\t\t#endregion\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/TableCell.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.IO;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// TableCell definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class TableCell : ReportLink\n\t{\n\t\tReportItems _ReportItems;\t// An element of the report layout (e.g. List, Textbox,\n\t\t\t\t\t\t\t\t\t// Line). This ReportItems collection must contain\n\t\t\t\t\t\t\t\t\t// exactly one ReportItem. The Top, Left, Height and\n\t\t\t\t\t\t\t\t\t// Width for this ReportItem are ignored. The\n\t\t\t\t\t\t\t\t\t// position is taken to be 0, 0 and the size to be 100%,\n\t\t\t\t\t\t\t\t\t// 100%. Pagebreaks on report items inside a\n\t\t\t\t\t\t\t\t\t// TableCell are ignored.\n\t\tint _ColSpan;\t// Indicates the number of columns this cell spans.1\n\t\t\t\t\t\t// A ColSpan of 1 is the same as not specifying a ColSpan\t\n\n\t\t// some bookkeeping fields\n\t\tTable _OwnerTable;\t\t\t// Table that owns this column\n\t\tint _ColIndex;\t\t\t\t// Column number within table; used for\n\t\t\t\t\t\t\t\t\t//    xrefing with other parts of table columns; e.g. column headers with details\n\t\tbool _InTableHeader;\t\t// true if tablecell is part of header; simplifies HTML processing\n\t\tbool _InTableFooter;\t\t// true if tablecell is part of footer; simplifies HTML processing\n\t\n\t\tinternal TableCell(ReportDefn r, ReportLink p, XmlNode xNode, int colIndex) : base(r, p)\n\t\t{\n\t\t\t_ColIndex = colIndex;\n\t\t\t_ReportItems=null;\n\t\t\t_ColSpan=1;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"ReportItems\":\n\t\t\t\t\t\t_ReportItems = new ReportItems(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ColSpan\":\n\t\t\t\t\t\t_ColSpan = XmlUtil.Integer(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown TableCell element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Must have exactly one ReportItems\n\t\t\tif (_ReportItems == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"ReportItems element is required with a TableCell but not specified.\");\n\t\t\telse if (_ReportItems.Items.Count != 1)\n\t\t\t\tOwnerReport.rl.LogError(8, \"Only one element in ReportItems element is allowed within a TableCell.\");\n\n\t\t\t// Obtain the tablecell's owner table;\n\t\t\t//\t\tdetermine if tablecell is part of table header\n\t\t\t_InTableHeader = false;\n\t\t\tReportLink rl;\n\t\t\tfor (rl=this.Parent; rl != null; rl=rl.Parent)\n\t\t\t{\n\t\t\t\tif (rl is Table)\n\t\t\t\t{\n\t\t\t\t\t_OwnerTable = (Table) rl;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (rl is Header && rl.Parent is Table)\t// Header and parent is Table (not TableGroup)\n\t\t\t\t{\n\t\t\t\t\t_InTableHeader=true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (rl is Footer && rl.Parent is Table)\t// Header and parent is Table (not TableGroup)\n\t\t\t\t{\n\t\t\t\t\t_InTableFooter=true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n            await _ReportItems.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal async Task Run(IPresent ip, Row row)\n\t\t{\n\t\t\t// todo: visibility on the column should really only be evaluated once at the beginning\n\t\t\t//   of the table processing;  also this doesn't account for the affect of colspan correctly\n\t\t\t//   where if any of the spanned columns are visible the value would show??\n\t\t\tTableColumn tc = _OwnerTable.TableColumns[_ColIndex];\n\t\t\tif (tc.Visibility != null && await tc.Visibility.IsHidden(ip.Report(), row))\t// column visible?\n\t\t\t\treturn;\t\t\t\t\t\t\t\t\t\t\t\t\t//  no nothing to do\n\n\t\t\tawait ip.TableCellStart(this, row);\n\n            await _ReportItems.Items[0].Run(ip, row);\n\n\t\t\tip.TableCellEnd(this, row);\n\t\t\treturn;\n\t\t}\n\n\t\tinternal async Task RunPage(Pages pgs, Row row)\n\t\t{\n\t\t\t// todo: visibility on the column should really only be evaluated once at the beginning\n\t\t\t//   of the table processing;  also this doesn't account for the affect of colspan correctly\n\t\t\t//   where if any of the spanned columns are visible the value would show??\n\t\t\tTableColumn tc = _OwnerTable.TableColumns[_ColIndex];\n\t\t\tif (tc.Visibility != null && await tc.Visibility.IsHidden(pgs.Report, row))\t// column visible?\n\t\t\t\treturn;                                                 //  no nothing to do\n\n            await _ReportItems.Items[0].RunPage(pgs, row);\n\t\t\treturn;\n\t\t}\n\n\t\tinternal ReportItems ReportItems\n\t\t{\n\t\t\tget { return  _ReportItems; }\n\t\t\tset {  _ReportItems = value; }\n\t\t}\n\n\t\tinternal Table OwnerTable\n\t\t{\n\t\t\tget { return _OwnerTable; }\n\t\t}\n\n\t\tinternal int ColSpan\n\t\t{\n\t\t\tget { return  _ColSpan; }\n\t\t\tset {  _ColSpan = value; }\n\t\t}\n\n\t\tinternal int ColIndex\n\t\t{\n\t\t\tget { return  _ColIndex; }\n\t\t}\n\n\t\tinternal bool InTableFooter\n\t\t{\n\t\t\tget { return  _InTableFooter; }\n\t\t}\n\n\t\tinternal bool InTableHeader\n\t\t{\n\t\t\tget { return  _InTableHeader; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/TableCells.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Xml;\nusing System.IO;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// TableCells definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class TableCells : ReportLink\n\t{\n        List<TableCell> _Items;\t\t\t// list of TableCell\n\n\t\tinternal TableCells(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tTableCell tc;\n            _Items = new List<TableCell>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tint colIndex=0;\t\t\t// keep track of the column numbers\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"TableCell\":\n\t\t\t\t\t\ttc = new TableCell(r, this, xNodeLoop, colIndex);\n\t\t\t\t\t\tcolIndex += tc.ColSpan;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\ttc=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown TableCells element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (tc != null)\n\t\t\t\t\t_Items.Add(tc);\n\t\t\t}\n\t\t\tif (_Items.Count > 0)\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (TableCell tc in _Items)\n\t\t\t{\n                await tc.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tinternal async Task Run(IPresent ip, Row row)\n\t\t{\n\t\t\tforeach (TableCell tc in _Items)\n\t\t\t{\n                await tc.Run(ip, row);\n\t\t\t}\n\t\t\treturn ;\n\t\t}\n\n\t\tinternal async Task RunPage(Pages pgs, Row row)\n\t\t{\n\t\t\t// Start each row in the same location\n\t\t\t//   e.g. if there are two embedded tables in cells they both start at same location\n\t\t\tPage savepg = pgs.CurrentPage;\n\t\t\tfloat savey = savepg.YOffset;\n\t\t\tPage maxpg = savepg;\n\t\t\tfloat maxy = savey;\n\n\t\t\tforeach (TableCell tc in _Items)\n\t\t\t{\n                await tc.RunPage(pgs, row);\n\t\t\t\tif (maxpg != pgs.CurrentPage)\n\t\t\t\t{\t// a page break\n\t\t\t\t\tif (maxpg.PageNumber < pgs.CurrentPage.PageNumber)\n\t\t\t\t\t{\n\t\t\t\t\t\tmaxpg = pgs.CurrentPage;\n\t\t\t\t\t\tmaxy = maxpg.YOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (maxy > pgs.CurrentPage.YOffset)\n\t\t\t\t{\n\t\t\t\t\t// maxy = maxy;      TODO what was this meant to do\n\t\t\t\t}\n\t\t\t\t// restore the beginning start of the row\n\t\t\t\tpgs.CurrentPage = savepg;\n\t\t\t\tsavepg.YOffset = savey;\n\t\t\t}\n\t\t\tpgs.CurrentPage = maxpg;\n\t\t\tsavepg.YOffset = maxy;\n\t\t\treturn ;\n\t\t}\n\n        internal List<TableCell> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/TableColumn.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.IO;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// TableColumn definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class TableColumn : ReportLink\n\t{\n\t\tRSize _Width;\t\t// Width of the column\n\t\tVisibility _Visibility;\t// Indicates if the column should be hidden\t\n\t\tbool _FixedHeader=false;\t// Header of this column should be display even when scrolled\n\t\n\t\tinternal TableColumn(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Width=null;\n\t\t\t_Visibility=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Width\":\n\t\t\t\t\t\t_Width = new RSize(r, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Visibility\":\n\t\t\t\t\t\t_Visibility = new Visibility(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"FixedHeader\":\n\t\t\t\t\t\t_FixedHeader = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown TableColumn element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Width == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"TableColumn requires the Width element.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Visibility != null)\n                await _Visibility.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal void Run(IPresent ip, Row row)\n\t\t{\n\t\t}\n\n\t\tinternal RSize Width\n\t\t{\n\t\t\tget { return  _Width; }\n\t\t\tset {  _Width = value; }\n\t\t}\n\n\t\tinternal float GetXPosition(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = GetWC(rpt);\n\t\t\treturn wc.XPosition;\n\t\t}\n\n\t\tinternal void SetXPosition(Report rpt, float xp)\n\t\t{\n\t\t\tWorkClass wc = GetWC(rpt);\n\t\t\twc.XPosition = xp;\n\t\t}\n\n\t\tinternal Visibility Visibility\n\t\t{\n\t\t\tget { return  _Visibility; }\n\t\t\tset {  _Visibility = value; }\n\t\t}\n\n\t\tinternal async Task<bool> IsHidden(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Visibility == null)\n\t\t\t\treturn false;\n\t\t\treturn await _Visibility.IsHidden(rpt, r);\n\t\t}\n\n\t\tprivate WorkClass GetWC(Report rpt)\n\t\t{\n\t\t\tif (rpt == null)\t\n\t\t\t\treturn new WorkClass();\n\n\t\t\tWorkClass wc = rpt.Cache.Get(this, \"wc\") as WorkClass;\n\t\t\tif (wc == null)\n\t\t\t{\n\t\t\t\twc = new WorkClass();\n\t\t\t\trpt.Cache.Add(this, \"wc\", wc);\n\t\t\t}\n\t\t\treturn wc;\n\t\t}\n\n\t\tprivate void RemoveWC(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(this, \"wc\");\n\t\t}\n\n\t\tclass WorkClass\n\t\t{\n\t\t\tinternal float XPosition;\t// Set at runtime by Page processing; potentially dynamic at runtime\n\t\t\t//  since visibility is an expression\n\t\t\tinternal WorkClass()\n\t\t\t{\n\t\t\t\tXPosition=0;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/TableColumns.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Xml;\nusing System.IO;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// TableColumns definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class TableColumns : ReportLink, IEnumerable<TableColumn>\n\t{\n        List<TableColumn> _Items;\t\t\t// list of TableColumn\n\n\t\tinternal TableColumns(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tTableColumn tc;\n            _Items = new List<TableColumn>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"TableColumn\":\n\t\t\t\t\t\ttc = new TableColumn(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\ttc=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown TableColumns element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (tc != null)\n\t\t\t\t\t_Items.Add(tc);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For TableColumns at least one TableColumn is required.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\n\t\tinternal TableColumn this[int ci]\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _Items[ci] as TableColumn;\n\t\t\t}\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (TableColumn tc in _Items)\n\t\t\t{\n                await tc.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tinternal void Run(IPresent ip, Row row)\n\t\t{\n\t\t\tforeach (TableColumn tc in _Items)\n\t\t\t{\n\t\t\t\ttc.Run(ip, row);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// calculate the XPositions of all the columns\n\t\tinternal async Task CalculateXPositions(Report rpt, float startpos, Row row)\n\t\t{\n\t\t\tfloat x = startpos;\n\n\t\t\tforeach (TableColumn tc in _Items)\n\t\t\t{\n\t\t\t\tif (await tc.IsHidden(rpt, row))\n\t\t\t\t\tcontinue;\n\t\t\t\ttc.SetXPosition(rpt, x);\n\t\t\t\tx += tc.Width.Points;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<TableColumn> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\n\n        #region IEnumerable<TableColumn> Members\n\n        public IEnumerator<TableColumn> GetEnumerator()\n        {\n            return _Items.GetEnumerator();\n        }\n\n        #endregion\n\n        #region IEnumerable Members\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return _Items.GetEnumerator();\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/TableGroup.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// TableGroup definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class TableGroup : ReportLink\n\t{\n\t\tGrouping _Grouping;\t\t// The expressions to group the data by.\n\t\tSorting _Sorting;\t\t// The expressions to sort the data by.\n\t\tHeader _Header;\t\t\t// A group header row.\n\t\tFooter _Footer;\t\t\t// A group footer row.\n\t\tVisibility _Visibility;\t// Indicates if the group (and all groups embedded\n\t\t\t\t\t\t\t\t// within it) should be hidden.\t\t\n\t\tTextbox _ToggleTextbox;\t//  resolved TextBox for toggling visibility\n\t\n\t\tinternal TableGroup(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Grouping=null;\n\t\t\t_Sorting=null;\n\t\t\t_Header=null;\n\t\t\t_Footer=null;\n\t\t\t_Visibility=null;\n\t\t\t_ToggleTextbox=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Grouping\":\n\t\t\t\t\t\t_Grouping = new Grouping(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Sorting\":\n\t\t\t\t\t\t_Sorting = new Sorting(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Header\":\n\t\t\t\t\t\t_Header = new Header(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Footer\":\n\t\t\t\t\t\t_Footer = new Footer(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Visibility\":\n\t\t\t\t\t\t_Visibility = new Visibility(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown TableGroup element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_Grouping == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"TableGroup requires the Grouping element.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Grouping != null)\n                await _Grouping.FinalPass();\n\t\t\tif (_Sorting != null)\n                await _Sorting.FinalPass();\n\t\t\tif (_Header != null)\n                await _Header.FinalPass();\n\t\t\tif (_Footer != null)\n                await _Footer.FinalPass();\n\t\t\tif (_Visibility != null)\n\t\t\t{\n                await _Visibility.FinalPass();\n\t\t\t\tif (_Visibility.ToggleItem != null)\n\t\t\t\t{\n\t\t\t\t\t_ToggleTextbox = (Textbox) (OwnerReport.LUReportItems[_Visibility.ToggleItem]);\n\t\t\t\t\tif (_ToggleTextbox != null)\n\t\t\t\t\t\t_ToggleTextbox.IsToggle = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tinternal float DefnHeight()\n\t\t{\n\t\t\tfloat height=0;\n\t\t\tif (_Header != null)\n\t\t\t\theight += _Header.TableRows.DefnHeight();\n\n\t\t\tif (_Footer != null)\n\t\t\t\theight += _Footer.TableRows.DefnHeight();\n\n\t\t\treturn height;\n\t\t}\n\n\t\tinternal Grouping Grouping\n\t\t{\n\t\t\tget { return  _Grouping; }\n\t\t\tset {  _Grouping = value; }\n\t\t}\n\n\t\tinternal Sorting Sorting\n\t\t{\n\t\t\tget { return  _Sorting; }\n\t\t\tset {  _Sorting = value; }\n\t\t}\n\n\t\tinternal Header Header\n\t\t{\n\t\t\tget { return  _Header; }\n\t\t\tset {  _Header = value; }\n\t\t}\n\n\t\tinternal int HeaderCount\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_Header == null)\n\t\t\t\t\treturn 0;\n\t\t\t\telse\n\t\t\t\t\treturn _Header.TableRows.Items.Count;\n\t\t\t}\n\t\t}\n\n\t\tinternal Footer Footer\n\t\t{\n\t\t\tget { return  _Footer; }\n\t\t\tset {  _Footer = value; }\n\t\t}\n\n\t\tinternal int FooterCount\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_Footer == null)\n\t\t\t\t\treturn 0;\n\t\t\t\telse\n\t\t\t\t\treturn _Footer.TableRows.Items.Count;\n\t\t\t}\n\t\t}\n\n\t\tinternal Visibility Visibility\n\t\t{\n\t\t\tget { return  _Visibility; }\n\t\t\tset {  _Visibility = value; }\n\t\t}\n\n\t\tinternal Textbox ToggleTextbox\n\t\t{\n\t\t\tget { return  _ToggleTextbox; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/TableGroups.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// TableGroups definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class TableGroups : ReportLink\n\t{\n        List<TableGroup> _Items;\t\t\t// list of TableGroup entries\n\n\t\tinternal TableGroups(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tTableGroup tg;\n            _Items = new List<TableGroup>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"TableGroup\":\n\t\t\t\t\t\ttg = new TableGroup(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\ttg=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown TableGroups element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (tg != null)\n\t\t\t\t\t_Items.Add(tg);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For TableGroups at least one TableGroup is required.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach(TableGroup tg in _Items)\n\t\t\t{\n                await tg.FinalPass();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tinternal float DefnHeight()\n\t\t{\n\t\t\tfloat height=0;\n\t\t\tforeach(TableGroup tg in _Items)\n\t\t\t{\n\t\t\t\theight += tg.DefnHeight();\n\t\t\t}\n\t\t\treturn height;\n\t\t}\n\n        internal List<TableGroup> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/TableRow.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.IO;\nusing System.Collections;\nusing System.Collections.Generic;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing System.Threading.Tasks;\n\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\n#else\nusing System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// TableRow represents a Row in a table.  This can be part of a header, footer, or detail definition.\n\t///</summary>\n\t[Serializable]\n\tinternal class TableRow : ReportLink\n\t{\n\t\tTableCells _TableCells;\t// Contents of the row. One cell per column\n\t\tRSize _Height;\t\t\t\t// Height of the row\n\t\tVisibility _Visibility;\t\t// Indicates if the row should be hidden\t\t\n\t\tbool _CanGrow;\t\t\t// indicates that row height can increase in size\n\t\tList<Textbox> _GrowList;\t// list of TextBox's that need to be checked for growth\n\n\t\tinternal TableRow(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_TableCells=null;\n\t\t\t_Height=null;\n\t\t\t_Visibility=null;\n\t\t\t_CanGrow = false;\n\t\t\t_GrowList = null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"TableCells\":\n\t\t\t\t\t\t_TableCells = new TableCells(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Height\":\n\t\t\t\t\t\t_Height = new RSize(r, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Visibility\":\n\t\t\t\t\t\t_Visibility = new Visibility(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown TableRow element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_TableCells == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"TableRow requires the TableCells element.\");\n\t\t\tif (_Height == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"TableRow requires the Height element.\");\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n            await _TableCells.FinalPass();\n\t\t\tif (_Visibility != null)\n                await _Visibility.FinalPass();\n\n\t\t\tforeach (TableCell tc in _TableCells.Items)\n\t\t\t{\n\t\t\t\tReportItem ri = tc.ReportItems.Items[0] as ReportItem;\n\t\t\t\tif (!(ri is Textbox))\n\t\t\t\t\tcontinue;\n\t\t\t\tTextbox tb = ri as Textbox;\n\t\t\t\tif (tb.CanGrow)\n\t\t\t\t{\n\t\t\t\t\tif (this._GrowList == null)\n\t\t\t\t\t\t_GrowList = new List<Textbox>();\n\t\t\t\t\t_GrowList.Add(tb);\n\t\t\t\t\t_CanGrow = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (_CanGrow)\t\t\t\t// shrink down the resulting list\n                _GrowList.TrimExcess();\n\n\t\t\treturn;\n\t\t}\n\n\t\tinternal async Task Run(IPresent ip, Row row)\n\t\t{\n\t\t\tif (this.Visibility != null && await Visibility.IsHidden(ip.Report(), row))\n\t\t\t\treturn;\n\n            await ip.TableRowStart(this, row);\n            await _TableCells.Run(ip, row);\n\t\t\tip.TableRowEnd(this, row);\n\t\t\treturn ;\n\t\t}\n \n\t\tinternal async Task RunPage(Pages pgs, Row row)\n\t\t{\n\t\t\tif (this.Visibility != null && await Visibility.IsHidden(pgs.Report, row))\n\t\t\t\treturn;\n\n            await _TableCells.RunPage(pgs, row);\n\n\t\t\tWorkClass wc = GetWC(pgs.Report);\n\t\t\tpgs.CurrentPage.YOffset += wc.CalcHeight;\n\t\t\treturn ;\n\t\t}\n\n\t\tinternal TableCells TableCells\n\t\t{\n\t\t\tget { return  _TableCells; }\n\t\t\tset {  _TableCells = value; }\n\t\t}\n\n\t\tinternal RSize Height\n\t\t{\n\t\t\tget { return  _Height; }\n\t\t\tset {  _Height = value; }\n\t\t}\n        internal async Task<float> HeightOfRow(Pages pgs, Row r)\n        {\n            return await HeightOfRow(pgs.Report, pgs.G, r);\n        }\n\t\tinternal async Task<float> HeightOfRow(Report rpt, Graphics g, Row r)\n\t\t{\n\t\t\tWorkClass wc = GetWC(rpt);\n\t\t\tif (this.Visibility != null && await Visibility.IsHidden(rpt, r))\n\t\t\t{\n\t\t\t\twc.CalcHeight = 0;\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tfloat defnHeight = _Height.Points;\n\t\t\tif (!_CanGrow)\n\t\t\t{\n\t\t\t\twc.CalcHeight = defnHeight;\n\t\t\t\treturn defnHeight;\n\t\t\t}\n\n            TableColumns tcs= this.Table.TableColumns;\n\t\t\tfloat height=0;\n\t\t\tforeach (Textbox tb in this._GrowList)\n\t\t\t{\n                int ci = tb.TC.ColIndex;\n                if (await tcs[ci].IsHidden(rpt, r))    // if column is hidden don't use in calculation\n                    continue;\n\t\t\t\theight = Math.Max(height, await tb.RunTextCalcHeight(rpt, g, r));\n\t\t\t}\n\t\t\twc.CalcHeight = Math.Max(height, defnHeight);\n\t\t\treturn wc.CalcHeight;\n\t\t}\n\n\t\tinternal float HeightCalc(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = GetWC(rpt);\n\t\t\treturn wc.CalcHeight;\n\t\t}\n\n        private Table Table\n        {\n            get\n            {\n                ReportLink p= this.Parent;\n                while (p != null)\n                {\n                    if (p is Table)\n                        return p as Table;\n                    p = p.Parent;\n                }\n                throw new Exception(Strings.TableRow_Error_TableRowNotRelatedToTable);\n            }\n        }\n\n            internal Visibility Visibility\n\t\t{\n\t\t\tget { return  _Visibility; }\n\t\t\tset {  _Visibility = value; }\n\t\t}\n\n\t\tinternal bool CanGrow\n\t\t{\n\t\t\tget { return _CanGrow; }\n\t\t}\n\n\t\tinternal List<Textbox> GrowList\n\t\t{\n\t\t\tget { return _GrowList; }\n\t\t}\n\n\t\tprivate WorkClass GetWC(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = rpt.Cache.Get(this, \"wc\") as WorkClass;\n\t\t\tif (wc == null)\n\t\t\t{\n\t\t\t\twc = new WorkClass(this);\n\t\t\t\trpt.Cache.Add(this, \"wc\", wc);\n\t\t\t}\n\t\t\treturn wc;\n\t\t}\n\n\t\tprivate void RemoveWC(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(this, \"wc\");\n\t\t}\n\n\t\tclass WorkClass\n\t\t{\n\t\t\tinternal float CalcHeight;\t\t// dynamic when CanGrow true\n\t\t\tinternal WorkClass(TableRow tr)\n\t\t\t{\n\t\t\t\tCalcHeight = tr.Height.Points;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/TableRows.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Xml;\nusing System.IO;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// TableRows definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class TableRows : ReportLink\n\t{\n        List<TableRow> _Items;\t\t\t// list of TableRow\n\t\tfloat _HeightOfRows;\t\t// height of contained rows\n\t\tbool _CanGrow;\t\t\t\t// if any TableRow contains a TextBox with CanGrow\n\n\t\tinternal TableRows(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tTableRow t;\n            _Items = new List<TableRow>();\n\t\t\t_CanGrow = false;\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"TableRow\":\n\t\t\t\t\t\tt = new TableRow(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tt=null;\t\t// don't know what this is\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown TableRows element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (t != null)\n\t\t\t\t\t_Items.Add(t);\n\t\t\t}\n\t\t\tif (_Items.Count == 0)\n\t\t\t\tOwnerReport.rl.LogError(8, \"For TableRows at least one TableRow is required.\");\n\t\t\telse\n                _Items.TrimExcess();\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\t_HeightOfRows = 0;\n\t\t\tforeach (TableRow t in _Items)\n\t\t\t{\n\t\t\t\t_HeightOfRows += t.Height.Points;\n                await t.FinalPass();\n\t\t\t\t_CanGrow |= t.CanGrow;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tinternal async Task Run(IPresent ip, Row row)\n\t\t{\n\t\t\tforeach (TableRow t in _Items)\n\t\t\t{\n                await t.Run(ip, row);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tinternal async Task RunPage(Pages pgs, Row row)\n\t\t{\n            await RunPage(pgs, row, false);\n\t\t}\n\n\t\tinternal async Task RunPage(Pages pgs, Row row, bool bCheckRows)\n\t\t{\n\t\t\tif (bCheckRows)\n\t\t\t{\t// we need to check to see if a row will fit on the page\n\t\t\t\tforeach (TableRow t in _Items)\n\t\t\t\t{\n\t\t\t\t\tPage p = pgs.CurrentPage;\t\t\t// this can change after running a row\n\t\t\t\t\tfloat hrows = await t.HeightOfRow(pgs, row);\t// height of this row\n\t\t\t\t\tfloat height = p.YOffset + hrows;\n\t\t\t\t\tif (height > pgs.BottomOfPage)\n\t\t\t\t\t{\n\t\t\t\t\t\tp = OwnerTable.RunPageNew(pgs, p);\n                        await OwnerTable.RunPageHeader(pgs, row, false, null);\n\t\t\t\t\t}\n                    await t.RunPage(pgs, row);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\t// all rows will fit on the page\n\t\t\t\tforeach (TableRow t in _Items)\n                    await t.RunPage(pgs, row);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Table OwnerTable\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tfor (ReportLink rl = this.Parent; rl != null; rl = rl.Parent)\n\t\t\t\t{\n\t\t\t\t\tif (rl is Table)\n\t\t\t\t\t\treturn rl as Table;\n\t\t\t\t}\n\n\t\t\t\tthrow new Exception(Strings.TableRows_Error_TableRowsMustOwnedTable);\n\t\t\t}\n\t\t}\n\n\t\tinternal float DefnHeight()\n\t\t{\n\t\t\tfloat height=0;\n\t\t\tforeach (TableRow tr in this._Items)\n\t\t\t{\n\t\t\t\theight += tr.Height.Points;\n\t\t\t}\n\t\t\treturn height;\n\t\t}\n\n\t\tinternal async Task<float> HeightOfRows(Pages pgs, Row r)\n\t\t{\n\t\t\tif (!this._CanGrow)\n\t\t\t\treturn _HeightOfRows;\n\t\t\t\n\t\t\tfloat height=0;\n\t\t\tforeach (TableRow tr in this._Items)\n\t\t\t{\n\t\t\t\theight += await tr.HeightOfRow(pgs, r);\n\t\t\t}\n\n\t\t\treturn Math.Max(height, _HeightOfRows);\n\t\t}\n\n        internal List<TableRow> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Textbox.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\n#else\nusing System.Drawing;\n#endif\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Text.RegularExpressions;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// The Textbox definition.  Inherits from ReportItem.\n\t///</summary>\n\t[Serializable]\n\tinternal class Textbox : ReportItem\n\t{\n\t\tExpression _Value;\t// (Variant) An expression, the value of which is\n\t\t\t\t\t\t\t// displayed in the text-box.\n\t\t\t\t\t\t\t// This can be a constant expression for constant labels.\n\t\tbool _CanGrow;\t\t// Indicates the Textbox size can\n\t\t\t\t\t\t\t// increase to accommodate the contents\n\t\tbool _CanShrink;\t// Indicates the Textbox size can\n\t\t\t\t\t\t\t// decrease to match the contents\n\t\tstring _HideDuplicates;\t// Indicates the item should be hidden\n\t\t\t\t\t\t\t//when the value of the expression\n\t\t\t\t\t\t\t//associated with the report item is the\n\t\t\t\t\t\t\t//same as the preceding instance. The\n\t\t\t\t\t\t\t//value of HideDuplicates is the name\n\t\t\t\t\t\t\t//of a grouping or data set over which\n\t\t\t\t\t\t\t//to apply the hiding. Each time a\n\t\t\t\t\t\t\t//new instance of that group is\n\t\t\t\t\t\t\t//encountered, the first instance of\n\t\t\t\t\t\t\t//this report item will not be hidden.\n\t\t\t\t\t\t\t//Rows on a previous page are\n\t\t\t\t\t\t\t//ignored for the purposes of hiding\n\t\t\t\t\t\t\t//duplicates. If the textbox is in a\n\t\t\t\t\t\t\t//table or matrix cell, only the text\n\t\t\t\t\t\t\t//will be hidden. The textbox will\n\t\t\t\t\t\t\t//remain to provide background and\n\t\t\t\t\t\t\t//border for the cell.\n\t\t\t\t\t\t\t//Ignored in matrix subtotals.\n\t\tToggleImage _ToggleImage;\t// Indicates the initial state of a\n\t\t\t\t\t\t\t\t// toggling image should one be\n\t\t\t\t\t\t\t\t// displayed as a part of the textbox.\n\t\tDataElementStyleEnum _DataElementStyle;\t// Indicates whether textbox value\n\t\t\t\t\t\t\t\t// should render as an element or attribute: Auto (Default)\n\t\t\t\t\t\t\t\t// Auto uses the setting on the Report element.\n\t\tbool _IsToggle;\t\t// Textbox is used to toggle a detail row\n\t\tList<string> _ExprReferences;\t// array of names of expressions that reference this Textbox;\n\t\t\t\t\t\t\t\t//  only needed for page header/footer references \n\n        static readonly Regex HTMLEXPR = new Regex(\"(<expr>.+</expr>)\");     // Split on all expressions.\n\n\t\tobject lastEvaluatedValue = null;\n\t\tReport lastValueForReport = null;\n\t\tRow lastValueForRow = null;\n\n\t\tinternal Textbox(ReportDefn r, ReportLink p, XmlNode xNode):base(r,p,xNode)\n\t\t{\n\t\t\t_Value=null;\n\t\t\t_CanGrow=false;\n\t\t\t_CanShrink=false;\n\t\t\t_HideDuplicates=null;\n\t\t\t_ToggleImage=null;\n\t\t\t_DataElementStyle=DataElementStyleEnum.Auto;\n\t\t\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"value\":\n\t\t\t\t\t\t_Value = new Expression(r, this, xNodeLoop, ExpressionType.Variant);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"cangrow\":\n\t\t\t\t\t\t_CanGrow = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"canshrink\":\n\t\t\t\t\t\t_CanShrink = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"hideduplicates\":\n\t\t\t\t\t\t_HideDuplicates = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"toggleimage\":\n\t\t\t\t\t\t_ToggleImage = new ToggleImage(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"dataelementstyle\":\n\t\t\t\t\t\t_DataElementStyle = Majorsilence.Reporting.Rdl.DataElementStyle.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (ReportItemElement(xNodeLoop))\t// try at ReportItem level\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Textbox element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (_Value == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"Textbox value not specified for \" + (this.Name == null? \"'name not specified'\": this.Name.Nm));\n\n\t\t\tif (this.Name != null)\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tOwnerReport.LUReportItems.Add(this.Name.Nm, this);\t\t// add to referenceable TextBoxes\n\t\t\t\t}\n\t\t\t\tcatch\t\t// Duplicate name\n\t\t\t\t{\n\t\t\t\t\tOwnerReport.rl.LogError(4, \"Duplicate Textbox name '\" + this.Name.Nm + \"' ignored.\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n            await base.FinalPass();\n            await _Value.FinalPass();\n\n\t\t\tif (this.DataElementName == null && this.Name == null)\n\t\t\t{\n\t\t\t\t// no name or dataelementname; try using expression\n\t\t\t\tFunctionField ff = _Value.Expr as FunctionField;\n\t\t\t\tif (ff != null && ff.Fld != null)\n\t\t\t\t{\n\t\t\t\t\tthis.DataElementName = ff.Fld.DataField;\n                    this.Name = ff.Fld.Name; // Added \n\t\t\t\t}\n                \n                FunctionAggr fa = _Value.Expr as FunctionAggr; \n                if (fa != null)\n                {\n                    FunctionField ff2 = fa.Expr as FunctionField;\n                    if (ff2 != null && ff2.Fld != null)\n                    {\n                        this.DataElementName = ff2.Fld.DataField;\n                        this.Name = ff2.Fld.Name; \n                    }\n                }\n\t\t\t}\n\n\t\t\tif (_ToggleImage != null)\n                await _ToggleImage.FinalPass();\n\n\t\t\tif (_HideDuplicates != null)\n\t\t\t{\n\t\t\t\tobject o = OwnerReport.LUAggrScope[_HideDuplicates];\n\t\t\t\tif (o == null)\n\t\t\t\t{\n\t\t\t\t\tOwnerReport.rl.LogError(4, \"HideDuplicate '\" +_HideDuplicates + \"' is not a Group or DataSet name.   It will be ignored.\");\n\t\t\t\t\t_HideDuplicates=null;\n\t\t\t\t}\n\t\t\t\telse if (o is Grouping)\n\t\t\t\t{\t\n\t\t\t\t\tGrouping g = o as Grouping;\n\t\t\t\t\tg.AddHideDuplicates(this);\n\t\t\t\t}\n\t\t\t\telse if (o is DataSetDefn)\n\t\t\t\t{\n\t\t\t\t\tDataSetDefn ds = o as DataSetDefn;\n\t\t\t\t\tds.AddHideDuplicates(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tinternal void AddExpressionReference(string name)\n\t\t{\n\t\t\tif (_ExprReferences == null)\n\t\t\t\t_ExprReferences = new List<string>();\n\t\t\t_ExprReferences.Add(name);\n\t\t}\n\n\t\tinternal void RecordPageReference(Report rpt, Page p, Row r)\n\t\t{\n\t\t\tif (_ExprReferences == null)\n\t\t\t\treturn;\n\t\t\tforeach (string refr in _ExprReferences)\n\t\t\t{\n\t\t\t\tp.AddPageExpressionRow(rpt, refr, r);\n\t\t\t}\n\t\t}\n\n\t\tinternal void ResetPrevious(Report rpt)\n\t\t{\n\t\t\tTextboxRuntime tbr = TextboxRuntime.GetTextboxRuntime(rpt, this);\n\t\t\tResetPrevious(tbr);\n\t\t}\n\n\t\tvoid ResetPrevious(TextboxRuntime tbr)\n\t\t{\n\t\t\ttbr.PreviousText=null;\t\n\t\t\ttbr.PreviousPage=null;\t\n\t\t}\n\n\t\tasync override internal Task Run(IPresent ip, Row row)\n\t\t{\n\t\t\tReport rpt = ip.Report();\n            await base.Run(ip, row);\n\n\t\t\tTextboxRuntime tbr = TextboxRuntime.GetTextboxRuntime(rpt, this);\n\n\t\t\ttbr.RunCount++;\t\t// Increment the run count\n\t\t\tstring t = await RunText(rpt, row);\n\t\t\tbool bDup =\tRunTextIsDuplicate(tbr, t, null);\n\t\t\tif (bDup)\n\t\t\t{\n\t\t\t\tif (!(this.IsTableOrMatrixCell(rpt)))\t// don't put out anything if not in Table or Matrix\n\t\t\t\t\treturn;\n\t\t\t\tt = \"\";\t\t// still need to put out the cell\n\t\t\t}\n            await ip.Textbox(this, t, row);\n\n\t\t\tif (!bDup)\n\t\t\t\ttbr.PreviousText=t;\t// set for next time\n\t\t}\n\n\t\toverride internal async Task RunPage(Pages pgs, Row row)\n\t\t{\n\t\t\tReport r = pgs.Report;\n\t\t\tTextboxRuntime tbr = TextboxRuntime.GetTextboxRuntime(r, this);\n\n\t\t\ttbr.RunCount++;\t\t// Increment the run count\n\n            bool bHidden = await IsHidden(r, row);\n\n\t\t\tSetPagePositionBegin(pgs);\n\n\t\t\tstring t;\n            if (bHidden)\n                t = \"\";\n            else\n                t = await RunText(r, row);\t// get the text\n\n\t\t\tbool bDup =\tRunTextIsDuplicate(tbr, t, pgs.CurrentPage);\n\t\t\tif (bDup)\n\t\t\t{\n\t\t\t\tif (!(this.IsTableOrMatrixCell(r)))\t// don't put out anything if not in Table or Matrix\n\t\t\t\t\tbHidden = true;\n\t\t\t\tt = \"\";\t\t// still need to put out the cell\n\t\t\t}\n\t\t\tPageText pt;\n\t\t\tPageTextHtml pth=null;\n\t\t\tif (await IsHtml(r, row))\n\t\t\t\tpt = pth = new PageTextHtml(t);\n\t\t\telse\n\t\t\t\tpt = new PageText(t);\n            await SetPagePositionAndStyle(r, pt, row);\n\t\t\tif (this.CanGrow && tbr.RunHeight == 0)\t// when textbox is in a DataRegion this will already be called\n\t\t\t{\n                await this.RunTextCalcHeight(r, pgs.G, row, pt as PageTextHtml);\n\t\t\t}\n\t\t\tpt.H = Math.Max(pt.H, tbr.RunHeight);\t\t// reset height\n\t\t\tif (pt.SI.BackgroundImage != null)\n\t\t\t\tpt.SI.BackgroundImage.H = pt.H;\t\t//   and in the background image\n\t\t\tpt.CanGrow = this.CanGrow;\n\n            // check TextAlign: if General then correct based on data type\n            if (pt.SI.TextAlign == TextAlignEnum.General)\n            {\n                if (DataType.IsNumeric(this.Value.GetTypeCode() ))\n                    pt.SI.TextAlign = TextAlignEnum.Right;\n            }\n\n            // Hidden objects don't affect the current page?\n            if (!bHidden)\n            {\n                // Force page break if it doesn't fit on a page\n                if (this.IsInBody &&                         // Only force page when object directly in body\n                    pgs.CurrentPage.YOffset + pt.Y + pt.H >= pgs.BottomOfPage && // running off end of page\n                    !pgs.CurrentPage.IsEmpty())                             // if page is already empty don't force new\n                {\t// force page break if it doesn't fit on the page\n                    pgs.NextOrNew();\n                    pgs.CurrentPage.YOffset = OwnerReport.TopOfPage;\n                    if (this.YParents != null)\n                        pt.Y = 0;\n                }\n\n                Page p = pgs.CurrentPage;\n                RecordPageReference(r, p, row);\t\t\t// save information for late page header/footer references\n                p.AddObject(pt);\n                if (!bDup)\n                {\n                    tbr.PreviousText = t;\t// previous text displayed\n                    tbr.PreviousPage = p;\t//  page previous text was shown on\n                }\n            }\n\n\t\t\tSetPagePositionEnd(pgs, pt.Y+pt.H);\n\t\t\tif (pth != null)\n\t\t\t\tpth.Reset();\n\t\t\tif (this.CanGrow && !await Value.IsConstant())\n\t\t\t{\n\t\t\t\ttbr.RunHeight = 0;\t\t\t\t\t// need to recalculate\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// routine to determine if text is considered to be a duplicate;\n\t\t//  ie: same as previous text and on same page\n\t\tprivate bool RunTextIsDuplicate(TextboxRuntime tbr, string t, Page p)\n\t\t{\n\t\t\tif (this._HideDuplicates == null)\n\t\t\t\treturn false;\n\t\t\tif (t == tbr.PreviousText && p == tbr.PreviousPage)\n\t\t\t\treturn true;\n\n\t\t\treturn false;\n\t\t}\n\n\t\tinternal async Task<string> RunText(Report rpt, Row row)\n\t\t{\n\t\t\tobject o = await Evaluate(rpt, row);\n            // AJM 15082008: Suppress NaN from appearing in a textbox\n            if (o is double) \n            {\n                if (Double.IsNaN((double)o)) \n                { \n                    o = null; \n                } \n            }   \n\t\t\tstring t = await Style.GetFormatedString(rpt, this.Style, row, o, _Value.GetTypeCode());\n            if (await IsHtml(rpt, row) && t != null && t.Contains(\"<expr>\"))\n            {\n                string[] parts = HTMLEXPR.Split(t);\n                StringBuilder sb = new StringBuilder(t.Length);\n                foreach (string s in parts)\n                {\n                    if (s.StartsWith(\"<expr>\") && s.EndsWith(\"</expr>\"))\n                    {\n                        string expr = s.Substring(6, s.Length - 13);\n                        DynamicExpression de = new DynamicExpression(rpt, this, expr, row);\n                        sb.Append(await de.Evaluate(rpt, row));\n                    }\n                    else\n                        sb.Append(s);\n                }\n                t = sb.ToString();\n            }\n\t\t\treturn t;\n\t\t}\n\n\t\tinternal async Task<float> RunTextCalcHeight(Report rpt, Graphics g, Row row)\n\t\t{\n\t\t\treturn await RunTextCalcHeight(rpt, g, row, null);\n\t\t}\n\t\t\n\t\tinternal async Task<float> RunTextCalcHeight(Report rpt, Graphics g, Row row, PageTextHtml pth)\n\t\t{\t// normally only called when CanGrow is true\n\t\t\tSize s = Size.Empty;\n\n\t\t\tif (await IsHidden(rpt, row))\n\t\t\t\treturn 0;\n\n\t\t\tobject o = await Evaluate(rpt, row);\n\n\t\t\tTypeCode tc = _Value.GetTypeCode();\n\t\t\tint width = this.WidthCalc(rpt, g);\n\n\t\t\tif (this.Style != null)\n\t\t\t{\n\t\t\t\twidth -= (await Style.EvalPaddingLeftPx(rpt, row) + await Style.EvalPaddingRightPx(rpt, row));\n\n\t\t\t\tif (await this.IsHtml(rpt, row))\n\t\t\t\t{\n\t\t\t\t\tif (pth == null)\n\t\t\t\t\t{\n\t\t\t\t\t\tpth = new PageTextHtml(o==null? \"\": o.ToString());\n\t\t\t\t\t\tawait SetPagePositionAndStyle(rpt, pth, row);\n\t\t\t\t\t}\n\t\t\t\t\tawait pth.Build(g);\n\t\t\t\t\ts.Height = RSize.PixelsFromPoints(pth.TotalHeight);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\ts = await Style.MeasureString(rpt, g, o, tc, row, width);\n\t\t\t}\n\t\t\telse\t// call the class static method\n\t\t\t\ts = await Style.MeasureStringDefaults(rpt, g, o, tc, row, width);\n\n\t\t\tTextboxRuntime tbr = TextboxRuntime.GetTextboxRuntime(rpt, this);\n\t\t\ttbr.RunHeight = RSize.PointsFromPixels(g, s.Height);\n\t\t\tif (Style != null)\n\t\t\t\ttbr.RunHeight += (await Style.EvalPaddingBottom(rpt, row) + await Style.EvalPaddingTop(rpt, row));\n\t\t\treturn tbr.RunHeight;\n\t\t}\n\n\t\tinternal async Task<object> Evaluate(Report rpt, Row r)\n\t\t{\n\t\t\tif(r == null || lastValueForRow != r || lastValueForReport != rpt)\n\t\t\t{\n\t\t\t\tlastEvaluatedValue = await _Value.Evaluate(rpt, r);\n\t\t\t\tlastValueForReport = rpt;\n\t\t\t\tlastValueForRow = r;\n\t\t\t}\n\t\t\t\t\n\t\t\treturn lastEvaluatedValue;\n\t\t}\n\n\t\tinternal Expression Value\n\t\t{\n\t\t\tget { return  _Value; }\n\t\t\tset {  _Value = value; }\n\t\t}\n\n\t\tinternal bool CanGrow\n\t\t{\n\t\t\tget { return  _CanGrow; }\n\t\t\tset {  _CanGrow = value; }\n\t\t}\n\n\t\tinternal bool CanShrink\n\t\t{\n\t\t\tget { return  _CanShrink; }\n\t\t\tset {  _CanShrink = value; }\n\t\t}\n\n\t\tinternal string HideDuplicates\n\t\t{\n\t\t\tget { return  _HideDuplicates; }\n\t\t\tset {  _HideDuplicates = value; }\n\t\t}\n\n\t\tinternal async Task<bool> IsHtml(Report rpt, Row row)\n\t\t{\n\t\t\tif (this.Style == null || this.Style.Format == null)\n\t\t\t\treturn false;\n\t\t\tstring format = await Style.Format.EvaluateString(rpt, row);\n\t\t\tif (format == null)\n\t\t\t\treturn false;\n\t\t\treturn format.ToLower() == \"html\";\n\t\t}\n\n\t\tinternal ToggleImage ToggleImage\n\t\t{\n\t\t\tget { return  _ToggleImage; }\n\t\t\tset {  _ToggleImage = value; }\n\t\t}\n\n\t\tinternal bool IsToggle\n\t\t{\n\t\t\tget { return  _IsToggle; }\n\t\t\tset {  _IsToggle = value; }\n\t\t}\n\n\t\tinternal int RunCount(Report rpt)\n\t\t{\n\t\t\tTextboxRuntime tbr = TextboxRuntime.GetTextboxRuntime(rpt, this);\n\n\t\t\treturn  tbr.RunCount;\n\t\t}\n\n\t\tinternal DataElementStyleEnum DataElementStyle\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_DataElementStyle == DataElementStyleEnum.Auto)\t// auto means use report\n\t\t\t\t\treturn OwnerReport.DataElementStyle;\n\t\t\t\telse\n\t\t\t\t\treturn  _DataElementStyle; \n\t\t\t}\n\t\t\tset {  _DataElementStyle = value; }\n\t\t}\n\n\t}\n\n\tclass TextboxRuntime\n\t{\n\t\tinternal int RunCount=0;\t\t\t// number of times TextBox is rendered at runtime;\n\t\t\t\t\t\t\t\t\t\t\t//    used to generate unique names for toggling visibility\n\t\tinternal float RunHeight=0;\t\t\t// the runtime height (in points)\n\t\tinternal string PreviousText=null;\t// previous text displayed\n\t\tinternal Page PreviousPage=null;\t//  page previous text was shown on\n\t\tinternal object LastObject=null;\t// last object calculated\n\n\t\tstatic internal TextboxRuntime GetTextboxRuntime(Report rpt, Textbox tb)\n\t\t{\n\t\t\tTextboxRuntime tbr = rpt.Cache.Get(tb, \"txtbox\") as TextboxRuntime;\n\t\t\tif (tbr != null)\n\t\t\t\treturn tbr;\n\t\t\ttbr = new TextboxRuntime();\n\t\t\trpt.Cache.Add(tb, \"txtbox\", tbr);\n\t\t\treturn tbr;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ThreeDProperties.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// ThreeDProperties definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class ThreeDProperties : ReportLink\n\t{\n\t\tbool _Enabled;\t\t// Whether or not a chart is displayed in 3D. Default is False (2D).\n\t\tThreeDPropertiesProjectionModeEnum _ProjectionMode;\t\t// The projection mode used for the 3D rendering\n\t\tint _Rotation;\t\t// Rotation angle\n\t\t\t\t\t\t\t//  Applies only for Perspective projection\n\t\tint _Inclination;\t// Inclination angle\n\t\t\t\t\t\t\t//  Applies only for Perspective projection\n\t\tint _Perspective;\t// Represents the percent of perspective\n\t\t\t\t\t\t\t//  Applies only for Perspective projection\n\t\tint _HeightRatio;\t// Ratio between height and width\n\t\tint _DepthRatio;\t// Ration between depth and width\n\t\tThreeDPropertiesShadingEnum _Shading;\t// Default: None\n\t\tint _GapDepth;\t\t// Percent depth gap between 3D bars and columns\n\t\tint _WallThickness;\t// Percent thickness of outer walls\n\t\tThreeDPropertiesDrawingStyleEnum _DrawingStyle;\t// Determines shape of chart data displayed Default: cube\n\t\t\t\t\t\t\t//\t\tOnly applies to bar and column chart types.\n\t\tbool _Clustered;\t// Determines if data series are clustered\n\t\t\t\t\t\t\t// (displayed along distinct rows). Only\n\t\t\t\t\t\t\t// applies to bar and column chart types.  Defaults to false.\t\t\n\t\n\t\tinternal ThreeDProperties(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Enabled=false;\n\t\t\t_ProjectionMode=ThreeDPropertiesProjectionModeEnum.Perspective;\n\t\t\t_Rotation=0;\n\t\t\t_Inclination=0;\n\t\t\t_Perspective=0;\n\t\t\t_HeightRatio=0;\n\t\t\t_DepthRatio=0;\n\t\t\t_Shading=ThreeDPropertiesShadingEnum.None;\n\t\t\t_GapDepth=0;\n\t\t\t_WallThickness=0;\n\t\t\t_DrawingStyle=ThreeDPropertiesDrawingStyleEnum.Cube;\n\t\t\t_Clustered=false;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"enabled\":\n\t\t\t\t\t\t_Enabled = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"projectionmode\":\n\t\t\t\t\t\t_ProjectionMode = ThreeDPropertiesProjectionMode.GetStyle(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"rotation\":\n\t\t\t\t\t\t_Rotation = XmlUtil.Integer(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"inclination\":\n\t\t\t\t\t\t_Inclination = XmlUtil.Integer(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"perspective\":\n\t\t\t\t\t\t_Perspective = XmlUtil.Integer(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"heightratio\":\n\t\t\t\t\t\t_HeightRatio = XmlUtil.Integer(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"depthratio\":\n\t\t\t\t\t\t_DepthRatio = XmlUtil.Integer(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"shading\":\n\t\t\t\t\t\t_Shading = ThreeDPropertiesShading.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"gapdepth\":\n\t\t\t\t\t\t_GapDepth = XmlUtil.Integer(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"wallthickness\":\n\t\t\t\t\t\t_WallThickness = XmlUtil.Integer(xNodeLoop.InnerText);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"drawingstyle\":\n\t\t\t\t\t\t_DrawingStyle = ThreeDPropertiesDrawingStyle.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"clustered\":\n\t\t\t\t\t\t_Clustered = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\toverride internal Task FinalPass()\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tinternal bool Enabled\n\t\t{\n\t\t\tget { return  _Enabled; }\n\t\t\tset {  _Enabled = value; }\n\t\t}\n\n\t\tinternal ThreeDPropertiesProjectionModeEnum ProjectionMode\n\t\t{\n\t\t\tget { return  _ProjectionMode; }\n\t\t\tset {  _ProjectionMode = value; }\n\t\t}\n\n\t\tinternal int Rotation\n\t\t{\n\t\t\tget { return  _Rotation; }\n\t\t\tset {  _Rotation = value; }\n\t\t}\n\n\t\tinternal int Inclination\n\t\t{\n\t\t\tget { return  _Inclination; }\n\t\t\tset {  _Inclination = value; }\n\t\t}\n\n\t\tinternal int Perspective\n\t\t{\n\t\t\tget { return  _Perspective; }\n\t\t\tset {  _Perspective = value; }\n\t\t}\n\n\t\tinternal int HeightRatio\n\t\t{\n\t\t\tget { return  _HeightRatio; }\n\t\t\tset {  _HeightRatio = value; }\n\t\t}\n\n\t\tinternal int DepthRatio\n\t\t{\n\t\t\tget { return  _DepthRatio; }\n\t\t\tset {  _DepthRatio = value; }\n\t\t}\n\n\t\tinternal ThreeDPropertiesShadingEnum Shading\n\t\t{\n\t\t\tget { return  _Shading; }\n\t\t\tset {  _Shading = value; }\n\t\t}\n\n\t\tinternal int GapDepth\n\t\t{\n\t\t\tget { return  _GapDepth; }\n\t\t\tset {  _GapDepth = value; }\n\t\t}\n\n\t\tinternal int WallThickness\n\t\t{\n\t\t\tget { return  _WallThickness; }\n\t\t\tset {  _WallThickness = value; }\n\t\t}\n\n\t\tinternal ThreeDPropertiesDrawingStyleEnum DrawingStyle\n\t\t{\n\t\t\tget { return  _DrawingStyle; }\n\t\t\tset {  _DrawingStyle = value; }\n\t\t}\n\n\t\tinternal bool Clustered\n\t\t{\n\t\t\tget { return  _Clustered; }\n\t\t\tset {  _Clustered = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ThreeDPropertiesDrawingStyle.cs",
    "content": "\n\nusing System;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t\n\tinternal enum ThreeDPropertiesDrawingStyleEnum\n\t{\n\t\tCylinder,\n\t\tCube\n\t}\n\n\tinternal class ThreeDPropertiesDrawingStyle\n\t{\n\t\tstatic internal ThreeDPropertiesDrawingStyleEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tThreeDPropertiesDrawingStyleEnum ds;\n\n\t\t\tswitch (s.ToLowerInvariant())\n\t\t\t{\t\t\n\t\t\t\tcase \"cylinder\":\n\t\t\t\t\tds = ThreeDPropertiesDrawingStyleEnum.Cylinder;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"cube\":\n\t\t\t\t\tds = ThreeDPropertiesDrawingStyleEnum.Cube;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\n\t\t\t\t\trl.LogError(4, \"Unknown DrawingStyle '\" + s + \"'.  Cube assumed.\");\n\t\t\t\t\tds = ThreeDPropertiesDrawingStyleEnum.Cube;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn ds;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ThreeDPropertiesProjectionMode.cs",
    "content": "\n\nusing System;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\tinternal enum ThreeDPropertiesProjectionModeEnum\n\t{\n\t\tPerspective,\n\t\tOrthographic\n\t}\n\n\tinternal class ThreeDPropertiesProjectionMode\n\t{\n\t\tstatic internal ThreeDPropertiesProjectionModeEnum GetStyle(string s)\n\t\t{\n\t\t\tThreeDPropertiesProjectionModeEnum pm;\n\n\t\t\tswitch (s.ToLowerInvariant())\n\t\t\t{\t\t\n\t\t\t\tcase \"perspective\":\n\t\t\t\t\tpm = ThreeDPropertiesProjectionModeEnum.Perspective;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"orthographic\":\n\t\t\t\t\tpm = ThreeDPropertiesProjectionModeEnum.Orthographic;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tpm = ThreeDPropertiesProjectionModeEnum.Perspective;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn pm;\n\t\t}\n\t}\n\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ThreeDPropertiesShading.cs",
    "content": "\n\nusing System;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\n\tinternal enum ThreeDPropertiesShadingEnum\n\t{\n\t\tNone,\n\t\tSimple,\n\t\tReal\n\t}\n\n\tinternal class ThreeDPropertiesShading\n\t{\n\t\tstatic internal ThreeDPropertiesShadingEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tThreeDPropertiesShadingEnum sh;\n\n\t\t\tswitch (s.ToLowerInvariant())\n\t\t\t{\t\t\n\t\t\t\tcase \"none\":\n\t\t\t\t\tsh = ThreeDPropertiesShadingEnum.None;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"simple\":\n\t\t\t\t\tsh = ThreeDPropertiesShadingEnum.Simple;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"real\":\n\t\t\t\t\tsh = ThreeDPropertiesShadingEnum.Real;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\n\t\t\t\t\trl.LogError(4, \"Unknown Shading '\" + s + \"'.  None assumed.\");\n\t\t\t\t\tsh = ThreeDPropertiesShadingEnum.None;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn sh;\n\t\t}\n\t}\n\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Title.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Chart (or axis) title definition.\n\t///</summary>\n\t[Serializable]\n\tinternal class Title : ReportLink\n\t{\n\t\tExpression _Caption;\t//(string) Caption of the title\n\t\tStyle _Style;\t\t\t// Defines text, border and background style\n\t\t\t\t\t\t\t\t// properties for the title.\n\t\t\t\t\t\t\t\t// All Textbox properties apply.\n\t\tTitlePositionEnum _Position;\t// The position of the title; Default: center\n\t\n\t\tinternal Title(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Caption=null;\n\t\t\t_Style=null;\n\t\t\t_Position=TitlePositionEnum.Center;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"caption\":\n\t\t\t\t\t\t_Caption = new Expression(r, this, xNodeLoop, ExpressionType.String);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"style\":\n\t\t\t\t\t\t_Style = new Style(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"position\":\n\t\t\t\t\t\t_Position = TitlePosition.GetStyle(xNodeLoop.InnerText, OwnerReport.rl);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Title element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Caption != null)\n                await _Caption.FinalPass();\n\t\t\tif (_Style != null)\n                await _Style.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Expression Caption\n\t\t{\n\t\t\tget { return  _Caption; }\n\t\t\tset {  _Caption = value; }\n\t\t}\n\n\t\tinternal Style Style\n\t\t{\n\t\t\tget { return  _Style; }\n\t\t\tset {  _Style = value; }\n\t\t}\n\n\t\tinternal TitlePositionEnum Position\n\t\t{\n\t\t\tget { return  _Position; }\n\t\t\tset {  _Position = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/TitlePosition.cs",
    "content": "\nusing System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Handle title position enumeration: center, near, far.\n\t///</summary>\n\tinternal enum TitlePositionEnum\n\t{\n\t\tCenter,\n\t\tNear,\n\t\tFar\n\t}\n\tinternal class TitlePosition\n\t{\n\t\tstatic internal TitlePositionEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tTitlePositionEnum rs;\n\n\t\t\tswitch (s.ToLowerInvariant())\n\t\t\t{\t\t\n\t\t\t\tcase \"center\":\n\t\t\t\t\trs = TitlePositionEnum.Center;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"near\":\n\t\t\t\t\trs = TitlePositionEnum.Near;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"far\":\n\t\t\t\t\trs = TitlePositionEnum.Far;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\n\t\t\t\t\trl.LogError(4, \"Unknown TitlePosition '\" + s + \"'.  Center assumed.\");\n\t\t\t\t\trs = TitlePositionEnum.Center;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn rs;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ToggleImage.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Toggle image definition.\n\t///</summary>\n\t[Serializable]\n\tinternal class ToggleImage : ReportLink\n\t{\n\t\tExpression _InitialState;\t//(Boolean)\n\t\t\t\t\t//A Boolean expression, the value of which\n\t\t\t\t\t//determines the initial state of the toggle image.\n\t\t\t\t\t//True = �expanded� (i.e. a minus sign). False =\n\t\t\t\t\t//�collapsed� (i.e. a plus sign)\t\t\n\t\n\t\tinternal ToggleImage(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_InitialState=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"InitialState\":\n\t\t\t\t\t\t_InitialState = new Expression(r, this, xNodeLoop, ExpressionType.Boolean);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown ToggleImage element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_InitialState == null)\n\t\t\t\tOwnerReport.rl.LogError(8, \"ToggleImage requires the InitialState element.\");\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_InitialState != null)\n                await _InitialState.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Expression InitialState\n\t\t{\n\t\t\tget { return  _InitialState; }\n\t\t\tset {  _InitialState = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/TrueFalseAuto.cs",
    "content": "\n\nusing System;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Three value state; true, false, auto (dependent on context)\n\t///</summary>\n\tinternal enum TrueFalseAutoEnum\n\t{\n\t\tTrue,\n\t\tFalse,\n\t\tAuto\n\t}\n\t\n\tinternal class TrueFalseAuto\n\t{\n\t\tstatic internal TrueFalseAutoEnum GetStyle(string s, ReportLog rl)\n\t\t{\n\t\t\tTrueFalseAutoEnum rs;\n\n\t\t\tswitch (s.ToLowerInvariant())\n\t\t\t{\t\t\n\t\t\t\tcase \"true\":\n\t\t\t\t\trs = TrueFalseAutoEnum.True;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"false\":\n\t\t\t\t\trs = TrueFalseAutoEnum.False;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"auto\":\n\t\t\t\t\trs = TrueFalseAutoEnum.Auto;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\n\t\t\t\t\trl.LogError(4, \"Unknown True False Auto value of '\" + s + \"'.  Auto assumed.\");\n\t\t\t\t\trs = TrueFalseAutoEnum.Auto;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn rs;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ValidValues.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Query to execute for valid values of a parameter.\n\t///</summary>\n\t[Serializable]\n\tinternal class ValidValues : ReportLink\n\t{\n\t\tDataSetReference _DataSetReference;\t// The query to execute to obtain a list of\n\t\t\t\t\t\t\t\t\t\t\t// possible values for the parameter.\n\t\tParameterValues _ParameterValues;\t// Hardcoded values for the parameter\t\n\n\t\tinternal ValidValues(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_DataSetReference=null;\n\t\t\t_ParameterValues=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"DataSetReference\":\n\t\t\t\t\t\t_DataSetReference = new DataSetReference(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ParameterValues\":\n\t\t\t\t\t\t_ParameterValues = new ParameterValues(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown ValidValues element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_DataSetReference == null)\n\t\t\t{\n\t\t\t\tif (_ParameterValues == null)\t\t\t\t\n\t\t\t\t{\n\t\t\t\t\tOwnerReport.rl.LogError(8, \"For ValidValues element either DataSetReference or ParameterValue must be specified, but not both.\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (_ParameterValues != null)\n\t\t\t{\n\t\t\t\tOwnerReport.rl.LogError(8, \"For ValidValues element either DataSetReference or ParameterValue must be specified, but not both.\");\n\t\t\t}\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_DataSetReference != null)\n                await _DataSetReference.FinalPass();\n\t\t\tif (_ParameterValues != null)\n                await _ParameterValues.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal DataSetReference DataSetReference\n\t\t{\n\t\t\tget { return  _DataSetReference; }\n\t\t\tset {  _DataSetReference = value; }\n\t\t}\n\n\t\tinternal ParameterValues ParameterValues\n\t\t{\n\t\t\tget { return  _ParameterValues; }\n\t\t\tset {  _ParameterValues = value; }\n\t\t}\n\n\t\tinternal async Task<string[]> DisplayValues(Report rpt)\n\t\t{\n\t\t\tstring[] dsplValues = rpt.Cache.Get(this, \"displayvalues\") as string[];\n\t\t\tobject[] dataValues;\n\n\t\t\tif (dsplValues != null)\n\t\t\t\treturn dsplValues;\n\n\t\t\tif (_DataSetReference != null)\n\t\t\t\t(dsplValues, dataValues) = await _DataSetReference.SupplyValues(rpt);\n\t\t\telse\n\t\t\t\t(dsplValues, dataValues) = await _ParameterValues.SupplyValues(rpt);\n\n            if (dataValues == null)\n                dataValues = new object[0];\n            if (dsplValues == null)\n                dsplValues = new string[0];\n\n\t\t\t// there shouldn't be a problem; but if there is it doesn't matter as values can be recreated\n\t\t\ttry {rpt.Cache.Add(this, \"datavalues\", dataValues);} \n\t\t\tcatch (Exception e1)\n\t\t\t{\n\t\t\t\trpt.rl.LogError(4, \"Error caching data values.  \" + e1.Message);\n\t\t\t}\n\t\t\ttry {rpt.Cache.Add(this, \"displayvalues\", dsplValues);} \n\t\t\tcatch (Exception e2)\n\t\t\t{\n\t\t\t\trpt.rl.LogError(4, \"Error caching display values.  \" + e2.Message);\n\t\t\t}\n\n\t\t\treturn dsplValues;\n\t\t}\n\n\t\tinternal async Task<object[]> DataValues(Report rpt)\n\t\t{\n\t\t\tstring[] dsplValues;\n\t\t\tobject[] dataValues = rpt.Cache.Get(this, \"datavalues\") as object[];\n\n\t\t\tif (dataValues != null)\n\t\t\t\treturn dataValues;\n\n\t\t\tif (_DataSetReference != null)\n\t\t\t\t(dsplValues, dataValues)= await _DataSetReference.SupplyValues(rpt);\n\t\t\telse\n\t\t\t\t(dsplValues, dataValues) = await _ParameterValues.SupplyValues(rpt);\n\n            if (dataValues == null)\n                dataValues = new object[0];\n            if (dsplValues == null)\n                dsplValues = new string[0];\n\n\t\t\t// there shouldn't be a problem; but if there is it doesn't matter as values can be recreated\n\t\t\ttry {rpt.Cache.Add(this, \"datavalues\", dataValues);} \n\t\t\tcatch (Exception e1)\n\t\t\t{\n\t\t\t\trpt.rl.LogError(4, \"Error caching data values.  \" + e1.Message);\n\t\t\t}\n\t\t\ttry {rpt.Cache.Add(this, \"displayvalues\", dsplValues);} \n\t\t\tcatch (Exception e2)\n\t\t\t{\n\t\t\t\trpt.rl.LogError(4, \"Error caching display values.  \" + e2.Message);\n\t\t\t}\n\t\t\treturn dataValues;\t\t\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/ValueAxis.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Chart value axis definition.\n\t///</summary>\n\t[Serializable]\n\tinternal class ValueAxis : ReportLink\n\t{\n\t\tAxis _Axis;\t\t// Display properties for the value axis.\t\t\n\t\n\t\tinternal ValueAxis(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Axis=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name.ToLowerInvariant())\n\t\t\t\t{\n\t\t\t\t\tcase \"axis\":\n\t\t\t\t\t\t_Axis = new Axis(r, this, xNodeLoop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown ValueAxis element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Axis != null)\n                await _Axis.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Axis Axis\n\t\t{\n\t\t\tget { return  _Axis; }\n\t\t\tset {  _Axis = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Values.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Ordered list of values used as a default for a parameter\n\t///</summary>\n\t[Serializable]\n    internal class Values : ReportLink, System.Collections.Generic.ICollection<Expression>\n\t{\n        List<Expression> _Items;\t\t\t// list of expression items\n\n\t\tinternal Values(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\tExpression v;\n            _Items = new List<Expression>();\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Value\":\n\t\t\t\t\t\tv = new Expression(r, this, xNodeLoop, ExpressionType.Variant);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\tv=null;\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Value element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (v != null)\n\t\t\t\t\t_Items.Add(v);\n\t\t\t}\n\t\t\tif (_Items.Count > 0)\n                _Items.TrimExcess();\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tforeach (Expression e in _Items)\n\t\t\t{\n                await e.FinalPass();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        internal List<Expression> Items\n\t\t{\n\t\t\tget { return  _Items; }\n\t\t}\n\t\t#region IEnumerable Members\n\n\t\tpublic IEnumerator GetEnumerator()\n\t\t{\n\t\t\treturn _Items.GetEnumerator();\n\t\t}\n\n\t\t#endregion\n\n        #region ICollection<Expression> Members\n\n        public void Add(Expression item)\n        {\n            _Items.Add(item);\n        }\n\n        public void Clear()\n        {\n            _Items.Clear();\n        }\n\n        public bool Contains(Expression item)\n        {\n            return _Items.Contains(item);\n        }\n\n        public void CopyTo(Expression[] array, int arrayIndex)\n        {\n            _Items.CopyTo(array, arrayIndex);\n        }\n\n        public int Count\n        {\n            get { return _Items.Count; }\n        }\n\n        public bool IsReadOnly\n        {\n            get { return false; }\n        }\n\n        public bool Remove(Expression item)\n        {\n            return _Items.Remove(item);\n        }\n\n        #endregion\n\n        #region IEnumerable<Expression> Members\n\n        IEnumerator<Expression> IEnumerable<Expression>.GetEnumerator()\n        {\n            return _Items.GetEnumerator();\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Definition/Visibility.cs",
    "content": "\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Visibility definition and processing.\n\t///</summary>\n\t[Serializable]\n\tinternal class Visibility : ReportLink\n\t{\n\t\tExpression _Hidden;\t\t// (Boolean) Indicates if the item should be initially hidden.\n\t\tstring _ToggleItem;\t\t// The name of the textbox used to\n\t\t\t\t\t// hide/unhide this report item. Clicking on\n\t\t\t\t\t//an instance of the ToggleItem will toggle\n\t\t\t\t\t//the hidden state of every corresponding\n\t\t\t\t\t//instance of this item. If the Toggle item\n\t\t\t\t\t//becomes hidden, this item should become\n\t\t\t\t\t//hidden.\n\t\t\t\t\t//Must be a textbox in the same grouping\n\t\t\t\t\t//scope as this item or in any containing (ancestor) grouping scope\n\t\t\t\t\t//If omitted, no item will toggle the hidden\n\t\t\t\t\t//state of this item.\n\t\t\t\t\t//Not allowed on and cannot refer to report\n\t\t\t\t\t//items contained in a page header or\n\t\t\t\t\t//footer.\n\t\t\t\t\t//Cannot refer to a report item contained\n\t\t\t\t\t//within the current report item unless\n\t\t\t\t\t//current grouping scope has a Parent.\t\t\n\t\n\t\tinternal Visibility(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p)\n\t\t{\n\t\t\t_Hidden=null;\n\t\t\t_ToggleItem=null;\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Hidden\":\n\t\t\t\t\t\t_Hidden = new Expression(r, this, xNodeLoop, ExpressionType.Boolean);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ToggleItem\":\n\t\t\t\t\t\t_ToggleItem = xNodeLoop.InnerText;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\t\n\t\t\t\t\t\t// don't know this element - log it\n\t\t\t\t\t\tOwnerReport.rl.LogError(4, \"Unknown Visibility element '\" + xNodeLoop.Name + \"' ignored.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Handle parsing of function in final pass\n\t\tasync override internal Task FinalPass()\n\t\t{\n\t\t\tif (_Hidden != null)\n                await _Hidden.FinalPass();\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Expression Hidden\n\t\t{\n\t\t\tget { return  _Hidden; }\n\t\t\tset {  _Hidden = value; }\n\t\t}\n\n\t\tinternal async Task<bool> IsHidden(Report rpt, Row r)\n\t\t{\n\t\t\tif (_Hidden == null)\n\t\t\t\treturn false;\n\n\t\t\treturn await _Hidden.EvaluateBoolean(rpt, r);\n\t\t}\n\n\t\tinternal string ToggleItem\n\t\t{\n\t\t\tget { return  _ToggleItem; }\n\t\t\tset {  _ToggleItem = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/ExprParser/CharReader.cs",
    "content": "\nusing System;\nusing System.IO;\nusing Majorsilence.Reporting.RdlEngine.Resources;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// char reader simply reads entire file into a string and processes.\n\t/// </summary>\n\tinternal class CharReader\n\t{\n\t\tstring file = null;\n\t\tint    ptr  = 0;\n\n\t\tint col = 1;\t\t\t\t// column within line\n\t\tint savecol = 1;\t\t\t//   saved column before a line feed\n\t\tint line = 1;\t\t\t\t// line within file\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the CharReader class.\n\t\t/// </summary>\n\t\t/// <param name=\"textReader\">TextReader with DPL definition.</param>\n\t\tinternal CharReader(TextReader textReader)\n\t\t{\n\t\t\tfile = textReader.ReadToEnd();\n\t\t\ttextReader.Close();\n\t\t}\n\t\t\n\t\t/// <summary>\n\t\t/// Returns the next char from the stream.\n\t\t/// </summary>\n\t\t/// <returns>The next char.</returns>\n\t\tinternal char GetNext()\n\t\t{\n\t\t\tif (EndOfInput()) \n\t\t\t{\n\t\t\t\tConsole.WriteLine(\"warning : FileReader.GetNext : Read char over EndOfInput.\");\n\t\t\t\treturn '\\0';\n\t\t\t}\n\t\t\tchar ch = file[ptr++];\n\t\t\tcol++;\t\t\t\t\t// increment column counter\n\n\t\t\tif(ch == '\\n') \n\t\t\t{\n\t\t\t\tline++;\t\t\t\t// got new line\n\t\t\t\tsavecol = col;\n\t\t\t\tcol = 1;\t\t\t// restart column counter\n\t\t\t}\n\t\t\treturn ch;\n\t\t}\n\t\t\n\t\t/// <summary>\n\t\t/// Returns the next char from the stream without removing it.\n\t\t/// </summary>\n\t\t/// <returns>The top char.</returns>\n\t\tinternal char Peek()\n\t\t{\n\t\t\tif (EndOfInput()) // ok to peek at end of file\n\t\t\t\treturn '\\0';\n\n\t\t\treturn file[ptr];\n\t\t}\n\t\t\n\t\t/// <summary>\n\t\t/// Undoes the extracting of the last char.\n\t\t/// </summary>\n\t\tinternal void UnGet()\n\t\t{\n\t\t\t--ptr;\n\t\t\tif (ptr < 0) \n\t\t\t\tthrow new Exception(Strings.CharReader_Error_FileReaderUnGetFirstChar);\n\t\t\t\n\t\t\tchar ch = file[ptr];\n\t\t\tif (ch == '\\n')\t\t\t\t// did we unget a new line?\n\t\t\t{\n\t\t\t\tline--;\t\t\t\t\t// back up a line\n\t\t\t\tcol = savecol;\t\t\t// go back to previous column too\n\t\t\t}\n\t}\n\t\t\n\t\t/// <summary>\n\t\t/// Returns True if end of input was reached; otherwise False.\n\t\t/// </summary>\n\t\t/// <returns>True if end of input was reached; otherwise False.</returns>\n\t\tinternal bool EndOfInput()\n\t\t{\n\t\t\treturn ptr >= file.Length;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the current column.\n\t\t/// </summary>\n\t\tinternal int Column \n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn col;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the current line.\n\t\t/// </summary>\n\t\tinternal int Line\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn line;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/ExprParser/LaxBinder.cs",
    "content": "/* ====================================================================\n   Copyright (C) 2004-2008  fyiReporting Software, LLC\n   Copyright (C) 2011  Peter Gill <peter@majorsilence.com>\n\n   This file is part of the fyiReporting RDL project.\n\t\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n\n   For additional information, email info@fyireporting.com or visit\n   the website www.fyiReporting.com.\n  \n This file is originally from MS documentation: http://msdn.microsoft.com/en-us/library/system.reflection.binder.aspx\n \n Above license only applies to changes made above and beyond that code.\n*/\nusing System;\nusing System.Reflection;\nusing System.Globalization;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    public class LaxBinder : Binder\n    {\n        public LaxBinder()\n            : base()\n        {\n        }\n        private class BinderState\n        {\n            public object[] args;\n        }\n        public override FieldInfo BindToField(\n            BindingFlags bindingAttr,\n            FieldInfo[] match,\n            object value,\n            CultureInfo culture\n            )\n        {\n            if (match == null)\n                throw new ArgumentNullException(\"match\");\n            // Get a field for which the value parameter can be converted to the specified field type.\n            for (int i = 0; i < match.Length; i++)\n                if (ChangeType(value, match[i].FieldType, culture) != null)\n                    return match[i];\n            return null;\n        }\n        public override MethodBase BindToMethod(\n            BindingFlags bindingAttr,\n            MethodBase[] match,\n            ref object[] args,\n            ParameterModifier[] modifiers,\n            CultureInfo culture,\n            string[] names,\n            out object state\n            )\n        {\n            // Store the arguments to the method in a state object.\n            BinderState myBinderState = new BinderState();\n            object[] arguments = new Object[args.Length];\n            args.CopyTo(arguments, 0);\n            myBinderState.args = arguments;\n            state = myBinderState;\n            if (match == null)\n                throw new ArgumentNullException();\n            // Find a method that has the same parameters as those of the args parameter.\n            for (int i = 0; i < match.Length; i++)\n            {\n                // Count the number of parameters that match.\n                int count = 0;\n                ParameterInfo[] parameters = match[i].GetParameters();\n                // Go on to the next method if the number of parameters do not match.\n                if (args.Length != parameters.Length)\n                    continue;\n                // Match each of the parameters that the user expects the method to have.\n                for (int j = 0; j < args.Length; j++)\n                {\n                    // If the names parameter is not null, then reorder args.\n                    if (names != null)\n                    {\n                        if (names.Length != args.Length)\n                            throw new ArgumentException(\"names and args must have the same number of elements.\");\n                        for (int k = 0; k < names.Length; k++)\n                            if (String.Compare(parameters[j].Name, names[k].ToString()) == 0)\n                                args[j] = myBinderState.args[k];\n                    }\n                    // Determine whether the types specified by the user can be converted to the parameter type.\n                    if (ChangeType(args[j], parameters[j].ParameterType, culture) != null)\n                        count += 1;\n                    else\n                        break;\n                }\n                // Determine whether the method has been found.\n                if (count == args.Length)\n                    return match[i];\n            }\n            return null;\n        }\n        public override object ChangeType(\n            object value,\n            Type myChangeType,\n            CultureInfo culture\n            )\n        {\n            // Determine whether the value parameter can be converted to a value of type myType.\n            if (CanConvertFrom(value.GetType(), myChangeType))\n                // Return the converted object.\n                return Convert.ChangeType(value, myChangeType);\n            else\n                // Return null.\n                return null;\n        }\n        public override void ReorderArgumentArray(\n            ref object[] args,\n            object state\n            )\n        {\n            // Return the args that had been reordered by BindToMethod.\n            ((BinderState)state).args.CopyTo(args, 0);\n        }\n        public override MethodBase SelectMethod(\n            BindingFlags bindingAttr,\n            MethodBase[] match,\n            Type[] types,\n            ParameterModifier[] modifiers\n            )\n        {\n            if (match == null)\n                throw new ArgumentNullException(\"match\");\n            for (int i = 0; i < match.Length; i++)\n            {\n                // Count the number of parameters that match.\n                int count = 0;\n                ParameterInfo[] parameters = match[i].GetParameters();\n                // Go on to the next method if the number of parameters do not match.\n                if (types.Length != parameters.Length)\n                    continue;\n                // Match each of the parameters that the user expects the method to have.\n                for (int j = 0; j < types.Length; j++)\n                    // Determine whether the types specified by the user can be converted to parameter type.\n                    if (CanConvertFrom(types[j], parameters[j].ParameterType))\n                        count += 1;\n                    else\n                        break;\n                // Determine whether the method has been found.\n                if (count == types.Length)\n                    return match[i];\n            }\n            return null;\n        }\n        public override PropertyInfo SelectProperty(\n            BindingFlags bindingAttr,\n            PropertyInfo[] match,\n            Type returnType,\n            Type[] indexes,\n            ParameterModifier[] modifiers\n            )\n        {\n            if (match == null)\n                throw new ArgumentNullException(\"match\");\n            for (int i = 0; i < match.Length; i++)\n            {\n                // Count the number of indexes that match.\n                int count = 0;\n                ParameterInfo[] parameters = match[i].GetIndexParameters();\n                // Go on to the next property if the number of indexes do not match.\n                if (indexes.Length != parameters.Length)\n                    continue;\n                // Match each of the indexes that the user expects the property to have.\n                for (int j = 0; j < indexes.Length; j++)\n                    // Determine whether the types specified by the user can be converted to index type.\n                    if (CanConvertFrom(indexes[j], parameters[j].ParameterType))\n                        count += 1;\n                    else\n                        break;\n                // Determine whether the property has been found.\n                if (count == indexes.Length)\n                    // Determine whether the return type can be converted to the properties type.\n                    if (CanConvertFrom(returnType, match[i].PropertyType))\n                        return match[i];\n                    else\n                        continue;\n            }\n            return null;\n        }\n        // Determines whether type1 can be converted to type2. Check only for primitive types.\n        private bool CanConvertFrom(Type type1, Type type2)\n        {\n            if (type1.IsPrimitive && type2.IsPrimitive)\n            {\n                TypeCode typeCode1 = Type.GetTypeCode(type1);\n                TypeCode typeCode2 = Type.GetTypeCode(type2);\n                // If both type1 and type2 have the same type, return true.\n                if (typeCode1 == typeCode2)\n                    return true;\n                // Possible conversions from Char follow.\n                if (typeCode1 == TypeCode.Char)\n                    switch (typeCode2)\n                    {\n                        case TypeCode.UInt16: return true;\n                        case TypeCode.UInt32: return true;\n                        case TypeCode.Int32: return true;\n                        case TypeCode.UInt64: return true;\n                        case TypeCode.Int64: return true;\n                        case TypeCode.Single: return true;\n                        case TypeCode.Double: return true;\n                        default: return false;\n                    }\n                // Possible conversions from Byte follow.\n                if (typeCode1 == TypeCode.Byte)\n                    switch (typeCode2)\n                    {\n                        case TypeCode.Char: return true;\n                        case TypeCode.UInt16: return true;\n                        case TypeCode.Int16: return true;\n                        case TypeCode.UInt32: return true;\n                        case TypeCode.Int32: return true;\n                        case TypeCode.UInt64: return true;\n                        case TypeCode.Int64: return true;\n                        case TypeCode.Single: return true;\n                        case TypeCode.Double: return true;\n                        default: return false;\n                    }\n                // Possible conversions from SByte follow.\n                if (typeCode1 == TypeCode.SByte)\n                    switch (typeCode2)\n                    {\n                        case TypeCode.Int16: return true;\n                        case TypeCode.Int32: return true;\n                        case TypeCode.Int64: return true;\n                        case TypeCode.Single: return true;\n                        case TypeCode.Double: return true;\n                        default: return false;\n                    }\n                // Possible conversions from UInt16 follow.\n                if (typeCode1 == TypeCode.UInt16)\n                    switch (typeCode2)\n                    {\n                        case TypeCode.UInt32: return true;\n                        case TypeCode.Int32: return true;\n                        case TypeCode.UInt64: return true;\n                        case TypeCode.Int64: return true;\n                        case TypeCode.Single: return true;\n                        case TypeCode.Double: return true;\n                        default: return false;\n                    }\n                // Possible conversions from Int16 follow.\n                if (typeCode1 == TypeCode.Int16)\n                    switch (typeCode2)\n                    {\n                        case TypeCode.Int32: return true;\n                        case TypeCode.Int64: return true;\n                        case TypeCode.Single: return true;\n                        case TypeCode.Double: return true;\n                        default: return false;\n                    }\n                // Possible conversions from UInt32 follow.\n                if (typeCode1 == TypeCode.UInt32)\n                    switch (typeCode2)\n                    {\n                        case TypeCode.UInt64: return true;\n                        case TypeCode.Int64: return true;\n                        case TypeCode.Single: return true;\n                        case TypeCode.Double: return true;\n                        default: return false;\n                    }\n                // Possible conversions from Int32 follow.\n                if (typeCode1 == TypeCode.Int32)\n                    switch (typeCode2)\n                    {\n                        case TypeCode.Int64: return true;\n                        case TypeCode.Single: return true;\n                        case TypeCode.Double: return true;\n                        default: return false;\n                    }\n                // Possible conversions from UInt64 follow.\n                if (typeCode1 == TypeCode.UInt64)\n                    switch (typeCode2)\n                    {\n                        case TypeCode.Single: return true;\n                        case TypeCode.Double: return true;\n                        default: return false;\n                    }\n                // Possible conversions from Int64 follow.\n                if (typeCode1 == TypeCode.Int64)\n                    switch (typeCode2)\n                    {\n                        case TypeCode.Single: return true;\n                        case TypeCode.Double: return true;\n                        default: return false;\n                    }\n                // Possible conversions from Single follow.\n                if (typeCode1 == TypeCode.Single)\n                    switch (typeCode2)\n                    {\n                        case TypeCode.Double: return true;\n                        default: return false;\n                    }\n            }\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "RdlEngine/ExprParser/Lexer.cs",
    "content": "\nusing System;\nusing System.IO;\nusing System.Collections;\nusing System.Text;\nusing Majorsilence.Reporting.RdlEngine.Resources;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// A simple Lexer that is used by Parser.\n\t/// </summary>\n\tinternal class Lexer\n\t{\n\t\tprivate TokenList tokens;\n\t\tprivate CharReader reader;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the Lexer class with the specified\n\t\t/// expression syntax to lex.\n\t\t/// </summary>\n\t\t/// <param name=\"expr\">An expression to lex.</param>\n\t\tinternal Lexer(string expr)\n\t\t\t: this(new StringReader(expr))\n\t\t{\n\t\t\t// use this\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the Lexer class with the specified\n\t\t/// TextReader to lex.\n\t\t/// </summary>\n\t\t/// <param name=\"source\">A TextReader to lex.</param>\n\t\tinternal Lexer(TextReader source)\n\t\t{\n\t\t\t// token queue\n\t\t\ttokens = new TokenList();\n\n\t\t\t// read the file contents\n\t\t\treader = new CharReader(source);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Breaks the input stream onto the tokens list and returns it.\n\t\t/// </summary>\n\t\t/// <returns>The tokens list.</returns>\n\t\tinternal TokenList Lex()\n\t\t{\n\t\t\tToken token = GetNextToken();\n\t\t\twhile(true)\n\t\t\t{\n\t\t\t\tif(token != null)\n\t\t\t\t\ttokens.Add(token);\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\ttokens.Add(new Token(null, reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.EOF));\n\t\t\t\t\treturn tokens;\n\t\t\t\t}\n\n\t\t\t\ttoken = GetNextToken();\n\t\t\t}\n\t\t}\n\n\t\tprivate Token GetNextToken()\n\t\t{\n\t\t\twhile(!reader.EndOfInput())\n\t\t\t{\n\t\t\t\tchar ch = reader.GetNext();\n\n\t\t\t\t// skipping whitespaces\n\t\t\t\tif(Char.IsWhiteSpace(ch))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tswitch(ch)\n\t\t\t\t{\n\t\t\t\t\tcase '=':\n\t\t\t\t\t\treturn new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.EQUAL);\n\t\t\t\t\tcase '+':\n\t\t\t\t\t\treturn new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.PLUS);\n\t\t\t\t\tcase '-':\n\t\t\t\t\t\treturn new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.MINUS);\n\t\t\t\t\tcase '(':\n\t\t\t\t\t\treturn new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.LPAREN);\n\t\t\t\t\tcase ')':\n\t\t\t\t\t\treturn new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.RPAREN);\n\t\t\t\t\tcase ',':\n\t\t\t\t\t\treturn new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.COMMA);\n\t\t\t\t\tcase '^':\n\t\t\t\t\t\treturn new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.EXP);\n\t\t\t\t\tcase '%':\n\t\t\t\t\t\treturn new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.MODULUS);\n\t\t\t\t\tcase '!':\n\t\t\t\t\t\tif (reader.Peek() == '=')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treader.GetNext();\t// go past the equal\n\t\t\t\t\t\t\treturn new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.NOTEQUAL);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\treturn new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.NOT);\n\t\t\t\t\tcase '&':\n\t\t\t\t\t\treturn new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.PLUSSTRING);\n\t\t\t\t\tcase '|':\n\t\t\t\t\t\tif (reader.Peek() == '|')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treader.GetNext();\t// go past the '|'\n\t\t\t\t\t\t\treturn new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.OR);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '>':\n\t\t\t\t\t\tif (reader.Peek() == '=')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treader.GetNext();\t// go past the equal\n\t\t\t\t\t\t\treturn new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.GREATERTHANOREQUAL);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\treturn new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.GREATERTHAN);\n\t\t\t\t\tcase '/':\n\t\t\t\t\t\tif (reader.Peek() == '*')\n\t\t\t\t\t\t{\t// beginning of a comment of form /* a comment */\n\t\t\t\t\t\t\treader.GetNext();\t// go past the '*'\n\t\t\t\t\t\t\tReadComment();\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\treturn new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.FORWARDSLASH);\n\t\t\t\t\tcase '<':\n\t\t\t\t\t\tif (reader.Peek() == '=')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treader.GetNext();\t// go past the equal\n\t\t\t\t\t\t\treturn new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.LESSTHANOREQUAL);\n\t\t\t\t\t\t}\n                        else if (reader.Peek() == '>')\n                        {\n                            reader.GetNext();\t// go past the >\n                            return new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.NOTEQUAL);\n                        }\n                        else\n\t\t\t\t\t\t\treturn new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.LESSTHAN);\n\t\t\t\t\tcase '*':\n\t\t\t\t\t\treturn new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.STAR);\n\t\t\t\t\tcase '\"':\n\t\t\t\t\tcase '\\'':\n\t\t\t\t\t\treturn ReadQuoted(ch);\n                    case '{':\n                        return ReadIdentifier(ch, 4); \n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t} // end of swith\n\t\t\t\tif (Char.IsDigit(ch))\n\t\t\t\t\treturn ReadNumber(ch);\n                else if (ch == '.')\n                {\n                    char tc = reader.Peek();\n                    if (Char.IsDigit(tc))\n                        return ReadNumber(ch);\n                    return new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.DOT);\n                }\n\t\t\t\telse if (Char.IsLetter(ch) || ch == '_')\n\t\t\t\t\treturn ReadIdentifier(ch);\n\t\t\t\telse\n\t\t\t\t\treturn new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.OTHER);\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\t// Reads a decimal number with optional exponentiation \n\t\tprivate Token ReadNumber(char ch)\n\t\t{\n\t\t\tconst char separator = '.'; // maybe CurrentCulture.NumberFormat.NumberDecimalSeparator ??? TODO\n\t\t\tint startLine = reader.Line;\n\t\t\tint startCol = reader.Column;\n\t\t\tbool bDecimal = ch == separator ? true : false;\n\t\t\tbool bDecimalType=false;\t// found d or D in number\n\t\t\tbool bFloat=false;\t\t\t// found e or E in number\n\t\t\tchar cPeek;\n\n\t\t\tstring number = ch.ToString();\n\t\t\twhile(!reader.EndOfInput() )\n\t\t\t{\n\t\t\t\tcPeek = reader.Peek();\n\t\t\t\tif (Char.IsWhiteSpace(cPeek))\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (Char.IsDigit(cPeek))\n\t\t\t\t\tnumber += reader.GetNext();\n\t\t\t\telse if ((cPeek == 'd' || cPeek == 'D') && !bFloat)\n\t\t\t\t{\n\t\t\t\t\treader.GetNext();\t\t\t\t// skip the 'd'\n\t\t\t\t\tbDecimalType = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse if ((cPeek == 'e' || cPeek == 'E') && !bFloat)\n\t\t\t\t{\n\t\t\t\t\tnumber += reader.GetNext();\t\t// add the 'e'\n\t\t\t\t\tcPeek = reader.Peek();\n\t\t\t\t\tif (cPeek == '-' || cPeek == '+')   // +/- after e is optional assumes +\n\t\t\t\t\t\tnumber += reader.GetNext();\n\t\t\t\t\tbFloat = true;\n\n                    if (Char.IsDigit(reader.Peek()))\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\n                    throw new ParserException(Strings.Lexer_ErrorP_InvalidNumberConstant);\n\t\t\t\t}\n\t\t\t\telse if (!bDecimal && !bFloat && cPeek == separator)\t// can't already be decimal or float\n\t\t\t\t{\n\t\t\t\t\tbDecimal = true;\n\t\t\t\t\tnumber += reader.GetNext();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tbreak;\t// another character\n\t\t\t}\n\n\t\t\tif (number.CompareTo(separator.ToString()) == 0)\n\t\t\t\tthrow new ParserException(string.Format(Strings.Lexer_Error_SeparatorMustFollowedNumber, separator));\n\n\t\t\tTokenTypes t;\n\t\t\tif (bDecimalType)\n\t\t\t\tt = TokenTypes.NUMBER;\n\t\t\telse if (bFloat || bDecimal)\n\t\t\t\tt = TokenTypes.DOUBLE;\n\t\t\telse\n\t\t\t\tt = TokenTypes.INTEGER;\n\n\t\t\treturn new Token(number, startLine, startCol, reader.Line, reader.Column, t);\n\t\t}\n\n\n        // Reads an identifier:\n        // Must consist of letters, digits, \"_\". \"!\", \".\" are allowed\n        // but have special meaning that is disambiguated later\n        private Token ReadIdentifier(char ch)\n        {\n            return ReadIdentifier(ch, 1);\n        }\n\n        // Reads an identifier:\n        // Must consist of letters, digits, \"_\". \"!\", \".\" are allowed\n        // but have special meaning that is disambiguated later\n        // Josh: 6:21:10 overloaded to allow for setting initial state.\n        private Token ReadIdentifier(char ch, int initialState) \n\t\t{\n\t\t\tint startLine = reader.Line;\n\t\t\tint startCol = reader.Column;\n\t\t\tchar cPeek;\n\n\t\t\tStringBuilder identifier = new StringBuilder(30);\t// initial capacity 30 characters\n\t\t\tidentifier.Append(ch.ToString());\n\n            int state = initialState;      // state=1 means accept letter,digit,'.','!','_'\n                                // state=2 means accept whitespace ends with '.' or '!'\n                                // state=3 means accept letter to start new qualifier\n            while (!reader.EndOfInput())\n\t\t\t{\n\t\t\t\tcPeek = reader.Peek();\n                if (state == 1)\n                {\n                    if (Char.IsLetterOrDigit(cPeek) || cPeek == '.' ||\n                        cPeek == '!' || cPeek == '_')\n                        identifier.Append(reader.GetNext());\n                    else if (Char.IsWhiteSpace(cPeek))\n                    {\n                        reader.GetNext();   // skip space\n                        if (identifier[identifier.Length - 1] == '.' ||\n                            identifier[identifier.Length - 1] == '!')\n                            state = 3;  // need to have an identfier next\n                        else\n                            state = 2;  // need to get '.' or '!' next\n                    }\n                    else\n                        break;\n                }\n                else if (state == 2)\n                {   // state must equal 2\n                    if (cPeek == '.' || cPeek == '!')\n                    {\n                        state = 3;\n                        identifier.Append(reader.GetNext());\n                    }\n                    else if (Char.IsWhiteSpace(cPeek))\n                        reader.GetNext();\n                    else \n                        break;\n                }\n                else if (state == 3)\n                {   // state must equal 3\n                    if (Char.IsLetter(cPeek) || cPeek == '_')\n                    {\n                        state = 1;\n                        identifier.Append(reader.GetNext());\n                    }\n                    else if (Char.IsWhiteSpace(cPeek))\n                    {\n                        reader.GetNext();\n                    }\n                    else\n                        break;\n                }\n                else if (state == 4)\n                { // state must equal 4 Josh: 6:21:10 added state 4 for field/param shortcuts\n\t\t\t\t\tif (Char.IsLetterOrDigit(cPeek) || cPeek == '@' ||\n\t\t\t\t\tcPeek == '?' || cPeek == '_' || cPeek == '}' ||\n\t\t\t\t\tcPeek == '!')\n\t\t\t\t\t{\n\t\t\t\t\t\tidentifier.Append(reader.GetNext());\n\n\t\t\t\t\t\tif (cPeek == '}')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (Char.IsWhiteSpace(cPeek))\n\t\t\t\t\t{\n\t\t\t\t\t\treader.GetNext(); // skip space\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tbreak;\n                } \n\t\t\t}\n\n\t\t\tstring key = identifier.ToString().ToLower();\n\t\t\tif (key == \"and\" || key == \"andalso\")   // technically 'and' and 'andalso' mean different things; but we treat the same\n\t\t\t\treturn new Token(identifier.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.AND);\n\t\t\telse if (key == \"or\" || key == \"orelse\")    // technically 'or' and 'orelse' mean different things; but we treat the same\n\t\t\t\treturn new Token(identifier.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.OR);\n            else if (key == \"not\")\n                return new Token(identifier.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.NOT);\n\t\t\telse if (key == \"mod\")\n                return new Token(identifier.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.MODULUS);\n\n            //Shortcut identifier\n            if (state == 4)\n            {\n                if (identifier[identifier.Length - 1] != '}')\n                    throw new ParserException(Strings.Parser_ErrorP_CurlyBracketExpected);\n\n                identifier = new StringBuilder(ParseShortcut(identifier.ToString()));\n            } \n\n\t\t\t// normal identifier\n\t\t\treturn new Token(identifier.ToString(), startLine, startCol, reader.Line, reader.Column, TokenTypes.IDENTIFIER);\n\t\t}\n\n\t\t// Quoted string like \" asdf \" or ' asdf '\n\t\tprivate Token ReadQuoted(char ch)\n\t\t{\n\t\t\tchar qChar = ch;\n\t\t\tint startLine = reader.Line;\n\t\t\tint startCol = reader.Column;\n\t\t\tStringBuilder quoted = new StringBuilder();\n\n\t\t\twhile(!reader.EndOfInput())\n\t\t\t{\n\t\t\t\tch = reader.GetNext();\n\t\t\t\tif (ch == '\\\\')\n                {\n                    char pChar = reader.Peek();\n                    if (pChar == qChar)\n                        ch = reader.GetNext();\t\t\t// got one skip escape char\n                    else if (pChar == 'n')\n                    {\n                        ch = '\\n';\n                        reader.GetNext();               // skip the character\n                    }\n                    else if (pChar == 'r')\n                    {\n                        ch = '\\r';\n                        reader.GetNext();               // skip the character\n                    }\n\t\t\t\t\telse if (pChar == '\\\\')\n\t\t\t\t\t{\n\t\t\t\t\t\tch = '\\\\';\n\t\t\t\t\t\treader.GetNext();\n\t\t\t\t\t}\n                }\n                else if (ch == qChar)\n                {\n                    if (reader.Peek() == ch)            // did user double the quote?\n                        ch = reader.GetNext();          //  yes, we just append one character\n                    else\n                        return new Token(quoted.ToString(), startLine, startCol, reader.Line, reader.Column, TokenTypes.QUOTE);\n                }\n    \t\t\tquoted.Append(ch);\n\t\t\t}\n\t\t\tthrow new ParserException(Strings.Lexer_ErrorP_UnterminatedString);\n\t\t}\n\n\t\t// Comment string like /* this is a comment */\n\t\tprivate void ReadComment()\n\t\t{\n\t\t\tchar ch;\n\n\t\t\twhile(!reader.EndOfInput())\n\t\t\t{\n\t\t\t\tch = reader.GetNext();\n\t\t\t\tif (ch == '*' && reader.Peek() == '/')\n\t\t\t\t{\n\t\t\t\t\treader.GetNext();\t\t\t// skip past the '/'\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new ParserException(Strings.Lexer_Error_UnterminatedComment);\n\t\t}\n\n        // fields, parameters, and globals\n        // Shortcuts for fields, parameters, globals\n        private string ParseShortcut(string identifier)\n        {\n\n            if (identifier.StartsWith(\"{?\"))\n            {\n                identifier = identifier.Replace(\"{?\", \"Parameters!\");\n                identifier = identifier.Replace(\"}\", \".Value\");\n            }\n            else if (identifier.StartsWith(\"{@\"))\n            {\n                identifier = identifier.Replace(\"{@\", \"Globals!\");\n                identifier = identifier.Replace(\"}\", \"\");\n            }\n            else if (identifier.StartsWith(\"{!\"))\n            {\n                identifier = identifier.Replace(\"{!\", \"User!\");\n                identifier = identifier.Replace(\"}\", \"\");\n            }\n            else if (identifier.StartsWith(\"{\"))\n            {\n                identifier = identifier.Replace(\"{\", \"Fields!\");\n                identifier = identifier.Replace(\"}\", \".Value\");\n            }\n\n            return identifier;\n        }\n\n\n//\t\t// Handles case of \"<\", \"<=\", and \"<! ... xml string  !>\n//\t\tprivate Token ReadXML(char ch)\n//\t\t{\n//\t\t\tint startLine = reader.Line;\n//\t\t\tint startCol = reader.Column;\n//\n//\t\t\tif (reader.EndOfInput())\n//\t\t\t\treturn  new Token(ch.ToString(), startLine, startCol, startLine, startCol, TokenTypes.LESSTHAN);\n//\t\t\tch = reader.GetNext();\n//\t\t\tif (ch == '=')\n//\t\t\t\treturn  new Token(\"<=\", startLine, startCol, reader.Line, reader.Column, TokenTypes.LESSTHANOREQUAL);\n//\t\t\tif (ch != '!')\t\t\t\t\t// If it's not '!' then it's not XML\n//\t\t\t{\n//\t\t\t\treader.UnGet();\t\t\t\t// put back the character\n//\t\t\t\treturn  new Token(\"<\", startLine, startCol, reader.Line, reader.Column, TokenTypes.LESSTHAN);\n//\t\t\t}\n//\n//\t\t\tstring xml = \"\";\t\t\t\t// intialize our string\n//\n//\t\t\twhile(!reader.EndOfInput())\n//\t\t\t{\n//\t\t\t\tch = reader.GetNext();\n//\n//\t\t\t\tif(ch == '!')\t\t\t\t// check for end of XML denoted by \"!>\"\n//\t\t\t\t{\n//\t\t\t\t\tif (!reader.EndOfInput() && reader.Peek() == '>')\n//\t\t\t\t\t{\n//\t\t\t\t\t\treader.GetNext();\t// pull the '>' off the input\n//\t\t\t\t\t\treturn new Token(xml, startLine, startCol, reader.Line, reader.Column, TokenTypes.XML);\n//\t\t\t\t\t}\n//\t\t\t\t}\n//\n//\t\t\t\txml += ch.ToString();\n//\t\t\t}\n//\t\t\tthrow new ParserException(\"Unterminated XML clause!\");\n//\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/ExprParser/Parser.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Globalization;\nusing System.Xml;\nusing System.Reflection;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing Majorsilence.Reporting.Rdl;\nusing System.Threading.Tasks;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// <p>Language parser.   Recursive descent parser.  Precedence of operators\n\t/// is handled by starting with lowest precedence and calling down recursively\n\t/// to the highest.</p>\n\t/// AND/OR\n\t/// NOT\n\t/// relational operators, eq, ne, lt, lte, gt, gte\n\t/// +, -\n\t/// *, /, %\n\t/// ^ (exponentiation)\n\t/// unary +, -\n\t/// parenthesis (...)\n\t/// <p>\n\t/// In BNF the language grammar is:</p>\n\t///\t<code>\n\t/// Expr: Term ExprRhs\n\t/// ExprRhs: PlusMinusOperator Term ExprRhs\n\t/// Term: Factor TermRhs\n\t/// TermRhs: MultDivOperator Factor TermRhs\n\t/// Factor: ( Expr ) | BaseType | - BaseType | - ( Expr )\n\t/// BaseType: FuncIdent | NUMBER | QUOTE   \n\t/// FuncIDent: IDENTIFIER ( [Expr] [, Expr]*) | IDENTIFIER\n\t/// PlusMinusOperator: + | -\n\t/// MultDivOperator: * | /\n\t///\t</code>\n\t///\t\n\t/// </summary>\n\tinternal class Parser\n\t{\n\t\tstatic internal long Counter;\t\t\t// counter used for unique expression count\n\t\tprivate TokenList tokens;\n\t\tprivate Stack operandStack = new Stack();\n\t\tprivate Stack operatorStack = new Stack();\n\t\tprivate Token curToken=null;\n\t\tprivate NameLookup idLookup=null;\n        private List<ICacheData> _DataCache;\n\t\tprivate bool _InAggregate;\n\t\tprivate DataSetDefn inAggregateDataSet = null;\n\t\tprivate bool _NoAggregate=false;\n\n\t\t/// <summary>\n\t\t/// Parse an expression.\n\t\t/// </summary>\n        internal Parser(List<ICacheData> c) \n\t\t{\n\t\t\t_DataCache = c;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a parsed Expression\n\t\t/// </summary>\n\t\t/// <param name=\"lu\">The NameLookUp class used to resolve names.</param>\n\t\t/// <param name=\"expr\">The expression to be parsed.</param>\n\t\t/// <returns>An expression that can be run after validation and binding.</returns>\n\t\tinternal async Task<IExpr> Parse(NameLookup lu, string expr)\n\t\t{\n\t\t\t_InAggregate = false;\n\n\t\t\tif (expr.Substring(0,1) != \"=\")\t\t// if 1st char not '='\n\t\t\t\treturn new Constant(expr);\t\t//   this is a constant value\n\n\t\t\tidLookup = lu;\t\n\t\t\tIExpr e = await this.ParseExpr(new StringReader(expr));\n\t\t\t\n\t\t\tif (e == null)\t\t\t\t\t// Didn't get an expression?\n\t\t\t\te = new Constant(expr);\t\t//  then provide a constant\n\n\t\t\treturn e;\n\t\t}\n\n\t\tinternal bool NoAggregateFunctions\n\t\t{\t// marked true when in an aggregate function \n\t\t\tget {return _NoAggregate;}\n\t\t\tset {_NoAggregate = value;}\n\t\t}\n\n\t\tprivate static string GetLocationInfo(Token token)\n\t\t{\n\t\t\treturn string.Format(Strings.Parser_ErrorP_AtColumn, token.StartCol);\n\t\t}\n\n\t\tprivate static string GetLocationInfoWithValue(Token token)\n\t\t{\n\t\t\treturn string.Format(Strings.Parser_ErrorP_FoundValue, token.Value) + GetLocationInfo(token);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a parsed DPL instance.\n\t\t/// </summary>\n\t\t/// <param name=\"reader\">The TextReader value to be parsed.</param>\n\t\t/// <returns>A parsed Program instance.</returns>\n\t\tprivate async Task<IExpr> ParseExpr(TextReader reader)\n\t\t{\n\t\t\tIExpr result=null;\n\t\t\tLexer lexer = new Lexer(reader);\n\t\t\ttokens = lexer.Lex();\n\n\t\t\tif (tokens.Peek().Type == TokenTypes.EQUAL)\n\t\t\t{\n\t\t\t\ttokens.Extract();\t\t// skip over the equal\n\t\t\t\tcurToken = tokens.Extract();\t// set up the first token\n\t\t\t\tresult = await MatchExprAndOr();\t// start with lowest precedence and work up\n\t\t\t}\n\n\t\t\tif (curToken.Type != TokenTypes.EOF)\n\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_EndExpressionExpected + GetLocationInfo(curToken));\n\n\t\t\treturn result;\n\t\t}\n\n\t\t// ExprAndOr: \n\t\tprivate async Task<IExpr> MatchExprAndOr()\n\t\t{\n\t\t\tTokenTypes t;\t\t\t// remember the type\n\n\t\t\tIExpr lhs;\n\t\t\tlhs = await MatchExprNot();\n\t\t\tIExpr result = lhs;\t\t\t// in case we get no matches\n\t\t\twhile ((t = curToken.Type) == TokenTypes.AND || t == TokenTypes.OR)\n\t\t\t{\n\t\t\t\tcurToken = tokens.Extract();\n\t\t\t\tIExpr rhs;\n\t\t\t\trhs = await MatchExprNot();\n\t\t\t\tbool bBool = (rhs.GetTypeCode() == TypeCode.Boolean &&\n\t\t\t\t\tlhs.GetTypeCode() == TypeCode.Boolean);\n\t\t\t\tif (!bBool)\n\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_AND_OR_RequiresBoolean + GetLocationInfo(curToken));\n\n\t\t\t\tswitch(t)\n\t\t\t\t{\n\t\t\t\t\tcase TokenTypes.AND:\n\t\t\t\t\t\tresult = new FunctionAnd(lhs, rhs);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase TokenTypes.OR:\n\t\t\t\t\t\tresult = new FunctionOr(lhs, rhs);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlhs = result;\t\t// in case we have more AND/OR s\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\tprivate async Task<IExpr> MatchExprNot()\n\t\t{\n\t\t\tTokenTypes t;\t\t\t// remember the type\n\t\t\tt = curToken.Type;\n\t\t\tif (t == TokenTypes.NOT)\n\t\t\t{\n\t\t\t\tcurToken = tokens.Extract();\n\t\t\t}\n\t\t\tIExpr result = await MatchExprRelop();\n\t\t\tif (t == TokenTypes.NOT)\n\t\t\t{\n\t\t\t\tif (result.GetTypeCode() != TypeCode.Boolean)\n\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_NOTRequiresBoolean + GetLocationInfo(curToken));\n\t\t\t\tresult = new FunctionNot(result);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\t// ExprRelop: \n\t\tprivate async Task<IExpr> MatchExprRelop()\n\t\t{\n\t\t\tTokenTypes t;           // remember the type\n\t\t\tIExpr result = null;\n\t\t\tIExpr lhs;\n\t\t\tlhs = await MatchExprAddSub();\n\t\t\tresult = lhs;\t\t\t// in case we get no matches\n\t\t\twhile ((t = curToken.Type) == TokenTypes.EQUAL ||\n\t\t\t\tt == TokenTypes.NOTEQUAL ||\n\t\t\t\tt == TokenTypes.GREATERTHAN ||\n\t\t\t\tt == TokenTypes.GREATERTHANOREQUAL ||\n\t\t\t\tt == TokenTypes.LESSTHAN ||\n\t\t\t\tt == TokenTypes.LESSTHANOREQUAL)\n\t\t\t{\n\t\t\t\tcurToken = tokens.Extract();\n\t\t\t\tIExpr rhs;\n\t\t\t\trhs = await MatchExprAddSub();\n\n\t\t\t\tswitch(t)\n\t\t\t\t{\n\t\t\t\t\tcase TokenTypes.EQUAL:\n\t\t\t\t\t\tresult = new FunctionRelopEQ(lhs, rhs);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase TokenTypes.NOTEQUAL:\n\t\t\t\t\t\tresult = new FunctionRelopNE(lhs, rhs);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase TokenTypes.GREATERTHAN:\n\t\t\t\t\t\tresult = new FunctionRelopGT(lhs, rhs);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase TokenTypes.GREATERTHANOREQUAL:\n\t\t\t\t\t\tresult = new FunctionRelopGTE(lhs, rhs);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase TokenTypes.LESSTHAN:\n\t\t\t\t\t\tresult = new FunctionRelopLT(lhs, rhs);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase TokenTypes.LESSTHANOREQUAL:\n\t\t\t\t\t\tresult = new FunctionRelopLTE(lhs, rhs);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlhs = result;\t\t// in case we continue the loop\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\t// ExprAddSub: PlusMinusOperator Term ExprRhs\n\t\tprivate async Task<IExpr> MatchExprAddSub()\n\t\t{\n\t\t\tTokenTypes t;           // remember the type\n\t\t\tIExpr result=null;\n\t\t\tIExpr lhs;\n\t\t\tlhs = await MatchExprMultDiv();\n\t\t\tresult = lhs;\t\t\t// in case we get no matches\n\t\t\twhile ((t = curToken.Type) == TokenTypes.PLUS || t == TokenTypes.PLUSSTRING || t == TokenTypes.MINUS)\n\t\t\t{\n\t\t\t\tcurToken = tokens.Extract();\n\t\t\t\tIExpr rhs;\n\t\t\t\trhs = await MatchExprMultDiv();\n\t\t\t\tTypeCode lt = lhs.GetTypeCode();\n\t\t\t\tTypeCode rt = rhs.GetTypeCode();\n\t\t\t\tbool bDecimal = (rt == TypeCode.Decimal &&\n\t\t\t\t\tlt == TypeCode.Decimal);\n                bool bInt32 = (rt == TypeCode.Int32 &&\n                    lt == TypeCode.Int32);\n\t\t\t\tbool bString = (rt == TypeCode.String ||\n\t\t\t\t\tlt == TypeCode.String);\n\n\t\t\t\tswitch(t)\n\t\t\t\t{\n\t\t\t\t\tcase TokenTypes.PLUSSTRING:\n\t\t\t\t\t\tresult = new FunctionPlusString(lhs, rhs);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase TokenTypes.PLUS:\n                        if (bDecimal)\n                            result = new FunctionPlusDecimal(lhs, rhs);\n                        else if (bString)\n                            result = new FunctionPlusString(lhs, rhs);\n                        else if (bInt32)\n                            result = new FunctionPlusInt32(lhs, rhs);\n                        else\n                            result = new FunctionPlus(lhs, rhs);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase TokenTypes.MINUS:\n\t\t\t\t\t\tif (bDecimal)\n\t\t\t\t\t\t\tresult = new FunctionMinusDecimal(lhs, rhs);\n\t\t\t\t\t\telse if (bString)\n\t\t\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_MinusNeedNumbers + GetLocationInfo(curToken));\n                        else if (bInt32)\n                            result = new FunctionMinusInt32(lhs, rhs);\n                        else\n\t\t\t\t\t\t\tresult = new FunctionMinus(lhs, rhs);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlhs = result;\t\t// in case continue in the loop\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\t// TermRhs: MultDivOperator Factor TermRhs\n\t\tprivate async Task<IExpr> MatchExprMultDiv()\n\t\t{\n\t\t\tIExpr result = null;\n\t\t\tTokenTypes t;\t\t\t// remember the type\n\t\t\tIExpr lhs;\n\t\t\tlhs = await MatchExprExp();\n\t\t\tresult = lhs;\t\t\t// in case we get no matches\n\t\t\twhile ((t = curToken.Type) == TokenTypes.FORWARDSLASH ||\n\t\t\t\tt == TokenTypes.STAR ||\n\t\t\t\tt == TokenTypes.MODULUS)\n\t\t\t{\n\t\t\t\tcurToken = tokens.Extract();\n\t\t\t\tIExpr rhs;\n\t\t\t\trhs = await MatchExprExp();\n\t\t\t\tbool bDecimal = (rhs.GetTypeCode() == TypeCode.Decimal &&\n\t\t\t\t\tlhs.GetTypeCode() == TypeCode.Decimal);\n\t\t\t\tswitch (t)\n\t\t\t\t{\n\t\t\t\t\tcase TokenTypes.FORWARDSLASH:\n\t\t\t\t\t\tif (bDecimal)\n\t\t\t\t\t\t\tresult = new FunctionDivDecimal(lhs, rhs);\t\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tresult = new FunctionDiv(lhs, rhs);\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase TokenTypes.STAR:\n\t\t\t\t\t\tif (bDecimal)\n\t\t\t\t\t\t\tresult = new FunctionMultDecimal(lhs, rhs);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tresult = new FunctionMult(lhs, rhs);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase TokenTypes.MODULUS:\n\t\t\t\t\t\tresult = new FunctionModulus(lhs, rhs);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlhs = result;\t\t// in case continue in the loop\n\t\t\t}\n\n\t\t\treturn result;\n        }\n\n\t\t// TermRhs: ExpOperator Factor TermRhs\n\t\tprivate async Task<IExpr> MatchExprExp()\n\t\t{\n            IExpr result = null;\n            IExpr lhs;\n\t\t\tlhs = await MatchExprUnary();\n\t\t\tif (curToken.Type == TokenTypes.EXP)\n\t\t\t{\n\t\t\t\tcurToken = tokens.Extract();\n\t\t\t\tIExpr rhs;\n\t\t\t\trhs = await MatchExprUnary();\n\t\t\t\tresult = new FunctionExp(lhs, rhs);\t\n\t\t\t}\n\t\t\telse\n\t\t\t\tresult = lhs;\n\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\tprivate async Task<IExpr> MatchExprUnary()\n\t\t{\n\t\t\tIExpr result = null;\n\t\t\tTokenTypes t;\t\t\t// remember the type\n\t\t\tt = curToken.Type;\n\t\t\tif (t == TokenTypes.PLUS || t == TokenTypes.MINUS)\n\t\t\t{\n\t\t\t\tcurToken = tokens.Extract();\n\t\t\t}\n            result = await MatchExprParen();\n\t\t\tif (t == TokenTypes.MINUS)\n\t\t\t{\n\t\t\t\tif (result.GetTypeCode() == TypeCode.Decimal)\n\t\t\t\t\tresult = new FunctionUnaryMinusDecimal(result);\n\t\t\t\telse if (result.GetTypeCode() == TypeCode.Int32)\n\t\t\t\t\tresult = new FunctionUnaryMinusInteger(result);\n\t\t\t\telse\n\t\t\t\t\tresult = new FunctionUnaryMinus(result);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\t// Factor: ( Expr ) | BaseType | - BaseType | - ( Expr )\n\t\tprivate async Task<IExpr> MatchExprParen()\n\t\t{\n\t\t\tIExpr result = null;\n            // Match- ( Expr )\n            if (curToken.Type == TokenTypes.LPAREN)\n\t\t\t{\t// trying to match ( Expr )\n\t\t\t\tcurToken = tokens.Extract();\n\t\t\t\tresult = await MatchExprAndOr();\n\t\t\t\tif (curToken.Type != TokenTypes.RPAREN)\n\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_BracketExpected + GetLocationInfoWithValue(curToken));\n\t\t\t\tcurToken = tokens.Extract();\n\t\t\t}\n\t\t\telse\n\t\t\t\tresult = await MatchBaseType();\n\n\t\t\treturn result;\n\t\t}\n\n\t\t// BaseType: FuncIdent | NUMBER | QUOTE   - note certain types are restricted in expressions\n\t\tprivate async Task<IExpr> MatchBaseType()\n\t\t{\n\t\t\tvar r = await MatchFuncIDent();\n\n            if (r.match)\n\t\t\t\treturn r.result;\n\n\t\t\tswitch (curToken.Type)\n\t\t\t{\n\t\t\t\tcase TokenTypes.NUMBER:\n\t\t\t\t\tr.result = new ConstantDecimal(curToken.Value);\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenTypes.DATETIME:\n\t\t\t\t\tr.result = new ConstantDateTime(curToken.Value);\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenTypes.DOUBLE:\n\t\t\t\t\tr.result = new ConstantDouble(curToken.Value);\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenTypes.INTEGER:\n\t\t\t\t\tr.result = new ConstantInteger(curToken.Value);\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenTypes.QUOTE:\n\t\t\t\t\tr.result = new ConstantString(curToken.Value);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_IdentifierExpected + GetLocationInfoWithValue(curToken));\n\t\t\t}\n\t\t\tcurToken = tokens.Extract();\n\n\t\t\treturn r.result;\n\t\t}\n\n\t\t// FuncIDent: IDENTIFIER ( [Expr] [, Expr]*) | IDENTIFIER\n\t\tprivate async Task<(bool match, IExpr result)> MatchFuncIDent()\n\t\t{\n\t\t\tIExpr e;\n\t\t\tstring fullname;\t\t\t// will hold the full name\n\t\t\tstring method;\t\t\t\t// will hold method name or second part of name\n\t\t\tstring firstPart;\t\t\t// will hold the collection name\n\t\t\tstring thirdPart;\t\t\t// will hold third part of name\n\t\t\tbool bOnePart;\t\t\t\t// simple name: no ! or . in name\n\n\t\t\tIExpr result = null;\n\n\t\t\tif (curToken.Type != TokenTypes.IDENTIFIER)\n\t\t\t\treturn (false, result);\n\n\t\t\t// Disentangle method calls from collection references\n\t\t\tmethod = fullname = curToken.Value;\n\t\t\tcurToken = tokens.Extract();\n\n\t\t\t// Break the name into parts\n\t\t\tchar[] breakChars = new char[] {'!', '.'};\n\n\t\t\tint posBreak = method.IndexOfAny(breakChars);\n\t\t\tif (posBreak > 0)\n\t\t\t{\n\t\t\t\tbOnePart = false;\n\t\t\t\tfirstPart = method.Substring(0, posBreak);\n\t\t\t\tmethod = method.Substring(posBreak+1);\t\t// rest of expression\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tbOnePart = true;\n\t\t\t\tfirstPart = method;\n\t\t\t}\n\n\t\t\tposBreak = method.IndexOf('.');\n            if (posBreak > 0)\n            {\n                thirdPart = method.Substring(posBreak + 1);\t// rest of expression\n                method = method.Substring(0, posBreak);\n            }\n            else\n            {\n                thirdPart = null;\n            }\n\n\t\t\tif (curToken.Type != TokenTypes.LPAREN) switch (firstPart.ToLowerInvariant())\n\t\t\t{\n\t\t\t\tcase \"fields\":\n\t\t\t\t\tField f = null;\n\n\t\t\t\t\tif (inAggregateDataSet != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tf = inAggregateDataSet.Fields == null ? null : inAggregateDataSet.Fields[method];\n\t\t\t\t\t\tif (f == null)\n\t\t\t\t\t\t\tthrow new ParserException(string.Format(Strings.Parser_ErrorP_FieldNotInDataSet, method, inAggregateDataSet.Name.Nm));\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tf = idLookup.LookupField(method);\n\t\t\t\t\t\tif (f == null)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthrow new ParserException(string.Format(Strings.Parser_ErrorP_FieldNotFound, method));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (thirdPart == null || thirdPart == \"Value\")\n\t\t\t\t\t{\n\t\t\t\t\t\tresult = new FunctionField(f);\t\n\t\t\t\t\t}\n\t\t\t\t\telse if (thirdPart == \"IsMissing\")\n\t\t\t\t\t{\n\t\t\t\t\t\tresult = new FunctionFieldIsMissing(f);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tthrow new ParserException(string.Format(Strings.Parser_ErrorP_FieldSupportsValueAndIsMissing, method));\n\t\t\t\t\treturn (true, result);\n                case \"parameters\":  // see ResolveParametersMethod for resolution of MultiValue parameter function reference\n\t\t\t\t\tReportParameter p = idLookup.LookupParameter(method);\n\t\t\t\t\tif (p == null)\n\t\t\t\t\t\tthrow new ParserException(string.Format(Strings.Parser_ErrorP_ParameterNotFound, method));\n                    int ci = thirdPart == null? -1: thirdPart.IndexOf(\".Count\");\n                    if (ci > 0)\n                        thirdPart = thirdPart.Substring(0, ci);\n                    FunctionReportParameter r;                    \n\t\t\t\t\tif (thirdPart == null || thirdPart == \"Value\")\n\t\t\t\t\t\tr = new FunctionReportParameter(p);\n\t\t\t\t\telse if (thirdPart == \"Label\")\n\t\t\t\t\t\tr = new FunctionReportParameterLabel(p);\n\t\t\t\t\telse\n\t\t\t\t\t\tthrow new ParserException(string.Format(Strings.Parser_ErrorP_ParameterSupportsValueAndLabel, method));\n                    if (ci > 0)\n                        r.SetParameterMethod(\"Count\", null);\n                    \n                    result = r;\n                    return (true, result);\n\t\t\t\tcase \"reportitems\":\n\t\t\t\t\tTextbox t = idLookup.LookupReportItem(method);\n\t\t\t\t\tif (t == null)\n\t\t\t\t\t\tthrow new ParserException(string.Format(Strings.Parser_ErrorP_ItemNotFound, method));\n\t\t\t\t\tif (thirdPart != null && thirdPart != \"Value\")\n\t\t\t\t\t\tthrow new ParserException(string.Format(Strings.Parser_ErrorP_ItemSupportsValue, method));\n\t\t\t\t\tresult = new FunctionTextbox(t, idLookup.ExpressionName);\t\n\t\t\t\t\treturn (true, result);\n\t\t\t\tcase \"globals\":\n\t\t\t\t\te = idLookup.LookupGlobal(method);\n\t\t\t\t\tif (e == null)\n\t\t\t\t\t\tthrow new ParserException(string.Format(Strings.Parser_ErrorP_GlobalsNotFound, method));\n\t\t\t\t\tresult = e;\n\t\t\t\t\treturn (true, result);\n\t\t\t\tcase \"user\":\n\t\t\t\t\te = idLookup.LookupUser(method);\n\t\t\t\t\tif (e == null)\n\t\t\t\t\t\tthrow new ParserException(string.Format(Strings.Parser_ErrorP_UserVarNotFound, method));\n\t\t\t\t\tresult = e;\n\t\t\t\t\treturn (true, result);\n\t\t\t\tcase \"recursive\":\t// Only valid for some aggregate functions\n\t\t\t\t\tresult = new IdentifierKey(IdentifierKeyEnum.Recursive);\n\t\t\t\t\treturn (true, result);\n\t\t\t\tcase \"simple\":\t\t// Only valid for some aggregate functions\n\t\t\t\t\tresult = new IdentifierKey(IdentifierKeyEnum.Simple);\n\t\t\t\t\treturn (true, result);\n\t\t\t\tdefault:\n\t\t\t\t\tif (!bOnePart)\n\t\t\t\t\t\tthrow new ParserException(string.Format(Strings.Parser_ErrorP_UnknownIdentifer, fullname));\n\n\t\t\t\t\tswitch (method.ToLower())\t\t// lexer should probably mark these\n\t\t\t\t\t{\n\t\t\t\t\t\tcase \"true\":\n\t\t\t\t\t\tcase \"false\":\n\t\t\t\t\t\t\tresult = new ConstantBoolean(method.ToLower());\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// usually this is enum that will be used in an aggregate \n\t\t\t\t\t\t\tresult = new Identifier(method);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\treturn (true, result);\n\t\t\t}\n\n\t\t\t// We've got an function reference\n\t\t\tcurToken = tokens.Extract();\t\t// get rid of '('\n\n\t\t\t// Got a function now obtain the arguments\n\t\t\tint argCount=0;\n\t\t\t\n\t\t\tbool isAggregate = IsAggregate(method, bOnePart);\n\t\t\tif (_NoAggregate && isAggregate)\n\t\t\t\tthrow new ParserException(string.Format(Strings.Parser_ErrorP_AggregateCannotUsedWithinGrouping, method));\n\t\t\tif (_InAggregate && isAggregate)\n\t\t\t\tthrow new ParserException(string.Format(Strings.Parser_ErrorP_AggregateCannotNestedInAnotherAggregate, method));\n\t\t\t_InAggregate = isAggregate;\n\t\t\tif (_InAggregate)\n\t\t\t{\n\t\t\t\tint level = 0;\n\t\t\t\tbool nextScope = false;\n\t\t\t\tToken scopeToken = null;\n\t\t\t\tforeach(Token tok in tokens)\n\t\t\t\t{\n\t\t\t\t\tif(nextScope)\n\t\t\t\t\t{\n\t\t\t\t\t\tscopeToken = tok;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(level == 0 && tok.Type == TokenTypes.COMMA)\n\t\t\t\t\t{\n\t\t\t\t\t\tnextScope = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (tok.Type == TokenTypes.RPAREN)\n\t\t\t\t\t\tlevel--;\n\t\t\t\t\tif (tok.Type == TokenTypes.LPAREN)\n\t\t\t\t\t\tlevel++;\n\t\t\t\t}\n\n\t\t\t\tif (scopeToken != null)\n\t\t\t\t{\n\t\t\t\t\tif (scopeToken.Type != TokenTypes.QUOTE)\n\t\t\t\t\t\tthrow new ParserException(string.Format(Strings.Parser_ErrorP_ScopeMustConstant, scopeToken.Value));\n\t\t\t\t\tinAggregateDataSet = this.idLookup.ScopeDataSet(scopeToken.Value);\n\t\t\t\t\tif (inAggregateDataSet == null)\n\t\t\t\t\t\tthrow new ParserException(string.Format(Strings.Parser_ErrorP_ScopeNotKnownDataSet, scopeToken.Value));\n\t\t\t\t}\n\t\t\t}\n\n            List<IExpr> largs = new List<IExpr>();\n\t\t\twhile(true)\n\t\t\t{\n\t\t\t\tif (curToken.Type == TokenTypes.RPAREN)\n\t\t\t\t{\t// We've got our function\n\t\t\t\t\tcurToken = tokens.Extract();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (argCount == 0)\n\t\t\t\t{\n\t\t\t\t\t// don't need to do anything\n\t\t\t\t}\n\t\t\t\telse if (curToken.Type == TokenTypes.COMMA)\n\t\t\t\t{\n\t\t\t\t\tcurToken = tokens.Extract();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_Invalid_function_arguments + GetLocationInfoWithValue(curToken));\n\t\t\t\t\n\t\t\t\te = await MatchExprAndOr();\n\t\t\t\tif (e == null)\n\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_ExpectingComma + GetLocationInfoWithValue(curToken));\n\n\t\t\t\tlargs.Add(e);\n\t\t\t\targCount++;\n\t\t\t}\n\t\t\tif (_InAggregate)\n\t\t\t{\n\t\t\t\tinAggregateDataSet = null;\n\t\t\t\t_InAggregate = false;\n\t\t\t}\n\n            IExpr[] args = largs.ToArray();\n\n\t\t\tobject scope;\n\t\t\tbool bSimple;\n\t\t\tif (!bOnePart)\t\t\t\t\n            {\n                result = (string.Equals(firstPart, \"Parameters\", StringComparison.InvariantCultureIgnoreCase))?\n                    ResolveParametersMethod(method, thirdPart, args):\n                    ResolveMethodCall(fullname, args);\t// throw exception when fails\n            }\n\t\t\telse switch(method.ToLower())\n\t\t\t{\n\t\t\t\tcase \"iif\":\n\t\t\t\t\tif (args.Length != 3)\n\t\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_iff_function_requires_3_arguments + GetLocationInfo(curToken));\n//  We allow any type for the first argument; it will get converted to boolean at runtime\n//\t\t\t\t\tif (args[0].GetTypeCode() != TypeCode.Boolean)\n//\t\t\t\t\t\tthrow new ParserException(\"First argument to iif function must be boolean.\" + GetLocationInfo(curToken));\n\t\t\t\t\tresult = new FunctionIif(args[0], args[1], args[2]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"choose\":\n\t\t\t\t\tif (args.Length <= 2)\n\t\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_ChooseRequires2Arguments + GetLocationInfo(curToken));\n\t\t\t\t\tswitch (args[0].GetTypeCode())\n\t\t\t\t\t{\n\t\t\t\t\t\tcase TypeCode.Double:\n\t\t\t\t\t\tcase TypeCode.Single:\n\t\t\t\t\t\tcase TypeCode.Int32:\n\t\t\t\t\t\tcase TypeCode.Decimal:\n\t\t\t\t\t\tcase TypeCode.Int16:\n\t\t\t\t\t\tcase TypeCode.Int64:\n                        case TypeCode.UInt16:\n                        case TypeCode.UInt32:\n                        case TypeCode.UInt64:\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_ChooseFirstArgumentMustNumeric + GetLocationInfo(curToken));\n\t\t\t\t\t}\n\t\t\t\t\tresult = new FunctionChoose(args);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"switch\":\n\t\t\t\t\tif (args.Length <= 2)\n\t\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_SwitchRequires2Arguments + GetLocationInfo(curToken));\n\t\t\t\t    if (args.Length % 2 != 0)\n\t\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_SwitchMustEvenArguments + GetLocationInfo(curToken));\n\t\t\t\t\tfor (int i=0; i < args.Length; i = i+2)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (args[i].GetTypeCode() != TypeCode.Boolean)\n\t\t\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_SwitchMustBoolean + GetLocationInfo(curToken));\n\t\t\t\t\t}\n\t\t\t\t\tresult = new FunctionSwitch(args);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"format\":\n\t\t\t\t\tif (args.Length > 2 || args.Length < 1)\n\t\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_FormatRequires2Arguments + GetLocationInfo(curToken));\n\t\t\t\t\tif (args.Length == 1)\n\t\t\t\t\t{\n\t\t\t\t\t\tresult = new FunctionFormat(args[0], new ConstantString(\"\"));\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif (args[1].GetTypeCode() != TypeCode.String)\n\t\t\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_SecondMustString + GetLocationInfo(curToken));\n\t\t\t\t\t\tresult = new FunctionFormat(args[0], args[1]);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"fields\":\n\t\t\t\t\tif (args.Length != 1)\n\t\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_FieldsRequires1Argument + GetLocationInfo(curToken));\n\t\t\t\t\tresult = new FunctionFieldCollection(idLookup.Fields, args[0]);\n                    if (curToken.Type == TokenTypes.DOT)\n                    {\t// user placed \".\"                  TODO: generalize this code\n                        curToken = tokens.Extract();                // skip past dot operator\n                        if (curToken.Type == TokenTypes.IDENTIFIER && curToken.Value.ToLowerInvariant() == \"value\")\n                            curToken = tokens.Extract();            // only support \"value\" property for now\n                        else\n\t\t\t\t\t\t\tthrow new ParserException(string.Format(Strings.Parser_ErrorP_UnknownProperty, curToken.Value, \"Fields\") + GetLocationInfo(curToken));\n                    }\n                    break;\n\t\t\t\tcase \"parameters\":\n\t\t\t\t\tif (args.Length != 1)\n\t\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_ParametersRequires1Argument + GetLocationInfo(curToken));\n\t\t\t\t\tresult = new FunctionParameterCollection(idLookup.Parameters, args[0]);\n                    if (curToken.Type == TokenTypes.DOT)\n                    {\t// user placed \".\" \n                        curToken = tokens.Extract();                // skip past dot operator\n                        if (curToken.Type == TokenTypes.IDENTIFIER && curToken.Value.ToLowerInvariant() == \"value\")\n                            curToken = tokens.Extract();            // only support \"value\" property for now\n                        else\n                            throw new ParserException((string.Format(Strings.Parser_ErrorP_UnknownProperty, curToken.Value, \"Parameters\") + GetLocationInfo(curToken)));\n                    }\n                    break;\n\t\t\t\tcase \"reportitems\":\n\t\t\t\t\tif (args.Length != 1)\n\t\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_ReportItemsRequires1Argument + GetLocationInfo(curToken));\n\t\t\t\t\tresult = new FunctionReportItemCollection(idLookup.ReportItems, args[0]);\n                    if (curToken.Type == TokenTypes.DOT)\n                    {\t// user placed \".\" \n                        curToken = tokens.Extract();                // skip past dot operator\n                        if (curToken.Type == TokenTypes.IDENTIFIER && curToken.Value.ToLowerInvariant() == \"value\")\n                            curToken = tokens.Extract();            // only support \"value\" property for now\n                        else\n                            throw new ParserException((string.Format(Strings.Parser_ErrorP_UnknownProperty, curToken.Value, \"ReportItems\") + GetLocationInfo(curToken)));\n                    }\n                    break;\n\t\t\t\tcase \"globals\":\n\t\t\t\t\tif (args.Length != 1)\n\t\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_GlobalsRequires1Argument + GetLocationInfo(curToken));\n\t\t\t\t\tresult = new FunctionGlobalCollection(idLookup.Globals, args[0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"user\":\n\t\t\t\t\tif (args.Length != 1)\n\t\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_UserRequires1Argument + GetLocationInfo(curToken));\n\t\t\t\t\tresult = new FunctionUserCollection(idLookup.User, args[0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"sum\":\n\t\t\t\t\t(scope, bSimple) = await ResolveAggrScope(args, 2);\n\t\t\t\t\tFunctionAggrSum aggrFS = new FunctionAggrSum(_DataCache, args[0], scope);\n\t\t\t\t\taggrFS.LevelCheck = bSimple;\n\t\t\t\t\tresult = aggrFS;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"avg\":\n\t\t\t\t\t(scope, bSimple) = await ResolveAggrScope(args, 2);\n\t\t\t\t\tFunctionAggrAvg aggrFA = new FunctionAggrAvg(_DataCache, args[0], scope);\n\t\t\t\t\taggrFA.LevelCheck = bSimple;\n\t\t\t\t\tresult = aggrFA;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"min\":\n\t\t\t\t\t(scope, bSimple) = await ResolveAggrScope(args, 2);\n\t\t\t\t\tFunctionAggrMin aggrFMin = new FunctionAggrMin(_DataCache, args[0], scope);\n\t\t\t\t\taggrFMin.LevelCheck = bSimple;\n\t\t\t\t\tresult = aggrFMin;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"max\":\n\t\t\t\t\t(scope, bSimple) = await ResolveAggrScope(args, 2);\n\t\t\t\t\tFunctionAggrMax aggrFMax = new FunctionAggrMax(_DataCache, args[0], scope);\n\t\t\t\t\taggrFMax.LevelCheck = bSimple;\n\t\t\t\t\tresult = aggrFMax;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"first\":\n\t\t\t\t\t(scope, bSimple) = await ResolveAggrScope(args, 2);\n\t\t\t\t\tresult = new FunctionAggrFirst(_DataCache, args[0], scope);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"last\":\n\t\t\t\t\t(scope, bSimple) = await ResolveAggrScope(args, 2);\n\t\t\t\t\tresult = new FunctionAggrLast(_DataCache, args[0], scope);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"next\":\n\t\t\t\t\t(scope, bSimple) = await ResolveAggrScope(args, 2);\n\t\t\t\t\tresult = new FunctionAggrNext(_DataCache, args[0], scope);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"previous\":\n\t\t\t\t    (scope, bSimple) = await ResolveAggrScope(args, 2);\n\t\t\t\t\tresult = new FunctionAggrPrevious(_DataCache, args[0], scope);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"level\":\n\t\t\t\t\t(scope, bSimple) = await ResolveAggrScope(args, 1);\n\t\t\t\t\tresult = new FunctionAggrLevel(scope);\n\t\t\t\t\tbreak;\n                case \"aggregate\":\n                    (scope, bSimple) = await ResolveAggrScope(args, 2);\n                    FunctionAggrArray aggr = new FunctionAggrArray(_DataCache, args[0], scope);\n                    aggr.LevelCheck = bSimple;\n                    result = aggr;\n                    break;\n                case \"count\":\n\t\t\t\t\t(scope, bSimple) = await ResolveAggrScope(args, 2);\n\t\t\t\t\tFunctionAggrCount aggrFC = new FunctionAggrCount(_DataCache, args[0], scope);\n\t\t\t\t\taggrFC.LevelCheck = bSimple;\n\t\t\t\t\tresult = aggrFC;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"countrows\":\n\t\t\t\t\t(scope, bSimple) = await ResolveAggrScope(args, 1);\n\t\t\t\t\tFunctionAggrCountRows aggrFCR = new FunctionAggrCountRows(scope);\n\t\t\t\t\taggrFCR.LevelCheck = bSimple;\n\t\t\t\t\tresult = aggrFCR;\n\t\t\t\t\tbreak;\n                case \"countdistinct\":\n\t\t\t\t\t(scope, bSimple) = await ResolveAggrScope(args, 2);\n\t\t\t\t\tFunctionAggrCountDistinct aggrFCD = new FunctionAggrCountDistinct(_DataCache, args[0], scope);\n\t\t\t\t\taggrFCD.LevelCheck = bSimple;\n\t\t\t\t\tresult = aggrFCD;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"rownumber\":\n\t\t\t\t\t(scope, bSimple) = await ResolveAggrScope(args, 1);\n\t\t\t\t\tIExpr texpr = new ConstantDouble(\"0\");\n\t\t\t\t\tresult = new FunctionAggrRvCount(_DataCache, texpr, scope);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"runningvalue\":\n\t\t\t\t\tif (args.Length < 2 || args.Length > 3)\n\t\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_RunningValue_takes_2_or_3_arguments + GetLocationInfo(curToken));\n\t\t\t\t\tstring aggrFunc = await args[1].EvaluateString(null, null);\n\t\t\t\t\tif (aggrFunc == null)\n\t\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_RunningValueArgumentInvalid + GetLocationInfo(curToken));\n\t\t\t\t\t(scope, bSimple) = await ResolveAggrScope(args, 3);\n\t\t\t\t\tswitch(aggrFunc.ToLower())\n\t\t\t\t\t{\n\t\t\t\t\t\tcase \"sum\":\n\t\t\t\t\t\t\tresult = new FunctionAggrRvSum(_DataCache, args[0], scope);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"avg\":\n\t\t\t\t\t\t\tresult = new FunctionAggrRvAvg(_DataCache, args[0], scope);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"count\":\n\t\t\t\t\t\t\tresult = new FunctionAggrRvCount(_DataCache, args[0], scope);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"max\":\n\t\t\t\t\t\t\tresult = new FunctionAggrRvMax(_DataCache, args[0], scope);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"min\":\n\t\t\t\t\t\t\tresult = new FunctionAggrRvMin(_DataCache, args[0], scope);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"stdev\":\n\t\t\t\t\t\t\tresult = new FunctionAggrRvStdev(_DataCache, args[0], scope);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"stdevp\":\n\t\t\t\t\t\t\tresult = new FunctionAggrRvStdevp(_DataCache, args[0], scope);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"var\":\n\t\t\t\t\t\t\tresult = new FunctionAggrRvVar(_DataCache, args[0], scope);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"varp\":\n\t\t\t\t\t\t\tresult = new FunctionAggrRvVarp(_DataCache, args[0], scope);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new ParserException(string.Format(Strings.Parser_ErrorP_RunningValueNotSupported, aggrFunc) + GetLocationInfo(curToken));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"stdev\":\n\t\t\t\t\t(scope, bSimple) = await ResolveAggrScope(args, 2);\n\t\t\t\t\tFunctionAggrStdev aggrSDev = new FunctionAggrStdev(_DataCache, args[0], scope);\n\t\t\t\t\taggrSDev.LevelCheck = bSimple;\n\t\t\t\t\tresult = aggrSDev;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"stdevp\":\n\t\t\t\t\t(scope, bSimple) = await ResolveAggrScope(args, 2);\n\t\t\t\t\tFunctionAggrStdevp aggrSDevP = new FunctionAggrStdevp(_DataCache, args[0], scope);\n\t\t\t\t\taggrSDevP.LevelCheck = bSimple;\n\t\t\t\t\tresult = aggrSDevP;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"var\":\n\t\t\t\t\t(scope, bSimple) = await ResolveAggrScope(args, 2);\n\t\t\t\t\tFunctionAggrVar aggrVar = new FunctionAggrVar(_DataCache, args[0], scope);\n\t\t\t\t\taggrVar.LevelCheck = bSimple;\n\t\t\t\t\tresult = aggrVar;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"varp\":\n\t\t\t\t\t(scope, bSimple) = await ResolveAggrScope(args, 2);\n\t\t\t\t\tFunctionAggrVarp aggrVarP = new FunctionAggrVarp(_DataCache, args[0], scope);\n\t\t\t\t\taggrVarP.LevelCheck = bSimple;\n\t\t\t\t\tresult = aggrVarP;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tresult = ResolveMethodCall(fullname, args);\t\t// through exception when fails\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn (true, result);\n\t\t}\n\n\t\tprivate bool IsAggregate(string method, bool onePart)\n\t\t{\n\t\t\tif (!onePart)\n\t\t\t\treturn false;\n\t\t\tbool rc;\n\t\t\tswitch(method.ToLower())\n\t\t\t{\t// this needs to include all aggregate functions\n\t\t\t\tcase \"sum\":\n\t\t\t\tcase \"avg\":\n\t\t\t\tcase \"min\":\n\t\t\t\tcase \"max\":\n\t\t\t\tcase \"first\":\n\t\t\t\tcase \"last\":\n\t\t\t\tcase \"next\":\n\t\t\t\tcase \"previous\":\n                case \"aggregate\":\n\t\t\t\tcase \"count\":\n\t\t\t\tcase \"countrows\":\n\t\t\t\tcase \"countdistinct\":\n\t\t\t\tcase \"stdev\":\n\t\t\t\tcase \"stdevp\":\n\t\t\t\tcase \"var\":\n\t\t\t\tcase \"varp\":\n\t\t\t\tcase \"rownumber\":\n\t\t\t\tcase \"runningvalue\":\n\t\t\t\t\trc = true;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\trc = false;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn rc;\n\t\t}\n\n\t\tprivate async Task<(object scope, bool bSimple)> ResolveAggrScope(IExpr[] args, int indexOfScope)\n\t\t{\n\t\t\tobject scope;\n\t\t\t\n\t\t\tbool bSimple = true;\n\n            if (args.Length == 0 && indexOfScope > 1)\n                throw new ParserException(Strings.Parser_ErrorP_AggregateMust1Argument);\n\n\t\t\tif (args.Length >= indexOfScope)\n\t\t\t{\n\t\t\t\tstring n = await args[indexOfScope-1].EvaluateString(null, null);\n\t\t\t\tif (idLookup.IsPageScope)\n\t\t\t\t\tthrow new ParserException(string.Format(Strings.Parser_ErrorP_ScopeNotSpecifiedInHeaderOrFooter,n));\n\n\t\t\t\tscope = idLookup.LookupScope(n);\n\t\t\t\tif (scope == null)\n\t\t\t\t{\n\t\t\t\t\tIdentifier ie = args[indexOfScope-1] as Identifier;\n\t\t\t\t\tif (ie == null || ie.IsNothing == false)\t// check for \"nothing\" identifier\n\t\t\t\t\t\tthrow new ParserException(string.Format(Strings.Parser_ErrorP_ScopeNotKnownGrouping,n));\n\t\t\t\t}\n\n\t\t\t\tif (args.Length > indexOfScope)\t// has recursive/simple been specified\n\t\t\t\t{\n\t\t\t\t\tIdentifierKey k = args[indexOfScope] as IdentifierKey;\n\t\t\t\t\tif (k == null)\n\t\t\t\t\t\tthrow new ParserException(Strings.Parser_ErrorP_ScopeIdentifer + GetLocationInfo(curToken));\n\t\t\t\t\tif (k.Value == IdentifierKeyEnum.Recursive)\n\t\t\t\t\t\tbSimple = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (idLookup.IsPageScope)\n\t\t\t{\n\t\t\t\tscope = \"pghf\";\t// indicates page header or footer\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tscope = idLookup.LookupGrouping();\n\t\t\t\tif (scope == null)\n\t\t\t\t{\n\t\t\t\t\tscope = idLookup.LookupMatrix();\n\t\t\t\t\tif (scope == null)\n\t\t\t\t\t\tscope = idLookup.ScopeDataSet(null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn (scope, bSimple);\n\t\t}\n\n        private IExpr ResolveParametersMethod(string pname, string vf, IExpr[] args)\n        {\n            FunctionReportParameter result;\n\n            ReportParameter p = idLookup.LookupParameter(pname);\n            if (p == null)\n                throw new ParserException(string.Format(Strings.Parser_ErrorP_ParameterNotFound, pname));\n\n            string arrayMethod;\n            int posBreak = vf.IndexOf('.');\n            if (posBreak > 0)\n            {\n                arrayMethod = vf.Substring(posBreak + 1);\t// rest of expression\n                vf = vf.Substring(0, posBreak);\n            }\n            else\n                arrayMethod = null;\n\n            if (vf == null || vf == \"Value\")\n                result = new FunctionReportParameter(p);\n            else if (vf == \"Label\")\n                result = new FunctionReportParameterLabel(p);\n            else\n                throw new ParserException(string.Format(Strings.Parser_ErrorP_ParameterSupportsValueAndLabel, pname));\n\n            result.SetParameterMethod(arrayMethod, args);\n\n            return result;\n        }\n\n\t\tprivate IExpr ResolveMethodCall(string fullname, IExpr[] args)\n\t\t{\n\t\t\tstring cls, method;\n\t\t\tint idx = fullname.LastIndexOf('.');\n\t\t\tif (idx > 0)\n\t\t\t{\n\t\t\t\tcls = fullname.Substring(0, idx);\n\t\t\t\tmethod = fullname.Substring(idx+1);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tcls = \"\";\n\t\t\t\tmethod = fullname;\n\t\t\t}\n\n\t\t\t// Fill out the argument types\n\t\t\tType[] argTypes = new Type[args.Length];\n\t\t\tfor (int i=0; i < args.Length; i++)\n\t\t\t{\n\t\t\t\targTypes[i] = XmlUtil.GetTypeFromTypeCode(args[i].GetTypeCode());\n\t\t\t}\n\t\t\t// See if this is a function within the Code element\n\t\t\tType cType=null;\n\t\t\tbool bCodeFunction = false;\n\t\t\tif (cls == \"\" || cls.ToLower() == \"code\")\n\t\t\t{\n\t\t\t\tcType = idLookup.CodeClassType;\t\t\t\t\t// get the code class type\n\t\t\t\tif (cType != null)\n\t\t\t\t{\n\t\t\t\t\tif (XmlUtil.GetMethod(cType, method, argTypes) == null)\n\t\t\t\t\t\tcType = null;\t\t// try for the method in the instance\n\t\t\t\t\telse \n\t\t\t\t\t\tbCodeFunction = true;\n\t\t\t\t}\n\t\t\t\tif (cls != \"\" && !bCodeFunction)\n\t\t\t\t\tthrow new ParserException(string.Format(Strings.Parser_ErrorP_NotCodeMethod, method));\n\t\t\t}\n\n\t\t\t// See if this is a function within the instance classes\n\t\t\tReportClass rc=null;\n\t\t\tif (cType == null)\n\t\t\t{\n\t\t\t\trc = idLookup.LookupInstance(cls);\t// is this an instance variable name?\n\t\t\t\tif (rc == null)\n\t\t\t\t{\n\t\t\t\t\tcType=idLookup.LookupType(cls);\t\t\t\t// no, must be a static class reference\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tcType= idLookup.LookupType(rc.ClassName);\t// yes, use the classname of the ReportClass\n\t\t\t\t}\n\t\t\t}\n\t\t\tstring syscls=null;\n\n\t\t\tif (cType == null)\n\t\t\t{\t// ok try for some of the system functions\n\n\t\t\t\tswitch(cls)\n\t\t\t\t{\n\t\t\t\t\tcase \"Math\":\n\t\t\t\t\t\tsyscls = \"System.Math\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"String\":\n\t\t\t\t\t\tsyscls = \"System.String\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Convert\":\n\t\t\t\t\t\tsyscls = \"System.Convert\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Financial\":\n\t\t\t\t\t\tsyscls = \"Majorsilence.Reporting.Rdl.Financial\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsyscls = \"Majorsilence.Reporting.Rdl.VBFunctions\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (syscls != null)\n\t\t\t\t{\n\t\t\t\t\tcType = Type.GetType(syscls, false, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (cType == null)\n\t\t\t{\n\t\t\t\tstring err;\n\t\t\t\tif (cls == null || cls.Length == 0)\n\t\t\t\t\terr = String.Format(Strings.Parser_ErrorP_FunctionUnknown, method);\n\t\t\t\telse\n\t\t\t\t\terr = String.Format(Strings.Parser_ErrorP_ClassUnknown, cls);\n\n\t\t\t\tthrow new ParserException(err);\n\t\t\t}\n\n\t\t\tIExpr result=null;\n\n\t\t\tMethodInfo mInfo = XmlUtil.GetMethod(cType, method, argTypes);\n            if (mInfo == null)\n            {\n                string err;\n                if (cls == null || cls.Length == 0)\n\t\t\t\t\terr = String.Format(Strings.Parser_ErrorP_FunctionUnknown, method);\n                else\n                    err = String.Format(Strings.Parser_ErrorP_FunctionOfClassUnknown, method, cls);\n\n                throw new ParserException(err);\n            }\n\n            // when nullable object (e.g. DateTime?, int?,...)\n            //    we need to get the underlying type\n            Type t = mInfo.ReturnType;\n            if (Type.GetTypeCode(t) == TypeCode.Object)\n            {\n                try\n                {\n                    t = Nullable.GetUnderlyingType(t);\n                }\n                catch { }  // ok if it fails; must not be nullable object\n            }\n            // obtain the TypeCode\n\t\t\tTypeCode tc = Type.GetTypeCode(t);\n\t\t\tif (bCodeFunction)\n\t\t\t\tresult = new FunctionCode(method, args, tc);\n\t\t\telse if (syscls != null)\n\t\t\t\tresult = new FunctionSystem(syscls, method, args, tc);\n\t\t\telse if (rc == null)\n\t\t\t\tresult = new FunctionCustomStatic(idLookup.CMS, cls, method, args, tc);\n\t\t\telse\n\t\t\t\tresult = new FunctionCustomInstance(rc, method, args, tc);\n\n\t\t\treturn result;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/ExprParser/ParserException.cs",
    "content": "\nusing System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Represents an exception throwed by lexer and parser.\n\t/// </summary>\n\tinternal class ParserException : ApplicationException\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the ParserException class with the\n\t\t/// specified message.\n\t\t/// </summary>\n\t\t/// <param name=\"message\">A message.</param>\n\t\tinternal ParserException(string message) : base(message)\n\t\t{\n\t\t\t// used base\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/ExprParser/Token.cs",
    "content": "\nusing System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Token class that used by LangParser.\n\t/// </summary>\n\tinternal class Token\n\t{\n\t\tinternal string Value;\n\t\tinternal int StartLine;\n\t\tinternal int EndLine;\n\t\tinternal int StartCol;\n\t\tinternal int EndCol;\n\t\tinternal TokenTypes Type;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the Token class.\n\t\t/// </summary>\n\t\tinternal Token(string value, int startLine, int startCol, int endLine, int endCol, TokenTypes type)\n\t\t{\n\t\t\tValue = value;\n\t\t\tStartLine = startLine;\n\t\t\tEndLine = endLine;\n\t\t\tStartCol = startCol;\n\t\t\tEndCol = endCol;\n\t\t\tType = type;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the Token class.\n\t\t/// </summary>\n\t\tinternal Token(string value, TokenTypes type)\n\t\t\t: this(value, 0, 0, 0, 0, type)\n\t\t{\n\t\t\t// use this\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the Token class.\n\t\t/// </summary>\n\t\tinternal Token(TokenTypes type)\n\t\t\t: this(null, 0, 0, 0, 0, type)\n\t\t{\n\t\t\t// use this\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a string representation of the Token.\n\t\t/// </summary>\n\t\tpublic override string ToString()\n\t\t{\n\t\t\treturn \"<\" + Type + \"> \" + Value;\t\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/ExprParser/TokenList.cs",
    "content": "\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Represents a list of the tokens.\n\t/// </summary>\n\tinternal class TokenList : IEnumerable\n\t{\n\t\tprivate List<Token> tokens = null;\n\n\t\tinternal TokenList()\n\t\t{\n\t\t\ttokens = new List<Token>();\n\t\t}\n\n\t\tinternal void Add(Token token)\n\t\t{\n\t\t\ttokens.Add(token);\n\t\t}\n\n\t\tinternal void Push(Token token)\n\t\t{\n\t\t\ttokens.Insert(0, token);\n\t\t}\n\n\t\tinternal Token Peek()\n\t\t{\n\t\t\treturn tokens[0];\n\t\t}\n\n\t\tinternal Token Extract()\n\t\t{\n\t\t\tToken token = tokens[0];\n\t\t\ttokens.RemoveAt(0);\n\t\t\treturn token;\n\t\t}\n\n\t\tinternal int Count\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn tokens.Count;\n\t\t\t}\n\t\t}\n\n\t\tpublic IEnumerator GetEnumerator()\n\t\t{\n\t\t\treturn tokens.GetEnumerator();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/ExprParser/TokenTypes.cs",
    "content": "\nusing System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Summary description for TokenTypes.\n\t/// </summary>\n\tinternal enum TokenTypes\n\t{\n\t\tAND,\n\t\tOR,\n\t\tNOT,\n\t\tPLUS,\n\t\tPLUSSTRING,\n\t\tMINUS,\n\t\tLPAREN,\n\t\tRPAREN,\n\t\tQUOTE,\n\t\tIDENTIFIER,\n\t\tCOMMA,\n\t\tNUMBER,\n\t\tDATETIME,\n\t\tDOUBLE,\n\t\tINTEGER,\n\t\tEQUAL,\n\t\tNOTEQUAL,\n\t\tGREATERTHAN,\n\t\tGREATERTHANOREQUAL,\n\t\tLESSTHAN,\n\t\tLESSTHANOREQUAL,\n\t\tFORWARDSLASH,\n\t\tBACKSLASH,\n\t\tSTAR,\n\t\tEXP,\n\t\tMODULUS,\n        DOT,                // dot operator\n\t\tOTHER,\n\t\tEOF\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/Constant.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// <p>Expression definition</p>\n\t/// </summary>\n\t[Serializable]\n\tinternal class Constant : IExpr\n\t{\n\t\tstring _Value;\t\t// value of the constant\n\n\t\t/// <summary>\n\t\t/// Constant - as opposed to an expression\n\t\t/// </summary>\n\t\tpublic Constant(string v) \n\t\t{\n\t\t\t_Value = v;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.String;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic Task<IExpr> ConstantOptimization()\n\t\t{\t// already constant expression\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\tpublic Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult((object)_Value);\n\t\t}\n\n\t\tpublic Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(_Value);\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToDouble(_Value));\n\t\t}\n\t\t\n\t\tpublic Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToDecimal(_Value));\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(Convert.ToInt32(_Value));\n        }\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToDateTime(_Value));\n\t\t}\n\n\t\tpublic Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToBoolean(_Value));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/ConstantBoolean.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Boolean constant\n\t/// </summary>\n\t[Serializable]\n\tinternal class ConstantBoolean : IExpr\n\t{\n\t\tbool _Value;\t\t// value of the constant\n\n\t\t/// <summary>\n\t\t/// A boolean constant: i.e. true or false.\n\t\t/// </summary>\n\t\tpublic ConstantBoolean(string v) \n\t\t{\n\t\t\t_Value = Convert.ToBoolean(v);\n\t\t}\n\n\t\tpublic ConstantBoolean(bool v) \n\t\t{\n\t\t\t_Value = v;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Boolean;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic Task<IExpr> ConstantOptimization()\n\t\t{\t// already constant expression\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\tpublic Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult((object)_Value);\n\t\t}\n\n\t\tpublic Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToString(_Value));\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToDouble(_Value));\n\t\t}\n\t\t\n\t\tpublic Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToDecimal(_Value));\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(Convert.ToInt32(_Value));\n        }\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToDateTime(_Value));\n\t\t}\n\n\t\tpublic Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(_Value);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/ConstantDateTime.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Constant DateTime\n\t/// </summary>\n\t[Serializable]\n\tinternal class ConstantDateTime : IExpr\n\t{\n\t\tDateTime _Value;\t\t// value of the constant\n\n\t\t/// <summary>\n\t\t/// passed class name, function name, and args for evaluation\n\t\t/// </summary>\n\t\tpublic ConstantDateTime(string v) \n\t\t{\n\t\t\t_Value = Convert.ToDateTime(v);\n\t\t}\n\n\t\tpublic ConstantDateTime(DateTime v) \n\t\t{\n\t\t\t_Value = v;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.DateTime;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic Task<IExpr> ConstantOptimization()\n\t\t{\t// already constant expression\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\tpublic Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult((object)_Value);\n\t\t}\n\t\t\n\t\tpublic Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToString(_Value));\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToDouble(_Value));\n\t\t}\n\t\t\n\t\tpublic Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToDecimal(_Value));\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(Convert.ToInt32(_Value));\n        }\n\n        public Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(_Value);\n\t\t}\n\n\t\tpublic Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToBoolean(_Value));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/ConstantDecimal.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Globalization;\n\nusing Majorsilence.Reporting.Rdl;\nusing System.Threading.Tasks;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Constant decimal.\n\t/// </summary>\n\t[Serializable]\n\tinternal class ConstantDecimal : IExpr\n\t{\n\t\tdecimal _Value;\t\t// value of the constant\n\n\t\t/// <summary>\n\t\t/// passed string of the number\n\t\t/// </summary>\n\t\tpublic ConstantDecimal(string v) \n\t\t{\n\t\t\t_Value = Convert.ToDecimal(v, NumberFormatInfo.InvariantInfo);\n\t\t}\n\n\t\tpublic ConstantDecimal(decimal v) \n\t\t{\n\t\t\t_Value = v;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Decimal;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic Task<IExpr> ConstantOptimization()\n\t\t{\t// already constant expression\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\tpublic Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult((object)_Value);\n\t\t}\n\n\t\tpublic Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToString(_Value));\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToDouble(_Value));\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(Convert.ToInt32(_Value));\n        }\n\t\t\n\t\tpublic Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(_Value);\n\t\t}\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToDateTime(_Value));\n\t\t}\n\n\t\tpublic Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToBoolean(_Value));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/ConstantDouble.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Globalization;\n\n\nusing Majorsilence.Reporting.Rdl;\nusing System.Threading.Tasks;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Constant Double\n\t/// </summary>\n\t[Serializable]\n\tinternal class ConstantDouble : IExpr\n\t{\n\t\tdouble _Value;\t\t// value of the constant\n\n\t\t/// <summary>\n\t\t/// passed class name, function name, and args for evaluation\n\t\t/// </summary>\n\t\tpublic ConstantDouble(string v) \n\t\t{\n\t\t\t_Value = Convert.ToDouble(v, NumberFormatInfo.InvariantInfo);\n\t\t}\n\n\t\tpublic ConstantDouble(double v) \n\t\t{\n\t\t\t_Value = v;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Double;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic Task<IExpr> ConstantOptimization()\n\t\t{\t// already constant expression\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\tpublic Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult((object)_Value);\n\t\t}\n\n\t\tpublic Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToString(_Value));\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(_Value);\n\t\t}\n\n        public Task<decimal> EvaluateDecimal(Report rpt, Row row)\n        {\n            return Task.FromResult(Convert.ToDecimal(_Value));\n        }\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(Convert.ToInt32(_Value));\n        }\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToDateTime(_Value));\n\t\t}\n\n\t\tpublic Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToBoolean(_Value));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/ConstantError.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Error in expression;  don't want iexpr to be null so this is returned.\n\t/// </summary>\n\t[Serializable]\n\tinternal class ConstantError : IExpr\n\t{\n\t\tstring _Value;\n\t\t/// <summary>\n\t\t/// Constant - as opposed to an expression\n\t\t/// </summary>\n\t\tpublic ConstantError(string v) \n\t\t{\n\t\t\t_Value = v;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.String;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic Task<IExpr> ConstantOptimization()\n\t\t{\t// already constant expression\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\tpublic Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult((object)_Value);\n\t\t}\n\n\t\tpublic Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(_Value);\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToDouble(_Value));\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(Convert.ToInt32(_Value));\n        }\n\n        public Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToDecimal(_Value));\n\t\t}\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToDateTime(_Value));\n\t\t}\n\n\t\tpublic Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToBoolean(_Value));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/ConstantInteger.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Constant Integer\n\t/// </summary>\n\t[Serializable]\n\tinternal class ConstantInteger : IExpr\n\t{\n\t\tint _Value;\t\t// value of the constant\n\n\t\t/// <summary>\n\t\t/// passed class name, function name, and args for evaluation\n\t\t/// </summary>\n\t\tpublic ConstantInteger(string v) \n\t\t{\n\t\t\t_Value = Convert.ToInt32(v);\n\t\t}\n\n\t\tpublic ConstantInteger(int v) \n\t\t{\n\t\t\t_Value = v;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Int32;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic Task<IExpr> ConstantOptimization()\n\t\t{\t// already constant expression\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\tpublic Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult((object)_Value);\n\t\t}\n\n\t\tpublic Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToString(_Value));\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult((double)_Value);\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(_Value);\n        }\n\t\t\n\t\tpublic Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToDecimal(_Value));\n\t\t}\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToDateTime(_Value));\n\t\t}\n\n\t\tpublic Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToBoolean(_Value));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/ConstantString.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// String constant\n\t/// </summary>\n\t[Serializable]\n\tinternal class ConstantString : IExpr\n\t{\n\t\tstring _Value;\t\t// value of the constant\n\n\t\t/// <summary>\n\t\t/// passed class name, function name, and args for evaluation\n\t\t/// </summary>\n\t\tpublic ConstantString(string v) \n\t\t{\n\t\t\t_Value = v;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.String;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic Task<IExpr> ConstantOptimization()\n\t\t{\t// already constant expression\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\tpublic Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult((object)_Value);\n\t\t}\n\n\t\tpublic Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(_Value);\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToDouble(_Value));\n\t\t}\n\t\t\n\t\tpublic Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToDecimal(_Value));\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(Convert.ToInt32(_Value));\n        }\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToDateTime(_Value));\n\t\t}\n\n\t\tpublic Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Convert.ToBoolean(_Value));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/Financial.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// The Financial class holds a number of static functions relating to financial\n\t/// calculations.\n\t/// \n\t///\tNote: many of the financial functions use the following function as their basis\n\t///\t pv*(1+rate)^nper+pmt*(1+rate*type)*((1+rate)^nper-1)/rate)+fv=0\n\t///\t if rate = 0\n\t///\t (pmt*nper)+pv+fv=0\n\t/// </summary>\n\tsealed internal class Financial\n\t{\n\t\t/// <summary>\n\t\t/// Double declining balance depreciation (when factor = 2).  Other factors may be specified.\n\t\t/// </summary>\n\t\t/// <param name=\"cost\">Initial cost of asset</param>\n\t\t/// <param name=\"salvage\">Salvage value of asset at end of depreciation</param>\n\t\t/// <param name=\"life\">Number of periods over which to depreciate the asset.  AKA useful life</param>\n\t\t/// <param name=\"period\">The period for which you want to know the depreciation amount.</param>\n\t\t/// <returns></returns>\n\t\tstatic public double DDB(double cost, double salvage, int life, int period)\n\t\t{\n\t\t\treturn DDB(cost, salvage, life, period, 2);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Double declining balance depreciation (when factor = 2).  Other factors may be specified.\n\t\t/// </summary>\n\t\t/// <param name=\"cost\">Initial cost of asset</param>\n\t\t/// <param name=\"salvage\">Salvage value of asset at end of depreciation</param>\n\t\t/// <param name=\"life\">Number of periods over which to depreciate the asset.  AKA useful life</param>\n\t\t/// <param name=\"period\">The period for which you want to know the depreciation amount.</param>\n\t\t/// <param name=\"factor\">The rate at which the balance declines.  Defaults to 2 (double declining) when omitted.</param>\n\t\t/// <returns></returns>\n\t\tstatic public double DDB(double cost, double salvage, int life, int period, double factor)\n\t\t{\n\t\t\tif (period > life || period < 1 || life < 1)\t// invalid arguments\n\t\t\t\treturn double.NaN;\n\n\t\t\tdouble depreciation=0;\n\t\t\tfor (int i=1; i < period; i++)\n\t\t\t{\n\t\t\t\tdepreciation += (cost - depreciation)*factor/life;\t\n\t\t\t}\n\t\t\tif (period == life)\n\t\t\t\treturn cost - salvage - depreciation;\t\t// for last year we force the depreciation so that cost - total depreciation = salvage\n\t\t\telse\n\t\t\t\treturn (cost - depreciation)*factor/life;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the future value of an investment when using periodic, constant payments and \n\t\t/// constant interest rate.\n\t\t/// </summary>\n\t\t/// <param name=\"rate\">Interest rate per period</param>\n\t\t/// <param name=\"periods\">Total number of payment periods</param>\n\t\t/// <param name=\"pmt\">Amount of payment each period</param>\n\t\t/// <param name=\"presentValue\">Lump sum amount that a series of payments is worth now</param>\n\t\t/// <param name=\"endOfPeriod\">Specify true if payments are due at end of period, otherwise false</param>\n\t\t/// <returns></returns>\n\t\tstatic public double FV(double rate, int periods, double pmt, double presentValue, bool endOfPeriod)\n\t\t{\n\t\t\tint type = endOfPeriod? 0: 1;\t\n\n\t\t\tdouble fv;\n\t\t\tif (rate == 0)\n\t\t\t\tfv = -((pmt*periods)+presentValue);\n\t\t\telse\n\t\t\t{\n\t\t\t\tdouble temp = Math.Pow(1+rate, periods);\n\t\t\t\tfv = -((presentValue*temp) + (pmt*(1+(rate*type))*((temp -1)/rate)));\n\t\t\t}\n\n\t\t\treturn fv;\n\t\t}\n\t\t\n\t\t/// <summary>\n\t\t/// Returns the interest payment portion of a payment given a particular period.\n\t\t/// </summary>\n\t\t/// <param name=\"rate\">Interest rate per period</param>\n\t\t/// <param name=\"period\">Period for which you want the interest payment.</param>\n\t\t/// <param name=\"periods\">Total number of payment periods</param>\n\t\t/// <param name=\"presentValue\">Lump sum amount that a series of payments is worth now</param>\n\t\t/// <param name=\"futureValue\">Cash balance you want to attain after last payment</param>\n\t\t/// <param name=\"endOfPeriod\">Specify true if payments are due at end of period, otherwise false</param>\n\t\t/// <returns></returns>\n\t\tstatic public double IPmt(double rate, int period, int periods, double presentValue, double futureValue, bool endOfPeriod)\n\t\t{\n\t\t\t// TODO -- routine needs more work.   off when endOfPeriod is false; must be more direct way to solve\n\t\t\tif (!endOfPeriod)\n\t\t\t\tthrow new Exception(Strings.Financial_Error_IPmtNotSupportPayments);\n\n\t\t\tif (period < 0 || period > periods)\n\t\t\t\treturn double.NaN;\n\t\t\tif (!endOfPeriod)\n\t\t\t\tperiod--;\n\n\t\t\tdouble pmt = -Pmt(rate, periods, presentValue, futureValue, endOfPeriod);\n\t\t\tdouble prin = presentValue; \n\t\t\tdouble interest=0;\n\t\t\tfor (int i=0; i < period; i++)\n\t\t\t{\n\t\t\t\tinterest = rate*prin;\n\t\t\t\tprin = prin - pmt + interest;\n\t\t\t}\n\t\t\treturn -interest;\n\t\t}\n\t\t\n\t\t/// <summary>\n\t\t/// Returns the number of periods for an investment.\n\t\t/// </summary>\n\t\t/// <param name=\"rate\">Interest rate per period</param>\n\t\t/// <param name=\"pmt\">Amount of payment each period</param>\n\t\t/// <param name=\"presentValue\">Lump sum amount that a series of payments is worth now</param>\n\t\t/// <param name=\"futureValue\">Future value or cash balance you want after last payment</param>\n\t\t/// <param name=\"endOfPeriod\">Specify true if payments are due at end of period, otherwise false</param>\n\t\t/// <returns></returns>\n\t\tstatic public double NPer(double rate, double pmt, double presentValue, double futureValue, bool endOfPeriod)\n\t\t{\n\t\t\tif (Math.Abs(pmt) < double.Epsilon)\n\t\t\t\treturn double.NaN;\n\n\t\t\tint type = endOfPeriod? 0: 1;\t\n\n\t\t\tdouble nper;\n\t\t\tif (rate == 0)\n\t\t\t\tnper = -(presentValue + futureValue)/pmt;\n\t\t\telse\n\t\t\t{\n\t\t\t\tdouble r1 = 1 + (rate*type);\n\t\t\t\tdouble pmtr1 = pmt * r1 / rate;\n\t\t\t\tdouble y = (pmtr1 - futureValue) / (presentValue + pmtr1);\n\n\t\t\t\tnper = Math.Log(y) / Math.Log(1 + rate);\n\t\t\t}\n\n\t\t\treturn nper;\n\t\t}\n\t\t/// <summary>\n\t\t/// Returns the periodic payment for an annuity using constant payments and \n\t\t/// constant interest rate.\n\t\t/// </summary>\n\t\t/// <param name=\"rate\">Interest rate per period</param>\n\t\t/// <param name=\"periods\">Total number of payment periods</param>\n\t\t/// <param name=\"presentValue\">Lump sum amount that a series of payments is worth now</param>\n\t\t/// <param name=\"futureValue\">Cash balance you want to attain after last payment</param>\n\t\t/// <param name=\"endOfPeriod\">Specify true if payments are due at end of period, otherwise false</param>\n\t\t/// <returns></returns>\n\t\tstatic public double Pmt(double rate, int periods, double presentValue, double futureValue, bool endOfPeriod)\n\t\t{\n\t\t\tif (periods < 1)\n\t\t\t\treturn double.NaN;\n\n\t\t\tint type = endOfPeriod? 0: 1;\t\n\n\t\t\tdouble pmt;\n\t\t\tif (rate == 0)\n\t\t\t\tpmt = -(presentValue + futureValue)/periods;\n\t\t\telse\n\t\t\t{\n\t\t\t\tdouble temp = Math.Pow(1+rate, periods);\n\t\t\t\tpmt = -((presentValue*temp) + futureValue) / ((1+(rate*type))*(temp-1)/rate);\n\t\t\t}\n\n\t\t\treturn pmt;\n\t\t}\n\t\t/// <summary>\n\t\t/// Returns the present value of an investment.  The present value is the total\n\t\t/// amount that a series of future payments is worth now. \n\t\t/// </summary>\n\t\t/// <param name=\"rate\">Interest rate per period</param>\n\t\t/// <param name=\"periods\">Total number of payment periods</param>\n\t\t/// <param name=\"pmt\">Amount of payment each period</param>\n\t\t/// <param name=\"futureValue\">Cash balance you want to attain after last payment is made</param>\n\t\t/// <param name=\"endOfPeriod\">Specify true if payments are due at end of period, otherwise false</param>\n\t\t/// <returns></returns>\n\t\tstatic public double PV(double rate, int periods, double pmt, double futureValue, bool endOfPeriod)\n\t\t{\n\t\t\tint type = endOfPeriod? 0: 1;\t\n\n\t\t\tdouble pv;\n\t\t\tif (rate == 0)\n\t\t\t\tpv = -((pmt*periods)+futureValue);\n\t\t\telse\n\t\t\t{\n\t\t\t\tdouble temp = Math.Pow(1+rate, periods);\n\t\t\t\tpv = -((pmt*(1+(rate*type))*((temp-1)/rate)) + futureValue)/temp;\n\t\t\t}\n\n\t\t\treturn pv;\n\t\t}\n\t\t/// <summary>\n\t\t/// Returns the interest rate per period for an annuity.  This routine uses an\n\t\t/// iterative approach to solving for rate.   If after 30 iterations the answer\n\t\t/// doesn't converge to within 0.0000001 then double.NAN is returned.\n\t\t/// </summary>\n\t\t/// <param name=\"periods\">Total number of payment periods</param>\n\t\t/// <param name=\"pmt\">Amount of payment each period</param>\n\t\t/// <param name=\"presentValue\">Lump sum amount that a series of payments is worth now</param>\n\t\t/// <param name=\"futureValue\">Cash balance you want to attain after last payment</param>\n\t\t/// <param name=\"endOfPeriod\">Specify true if payments are due at end of period, otherwise false</param>\n\t\t/// <param name=\"guess\">Your guess as to what the interest rate will be.</param>\n\t\t/// <returns></returns>\n\t\tstatic public double Rate(int periods, double pmt, double presentValue, double futureValue, bool endOfPeriod, double guess)\n\t\t{\n\t\t\t// TODO:  should be better algorithm: linear interpolation, Newton-Raphson approximation???\n\t\t\tint type = endOfPeriod? 0: 1;\t\n\t\t\t// Set the lower bound\n\t\t\tdouble gLower= guess > .1? guess-.1: 0;\t\n\t\t\tdouble power2=.1;\n\t\t\twhile (RateGuess(periods, pmt, presentValue, futureValue, type, gLower) > 0)\n\t\t\t{\n\t\t\t\tgLower -= power2;\n\t\t\t\tpower2 *= 2;\n\t\t\t}\n\t\t\t// Set the upper bound\n\t\t\tdouble gUpper= guess+.1;\n\t\t\tpower2=.1;\n\t\t\twhile (RateGuess(periods, pmt, presentValue, futureValue, type, gUpper) < 0)\n\t\t\t{\n\t\t\t\tgUpper += power2;\n\t\t\t\tpower2 *= 2;\n\t\t\t}\n\t\t\tdouble z;\n\t\t\tdouble incr;\n\t\t\tdouble newguess;\n\t\t\tfor (int i= 0; i<30; i++)\n\t\t\t{\n\t\t\t\tz = RateGuess(periods,pmt,presentValue,futureValue, type, guess);\n\n\t\t\t\tif (z > 0)\n\t\t\t\t{\n\t\t\t\t\tgUpper = guess;\n\t\t\t\t\tincr = (guess - gLower)/2;\n\t\t\t\t\tnewguess = guess - incr;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tgLower = guess;\n\t\t\t\t\tincr = (gUpper - guess)/2;\n\t\t\t\t\tnewguess = guess + incr;\n\t\t\t\t}\n\t\t\t\tif (incr < 0.0000001)\t\t// Is the difference within our margin of error?\n\t\t\t\t\treturn guess;\n\t\t\t\tguess = newguess;\n\t\t\t}\n\t\t\treturn double.NaN;\t\t\t// we didn't converge\n\t\t}\n\n\t\tstatic private double RateGuess(int periods, double pmt, double pv, double fv, int type, double rate)\n\t\t{\n\t\t\t// When the guess is close the result should almost be 0\n\t\t\tif (rate == 0)\n\t\t\t\treturn (pmt*periods) + pv + fv;\n\t\t\tdouble temp = Math.Pow(1+rate, periods);\n\t\t\treturn (pv*temp) + (pmt*(1 + (rate*type))*((temp - 1)/rate)) + fv;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// SLN returns the straight line depreciation for an asset for a single period.\n\t\t/// </summary>\n\t\t/// <param name=\"cost\">Initial cost of asset</param>\n\t\t/// <param name=\"salvage\">Salvage value of asset at end of depreciation</param>\n\t\t/// <param name=\"life\">Number of periods over which to depreciate the asset. AKA useful life</param>\n\t\t/// <returns></returns>\n\t\tstatic public double SLN(double cost, double salvage, double life)\n\t\t{\n\t\t\tif (life == 0)\n\t\t\t\treturn double.NaN;\n\t\t\treturn (cost - salvage) / life;\n\t\t}\n\t\t/// <summary>\n\t\t/// Sum of years digits depreciation.  An asset often loses more of its value early in its lifetime. \n\t\t/// SYD has this behavior.\n\t\t/// </summary>\n\t\t/// <param name=\"cost\">Initial cost of asset</param>\n\t\t/// <param name=\"salvage\">Salvage value of asset at end of depreciation</param>\n\t\t/// <param name=\"life\">Number of periods over which to depreciate the asset.  AKA useful life</param>\n\t\t/// <param name=\"period\">The period for which you want to know the depreciation amount.</param>\n\t\t/// <returns></returns>\n\t\tstatic public double SYD(double cost, double salvage, int life, int period)\n\t\t{\n\t\t\tint sumOfPeriods;\n\t\t\tif (life % 2 == 0)\t\t\t\t\t\t// sum = n/2 * (n+1) when even\n\t\t\t\tsumOfPeriods = life/2 * (life + 1);\n\t\t\telse\t\t\t\t\t\t\t\t\t// sum = (n+1)/2 * n when odd\n\t\t\t\tsumOfPeriods = (life+1)/2 * life;\n\n\t\t\treturn ((life + 1 - period) * (cost - salvage)) / sumOfPeriods;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggr.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Base class for all aggregate functions\n\t/// </summary>\n\t[Serializable]\n\tinternal abstract class FunctionAggr \n\t{\n\t\tpublic IExpr _Expr;\t\t\t// aggregate expression\n\t\tpublic object _Scope;\t\t// DataSet or Grouping or DataRegion that contains (directly or\n\t\t\t\t\t\t\t\t\t\t//  indirectly) the report item that the aggregate\n\t\t\t\t\t\t\t\t\t\t//  function is used in\n\t\t\t\t\t\t\t\t\t\t// Can also hold the Matrix object\n\t\tbool _LevelCheck;\t\t\t\t// row processing requires level check\n\t\t\t\t\t\t\t\t\t\t//   i.e. simple specified on recursive row check\n\t\t/// <summary>\n\t\t/// Base class of all aggregate functions\n\t\t/// </summary>\n\n\t\tpublic FunctionAggr(IExpr e, object scp) \n\t\t{\n\t\t\t_Expr = e;\n\t\t\t_Scope = scp;\n\t\t\t_LevelCheck = false;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\tif (_Expr != null)\n\t\t\t\t_Expr = await _Expr.ConstantOptimization();\n\t\t\treturn (IExpr) this;\n\t\t}\n\n\t\tpublic virtual Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic IExpr Expr\n\t\t{\n\t\t\tget { return  _Expr; }\n\t\t}\n\n\t\tpublic object Scope\n\t\t{\n\t\t\tget { return  _Scope; }\n\t\t}\n\n\t\tpublic bool LevelCheck\n\t\t{\n\t\t\tget { return  _LevelCheck; }\n\t\t\tset { _LevelCheck = value; }\n\t\t}\n\n\t\t// return an IEnumerable that represents the scope of the data\n\t\tprotected RowEnumerable GetDataScope(Report rpt, Row row, out bool bSave)\n\t\t\t{\n\t\t\tbSave=true;\n\t\t\tRowEnumerable re=null;\n\n\t\t\tif (this._Scope != null)\n\t\t\t{\n\t\t\t\tType t = this._Scope.GetType();\n\n                //150208AJM GJL Trying - And Succeeding!!! to get data from chart\n                if (t == typeof(Chart)) {\n                    Chart c = (Chart)this._Scope;\n                    this._Scope = c.ChartMatrix;\n                    t = this._Scope.GetType();\n                }\n\n\t\t\t\tif (t == typeof(Grouping))\n\t\t\t\t{\n\t\t\t\t\tbSave=false;\n\t\t\t\t\tGrouping g = (Grouping) (this._Scope);\n\t\t\t\t\tif (g.InMatrix)\n\t\t\t\t\t{\n\t\t\t\t\t\tRows rows = g.GetRows(rpt);\n\t\t\t\t\t\tif (rows == null)\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\tre = new RowEnumerable(0, rows.Data.Count-1, rows.Data, _LevelCheck);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif (row == null || row.R.CurrentGroups == null)     // currentGroups can be null when reference Textbox in header/footer that has a scoped aggr function reference (TODO: this is a problem!)\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\tGroupEntry ge = row.R.CurrentGroups[g.GetIndex(rpt)];\n\t\t\t\t\t\tre = new RowEnumerable (ge.StartRow, ge.EndRow, row.R.Data, _LevelCheck);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (t == typeof(Matrix))\n\t\t\t\t{\n\t\t\t\t\tbSave=false;\n\t\t\t\t\tMatrix m = (Matrix) (this._Scope);\n\t\t\t\t\tRows mData = m.GetMyData(rpt);\n\t\t\t\t\tre = new RowEnumerable(0, mData.Data.Count-1, mData.Data, false);\n\t\t\t\t}\n\t\t\t\telse if (t == typeof(string))\n\t\t\t\t{\t// happens on page header/footer scope\n\t\t\t\t\tif (row != null)\n\t\t\t\t\t\tre = new RowEnumerable (0, row.R.Data.Count-1, row.R.Data, false);\n\t\t\t\t\tbSave = false;\n\t\t\t\t}\n                else if (t == typeof(DataSetDefn))\n                {\n                    DataSetDefn ds = this._Scope as DataSetDefn;\n                    if (ds != null && ds.Query != null)\n                    {\n                        Rows rows = ds.Query.GetMyData(rpt);\n                        if (rows != null)\n                            re = new RowEnumerable(0, rows.Data.Count - 1, rows.Data, false);\n                    }\n                }\n\t\t\t\telse if (row != null)\n\t\t\t\t{\n\t\t\t\t\tre = new RowEnumerable (0, row.R.Data.Count-1, row.R.Data, false);\n\t\t\t\t}\n                else\n\t\t\t\t{\n\t\t\t\t\tDataSetDefn ds = this._Scope as DataSetDefn;\n\t\t\t\t\tif (ds != null && ds.Query != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tRows rows = ds.Query.GetMyData(rpt);\n\t\t\t\t\t\tif (rows != null)\n\t\t\t\t\t\t\tre = new RowEnumerable(0, rows.Data.Count-1, rows.Data, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (row != null)\n\t\t\t{\n\t\t\t\tre = new RowEnumerable (0, row.R.Data.Count-1, row.R.Data, false);\n\t\t\t}\n\n\t\t\treturn re;\n\t\t}\n\t}\n\n\tinternal class RowEnumerable : IEnumerable\n\t{\n\t\tint startRow;\n\t\tint endRow;\n\t\tList<Row> data;\n\t\tbool _LevelCheck;\n        public RowEnumerable(int start, int end, List<Row> d, bool levelCheck)\n\t\t{\n\t\t\tstartRow = start;\n\t\t\tendRow = end;\n\t\t\tdata = d;\n\t\t\t_LevelCheck = levelCheck;\n\t\t}\n\n        public List<Row> Data\n\t\t{\n\t\t\tget{return data;}\n\t\t}\n\n\t\tpublic int FirstRow\n\t\t{\n\t\t\tget{return startRow;}\n\t\t}\n\n\t\tpublic int LastRow\n\t\t{\n\t\t\tget{return endRow;}\n\t\t}\n\n\t\tpublic bool LevelCheck\n\t\t{\n\t\t\tget{return _LevelCheck;}\n\t\t}\n\n\t\t// Methods\n\t\tpublic IEnumerator GetEnumerator()\n\t\t{\n\t\t\treturn new RowEnumerator(this);\n\t\t}\n\t}\n\n\tinternal class RowEnumerator : IEnumerator\n\t{\n\t\tprivate RowEnumerable re;\n\t\tprivate int index = -1;\n\t\tpublic RowEnumerator(RowEnumerable rea)\n\t\t{\n\t\t\tre = rea;\n\t\t}\n\t\t//Methods\n\t\tpublic bool MoveNext()\n\t\t{\n\t\t\tindex++;\n\t\t\twhile (true)\n\t\t\t{\n\t\t\t\tif (index + re.FirstRow > re.LastRow)\n\t\t\t\t\treturn false;\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif (re.LevelCheck)\n\t\t\t\t\t{\t//\n\t\t\t\t\t\tRow r1 = re.Data[re.FirstRow] as Row;\n\t\t\t\t\t\tRow r2 = re.Data[index + re.FirstRow] as Row;\n\t\t\t\t\t\tif (r1.Level == r1.Level)\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic void Reset()\n\t\t{\n\t\t\tindex=-1;\n\t\t}\n\n\t\tpublic object Current\n\t\t{\n\t\t\tget{return(re.Data[index + re.FirstRow]);}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrArray.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: Count\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrArray : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tstring _key;\n\t\t/// <summary>\n\t\t/// Aggregate function: Count\n\t\t/// \n\t\t///\tReturn type is double\n\t\t/// </summary>\n        public FunctionAggrArray(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrarray\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Object;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n            bool bSave = true;\n            RowEnumerable re = this.GetDataScope(rpt, row, out bSave);\n            if (re == null)\n                return null;\n\n            object v = GetValue(rpt);\n            if (v == null)\n            {\n                object temp;\n                ArrayList ar = new ArrayList(Math.Max(1,re.LastRow - re.FirstRow + 1));\n                foreach (Row r in re)\n                {\n                    temp = await _Expr.Evaluate(rpt, r);\n                    ar.Add(temp);\n                }\n\n                v = ar;\n                if (bSave)\n                    SetValue(rpt, v);\n            }\n\t\t\treturn v;\n        }\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(double.MinValue);\n\t\t}\n\t\t\n\t\tpublic Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(decimal.MinValue);\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(int.MinValue);\n        }\n\n\t\tpublic Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n            return Task.FromResult(DateTime.MinValue);\n\t\t}\n\n\t\tprivate object GetValue(Report rpt)\n\t\t{\n\t\t\tobject oi = rpt.Cache.Get(_key);\n\t\t\treturn oi;\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, object o)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, o);\n\t\t}\n\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrAvg.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: average\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrAvg : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tprivate TypeCode _tc;\t\t// type of result: decimal or double\n\t\tstring _key;\n\t\t/// <summary>\n\t\t/// Aggregate function: Sum returns the sum of all values of the\n\t\t///\t\texpression within the scope\n\t\t///\tReturn type is decimal for decimal expressions and double for all\n\t\t///\tother expressions.\t\n\t\t/// </summary>\n        public FunctionAggrAvg(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggravg\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\n\t\t\t// Determine the result\n\t\t\t_tc = e.GetTypeCode();\n\t\t\tif (_tc != TypeCode.Decimal)\t// if not decimal\n\t\t\t\t_tc = TypeCode.Double;\t\t// force result to double\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn _tc;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn _tc==TypeCode.Decimal? (object)await EvaluateDecimal(rpt, row): (object) await EvaluateDouble(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn double.NaN;\n\n\t\t\tODouble v = GetValueDouble(rpt);\n\t\t\tif (v != null)\n\t\t\t\treturn v.d;\n\n\t\t\tdouble sum=0;\n\t\t\tint count=0;\n\t\t\tdouble temp;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\ttemp = await _Expr.EvaluateDouble(rpt, r);\n\t\t\t\tif (temp.CompareTo(double.NaN) != 0)\n\t\t\t\t{\n\t\t\t\t\tsum += temp;\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tdouble result;\n\t\t\tif (count > 0)\n\t\t\t\tresult = (sum/count);\n\t\t\telse\n\t\t\t\tresult = double.NaN;\n\n\t\t\tif (bSave)\n\t\t\t\tSetValue(rpt, result);\n\n\t\t\treturn result;\n\t\t}\n        \n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            if (row == null)\n                return int.MinValue;\n            return Convert.ToInt32(await EvaluateDouble(rpt, row));\n        }\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn decimal.MinValue;\n\n\t\t\tODecimal v = GetValueDecimal(rpt);\n\t\t\tif (v != null)\n\t\t\t\treturn v.d;\n\n\t\t\tdecimal sum=0;\n\t\t\tint count=0;\n\t\t\tdecimal temp;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\ttemp = await _Expr.EvaluateDecimal(rpt, r);\n\t\t\t\tif (temp != decimal.MinValue)\t\t// indicate null value\n\t\t\t\t{\n\t\t\t\t\tsum += temp;\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\tdecimal result;\n\t\t\tif (count > 0)\n\t\t\t\tresult = (sum/count);\n\t\t\telse\n\t\t\t\tresult = decimal.MinValue;\n\t\t\tif (bSave)\n\t\t\t\tSetValue(rpt, result);\n\n\t\t\treturn result;\n\t\t}\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tprivate ODecimal GetValueDecimal(Report rpt)\n\t\t{\n\t\t\treturn rpt.Cache.Get(_key) as ODecimal;\n\t\t}\n\n\t\tprivate ODouble GetValueDouble(Report rpt)\n\t\t{\n\t\t\treturn rpt.Cache.Get(_key) as ODouble;\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, double d)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, new ODouble(d));\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, decimal d)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, new ODecimal(d));\n\t\t}\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrCount.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: Count\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrCount : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tstring _key;\n\t\t/// <summary>\n\t\t/// Aggregate function: Count\n\t\t/// \n\t\t///\tReturn type is double\n\t\t/// </summary>\n        public FunctionAggrCount(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrcount\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Int32;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn (object)await EvaluateInt32(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<int> EvaluateInt32(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn 0;\n\n\t\t\tint v = GetValue(rpt);\n\t\t\tif (v < 0)\n\t\t\t{\n\t\t\t\tobject temp;\n\t\t\t\tint count=0;\n\t\t\t\tforeach (Row r in re)\n\t\t\t\t{\n\t\t\t\t\ttemp = await _Expr.Evaluate(rpt, r);\n\t\t\t\t\tif (temp != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tv = count;\n\n\t\t\t\tif (bSave)\n\t\t\t\t\tSetValue(rpt, v);\n\t\t\t}\n\t\t\treturn  v;\n\t\t}\n\n        public async Task<double> EvaluateDouble(Report rpt, Row row)\n        {\n            int d = await EvaluateInt32(rpt, row);\n\n            return Convert.ToDouble(d);\n        }\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdouble d = await EvaluateDouble(rpt, row);\n\n\t\t\treturn Convert.ToDecimal(d);\n\t\t}\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tprivate int GetValue(Report rpt)\n\t\t{\n\t\t\tOInt oi = rpt.Cache.Get(_key) as OInt;\n\t\t\treturn oi == null? -1: oi.i;\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, int i)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, new OInt(i));\n\t\t}\n\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrCountDistinct.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: CountDistinct\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrCountDistinct : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tstring _key;\t\t\t// key used for caching value\n\t\t/// <summary>\n\t\t/// Aggregate function: CountDistinct\n\t\t/// \n\t\t///\tReturn type is double\n\t\t/// </summary>\n        public FunctionAggrCountDistinct(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"countdistinct\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Int32;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn (object)await EvaluateDouble(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<int> EvaluateInt32(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tRowEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn 0;\n\n\t\t\tint v = GetValue(rpt);\n\t\t\tif (v < 0)\n\t\t\t{\n\t\t\t\tobject temp;\n\t\t\t\tint count = Math.Max(2, re.LastRow - re.FirstRow);\n\t\t\t\tHashtable ht = new Hashtable(count);\n\t\t\t\tforeach (Row r in re)\n\t\t\t\t{\n\t\t\t\t\ttemp = await _Expr.Evaluate(rpt, r);\n\t\t\t\t\tif (temp != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tobject o = ht[temp];\t// search for it\n\t\t\t\t\t\tif (o == null)\t\t\t// if not found; add it to the hash table\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tht.Add(temp, temp);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tv = ht.Count;\n\t\t\t\tif (bSave)\n\t\t\t\t\tSetValue(rpt, v);\n\t\t\t}\n\t\t\treturn  v;\n\t\t}\n\n        public async Task<double> EvaluateDouble(Report rpt, Row row)\n        {\n            int d = await EvaluateInt32(rpt, row);\n\n            return Convert.ToDouble(d);\n        }\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tint d = await EvaluateInt32(rpt, row);\n\n\t\t\treturn Convert.ToDecimal(d);\n\t\t}\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tprivate int GetValue(Report rpt)\n\t\t{\n\t\t\tOInt oi = rpt.Cache.Get(_key) as OInt;\n\t\t\treturn oi == null? -1: oi.i;\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, int i)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, new OInt(i));\n\t\t}\n\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrCountRows.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: CountRows\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrCountRows : FunctionAggr, IExpr\n\t{\n\t\t/// <summary>\n\t\t/// Aggregate function: CountRows\n\t\t/// \n\t\t///\tReturn type is double\n\t\t/// </summary>\n\t\tpublic FunctionAggrCountRows(object scp):base(null, scp) \n\t\t{\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Int32;\n\t\t}\n\n\t\t// Evaluate is for interpretation\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn (object)await EvaluateInt32(rpt, row);\n\t\t}\n\t\t\n\t\tpublic Task<int> EvaluateInt32(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tRowEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn Task.FromResult(0);\n\n\t\t\tint count = re.LastRow - re.FirstRow + 1;\n\n\t\t\treturn Task.FromResult(count);\n\t\t}\n\n        public async Task<double> EvaluateDouble(Report rpt, Row row)\n        {\n            int d = await EvaluateInt32(rpt, row);\n\n            return Convert.ToDouble(d);\n        }\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tint d = await EvaluateInt32(rpt, row);\n\n\t\t\treturn Convert.ToDecimal(d);\n\t\t}\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrFirst.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: first\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrFirst : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tprivate TypeCode _tc;\t\t// type of result: depends on type of argument\n\t\tprivate string _key;\n\t\t/// <summary>\n\t\t/// Aggregate function: first returns the first value in a group\n\t\t///\tReturn type is same as input expression\t\n\t\t/// </summary>\n        public FunctionAggrFirst(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrfirst\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\n\t\t\t// Determine the result\n\t\t\t_tc = e.GetTypeCode();\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn _tc;\n\t\t}\n\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tRowEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn null;\n\n\t\t\tobject v = GetValue(rpt);\n\t\t\tif (v == null)\n\t\t\t{\n\t\t\t\tRow saver=null;\n\t\t\t\tif (re.Data.Count > 0)\n\t\t\t\t\tsaver = re.Data[re.FirstRow] as Row;\n\n\t\t\t\tv = await _Expr.Evaluate(rpt, saver);\n\t\t\t\tif (bSave)\n\t\t\t\t\tSetValue(rpt, v);\n\t\t\t}\n\t\t\treturn v;\n\t\t}\n\n\t\tpublic override async Task<bool> EvaluateBoolean(Report rpt,Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDouble(result);\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            object result = await Evaluate(rpt, row);\n            return Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tprivate object GetValue(Report rpt)\n\t\t{\n\t\t\treturn rpt.Cache.Get(_key);\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, object o)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, o);\n\t\t}\n\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrLast.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: last\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrLast : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tprivate TypeCode _tc;\t\t// type of result: decimal or double\n\t\tstring _key;\n\t\t/// <summary>\n\t\t/// Aggregate function: Last returns the last value in the group\n\t\t///\tReturn type is same as input expression\t\n\t\t/// </summary>\n        public FunctionAggrLast(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrfirst\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\n\t\t\t// Determine the result\n\t\t\t_tc = e.GetTypeCode();\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn _tc;\n\t\t}\n\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tRowEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn null;\n\n\t\t\tobject v = GetValue(rpt);\n\t\t\tif (v == null)\n\t\t\t{\n\t\t\t\tRow saver=null;\n\t\t\t\tif (re.Data.Count > 0)\n\t\t\t\t\tsaver = re.Data[re.LastRow] as Row;\n\n\t\t\t\tforeach (Row r in re)\t\t// loop thru to end\n\t\t\t\t{\n\t\t\t\t\tsaver=r;\n\t\t\t\t}\n\t\t\t\tv = await _Expr.Evaluate(rpt, saver);\n\t\t\t\tif (bSave)\n\t\t\t\t\tSetValue(rpt, v);\n\t\t\t}\n\t\t\treturn v;\n\t\t}\n\n\t\tpublic override async Task<bool> EvaluateBoolean(Report rpt,Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDouble(result);\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Convert.ToInt32(await Evaluate(rpt, row));\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\t\tprivate object GetValue(Report rpt)\n\t\t{\n\t\t\treturn rpt.Cache.Get(_key);\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, object o)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, o);\n\t\t}\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrLevel.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: Level\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrLevel : FunctionAggr, IExpr\n\t{\n\t\t/// <summary>\n\t\t/// Aggregate function: Level\n\t\t/// \n\t\t///\tReturn type is double\n\t\t/// </summary>\n\t\tpublic FunctionAggrLevel(object scp):base(null, scp) \n\t\t{\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Double;\t\t// although it is always an integer\n\t\t}\n\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn (object)await EvaluateDouble(rpt, row);\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null || this._Scope == null)\n\t\t\t\treturn Task.FromResult(0d);\n\n\t\t\tGrouping g = this._Scope as Grouping;\n\t\t\tif (g == null || g.ParentGroup == null)\n\t\t\t\treturn Task.FromResult(0d);\n\n//\t\t\tGroupEntry ge = row.R.CurrentGroups[g.Index];\t// current group entry\n\n\t\t\treturn Task.FromResult((double)row.Level);\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdouble d = await EvaluateDouble(rpt, row);\n\n\t\t\treturn Convert.ToDecimal(d);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            double d = await EvaluateDouble(rpt, row);\n\n            return Convert.ToInt32(d);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrMax.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: max\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrMax : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tprivate TypeCode _tc;\t\t// type of result: decimal or double\n\t\tstring _key;\t\t\t\t// key for caching\n\t\t/// <summary>\n\t\t/// Aggregate function: Max returns the highest value\n\t\t///\tReturn type is same as input expression\t\n\t\t/// </summary>\n        public FunctionAggrMax(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrmax\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\n\t\t\t// Determine the result\n\t\t\t_tc = e.GetTypeCode();\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn _tc;\n\t\t}\n\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn null;\n\n\t\t\tobject v = GetValue(rpt);\n\t\t\tif (v == null)\n\t\t\t{\n\t\t\t\tobject max_value=null;\n\t\t\t\tobject current_value;\n\n\t\t\t\tforeach (Row r in re)\n\t\t\t\t{\n\t\t\t\t\tcurrent_value = await _Expr.Evaluate(rpt, r);\n\t\t\t\t\tif (current_value == null || (current_value is double && double.IsNaN((double)current_value)))\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\telse if (max_value == null)\n\t\t\t\t\t\tmax_value = current_value;\n\t\t\t\t\telse if (Filter.ApplyCompare(_tc, max_value, current_value) < 0)\n\t\t\t\t\t\tmax_value = current_value;\n\t\t\t\t}\n\t\t\t\tv = max_value;\n\t\t\t\tif (bSave)\n\t\t\t\t\tSetValue(rpt, v);\n\t\t\t}\n\t\t\treturn v;\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDouble(result);\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            object result = await Evaluate(rpt, row);\n            return Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tprivate object GetValue(Report rpt)\n\t\t{\n\t\t\treturn rpt.Cache.Get(_key);\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, object o)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, o);\n\t\t}\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrMin.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: min\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrMin : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tprivate TypeCode _tc;\t\t// type of result: decimal or double\n\t\tstring _key;\t\t\t\t// key for caching; when scope is dataset we can cache the result\n\t\t/// <summary>\n\t\t/// Aggregate function: Min returns the lowest value\n\t\t///\tReturn type is same as input expression\t\n\t\t/// </summary>\n        public FunctionAggrMin(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrmax\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\n\t\t\t// Determine the result\n\t\t\t_tc = e.GetTypeCode();\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn _tc;\n\t\t}\n\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn null;\n\n\t\t\tobject v = GetValue(rpt);\n\t\t\tif (v == null)\n\t\t\t{\n\t\t\t\tobject min_value=null;\n\t\t\t\tobject current_value;\n\n\t\t\t\tforeach (Row r in re)\n\t\t\t\t{\n\t\t\t\t\tcurrent_value = await _Expr.Evaluate(rpt, r);\n\t\t\t\t\tif (current_value == null || (current_value is double && double.IsNaN((double)current_value)))\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\telse if (min_value == null)\n\t\t\t\t\t\tmin_value = current_value;\n\t\t\t\t\telse if (Filter.ApplyCompare(_tc, min_value, current_value) > 0)\n\t\t\t\t\t\tmin_value = current_value;\n\t\t\t\t}\n\t\t\t\tv = min_value;\n\t\t\t\tif (bSave)\n\t\t\t\t\tSetValue(rpt, v);\n\t\t\t}\n\t\t\treturn v;\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDouble(result);\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            object result = await Evaluate(rpt, row);\n            return Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tprivate object GetValue(Report rpt)\n\t\t{\n\t\t\treturn rpt.Cache.Get(_key);\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, object o)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, o);\n\t\t}\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrNext.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: next\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrNext : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tprivate TypeCode _tc;\t\t// type of result: depends on type of argument\n\t\tprivate string _key;\n\t\t/// <summary>\n\t\t/// Aggregate function: next returns the next value in a group\n\t\t///\tReturn type is same as input expression\t\n\t\t/// </summary>\n        public FunctionAggrNext(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrnext\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\n\t\t\t// Determine the result\n\t\t\t_tc = e.GetTypeCode();\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn _tc;\n\t\t}\n\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tobject v = null;\n\t\t\tif (row == null)\n\t\t\t\treturn null;\n\t\t\tbool bSave=true;\n\t\t\tRowEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn null;\n\n\t\t\tRow crow=null;\n\t\t\tbool bNext=false;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\tif (bNext)\n\t\t\t\t{\n\t\t\t\t\tcrow = r;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (r.RowNumber == row.RowNumber)\n\t\t\t\t\tbNext = true;\n\t\t\t}\n\t\t\tif (crow != null)\n\t\t\t\tv = await _Expr.Evaluate(rpt, crow);\n\t\t\treturn v;\n\t\t}\n\n\t\tpublic override async Task<bool> EvaluateBoolean(Report rpt,Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn result == null? false: Convert.ToBoolean(result);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn result == null? double.MinValue: Convert.ToDouble(result);\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn result == null? decimal.MinValue: Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            object result = await Evaluate(rpt, row);\n            return result == null ? int.MinValue : Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn result == null? null: Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn result == null? DateTime.MinValue: Convert.ToDateTime(result);\n\t\t}\n\n\t\tprivate object GetValue(Report rpt)\n\t\t{\n\t\t\treturn rpt.Cache.Get(_key);\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, object o)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, o);\n\t\t}\n\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrPrevious.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: next\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrPrevious : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tprivate TypeCode _tc;\t\t// type of result: depends on type of argument\n\t\tprivate string _key;\n\t\t/// <summary>\n\t\t/// Aggregate function: next returns the next value in a group\n\t\t///\tReturn type is same as input expression\t\n\t\t/// </summary>\n        public FunctionAggrPrevious(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrprev\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\n\t\t\t// Determine the result\n\t\t\t_tc = e.GetTypeCode();\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn _tc;\n\t\t}\n\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tobject v = null;\n\t\t\tif (row == null)\n\t\t\t\treturn null;\n\t\t\tbool bSave=true;\n\t\t\tRowEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn null;\n\n\t\t\tRow crow=null;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\tif (r.RowNumber == row.RowNumber)\n\t\t\t\t\tbreak;\n\t\t\t\tcrow = r;\n\t\t\t}\n\t\t\tif (crow != null)\n\t\t\t\tv = await _Expr.Evaluate(rpt, crow);\n\t\t\treturn v;\n\t\t}\n\n\t\tpublic override async Task<bool> EvaluateBoolean(Report rpt,Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn result == null? false: Convert.ToBoolean(result);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn result == null? double.MinValue: Convert.ToDouble(result);\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn result == null? decimal.MinValue: Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            object result = await Evaluate(rpt, row);\n            return result == null ? int.MinValue : Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn result == null? null: Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn result == null? DateTime.MinValue: Convert.ToDateTime(result);\n\t\t}\n\n\t\tprivate object GetValue(Report rpt)\n\t\t{\n\t\t\treturn rpt.Cache.Get(_key);\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, object o)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, o);\n\t\t}\n\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrRvAvg.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: RunningValue avg\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrRvAvg : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tprivate TypeCode _tc;\t\t// type of result: decimal or double\n\t\tstring _key;\t\t\t\t// key for retaining prior rows values\n\t\t/// <summary>\n\t\t/// Aggregate function: RunningValue Sum returns the sum of all values of the\n\t\t///\t\texpression within the scope up to that row\n\t\t///\tReturn type is decimal for decimal expressions and double for all\n\t\t///\tother expressions.\t\n\t\t/// </summary>\n        public FunctionAggrRvAvg(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrrvavg\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\n\t\t\t// Determine the result\n\t\t\t_tc = e.GetTypeCode();\n\t\t\tif (_tc != TypeCode.Decimal)\t// if not decimal\n\t\t\t\t_tc = TypeCode.Double;\t\t// force result to double\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn _tc;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn _tc==TypeCode.Decimal? (object)await EvaluateDecimal(rpt, row): (object)await EvaluateDouble(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn double.NaN;\n\n\t\t\tRow startrow=null;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\tstartrow = r;\t\t\t// We just want the first row\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdouble currentValue = await _Expr.EvaluateDouble(rpt, row);\n\t\t\tWorkClass wc = GetValue(rpt);\n\t\t\tif (row == startrow)\n\t\t\t{\n\t\t\t\t// must be the start of a new group\n\t\t\t\twc.Value = currentValue;\n\t\t\t\twc.Count = 1;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\twc.Value = ((double) wc.Value + currentValue);\n\t\t\t\twc.Count++;\n\t\t\t}\n\n\t\t\treturn (double) wc.Value / wc.Count;\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn decimal.MinValue;\n\n\t\t\tRow startrow=null;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\tstartrow = r;\t\t\t// We just want the first row\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdecimal currentValue = await _Expr.EvaluateDecimal(rpt, row);\n\t\t\tWorkClass wc = GetValue(rpt);\n\t\t\tif (row == startrow)\n\t\t\t{\n\t\t\t\t// must be the start of a new group\n\t\t\t\twc.Value = currentValue;\n\t\t\t\twc.Count = 1;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\twc.Value = ((decimal) wc.Value + currentValue);\n\t\t\t\twc.Count++;\n\t\t\t}\n\n\t\t\treturn (decimal) wc.Value / wc.Count;\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Convert.ToInt32(await Evaluate(rpt, row));\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tprivate WorkClass GetValue(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = rpt.Cache.Get(_key) as WorkClass;\n\t\t\tif (wc == null)\n\t\t\t{\n\t\t\t\twc = new WorkClass();\n\t\t\t\trpt.Cache.Add(_key, wc);\n\t\t\t}\n\t\t\treturn wc;\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, WorkClass w)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, w);\n\t\t}\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\t\tclass WorkClass\n\t\t{\n\t\t\tinternal object Value;\t\t\n\t\t\tinternal int Count;\t\t\t\n\t\t\tinternal WorkClass()\n\t\t\t{\n\t\t\t\tValue = null;\n\t\t\t\tCount = 0;\n\t\t\t}\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrRvCount.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: RunningValue count\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrRvCount : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tstring _key;\t\t\t// key to cached between invocations\n\t\t/// <summary>\n\t\t/// Aggregate function: RunningValue Sum returns the sum of all values of the\n\t\t///\t\texpression within the scope up to that row\n\t\t///\tReturn type is decimal for decimal expressions and double for all\n\t\t///\tother expressions.\t\n\t\t/// </summary>\n        public FunctionAggrRvCount(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrcount\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Int32;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn (object)await EvaluateInt32(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<int> EvaluateInt32(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn int.MinValue;\n\n\t\t\tRow startrow=null;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\tstartrow = r;\t\t\t// We just want the first row\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tint count;\n\n\t\t\tobject currentValue = await _Expr.Evaluate(rpt, row);\n\t\t\tint incr = currentValue == null? 0: 1;\n\t\t\tif (row == startrow)\n\t\t\t{\n\t\t\t\t// must be the start of a new group\n\t\t\t\tcount = incr;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tcount = GetValue(rpt) + incr;\n\t\t\t}\n\n\t\t\tSetValue(rpt, count);\n\t\t\treturn count;\n\t\t}\n\n        public async Task<double> EvaluateDouble(Report rpt, Row row)\n        {\n            return (double)await EvaluateInt32(rpt, row);\n        }\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn (decimal)await EvaluateInt32(rpt, row);\n\t\t}\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\t\tprivate int GetValue(Report rpt)\n\t\t{\n\t\t\tOInt oi = rpt.Cache.Get(_key) as OInt;\n\t\t\treturn oi == null? 0: oi.i;\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, int i)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, new OInt(i));\n\t\t}\n\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrRvMax.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: RunningValue max\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrRvMax : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tprivate TypeCode _tc;\t\t// type of result: decimal or double\n\t\tstring _key;\t\t\t\t// key for cache\n\t\t/// <summary>\n\t\t/// Aggregate function: Running Max returns the highest value to date within a group\n\t\t///\tReturn type is same as input expression\t\n\t\t/// </summary>\n        public FunctionAggrRvMax(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrrvmax\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\n\t\t\t// Determine the result\n\t\t\t_tc = e.GetTypeCode();\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn _tc;\n\t\t}\n\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn null;\n\n\t\t\tRow startrow=null;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\tstartrow = r;\t\t\t// We just want the first row\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tobject current_value = await _Expr.Evaluate(rpt, row);\n\t\t\tif (row == startrow)\n\t\t\t{}\n\t\t\telse\n\t\t\t{\n\t\t\t\tobject v = GetValue(rpt);\n\t\t\t\tif (current_value == null)\n\t\t\t\t\treturn v;\n\t\t\t\telse if (v == null)\n\t\t\t\t{}\t// use the current_value\n\t\t\t\telse if (Filter.ApplyCompare(_tc, v, current_value) < 0)\n\t\t\t\t{}\t// use the current_value\n\t\t\t\telse\n\t\t\t\t\treturn v;\n\t\t\t}\n\t\t\tSetValue(rpt, current_value);\n\t\t\treturn current_value;\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDouble(result);\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            object result = await Evaluate(rpt, row);\n            return Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tprivate object GetValue(Report rpt)\n\t\t{\n\t\t\treturn rpt.Cache.Get(_key);\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, object o)\n\t\t{\n\t\t\tif (o == null)\n\t\t\t\trpt.Cache.Remove(_key);\n\t\t\telse\n\t\t\t\trpt.Cache.AddReplace(_key, o);\n\t\t}\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrRvMin.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: RunningValue min\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrRvMin : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tprivate TypeCode _tc;\t\t// type of result: decimal or double\n\t\tprivate string _key;\t\t// key for caching between invocations\n\t\t/// <summary>\n\t\t/// Aggregate function: Running Max returns the highest value to date within a group\n\t\t///\tReturn type is same as input expression\t\n\t\t/// </summary>\n        public FunctionAggrRvMin(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrrvmin\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\n\t\t\t// Determine the result\n\t\t\t_tc = e.GetTypeCode();\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn _tc;\n\t\t}\n\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn null;\n\n\t\t\tRow startrow=null;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\tstartrow = r;\t\t\t// We just want the first row\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tobject v = GetValue(rpt);\n\t\t\tobject current_value = await _Expr.Evaluate(rpt, row);\n\t\t\tif (row == startrow)\n\t\t\t{}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (current_value == null)\n\t\t\t\t\treturn v;\n\t\t\t\telse if (v == null)\n\t\t\t\t{}\n\t\t\t\telse if (Filter.ApplyCompare(_tc, v, current_value) > 0)\n\t\t\t\t{}\n\t\t\t\telse\n\t\t\t\t\treturn v;\n\t\t\t}\n\t\t\tSetValue(rpt, current_value);\n\t\t\treturn current_value;\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDouble(result);\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            object result = await Evaluate(rpt, row);\n            return Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\t\tprivate object GetValue(Report rpt)\n\t\t{\n\t\t\treturn rpt.Cache.Get(_key);\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, object o)\n\t\t{\n\t\t\tif (o == null)\n\t\t\t\trpt.Cache.Remove(_key);\n\t\t\telse\n\t\t\t\trpt.Cache.AddReplace(_key, o);\n\t\t}\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrRvStdev.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: RunningValue stdev\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrRvStdev : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tstring _key;\t\t\t\t// key for cached between invocations\n\t\t/// <summary>\n\t\t/// Aggregate function: RunningValue Stdev returns the Stdev of all values of the\n\t\t///\t\texpression within the scope up to that row\n\t\t///\tReturn type is double for all expressions.\t\n\t\t/// </summary>\n        public FunctionAggrRvStdev(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrrvstdev\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Double;\n\t\t}\n\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn (object)await EvaluateDouble(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn double.NaN;\n\n\t\t\tRow startrow=null;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\tstartrow = r;\t\t\t// We just want the first row\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tWorkClass wc = GetValue(rpt);\n\t\t\tdouble currentValue = await _Expr.EvaluateDouble(rpt, row);\n\t\t\tif (row == startrow)\n\t\t\t{\n\t\t\t\t// restart the group\n\t\t\t\twc.Sum = wc.Sum2 = 0;\n\t\t\t\twc.Count = 0;\n\t\t\t}\n\t\t\t\n\t\t\tif (currentValue.CompareTo(double.NaN) != 0)\n\t\t\t{\n\t\t\t\twc.Sum += currentValue;\n\t\t\t\twc.Sum2 += (currentValue*currentValue);\n\t\t\t\twc.Count++;\n\t\t\t}\n\n\t\t\tdouble result;\n\t\t\tif (wc.Count > 1)\n\t\t\t\tresult = Math.Sqrt(((wc.Count * wc.Sum2) - (wc.Sum*wc.Sum)) / (wc.Count * (wc.Count-1)));\n\t\t\telse\n\t\t\t\tresult = double.NaN;\n\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdouble d = await EvaluateDouble(rpt, row);\n\t\t\tif (d.CompareTo(double.NaN) == 0)\n\t\t\t\treturn decimal.MinValue;\n\n\t\t\treturn Convert.ToDecimal(d);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            double d = await EvaluateDouble(rpt, row);\n            if (d.CompareTo(double.NaN) == 0)\n                return int.MinValue;\n\n            return Convert.ToInt32(d);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\t\tprivate WorkClass GetValue(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = rpt.Cache.Get(_key) as WorkClass;\n\t\t\tif (wc == null)\n\t\t\t{\n\t\t\t\twc = new WorkClass();\n\t\t\t\trpt.Cache.Add(_key, wc);\n\t\t\t}\n\t\t\treturn wc;\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, WorkClass w)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, w);\n\t\t}\n\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\n\t\tclass WorkClass\n\t\t{\n\t\t\tinternal double Sum;\t\t\n\t\t\tinternal double Sum2;\t\t\n\t\t\tinternal int Count;\t\t\t\n\t\t\tinternal WorkClass()\n\t\t\t{\n\t\t\t\tSum = Sum2 = 0;\n\t\t\t\tCount = -1;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrRvStdevp.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: RunningValue stdevp\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrRvStdevp : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tstring _key;\t\t\t\t// key for caching holding between invocations\n\t\t/// <summary>\n\t\t/// Aggregate function: RunningValue Stdevp returns the Stdevp of all values of the\n\t\t///\t\texpression within the scope up to that row\n\t\t///\tReturn type is double for all expressions.\t\n\t\t/// </summary>\n        public FunctionAggrRvStdevp(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrrvstdevp\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Double;\n\t\t}\n\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn (object)await EvaluateDouble(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn double.NaN;\n\n\t\t\tRow startrow=null;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\tstartrow = r;\t\t\t// We just want the first row\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tWorkClass wc = GetValue(rpt);\n\t\t\tdouble currentValue = await _Expr.EvaluateDouble(rpt, row);\n\t\t\tif (row == startrow)\n\t\t\t{\n\t\t\t\t// restart the group\n\t\t\t\twc.Sum = wc.Sum2 = 0;\n\t\t\t\twc.Count = 0;\n\t\t\t}\n\t\t\t\n\t\t\tif (currentValue.CompareTo(double.NaN) != 0)\n\t\t\t{\n\t\t\t\twc.Sum += currentValue;\n\t\t\t\twc.Sum2 += (currentValue*currentValue);\n\t\t\t\twc.Count++;\n\t\t\t}\n\n\t\t\tdouble result;\n\t\t\tif (wc.Count > 0)\n\t\t\t\tresult = Math.Sqrt(((wc.Count * wc.Sum2) - (wc.Sum*wc.Sum)) / (wc.Count * wc.Count));\n\t\t\telse\n\t\t\t\tresult = double.NaN;\n\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdouble d = await EvaluateDouble(rpt, row);\n\t\t\tif (d.CompareTo(double.NaN) == 0)\n\t\t\t\treturn decimal.MinValue;\n\n\t\t\treturn Convert.ToDecimal(d);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            double d = await EvaluateDouble(rpt, row);\n            if (d.CompareTo(double.NaN) == 0)\n                return int.MinValue;\n\n            return Convert.ToInt32(d);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\t\tprivate WorkClass GetValue(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = rpt.Cache.Get(_key) as WorkClass;\n\t\t\tif (wc == null)\n\t\t\t{\n\t\t\t\twc = new WorkClass();\n\t\t\t\trpt.Cache.Add(_key, wc);\n\t\t\t}\n\t\t\treturn wc;\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, WorkClass w)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, w);\n\t\t}\n\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\n\t\tclass WorkClass\n\t\t{\n\t\t\tinternal double Sum;\t\t\n\t\t\tinternal double Sum2;\t\t\n\t\t\tinternal int Count;\t\t\t\n\t\t\tinternal WorkClass()\n\t\t\t{\n\t\t\t\tSum = Sum2 = 0;\n\t\t\t\tCount = -1;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrRvSum.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: RunningValue sum\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrRvSum : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tprivate TypeCode _tc;\t\t// type of result: decimal or double\n\t\tprivate string _key;\t\t// key for cache of data between invocations\n\t\t/// <summary>\n\t\t/// Aggregate function: RunningValue Sum returns the sum of all values of the\n\t\t///\t\texpression within the scope up to that row\n\t\t///\tReturn type is decimal for decimal expressions and double for all\n\t\t///\tother expressions.\t\n\t\t/// </summary>\n        public FunctionAggrRvSum(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrrvsum\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\n\t\t\t// Determine the result\n\t\t\t_tc = e.GetTypeCode();\n\t\t\tif (_tc != TypeCode.Decimal)\t// if not decimal\n\t\t\t\t_tc = TypeCode.Double;\t\t// force result to double\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn _tc;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn _tc==TypeCode.Decimal? (object)await EvaluateDecimal(rpt, row): (object)await EvaluateDouble(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn double.NaN;\n\n\t\t\tRow startrow=null;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\tstartrow = r;\t\t\t// We just want the first row\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdouble currentValue = await _Expr.EvaluateDouble(rpt, row);\n\t\t\tWorkClass wc = GetValue(rpt);\n\t\t\tif (row == startrow)\n\t\t\t{\n\t\t\t\t// must be the start of a new group\n\t\t\t\twc.Value = currentValue;\n\t\t\t}\n\t\t\telse\n\t\t\t\twc.Value = ((double) wc.Value + currentValue);\n\n\t\t\treturn (double) wc.Value;\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn decimal.MinValue;\n\n\t\t\tRow startrow=null;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\tstartrow = r;\t\t\t// We just want the first row\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tWorkClass wc = GetValue(rpt);\n\t\t\tdecimal currentValue = await _Expr.EvaluateDecimal(rpt, row);\n\t\t\tif (row == startrow)\n\t\t\t{\n\t\t\t\t// must be the start of a new group\n\t\t\t\twc.Value = currentValue;\n\t\t\t}\n\t\t\telse\n\t\t\t\twc.Value = ((decimal) wc.Value + currentValue);\n\n\t\t\treturn (decimal) wc.Value;\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            object result = await Evaluate(rpt, row);\n            return Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\t\tprivate WorkClass GetValue(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = rpt.Cache.Get(_key) as WorkClass;\n\t\t\tif (wc == null)\n\t\t\t{\n\t\t\t\twc = new WorkClass();\n\t\t\t\trpt.Cache.Add(_key, wc);\n\t\t\t}\n\t\t\treturn wc;\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, WorkClass w)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, w);\n\t\t}\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\t\tclass WorkClass\n\t\t{\n\t\t\tinternal object Value;\t\t\n\t\t\tinternal WorkClass()\n\t\t\t{\n\t\t\t\tValue = null;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrRvVar.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: RunningValue var\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrRvVar : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tstring _key;\t\t\t\t// key for cache of data between invocations\n\t\t/// <summary>\n\t\t/// Aggregate function: RunningValue var returns the variance of all values of the\n\t\t///\t\texpression within the scope up to that row\n\t\t///\tReturn type is double for all expressions.\t\n\t\t/// </summary>\n        public FunctionAggrRvVar(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrrvvar\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Double;\n\t\t}\n\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn (object)await EvaluateDouble(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn double.NaN;\n\n\t\t\tRow startrow=null;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\tstartrow = r;\t\t\t// We just want the first row\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tWorkClass wc = GetValue(rpt);\n\t\t\tdouble currentValue = await _Expr.EvaluateDouble(rpt, row);\n\t\t\tif (row == startrow)\n\t\t\t{\n\t\t\t\t// restart the group\n\t\t\t\twc.Sum = wc.Sum2 = 0;\n\t\t\t\twc.Count = 0;\n\t\t\t}\n\t\t\t\n\t\t\tif (currentValue.CompareTo(double.NaN) != 0)\n\t\t\t{\n\t\t\t\twc.Sum += currentValue;\n\t\t\t\twc.Sum2 += (currentValue*currentValue);\n\t\t\t\twc.Count++;\n\t\t\t}\n\n\t\t\tdouble result;\n\t\t\tif (wc.Count > 1)\n\t\t\t\tresult = ((wc.Count * wc.Sum2) - (wc.Sum*wc.Sum)) / (wc.Count * (wc.Count-1));\n\t\t\telse\t\t\n\t\t\t\tresult = double.NaN;\n\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdouble d = await EvaluateDouble(rpt, row);\n\t\t\tif (d.CompareTo(double.NaN) == 0)\n\t\t\t\treturn decimal.MinValue;\n\n\t\t\treturn Convert.ToDecimal(d);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            double d = await EvaluateDouble(rpt, row);\n            if (d.CompareTo(double.NaN) == 0)\n                return int.MinValue;\n\n            return Convert.ToInt32(d);\n        }\n\n        public async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\t\tprivate WorkClass GetValue(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = rpt.Cache.Get(_key) as WorkClass;\n\t\t\tif (wc == null)\n\t\t\t{\n\t\t\t\twc = new WorkClass();\n\t\t\t\trpt.Cache.Add(_key, wc);\n\t\t\t}\n\t\t\treturn wc;\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, WorkClass w)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, w);\n\t\t}\n\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\n\t\tclass WorkClass\n\t\t{\n\t\t\tinternal double Sum;\t\t\n\t\t\tinternal double Sum2;\t\t\n\t\t\tinternal int Count;\t\t\t\n\t\t\tinternal WorkClass()\n\t\t\t{\n\t\t\t\tSum = Sum2 = 0;\n\t\t\t\tCount = -1;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrRvVarp.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: RunningValue varp\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrRvVarp : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tstring _key;\t\t\t\t// key for cache of data between invocations\n\t\t/// <summary>\n\t\t/// Aggregate function: RunningValue var returns the variance of all values of the\n\t\t///\t\texpression within the scope up to that row\n\t\t///\tReturn type is double for all expressions.\t\n\t\t/// </summary>\n        public FunctionAggrRvVarp(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrrvstvarp\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Double;\n\t\t}\n\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn (object)await EvaluateDouble(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn double.NaN;\n\n\t\t\tRow startrow=null;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\tstartrow = r;\t\t\t// We just want the first row\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tWorkClass wc = GetValue(rpt);\n\t\t\tdouble currentValue = await _Expr.EvaluateDouble(rpt, row);\n\t\t\tif (row == startrow)\n\t\t\t{\n\t\t\t\t// restart the group\n\t\t\t\twc.Sum = wc.Sum2 = 0;\n\t\t\t\twc.Count = 0;\n\t\t\t}\n\t\t\t\n\t\t\tif (currentValue.CompareTo(double.NaN) != 0)\n\t\t\t{\n\t\t\t\twc.Sum += currentValue;\n\t\t\t\twc.Sum2 += (currentValue*currentValue);\n\t\t\t\twc.Count++;\n\t\t\t}\n\n\t\t\tdouble result;\n\t\t\tif (wc.Count > 0)\n\t\t\t\tresult = ((wc.Count * wc.Sum2) - (wc.Sum*wc.Sum)) / (wc.Count * wc.Count);\n\t\t\telse\t\t\n\t\t\t\tresult = double.NaN;\n\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdouble d = await EvaluateDouble(rpt, row);\n\t\t\tif (d.CompareTo(double.NaN) == 0)\n\t\t\t\treturn decimal.MinValue;\n\n\t\t\treturn Convert.ToDecimal(d);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            double d = await EvaluateDouble(rpt, row);\n            if (d.CompareTo(double.NaN) == 0)\n                return int.MinValue;\n\n            return Convert.ToInt32(d);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\t\tprivate WorkClass GetValue(Report rpt)\n\t\t{\n\t\t\tWorkClass wc = rpt.Cache.Get(_key) as WorkClass;\n\t\t\tif (wc == null)\n\t\t\t{\n\t\t\t\twc = new WorkClass();\n\t\t\t\trpt.Cache.Add(_key, wc);\n\t\t\t}\n\t\t\treturn wc;\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, WorkClass w)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, w);\n\t\t}\n\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\n\t\tclass WorkClass\n\t\t{\n\t\t\tinternal double Sum;\t\t\n\t\t\tinternal double Sum2;\t\t\n\t\t\tinternal int Count;\t\t\t\n\t\t\tinternal WorkClass()\n\t\t\t{\n\t\t\t\tSum = Sum2 = 0;\n\t\t\t\tCount = -1;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrStdev.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: Stdev\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrStdev : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tstring _key;\t\t\t\t// key for caching when scope is dataset we can cache the result\n\t\t/// <summary>\n\t\t/// Aggregate function: Stdev = (sqrt(n sum(square(x)) - square((sum(x))) / n(n-1)\n\t\t/// Stdev assumes values are a sample of the population of data.  If the data\n\t\t/// is the entire representation then use Stdevp.\n\t\t/// \n\t\t///\tReturn type is decimal for decimal expressions and double for all\n\t\t///\tother expressions.\t\n\t\t/// </summary>\n        public FunctionAggrStdev(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrstdev\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Double;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tdouble d = await EvaluateDouble(rpt, row);\n\t\t\tif (d.CompareTo(double.NaN) == 0)\n\t\t\t\treturn null;\n\t\t\treturn (object) d;\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn double.NaN;\n\n\t\t\tODouble od = GetValue(rpt);\n\t\t\tif (od != null)\n\t\t\t\treturn od.d;\n\n\t\t\tdouble sum=0;\n\t\t\tdouble sum2=0;\n\t\t\tint count=0;\n\t\t\tdouble temp;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\ttemp = await _Expr.EvaluateDouble(rpt, r);\n\t\t\t\tif (temp.CompareTo(double.NaN) != 0)\n\t\t\t\t{\n\t\t\t\t\tsum += temp;\n\t\t\t\t\tsum2 += (temp*temp);\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdouble result;\n\t\t\tif (count > 1)\n\t\t\t{\n\t\t\t\tresult = Math.Sqrt(((count * sum2) - (sum*sum)) / (count * (count-1)));\n\t\t\t}\n\t\t\telse\n\t\t\t\tresult = double.NaN;\n\t\t\t\n\t\t\tif (bSave)\n\t\t\t\tSetValue(rpt, result);\n\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdouble d = await EvaluateDouble(rpt, row);\n\t\t\tif (d.CompareTo(double.NaN) == 0)\n\t\t\t\treturn decimal.MinValue;\n\n\t\t\treturn Convert.ToDecimal(d);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            double d = await EvaluateDouble(rpt, row);\n            if (d.CompareTo(double.NaN) == 0)\n                return int.MinValue;\n\n            return Convert.ToInt32(d);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\tif (result.CompareTo(double.NaN) == 0)\n\t\t\t\treturn null;\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tprivate ODouble GetValue(Report rpt)\n\t\t{\n\t\t\treturn rpt.Cache.Get(_key) as ODouble;\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, double d)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, new ODouble(d));\n\t\t}\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrStdevp.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: Stdevp\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrStdevp : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tstring _key;\t\t\t\t// key for cache when scope is dataset we can cache the result\n\t\t/// <summary>\n\t\t/// Aggregate function: Stdevp = (sqrt(n sum(square(x)) - square((sum(x))) / n*n)\n\t\t/// Stdev assumes values are a sample of the population of data.  If the data\n\t\t/// is the entire representation then use Stdevp.\n\t\t/// \n\t\t///\tReturn type is decimal for decimal expressions and double for all\n\t\t///\tother expressions.\t\n\t\t/// </summary>\n        public FunctionAggrStdevp(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrstdevp\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Double;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tdouble d = await EvaluateDouble(rpt, row);\n\t\t\tif (d.CompareTo(double.NaN) == 0)\n\t\t\t\treturn null;\n\t\t\treturn (object) d;\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn double.NaN;\n\n\t\t\tODouble v = GetValue(rpt);\n\t\t\tif (v != null)\n\t\t\t\treturn v.d;\n\n\t\t\tdouble sum=0;\n\t\t\tdouble sum2=0;\n\t\t\tint count=0;\n\t\t\tdouble temp;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\ttemp = await _Expr.EvaluateDouble(rpt, r);\n\t\t\t\tif (temp.CompareTo(double.NaN) != 0)\n\t\t\t\t{\n\t\t\t\t\tsum += temp;\n\t\t\t\t\tsum2 += (temp*temp);\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdouble result;\n\t\t\tif (count > 0)\n\t\t\t{\n\t\t\t\tresult = Math.Sqrt((((count * sum2) - (sum*sum)) / (count * count)));\n\t\t\t}\n\t\t\telse\n\t\t\t\tresult = double.NaN;\n\n\t\t\tif (bSave)\n\t\t\t\tSetValue(rpt, result);\n\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdouble d = await EvaluateDouble(rpt, row);\n\t\t\tif (d.CompareTo(double.NaN) == 0)\n\t\t\t\treturn decimal.MinValue;\n\n\t\t\treturn Convert.ToDecimal(d);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            double d = await EvaluateDouble(rpt, row);\n            if (d.CompareTo(double.NaN) == 0)\n                return int.MinValue;\n\n            return Convert.ToInt32(d);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\tif (result.CompareTo(double.NaN) == 0)\n\t\t\t\treturn null;\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tprivate ODouble GetValue(Report rpt)\n\t\t{\n\t\t\treturn rpt.Cache.Get(_key) as ODouble;\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, double d)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, new ODouble(d));\n\t\t}\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrSum.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: sum\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrSum : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tprivate TypeCode _tc;\t\t// type of result: decimal or double\n\t\tstring _key;\t\t\t\t// key for cache when scope is dataset we can cache the result\n\t\t/// <summary>\n\t\t/// Aggregate function: Sum returns the sum of all values of the\n\t\t///\t\texpression within the scope\n\t\t///\tReturn type is decimal for decimal expressions and double for all\n\t\t///\tother expressions.\n\t\t/// </summary>\n        public FunctionAggrSum(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrsum\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\n\t\t\t// Determine the result\n\t\t\t_tc = e.GetTypeCode();\n\t\t\tif (_tc != TypeCode.Decimal && _tc != TypeCode.Object)\n\t\t\t\t_tc = TypeCode.Double;\t\t// force result to double\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn _tc;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tswitch (_tc)\n\t\t\t{\n\t\t\t\tcase TypeCode.Decimal:\n\t\t\t\t\treturn (object)await EvaluateDecimal(rpt, row);\n\t\t\t\tcase TypeCode.Object:\n\t\t\t\t\treturn EvaluateObject(rpt, row);\n\t\t\t\tcase TypeCode.Double:\n\t\t\t\tdefault:\n\t\t\t\t\treturn (object)await EvaluateDouble(rpt, row);\n\t\t\t}\n\t\t}\n\n\t\tpublic async Task<object> EvaluateObject(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn null;\n\n\t\t\tvar od = GetValueObject(rpt);\n\t\t\tif (od != null)\n\t\t\t\treturn od;\n\n\t\t\tobject sum = null;\n\t\t\tobject temp;\n\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\ttemp = await _Expr.Evaluate(rpt, r);\n\t\t\t\tif (temp != null)\n\t\t\t\t{\n\t\t\t\t\tif (sum != null)\n\t\t\t\t\t\tsum = temp.GetType().GetMethod(\"op_Addition\").Invoke(null, new []{ sum, temp});\n\t\t\t\t\telse\n\t\t\t\t\t\tsum = temp;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (bSave)\n\t\t\t\tSetValue(rpt, sum);\n\n\t\t\treturn sum;\n\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn double.NaN;\n\n\t\t\tODouble v = GetValueDouble(rpt);\n\t\t\tif (v != null)\n\t\t\t\treturn v.d;\n\n\t\t\tdouble sum=0;\n\t\t\tdouble temp;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\ttemp = await _Expr.EvaluateDouble(rpt, r);\n\t\t\t\tif (temp.CompareTo(double.NaN) != 0)\n\t\t\t\t\tsum += temp;\n\t\t\t}\n\t\t\tif (bSave)\n\t\t\t\tSetValue(rpt, sum);\n\n\t\t\treturn sum;\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            double result = await EvaluateDouble(rpt, row);\n            return Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn decimal.MinValue;\n\n\t\t\tODecimal od = GetValueDecimal(rpt);\n\t\t\tif (od != null)\n\t\t\t\treturn od.d;\n\n\t\t\tdecimal sum=0;\n\t\t\tdecimal temp;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\ttemp = await _Expr.EvaluateDecimal(rpt, r);\n\t\t\t\tif (temp != decimal.MinValue)\t\t// indicate null value\n\t\t\t\t\tsum += temp;\n\t\t\t}\n\t\t\tif (bSave)\n\t\t\t\tSetValue(rpt,sum);\n\n\t\t\treturn sum;\n\t\t}\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tprivate ODecimal GetValueDecimal(Report rpt)\n\t\t{\n\t\t\treturn rpt.Cache.Get(_key) as ODecimal;\n\t\t}\n\n\t\tprivate ODouble GetValueDouble(Report rpt)\n\t\t{\n\t\t\treturn rpt.Cache.Get(_key) as ODouble;\n\t\t}\n\n\t\tprivate object GetValueObject(Report rpt)\n\t\t{\n\t\t\treturn rpt.Cache.Get(_key);\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, double d)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, new ODouble(d));\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, decimal d)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, new ODecimal(d));\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, object d)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, d);\n\t\t}\n\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrVar.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: Variance\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrVar : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tstring _key;\t\t\t\t// key for cache when scope is dataset we can cache the result\n\t\t/// <summary>\n\t\t/// Aggregate function: Var = n sum(square(x)) - square((sum(x))) / n(n-1)\n\t\t/// Stdev assumes values are a sample of the population of data.  If the data\n\t\t/// is the entire representation then use Stdevp.\n\t\t/// </summary>\n        public FunctionAggrVar(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrvar\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Double;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tdouble d = await EvaluateDouble(rpt, row);\n\t\t\tif (d.CompareTo(double.NaN) == 0)\n\t\t\t\treturn null;\n\t\t\treturn (object) d;\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn double.NaN;\n\n\t\t\tODouble od = GetValue(rpt);\n\t\t\tif (od != null)\n\t\t\t\treturn od.d;\n\n\t\t\tdouble sum=0;\n\t\t\tdouble sum2=0;\n\t\t\tint count=0;\n\t\t\tdouble temp;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\ttemp = await _Expr.EvaluateDouble(rpt, r);\n\t\t\t\tif (temp.CompareTo(double.NaN) != 0)\n\t\t\t\t{\n\t\t\t\t\tsum += temp;\n\t\t\t\t\tsum2 += (temp*temp);\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdouble result;\n\t\t\tif (count > 1)\n\t\t\t{\n\t\t\t\tresult = ((count * sum2) - (sum*sum)) / (count * (count-1));\n\t\t\t}\n\t\t\telse\n\t\t\t\tresult = double.NaN;\n\t\t\tif (bSave)\n\t\t\t\tSetValue(rpt, result);\n\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdouble d = await EvaluateDouble(rpt, row);\n\t\t\tif (d.CompareTo(double.NaN) == 0)\n\t\t\t\treturn decimal.MinValue;\n\n\t\t\treturn Convert.ToDecimal(d);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            double d = await EvaluateDouble(rpt, row);\n            if (d.CompareTo(double.NaN) == 0)\n                return int.MinValue;\n\n            return Convert.ToInt32(d);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\tif (result.CompareTo(double.NaN) == 0)\n\t\t\t\treturn null;\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\t\tprivate ODouble GetValue(Report rpt)\n\t\t{\n\t\t\treturn rpt.Cache.Get(_key) as ODouble;\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, double d)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, new ODouble(d));\n\t\t}\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAggrVarp.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Aggregate function: Varp\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAggrVarp : FunctionAggr, IExpr, ICacheData\n\t{\n\t\tstring _key;\t\t\t\t// key for cache when scope is dataset we can cache the result\n\t\t/// <summary>\n\t\t/// Aggregate function: Varp = (n sum(square(x)) - square((sum(x))) / n*n\n\t\t/// Stdev assumes values are a sample of the population of data.  If the data\n\t\t/// is the entire representation then use Stdevp.\n\t\t/// </summary>\n        public FunctionAggrVarp(List<ICacheData> dataCache, IExpr e, object scp)\n            : base(e, scp) \n\t\t{\n\t\t\t_key = \"aggrvar\" + Interlocked.Increment(ref Parser.Counter).ToString();\n\t\t\tdataCache.Add(this);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Double;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tdouble d = await EvaluateDouble(rpt, row);\n\t\t\tif (d.CompareTo(double.NaN) == 0)\n\t\t\t\treturn null;\n\t\t\treturn (object) d;\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tbool bSave=true;\n\t\t\tIEnumerable re = this.GetDataScope(rpt, row, out bSave);\n\t\t\tif (re == null)\n\t\t\t\treturn double.NaN;\n\n\t\t\tODouble v = GetValue(rpt);\n\t\t\tif (v != null)\n\t\t\t\treturn v.d;\n\n\t\t\tdouble sum=0;\n\t\t\tdouble sum2=0;\n\t\t\tint count=0;\n\t\t\tdouble temp;\n\t\t\tforeach (Row r in re)\n\t\t\t{\n\t\t\t\ttemp = await _Expr.EvaluateDouble(rpt, r);\n\t\t\t\tif (temp.CompareTo(double.NaN) != 0)\n\t\t\t\t{\n\t\t\t\t\tsum += temp;\n\t\t\t\t\tsum2 += (temp*temp);\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdouble result;\n\t\t\tif (count > 0)\n\t\t\t\tresult = (((count * sum2) - (sum*sum)) / (count * count));\n\t\t\telse\n\t\t\t\tresult = double.NaN;\n\t\t\tif (bSave)\n\t\t\t\tSetValue(rpt, result);\n\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdouble d = await EvaluateDouble(rpt, row);\n\t\t\tif (d.CompareTo(double.NaN) == 0)\n\t\t\t\treturn decimal.MinValue;\n\n\t\t\treturn Convert.ToDecimal(d);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            double d = await EvaluateDouble(rpt, row);\n            if (d.CompareTo(double.NaN) == 0)\n                return int.MinValue;\n\n            return Convert.ToInt32(d);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\tif (result.CompareTo(double.NaN) == 0)\n\t\t\t\treturn null;\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\t\tprivate ODouble GetValue(Report rpt)\n\t\t{\n\t\t\treturn rpt.Cache.Get(_key) as ODouble;\n\t\t}\n\n\t\tprivate void SetValue(Report rpt, double d)\n\t\t{\n\t\t\trpt.Cache.AddReplace(_key, new ODouble(d));\n\t\t}\n\t\t#region ICacheData Members\n\n\t\tpublic void ClearCache(Report rpt)\n\t\t{\n\t\t\trpt.Cache.Remove(_key);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionAnd.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// And operator of form lhs &amp;&amp; rhs\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionAnd : FunctionBinary, IExpr\n\t{\n\n\t\t/// <summary>\n\t\t/// And two boolean expressions together of the form a &amp;&amp; b\n\t\t/// </summary>\n\t\tpublic FunctionAnd(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Boolean;\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tbool bLeftConst = await _lhs.IsConstant();\n\t\t\tbool bRightConst = await _rhs.IsConstant();\n\t\t\tif (bLeftConst && bRightConst)\n\t\t\t{\n\t\t\t\tbool b = await EvaluateBoolean(null, null);\n\t\t\t\treturn new ConstantBoolean(b);\n\t\t\t}\n\t\t\telse if (bRightConst)\n\t\t\t{\n\t\t\t\tbool b = await _rhs.EvaluateBoolean(null, null);\n\t\t\t\tif (b)\n\t\t\t\t\treturn _lhs;\n\t\t\t\telse \n\t\t\t\t\treturn new ConstantBoolean(false);\n\t\t\t}\n\t\t\telse if (bLeftConst)\n\t\t\t{\n\t\t\t\tbool b = await _lhs.EvaluateBoolean(null, null);\n\t\t\t\tif (b)\n\t\t\t\t\treturn _rhs;\n\t\t\t\telse\n\t\t\t\t\treturn new ConstantBoolean(false);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateBoolean(rpt, row);\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Double.NaN);\n\t\t}\n\t\t\n\t\tpublic Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(decimal.MinValue);\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(int.MinValue);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tbool result = await EvaluateBoolean(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(DateTime.MinValue);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tbool r = await _lhs.EvaluateBoolean(rpt, row);\n\t\t\tif (!r)\n\t\t\t\treturn false;\n\t\t\treturn await _rhs.EvaluateBoolean(rpt, row);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionBinary.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Binary operator\n\t/// </summary>\n\t[Serializable]\n\tinternal abstract class FunctionBinary\n\t{\n\t\tpublic IExpr _lhs;\t\t\t// lhs \n\t\tpublic IExpr _rhs;\t\t\t// rhs\n\n\t\t/// <summary>\n\t\t/// Arbitrary binary operater; might be a\n\t\t/// </summary>\n\t\tpublic FunctionBinary() \n\t\t{\n\t\t\t_lhs = null;\n\t\t\t_rhs = null;\n\t\t}\n\n\t\tpublic FunctionBinary(IExpr l, IExpr r) \n\t\t{\n\t\t\t_lhs = l;\n\t\t\t_rhs = r;\n\t\t}\n\n\t\tpublic async Task<bool> IsConstant()\n\t\t{\n\t\t\tif (await _lhs.IsConstant())\n\t\t\t\treturn await _rhs.IsConstant();\n\n\t\t\treturn false;\n\t\t}\n\n//\t\tvirtual public bool EvaluateBoolean(Report rpt, Row row)\n//\t\t{\n//\t\t\treturn false;\n//\t\t}\n\n\t\tpublic IExpr Lhs\n\t\t{\n\t\t\tget { return  _lhs; }\n\t\t\tset {  _lhs = value; }\n\t\t}\n\n\t\tpublic IExpr Rhs\n\t\t{\n\t\t\tget { return  _rhs; }\n\t\t\tset {  _rhs = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionChoose.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Choose function of the form Choose(int, expr1, expr2, ...)\n\t/// \n\t///\t\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionChoose : IExpr\n\t{\n\t\tIExpr[] _expr;\n\t\tTypeCode _tc;\n\n\t\t/// <summary>\n\t\t/// Choose function of the form Choose(int, expr1, expr2, ...)\n\t\t/// </summary>\n\t\tpublic FunctionChoose(IExpr[] ie) \n\t\t{\n\t\t\t_expr = ie;\n\t\t\t_tc = _expr[1].GetTypeCode();\n\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn _tc;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\t\t// we could be more sophisticated here; but not much benefit\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t// simplify all expression if possible\n\t\t\tfor (int i=0; i < _expr.Length; i++)\n\t\t\t{\n\t\t\t\t_expr[i] = await _expr[i].ConstantOptimization();\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// \n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tdouble di = await _expr[0].EvaluateDouble(rpt, row);\n\t\t\tint i = (int) di;\t\t// force it to integer; we'll accept truncation\n\t\t\tif (i >= _expr.Length || i <= 0)\n\t\t\t\treturn null;\n\t\t\t\n\t\t\treturn await _expr[i].Evaluate(rpt, row);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDouble(result);\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            object result = await Evaluate(rpt, row);\n            return Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionCode.cs",
    "content": "\n\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing Majorsilence.Reporting.Rdl;\nusing System.Threading.Tasks;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Handles calling function in the Code element\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionCode : IExpr\n\t{\n\t\tstring _Func;\t\t// function/operator\n\t\tIExpr[] _Args;\t\t// arguments \n\t\tTypeCode _ReturnTypeCode;\t// the return type\n\t\tType[] _ArgTypes;\t// argument types\n\n\t\t/// <summary>\n\t\t/// passed ReportClass, function name, and args for evaluation\n\t\t/// </summary>\n\t\tpublic FunctionCode(string f, IExpr[] a, TypeCode type) \n\t\t{\n\t\t\t_Func = f;\n\t\t\t_Args = a;\n\t\t\t_ReturnTypeCode = type;\n\n\t\t\t_ArgTypes = new Type[a.Length];\n\t\t\tint i=0;\n\t\t\tforeach (IExpr ex in a)\n\t\t\t{\n\t\t\t\t_ArgTypes[i++] = XmlUtil.GetTypeFromTypeCode(ex.GetTypeCode());\n\t\t\t}\n\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn _ReturnTypeCode;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\t\t// Can't know what the function does\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t// Do constant optimization on all the arguments\n\t\t\tfor (int i=0; i < _Args.GetLength(0); i++)\n\t\t\t{\n\t\t\t\tIExpr e = (IExpr)_Args[i];\n\t\t\t\t_Args[i] = await e.ConstantOptimization();\n\t\t\t}\n\n\t\t\t// Can't assume that the function doesn't vary\n\t\t\t//   based on something other than the args e.g. Now()\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tif (rpt == null || rpt.CodeInstance == null)\n\t\t\t\treturn null;\n\n\t\t\t// get the results\n\t\t\tobject[] argResults = new object[_Args.Length];\n\t\t\tint i=0;\n\t\t\tbool bUseArg=true;\n            bool bNull = false;\n\t\t\tforeach(IExpr a  in _Args)\n\t\t\t{\n\t\t\t\targResults[i] = await a.Evaluate(rpt, row);\n                if (argResults[i] == null)\n                    bNull = true;\n\t\t\t\telse if (argResults[i].GetType() != _ArgTypes[i])\n\t\t\t\t\tbUseArg = false;\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tType[] argTypes = bUseArg || bNull? _ArgTypes: Type.GetTypeArray(argResults);\n\n\t\t\t// We can definitely optimize this by caching some info TODO\n\n\t\t\t// Get ready to call the function\n\t\t\tObject returnVal;\n\n\t\t\tobject inst = rpt.CodeInstance;\n\t\t\tType theClassType=inst.GetType();\n            MethodInfo mInfo = XmlUtil.GetMethod(theClassType, _Func, argTypes);\n            if (mInfo == null)\n            {\n                throw new Exception(string.Format(Strings.FunctionCode_Error_MethodNotFound, _Func));\n            }\n            returnVal = mInfo.Invoke(inst, argResults);\n\n\t\t\treturn returnVal;\n\t\t}\n\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToDouble(await Evaluate(rpt, row));\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToDecimal(await Evaluate(rpt, row));\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Convert.ToInt32(await Evaluate(rpt, row));\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToString(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToDateTime(await Evaluate(rpt, row));\n\t\t}\n\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToBoolean(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic string Func\n\t\t{\n\t\t\tget { return  _Func; }\n\t\t\tset {  _Func = value; }\n\t\t}\n\n\t\tpublic IExpr[] Args\n\t\t{\n\t\t\tget { return  _Args; }\n\t\t\tset {  _Args = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionCustomInstance.cs",
    "content": "\n\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing Majorsilence.Reporting.Rdl;\nusing System.Threading.Tasks;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Process a custom instance method request.\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionCustomInstance : IExpr\n\t{\n\t\tstring _Cls;\t\t// class name\n\t\tstring _Func;\t\t// function/operator\n\t\tIExpr[] _Args;\t\t// arguments \n\t\tReportClass _Rc;\t// ReportClass\n\t\tTypeCode _ReturnTypeCode;\t// the return type\n\t\tType[] _ArgTypes;\t// argument types\n\n\t\t/// <summary>\n\t\t/// passed ReportClass, function name, and args for evaluation\n\t\t/// </summary>\n\t\tpublic FunctionCustomInstance(ReportClass rc, string f, IExpr[] a, TypeCode type) \n\t\t{\n\t\t\t_Cls = null;\n\t\t\t_Func = f;\n\t\t\t_Args = a;\n\t\t\t_Rc = rc;\n\t\t\t_ReturnTypeCode = type;\n\n\t\t\t_ArgTypes = new Type[a.Length];\n\t\t\tint i=0;\n\t\t\tforeach (IExpr ex in a)\n\t\t\t{\n\t\t\t\t_ArgTypes[i++] = XmlUtil.GetTypeFromTypeCode(ex.GetTypeCode());\n\t\t\t}\n\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn _ReturnTypeCode;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\t\t// Can't know what the function does\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t// Do constant optimization on all the arguments\n\t\t\tfor (int i=0; i < _Args.GetLength(0); i++)\n\t\t\t{\n\t\t\t\tIExpr e = (IExpr)_Args[i];\n\t\t\t\t_Args[i] = await e.ConstantOptimization();\n\t\t\t}\n\n\t\t\t// Can't assume that the function doesn't vary\n\t\t\t//   based on something other than the args e.g. Now()\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\t// get the results\n\t\t\tobject[] argResults = new object[_Args.Length];\n\t\t\tint i=0;\n\t\t\tbool bUseArg=true;\n            bool bNull = false;\n\t\t\tforeach(IExpr a  in _Args)\n\t\t\t{\n\t\t\t\targResults[i] = await a.Evaluate(rpt, row);\n                if (argResults[i] == null)\n                    bNull = true;\n\t\t\t\telse if (argResults[i].GetType() != _ArgTypes[i])\n\t\t\t\t\tbUseArg = false;\n\t\t\t\ti++;\n\t\t\t}\n\t\t\t// we build the arguments based on the type\n\t\t\tType[] argTypes = bUseArg || bNull? _ArgTypes: Type.GetTypeArray(argResults);\n\n\t\t\t// We can definitely optimize this by caching some info TODO\n\n\t\t\t// Get ready to call the function\n\t\t\tObject returnVal;\n\n\t\t\tobject inst = _Rc.Instance(rpt);\n\t\t\tType theClassType=inst.GetType();\n            MethodInfo mInfo = XmlUtil.GetMethod(theClassType, _Func, argTypes);\n            if (mInfo == null)\n            {\n                throw new Exception(string.Format(Strings.FunctionCustomInstance_Error_MethodNotFoundInClass, _Func, _Cls));\n            }\n            \n            returnVal = mInfo.Invoke(inst, argResults);\n\n\t\t\treturn returnVal;\n\t\t}\n\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToDouble(await Evaluate(rpt, row));\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToDecimal(await Evaluate(rpt, row));\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Convert.ToInt32(await Evaluate(rpt, row));\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToString(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToDateTime(await Evaluate(rpt, row));\n\t\t}\n\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToBoolean(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic string Cls\n\t\t{\n\t\t\tget { return  _Cls; }\n\t\t\tset {  _Cls = value; }\n\t\t}\n\n\t\tpublic string Func\n\t\t{\n\t\t\tget { return  _Func; }\n\t\t\tset {  _Func = value; }\n\t\t}\n\n\t\tpublic IExpr[] Args\n\t\t{\n\t\t\tget { return  _Args; }\n\t\t\tset {  _Args = value; }\n\t\t}\n\t}\n\n#if DEBUG\n\tinternal class TestFunction\t\t// for testing CodeModules, Classes, and the Function class\n\t{\n\t\tint counter=0;\n\t\tpublic TestFunction()\t\t\n\t\t{\n\t\t\tcounter=0;\n\t\t}\n\n\t\tpublic int count()\n\t\t{\n\t\t\treturn counter++;\n\t\t}\n\t\t\n\t\tpublic int count(string s)\n\t\t{\n\t\t\tcounter++;\n\t\t\treturn Convert.ToInt32(s) + counter; \n\t\t}\n\n\t\tstatic public double sqrt(double x)\n\t\t{\n\t\t\treturn Math.Sqrt(x);\n\t\t}\n\t}\n#endif\n\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionCustomStatic.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.RdlEngine.Resources;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Process a custom static method invokation.\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionCustomStatic : IExpr\n\t{\n\t\tstring _Cls;\t\t// class name\n\t\tstring _Func;\t\t// function/operator\n\t\tIExpr[] _Args;\t\t// arguments \n\t\tCodeModules _Cm;\t\t// the loaded assemblies\n\t\tTypeCode _ReturnTypeCode;\t// the return type\n\t\tType[] _ArgTypes;\t// argument types\n\n\t\t/// <summary>\n\t\t/// passed class name, function name, and args for evaluation\n\t\t/// </summary>\n\t\tpublic FunctionCustomStatic(CodeModules cm, string c, string f, IExpr[] a, TypeCode type) \n\t\t{\n\t\t\t_Cls = c;\n\t\t\t_Func = f;\n\t\t\t_Args = a;\n\t\t\t_Cm = cm;\n\t\t\t_ReturnTypeCode = type;\n\n\t\t\t_ArgTypes = new Type[a.Length];\n\t\t\tint i=0;\n\t\t\tforeach (IExpr ex in a)\n\t\t\t{\n\t\t\t\t_ArgTypes[i++] = XmlUtil.GetTypeFromTypeCode(ex.GetTypeCode());\n\t\t\t}\n\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn _ReturnTypeCode;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\t\t// Can't know what the function does\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t// Do constant optimization on all the arguments\n\t\t\tfor (int i=0; i < _Args.GetLength(0); i++)\n\t\t\t{\n\t\t\t\tIExpr e = (IExpr)_Args[i];\n\t\t\t\t_Args[i] = await e.ConstantOptimization();\n\t\t\t}\n\n\t\t\t// Can't assume that the function doesn't vary\n\t\t\t//   based on something other than the args e.g. Now()\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\t// get the results\n\t\t\tobject[] argResults = new object[_Args.Length];\n\t\t\tint i=0;\n\t\t\tbool bUseArg=true;\n\t\t\tforeach(IExpr a  in _Args)\n\t\t\t{\n\t\t\t\targResults[i] = await a.Evaluate(rpt, row);\n\t\t\t\tif (argResults[i] != null && argResults[i].GetType() != _ArgTypes[i])\n\t\t\t\t\tbUseArg = false;\n\t\t\t\ti++;\n\t\t\t}\n\t\t\t// we build the arguments based on the type\n\t\t\tType[] argTypes = bUseArg? _ArgTypes: Type.GetTypeArray(argResults);\n\n\t\t\t// We can definitely optimize this by caching some info TODO\n\n\t\t\t// Get ready to call the function\n\t\t\tObject returnVal;\n\t\t\tType theClassType= _Cm[_Cls];\n            MethodInfo mInfo = XmlUtil.GetMethod(theClassType, _Func, argTypes);\n            if (mInfo == null)\n            {\n                throw new Exception(string.Format(Strings.FunctionCustomStatic_Error_MethodNotFoundInClass, _Func, _Cls));\n            }\n\n            returnVal = mInfo.Invoke(theClassType, argResults);\n\n\t\t\treturn returnVal;\n\t\t}\n\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToDouble(await Evaluate(rpt, row));\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToDecimal(await Evaluate(rpt, row));\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Convert.ToInt32(await Evaluate(rpt, row));\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToString(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToDateTime(await Evaluate(rpt, row));\n\t\t}\n\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToBoolean(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic string Cls\n\t\t{\n\t\t\tget { return  _Cls; }\n\t\t\tset {  _Cls = value; }\n\t\t}\n\n\t\tpublic string Func\n\t\t{\n\t\t\tget { return  _Func; }\n\t\t\tset {  _Func = value; }\n\t\t}\n\n\t\tpublic IExpr[] Args\n\t\t{\n\t\t\tget { return  _Args; }\n\t\t\tset {  _Args = value; }\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionDiv.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Division operator  of form lhs / rhs\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionDiv : FunctionBinary, IExpr\n\t{\n\n\t\t/// <summary>\n\t\t/// Do division on double data types\n\t\t/// </summary>\n\t\tpublic FunctionDiv() \n\t\t{\n\t\t}\n\n\t\tpublic FunctionDiv(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Double;\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tbool bLeftConst = await _lhs.IsConstant();\n\t\t\tbool bRightConst = await _rhs.IsConstant();\n\t\t\tif (bLeftConst && bRightConst)\n\t\t\t{\n\t\t\t\tdouble d = await EvaluateDouble(null, null);\n\t\t\t\treturn new ConstantDouble(d);\n\t\t\t}\n\t\t\telse if (bRightConst)\n\t\t\t{\n\t\t\t\tdouble d = await _rhs.EvaluateDouble(null, null);\n\t\t\t\tif (d == 1)\n\t\t\t\t\treturn _lhs;\n\t\t\t}\n\t\t\telse if (bLeftConst)\n\t\t\t{\n\t\t\t\tdouble d = await _lhs.EvaluateDouble(null, null);\n\t\t\t\tif (d == 0)\n\t\t\t\t\treturn new ConstantDouble(0);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateDouble(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tdouble lhs = await _lhs.EvaluateDouble(rpt, row);\n\t\t\tdouble rhs = await _rhs.EvaluateDouble(rpt, row);\n\n\t\t\treturn lhs/rhs;\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            double result = await EvaluateDouble(rpt, row);\n\n            return Convert.ToInt32(result);\n        }\n\n        public async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionDivDecimal.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Division operator  of form lhs / rhs where both arguments are decimal.\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionDivDecimal : FunctionBinary, IExpr\n\t{\n\t\t/// <summary>\n\t\t/// Do division on decimal data types\n\t\t/// </summary>\n\t\tpublic FunctionDivDecimal() \n\t\t{\n\t\t\t_lhs = null;\n\t\t\t_rhs = null;\n\t\t}\n\n\t\tpublic FunctionDivDecimal(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Decimal;\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tbool bLeftConst = await _lhs.IsConstant();\n\t\t\tbool bRightConst = await _rhs.IsConstant();\n\t\t\tif (bLeftConst && bRightConst)\n\t\t\t{\n\t\t\t\tdecimal d = await EvaluateDecimal(null, null);\n\t\t\t\treturn new ConstantDecimal(d);\n\t\t\t}\n\t\t\telse if (bRightConst)\n\t\t\t{\n\t\t\t\tdecimal d = await _rhs.EvaluateDecimal(null, null);\n\t\t\t\tif (d == 1m)\n\t\t\t\t\treturn _lhs;\n\t\t\t}\n\t\t\telse if (bLeftConst)\n\t\t\t{\n\t\t\t\tdecimal d = await _lhs.EvaluateDecimal(null, null);\n\t\t\t\tif (d == 0)\n\t\t\t\t\treturn new ConstantDecimal(0m);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateDecimal(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal result = await EvaluateDecimal(rpt, row);\n\n\t\t\treturn Convert.ToDouble(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            decimal result = await EvaluateDecimal(rpt, row);\n\n            return Convert.ToInt32(result);\n        }\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal lhs = await _lhs.EvaluateDecimal(rpt, row);\n\t\t\tdecimal rhs = await _rhs.EvaluateDecimal(rpt, row);\n\n\t\t\treturn (decimal) (lhs/rhs);\n\t\t}\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal result = await EvaluateDecimal(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal result = await EvaluateDecimal(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionExecutionTime.cs",
    "content": "\nusing System;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// DateTime Report started; actually the time that data is retrieved\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionExecutionTime : IExpr\n\t{\n\t\t/// <summary>\n\t\t/// DateTime report started\n\t\t/// </summary>\n\t\tpublic FunctionExecutionTime() \n\t\t{\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.DateTime;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic Task<IExpr> ConstantOptimization()\n\t\t{\t// not a constant expression\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\t// Evaluate is for interpretation  \n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateDateTime(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\t\n\t\t\tDateTime result = await EvaluateDateTime(rpt, row);\n\t\t\treturn Convert.ToDouble(result);\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tDateTime result = await EvaluateDateTime(rpt, row);\n\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            DateTime result = await EvaluateDateTime(rpt, row);\n\n            return Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tDateTime result = await EvaluateDateTime(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(rpt.ExecutionTime);\n\t\t}\n\t\t\n\t\tpublic Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionExp.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Exponentiation operator  of form lhs ^ rhs\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionExp : FunctionBinary, IExpr\n\t{\n\n\t\t/// <summary>\n\t\t/// Do exponentiation on double data types\n\t\t/// </summary>\n\t\tpublic FunctionExp() \n\t\t{\n\t\t}\n\n\t\tpublic FunctionExp(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Double;\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tbool bLeftConst = await _lhs.IsConstant();\n\t\t\tbool bRightConst = await _rhs.IsConstant();\n\t\t\tif (bLeftConst && bRightConst)\n\t\t\t{\n\t\t\t\tdouble d = await EvaluateDouble(null, null);\n\t\t\t\treturn new ConstantDouble(d);\n\t\t\t}\n\t\t\telse if (bRightConst)\n\t\t\t{\n\t\t\t\tdouble d = await _rhs.EvaluateDouble(null, null);\n\t\t\t\tif (d == 1)\n\t\t\t\t\treturn _lhs;\n\t\t\t}\n\t\t\telse if (bLeftConst)\n\t\t\t{\n\t\t\t\tdouble d = await _lhs.EvaluateDouble(null, null);\n\t\t\t\tif (d == 0)\n\t\t\t\t\treturn new ConstantDouble(0);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateDouble(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tdouble lhs = await _lhs.EvaluateDouble(rpt, row);\n\t\t\tdouble rhs = await _rhs.EvaluateDouble(rpt, row);\n\n\t\t\treturn Math.Pow(lhs,rhs);\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            double result = await EvaluateDouble(rpt, row);\n\n            return Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionField.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Globalization;\n\nusing Majorsilence.Reporting.Rdl;\nusing System.Threading.Tasks;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Obtain the the Field's value from a row.\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionField : IExpr\n\t{\n\t\tprotected Field f;\t\n\t\tprivate string _Name;\t\t// when we have an unresolved field;\n\n\t\t/// <summary>\n\t\t/// obtain value of Field\n\t\t/// </summary>\n\t\tpublic FunctionField(Field fld) \n\t\t{\n\t\t\tf = fld;\n\t\t}\n\n\t\tpublic FunctionField(string name) \n\t\t{\n\t\t\t_Name = name;\n\t\t}\n\n\t\tpublic string Name\n\t\t{\n\t\t\tget {return _Name;}\n\t\t}\n\n\t\tpublic virtual TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn f.RunType;\n\t\t}\n\n\t\tpublic virtual Field Fld\n\t\t{\n\t\t\tget { return f; }\n\t\t\tset { f = value; }\n\t\t}\n\n\t\tpublic virtual Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic virtual async Task<IExpr> ConstantOptimization()\n\t\t{\t\n\t\t\tif (f.Value != null)\n\t\t\t\treturn await f.Value.ConstantOptimization();\n\n\t\t\treturn this;\t// not a constant\n\t\t}\n\n\t\t// \n\t\tpublic virtual async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn null;\n\t\t\tobject o;\n\t\t\tif (f.Value != null)\n\t\t\t\to = await f.Value.Evaluate(rpt, row);\n\t\t\telse\n\t\t\t\to = row.Data[f.ColumnNumber];\n\n            if (o == DBNull.Value)\n            {\n                if (IsNumericType(f.RunType))\n                    return double.NaN;\n                else\n                    return null;\n            }\n\t\t\tif (f.RunType == TypeCode.String && o is char)\t// work around; mono odbc driver confuses string and char\n\t\t\t\to = Convert.ChangeType(o, TypeCode.String);\n\t\t\t\n\t\t\treturn o;\n\t\t}\n\n        private bool IsNumericType(TypeCode tc)\n        {\n            switch (tc)\n            {\n                case TypeCode.Double:\n                case TypeCode.Decimal:\n                case TypeCode.Int16:\n                case TypeCode.Int32:\n                case TypeCode.Int64:\n                case TypeCode.Single:\n                case TypeCode.UInt16:\n                case TypeCode.UInt32:\n                case TypeCode.UInt64:\n                    return true;\n                default:\n                    return false;\n            }\n        }\n\n\t\tpublic virtual async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn Double.NaN;\n\t\t\treturn Convert.ToDouble(await Evaluate(rpt, row), NumberFormatInfo.InvariantInfo);\n\t\t}\n\t\t\n\t\tpublic virtual async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn decimal.MinValue;\n\t\t\tvar value = await Evaluate(rpt, row);\n\t\t\tif (value is double && double.IsNaN((double)value))\n\t\t\t\treturn decimal.MinValue;\n\t\t\treturn Convert.ToDecimal(value, NumberFormatInfo.InvariantInfo);\n\t\t}\n\n        public virtual async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            if (row == null)\n                return int.MinValue;\n            return Convert.ToInt32(await Evaluate(rpt, row), NumberFormatInfo.InvariantInfo);\n        }\n\n\t\tpublic virtual async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn null;\n\t\t\treturn Convert.ToString(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic virtual async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn DateTime.MinValue;\n\t\t\treturn Convert.ToDateTime(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic virtual async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn false;\n\t\t\treturn Convert.ToBoolean(await Evaluate(rpt, row));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionFieldCollection.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Globalization;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing Majorsilence.Reporting.Rdl;\nusing System.Threading.Tasks;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Fields referenced dynamically (e.g. Fields(expr) are handled by this class.\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionFieldCollection : IExpr\n\t{\n\t\tprivate IDictionary _Fields;\n\t\tprivate IExpr _ArgExpr;\n\n\t\t/// <summary>\n\t\t/// obtain value of Field\n\t\t/// </summary>\n\t\tpublic FunctionFieldCollection(IDictionary fields, IExpr arg) \n\t\t{\n\t\t\t_Fields = fields;\n\t\t\t_ArgExpr = arg;\n\t\t}\n\n\t\tpublic virtual TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Object;\t\t// we don't know the typecode until we run the function\n\t\t}\n\n\t\tpublic virtual Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic virtual async Task<IExpr> ConstantOptimization()\n\t\t{\t\n\t\t\t_ArgExpr = await _ArgExpr.ConstantOptimization();\n\n\t\t\tif (await _ArgExpr.IsConstant())\n\t\t\t{\n\t\t\t\tstring o = await _ArgExpr.EvaluateString(null, null);\n\t\t\t\tif (o == null)\n\t\t\t\t\tthrow new Exception(Strings.FunctionFieldCollection_Error_FieldCollectionNull); \n\t\t\t\tField f = _Fields[o] as Field;\n\t\t\t\tif (f == null)\n\t\t\t\t\tthrow new Exception(string.Format(Strings.FunctionFieldCollection_Error_FieldCollectionInvalid, o)); \n\t\t\t\treturn new FunctionField(f);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// \n\t\tpublic virtual async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn null;\n\t\t\tField f;\n\t\t\tstring field = await _ArgExpr.EvaluateString(rpt, row);\n\t\t\tif (field == null)\n\t\t\t\treturn null;\n\t\t\tf = _Fields[field] as Field;\n\t\t\tif (f == null)\n\t\t\t\treturn null;\n\n\t\t\tobject o;\n\t\t\tif (f.Value != null)\n\t\t\t\to = await f.Value.Evaluate(rpt, row);\n\t\t\telse\n\t\t\t\to = row.Data[f.ColumnNumber];\n\n\t\t\tif (o == DBNull.Value)\n\t\t\t\treturn null;\n\n\t\t\tif (f.RunType == TypeCode.String && o is char)\t// work around; mono odbc driver confuses string and char\n\t\t\t\to = Convert.ChangeType(o, TypeCode.String);\n\t\t\t\n\t\t\treturn o;\n\t\t}\n\t\t\n\t\tpublic virtual async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn Double.NaN;\n\t\t\treturn Convert.ToDouble(await Evaluate(rpt, row), NumberFormatInfo.InvariantInfo);\n\t\t}\n\t\t\n\t\tpublic virtual async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn decimal.MinValue;\n\t\t\treturn Convert.ToDecimal(await Evaluate(rpt, row), NumberFormatInfo.InvariantInfo);\n\t\t}\n\n        public virtual async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            if (row == null)\n                return int.MinValue;\n            return Convert.ToInt32(await Evaluate(rpt, row), NumberFormatInfo.InvariantInfo);\n        }\n\n\t\tpublic virtual async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn null;\n\t\t\treturn Convert.ToString(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic virtual async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn DateTime.MinValue;\n\t\t\treturn Convert.ToDateTime(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic virtual async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn false;\n\t\t\treturn Convert.ToBoolean(await Evaluate(rpt, row));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionFieldIsMissing.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// IsMissing attribute\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionFieldIsMissing : FunctionField\n\t{\n\t\t/// <summary>\n\t\t/// Determine if value of Field is available\n\t\t/// </summary>\n\t\tpublic FunctionFieldIsMissing(Field fld) : base(fld)\n\t\t{\n\t\t}\n\t\tpublic FunctionFieldIsMissing(string method) : base(method)\n\t\t{\n\t\t}\n\n\t\tpublic override TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Boolean;\n\t\t}\n\n\t\tpublic override Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic override Task<IExpr> ConstantOptimization()\n\t\t{\t\n\t\t\treturn Task.FromResult(this as IExpr);\t// not a constant\n\t\t}\n\n\t\t// \n\t\tpublic override async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateBoolean(rpt, row);\n\t\t}\n\t\t\n\t\tpublic override async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateBoolean(rpt, row)? 1: 0;\n\t\t}\n\t\t\n\t\tpublic override async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateBoolean(rpt, row)? 1m: 0m;\n\t\t}\n\n\t\tpublic override async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateBoolean(rpt, row)? \"True\": \"False\";\n\t\t}\n\n\t\tpublic override Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(DateTime.MinValue);\n\t\t}\n\n\t\tpublic override async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tobject o = await base.Evaluate(rpt, row);\n\t\t\tif(o is double)\n\t\t\t\treturn double.IsNaN((double)o) ? true : false;\n\t\t\telse\n\t\t\t\treturn o == null? true: false;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionFormat.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Format function: Format(expr, string expr format)\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionFormat : IExpr\n\t{\n\t\tIExpr _Formatee;\t// object to format\n\t\tIExpr _Format;\t\t// format string\n\t\t/// <summary>\n\t\t/// Format an object\n\t\t/// </summary>\n\t\tpublic FunctionFormat(IExpr formatee, IExpr format) \n\t\t{\n\t\t\t_Formatee = formatee;\n\t\t\t_Format= format;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.String;\n\t\t}\n\n\t\t// \n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateString(rpt, row);\n\t\t}\n\n\t\tpublic async Task<bool> IsConstant()\n\t\t{\n\t\t\tif (await _Formatee.IsConstant())\n\t\t\t\treturn await _Format.IsConstant();\n\n\t\t\treturn false;\n\t\t}\n\t\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_Formatee = await _Formatee.ConstantOptimization();\n\t\t\t_Format = await _Format.ConstantOptimization();\n\t\t\tif (await _Formatee.IsConstant() && await _Format.IsConstant())\n\t\t\t{\n\t\t\t\tstring s = await EvaluateString(null, null);\n\t\t\t\treturn new ConstantString(s);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\t\t\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tstring result = await EvaluateString(rpt, row);\n\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tstring result = await EvaluateString(rpt, row);\n\n\t\t\treturn Convert.ToDouble(result);\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tstring result = await EvaluateString(rpt, row);\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            string result = await EvaluateString(rpt, row);\n            return Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject o = await _Formatee.Evaluate(rpt, row);\n\t\t\tif (o == null)\n\t\t\t\treturn null;\n\t\t\tstring format = await _Format.EvaluateString(rpt, row);\n\t\t\tif (format == null)\n\t\t\t\treturn o.ToString();\t// just return string version of object\n\n\t\t\tstring result=null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tresult = String.Format(\"{0:\" + format + \"}\", o);\n\t\t\t}\n\t\t\tcatch (Exception ex) \t\t// invalid format string specified\n\t\t\t{           //    treat as a weak error\n\t\t\t\trpt.rl.LogError(2, String.Format(\"Format string:{1} Value Type:{2} Exception:{0}\", ex.Message, format, o.GetType().Name));\n\t\t\t\tresult = o.ToString();\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tstring result = await EvaluateString(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionGlobalCollection.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Globalization;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing Majorsilence.Reporting.Rdl;\nusing System.Threading.Tasks;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Global fields accessed dynamically. i.e. Globals(expr).\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionGlobalCollection : IExpr\n\t{\n\t\tprivate IDictionary _Globals;\n\t\tprivate IExpr _ArgExpr;\n\n\t\t/// <summary>\n\t\t/// obtain value of Field\n\t\t/// </summary>\n\t\tpublic FunctionGlobalCollection(IDictionary globals, IExpr arg) \n\t\t{\n\t\t\t_Globals = globals;\n\t\t\t_ArgExpr = arg;\n\t\t}\n\n\t\tpublic virtual TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Object;\t\t// we don't know the typecode until we run the function\n\t\t}\n\n\t\tpublic virtual Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic virtual async Task<IExpr> ConstantOptimization()\n\t\t{\t\n\t\t\t_ArgExpr = await _ArgExpr.ConstantOptimization();\n\n\t\t\tif (await _ArgExpr.IsConstant())\n\t\t\t{\n\t\t\t\tstring o = await _ArgExpr.EvaluateString(null, null);\n\t\t\t\tif (o == null)\n\t\t\t\t\tthrow new Exception(Strings.FunctionGlobalCollection_Error_GlobalsNull); \n\t\t\t\tswitch (o.ToLower())\n\t\t\t\t{\n\t\t\t\t\tcase \"pagenumber\":\n\t\t\t\t\t\treturn new FunctionPageNumber();\n\t\t\t\t\tcase \"totalpages\":\n\t\t\t\t\t\treturn new FunctionTotalPages();\n\t\t\t\t\tcase \"executiontime\":\n\t\t\t\t\t\treturn new FunctionExecutionTime();\n\t\t\t\t\tcase \"reportfolder\":\n\t\t\t\t\t\treturn new FunctionReportFolder();\n\t\t\t\t\tcase \"reportname\":\n\t\t\t\t\t\treturn new FunctionReportName();\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Exception(string.Format(Strings.FunctionGlobalCollection_Error_GlobalsUnknown, o)); \n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// \n\t\tpublic virtual async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tif (rpt == null)\n\t\t\t\treturn null;\n\n\t\t\tstring g = await _ArgExpr.EvaluateString(rpt, row);\n\t\t\tif (g == null)\n\t\t\t\treturn null;\n\n\t\t\tswitch (g.ToLower())\n\t\t\t{\n\t\t\t\tcase \"pagenumber\":\n\t\t\t\t\treturn rpt.PageNumber;\n\t\t\t\tcase \"totalpages\":\n\t\t\t\t\treturn rpt.TotalPages;\n\t\t\t\tcase \"executiontime\":\n\t\t\t\t\treturn rpt.ExecutionTime;\n\t\t\t\tcase \"reportfolder\":\n\t\t\t\t\treturn rpt.Folder;\n\t\t\t\tcase \"reportname\":\n\t\t\t\t\treturn rpt.Name;\n\t\t\t\tdefault:\n\t\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic virtual async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn Double.NaN;\n\t\t\treturn Convert.ToDouble(await Evaluate(rpt, row), NumberFormatInfo.InvariantInfo);\n\t\t}\n\t\t\n\t\tpublic virtual async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn decimal.MinValue;\n\t\t\treturn Convert.ToDecimal(await Evaluate(rpt, row), NumberFormatInfo.InvariantInfo);\n\t\t}\n\n        public virtual async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            if (row == null)\n                return int.MinValue;\n            return Convert.ToInt32(await Evaluate(rpt, row), NumberFormatInfo.InvariantInfo);\n        }\n\n        public virtual async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn null;\n\t\t\treturn Convert.ToString(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic virtual async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn DateTime.MinValue;\n\t\t\treturn Convert.ToDateTime(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic virtual async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn false;\n\t\t\treturn Convert.ToBoolean(await Evaluate(rpt, row));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionIif.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// iif function of the form iif(boolean, expr1, expr2)\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionIif : IExpr\n\t{\n\t\tIExpr _If;\t\t// boolean expression\n\t\tIExpr _IfTrue;\t\t// result if true\n\t\tIExpr _IfFalse;\t\t// result if false\n\n\t\t/// <summary>\n\t\t/// Handle iif operator\n\t\t/// </summary>\n\t\tpublic FunctionIif(IExpr ife, IExpr ifTrue, IExpr ifFalse) \n\t\t{\n\t\t\t_If = ife;\n\t\t\t_IfTrue = ifTrue;\n\t\t\t_IfFalse = ifFalse;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn _IfTrue.GetTypeCode();\n\t\t}\n\n\t\tpublic async Task<bool> IsConstant()\n\t\t{\n\t\t\treturn await _If.IsConstant() && await _IfTrue.IsConstant() && await _IfFalse.IsConstant();\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_If = await _If.ConstantOptimization();\n\t\t\t_IfTrue = await _IfTrue.ConstantOptimization();\n\t\t\t_IfFalse = await _IfFalse.ConstantOptimization();\n\n\t\t\tif (await _If.IsConstant())\n\t\t\t{\n\t\t\t\tbool result = await _If.EvaluateBoolean(null, null);\n\t\t\t\treturn result? _IfTrue: _IfFalse;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tbool result = await _If.EvaluateBoolean(rpt, row);\n\t\t\tif (result)\n\t\t\t\treturn await _IfTrue.Evaluate(rpt, row);\n\n\t\t\tobject o = await _IfFalse.Evaluate(rpt, row);\n\t\t\t// We may need to convert IfFalse to same type as IfTrue\n\t\t\tif (_IfTrue.GetTypeCode() == _IfFalse.GetTypeCode())\n\t\t\t\treturn o;\n\n\t\t\treturn Convert.ChangeType(o, _IfTrue.GetTypeCode());\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDouble(result);\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            object result = await Evaluate(rpt, row);\n            return Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionMinus.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Minus operator  of form lhs - rhs\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionMinus : FunctionBinary, IExpr\n\t{\n\t\t/// <summary>\n\t\t/// Do minus on double data types\n\t\t/// </summary>\n\t\tpublic FunctionMinus() \n\t\t{\n\t\t\t_lhs = null;\n\t\t\t_rhs = null;\n\t\t}\n\n\t\tpublic FunctionMinus(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Double;\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\n\t\t\tbool bLeftConst = await _lhs.IsConstant();\n\t\t\tbool bRightConst = await _rhs.IsConstant();\n\t\t\tif (bLeftConst && bRightConst)\n\t\t\t{\n\t\t\t\tdouble d = await EvaluateDouble(null, null);\n\t\t\t\treturn new ConstantDouble(d);\n\t\t\t}\n\t\t\telse if (bRightConst)\n\t\t\t{\n\t\t\t\tdouble d = await _rhs.EvaluateDouble(null, null);\n\t\t\t\tif (d == 0)\n\t\t\t\t\treturn _lhs;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateDouble(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tdouble lhs = await _lhs.EvaluateDouble(rpt, row);\n\t\t\tdouble rhs = await _rhs.EvaluateDouble(rpt, row);\n\n\t\t\treturn lhs - rhs;\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            double result = await EvaluateDouble(rpt, row);\n\n            return Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionMinusDecimal.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Minus operator  of form lhs - rhs where both operands are decimal.\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionMinusDecimal : FunctionBinary, IExpr\n\t{\n\n\t\t/// <summary>\n\t\t/// Do minus on decimal data types\n\t\t/// </summary>\n\t\tpublic FunctionMinusDecimal() \n\t\t{\n\t\t\t_lhs = null;\n\t\t\t_rhs = null;\n\t\t}\n\n\t\tpublic FunctionMinusDecimal(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Decimal;\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tbool bLeftConst = await _lhs.IsConstant();\n\t\t\tbool bRightConst = await _rhs.IsConstant();\n\t\t\tif (bLeftConst && bRightConst)\n\t\t\t{\n\t\t\t\tdecimal d = await EvaluateDecimal(null, null);\n\t\t\t\treturn new ConstantDecimal(d);\n\t\t\t}\n\t\t\telse if (bRightConst)\n\t\t\t{\n\t\t\t\tdecimal d = await _rhs.EvaluateDecimal(null, null);\n\t\t\t\tif (d == 0m)\n\t\t\t\t\treturn _lhs;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateDecimal(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal result = await EvaluateDecimal(rpt, row);\n\n\t\t\treturn Convert.ToDouble(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            decimal result = await EvaluateDecimal(rpt, row);\n\n            return Convert.ToInt32(result);\n        }\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal lhs = await _lhs.EvaluateDecimal(rpt, row);\n\t\t\tdecimal rhs = await _rhs.EvaluateDecimal(rpt, row);\n\n\t\t\treturn (decimal) (lhs-rhs);\n\t\t}\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal result = await EvaluateDecimal(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal result = await EvaluateDecimal(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal result = await EvaluateDecimal(rpt, row);\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionMinusInt32.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Minus operator  of form lhs - rhs where both operands are decimal.\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionMinusInt32 : FunctionBinary, IExpr\n\t{\n\n\t\t/// <summary>\n\t\t/// Do minus on decimal data types\n\t\t/// </summary>\n\t\tpublic FunctionMinusInt32() \n\t\t{\n\t\t\t_lhs = null;\n\t\t\t_rhs = null;\n\t\t}\n\n\t\tpublic FunctionMinusInt32(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Int32;\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tbool bLeftConst = await _lhs.IsConstant();\n\t\t\tbool bRightConst = await _rhs.IsConstant();\n\t\t\tif (bLeftConst && bRightConst)\n\t\t\t{\n\t\t\t\tint d = await EvaluateInt32(null, null);\n\t\t\t\treturn new ConstantInteger(d);\n\t\t\t}\n\t\t\telse if (bRightConst)\n\t\t\t{\n\t\t\t\tint d = await _rhs.EvaluateInt32(null, null);\n\t\t\t\tif (d == 0)\n\t\t\t\t\treturn _lhs;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateInt32(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tint result = await EvaluateInt32(rpt, row);\n\n\t\t\treturn Convert.ToDouble(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            int lhs = await _lhs.EvaluateInt32(rpt, row);\n            int rhs = await _rhs.EvaluateInt32(rpt, row);\n\n            return (lhs - rhs);\n        }\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n            int result = await EvaluateInt32(rpt, row);\n\n            return Convert.ToDecimal(result);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tint result = await EvaluateInt32(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tint result = await EvaluateInt32(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tint result = await EvaluateInt32(rpt, row);\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionModulus.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Modulus operator  of form lhs % rhs\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionModulus : FunctionBinary, IExpr\n\t{\n\n\t\t/// <summary>\n\t\t/// Do modulus on double data types\n\t\t/// </summary>\n\t\tpublic FunctionModulus(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Double;\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tbool bLeftConst = await _lhs.IsConstant();\n\t\t\tbool bRightConst = await _rhs.IsConstant();\n\t\t\tif (bLeftConst && bRightConst)\n\t\t\t{\n\t\t\t\tdouble d = await EvaluateDouble(null, null);\n\t\t\t\treturn new ConstantDouble(d);\n\t\t\t}\n\t\t\telse if (bRightConst)\n\t\t\t{\n\t\t\t\tdouble d = await _rhs.EvaluateDouble(null, null);\n\t\t\t\tif (d == 1)\n\t\t\t\t\treturn _lhs;\n\t\t\t}\n\t\t\telse if (bLeftConst)\n\t\t\t{\n\t\t\t\tdouble d = await _lhs.EvaluateDouble(null, null);\n\t\t\t\tif (d == 0)\n\t\t\t\t\treturn new ConstantDouble(0);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateDouble(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tdouble lhs = await _lhs.EvaluateDouble(rpt, row);\n\t\t\tdouble rhs = await _rhs.EvaluateDouble(rpt, row);\n\t\t\t// n % d = n - d*INT(n/d)  where INT rounds a number down to the nearest integer\n\t\t\tdouble temp = (int) (lhs/rhs);\n\n\t\t\treturn lhs - (rhs*temp);\n\t\t}\n        \n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            double result = await EvaluateDouble(rpt, row);\n\n            return Convert.ToInt32(result);\n        }\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionMult.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Mult operator  of form lhs * rhs\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionMult : FunctionBinary, IExpr\n\t{\n\n\t\t/// <summary>\n\t\t/// Do multiplication on double data types\n\t\t/// </summary>\n\t\tpublic FunctionMult() \n\t\t{\n\t\t\t_lhs = null;\n\t\t\t_rhs = null;\n\t\t}\n\n\t\tpublic FunctionMult(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Double;\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tbool bLeftConst = await _lhs.IsConstant();\n\t\t\tbool bRightConst = await _rhs.IsConstant();\n\t\t\tif (bLeftConst && bRightConst)\n\t\t\t{\n\t\t\t\tdouble d = await EvaluateDouble(null, null);\n\t\t\t\treturn new ConstantDouble(d);\n\t\t\t}\n\t\t\telse if (bLeftConst)\n\t\t\t{\n\t\t\t\tdouble d = await _lhs.EvaluateDouble(null, null);\n\t\t\t\tif (d == 1)\n\t\t\t\t\treturn _rhs;\n\t\t\t\telse if (d == 0)\n\t\t\t\t\treturn new ConstantDouble(0);\n\t\t\t}\n\t\t\telse if (bRightConst)\n\t\t\t{\n\t\t\t\tdouble d = await _rhs.EvaluateDouble(null, null);\n\t\t\t\tif (d == 1)\n\t\t\t\t\treturn _lhs;\n\t\t\t\telse if (d == 0)\n\t\t\t\t\treturn new ConstantDouble(0);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateDouble(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tdouble lhs = await _lhs.EvaluateDouble(rpt, row);\n\t\t\tdouble rhs = await _rhs.EvaluateDouble(rpt, row);\n\n\t\t\treturn lhs*rhs;\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            double result = await EvaluateDouble(rpt, row);\n\n            return Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionMultDecimal.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Multiplication operator  of form lhs * rhs where both operands are decimal.\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionMultDecimal : FunctionBinary, IExpr\n\t{\n\n\t\t/// <summary>\n\t\t/// Do multiplication on decimal data types\n\t\t/// </summary>\n\t\tpublic FunctionMultDecimal() \n\t\t{\n\t\t\t_lhs = null;\n\t\t\t_rhs = null;\n\t\t}\n\n\t\tpublic FunctionMultDecimal(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Decimal;\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tbool bLeftConst = await _lhs.IsConstant();\n\t\t\tbool bRightConst = await _rhs.IsConstant();\n\t\t\tif (bLeftConst && bRightConst)\n\t\t\t{\n\t\t\t\tdecimal d = await EvaluateDecimal(null, null);\n\t\t\t\treturn new ConstantDecimal(d);\n\t\t\t}\n\t\t\telse if (bLeftConst)\n\t\t\t{\n\t\t\t\tdecimal d = await _lhs.EvaluateDecimal(null, null);\n\t\t\t\tif (d == 1m)\n\t\t\t\t\treturn _rhs;\n\t\t\t\telse if (d == 0m)\n\t\t\t\t\treturn new ConstantDecimal(0m);\n\t\t\t}\n\t\t\telse if (bRightConst)\n\t\t\t{\n\t\t\t\tdecimal d = await _rhs.EvaluateDecimal(null, null);\n\t\t\t\tif (d == 1m)\n\t\t\t\t\treturn _lhs;\n\t\t\t\telse if (d == 0m)\n\t\t\t\t\treturn new ConstantDecimal(0m);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateDecimal(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal result = await EvaluateDecimal(rpt, row);\n\n\t\t\treturn Convert.ToDouble(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            decimal result = await EvaluateDecimal(rpt, row);\n\n            return Convert.ToInt32(result);\n        }\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal lhs = await _lhs.EvaluateDecimal(rpt, row);\n\t\t\tdecimal rhs = await _rhs.EvaluateDecimal(rpt, row);\n\n\t\t\treturn (decimal) (lhs*rhs);\n\t\t}\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal result = await EvaluateDecimal(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal result = await EvaluateDecimal(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal result = await EvaluateDecimal(rpt, row);\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionNot.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// NOT operator of the form ! a\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionNot : IExpr\n\t{\n\t\tIExpr _rhs;\n\n\t\t/// <summary>\n\t\t/// NOT operator of the form ! a\n\t\t/// </summary>\n\t\tpublic FunctionNot(IExpr rhs) \n\t\t{\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Boolean;\n\t\t}\n\n\t\tpublic async Task<bool> IsConstant()\n\t\t{\n            return await _rhs.IsConstant();\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tif (await _rhs.IsConstant())\n\t\t\t{\n\t\t\t\tbool b = await EvaluateBoolean(null, null);\n\t\t\t\treturn new ConstantBoolean(b);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateBoolean(rpt, row);\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Double.NaN);\n\t\t}\n\t\t\n\t\tpublic Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(decimal.MinValue);\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(int.MinValue);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tbool result = await EvaluateBoolean(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(DateTime.MinValue);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn !await _rhs.EvaluateBoolean(rpt, row);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionOr.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// OR operator  of form lhs || rhs\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionOr : FunctionBinary, IExpr\n\t{\n\n\t\t/// <summary>\n\t\t/// Or two boolean expressions together of the form a || b\n\t\t/// </summary>\n\t\tpublic FunctionOr(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Boolean;\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tbool bLeftConst = await _lhs.IsConstant();\n\t\t\tbool bRightConst = await _rhs.IsConstant();\n\t\t\tif (bLeftConst && bRightConst)\n\t\t\t{\n\t\t\t\tbool b = await EvaluateBoolean(null, null);\n\t\t\t\treturn new ConstantBoolean(b);\n\t\t\t}\n\t\t\telse if (bRightConst)\n\t\t\t{\n\t\t\t\tbool b = await _rhs.EvaluateBoolean(null, null);\n\t\t\t\tif (b)\n\t\t\t\t\treturn new ConstantBoolean(true);\n\t\t\t\telse \n\t\t\t\t\treturn _lhs;\n\t\t\t}\n\t\t\telse if (bLeftConst)\n\t\t\t{\n\t\t\t\tbool b = await _lhs.EvaluateBoolean(null, null);\n\t\t\t\tif (b)\n\t\t\t\t\treturn new ConstantBoolean(true);\n\t\t\t\telse\n\t\t\t\t\treturn _rhs;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateBoolean(rpt, row);\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Double.NaN);\n\t\t}\n\t\t\n\t\tpublic Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(decimal.MinValue);\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(int.MinValue);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tbool result = await EvaluateBoolean(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(DateTime.MinValue);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tbool r = await _lhs.EvaluateBoolean(rpt, row);\n\t\t\tif (r)\n\t\t\t\treturn true;\n\t\t\treturn await _rhs.EvaluateBoolean(rpt, row);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionPageNumber.cs",
    "content": "\nusing System;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Page number operator.   Relies on render to set the proper page #.\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionPageNumber : IExpr\n\t{\n\t\t/// <summary>\n\t\t/// Current page number\n\t\t/// </summary>\n\t\tpublic FunctionPageNumber() \n\t\t{\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Int32;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic Task<IExpr> ConstantOptimization()\n\t\t{\t// not a constant expression\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\t// Evaluate is for interpretation  \n\t\tpublic Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n            return rpt == null ? Task.FromResult((int) 0 as object) : Task.FromResult((int) rpt.PageNumber as object);\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\t\n\t\t\treturn rpt == null? Task.FromResult(0d): Task.FromResult((double)rpt.PageNumber);\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return rpt == null ? Task.FromResult(0) : Task.FromResult(rpt.PageNumber);\n        }\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionParameterCollection.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Globalization;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing Majorsilence.Reporting.Rdl;\nusing System.Threading.Tasks;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Parameters referenced via the collection.  For example, Parameters(expr)\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionParameterCollection : IExpr\n\t{\n\t\tprivate IDictionary _Parameters;\n\t\tprivate IExpr _ArgExpr;\n\n\t\t/// <summary>\n\t\t/// obtain value of Field\n\t\t/// </summary>\n\t\tpublic FunctionParameterCollection(IDictionary parameters, IExpr arg) \n\t\t{\n\t\t\t_Parameters = parameters;\n\t\t\t_ArgExpr = arg;\n\t\t}\n\n\t\tpublic virtual TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Object;\t\t// we don't know the typecode until we run the function\n\t\t}\n\n\t\tpublic virtual Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic virtual async Task<IExpr> ConstantOptimization()\n\t\t{\t\n\t\t\t_ArgExpr = await _ArgExpr.ConstantOptimization();\n\n\t\t\tif (await _ArgExpr.IsConstant())\n\t\t\t{\n\t\t\t\tstring o = await _ArgExpr.EvaluateString(null, null);\n\t\t\t\tif (o == null)\n\t\t\t\t\tthrow new Exception(Strings.FunctionParameterCollection_Error_ParameterCollectionNull); \n\t\t\t\tReportParameter rp = _Parameters[o] as ReportParameter;\n\t\t\t\tif (rp == null)\n\t\t\t\t\tthrow new Exception(string.Format(Strings.FunctionParameterCollection_Error_ParameterCollectionInvalid, o)); \n\t\t\t\treturn new FunctionReportParameter(rp);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// \n\t\tpublic virtual async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tstring o = await _ArgExpr.EvaluateString(rpt, row);\n\t\t\tif (o == null)\n\t\t\t\treturn null; \n\t\t\tReportParameter rp = _Parameters[o] as ReportParameter;\n\t\t\tif (rp == null)\n                return null;\n\n\t\t\treturn rp.GetRuntimeValue(rpt);\n\t\t}\n\t\t\n\t\tpublic virtual async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn Double.NaN;\n\t\t\treturn Convert.ToDouble(await Evaluate(rpt, row), NumberFormatInfo.InvariantInfo);\n\t\t}\n\t\t\n\t\tpublic virtual async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn decimal.MinValue;\n\t\t\treturn Convert.ToDecimal(await Evaluate(rpt, row), NumberFormatInfo.InvariantInfo);\n\t\t}\n\n        public virtual async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            if (row == null)\n                return int.MinValue;\n            return Convert.ToInt32(await Evaluate(rpt, row), NumberFormatInfo.InvariantInfo);\n        }\n\n\t\tpublic virtual async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn null;\n\t\t\treturn Convert.ToString(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic virtual async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn DateTime.MinValue;\n\t\t\treturn Convert.ToDateTime(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic virtual async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn false;\n\t\t\treturn Convert.ToBoolean(await Evaluate(rpt, row));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionPlus.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Plus operator  of form lhs + rhs\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionPlus : FunctionBinary , IExpr\n\t{\n\t\t/// <summary>\n\t\t/// Do plus on double data types\n\t\t/// </summary>\n\t\tpublic FunctionPlus() \n\t\t{\n\t\t}\n\n\t\tpublic FunctionPlus(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Double;\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tbool bLeftConst = await _lhs.IsConstant();\n\t\t\tbool bRightConst = await _rhs.IsConstant();\n\t\t\tif (bLeftConst && bRightConst)\n\t\t\t{\n\t\t\t\tdouble d = await EvaluateDouble(null, null);\n\t\t\t\treturn new ConstantDouble(d);\n\t\t\t}\n\t\t\telse if (bRightConst)\n\t\t\t{\n\t\t\t\tdouble d = await _rhs.EvaluateDouble(null, null);\n\t\t\t\tif (d == 0)\n\t\t\t\t\treturn _lhs;\n\t\t\t}\n\t\t\telse if (bLeftConst)\n\t\t\t{\n\t\t\t\tdouble d = await _lhs.EvaluateDouble(null, null);\n\t\t\t\tif (d == 0)\n\t\t\t\t\treturn _rhs;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateDouble(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tdouble lhs = await _lhs.EvaluateDouble(rpt, row);\n\t\t\tdouble rhs = await _rhs.EvaluateDouble(rpt, row);\n\n\t\t\treturn lhs+rhs;\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            double result = await EvaluateDouble(rpt, row);\n\n            return Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionPlusDecimal.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Plus operator  of form lhs + rhs where both operands are decimal\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionPlusDecimal : FunctionBinary , IExpr\n\t{\n\t\t/// <summary>\n\t\t/// Do plus on decimal data types\n\t\t/// </summary>\n\t\tpublic FunctionPlusDecimal() \n\t\t{\n\t\t}\n\n\t\tpublic FunctionPlusDecimal(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Decimal;\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tbool bLeftConst = await _lhs.IsConstant();\n\t\t\tbool bRightConst = await _rhs.IsConstant();\n\t\t\tif (bLeftConst && bRightConst)\n\t\t\t{\n\t\t\t\tdecimal d = await EvaluateDecimal(null, null);\n\t\t\t\treturn new ConstantDecimal(d);\n\t\t\t}\n\t\t\telse if (bRightConst)\n\t\t\t{\n\t\t\t\tdecimal d = await _rhs.EvaluateDecimal(null, null);\n\t\t\t\tif (d == 0m)\n\t\t\t\t\treturn _lhs;\n\t\t\t}\n\t\t\telse if (bLeftConst)\n\t\t\t{\n\t\t\t\tdecimal d = await _lhs.EvaluateDecimal(null, null);\n\t\t\t\tif (d == 0m)\n\t\t\t\t\treturn _rhs;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateDecimal(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal result = await EvaluateDecimal(rpt, row);\n\n\t\t\treturn Convert.ToDouble(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            decimal result = await EvaluateDecimal(rpt, row);\n\n            return Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal lhs = await _lhs.EvaluateDecimal(rpt, row);\n\t\t\tdecimal rhs = await _rhs.EvaluateDecimal(rpt, row);\n\n\t\t\treturn (decimal) (lhs+rhs);\n\t\t}\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal result = await EvaluateDecimal(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal result = await EvaluateDecimal(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal result = await EvaluateDecimal(rpt, row);\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionPlusInt32.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Plus operator  of form lhs + rhs where both operands are decimal\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionPlusInt32 : FunctionBinary , IExpr\n\t{\n\t\t/// <summary>\n\t\t/// Do plus on decimal data types\n\t\t/// </summary>\n\t\tpublic FunctionPlusInt32() \n\t\t{\n\t\t}\n\n\t\tpublic FunctionPlusInt32(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Int32;\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tbool bLeftConst = await _lhs.IsConstant();\n\t\t\tbool bRightConst = await _rhs.IsConstant();\n\t\t\tif (bLeftConst && bRightConst)\n\t\t\t{\n\t\t\t\tint d = await EvaluateInt32(null, null);\n\t\t\t\treturn new ConstantInteger(d);\n\t\t\t}\n\t\t\telse if (bRightConst)\n\t\t\t{\n\t\t\t\tint d = await _rhs.EvaluateInt32(null, null);\n\t\t\t\tif (d == 0)\n\t\t\t\t\treturn _lhs;\n\t\t\t}\n\t\t\telse if (bLeftConst)\n\t\t\t{\n\t\t\t\tint d = await _lhs.EvaluateInt32(null, null);\n\t\t\t\tif (d == 0)\n\t\t\t\t\treturn _rhs;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateInt32(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tint result = await EvaluateInt32(rpt, row);\n\n\t\t\treturn Convert.ToDouble(result);\n\t\t}\n\n        public async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n        {\n            int result = await EvaluateInt32(rpt, row);\n\n            return Convert.ToDecimal(result);\n        }\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n\t\t{\n\t\t\tint lhs = await _lhs.EvaluateInt32(rpt, row);\n\t\t\tint rhs = await _rhs.EvaluateInt32(rpt, row);\n\n\t\t\treturn (lhs+rhs);\n\t\t}\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tint result = await EvaluateInt32(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tint result = await EvaluateInt32(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tint result = await EvaluateInt32(rpt, row);\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionPlusString.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Plus operator  of form lhs + rhs where operands are strings\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionPlusString : FunctionBinary, IExpr\n\t{\n\n\t\t/// <summary>\n\t\t/// append two strings together\n\t\t/// </summary>\n\t\tpublic FunctionPlusString(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.String;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateString(rpt, row);\n\t\t}\n\t\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tif (await _lhs.IsConstant() && await _rhs.IsConstant())\n\t\t\t{\n\t\t\t\tstring s = await EvaluateString(null, null);\n\t\t\t\treturn new ConstantString(s);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tstring result = await EvaluateString(rpt, row);\n\n\t\t\treturn Convert.ToDouble(result);\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tstring result = await EvaluateString(rpt, row);\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            string result = await EvaluateString(rpt, row);\n            return Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tstring lhs = await _lhs.EvaluateString(rpt, row);\n\t\t\tstring rhs = await _rhs.EvaluateString(rpt, row);\n\n\t\t\tif (lhs != null && rhs != null)\n\t\t\t\treturn lhs + rhs;\n\t\t\telse\n\t\t\t\treturn null;\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tstring result = await EvaluateString(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tstring result = await EvaluateString(rpt, row);\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionRelopEQ.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Relational operator equal of form lhs == rhs\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionRelopEQ : FunctionBinary, IExpr\n\t{\n\t\t/// <summary>\n\t\t/// Do relational equal operation\n\t\t/// </summary>\n\t\tpublic FunctionRelopEQ(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Boolean;\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tif (await _lhs.IsConstant() && await _rhs.IsConstant())\n\t\t\t{\n\t\t\t\tbool b = await EvaluateBoolean(null, null);\n\t\t\t\treturn new ConstantBoolean(b);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateBoolean(rpt, row);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tobject left = await _lhs.Evaluate(rpt, row);\n\t\t\tobject right = await _rhs.Evaluate(rpt, row);\n\t\t\tif (Filter.ApplyCompare(_lhs.GetTypeCode(), left, right) == 0)\n\t\t\t\treturn true;\n\t\t\telse\n\t\t\t\treturn false;\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(double.NaN);\n\t\t}\n\t\t\n\t\tpublic Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(decimal.MinValue);\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(int.MinValue);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tbool result = await EvaluateBoolean(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(DateTime.MinValue);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionRelopGT.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Relational operator equal of form lhs > rhs\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionRelopGT : FunctionBinary, IExpr\n\t{\n\t\t/// <summary>\n\t\t/// Do relational equal operation\n\t\t/// </summary>\n\t\tpublic FunctionRelopGT(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Boolean;\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tif (await _lhs.IsConstant() && await _rhs.IsConstant())\n\t\t\t{\n\t\t\t\tbool b = await EvaluateBoolean(null, null);\n\t\t\t\treturn new ConstantBoolean(b);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateBoolean(rpt, row);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tobject left = await _lhs.Evaluate(rpt, row);\n\t\t\tobject right = await _rhs.Evaluate(rpt, row);\n\t\t\tif (Filter.ApplyCompare(_lhs.GetTypeCode(), left, right) > 0)\n\t\t\t\treturn true;\n\t\t\telse\n\t\t\t\treturn false;\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(double.NaN);\n\t\t}\n\t\t\n\t\tpublic Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(decimal.MinValue);\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(int.MinValue);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tbool result = await EvaluateBoolean(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(DateTime.MinValue);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionRelopGTE.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Relational operator GTE of form lhs >= rhs\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionRelopGTE : FunctionBinary, IExpr\n\t{\n\t\t/// <summary>\n\t\t/// Do relational equal operation\n\t\t/// </summary>\n\t\tpublic FunctionRelopGTE(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Boolean;\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tif (await _lhs.IsConstant() && await _rhs.IsConstant())\n\t\t\t{\n\t\t\t\tbool b = await EvaluateBoolean(null, null);\n\t\t\t\treturn new ConstantBoolean(b);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateBoolean(rpt, row);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tobject left = await _lhs.Evaluate(rpt, row);\n\t\t\tobject right = await _rhs.Evaluate(rpt, row);\n\t\t\tif (Filter.ApplyCompare(_lhs.GetTypeCode(), left, right) >= 0)\n\t\t\t\treturn true;\n\t\t\telse\n\t\t\t\treturn false;\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(double.NaN);\n\t\t}\n\t\t\n\t\tpublic Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(decimal.MinValue);\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(int.MinValue);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tbool result = await EvaluateBoolean(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(DateTime.MinValue);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionRelopLT.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Relational operator LT of form lhs lt rhs\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionRelopLT : FunctionBinary, IExpr\n\t{\n\t\t/// <summary>\n\t\t/// Do relational less than operation\n\t\t/// </summary>\n\t\tpublic FunctionRelopLT(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Boolean;\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tif (await _lhs.IsConstant() && await _rhs.IsConstant())\n\t\t\t{\n\t\t\t\tbool b = await EvaluateBoolean(null, null);\n\t\t\t\treturn new ConstantBoolean(b);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateBoolean(rpt, row);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tobject left = await _lhs.Evaluate(rpt, row);\n\t\t\tobject right = await _rhs.Evaluate(rpt, row);\n\t\t\tif (Filter.ApplyCompare(_lhs.GetTypeCode(), left, right) < 0)\n\t\t\t\treturn true;\n\t\t\telse\n\t\t\t\treturn false;\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(double.NaN);\n\t\t}\n\t\t\n\t\tpublic Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(decimal.MinValue);\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(int.MinValue);\n        }\n\n        public async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tbool result = await EvaluateBoolean(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(DateTime.MinValue);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionRelopLTE.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Relational operator LTE of form lhs LTE rhs\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionRelopLTE : FunctionBinary, IExpr\n\t{\n\t\t/// <summary>\n\t\t/// Do relational equal operation\n\t\t/// </summary>\n\t\tpublic FunctionRelopLTE(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Boolean;\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tif (await _lhs.IsConstant() && await _rhs.IsConstant())\n\t\t\t{\n\t\t\t\tbool b = await EvaluateBoolean(null, null);\n\t\t\t\treturn new ConstantBoolean(b);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateBoolean(rpt, row);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tobject left = await _lhs.Evaluate(rpt, row);\n\t\t\tobject right = await _rhs.Evaluate(rpt, row);\n\t\t\tif (Filter.ApplyCompare(_lhs.GetTypeCode(), left, right) <= 0)\n\t\t\t\treturn true;\n\t\t\telse\n\t\t\t\treturn false;\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(double.NaN);\n\t\t}\n\t\t\n\t\tpublic Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(decimal.MinValue);\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(int.MinValue);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tbool result = await EvaluateBoolean(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn  Task.FromResult(DateTime.MinValue);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionRelopNE.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Relational operator not equal of form lhs != rhs\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionRelopNE : FunctionBinary, IExpr\n\t{\n\t\t/// <summary>\n\t\t/// Do relational not equal operation\n\t\t/// </summary>\n\t\tpublic FunctionRelopNE(IExpr lhs, IExpr rhs) \n\t\t{\n\t\t\t_lhs = lhs;\n\t\t\t_rhs = rhs;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Boolean;\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_lhs = await _lhs.ConstantOptimization();\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tif (await _lhs.IsConstant() && await _rhs.IsConstant())\n\t\t\t{\n\t\t\t\tbool b = await EvaluateBoolean(null, null);\n\t\t\t\treturn new ConstantBoolean(b);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateBoolean(rpt, row);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tobject left = await _lhs.Evaluate(rpt, row);\n\t\t\tobject right = await _rhs.Evaluate(rpt, row);\n\t\t\tif (Filter.ApplyCompare(_lhs.GetTypeCode(), left, right) != 0)\n\t\t\t\treturn true;\n\t\t\telse\n\t\t\t\treturn false;\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(double.NaN);\n\t\t}\n\t\t\n\t\tpublic Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(decimal.MinValue);\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(int.MinValue);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tbool result = await EvaluateBoolean(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(DateTime.MinValue);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionReportFolder.cs",
    "content": "\nusing System;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Report Folder\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionReportFolder : IExpr\n\t{\n\t\t/// <summary>\n\t\t/// Folder that holds Report\n\t\t/// </summary>\n\t\tpublic FunctionReportFolder() \n\t\t{\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.String;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic Task<IExpr> ConstantOptimization()\n\t\t{\t// not a constant expression\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\tpublic Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(rpt.Folder as object);\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\t\n\t\t\treturn Task.FromResult(double.NaN);\n\t\t}\n\t\t\n\t\tpublic Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Decimal.MinValue);\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(int.MinValue);\n        }\n\n\t\tpublic Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\treturn rpt == null? Task.FromResult(\"\"): Task.FromResult(rpt.Folder);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tstring result = await EvaluateString(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionReportItemCollection.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Globalization;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing Majorsilence.Reporting.Rdl;\nusing System.Threading.Tasks;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Handles references to the report item collection.\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionReportItemCollection : IExpr\n\t{\n\t\tprivate IDictionary _ReportItems;\n\t\tprivate IExpr _ArgExpr;\n\n\t\t/// <summary>\n\t\t/// obtain value of Field\n\t\t/// </summary>\n\t\tpublic FunctionReportItemCollection(IDictionary reportitems, IExpr arg) \n\t\t{\n\t\t\t_ReportItems = reportitems;\n\t\t\t_ArgExpr = arg;\n\t\t}\n\n\t\tpublic virtual TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Object;\t\t// we don't know the typecode until we run the function\n\t\t}\n\n\t\tpublic virtual Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic virtual async Task<IExpr> ConstantOptimization()\n\t\t{\t\n\t\t\t_ArgExpr = await _ArgExpr.ConstantOptimization();\n\n\t\t\tif (await _ArgExpr.IsConstant())\n\t\t\t{\n\t\t\t\tstring o = await _ArgExpr.EvaluateString(null, null);\n\t\t\t\tif (o == null)\n\t\t\t\t\tthrow new Exception(Strings.FunctionReportItemCollection_Error_ReportItemCollectionNull); \n\t\t\t\tTextbox ri = _ReportItems[o] as Textbox;\n\t\t\t\tif (ri == null)\n\t\t\t\t\tthrow new Exception(string.Format(Strings.FunctionReportItemCollection_Error_ReportItemCollectionInvalid, o)); \n\t\t\t\treturn new FunctionTextbox(ri, null);\t// no access to unique name\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// \n\t\tpublic virtual async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn null;\n\t\t\tTextbox tb;\n\t\t\tstring t = await _ArgExpr.EvaluateString(rpt, row);\n\t\t\tif (t == null)\n\t\t\t\treturn null;\n\t\t\ttb = _ReportItems[t] as Textbox;\n\t\t\tif (tb == null)\n\t\t\t\treturn null;\n\n\t\t\treturn await tb.Evaluate(rpt, row);\n\t\t}\n\t\t\n\t\tpublic virtual async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn Double.NaN;\n\t\t\treturn Convert.ToDouble(await Evaluate(rpt, row), NumberFormatInfo.InvariantInfo);\n\t\t}\n\t\t\n\t\tpublic virtual async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn decimal.MinValue;\n\t\t\treturn Convert.ToDecimal(await Evaluate(rpt, row), NumberFormatInfo.InvariantInfo);\n\t\t}\n\n        public virtual async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            if (row == null)\n                return int.MinValue;\n            return Convert.ToInt32(await Evaluate(rpt, row), NumberFormatInfo.InvariantInfo);\n        }\n\t\tpublic virtual async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn null;\n\t\t\treturn Convert.ToString(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic virtual async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn DateTime.MinValue;\n\t\t\treturn Convert.ToDateTime(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic virtual async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn false;\n\t\t\treturn Convert.ToBoolean(await Evaluate(rpt, row));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionReportName.cs",
    "content": "\nusing System;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Report name\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionReportName : IExpr\n\t{\n\t\t/// <summary>\n\t\t/// Current page number\n\t\t/// </summary>\n\t\tpublic FunctionReportName() \n\t\t{\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.String;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic Task<IExpr> ConstantOptimization()\n\t\t{\t// not a constant expression\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\t// Evaluate is for interpretation  \n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateString(rpt, row);\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\t\n\t\t\treturn Task.FromResult(double.NaN);\n\t\t}\n\t\t\n\t\tpublic Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(decimal.MinValue);\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(int.MinValue);\n        }\n\n\t\tpublic Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\treturn rpt == null? Task.FromResult(\"\"): Task.FromResult(rpt.Name);\n\t\t}\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(DateTime.MinValue);\n\t\t}\n\n\t\tpublic Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionReportParameter.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing Majorsilence.Reporting.Rdl;\nusing System.Threading.Tasks;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Obtain the runtime value of a Report parameter\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionReportParameter : IExpr\n\t{\n\t\tprotected ReportParameter p;\n        ReportParameterMethodEnum _type;\n        IExpr _arg;                         // when MultiValue parameter; methods may need arguments\n\n\t\t/// <summary>\n\t\t/// obtain value of ReportParameter\n\t\t/// </summary>\n\t\tpublic FunctionReportParameter(ReportParameter parm) \n\t\t{\n\t\t\tp=parm;\n            _type = ReportParameterMethodEnum.Value;\n            _arg = null;\n\t\t}\n\n        internal ReportParameterMethodEnum ParameterMethod\n        {\n            get { return _type; }\n            set { _type = value; }\n        }\n\n        internal void SetParameterMethod(string pm, IExpr[] args)\n        {\n            if (!this.p.MultiValue)\n                throw new ArgumentException(string.Format(\"{0} must be a MultiValue parameter to accept methods\", this.p.Name.Nm));\n\n            if (pm == null)\n            {\n                _type = ReportParameterMethodEnum.Index;\n            }\n            else switch (pm)\n            {\n                case \"Contains\": _type = ReportParameterMethodEnum.Contains; break;\n                case \"BinarySearch\": _type = ReportParameterMethodEnum.BinarySearch; break;\n                case \"Count\": \n                    _type = ReportParameterMethodEnum.Count; \n                    if (args != null)\n                        throw new ArgumentException(\"Count does not have any arguments.\");\n                    break;\n                case \"IndexOf\": _type = ReportParameterMethodEnum.IndexOf; break;\n                case \"LastIndexOf\": _type = ReportParameterMethodEnum.LastIndexOf; break;\n                case \"Value\": _type = ReportParameterMethodEnum.Value; break;\n                default:\n                    throw new ArgumentException(string.Format(\"{0} is an unknown array method.\", pm));\n            }\n\n            if (_type != ReportParameterMethodEnum.Count)\n            {\n                if (args == null || args.Length != 1)\n                    throw new ArgumentException(string.Format(\"{0} must have exactly one argument.\", pm));\n\n                _arg = args[0];\n            }\n\n            return;\n        }\n\n\t\tpublic virtual TypeCode GetTypeCode()\n\t\t{\n            switch (_type)\n            {\n                case ReportParameterMethodEnum.Contains:\n                    return TypeCode.Boolean;\n                case ReportParameterMethodEnum.BinarySearch:\n                case ReportParameterMethodEnum.Count:\n                case ReportParameterMethodEnum.IndexOf:\n                case ReportParameterMethodEnum.LastIndexOf:\n                    return TypeCode.Int32;\n                case ReportParameterMethodEnum.Value:\n                    return p.MultiValue ? TypeCode.Object : p.dt;   // MultiValue type is really ArrayList\n                case ReportParameterMethodEnum.Index:\n                default:\n                    return p.dt;\n            }\n\t\t}\n\n\t\tpublic virtual Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic virtual Task<IExpr> ConstantOptimization()\n\t\t{\t// not a constant expression\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async virtual Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n            return this.p.MultiValue? await EvaluateMV(rpt, row): await p.GetRuntimeValue(rpt);\n\t\t}\n\n        private async Task<object> EvaluateMV(Report rpt, Row row)\n        {\n            ArrayList ar = await p.GetRuntimeValues(rpt);\n            \n            object va = this._arg == null ? null : await _arg.Evaluate(rpt, row);\n\n            switch(_type) \n            {\n                case ReportParameterMethodEnum.Value:\n                    return ar;\n                case ReportParameterMethodEnum.Contains:\n                    return ar.Contains(va);\n                case ReportParameterMethodEnum.BinarySearch:\n                    return ar.BinarySearch(va);\n                case ReportParameterMethodEnum.Count:\n                    return ar.Count;\n                case ReportParameterMethodEnum.IndexOf:\n                    return ar.IndexOf(va);\n                case ReportParameterMethodEnum.LastIndexOf:\n                    return ar.LastIndexOf(va);\n                case ReportParameterMethodEnum.Index:\n                    int i = Convert.ToInt32(va);\n                    return ar[i];\n                default:\n                    throw new Exception(Strings.FunctionReportParameter_Error_UnknownReporParameterMethod);\n            }\n        }\n\t\t\n\t\tpublic virtual async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n            object rtv = await Evaluate(rpt, row);\n\t\t\tif (rtv == null)\n\t\t\t\treturn Double.NaN;\n\n\t\t\tswitch (this.GetTypeCode())\n\t\t\t{\n\t\t\t\tcase TypeCode.Double:\n\t\t\t\t\treturn ((double) rtv);\n\t\t\t\tcase TypeCode.Object:\n\t\t\t\t\treturn Double.NaN;\n\t\t\t\tcase TypeCode.Int32:\n\t\t\t\t\treturn (double) ((int) rtv);\n\t\t\t\tcase TypeCode.Boolean:\n\t\t\t\t\treturn Convert.ToDouble((bool) rtv);\n\t\t\t\tcase TypeCode.String:\n\t\t\t\t\treturn Convert.ToDouble((string) rtv);\n\t\t\t\tcase TypeCode.DateTime:\n\t\t\t\t\treturn Convert.ToDouble((DateTime) rtv);\n\t\t\t\tdefault:\n\t\t\t\t\treturn Double.NaN;\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic virtual async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n            object rtv = await Evaluate(rpt, row);\n\t\t\tif (rtv == null)\n\t\t\t\treturn Decimal.MinValue;\n\n            switch (this.GetTypeCode())\n\t\t\t{\n\t\t\t\tcase TypeCode.Double:\n\t\t\t\t\treturn Convert.ToDecimal((double) rtv);\n\t\t\t\tcase TypeCode.Object:\n\t\t\t\t\treturn Decimal.MinValue;\n\t\t\t\tcase TypeCode.Int32:\n\t\t\t\t\treturn Convert.ToDecimal((int) rtv);\n\t\t\t\tcase TypeCode.Boolean:\n\t\t\t\t\treturn Convert.ToDecimal((bool) rtv);\n\t\t\t\tcase TypeCode.String:\n\t\t\t\t\treturn Convert.ToDecimal((string) rtv);\n\t\t\t\tcase TypeCode.DateTime:\n\t\t\t\t\treturn Convert.ToDecimal((DateTime) rtv);\n\t\t\t\tdefault:\n\t\t\t\t\treturn Decimal.MinValue;\n\t\t\t}\n\t\t}\n\n        public virtual async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            object rtv = await Evaluate(rpt, row);\n            if (rtv == null)\n                return int.MinValue;\n\n            switch (this.GetTypeCode())\n            {\n                case TypeCode.Double:\n                    return Convert.ToInt32((double)rtv);\n                case TypeCode.Decimal:\n                    return Convert.ToInt32((decimal)rtv);\n                case TypeCode.Object:\n                    return int.MinValue;\n                case TypeCode.Int32:\n                    return (int)rtv;\n                case TypeCode.Boolean:\n                    return Convert.ToInt32((bool)rtv);\n                case TypeCode.String:\n                    return Convert.ToInt32((string)rtv);\n                case TypeCode.DateTime:\n                    return Convert.ToInt32((DateTime)rtv);\n                default:\n                    return int.MinValue;\n            }\n        }\n\n\n\t\tpublic virtual async  Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n            object rtv = this.p.MultiValue ? await EvaluateMV(rpt, row) : await p.GetRuntimeValue(rpt);\n//            object rtv = Evaluate(rpt, row);\n\t\t\tif (rtv == null)\n\t\t\t\treturn null;\n\n\t\t\treturn rtv.ToString();\n\t\t}\n\n\t\tpublic virtual async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n            object rtv = await Evaluate(rpt, row);\n\t\t\tif (rtv == null)\n\t\t\t\treturn DateTime.MinValue;\n\n            switch (this.GetTypeCode())\n\t\t\t{\n\t\t\t\tcase TypeCode.Double:\n\t\t\t\t\treturn Convert.ToDateTime((double) rtv);\n\t\t\t\tcase TypeCode.Object:\n\t\t\t\t\treturn DateTime.MinValue;\n\t\t\t\tcase TypeCode.Int32:\n\t\t\t\t\treturn Convert.ToDateTime((int) rtv);\n\t\t\t\tcase TypeCode.Boolean:\n\t\t\t\t\treturn Convert.ToDateTime((bool) rtv);\n\t\t\t\tcase TypeCode.String:\n\t\t\t\t\treturn Convert.ToDateTime((string) rtv);\n\t\t\t\tcase TypeCode.DateTime:\n\t\t\t\t\treturn (DateTime) rtv;\n\t\t\t\tdefault:\n\t\t\t\t\treturn DateTime.MinValue;\n\t\t\t}\n\t\t}\n\n\t\tpublic virtual async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n            object rtv = await Evaluate(rpt, row);\n\n\t\t\tif (rtv == null)\n\t\t\t\treturn false;\n\n            switch (this.GetTypeCode())\n\t\t\t{\n\t\t\t\tcase TypeCode.Double:\n\t\t\t\t\treturn Convert.ToBoolean((double) rtv);\n\t\t\t\tcase TypeCode.Object:\n\t\t\t\t\treturn false;\n\t\t\t\tcase TypeCode.Int32:\n\t\t\t\t\treturn Convert.ToBoolean((int) rtv);\n\t\t\t\tcase TypeCode.Boolean:\n\t\t\t\t\treturn (bool) rtv;\n\t\t\t\tcase TypeCode.String:\n\t\t\t\t\treturn Convert.ToBoolean((string) rtv);\n\t\t\t\tcase TypeCode.DateTime:\n\t\t\t\t\treturn Convert.ToBoolean((DateTime) rtv);\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n    \n    public enum ReportParameterMethodEnum\n    {\n        Value,\n        Contains,\n        BinarySearch,\n        Count,\n        IndexOf,\n        LastIndexOf,\n        Index\n    }\n\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionReportParameterLabel.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Obtain the runtime value of a report parameter label.\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionReportParameterLabel : FunctionReportParameter\n\t{\n\t\t/// <summary>\n\t\t/// obtain value of ReportParameter\n\t\t/// </summary>\n\t\tpublic FunctionReportParameterLabel(ReportParameter parm): base(parm) \n\t\t{\n\t\t}\n\n\t\tpublic override TypeCode GetTypeCode()\n\t\t{\n            if (this.ParameterMethod == ReportParameterMethodEnum.Value)\n                return TypeCode.String;\n            else\n                return base.GetTypeCode();\n\t\t}\n\n\t\tpublic override Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic override Task<IExpr> ConstantOptimization()\n\t\t{\t// not a constant expression\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async override Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tstring v = await base.EvaluateString(rpt, row);\n\n\t\t\tif (p.ValidValues == null)\n\t\t\t\treturn v;\n\n\t\t\tstring[] displayValues = await p.ValidValues.DisplayValues(rpt);\n\t\t\tobject[] dataValues = await p.ValidValues.DataValues(rpt);\n\n\t\t\tfor (int i=0; i < dataValues.Length; i++)\n\t\t\t{\n\t\t\t\tif (dataValues[i].ToString() == v)\n\t\t\t\t\treturn displayValues[i];\n\t\t\t}\n\n\t\t\treturn v;\n\t\t}\n\t\t\n\t\tpublic async override Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\t\n\t\t\tstring r = await EvaluateString(rpt, row);\n\n\t\t\treturn r == null? double.MinValue: Convert.ToDouble(r);\n\t\t}\n\t\t\n\t\tpublic override async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tstring r = await EvaluateString(rpt, row);\n\n\t\t\treturn r == null? decimal.MinValue: Convert.ToDecimal(r);\n\t\t}\n\n\t\tpublic async override Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\treturn (string)await Evaluate(rpt, row);\n\t\t}\n\n\t\tpublic async override Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tstring r = await EvaluateString(rpt, row);\n\n\t\t\treturn r == null? DateTime.MinValue: Convert.ToDateTime(r);\n\t\t}\n\n\t\tpublic async override Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tstring r = await EvaluateString(rpt, row);\n\n\t\t\treturn r.ToLower() == \"true\"? true: false;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionSwitch.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// switch function like this example: Switch(a=1, \"a1\", a=2, \"a2\", true, \"other\")\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionSwitch : IExpr\n\t{\n\t\tIExpr[] _expr;\t\t// boolean expression\n\t\tTypeCode _tc;\n\n\t\t/// <summary>\n\t\t/// Switch function.  Evaluates boolean expression in order and returns result of\n\t\t/// the first true.  For example, Switch(a=1, \"a1\", a=2, \"a2\", true, \"other\")\n\t\t/// </summary>\n\t\tpublic FunctionSwitch(IExpr[] expr) \n\t\t{\n\t\t\t_expr = expr;\n\t\t\t_tc = _expr[1].GetTypeCode();\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn _tc;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\t\t// we could be more sophisticated here; but not much benefit\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t// simplify all expression if possible\n\t\t\tfor (int i=0; i < _expr.Length; i++)\n\t\t\t{\n\t\t\t\t_expr[i] = await _expr[i].ConstantOptimization();\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tbool result;\n\t\t\tfor (int i=0; i < _expr.Length; i = i+2)\n\t\t\t{\n\t\t\t\tresult = await _expr[i].EvaluateBoolean(rpt, row);\n\t\t\t\tif (result)\n\t\t\t\t{\n\t\t\t\t\tobject o = await _expr[i+1].Evaluate(rpt, row);\n\t\t\t\t\t// We may need to convert to same type as first type\n\t\t\t\t\tif (i == 0 || _tc == _expr[i+1].GetTypeCode())\t// first typecode will always match \n\t\t\t\t\t\treturn o;\n\n\t\t\t\t\treturn Convert.ChangeType(o, _tc);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDouble(result);\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            object result = await Evaluate(rpt, row);\n            return Convert.ToInt32(result);\n        }\n\n        public async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToString(result);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionSystem.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.RdlEngine.Resources;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Class is used to evaluate static system classes.   System meaning\n\t/// any class that is part of this assembly.   The parser restricts this\n\t/// to Math, String, Convert, Financial, ...\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionSystem : IExpr\n\t{\n\t\tstring _Cls;\t\t// class name\n\t\tstring _Func;\t\t// function/operator\n\t\tIExpr[] _Args;\t\t// arguments \n\t\tTypeCode _ReturnTypeCode;\t// the return type\n\n\t\t/// <summary>\n\t\t/// passed class name, function name, and args for evaluation\n\t\t/// </summary>\n\t\tpublic FunctionSystem(string c, string f, IExpr[] a, TypeCode type) \n\t\t{\n\t\t\t_Cls = c;\n\t\t\t_Func = f;\n\t\t\t_Args = a;\n\t\t\t_ReturnTypeCode = type;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn _ReturnTypeCode;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\t\t// Can't know what the function does\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t// Do constant optimization on all the arguments\n\t\t\tfor (int i=0; i < _Args.GetLength(0); i++)\n\t\t\t{\n\t\t\t\tIExpr e = (IExpr)_Args[i];\n\t\t\t\t_Args[i] = await e.ConstantOptimization();\n\t\t\t}\n\n\t\t\t// Can't assume that the function doesn't vary\n\t\t\t//   based on something other than the args e.g. Now()\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\t// get the results\n\t\t\tobject[] argResults = new object[_Args.Length];\n\t\t\tint i=0;\n            bool bNull = false;\n\t\t\tforeach(IExpr a  in _Args)\n\t\t\t{\n\t\t\t\targResults[i] = await a.Evaluate(rpt, row);\n                if (argResults[i] == null)\n                    bNull = true;\n                i++;\n\t\t\t}\n\t\t\tType[] argTypes;\n            if (bNull)\n            {\n                // Need to put fake values in that match the types\n                object[] tempResults = new object[argResults.Length];\n                for (int ix = 0; ix < argResults.Length; ix++)\n                {\n                    tempResults[ix] =\n                        argResults[ix] == null?\n                            XmlUtil.GetConstFromTypeCode(_Args[ix].GetTypeCode()):\n                            argResults[ix];\n\n                }\n                argTypes = Type.GetTypeArray(tempResults);\n            }\n            else\n                argTypes = Type.GetTypeArray(argResults);\n\n\t\t\t// We can definitely optimize this by caching some info TODO\n\n\t\t\t// Get ready to call the function\n\t\t\tobject returnVal;\n\t\t\tType theClassType= Type.GetType(_Cls, true, true);\n            MethodInfo mInfo = XmlUtil.GetMethod(theClassType, _Func, argTypes);\n            if (mInfo == null)\n            {\n                throw new Exception(string.Format(Strings.FunctionSystem_Error_MethodNotFound, _Func, _Cls));\n            }\n\n            returnVal = mInfo.Invoke(theClassType, argResults);\n\n\t\t\treturn returnVal;\n\t\t}\n\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToDouble(await Evaluate(rpt, row));\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToDecimal(await Evaluate(rpt, row));\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Convert.ToInt32(await Evaluate(rpt, row));\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToString(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToDateTime(await Evaluate(rpt, row));\n\t\t}\n\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToBoolean(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic string Cls\n\t\t{\n\t\t\tget { return  _Cls; }\n\t\t\tset {  _Cls = value; }\n\t\t}\n\n\t\tpublic string Func\n\t\t{\n\t\t\tget { return  _Func; }\n\t\t\tset {  _Func = value; }\n\t\t}\n\n\t\tpublic IExpr[] Args\n\t\t{\n\t\t\tget { return  _Args; }\n\t\t\tset {  _Args = value; }\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionTextbox.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Reference to a Textbox data value\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionTextbox : IExpr\n\t{\n\t\tTextbox t;\t\n\n\t\t/// <summary>\n\t\t/// obtain value of Textbox\n\t\t/// </summary>\n\t\tpublic FunctionTextbox(Textbox tb, string uniquename) \n\t\t{\n\t\t\tt=tb;\n\t\t\tif (uniquename == null)\t\n\t\t\t\treturn;\n\t\t\t// We need to register this expression with the Textbox\n\t\t\ttb.AddExpressionReference(uniquename);\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Object;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic Task<IExpr> ConstantOptimization()\n\t\t{\t// not a constant expression\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\t// Evaluate the value for the expression\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await t.Evaluate(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDouble(result);\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            object result = await Evaluate(rpt, row);\n            return Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tobject result = await Evaluate(rpt, row);\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionTotalPages.cs",
    "content": "\nusing System;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Total Pages\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionTotalPages : IExpr\n\t{\n\t\t/// <summary>\n\t\t/// Total page count; relys on PageHeader, PageFooter to set Report.TotalPages\n\t\t/// </summary>\n\t\tpublic FunctionTotalPages() \n\t\t{\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Int32;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic Task<IExpr> ConstantOptimization()\n\t\t{\t// not a constant expression\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\t// Evaluate is for interpretation  \n\t\tpublic Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n            return rpt == null ? Task.FromResult((int) 1 as object) : Task.FromResult((int) rpt.TotalPages as object);\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\t\n\t\t\treturn rpt == null? Task.FromResult(1d): Task.FromResult((double)rpt.TotalPages);\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return rpt == null ? Task.FromResult(1) : Task.FromResult(rpt.TotalPages);\n        }\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tint result = await EvaluateInt32(rpt, row);\n\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tint result = await EvaluateInt32(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tint result = await EvaluateInt32(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tint result = await EvaluateInt32(rpt, row);\n\t\t\treturn Convert.ToBoolean(result);\n\t\t}\n\t\t\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionUnaryMinus.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Unary minus operator\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionUnaryMinus : IExpr\n\t{\n\t\tIExpr _rhs;\t\t\t// rhs \n\n\t\t/// <summary>\n\t\t/// Do division on double data types\n\t\t/// </summary>\n\t\tpublic FunctionUnaryMinus() \n\t\t{\n\t\t\t_rhs = null;\n\t\t}\n\n\t\tpublic FunctionUnaryMinus(IExpr r) \n\t\t{\n\t\t\t_rhs = r;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Double;\n\t\t}\n\n\t\tpublic async Task<bool> IsConstant()\n\t\t{\n\t\t\treturn await _rhs.IsConstant();\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n            await _rhs.ConstantOptimization();\n\t\t\tif (await _rhs.IsConstant())\n\t\t\t\treturn new ConstantDouble(await EvaluateDouble(null, null));\n\t\t\telse\n\t\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateDouble(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tdouble rhs = await _rhs.EvaluateDouble(rpt, row);\n\n\t\t\treturn -rhs;\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            double result = await EvaluateDouble(rpt, row);\n\n            return Convert.ToInt32(result);\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic IExpr Rhs\n\t\t{\n\t\t\tget { return  _rhs; }\n\t\t\tset {  _rhs = value; }\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionUnaryMinusDecimal.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Unary minus operator with a decimal operand\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionUnaryMinusDecimal : IExpr\n\t{\n\t\tIExpr _rhs;\t\t\t// rhs\n\n\t\t/// <summary>\n\t\t/// Do minus on decimal data type\n\t\t/// </summary>\n\t\tpublic FunctionUnaryMinusDecimal() \n\t\t{\n\t\t\t_rhs = null;\n\t\t}\n\n\t\tpublic FunctionUnaryMinusDecimal(IExpr r) \n\t\t{\n\t\t\t_rhs = r;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Decimal;\n\t\t}\n\n\t\tpublic async Task<bool> IsConstant()\n\t\t{\n\t\t\treturn await _rhs.IsConstant();\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tif (await _rhs.IsConstant())\n\t\t\t{\n\t\t\t\tdecimal d = await EvaluateDecimal(null, null);\n\t\t\t\treturn new ConstantDecimal(d);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateDecimal(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal result = await EvaluateDecimal(rpt, row);\n\n\t\t\treturn Convert.ToDouble(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            decimal result = await EvaluateDecimal(rpt, row);\n\n            return Convert.ToInt32(result);\n        }\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal rhs = await _rhs.EvaluateDecimal(rpt, row);\n\n\t\t\treturn (decimal) (-rhs);\n\t\t}\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal result = await EvaluateDecimal(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tdecimal result = await EvaluateDecimal(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic IExpr Rhs\n\t\t{\n\t\t\tget { return  _rhs; }\n\t\t\tset {  _rhs = value; }\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionUnaryMinusInteger.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Unary minus operator for a integer operand\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionUnaryMinusInteger : IExpr\n\t{\n\t\tIExpr _rhs;\t\t\t// rhs\n\n\t\t/// <summary>\n\t\t/// Do minus on decimal data type\n\t\t/// </summary>\n\t\tpublic FunctionUnaryMinusInteger() \n\t\t{\n\t\t\t_rhs = null;\n\t\t}\n\n\t\tpublic FunctionUnaryMinusInteger(IExpr r) \n\t\t{\n\t\t\t_rhs = r;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Int32;\n\t\t}\n\n\t\tpublic async Task<bool> IsConstant()\n\t\t{\n\t\t\treturn await _rhs.IsConstant();\n\t\t}\n\n\t\tpublic async Task<IExpr> ConstantOptimization()\n\t\t{\n\t\t\t_rhs = await _rhs.ConstantOptimization();\n\t\t\tif (await _rhs.IsConstant())\n\t\t\t{\n\t\t\t\tdouble d = await EvaluateDouble(null, null);\n\t\t\t\treturn new ConstantInteger((int) d);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// Evaluate is for interpretation  (and is relatively slow)\n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn (int)await EvaluateInt32(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tdouble result = await _rhs.EvaluateDouble(rpt, row);\n\n\t\t\treturn -result;\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            int result = await _rhs.EvaluateInt32(rpt, row);\n\n            return -result;\n        }\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tint result = await EvaluateInt32(rpt, row);\n\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tint result = (int)await EvaluateDouble(rpt, row);\n\t\t\treturn result.ToString();\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tint result = (int)await EvaluateDouble(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tint result = (int)await EvaluateDouble(rpt, row);\n\t\t\treturn result == 0? false:true;\n\t\t}\n\n\t\tpublic IExpr Rhs\n\t\t{\n\t\t\tget { return  _rhs; }\n\t\t\tset {  _rhs = value; }\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionUserCollection.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Globalization;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing Majorsilence.Reporting.Rdl;\nusing System.Threading.Tasks;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Handle references to the User collection.  e.g. User(\"UserID\")\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionUserCollection : IExpr\n\t{\n\t\tprivate IDictionary _User;\n\t\tprivate IExpr _ArgExpr;\n\n\t\t/// <summary>\n\t\t/// obtain value of Field\n\t\t/// </summary>\n\t\tpublic FunctionUserCollection(IDictionary user, IExpr arg) \n\t\t{\n\t\t\t_User = user;\n\t\t\t_ArgExpr = arg;\n\t\t}\n\n\t\tpublic virtual TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.String;\t\t// all the user types happen to be string\n\t\t}\n\n\t\tpublic virtual Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic virtual async Task<IExpr> ConstantOptimization()\n\t\t{\t\n\t\t\t_ArgExpr = await _ArgExpr.ConstantOptimization();\n\n\t\t\tif (await _ArgExpr.IsConstant())\n\t\t\t{\n\t\t\t\tstring o = await _ArgExpr.EvaluateString(null, null);\n\t\t\t\tif (o == null)\n\t\t\t\t\tthrow new Exception(Strings.FunctionUserCollection_Error_UserCollectionNull); \n\t\t\t\tstring lo = o.ToLower();\n\t\t\t\tif (lo == \"userid\")\n\t\t\t\t\treturn new FunctionUserID();\n\t\t\t\tif (lo == \"language\")\n\t\t\t\t\treturn new FunctionUserLanguage();\n\t\t\t\tthrow new Exception(string.Format(Strings.FunctionUserCollection_Error_UserCollectionInvalid, o)); \n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t// \n\t\tpublic virtual async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\tif (rpt == null)\n\t\t\t\treturn null;\n\t\t\tstring u = await _ArgExpr.EvaluateString(rpt, row);\n\t\t\tif (u == null)\n\t\t\t\treturn null;\n\t\t\tswitch (u.ToLower())\n\t\t\t{\n\t\t\t\tcase \"userid\":\n\t\t\t\t\treturn rpt.UserID;\n\t\t\t\tcase \"language\":\n\t\t\t\t\treturn rpt.ClientLanguage == null?\n\t\t\t\t\t\tCultureInfo.CurrentCulture.ThreeLetterISOLanguageName:\n\t\t\t\t\t\trpt.ClientLanguage;\n\t\t\t\tdefault:\n\t\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic virtual async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn Double.NaN;\n\t\t\treturn Convert.ToDouble(await Evaluate(rpt, row), NumberFormatInfo.InvariantInfo);\n\t\t}\n\t\t\n\t\tpublic virtual async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn decimal.MinValue;\n\t\t\treturn Convert.ToDecimal(await Evaluate(rpt, row), NumberFormatInfo.InvariantInfo);\n\t\t}\n\n        public virtual async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            if (row == null)\n                return int.MinValue;\n            return Convert.ToInt32(await Evaluate(rpt, row), NumberFormatInfo.InvariantInfo);\n        }\n\n\t\tpublic virtual async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn null;\n\t\t\treturn Convert.ToString(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic virtual async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn DateTime.MinValue;\n\t\t\treturn Convert.ToDateTime(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic virtual async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tif (row == null)\n\t\t\t\treturn false;\n\t\t\treturn Convert.ToBoolean(await Evaluate(rpt, row));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionUserID.cs",
    "content": "\nusing System;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// User ID- Report.UserID must be set by the client to be accurate in multi-user case\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionUserID : IExpr\n\t{\n\t\t/// <summary>\n\t\t/// Client user id\n\t\t/// </summary>\n\t\tpublic FunctionUserID() \n\t\t{\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.String;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic Task<IExpr> ConstantOptimization()\n\t\t{\t\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\t// Evaluate is for interpretation  \n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateString(rpt, row);\n\t\t}\n\t\t\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\t\n\t\t\tstring result = await EvaluateString(rpt, row);\n\t\t\treturn Convert.ToDouble(result);\t\t\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tstring result = await EvaluateString(rpt, row);\n\n\t\t\treturn Convert.ToDecimal(result);\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            string result = await EvaluateString(rpt, row);\n\n            return Convert.ToInt32(result);\n        }\n\t\tpublic Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tif (rpt == null || rpt.UserID == null)\n\t\t\t\treturn Task.FromResult(Environment.UserName);\n\t\t\telse\n\t\t\t\treturn Task.FromResult(rpt.UserID);\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tstring result = await EvaluateString(rpt, row);\n\t\t\treturn Convert.ToDateTime(result);\n\t\t}\n\n\t\tpublic Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/FunctionUserLanguage.cs",
    "content": "\nusing System;\nusing System.IO;\nusing System.Globalization;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing Majorsilence.Reporting.Rdl;\nusing System.Threading.Tasks;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// The Language field in the User collection.\n\t/// </summary>\n\t[Serializable]\n\tinternal class FunctionUserLanguage : IExpr\n\t{\n\t\t/// <summary>\n\t\t/// Client user language\n\t\t/// </summary>\n\t\tpublic FunctionUserLanguage() \n\t\t{\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.String;\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic Task<IExpr> ConstantOptimization()\n\t\t{\t\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\t// Evaluate is for interpretation  \n\t\tpublic async Task<object> Evaluate(Report rpt, Row row)\n\t\t{\n\t\t\treturn await EvaluateString(rpt, row);\n\t\t}\n\t\t\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\t\n\t\t\tthrow new Exception(Strings.FunctionUserLanguage_Error_ConvertToDouble);\n\t\t}\n\t\t\n\t\tpublic Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\tthrow new Exception(Strings.FunctionUserLanguage_Error_ConvertToDecimal);\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            throw new Exception(Strings.FunctionUserLanguage_Error_ConvertToInt32);\n        }\n\t\tpublic Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\tif (rpt == null || rpt.ClientLanguage == null)\n\t\t\t\treturn Task.FromResult(CultureInfo.CurrentCulture.ThreeLetterISOLanguageName);\n\t\t\telse\n\t\t\t\treturn Task.FromResult(rpt.ClientLanguage);\n\t\t}\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\tthrow new Exception(Strings.FunctionUserLanguage_Error_ConvertToDateTime);\n\t\t}\n\n\t\tpublic Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\tthrow new Exception(Strings.FunctionUserLanguage_Error_ConvertToBoolean);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/ICacheData.cs",
    "content": "\nusing System;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// If function caches data then this must be implemented and constructor must place in \n\t///    master report report\n\t/// </summary>\n\tinternal interface ICacheData\n\t{\n\t\tvoid ClearCache(Report rpt);\t\t\t// clear out cache of data: new data is coming\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/IExpr.cs",
    "content": "\nusing System;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// The IExpr interface should be implemented when you want to create a built-in function.\n\t/// </summary>\n\tinternal interface IExpr\n\t{\n\t\tTypeCode GetTypeCode();\t\t\t// return the type of the expression\n\t\tTask<bool> IsConstant();\t\t\t\t// expression returns a constant\n\t\tTask<IExpr> ConstantOptimization();\t// constant optimization\n\n\t\t// Evaluate is for interpretation\n\t\tTask<object> Evaluate(Report r, Row row);\t\t\t\t// return an object\n\t\tTask<string> EvaluateString(Report r, Row row);\t\t// return a string\n\t\tTask<double> EvaluateDouble(Report r, Row row);\t\t// return a double\n\t\tTask<decimal> EvaluateDecimal(Report r, Row row);\t\t// return a decimal\n\t\tTask<int> EvaluateInt32(Report r, Row row);           // return an Int32\n\t\tTask<DateTime> EvaluateDateTime(Report r, Row row);\t// return a DateTime\n\t\tTask<bool> EvaluateBoolean(Report r, Row row);\t\t// return boolean\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/Identifier.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Identifier\n\t/// </summary>\n\t[Serializable]\n\tinternal class Identifier : IExpr\n\t{\n\t\tstring _Value;\t\t// value of the identifier\n\n\t\t/// <summary>\n\t\t/// passed class name, function name, and args for evaluation\n\t\t/// </summary>\n\t\tpublic Identifier(string v) \n\t\t{\n\t\t\tstring lv = v.ToLower();\n\t\t\tif (lv == \"null\" || lv == \"nothing\")\n\t\t\t\t_Value = null;\n\t\t\telse\n\t\t\t\t_Value = v;\n\t\t}\n\n\t\tinternal bool IsNothing\n\t\t{\n\t\t\tget { return _Value == null? true: false; }\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Object;\t\t\t// TODO\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic Task<IExpr> ConstantOptimization()\n\t\t{\t\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\tpublic Task<object> Evaluate(Report rpt, Row row)\n\t\t{\t\n\t\t\treturn Task.FromResult(_Value as object);\n\t\t}\n\n\t\tpublic async Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToDouble(await Evaluate(rpt, row));\n\t\t}\n\t\t\n\t\tpublic async Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToDecimal(await Evaluate(rpt, row));\n\t\t}\n\n        public async Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Convert.ToInt32(await Evaluate(rpt, row));\n        }\n\n\t\tpublic async Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToString(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic async Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToDateTime(await Evaluate(rpt, row));\n\t\t}\n\n\t\tpublic async Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Convert.ToBoolean(await Evaluate(rpt, row));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/IdentifierKey.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// IdentifierKey\n\t/// </summary>\n\tpublic enum IdentifierKeyEnum\n\t{\n\t\t/// <summary>\n\t\t/// Recursive\n\t\t/// </summary>\n\t\tRecursive,\n\t\t/// <summary>\n\t\t/// Simple\n\t\t/// </summary>\n\t\tSimple\t\n\t}\n\n\t[Serializable]\n\tinternal class IdentifierKey : IExpr\n\t{\n\t\tIdentifierKeyEnum _Value;\t\t// value of the identifier\n\n\t\t/// <summary>\n\t\t/// \n\t\t/// </summary>\n\t\tpublic IdentifierKey(IdentifierKeyEnum v) \n\t\t{\n\t\t\t_Value = v;\n\t\t}\n\n\t\tpublic TypeCode GetTypeCode()\n\t\t{\n\t\t\treturn TypeCode.Object;\t\t\t\n\t\t}\n\n\t\tpublic Task<bool> IsConstant()\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\n\t\tpublic IdentifierKeyEnum Value\n\t\t{\n\t\t\tget {return _Value;}\n\t\t}\n\n\t\tpublic Task<IExpr> ConstantOptimization()\n\t\t{\t\n\t\t\treturn Task.FromResult(this as IExpr);\n\t\t}\n\n\t\tpublic Task<object> Evaluate(Report rpt, Row row)\n\t\t{\t\n\t\t\treturn Task.FromResult(_Value as object);\n\t\t}\n\n\t\tpublic Task<double> EvaluateDouble(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Double.NaN);\n\t\t}\n\t\t\n\t\tpublic Task<decimal> EvaluateDecimal(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(Decimal.MinValue);\n\t\t}\n\n        public Task<int> EvaluateInt32(Report rpt, Row row)\n        {\n            return Task.FromResult(int.MinValue);\n        }\n\n\t\tpublic Task<string> EvaluateString(Report rpt, Row row)\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\tpublic Task<DateTime> EvaluateDateTime(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(DateTime.MinValue);\n\t\t}\n\n\t\tpublic Task<bool> EvaluateBoolean(Report rpt, Row row)\n\t\t{\n\t\t\treturn Task.FromResult(false);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Functions/VBFunctions.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Text;\n\n\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// The VBFunctions class holds a number of static functions for support VB functions.\n\t/// </summary>\n\tsealed public class VBFunctions\n\t{\n\t\t/// <summary>\n\t\t/// Obtains the year\n\t\t/// </summary>\n\t\t/// <param name=\"dt\"></param>\n\t\t/// <returns>int year</returns>\n\t\tstatic public int Year(DateTime dt)\n\t\t{\n\t\t\treturn dt.Year;\n\t\t}\n\t\t/// <summary>\n\t\t/// Returns the integer day of week: 1=Sunday, 2=Monday, ..., 7=Saturday\n\t\t/// </summary>\n\t\t/// <param name=\"dt\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public int Weekday(DateTime dt)\n\t\t{\n\t\t\tint dow;\n\t\t\tswitch (dt.DayOfWeek)\n\t\t\t{\n\t\t\t\tcase DayOfWeek.Sunday:\n\t\t\t\t\tdow=1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase DayOfWeek.Monday:\n\t\t\t\t\tdow=2;\n\t\t\t\t\tbreak;\n\t\t\t\tcase DayOfWeek.Tuesday:\n\t\t\t\t\tdow=3;\n\t\t\t\t\tbreak;\n\t\t\t\tcase DayOfWeek.Wednesday:\n\t\t\t\t\tdow=4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase DayOfWeek.Thursday:\n\t\t\t\t\tdow=5;\n\t\t\t\t\tbreak;\n\t\t\t\tcase DayOfWeek.Friday:\n\t\t\t\t\tdow=6;\n\t\t\t\t\tbreak;\n\t\t\t\tcase DayOfWeek.Saturday:\n\t\t\t\t\tdow=7;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t\t\t// should never happen\n\t\t\t\t\tdow=1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn dow;\n\t\t}\n\t\t\n\t\t/// <summary>\n\t\t/// Returns the integer day of week: 1=Monday, 2=Tuesday, ..., 7=Sunday\n\t\t/// </summary>\n\t\t/// <param name=\"dt\">DateTime</param>\n\t\tpublic static int WeekdayNonAmerican(DateTime dt)\n\t\t{\n\t\t\tvar res = (int)dt.DayOfWeek;\n\t\t\treturn res == 0 ? 7 : res;\n\t\t}\n\t\t\n\t\t/// <summary>\n\t\t/// Returns the integer day of week: 1=Monday, 2=Tuesday, ..., 7=Sunday\n\t\t/// </summary>\n\t\t/// <param name=\"dateString\">String representation of a date and time</param>\n\t\tpublic static int WeekdayNonAmerican(string dateString)\n\t\t{\n\t\t\tif(DateTime.TryParse(dateString, out var dt)) {\n\t\t\t\treturn WeekdayNonAmerican(dt);\n\t\t\t}\n\t\t\tthrow new FormatException(\"parameter does not contain a valid string representation of a date and time\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the name of the day of week\n\t\t/// </summary>\n\t\t/// <param name=\"d\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public string WeekdayName(int d)\n\t\t{\n\t\t\treturn WeekdayName(d, false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the name of the day of week\n\t\t/// </summary>\n\t\t/// <param name=\"d\"></param>\n\t\t/// <param name=\"bAbbreviation\">true for abbreviated name</param>\n\t\t/// <returns></returns>\n\t\tstatic public string WeekdayName(int d, bool bAbbreviation)\n\t\t{\n\t\t\tDateTime dt = new DateTime(2005, 5, d);\t\t// May 1, 2005 is a Sunday\n\t\t\tstring wdn = bAbbreviation? string.Format(\"{0:ddd}\", dt):string.Format(\"{0:dddd}\", dt);\n\t\t\treturn wdn;\n\t\t}\n\t\t/// <summary>\n\t\t/// Get the day of the month.\n\t\t/// </summary>\n\t\t/// <param name=\"dt\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public int Day(DateTime dt)\n\t\t{\n\t\t\treturn dt.Day;\n\t\t}\n\t\t\n\t\t/// <summary>\n\t\t/// Gets the integer month\n\t\t/// </summary>\n\t\t/// <param name=\"dt\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public int Month(DateTime dt)\n\t\t{\n            return dt.Month;\n\t\t}\n\t\t\n\t\t/// <summary>\n\t\t/// Get the month name\n\t\t/// </summary>\n\t\t/// <param name=\"m\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public string MonthName(object m)\n\t\t{\n\t\t\treturn MonthName(m, false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the month name; optionally abbreviated\n\t\t/// </summary>\n\t\t/// <param name=\"m\"></param>\n\t\t/// <param name=\"bAbbreviation\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public string MonthName(object m, bool bAbbreviation)\n\t\t{\n            var monthNumber = CInt(m);\n\n            DateTime dt = new DateTime(2005, monthNumber, 1);\n\n\t\t\treturn bAbbreviation? string.Format(\"{0:MMM}\", dt):string.Format(\"{0:MMMM}\", dt);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the hour\n\t\t/// </summary>\n\t\t/// <param name=\"dt\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public int Hour(DateTime dt)\n\t\t{\n\t\t\treturn dt.Hour;\n\t\t}\n\t\t/// <summary>\n\t\t/// Get the minute\n\t\t/// </summary>\n\t\t/// <param name=\"dt\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public int Minute(DateTime dt)\n\t\t{\n\t\t\treturn dt.Minute;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the second\n\t\t/// </summary>\n\t\t/// <param name=\"dt\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public int Second(DateTime dt)\n\t\t{\n\t\t\treturn dt.Second;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the current local date on this computer\n\t\t/// </summary>\n\t\t/// <returns></returns>\n\t\tstatic public DateTime Today()\n\t\t{ \n            DateTime dt = DateTime.Now;\n            return new DateTime(dt.Year, dt.Month, dt.Day, 0, 0, 0, 0);\n\t\t}\n\t\t/// <summary>\n\t\t/// Converts the first letter in a string to ANSI code \n\t\t/// </summary>\n\t\t/// <param name=\"o\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public int Asc(string o)\n\t\t{\n\t\t\tif (o == null || o.Length == 0)\n\t\t\t\treturn 0;\n\n\t\t\treturn Convert.ToInt32(o[0]);\n\t\t}\n\t\t/// <summary>\n\t\t/// Converts an expression to Boolean  \n\t\t/// </summary>\n\t\t/// <param name=\"o\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public bool CBool(object o)\n\t\t{\n\t\t\treturn Convert.ToBoolean(o);\n\t\t}\n\t\t/// <summary>\n\t\t/// Converts an expression to type Byte\n\t\t/// </summary>\n\t\t/// <param name=\"o\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public Byte CByte(string o)\n\t\t{\n\t\t\treturn Convert.ToByte(o);\n\t\t}\n\t\t/// <summary>\n\t\t/// Converts an expression to type Currency - really Decimal\n\t\t/// </summary>\n\t\t/// <param name=\"o\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public decimal CCur(string o)\n\t\t{\n\t\t\treturn Convert.ToDecimal(o);\n\t\t}\n\t\t/// <summary>\n\t\t/// Converts an expression to type Date\n\t\t/// </summary>\n\t\t/// <param name=\"o\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public DateTime CDate(string o)\n\t\t{\n\t\t\treturn Convert.ToDateTime(o);\n\t\t}\n\t\t/// <summary>\n\t\t/// Converts the specified ANSI code to a character\n\t\t/// </summary>\n\t\t/// <param name=\"o\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public char Chr(int o)\n\t\t{\n\t\t\treturn Convert.ToChar(o);\n\t\t}\n\t\t/// <summary>\n\t\t/// Converts the expression to integer\n\t\t/// </summary>\n\t\t/// <param name=\"o\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public int CInt(object o)\n\t\t{\n\t\t\treturn Convert.ToInt32(o);\n\t\t}\n\t\t/// <summary>\n\t\t/// Converts the expression to long\n\t\t/// </summary>\n\t\t/// <param name=\"o\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public long CLng(object o)\n\t\t{\n\t\t\treturn Convert.ToInt64(o);\n\t\t}\n\t\t/// <summary>\n\t\t/// Converts the expression to Single\n\t\t/// </summary>\n\t\t/// <param name=\"o\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public Single CSng(object o)\n\t\t{\n\t\t\treturn Convert.ToSingle(o);\n\t\t}\n\t\t/// <summary>\n\t\t/// Converts the expression to String\n\t\t/// </summary>\n\t\t/// <param name=\"o\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public string CStr(object o)\n\t\t{\n\t\t\treturn Convert.ToString(o);\n\t\t}\n\t\t/// <summary>\n\t\t/// Returns the hexadecimal value of a specified number\n\t\t/// </summary>\n\t\t/// <param name=\"o\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public string Hex(long o)\n\t\t{\n\t\t\treturn Convert.ToString(o, 16);\n\t\t}\n\t\t/// <summary>\n\t\t/// Returns the octal value of a specified number\n\t\t/// </summary>\n\t\t/// <param name=\"o\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public string Oct(long o)\n\t\t{\n\t\t\treturn Convert.ToString(o, 8);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Converts the passed parameter to double\n\t\t/// </summary>\n\t\t/// <param name=\"o\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public double CDbl(Object o)\n\t\t{\n\t\t\treturn Convert.ToDouble(o);\n\t\t}\n        \n        static public DateTime DateAdd(string interval, double number, string date)\n        {\n            return DateAdd(interval, number, DateTime.Parse(date));\n        }\n\n        /// <summary>\n        /// Returns a date to which a specified time interval has been added. \n        /// </summary>\n        /// <param name=\"interval\">String expression that is the interval you want to add.</param>\n        /// <param name=\"number\">Numeric expression that is the number of interval you want to add. The numeric expression can either be positive, for dates in the future, or negative, for dates in the past.</param>\n        /// <param name=\"date\">The date to which interval is added.</param>\n        /// <returns></returns>\n        static public DateTime DateAdd(string interval, double number, DateTime date)\n        {\n            \n            switch (interval)\n            {\n                case \"yyyy\":        // year \n                    date = date.AddYears((int) Math.Round(number, 0));\n                    break;\n                case \"m\":           // month \n                    date = date.AddMonths((int)Math.Round(number, 0));\n                    break;\n                case \"d\":           // day \n                    date = date.AddDays(number);\n                    break;\n                case \"h\":           // hour \n                    date = date.AddHours(number);\n                    break;\n                case \"n\":           // minute \n                    date = date.AddMinutes(number);\n                    break;\n                case \"s\":           // second \n                    date = date.AddSeconds(number);\n                    break;\n                case \"y\":           // day of year\n                    date = date.AddDays(number);\n                    break;\n                case \"q\":           // quarter \n                    date = date.AddMonths((int)Math.Round(number, 0) * 3);\n                    break;\n                case \"w\":           // weekday \n                    date = date.AddDays(number);\n                    break;\n                case \"ww\":          // week of year \n                    date = date.AddDays((int)Math.Round(number, 0) * 7);\n                    break;\n                default:\n                    throw new ArgumentException(string.Format(\"Interval '{0}' is invalid or unsupported.\", interval));\n            }\n            return date;\n        }\n\n\t\t/// <summary>\n\t\t/// 1 based offset of string2 in string1\n\t\t/// </summary>\n\t\t/// <param name=\"string1\"></param>\n\t\t/// <param name=\"string2\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public int InStr(string string1, string string2)\n\t\t{\n\t\t\treturn InStr(1, string1, string2, 0);\n\t\t}\n\t\t/// <summary>\n\t\t/// 1 based offset of string2 in string1\n\t\t/// </summary>\n\t\t/// <param name=\"start\"></param>\n\t\t/// <param name=\"string1\"></param>\n\t\t/// <param name=\"string2\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public int InStr(int start, string string1, string string2)\n\t\t{\n\t\t\treturn InStr(start, string1, string2, 0);\n\t\t}\n\t\t/// <summary>\n\t\t/// 1 based offset of string2 in string1; optionally case insensitive\n\t\t/// </summary>\n\t\t/// <param name=\"string1\"></param>\n\t\t/// <param name=\"string2\"></param>\n\t\t/// <param name=\"compare\">1 if you want case insensitive compare</param>\n\t\t/// <returns></returns>\n\t\tstatic public int InStr(string string1, string string2, int compare)\n\t\t{\n\t\t\treturn InStr(1, string1, string2, compare);\n\t\t}\n\t\t/// <summary>\n\t\t/// 1 based offset of string2 in string1; optionally case insensitive\n\t\t/// </summary>\n\t\t/// <param name=\"start\"></param>\n\t\t/// <param name=\"string1\"></param>\n\t\t/// <param name=\"string2\"></param>\n\t\t/// <param name=\"compare\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public int InStr(int start, string string1, string string2, int compare)\n\t\t{\n\t\t\tif (string1 == null || string2 == null || \n\t\t\t\tstring1.Length == 0 || start > string1.Length ||\n\t\t\t\tstart < 1)\n\t\t\t\treturn 0;\n\t\t\tif (string2.Length == 0)\n\t\t\t\treturn start;\n\n\t\t\t// Make start zero based\n\t\t\tstart--;\n\t\t\tif (start < 0)\n\t\t\t\tstart=0;\n\n\t\t\tif (compare == 1)\t// Make case insensitive comparison?\n\t\t\t{\t// yes; just make both strings lower case\n\t\t\t\tstring1 = string1.ToLower();\n\t\t\t\tstring2 = string2.ToLower();\n\t\t\t}\n\n\t\t\tint i = string1.IndexOf(string2, start);\n\t\t\treturn i+1;\t\t\t// result is 1 based\n\t\t}\n\t\t/// <summary>\n\t\t/// 1 based offset of string2 in string1 starting from end of string\n\t\t/// </summary>\n\t\t/// <param name=\"string1\"></param>\n\t\t/// <param name=\"string2\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public int InStrRev(string string1, string string2)\n\t\t{\n\t\t\treturn InStrRev(string1, string2, -1, 0);\n\t\t}\n\t\t/// <summary>\n\t\t/// 1 based offset of string2 in string1 starting from end of string - start\n\t\t/// </summary>\n\t\t/// <param name=\"string1\"></param>\n\t\t/// <param name=\"string2\"></param>\n\t\t/// <param name=\"start\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public int InStrRev(string string1, string string2, int start)\n\t\t{\n\t\t\treturn InStrRev(string1, string2, start, 0);\n\t\t}\n\t\t/// <summary>\n\t\t/// 1 based offset of string2 in string1 starting from end of string - start optionally case insensitive\n\t\t/// </summary>\n\t\t/// <param name=\"string1\"></param>\n\t\t/// <param name=\"string2\"></param>\n\t\t/// <param name=\"start\"></param>\n\t\t/// <param name=\"compare\">1 for case insensitive comparison</param>\n\t\t/// <returns></returns>\n\t\tstatic public int InStrRev(string string1, string string2, int start, int compare)\n\t\t{\n\t\t\tif (string1 == null || string2 == null || \n\t\t\t\tstring1.Length == 0 || string2.Length > string1.Length)\n\t\t\t\treturn 0;\n\n\t\t\t// TODO this is the brute force method of searching; should use better algorithm\n\t\t\tbool bCaseSensitive = compare == 1;\n\t\t\tint inc= start == -1? string1.Length: start;\n\t\t\tif (inc > string1.Length)\n\t\t\t\tinc = string1.Length;\n\t\t\twhile (inc >= string2.Length)\t// go thru the string backwards; but string still needs to long enough to hold find string\n\t\t\t{\n\t\t\t\tint i=string2.Length-1;\n\t\t\t\tfor ( ; i >= 0; i--)\t// match the find string backwards as well\n\t\t\t\t{\n\t\t\t\t\tif (bCaseSensitive)\n\t\t\t\t\t{\t\t\n\t\t\t\t\t\tif (Char.ToLower(string1[inc-string2.Length+i]) != string2[i])\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif (string1[inc-string2.Length+i] != string2[i])\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (i < 0)\t\t// We got a match\n\t\t\t\t\treturn inc+1-string2.Length;\n\t\t\t\tinc--;\t\t\t\t\t// No match try next character\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n        /// <summary>\n        /// IsNumeric returns True if the data type of Expression is Boolean, Byte, Decimal, Double, Integer, Long, \n        /// SByte, Short, Single, UInteger, ULong, or UShort. \n        /// It also returns True if Expression is a Char, String, or Object that can be successfully converted to a number.\n        ///\n        /// IsNumeric returns False if Expression is of data type Date. It returns False if Expression is a \n        /// Char, String, or Object that cannot be successfully converted to a number.\n        /// </summary>\n        /// <param name=\"v\"></param>\n        /// <returns></returns>\n        static public bool IsNumeric(object expression)\n        {\n            if (expression == null)\n                return false;\n            if (expression is string || expression is char)\n            {\n            }\n            else if (expression is bool || expression is byte || expression is sbyte ||\n                expression is decimal ||\n                expression is double || expression is float ||\n                expression is Int16 || expression is Int32 || expression is Int64 ||\n                expression is UInt16 || expression is UInt32 || expression is UInt64)\n                return true;\n\n            try\n            {\n                Convert.ToDouble(expression);\n                return true;\n            }\n            catch \n            {\n                return false;\n            }\n            \n \n        }\n/// <summary>\n/// Returns the lower case of the passed string\n/// </summary>\n/// <param name=\"str\"></param>\n/// <returns></returns>\n\t\tstatic public string LCase(string str)\n\t\t{\n\t\t\treturn str == null? null: str.ToLower();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the left n characters from the string\n\t\t/// </summary>\n\t\t/// <param name=\"str\"></param>\n\t\t/// <param name=\"count\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public string Left(string str, int count)\n\t\t{\n\t\t\tif (str == null || count >= str.Length)\n\t\t\t\treturn str;\n\t\t\telse\n\t\t\t\treturn str.Substring(0, count);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the length of the string\n\t\t/// </summary>\n\t\t/// <param name=\"str\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public int Len(string str)\n\t\t{\n\t\t\treturn str == null? 0: str.Length;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Removes leading blanks from string\n\t\t/// </summary>\n\t\t/// <param name=\"str\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public string LTrim(string str)\n\t\t{\n\t\t\tif (str == null || str.Length == 0)\n\t\t\t\treturn str;\n\n\t\t\treturn str.TrimStart(' ');\n\t\t}\n        /// <summary>\n        /// Returns the portion of the string denoted by the start.\n        /// </summary>\n        /// <param name=\"str\"></param>\n        /// <param name=\"start\">1 based starting position</param>\n        /// <returns></returns>\n        static public string Mid(string str, int start)\n        {\n            if (str == null)\n                return null;\n\n            if (start > str.Length)\n                return \"\";\n\n            return str.Substring(start - 1);\n        }\n\n\t\t/// <summary>\n\t\t/// Returns the portion of the string denoted by the start and length.\n\t\t/// </summary>\n\t\t/// <param name=\"str\"></param>\n\t\t/// <param name=\"start\">1 based starting position</param>\n\t\t/// <param name=\"length\">length to extract</param>\n\t\t/// <returns></returns>\n\t\tstatic public string Mid(string str, int start, int length)\n\t\t{\n\t\t\tif (str == null)\n\t\t\t\treturn null;\n\n\t\t\tif (start > str.Length)\n\t\t\t\treturn \"\";\n\n            if (str.Length < start - 1 + length)\n                return str.Substring(start - 1);        // Length specified is too large\n\n\t\t\treturn str.Substring(start-1, length);\n\t\t}\n\t\t//Replace(string,find,replacewith[,start[,count[,compare]]])\n\t\t/// <summary>\n\t\t/// Returns string replacing all instances of the searched for text with the replace text.\n\t\t/// </summary>\n\t\t/// <param name=\"str\"></param>\n\t\t/// <param name=\"find\"></param>\n\t\t/// <param name=\"replacewith\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public string Replace(string str, string find, string replacewith)\n\t\t{\n\t\t\treturn Replace(str, find, replacewith, 1, -1, 0);\n\t\t}\n\t\t/// <summary>\n\t\t/// Returns string replacing all instances of the searched for text starting at position \n\t\t/// start with the replace text.\n\t\t/// </summary>\n\t\t/// <param name=\"str\"></param>\n\t\t/// <param name=\"find\"></param>\n\t\t/// <param name=\"replacewith\"></param>\n\t\t/// <param name=\"start\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public string Replace(string str, string find, string replacewith, int start)\n\t\t{\n\t\t\treturn Replace(str, find, replacewith, start, -1, 0);\n\t\t}\n\t\t/// <summary>\n\t\t/// Returns string replacing 'count' instances of the searched for text starting at position \n\t\t/// start with the replace text.\n\t\t/// </summary>\n\t\t/// <param name=\"str\"></param>\n\t\t/// <param name=\"find\"></param>\n\t\t/// <param name=\"replacewith\"></param>\n\t\t/// <param name=\"start\"></param>\n\t\t/// <param name=\"count\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public string Replace(string str, string find, string replacewith, int start, int count)\n\t\t{\n\t\t\treturn Replace(str, find, replacewith, start, count, 0);\n\t\t}\n\t\t/// <summary>\n\t\t/// Returns string replacing 'count' instances of the searched for text (optionally\n\t\t/// case insensitive) starting at position start with the replace text.\n\t\t/// </summary>\n\t\t/// <param name=\"str\"></param>\n\t\t/// <param name=\"find\"></param>\n\t\t/// <param name=\"replacewith\"></param>\n\t\t/// <param name=\"start\"></param>\n\t\t/// <param name=\"count\"></param>\n\t\t/// <param name=\"compare\">1 for case insensitive search</param>\n\t\t/// <returns></returns>\n\t\tstatic public string Replace(string str, string find, string replacewith, int start, int count, int compare)\n\t\t{\n\t\t\tif (str == null || find == null || find.Length == 0 || count == 0)\n\t\t\t\treturn str;\n\n\t\t\tif (count == -1)\t\t\t\t// user want all changed?\n\t\t\t\tcount = int.MaxValue;\n\n\t\t\tStringBuilder sb = new StringBuilder(str);\n\n\t\t\tbool bCaseSensitive = compare != 0;\t\t// determine if case sensitive; compare = 0 for case sensitive\n\t\t\tif (bCaseSensitive)\n\t\t\t\tfind = find.ToLower();\n\t\t\tint inc=0;\n\t\t\tbool bReplace = (replacewith != null && replacewith.Length > 0);\n\t\t\t// TODO this is the brute force method of searching; should use better algorithm\n\t\t\twhile (inc <= sb.Length - find.Length)\n\t\t\t{\n\t\t\t\tint i=0;\n\t\t\t\tfor ( ; i < find.Length; i++)\n\t\t\t\t{\n\t\t\t\t\tif (bCaseSensitive)\n\t\t\t\t\t{\t\t\n\t\t\t\t\t\tif (Char.ToLower(sb[inc+i]) != find[i])\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif (sb[inc+i] != find[i])\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (i == find.Length)\t\t// We got a match\n\t\t\t\t{\n\t\t\t\t\t// replace the found string with the replacement string\n\t\t\t\t\tsb.Remove(inc, find.Length);\n\t\t\t\t\tif (bReplace)\n\t\t\t\t\t{\n\t\t\t\t\t\tsb.Insert(inc, replacewith);\n\t\t\t\t\t\tinc += (replacewith.Length + 1);\n\t\t\t\t\t}\n\t\t\t\t\tcount--;\n\t\t\t\t\tif (count == 0)\t\t\t// have we done as many replaces as requested?\n\t\t\t\t\t\treturn sb.ToString();\t// yes, return\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tinc++;\t\t\t\t\t// No match try next character\n\t\t\t}\n\n\t\t\treturn sb.ToString();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the rightmost length of string.\n\t\t/// </summary>\n\t\t/// <param name=\"str\"></param>\n\t\t/// <param name=\"length\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public string Right(string str, int length)\n\t\t{\n\t\t\tif (str == null || str.Length <= length)\n\t\t\t\treturn str;\n\n\t\t\tif (length <= 0)\n\t\t\t\treturn \"\";\n\n\t\t\treturn str.Substring(str.Length - length);\n\t\t}\n\t\t/// <summary>\n\t\t/// Removes trailing blanks from string.\n\t\t/// </summary>\n\t\t/// <param name=\"str\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public string RTrim(string str)\n\t\t{\n\t\t\tif (str == null || str.Length == 0)\n\t\t\t\treturn str;\n\n\t\t\treturn str.TrimEnd(' ');\n\t\t}\n\t\t/// <summary>\n\t\t/// Returns blank string of the specified length\n\t\t/// </summary>\n\t\t/// <param name=\"length\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public string Space(int length)\n\t\t{\n\t\t\treturn String(length, ' ');\n\t\t}\n\n\t\t//StrComp(string1,string2[,compare])\n\t\t/// <summary>\n\t\t/// Compares the strings. When string1 &lt; string2: -1, string1 = string2: 0, string1 > string2: 1 \n\t\t/// </summary>\n\t\t/// <param name=\"string1\"></param>\n\t\t/// <param name=\"string2\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public int StrComp(string string1, string string2)\n\t\t{\n\t\t\treturn StrComp(string1, string2, 0);\n\t\t}\n\t\t/// <summary>\n\t\t/// Compares the strings; optionally with case insensitivity. When string1 &lt; string2: -1, string1 = string2: 0, string1 > string2: 1 \n\t\t/// </summary>\n\t\t/// <param name=\"string1\"></param>\n\t\t/// <param name=\"string2\"></param>\n\t\t/// <param name=\"compare\">1 for case insensitive comparison</param>\n\t\t/// <returns></returns>\n\t\tstatic public int StrComp(string string1, string string2, int compare)\n\t\t{\n\t\t\tif (string1 == null || string2 == null)\n\t\t\t\treturn 0;\t\t\t// not technically correct; should return null\n\n\t\t\treturn compare == 0? \n\t\t\t\tstring1.CompareTo(string2):\n\t\t\t\tstring1.ToLower().CompareTo(string2.ToLower());\n\t\t}\n\n        /// <summary>\n\t\t/// Return string with the character repeated for the length\n\t\t/// </summary>\n\t\t/// <param name=\"length\"></param>\n\t\t/// <param name=\"c\"></param>\n\t\t/// <returns></returns>\n        static public string String(int length, string c)\n        {\n            if (length <= 0 || c == null || c.Length == 0)\n                return \"\";\n            return String(length, c[0]);\n        }\n\t\t/// <summary>\n\t\t/// Return string with the character repeated for the length\n\t\t/// </summary>\n\t\t/// <param name=\"length\"></param>\n\t\t/// <param name=\"c\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public string String(int length, char c)\n\t\t{\n\t\t\tif (length <= 0)\n\t\t\t\treturn \"\";\n\n\t\t\tStringBuilder sb = new StringBuilder(length, length);\n\t\t\tfor (int i = 0; i < length; i++)\n\t\t\t\tsb.Append(c);\n\t\t\treturn sb.ToString();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a string with the characters reversed.\n\t\t/// </summary>\n\t\t/// <param name=\"str\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public string StrReverse(string str)\n\t\t{\n\t\t\tif (str == null || str.Length < 2)\n\t\t\t\treturn str;\n\n\t\t\tStringBuilder sb = new StringBuilder(str, str.Length);\n\t\t\tint i = str.Length-1;\n\t\t\tforeach (char c in str)\n\t\t\t{\n\t\t\t\tsb[i--] = c;\n\t\t\t}\n\t\t\treturn sb.ToString();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Removes whitespace from beginning and end of string.\n\t\t/// </summary>\n\t\t/// <param name=\"str\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public string Trim(string str)\n\t\t{\n\t\t\tif (str == null || str.Length == 0)\n\t\t\t\treturn str;\n\n\t\t\treturn str.Trim(' ');\n\t\t}\n\t\t/// <summary>\n\t\t/// Returns the uppercase version of the string \n\t\t/// </summary>\n\t\t/// <param name=\"str\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public string UCase(string str)\n\t\t{\n\t\t\treturn str == null? null: str.ToUpper();\n\t\t}\n        /// <summary>\n        /// Rounds a number to zero decimal places\n        /// </summary>\n        /// <param name=\"n\">Number to round</param>\n        /// <returns></returns>\n        static public double Round(double n)\n        {\n            return Math.Round(n);\n        }\n        /// <summary>\n        /// Rounds a number to the specified decimal places\n        /// </summary>\n        /// <param name=\"n\">Number to round</param>\n        /// <param name=\"decimals\">Number of decimal places</param>\n        /// <returns></returns>\n        static public double Round(double n, int decimals)\n        {\n            return Math.Round(n, decimals);\n        }\n        /// <summary>\n        /// Rounds a number to zero decimal places\n        /// </summary>\n        /// <param name=\"n\">Number to round</param>\n        /// <returns></returns>\n        static public decimal Round(decimal n)\n        {\n            return Math.Round(n);\n        }\n        /// <summary>\n        /// Rounds a number to the specified decimal places\n        /// </summary>\n        /// <param name=\"n\">Number to round</param>\n        /// <param name=\"decimals\">Number of decimal places</param>\n        /// <returns></returns>\n        static public decimal Round(decimal n, int decimals)\n        {\n            return Math.Round(n, decimals);\n        }\n\n        static public decimal Round(decimal n, int decimals, int rounding)\n        {\n            return Math.Round(n, decimals, (MidpointRounding)rounding);\n        }\n\n        /// <summary>\n        /// Return Local Newline\n        /// </summary>\n        /// <returns></returns>\n        static public string VbCrlf()\n\t\t{\n\t\t\treturn Environment.NewLine;\n\t\t}\n    }\n}\n"
  },
  {
    "path": "RdlEngine/GlobalSuppressions.cs",
    "content": "﻿// This file is used by Code Analysis to maintain SuppressMessage\n// attributes that are applied to this project.\n// Project-level suppressions either have no target or are given\n// a specific target and scoped to a namespace, type, member, etc.\n\nusing System.Diagnostics.CodeAnalysis;\n\n#if !DRAWINGCOMPAT\n[assembly: SuppressMessage(\"Interoperability\", \"CA1416:Validate platform compatibility\",\n    Justification = \"System.Drawing usage is intentional\")]\n#endif\n"
  },
  {
    "path": "RdlEngine/GraphicsExtended.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Text;\nusing System.Text.RegularExpressions;\n#if DRAWINGCOMPAT\nusing Draw = Majorsilence.Drawing;\n#else\nusing Draw = System.Drawing;\n#endif\n\n#if DRAWINGCOMPAT\nnamespace Majorsilence.Drawing\n#else\nnamespace System.Drawing\n#endif\n{\n    public class GraphicsExtended\n    {\n        //drawstring justified without paragraph format\n        public static void DrawStringJustified(Draw.Graphics graphics, string s, \n            Draw.Font font, Draw.Brush brush, Draw.RectangleF layoutRectangle)\n        {\n            DrawStringJustified(graphics, s, font, brush, layoutRectangle, ' ');\n        }\n\n        //drawstring justified with paragraph format\n        public static void DrawStringJustified(Draw.Graphics graphics, string s, Draw.Font font, Draw.Brush brush, \n            Draw.RectangleF layoutRectangle, char paragraphFormat)\n        {\n            try\n            {\n                //save the current state of the graphics handle\n                Draw.Drawing2D.GraphicsState graphicsState = graphics.Save();\n                //obtain the font height to be used as line height\n                double lineHeight = (double)Math.Round(font.GetHeight(graphics), 1);\n                //string builder to format the text\n                StringBuilder text = new StringBuilder(s);\n                Draw.Font originalFont = new Draw.Font(font.FontFamily, font.Size, font.Style);\n\n                //adjust the text string to ease detection of carriage returns\n                text = text.Replace(\"\\r\\n\", \" <CR> \");\n                text = text.Replace(\"\\r\", \" <CR> \");\n                text.Append(\" <CR> \");\n\n                //ensure measure string will bring the best measures possible (antialias)\n                graphics.TextRenderingHint = Draw.Text.TextRenderingHint.AntiAlias;\n\n                //create a string format object with the generic typographic to obtain the most accurate string measurements\n                //strange, but the recommended for this case is to use a \"cloned\" stringformat\n                Draw.StringFormat stringFormat = (Draw.StringFormat)Draw.StringFormat.GenericTypographic.Clone();\n\n                //allow the correct measuring of spaces\n                stringFormat.FormatFlags = Draw.StringFormatFlags.MeasureTrailingSpaces;\n\n                //create a stringformat for leftalignment\n                Draw.StringFormat leftAlignHandle = new Draw.StringFormat();\n                leftAlignHandle.LineAlignment = Draw.StringAlignment.Near;\n\n                //create a stringformat for rightalignment\n                Draw.StringFormat rightAlignHandle = new Draw.StringFormat();\n                rightAlignHandle.LineAlignment = Draw.StringAlignment.Far;\n\n                //measure space for the given font\n                Draw.SizeF stringSize = graphics.MeasureString(\" \", font, layoutRectangle.Size, stringFormat);\n                double spaceWidth = stringSize.Width + 1;\n\n                //measure paragraph format for the given font\n                double paragraphFormatWidth = 0;\n                if (paragraphFormat != ' ')\n                {\n                    Draw.SizeF paragraphFormatSize = graphics.MeasureString(paragraphFormat.ToString(), \n                        new Draw.Font(font.FontFamily, font.Size, Draw.FontStyle.Regular), layoutRectangle.Size, stringFormat);\n                    paragraphFormatWidth = paragraphFormatSize.Width;\n                }\n\n                //total word count\n                int totalWords = Regex.Matches(text.ToString(), \" \").Count;\n\n                //array of words\n                ArrayList words = new ArrayList();\n\n                //measure each word\n                int n = 0;\n                while (true)\n                {\n                    //original word\n                    string word = Regex.Split(text.ToString(), \" \").GetValue(n).ToString();\n\n                    //add to words array the word without tags\n                    words.Add(new Word(word.Replace(\"<b>\", \"\").Replace(\"</b>\", \"\").Replace(\"<i>\", \"\").Replace(\"</i>\", \"\")));\n\n                    //marque to start bolding or/and italic\n                    if (word.ToLower().Contains(\"<b>\") && word.ToLower().Contains(\"<i>\"))\n                        font = new Draw.Font(originalFont.FontFamily, originalFont.Size, Draw.FontStyle.Bold & Draw.FontStyle.Italic);\n                    else if (word.ToLower().Contains(\"<b>\"))\n                        font = new Draw.Font(originalFont.FontFamily, originalFont.Size, Draw.FontStyle.Bold);\n                    else if (word.ToLower().Contains(\"<i>\"))\n                        font = new Draw.Font(originalFont.FontFamily, originalFont.Size, Draw.FontStyle.Italic);\n\n                    Word currentWord = (Word)words[n];\n                    currentWord.StartBold = word.ToLower().Contains(\"<b>\");\n                    currentWord.StopBold = word.ToLower().Contains(\"</b>\");\n                    currentWord.StartItalic = word.ToLower().Contains(\"<i>\");\n                    currentWord.StopItalic = word.ToLower().Contains(\"</i>\");\n\n                    //size of the word\n                    Draw.SizeF wordSize = graphics.MeasureString(currentWord.String, font, layoutRectangle.Size, stringFormat);\n                    float wordWidth = wordSize.Width;\n\n                    if (wordWidth > layoutRectangle.Width && currentWord.String != \"<CR>\")\n                    {\n                        int reduce = 1;\n                        while (true)\n                        {\n                            int lengthChars = (int)Math.Round(currentWord.String.Length / (wordWidth / layoutRectangle.Width), 0) - reduce;\n                            string cutWord = currentWord.String.Substring(0, lengthChars);\n\n                            //the new size of the word\n                            wordSize = graphics.MeasureString(cutWord, font, layoutRectangle.Size, stringFormat);\n                            wordWidth = wordSize.Width;\n\n                            //update the word string\n                            ((Word)words[n]).String = cutWord;\n\n                            //add new word\n                            if (wordWidth <= layoutRectangle.Width)\n                            {\n                                totalWords++;\n                                words.Add(new Word(\"\", 0,\n                                    currentWord.StartBold, currentWord.StopBold,\n                                    currentWord.StartItalic, currentWord.StopItalic));\n                                text.Replace(currentWord.String, cutWord + \" \" + currentWord.String.Substring(lengthChars + 1), 0, 1);\n                                break;\n                            }\n\n                            reduce++;\n                        }\n                    }\n\n                    //update the word size\n                    ((Word)words[n]).Length = wordWidth;\n\n                    //marque to stop bolding or/and italic\n                    if (word.ToLower().Contains(\"</b>\") && font.Style == Draw.FontStyle.Italic)\n                        font = new Draw.Font(originalFont.FontFamily, originalFont.Size, Draw.FontStyle.Italic);\n                    else if (word.ToLower().Contains(\"</i>\") && font.Style == Draw.FontStyle.Bold)\n                        font = new Draw.Font(originalFont.FontFamily, originalFont.Size, Draw.FontStyle.Bold);\n                    else if (word.ToLower().Contains(\"</b>\") || word.ToLower().Contains(\"</i>\"))\n                        font = new Draw.Font(originalFont.FontFamily, originalFont.Size, Draw.FontStyle.Regular);\n\n                    n++;\n                    if (n > totalWords - 1)\n                        break;\n                }\n\n                //before we start drawing, its wise to restore ou graphics objecto to its original state\n                graphics.Restore(graphicsState);\n\n                //restore to font to the original values\n                font = new Draw.Font(originalFont.FontFamily, originalFont.Size, originalFont.Style);\n\n                //start drawing word by word\n                int currentLine = 0;\n                for (int i = 0; i < totalWords; i++)\n                {\n                    bool endOfSentence = false;\n                    double wordsWidth = 0;\n                    int wordsInLine = 0;\n\n                    int j = i;\n                    for (j = i; j < totalWords; j++)\n                    {\n                        if (((Word)words[j]).String == \"<CR>\")\n                        {\n                            endOfSentence = true;\n                            break;\n                        }\n\n                        wordsWidth += ((Word)words[j]).Length + spaceWidth;\n                        if (wordsWidth > layoutRectangle.Width && j > i)\n                        {\n                            wordsWidth = wordsWidth - ((Word)words[j]).Length - (spaceWidth * wordsInLine);\n                            break;\n                        }\n\n                        wordsInLine++;\n                    }\n\n                    if (j > totalWords)\n                        endOfSentence = true;\n\n                    double widthOfBetween = 0;\n                    if (endOfSentence)\n                        widthOfBetween = spaceWidth;\n                    else\n                        widthOfBetween = (layoutRectangle.Width - wordsWidth) / (wordsInLine - 1);\n\n                    double currentTop = layoutRectangle.Top + (int)(currentLine * lineHeight);\n\n                    if (currentTop > (layoutRectangle.Height + layoutRectangle.Top))\n                    {\n                        i = totalWords;\n                        break;\n                    }\n\n                    double currentLeft = layoutRectangle.Left;\n\n                    bool lastWord = false;\n                    for (int currentWord = 0; currentWord < wordsInLine; currentWord++)\n                    {\n                        bool loop = false;\n\n                        if (((Word)words[i]).String == \"<CR>\")\n                        {\n                            i++;\n                            loop = true;\n                        }\n\n                        if (!loop)\n                        {\n                            //last word in sentence\n                            if (currentWord == wordsInLine && !endOfSentence)\n                                lastWord = true;\n\n                            if (wordsInLine == 1)\n                            {\n                                currentLeft = layoutRectangle.Left;\n                                lastWord = false;\n                            }\n\n                            Draw.RectangleF rectangleF;\n                            Draw.StringFormat stringFormatHandle;\n\n                            if (lastWord)\n                            {\n                                rectangleF = new Draw.RectangleF(layoutRectangle.Left, (float)currentTop, layoutRectangle.Width, (float)(currentTop + lineHeight));\n                                stringFormatHandle = rightAlignHandle;\n                            }\n                            else\n                            {\n                                //lets zero size for word to drawstring auto-size de word\n                                rectangleF = new Draw.RectangleF((float)currentLeft, (float)currentTop, 0, 0);\n                                stringFormatHandle = leftAlignHandle;\n                            }\n\n                            //start bolding and/or italic\n                            if (((Word)words[i]).StartBold && ((Word)words[i]).StartItalic)\n                                font = new Draw.Font(originalFont.FontFamily, originalFont.Size, Draw.FontStyle.Bold & Draw.FontStyle.Italic);\n                            else if (((Word)words[i]).StartBold)\n                                font = new Draw.Font(originalFont.FontFamily, originalFont.Size, Draw.FontStyle.Bold);\n                            else if (((Word)words[i]).StartItalic)\n                                font = new Draw.Font(originalFont.FontFamily, originalFont.Size, Draw.FontStyle.Italic);\n\n                            //draw the word\n                            graphics.DrawString(((Word)words[i]).String, font, brush, rectangleF, stringFormatHandle);\n\n                            //stop bolding and/or italic\n                            if (((Word)words[i]).StopBold && font.Style == Draw.FontStyle.Italic)\n                                font = new Draw.Font(originalFont.FontFamily, originalFont.Size, Draw.FontStyle.Regular);\n                            else if (((Word)words[i]).StopItalic && font.Style == Draw.FontStyle.Bold)\n                                font = new Draw.Font(originalFont.FontFamily, originalFont.Size, Draw.FontStyle.Bold);\n                            else if (((Word)words[i]).StopBold || ((Word)words[i]).StopItalic)\n                                font = new Draw.Font(originalFont.FontFamily, originalFont.Size, Draw.FontStyle.Regular);\n\n                            //paragraph formating\n                            if (endOfSentence && currentWord == wordsInLine - 1 && paragraphFormat != ' ')\n                            {\n                                currentLeft += ((Word)words[i]).Length;\n                                //draw until end of line\n                                while (currentLeft + paragraphFormatWidth <= layoutRectangle.Left + layoutRectangle.Width)\n                                {\n                                    rectangleF = new Draw.RectangleF((float)currentLeft, (float)currentTop, 0, 0);\n                                    //draw the paragraph format\n                                    graphics.DrawString(paragraphFormat.ToString(), font, brush, rectangleF, stringFormatHandle);\n                                    currentLeft += paragraphFormatWidth;\n                                }\n                            }\n                            else\n                                currentLeft += ((Word)words[i]).Length + widthOfBetween;\n\n                            //go to next word\n                            i++;\n                        }\n                    }\n\n                    currentLine++;\n\n                    if (i >= totalWords)\n                        break;\n\n                    //compensate endfor\n                    if (((Word)words[i]).String != \"<CR>\")\n                        i--;\n                }\n            }\n            catch (Exception ex)\n            {\n                throw new Exception(ex.Message);\n            }\n        }\n\n        //class to define the structure of the word\n        public class Word\n        {\n            private string s;\n            private double length;\n            private bool startBold, stopBold;\n            private bool startItalic, stopItalic;\n\n            public Word(string s)\n            {\n                this.s = s;\n                length = 0;\n                this.startBold = false;\n                this.stopBold = false;\n                this.startItalic = false;\n                this.stopItalic = false;\n            }\n\n            public Word(string s, double length, bool startBold, bool stopBold, bool startItalic, bool stopItalic)\n            {\n                this.s = s;\n                this.length = length;\n                this.startBold = startBold;\n                this.stopBold = stopBold;\n                this.startItalic = startItalic;\n                this.stopItalic = stopItalic;\n            }\n\n            public string String\n            {\n                get\n                {\n                    return s;\n                }\n                set\n                {\n                    s = value;\n                }\n            }\n\n            public double Length\n            {\n                get\n                {\n                    return length;\n                }\n                set\n                {\n                    length = value;\n                }\n            }\n\n            public bool StartBold\n            {\n                get\n                {\n                    return startBold;\n                }\n                set\n                {\n                    startBold = value;\n                }\n            }\n\n            public bool StopBold\n            {\n                get\n                {\n                    return stopBold;\n                }\n                set\n                {\n                    stopBold = value;\n                }\n            }\n\n            public bool StartItalic\n            {\n                get\n                {\n                    return startItalic;\n                }\n                set\n                {\n                    startItalic = value;\n                }\n            }\n\n            public bool StopItalic\n            {\n                get\n                {\n                    return stopItalic;\n                }\n                set\n                {\n                    stopItalic = value;\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "RdlEngine/Majorsilence.Reporting.RdlEngine.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\t<PropertyGroup>\n\t\t<ProjectType>Local</ProjectType>\n\t\t<DelaySign>false</DelaySign>\n\t\t<OutputType>Library</OutputType>\n\t\t<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>\n\t\t<GeneratePackageOnBuild>True</GeneratePackageOnBuild>\n\t\t<AssemblyTitle>RDL Engine</AssemblyTitle>\n\t\t<DelaySign>false</DelaySign>\n\t\t<PackageId>Majorsilence.Reporting.RdlEngine</PackageId>\n\t\t<Configurations>Debug;Release;Debug-DrawingCompat;Release-DrawingCompat</Configurations>\n\t\t<TargetFrameworks>net48;net8.0;net10.0</TargetFrameworks>\n        <TargetFrameworks Condition=\"'$(OS)' == 'Unix'\">net8.0;net10.0</TargetFrameworks>\n\t\t<WarningsAsErrors>4014</WarningsAsErrors>\n\t</PropertyGroup>\n\t<PropertyGroup Condition=\"'$(Configuration)' == 'Debug-DrawingCompat' Or '$(Configuration)' == 'Release-DrawingCompat'\">\n\t\t<PackageId>Majorsilence.Reporting.RdlEngine.SkiaSharp</PackageId>\n\t</PropertyGroup>\n\t<ItemGroup>\n\t\t<Reference Update=\"System\">\n\t\t\t<Name>System</Name>\n\t\t</Reference>\n\t\t<Reference Update=\"System.Data\">\n\t\t\t<Name>System.Data</Name>\n\t\t</Reference>\n\t\t<Reference Update=\"System.Drawing\">\n\t\t\t<Name>System.Drawing</Name>\n\t\t</Reference>\n\t\t<Reference Update=\"System.Xml\">\n\t\t\t<Name>System.XML</Name>\n\t\t</Reference>\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<Compile Update=\"Resources\\Strings.Designer.cs\">\n\t\t\t<AutoGen>True</AutoGen>\n\t\t\t<DesignTime>True</DesignTime>\n\t\t\t<DependentUpon>Strings.resx</DependentUpon>\n\t\t</Compile>\n\t\t<Compile Update=\"Resources\\Strings.ru-RU.Designer.cs\">\n\t\t\t<AutoGen>True</AutoGen>\n\t\t\t<DesignTime>True</DesignTime>\n\t\t\t<DependentUpon>Strings.ru-RU.resx</DependentUpon>\n\t\t</Compile>\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<None Update=\"RdlEngineConfig.xml\">\n\t\t\t<CopyToOutputDirectory>Always</CopyToOutputDirectory>\n\t\t</None>\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<ProjectReference Include=\"..\\DataProviders\\Majorsilence.Reporting.DataProviders.csproj\" />\n\t</ItemGroup>\n\t<ItemGroup Condition=\"'$(DefineConstants.Contains(DRAWINGCOMPAT))' == True\">\n\t\t<ProjectReference Include=\"..\\Majorsilence.Drawing.Common\\Majorsilence.Drawing.Common.csproj\" />\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<EmbeddedResource Update=\"Resources\\Strings.resx\">\n\t\t\t<Generator>ResXFileCodeGenerator</Generator>\n\t\t\t<LastGenOutput>Strings.Designer.cs</LastGenOutput>\n\t\t</EmbeddedResource>\n\t\t<EmbeddedResource Update=\"Resources\\Strings.ru-RU.resx\">\n\t\t\t<LastGenOutput>Strings.ru-RU.Designer.cs</LastGenOutput>\n\t\t</EmbeddedResource>\n\t</ItemGroup>\n\t<PropertyGroup />\n\t<ItemGroup>\n\t\t<Compile Update=\"Resources\\Strings.Designer.cs\">\n\t\t\t<DesignTime>True</DesignTime>\n\t\t\t<AutoGen>True</AutoGen>\n\t\t\t<DependentUpon>Strings.resx</DependentUpon>\n\t\t</Compile>\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<EmbeddedResource Update=\"Resources\\Strings.resx\">\n\t\t\t<Generator>PublicResXFileCodeGenerator</Generator>\n\t\t\t<LastGenOutput>Strings.Designer.cs</LastGenOutput>\n\t\t</EmbeddedResource>\n\t\t<EmbeddedResource Update=\"Resources\\Strings.ru-RU.resx\">\n\t\t\t<Generator>PublicResXFileCodeGenerator</Generator>\n\t\t</EmbeddedResource>\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<PackageReference Include=\"iTextSharp.LGPLv2.Core\" />\n\t\t<PackageReference Include=\"NPOI\" />\n\t\t<PackageReference Include=\"SharpZipLib\" />\n\t\t<PackageReference Include=\"SkiaSharp\" />\n\n\t\t<PackageReference Include=\"System.Data.Odbc\" />\n\t\t<PackageReference Include=\"System.Data.OleDb\" />\n\t\t<PackageReference Include=\"System.CodeDom\" />\n\t\t<PackageReference Condition=\"'$(DefineConstants.Contains(DRAWINGCOMPAT))' == False\" Include=\"System.Drawing.Common\" />\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<Compile Remove=\"PageDrawing.cs\" />\n\t\t<Compile Remove=\"RdlPrint.cs\" />\n\t\t<Compile Remove=\"Render\\CompilationExtensions.cs\" />\n\t</ItemGroup>\n\t<ItemGroup Condition=\"'$(DefineConstants.Contains(DRAWINGCOMPAT))'\">\n\t\t<Compile Remove=\"Definition\\EMFConverter\\**\\**\\*.cs\" />\n\t</ItemGroup>\n    <ItemGroup Condition=\"'$(TargetFramework)' == 'net48'\">\n        <Reference Include=\"System.Net.Http\" />\n    </ItemGroup>\n</Project>\n"
  },
  {
    "path": "RdlEngine/PageDrawing.cs",
    "content": "using fyiReporting.RDL;\nusing System;\nusing System.Collections;\nusing System.Drawing;\nusing System.Drawing.Drawing2D;\nusing System.IO;\n\nnamespace fyiReporting.RdlPrint\n{\n    /// <summary>\n    /// Helper class used by RdlPrint\n    /// </summary>\n    public class PageDrawing\n    {\n        private Pages _pgs;  \t\t\t\t// the pages of the report to view\n\n        // During drawing these are set\n        float _left;\n        float _top;\n        float _vScroll;\n        float _hScroll;\n        float DpiX;\n        float DpiY;\n\n        public PageDrawing() : this(null)\n        {         \n        }\n\n        public PageDrawing(Pages pgs)\n        {\n            _pgs = pgs;\n        }\n\n        /// <summary>\n        /// Enabling the SelectTool allows the user to select text and images.  Enabling or disabling\n        /// the SelectTool also clears out the current selection.\n        /// </summary>\n        internal Pages Pgs\n        {\n            get { return _pgs; }\n            set { _pgs = value; }\n        }\n\n        /// <summary>\n        /// Draw- simple draw of an entire page.  Useful when printing or creating an image.\n        /// </summary>\n        /// <param name=\"g\"></param>\n        /// <param name=\"page\"></param>\n        /// <param name=\"clipRectangle\"></param>\n        public void Draw(Graphics g, int page, System.Drawing.Rectangle clipRectangle, bool drawBackground, PointF pageOffset)\n        {\n            DpiX = g.DpiX;\t\t\t // this can change (e.g. printing graphics context)\n            DpiY = g.DpiY;\n\n            //\t\t\tg.InterpolationMode = InterpolationMode.HighQualityBilinear;\t// try to unfuzz charts\n            g.PageUnit = GraphicsUnit.Pixel;\n            g.ScaleTransform(1, 1);\n\n            if (!pageOffset.IsEmpty)    // used when correcting for non-printable area on paper\n            {\n                g.TranslateTransform(pageOffset.X, pageOffset.Y);\n            }\n\n            _left = 0;\n            _top = 0;\n            _hScroll = 0;\n            _vScroll = 0;\n\n            RectangleF r = new RectangleF(clipRectangle.X, clipRectangle.Y,\n                                            clipRectangle.Width, clipRectangle.Height);\n\n            if (drawBackground)\n                g.FillRectangle(Brushes.White, PixelsX(_left), PixelsY(_top),\n                    PixelsX(_pgs.PageWidth), PixelsY(_pgs.PageHeight));\n\n            ProcessPage(g, _pgs[page], r, false);\n        }\n\n        internal float PixelsX(float x)\n        {\n            return (float)(x * DpiX / 72.0f);\n        }\n\n        internal float PixelsY(float y)\n        {\n            return (float)(y * DpiY / 72.0f);\n        }\n\n        // render all the objects in a page (or any composite object\n        private void ProcessPage(Graphics g, IEnumerable p, RectangleF clipRect, bool bHitList)\n        {\n            // TODO: (Peter) Support can grow and can shrink\n            foreach (PageItem pi in p)\n            {\n                //if (pi is PageTextHtml)\n                //{\t// PageTextHtml is actually a composite object (just like a page)\n                //    if (SelectTool && bHitList)\n                //    {\n                //        RectangleF hr = new RectangleF(PixelsX(pi.X + _left - _hScroll), PixelsY(pi.Y + _top - _vScroll),\n                //                                                            PixelsX(pi.W), PixelsY(pi.H));\n                //        _HitList.Add(new HitListEntry(hr, pi));\n                //    }\n                //    ProcessHtml(pi as PageTextHtml, g, clipRect, bHitList);\n                //    continue;\n                //}\n\n                if (pi is PageLine)\n                {\n                    PageLine pl = pi as PageLine;\n                    DrawLine(pl.SI.BColorLeft, pl.SI.BStyleLeft, pl.SI.BWidthLeft,\n                        g, PixelsX(pl.X + _left - _hScroll), PixelsY(pl.Y + _top - _vScroll),\n                        PixelsX(pl.X2 + _left - _hScroll), PixelsY(pl.Y2 + _top - _vScroll));\n                    continue;\n                }\n\n\n                RectangleF rect = new RectangleF(PixelsX(pi.X + _left - _hScroll), PixelsY(pi.Y + _top - _vScroll),\n                                                                    PixelsX(pi.W), PixelsY(pi.H));\n\n                // Maintain the hit list\n                //if (bHitList)\n                //{\n                //    if (SelectTool)\n                //    {   // we need all PageText and PageImage items that have been displayed\n                //        if (pi is PageText || pi is PageImage)\n                //        {\n                //            _HitList.Add(new HitListEntry(rect, pi));\n                //        }\n                //    }\n                //    // Only care about items with links and tips\n                //    else if (pi.HyperLink != null || pi.BookmarkLink != null || pi.Tooltip != null)\n                //    {\n                //        HitListEntry hle;\n                //        if (pi is PagePolygon)\n                //            hle = new HitListEntry(pi as PagePolygon, _left - _hScroll, _top - _vScroll, this);\n                //        else\n                //            hle = new HitListEntry(rect, pi);\n                //        _HitList.Add(hle);\n                //    }\n                //}\n\n                if ((pi is PagePolygon) || (pi is PageCurve))\n                { // intentionally empty; polygon's rectangles aren't calculated\n                }\n                else if (!rect.IntersectsWith(clipRect))\n                    continue;\n\n                if (pi.SI.BackgroundImage != null)\n                {\t// put out any background image\n                    PageImage i = pi.SI.BackgroundImage;\n                    DrawImageBackground(i, pi.SI, g, rect);\n                }\n\n                if (pi is PageText)\n                {\n                    // TODO: enable can shrink, can grow\n                    // 2005 spec file, page 9, in the text box has\n                    // CanGrow and CanShrink\n                    PageText pt = pi as PageText;\n                    DrawString(pt, g, rect);\n                }\n                else if (pi is PageImage)\n                {\n                    PageImage i = pi as PageImage;\n                    DrawImage(i, g, rect);\n                }\n                else if (pi is PageRectangle)\n                {\n                    this.DrawBackground(g, rect, pi.SI);\n                }\n                else if (pi is PageEllipse)\n                {\n                    PageEllipse pe = pi as PageEllipse;\n                    DrawEllipse(pe, g, rect);\n                }\n                else if (pi is PagePie)\n                {\n                    PagePie pp = pi as PagePie;\n                    DrawPie(pp, g, rect);\n                }\n                else if (pi is PagePolygon)\n                {\n                    PagePolygon ppo = pi as PagePolygon;\n                    FillPolygon(ppo, g, rect);\n                }\n                else if (pi is PageCurve)\n                {\n                    PageCurve pc = pi as PageCurve;\n                    DrawCurve(pc.SI.BColorLeft, pc.SI.BStyleLeft, pc.SI.BWidthLeft,\n                        g, pc.Points, pc.Offset, pc.Tension);\n                }\n\n\n                DrawBorder(pi, g, rect);\n            }\n        }\n\n        private void DrawBackground(Graphics g, System.Drawing.RectangleF rect, StyleInfo si)\n        {\n            LinearGradientBrush linGrBrush = null;\n            SolidBrush sb = null;\n            HatchBrush hb = null;\n            try\n            {\n                if (si.BackgroundGradientType != BackgroundGradientTypeEnum.None &&\n                    !si.BackgroundGradientEndColor.IsEmpty &&\n                    !si.BackgroundColor.IsEmpty)\n                {\n                    Color c = si.BackgroundColor;\n                    Color ec = si.BackgroundGradientEndColor;\n\n                    switch (si.BackgroundGradientType)\n                    {\n                        case BackgroundGradientTypeEnum.LeftRight:\n                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.Horizontal);\n                            break;\n                        case BackgroundGradientTypeEnum.TopBottom:\n                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.Vertical);\n                            break;\n                        case BackgroundGradientTypeEnum.Center:\n                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.Horizontal);\n                            break;\n                        case BackgroundGradientTypeEnum.DiagonalLeft:\n                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.ForwardDiagonal);\n                            break;\n                        case BackgroundGradientTypeEnum.DiagonalRight:\n                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.BackwardDiagonal);\n                            break;\n                        case BackgroundGradientTypeEnum.HorizontalCenter:\n                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.Horizontal);\n                            break;\n                        case BackgroundGradientTypeEnum.VerticalCenter:\n                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.Vertical);\n                            break;\n                        default:\n                            break;\n                    }\n                }\n                if (si.PatternType != patternTypeEnum.None)\n                {\n                    switch (si.PatternType)\n                    {\n                        case patternTypeEnum.BackwardDiagonal:\n                            hb = new HatchBrush(HatchStyle.BackwardDiagonal, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.CheckerBoard:\n                            hb = new HatchBrush(HatchStyle.LargeCheckerBoard, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.Cross:\n                            hb = new HatchBrush(HatchStyle.Cross, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.DarkDownwardDiagonal:\n                            hb = new HatchBrush(HatchStyle.DarkDownwardDiagonal, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.DarkHorizontal:\n                            hb = new HatchBrush(HatchStyle.DarkHorizontal, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.DiagonalBrick:\n                            hb = new HatchBrush(HatchStyle.DiagonalBrick, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.HorizontalBrick:\n                            hb = new HatchBrush(HatchStyle.HorizontalBrick, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.LargeConfetti:\n                            hb = new HatchBrush(HatchStyle.LargeConfetti, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.OutlinedDiamond:\n                            hb = new HatchBrush(HatchStyle.OutlinedDiamond, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.SmallConfetti:\n                            hb = new HatchBrush(HatchStyle.SmallConfetti, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.SolidDiamond:\n                            hb = new HatchBrush(HatchStyle.SolidDiamond, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.Vertical:\n                            hb = new HatchBrush(HatchStyle.Vertical, si.Color, si.BackgroundColor);\n                            break;\n                    }\n                }\n\n                if (linGrBrush != null)\n                {\n                    g.FillRectangle(linGrBrush, rect);\n                    linGrBrush.Dispose();\n                }\n                else if (hb != null)\n                {\n                    g.FillRectangle(hb, rect);\n                    hb.Dispose();\n                }\n                else if (!si.BackgroundColor.IsEmpty)\n                {\n                    sb = new SolidBrush(si.BackgroundColor);\n                    g.FillRectangle(sb, rect);\n                    sb.Dispose();\n                }\n            }\n            finally\n            {\n                if (linGrBrush != null)\n                    linGrBrush.Dispose();\n                if (sb != null)\n                    sb.Dispose();\n            }\n            return;\n        }\n\n        private void DrawBorder(PageItem pi, Graphics g, RectangleF r)\n        {\n            if (pi.GetType().Name.Equals(\"PagePie\")) return;\n            if (r.Height <= 0 || r.Width <= 0)\t\t// no bounding box to use\n                return;\n\n            StyleInfo si = pi.SI;\n\n            DrawLine(si.BColorTop, si.BStyleTop, si.BWidthTop, g, r.X, r.Y, r.Right, r.Y);\n\n            DrawLine(si.BColorRight, si.BStyleRight, si.BWidthRight, g, r.Right, r.Y, r.Right, r.Bottom);\n\n            DrawLine(si.BColorLeft, si.BStyleLeft, si.BWidthLeft, g, r.X, r.Y, r.X, r.Bottom);\n\n            DrawLine(si.BColorBottom, si.BStyleBottom, si.BWidthBottom, g, r.X, r.Bottom, r.Right, r.Bottom);\n\n            return;\n\n        }\n\n        private void DrawImage(PageImage pi, Graphics g, RectangleF r)\n        {\n            Stream strm = null;\n            System.Drawing.Image im = null;\n            try\n            {\n                strm = new MemoryStream(pi.GetImageData((int)r.Width, (int)r.Height));\n                im = System.Drawing.Image.FromStream(strm);\n                DrawImageSized(pi, im, g, r);\n            }\n            finally\n            {\n                if (strm != null)\n                    strm.Close();\n                if (im != null)\n                    im.Dispose();\n            }\n\n        }\n        private void DrawImageBackground(PageImage pi, StyleInfo si, Graphics g, RectangleF r)\n        {\n            Stream strm = null;\n            System.Drawing.Image im = null;\n            try\n            {\n                // http://www.fyireporting.com/forum/viewtopic.php?t=892\n                //A.S.> convert pt to px if needed(when printing we need px, when draw preview - pt) \n\n                RectangleF r2;\n                if (g.PageUnit == GraphicsUnit.Pixel)\n                {\n                    r2 = new RectangleF(r.Left + (si.PaddingLeft * g.DpiX) / 72,\n                    r.Top + (si.PaddingTop * g.DpiX) / 72,\n                    r.Width - ((si.PaddingLeft + si.PaddingRight) * g.DpiX) / 72,\n                    r.Height - ((si.PaddingTop + si.PaddingBottom) * g.DpiX) / 72);\n                }\n                else\n                {\n                    // adjust drawing rectangle based on padding\n                    r2 = new RectangleF(r.Left + si.PaddingLeft,\n                    r.Top + si.PaddingTop,\n                    r.Width - si.PaddingLeft - si.PaddingRight,\n                    r.Height - si.PaddingTop - si.PaddingBottom);\n                }\n\n                strm = new MemoryStream(pi.GetImageData((int)r2.Width, (int)r2.Height));\n                im = System.Drawing.Image.FromStream(strm);\n\n                int repeatX = 0;\n                int repeatY = 0;\n                switch (pi.Repeat)\n                {\n                    case ImageRepeat.Repeat:\n                        repeatX = (int)Math.Floor(r2.Width / pi.SamplesW);\n                        repeatY = (int)Math.Floor(r2.Height / pi.SamplesH);\n                        break;\n                    case ImageRepeat.RepeatX:\n                        repeatX = (int)Math.Floor(r2.Width / pi.SamplesW);\n                        repeatY = 1;\n                        break;\n                    case ImageRepeat.RepeatY:\n                        repeatY = (int)Math.Floor(r2.Height / pi.SamplesH);\n                        repeatX = 1;\n                        break;\n                    case ImageRepeat.NoRepeat:\n                    default:\n                        repeatX = repeatY = 1;\n                        break;\n                }\n\n                //make sure the image is drawn at least 1 times \n                repeatX = Math.Max(repeatX, 1);\n                repeatY = Math.Max(repeatY, 1);\n\n                float startX = r2.Left;\n                float startY = r2.Top;\n\n                Region saveRegion = g.Clip;\n                Region clipRegion = new Region(g.Clip.GetRegionData());\n                clipRegion.Intersect(r2);\n                g.Clip = clipRegion;\n\n                for (int i = 0; i < repeatX; i++)\n                {\n                    for (int j = 0; j < repeatY; j++)\n                    {\n                        float currX = startX + i * pi.SamplesW;\n                        float currY = startY + j * pi.SamplesH;\n                        g.DrawImage(im, new RectangleF(currX, currY, pi.SamplesW, pi.SamplesH));\n                    }\n                }\n                g.Clip = saveRegion;\n            }\n            finally\n            {\n                if (strm != null)\n                    strm.Close();\n                if (im != null)\n                    im.Dispose();\n            }\n        }\n        private void DrawImageSized(PageImage pi, System.Drawing.Image im, Graphics g, RectangleF r)\n        {\n            float height, width;\t\t// some work variables\n            StyleInfo si = pi.SI;\n\n            // adjust drawing rectangle based on padding\n\n            // http://www.fyireporting.com/forum/viewtopic.php?t=892\n            //A.S.> convert pt to px if needed(when printing we need px, when draw preview - pt) \n\n            RectangleF r2;\n            if (g.PageUnit == GraphicsUnit.Pixel)\n            {\n                r2 = new RectangleF(r.Left + (si.PaddingLeft * g.DpiX) / 72,\n                r.Top + (si.PaddingTop * g.DpiX) / 72,\n                r.Width - ((si.PaddingLeft + si.PaddingRight) * g.DpiX) / 72,\n                r.Height - ((si.PaddingTop + si.PaddingBottom) * g.DpiX) / 72);\n            }\n            else\n            {\n                // adjust drawing rectangle based on padding\n                r2 = new RectangleF(r.Left + si.PaddingLeft,\n                r.Top + si.PaddingTop,\n                r.Width - si.PaddingLeft - si.PaddingRight,\n                r.Height - si.PaddingTop - si.PaddingBottom);\n            } \n\n            System.Drawing.Rectangle ir;\t// int work rectangle\n            ir = new System.Drawing.Rectangle(Convert.ToInt32(r2.Left), Convert.ToInt32(r2.Top),\n                               Convert.ToInt32(r2.Width), Convert.ToInt32(r2.Height));\n            switch (pi.Sizing)\n            {\n                case ImageSizingEnum.AutoSize:\n                    // Note: GDI+ will stretch an image when you only provide\n                    //  the left/top coordinates.  This seems pretty stupid since\n                    //  it results in the image being out of focus even though\n                    //  you don't want the image resized.\n                    if (g.DpiX == im.HorizontalResolution &&\n                        g.DpiY == im.VerticalResolution)\n                    {\n                        ir = new System.Drawing.Rectangle(Convert.ToInt32(r2.Left), Convert.ToInt32(r2.Top),\n                                                        im.Width, im.Height);\n                    }\n                    g.DrawImage(im, ir);\n\n                    break;\n                case ImageSizingEnum.Clip:\n                    Region saveRegion = g.Clip;\n                    Region clipRegion = new Region(g.Clip.GetRegionData());\n                    clipRegion.Intersect(r2);\n                    g.Clip = clipRegion;\n                    if (g.DpiX == im.HorizontalResolution &&\n                        g.DpiY == im.VerticalResolution)\n                    {\n                        ir = new System.Drawing.Rectangle(Convert.ToInt32(r2.Left), Convert.ToInt32(r2.Top),\n                                                        im.Width, im.Height);\n                    }\n                    g.DrawImage(im, ir);\n                    g.Clip = saveRegion;\n                    break;\n                case ImageSizingEnum.FitProportional:\n                    float ratioIm = (float)im.Height / (float)im.Width;\n                    float ratioR = r2.Height / r2.Width;\n                    height = r2.Height;\n                    width = r2.Width;\n                    if (ratioIm > ratioR)\n                    {\t// this means the rectangle width must be corrected\n                        width = height * (1 / ratioIm);\n                    }\n                    else if (ratioIm < ratioR)\n                    {\t// this means the ractangle height must be corrected\n                        height = width * ratioIm;\n                    }\n                    r2 = new RectangleF(r2.X, r2.Y, width, height);\n                    g.DrawImage(im, r2);\n                    break;\n                case ImageSizingEnum.Fit:\n                default:\n                    g.DrawImage(im, r2);\n                    break;\n            }\n\n            //if (SelectTool && pi.AllowSelect && _SelectList.Contains(pi))\n            //{\n            //    g.FillRectangle(new SolidBrush(Color.FromArgb(50, _SelectItemColor)), ir);\n            //}\n\n            return;\n        }\n\n        private void DrawLine(Color c, BorderStyleEnum bs, float w, Graphics g,\n                                float x, float y, float x2, float y2)\n        {\n            if (bs == BorderStyleEnum.None || c.IsEmpty || w <= 0)\t// nothing to draw\n                return;\n\n            float tmpW = w;\n            if (g.PageUnit == GraphicsUnit.Pixel)\n                tmpW = (tmpW * g.DpiX) / 72;\n            Pen p = new Pen(c, tmpW);\n            try\n            {\n                p = new Pen(c, w);\n                switch (bs)\n                {\n                    case BorderStyleEnum.Dashed:\n                        p.DashStyle = DashStyle.Dash;\n                        break;\n                    case BorderStyleEnum.Dotted:\n                        p.DashStyle = DashStyle.Dot;\n                        break;\n                    case BorderStyleEnum.Double:\n                    case BorderStyleEnum.Groove:\n                    case BorderStyleEnum.Inset:\n                    case BorderStyleEnum.Solid:\n                    case BorderStyleEnum.Outset:\n                    case BorderStyleEnum.Ridge:\n                    case BorderStyleEnum.WindowInset:\n                    default:\n                        p.DashStyle = DashStyle.Solid;\n                        break;\n                }\n\n                g.DrawLine(p, x, y, x2, y2);\n            }\n            finally\n            {\n                if (p != null)\n                    p.Dispose();\n            }\n\n        }\n\n        private void DrawCurve(Color c, BorderStyleEnum bs, float w, Graphics g,\n                                PointF[] points, int Offset, float Tension)\n        {\n            if (bs == BorderStyleEnum.None || c.IsEmpty || w <= 0)\t// nothing to draw\n                return;\n\n            Pen p = null;\n            try\n            {\n                p = new Pen(c, w);\n                switch (bs)\n                {\n                    case BorderStyleEnum.Dashed:\n                        p.DashStyle = DashStyle.Dash;\n                        break;\n                    case BorderStyleEnum.Dotted:\n                        p.DashStyle = DashStyle.Dot;\n                        break;\n                    case BorderStyleEnum.Double:\n                    case BorderStyleEnum.Groove:\n                    case BorderStyleEnum.Inset:\n                    case BorderStyleEnum.Solid:\n                    case BorderStyleEnum.Outset:\n                    case BorderStyleEnum.Ridge:\n                    case BorderStyleEnum.WindowInset:\n                    default:\n                        p.DashStyle = DashStyle.Solid;\n                        break;\n                }\n                PointF[] tmp = new PointF[points.Length];\n                for (int i = 0; i < points.Length; i++)\n                {\n\n                    tmp[i].X = PixelsX(points[i].X + _left - _hScroll);\n                    tmp[i].Y = PixelsY(points[i].Y + _top - _vScroll);\n                }\n\n                g.DrawCurve(p, tmp, Offset, tmp.Length - 1, Tension);\n            }\n            finally\n            {\n                if (p != null)\n                    p.Dispose();\n            }\n\n        }\n\n        private void DrawEllipse(PageEllipse pe, Graphics g, RectangleF r)\n        {\n            StyleInfo si = pe.SI;\n            if (!si.BackgroundColor.IsEmpty)\n            {\n                g.FillEllipse(new SolidBrush(si.BackgroundColor), r);\n            }\n            if (si.BStyleTop != BorderStyleEnum.None)\n            {\n                Pen p = new Pen(si.BColorTop, si.BWidthTop);\n                switch (si.BStyleTop)\n                {\n                    case BorderStyleEnum.Dashed:\n                        p.DashStyle = DashStyle.Dash;\n                        break;\n                    case BorderStyleEnum.Dotted:\n                        p.DashStyle = DashStyle.Dot;\n                        break;\n                    case BorderStyleEnum.Double:\n                    case BorderStyleEnum.Groove:\n                    case BorderStyleEnum.Inset:\n                    case BorderStyleEnum.Solid:\n                    case BorderStyleEnum.Outset:\n                    case BorderStyleEnum.Ridge:\n                    case BorderStyleEnum.WindowInset:\n                    default:\n                        p.DashStyle = DashStyle.Solid;\n                        break;\n                }\n                g.DrawEllipse(p, r);\n            }\n        }\n\n        private void FillPolygon(PagePolygon pp, Graphics g, RectangleF r)\n        {\n\n            StyleInfo si = pp.SI;\n            PointF[] tmp = new PointF[pp.Points.Length];\n            if (!si.BackgroundColor.IsEmpty)\n            //RectangleF(PixelsX(pi.X + _left - _hScroll), PixelsY(pi.Y + _top - _vScroll), \n            //                                                                    PixelsX(pi.W), PixelsY(pi.H))           \n            {\n                for (int i = 0; i < pp.Points.Length; i++)\n                {\n\n                    tmp[i].X = PixelsX(pp.Points[i].X + _left - _hScroll);\n                    tmp[i].Y = PixelsY(pp.Points[i].Y + _top - _vScroll);\n                }\n                g.FillPolygon(new SolidBrush(si.BackgroundColor), tmp);\n            }\n        }\n\n        private void DrawPie(PagePie pp, Graphics g, RectangleF r)\n        {\n            StyleInfo si = pp.SI;\n            if (!si.BackgroundColor.IsEmpty)\n            {\n                g.FillPie(new SolidBrush(si.BackgroundColor), (int)r.X, (int)r.Y, (int)r.Width, (int)r.Height, (float)pp.StartAngle, (float)pp.SweepAngle);\n            }\n\n            if (si.BStyleTop != BorderStyleEnum.None)\n            {\n                Pen p = new Pen(si.BColorTop, si.BWidthTop);\n                switch (si.BStyleTop)\n                {\n                    case BorderStyleEnum.Dashed:\n                        p.DashStyle = DashStyle.Dash;\n                        break;\n                    case BorderStyleEnum.Dotted:\n                        p.DashStyle = DashStyle.Dot;\n                        break;\n                    case BorderStyleEnum.Double:\n                    case BorderStyleEnum.Groove:\n                    case BorderStyleEnum.Inset:\n                    case BorderStyleEnum.Solid:\n                    case BorderStyleEnum.Outset:\n                    case BorderStyleEnum.Ridge:\n                    case BorderStyleEnum.WindowInset:\n                    default:\n                        p.DashStyle = DashStyle.Solid;\n                        break;\n                }\n                g.DrawPie(p, r, pp.StartAngle, pp.SweepAngle);\n            }\n        }\n\n        private void DrawString(PageText pt, Graphics g, RectangleF r)\n        {\n            StyleInfo si = pt.SI;\n            string s = pt.Text;\n\n            Font drawFont = null;\n            StringFormat drawFormat = null;\n            Brush drawBrush = null;\n            try\n            {\n                // STYLE\n                System.Drawing.FontStyle fs = 0;\n                if (si.FontStyle == FontStyleEnum.Italic)\n                    fs |= System.Drawing.FontStyle.Italic;\n\n                switch (si.TextDecoration)\n                {\n                    case TextDecorationEnum.Underline:\n                        fs |= System.Drawing.FontStyle.Underline;\n                        break;\n                    case TextDecorationEnum.LineThrough:\n                        fs |= System.Drawing.FontStyle.Strikeout;\n                        break;\n                    case TextDecorationEnum.Overline:\n                    case TextDecorationEnum.None:\n                        break;\n                }\n\n                // WEIGHT\n                switch (si.FontWeight)\n                {\n                    case FontWeightEnum.Bold:\n                    case FontWeightEnum.Bolder:\n                    case FontWeightEnum.W500:\n                    case FontWeightEnum.W600:\n                    case FontWeightEnum.W700:\n                    case FontWeightEnum.W800:\n                    case FontWeightEnum.W900:\n                        fs |= System.Drawing.FontStyle.Bold;\n                        break;\n                    default:\n                        break;\n                }\n                try\n                {\n                    drawFont = new Font(si.GetFontFamily(), si.FontSize, fs);\t// si.FontSize already in points\n                }\n                catch (ArgumentException)\n                {\n                    drawFont = new Font(\"Arial\", si.FontSize, fs);\t// if this fails we'll let the error pass thru\n                }\n                // ALIGNMENT\n                drawFormat = new StringFormat();\n                switch (si.TextAlign)\n                {\n                    case TextAlignEnum.Right:\n                        drawFormat.Alignment = StringAlignment.Far;\n                        break;\n                    case TextAlignEnum.Center:\n                        drawFormat.Alignment = StringAlignment.Center;\n                        break;\n                    case TextAlignEnum.Left:\n                    default:\n                        drawFormat.Alignment = StringAlignment.Near;\n                        break;\n                }\n                if (pt.SI.WritingMode == WritingModeEnum.tb_rl)\n                {\n                    drawFormat.FormatFlags |= StringFormatFlags.DirectionRightToLeft;\n                    drawFormat.FormatFlags |= StringFormatFlags.DirectionVertical;\n                }\n                switch (si.VerticalAlign)\n                {\n                    case VerticalAlignEnum.Bottom:\n                        drawFormat.LineAlignment = StringAlignment.Far;\n                        break;\n                    case VerticalAlignEnum.Middle:\n                        drawFormat.LineAlignment = StringAlignment.Center;\n                        break;\n                    case VerticalAlignEnum.Top:\n                    default:\n                        drawFormat.LineAlignment = StringAlignment.Near;\n                        break;\n                }\n                // draw the background \n                DrawBackground(g, r, si);\n\n                // adjust drawing rectangle based on padding\n                // http://www.fyireporting.com/forum/viewtopic.php?t=892\n                //A.S.> convert pt to px if needed(when printing we need px, when draw preview - pt) \n                RectangleF r2;\n                if (g.PageUnit == GraphicsUnit.Pixel)\n                {\n                    r2 = new RectangleF(r.Left + (si.PaddingLeft * g.DpiX) / 72,\n                    r.Top + (si.PaddingTop * g.DpiX) / 72,\n                    r.Width - ((si.PaddingLeft + si.PaddingRight) * g.DpiX) / 72,\n                    r.Height - ((si.PaddingTop + si.PaddingBottom) * g.DpiX) / 72);\n                }\n                else\n                {\n                    // adjust drawing rectangle based on padding\n                   r2 = new RectangleF(r.Left + si.PaddingLeft,\n                   r.Top + si.PaddingTop,\n                   r.Width - si.PaddingLeft - si.PaddingRight,\n                   r.Height - si.PaddingTop - si.PaddingBottom);\n                } \n\n                drawBrush = new SolidBrush(si.Color);\n                if (si.TextAlign == TextAlignEnum.Justified)\n                {\n                    GraphicsExtended.DrawStringJustified(g, pt.Text, drawFont, drawBrush, r2); \n                }\n                else if (pt.NoClip)\t// request not to clip text\n                {\n                    g.DrawString(pt.Text, drawFont, drawBrush, new PointF(r.Left, r.Top), drawFormat);\n                    //HighlightString(g, pt, new RectangleF(r.Left, r.Top, float.MaxValue, float.MaxValue),\n                    //    drawFont, drawFormat);\n                }\n                else\n                {\n                    g.DrawString(pt.Text, drawFont, drawBrush, r2, drawFormat);\n                    //HighlightString(g, pt, r2, drawFont, drawFormat);\n                }\n                //if (SelectTool)\n                //{\n                //    if (pt.AllowSelect && _SelectList.Contains(pt))\n                //        g.FillRectangle(new SolidBrush(Color.FromArgb(50, _SelectItemColor)), r2);\n                //}\n            }\n            finally\n            {\n                if (drawFont != null)\n                    drawFont.Dispose();\n                if (drawFormat != null)\n                    drawFont.Dispose();\n                if (drawBrush != null)\n                    drawBrush.Dispose();\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "RdlEngine/RDLBaseEBN.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    public class CrossDelegate\n    {\n        public delegate string GetContent(string ContentSource);\n        public GetContent SubReportGetContent=null;\n    }\n}\n"
  },
  {
    "path": "RdlEngine/RdlEngine.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Express 2012 for Web\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlEngine\", \"RdlEngine.csproj\", \"{C97E91F4-B310-44E2-9B6C-96775395722D}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.Build.0 = Debug|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.Build.0 = Debug|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.ActiveCfg = Release|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.Build.0 = Release|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.ActiveCfg = Release|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.Build.0 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "RdlEngine/RdlEngineConfig.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<config>\n\t<DataSources>\n\t\t<DataSource>\n\t\t\t<DataProvider>SQL</DataProvider>\n\t\t\t<CodeModule>System.Data.SqlClient.dll</CodeModule>\n\t\t\t<ClassName>System.Data.SqlClient.SqlConnection</ClassName>\n\t\t\t<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>Microsoft.Data.SqlClient</DataProvider>\n\t\t\t<CodeModule>Microsoft.Data.SqlClient.dll</CodeModule>\n\t\t\t<ClassName>Microsoft.Data.SqlClient.SqlConnection</ClassName>\n\t\t\t<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>SQLce</DataProvider>\n\t\t\t<CodeModule>C:\\Program Files\\Microsoft SQL Server Compact Edition\\v4.0\\Desktop\\System.Data.SqlServerCe.dll</CodeModule>\n\t\t\t<ClassName>System.Data.SqlServerCe.SqlCeConnection</ClassName>\n\t\t\t<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY TABLE_NAME, TABLE_TYPE</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>ODBC</DataProvider>\n\t\t\t<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t\t<ReplaceParameters>true</ReplaceParameters>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>OLEDB</DataProvider>\n\t\t\t<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>Oracle</DataProvider>\n\t\t\t<CodeModule>F:\\oracle\\product\\10.2.0\\db_2\\BIN\\Oracle.DataAccess.dll</CodeModule>\n\t\t\t<ClassName>Oracle.DataAccess.Client.OracleConnection</ClassName>\n\t\t\t<TableSelect>select OWNER || '.' || TABLE_NAME from ALL_TABLES WHERE TABLESPACE_NAME NOT IN ('SYSTEM', 'SYSAUX')</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>MySQL.NET</DataProvider>\n\t\t\t<CodeModule>MySql.Data.dll</CodeModule>\n\t\t\t<ClassName>MySql.Data.MySqlClient.MySqlConnection</ClassName>\n\t\t\t<TableSelect>show tables</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t\t<ReplaceParameters>true</ReplaceParameters>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>Firebird.NET</DataProvider>\n\t\t\t<CodeModule>C:\\Program Files\\FirebirdNETProvider1.7\\FirebirdSql.Data.Firebird.dll</CodeModule>\n\t\t\t<ClassName>FirebirdSql.Data.Firebird.FbConnection</ClassName>\n\t\t\t<TableSelect>SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$RELATION_NAME NOT LIKE 'RDB$%' ORDER BY 1</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>Firebird.NET 2.0</DataProvider>\n\t\t\t<CodeModule>FirebirdSql.Data.FirebirdClient.dll</CodeModule>\n\t\t\t<ClassName>FirebirdSql.Data.FirebirdClient.FbConnection</ClassName>\n\t\t\t<TableSelect>SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0 ORDER BY 1</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>SQLite</DataProvider>\n\t\t\t<CodeModule>System.Data.SQLite.dll</CodeModule>\n\t\t\t<ClassName>System.Data.SQLite.SQLiteConnection</ClassName>\n\t\t\t<TableSelect>SELECT name FROM sqlite_master WHERE type = 'table'</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>Microsoft.Data.Sqlite</DataProvider>\n\t\t\t<CodeModule>Microsoft.Data.Sqlite.dll</CodeModule>\n\t\t\t<ClassName>Microsoft.Data.Sqlite.SqliteConnection</ClassName>\n\t\t\t<TableSelect>SELECT name FROM sqlite_master WHERE type = 'table'</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>iAnywhere.NET</DataProvider>\n\t\t\t<CodeModule>F:\\Sybase\\SQL Anywhere Studio 9\\win32\\iAnywhere.Data.AsaClient.dll</CodeModule>\n\t\t\t<ClassName>iAnywhere.Data.AsaClient.AsaConnection</ClassName>\n\t\t\t<TableSelect>\n\t\t\t\tselect table_name from systable\n\t\t\t\twhere table_type = 'BASE' and table_name not like 'SYS%'\n\t\t\t\tand table_name not like 'ix_%'\n\t\t\t\tand table_name not like 'ml_%'\n\t\t\t\tand table_name not like 'ul_%'\n\t\t\t\tand table_name not like 'rl_%'\n\t\t\t\tand table_name not like 'rs_%'\n\t\t\t\tand table_name not like 'migrate_%'\n\t\t\t\tand table_name not like 'spt_%'\n\t\t\t\tand table_name not like 'jdbc_%'\n\t\t\t\tand table_name not in ('DUMMY', 'RowGenerator', 'EXCLUDEOBJECT')\n\t\t\t</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>XML</DataProvider>\n\t\t\t<CodeModule>Majorsilence.Reporting.DataProviders.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Data.XmlConnection</ClassName>\n\t\t\t<TableSelect />\n\t\t\t<Interface>File</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>WebService</DataProvider>\n\t\t\t<CodeModule>Majorsilence.Reporting.DataProviders.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Data.WebServiceConnection</ClassName>\n\t\t\t<TableSelect />\n\t\t\t<Interface>WebService</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>WebLog</DataProvider>\n\t\t\t<CodeModule>Majorsilence.Reporting.DataProviders.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Data.LogConnection</ClassName>\n\t\t\t<TableSelect />\n\t\t\t<Interface>File</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>Text</DataProvider>\n\t\t\t<CodeModule>Majorsilence.Reporting.DataProviders.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Data.TxtConnection</ClassName>\n\t\t\t<TableSelect />\n\t\t\t<Interface>File</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>Json</DataProvider>\n\t\t\t<CodeModule>Majorsilence.Reporting.DataProviders.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Data.JsonConnection</ClassName>\n\t\t\t<TableSelect />\n\t\t\t<Interface>File</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>iTunes</DataProvider>\n\t\t\t<CodeModule>Majorsilence.Reporting.DataProviders.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Data.iTunesConnection</ClassName>\n\t\t\t<TableSelect />\n\t\t\t<Interface>File</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>FileDirectory</DataProvider>\n\t\t\t<CodeModule>Majorsilence.Reporting.DataProviders.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Data.FileDirConnection</ClassName>\n\t\t\t<TableSelect />\n\t\t\t<Interface>File</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>OracleSp</DataProvider>\n\t\t\t<CodeModule>OracleSp.dll</CodeModule>\n\t\t\t<ClassName>fyiReporting.OracleSp.OracleSpConnection</ClassName>\n\t\t\t<TableSelect>select OWNER || '.' || TABLE_NAME from ALL_TABLES WHERE TABLESPACE_NAME NOT IN ('SYSTEM', 'SYSAUX')</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>PostgreSQL</DataProvider>\n\t\t\t<CodeModule>Npgsql.dll</CodeModule>\n\t\t\t<ClassName>Npgsql.NpgsqlConnection</ClassName>\n\t\t\t<TableSelect>SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE 'pg_%' ORDER BY 1</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>PostgreSQL_Devart</DataProvider>\n\t\t\t<CodeModule>Devart.Data.PostgreSql.dll</CodeModule>\n\t\t\t<ClassName>Devart.Data.PostgreSql.PgSqlConnection</ClassName>\n\t\t\t<TableSelect>SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE 'pg_%' ORDER BY 1</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\n\t</DataSources>\n\t<Compression>\n\t\t<CodeModule>ICSharpCode.SharpZipLib.dll</CodeModule>\n\t\t<ClassName>ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream</ClassName>\n\t\t<Finish>Finish</Finish>\n\t\t<Enable>true</Enable>\n\t</Compression>\n\t<CustomReportItems>\n\t\t<CustomReportItem>\n\t\t\t<Type>BarCode EAN-13</Type>\n\t\t\t<CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Cri.BarCodeEAN13</ClassName>\n\t\t</CustomReportItem>\n\t\t<CustomReportItem>\n\t\t\t<Type>BarCode Bookland</Type>\n\t\t\t<CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Cri.BarCodeBookland</ClassName>\n\t\t</CustomReportItem>\n\t\t<CustomReportItem>\n\t\t\t<Type>QR Code</Type>\n\t\t\t<CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Cri.QrCode</ClassName>\n\t\t</CustomReportItem>\n        <CustomReportItem>\n            <Type>QRCode</Type>\n            <CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n            <ClassName>Majorsilence.Reporting.Cri.QrCode</ClassName>\n        </CustomReportItem>\n\t\t<CustomReportItem>\n\t\t\t<Type>ITF-14</Type>\n\t\t\t<CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Cri.BarCodeITF14</ClassName>\n\t\t</CustomReportItem>\n\t\t<CustomReportItem>\n\t\t\t<Type>AztecCode</Type>\n\t\t\t<CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Cri.AztecCode</ClassName>\n\t\t</CustomReportItem>\n\t\t<CustomReportItem>\n\t\t\t<Type>BarCode39</Type>\n\t\t\t<CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Cri.BarCode39</ClassName>\n\t\t</CustomReportItem>\n\t\t<CustomReportItem>\n\t\t\t<Type>BarCode128</Type>\n\t\t\t<CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Cri.BarCode128</ClassName>\n\t\t</CustomReportItem>\n\t\t<CustomReportItem>\n\t\t\t<Type>BarCodeEAN8</Type>\n\t\t\t<CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Cri.BarCodeEAN8</ClassName>\n\t\t</CustomReportItem>\n        <CustomReportItem>\n            <Type>Pdf417</Type>\n            <CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n            <ClassName>Majorsilence.Reporting.Cri.Pdf417Barcode</ClassName>\n        </CustomReportItem>\n        <CustomReportItem>\n            <Type>DataMatrix</Type>\n            <CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n            <ClassName>Majorsilence.Reporting.Cri.DataMatrix</ClassName>\n        </CustomReportItem>\n\t</CustomReportItems>\n</config>"
  },
  {
    "path": "RdlEngine/RdlException.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    public class RdlException : Exception\n    {\n        public RdlException(string message) : base(message)\n        {\n        }\n\n        public RdlException(string message, Exception innerException) : base(message, innerException)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/RdlPrint.cs",
    "content": "using fyiReporting.RDL;\nusing fyiReporting.RdlPrint;\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.Drawing;\nusing System.Drawing.Printing;\nusing System.IO;\nusing System.Text;\n\nnamespace fyiReporting.RDLPrint\n{\n    /// <summary>\n    /// Prints report unattended or SaveAs saves report\n    /// </summary>\n    public partial class RdlPrint\n    {\n        public event EventHandler<SubreportDataRetrievalEventArgs> SubreportDataRetrieval;\n\n        private PageDrawing _DrawPanel = new PageDrawing();\n\n        public NeedPassword GetDataSourceReferencePassword = null;\n        private Uri _SourceFileName;  \t// file name to use\n        private string _SourceRdl;\t\t\t// source Rdl; if provided overrides filename\n        private string _Parameters;\t\t\t// parameters to run the report\n        private Report _Report;\t\t\t\t// the report\n        private string _Folder;\t\t\t\t// folder for DataSourceReference (if file name not provided)\n        private Pages _pgs;\t\t\t\t\t// the pages of the report to view\n        private bool _loadFailed;\t\t\t// last load of report failed\n        private float _PageWidth;\t\t\t// width of page\n        private float _PageHeight;\t\t\t// height of page\n        private string _ReportDescription;\n        private string _ReportAuthor;\n        private string _ReportName;\n        private IList _errorMsgs;\n\n        private bool _UseTrueMargins = true;    // compensate for non-printable region\n        private int printEndPage;\t\t\t// end page\n        private int printCurrentPage;\t\t// current page to print\n\n        public RdlPrint()\n        {\n            _SourceFileName = null;\n            _SourceRdl = null;\n            _Parameters = null;\t\t\t\t// parameters to run the report\n            _pgs = null;\t\t\t\t\t\t// the pages of the report to view\n            _loadFailed = false;\n            _PageWidth = 0;\n            _PageHeight = 0;\n            _ReportDescription = null;\n            _ReportAuthor = null;\n            _ReportName = null;\n        }\n\n        /// <summary>\n        /// When true printing will compensate for non-printable area of paper\n        /// </summary>\n        public bool UseTrueMargins\n        {\n            get { return _UseTrueMargins; }\n            set { _UseTrueMargins = value; }\n        }\n        public int PageCount\n        {\n            get\n            {\n                LoadPageIfNeeded();\n                if (_pgs == null)\n                    return 0;\n                else\n                    return _pgs.PageCount;\n            }\n        }\n\n        /// <summary>\n        /// Gets the report definition.\n        /// </summary>\n        public Report Report\n        {\n            get\n            {\n                LoadPageIfNeeded();\n                return _Report;\n            }\n        }\n\n        /// <summary>\n        /// Holds the XML source of the report in RDL (Report Specification Language).\n        /// SourceRdl is mutually exclusive with SourceFile.  Setting SourceRdl will nullify SourceFile.\n        /// </summary>\n        public string SourceRdl\n        {\n            get { return _SourceRdl; }\n            set\n            {\n                _SourceRdl = value;\n                if (value != null)\n                    _SourceFileName = null;\n                //_pgs = null;\t\t\t\t// reset pages\n                //_DrawPanel.Pgs = null;\n                //_loadFailed = false;\t\t\t// attempt to load the report\t\n                //_vScroll.Value = _hScroll.Value = 0;\n                //if (this.Visible)\n                //{\n                //    LoadPageIfNeeded();\t\t\t// force load of report\n                //    this._DrawPanel.Invalidate();\n                //}\n            }\n        }\n\n        /// <summary>\n        /// Holds the folder to data source reference files when SourceFileName not available.\n        /// </summary>\n        public string Folder\n        {\n            get { return _Folder; }\n            set { _Folder = value; }\n        }\n\n        /// <summary>\n        /// Parameters passed to report when run.  Parameters are separated by '&'.  For example,\n        /// OrderID=10023&OrderDate=10/14/2002\n        /// Note: these parameters will override the user specified ones.\n        /// </summary>\n        public string Parameters\n        {\n            get { return _Parameters; }\n            set { _Parameters = value; }\n        }\n\n        /// <summary>\n        /// The height of the report page (in points) as defined within the report.\n        /// </summary>\n        public float PageHeight\n        {\n            get\n            {\n                LoadPageIfNeeded();\n                return _PageHeight;\n            }\n        }\n\n        /// <summary>\n        /// The width of the report page (in points) as defined within the report.\n        /// </summary>\n        public float PageWidth\n        {\n            get\n            {\n                LoadPageIfNeeded();\n                return _PageWidth;\n            }\n        }\n\n        /// <summary>\n        /// Description of the report.\n        /// </summary>\n        public string ReportDescription\n        {\n            get\n            {\n                LoadPageIfNeeded();\n                return _ReportDescription;\n            }\n        }\n\n        /// <summary>\n        /// Author of the report.\n        /// </summary>\n        public string ReportAuthor\n        {\n            get\n            {\n                LoadPageIfNeeded();\n                return _ReportAuthor;\n            }\n        }\n\n        /// <summary>\n        /// Name of the report.\n        /// </summary>\n        public string ReportName\n        {\n            get\n            {\n                return _ReportName;\n            }\n            set { _ReportName = value; }\n        }\n\n        /// <summary>\n        /// Print the report.\n        /// </summary>\n        public void Print(PrintDocument pd)\n        {\n            LoadPageIfNeeded();\n\n            pd.PrintPage += new PrintPageEventHandler(PrintPage);\n\n            // This is a work around where many printers do not support printing\n            // more then one copy.  This will cause a prompt for each copy if using XPS\n            //\n            // http://msdn.microsoft.com/en-us/library/system.drawing.printing.printersettings.copies.aspx\n            // \"Not all printers support printing multiple copes. You can use the MaximumCopies property \n            // to determine the maximum number of copies the printer supports. If the number of \n            // copies is set higher than the maximum copies supported by the printer, only the \n            // maximum number of copies will be printed, and no exception will occur.\"\n            // \n            if (pd.PrinterSettings.MaximumCopies == 1 && pd.PrinterSettings.Copies > 1)\n            {\n                for (int i = 0; i < pd.PrinterSettings.Copies; i++)\n                {\n                    _Print(pd);\n                }\n            }\n            else\n            {\n                _Print(pd);\n            }\n        }\n        private void _Print(PrintDocument pd)\n        {\n            printCurrentPage = -1;\n            switch (pd.PrinterSettings.PrintRange)\n            {\n                case PrintRange.AllPages:\n                    printCurrentPage = 0;\n                    printEndPage = _pgs.PageCount - 1;\n                    break;\n                case PrintRange.Selection:\n                    printCurrentPage = pd.PrinterSettings.FromPage - 1;\n                    printEndPage = pd.PrinterSettings.FromPage - 1;\n                    break;\n                case PrintRange.SomePages:\n                    printCurrentPage = pd.PrinterSettings.FromPage - 1;\n                    if (printCurrentPage < 0)\n                        printCurrentPage = 0;\n                    printEndPage = pd.PrinterSettings.ToPage - 1;\n                    if (printEndPage >= _pgs.PageCount)\n                        printEndPage = _pgs.PageCount - 1;\n                    break;\n            }\n            pd.Print();\n        }\n\n        private void PrintPage(object sender, PrintPageEventArgs e)\n        {\n            System.Drawing.Rectangle r = new System.Drawing.Rectangle(0, 0, int.MaxValue, int.MaxValue);\n            // account for the non-printable area of the paper\n            PointF pageOffset;\n            if (this.UseTrueMargins && this._Report != null)\n            {\n                // The page offset is set in pixels as the Draw method changes the graphics object to use pixels\n                // (the origin transform does not get changed by the change in units.  PrintableArea returns\n                // numbers in the hundredths of an inch.\n\n                float x = ((e.PageSettings.PrintableArea.X * e.Graphics.DpiX) / 100.0F) - e.Graphics.Transform.OffsetX;\n                float y = ((e.PageSettings.PrintableArea.Y * e.Graphics.DpiY) / 100.0F) - e.Graphics.Transform.OffsetY;\n\n                // Get the margins in printer pixels (don't use the function!)\n                // Points to pixels conversion ((double)x * DpiX / POINTSIZEF)\n                float lm = (float)((double)_Report.LeftMarginPoints * e.Graphics.DpiX / POINTSIZEF);\n                float tm = (float)((double)_Report.TopMarginPoints * e.Graphics.DpiY / POINTSIZEF);\n                // Correct based on the report margin\n                if (x > lm)      // left margin is less than the minimum left margin\n                    x = 0;\n                if (y > tm)      // top margin is less than the minimum top margin\n                    y = 0;\n                pageOffset = new PointF(-x, -y);\n            }\n            else\n            {\n                pageOffset = PointF.Empty;\n            }\n\n            _DrawPanel.Draw(e.Graphics, printCurrentPage, r, false, pageOffset);\n\n            printCurrentPage++;\n            if (printCurrentPage > printEndPage)\n                e.HasMorePages = false;\n            else\n                e.HasMorePages = true;\n        }\n\n\n        /// <summary>\n        /// Save the file.  The extension determines the type of file to save.\n        /// </summary>\n        /// <param name=\"FileName\">Name of the file to be saved to.</param>\n        /// <param name=\"type\">Type of file to save.  Should be \"pdf\", \"xml\", \"html\", \"mhtml\", \"csv\", \"rtf\", \"excel\", \"tif\".</param>\n        //public void SaveAs(string FileName, fyiReporting.RDL.OutputPresentationType type)\n        //{\n        //    LoadPageIfNeeded();\n\n\n        //    OneFileStreamGen sg = new OneFileStreamGen(FileName, true);\t// overwrite with this name\n        //    if (!(type == OutputPresentationType.PDF || type == OutputPresentationType.PDFOldStyle ||\n        //        type == OutputPresentationType.TIF || type == OutputPresentationType.TIFBW))\n        //    {\n        //        ListDictionary ld = GetParameters();\t\t// split parms into dictionary\n        //        _Report.RunGetData(ld);                     // obtain the data (again)\n        //    }\n        //    try\n        //    {\n        //        switch (type)\n        //        {\n        //            case OutputPresentationType.PDF:\n        //                _Report.ItextPDF = true;\n        //                _Report.RunRenderPdf(sg, _pgs);\n        //                break;\n        //            case OutputPresentationType.PDFOldStyle:\n        //                _Report.ItextPDF = false;\n        //                _Report.RunRenderPdf(sg, _pgs);\n        //                break;\n        //            case OutputPresentationType.TIF:\n        //                _Report.RunRenderTif(sg, _pgs, true);\n        //                break;\n        //            case OutputPresentationType.TIFBW:\n        //                _Report.RunRenderTif(sg, _pgs, false);\n        //                break;\n        //            case OutputPresentationType.CSV:\n        //                _Report.RunRender(sg, OutputPresentationType.CSV);\n        //                break;\n        //            case OutputPresentationType.Word:\n        //            case OutputPresentationType.RTF:\n        //                _Report.RunRender(sg, OutputPresentationType.RTF);\n        //                break;\n        //            case OutputPresentationType.Excel:\n        //                _Report.RunRender(sg, OutputPresentationType.Excel);\n        //                break;\n        //            case OutputPresentationType.XML:\n        //                _Report.RunRender(sg, OutputPresentationType.XML);\n        //                break;\n        //            case OutputPresentationType.HTML:\n        //                _Report.RunRender(sg, OutputPresentationType.HTML);\n        //                break;\n        //            case OutputPresentationType.MHTML:\n        //                _Report.RunRender(sg, OutputPresentationType.MHTML);\n        //                break;\n        //            default:\n        //                throw new Exception(\"Unsupported file extension for SaveAs\");\n        //        }\n        //    }\n        //    finally\n        //    {\n        //        if (sg != null)\n        //        {\n        //            sg.CloseMainStream();\n        //        }\n\n\n        //    }\n        //    return;\n        //}\n\n        private float POINTSIZEF = 72.27f;\n\n        private Report GetReport()\n        {\n            string prog;\n\n            // Obtain the source\n            if (_loadFailed)\n                prog = GetReportErrorMsg();\n            else if (_SourceRdl != null)\n                prog = _SourceRdl;\n            else if (_SourceFileName != null)\n                prog = GetRdlSource();\n            else\n                prog = GetReportEmptyMsg();\n\n            // Compile the report\n            // Now parse the file\n            RDLParser rdlp;\n            Report r;\n            //try\n            //{\n            _errorMsgs = null;\n            rdlp = new RDLParser(prog);\n            rdlp.DataSourceReferencePassword = GetDataSourceReferencePassword;\n            if (_SourceFileName != null)\n                rdlp.Folder = Path.GetDirectoryName(_SourceFileName.LocalPath);\n            else\n                rdlp.Folder = this.Folder;\n\n            r = rdlp.Parse();\n            if (r.ErrorMaxSeverity > 0)\n            {\n                _errorMsgs = r.ErrorItems;\t\t// keep a copy of the errors\n\n                int severity = r.ErrorMaxSeverity;\n                r.ErrorReset();\n                if (severity > 4)\n                {\n                    r = null;\t\t\t// don't return when severe errors\n                    _loadFailed = true;\n                }\n            }\n            // If we've loaded the report; we should tell it where it got loaded from\n            if (r != null && !_loadFailed)\n            {\t// Don't care much if this fails; and don't want to null out report if it does\n                try\n                {\n                    if (_SourceFileName != null)\n                    {\n                        r.Name = Path.GetFileNameWithoutExtension(_SourceFileName.LocalPath);\n                        r.Folder = Path.GetDirectoryName(_SourceFileName.LocalPath);\n                    }\n                    else\n                    {\n                        r.Folder = this.Folder;\n                        r.Name = this.ReportName;\n                    }\n                }\n                catch { }\n            }\n            //}\n            //catch (Exception ex)\n            //{\n            //    _loadFailed = true;\n            //    _errorMsgs = new List<string>();\t\t// create new error list\n            //    _errorMsgs.Add(ex.Message);\t\t\t// put the message in it\n            //    _errorMsgs.Add(ex.StackTrace);\t\t//   and the stack trace\n            //    r = null;\n            //}\n\n            if (r != null)\n            {\n                _PageWidth = r.PageWidthPoints;\n                _PageHeight = r.PageHeightPoints;\n                _ReportDescription = r.Description;\n                _ReportAuthor = r.Author;\n                r.SubreportDataRetrieval += new EventHandler<SubreportDataRetrievalEventArgs>(r_SubreportDataRetrieval);\n                //ParametersBuild(r);\n            }\n            else\n            {\n                _PageWidth = 0;\n                _PageHeight = 0;\n                _ReportDescription = null;\n                _ReportAuthor = null;\n                _ReportName = null;\n            }\n            return r;\n        }\n\n        void r_SubreportDataRetrieval(object sender, SubreportDataRetrievalEventArgs e)\n        {\n            if (this.SubreportDataRetrieval != null)\n                SubreportDataRetrieval(this, e);\n        }\n\n        private string GetReportEmptyMsg()\n        {\n            string prog = \"<Report><Width>8.5in</Width><Body><Height>1in</Height><ReportItems><Textbox><Value></Value><Style><FontWeight>Bold</FontWeight></Style><Height>.3in</Height><Width>5 in</Width></Textbox></ReportItems></Body></Report>\";\n            return prog;\n        }\n\n        private string GetReportErrorMsg()\n        {\n            string data1 = @\"<?xml version='1.0' encoding='UTF-8'?>\n<Report> \n\t<LeftMargin>.4in</LeftMargin><Width>8.5in</Width>\n\t<Author></Author>\n\t<DataSources>\n\t\t<DataSource Name='DS1'>\n\t\t\t<ConnectionProperties> \n\t\t\t\t<DataProvider>xxx</DataProvider>\n\t\t\t\t<ConnectString></ConnectString>\n\t\t\t</ConnectionProperties>\n\t\t</DataSource>\n\t</DataSources>\n\t<DataSets>\n\t\t<DataSet Name='Data'>\n\t\t\t<Query>\n\t\t\t\t<DataSourceName>DS1</DataSourceName>\n\t\t\t</Query>\n\t\t\t<Fields>\n\t\t\t\t<Field Name='Error'> \n\t\t\t\t\t<DataField>Error</DataField>\n\t\t\t\t\t<TypeName>String</TypeName>\n\t\t\t\t</Field>\n\t\t\t</Fields>\";\n\n            string data2 = @\"\n\t\t</DataSet>\n\t</DataSets>\n\t<PageHeader>\n\t\t<Height>1 in</Height>\n\t\t<ReportItems>\n\t\t\t<Textbox><Top>.1in</Top><Value>fyiReporting Software, LLC</Value><Style><FontSize>18pt</FontSize><FontWeight>Bold</FontWeight></Style></Textbox>\n\t\t\t<Textbox><Top>.1in</Top><Left>4.25in</Left><Value>=Globals!ExecutionTime</Value><Style><Format>dddd, MMMM dd, yyyy hh:mm:ss tt</Format><FontSize>12pt</FontSize><FontWeight>Bold</FontWeight></Style></Textbox>\n\t\t\t<Textbox><Top>.5in</Top><Value>Errors processing report</Value><Style><FontSize>12pt</FontSize><FontWeight>Bold</FontWeight></Style></Textbox>\n\t\t</ReportItems>\n\t</PageHeader>\n\t<Body><Height>3 in</Height>\n\t\t<ReportItems>\n\t\t\t<Table>\n\t\t\t\t<Style><BorderStyle>Solid</BorderStyle></Style>\n\t\t\t\t<TableColumns>\n\t\t\t\t\t<TableColumn><Width>7 in</Width></TableColumn>\n\t\t\t\t</TableColumns>\n\t\t\t\t<Header>\n\t\t\t\t\t<TableRows>\n\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t<Height>15 pt</Height>\n\t\t\t\t\t\t\t<TableCells>\n\t\t\t\t\t\t\t\t<TableCell>\n\t\t\t\t\t\t\t\t\t<ReportItems><Textbox><Value>Messages</Value><Style><FontWeight>Bold</FontWeight></Style></Textbox></ReportItems>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableCells>\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t</TableRows>\n\t\t\t\t\t<RepeatOnNewPage>true</RepeatOnNewPage>\n\t\t\t\t</Header>\n\t\t\t\t<Details>\n\t\t\t\t\t<TableRows>\n\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t<Height>12 pt</Height>\n\t\t\t\t\t\t\t<TableCells>\n\t\t\t\t\t\t\t\t<TableCell>\n\t\t\t\t\t\t\t\t\t<ReportItems><Textbox Name='ErrorMsg'><Value>=Fields!Error.Value</Value><CanGrow>true</CanGrow></Textbox></ReportItems>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableCells>\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t</TableRows>\n\t\t\t\t</Details>\n\t\t\t</Table>\n\t\t</ReportItems>\n\t</Body>\n</Report>\";\n\n            StringBuilder sb = new StringBuilder(data1, data1.Length + data2.Length + 1000);\n            // Build out the error messages\n            sb.Append(\"<Rows>\");\n            foreach (string msg in _errorMsgs)\n            {\n                sb.Append(\"<Row><Error>\");\n                string newmsg = msg.Replace(\"&\", @\"&amp;\");\n                newmsg = newmsg.Replace(\"<\", @\"&lt;\");\n                sb.Append(newmsg);\n                sb.Append(\"</Error></Row>\");\n            }\n            sb.Append(\"</Rows>\");\n            sb.Append(data2);\n            return sb.ToString();\n        }\n\n        private Pages GetPages()\n        {\n            this._Report = GetReport();\n            if (_loadFailed)\t\t\t// retry on failure; this will get error report\n                this._Report = GetReport();\n\n            return GetPages(this._Report);\n        }\n\n        private Pages GetPages(Report report)\n        {\n            Pages pgs = null;\n\n            ListDictionary ld = GetParameters();\t\t// split parms into dictionary\n\n            try\n            {\n                report.RunGetData(ld);\n\n                pgs = report.BuildPages();\n\n                if (report.ErrorMaxSeverity > 0)\n                {\n                    if (_errorMsgs == null)\n                    {\n                        _errorMsgs = report.ErrorItems;\t\t// keep a copy of the errors\n                    }\n                    else\n                    {\n                        foreach (string err in report.ErrorItems)\n                        {\n                            _errorMsgs.Add(err);\n                        }\n                    }\n\n                    report.ErrorReset();\n                }\n\n            }\n            catch (Exception e)\n            {\n                string msg = e.Message;\n            }\n\n            return pgs;\n        }\n\n        private ListDictionary GetParameters()\n        {\n            ListDictionary ld = new ListDictionary();\n            if (_Parameters == null)\n            {\n                return ld;\t\t\t\t// dictionary will be empty in this case\n            }\n\n            // parms are separated by &\n            char[] breakChars = new char[] { '&' };\n            string parm = _Parameters.Replace(\"&amp;\", '\\ufffe'.ToString());    // handle &amp; as user wanted '&'\n            string[] ps = parm.Split(breakChars);\n            foreach (string p in ps)\n            {\n                int iEq = p.IndexOf(\"=\");\n                if (iEq > 0)\n                {\n                    string name = p.Substring(0, iEq);\n                    string val = p.Substring(iEq + 1);\n                    ld.Add(name, val.Replace('\\ufffe', '&'));\n                }\n            }\n            return ld;\n        }\n\n        private string GetRdlSource()\n        {\n            StreamReader fs = null;\n            string prog = null;\n            try\n            {\n                fs = new StreamReader(_SourceFileName.LocalPath);\n                prog = fs.ReadToEnd();\n            }\n            finally\n            {\n                if (fs != null)\n                    fs.Close();\n            }\n\n            return prog;\n        }\n\n        /// <summary>\n        /// Call LoadPageIfNeeded when a routine requires the report to be loaded in order\n        /// to fulfill the request.\n        /// </summary>\n        private void LoadPageIfNeeded()\n        {\n            if (_pgs == null)\n            {\n                _pgs = GetPages();\n                _DrawPanel.Pgs = _pgs;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Render/CompilationExtensions.cs",
    "content": "﻿using iTextSharp.text.pdf;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace fyiReporting.RDL\n{\n    public static class CompilationExtensions\n    {\n#if NETSTANDARD2_0\n        public static void SetRGBColorFill(this PdfContentByte contentByte, int red, int green, int blue)\n        {\n            contentByte.SetRgbColorFill(red, green, blue);\n        }\n\n        public static void SetRGBColorStroke(this PdfContentByte contentByte, int red, int green, int blue)\n        {\n            contentByte.SetRgbColorStroke(red, green, blue);\n        }\n\n        public static void SetRGBColorStrokeF(this PdfContentByte contentByte, int red, int green, int blue)\n        {\n            contentByte.SetRgbColorStrokeF(red, green, blue);\n        }\n#endif        \n\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Render/DelimitedTextWriter.cs",
    "content": "\n\nusing System;\nusing System.IO;\nusing System.Text;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    internal class DelimitedTextWriter \n    {\n        private TextWriter textWriter;\n\n        private string columnDelimiter;\n        private bool firstColumn = true;\n\n        private char quote = '\"';\n\n        public TextWriter TextWriter\n        {\n            get\n            {\n                return textWriter;\n            }\n        }\n\n        public char Quote\n        {\n            get { return quote; }\n        }\n\n        public string ColumnDelimiter\n        {\n            get { return columnDelimiter; }\n        }\n\n        private string rowDelimiter = \"\\n\";\n\n        public string RowDelimiter\n        {\n            get { return rowDelimiter; }\n        }\n\n        protected void WriteQuote()\n        {\n            textWriter.Write(quote);\n        }\n\n        protected void WriteDelimeter()\n        {\n            if (!firstColumn)\n            {\n                textWriter.Write(columnDelimiter);\n            }\n\n            firstColumn = false;\n        }\n\n        public DelimitedTextWriter(TextWriter writer, string delimeter)\n        {\n            textWriter = writer;\n            columnDelimiter = delimeter;\n        }\n\n        private void WriteQuoted(object value)\n        {\n            WriteDelimeter();\n            WriteQuote();\n\n            if ( value != null )\n                textWriter.Write(value.ToString().Replace(\"\\\"\", \"\\\"\\\"\"));\n\n            WriteQuote();\n        }\n\n        private void WriteUnquoted(object value)\n        {\n            WriteDelimeter();\n\n            if ( value != null )\n                textWriter.Write(value);\n        }\n\n        public void Write(object value)\n        {\n            bool isQuoted = true;\n\n            if (value != null)\n            {\n                Type type = value.GetType();\n\n                if (type.IsPrimitive &&\n                    type != typeof(bool) && type != typeof(char))\n                {\n                    isQuoted = false;\n                }\n            }\n\n            if (isQuoted)\n                WriteQuoted(value);\n            else\n                WriteUnquoted(value);\n        }\n\n        public void Write(string format, params object[] arg)\n        {\n            WriteQuoted(string.Format(format, arg));\n        }\n\n        public void WriteLine()\n        {\n            textWriter.Write(rowDelimiter);\n            firstColumn = true;\n        }\n\n        public void WriteLine(object value)\n        {\n            Write(value);\n            WriteLine();\n        }\n\n        public void WriteLine(string format, params object[] arg)\n        {\n            Write(format, arg);\n            WriteLine();\n        }\n    }\n}"
  },
  {
    "path": "RdlEngine/Render/ExcelConverter/ExcelCell.cs",
    "content": "﻿using System;\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\n#else\nusing System.Drawing;\n#endif\nusing Majorsilence.Reporting.Rdl;\nusing NPOI.SS.UserModel;\n\nnamespace RdlEngine.Render.ExcelConverter\n{\n\tinternal class ExcelCell\n\t{\n\t\tpublic ExcelCell(ReportItem reportItem, string value, ExcelRow row, ExcelColumn column)\n\t\t{\n\t\t\tReportItem = reportItem;\n\t\t\tValue = value;\n\t\t\tRow = row;\n\t\t\tColumn = column;\n\t\t\tRow.Cells.Add(this);\n\t\t\tColumn.Cells.Add(this);\n\t\t}\n\n\t\tpublic ReportItem ReportItem { get; set; }\n\t\tpublic ExcelTable ExcelTable { get; set; }\n\t\tpublic string Value { get; set; }\n\t\tpublic ExcelRow Row { get; private set; }\n\t\tpublic ExcelColumn Column { get; private set; }\n\n\t\tpublic ExcelColumn RightAttachCol { get; set; }\n\t\tpublic ExcelRow BottomAttachRow { get; set; }\n\n\t\tpublic float GrowedBottomPosition { get; set; }\n\t\tpublic float OriginalBottomPosition { get; set; }\n\n\t\tpublic float ActualHeight\n\t\t{\n\t\t\tget{\n\t\t\t\tif(CorrectedHeight.HasValue) {\n\t\t\t\t\treturn CorrectedHeight.Value;\n\t\t\t\t}\n\t\t\t\treturn OriginalHeight;\n\t\t\t}\n\t\t}\n\n\t\tpublic float ActualWidth {\n\t\t\tget {\n\t\t\t\tif(CorrectedWidth.HasValue) {\n\t\t\t\t\treturn CorrectedWidth.Value;\n\t\t\t\t}\n\t\t\t\treturn OriginalWidth;\n\t\t\t}\n\t\t}\n\n\t\tfloat? originalWidth;\n\t\t/// <summary>\n\t\t/// Generally stored base Width of item, \n\t\t/// but can store summary width of table cell with span\n\t\t/// </summary>\n\t\tpublic float OriginalWidth{\n\t\t\tget{\n\t\t\t\tif(originalWidth.HasValue) {\n\t\t\t\t\treturn originalWidth.Value;\n\t\t\t\t}\n\t\t\t\tif(ReportItem != null && ReportItem.Width != null) {\n\t\t\t\t\treturn ReportItem.Width.Points;\n\t\t\t\t}\n\t\t\t\treturn 0f;\n\t\t\t}\n\t\t\tset{\n\t\t\t\toriginalWidth = value;\n\t\t\t}\n\t\t}\n\n\t\tfloat? originalHeight;\n\t\t/// <summary>\n\t\t/// Height of item, can store new growed height if item is growed, \n\t\t/// else return base item height\n\t\t/// </summary>\n\t\tpublic float OriginalHeight {\n\t\t\tget {\n\t\t\t\tif(originalHeight.HasValue) {\n\t\t\t\t\treturn originalHeight.Value;\n\t\t\t\t}\n\t\t\t\tif(ReportItem != null && ReportItem.Height != null) {\n\t\t\t\t\treturn ReportItem.Height.Points;\n\t\t\t\t}\n\t\t\t\treturn 0f;\n\t\t\t}\n\t\t\tset {\n\t\t\t\toriginalHeight = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Width after resolve intersection conflict\n\t\t/// </summary>\n\t\tpublic float? CorrectedWidth { get; set; }\n\n\t\t/// <summary>\n\t\t/// Height after resolve intersection conflict\n\t\t/// </summary>\n\t\tpublic float? CorrectedHeight { get; set; }\n\n\n\t\tpublic StyleInfo Style { get; set; }\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Render/ExcelConverter/ExcelCellStyle.cs",
    "content": "﻿using System;\n#if DRAWINGCOMPAT\nusing Drawing = Majorsilence.Drawing;\n#else\nusing Drawing = System.Drawing;\n#endif\nusing System.Linq;\nusing Majorsilence.Reporting.Rdl;\nusing NPOI.OOXML.XSSF.UserModel;\nusing NPOI.SS.UserModel;\nusing NPOI.XSSF.UserModel;\n\nnamespace RdlEngine.Render.ExcelConverter\n{\n\tpublic class ExcelCellStyle\n\t{\n\t\tpublic ExcelCellStyle()\n\t\t{\n\t\t}\n\n\t\tpublic ExcelCellStyle(StyleInfo fromStyle)\n\t\t{\n\t\t\tSetBackgroundColor(fromStyle.BackgroundColor);\n\n\t\t\tSetBorderTop(fromStyle.BStyleTop, fromStyle.BWidthTop, fromStyle.BColorTop);\n\t\t\tSetBorderRight(fromStyle.BStyleRight, fromStyle.BWidthRight, fromStyle.BColorRight);\n\t\t\tSetBorderBottom(fromStyle.BStyleBottom, fromStyle.BWidthBottom, fromStyle.BColorBottom);\n\t\t\tSetBorderLeft(fromStyle.BStyleLeft, fromStyle.BWidthLeft, fromStyle.BColorLeft);\n\n\t\t\tSetVerticalAlign(fromStyle.VerticalAlign);\n\t\t\tSetTextAlign(fromStyle.TextAlign);\n\n\t\t\tFontName = fromStyle.FontFamily;\n\t\t\tFontSize = fromStyle.FontSize;\n\t\t\tSetFontWeight(fromStyle.FontWeight);\n\t\t\tSetFontStyle(fromStyle.FontStyle);\n\t\t\tSetTextDecoration(fromStyle.TextDecoration);\n\t\t\tSetFontColor(fromStyle.Color);\n\t\t\tSetWritingMode(fromStyle.WritingMode);\n\t\t}\n\n\t\tpublic void SetToStyle(XSSFCellStyle style)\n\t\t{\n\t\t\tstyle.SetFillForegroundColor(BackgroundColor);\n\t\t\tstyle.FillPattern = FillPattern.SolidForeground;\n\n\t\t\tstyle.BorderTop = BorderTop;\n\t\t\tstyle.SetTopBorderColor(BorderTopColor);\n\t\t\tstyle.BorderRight = BorderRight;\n\t\t\tstyle.SetRightBorderColor(BorderRightColor);\n\t\t\tstyle.BorderBottom = BorderBottom;\n\t\t\tstyle.SetBottomBorderColor(BorderBottomColor);\n\t\t\tstyle.BorderLeft = BorderLeft;\n\t\t\tstyle.SetLeftBorderColor(BorderLeftColor);\n\n\t\t\tstyle.VerticalAlignment = VerticalAlignment;\n\t\t\tstyle.Alignment = HorizontalAlignment;\n\t\t\tswitch (_writingMode)\n\t\t\t{\n\t\t\t\tcase WritingModeEnum.lr_tb:\n\t\t\t\t\tstyle.Rotation = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase WritingModeEnum.tb_rl:\n\t\t\t\t\tstyle.Rotation = -90;\n\t\t\t\t\tbreak;\n\t\t\t\tcase WritingModeEnum.tb_lr:\n\t\t\t\t\tstyle.Rotation = 90;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new ArgumentOutOfRangeException($\"Writing mode {_writingMode} is not supported\");\n\t\t\t}\n\t\t}\n\n\t\tpublic void SetToFont(XSSFFont font)\n\t\t{\n\t\t\tfont.FontName = FontName;\n\t\t\tfont.FontHeightInPoints = (short)FontSize;\n\t\t\tfont.IsBold = FontWeight > 400;\n\t\t\tfont.IsItalic = IsItalic;\n\t\t\tfont.IsStrikeout = IsStrikeout;\n\t\t\tfont.Underline = IsUnderline ? FontUnderlineType.Single : FontUnderlineType.None;\n\t\t\tfont.SetColor(FontColor);\n\t\t}\n\n\t\t//font\n\t\tprivate FontWeightEnum fontWeight;\n\t\tpublic void SetFontWeight(FontWeightEnum weight)\n\t\t{\n\t\t\tfontWeight = weight;\n\t\t}\n\t\tpublic short FontWeight {\n\t\t\tget {\n\t\t\t\treturn ConvertFontWeight(fontWeight);\n\t\t\t}\n\t\t}\n\n\t\tprivate FontStyleEnum fontStyle;\n\t\tpublic void SetFontStyle(FontStyleEnum style)\n\t\t{\n\t\t\tfontStyle = style;\n\t\t}\n\t\tpublic bool IsItalic {\n\t\t\tget{\n\t\t\t\treturn fontStyle == FontStyleEnum.Italic;\n\t\t\t}\n\t\t}\n\n\t\tprivate TextDecorationEnum textDecoration;\n\t\tpublic void SetTextDecoration(TextDecorationEnum textDecor)\n\t\t{\n\t\t\ttextDecoration = textDecor;\n\t\t}\n\t\tpublic bool IsStrikeout {\n\t\t\tget {\n\t\t\t\treturn textDecoration == TextDecorationEnum.LineThrough;\n\t\t\t}\n\t\t}\n\t\tpublic bool IsUnderline {\n\t\t\tget {\n\t\t\t\treturn textDecoration == TextDecorationEnum.Underline;\n\t\t\t}\n\t\t}\n\n\t\tpublic float FontSize { get; set; }\n\t\tpublic string FontName { get; set; }\n\n\t\tprivate Drawing.Color fontColor;\n\t\tpublic void SetFontColor(Drawing.Color color)\n\t\t{\n\t\t\tfontColor = color;\n\t\t}\n\t\tpublic XSSFColor FontColor {\n\t\t\tget {\n\t\t\t\tvar color = ColorToByteArray(fontColor.IsEmpty ? Drawing.Color.Black : fontColor);\n\t\t\t\treturn new XSSFColor(color, new DefaultIndexedColorMap());\n\t\t\t}\n\t\t}\n\n\t\t//alignments\n\n\t\tprivate TextAlignEnum horizontalAlign;\n\t\tpublic void SetTextAlign(TextAlignEnum textAlign)\n\t\t{\n\t\t\thorizontalAlign = textAlign;\n\t\t}\n\t\tpublic HorizontalAlignment HorizontalAlignment {\n\t\t\tget {\n\t\t\t\treturn ConvertHorizontalAlignment(horizontalAlign);\n\t\t\t}\n\t\t}\n\n\t\tprivate VerticalAlignEnum verticalAlign;\n\t\tpublic void SetVerticalAlign(VerticalAlignEnum vertAlign)\n\t\t{\n\t\t\tverticalAlign = vertAlign;\n\t\t}\n\t\tpublic VerticalAlignment VerticalAlignment {\n\t\t\tget {\n\t\t\t\treturn ConvertVerticalAlignment(verticalAlign);\n\t\t\t}\n\t\t}\n\n\t\t//background\n\t\tprivate  Drawing.Color backgroundColor;\n\t\tpublic void SetBackgroundColor(Drawing.Color color)\n\t\t{\n\t\t\tbackgroundColor = color;\n\t\t}\n\t\tpublic XSSFColor BackgroundColor {\n\t\t\tget\n\t\t\t{\n\t\t\t\tvar color = ColorToByteArray(backgroundColor.IsEmpty ? Drawing.Color.White : backgroundColor);\n\t\t\t\treturn new XSSFColor(color, new DefaultIndexedColorMap());\n\t\t\t}\n\t\t}\n\n\t\t//Borders\n\n\t\t//top\n\t\tprivate Majorsilence.Reporting.Rdl.BorderStyleEnum borderTop;\n\t\tprivate Drawing.Color borderTopColor;\n\t\tprivate short borderTopWidth;\n\n\t\tpublic void SetBorderTop(Majorsilence.Reporting.Rdl.BorderStyleEnum style)\n\t\t{\n\t\t\tSetBorderTop(style, 1, Drawing.Color.Black);\n\t\t}\n\n\t\tpublic void SetBorderTop(Majorsilence.Reporting.Rdl.BorderStyleEnum style, float width, Drawing.Color color)\n\t\t{\n\t\t\tborderTopColor = color;\n\t\t\tborderTop = style;\n\t\t\tborderTopWidth = (short)width;\n\t\t}\n\n\t\tpublic XSSFColor BorderTopColor {\n\t\t\tget\n\t\t\t{\n\t\t\t\tvar color = ColorToByteArray(borderTopColor.IsEmpty ? Drawing.Color.Black : borderTopColor);\n\t\t\t\treturn new XSSFColor(color, new DefaultIndexedColorMap());\n\t\t\t}\n\t\t}\n\n\t\tpublic BorderStyle BorderTop {\n\t\t\tget {\n\t\t\t\treturn ConvertBorderStyle(borderTop, borderTopWidth);\n\t\t\t}\n\t\t}\n\n\t\t//right\n\t\tprivate Majorsilence.Reporting.Rdl.BorderStyleEnum borderRight;\n\t\tprivate Drawing.Color borderRightColor;\n\t\tprivate short borderRightWidth;\n\n\t\tpublic void SetBorderRight(Majorsilence.Reporting.Rdl.BorderStyleEnum style)\n\t\t{\n\t\t\tSetBorderRight(style, 1, Drawing.Color.Black);\n\t\t}\n\n\t\tpublic void SetBorderRight(Majorsilence.Reporting.Rdl.BorderStyleEnum style, float width, Drawing.Color color)\n\t\t{\n\t\t\tborderRightColor = color;\n\t\t\tborderRight = style;\n\t\t\tborderRightWidth = (short)width;\n\t\t}\n\n\t\tpublic XSSFColor BorderRightColor {\n\t\t\tget\n\t\t\t{\n\t\t\t\tvar color = ColorToByteArray(borderRightColor.IsEmpty ? Drawing.Color.Black : borderRightColor);\n\t\t\t\treturn new XSSFColor(color, new DefaultIndexedColorMap());\n\t\t\t}\n\t\t}\n\n\t\tpublic BorderStyle BorderRight {\n\t\t\tget {\n\t\t\t\treturn ConvertBorderStyle(borderRight, borderRightWidth);\n\t\t\t}\n\t\t}\n\n\n\n\t\t//bottom\n\t\tprivate Majorsilence.Reporting.Rdl.BorderStyleEnum borderBottom;\n\t\tprivate Drawing.Color borderBottomColor;\n\t\tprivate short borderBottomWidth;\n\n\t\tpublic void SetBorderBottom(Majorsilence.Reporting.Rdl.BorderStyleEnum style)\n\t\t{\n\t\t\tSetBorderBottom(style, 1, Drawing.Color.Black);\n\t\t}\n\n\t\tpublic void SetBorderBottom(Majorsilence.Reporting.Rdl.BorderStyleEnum style, float width, Drawing.Color color)\n\t\t{\n\t\t\tborderBottomColor = color;\n\t\t\tborderBottom = style;\n\t\t\tborderBottomWidth = (short)width;\n\t\t}\n\n\t\tpublic XSSFColor BorderBottomColor {\n\t\t\tget\n\t\t\t{\n\t\t\t\tvar color = ColorToByteArray(borderBottomColor.IsEmpty ? Drawing.Color.Black : borderBottomColor);\n\t\t\t\treturn new XSSFColor(color, new DefaultIndexedColorMap());\n\t\t\t}\n\t\t}\n\n\t\tpublic BorderStyle BorderBottom {\n\t\t\tget {\n\t\t\t\treturn ConvertBorderStyle(borderBottom, borderBottomWidth);\n\t\t\t}\n\t\t}\n\n\t\t//left\n\t\tprivate Majorsilence.Reporting.Rdl.BorderStyleEnum borderLeft;\n\t\tprivate Drawing.Color borderLeftColor;\n\t\tprivate short borderLeftWidth;\n\n\t\tpublic void SetBorderLeft(Majorsilence.Reporting.Rdl.BorderStyleEnum style)\n\t\t{\n\t\t\tSetBorderLeft(style, 1, Drawing.Color.Black);\n\t\t}\n\n\t\tpublic void SetBorderLeft(Majorsilence.Reporting.Rdl.BorderStyleEnum style, float width, Drawing.Color color)\n\t\t{\n\t\t\tborderLeftColor = color;\n\t\t\tborderLeft = style;\n\t\t\tborderLeftWidth = (short)width;\n\t\t}\n\n\t\tpublic XSSFColor BorderLeftColor {\n\t\t\tget\n\t\t\t{\n\t\t\t\tvar color = ColorToByteArray(borderLeftColor.IsEmpty ? Drawing.Color.Black : borderLeftColor);\n\t\t\t\treturn new XSSFColor(color, new DefaultIndexedColorMap());\n\t\t\t}\n\t\t}\n\n\t\tpublic BorderStyle BorderLeft {\n\t\t\tget {\n\t\t\t\treturn ConvertBorderStyle(borderLeft, borderLeftWidth);\n\t\t\t}\n\t\t}\n\n\t\tprivate WritingModeEnum _writingMode;\n\n\t\tpublic void SetWritingMode(WritingModeEnum writingMode)\n\t\t{\n\t\t\t_writingMode = writingMode;\n\t\t}\n\t\t\n\t\tpublic bool CompareWithXSSFFont(XSSFFont font)\n\t\t{\n\t\t\tif(FontName != font.FontName) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(FontWeight > 400 != font.IsBold) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(Math.Abs(FontSize - font.FontHeightInPoints) > 0.01) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(IsUnderline && font.Underline == FontUnderlineType.None) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(IsStrikeout != font.IsStrikeout) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(IsItalic != font.IsItalic) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(!CompareColor(FontColor, font.GetXSSFColor())) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic bool CompareWithXSSFStyle(XSSFCellStyle style)\n\t\t{\n\n\t\t\t//background color\n\t\t\tif(!CompareColor(BackgroundColor, style.FillForegroundXSSFColor)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t//borders colors\n\t\t\tif(!CompareColor(BorderTopColor, style.TopBorderXSSFColor)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(!CompareColor(BorderRightColor, style.RightBorderXSSFColor)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(!CompareColor(BorderBottomColor, style.BottomBorderXSSFColor)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(!CompareColor(BorderLeftColor, style.LeftBorderXSSFColor)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t//borders styles\n\t\t\tif(BorderTop != style.BorderTop) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(BorderRight != style.BorderRight) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(BorderBottom != style.BorderBottom) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(BorderLeft != style.BorderLeft) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t//alignments\n\t\t\tif(HorizontalAlignment != style.Alignment) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(VerticalAlignment != style.VerticalAlignment) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar font = style.GetFont();\n\n\t\t\tif(!CompareWithXSSFFont(font)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tprivate bool CompareColor(XSSFColor c1, XSSFColor c2)\n\t\t{\n\t\t\tif(c1 == null || c2 == null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(c1.RGB == null || c2.RGB == null) {\n\t\t\t\tif(c1.Indexed > 0 && c2.Indexed > 0) {\n\t\t\t\t\treturn c1.Indexed == c2.Indexed;\n\t\t\t\t} else{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn c1.RGB.SequenceEqual(c2.RGB);\n\t\t}\n\n\t\tpublic BorderStyle ConvertBorderStyle(Majorsilence.Reporting.Rdl.BorderStyleEnum style, short width)\n\t\t{\n\t\t\tswitch(style) {\n\t\t\t\tcase Majorsilence.Reporting.Rdl.BorderStyleEnum.None:\n\t\t\t\t\treturn BorderStyle.None;\n\t\t\t\tcase Majorsilence.Reporting.Rdl.BorderStyleEnum.Solid:\n\t\t\t\t\tif(width <= 1) {\n\t\t\t\t\t\treturn BorderStyle.Thin;\n\t\t\t\t\t}\n\t\t\t\t\tif(width == 2) {\n\t\t\t\t\t\treturn BorderStyle.Medium;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn BorderStyle.Thick;\n\t\t\t\t\t}\n\t\t\t\tcase Majorsilence.Reporting.Rdl.BorderStyleEnum.Dotted:\n\t\t\t\t\treturn BorderStyle.Dotted;\n\t\t\t\tcase Majorsilence.Reporting.Rdl.BorderStyleEnum.Dashed:\n\t\t\t\t\treturn BorderStyle.Dashed;\n\t\t\t\tcase Majorsilence.Reporting.Rdl.BorderStyleEnum.Double:\n\t\t\t\t\treturn BorderStyle.Double;\n\t\t\t\tdefault:\n\t\t\t\t\treturn BorderStyle.Hair;\n\t\t\t}\n\t\t}\n\n\t\tpublic short ConvertFontWeight(FontWeightEnum weight)\n\t\t{\n\t\t\tswitch(weight) {\n\t\t\t\tcase FontWeightEnum.W100:\n\t\t\t\t\treturn 100;\n\t\t\t\tcase FontWeightEnum.W200:\n\t\t\t\t\treturn 200;\n\t\t\t\tcase FontWeightEnum.Lighter:\n\t\t\t\tcase FontWeightEnum.W300:\n\t\t\t\t\treturn 300;\n\t\t\t\tcase FontWeightEnum.W500:\n\t\t\t\t\treturn 500;\n\t\t\t\tcase FontWeightEnum.W600:\n\t\t\t\t\treturn 600;\n\t\t\t\tcase FontWeightEnum.Bold:\n\t\t\t\tcase FontWeightEnum.W700:\n\t\t\t\t\treturn 700;\n\t\t\t\tcase FontWeightEnum.W800:\n\t\t\t\t\treturn 800;\n\t\t\t\tcase FontWeightEnum.Bolder:\n\t\t\t\tcase FontWeightEnum.W900:\n\t\t\t\t\treturn 900;\n\t\t\t\tcase FontWeightEnum.Normal:\n\t\t\t\tcase FontWeightEnum.W400:\n\t\t\t\tdefault:\n\t\t\t\t\treturn 400;\n\t\t\t}\n\t\t}\n\n\t\tpublic VerticalAlignment ConvertVerticalAlignment(VerticalAlignEnum va)\n\t\t{\n\t\t\tswitch(va) {\n\t\t\t\tcase VerticalAlignEnum.Middle:\n\t\t\t\t\treturn VerticalAlignment.Center;\n\t\t\t\tcase VerticalAlignEnum.Bottom:\n\t\t\t\t\treturn VerticalAlignment.Bottom;\n\t\t\t\tdefault:\n\t\t\t\t\treturn VerticalAlignment.Top;\n\t\t\t}\n\t\t}\n\n\t\tpublic HorizontalAlignment ConvertHorizontalAlignment(TextAlignEnum ha)\n\t\t{\n\t\t\tswitch(ha) {\n\t\t\t\tcase TextAlignEnum.Center:\n\t\t\t\t\treturn HorizontalAlignment.Center;\n\t\t\t\tcase TextAlignEnum.Right:\n\t\t\t\t\treturn HorizontalAlignment.Right;\n\t\t\t\tcase TextAlignEnum.Justified:\n\t\t\t\t\treturn HorizontalAlignment.Justify;\n\t\t\t\tdefault:\n\t\t\t\t\treturn HorizontalAlignment.Left;\n\t\t\t}\n\t\t}\n\t\t\n\t\tprivate byte[] ColorToByteArray(Drawing.Color color)\n\t\t{\n\t\t\treturn new byte[] { color.R, color.G, color.B, color.A };\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Render/ExcelConverter/ExcelCellsBuilder.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Collections.Generic;\nusing Majorsilence.Reporting.Rdl;\nusing System.Threading.Tasks;\n\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\nusing Majorsilence.Drawing.Drawing2D;\n#else\nusing System.Drawing;\nusing System.Drawing.Drawing2D;\n#endif\n\nnamespace RdlEngine.Render.ExcelConverter\n{\n\tinternal class ExcelCellsBuilder\n\t{\n\t\tGraphics g;\n\t\tpublic Report Report { get; set; }\n\t\tpublic static float Tolerance = 2f;\n\n\t\tpublic List<ExcelRow> Rows { get; private set; }\n\t\tpublic List<ExcelColumn> Columns { get; private set; }\n\t\tpublic List<ExcelCell> Cells { get; private set; }\n\t\tpublic List<ExcelImage> Images { get; private set; }\n\t\tpublic List<ExcelLine> Lines { get; private set; }\n\t\tpublic List<ExcelTable> Tables { get; private set; }\n\n\t\tprivate float rowPosition = 0f;\n\t\tprivate ExcelTable CurrentExcelTable = null;\n\n\t\tpublic ExcelCellsBuilder()\n\t\t{\n\t\t\tg = Graphics.FromImage(new Bitmap(10, 10));\n\t\t\tTables = new List<ExcelTable>();\n\t\t\tRows = new List<ExcelRow>();\n\t\t\tAddRow(0, 1);\n\t\t\tColumns = new List<ExcelColumn>();\n\t\t\tAddColumn(0, 1);\n\t\t\tCells = new List<ExcelCell>();\n\t\t\tImages = new List<ExcelImage>();\n\t\t\tLines = new List<ExcelLine>();\n\t\t}\n\n\t\tpublic void AddImage(Majorsilence.Reporting.Rdl.Image image, int pictureIndex)\n\t\t{\n\t\t\tvar img = new ExcelImage(image, pictureIndex);\n\t\t\tfloat top = image.Top.Points;\n\t\t\tfloat left = image.Left.Points;\n\t\t\tFillAbsolutePosition(image, ref top, ref left);\n\n\t\t\ttop = GetCellAboveRelativePosition(top);\n\n\t\t\timg.AbsoluteTop = top;\n\t\t\timg.AbsoluteLeft = left;\n\t\t\tImages.Add(img);\n\t\t}\n\n\t\tpublic void AddLine(Majorsilence.Reporting.Rdl.Line line, float borderWidth)\n\t\t{\n\t\t\tvar l = new ExcelLine(line);\n\t\t\tfloat top = line.Top.Points;\n\t\t\tfloat right = line.GetX2(Report);\n\t\t\tfloat bottom = line.Y2;\n\t\t\tfloat left = line.Left.Points;\n\t\t\tFillAbsolutePosition(line, ref top, ref left);\n\t\t\tFillAbsolutePosition(line, ref bottom, ref right);\n\n\t\t\ttop = GetCellAboveRelativePosition(top);\n\t\t\tbottom = top + line.Height.Points;\n\n\t\t\tl.AbsoluteTop = top;\n\t\t\tl.AbsoluteLeft = left;\n\t\t\tl.Right = right;\n\t\t\tl.Bottom = bottom;\n\t\t\tl.BorderWidth = borderWidth;\n\t\t\tLines.Add(l);\n\t\t}\n\n\t\tpublic void AddTable(Table table)\n\t\t{\n\t\t\tCurrentExcelTable = new ExcelTable();\n\t\t\tvar tableTop = table.Top?.Points ?? 0;\n\t\t\tvar tableLeft = table.Left?.Points ?? 0;\n\n\t\t\tFillAbsolutePosition(table, ref tableTop, ref tableLeft);\n\n\t\t\tCurrentExcelTable.OriginalBottomPosition = tableTop;\n\t\t\tif(table.Header != null) {\n\t\t\t\tCurrentExcelTable.OriginalBottomPosition += table.Header.TableRows.Items.Sum(x => x.Height.Points);\n\t\t\t}\n\t\t\tif(table.Details != null) {\n\t\t\t\tCurrentExcelTable.OriginalBottomPosition += table.Details.TableRows.Items.Sum(x => x.Height.Points);\n\t\t\t}\n\t\t\tif(table.Footer != null) {\n\t\t\t\tCurrentExcelTable.OriginalBottomPosition += table.Footer.TableRows.Items.Sum(x => x.Height.Points);\n\t\t\t}\n\n\t\t\ttableTop = GetCellAboveRelativePosition(tableTop);\n\t\t\t\t\n\t\t\trowPosition = tableTop;\n\n\t\t\tCurrentExcelTable.Table = table;\n\t\t\tTables.Add(CurrentExcelTable);\n\t\t}\n\n\t\tpublic async Task AddRow(TableRow tr, Row row)\n\t\t{\n\t\t\tif(CurrentExcelTable.Table == null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfloat rowHeight = tr.CanGrow ? await tr.HeightOfRow(Report, g, row) : tr.Height.Points;\n\n\t\t\tvar shiftingRows = Rows.Where(x => x.YPosition >= rowPosition);\n\t\t\tShiftBottomRows(shiftingRows, rowHeight);\n\n\t\t\tvar currentRow = AddRow(rowPosition, rowHeight);\n\t\t\tforeach(var cell in tr.TableCells.Items) {\n\t\t\t\tvar column = CurrentExcelTable.Table.TableColumns.Items[cell.ColIndex];\n\t\t\t\tif(await column.IsHidden(Report, row))\n\t\t\t\t\tcontinue;\n\t\t\t\tvar xPosition = CurrentExcelTable.Table.Left?.Points ?? 0;\n\t\t\t\tfor(int i = 0; i < cell.ColIndex; i++) {\n\t\t\t\t\tvar columnBefore = CurrentExcelTable.Table.TableColumns.Items[i];\n\t\t\t\t\tif(await columnBefore.IsHidden(Report, row))\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\txPosition += columnBefore.Width.Points;\n\t\t\t\t}\n\t\t\t\tvar currentColumn = AddColumn(xPosition, column.Width.Points);\n\t\t\t\tvar cellTextBox = cell.ReportItems.Items.FirstOrDefault();\n\t\t\t\tif(cellTextBox == null || (cellTextBox as Textbox) == null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstring value = await (cellTextBox as Textbox).RunText(Report, row);\n\t\t\t\tExcelCell currentCell = new ExcelCell(cellTextBox, value, currentRow, currentColumn);\n\t\t\t\tcurrentCell.ExcelTable = CurrentExcelTable;\n\t\t\t\tcurrentCell.OriginalWidth = column.Width.Points;\n\t\t\t\tcurrentCell.OriginalHeight = rowHeight;\n\n\t\t\t\tif(cell.ColSpan > 1) {\n\t\t\t\t\tfloat spanWidth = 0f;\n\t\t\t\t\tfor(int i = cell.ColIndex; i < cell.ColIndex + cell.ColSpan; i++) {\n\t\t\t\t\t\tspanWidth += CurrentExcelTable.Table.TableColumns.Items[i].Width.Points;\n\t\t\t\t\t}\n\t\t\t\t\tcurrentCell.OriginalWidth = spanWidth;\n\t\t\t\t}\n\t\t\t\tcurrentCell.GrowedBottomPosition = rowPosition + rowHeight;\n                await SetCellStyle(currentCell, cellTextBox, row);\n\t\t\t\tCells.Add(currentCell);\n\t\t\t}\n\n\t\t\trowPosition += rowHeight;\n\t\t\tCurrentExcelTable.GrowedBottomPosition = rowPosition;\n\t\t}\n\n\t\tprivate void FillAbsolutePosition(ReportItem reportItem, ref float top, ref float left)\n\t\t{\n\t\t\tfor(ReportLink rl = reportItem.Parent; rl != null; rl = rl.Parent) {\n\t\t\t\tif(rl is PageHeader || rl is PageFooter || rl is Body) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif((rl is DataRegion || rl is Majorsilence.Reporting.Rdl.Rectangle) && !(rl is CustomReportItem)) {\n\t\t\t\t\ttop += (rl as ReportItem)?.Top?.Points ?? 0;\n\t\t\t\t\tleft += (rl as ReportItem)?.Left?.Points ?? 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic async Task AddTextbox(Textbox reportItem, string value, Row row)\n\t\t{\n\t\t\tif(reportItem.InPageHeaderOrFooter()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(reportItem.IsTableOrMatrixCell(Report) || \n\t\t\t   reportItem.Top == null || reportItem.Left == null || \n\t\t\t   reportItem.Height == null || reportItem.Width == null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\tfloat topPosition = reportItem.Top.Points;\n\t\t\tfloat leftPosition = reportItem.Left.Points;\n\t\t\tfloat height = reportItem.CanGrow ? await reportItem.RunTextCalcHeight(Report, g, row) : reportItem.Height.Points;\n\t\t\tfloat width = reportItem.Width.Points;\n\n\t\t\tFillAbsolutePosition(reportItem, ref topPosition, ref leftPosition);\n\t\t\tfloat OriginalBottomPosition = topPosition + reportItem.Height.Points;\n\t\t\tfloat bottomPosition = topPosition + height;\n\t\t\tfloat rightPosition = leftPosition + width;\n\n\t\t\ttopPosition = GetCellAboveRelativePosition(topPosition);\n\n\t\t\tvar currentRow = AddRow(topPosition, height);\n\t\t\tvar currentColumn = AddColumn(leftPosition, width);\n\n\t\t\tExcelCell currentCell = new ExcelCell(reportItem, value, currentRow, currentColumn);\n\t\t\tcurrentCell.OriginalBottomPosition = OriginalBottomPosition;\n            await SetCellStyle(currentCell, reportItem, row);\n\t\t\tCells.Add(currentCell);\n\t\t\tcurrentCell.OriginalHeight = height;\n\t\t\tcurrentCell.GrowedBottomPosition = topPosition + height;\n\t\t}\n\n\t\tprivate async Task SetCellStyle(ExcelCell excelCell, ReportItem reportItem, Row row)\n\t\t{\n\t\t\tStyleInfo si = new StyleInfo();\n\t\t\tif(reportItem.Style != null) {\n\t\t\t\tvar itemStyleInfo = await reportItem.Style.GetStyleInfo(Report, row);\n\t\t\t\tif(itemStyleInfo != null) {\n\t\t\t\t\tsi = itemStyleInfo;\n\t\t\t\t}\n\t\t\t}\n\t\t\texcelCell.Style = si;\n\t\t}\n\n\t\tpublic float GetCellAboveRelativePosition(float top)\n\t\t{\n\t\t\tvar aboveCell = Cells.Where(x => x.OriginalBottomPosition < top)\n\t\t\t                     .OrderByDescending(x => x.GrowedBottomPosition)\n\t\t\t                     .FirstOrDefault();\n\t\t\tif(aboveCell == null) {\n\t\t\t\treturn top;\n\t\t\t}\n\n\t\t\tfloat growedPosition = 0f;\n\t\t\tfloat deltaOriginPosition = 0f;\n\n\t\t\tif(aboveCell.ExcelTable != null) {\n\t\t\t\tgrowedPosition = aboveCell.ExcelTable.GrowedBottomPosition;\n\t\t\t\tdeltaOriginPosition = top - aboveCell.ExcelTable.OriginalBottomPosition;\n\t\t\t}else {\n\t\t\t\tgrowedPosition = aboveCell.GrowedBottomPosition;\n\t\t\t\tdeltaOriginPosition = top - aboveCell.OriginalBottomPosition;\n\t\t\t}\n\n\t\t\treturn growedPosition + (deltaOriginPosition < 0 ? 0 : deltaOriginPosition);\n\t\t}\n\n\t\tpublic ExcelRow AddRow(float top, float height)\n\t\t{\n\t\t\t//Insert row at Top position\n\t\t\tvar currentRow = GetRowAtPosition(top);\n\t\t\tint rowIndex;\n\t\t\tif(currentRow == null) {\n\t\t\t\trowIndex = InsertRow(top);\n\t\t\t\tcurrentRow = Rows[rowIndex];\n\t\t\t} else {\n\t\t\t\trowIndex = Rows.IndexOf(currentRow);\n\t\t\t}\n\t\t\t//Insert row at Bottom position\n\t\t\tfloat bottomPosition = top + height;\n\t\t\tvar bottomRow = GetRowAtPosition(bottomPosition);\n\t\t\tif(bottomRow == null) {\n\t\t\t\tint bottomRowIndex = InsertRow(bottomPosition);\n\t\t\t\tbottomRow = Rows[bottomRowIndex];\n\t\t\t}\n\n\t\t\treturn currentRow;\n\t\t}\n\n\t\tprivate ExcelColumn AddColumn(float left, float width){\n\t\t\t//Insert column at Left position\n\t\t\tvar currentColumn = GetColumnAtPosition(left);\n\t\t\tint columnIndex;\n\t\t\tif(currentColumn == null) {\n\t\t\t\tcolumnIndex = InsertColumn(left);\n\t\t\t\tcurrentColumn = Columns[columnIndex];\n\t\t\t} else {\n\t\t\t\tcolumnIndex = Columns.IndexOf(currentColumn);\n\t\t\t}\n\t\t\t//Insert column at Right position\n\t\t\tfloat rightPosition = left + width;\n\t\t\tvar rightColumn = GetColumnAtPosition(rightPosition);\n\t\t\tif(rightColumn == null) {\n\t\t\t\tint rightColumnIndex = InsertColumn(rightPosition);\n\t\t\t\trightColumn = Columns[rightColumnIndex];\n\t\t\t}\n\t\t\treturn currentColumn;\n\t\t}\n\n\t\tpublic ExcelColumn GetRightAttachColumn(ExcelCell cell)\n\t\t{\n\t\t\tvar c = Columns.LastOrDefault(x => x.XPosition < (cell.Column.XPosition + cell.ActualWidth) - Tolerance);\n\n\t\t\treturn c;\n\t\t}\n\n\t\tpublic int GetRightAttachCells(ExcelCell cell)\n\t\t{\n\t\t\tint result = 0;\n\t\t\tif(cell.RightAttachCol != null) {\n\t\t\t\tvar ri = Columns.IndexOf(cell.RightAttachCol);\n\t\t\t\tvar li = Columns.IndexOf(cell.Column);\n\t\t\t\tresult = (ri - li) - 1;\n\t\t\t\treturn result < 0 ? 0 : result;\n\t\t\t}\n\n\t\t\tresult = Columns.Count(x => x.XPosition > cell.Column.XPosition\n\t\t\t                       && x.XPosition < (cell.Column.XPosition + cell.ActualWidth) - Tolerance);\n\t\t\treturn result < 0 ? 0 : result;\n\t\t}\n\n\t\tpublic int GetBottomAttachCells(ExcelCell cell)\n\t\t{\n\t\t\tint result = 0;\n\t\t\tif(cell.BottomAttachRow != null) {\n\t\t\t\tvar bi = Rows.IndexOf(cell.BottomAttachRow);\n\t\t\t\tvar ti = Rows.IndexOf(cell.Row);\n\t\t\t\tresult = (bi - ti) - 1;\n\t\t\t\treturn result < 0 ? 0 : result;\n\t\t\t}\n\n\t\t\treturn Rows.Count(y => y.YPosition > cell.Row.YPosition\n\t\t\t                  && y.YPosition < (cell.Row.YPosition + cell.ActualHeight) - Tolerance);\n\t\t}\n\n\t\tpublic ExcelRow GetBottomAttachRow(ExcelCell cell)\n\t\t{\n\t\t\tvar c = Rows.LastOrDefault(x => x.YPosition < (cell.Row.YPosition + cell.ActualHeight) - Tolerance);\n\n\t\t\treturn c;\n\t\t}\n\n\t\tprivate ExcelRow GetRowAtPosition(float yPositionPoints)\n\t\t{\n\t\t\treturn Rows.FirstOrDefault(y => Math.Abs(y.YPosition - yPositionPoints) <= Tolerance);\n\t\t}\n\n\t\tprivate ExcelColumn GetColumnAtPosition(float xPositionPoints)\n\t\t{\n\t\t\treturn Columns.FirstOrDefault(x => Math.Abs(x.XPosition - xPositionPoints) <= Tolerance);\n\t\t}\n\n\t\tprivate int InsertRow(float yPositionPoints)\n\t\t{\n\t\t\tvar nextRow = Rows.Where(x => x.YPosition > yPositionPoints).OrderBy(x => x.YPosition).FirstOrDefault();\n\n\t\t\tif(nextRow == null) {\n\t\t\t\t//add new row to end of list\n\t\t\t\tvar newIndex = Rows.Count;\n\t\t\t\tRows.Insert(newIndex, new ExcelRow(yPositionPoints));\n\t\t\t\treturn newIndex;\n\t\t\t}\n\n\t\t\tvar nextRowIndex = Rows.IndexOf(nextRow);\n\t\t\tRows.Insert(nextRowIndex, new ExcelRow(yPositionPoints));\n\t\t\treturn nextRowIndex;\n\t\t}\n\n\t\tprivate int InsertColumn(float xPositionPoints)\n\t\t{\n\t\t\tvar nextColumn = Columns.Where(x => x.XPosition > xPositionPoints).OrderBy(x => x.XPosition).FirstOrDefault();\n\n\t\t\tif(nextColumn == null) {\n\t\t\t\t//add new column to end of list\n\t\t\t\tvar newIndex = Columns.Count;\n\t\t\t\tColumns.Insert(newIndex, new ExcelColumn(xPositionPoints));\n\t\t\t\treturn newIndex;\n\t\t\t}\n\n\t\t\tvar nextColumnIndex = Columns.IndexOf(nextColumn);\n\t\t\tColumns.Insert(nextColumnIndex, new ExcelColumn(xPositionPoints));\n\t\t\treturn nextColumnIndex;\n\t\t}\n\t\n\t\tprivate bool ResolveIntersectionConflict(ExcelCell A, ExcelCell B)\n\t\t{\n\t\t\tvar BLeft = B.Column.XPosition;\n\t\t\tvar BRight = B.Column.XPosition + B.OriginalWidth;\n\t\t\tvar BTop = B.Row.YPosition;\n\t\t\tvar BBottom = B.Row.YPosition + B.OriginalHeight;\n\n\t\t\treturn ResolveIntersectionConflict(A, BLeft, BRight, BTop, BBottom);\n\t\t}\n\n\t\tprivate bool ResolveIntersectionConflict(ExcelCell A, float BLeft, float BRight, float BTop, float BBottom)\n\t\t{\n\t\t\tif(A == null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar ALeft = A.Column.XPosition;\n\t\t\tvar ARight = A.Column.XPosition + A.OriginalWidth;\n\t\t\tvar ATop = A.Row.YPosition;\n\t\t\tvar ABottom = A.Row.YPosition + A.OriginalHeight;\n\n\t\t\tbool leftEqualPosition = Math.Abs(ALeft - BLeft) <= Tolerance;\n\t\t\tbool topEqualPosition = Math.Abs(ATop - BTop) <= Tolerance;\n\t\t\tbool rightEqualPosition = Math.Abs(ARight - BRight) <= Tolerance;\n\t\t\tbool bottomEqualPosition = Math.Abs(ABottom - BBottom) <= Tolerance;\n\n\t\t\tbool Cross_ALeft_BTop = \tIntersection(ALeft, ATop, ALeft, ABottom, BLeft, BTop, BRight, BTop);\n\t\t\tbool Cross_ALeft_BBottom = \tIntersection(ALeft, ATop, ALeft, ABottom, BLeft, BBottom, BRight, BBottom);\n\t\t\tbool Cross_ARight_BTop = \tIntersection(ARight, ATop, ARight, ABottom, BLeft, BTop, BRight, BTop);\n\t\t\tbool Cross_ARight_BBottom = Intersection(ARight, ATop, ARight, ABottom, BLeft, BBottom, BRight, BBottom);\n\n\t\t\t//currently not used\n\t\t\tbool Cross_ATop_BLeft = \tIntersection(ALeft, ATop, ARight, ATop, BLeft, BTop, BLeft, BBottom);\n\t\t\tbool Cross_ATop_BRight = \tIntersection(ALeft, ATop, ARight, ATop, BRight, BTop, BRight, BBottom);\n\t\t\tbool Cross_ABottom_BLeft = \tIntersection(ALeft, ABottom, ARight, ABottom, BLeft, BTop, BLeft, BBottom);\n\t\t\tbool Cross_ABottom_BRight = Intersection(ALeft, ABottom, ARight, ABottom, BRight, BTop, BRight, BBottom);\n\n\t\t\tbool isCrossed = !(ABottom < BTop || BBottom < ATop || ARight < BLeft || BRight < ALeft);\n\n\t\t\tif(!isCrossed && !leftEqualPosition && !topEqualPosition && !rightEqualPosition && !bottomEqualPosition) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\t \n\t\t\tif(!topEqualPosition && !bottomEqualPosition) {\n\t\t\t\t//Cut Upper cell to top position of a Lower cell\n\n\t\t\t\t//if A is upper\n\t\t\t\tif(ATop < BTop && ABottom < BBottom && isCrossed) {\n\t\t\t\t\tCutCellHeight(A, BTop);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t//Cut A cell to top position of a B cell\n\t\t\t\t//    ┌───┐\n\t\t\t\t//    │  A│\n\t\t\t\t// ┌──┼───┼─┐    \n\t\t\t\t// │B │   │ │\n\t\t\t\t// └──┼───┼─┘\n\t\t\t\t//    └───┘\n\t\t\t\t//            \n\t\t\t\tif(Cross_ALeft_BTop && Cross_ALeft_BBottom && BLeft < ALeft && BRight > ARight) {\n\t\t\t\t\tCutCellHeight(A, BTop);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t//Cut A cell to left position of a B cell\n\t\t\t\t//   ┌───┐ \n\t\t\t\t//   │  B│ \n\t\t\t\t//┌──┼─┐ │    \n\t\t\t\t//│A │ │ │ \n\t\t\t\t//└──┼─┘ │\n\t\t\t\t//   └───┘ \n\t\t\t\t//            \n\t\t\t\tif(Cross_ATop_BLeft && Cross_ABottom_BLeft && ALeft < BLeft && ARight < BRight) {\n\t\t\t\t\tCutCellWidthFromRight(A, BLeft);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Cut Left cell to left position of a Right cell\n\n\t\t\t// ┌──┬───┬─┐  ┌──┬─┬─┐  \n\t\t\t// │A │   │ │  │A │ │ │ \n\t\t\t// └──┼───┼─┘  └──┼─┘ │\n\t\t\t//    │  B│       │  B│\n\t\t\t//    └───┘       └───┘\n\n\t\t\tif(topEqualPosition && ABottom < BBottom && ALeft < BLeft && isCrossed) {\n\t\t\t\tCutCellWidthFromRight(A, BLeft);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t//Cut Left cell to left position of a Right cell\n\t\t\tif(ALeft < BLeft && ARight < BRight && ARight > BLeft &&\n\t\t\t   \t(\n\t\t\t\t\t//┌───┬─┬───┐\n\t\t\t\t\t//│A  │ │  B│\n\t\t\t\t\t//└───┴─┴───┘\n\t\t\t\t  \t(topEqualPosition && bottomEqualPosition)\n\t\t\t\t\t//┌────┐\n\t\t\t\t\t//│  ┌─┼──┐  \n\t\t\t\t\t//│A │ │ B│\n\t\t\t\t\t//│  └─┼──┘   \n\t\t\t\t\t//└────┘\n\t\t\t\t   \t|| (!topEqualPosition && !bottomEqualPosition && Cross_ARight_BTop && Cross_ARight_BBottom)\n\t\t\t\t\t//┌──┬─┬──┐\n\t\t\t\t\t//│A │ │ B│\n\t\t\t\t\t//│  └─┼──┘\n\t\t\t\t\t//└────┘\n\t\t\t\t   \t|| (topEqualPosition && !bottomEqualPosition && Cross_ARight_BBottom)\n\t\t\t\t\t//┌────┐\n\t\t\t\t\t//│  ┌─┼──┐\n\t\t\t\t\t//│A │ │ B│\n\t\t\t\t\t//└──┴─┴──┘\n\t\t\t\t   \t|| (!topEqualPosition && bottomEqualPosition && Cross_ARight_BTop)\n\t\t\t\t)){\n\t\t\t\tCutCellWidthFromRight(A, BLeft);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t//Cut A cell to right position of a Left cell\n\t\t\t//┌──┬──┐\n\t\t\t//│  │ A│\n\t\t\t//├──┼──┘\n\t\t\t//│B │\n\t\t\t//└──┘\n\t\t\tif(topEqualPosition && leftEqualPosition && !bottomEqualPosition && !rightEqualPosition\n\t\t\t   && Cross_ABottom_BRight){\n\t\t\t\tCutCellWidthFromLeft(A, BRight);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t//B region full contain A\n\t\t\tif((BTop < ATop || topEqualPosition) \n\t\t\t   && (BLeft < ALeft || leftEqualPosition) \n\t\t\t   && (BRight > ARight || rightEqualPosition)\n\t\t\t   && (BBottom > ABottom || bottomEqualPosition)) {\n\t\t\t\t//delete A\n\t\t\t\tRemoveCell(A);\n\t\t\t\tif(!A.Column.Cells.Any()) {\n\t\t\t\t\tColumns.Remove(A.Column);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tprivate void CutCellWidthFromLeft(ExcelCell cell, float toPos)\n\t\t{\n\t\t\tvar LeftPosition = cell.Column.XPosition;\n\t\t\tvar RightPosition = LeftPosition + cell.OriginalWidth;\n\t\t\tif(!(toPos > LeftPosition && toPos < RightPosition)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tExcelColumn StartColumn = GetColumnAtPosition(LeftPosition);\n\t\t\tExcelColumn newStartColumn = GetColumnAtPosition(toPos);\n\t\t\tif(newStartColumn == null) {\n\t\t\t\tvar index = InsertColumn(toPos);\n\t\t\t\tnewStartColumn = Columns[index];\n\t\t\t\tColumns.Remove(newStartColumn);\n\t\t\t}\n\t\t\tvar newCell = new ExcelCell(cell.ReportItem, cell.Value, cell.Row, newStartColumn);\n\t\t\tExcelCell existCell = newStartColumn.Cells.FirstOrDefault(x => x.Row == cell.Row);\n\t\t\tif(existCell != null) {\n\t\t\t\tResolveIntersectionConflict(cell, existCell);\n\t\t\t}\n\t\t\tnewCell.Style = cell.Style;\n\t\t\tCells.Add(newCell);\n\t\t\tnewCell.Row.Cells.Add(newCell);\n\t\t\tnewStartColumn.Cells.Add(newCell);\n\t\t\tRemoveCell(cell);\n\n\t\t\tLeftPosition = newStartColumn.XPosition;\n\t\t\tRightPosition = LeftPosition + cell.OriginalWidth;\n\t\t\tcell.RightAttachCol = GetColumnAtPosition(RightPosition);\n\t\t\tcell.CorrectedWidth = RightPosition - LeftPosition;\n\t\t}\n\n\t\tprivate void CutCellWidthFromRight(ExcelCell cell, float toPos)\n\t\t{\n\t\t\tvar LeftPosition = cell.Column.XPosition;\n\t\t\tvar RightPosition = LeftPosition + cell.OriginalWidth;\n\t\t\tif(!(toPos > LeftPosition && toPos < RightPosition)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcell.RightAttachCol = GetColumnAtPosition(toPos);\n\t\t\tExcelColumn endColumn = GetColumnAtPosition(RightPosition);\n\t\t\tif(endColumn != null && endColumn.IsEmpty) {\n\t\t\t\tColumns.Remove(endColumn);\n\t\t\t}\n\t\t\tcell.CorrectedWidth = toPos - LeftPosition;\n\t\t}\n\n\t\tprivate void CutCellHeight(ExcelCell cell, float toPos)\n\t\t{\n\t\t\tvar TopPosition = cell.Row.YPosition;\n\t\t\tvar BottomPosition = TopPosition + cell.OriginalHeight;\n\t\t\tif(!(toPos > TopPosition && toPos < BottomPosition)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcell.BottomAttachRow = GetRowAtPosition(toPos);\n\t\t\tExcelRow endRow = GetRowAtPosition(BottomPosition);\n\t\t\tif(endRow != null && endRow.IsEmpty) {\n\t\t\t\tRows.Remove(endRow);\n\t\t\t}\n\t\t\tcell.CorrectedHeight = toPos - TopPosition;\n\t\t}\n\n\t\tprivate void RemoveCell(ExcelCell cell)\n\t\t{\n\t\t\tCells.Remove(cell);\n\t\t\tcell.Column.Cells.Remove(cell);\n\t\t\tcell.Row.Cells.Remove(cell);\n\t\t}\n\n\t\tprivate bool Intersection(double ax1, double ay1, double ax2, double ay2, double bx1, double by1, double bx2, double by2)\n\t\t{\n\t\t\tdouble v1, v2, v3, v4;\n\t\t\tv1 = ((bx2 - bx1) * (ay1 - by1)) - ((by2 - by1) * (ax1 - bx1));\n\t\t\tv2 = ((bx2 - bx1) * (ay2 - by1)) - ((by2 - by1) * (ax2 - bx1));\n\t\t\tv3 = ((ax2 - ax1) * (by1 - ay1)) - ((ay2 - ay1) * (bx1 - ax1));\n\t\t\tv4 = ((ax2 - ax1) * (by2 - ay1)) - ((ay2 - ay1) * (bx2 - ax1));\n\t\t\tbool res = (v1 * v2 < 0) && (v3 * v4 < 0);\n\t\t\treturn res;\n\t\t}\n\n\t\tpublic void CellsCorrection()\n\t\t{\n\t\t\tfor(int i = 0; i < Cells.Count; i++) {\n\t\t\t\tvar count = Cells.Count;\n\n\t\t\t\tvar cell = Cells[i];\n\t\t\t\tif(cell.ExcelTable != null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tvar unresolvedCells = Cells\n\t\t\t\t\t//didn't apply correction to table cells\n\t\t\t\t\t.Where(x => x.ExcelTable == null)\n\t\t\t\t\t//simple check intersection, for select only intersection available cells\n\t\t\t\t\t.Where(x => \n\t\t\t\t\t       !((x.OriginalHeight + x.Row.YPosition) < cell.Row.YPosition ||\n\t\t\t\t\t       (cell.OriginalHeight + cell.Row.YPosition) < x.Row.YPosition ||\n\t\t\t\t\t       (x.OriginalWidth + x.Column.XPosition) < cell.Column.XPosition ||\n\t\t\t\t\t       (cell.OriginalWidth + cell.Column.XPosition) < x.Column.XPosition))\n\t\t\t\t\t.ToList();\n\n\t\t\t\t/*foreach(var table in Tables) {\n\t\t\t\t\tfloat tableLeft = table.Table.Left.Points;\n\t\t\t\t\tfloat tableTop = table.Table.Top.Points;\n\t\t\t\t\tFillAbsolutePosition(table.Table, ref tableTop, ref tableLeft);\n\n\t\t\t\t\tfloat tableRight = tableLeft + table.TableWidth;\n\t\t\t\t\tfloat tableBottom = table.GrowedBottomPosition;\n\t\t\t\t\tResolveIntersectionConflict(cell, tableLeft, tableRight, tableTop, tableBottom);\n\t\t\t\t}*/\n\n\t\t\t\twhile(unresolvedCells.Count > 0) {\n\t\t\t\t\tvar uc = unresolvedCells[unresolvedCells.Count - 1];\n\t\t\t\t\tif(uc != cell) {\n\t\t\t\t\t\tResolveIntersectionConflict(cell, uc);\n\t\t\t\t\t}\n\t\t\t\t\tunresolvedCells.Remove(uc);\n\t\t\t\t}\n\n\t\t\t\tvar dCount = i - (count - Cells.Count);\n\t\t\t\ti = dCount < 0 ? 0 : dCount;\n\t\t\t}\n\t\t}\n\n\t\tprivate void ShiftBottomRows(IEnumerable<ExcelRow> rows, float yOffset)\n\t\t{\n\t\t\tforeach(var row in rows) {\n\t\t\t\trow.yOffset += yOffset;\n\t\t\t\trow.YPosition += yOffset;\n\t\t\t}\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Render/ExcelConverter/ExcelColumn.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Collections.Generic;\n\nnamespace RdlEngine.Render.ExcelConverter\n{\n\tinternal class ExcelColumn\n\t{\n\t\tpublic float XPosition { get; set; }\n\t\tpublic List<ExcelCell> Cells { get; set; }\n\n\t\tpublic ExcelColumn(float xPos)\n\t\t{\n\t\t\tCells = new List<ExcelCell>();\n\t\t\tXPosition = xPos;\n\t\t}\n\n\t\tpublic bool IsEmpty {\n\t\t\tget{\n\t\t\t\treturn !Cells.Any();\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Render/ExcelConverter/ExcelImage.cs",
    "content": "﻿using System;\nusing Majorsilence.Reporting.Rdl;\nusing NPOI.Util;\nusing NPOI.XSSF.UserModel;\n\nnamespace RdlEngine.Render.ExcelConverter\n{\n\tinternal class ExcelImage\n\t{\n\t\tpublic Image Image { get; set; }\n\t\tpublic int ImageIndex { get; set; }\n\n\t\tpublic float AbsoluteTop { get; set; }\n\t\tpublic float AbsoluteLeft { get; set; }\n\n\t\tpublic float ImageWidth {\n\t\t\tget {\n\t\t\t\treturn Image.Width.Points;\n\t\t\t}\n\t\t}\n\n\t\tpublic float ImageHeight {\n\t\t\tget {\n\t\t\t\treturn Image.Height.Points;\n\t\t\t}\n\t\t}\n\n\t\tpublic ExcelImage(Image image, int imageIndex)\n\t\t{\n\t\t\tImage = image;\n\t\t\tImageIndex = imageIndex;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Render/ExcelConverter/ExcelLine.cs",
    "content": "﻿using System;\nusing Majorsilence.Reporting.Rdl;\nusing NPOI.Util;\nnamespace RdlEngine.Render.ExcelConverter\n{\n\tinternal class ExcelLine\n\t{\n\t\tpublic ExcelLine(Line line)\n\t\t{\n\t\t\tLine = line;\n\t\t}\n\n\t\tpublic Line Line { get; set; }\n\t\tpublic float BorderWidth { get; set; }\n\n\t\tpublic float AbsoluteTop { get; set; }\n\t\tpublic float AbsoluteLeft { get; set; }\n\t\tpublic float Right { get; set; }\n\t\tpublic float Bottom { get; set; }\n\n\t\tpublic bool FlipH {\n\t\t\tget {\n\t\t\t\treturn Right < AbsoluteLeft;\n\t\t\t}\n\t\t}\n\n\t\tpublic bool FlipV {\n\t\t\tget {\n\t\t\t\treturn Bottom < AbsoluteTop;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Render/ExcelConverter/ExcelRow.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Collections.Generic;\n\nnamespace RdlEngine.Render.ExcelConverter\n{\n\tinternal class ExcelRow\n\t{\n\t\tpublic float YPosition { get; set; }\n\t\tpublic float yOffset { get; set; }\n\t\tpublic List<ExcelCell> Cells { get; set; }\n\n\t\tpublic ExcelRow(float yPos)\n\t\t{\n\t\t\tCells = new List<ExcelCell>();\n\t\t\tYPosition = yPos;\n\t\t\tyOffset = 0;\n\t\t}\n\n\t\tpublic bool IsEmpty {\n\t\t\tget {\n\t\t\t\treturn !Cells.Any();\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Render/ExcelConverter/ExcelTable.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing Majorsilence.Reporting.Rdl;\nnamespace RdlEngine.Render.ExcelConverter\n{\n\tinternal class ExcelTable\n\t{\n\t\tpublic Table Table { get; set; }\n\t\tpublic float GrowedBottomPosition { get; set; }\n\t\tpublic float OriginalBottomPosition { get; set; }\n\n\t\tpublic float TableWidth {\n\t\t\tget{\n\t\t\t\treturn Table.TableColumns.Items.Sum(x => x.Width.Points);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Render/HtmlConverter/RenderHtmlTable.cs",
    "content": "\n\nusing System;\nusing Majorsilence.Reporting.Rdl;\nusing System.IO;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Xml;\nusing System.Globalization;\nusing System.Threading.Tasks;\n\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\nusing Majorsilence.Drawing.Imaging;\n#else\nusing System.Drawing;\nusing System.Drawing.Imaging;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\n    ///<summary>\n    /// Renders a report to HTML.  All positioning is handled via tables.\n    ///</summary>\n    internal class RenderHtmlTable : IPresent\n    {\n        Report r;                   // report\n                                    //       Stack<string> _Container;   // container for body/list/rectangle/ ...\n        StringWriter tw;            // temporary location where the output is going\n        IStreamGen _sg;             // stream generater\n        Hashtable _styles;          // hash table of styles we've generated\n        int cssId = 1;              // ID for css when names are usable or available\n        bool bScriptToggle = false; // need to generate toggle javascript in header\n        bool bScriptTableSort = false; // need to generate table sort javascript in header\n        Bitmap _bm = null;          // bm and\n        Graphics _g = null;         //\t\t  g are needed when calculating string heights\n        bool _Asp = false;          // denotes ASP.NET compatible HTML; e.g. no <html>, <body>\n                                    //    separate JavaScript and CSS\n        string _Prefix = \"\";            // prefix to generating all HTML names (e.g. css, ...\n        string _CSS;                // when ASP we put the CSS into a string\n        string _JavaScript;         //     as well as any required javascript\n        int _SkipMatrixCols = 0;        // # of matrix columns to skip\n\n        public RenderHtmlTable(Report rep, IStreamGen sg)\n        {\n            r = rep;\n            _sg = sg;                   // We need this in future\n\n            tw = new StringWriter();    // will hold the bulk of the HTML until we generate\n                                        // final file\n            _styles = new Hashtable();\n        }\n        \n        public void Dispose()\n        {\n            // These should already be cleaned up; but in case of an unexpected error \n            //   these still need to be disposed of\n            if (_bm != null)\n                _bm.Dispose();\n            if (_g != null)\n                _g.Dispose();\n        }\n\n        public Report Report()\n        {\n            return r;\n        }\n\n        public bool Asp\n        {\n            get { return _Asp; }\n            set { _Asp = value; }\n        }\n\n        public string JavaScript\n        {\n            get { return _JavaScript; }\n        }\n\n        public string CSS\n        {\n            get { return _CSS; }\n        }\n\n        public string Prefix\n        {\n            get { return _Prefix; }\n            set\n            {\n                _Prefix = value == null ? \"\" : value;\n                if (_Prefix.Length > 0 &&\n                    _Prefix[0] == '_')\n                    _Prefix = \"a\" + _Prefix;    // not perfect but underscores as first letter don't work\n            }\n        }\n\n        public bool IsPagingNeeded()\n        {\n            return false;\n        }\n\n        public void Start()\n        {\n            // Create three tables that represent how each top level report item (e.g. those not in a table\n            // or matrix) will be positioned.\n\n\n            return;\n        }\n\n\n\n        string FixupRelativeName(string relativeName)\n        {\n            if (_sg is OneFileStreamGen)\n            {\n                if (relativeName[0] == Path.DirectorySeparatorChar || relativeName[0] == Path.AltDirectorySeparatorChar)\n                    relativeName = relativeName.Substring(1);\n            }\n            else if (relativeName[0] != Path.DirectorySeparatorChar)\n                relativeName = Path.DirectorySeparatorChar + relativeName;\n\n            return relativeName;\n        }\n        // puts the JavaScript into the header\n        private void ScriptGenerate(TextWriter ftw)\n        {\n            if (bScriptToggle || bScriptTableSort)\n            {\n                ftw.WriteLine(\"<script language=\\\"javascript\\\">\");\n            }\n\n            if (bScriptToggle)\n            {\n                ftw.WriteLine(\"var dname='';\");\n                ftw.WriteLine(@\"function hideShow(node, hideCount, showID) {\nif (navigator.appName.toLowerCase().indexOf('netscape') > -1) \n\tdname = 'table-row';\nelse\n\tdname = 'block';\n\n var tNode;\n for (var ci=0;ci<node.childNodes.length;ci++) {\n     if (node.childNodes[ci].tagName && node.childNodes[ci].tagName.toLowerCase() == 'img') tNode = node.childNodes[ci];\n }\n\tvar rows = findObject(showID);\n\tif (rows[0].style.display == dname) {hideRows(rows, hideCount); tNode.src='plus.gif';}\n\telse {\n\t   tNode.src='minus.gif';\n\t   for (var i = 0; i < rows.length; i++) {\n\t\t  rows[i].style.display = dname;\n\t   }\n\t}\n}\nfunction hideRows(rows, count) {\n    var row;\n\tif (navigator.appName.toLowerCase().indexOf('netscape') > -1) \n\t{\n\t\tfor (var r=0; r < rows.length; r++) {\n\t\t\trow = rows[r];\n\t\t\trow.style.display = 'none';\n\t\t\tvar imgs = row.getElementsByTagName('img');\n\t\t\tfor (var ci=0;ci<imgs.length;ci++) {\n\t\t\t\tif (imgs[ci].className == 'toggle') {\n\t\t\t\t\timgs[ci].src='plus.gif';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\treturn;\n\t}\n if (rows.tagName == 'TR')\n    row = rows;\n else\n    row = rows[0];   \t\n while (count > 0) {\n   row.style.display = 'none';\n   var imgs = row.getElementsByTagName('img');\n   for (var ci=0;ci<imgs.length;ci++) {\n      if (imgs[ci].className == 'toggle') {\n\t\t     imgs[ci].src='plus.gif';\n      }\n   }\n   row = row.nextSibling;\n   count--;\n }\n}\nfunction findObject(id) {\n\tif (navigator.appName.toLowerCase().indexOf('netscape') > -1) \n\t{\n\t   var a = new Array();\n\t   var count=0;\n\t   for (var i=0; i < document.all.length; i++)\n\t   {\n\t      if (document.all[i].id == id)\n\t\t\ta[count++] = document.all[i];\n\t   }\n\t\treturn a;\n\t} \n\telse \n\t{\n\t    var o = document.all[id];\n\t\tif (o.tagName == 'TR')\n\t\t{\n\t\t   var a = new Array();\n\t\t   a[0] = o;\n\t\t   return a;\n\t\t}\n\t\treturn o;\n\t} \n}\n\");\n\n            }\n\n            if (bScriptTableSort)\n            {\n                ftw.WriteLine(\"var SORT_INDEX;\");\n                ftw.WriteLine(\"var SORT_DIR;\");\n\n                ftw.WriteLine(\"function sort_getInnerText(element) {\");\n                ftw.WriteLine(\"\tif (typeof element == 'string') return element;\");\n                ftw.WriteLine(\"\tif (typeof element == 'undefined') return element;\");\n                ftw.WriteLine(\"\tif (element.innerText) return element.innerText;\");\n                ftw.WriteLine(\"\tvar s = '';\");\n\n                ftw.WriteLine(\"\tvar cn = element.childNodes;\");\n                ftw.WriteLine(\"\tfor (var i = 0; i < cn.length; i++) {\");\n                ftw.WriteLine(\"\t\tswitch (cn[i].nodeType) {\");\n                ftw.WriteLine(\"\t\t\tcase 1:\");      // element node\n                ftw.WriteLine(\"\t\t\t\ts += sort_getInnerText(cn[i]);\");\n                ftw.WriteLine(\"\t\t\t\tbreak;\");\n                ftw.WriteLine(\"\t\t\tcase 3:\");      // text node\n                ftw.WriteLine(\"\t\t\t\ts += cn[i].nodeValue;\");\n                ftw.WriteLine(\"\t\t\t\tbreak;\");\n                ftw.WriteLine(\"\t\t}\");\n                ftw.WriteLine(\"\t}\");\n                ftw.WriteLine(\"\treturn s;\");\n                ftw.WriteLine(\"}\");\n\n                ftw.WriteLine(\"function sort_table(node, sortfn, header_rows, footer_rows) {\");\n                ftw.WriteLine(\"    var arrowNode;\");    // arrow node\n                ftw.WriteLine(\"    for (var ci=0;ci<node.childNodes.length;ci++) {\");\n                ftw.WriteLine(\"        if (node.childNodes[ci].tagName && node.childNodes[ci].tagName.toLowerCase() == 'span') arrowNode = node.childNodes[ci];\");\n                ftw.WriteLine(\"    }\");\n\n                ftw.WriteLine(\"    var td = node.parentNode;\");\n                ftw.WriteLine(\"    SORT_INDEX = td.cellIndex;\");    // need to remember SORT_INDEX in compare function\n                ftw.WriteLine(\"    var table = sort_getTable(td);\");\n\n                ftw.WriteLine(\"    var sortnext;\");\n                ftw.WriteLine(\"    if (arrowNode.getAttribute('sortdir') == 'down') {\");\n                ftw.WriteLine(\"        arrow = '&nbsp;&nbsp;&uarr;';\");\n                ftw.WriteLine(\"        SORT_DIR = -1;\");            // descending SORT_DIR in compare function\n                ftw.WriteLine(\"        sortnext = 'up';\");\n                ftw.WriteLine(\"    } else {\");\n                ftw.WriteLine(\"        arrow = '&nbsp;&nbsp;&darr;';\");\n                ftw.WriteLine(\"        SORT_DIR = 1;\");             // ascending SORT_DIR in compare function\n                ftw.WriteLine(\"        sortnext = 'down';\");\n                ftw.WriteLine(\"    }\");\n\n                ftw.WriteLine(\"    var newRows = new Array();\");\n                ftw.WriteLine(\"    for (j=header_rows;j<table.rows.length-footer_rows;j++) { newRows[j-header_rows] = table.rows[j]; }\");\n\n                ftw.WriteLine(\"    newRows.sort(sortfn);\");\n\n                // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones\n                ftw.WriteLine(\"    for (i=0;i<newRows.length;i++) {table.tBodies[0].appendChild(newRows[i]);}\");\n\n                // Reset all arrows and directions for next time\n                ftw.WriteLine(\"    var spans = document.getElementsByTagName('span');\");\n                ftw.WriteLine(\"    for (var ci=0;ci<spans.length;ci++) {\");\n                ftw.WriteLine(\"        if (spans[ci].className == 'sortarrow') {\");\n                // in the same table as us?\n                ftw.WriteLine(\"            if (sort_getTable(spans[ci]) == sort_getTable(node)) {\");\n                ftw.WriteLine(\"                spans[ci].innerHTML = '&nbsp;&nbsp;&nbsp;';\");\n                ftw.WriteLine(\"                spans[ci].setAttribute('sortdir','up');\");\n                ftw.WriteLine(\"            }\");\n                ftw.WriteLine(\"        }\");\n                ftw.WriteLine(\"    }\");\n\n                ftw.WriteLine(\"    arrowNode.innerHTML = arrow;\");\n                ftw.WriteLine(\"    arrowNode.setAttribute('sortdir',sortnext);\");\n                ftw.WriteLine(\"}\");\n\n                ftw.WriteLine(\"function sort_getTable(el) {\");\n                ftw.WriteLine(\"\tif (el == null) return null;\");\n                ftw.WriteLine(\"\telse if (el.nodeType == 1 && el.tagName.toLowerCase() == 'table')\");\n                ftw.WriteLine(\"\t\treturn el;\");\n                ftw.WriteLine(\"\telse\");\n                ftw.WriteLine(\"\t\treturn sort_getTable(el.parentNode);\");\n                ftw.WriteLine(\"}\");\n\n                ftw.WriteLine(\"function sort_cmp_date(c1,c2) {\");\n                ftw.WriteLine(\"    t1 = sort_getInnerText(c1.cells[SORT_INDEX]);\");\n                ftw.WriteLine(\"    t2 = sort_getInnerText(c2.cells[SORT_INDEX]);\");\n                ftw.WriteLine(\"    dt1 = new Date(t1);\");\n                ftw.WriteLine(\"    dt2 = new Date(t2);\");\n                ftw.WriteLine(\"    if (dt1==dt2) return 0;\");\n                ftw.WriteLine(\"    if (dt1<dt2) return -SORT_DIR;\");\n                ftw.WriteLine(\"    return SORT_DIR;\");\n                ftw.WriteLine(\"}\");\n\n                // numeric - removes any extraneous formating characters before parsing\n                ftw.WriteLine(\"function sort_cmp_number(c1,c2) {\");\n                ftw.WriteLine(\"    t1 = sort_getInnerText(c1.cells[SORT_INDEX]).replace(/[^0-9.]/g,'');\");\n                ftw.WriteLine(\"    t2 = sort_getInnerText(c2.cells[SORT_INDEX]).replace(/[^0-9.]/g,'');\");\n                ftw.WriteLine(\"    n1 = parseFloat(t1);\");\n                ftw.WriteLine(\"    n2 = parseFloat(t2);\");\n                ftw.WriteLine(\"    if (isNaN(n1)) n1 = Number.MAX_VALUE\");\n                ftw.WriteLine(\"    if (isNaN(n2)) n2 = Number.MAX_VALUE\");\n                ftw.WriteLine(\"    return (n1 - n2)*SORT_DIR;\");\n                ftw.WriteLine(\"}\");\n\n                // For string we first do a case insensitive comparison;\n                //   when equal we then do a case sensitive comparison\n                ftw.WriteLine(\"function sort_cmp_string(c1,c2) {\");\n                ftw.WriteLine(\"    t1 = sort_getInnerText(c1.cells[SORT_INDEX]).toLowerCase();\");\n                ftw.WriteLine(\"    t2 = sort_getInnerText(c2.cells[SORT_INDEX]).toLowerCase();\");\n                ftw.WriteLine(\"    if (t1==t2) return sort_cmp_casesensitive(c1,c2);\");\n                ftw.WriteLine(\"    if (t1<t2) return -SORT_DIR;\");\n                ftw.WriteLine(\"    return SORT_DIR;\");\n                ftw.WriteLine(\"}\");\n\n                ftw.WriteLine(\"function sort_cmp_casesensitive(c1,c2) {\");\n                ftw.WriteLine(\"    t1 = sort_getInnerText(c1.cells[SORT_INDEX]);\");\n                ftw.WriteLine(\"    t2 = sort_getInnerText(c2.cells[SORT_INDEX]);\");\n                ftw.WriteLine(\"    if (t1==t2) return 0;\");\n                ftw.WriteLine(\"    if (t2<t2) return -SORT_DIR;\");\n                ftw.WriteLine(\"    return SORT_DIR;\");\n                ftw.WriteLine(\"}\");\n            }\n\n            if (bScriptToggle || bScriptTableSort)\n            {\n                ftw.WriteLine(\"</script>\");\n            }\n\n            return;\n        }\n\n        // handle the Action tag\n        private async Task<string> Action(Action a, Row r, string t, string tooltip)\n        {\n            if (a == null)\n                return t;\n\n            string result = t;\n            if (a.Hyperlink != null)\n            {   // Handle a hyperlink\n                string url = await a.HyperLinkValue(this.r, r);\n                if (tooltip == null)\n                    result = String.Format(\"<a target=\\\"_top\\\" href=\\\"{0}\\\">{1}</a>\", url, t);\n                else\n                    result = String.Format(\"<a target=\\\"_top\\\" href=\\\"{0}\\\" title=\\\"{1}\\\">{2}</a>\", url, tooltip, t);\n            }\n            else if (a.Drill != null)\n            {   // Handle a drill through\n                StringBuilder args = new StringBuilder(\"<a target=\\\"_top\\\" href=\\\"\");\n                if (_Asp)   // for ASP we go thru the default page and pass it as an argument\n                    args.Append(\"Default.aspx?rs:url=\");\n                args.Append(a.Drill.ReportName);\n                args.Append(\".rdl\");\n                if (a.Drill.DrillthroughParameters != null)\n                {\n                    bool bFirst = !_Asp;        // ASP already have an argument\n                    foreach (DrillthroughParameter dtp in a.Drill.DrillthroughParameters.Items)\n                    {\n                        if (!await dtp.OmitValue(this.r, r))\n                        {\n                            if (bFirst)\n                            {   // First parameter - prefixed by '?'\n                                args.Append('?');\n                                bFirst = false;\n                            }\n                            else\n                            {   // Subsequant parameters - prefixed by '&'\n                                args.Append('&');\n                            }\n                            args.Append(dtp.Name.Nm);\n                            args.Append('=');\n                            args.Append(dtp.ValueValue(this.r, r));\n                        }\n                    }\n                }\n                args.Append('\"');\n                if (tooltip != null)\n                    args.Append(String.Format(\" title=\\\"{0}\\\"\", tooltip));\n                args.Append(\">\");\n                args.Append(t);\n                args.Append(\"</a>\");\n                result = args.ToString();\n            }\n            else if (a.BookmarkLink != null)\n            {   // Handle a bookmark\n                string bm = await a.BookmarkLinkValue(this.r, r);\n                if (tooltip == null)\n                    result = String.Format(\"<a href=\\\"#{0}\\\">{1}</a>\", bm, t);\n                else\n                    result = String.Format(\"<a href=\\\"#{0}\\\" title=\\\"{1}\\\">{2}</a>\", bm, tooltip, t);\n            }\n\n            return result;\n        }\n\n        private string Bookmark(string bm, string t)\n        {\n            if (bm == null)\n                return t;\n\n            return String.Format(\"<div id=\\\"{0}\\\">{1}</div>\", bm, t);\n        }\n\n        // Generate the CSS styles and put them in the header\n        private void CssGenerate(TextWriter ftw)\n        {\n            if (_styles.Count <= 0)\n                return;\n\n            if (!_Asp)\n                ftw.WriteLine(\"<style type='text/css'>\");\n\n            foreach (CssCacheEntry2 cce in _styles.Values)\n            {\n                int i = cce.Css.IndexOf('{');\n                if (cce.Name.IndexOf('#') >= 0)\n                    ftw.WriteLine(\"{0} {1}\", cce.Name, cce.Css.Substring(i));\n                else\n                    ftw.WriteLine(\".{0} {1}\", cce.Name, cce.Css.Substring(i));\n            }\n\n            if (!_Asp)\n                ftw.WriteLine(\"</style>\");\n        }\n\n        private async Task<string> CssAdd(Style s, ReportLink rl, Row row)\n        {\n            return await CssAdd(s, rl, row, false, float.MinValue, float.MinValue);\n        }\n\n        private async Task<string> CssAdd(Style s, ReportLink rl, Row row, bool bForceRelative)\n        {\n            return await CssAdd(s, rl, row, bForceRelative, float.MinValue, float.MinValue);\n        }\n        private async Task<string> CssAdd(Style s, ReportLink rl, Row row, bool bForceRelative, float h, float w)\n        {\n            string css;\n            string prefix = CssPrefix(s, rl);\n            if (_Asp && prefix == \"table#\")\n                bForceRelative = true;\n\n            if (s != null)\n                css = prefix + \"{\" + CssPosition(rl, row, bForceRelative, h, w) + await s.GetCSS(this.r, row, true) + \"}\";\n            else if (rl is Table || rl is Matrix)\n                css = prefix + \"{\" + CssPosition(rl, row, bForceRelative, h, w) + \"border-collapse:collapse;}\";\n            else\n                css = prefix + \"{\" + CssPosition(rl, row, bForceRelative, h, w) + \"}\";\n\n            CssCacheEntry2 cce = (CssCacheEntry2)_styles[css];\n            if (cce == null)\n            {\n                string name = prefix + this.Prefix + \"css\" + cssId++.ToString();\n                cce = new CssCacheEntry2(css, name);\n                _styles.Add(cce.Css, cce);\n            }\n\n            int i = cce.Name.IndexOf('#');\n            if (i > 0)\n                return cce.Name.Substring(i + 1);\n            else\n                return cce.Name;\n        }\n\n        private string CssPosition(ReportLink rl, Row row, bool bForceRelative, float h, float w)\n        {\n            if (!(rl is ReportItem))        // if not a report item then no position\n                return \"\";\n\n            // no positioning within a table\n            for (ReportLink p = rl.Parent; p != null; p = p.Parent)\n            {\n                if (p is TableCell)\n                    return \"\";\n                if (p is RowGrouping ||\n                    p is MatrixCell ||\n                    p is ColumnGrouping ||\n                    p is Corner)\n                {\n                    StringBuilder sb2 = new StringBuilder();\n                    if (h != float.MinValue)\n                        sb2.AppendFormat(NumberFormatInfo.InvariantInfo, \"height: {0}pt; \", h);\n                    if (w != float.MinValue)\n                        sb2.AppendFormat(NumberFormatInfo.InvariantInfo, \"width: {0}pt; \", w);\n                    return sb2.ToString();\n                }\n            }\n\n            // TODO: optimize by putting this into ReportItem and caching result???\n            ReportItem ri = (ReportItem)rl;\n\n            StringBuilder sb = new StringBuilder();\n\n            if (ri.Left != null)\n            {\n                sb.AppendFormat(NumberFormatInfo.InvariantInfo, \"left: {0}; \", ri.Left.CSS);\n            }\n            if (!(ri is Matrix))\n            {\n                if (ri.Width != null)\n                    sb.AppendFormat(NumberFormatInfo.InvariantInfo, \"width: {0}; \", ri.Width.CSS);\n            }\n            if (ri.Top != null)\n            {\n                sb.AppendFormat(NumberFormatInfo.InvariantInfo, \"top: {0}pt; \", ri.Gap(this.r));\n            }\n            if (ri is List)\n            {\n                List l = ri as List;\n                sb.AppendFormat(NumberFormatInfo.InvariantInfo, \"height: {0}pt; \", l.HeightOfList(this.r, GetGraphics, row));\n            }\n            else if (ri is Matrix || ri is Table)\n            { }\n            else if (ri.Height != null)\n                sb.AppendFormat(NumberFormatInfo.InvariantInfo, \"height: {0}; \", ri.Height.CSS);\n\n            if (sb.Length > 0)\n            {\n                if (bForceRelative || ri.YParents != null)\n                    sb.Insert(0, \"position: relative; \");\n                else\n                    sb.Insert(0, \"position: absolute; \");\n            }\n\n            return sb.ToString();\n        }\n\n        private Graphics GetGraphics\n        {\n            get\n            {\n                if (_g == null)\n                {\n                    _bm = new Bitmap(10, 10);\n                    _g = Graphics.FromImage(_bm);\n                }\n                return _g;\n            }\n        }\n\n        private string CssPrefix(Style s, ReportLink rl)\n        {\n            string cssPrefix = null;\n            ReportLink p;\n\n            if (rl is Table || rl is Matrix || rl is Rectangle)\n            {\n                cssPrefix = \"table#\";\n            }\n            else if (rl is Body)\n            {\n                cssPrefix = \"body#\";\n            }\n            else if (rl is Line)\n            {\n                cssPrefix = \"table#\";\n            }\n            else if (rl is List)\n            {\n                cssPrefix = \"\";\n            }\n            else if (rl is Subreport)\n            {\n                cssPrefix = \"\";\n            }\n            else if (rl is Chart)\n            {\n                cssPrefix = \"\";\n            }\n            if (cssPrefix != null)\n                return cssPrefix;\n\n            // now find what the style applies to\n            for (p = rl.Parent; p != null; p = p.Parent)\n            {\n                if (p is TableCell)\n                {\n                    bool bHead = false;\n                    ReportLink p2;\n                    for (p2 = p.Parent; p2 != null; p2 = p2.Parent)\n                    {\n                        Type t2 = p2.GetType();\n                        if (t2 == typeof(Header))\n                        {\n                            if (p2.Parent is Table)\n                                bHead = true;\n                            break;\n                        }\n                    }\n                    if (bHead)\n                        cssPrefix = \"th#\";\n                    else\n                        cssPrefix = \"td#\";\n                    break;\n                }\n                else if (p is RowGrouping ||\n                    p is MatrixCell ||\n                    p is ColumnGrouping ||\n                    p is Corner)\n                {\n                    cssPrefix = \"td#\";\n                    break;\n                }\n            }\n\n            return cssPrefix == null ? \"\" : cssPrefix;\n        }\n\n        public async Task End()\n        {\n            string bodyCssId;\n            if (r.ReportDefinition.Body != null)\n                bodyCssId = await CssAdd(r.ReportDefinition.Body.Style, r.ReportDefinition.Body, null);       // add the style for the body\n            else\n                bodyCssId = null;\n\n            TextWriter ftw = _sg.GetTextWriter();   // the final text writer location\n\n            if (_Asp)\n            {\n                // do any required JavaScript\n                StringWriter sw = new StringWriter();\n                ScriptGenerate(sw);\n                _JavaScript = sw.ToString();\n                sw.Close();\n                // do any required CSS\n                sw = new StringWriter();\n                CssGenerate(sw);\n                _CSS = sw.ToString();\n                sw.Close();\n            }\n            else\n            {\n                ftw.WriteLine(@\"<html>\");\n\n                // handle the <head>: description, javascript and CSS goes here\n                ftw.WriteLine(\"<head>\");\n\n                ScriptGenerate(ftw);\n                CssGenerate(ftw);\n\n                if (r.Description != null)  // Use description as title if provided\n                    ftw.WriteLine(string.Format(@\"<title>{0}</title>\", XmlUtil.XmlAnsi(r.Description)));\n\n                ftw.WriteLine(@\"</head>\");\n            }\n\n            // Always want an HTML body - even if report doesn't have a body stmt\n            if (this._Asp)\n            {\n                ftw.WriteLine(\"<table style=\\\"position: relative;\\\">\");\n            }\n            else if (bodyCssId != null)\n                ftw.WriteLine(@\"<body id='{0}'><table>\", bodyCssId);\n            else\n                ftw.WriteLine(\"<body><table>\");\n\n            ftw.Write(tw.ToString());\n\n            if (this._Asp)\n                ftw.WriteLine(@\"</table>\");\n            else\n                ftw.WriteLine(@\"</table></body></html>\");\n\n            if (_g != null)\n            {\n                _g.Dispose();\n                _g = null;\n            }\n            if (_bm != null)\n            {\n                _bm.Dispose();\n                _bm = null;\n            }\n            return;\n        }\n\n        // Body: main container for the report\n        public void BodyStart(Body b)\n        {\n            if (b.ReportItems != null && b.ReportItems.Items.Count > 0)\n                tw.WriteLine(\"<tr><td><div style=\\\"POSITION: relative; \\\">\");\n        }\n\n        public void BodyEnd(Body b)\n        {\n            if (b.ReportItems != null && b.ReportItems.Items.Count > 0)\n                tw.WriteLine(\"</div></td></tr>\");\n        }\n\n        public void PageHeaderStart(PageHeader ph)\n        {\n            if (ph.ReportItems != null && ph.ReportItems.Items.Count > 0)\n                tw.WriteLine(\"<tr><td><div style=\\\"overflow: clip; POSITION: relative; HEIGHT: {0};\\\">\", ph.Height.CSS);\n        }\n\n        public void PageHeaderEnd(PageHeader ph)\n        {\n            if (ph.ReportItems != null && ph.ReportItems.Items.Count > 0)\n                tw.WriteLine(\"</div></td></tr>\");\n        }\n\n        public void PageFooterStart(PageFooter pf)\n        {\n            if (pf.ReportItems != null && pf.ReportItems.Items.Count > 0)\n                tw.WriteLine(\"<tr><td><div style=\\\"overflow: clip; POSITION: relative; HEIGHT: {0};\\\">\", pf.Height.CSS);\n        }\n\n        public void PageFooterEnd(PageFooter pf)\n        {\n            if (pf.ReportItems != null && pf.ReportItems.Items.Count > 0)\n                tw.WriteLine(\"</div></td></tr>\");\n        }\n\n        public async Task Textbox(Textbox tb, string t, Row row)\n        {\n            if (!await tb.IsHtml(this.r, row))      // we leave the text as is when request is to treat as html\n            {                                   //   this can screw up the generated HTML if not properly formed HTML\n                                                // make all the characters browser readable\n                t = XmlUtil.XmlAnsi(t);\n\n                // handle any specified bookmark\n                t = Bookmark(await tb.BookmarkValue(this.r, row), t);\n\n                // handle any specified actions\n                t = await Action(tb.Action, row, t, await tb.ToolTipValue(this.r, row));\n            }\n            // determine if we're in a tablecell\n            Type tp = tb.Parent.Parent.GetType();\n            bool bCell;\n            if (tp == typeof(TableCell) ||\n                tp == typeof(Corner) ||\n                tp == typeof(DynamicColumns) ||\n                tp == typeof(DynamicRows) ||\n                tp == typeof(StaticRow) ||\n                tp == typeof(StaticColumn) ||\n                tp == typeof(Subtotal) ||\n                tp == typeof(MatrixCell))\n                bCell = true;\n            else\n                bCell = false;\n\n            if (tp == typeof(Rectangle))\n                tw.Write(\"<td>\");\n\n            if (bCell)\n            {   // The cell has the formatting for this text\n                if (t == \"\")\n                    tw.Write(\"<br />\");     // must have something in cell for formating\n                else\n                    tw.Write(t);\n            }\n            else\n            {   // Formatting must be specified\n                string cssName = await CssAdd(tb.Style, tb, row); // get the style name for this item\n\n                tw.Write(\"<div class='{0}'>{1}</div>\", cssName, t);\n            }\n\n            if (tp == typeof(Rectangle))\n                tw.Write(\"</td>\");\n        }\n\n        public async Task DataRegionNoRows(DataRegion d, string noRowsMsg)            // no rows in table\n        {\n            if (noRowsMsg == null)\n                noRowsMsg = \"\";\n\n            bool bTableCell = d.Parent.Parent.GetType() == typeof(TableCell);\n\n            if (bTableCell)\n            {\n                if (noRowsMsg == \"\")\n                    tw.Write(\"<br />\");\n                else\n                    tw.Write(noRowsMsg);\n            }\n            else\n            {\n                string cssName = await CssAdd(d.Style, d, null);  // get the style name for this item\n                tw.Write(\"<div class='{0}'>{1}</div>\", cssName, noRowsMsg);\n            }\n\n            return;\n        }\n\n        // Lists\n        public async Task<bool> ListStart(List l, Row r)\n        {\n            // identifiy reportitem it if necessary\n            string bookmark = await l.BookmarkValue(this.r, r);\n            if (bookmark != null)   // \n                tw.WriteLine(\"<div id=\\\"{0}\\\">\", bookmark);     // can't use the table id since we're using for css style\n            return true;\n        }\n\n        public async Task ListEnd(List l, Row r)\n        {\n            string bookmark = await l.BookmarkValue(this.r, r);\n            if (bookmark != null)\n                tw.WriteLine(\"</div>\");\n        }\n\n        public async Task ListEntryBegin(List l, Row r)\n        {\n            string cssName = await CssAdd(l.Style, l, r, true);   // get the style name for this item; force to be relative\n            tw.WriteLine();\n            tw.WriteLine(\"<div class={0}>\", cssName);\n        }\n\n        public void ListEntryEnd(List l, Row r)\n        {\n            tw.WriteLine();\n            tw.WriteLine(\"</div>\");\n        }\n\n        // Tables\t\t\t\t\t// Report item table\n        public async Task<bool> TableStart(Table t, Row row)\n        {\n            string cssName = await CssAdd(t.Style, t, row);   // get the style name for this item\n\n            // Determine if report custom defn want this table to be sortable\n            if (IsTableSortable(t))\n            {\n                this.bScriptTableSort = true;\n            }\n\n            string bookmark = await t.BookmarkValue(this.r, row);\n            if (bookmark != null)\n                tw.WriteLine(\"<div id=\\\"{0}\\\">\", bookmark);     // can't use the table id since we're using for css style\n\n            // Calculate the width of all the columns\n            int width = await t.WidthInPixels(this.r, row);\n            if (width <= 0)\n                tw.WriteLine(\"<table id='{0}'>\", cssName);\n            else\n                tw.WriteLine(\"<table id='{0}' width={1}>\", cssName, width);\n\n            return true;\n        }\n\n        public bool IsTableSortable(Table t)\n        {\n            if (t.TableGroups != null || t.Details == null ||\n                t.Details.TableRows == null || t.Details.TableRows.Items.Count != 1)\n                return false;   // can't have tableGroups; must have 1 detail row\n\n            // Determine if report custom defn want this table to be sortable\n            bool bReturn = false;\n            if (t.Custom != null)\n            {\n                // Loop thru all the child nodes\n                foreach (XmlNode xNodeLoop in t.Custom.CustomXmlNode.ChildNodes)\n                {\n                    if (xNodeLoop.Name == \"HTML\")\n                    {\n                        if (xNodeLoop.LastChild.InnerText.ToLower() == \"true\")\n                        {\n                            bReturn = true;\n                        }\n                        break;\n                    }\n                }\n            }\n            return bReturn;\n        }\n\n        public async Task TableEnd(Table t, Row row)\n        {\n            string bookmark = await t.BookmarkValue(this.r, row);\n            if (bookmark != null)\n                tw.WriteLine(\"</div>\");\n            tw.WriteLine(\"</table>\");\n            return;\n        }\n\n        public void TableBodyStart(Table t, Row row)\n        {\n            tw.WriteLine(\"<tbody>\");\n        }\n\n        public void TableBodyEnd(Table t, Row row)\n        {\n            tw.WriteLine(\"</tbody>\");\n        }\n\n        public void TableFooterStart(Footer f, Row row)\n        {\n            tw.WriteLine(\"<tfoot>\");\n        }\n\n        public void TableFooterEnd(Footer f, Row row)\n        {\n            tw.WriteLine(\"</tfoot>\");\n        }\n\n        public void TableHeaderStart(Header h, Row row)\n        {\n            tw.WriteLine(\"<thead>\");\n        }\n\n        public void TableHeaderEnd(Header h, Row row)\n        {\n            tw.WriteLine(\"</thead>\");\n        }\n\n        public async Task TableRowStart(TableRow tr, Row row)\n        {\n            tw.Write(\"\\t<tr\");\n            ReportLink rl = tr.Parent.Parent;\n            Visibility v = null;\n            Textbox togText = null;     // holds the toggle text box if any\n            if (rl is Details)\n            {\n                Details d = (Details)rl;\n                v = d.Visibility;\n                togText = d.ToggleTextbox;\n            }\n            else if (rl.Parent is TableGroup)\n            {\n                TableGroup tg = (TableGroup)rl.Parent;\n                v = tg.Visibility;\n                togText = tg.ToggleTextbox;\n            }\n\n            if (v != null &&\n                v.Hidden != null)\n            {\n                bool bHide = await v.Hidden.EvaluateBoolean(this.r, row);\n                if (bHide)\n                    tw.Write(\" style=\\\"display:none;\\\"\");\n            }\n\n            if (togText != null && togText.Name != null)\n            {\n                string name = togText.Name.Nm + \"_\" + togText.RunCount(this.r).ToString();\n                tw.Write(\" id='{0}'\", name);\n            }\n\n            tw.Write(\">\");\n        }\n\n        public void TableRowEnd(TableRow tr, Row row)\n        {\n            tw.WriteLine(\"</tr>\");\n        }\n\n        public async Task TableCellStart(TableCell t, Row row)\n        {\n            string cellType = t.InTableHeader ? \"th\" : \"td\";\n\n            ReportItem r = t.ReportItems.Items[0];\n\n            string cssName = await CssAdd(r.Style, r, row);   // get the style name for this item\n\n            tw.Write(\"<{0} id='{1}'\", cellType, cssName);\n\n            // calculate width of column\n            if (t.InTableHeader && t.OwnerTable.TableColumns != null)\n            {\n                // Calculate the width across all the spanned columns\n                int width = 0;\n                for (int ci = t.ColIndex; ci < t.ColIndex + t.ColSpan; ci++)\n                {\n                    TableColumn tc = t.OwnerTable.TableColumns.Items[ci] as TableColumn;\n                    if (tc != null && tc.Width != null)\n                        width += tc.Width.PixelsX;\n                }\n                if (width > 0)\n                    tw.Write(\" width={0}\", width);\n            }\n\n            if (t.ColSpan > 1)\n                tw.Write(\" colspan={0}\", t.ColSpan);\n\n            Textbox tb = r as Textbox;\n            if (tb != null &&               // have textbox\n                tb.IsToggle &&              //   and its a toggle\n                tb.Name != null)            //   and need name as well\n            {\n                int groupNestCount = t.OwnerTable.GetGroupNestCount(this.r);\n                if (groupNestCount > 0) // anything to toggle?\n                {\n                    string name = tb.Name.Nm + \"_\" + (tb.RunCount(this.r) + 1).ToString();\n                    bScriptToggle = true;\n\n                    // need both hand and pointer because IE and Firefox use different names\n                    tw.Write(\" onClick=\\\"hideShow(this, {0}, '{1}')\\\" onMouseOver=\\\"style.cursor ='hand';style.cursor ='pointer'\\\">\", groupNestCount, name);\n                    tw.Write(\"<img class='toggle' src=\\\"plus.gif\\\" align=\\\"top\\\"/>\");\n                }\n                else\n                    tw.Write(\"<img src=\\\"empty.gif\\\" align=\\\"top\\\"/>\");\n            }\n            else\n                tw.Write(\">\");\n\n            if (t.InTableHeader)\n            {\n                // put the second half of the sort tags for the column; if needed\n                // first half ---- <a href=\"#\" onclick=\"sort_table(this,sort_cmp_string,1,0);return false;\">\n                // next half follows text  ---- <span class=\"sortarrow\">&nbsp;&nbsp;&nbsp;</span></a></th>\n\n                string sortcmp = SortType(t, tb);   // obtain the sort type\n                if (sortcmp != null)                // null if sort not needed\n                {\n                    int headerRows, footerRows;\n                    headerRows = t.OwnerTable.Header.TableRows.Items.Count; // since we're in header we know we have some rows\n                    if (t.OwnerTable.Footer != null &&\n                        t.OwnerTable.Footer.TableRows != null)\n                        footerRows = t.OwnerTable.Footer.TableRows.Items.Count;\n                    else\n                        footerRows = 0;\n                    tw.Write(\"<a href=\\\"#\\\" title='Sort' onclick=\\\"sort_table(this,{0},{1},{2});return false;\\\">\", sortcmp, headerRows, footerRows);\n                }\n            }\n\n            return;\n        }\n\n        private string SortType(TableCell tc, Textbox tb)\n        {\n            // return of null means don't sort\n            if (tb == null || !IsTableSortable(tc.OwnerTable))\n                return null;\n\n            // default is true if table is sortable;\n            //   but user may place override on Textbox custom tag\n            if (tb.Custom != null)\n            {\n                // Loop thru all the child nodes\n                foreach (XmlNode xNodeLoop in tb.Custom.CustomXmlNode.ChildNodes)\n                {\n                    if (xNodeLoop.Name == \"HTML\")\n                    {\n                        if (xNodeLoop.LastChild.InnerText.ToLower() == \"false\")\n                        {\n                            return null;\n                        }\n                        break;\n                    }\n                }\n            }\n\n            // Must find out the type of the detail column\n            Details d = tc.OwnerTable.Details;\n            if (d == null)\n                return null;\n            TableRow tr = d.TableRows.Items[0] as TableRow;\n            if (tr == null)\n                return null;\n            TableCell dtc = tr.TableCells.Items[tc.ColIndex] as TableCell;\n            if (dtc == null)\n                return null;\n            Textbox dtb = dtc.ReportItems.Items[0] as Textbox;\n            if (dtb == null)\n                return null;\n\n            string sortcmp;\n            switch (dtb.Value.Type)\n            {\n                case TypeCode.DateTime:\n                    sortcmp = \"sort_cmp_date\";\n                    break;\n                case TypeCode.Int16:\n                case TypeCode.UInt16:\n                case TypeCode.Int32:\n                case TypeCode.UInt32:\n                case TypeCode.Int64:\n                case TypeCode.UInt64:\n                case TypeCode.Decimal:\n                case TypeCode.Single:\n                case TypeCode.Double:\n                    sortcmp = \"sort_cmp_number\";\n                    break;\n                case TypeCode.String:\n                    sortcmp = \"sort_cmp_string\";\n                    break;\n                case TypeCode.Empty:    // Not a type we know how to sort\n                default:\n                    sortcmp = null;\n                    break;\n            }\n\n            return sortcmp;\n        }\n\n        public void TableCellEnd(TableCell t, Row row)\n        {\n            string cellType = t.InTableHeader ? \"th\" : \"td\";\n            Textbox tb = t.ReportItems.Items[0] as Textbox;\n            if (cellType == \"th\" && SortType(t, tb) != null)\n            {   // put the second half of the sort tags for the column\n                // first half ---- <a href=\"#\" onclick=\"sort_table(this,sort_cmp_string,1,0);return false;\">\n                // next half follows text  ---- <span class=\"sortarrow\">&nbsp;&nbsp;&nbsp;</span></a></th>\n                tw.Write(\"<span class=\\\"sortarrow\\\">&nbsp;&nbsp;&nbsp;</span></a>\");\n            }\n\n            tw.Write(\"</{0}>\", cellType);\n            return;\n        }\n\n        public async Task<bool> MatrixStart(Matrix m, MatrixCellEntry[,] matrix, Row r, int headerRows, int maxRows, int maxCols)               // called first\n        {\n            string bookmark = await m.BookmarkValue(this.r, r);\n            if (bookmark != null)\n                tw.WriteLine(\"<div id=\\\"{0}\\\">\", bookmark);     // can't use the table id since we're using for css style\n\n            // output some of the table styles\n            string cssName = await CssAdd(m.Style, m, r); // get the style name for this item\n\n            tw.WriteLine(\"<table id='{0}'>\", cssName);\n            return true;\n        }\n\n        public void MatrixColumns(Matrix m, MatrixColumns mc)   // called just after MatrixStart\n        {\n        }\n\n        public async Task MatrixCellStart(Matrix m, ReportItem ri, int row, int column, Row r, float h, float w, int colSpan)\n        {\n            if (ri == null)         // Empty cell?\n            {\n                if (_SkipMatrixCols == 0)\n                    tw.Write(\"<td>\");\n                return;\n            }\n\n            string cssName = await CssAdd(ri.Style, ri, r, false, h, w);  // get the style name for this item\n\n            tw.Write(\"<td id='{0}'\", cssName);\n            if (colSpan != 1)\n            {\n                tw.Write(\" colspan={0}\", colSpan);\n                _SkipMatrixCols = -(colSpan - 1);   // start it as negative as indicator that we need this </td>\n            }\n            else\n                _SkipMatrixCols = 0;\n            if (ri is Textbox)\n            {\n                Textbox tb = (Textbox)ri;\n                if (tb.IsToggle && tb.Name != null)     // name is required for this\n                {\n                    string name = tb.Name.Nm + \"_\" + (tb.RunCount(this.r) + 1).ToString();\n\n                    bScriptToggle = true;   // we need to generate JavaScript in header\n                                            // TODO -- need to calculate the hide count correctly\n                    tw.Write(\" onClick=\\\"hideShow(this, {0}, '{1}')\\\" onMouseOver=\\\"style.cursor ='hand'\\\"\", 0, name);\n                }\n            }\n\n            tw.Write(\">\");\n            return;\n        }\n\n        public Task MatrixCellEnd(Matrix m, ReportItem ri, int row, int column, Row r)\n        {\n            if (_SkipMatrixCols == 0)\n                tw.Write(\"</td>\");\n            else if (_SkipMatrixCols < 0)\n            {\n                tw.Write(\"</td>\");\n                _SkipMatrixCols = -_SkipMatrixCols;\n            }\n            else\n                _SkipMatrixCols--;\n            return Task.CompletedTask;\n        }\n\n        public void MatrixRowStart(Matrix m, int row, Row r)\n        {\n            tw.Write(\"\\t<tr\");\n\n            tw.Write(\">\");\n        }\n\n        public void MatrixRowEnd(Matrix m, int row, Row r)\n        {\n            tw.WriteLine(\"</tr>\");\n        }\n\n        public async Task MatrixEnd(Matrix m, Row r)              // called last\n        {\n            tw.Write(\"</table>\");\n\n            string bookmark = await m.BookmarkValue(this.r, r);\n            if (bookmark != null)\n                tw.WriteLine(\"</div>\");\n            return;\n        }\n\n        public async Task Chart(Chart c, Row r, ChartBase cb)\n        {\n            string relativeName;\n\n            Stream io = _sg.GetIOStream(out relativeName, \"png\");\n            try\n            {\n                cb.Save(this.r, io, ImageFormat.Png);\n            }\n            finally\n            {\n                io.Flush();\n                io.Close();\n            }\n\n            relativeName = FixupRelativeName(relativeName);\n\n            // Create syntax in a string buffer\n            StringWriter sw = new StringWriter();\n\n            string bookmark = await c.BookmarkValue(this.r, r);\n            if (bookmark != null)\n                sw.WriteLine(\"<div id=\\\"{0}\\\">\", bookmark);     // can't use the table id since we're using for css style\n\n            string cssName = await CssAdd(c.Style, c, null);  // get the style name for this item\n\n            sw.Write(\"<img src=\\\"{0}\\\" class='{1}'\", relativeName, cssName);\n            string tooltip = await c.ToolTipValue(this.r, r);\n            if (tooltip != null)\n                sw.Write(\" alt=\\\"{0}\\\"\", tooltip);\n            if (c.Height != null)\n                sw.Write(\" height=\\\"{0}\\\"\", c.Height.PixelsY.ToString());\n            if (c.Width != null)\n                sw.Write(\" width=\\\"{0}\\\"\", c.Width.PixelsX.ToString());\n            sw.Write(\">\");\n            if (bookmark != null)\n                sw.Write(\"</div>\");\n\n            tw.Write(await Action(c.Action, r, sw.ToString(), tooltip));\n\n            return;\n        }\n\n        public async Task Image(Image i, Row r, string mimeType, Stream ioin)\n        {\n            string relativeName;\n            string suffix;\n\n            switch (mimeType)\n            {\n                case \"image/bmp\":\n                    suffix = \"bmp\";\n                    break;\n                case \"image/jpeg\":\n                    suffix = \"jpeg\";\n                    break;\n                case \"image/gif\":\n                    suffix = \"gif\";\n                    break;\n                case \"image/png\":\n                case \"image/x-png\":\n                    suffix = \"png\";\n                    break;\n                default:\n                    suffix = \"unk\";\n                    break;\n            }\n            Stream io = _sg.GetIOStream(out relativeName, suffix);\n            try\n            {\n                if (ioin.CanSeek)       // ioin.Length requires Seek support\n                {\n                    byte[] ba = new byte[ioin.Length];\n                    ioin.Read(ba, 0, ba.Length);\n                    io.Write(ba, 0, ba.Length);\n                }\n                else\n                {\n                    byte[] ba = new byte[1000];     // read a 1000 bytes at a time\n                    while (true)\n                    {\n                        int length = ioin.Read(ba, 0, ba.Length);\n                        if (length <= 0)\n                            break;\n                        io.Write(ba, 0, length);\n                    }\n                }\n            }\n            finally\n            {\n                io.Flush();\n                io.Close();\n            }\n            if (i.ImageSource == ImageSourceEnum.Embedded) // embedded image in html\n                relativeName = \"data:\" + mimeType + \";base64,\" + i.EmbeddedImageData;\n            else\n                relativeName = FixupRelativeName(relativeName);\n\n            // Create syntax in a string buffer\n            StringWriter sw = new StringWriter();\n\n            string bookmark = await i.BookmarkValue(this.r, r);\n            if (bookmark != null)\n                sw.WriteLine(\"<div id=\\\"{0}\\\">\", bookmark);     // we're using for css style\n\n            string cssName = await CssAdd(i.Style, i, null);  // get the style name for this item\n\n            sw.Write(\"<img src=\\\"{0}\\\" class='{1}'\", relativeName, cssName);\n\n            string tooltip = await i.ToolTipValue(this.r, r);\n            if (tooltip != null)\n                sw.Write(\" alt=\\\"{0}\\\"\", tooltip);\n            if (i.Height != null)\n                sw.Write(\" height=\\\"{0}\\\"\", i.Height.PixelsY.ToString());\n            if (i.Width != null)\n                sw.Write(\" width=\\\"{0}\\\"\", i.Width.PixelsX.ToString());\n            sw.Write(\"/>\");\n\n            if (bookmark != null)\n                sw.Write(\"</div>\");\n\n            tw.Write(await Action(i.Action, r, sw.ToString(), tooltip));\n            return;\n        }\n\n        public async Task Line(Line l, Row r)\n        {\n            bool bVertical;\n            string t;\n            if (l.Height == null || l.Height.PixelsY > 0)   // only handle horizontal rule\n            {\n                if (l.Width == null || l.Width.PixelsX > 0) //    and vertical rules\n                    return;\n                bVertical = true;\n                t = \"<TABLE style=\\\"border-collapse:collapse;BORDER-STYLE: none;WIDTH: {0}; POSITION: absolute; LEFT: {1}; TOP: {2}; HEIGHT: {3}; BACKGROUND-COLOR:{4};\\\"><TBODY><TR style=\\\"WIDTH:{0}\\\"><TD style=\\\"WIDTH:{0}\\\"></TD></TR></TBODY></TABLE>\";\n            }\n            else\n            {\n                bVertical = false;\n                t = \"<TABLE style=\\\"border-collapse:collapse;BORDER-STYLE: none;WIDTH: {0}; POSITION: absolute; LEFT: {1}; TOP: {2}; HEIGHT: {3}; BACKGROUND-COLOR:{4};\\\"><TBODY><TR style=\\\"HEIGHT:{3}\\\"><TD style=\\\"HEIGHT:{3}\\\"></TD></TR></TBODY></TABLE>\";\n            }\n\n            string width, left, top, height, color;\n            Style s = l.Style;\n\n            left = l.Left == null ? \"0px\" : l.Left.CSS;\n            top = l.Top == null ? \"0px\" : l.Top.CSS;\n\n            if (bVertical)\n            {\n                height = l.Height == null ? \"0px\" : l.Height.CSS;\n                // width comes from the BorderWidth\n                if (s != null && s.BorderWidth != null && s.BorderWidth.Default != null)\n                    width = await s.BorderWidth.Default.EvaluateString(this.r, r);\n                else\n                    width = \"1px\";\n            }\n            else\n            {\n                width = l.Width == null ? \"0px\" : l.Width.CSS;\n                // height comes from the BorderWidth\n                if (s != null && s.BorderWidth != null && s.BorderWidth.Default != null)\n                    height = await s.BorderWidth.Default.EvaluateString(this.r, r);\n                else\n                    height = \"1px\";\n            }\n\n            if (s != null && s.BorderColor != null && s.BorderColor.Default != null)\n                color = await s.BorderColor.Default.EvaluateString(this.r, r);\n            else\n                color = \"black\";\n\n            tw.WriteLine(t, width, left, top, height, color);\n            return;\n        }\n\n        public async Task<bool> RectangleStart(Rdl.Rectangle rect, Row r)\n        {\n            string cssName = await CssAdd(rect.Style, rect, r);   // get the style name for this item\n\n            string bookmark = await rect.BookmarkValue(this.r, r);\n            if (bookmark != null)\n                tw.WriteLine(\"<div id=\\\"{0}\\\">\", bookmark);     // can't use the table id since we're using for css style\n\n            // Calculate the width of all the columns\n            int width = rect.Width.PixelsX;\n            if (width < 0)\n                tw.WriteLine(\"<table id='{0}'><tr>\", cssName);\n            else\n                tw.WriteLine(\"<table id='{0}' width={1}><tr>\", cssName, width);\n\n            return true;\n        }\n\n        public async Task RectangleEnd(Rdl.Rectangle rect, Row r)\n        {\n            tw.WriteLine(\"</tr></table>\");\n            string bookmark = await rect.BookmarkValue(this.r, r);\n            if (bookmark != null)\n                tw.WriteLine(\"</div>\");\n            return;\n        }\n\n        // Subreport:  \n        public async Task Subreport(Subreport s, Row r)\n        {\n            string cssName = await CssAdd(s.Style, s, r); // get the style name for this item\n\n            tw.WriteLine(\"<div class='{0}'>\", cssName);\n\n            await s.ReportDefn.Run(this);\n\n            tw.WriteLine(\"</div>\");\n            return;\n        }\n        public void GroupingStart(Grouping g)           // called at start of grouping\n        {\n        }\n        public void GroupingInstanceStart(Grouping g)   // called at start for each grouping instance\n        {\n        }\n        public void GroupingInstanceEnd(Grouping g) // called at start for each grouping instance\n        {\n        }\n        public void GroupingEnd(Grouping g)         // called at end of grouping\n        {\n        }\n        public Task RunPages(Pages pgs) // we don't have paging turned on for html\n        {\n            return Task.CompletedTask;\n        }\n    }\n\n\n    class CssCacheEntry2\n    {\n        string _Css;                    // css \n        string _Name;                   // name of entry\n\n        public CssCacheEntry2(string css, string name)\n        {\n            _Css = css;\n            _Name = name;\n        }\n\n        public string Css\n        {\n            get { return _Css; }\n            set { _Css = value; }\n        }\n\n        public string Name\n        {\n            get { return _Name; }\n            set { _Name = value; }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Render/HtmlConverter/TablePositioner.cs",
    "content": "\n\nusing System;\nusing Majorsilence.Reporting.Rdl;\nusing System.IO;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Globalization;\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\nusing Majorsilence.Drawing.Drawing2D;\n#else\nusing System.Drawing;\nusing System.Drawing.Drawing2D;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t\n\t///<summary>\n\t/// HTML Table for positioning report items\n\t///</summary>\n\tinternal class TablePositioner\n\t{\n        Report _rpt;                // current report\n        ReportItems _ris;           // report items contained in this position\n        string[] _values;           //  values for each report item\n        string _TableSyntax;        //  syntax for the table position; table contains {x} items holding a\n                                    //   spot for each _ris;\n        public TablePositioner(Report rpt, ReportItems ris)\n        {\n            _rpt = rpt;\n            _ris = ris;\n            _values = new string[ris.Items.Count];\n\n            _TableSyntax = BuildTable();\n        }\n\n        private string BuildTable()\n        {\n            StringBuilder sb = new StringBuilder();\n            float width = TableWidth();\n            sb.AppendFormat(\"<table style=\\\"table-layout:fixed;width:{0}pt;border-style:none;border-collapse:collapse;\\\">\", width);\n\n            // Define the columns\n            sb.Append(\"<colgroup>\");\n            List<ReportItem> riSort = new List<ReportItem>(_ris.Items);\n            riSort.Sort(CompareRIsByX);\n\n          //  float last_offset=0;\n            float offset;\n            float pt;\n            for (int i = 0; i < riSort.Count; i++)\n            {\n                pt = riSort[i].LeftCalc(_rpt);\n\n                sb.AppendFormat(\"<col style=\\\"width:{0}pts;\\\">\", pt);\n\n                offset = pt + riSort[i].WidthOrOwnerWidth(_rpt);\n\n             //   if (last_offset < offset)\n            }\n            sb.Append(\"</colgroup>\");\n\n            // Define the rows\n            riSort.Sort(CompareRIsByY);\n\n            sb.Append(\"</table>\");\n            return sb.ToString();\n        }\n\n        private float TableWidth()\n        {\n            // Find the right most item in the report items\n            float maxRight=0;\n            foreach (ReportItem ri in _ris)\n            {\n                float right = ri.LeftCalc(_rpt) + ri.WidthOrOwnerWidth(_rpt);\n                if (right > maxRight)\n                    maxRight = right;\n            }\n            return maxRight;\n        }\n\n        private static int CompareRIsByX(ReportItem x, ReportItem y)\n        {\n            // order by left position\n            int l1 = x.Left == null ? 0 : x.Left.Size;\n            int l2 = y.Left == null ? 0 : y.Left.Size;\n\n            int rc = l1 - l2;\n            if (rc != 0)\n                return rc;\n            // then by width\n            l1 = x.Width == null ? int.MaxValue : x.Width.Size;\n            l2 = y.Width == null ? int.MaxValue : y.Width.Size;\n\n            rc = l1 - l2;\n            if (rc != 0)\n                return rc;\n            // then by y position\n            int t1 = x.Top == null ? 0 : x.Top.Size;\n            int t2 = y.Top == null ? 0 : y.Top.Size;\n\n            return t1 - t2;\n        }\n    \n        private static int CompareRIsByY(ReportItem x, ReportItem y)\n        {\n            // order by y position\n            int t1 = x.Top == null ? 0 : x.Top.Size;\n            int t2 = y.Top == null ? 0 : y.Top.Size;\n\n            int rc = t1 - t2;\n            if (rc != 0)\n                return rc;\n            // then by height\n            t1 = x.Height == null ? int.MaxValue : x.Height.Size;\n            t2 = y.Height == null ? int.MaxValue : y.Height.Size;\n\n            rc = t1 - t2;\n            if (rc != 0)\n                return rc;\n\n            // then by x position\n            int l1 = x.Left == null ? 0 : x.Left.Size;\n            int l2 = y.Left == null ? 0 : y.Left.Size;\n\n            return l1 - l2;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Render/IPresent.cs",
    "content": "\nusing System;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Presentation: generation of presentation; e.g. html, pdf, xml, ...\n\t/// </summary>\n\n    internal interface IPresent : IDisposable \n\t{\n\t\t// Meta Information: can be called at any time\n\t\tbool IsPagingNeeded();\t\t\t\t\t\t// should report engine perform paging\n\n\t\t// General\n\t\tvoid Start();\t\t\t\t\t\t\t\t// called first\n\t\tTask End();\t\t\t\t\t\t\t\t\t// called last\n\n\t\t// \n\t\tTask RunPages(Pages pgs);\t\t\t\t\t// only called if IsPagingNeeded - \n\n\t\t// Body: main container for the report\n\t\tvoid BodyStart(Body b);\t\t\t\t\t\t// called right before body processing  \n\t\tvoid BodyEnd(Body b);\t\t\t\t\t\t// called \n\n\t\t// PageHeader: \n\t\tvoid PageHeaderStart(PageHeader ph);\n\t\tvoid PageHeaderEnd(PageHeader ph);\n\n\t\t// PageFooter: \n\t\tvoid PageFooterStart(PageFooter pf);\n\t\tvoid PageFooterEnd(PageFooter pf);\n\n\t\t// ReportItems\n\t\tTask Textbox(Textbox tb, string t, Row r);\t// encountered a textbox\n\t\tTask DataRegionNoRows(DataRegion d, string noRowsMsg);\t// no rows in DataRegion\n\t\t\n\t\t// Lists\n\t\tTask<bool> ListStart(List l, Row r);\t\t\t\t// called first in list\n\t\tTask ListEnd(List l, Row r);\t\t\t\t// called last in list\n\t\tTask ListEntryBegin(List l, Row r);\t\t\t// called to begin each list entry\n\t\tvoid ListEntryEnd(List l, Row r);\t\t\t// called to end each list entry\n\n\t\t// Tables\t\t\t\t\t// Report item table\n\t\tTask<bool> TableStart(Table t, Row r);\t\t\t// called first in table\n\t\tTask TableEnd(Table t, Row r);\t\t\t\t// called last in table\n\t\tvoid TableBodyStart(Table t, Row r);\t\t// table body\n\t\tvoid TableBodyEnd(Table t, Row r);\t\t\t// \n\t\tvoid TableFooterStart(Footer f, Row r);\t\t// footer row(s)\n\t\tvoid TableFooterEnd(Footer f, Row r);\t\t// \n\t\tvoid TableHeaderStart(Header h, Row r);\t\t// header row(s)\n\t\tvoid TableHeaderEnd(Header h, Row r);\t\t// \n\t\tTask TableRowStart(TableRow tr, Row r);\t\t// row\n\t\tvoid TableRowEnd(TableRow tr, Row r);\t\t// \n\t\tTask TableCellStart(TableCell t, Row r);\t// report item will be called after\n\t\tvoid TableCellEnd(TableCell t, Row r);\t\t// report item will be called before\n\n\t\t// Matrix\t\t\t\t\t// Report item matrix\n\t\tTask<bool> MatrixStart(Matrix m, MatrixCellEntry[,] matrix, Row r, int headerRows, int maxRows, int maxCols);\t\t\t\t// called first\n\t\tvoid MatrixColumns(Matrix m, MatrixColumns mc);\t// called just after MatrixStart\n\t\tvoid MatrixRowStart(Matrix m, int row, Row r);\t// row\n\t\tvoid MatrixRowEnd(Matrix m, int row, Row r);\t// \n\t\tTask MatrixCellStart(Matrix m, ReportItem ri, int row, int column, Row r, float h, float w, int colSpan);\n\t\tTask MatrixCellEnd(Matrix m, ReportItem ri, int row, int column, Row r);\n\t\tTask MatrixEnd(Matrix m, Row r);\t\t\t\t// called last\n\n\t\t// Chart\n\t\tTask Chart(Chart c, Row r, ChartBase cb);\n\n\t\t// Image\n\t\tTask Image(Image i, Row r, string mimeType, Stream io);\n\n\t\t// Line\n\t\tTask Line(Line l, Row r);\n\n\t\t// Rectangle\n\t\tTask<bool> RectangleStart(Rectangle rect, Row r);\t\t\t\t// called before any reportitems\n\t\tTask RectangleEnd(Rectangle rect, Row r);\t\t\t\t// called after any reportitems\n\n\t\t// Subreport\n\t\tTask Subreport(Subreport s, Row r);\n\n\t\t// Grouping\n\t\tvoid GroupingStart(Grouping g);\t\t\t// called at start of grouping\n\t\tvoid GroupingInstanceStart(Grouping g);\t// called at start for each grouping instance\n\t\tvoid GroupingInstanceEnd(Grouping g);\t// called at start for each grouping instance\n\t\tvoid GroupingEnd(Grouping g);\t\t\t// called at end of grouping\n\n\t\tReport Report();\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Render/IStreamGen.cs",
    "content": "\n\nusing System;\nusing Majorsilence.Reporting.Rdl;\nusing System.IO;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// Interface for obtaining streams for generation of reports\n\t/// </summary>\n\n\tpublic interface IStreamGen\n\t{\n\t\tStream GetStream();\t\t\t\t\t\t\t\t// get the main writer if not using TextWriter\n\t\tTextWriter GetTextWriter();\t\t\t\t\t\t// gets the main text writer\n\t\tStream GetIOStream(out string relativeName, string extension);\t// get an IO stream, providing relative name as well- to main stream\n\t\tvoid CloseMainStream();\t\t\t\t\t\t\t// closes the main stream\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Render/MemoryStreamGen.cs",
    "content": "\n\nusing System;\nusing Majorsilence.Reporting.Rdl;\nusing System.IO;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Threading;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t\n\t///<summary>\n\t/// An implementation of IStreamGen.  Used for single file with memory stream.\n\t/// XML and PDF are the only types that will work with this implementation.\n\t///</summary>\n\n\tpublic class MemoryStreamGen : IStreamGen, IDisposable\n\t{\n\t\tstatic internal long Counter;\t\t\t// counter used for unique expression count\n\t\tMemoryStream _io;\n\t\tStreamWriter _sw=null;\n        List<MemoryStream> _MemoryList;\t\t\t// array of MemoryStreams - 1st is main stream; others are generated \n\t\t\t\t\t\t\t\t\t\t//   for charts, images, ...\n\t\tList<string> _MemoryNames;\t\t\t// names associated with the MemoryStreams\n\t\tinternal string Prefix;\t\t\t// used as prefix to names generated\n\t\tinternal string Suffix;\t\t\t// used as a suffix to names generated\n\t\tinternal string Extension=\"\";\t\t// extension name for first file\n\n\t\tpublic MemoryStreamGen() : this(null, null, null) {}\n\t\tpublic MemoryStreamGen(string prefix, string suffix, string extension)\n\t\t{\n\t\t\tPrefix = prefix;\n\t\t\tSuffix = suffix;\n\t\t\tExtension = extension;\n\n\t\t\t_io = new MemoryStream();\n            _MemoryList = new List<MemoryStream>();\n\t\t\t_MemoryList.Add(_io);\n\t\t\t_MemoryNames = new List<string>();\n\n\t\t\t// create the first name\n\t\t\tstring unique = Interlocked.Increment(ref MemoryStreamGen.Counter).ToString();\n\t\t\tstring name;\n\t\t\tif (Prefix == null)\n\t\t\t\tname = \"a\" + Extension + \"&unique=\" + unique;\n\t\t\telse\n\t\t\t\tname = Prefix + Extension + \"&unique=\" + unique;\n\n\t\t\t_MemoryNames.Add(name);\n\t\t}\n\n\t\tpublic string GetText()\n\t\t{\n\t\t\t_sw.Flush();\n\t\t\tStreamReader sr = null; \n\t\t\tstring t=null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\t_io.Position = 0;\n\t\t\t\tsr = new StreamReader(_io);\n\t\t\t\tt = sr.ReadToEnd();\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tsr.Close();\n\t\t\t}\n\t\t\treturn t;\n\t\t}\n\n\t\tpublic IList MemoryList\n\t\t{\n\t\t\tget {return _MemoryList;}\n\t\t}\n\n\t\tpublic IList MemoryNames\n\t\t{\n\t\t\tget {return _MemoryNames;}\n\t\t}\n\n\t\t#region IStreamGen Members\n\t\tpublic void CloseMainStream()\n\t\t{\n\t\t//\t_io.Close();   // TODO  --- need to make this more robust; need multiple streams as well\n\t\t\treturn;\n\t\t}\n\n        public Stream GetStream()\n        {\n            return this._io;\n        }\n\n        public void SetStream(MemoryStream input)\n        {\n            this._io = input;\n        }\n\n\t\tpublic TextWriter GetTextWriter()\n\t\t{\n            if (_sw == null)\n            {\n                _sw = new StreamWriter(_io);\n                _sw.AutoFlush = true;           // fix from jonh of forum to allow class to work with CSV\n            }\n\t\t\treturn _sw;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Createa a new stream and return a Stream caller can then write to.  \n\t\t/// </summary>\n\t\t/// <param name=\"relativeName\">Filled in with a name</param>\n\t\t/// <param name=\"extension\">????</param>\n\t\t/// <returns></returns>\n\t\tpublic Stream GetIOStream(out string relativeName, string extension)\n\t\t{\n\t\t\tMemoryStream ms = new MemoryStream();\n\t\t\t_MemoryList.Add(ms);\n\t\t\tstring unique = Interlocked.Increment(ref MemoryStreamGen.Counter).ToString();\n\n\t\t\tif (Prefix == null)\n\t\t\t\trelativeName = \"a\" + extension + \"&unique=\" + unique;\n\t\t\telse\n\t\t\t\trelativeName = Prefix + extension + \"&unique=\" + unique;\n\t\t\tif (Suffix != null)\n\t\t\t\trelativeName += Suffix;\n\n\t\t\t_MemoryNames.Add(relativeName);\n\n\t\t\treturn ms;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tif (_sw != null)\n\t\t\t{\n\t\t\t\t_sw.Close();\n\t\t\t\t_sw = null;\n\t\t\t}\n\t\t\tif (_io != null)\n\t\t\t{\n\t\t\t\t_io.Close();\n\t\t\t\t_io = null;\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Render/MhtConverter/MhtBuilder.cs",
    "content": "// This file was contributed to the RDL Project under the MIT License.  It was\n// modified as part of merging into the RDL Project.\n\n/*\nThe MIT License\nCopyright (c) 2006 Christian Cunlif and Lionel Cuir of Aulofee\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of \nthis software and associated documentation files (the \"Software\"), to deal in \nthe Software without restriction, including without limitation the rights to use, \ncopy, modify, merge, publish, distribute, sublicense, and/or sell copies of the \nSoftware, and to permit persons to whom the Software is furnished to do so, subject \nto the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all \ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, \nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR \nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE \nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, \nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE \nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nusing System;\nusing System.Collections;\nusing System.IO;\nusing System.Reflection;\nusing System.Text;\nusing System.Text.RegularExpressions;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.RdlEngine.Resources;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// This class builds the following from a URL:\n\t///\n\t///   .mht file (Web Archive, single file)\n\t///   .htm file with dereferenced (absolute) references (Web Page, HTML Only)\n\t///   .htm file plus all referenced files in a local subfolder (Web Page, complete) \n\t///   .txt file (non-HTML contents of Web Page)\n\t///\n\t/// The .mht format is based on RFC2557 \n\t///    \"compliant Multipart MIME Message (mhtml web archive)\"\n\t///    http://www.ietf.org/rfc/rfc2557.txt\n\t/// </summary>\n\t/// <remarks>\n\t///   Jeff Atwood\n\t///   http://www.codinghorror.com/\n\t/// </remarks>\n\tpublic class MhtBuilder\n\t{\n\t\t#region Fields and enum\n\t\tStringBuilder _MhtBuilder;\n\t\tbool _StripScriptFromHtml = false;\n\t\tbool _StripIframeFromHtml = false;\n\t\tbool _AllowRecursion = true;\n\t\tbool _AddWebMark = true;\n\t\tEncoding _ForcedEncoding = null;\n\t\t\n\t\tMhtWebFile _HtmlFile;\n\t\t\n\t\tinternal MhtWebClientLocal WebClient = new MhtWebClientLocal();\n\t\tinternal SortedList WebFiles = new SortedList();\n\n\t\tconst string _MimeFinalBoundaryTag = \"----=_NextPart_000_00\";\n\t\t\n\t\t// note that chunk size is equal to maximum line width (expanded = 75 chars)\n\t\tconst int _ChunkSize = 57;\n\n\t\tpublic enum FileStorage\n\t\t{\n\t\t\tMemory,\n\t\t\tDiskPermanent,\n\t\t\tDiskTemporary\n\t\t}\n\t\t#endregion Fields and enum\n\n\t\t#region Constructor\n\t\tpublic MhtBuilder()\n\t\t{\n\t\t\t_HtmlFile = new MhtWebFile(this);\n\t\t}\n\t\t#endregion Constructor\n\n\t\t#region Properties\n\t\t/// <summary>\n\t\t/// Add the \"Mark of the web\" to retrieved HTML content so it can run \n\t\t/// locally on Windows XP SP2\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t///   http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/sp2brows.mspx#XSLTsection133121120120\n\t\t/// </remarks>\n\t\tpublic bool AddWebMark\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._AddWebMark;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthis._AddWebMark = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// allow recursive retrieval of any embedded HTML (typically IFRAME or FRAME)\n\t\t/// turn off to prevent infinite recursion in the case of pages that reference themselves..\n\t\t/// </summary>\n\t\tpublic bool AllowRecursiveFileRetrieval\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _AllowRecursion;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t_AllowRecursion = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// returns the Mime content-type string designation of a mht file\n\t\t/// </summary>\n\t\tpublic string MhtContentType\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn \"message/rfc822\";\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Strip all &lt;IFRAME&gt; blocks from any retrieved HTML\n\t\t/// </summary>\n\t\tpublic bool StripIframes\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._StripIframeFromHtml;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthis._StripIframeFromHtml = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Strip all &lt;SCRIPT&gt; blocks from any retrieved HTML\n\t\t/// </summary>\n\t\tpublic bool StripScripts\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._StripScriptFromHtml;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthis._StripScriptFromHtml = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// *only* set this if you want to FORCE a specific text encoding for all the HTML pages you're downloading;\n\t\t/// otherwise the text encoding is autodetected, which is generally what you want\n\t\t/// </summary>\n\t\tpublic Encoding TextEncoding\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._ForcedEncoding;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthis._ForcedEncoding = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Specifies the target Url we want to save\n\t\t/// </summary>\n\t\tpublic string Url\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _HtmlFile.Url;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tWebFiles.Clear();\n\t\t\t\t_HtmlFile.Url = value;\n\t\t\t}\n\t\t}\n\n\t\t#endregion Properties\n\n\t\t#region Private methods\n\t\t/// <summary>\n\t\t/// Appends a downloaded external binary file to our MhtBuilder using Base64 encoding\n\t\t/// </summary>\n\t\tvoid AppendMhtBinaryFile(MhtWebFile ef)\n\t\t{\n\t\t\tAppendMhtBoundary();\n\t\t\tAppendMhtLine(\"Content-Type: \" + ef.ContentType);\n\t\t\tAppendMhtLine(\"Content-Transfer-Encoding: base64\");\n\t\t\tAppendMhtLine(\"Content-Location: \" + ef.Url);\n\t\t\tAppendMhtLine();\n            \n\t\t\t// note that chunk size is equal to maximum line width (expanded = 75 chars)\n\t\t\tint len = ef.DownloadedBytes.Length;\n\t\t\tif (len <= _ChunkSize)\n\t\t\t\tAppendMhtLine(Convert.ToBase64String(ef.DownloadedBytes, 0, len));\n\t\t\telse\n\t\t\t{\n\t\t\t\tint i = 0;\n\t\t\t\twhile ((i + _ChunkSize) < len)\n\t\t\t\t{\n\t\t\t\t\tAppendMhtLine(Convert.ToBase64String(ef.DownloadedBytes, i, _ChunkSize));\n\t\t\t\t\ti += _ChunkSize;\n\t\t\t\t}\n\t\t\t\tif (i != len)\n\t\t\t\t\tAppendMhtLine(Convert.ToBase64String(ef.DownloadedBytes, i, len - i));\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// appends a boundary marker to our MhtBuilder\n\t\t/// </summary>\n\t\tvoid AppendMhtBoundary()\n\t\t{\n\t\t\tAppendMhtLine();\n\t\t\tAppendMhtLine(\"--\"+ _MimeFinalBoundaryTag);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// appends a boundary marker to our MhtBuilder\n\t\t/// </summary>\n\t\tvoid AppendMhtFinalBoundary()\n\t\t{\n\t\t\tAppendMhtLine();\n\t\t\tAppendMhtLine(\"--\" + _MimeFinalBoundaryTag + \"--\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Appends a downloaded external file to our MhtBuilder\n\t\t/// </summary>\n\t\tvoid AppendMhtFile(MhtWebFile ef)\n\t\t{\n\t\t\tif (ef.WasDownloaded && !ef.WasAppended)\n\t\t\t{\n\t\t\t\tif (ef.IsBinary)\n\t\t\t\t\tAppendMhtBinaryFile(ef);\n\t\t\t\telse\n\t\t\t\t\tAppendMhtTextFile(ef);\n\t\t\t}\n\t\t\tef.WasAppended = true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// appends all downloaded files (from _ExternalFiles) to our MhtBuilder\n\t\t/// </summary>\n\t\t/// <param name=\"st\">type of storage to use when downloading external files</param>\n\t\t/// <param name=\"storagePath\">path to use for downloaded external files</param>\n\t\tvoid AppendMhtFiles()\n\t\t{\n\t\t\tforeach (MhtWebFile ef in WebFiles.Values)\n\t\t\t\tAppendMhtFile(ef);\n\t\t\tAppendMhtFinalBoundary();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// appends the Mht header, which includes the root HTML\n\t\t/// </summary>\n\t\tvoid AppendMhtHeader(MhtWebFile ef)\n\t\t{\n\t\t\t// clear the stringbuilder contents\n\t\t\t_MhtBuilder = new StringBuilder();\n\n            //AppendMhtLine(\"From: <Saved by \" + Environment.UserName + \" on \" + Environment.MachineName + \">\");\n            //AppendMhtLine(\"Subject: \" + ef.HtmlTitle);\n            // For the title, reduces its size if too long and removes line breaks if any. \n            string title = ef.HtmlTitle;\n            if (title != null)\n            {\n                if (title.Length > 260)\n                    title = title.Substring(0, 260);\n                if (title.IndexOf('\\n') != -1)\n                    title = title.Replace('\\n', ' ');\n                if (title.IndexOf(Environment.NewLine) != -1)\n                    title = title.Replace(Environment.NewLine, \" \");\n            }\n\n            AppendMhtLine(\"From: <Saved by \" + Environment.UserName + \" on \" + Environment.MachineName + \">\");\n            AppendMhtLine(\"Subject: \" + title); \n\n\t\t\tAppendMhtLine(\"Date: \" + DateTime.Now.ToString(\"ddd, dd MMM yyyy HH:mm:ss zzz\"));\n\t\t\tAppendMhtLine(\"MIME-Version: 1.0\");\n\t\t\tAppendMhtLine(\"Content-Type: multipart/related;\");\n\t\t\tAppendMhtLine(Convert.ToChar(9).ToString() + \"type=\\\"text/html\\\";\");\n\t\t\tAppendMhtLine(Convert.ToChar(9).ToString() + \"boundary=\\\"----=_NextPart_000_00\\\"\");\n\t\t\tAppendMhtLine(\"X-MimeOLE: Produced by \" + this.GetType().ToString() + \" \" + Assembly.GetExecutingAssembly().GetName().Version.ToString());\n\t\t\tAppendMhtLine(\"\");\n\t\t\tAppendMhtLine(\"This is a multi-part message in MIME format.\");\n   \n\t\t\tAppendMhtFile(ef);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// append a single line, with trailing CRLF, to our MhtBuilder\n\t\t/// </summary>\n\t\tvoid AppendMhtLine()\n\t\t{\n\t\t\t_MhtBuilder.Append(Environment.NewLine);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// append a single line, with trailing CRLF, to our MhtBuilder\n\t\t/// </summary>\n\t\tvoid AppendMhtLine(string s)\n\t\t{\n\t\t\tif (s != null)\n\t\t\t\t_MhtBuilder.Append(s);\n\t\t\t_MhtBuilder.Append(Environment.NewLine);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Appends a downloaded external text file to our MhtBuilder using Quoted-Printable encoding\n\t\t/// </summary>\n\t\tvoid AppendMhtTextFile(MhtWebFile ef)\n\t\t{\n\t\t\tAppendMhtBoundary();\n\t\t\tAppendMhtLine(\"Content-Type: \" + ef.ContentType + \";\");\n\t\t\tAppendMhtLine(Convert.ToChar(9).ToString() + @\"charset=\"\" + ef.TextEncoding.WebName + @\"\"\");\n\t\t\tAppendMhtLine(\"Content-Transfer-Encoding: quoted-printable\");\n\t\t\tAppendMhtLine(\"Content-Location: \" + ef.Url);\n\t\t\tAppendMhtLine();\n\t\t\tAppendMhtLine(QuotedPrintableEncode(ef.ToString(), ef.TextEncoding));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// returns the root HTML we'll use to generate everything else;\n\t\t/// this is tracked in the _HtmlFile object, which is always FileStorage.Memory\n\t\t/// </summary>\n\t\tasync Task DownloadHtmlFile(string url)\n\t\t{\n\t\t\tif (url != \"\")\n\t\t\t\tUrl = url;\n            \n\t\t\t_HtmlFile.WasAppended = false;\n\t\t\tawait _HtmlFile.Download();\n\t\t\tif (!_HtmlFile.WasDownloaded)\n\t\t\t\tthrow new Exception(string.Format(Strings.MhtBuilder_Error_UnableDownload, Url, _HtmlFile.DownloadException.Message), _HtmlFile.DownloadException);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// dumps our MhtBuilder as a string and clears it\n\t\t/// </summary>\n\t\tstring FinalizeMht()\n\t\t{\n\t\t\tstring s = _MhtBuilder.ToString();\n\t\t\t_MhtBuilder = null;\n\t\t\treturn s;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// dumps our MhtBuilder to disk and clears it\n\t\t/// </summary>\n\t\tvoid FinalizeMht(string outputFilePath)\n\t\t{\n\t\t\tStreamWriter writer = new StreamWriter(outputFilePath, false, _HtmlFile.TextEncoding);\n\t\t\twriter.Write(_MhtBuilder.ToString());\n\t\t\twriter.Close();\n\t\t\t_MhtBuilder = null;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// returns true if this path refers to a directory (vs. a filename)\n\t\t/// </summary>\n\t\tbool IsDirectory(string FilePath)\n\t\t{\n\t\t\treturn FilePath.EndsWith(@\"\\\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// ensures that the path, if it contains a filename, matches one of the semicolon delimited \n\t\t/// filetypes provided in fileExtension\n\t\t/// </summary>\n\t\tvoid ValidateFilename(string FilePath, string fileExtensions)\n\t\t{\n\t\t\tif (IsDirectory(FilePath))\n\t\t\t\treturn;\n\t\t\t\n\t\t\tstring ext = Path.GetExtension(FilePath);\n\t\t\tif (ext == \"\")\n\t\t\t{\n\t\t\t\tthrow new Exception(string.Format(Strings.MhtBuilder_Error_FilenameNoExtension, Path.GetFileName(FilePath), fileExtensions));\n\t\t\t}\n\t\t\tif (!Regex.IsMatch(fileExtensions, ext + \"(;|$)\", RegexOptions.IgnoreCase))\n\t\t\t{\n\t\t\t\tthrow new Exception(string.Format(Strings.MhtBuilder_Error_Extension, Path.GetFileName(FilePath), fileExtensions));\n\t\t\t}\n\t\t}\n\n\t\t#endregion Private methods\n\n\t\t#region Public methods\n\t\t/// <summary>\n\t\t/// Generates a string representation of the current URL as a Mht archive file\n\t\t/// using exclusively in-memory storage\n\t\t/// </summary>\n\t\t/// <returns>string representation of MHT file</returns>\n\t\tpublic async Task<string> GetPageArchive()\n\t\t{\n\t\t\treturn await GetPageArchive(string.Empty);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Generates a string representation of the URL as a Mht archive file\n\t\t/// using exclusively in-memory storage\n\t\t/// </summary>\n\t\t/// <param name=\"url\">fully qualified URL you wish to render to Mht</param>\n\t\t/// <returns>string representation of MHT file</returns>\n\t\tpublic async Task<string> GetPageArchive(string url)\n\t\t{\n            await DownloadHtmlFile(url);\n\n            // download all references\n            await _HtmlFile.DownloadExternalFiles(_AllowRecursion);\n\t\t\t\n\t\t\t// build the Mht \n\t\t\tAppendMhtHeader(_HtmlFile);\n\t\t\tAppendMhtFiles();\n\n\t\t\treturn this.FinalizeMht();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Saves the current URL to disk as a single file Mht archive\n\t\t/// if a folder is provided instead of a filename, the TITLE tag is used to name the file\n\t\t/// </summary>\n\t\t/// <param name=\"outputFilePath\">path to generate to, or filename to generate</param>\n\t\t/// <param name=\"st\">type of storage to use when generating the Mht archive</param>\n\t\t/// <returns>the complete path of the Mht archive file that was generated</returns>\n\t\tpublic async Task<string> SavePageArchive(string outputFilePath)\n\t\t{\n\t\t\treturn await SavePageArchive(outputFilePath, string.Empty);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Saves URL to disk as a single file Mht archive\n\t\t/// if a folder is provided instead of a filename, the TITLE tag is used to name the file\n\t\t/// </summary>\n\t\t/// <param name=\"outputFilePath\">path to generate to, or filename to generate</param>\n\t\t/// <param name=\"st\">type of storage to use when generating the Mht archive</param>\n\t\t/// <param name=\"url\">fully qualified URL you wish to save as Mht</param>\n\t\t/// <returns>the complete path of the Mht archive file that was generated</returns>\n\t\tpublic async Task<string> SavePageArchive(string outputFilePath, string url)\n\t\t{\n\t\t\tValidateFilename(outputFilePath, \".mht\");\n            await DownloadHtmlFile(url);\n        \n\t\t\t_HtmlFile.DownloadPath = outputFilePath;\n\t\t\t_HtmlFile.UseHtmlTitleAsFilename = true;\n\n            // download all references\n            await _HtmlFile.DownloadExternalFiles(_AllowRecursion);\n            \n\t\t\t// build the Mht \n\t\t\tAppendMhtHeader(_HtmlFile);\n\t\t\tAppendMhtFiles();\n\t\t\t\n\t\t\tFinalizeMht(Path.ChangeExtension(_HtmlFile.DownloadPath, \".mht\"));\n            \n\t\t\tWebFiles.Clear();\n\n\t\t\treturn Path.ChangeExtension(_HtmlFile.DownloadPath, \".mht\");\n\t\t}\n\n\t\t#endregion Public methods\n\n\t\t#region Quoted-Printable encoding\n\t\t/// <summary>\n\t\t/// converts a string into Quoted-Printable encoding\n\t\t///   http://www.freesoft.org/CIE/RFC/1521/6.htm\n\t\t/// </summary>\n\t\tstring QuotedPrintableEncode(string s, Encoding e)\n\t\t{\n\t\t\tint lastSpace = 0;\n\t\t\tint lineLength = 0;\n\t\t\tint lineBreaks = 0;\n\t\t\tStringBuilder sb = new StringBuilder();\n\n\t\t\tif (s == null || s.Length == 0)\n\t\t\t\treturn \"\";\n\t\t\t\n\t\t\tforeach (char c in s)\n\t\t\t{\n\t\t\t\tint ascii = Convert.ToInt32(c);\n\t\t\t\tif (ascii == 61 || ascii > 126)\n\t\t\t\t{\n\t\t\t\t\tif (ascii <= 255)\n\t\t\t\t\t{\n\t\t\t\t\t\tsb.Append(\"=\");\n\t\t\t\t\t\tsb.Append(Convert.ToString(ascii, 16).ToUpper());\n\t\t\t\t\t\tlineLength += 3;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// double-byte land..\n\t\t\t\t\t\tforeach (byte b in e.GetBytes(c.ToString()))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsb.Append(\"=\");\n\t\t\t\t\t\t\tsb.Append(Convert.ToString(b, 16).ToUpper());\n\t\t\t\t\t\t\tlineLength += 3;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tsb.Append(c);\n\t\t\t\t\tlineLength++;\n\t\t\t\t\tif (ascii == 32)\n\t\t\t\t\t\tlastSpace = sb.Length;\n\t\t\t\t}\n\n\t\t\t\tif (lineLength >= 73)\n\t\t\t\t{\n\t\t\t\t\tif (lastSpace == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tsb.Insert(sb.Length, \"=\" + Environment.NewLine);\n\t\t\t\t\t\tlineLength = 0;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tsb.Insert(lastSpace, \"=\" + Environment.NewLine);\n\t\t\t\t\t\tlineLength = sb.Length - lastSpace - 1;\n\t\t\t\t\t}\n\t\t\t\t\tlineBreaks++;\n\t\t\t\t\tlastSpace = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// if we split the line, have to indicate trailing spaces\n\t\t\tif (lineBreaks > 0 && sb[sb.Length - 1] == ' ')\n\t\t\t{\n\t\t\t\tsb.Remove(sb.Length - 1, 1);\n\t\t\t\tsb.Append(\"=20\");\n\t\t\t}\n\n\t\t\treturn sb.ToString();\n\t\t}\n\n\t\t#endregion Quoted-Printable encoding\n\t}\n}"
  },
  {
    "path": "RdlEngine/Render/MhtConverter/MhtWebClientLocal.cs",
    "content": "// This file was contributed to the RDL Project under the MIT License.  It was\n// modified as part of merging into the RDL Project.\n\n/*\nThe MIT License\nCopyright (c) 2006 Christian Cunlif and Lionel Cuir of Aulofee\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of \nthis software and associated documentation files (the \"Software\"), to deal in \nthe Software without restriction, including without limitation the rights to use, \ncopy, modify, merge, publish, distribute, sublicense, and/or sell copies of the \nSoftware, and to permit persons to whom the Software is furnished to do so, subject \nto the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all \ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, \nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR \nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE \nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, \nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE \nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\n\nusing Majorsilence.Reporting.Rdl.Utility;\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Net.Http;\nusing System.Text;\nusing System.Text.RegularExpressions;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\tclass MhtWebClientLocal\n\t{\n\t\t#region Fields and enum\n\t\tconst string _AcceptedEncodings = \"gzip,deflate\";\n\t\tconst string _DefaultHttpUserAgent = \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\";\n\n\t\tstring _ContentLocation;\n\t\tEncoding _DefaultEncoding;\n\t\tstring _DetectedContentType;\n\t\tEncoding _DetectedEncoding;\n\t\tEncoding _ForcedEncoding;\n\t\tbyte[] _ResponseBytes;\n\n\t\tenum HttpContentEncoding\n\t\t{\n\t\t\tNone,\n\t\t\tGzip,\n\t\t\tCompress,\n\t\t\tDeflate,\n\t\t\tUnknown\n\t\t}\n\t\t#endregion Fields and enum\n\n\t\t#region Properties\n\t\t/// <summary>\n\t\t/// Returns the actual location of the downloaded content, which can \n\t\t/// be different than the requested URL, eg, http://web.com/IsThisAfolderOrNot\n\t\t/// </summary>\n\t\tpublic string ContentLocation\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _ContentLocation;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// if the correct string encoding type cannot be detected, or detection is disabled\n\t\t/// this is the default string encoding that will be used.\n\t\t/// </summary>\n\t\tpublic Encoding DefaultEncoding\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _DefaultEncoding;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t_DefaultEncoding = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// this is the string encoding that was autodetected from the HTML content\n\t\t/// </summary>\n\t\tpublic Encoding DetectedEncoding\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _DetectedEncoding;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Bypass detection of content encoding and force a specific encoding\n\t\t/// </summary>\n\t\tpublic Encoding ForcedEncoding\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _ForcedEncoding;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t_ForcedEncoding = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the raw bytestream representing the last HTTP response data\n\t\t/// </summary>\n\t\tpublic byte[] ResponseBytes\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _ResponseBytes;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// this is the string encoding that was autodetected from the HTML content\n\t\t/// </summary>\n\t\tpublic string ResponseContentType\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _DetectedContentType;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns true if the last HTTP response was in a non-text format\n\t\t/// </summary>\n\t\tpublic bool ResponseIsBinary\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\t// if we truly have no content-type, we're kinda hosed, but \n\t\t\t\t// let's assume the response is text data to be on the safe side\n\t\t\t\tif (_DetectedContentType == \"\")\n\t\t\t\t\treturn false;\n\t\t\t\t\n\t\t\t\treturn (_DetectedContentType.IndexOf(\"text\") == -1);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a string representation, with encoding, of the last HTTP response data\n\t\t/// </summary>\n\t\tpublic string ResponseString\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (this.ResponseIsBinary)\n\t\t\t\t\treturn \"(\" + _ResponseBytes.Length.ToString() + \" bytes of binary data)\";\n\t\t\t\t\n\t\t\t\tif (_ForcedEncoding == null)\n\t\t\t\t\treturn _DetectedEncoding.GetString(_ResponseBytes);\n\t\t\t\t\n\t\t\t\treturn _ForcedEncoding.GetString(_ResponseBytes);\n\t\t\t}\n\t\t}\n\n\t\t#endregion Properties\n\n\t\t#region Constructor\n\t\tpublic MhtWebClientLocal()\n\t\t{\n\t\t\t// sets default values\n\t\t\tthis.Clear();\n\t\t}\n\n\t\t#endregion Constructor\n\n\t\t#region Public methods\n\t\t/// <summary>\n\t\t/// clears any downloaded content and resets all properties to default values\n\t\t/// </summary>\n\t\tpublic void Clear()\n\t\t{\n\t\t\tClearDownload();\n\t\t\t_DefaultEncoding = Encoding.GetEncoding(\"Windows-1252\");\n\t\t\t_ForcedEncoding = null;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// clears any downloaded content\n\t\t/// </summary>\n\t\tpublic void ClearDownload()\n\t\t{\n\t\t\t_ResponseBytes = null;\n\t\t\t_DetectedEncoding = null;\n\t\t\t_DetectedContentType = \"\";\n\t\t\t_ContentLocation = \"\";\n\t\t}\n\n\t\t/// <summary>\n\t\t/// download URL contents to an array of bytes, using HTTP compression if possible\n\t\t/// </summary>\n\t\tpublic async Task<byte[]> DownloadBytes(string url)\n\t\t{\n\t\t\tawait GetUrlData(url);\n\t\t\treturn _ResponseBytes;\n\t\t}\n\n        // ...\n\n        public async Task GetUrlData(string url)\n        {\n            Uri uri = new Uri(url);\n            if (!uri.IsFile)\n                throw new UriFormatException(\"url is not a local file\");\n\n            using (HttpClient client = new HttpClient())\n            {\n                client.AddMajorsilenceReportingUserAgent();\n                HttpResponseMessage response = await client.GetAsync(url);\n                if (!response.IsSuccessStatusCode)\n                {\n                    this.Clear();\n                    return;\n                }\n\n                _ResponseBytes = await response.Content.ReadAsByteArrayAsync();\n\n                // For local operations, we consider the data are never compressed. Else, the \"Content-Encoding\" field\n                // in the headers would be \"gzip\" or \"deflate\". This could be handled quite easily with SharpZipLib for instance.\n\n                // sometimes URL is indeterminate, eg, \"http://website.com/myfolder\"\n                // in that case the folder and file resolution MUST be done on \n                // the server, and returned to the client as ContentLocation\n                _ContentLocation = response.Content.Headers.ContentLocation?.ToString() ?? \"\";\n\n                // if we have string content, determine encoding type\n                // (must cast to prevent null)\n                // HACK We determine the content type based on the uri extension, \n                // as the header returned by the FileWebResponse is always \"application/octet-stream\" (hard coded in .NET!!)\n                // text/html\n                string ext = Path.GetExtension(uri.LocalPath).TrimStart(new char[] { '.' });\n                switch (ext)\n                {\n                    // What's important here is to identify TEXT mime types. Because, the default will resort to binary file.\n                    case \"htm\":\n                    case \"html\": _DetectedContentType = \"text/html\"; break;\n                    case \"css\": _DetectedContentType = \"text/css\"; break;\n                    case \"csv\": _DetectedContentType = \"text/csv\"; break;\n                    case \"rtf\": _DetectedContentType = \"text/rtf\"; break;\n                    case \"aspx\":\n                    case \"xsl\":\n                    case \"xml\": _DetectedContentType = \"text/xml\"; break;\n\n                    case \"bmp\": _DetectedContentType = \"image/bmp\"; break;\n                    case \"gif\": _DetectedContentType = \"image/gif\"; break;\n                    case \"ico\": _DetectedContentType = \"image/x-icon\"; break;\n                    case \"jpg\":\n                    case \"jpeg\": _DetectedContentType = \"image/jpeg\"; break;\n                    case \"png\": _DetectedContentType = \"image/png\"; break;\n                    case \"tif\":\n                    case \"tiff\": _DetectedContentType = \"image/tiff\"; break;\n\n                    case \"js\": _DetectedContentType = \"application/x-javascript\"; break;\n                    default:\n                        // Line commented: we don't change it\n                        _DetectedContentType = response.Content.Headers.ContentType?.ToString() ?? \"\"; // Always \"application/octet-stream\" ...\n                        break;\n                }\n                if (_DetectedContentType == null)\n                    _DetectedContentType = \"\";\n                if (ResponseIsBinary)\n                    _DetectedEncoding = null;\n                else if (_ForcedEncoding == null)\n                    _DetectedEncoding = DetectEncoding(_DetectedContentType, _ResponseBytes);\n            }\n        }\n\n\t\t#endregion Public methods\n\t\t\n\t\t#region Private methods\n\t\t/// <summary>\n\t\t/// attempt to convert this charset string into a named .NET text encoding\n\t\t/// </summary>\n\t\tprivate Encoding CharsetToEncoding(string charset)\n\t\t{\n\t\t\tif (charset == \"\")\n\t\t\t\treturn null;\n\t\t\t\n\t\t\ttry\n\t\t\t{\n\t\t\t\treturn Encoding.GetEncoding(charset);\n\t\t\t}\n\t\t\tcatch (ArgumentException)\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// try to determine string encoding using Content-Type HTTP header and\n\t\t/// raw HTTP content bytes\n\t\t/// \"Content-Type: text/html; charset=us-ascii\"\n\t\t/// &lt;meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/&gt;\n\t\t/// </summary>\n\t\tprivate Encoding DetectEncoding(string contentTypeHeader, byte[] responseBytes)\n\t\t{\n\t\t\t// first try the header\n\t\t\tstring s = Regex.Match(contentTypeHeader, \n\t\t\t\t@\"charset=([^;\"\"'/>]+)\", \n\t\t\t\tRegexOptions.IgnoreCase).Groups[1].ToString().ToLower();\n\n\t\t\t// if we can't get it from header, try the body bytes forced to ASCII\n\t\t\tEncoding encoding = CharsetToEncoding(s);\n\t\t\tif (encoding == null)\n\t\t\t{\n\t\t\t\ts = Regex.Match(Encoding.ASCII.GetString(responseBytes), \n\t\t\t\t\t@\"<meta[^>]+content-type[^>]+charset=([^;\"\"'/>]+)\", \n\t\t\t\t\tRegexOptions.IgnoreCase).Groups[1].ToString().ToLower();\n\t\t\t\tencoding = CharsetToEncoding(s);\n\t\t\t\t\n\t\t\t\tif (encoding == null)\n\t\t\t\t\treturn _DefaultEncoding;\n\t\t\t}\n\n\t\t\treturn encoding;\n\t\t}\n\n\t\tprivate void SaveResponseToFile(string filePath)\n\t\t{\n\t\t\tusing (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate))\n\t\t\t{\n\t\t\t\tBinaryWriter bw = new BinaryWriter(fs);\n\t\t\t\tbw.Write(_ResponseBytes);\n\t\t\t\tbw.Close();\n\t\t\t}\n\t\t}\n\n\t\t#endregion Private methods\n\t\n\t\t#region Nested class : ExtendedBinaryReader\n\t\t/// <summary>\n\t\t///   Extends the <see cref=\"System.IO.BinaryReader\"/> class by a <see cref=\"ReadToEnd\"/>\n\t\t///   method that can be used to read a whole file.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// See http://dotnet.mvps.org/dotnet/faqs/?id=readfile&amp;lang=en\n\t\t/// </remarks>\n\t\tpublic class ExtendedBinaryReader : BinaryReader\n\t\t{\n\t\t\t/// <summary>\n\t\t\t///   Creates a new instance of the <c>ExtendedBinaryReader</c> class.\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"Input\">A stream.</param>\n\t\t\tpublic ExtendedBinaryReader(Stream Input) : base(Input)\n\t\t\t{\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t///   Creates a new instance of the <c>ExtendedBinaryReader</c> class.\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"Input\">The provided stream.</param>\n\t\t\t/// <param name=\"Encoding\">The character encoding.</param>\n\t\t\tpublic ExtendedBinaryReader(Stream Input, Encoding Encoding) : base(Input, Encoding)\n\t\t\t{\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t///   Reads the whole data in the base stream and returns it in an\n\t\t\t///   array of bytes.\n\t\t\t/// </summary>\n\t\t\t/// <returns>The streams whole binary data.</returns>\n\t\t\t/// <remarks>This method use a buffer of 32k.</remarks>\n\t\t\tpublic byte[] ReadToEnd()\n\t\t\t{\n\t\t\t\treturn this.ReadToEnd(short.MaxValue);\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t///   Reads the whole data in the base stream and returns it in an\n\t\t\t///   array of bytes.\n\t\t\t/// </summary>\n\t\t\t/// <param name=\"initialLength\">The initial buffer length.</param>\n\t\t\t/// <returns>The stream's whole binary data.</returns>\n\t\t\t/// <remarks>\n\t\t\t/// Based on an implementation by Jon Skeet [MVP].\n\t\t\t/// See <see href=\"http://www.yoda.arachsys.com/csharp/readbinary.html\"/>\n\t\t\t/// </remarks>\n\t\t\tpublic byte[] ReadToEnd(int initialLength)\n\t\t\t{\n\t\t\t\t// If an unhelpful initial length was passed, just use 32K.\n\t\t\t\tif (initialLength < 1)\n\t\t\t\t\tinitialLength = short.MaxValue;\n\t\t\t\t\n\t\t\t\tbyte[] buffer = new byte[initialLength];\n\t\t\t\tint read = 0;\n\t\t\t\tint chunk = BaseStream.Read(buffer, 0, buffer.Length);\n\n\t\t\t\t//\t\t\t\tfor (int chunk = this.BaseStream.Read(buffer, read, buffer.Length - read); chunk > 0; chunk = this.BaseStream.Read(buffer, read, buffer.Length - read))\n\t\t\t\twhile (chunk > 0)\n\t\t\t\t{\n\t\t\t\t\tread += chunk;\n\n\t\t\t\t\t// If the end of the buffer is reached, check to see if there is\n\t\t\t\t\t// any more data.\n\t\t\t\t\tif (read == buffer.Length)\n\t\t\t\t\t{\n\t\t\t\t\t\tint nextByte = BaseStream.ReadByte();\n\t\t\t\t\t\t\n\t\t\t\t\t\t// If the end of the stream is reached, we are done.\n\t\t\t\t\t\tif (nextByte == -1)\n\t\t\t\t\t\t\treturn buffer;\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Nope.  Resize the buffer, put in the byte we have just\n\t\t\t\t\t\t// read, and continue.\n\t\t\t\t\t\tbyte[] newBuffer = new byte[buffer.Length * 2];\n\t\t\t\t\t\tBuffer.BlockCopy(buffer, 0, newBuffer, 0, buffer.Length);\n\t\t\t\t\t\t//\t\t\t\t\t\tArray.Copy(buffer, newBuffer, buffer.Length);\n\t\t\t\t\t\tnewBuffer[read] = (byte) nextByte;\n\t\t\t\t\t\tbuffer = newBuffer;\n\t\t\t\t\t\tread++;\n\t\t\t\t\t}\n\n\t\t\t\t\tchunk = BaseStream.Read(buffer, read, buffer.Length - read);\n\t\t\t\t}\n\n\t\t\t\t// The buffer is now too big. Shrink it.\n\t\t\t\tbyte[] returnBuffer = new byte[read];\n\t\t\t\tBuffer.BlockCopy(buffer, 0, returnBuffer, 0, read);\n\t\t\t\t//\t\t\t\tArray.Copy(buffer, returnBuffer, read);\n\t\t\t\treturn returnBuffer;\n\t\t\t}\n\n\t\t}\n\t\t#endregion Nested class : ExtendedBinaryReader\n\t}\n}"
  },
  {
    "path": "RdlEngine/Render/MhtConverter/MhtWebFile.cs",
    "content": "// This file was contributed to the RDL Project under the MIT License.  It was\n// modified as part of merging into the RDL Project.\n\n/*\nThe MIT License\nCopyright (c) 2006 Christian Cunlif and Lionel Cuir of Aulofee\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of \nthis software and associated documentation files (the \"Software\"), to deal in \nthe Software without restriction, including without limitation the rights to use, \ncopy, modify, merge, publish, distribute, sublicense, and/or sell copies of the \nSoftware, and to permit persons to whom the Software is furnished to do so, subject \nto the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all \ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, \nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR \nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE \nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, \nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE \nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nusing System;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Net;\nusing System.Text;\nusing System.Text.RegularExpressions;\nusing System.Threading.Tasks;\nusing System.Web;\nusing Majorsilence.Reporting.RdlEngine.Resources;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// represents an external file referenced in our parent HTML at the target URL\n\t/// </summary>\n\tclass MhtWebFile\n\t{\n\t\t#region Fields\n\t\tMhtBuilder _Builder;\n\t\tstring _ContentLocation;\n\t\tstring _ContentType;\n\t\tbyte[] _DownloadedBytes;\n\t\tException _DownloadException = null;\n\t\tstring _DownloadExtension = \"\";\n\t\tstring _DownloadFilename = \"\";\n\t\tstring _DownloadFolder = \"\";\n\t\tNameValueCollection _ExternalFileCollection;\n\t\tbool _IsBinary;\n\t\tEncoding _TextEncoding;\n\t\tstring _Url;\n\t\tstring _UrlFolder;\n\t\tstring _UrlRoot;\n\t\tstring _UrlUnmodified;\n\t\tbool _UseHtmlFilename = false;\n\t\tbool _WasDownloaded = false;\n\n\t\tpublic bool WasAppended;\n\t\t#endregion Fields\n\n\t\t#region Constructor\n\t\tpublic MhtWebFile(MhtBuilder parent)\n\t\t{\n\t\t\t_Builder = parent;\n\t\t}\n\n\t\tpublic MhtWebFile(MhtBuilder parent, string url)\n\t\t{\n\t\t\t_Builder = parent;\n\t\t\tif (url != \"\")\n\t\t\t\tthis.Url = url;\n\t\t}\n\t\t#endregion Constructor\n\n\t\t#region Properties\n\t\t/// <summary>\n\t\t/// The Content-Type of this file as returned by the server\n\t\t/// </summary>\n\t\tpublic string ContentType\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _ContentType;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// The raw bytes returned from the server for this file\n\t\t/// </summary>\n\t\tpublic byte[] DownloadedBytes\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _DownloadedBytes;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// If not .WasDownloaded, the exception that prevented download is stored here\n\t\t/// </summary>\n\t\tpublic Exception DownloadException\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _DownloadException;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// file type extension to use on downloaded file\n\t\t/// this property is only used if the DownloadFilename property does not\n\t\t/// already contain a file extension\n\t\t/// </summary>\n\t\tpublic string DownloadExtension\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (_DownloadExtension == \"\" && this.WasDownloaded)\n\t\t\t\t\t_DownloadExtension = this.ExtensionFromContentType();\n\t\t\t\t\n\t\t\t\treturn _DownloadExtension;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t_DownloadExtension = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// filename to download this file as\n\t\t/// if no filename is provided, a filename will be auto-generated based on\n\t\t/// the URL; if the UseHtmlTitleAsFilename property is true, then the\n\t\t/// title tag will be used to generate the filename\n\t\t/// </summary>\n\t\tpublic string DownloadFilename\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (_DownloadFilename == \"\")\n\t\t\t\t{\n\t\t\t\t\tif (this._UseHtmlFilename && this.WasDownloaded && this.IsHtml)\n\t\t\t\t\t{\n\t\t\t\t\t\tstring htmlTitle = this.HtmlTitle;\n\t\t\t\t\t\tif (htmlTitle != \"\")\n\t\t\t\t\t\t\t_DownloadFilename = MakeValidFilename(htmlTitle, false) + \".htm\";\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\t_DownloadFilename = this.FilenameFromUrl();\n\t\t\t\t}\n\t\t\t\treturn _DownloadFilename;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t_DownloadFilename = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// folder to download this file to\n\t\t/// if no folder is provided, the current application folder will be used\n\t\t/// </summary>\n\t\tpublic string DownloadFolder\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (_DownloadFolder == \"\")\n\t\t\t\t\t_DownloadFolder = AppDomain.CurrentDomain.BaseDirectory;\n\t\t\t\t\n\t\t\t\treturn _DownloadFolder;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthis._DownloadFolder = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// the folder name used in the DownloadFolder\n\t\t/// </summary>\n\t\tpublic string DownloadFolderName\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn Regex.Match(this.DownloadFolder, @\"(?<Folder>[^\\\\]+)\\\\*$\").Groups[\"Folder\"].Value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// fully qualified path and filename to download this file to\n\t\t/// </summary>\n\t\tpublic string DownloadPath\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (Path.GetExtension(this.DownloadFilename) == \"\")\n\t\t\t\t\treturn Path.Combine(this.DownloadFolder, this.DownloadFilename + this.DownloadExtension);\n\t\t\t\t\n\t\t\t\treturn Path.Combine(this.DownloadFolder, this.DownloadFilename);\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthis._DownloadFilename = Path.GetFileName(value);\n\t\t\t\tif (_DownloadFilename == \"\")\n\t\t\t\t\t_DownloadFolder = value;\n\t\t\t\telse\n\t\t\t\t\t_DownloadFolder = value.Replace(_DownloadFilename, \"\");\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// If this file has external dependencies, the folder they will be stored on disk\n\t\t/// </summary>\n\t\tpublic string ExternalFilesFolder\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn (Path.Combine(this.DownloadFolder, Path.GetFileNameWithoutExtension(this.DownloadFilename)) + \"_files\");\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// If this file is HTML, retrieve the &lt;TITLE&gt; tag from the HTML\n\t\t/// (maximum of 50 characters)\n\t\t/// </summary>\n\t\tpublic string HtmlTitle\n\t\t{\n\t\t\tget\n\t\t\t{\n//\t\t\t\tif (!this.IsHtml)\n//\t\t\t\t\tthrow new Exception(\"This file isn't HTML, so it has no HTML <TITLE> tag.\");\n\t\t\t\t\n\t\t\t\tstring remp = this.ToString();\n\t\t\t\tstring s = Regex.Match(this.ToString(), \"<title[^>]*?>(?<text>[^<]+)</title>\", RegexOptions.IgnoreCase | RegexOptions.Singleline).Groups[\"text\"].Value;\n\t\t\t\tif (s.Length > 50)\n\t\t\t\t\treturn s.Substring(0, 50);\n\t\t\t\t\n\t\t\t\treturn s;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Does this file contain binary data? If not, it must be text data.\n\t\t/// </summary>\n\t\tpublic bool IsBinary\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _IsBinary;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Is this file CSS content?\n\t\t/// </summary>\n\t\tpublic bool IsCss\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn Regex.IsMatch(_ContentType, \"text/css\", RegexOptions.IgnoreCase);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Is this file HTML content?\n\t\t/// </summary>\n\t\tpublic bool IsHtml\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn Regex.IsMatch(_ContentType, \"text/html\", RegexOptions.IgnoreCase);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// If this file is text (eg, it isn't binary), the type of text encoding used\n\t\t/// </summary>\n\t\tpublic Encoding TextEncoding\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _TextEncoding;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// The URL target for this file\n\t\t/// </summary>\n\t\tpublic string Url\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._Url;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\t_UrlUnmodified = value;\n\t\t\t\tSetUrl(value, true);\n\t\t\t\t_DownloadedBytes = new byte[1];\n\t\t\t\t_ExternalFileCollection = null;\n\t\t\t\t_DownloadException = null;\n\t\t\t\t_TextEncoding = null;\n\t\t\t\t_ContentType = \"\";\n\t\t\t\t_ContentLocation = \"\";\n\t\t\t\t_IsBinary = false;\n\t\t\t\t_WasDownloaded = false;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// The Content-Location of this URL as provided by the server,\n\t\t/// only if the URL was not fully qualified;\n\t\t/// eg, http://mywebsite.com/ actually maps to http://mywebsite.com/default.htm \n\t\t/// </summary>\n\t\tpublic string UrlContentLocation\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _ContentLocation;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// The root and folder of the URL, eg, http://mywebsite.com/myfolder\n\t\t/// </summary>\n\t\tpublic string UrlFolder\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._UrlFolder;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// The root of the URL, eg, http://mywebsite.com/\n\t\t/// </summary>\n\t\tpublic string UrlRoot\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._UrlRoot;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// The unmodified \"raw\" URL as originally provided\n\t\t/// </summary>\n\t\tpublic string UrlUnmodified\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _UrlUnmodified;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// If enabled, will use the first 50 characters of the TITLE tag \n\t\t/// to form the filename when saved to disk\n\t\t/// </summary>\n\t\tpublic bool UseHtmlTitleAsFilename\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn this._UseHtmlFilename;\n\t\t\t}\n\t\t\tset\n\t\t\t{\n\t\t\t\tthis._UseHtmlFilename = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Was this file successfully downloaded via HTTP?\n\t\t/// </summary>\n\t\tpublic bool WasDownloaded\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn _WasDownloaded;\n\t\t\t}\n\t\t}\n\n\t\t#endregion Properties\n\n\t\t#region Public methods\n\t\t/// <summary>\n\t\t/// converts all external Html files (gif, jpg, css, etc) to local refs\n\t\t/// external ref:\n\t\t///    &lt;img src=\"http://mywebsite/myfolder/myimage.gif\"&gt;\n\t\t/// into local refs:\n\t\t///    &lt;img src=\"mypage_files/myimage.gif\"&gt;\n\t\t/// </summary>\n\t\tpublic void ConvertReferencesToLocal()\n\t\t{\n\t\t\tif (!IsHtml && !IsCss)\n\t\t\t\tthrow new Exception(string.Format(Strings.MhtWebFile_Error_ConvertOnlyHTMLOrCSS, ContentType));\n\t\t\t\n\t\t\t// get a list of all external references\n\t\t\tstring html = this.ToString();\n\t\t\tNameValueCollection fileCollection = this.ExternalHtmlFiles();\n\t\t\t\n\t\t\t// no external refs? nothing to do\n\t\t\tif (fileCollection.Count == 0)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tstring[] keys = fileCollection.AllKeys;\n\t\t\tfor (int idx = 0; idx < keys.Length; idx++)\n\t\t\t{\n\t\t\t\tstring delimitedUrl = keys[idx];\n\t\t\t\tstring fileUrl = fileCollection[delimitedUrl];\n\t\t\t\tif (_Builder.WebFiles.Contains(fileUrl))\n\t\t\t\t{\n\t\t\t\t\tMhtWebFile wf = (MhtWebFile) _Builder.WebFiles[fileUrl];\n\t\t\t\t\tstring newPath = this.ExternalFilesFolder + \"/\" + wf.DownloadFilename;\n\t\t\t\t\tstring delimitedReplacement = Regex.Replace(delimitedUrl, \n\t\t\t\t\t\t@\"^(?<StartDelim>\"\"|'|\\()*(?<Value>[^'\"\")]*)(?<EndDelim>\"\"|'|\\))*$\",\n\t\t\t\t\t\t\"${StartDelim}\" + newPath + \"${EndDelim}\");\n\n\t\t\t\t\t// correct original Url references in Html so they point to our local files\n\t\t\t\t\thtml = html.Replace(delimitedUrl, delimitedReplacement);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_DownloadedBytes = _TextEncoding.GetBytes(html);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Download this file from the target URL\n\t\t/// </summary>\n\t\tpublic async Task Download()\n\t\t{\n\t\t\tDebug.Write(\"Downloading \" + this._Url + \"  ..\");\n\t\t\tawait DownloadBytes();\n\t\t\t\n\t\t\tif (_DownloadException == null)\n\t\t\t\tDebug.WriteLine(\"OK\");\n\t\t\telse\n\t\t\t{\n\t\t\t\tDebug.WriteLine(\"failed: \", \"Error\");\n\t\t\t\tDebug.WriteLine(\"    \" + _DownloadException.Message, \"Error\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tif (this.IsHtml)\n\t\t\t\t_DownloadedBytes = _TextEncoding.GetBytes(ProcessHtml(this.ToString()));\n\t\t\t\n\t\t\tif (this.IsCss)\n\t\t\t\t_DownloadedBytes = _TextEncoding.GetBytes(ProcessHtml(this.ToString()));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// download ALL externally referenced files in this file's html, not recursively,\n\t\t/// to the default download path for this page\n\t\t/// </summary>\n\t\tpublic async Task DownloadExternalFiles()\n\t\t{\n\t\t\tawait this.DownloadExternalFiles(this.ExternalFilesFolder, false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// download ALL externally referenced files in this file's html, potentially recursively,\n\t\t/// to the default download path for this page\n\t\t/// </summary>\n\t\tpublic async Task DownloadExternalFiles(bool recursive)\n\t\t{\n\t\t\tawait this.DownloadExternalFiles(this.ExternalFilesFolder, recursive);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Saves this file to disk as a plain text file\n\t\t/// </summary>\n\t\tpublic void SaveAsTextFile()\n\t\t{\n\t\t\tthis.SaveToFile(Path.ChangeExtension(this.DownloadPath, \".txt\"), true);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Saves this file to disk as a plain text file, to an arbitrary path\n\t\t/// </summary>\n\t\tpublic void SaveAsTextFile(string filePath)\n\t\t{\n\t\t\tthis.SaveToFile(filePath, true);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// writes contents of file to DownloadPath, using appropriate encoding as necessary\n\t\t/// </summary>\n\t\tpublic void SaveToFile()\n\t\t{\n\t\t\tthis.SaveToFile(this.DownloadPath, false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// writes contents of file to DownloadPath, using appropriate encoding as necessary\n\t\t/// </summary>\n\t\tpublic void SaveToFile(string filePath)\n\t\t{\n\t\t\tthis.SaveToFile(filePath, false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a string representation of the data downloaded for this file\n\t\t/// </summary>\n\t\tpublic override string ToString()\n\t\t{\n\t\t\tif (!_WasDownloaded)\n\t\t\t{\n\t\t\t\t// HACK: async\n\t\t\t\tTask.Run(async () => await Download()).GetAwaiter().GetResult();\n\t\t\t}\n\t\t\t\n\t\t\tif (!_WasDownloaded || _DownloadedBytes.Length <= 0)\n\t\t\t\treturn \"\";\n\t\t\n\t\t\tif (_IsBinary)\n\t\t\t\treturn (\"[\" + _DownloadedBytes.Length.ToString() + \" bytes of binary data]\");\n\t\t\t\t\n\t\t\treturn this.TextEncoding.GetString(_DownloadedBytes);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the plain text representation of the data in this file, \n\t\t/// stripping out any HTML tags and codes\n\t\t/// </summary>\n\t\tpublic string ToTextString(bool removeWhitespace /* = false */)\n\t\t{\n\t\t\tstring html = this.ToString();\n\n\t\t\t// get rid of <script> .. </script>\n\t\t\thtml = this.StripHtmlTag(\"script\", html);\n\t\t\t\n\t\t\t// get rid of <style> .. </style>\n\t\t\thtml = this.StripHtmlTag(\"style\", html);\n\t\t\t\n\t\t\t// get rid of all HTML tags\n\t\t\thtml = Regex.Replace(html, \n\t\t\t\t@\"<\\w+(\\s+[A-Za-z0-9_\\-]+\\s*=\\s*(\"\"([^\"\"]*)\"\"|'([^']*)'))*\\s*(/)*>|<[^>]+>\", \n\t\t\t\t\" \");\n\n\t\t\t// convert escaped HTML to plaintext\n\t\t\thtml = HtmlDecode(html);\n\n\t\t\tif (removeWhitespace)\n\t\t\t{\n\t\t\t\t// clean up whitespace (optional, depends what you want..)\n\t\t\t\thtml = Regex.Replace(html, @\"[\\n\\r\\f\\t]\", \" \", RegexOptions.Multiline);\n\t\t\t\thtml = Regex.Replace(html, \" {2,}\", \" \", RegexOptions.Multiline);\n\t\t\t}\n\t\t\treturn html;\n\t\t}\n\n\t\t#endregion Public methods\n\n\t\t#region Private methods\n\t\t/// <summary>\n\t\t/// appends key=value named matches in a regular expression\n\t\t/// to a target NameValueCollection\n\t\t/// </summary>\n\t\tvoid AddMatchesToCollection(string s, Regex r, ref NameValueCollection nvc)\n\t\t{\n\t\t\tbool headerDisplayed = false;\n//\t\t\tRegex urlRegex = new Regex(@\"^https*://\\w+\", RegexOptions.IgnoreCase);\n\t\t\tRegex urlRegex = new Regex(@\"^files*:///\\w+\", RegexOptions.IgnoreCase);\n\n\t\t\tforeach (Match match in r.Matches(s))\n\t\t\t{\n\t\t\t\tif (!headerDisplayed)\n\t\t\t\t{\n\t\t\t\t\tDebug.WriteLine(\"Matches added from regex:\");\n\t\t\t\t\tDebug.WriteLine(\"'\" + match.ToString() + \"'\");\n\t\t\t\t\theaderDisplayed = true;\n\t\t\t\t}\n\t\t\t\n\t\t\t\tstring key = match.Groups[\"Key\"].ToString();\n\t\t\t\tstring val = match.Groups[\"Value\"].ToString();\n\t\t\t\tif (nvc[key] == null)\n\t\t\t\t{\n\t\t\t\t\tDebug.WriteLine(\" Match: \" + match.ToString());\n\t\t\t\t\tDebug.WriteLine(\"   Key: \" + key);\n\t\t\t\t\tDebug.WriteLine(\" Value: \" + val);\n\t\t\t\t\tif (urlRegex.IsMatch(val))\n\t\t\t\t\t\tnvc.Add(key, val);\n\t\t\t\t\telse\n\t\t\t\t\t\tDebug.WriteLine(\"Match discarded; does not appear to be valid fully qualified file:// Url\", \"Error\");\n//\t\t\t\t\t\tDebug.WriteLine(\"Match discarded; does not appear to be valid fully qualified http:// Url\", \"Error\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// converts all relative url references\n\t\t///    href=\"myfolder/mypage.htm\"\n\t\t/// into absolute url references\n\t\t///    href=\"http://mywebsite/myfolder/mypage.htm\"\n\t\t/// </summary>\n\t\tstring ConvertRelativeToAbsoluteRefs(string html)\n\t\t{\n\t\t\tstring urlPattern = \n\t\t\t\t@\"(?<attrib>\\shref|\\ssrc|\\sbackground)\\s*?=\\s*?\" +\n\t\t\t\t@\"(?<delim1>[\"\"'\\\\]{0,2})(?!\\s*\\+|#|http:|ftp:|mailto:|javascript:)\" +\n\t\t\t\t@\"/(?<url>[^\"\"'>\\\\]+)(?<delim2>[\"\"'\\\\]{0,2})\";\n\n\t\t\tstring cssPattern = \n\t\t\t\t@\"(?<attrib>@import\\s|\\S+-image:|background:)\\s*?(url)*['\"\"(]{1,2}\" +\n\t\t\t\t@\"(?!http)\\s*/(?<url>[^\"\"')]+)['\"\")]{1,2}\";\n\n\t\t\t// href=\"/anything\" to href=\"http://www.web.com/anything\"\n\t\t\tRegex r = new Regex(urlPattern, RegexOptions.Multiline | RegexOptions.IgnoreCase);\n\t\t\thtml = r.Replace(html, \"${attrib}=${delim1}\" + this._UrlRoot + \"/${url}${delim2}\");\n\t\t\t\n\t\t\t// href=\"anything\" to href=\"http://www.web.com/folder/anything\"\n\t\t\tr = new Regex(urlPattern.Replace(\"/\", \"\"), RegexOptions.Multiline | RegexOptions.IgnoreCase);\n\t\t\thtml = r.Replace(html, \"${attrib}=${delim1}\" + this._UrlFolder + \"/${url}${delim2}\");\n\t\t\t\n\t\t\t// @import(/anything) to @import url(http://www.web.com/anything)\n\t\t\tr = new Regex(cssPattern, RegexOptions.Multiline | RegexOptions.IgnoreCase);\n\t\t\thtml = r.Replace(html, \"${attrib} url(\" + this._UrlRoot + \"/${url})\");\n\t\t\t\n\t\t\t// @import(anything) to @import url(http://www.web.com/folder/anything)\n\t\t\tr = new Regex(cssPattern.Replace(\"/\", \"\"), RegexOptions.Multiline | RegexOptions.IgnoreCase);\n\t\t\thtml = r.Replace(html, \"${attrib} url(\" + this._UrlFolder + \"/${url})\");\n\t\n\t\t\treturn html;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// if the user passed in a directory, form the filename automatically using the Html title tag\n\t\t/// if the user passed in a filename, make sure the extension matches our desired extension\n\t\t/// </summary>\n\t\tstring DeriveFilename(string FilePath, string html, string fileExtension)\n\t\t{\n\t\t\tif (IsDirectory(FilePath))\n\t\t\t{\n\t\t\t\tstring htmlTitle = this.HtmlTitle;\n\t\t\t\tif (htmlTitle == \"\")\n\t\t\t\t\tthrow new Exception(Strings.MhtWebFile_Error_NoFilename);\n\t\t\t\t\n\t\t\t\treturn Path.Combine(Path.GetDirectoryName(FilePath), MakeValidFilename(htmlTitle, false) + fileExtension);\n\t\t\t}\n\n\t\t\tif (Path.GetExtension(FilePath) != fileExtension)\n\t\t\t\treturn Path.ChangeExtension(FilePath, fileExtension);\n\t\t\t\n\t\t\treturn FilePath;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// download this file from the target URL;\n\t\t/// place the bytes downloaded in _DownloadedBytes\n\t\t/// if an exception occurs, capture it in _DownloadException\n\t\t/// </summary>\n\t\tasync Task DownloadBytes()\n\t\t{\n\t\t\tif (this.WasDownloaded)\n\t\t\t\treturn;\n\t\t\t\n\t\t\t// always download to memory first\n\t\t\ttry\n\t\t\t{\n\t\t\t\t_DownloadedBytes = await _Builder.WebClient.DownloadBytes(_Url);\n\t\t\t\t_WasDownloaded = true;\n\t\t\t}\n\t\t\tcatch (WebException ex)\n\t\t\t{\n\t\t\t\t_DownloadException = ex;\n\t\t\t\t_Builder.WebClient.ClearDownload();\n\t\t\t}\n\n\t\t\t// necessary if the original client URL was imprecise;\n\t\t\t// server location is always authoritatitve\n\t\t\tif (_Builder.WebClient.ContentLocation != \"\")\n\t\t\t{\n\t\t\t\t_ContentLocation = _Builder.WebClient.ContentLocation;\n\t\t\t\tSetUrl(_ContentLocation, false);\n\t\t\t}\n\n\t\t\t_IsBinary = _Builder.WebClient.ResponseIsBinary;\n\t\t\t_ContentType = _Builder.WebClient.ResponseContentType;\n\t\t\t_TextEncoding = _Builder.WebClient.DetectedEncoding;\n\t\t\t_Builder.WebClient.ClearDownload();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Download a single externally referenced file (if we haven't already downloaded it)\n\t\t/// </summary>\n\t\tasync Task DownloadExternalFile(string url, string targetFolder, bool recursive)\n\t\t{\n\t\t\tbool isNew;\n\t\t\tMhtWebFile wf;\n\t\t\t\n\t\t\t// have we already downloaded (or attempted to) this file?\n\t\t\tif (_Builder.WebFiles.Contains(url) || _Builder.Url == url)\n\t\t\t{\n\t\t\t\twf = (MhtWebFile) _Builder.WebFiles[url];\n\t\t\t\tisNew = false;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\twf = new MhtWebFile(_Builder, url);\n\t\t\t\tisNew = true;\n\t\t\t}\n\n\t\t\tawait wf.Download();\n\t\t\t\n\t\t\tif (isNew)\n\t\t\t{\n\t\t\t\t// add this (possibly) downloaded file to our shared collection\n\t\t\t\t_Builder.WebFiles.Add(wf.UrlUnmodified, wf);\n\t\t\t\t\n\t\t\t\t// if this is an HTML file, it has dependencies of its own;\n\t\t\t\t// download them into a subfolder\n\t\t\t\tif ((wf.IsHtml || wf.IsCss) && recursive)\n\t\t\t\t\tawait wf.DownloadExternalFiles(recursive);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// download ALL externally referenced files in this html, potentially recursively\n\t\t/// to a specific download path\n\t\t/// </summary>\n\t\tasync Task DownloadExternalFiles(string targetFolder, bool recursive)\n\t\t{\n\t\t\tNameValueCollection fileCollection = ExternalHtmlFiles();\n\t\t\tif (!fileCollection.HasKeys())\n\t\t\t\treturn;\n\t\t\t\n\t\t\tDebug.WriteLine(\"Downloading all external files collected from URL:\");\n\t\t\tDebug.WriteLine(\"    \" + this.Url);\n\t\t\tforeach (string key in fileCollection.Keys)\n\t\t\t\tawait DownloadExternalFile(fileCollection[key], targetFolder, recursive);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// if we weren't given a filename extension, infer it from the download\n\t\t/// Content-Type header\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// http://www.utoronto.ca/webdocs/HTMLdocs/Book/Book-3ed/appb/mimetype.html\n\t\t/// </remarks>\n\t\tstring ExtensionFromContentType()\n\t\t{\n\t\t\tswitch (Regex.Match(this.ContentType, \"^[^ ;]+\").Value.ToLower())\n\t\t\t{\n\t\t\t\tcase \"text/html\":\n\t\t\t\t\treturn \".htm\";\n\t\t\t\tcase \"image/gif\":\n\t\t\t\t\treturn \".gif\";\n\t\t\t\tcase \"image/jpeg\":\n\t\t\t\t\treturn \".jpg\";\n\t\t\t\tcase \"text/javascript\":\n\t\t\t\tcase \"application/x-javascript\":\n\t\t\t\t\treturn \".js\";\n\t\t\t\tcase \"image/x-png\":\n\t\t\t\t\treturn \".png\";\n\t\t\t\tcase \"text/css\":\n\t\t\t\t\treturn \".css\";\n\t\t\t\tcase \"text/plain\":\n\t\t\t\t\treturn \".txt\";\n\t\t\t\tdefault:\n\t\t\t\t\tDebug.WriteLine(\"Unknown content-type '\" + this.ContentType + \"'\", \"Error\");\n\t\t\t\t\treturn \".htm\";\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// returns a name/value collection of all external files referenced in HTML:\n\t\t/// \n\t\t///     \"/myfolder/blah.png\"\n\t\t///     'http://mywebsite/blah.gif'\n\t\t///     src=blah.jpg  \n\t\t/// \n\t\t/// note that the Key includes the delimiting quotes or parens (if present), but the Value does not\n\t\t/// this is important because the delimiters are used for matching and replacement to make the\n\t\t/// match more specific!\n\t\t/// </summary>\n\t\tNameValueCollection ExternalHtmlFiles()\n\t\t{\n\t\t\t// avoid doing this work twice, however, be careful that the HTML hasn't\n\t\t\t// changed since the last time we called this function\n\t\t\tif (_ExternalFileCollection != null)\n\t\t\t\treturn _ExternalFileCollection;\n\n\t\t\t_ExternalFileCollection = new NameValueCollection();\n\t\t\tstring html = this.ToString();\n\n\t\t\tDebug.WriteLine(\"Resolving all external HTML references from URL:\");\n\t\t\tDebug.WriteLine(\"    \" + this.Url);\n\n\t\t\t// src='filename.ext' ; background=\"filename.ext\"\n\t\t\t// note that we have to test 3 times to catch all quote styles: '', \"\", and none\n\t\t\tRegex r = new Regex(\n\t\t\t\t@\"(\\ssrc|\\sbackground)\\s*=\\s*((?<Key>'(?<Value>[^']+)')|(?<Key>\"\"(?<Value>[^\"\"]+)\"\")|(?<Key>(?<Value>[^ \\n\\r\\f]+)))\",\n\t\t\t\tRegexOptions.Multiline | RegexOptions.IgnoreCase);\n\t\t\tAddMatchesToCollection(html, r, ref _ExternalFileCollection);\n\t\t\t\n\t\t\t// @import \"style.css\" or @import url(style.css)\n\t\t\tr = new Regex(\n\t\t\t\t@\"(@import\\s|\\S+-image:|background:)\\s*?(url)*\\s*?(?<Key>[\"\"'(]{1,2}(?<Value>[^\"\"')]+)[\"\"')]{1,2})\", \n\t\t\t\tRegexOptions.Multiline | RegexOptions.IgnoreCase);\n\t\t\tAddMatchesToCollection(html, r, ref _ExternalFileCollection);\n\n\t\t\t// <link rel=stylesheet href=\"style.css\">\n\t\t\tr = new Regex(\n\t\t\t\t@\"<link[^>]+?href\\s*=\\s*(?<Key>('|\"\")*(?<Value>[^'\"\">]+)('|\"\")*)\",\n\t\t\t\tRegexOptions.Multiline | RegexOptions.IgnoreCase);\n\t\t\tAddMatchesToCollection(html, r, ref _ExternalFileCollection);\n\n\t\t\t// <iframe src=\"mypage.htm\"> or <frame src=\"mypage.aspx\">\n\t\t\tr = new Regex(\n\t\t\t\t@\"<i*frame[^>]+?src\\s*=\\s*(?<Key>['\"\"]{0,1}(?<Value>[^'\"\"\\\\>]+)['\"\"]{0,1})\", \n\t\t\t\tRegexOptions.Multiline | RegexOptions.IgnoreCase);\n\t\t\tAddMatchesToCollection(html, r, ref _ExternalFileCollection);\n\t\t\t\n\t\t\treturn _ExternalFileCollection;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// attempt to get a coherent filename out of the Url\n\t\t/// </summary>\n\t\tstring FilenameFromUrl()\n\t\t{\n\t\t\t// first, try to get a filename out of the URL itself;\n\t\t\t// this means anything past the final slash that doesn't include another slash\n\t\t\t// or a question mark, eg http://mywebsite/myfolder/crazy?param=1&param=2\n\t\t\tstring filename = Regex.Match(this._Url, \"/(?<Filename>[^/?]+)[^/]*$\").Groups[\"Filename\"].Value;\n\t\t\tif (filename != \"\")\n\t\t\t{\n\t\t\t\t// that worked, but we need to make sure the filename is unique\n\t\t\t\t// if query params were passed to the URL file\n\t\t\t\tUri u = new Uri(this._Url);\n\t\t\t\tif (u.Query != \"\")\n\t\t\t\t\tfilename = Path.GetFileNameWithoutExtension(filename) + \"_\" + u.Query.GetHashCode().ToString() + this.DownloadExtension;\n\t\t\t}\n\n\t\t\t// ok, that didn't work; if this file is HTML try to get the TITLE tag\n\t\t\tif (filename == \"\" && this.IsHtml)\n\t\t\t{\n\t\t\t\tfilename = this.HtmlTitle;\n\t\t\t\tif (filename != \"\")\n\t\t\t\t\tfilename = filename + \".htm\";\n\t\t\t}\n\n\t\t\t// now we're really desperate. Hash the URL and make that the filename.\n\t\t\tif (filename == \"\")\n\t\t\t\tfilename = _Url.GetHashCode().ToString() + this.DownloadExtension;\n\n\t\t\treturn this.MakeValidFilename(filename, false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// returns true if this path refers to a directory (vs. a filename)\n\t\t/// </summary>\n\t\tbool IsDirectory(string FilePath)\n\t\t{\n\t\t\treturn FilePath.EndsWith(@\"\\\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// removes all unsafe filesystem characters to form a valid filesystem filename\n\t\t/// </summary>\n\t\tstring MakeValidFilename(string s, bool enforceLength /* = false */)\n\t\t{\n            //if (enforceLength)\n            //{\n            //}\n\n            //// replace any invalid filesystem chars, plus leading/trailing/doublespaces\n            //return Regex.Replace(\n            //    Regex.Replace(\n            //    s, \n            //    @\"[\\/\\\\\\:\\*\\?\\\"\"\"\"\\<\\>\\|]|^\\s+|\\s+$\", \n            //    \"\"),\n            //    @\"\\s{2,}\", \n            //    \" \");\n\n            // Replaces any invalid filesystem chars, plus leading/trailing/doublespaces. \n            string name = Regex.Replace(\n            Regex.Replace(\n            s,\n            @\"[\\/\\\\\\:\\*\\?\\\"\"\"\"\\<\\>\\|]|^\\s+|\\s+$\",\n            \"\"),\n            @\"\\s{2,}\",\n            \" \");\n\n            // Enforces the maximum length to 25 characters. \n            if (name.Length > 25)\n            {\n                string ext = Path.GetExtension(name);\n                name = name.Substring(0, 25 - ext.Length) + ext;\n            }\n\n            return name; \n\t\t}\n\n\t\t/// <summary>\n\t\t/// Pre-process the CSS using global preference settings\n\t\t/// </summary>\n\t\tstring ProcessCss(string css)\n\t\t{\n\t\t\treturn this.ConvertRelativeToAbsoluteRefs(css);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Pre-process the HTML using global preference settings\n\t\t/// </summary>\n\t\tstring ProcessHtml(string html)\n\t\t{\n\t\t\tDebug.WriteLine(\"Downloaded content was HTML/CSS -- processing: resolving URLs, getting <base>, etc\");\n\t\t\tif (_Builder.AddWebMark)\n\t\t\t{\n\t\t\t\t// add \"mark of the web\":\n\t\t\t\t// http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/sp2brows.mspx#XSLTsection133121120120\n\t\t\t\thtml = \"<!-- saved from url=(\" + string.Format(\"{0:0000}\", this._Url.Length) +\n\t\t\t\t\t\")\" + this._Url +  \" -->\" + Environment.NewLine + html;\n\t\t\t}\n\n\t\t\t// see if we need to strip elements from the HTML\n\t\t\tif (_Builder.StripScripts)\n\t\t\t\thtml = this.StripHtmlTag(\"script\", html);\n\t\t\tif (_Builder.StripIframes)\n\t\t\t\thtml = this.StripHtmlTag(\"iframe\", html);\n\n\t\t\t// if we have a <base>, we must use it as the _UrlFolder, \n\t\t\t// not what was parsed from the original _Url\n\t\t\tstring baseUrlFolder = Regex.Match(\n\t\t\t\thtml, \n\t\t\t\t\"<base[^>]+?href=['\\\"]{0,1}(?<BaseUrl>[^'\\\">]+)['\\\"]{0,1}\", \n\t\t\t\tRegexOptions.IgnoreCase).Groups[\"BaseUrl\"].Value;\n\t\t\tif (baseUrlFolder != \"\")\n\t\t\t{\n\t\t\t\tif (baseUrlFolder.EndsWith(\"/\"))\n\t\t\t\t\t_UrlFolder = baseUrlFolder.Substring(0, baseUrlFolder.Length - 1);\n\t\t\t\telse\n\t\t\t\t\t_UrlFolder = baseUrlFolder;\n\t\t\t}\n\t\t\t\n\t\t\t// remove the <base href=''> tag if present; causes problems when viewing locally.\n\t\t\thtml = Regex.Replace(html, \"<base[^>]*?>\", \"\");\n\n\t\t\t// relative URLs are a PITA for the processing we're about to do, \n\t\t\t// so convert them all to absolute up front\n\t\t\treturn this.ConvertRelativeToAbsoluteRefs(html);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// fully resolves any relative pathing inside the URL, and other URL oddities\n\t\t/// </summary>\n\t\tstring ResolveUrl(string url)\n\t\t{\n\t\t\t// resolve any relative pathing\n\t\t\ttry\n\t\t\t{\n\t\t\t\turl = new Uri(url).AbsoluteUri;\n\t\t\t}\n\t\t\tcatch (UriFormatException ex)\n\t\t\t{\n\t\t\t\tthrow new ArgumentException(\"'\" + url + \"' does not appear to be a valid URL.\", ex);\n\t\t\t}\n\n\t\t\t// remove any anchor tags from the end of URLs\n\t\t\tif (url.IndexOf(\"#\") > -1)\n\t\t\t{\n\t\t\t\tstring jump = Regex.Match(url, \"/[^/]*?(?<jump>#[^/?.]+$)\").Groups[\"jump\"].Value;\n\t\t\t\tif (jump != \"\")\n\t\t\t\t\turl = url.Replace(jump, \"\");\n\t\t\t}\n\n\t\t\treturn url;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// sets the DownloadPath and writes contents of file, using appropriate encoding as necessary\n\t\t/// </summary>\n\t\tvoid SaveToFile(string filePath, bool asText)\n\t\t{\n\t\t\tDebug.WriteLine(\"Saving to file \" + filePath);\n\t\t\tusing (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate))\n\t\t\t{\n\t\t\t\tusing (BinaryWriter writer = new BinaryWriter(fs))\n\t\t\t\t{\n\t\t\t\t\tif (this.IsBinary)\n\t\t\t\t\t\twriter.Write(_DownloadedBytes);\n\t\t\t\t\telse if (asText)\n\t\t\t\t\t\twriter.Write(this.ToTextString(false));\n\t\t\t\t\telse\n\t\t\t\t\t\twriter.Write(_DownloadedBytes);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvoid SetUrl(string url, bool validate)\n\t\t{\n\t\t\tif (validate)\n\t\t\t\tthis._Url = this.ResolveUrl(url);\n\t\t\telse\n\t\t\t\tthis._Url = url;\n\t\t\t\n\t\t\t// http://mywebsite\n\t\t\tthis._UrlRoot = Regex.Match(url, \"http://[^/'\\\"]+\", RegexOptions.IgnoreCase).ToString();\n\t\t\t// http://mywebsite/myfolder\n\t\t\tif (this._Url.LastIndexOf(\"/\") > 7)\n\t\t\t\tthis._UrlFolder = this._Url.Substring(0, this._Url.LastIndexOf(\"/\"));\n\t\t\telse\n\t\t\t\tthis._UrlFolder = this._UrlRoot;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// perform the regex replacement of all &lt;tagName&gt; .. &lt;/tagName&gt; blocks\n\t\t/// </summary>\n\t\tstring StripHtmlTag(string tagName, string html)\n\t\t{\n\t\t\tRegex r = new Regex(\n\t\t\t\tstring.Format(@\"<{0}[^>]*?>[\\w|\\t|\\r|\\W]*?</{0}>\", tagName), RegexOptions.Multiline | RegexOptions.IgnoreCase);\n\t\t\treturn r.Replace(html, \"\");\n\t\t}\n\n\t\t#region Html decoding\n\t\tstring HtmlDecode(string s)\n\t\t{\n\t\t\tif (s == null)\n\t\t\t\treturn null;\n\t\t\tif (s.IndexOf('&') < 0)\n\t\t\t\treturn s;\n\t\t\t\n\t\t\tStringBuilder builder = new StringBuilder();\n\t\t\tStringWriter writer = new StringWriter(builder);\n\n\t\t\tfor (int i = 0; i < s.Length; i++)\n\t\t\t{\n\t\t\t\tchar currentChar = s[i];\n\t\t\t\tif (currentChar != '&')\n\t\t\t\t{\n\t\t\t\t\twriter.Write(currentChar);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tint pos = s.IndexOf(';', i + 1);\n\t\t\t\tif (pos <= 0)\n\t\t\t\t{\n\t\t\t\t\twriter.Write(currentChar);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tstring subText = s.Substring(i + 1, (pos - i) - 1);\n\t\t\t\tif (subText[0] == '#' && subText.Length > 1)\n\t\t\t\t{\n\t\t\t\t\ttry\n\t\t\t\t\t{\n\t\t\t\t\t\tif ((subText[1] == 'x') || (subText[1] == 'X'))\n\t\t\t\t\t\t\twriter.Write((char) ((ushort) int.Parse(subText.Substring(2), \n\t\t\t\t\t\t\t\tSystem.Globalization.NumberStyles.AllowHexSpecifier)));\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twriter.Write((char) ((ushort) int.Parse(subText.Substring(1))));\n\t\t\t\t\t\ti = pos;\n\t\t\t\t\t}\n\t\t\t\t\tcatch (FormatException)\n\t\t\t\t\t{\n\t\t\t\t\t\ti++;\n\t\t\t\t\t}\n\t\t\t\t\tcatch (ArgumentException)\n\t\t\t\t\t{\n\t\t\t\t\t\ti++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\ti = pos;\n\t\t\t\t\tcurrentChar = HtmlLookup(subText);\n\t\t\t\t\tif (currentChar != '\\0')\n\t\t\t\t\t{\n\t\t\t\t\t\twriter.Write(currentChar);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\twriter.Write('&');\n\t\t\t\t\t\twriter.Write(subText);\n\t\t\t\t\t\twriter.Write(';');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn builder.ToString();\n\t\t}\n\n\t\tstatic Hashtable htmlEntitiesTable = null;\n\n\t\tchar HtmlLookup(string entity)\n\t\t{\n\t\t\tif (htmlEntitiesTable == null)\n\t\t\t{\n\t\t\t\tlock (typeof(MhtWebFile))\n\t\t\t\t{\n\t\t\t\t\tif (htmlEntitiesTable == null)\n\t\t\t\t\t{\n\t\t\t\t\t\thtmlEntitiesTable = new Hashtable();\n\t\t\t\t\t\tstring[] htmlEntities = new string[] \n\t\t\t\t\t\t{ \n\t\t\t\t\t\t\t\"\\\"-quot\", \"&-amp\", \"<-lt\", \">-gt\", \"\\x00a0-nbsp\", \"\\x00a1-iexcl\", \"\\x00a2-cent\", \"\\x00a3-pound\", \"\\x00a4-curren\", \"\\x00a5-yen\", \"\\x00a6-brvbar\", \"\\x00a7-sect\", \"\\x00a8-uml\", \"\\x00a9-copy\", \"\\x00aa-ordf\", \"\\x00ab-laquo\", \n\t\t\t\t\t\t\t\"\\x00ac-not\", \"\\x00ad-shy\", \"\\x00ae-reg\", \"\\x00af-macr\", \"\\x00b0-deg\", \"\\x00b1-plusmn\", \"\\x00b2-sup2\", \"\\x00b3-sup3\", \"\\x00b4-acute\", \"\\x00b5-micro\", \"\\x00b6-para\", \"\\x00b7-middot\", \"\\x00b8-cedil\", \"\\x00b9-sup1\", \"\\x00ba-ordm\", \"\\x00bb-raquo\", \n\t\t\t\t\t\t\t\"\\x00bc-frac14\", \"\\x00bd-frac12\", \"\\x00be-frac34\", \"\\x00bf-iquest\", \"\\x00c0-Agrave\", \"\\x00c1-Aacute\", \"\\x00c2-Acirc\", \"\\x00c3-Atilde\", \"\\x00c4-Auml\", \"\\x00c5-Aring\", \"\\x00c6-AElig\", \"\\x00c7-Ccedil\", \"\\x00c8-Egrave\", \"\\x00c9-Eacute\", \"\\x00ca-Ecirc\", \"\\x00cb-Euml\", \n\t\t\t\t\t\t\t\"\\x00cc-Igrave\", \"\\x00cd-Iacute\", \"\\x00ce-Icirc\", \"\\x00cf-Iuml\", \"\\x00d0-ETH\", \"\\x00d1-Ntilde\", \"\\x00d2-Ograve\", \"\\x00d3-Oacute\", \"\\x00d4-Ocirc\", \"\\x00d5-Otilde\", \"\\x00d6-Ouml\", \"\\x00d7-times\", \"\\x00d8-Oslash\", \"\\x00d9-Ugrave\", \"\\x00da-Uacute\", \"\\x00db-Ucirc\", \n\t\t\t\t\t\t\t\"\\x00dc-Uuml\", \"\\x00dd-Yacute\", \"\\x00de-THORN\", \"\\x00df-szlig\", \"\\x00e0-agrave\", \"\\x00e1-aacute\", \"\\x00e2-acirc\", \"\\x00e3-atilde\", \"\\x00e4-auml\", \"\\x00e5-aring\", \"\\x00e6-aelig\", \"\\x00e7-ccedil\", \"\\x00e8-egrave\", \"\\x00e9-eacute\", \"\\x00ea-ecirc\", \"\\x00eb-euml\", \n\t\t\t\t\t\t\t\"\\x00ec-igrave\", \"\\x00ed-iacute\", \"\\x00ee-icirc\", \"\\x00ef-iuml\", \"\\x00f0-eth\", \"\\x00f1-ntilde\", \"\\x00f2-ograve\", \"\\x00f3-oacute\", \"\\x00f4-ocirc\", \"\\x00f5-otilde\", \"\\x00f6-ouml\", \"\\x00f7-divide\", \"\\x00f8-oslash\", \"\\x00f9-ugrave\", \"\\x00fa-uacute\", \"\\x00fb-ucirc\", \n\t\t\t\t\t\t\t\"\\x00fc-uuml\", \"\\x00fd-yacute\", \"\\x00fe-thorn\", \"\\x00ff-yuml\", \"\\u0152-OElig\", \"\\u0153-oelig\", \"\\u0160-Scaron\", \"\\u0161-scaron\", \"\\u0178-Yuml\", \"\\u0192-fnof\", \"\\u02c6-circ\", \"\\u02dc-tilde\", \"\\u0391-Alpha\", \"\\u0392-Beta\", \"\\u0393-Gamma\", \"\\u0394-Delta\", \n\t\t\t\t\t\t\t\"\\u0395-Epsilon\", \"\\u0396-Zeta\", \"\\u0397-Eta\", \"\\u0398-Theta\", \"\\u0399-Iota\", \"\\u039a-Kappa\", \"\\u039b-Lambda\", \"\\u039c-Mu\", \"\\u039d-Nu\", \"\\u039e-Xi\", \"\\u039f-Omicron\", \"\\u03a0-Pi\", \"\\u03a1-Rho\", \"\\u03a3-Sigma\", \"\\u03a4-Tau\", \"\\u03a5-Upsilon\", \n\t\t\t\t\t\t\t\"\\u03a6-Phi\", \"\\u03a7-Chi\", \"\\u03a8-Psi\", \"\\u03a9-Omega\", \"\\u03b1-alpha\", \"\\u03b2-beta\", \"\\u03b3-gamma\", \"\\u03b4-delta\", \"\\u03b5-epsilon\", \"\\u03b6-zeta\", \"\\u03b7-eta\", \"\\u03b8-theta\", \"\\u03b9-iota\", \"\\u03ba-kappa\", \"\\u03bb-lambda\", \"\\u03bc-mu\", \n\t\t\t\t\t\t\t\"\\u03bd-nu\", \"\\u03be-xi\", \"\\u03bf-omicron\", \"\\u03c0-pi\", \"\\u03c1-rho\", \"\\u03c2-sigmaf\", \"\\u03c3-sigma\", \"\\u03c4-tau\", \"\\u03c5-upsilon\", \"\\u03c6-phi\", \"\\u03c7-chi\", \"\\u03c8-psi\", \"\\u03c9-omega\", \"\\u03d1-thetasym\", \"\\u03d2-upsih\", \"\\u03d6-piv\", \n\t\t\t\t\t\t\t\"\\u2002-ensp\", \"\\u2003-emsp\", \"\\u2009-thinsp\", \"\\u200c-zwnj\", \"\\u200d-zwj\", \"\\u200e-lrm\", \"\\u200f-rlm\", \"\\u2013-ndash\", \"\\u2014-mdash\", \"\\u2018-lsquo\", \"\\u2019-rsquo\", \"\\u201a-sbquo\", \"\\u201c-ldquo\", \"\\u201d-rdquo\", \"\\u201e-bdquo\", \"\\u2020-dagger\", \n\t\t\t\t\t\t\t\"\\u2021-Dagger\", \"\\u2022-bull\", \"\\u2026-hellip\", \"\\u2030-permil\", \"\\u2032-prime\", \"\\u2033-Prime\", \"\\u2039-lsaquo\", \"\\u203a-rsaquo\", \"\\u203e-oline\", \"\\u2044-frasl\", \"\\u20ac-euro\", \"\\u2111-image\", \"\\u2118-weierp\", \"\\u211c-real\", \"\\u2122-trade\", \"\\u2135-alefsym\", \n\t\t\t\t\t\t\t\"\\u2190-larr\", \"\\u2191-uarr\", \"\\u2192-rarr\", \"\\u2193-darr\", \"\\u2194-harr\", \"\\u21b5-crarr\", \"\\u21d0-lArr\", \"\\u21d1-uArr\", \"\\u21d2-rArr\", \"\\u21d3-dArr\", \"\\u21d4-hArr\", \"\\u2200-forall\", \"\\u2202-part\", \"\\u2203-exist\", \"\\u2205-empty\", \"\\u2207-nabla\", \n\t\t\t\t\t\t\t\"\\u2208-isin\", \"\\u2209-notin\", \"\\u220b-ni\", \"\\u220f-prod\", \"\\u2211-sum\", \"\\u2212-minus\", \"\\u2217-lowast\", \"\\u221a-radic\", \"\\u221d-prop\", \"\\u221e-infin\", \"\\u2220-ang\", \"\\u2227-and\", \"\\u2228-or\", \"\\u2229-cap\", \"\\u222a-cup\", \"\\u222b-int\", \n\t\t\t\t\t\t\t\"\\u2234-there4\", \"\\u223c-sim\", \"\\u2245-cong\", \"\\u2248-asymp\", \"\\u2260-ne\", \"\\u2261-equiv\", \"\\u2264-le\", \"\\u2265-ge\", \"\\u2282-sub\", \"\\u2283-sup\", \"\\u2284-nsub\", \"\\u2286-sube\", \"\\u2287-supe\", \"\\u2295-oplus\", \"\\u2297-otimes\", \"\\u22a5-perp\", \n\t\t\t\t\t\t\t\"\\u22c5-sdot\", \"\\u2308-lceil\", \"\\u2309-rceil\", \"\\u230a-lfloor\", \"\\u230b-rfloor\", \"\\u2329-lang\", \"\\u232a-rang\", \"\\u25ca-loz\", \"\\u2660-spades\", \"\\u2663-clubs\", \"\\u2665-hearts\", \"\\u2666-diams\"\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tfor (int i = 0; i < htmlEntities.Length; i++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstring current = htmlEntities[i];\n\t\t\t\t\t\t\thtmlEntitiesTable[current.Substring(2)] = current[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tobject oChar = htmlEntitiesTable[entity];\n\t\t\tif (oChar != null)\n\t\t\t\treturn (char) oChar;\n\t\t\treturn '\\0';\n\t\t}\n\n\t\t#endregion Html decoding\n\n\t\t#endregion Private methods\n\t}\n}"
  },
  {
    "path": "RdlEngine/Render/OneFileStreamGen.cs",
    "content": "\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing Majorsilence.Reporting.Rdl;\nusing System.IO;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t\n\t///<summary>\n\t/// An implementation of IStreamGen.  Constructor is passed the name of a\n\t/// file.  The first file uses that name.  If subsequant files are needed \n\t/// then a number suffix is generated sequentially.\t e.g. afile.html, afile2.gif,\n\t/// afile3.jpeg, ...\n\t///</summary>\n\n\tpublic class OneFileStreamGen : IStreamGen, IDisposable\n\t{\n\t\tstring _Directory;\n\t\tStreamWriter _SW;\n\t\tStream _io;\n\t\tstring _FileName;\n\t\tList<string> _FileList;\n\t\tint _nextFileNumber=1;\n\t\tbool _Overwrite;\n\n\t\tpublic OneFileStreamGen(string filename, bool bOverwrite)\n\t\t{\n\t\t\t_Overwrite = bOverwrite;\n\t\t\tstring ext = Path.GetExtension(filename).Substring(1);\t// extension (without the '.')\n\t\t\t_Directory = Path.GetDirectoryName(filename);\n\t\t\t_FileName = Path.GetFileNameWithoutExtension(filename);\n\n\t\t\t_FileList = new List<string>();\n\n\t\t\tstring relativeName;\n\t\t\t_io = GetIOStream(out relativeName, ext);\n\t\t}\n\n\t\tinternal List<string> FileList\n\t\t{\n\t\t\tget { return _FileList; }\n\t\t}\n\t\t\n\t\tinternal string FileName\n\t\t{\n\t\t\tget { return _FileName; }\n\t\t}\n\n\t\t#region IStreamGen Members\n\t\tpublic void CloseMainStream()\n\t\t{\n\t\t\tif (_SW != null)\n\t\t\t{\n\t\t\t\t_SW.Close();\n\t\t\t\t_SW = null;\n\t\t\t}\n\t\t\tif (_io != null)\n\t\t\t{\n\t\t\t\t_io.Close();\n\t\t\t\t_io = null;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tpublic Stream GetStream()\n\t\t{\n\t\t\treturn this._io;\n\t\t}\n\n\t\tpublic TextWriter GetTextWriter()\n\t\t{\n\t\t\tif (_SW == null)\n\t\t\t\t_SW = new StreamWriter(_io);\n\t\t\treturn _SW;\n\t\t}\n\n\t\t// create a new file in the directory specified and return\n\t\t//   a Stream caller can then write to.   relativeName is filled in with\n\t\t//   name we generate (sans the directory).\n\t\tpublic Stream GetIOStream(out string relativeName, string extension)\n\t\t{\n\t\t\tStream io=null;\n\n\t\t\t// Obtain a new file name\n\t\t\tstring filename = string.Format(\"{0}{1}{2}{3}.{4}\",\n\t\t\t\t_Directory,\t\t\t\t\t\t// directory\n\t\t\t\tPath.DirectorySeparatorChar,\t// \"\\\"\n\t\t\t\t_FileName,\t\t\t\t\t\t// filename\n\t\t\t\t(this._nextFileNumber > 1? _nextFileNumber.ToString(): \"\"),\t\t// suffix: first file doesn't need number suffix\n\t\t\t\textension);\t\t\t\t\t\t// extension\n\t\t\t_nextFileNumber++;\t\t\t// increment to next file\n\n\t\t\tFileInfo fi = new FileInfo(filename);\n\t\t\tif (fi.Exists)\n\t\t\t{\n\t\t\t\tif (_Overwrite)\n\t\t\t\t\tfi.Delete();\n\t\t\t\telse\n\t\t\t\t\tthrow new Exception(string.Format(Strings.OneFileStreamGen_Error_FileAlreadyExists, filename));\n\t\t\t}\n\n\t\t\trelativeName = Path.GetFileName(filename);\n\t\t\tio = fi.Create();\n\t\t\t_FileList.Add(filename);\n\t\t\treturn io; \n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tif (_SW != null)\n\t\t\t{\n\t\t\t\t_SW.Flush();\n\t\t\t\t_SW.Close();\n\t\t\t\t_SW = null;\n\t\t\t}\n\t\t\tif (_io != null)\n\t\t\t{\n\t\t\t\t_io.Flush();\n\t\t\t\t_io.Close();\n\t\t\t\t_io = null;\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Render/PdfPageSize.cs",
    "content": "﻿\nnamespace Majorsilence.Reporting.Rdl\n{\n    /// <summary>\n    /// Specify the page size in 1/72 inches units.\n    /// </summary>\n    internal struct PdfPageSize\n\t{\n\t\tinternal int xWidth;\n\t\tinternal int yHeight;\n\t\tinternal int leftMargin;\n\t\tinternal int rightMargin;\n\t\tinternal int topMargin;\n\t\tinternal int bottomMargin;\n\n\t\tinternal PdfPageSize(int width,int height)\n\t\t{\n\t\t\txWidth=width;\n\t\t\tyHeight=height;\n\t\t\tleftMargin=0;\n\t\t\trightMargin=0;\n\t\t\ttopMargin=0;\n\t\t\tbottomMargin=0;\n\t\t}\n\t\tinternal void SetMargins(int L,int T,int R,int B)\n\t\t{\n\t\t\tleftMargin=L;\n\t\t\trightMargin=R;\n\t\t\ttopMargin=T;\n\t\t\tbottomMargin=B;\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Render/ProcessReport.cs",
    "content": "\nusing System;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing Majorsilence.Reporting.Rdl;\nusing System.IO;\nusing System.Collections;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t\n\t///<summary>\n\t///The primary class to \"run\" a report to the supported output presentation types\n\t///</summary>\n\n\tpublic enum OutputPresentationType\n\t{\n\t\tHTML,\n        RenderPdf_iTextSharp,\n\t\tPDF,\n        PDFOldStyle,\n\t\tXML,\n\t\tASPHTML,\n\t\tInternal,\n\t\tMHTML,\n        CSV,\n        RTF,\n        Word,\n        ExcelTableOnly,\n\t\tExcel2007,\n\t\tExcel2007DataOnly,\n        TIF,\n        TIFBW,                   // black and white tif\n        Excel2003\n    }\n\n\t[Serializable]\n\tpublic class ProcessReport\n\t{\n\t\tReport r;\t\t\t\t\t// report\n\t\tIStreamGen _sg;\n\n\t\tpublic ProcessReport(Report rep, IStreamGen sg)\n\t\t{\n\t\t\tif (rep.rl.MaxSeverity > 4)\n\t\t\t\tthrow new Exception(Strings.ProcessReport_Error_ReportHasErrors);\n\n\t\t\tr = rep;\n\t\t\t_sg = sg;\n\t\t}\n\n\t\tpublic ProcessReport(Report rep)\n\t\t{\n\t\t\tif (rep.rl.MaxSeverity > 4)\n\t\t\t\tthrow new Exception(Strings.ProcessReport_Error_ReportHasErrors);\n\n\t\t\tr = rep;\n\t\t\t_sg = null;\n\t\t}\n\n\t\t// Run the report passing the parameter values and the output\n\t\tpublic async Task Run(IDictionary parms, OutputPresentationType type)\n\t\t{\n            await r.RunGetData(parms);\n\n            await r.RunRender(_sg, type);\n\n\t\t\treturn;\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Render/RenderBase.cs",
    "content": "﻿\n/*\n * \n Copyright (C) 2004-2008  fyiReporting Software, LLC\n Copyright (C) 2011  Peter Gill <peter@majorsilence.com>\n Copyright (c) 2010 devFU Pty Ltd, Josh Wilson and Others (http://reportfu.org)\n\n\n\n This file has been modified with suggestiong from forum users.\n *Obtained from Forum, User: sinnovasoft http://www.fyireporting.com/forum/viewtopic.php?t=1049\n\n Refactored by Daniel Romanowski http://dotlink.pl\n\n  This file is part of the fyiReporting RDL project.\n\t\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n\t   http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n*/\n\nusing System;\nusing System.IO;\nusing System.Collections;\nusing System.Collections.Generic;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\nusing Drawing2D = Majorsilence.Drawing.Imaging;\nusing Majorsilence.Drawing.Imaging;\n#else\nusing Draw2 = System.Drawing;\nusing Drawing2D = System.Drawing.Imaging;\n#endif\nusing System.Text;\nusing Majorsilence.Reporting.Rdl.Utility;\nusing System.Security;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\n\n    ///<summary>\n    /// Renders a report to PDF.   This is a page oriented formatting renderer.\n    ///</summary>\n    internal abstract class RenderBase : IPresent\n    {\n\n        #region private\n        Stream _streamGen;                  // where the output is going\n        Report _report;                 // report\n        static readonly char[] LINEBREAK = new char[] { '\\n' };\n        static readonly char[] WORDBREAK = new char[] { ' ' };\n        //\t\tstatic readonly int MEASUREMAX = int.MaxValue;  //  .Net 2 doesn't seem to have a limit; 1.1 limit was 32\n        static readonly int MEASUREMAX = 32;  //  guess I'm wrong -- .Net 2 doesn't seem to have a limit; 1.1 limit was 32\n\n        #endregion\n\n\n        #region properties\n        private PdfPageSize _pageSize;\n\n        internal protected PdfPageSize PageSize\n        {\n            get { return _pageSize; }\n            private set { _pageSize = value; }\n        }\n        #endregion\n\n\n        #region abstract methods\n        internal protected void AddLine(float x, float y, float x2, float y2, StyleInfo si)\n        {\n            AddLine(x, y, x2, y2, si.BWidthTop, si.BColorTop, si.BStyleTop);\n        }\n        /// <summary>\n        /// Page line element at the X Y to X2 Y2 position\n        /// </summary>\n        /// <returns></returns>\n        internal abstract protected void CreateDocument();\n        internal abstract protected void EndDocument(Stream sg);\n        internal abstract protected void CreatePage();\n        internal abstract protected void AfterProcessPage();\n        internal abstract protected void AddBookmark(PageText pt);\n\n        internal abstract protected void AddLine(float x, float y, float x2, float y2, float width, Draw2.Color c, BorderStyleEnum ls);\n\n\n        /// <summary>\n        /// Add image to the page.\n        /// </summary>\n        /// <returns>string Image name</returns>\n        internal abstract protected void AddImage(string name, StyleInfo si,\n            Drawing2D.ImageFormat imf, float x, float y, float width, float height, Draw2.RectangleF clipRect,\n            byte[] im, int samplesW, int samplesH, string url, string tooltip);\n\n        /// <summary>\n        /// Page Polygon\n        /// </summary>\n        /// <param name=\"pts\"></param>\n        /// <param name=\"si\"></param>\n        /// <param name=\"url\"></param>\n        /// <param name=\"patterns\"></param>\n        internal abstract protected void AddPolygon(Draw2.PointF[] pts, StyleInfo si, string url);\n\n\n        /// <summary>\n        /// Page Rectangle element at the X Y position\n        /// </summary>\n        /// <returns></returns>\n        internal abstract protected void AddRectangle(float x, float y, float height, float width, StyleInfo si, string url, string tooltip);\n        /// <summary>\n        /// Draw a pie\n        /// </summary>\n        /// <returns></returns>\n        internal abstract protected void AddPie(float x, float y, float height, float width, StyleInfo si, string url, string tooltip);\n\n        /// <summary>\n        /// Draw a curve\n        /// </summary>\n        /// <returns></returns>\n        internal abstract protected void AddCurve(Draw2.PointF[] pts, StyleInfo si);\n\n\n\n        //25072008 GJL Draw 4 bezier curves to approximate a circle\n        internal abstract protected void AddEllipse(float x, float y, float height, float width, StyleInfo si, string url);\n\n\n\n        /// <summary>\n        /// Page Text element at the X Y position; multiple lines handled\n        /// </summary>\n        /// <returns></returns>\n        internal abstract protected void AddText(float x, float y, float height, float width, string[] sa,\n            StyleInfo si, float[] tw, bool bWrap, string url, bool bNoClip, string tooltip);\n\n        #endregion\n\n        public void Dispose() { }\n\n\n        public RenderBase(Report rep, IStreamGen sg)\n        {\n            _streamGen = sg.GetStream();\n            _report = rep;\n        }\n\n        public Report Report()\n        {\n            return _report;\n        }\n\n        public bool IsPagingNeeded()\n        {\n            return true;\n        }\n\n        public void Start()\n        {\n            CreateDocument();\n        }\n\n        public Task End()\n        {\n            EndDocument(_streamGen);\n            return Task.CompletedTask;\n        }\n\n        public async Task RunPages(Pages pgs)\t// this does all the work\n        {\n            foreach (Page p in pgs)\n            {\n                PageSize = new PdfPageSize((int)_report.ReportDefinition.PageWidth.ToPoints(),\n                                       (int)_report.ReportDefinition.PageHeight.ToPoints());\n\n                //Create a Page \n                CreatePage();\n                await ProcessPage(pgs, p);\n                // after a page\n                AfterProcessPage();\n            }\n            return;\n        }\n        // render all the objects in a page in PDF\n        private async Task ProcessPage(Pages pgs, IEnumerable items)\n        {\n            foreach (PageItem pi in items)\n            {\n                if (pi.SI.BackgroundImage != null)\n                {\t// put out any background image\n                    PageImage bgImg = pi.SI.BackgroundImage;\n                    //\t\t\t\t\telements.AddImage(images, i.Name, content.objectNum, i.SI, i.ImgFormat, \n                    //\t\t\t\t\t\tpi.X, pi.Y, pi.W, pi.H, i.ImageData,i.SamplesW, i.SamplesH, null);\t\t\t\t   \n                    //Duc Phan modified 10 Dec, 2007 to support on background image \n                    float imW = Measurement.PointsFromPixels(bgImg.SamplesW, pgs.G.DpiX);\n                    float imH = Measurement.PointsFromPixels(bgImg.SamplesH, pgs.G.DpiY);\n                    int repeatX = 0;\n                    int repeatY = 0;\n                    float itemW = pi.W - (pi.SI.PaddingLeft + pi.SI.PaddingRight);\n                    float itemH = pi.H - (pi.SI.PaddingTop + pi.SI.PaddingBottom);\n                    switch (bgImg.Repeat)\n                    {\n                        case ImageRepeat.Repeat:\n                            repeatX = (int)Math.Floor(itemW / imW);\n                            repeatY = (int)Math.Floor(itemH / imH);\n                            break;\n                        case ImageRepeat.RepeatX:\n                            repeatX = (int)Math.Floor(itemW / imW);\n                            repeatY = 1;\n                            break;\n                        case ImageRepeat.RepeatY:\n                            repeatY = (int)Math.Floor(itemH / imH);\n                            repeatX = 1;\n                            break;\n                        case ImageRepeat.NoRepeat:\n                        default:\n                            repeatX = repeatY = 1;\n                            break;\n                    }\n\n                    //make sure the image is drawn at least 1 times \n                    repeatX = Math.Max(repeatX, 1);\n                    repeatY = Math.Max(repeatY, 1);\n\n                    float currX = pi.X + pi.SI.PaddingLeft;\n                    float currY = pi.Y + pi.SI.PaddingTop;\n                    float startX = currX;\n                    float startY = currY;\n                    for (int i = 0; i < repeatX; i++)\n                    {\n                        for (int j = 0; j < repeatY; j++)\n                        {\n                            currX = startX + (i * imW);\n                            currY = startY + (j * imH);\n\n\n\n                            AddImage(bgImg.Name, bgImg.SI, bgImg.ImgFormat,\n                                            currX, currY, imW, imH, Draw2.RectangleF.Empty, bgImg.GetImageData(), bgImg.SamplesW, bgImg.SamplesH, null, pi.Tooltip);\n\n                        }\n                    }\n                }\n\n                if (pi is PageTextHtml)\n                {\n                    PageTextHtml pth = pi as PageTextHtml;\n                    await pth.Build(pgs.G);\n                    await ProcessPage(pgs, pth);\n                    continue;\n                }\n\n                if (pi is PageText)\n                {\n                    PageText pt = pi as PageText;\n                    float[] textwidth;\n                    string[] sa = MeasureString(pt, pgs.G, out textwidth);\n\n\n                    AddText(pt.X, pt.Y, pt.H, pt.W, sa, pt.SI, textwidth, pt.CanGrow, pt.HyperLink, pt.NoClip, pt.Tooltip);\n\n                    if (pt.Bookmark != null)\n                    {\n                        AddBookmark(pt);\n                    }\n                    continue;\n                }\n\n                if (pi is PageLine)\n                {\n                    PageLine pl = pi as PageLine;\n                    AddLine(pl.X, pl.Y, pl.X2, pl.Y2, pl.SI);\n                    continue;\n                }\n\n                if (pi is PageEllipse)\n                {\n                    PageEllipse pe = pi as PageEllipse;\n                    AddEllipse(pe.X, pe.Y, pe.H, pe.W, pe.SI, pe.HyperLink);\n                    continue;\n                }\n\n\n\n                if (pi is PageImage)\n                {\n                    PageImage i = pi as PageImage;\n\n                    //Duc Phan added 20 Dec, 2007 to support sized image \n                    Draw2.RectangleF r2 = new Draw2.RectangleF(i.X + i.SI.PaddingLeft,\n                        i.Y + i.SI.PaddingTop,\n                        PixelsX(i.W, pgs) - i.SI.PaddingLeft - i.SI.PaddingRight,\n                        PixelsY(i.H, pgs) - i.SI.PaddingTop - i.SI.PaddingBottom);\n\n                    Draw2.RectangleF adjustedRect;   // work rectangle \n                    Draw2.RectangleF clipRect = Draw2.RectangleF.Empty;\n                    switch (i.Sizing)\n                    {\n                        case ImageSizingEnum.AutoSize:\n                            adjustedRect = new Draw2.RectangleF(r2.Left, r2.Top,\n                                            r2.Width, r2.Height);\n                            break;\n                        case ImageSizingEnum.Clip:\n                            //Set samples size\n                            var im = Draw2.Image.FromStream(new MemoryStream(i.GetImageData((int)r2.Width, (int)r2.Height)));\n                          \n                            float originalWidth = Measurement.PointsFromPixels(im.Width, pgs.G.DpiX);\n                            float originalHeight = Measurement.PointsFromPixels(im.Height, pgs.G.DpiY);\n                            adjustedRect = new Draw2.RectangleF(r2.Left, r2.Top, originalWidth, originalHeight);\n                            clipRect = new Draw2.RectangleF(r2.Left, r2.Top, originalWidth,originalHeight);\n                            im.Dispose();\n                            break;\n                        case ImageSizingEnum.FitProportional:\n                            float height;\n                            float width;\n                            float ratioIm = (float)i.SamplesH / i.SamplesW;\n                            float ratioR = r2.Height / r2.Width;\n                            height = r2.Height;\n                            width = r2.Width;\n                            if (ratioIm > ratioR)\n                            {   // this means the rectangle width must be corrected \n                                width = height * (1 / ratioIm);\n                            }\n                            else if (ratioIm < ratioR)\n                            {   // this means the rectangle height must be corrected \n                                height = width * ratioIm;\n                            }\n                            adjustedRect = new Draw2.RectangleF(r2.X, r2.Y, width, height);\n                            break;\n                        case ImageSizingEnum.Fit:\n                        default:\n                            adjustedRect = r2;\n                            break;\n                    }\n#if !DRAWINGCOMPAT\n                    if (i.ImgFormat == Draw2.Imaging.ImageFormat.Wmf || i.ImgFormat == Draw2.Imaging.ImageFormat.Emf)\n                    {\n                        //We dont want to add it - its already been broken down into page items;\n                    }\n                    else\n                    {\n#endif\n\n                        AddImage(i.Name, i.SI, i.ImgFormat,\n                            adjustedRect.X, adjustedRect.Y, adjustedRect.Width,\n                            adjustedRect.Height, clipRect, \n                            i.GetImageData((int)clipRect.Width, (int)clipRect.Height),\n                            i.SamplesW, i.SamplesH, i.HyperLink, i.Tooltip);\n#if !DRAWINGCOMPAT\n                    }\n#endif\n                    continue;\n                }\n\n                if (pi is PageRectangle)\n                {\n                    PageRectangle pr = pi as PageRectangle;\n                    AddRectangle(pr.X, pr.Y, pr.H, pr.W, pi.SI, pi.HyperLink, pi.Tooltip);\n                    continue;\n                }\n                if (pi is PagePie)\n                {   // TODO\n                    PagePie pp = pi as PagePie;\n                    // \n                    AddPie(pp.X, pp.Y, pp.H, pp.W, pi.SI, pi.HyperLink, pi.Tooltip);\n                    continue;\n                }\n                if (pi is PagePolygon)\n                {\n                    PagePolygon ppo = pi as PagePolygon;\n                    AddPolygon(ppo.Points, pi.SI, pi.HyperLink);\n                    continue;\n                }\n                if (pi is PageCurve)\n                {\n                    PageCurve pc = pi as PageCurve;\n                    AddCurve(pc.Points, pi.SI);\n                    continue;\n                }\n\n            }\n\n        }\n\n        internal float PixelsX(float x, Pages pgs)\n        {\n            return (float)(x * pgs.G.DpiX / 72.0f);\n        }\n\n        internal float PixelsY(float y, Pages pgs)\n        {\n            return (float)(y * pgs.G.DpiY / 72.0f);\n        }\n\n        private string[] MeasureString(PageText pt, Draw2.Graphics g, out float[] width)\n        {\n            StyleInfo si = pt.SI;\n            string s = pt.Text;\n\n            Draw2.Font drawFont = null;\n            Draw2.StringFormat drawFormat = null;\n            Draw2.SizeF ms;\n            string[] sa = null;\n            width = null;\n            try\n            {\n                // STYLE\n                Draw2.FontStyle fs = 0;\n                if (si.FontStyle == FontStyleEnum.Italic)\n                    fs |= Draw2.FontStyle.Italic;\n\n                // WEIGHT\n                switch (si.FontWeight)\n                {\n                    case FontWeightEnum.Bold:\n                    case FontWeightEnum.Bolder:\n                    case FontWeightEnum.W500:\n                    case FontWeightEnum.W600:\n                    case FontWeightEnum.W700:\n                    case FontWeightEnum.W800:\n                    case FontWeightEnum.W900:\n                        fs |= Draw2.FontStyle.Bold;\n                        break;\n                    default:\n                        break;\n                }\n\n                drawFont = new Draw2.Font(StyleInfo.GetFontFamily(si.FontFamilyFull), si.FontSize, fs);\n                drawFormat = new Draw2.StringFormat();\n                drawFormat.Alignment = Draw2.StringAlignment.Near;\n\n                // Measure string   \n                //  pt.NoClip indicates that this was generated by PageTextHtml Build.  It has already word wrapped.\n                if (pt.NoClip || pt.SI.WritingMode == WritingModeEnum.tb_rl)\t// TODO: support multiple lines for vertical text\n                {\n                    ms = MeasureString(s, g, drawFont, drawFormat);\n                    width = new float[1];\n                    width[0] = Measurement.PointsFromPixels(ms.Width, g.DpiX);\t// convert to points from pixels\n                    sa = new string[1];\n                    sa[0] = s;\n                    return sa;\n                }\n\n                // handle multiple lines;\n                //  1) split the string into the forced line breaks (ie \"\\n and \\r\")\n                //  2) foreach of the forced line breaks; break these into words and recombine \n                s = s.Replace(\"\\r\\n\", \"\\n\");\t// don't want this to result in double lines\n                string[] flines = s.Split(LINEBREAK);\n                List<string> lines = new List<string>();\n                List<float> lineWidths = new List<float>();\n                // remove the size reserved for left and right padding\n                float ptWidth = pt.W - pt.SI.PaddingLeft - pt.SI.PaddingRight;\n                if (ptWidth <= 0)\n                    ptWidth = 1;\n                foreach (string tfl in flines)\n                {\n                    string fl;\n                    if (tfl.Length > 0 && tfl[tfl.Length - 1] == ' ')\n                        fl = tfl.TrimEnd(' ');\n                    else\n                        fl = tfl;\n\n                    // Check if entire string fits into a line\n                    ms = MeasureString(fl, g, drawFont, drawFormat);\n                    float tw = Measurement.PointsFromPixels(ms.Width, g.DpiX);\n                    if (tw <= ptWidth)\n                    {\t\t\t\t\t   // line fits don't need to break it down further\n                        lines.Add(fl);\n                        lineWidths.Add(tw);\n                        continue;\n                    }\n\n                    // Line too long; need to break into multiple lines\n                    // 1) break line into parts; then build up again keeping track of word positions\n                    string[] parts = fl.Split(WORDBREAK);\t// this is the maximum split of lines\n                    StringBuilder sb = new StringBuilder(fl.Length);\n                    Draw2.CharacterRange[] cra = new Draw2.CharacterRange[parts.Length];\n                    for (int i = 0; i < parts.Length; i++)\n                    {\n                        int sc = sb.Length;\t // starting character\n                        sb.Append(parts[i]);\t// endding character\n                        if (i != parts.Length - 1)  // last item doesn't need blank\n                            sb.Append(\" \");\n                        int ec = sb.Length;\n                        Draw2.CharacterRange cr = new Draw2.CharacterRange(sc, ec - sc);\n                        cra[i] = cr;\t\t\t// add to character array\n                    }\n\n                    // 2) Measure the word locations within the line\n                    string wfl = sb.ToString();\n                    WordStartFinish[] wordLocations = MeasureString(wfl, g, drawFont, drawFormat, cra);\n                    if (wordLocations == null)\n                        continue;\n\n                    // 3) Loop thru creating new lines as needed\n                    int startLoc = 0;\n                    Draw2.CharacterRange crs = cra[startLoc];\n                    Draw2.CharacterRange cre = cra[startLoc];\n                    float cwidth = wordLocations[0].end;\t// length of the first\n                    float bwidth = wordLocations[0].start;  // characters need a little extra on start\n                    string ts;\n                    bool bLine = true;\n                    for (int i = 1; i < cra.Length; i++)\n                    {\n                        cwidth = wordLocations[i].end - wordLocations[startLoc].start + bwidth;\n                        if (cwidth > ptWidth)\n                        {\t// time for a new line\n                            cre = cra[i - 1];\n                            ts = wfl.Substring(crs.First, cre.First + cre.Length - crs.First);\n                            lines.Add(ts);\n                            lineWidths.Add(wordLocations[i - 1].end - wordLocations[startLoc].start + bwidth);\n\n                            // Find the first non-blank character of the next line\n                            while (i < cra.Length &&\n                                    cra[i].Length == 1 &&\n                                    fl[cra[i].First] == ' ')\n                            {\n                                i++;\n                            }\n                            if (i < cra.Length)   // any lines left?\n                            {  // yes, continue on\n                                startLoc = i;\n                                crs = cre = cra[startLoc];\n                                cwidth = wordLocations[i].end - wordLocations[startLoc].start + bwidth;\n                            }\n                            else  // no, we can stop\n                                bLine = false;\n                            //  bwidth = wordLocations[startLoc].start - wordLocations[startLoc - 1].end;\n                        }\n                        else\n                            cre = cra[i];\n                    }\n                    if (bLine)\n                    {\n                        ts = fl.Substring(crs.First, cre.First + cre.Length - crs.First);\n                        lines.Add(ts);\n                        lineWidths.Add(cwidth);\n                    }\n                }\n                // create the final array from the Lists\n                string[] la = lines.ToArray();\n                width = lineWidths.ToArray();\n                return la;\n            }\n            finally\n            {\n                if (drawFont != null)\n                    drawFont.Dispose();\n                if (drawFormat != null)\n                    drawFont.Dispose();\n            }\n        }\n\n        /// <summary>\n        /// Measures the location of an arbritrary # of words within a string\n        /// </summary>\n        private WordStartFinish[] MeasureString(string s, Draw2.Graphics g, Draw2.Font drawFont, Draw2.StringFormat drawFormat, Draw2.CharacterRange[] cra)\n        {\n            if (cra.Length <= MEASUREMAX)\t\t// handle the simple case of < MEASUREMAX words\n                return MeasureString32(s, g, drawFont, drawFormat, cra);\n\n            // Need to compensate for SetMeasurableCharacterRanges limitation of 32 (MEASUREMAX)\n            int mcra = (cra.Length / MEASUREMAX);\t// # of full 32 arrays we need\n            int ip = cra.Length % MEASUREMAX;\t\t// # of partial entries needed for last array (if any)\n            WordStartFinish[] sz = new WordStartFinish[cra.Length];\t// this is the final result;\n            float startPos = 0;\n            Draw2.CharacterRange[] cra32 = new Draw2.CharacterRange[MEASUREMAX];\t// fill out\t\t\t\n            int icra = 0;\t\t\t\t\t\t// index thru the cra \n            for (int i = 0; i < mcra; i++)\n            {\n                // fill out the new array\n                int ticra = icra;\n                for (int j = 0; j < cra32.Length; j++)\n                {\n                    cra32[j] = cra[ticra++];\n                    cra32[j].First -= cra[icra].First;\t// adjust relative offsets of strings\n                }\n\n                // measure the word locations (in the new string)\n                // ???? should I put a blank in front of it?? \n                string ts = s.Substring(cra[icra].First,\n                    cra[icra + cra32.Length - 1].First + cra[icra + cra32.Length - 1].Length - cra[icra].First);\n                WordStartFinish[] pos = MeasureString32(ts, g, drawFont, drawFormat, cra32);\n\n                // copy the values adding in the new starting positions\n                for (int j = 0; j < pos.Length; j++)\n                {\n                    sz[icra].start = pos[j].start + startPos;\n                    sz[icra++].end = pos[j].end + startPos;\n                }\n                startPos = sz[icra - 1].end;\t// reset the start position for the next line\n            }\n            // handle the remaining character\n            if (ip > 0)\n            {\n                // resize the range array\n                cra32 = new Draw2.CharacterRange[ip];\n                // fill out the new array\n                int ticra = icra;\n                for (int j = 0; j < cra32.Length; j++)\n                {\n                    cra32[j] = cra[ticra++];\n                    cra32[j].First -= cra[icra].First;\t// adjust relative offsets of strings\n                }\n                // measure the word locations (in the new string)\n                // ???? should I put a blank in front of it?? \n                string ts = s.Substring(cra[icra].First,\n                    cra[icra + cra32.Length - 1].First + cra[icra + cra32.Length - 1].Length - cra[icra].First);\n                WordStartFinish[] pos = MeasureString32(ts, g, drawFont, drawFormat, cra32);\n\n                // copy the values adding in the new starting positions\n                for (int j = 0; j < pos.Length; j++)\n                {\n                    sz[icra].start = pos[j].start + startPos;\n                    sz[icra++].end = pos[j].end + startPos;\n                }\n            }\n            return sz;\n        }\n\n        /// <summary>\n        /// Measures the location of words within a string;  limited by .Net 1.1 to 32 words\n        ///\t MEASUREMAX is a constant that defines that limit\n        /// </summary>\n        /// <param name=\"s\"></param>\n        /// <param name=\"g\"></param>\n        /// <param name=\"drawFont\"></param>\n        /// <param name=\"drawFormat\"></param>\n        /// <param name=\"cra\"></param>\n        /// <returns></returns>\n        private WordStartFinish[] MeasureString32(string s, Draw2.Graphics g, Draw2.Font drawFont, Draw2.StringFormat drawFormat, Draw2.CharacterRange[] cra)\n        {\n            if (s == null || s.Length == 0)\n                return null;\n\n            drawFormat.SetMeasurableCharacterRanges(cra);\n            Draw2.Region[] rs = new Draw2.Region[cra.Length];\n            rs = g.MeasureCharacterRanges(s, drawFont, new Draw2.RectangleF(0, 0, float.MaxValue, float.MaxValue),\n                drawFormat);\n            WordStartFinish[] sz = new WordStartFinish[cra.Length];\n            int isz = 0;\n            foreach (Draw2.Region r in rs)\n            {\n                Draw2.RectangleF mr = r.GetBounds(g);\n                sz[isz].start = Measurement.PointsFromPixels(mr.Left, g.DpiX);\n                sz[isz].end = Measurement.PointsFromPixels(mr.Right, g.DpiX);\n                isz++;\n            }\n            return sz;\n        }\n\n        struct WordStartFinish\n        {\n            internal float start;\n            internal float end;\n        }\n\n        private Draw2.SizeF MeasureString(string s, Draw2.Graphics g, Draw2.Font drawFont, Draw2.StringFormat drawFormat)\n        {\n            if (s == null || s.Length == 0)\n                return Draw2.SizeF.Empty;\n\n            Draw2.CharacterRange[] cr = { new Draw2.CharacterRange(0, s.Length) };\n            drawFormat.SetMeasurableCharacterRanges(cr);\n            Draw2.Region[] rs = new Draw2.Region[1];\n            rs = g.MeasureCharacterRanges(s, drawFont, new Draw2.RectangleF(0, 0, float.MaxValue, float.MaxValue),\n                drawFormat);\n            Draw2.RectangleF mr = rs[0].GetBounds(g);\n\n            return new Draw2.SizeF(mr.Width, mr.Height);\n        }\n\n\n        // Body: main container for the report\n        public void BodyStart(Body b)\n        {\n        }\n\n        public void BodyEnd(Body b)\n        {\n        }\n\n        public void PageHeaderStart(PageHeader ph)\n        {\n        }\n\n        public void PageHeaderEnd(PageHeader ph)\n        {\n        }\n\n        public void PageFooterStart(PageFooter pf)\n        {\n        }\n\n        public void PageFooterEnd(PageFooter pf)\n        {\n        }\n\n        public Task Textbox(Textbox tb, string t, Row row)\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task DataRegionNoRows(DataRegion d, string noRowsMsg)\n        {\n            return Task.CompletedTask;\n        }\n\n        // Lists\n        public Task<bool> ListStart(List l, Row r)\n        {\n            return Task.FromResult(true);\n        }\n\n        public Task ListEnd(List l, Row r)\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task ListEntryBegin(List l, Row r)\n        {\n            return Task.CompletedTask;\n        }\n\n        public void ListEntryEnd(List l, Row r)\n        {\n        }\n\n        // Tables\t\t\t\t\t// Report item table\n        public Task<bool> TableStart(Table t, Row row)\n        {\n            return Task.FromResult(true);\n        }\n\n        public Task TableEnd(Table t, Row row)\n        {\n            return Task.CompletedTask;\n        }\n\n        public void TableBodyStart(Table t, Row row)\n        {\n        }\n\n        public void TableBodyEnd(Table t, Row row)\n        {\n        }\n\n        public void TableFooterStart(Footer f, Row row)\n        {\n        }\n\n        public void TableFooterEnd(Footer f, Row row)\n        {\n        }\n\n        public void TableHeaderStart(Header h, Row row)\n        {\n        }\n\n        public void TableHeaderEnd(Header h, Row row)\n        {\n        }\n\n        public Task TableRowStart(TableRow tr, Row row)\n        {\n            return Task.CompletedTask;\n        }\n\n        public void TableRowEnd(TableRow tr, Row row)\n        {\n        }\n\n        public Task TableCellStart(TableCell t, Row row)\n        {\n            return Task.CompletedTask;\n        }\n\n        public void TableCellEnd(TableCell t, Row row)\n        {\n            return;\n        }\n\n        public Task<bool> MatrixStart(Matrix m, MatrixCellEntry[,] matrix, Row r, int headerRows, int maxRows, int maxCols)\t\t\t\t// called first\n        {\n            return Task.FromResult(true);\n        }\n\n        public void MatrixColumns(Matrix m, MatrixColumns mc)\t// called just after MatrixStart\n        {\n        }\n\n        public Task MatrixCellStart(Matrix m, ReportItem ri, int row, int column, Row r, float h, float w, int colSpan)\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task MatrixCellEnd(Matrix m, ReportItem ri, int row, int column, Row r)\n        {\n            return Task.CompletedTask;\n        }\n\n        public void MatrixRowStart(Matrix m, int row, Row r)\n        {\n        }\n\n        public void MatrixRowEnd(Matrix m, int row, Row r)\n        {\n        }\n\n        public Task MatrixEnd(Matrix m, Row r)\t\t\t\t// called last\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task Chart(Chart c, Row r, ChartBase cb)\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task Image(Rdl.Image i, Row r, string mimeType, Stream ior)\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task Line(Line l, Row r)\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task<bool> RectangleStart(Rdl.Rectangle rect, Row r)\n        {\n            return Task.FromResult(true);\n        }\n\n        public Task RectangleEnd(Rdl.Rectangle rect, Row r)\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task Subreport(Subreport s, Row r)\n        {\n            return Task.CompletedTask;\n        }\n\n        public void GroupingStart(Grouping g)\t\t\t// called at start of grouping\n        {\n        }\n        public void GroupingInstanceStart(Grouping g)\t// called at start for each grouping instance\n        {\n        }\n        public void GroupingInstanceEnd(Grouping g)\t// called at start for each grouping instance\n        {\n        }\n        public void GroupingEnd(Grouping g)\t\t\t// called at end of grouping\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Render/RenderCsv.cs",
    "content": "\n\nusing System;\nusing Majorsilence.Reporting.Rdl;\nusing System.IO;\nusing System.Collections;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\n    ///<summary>\n    ///The primary class to \"run\" a report to XML\n    ///</summary>\n    internal class RenderCsv : IPresent\n    {\n        Report report;\t\t\t\t\t// report\n        DelimitedTextWriter tw;\t\t\t\t// where the output is going\n\n        public RenderCsv(Report report, IStreamGen sg)\n        {\n            this.report = report;\n            tw = new DelimitedTextWriter(sg.GetTextWriter(), \",\");\n        }\n\n        public void Dispose() { } \n\n        public Report Report()\n        {\n            return report;\n        }\n\n        public bool IsPagingNeeded()\n        {\n            return false;\n        }\n\n        public void Start()\n        {\n        }\n\n        public Task End()\n        {\n            return Task.CompletedTask;\n        }\t\t\t\t\t\t\t\t\t\n\n        public Task RunPages(Pages pgs)\n        {\n            return Task.CompletedTask;\n        }\t\t\t\t\t\n\n        public void BodyStart(Body b)\n        {\n        }\n\n        public void BodyEnd(Body b)\n        {\n        }\n\n        public void PageHeaderStart(PageHeader ph)\n        {\n        }\n\n        public void PageHeaderEnd(PageHeader ph)\n        {\n            if (ph.PrintOnFirstPage||ph.PrintOnLastPage) {tw.WriteLine();}           \n        }\n\n        public void PageFooterStart(PageFooter pf)\n        {\n        }\n\n        public void PageFooterEnd(PageFooter pf)\n        {\n            if (pf.PrintOnLastPage || pf.PrintOnFirstPage) {tw.WriteLine();}\n        }\n\n        public async Task Textbox(Textbox tb, string t, Row r)\n        {\n            object value = await tb.Evaluate(report, r);\n            tw.Write(value);\n        }\t\n        \n        public Task DataRegionNoRows(DataRegion d, string noRowsMsg)\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task<bool> ListStart(List l, Row r)\n        {\n            return Task.FromResult(true);\n        }\n        \n        public Task ListEnd(List l, Row r)\n        {\n            tw.WriteLine();\n            return Task.CompletedTask;\n        }\n        \n        public Task ListEntryBegin(List l, Row r)\n        {\n            return Task.CompletedTask;\n        }\n        public void ListEntryEnd(List l, Row r)\n        {\n            tw.WriteLine();\n        }\n\n        public Task<bool> TableStart(Table t, Row r)\n        {\n            return Task.FromResult(true);\n        }\n        \n        public Task TableEnd(Table t, Row r)\n        {\n            return Task.CompletedTask;\n        }\n        \n        public void TableBodyStart(Table t, Row r)\n        {\n        }\n        \n        public void TableBodyEnd(Table t, Row r)\n        {\n        }\n        \n        public void TableFooterStart(Footer f, Row r)\n        {\n        }\n        \n        public void TableFooterEnd(Footer f, Row r)\n        {\n        }\n        \n        public void TableHeaderStart(Header h, Row r)\n        {\n        }\n        \n        public void TableHeaderEnd(Header h, Row r)\n        {\n        }\n        \n        public Task TableRowStart(TableRow tr, Row r)\n        {\n            return Task.CompletedTask;\n        }\n        \n        public void TableRowEnd(TableRow tr, Row r)\n        {\n            tw.WriteLine();\n        }\n        \n        public Task TableCellStart(TableCell t, Row r)\n        {\n            return Task.CompletedTask;\n        }\n        \n        public void TableCellEnd(TableCell t, Row r)\n        {\n        }\n\n        public Task<bool> MatrixStart(Matrix m, MatrixCellEntry[,] matrix, Row r, int headerRows, int maxRows, int maxCols)\n        {\n            return Task.FromResult(true);\n        }\n        \n        public void MatrixColumns(Matrix m, MatrixColumns mc)\n        {\n        }\n\n        public void MatrixRowStart(Matrix m, int row, Row r)\n        {\n        }\n        \n        public void MatrixRowEnd(Matrix m, int row, Row r)\n        {\n            tw.WriteLine();\n        }\n        \n        public Task MatrixCellStart(Matrix m, ReportItem ri, int row, int column, Row r, float h, float w, int colSpan)\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task MatrixCellEnd(Matrix m, ReportItem ri, int row, int column, Row r)\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task MatrixEnd(Matrix m, Row r)\n        {\n            return Task.CompletedTask;\n        }\n        \n        public Task Chart(Chart c, Row r, ChartBase cb)\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task Image(Image i, Row r, string mimeType, Stream io)\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task Line(Line l, Row r)\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task<bool> RectangleStart(Rectangle rect, Row r)\n        {\n            return Task.FromResult(true);\n        }\n        \n        public Task RectangleEnd(Rectangle rect, Row r)\n        {\n            return Task.CompletedTask;\n        }\t\n        \n        public Task Subreport(Subreport s, Row r)\n        {\n            return Task.CompletedTask;\n        }\n\n        public void GroupingStart(Grouping g)\n        {\n        }\n        \n        public void GroupingInstanceStart(Grouping g)\n        {\n        }\n        \n        public void GroupingInstanceEnd(Grouping g)\n        {\n        }\n        \n        public void GroupingEnd(Grouping g)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Render/RenderExcel2007.cs",
    "content": "﻿\n\nusing System;\nusing System.IO;\nusing System.Collections.Generic;\nusing NPOI.SS.UserModel;\nusing NPOI.XSSF.UserModel;\nusing RdlEngine.Render.ExcelConverter;\nusing NPOI.XSSF.UserModel.Helpers;\nusing System.Linq;\nusing NPOI.SS.Util;\nusing NPOI.Util;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Renders a report to Excel 2007.   This handles some page formating but does not do true page formatting.\n\t///</summary>\n\tinternal class RenderExcel2007 : IPresent\n\t{\n\t\tReport report;                   // report\n\t\tIStreamGen _sg;             // stream generater\n\n\t\tExcelCellsBuilder excelBuilder = new ExcelCellsBuilder();\n\t\tXSSFWorkbook workbook = new XSSFWorkbook();\n\t\tXSSFSheet worksheet;\n\t\tColumnHelper columnHelper;\n\t\tdouble k = 5.637142013; //points per excel character width\n\n\t\tList<XSSFCellStyle> styles;\n\t\tList<XSSFFont> fonts;\n\n\t\tpublic RenderExcel2007(Report rep, IStreamGen sg)\n\t\t{\n\t\t\treport = rep;\n\t\t\t_sg = sg;                   // We need this in future\n\n\t\t\texcelBuilder.Report = report;\n\t\t\tstyles = new List<XSSFCellStyle>();\n\t\t\tfonts = new List<XSSFFont>();\n\t\t\tworksheet = (XSSFSheet)workbook.CreateSheet(string.IsNullOrEmpty(rep.Name) ? \"NewSheet\" : rep.Name);\n\t\t\tvar ps = (XSSFPrintSetup)worksheet.PrintSetup;\n\t\t\tps.SetPaperSize(PaperSize.A4);\n\t\t\tps.Orientation = PrintOrientation.LANDSCAPE;\n\t\t\tworksheet.SetMargin(MarginType.LeftMargin, rep.LeftMarginPoints / 72);\n\t\t\tworksheet.SetMargin(MarginType.TopMargin, rep.TopMarginPoints / 72);\n\t\t\tworksheet.SetMargin(MarginType.RightMargin, rep.RightMarginPoints / 72);\n\t\t\tworksheet.SetMargin(MarginType.BottomMargin, rep.BottomMarginPoints / 72);\n\n\t\t\tcolumnHelper = worksheet.GetColumnHelper();\n\t\t}\n\n\t\t// Added to expose data to Excel2003 file generation\n\t\tprotected IStreamGen StreamGen { get => _sg; set => _sg = value; }\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tif(workbook != null)\n\t\t\t\tworkbook.Dispose();\n\t\t}\n\n\t\tpublic Report Report()\n\t\t{\n\t\t\treturn report;\n\t\t}\n\n\t\tpublic bool IsPagingNeeded()\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tpublic void Start()\n\t\t{\n\n\t\t}\n\n\t\tpublic virtual Task End()\n\t\t{\n\t\t\texcelBuilder.CellsCorrection();\n\t\t\tfor(int i = 0; i < excelBuilder.Columns.Count; i++) {\n\t\t\t\tif(i + 1 < excelBuilder.Columns.Count) {\n\t\t\t\t\tvar widthInPoints = excelBuilder.Columns[i + 1].XPosition - excelBuilder.Columns[i].XPosition;\n\t\t\t\t\tvar widthInSymbols = widthInPoints / k;\n\t\t\t\t\tcolumnHelper.SetColWidth(i, widthInSymbols);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor(int i = 0; i < excelBuilder.Rows.Count - 1; i++) {\n\t\t\t\tvar builderRow = excelBuilder.Rows[i];\n\t\t\t\tXSSFRow row = (XSSFRow)worksheet.CreateRow(i);\n\t\t\t\trow.HeightInPoints = (excelBuilder.Rows[i + 1].YPosition - builderRow.YPosition);\n\t\t\t}\n\n\t\t\tfor(int i = 0; i < excelBuilder.Rows.Count - 1; i++) {\n\t\t\t\tvar builderRow = excelBuilder.Rows[i];\n\t\t\t\tXSSFRow row = (XSSFRow)worksheet.GetRow(i);\n\n\t\t\t\tfor(int j = 0; j < builderRow.Cells.Count; j++) {\n\t\t\t\t\tvar builderCell = builderRow.Cells[j];\n\t\t\t\t\tvar columnIndex = excelBuilder.Columns.IndexOf(builderCell.Column);\n\t\t\t\t\tXSSFCell cell = (XSSFCell)row.CreateCell(columnIndex);\n\n\t\t\t\t\tif(builderCell.ReportItem != null) {\n\t\t\t\t\t\tExcelCellStyle style = null;\n\t\t\t\t\t\tstyle = new ExcelCellStyle(builderCell.Style);\n\n\t\t\t\t\t\tXSSFCellStyle xssfStyle = null;\n\t\t\t\t\t\tfor(int s = 0; s < workbook.NumCellStyles; s++) {\n\t\t\t\t\t\t\tXSSFCellStyle innerStyle = (XSSFCellStyle)workbook.GetCellStyleAt(s);\n\n\t\t\t\t\t\t\tif(style.CompareWithXSSFStyle(innerStyle)) {\n\t\t\t\t\t\t\t\txssfStyle = innerStyle;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(xssfStyle == null) {\n\t\t\t\t\t\t\txssfStyle = (XSSFCellStyle)workbook.CreateCellStyle();\n\t\t\t\t\t\t\tstyle.SetToStyle(xssfStyle);\n\t\t\t\t\t\t\tXSSFFont font = null;\n\t\t\t\t\t\t\tfor(short f = 0; f < workbook.NumberOfFonts; f++) {\n\t\t\t\t\t\t\t\tXSSFFont innerfont = (XSSFFont)workbook.GetFontAt(f);\n\t\t\t\t\t\t\t\tif(style.CompareWithXSSFFont(innerfont)) {\n\t\t\t\t\t\t\t\t\tfont = innerfont;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(font == null) {\n\t\t\t\t\t\t\t\tfont = (XSSFFont)workbook.CreateFont();\n\t\t\t\t\t\t\t\tstyle.SetToFont(font);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfont.FontHeightInPoints -= 1;\n\t\t\t\t\t\t\txssfStyle.SetFont(font);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar rightAttach = excelBuilder.GetRightAttachCells(builderCell);\n\t\t\t\t\t\tvar bottomAttach = excelBuilder.GetBottomAttachCells(builderCell);\n\n\t\t\t\t\t\tvar rowIndex = excelBuilder.Rows.IndexOf(builderCell.Row);\n\t\t\t\t\t\tvar colIndex = excelBuilder.Columns.IndexOf(builderCell.Column);\n\n\t\t\t\t\t\tif(rightAttach > 0 || bottomAttach > 0) {\n\t\t\t\t\t\t\tvar mergeRegion = new NPOI.SS.Util.CellRangeAddress(rowIndex,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trowIndex + bottomAttach,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolIndex,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolIndex + rightAttach);\n\t\t\t\t\t\t\tworksheet.AddMergedRegion(mergeRegion);\n\n\t\t\t\t\t\t\tRegionUtil.SetBorderTop((int)xssfStyle.BorderTop, mergeRegion, worksheet);\n\t\t\t\t\t\t\tRegionUtil.SetTopBorderColor(xssfStyle.TopBorderColor, mergeRegion, worksheet);\n\t\t\t\t\t\t\tRegionUtil.SetBorderRight((int)xssfStyle.BorderRight, mergeRegion, worksheet);\n\t\t\t\t\t\t\tRegionUtil.SetRightBorderColor(xssfStyle.RightBorderColor, mergeRegion, worksheet);\n\t\t\t\t\t\t\tRegionUtil.SetBorderBottom((int)xssfStyle.BorderBottom, mergeRegion, worksheet);\n\t\t\t\t\t\t\tRegionUtil.SetBottomBorderColor(xssfStyle.BottomBorderColor, mergeRegion, worksheet);\n\t\t\t\t\t\t\tRegionUtil.SetBorderLeft((int)xssfStyle.BorderLeft, mergeRegion, worksheet);\n\t\t\t\t\t\t\tRegionUtil.SetLeftBorderColor(xssfStyle.LeftBorderColor, mergeRegion, worksheet);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\txssfStyle.WrapText = true;\n\n\t\t\t\t\t\tcell.CellStyle = xssfStyle;\n\n\t\t\t\t\t\tcell.SetCellValue(builderCell.Value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\t//Create images\n\t\t\tXSSFDrawing drawing = worksheet.CreateDrawingPatriarch() as XSSFDrawing;\n\t\t\tforeach(var image in excelBuilder.Images) {\n\n\t\t\t\tvar anchor = CreateAnchor(image.AbsoluteTop, image.AbsoluteLeft + image.ImageWidth, image.AbsoluteTop + image.ImageHeight, image.AbsoluteLeft);\n\t\t\t\tanchor.AnchorType = AnchorType.DontMoveAndResize;\n\t\t\t\tdrawing.CreatePicture(anchor, image.ImageIndex);\n\t\t\t}\n\n\t\t\t//Create lines\n\t\t\tforeach(var line in excelBuilder.Lines) {\n\n\t\t\t\tvar anchorLeft = line.FlipH ? line.Right : line.AbsoluteLeft;\n\t\t\t\tvar anchorRight = line.FlipH ? line.AbsoluteLeft : line.Right;\n\t\t\t\tvar anchorTop = line.FlipV ? line.Bottom : line.AbsoluteTop;\n\t\t\t\tvar anchorBottom = line.FlipV ? line.AbsoluteTop : line.Bottom;\n\n\t\t\t\tvar anchorLine = CreateAnchor(anchorTop, anchorRight, anchorBottom, anchorLeft);\n\n\t\t\t\tXSSFSimpleShape lineShape = drawing.CreateSimpleShape(anchorLine);\n\t\t\t\tlineShape.ShapeType = (int)ShapeTypes.Line;\n\t\t\t\tlineShape.LineWidth = line.BorderWidth;\n\t\t\t\t//BUG. incorrect set line style\n\t\t\t\t//lineShape.LineStyle = LineStyle.Solid;\n\t\t\t\tlineShape.SetLineStyleColor(0, 0, 0);\n\t\t\t\t//lineShape.GetCTShape().spPr.xfrm.flipH = line.FlipH;\n\t\t\t\t//lineShape.GetCTShape().spPr.xfrm.flipV = line.FlipV;\n\t\t\t}\n\n\t\t\tworkbook.Write(_sg.GetStream());\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tprivate XSSFClientAnchor CreateAnchor(float top, float right, float bottom, float left)\n\t\t{\n\t\t\t\n\t\t\tvar col1 = excelBuilder.Columns.LastOrDefault(x => x.XPosition < left);\n\t\t\tvar row1 = excelBuilder.Rows.LastOrDefault(x => x.YPosition < top);\n\n\t\t\tvar col2 = excelBuilder.Columns.LastOrDefault(x => x.XPosition < right);\n\t\t\tvar row2 = excelBuilder.Rows.LastOrDefault(x => x.YPosition < bottom);\n\n\t\t\tvar dx1 = (left - (col1 == null ? 0 : col1.XPosition)) * Units.EMU_PER_POINT;\n\t\t\tvar dy1 = (top - (row1 == null ? 0 : row1.YPosition)) * Units.EMU_PER_POINT;\n\n\t\t\tvar dx2 = (right - (col2 == null ? 0 : col2.XPosition)) * Units.EMU_PER_POINT;\n\t\t\tvar dy2 = (bottom - (row2 == null ? 0 : row2.YPosition)) * Units.EMU_PER_POINT;\n\n\t\t\tvar col1Index = col1 == null ? 0 : excelBuilder.Columns.IndexOf(col1);\n\t\t\tvar row1Index = row1 == null ? 0 : excelBuilder.Rows.IndexOf(row1);\n\n\t\t\tvar col2Index = col2 == null ? 0 : excelBuilder.Columns.IndexOf(col2);\n\t\t\tvar row2Index = row2 == null ? 0 : excelBuilder.Rows.IndexOf(row2);\n\n\t\t\treturn new XSSFClientAnchor((int)dx1, (int)dy1,\n\t\t\t                            (int)dx2, (int)dy2,\n\t\t\t                            col1Index, row1Index,\n\t\t\t                            col2Index, row2Index);\n\t\t}\n\n\n\t\t// Body: main container for the report\n\t\tpublic void BodyStart(Body b)\n\t\t{\n\t\t}\n\n\t\tpublic void BodyEnd(Body b)\n\t\t{\n\t\t}\n\n\t\tpublic void PageHeaderStart(PageHeader ph)\n\t\t{\n\t\t}\n\n\t\tpublic void PageHeaderEnd(PageHeader ph)\n\t\t{\n\t\t}\n\n\t\tpublic void PageFooterStart(PageFooter pf)\n\t\t{\n\t\t}\n\n\t\tpublic void PageFooterEnd(PageFooter pf)\n\t\t{\n\t\t}\n\n\t\tpublic async Task Textbox(Textbox tb, string t, Row row)\n\t\t{\n\t\t\tif(!await tb.IsHidden(report, row)) {\n                await excelBuilder.AddTextbox(tb, t, row);\n\t\t\t}\n\t\t}\n\n\t\tprivate async Task<StyleInfo> GetStyle(ReportItem ri, Row row)\n\t\t{\n\t\t\tif(ri.Style == null)\n\t\t\t\treturn null;\n\n\t\t\treturn await ri.Style.GetStyleInfo(report, row);\n\t\t}\n\n\t\tprivate static bool InTable(ReportItem tb)\n\t\t{\n\t\t\tType tp = tb.Parent.Parent.GetType();\n\t\t\treturn (tp == typeof(TableCell) ||\n\t\t\t\t\t tp == typeof(Corner) ||\n\t\t\t\t\t tp == typeof(DynamicColumns) ||\n\t\t\t\t\t tp == typeof(DynamicRows) ||\n\t\t\t\t\t tp == typeof(StaticRow) ||\n\t\t\t\t\t tp == typeof(StaticColumn) ||\n\t\t\t\t\t tp == typeof(Subtotal) ||\n\t\t\t\t\t tp == typeof(MatrixCell));\n\t\t}\n\n\t\tprivate static bool InList(ReportItem tb)\n\t\t{\n\t\t\tType tp = tb.Parent.Parent.GetType();\n\t\t\treturn (tp == typeof(List));\n\t\t}\n\n\t\tpublic Task DataRegionNoRows(DataRegion d, string noRowsMsg)            // no rows in table\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\t// Lists\n\t\tpublic Task<bool> ListStart(List l, Row r)\n\t\t{\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic Task ListEnd(List l, Row r)\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tpublic Task ListEntryBegin(List l, Row r)\n\t\t{\n            return Task.CompletedTask;\n\t\t}\n\n\t\tpublic void ListEntryEnd(List l, Row r)\n\t\t{\n\t\t}\n\n\t\t// Tables\t\t\t\t\t// Report item table\n\t\tpublic async Task<bool> TableStart(Table t, Row row)\n\t\t{\n\t\t\tif(t.Visibility == null || (t.Visibility != null && !await t.Visibility.IsHidden(report, row))) {\n\t\t\t\texcelBuilder.AddTable(t);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tpublic bool IsTableSortable(Table t)\n\t\t{\n\t\t\treturn false;   // can't have tableGroups; must have 1 detail row\n\t\t}\n\n\t\tpublic Task TableEnd(Table t, Row row)\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tpublic void TableBodyStart(Table t, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic void TableBodyEnd(Table t, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic void TableFooterStart(Footer f, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic void TableFooterEnd(Footer f, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic void TableHeaderStart(Header h, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic void TableHeaderEnd(Header h, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic async Task TableRowStart(TableRow tr, Row row)\n\t\t{\n            await excelBuilder.AddRow(tr, row);\n\t\t}\n\n\t\tpublic void TableRowEnd(TableRow tr, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic Task TableCellStart(TableCell t, Row row)\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tpublic void TableCellEnd(TableCell t, Row row)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tpublic Task<bool> MatrixStart(Matrix m, MatrixCellEntry[,] matrix, Row r, int headerRows, int maxRows, int maxCols)               // called first\n\t\t{\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic void MatrixColumns(Matrix m, MatrixColumns mc)   // called just after MatrixStart\n\t\t{\n\t\t}\n\n\t\tpublic Task MatrixCellStart(Matrix m, ReportItem ri, int row, int column, Row r, float h, float w, int colSpan)\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tpublic Task MatrixCellEnd(Matrix m, ReportItem ri, int row, int column, Row r)\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tpublic void MatrixRowStart(Matrix m, int row, Row r)\n\t\t{\n\t\t}\n\n\t\tpublic void MatrixRowEnd(Matrix m, int row, Row r)\n\t\t{\n\t\t}\n\n\t\tpublic Task MatrixEnd(Matrix m, Row r)              // called last\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tpublic Task Chart(Chart c, Row row, ChartBase cb)\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\t\tpublic async Task Image(Image i, Row r, string mimeType, Stream ioin)\n\t\t{\n\t\t\tif(i.Visibility == null || (i.Visibility != null && !await i.Visibility.IsHidden(report, r))) {\n\t\t\t\tint picIndex = workbook.AddPicture(ioin, XSSFWorkbook.PICTURE_TYPE_JPEG);\n\t\t\t\texcelBuilder.AddImage(i, picIndex);\n\t\t\t}\n\t\t}\n\n\t\tpublic async Task Line(Line l, Row row)\n\t\t{\n\t\t\tfloat borderWidth = 1;\n\t\t\tif(l.Style.BorderWidth != null) {\n\t\t\t\tborderWidth = await l.Style.BorderWidth.EvalDefault(report, row);\n\t\t\t} else if(l.Style.BorderStyle != null) {\n\t\t\t\tborderWidth = (float)await l.Style.BorderStyle.EvalDefault(report, row);\n\t\t\t}\n\t\t\texcelBuilder.AddLine(l, borderWidth);\n\t\t}\n\n\t\tpublic Task<bool> RectangleStart(Rdl.Rectangle rect, Row r)\n\t\t{\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic Task RectangleEnd(Rdl.Rectangle rect, Row r)\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\t// Subreport:  \n\t\tpublic Task Subreport(Subreport s, Row r)\n\t\t{\n            return Task.CompletedTask;\n        }\n\t\tpublic void GroupingStart(Grouping g)           // called at start of grouping\n\t\t{\n\t\t}\n\t\tpublic void GroupingInstanceStart(Grouping g)   // called at start for each grouping instance\n\t\t{\n\t\t}\n\t\tpublic void GroupingInstanceEnd(Grouping g) // called at start for each grouping instance\n\t\t{\n\t\t}\n\t\tpublic void GroupingEnd(Grouping g)         // called at end of grouping\n\t\t{\n\t\t}\n\t\tpublic Task RunPages(Pages pgs) // we don't have paging turned on for html\n\t\t{\n            return Task.CompletedTask;\n        }\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Render/RenderExcel2007DataOnly.cs",
    "content": "﻿\n\nusing System;\nusing System.IO;\nusing System.Collections.Generic;\nusing NPOI.SS.UserModel;\nusing NPOI.XSSF.UserModel;\nusing RdlEngine.Render.ExcelConverter;\nusing NPOI.XSSF.UserModel.Helpers;\nusing System.Linq;\nusing NPOI.SS.Util;\nusing NPOI.Util;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Renders a report to Excel 2007.   This handles some page formating but does not do true page formatting.\n\t///</summary>\n\tinternal class RenderExcel2007DataOnly : IPresent\n\t{\n\t\tReport report;                   // report\n\t\tIStreamGen _sg;             // stream generater\n\n\t\tExcelCellsBuilder excelBuilder = new ExcelCellsBuilder();\n\t\tXSSFWorkbook workbook = new XSSFWorkbook();\n\t\tXSSFSheet worksheet;\n\t\tColumnHelper columnHelper;\n\t\tdouble k = 5.637142013; //points per excel character width\n\n\t\tpublic RenderExcel2007DataOnly(Report rep, IStreamGen sg)\n\t\t{\n\t\t\treport = rep;\n\t\t\t_sg = sg;                   // We need this in future\n\n\t\t\texcelBuilder.Report = report;\n\t\t\tworksheet = (XSSFSheet)workbook.CreateSheet(string.IsNullOrEmpty(rep.Name) ? \"NewSheet\" : rep.Name);\n\t\t\tvar ps = (XSSFPrintSetup)worksheet.PrintSetup;\n\t\t\tps.SetPaperSize(PaperSize.A4);\n\t\t\tps.Orientation = PrintOrientation.LANDSCAPE;\n\t\t\tworksheet.SetMargin(MarginType.LeftMargin, rep.LeftMarginPoints / 72);\n\t\t\tworksheet.SetMargin(MarginType.TopMargin, rep.TopMarginPoints / 72);\n\t\t\tworksheet.SetMargin(MarginType.RightMargin, rep.RightMarginPoints / 72);\n\t\t\tworksheet.SetMargin(MarginType.BottomMargin, rep.BottomMarginPoints / 72);\n\n\t\t\tcolumnHelper = worksheet.GetColumnHelper();\n\t\t}\n\n\t\t// Added to expose data to Excel2003 file generation\n\t\tprotected IStreamGen StreamGen { get => _sg; set => _sg = value; }\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tif(workbook != null)\n\t\t\t\tworkbook.Dispose();\n\t\t}\n\n\t\tpublic Report Report()\n\t\t{\n\t\t\treturn report;\n\t\t}\n\n\t\tpublic bool IsPagingNeeded()\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tpublic void Start()\n\t\t{\n\n\t\t}\n\n\t\tpublic virtual Task End()\n\t\t{\n\t\t\texcelBuilder.CellsCorrection();\n\t\t\tfor(int i = 0; i < excelBuilder.Columns.Count; i++) {\n\t\t\t\tif(i + 1 < excelBuilder.Columns.Count) {\n\t\t\t\t\tvar widthInPoints = excelBuilder.Columns[i + 1].XPosition - excelBuilder.Columns[i].XPosition;\n\t\t\t\t\tvar widthInSymbols = widthInPoints / k;\n\t\t\t\t\tcolumnHelper.SetColWidth(i, widthInSymbols);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor(int i = 0; i < excelBuilder.Rows.Count - 1; i++) {\n\t\t\t\tvar builderRow = excelBuilder.Rows[i];\n\t\t\t\tXSSFRow row = (XSSFRow)worksheet.CreateRow(i);\n\t\t\t\trow.HeightInPoints = (excelBuilder.Rows[i + 1].YPosition - builderRow.YPosition);\n\t\t\t}\n\n\t\t\tfor(int i = 0; i < excelBuilder.Rows.Count - 1; i++) {\n\t\t\t\tvar builderRow = excelBuilder.Rows[i];\n\t\t\t\tXSSFRow row = (XSSFRow)worksheet.GetRow(i);\n\n\t\t\t\tfor(int j = 0; j < builderRow.Cells.Count; j++) {\n\t\t\t\t\tvar builderCell = builderRow.Cells[j];\n\t\t\t\t\tvar columnIndex = excelBuilder.Columns.IndexOf(builderCell.Column);\n\t\t\t\t\tXSSFCell cell = (XSSFCell)row.CreateCell(columnIndex);\n\n\t\t\t\t\tif(builderCell.ReportItem != null) {\n\t\t\n\n\t\t\t\t\t\tvar rightAttach = excelBuilder.GetRightAttachCells(builderCell);\n\t\t\t\t\t\tvar bottomAttach = excelBuilder.GetBottomAttachCells(builderCell);\n\n\t\t\t\t\t\tvar rowIndex = excelBuilder.Rows.IndexOf(builderCell.Row);\n\t\t\t\t\t\tvar colIndex = excelBuilder.Columns.IndexOf(builderCell.Column);\n\n\t\t\t\t\t\tif(rightAttach > 0 || bottomAttach > 0) {\n\t\t\t\t\t\t\tvar mergeRegion = new NPOI.SS.Util.CellRangeAddress(rowIndex,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trowIndex + bottomAttach,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolIndex,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolIndex + rightAttach);\n\t\t\t\t\t\t\tworksheet.AddMergedRegion(mergeRegion);\t\t\t\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcell.SetCellValue(builderCell.Value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\t//Create images\n\t\t\tXSSFDrawing drawing = worksheet.CreateDrawingPatriarch() as XSSFDrawing;\n\t\t\tforeach(var image in excelBuilder.Images) {\n\n\t\t\t\tvar anchor = CreateAnchor(image.AbsoluteTop, image.AbsoluteLeft + image.ImageWidth, image.AbsoluteTop + image.ImageHeight, image.AbsoluteLeft);\n\t\t\t\tanchor.AnchorType = AnchorType.DontMoveAndResize;\n\t\t\t\tdrawing.CreatePicture(anchor, image.ImageIndex);\n\t\t\t}\n\n\t\t\t//Create lines\n\t\t\tforeach(var line in excelBuilder.Lines) {\n\n\t\t\t\tvar anchorLeft = line.FlipH ? line.Right : line.AbsoluteLeft;\n\t\t\t\tvar anchorRight = line.FlipH ? line.AbsoluteLeft : line.Right;\n\t\t\t\tvar anchorTop = line.FlipV ? line.Bottom : line.AbsoluteTop;\n\t\t\t\tvar anchorBottom = line.FlipV ? line.AbsoluteTop : line.Bottom;\n\n\t\t\t\tvar anchorLine = CreateAnchor(anchorTop, anchorRight, anchorBottom, anchorLeft);\n\n\t\t\t\tXSSFSimpleShape lineShape = drawing.CreateSimpleShape(anchorLine);\n\t\t\t\tlineShape.ShapeType = (int)ShapeTypes.Line;\n\t\t\t\tlineShape.LineWidth = line.BorderWidth;\n\t\t\t\t//BUG. incorrect set line style\n\t\t\t\t//lineShape.LineStyle = LineStyle.Solid;\n\t\t\t\tlineShape.SetLineStyleColor(0, 0, 0);\n\t\t\t\t//lineShape.GetCTShape().spPr.xfrm.flipH = line.FlipH;\n\t\t\t\t//lineShape.GetCTShape().spPr.xfrm.flipV = line.FlipV;\n\t\t\t}\n\n\t\t\tworkbook.Write(_sg.GetStream());\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tprivate XSSFClientAnchor CreateAnchor(float top, float right, float bottom, float left)\n\t\t{\n\t\t\t\n\t\t\tvar col1 = excelBuilder.Columns.LastOrDefault(x => x.XPosition < left);\n\t\t\tvar row1 = excelBuilder.Rows.LastOrDefault(x => x.YPosition < top);\n\n\t\t\tvar col2 = excelBuilder.Columns.LastOrDefault(x => x.XPosition < right);\n\t\t\tvar row2 = excelBuilder.Rows.LastOrDefault(x => x.YPosition < bottom);\n\n\t\t\tvar dx1 = (left - (col1 == null ? 0 : col1.XPosition)) * Units.EMU_PER_POINT;\n\t\t\tvar dy1 = (top - (row1 == null ? 0 : row1.YPosition)) * Units.EMU_PER_POINT;\n\n\t\t\tvar dx2 = (right - (col2 == null ? 0 : col2.XPosition)) * Units.EMU_PER_POINT;\n\t\t\tvar dy2 = (bottom - (row2 == null ? 0 : row2.YPosition)) * Units.EMU_PER_POINT;\n\n\t\t\tvar col1Index = col1 == null ? 0 : excelBuilder.Columns.IndexOf(col1);\n\t\t\tvar row1Index = row1 == null ? 0 : excelBuilder.Rows.IndexOf(row1);\n\n\t\t\tvar col2Index = col2 == null ? 0 : excelBuilder.Columns.IndexOf(col2);\n\t\t\tvar row2Index = row2 == null ? 0 : excelBuilder.Rows.IndexOf(row2);\n\n\t\t\treturn new XSSFClientAnchor((int)dx1, (int)dy1,\n\t\t\t                            (int)dx2, (int)dy2,\n\t\t\t                            col1Index, row1Index,\n\t\t\t                            col2Index, row2Index);\n\t\t}\n\n\n\t\t// Body: main container for the report\n\t\tpublic void BodyStart(Body b)\n\t\t{\n\t\t}\n\n\t\tpublic void BodyEnd(Body b)\n\t\t{\n\t\t}\n\n\t\tpublic void PageHeaderStart(PageHeader ph)\n\t\t{\n\t\t}\n\n\t\tpublic void PageHeaderEnd(PageHeader ph)\n\t\t{\n\t\t}\n\n\t\tpublic void PageFooterStart(PageFooter pf)\n\t\t{\n\t\t}\n\n\t\tpublic void PageFooterEnd(PageFooter pf)\n\t\t{\n\t\t}\n\n\t\tpublic async Task Textbox(Textbox tb, string t, Row row)\n\t\t{\n\t\t\tif(!await tb.IsHidden(report, row)) {\n                await excelBuilder.AddTextbox(tb, t, row);\n\t\t\t}\n\t\t}\n\n\t\tpublic Task DataRegionNoRows(DataRegion d, string noRowsMsg)            // no rows in table\n\t\t{\n            return Task.CompletedTask;\n        }\n\n\t\t// Lists\n\t\tpublic Task<bool> ListStart(List l, Row r)\n\t\t{\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic Task ListEnd(List l, Row r)\n\t\t{\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic Task ListEntryBegin(List l, Row r)\n        {\n            return Task.CompletedTask;\n        }\n\n\t\tpublic void ListEntryEnd(List l, Row r)\n\t\t{\n\t\t}\n\n\t\t// Tables\t\t\t\t\t// Report item table\n\t\tpublic async Task<bool> TableStart(Table t, Row row)\n\t\t{\n\t\t\tif(t.Visibility == null || (t.Visibility != null && !await t.Visibility.IsHidden(report, row))) {\n\t\t\t\texcelBuilder.AddTable(t);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tpublic bool IsTableSortable(Table t)\n\t\t{\n\t\t\treturn false;   // can't have tableGroups; must have 1 detail row\n\t\t}\n\n\t\tpublic Task TableEnd(Table t, Row row)\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tpublic void TableBodyStart(Table t, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic void TableBodyEnd(Table t, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic void TableFooterStart(Footer f, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic void TableFooterEnd(Footer f, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic void TableHeaderStart(Header h, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic void TableHeaderEnd(Header h, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic async Task TableRowStart(TableRow tr, Row row)\n\t\t{\n            await excelBuilder.AddRow(tr, row);\n\t\t}\n\n\t\tpublic void TableRowEnd(TableRow tr, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic Task TableCellStart(TableCell t, Row row)\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tpublic void TableCellEnd(TableCell t, Row row)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tpublic Task<bool> MatrixStart(Matrix m, MatrixCellEntry[,] matrix, Row r, int headerRows, int maxRows, int maxCols)               // called first\n\t\t{\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic void MatrixColumns(Matrix m, MatrixColumns mc)   // called just after MatrixStart\n\t\t{\n\t\t}\n\n\t\tpublic Task MatrixCellStart(Matrix m, ReportItem ri, int row, int column, Row r, float h, float w, int colSpan)\n\t\t{\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic Task MatrixCellEnd(Matrix m, ReportItem ri, int row, int column, Row r)\n\t\t{\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic void MatrixRowStart(Matrix m, int row, Row r)\n\t\t{\n\t\t}\n\n\t\tpublic void MatrixRowEnd(Matrix m, int row, Row r)\n\t\t{\n\t\t}\n\n\t\tpublic Task MatrixEnd(Matrix m, Row r)              // called last\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tpublic Task Chart(Chart c, Row row, ChartBase cb)\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\t\tpublic async Task Image(Image i, Row r, string mimeType, Stream ioin)\n\t\t{\n\t\t\tif(i.Visibility == null || (i.Visibility != null && !await i.Visibility.IsHidden(report, r))) {\n\t\t\t\tint picIndex = workbook.AddPicture(ioin, XSSFWorkbook.PICTURE_TYPE_JPEG);\n\t\t\t\texcelBuilder.AddImage(i, picIndex);\n\t\t\t}\n\t\t}\n\n\t\tpublic async Task Line(Line l, Row row)\n\t\t{\n\t\t\tfloat borderWidth = 1;\n\t\t\tif(l.Style.BorderWidth != null) {\n\t\t\t\tborderWidth = await l.Style.BorderWidth.EvalDefault(report, row);\n\t\t\t} else if(l.Style.BorderStyle != null) {\n\t\t\t\tborderWidth = (float)await l.Style.BorderStyle.EvalDefault(report, row);\n\t\t\t}\n\t\t\texcelBuilder.AddLine(l, borderWidth);\n\t\t}\n\n\t\tpublic Task<bool> RectangleStart(Rdl.Rectangle rect, Row r)\n\t\t{\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic Task RectangleEnd(Rdl.Rectangle rect, Row r)\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\t// Subreport:  \n\t\tpublic Task Subreport(Subreport s, Row r)\n\t\t{\n            return Task.CompletedTask;\n        }\n\t\tpublic void GroupingStart(Grouping g)           // called at start of grouping\n\t\t{\n\t\t}\n\t\tpublic void GroupingInstanceStart(Grouping g)   // called at start for each grouping instance\n\t\t{\n\t\t}\n\t\tpublic void GroupingInstanceEnd(Grouping g) // called at start for each grouping instance\n\t\t{\n\t\t}\n\t\tpublic void GroupingEnd(Grouping g)         // called at end of grouping\n\t\t{\n\t\t}\n\t\tpublic Task RunPages(Pages pgs) // we don't have paging turned on for html\n\t\t{\n            return Task.CompletedTask;\n        }\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Render/RenderHtml.cs",
    "content": "\n\nusing System;\nusing Majorsilence.Reporting.Rdl;\nusing System.IO;\nusing System.Collections;\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\nusing Majorsilence.Drawing.Imaging;\n#else\nusing System.Drawing;\nusing System.Drawing.Imaging;\n#endif\nusing System.Text;\nusing System.Xml;\nusing System.Globalization;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t\n\t///<summary>\n\t/// Renders a report to HTML.   This handles some page formating but does not do true page formatting.\n\t///</summary>\n\tinternal class RenderHtml: IPresent\n\t{\n\t\tReport r;\t\t\t\t\t// report\n\t\tStringWriter tw;\t\t\t// temporary location where the output is going\n\t\tIStreamGen _sg;\t\t\t\t// stream generater\n\t\tHashtable _styles;\t\t\t// hash table of styles we've generated\n\t\tint cssId=1;\t\t\t\t// ID for css when names are usable or available\n\t\tbool bScriptToggle=false;\t// need to generate toggle javascript in header\n\t\tbool bScriptTableSort=false; // need to generate table sort javascript in header\n\t\tBitmap _bm=null;\t\t\t// bm and\n\t\tGraphics _g=null;\t\t\t//\t\t  g are needed when calculating string heights\n\t\tbool _Asp=false;\t\t\t// denotes ASP.NET compatible HTML; e.g. no <html>, <body>\n\t\t\t\t\t\t\t\t\t//    separate JavaScript and CSS\n\t\tstring _Prefix=\"\";\t\t\t// prefix to generating all HTML names (e.g. css, ...\n\t\tstring _CSS;\t\t\t\t// when ASP we put the CSS into a string\n\t\tstring _JavaScript;\t\t\t//     as well as any required javascript\n\t\tint _SkipMatrixCols=0;\t\t// # of matrix columns to skip\n\n\t\tpublic RenderHtml(Report rep, IStreamGen sg)\n\t\t{\n\t\t\tr = rep;\n\t\t\t_sg = sg;\t\t\t\t\t// We need this in future\n\n\t\t\ttw = new StringWriter();\t// will hold the bulk of the HTML until we generate\n\t\t\t// final file\n\t\t\t_styles = new Hashtable();\n\t\t}\n        public void Dispose() \n\t\t{\n\t\t\t// These should already be cleaned up; but in case of an unexpected error \n\t\t\t//   these still need to be disposed of\n\t\t\tif (_bm != null)\n\t\t\t\t_bm.Dispose();\n\t\t\tif (_g != null)\n\t\t\t\t_g.Dispose();\n\t\t}\n\n\t\tpublic Report Report()\n\t\t{\n\t\t\treturn r;\n\t\t}\n\n\t\tpublic bool Asp\n\t\t{\n\t\t\tget {return _Asp;}\n\t\t\tset {_Asp = value;}\n\t\t}\n\n\t\tpublic string JavaScript\n\t\t{\n\t\t\tget {return _JavaScript;}\n\t\t}\n\n\t\tpublic string CSS\n\t\t{\n\t\t\tget {return _CSS;}\n\t\t}\n\n\t\tpublic string Prefix\n\t\t{\n\t\t\tget {return _Prefix;}\n\t\t\tset \n\t\t\t{\n\t\t\t\t_Prefix = value==null? \"\": value;\n\t\t\t\tif (_Prefix.Length > 0 &&\n\t\t\t\t\t_Prefix[0] == '_')\n\t\t\t\t\t_Prefix = \"a\" + _Prefix;\t// not perfect but underscores as first letter don't work\n\t\t\t}\n\t\t}\n\n\t\tpublic bool IsPagingNeeded()\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tpublic void Start()\t\t\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tstring FixupRelativeName(string relativeName)\n\t\t{\n\t\t\tif (_sg is OneFileStreamGen)\n\t\t\t{\n\t\t\t\tif (relativeName[0] == Path.DirectorySeparatorChar || relativeName[0] == Path.AltDirectorySeparatorChar)\n\t\t\t\t\trelativeName = relativeName.Substring(1);\n\t\t\t}\n            else if (!(relativeName[0] == Path.DirectorySeparatorChar || relativeName[0] == Path.AltDirectorySeparatorChar))\n            {\n                if (_Asp)\n                    relativeName = \"/\" + relativeName;      // Hack for Firefox\n                else\n                    relativeName = Path.DirectorySeparatorChar + relativeName;\n            }\n\t\t\treturn relativeName;\n\t\t}\n\t\t// puts the JavaScript into the header\n\t\tprivate void ScriptGenerate(TextWriter ftw)\n\t\t{\n\t\t\tif (bScriptToggle || bScriptTableSort)\n\t\t\t{\n\t\t\t\tftw.WriteLine(\"<script language=\\\"javascript\\\">\");\n\t\t\t}\n\n\t\t\tif (bScriptToggle)\n\t\t\t{\n\t\t\t\tftw.WriteLine(\"var dname='';\");\n\t\t\t\tftw.WriteLine(@\"function hideShow(node, hideCount, showID) {\nif (navigator.appName.toLowerCase().indexOf('netscape') > -1) \n\tdname = 'table-row';\nelse\n\tdname = 'block';\n\n var tNode;\n for (var ci=0;ci<node.childNodes.length;ci++) {\n     if (node.childNodes[ci].tagName && node.childNodes[ci].tagName.toLowerCase() == 'img') tNode = node.childNodes[ci];\n }\n\tvar rows = findObject(showID);\n\tif (rows[0].style.display == dname) {hideRows(rows, hideCount); tNode.src='plus.gif';}\n\telse {\n\t   tNode.src='minus.gif';\n\t   for (var i = 0; i < rows.length; i++) {\n\t\t  rows[i].style.display = dname;\n\t   }\n\t}\n}\nfunction hideRows(rows, count) {\n    var row;\n\tif (navigator.appName.toLowerCase().indexOf('netscape') > -1) \n\t{\n\t\tfor (var r=0; r < rows.length; r++) {\n\t\t\trow = rows[r];\n\t\t\trow.style.display = 'none';\n\t\t\tvar imgs = row.getElementsByTagName('img');\n\t\t\tfor (var ci=0;ci<imgs.length;ci++) {\n\t\t\t\tif (imgs[ci].className == 'toggle') {\n\t\t\t\t\timgs[ci].src='plus.gif';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\treturn;\n\t}\n if (rows.tagName == 'TR')\n    row = rows;\n else\n    row = rows[0];   \t\n while (count > 0) {\n   row.style.display = 'none';\n   var imgs = row.getElementsByTagName('img');\n   for (var ci=0;ci<imgs.length;ci++) {\n      if (imgs[ci].className == 'toggle') {\n\t\t     imgs[ci].src='plus.gif';\n      }\n   }\n   row = row.nextSibling;\n   count--;\n }\n}\nfunction findObject(id) {\n\tif (navigator.appName.toLowerCase().indexOf('netscape') > -1) \n\t{\n\t   var a = new Array();\n\t   var count=0;\n\t   for (var i=0; i < document.all.length; i++)\n\t   {\n\t      if (document.all[i].id == id)\n\t\t\ta[count++] = document.all[i];\n\t   }\n\t\treturn a;\n\t} \n\telse \n\t{\n\t    var o = document.all[id];\n\t\tif (o.tagName == 'TR')\n\t\t{\n\t\t   var a = new Array();\n\t\t   a[0] = o;\n\t\t   return a;\n\t\t}\n\t\treturn o;\n\t} \n}\n\");\n \n\t\t\t}\n\n\t\t\tif (bScriptTableSort)\n\t\t\t{\n\t\t\t\tftw.WriteLine(\"var SORT_INDEX;\");\n\t\t\t\tftw.WriteLine(\"var SORT_DIR;\");\n\n\t\t\t\tftw.WriteLine(\"function sort_getInnerText(element) {\");\n\t\t\t\tftw.WriteLine(\"\tif (typeof element == 'string') return element;\");\n\t\t\t\tftw.WriteLine(\"\tif (typeof element == 'undefined') return element;\");\n\t\t\t\tftw.WriteLine(\"\tif (element.innerText) return element.innerText;\");\n\t\t\t\tftw.WriteLine(\"\tvar s = '';\");\n\t\n\t\t\t\tftw.WriteLine(\"\tvar cn = element.childNodes;\");\n\t\t\t\tftw.WriteLine(\"\tfor (var i = 0; i < cn.length; i++) {\");\n\t\t\t\tftw.WriteLine(\"\t\tswitch (cn[i].nodeType) {\");\n\t\t\t\tftw.WriteLine(\"\t\t\tcase 1:\");\t\t// element node\n\t\t\t\tftw.WriteLine(\"\t\t\t\ts += sort_getInnerText(cn[i]);\");\n\t\t\t\tftw.WriteLine(\"\t\t\t\tbreak;\");\n\t\t\t\tftw.WriteLine(\"\t\t\tcase 3:\");\t\t// text node\n\t\t\t\tftw.WriteLine(\"\t\t\t\ts += cn[i].nodeValue;\");\n\t\t\t\tftw.WriteLine(\"\t\t\t\tbreak;\");\n\t\t\t\tftw.WriteLine(\"\t\t}\");\n\t\t\t\tftw.WriteLine(\"\t}\");\n\t\t\t\tftw.WriteLine(\"\treturn s;\");\n\t\t\t\tftw.WriteLine(\"}\");\n\n\t\t\t\tftw.WriteLine(\"function sort_table(node, sortfn, header_rows, footer_rows) {\");\n\t\t\t\tftw.WriteLine(\"    var arrowNode;\");\t// arrow node\n\t\t\t\tftw.WriteLine(\"    for (var ci=0;ci<node.childNodes.length;ci++) {\");\n\t\t\t\tftw.WriteLine(\"        if (node.childNodes[ci].tagName && node.childNodes[ci].tagName.toLowerCase() == 'span') arrowNode = node.childNodes[ci];\");\n\t\t\t\tftw.WriteLine(\"    }\");\n\n\t\t\t\tftw.WriteLine(\"    var td = node.parentNode;\");\n\t\t\t\tftw.WriteLine(\"    SORT_INDEX = td.cellIndex;\");\t// need to remember SORT_INDEX in compare function\n\t\t\t\tftw.WriteLine(\"    var table = sort_getTable(td);\");\n\n\t\t\t\tftw.WriteLine(\"    var sortnext;\");\n\t\t\t\tftw.WriteLine(\"    if (arrowNode.getAttribute('sortdir') == 'down') {\");\n\t\t\t\tftw.WriteLine(\"        arrow = '&nbsp;&nbsp;&uarr;';\");\n\t\t\t\tftw.WriteLine(\"        SORT_DIR = -1;\");\t\t\t// descending SORT_DIR in compare function\n\t\t\t\tftw.WriteLine(\"        sortnext = 'up';\");\n\t\t\t\tftw.WriteLine(\"    } else {\");\n\t\t\t\tftw.WriteLine(\"        arrow = '&nbsp;&nbsp;&darr;';\");\n\t\t\t\tftw.WriteLine(\"        SORT_DIR = 1;\");\t\t\t\t// ascending SORT_DIR in compare function\n\t\t\t\tftw.WriteLine(\"        sortnext = 'down';\");\n\t\t\t\tftw.WriteLine(\"    }\");\n    \n\t\t\t\tftw.WriteLine(\"    var newRows = new Array();\");\n\t\t\t\tftw.WriteLine(\"    for (j=header_rows;j<table.rows.length-footer_rows;j++) { newRows[j-header_rows] = table.rows[j]; }\");\n\n\t\t\t\tftw.WriteLine(\"    newRows.sort(sortfn);\");\n\n\t\t\t\t// We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones\n\t\t\t\tftw.WriteLine(\"    for (i=0;i<newRows.length;i++) {table.tBodies[0].appendChild(newRows[i]);}\");\n    \n\t\t\t\t// Reset all arrows and directions for next time\n\t\t\t\tftw.WriteLine(\"    var spans = document.getElementsByTagName('span');\");\n\t\t\t\tftw.WriteLine(\"    for (var ci=0;ci<spans.length;ci++) {\");\n\t\t\t\tftw.WriteLine(\"        if (spans[ci].className == 'sortarrow') {\");\n\t\t\t\t// in the same table as us?\n\t\t\t\tftw.WriteLine(\"            if (sort_getTable(spans[ci]) == sort_getTable(node)) {\");\n\t\t\t\tftw.WriteLine(\"                spans[ci].innerHTML = '&nbsp;&nbsp;&nbsp;';\");\n\t\t\t\tftw.WriteLine(\"                spans[ci].setAttribute('sortdir','up');\");\n\t\t\t\tftw.WriteLine(\"            }\");\n\t\t\t\tftw.WriteLine(\"        }\");\n\t\t\t\tftw.WriteLine(\"    }\");\n        \n\t\t\t\tftw.WriteLine(\"    arrowNode.innerHTML = arrow;\");\n\t\t\t\tftw.WriteLine(\"    arrowNode.setAttribute('sortdir',sortnext);\");\n\t\t\t\tftw.WriteLine(\"}\");\n\n\t\t\t\tftw.WriteLine(\"function sort_getTable(el) {\");\n\t\t\t\tftw.WriteLine(\"\tif (el == null) return null;\");\n\t\t\t\tftw.WriteLine(\"\telse if (el.nodeType == 1 && el.tagName.toLowerCase() == 'table')\");\n\t\t\t\tftw.WriteLine(\"\t\treturn el;\");\n\t\t\t\tftw.WriteLine(\"\telse\");\n\t\t\t\tftw.WriteLine(\"\t\treturn sort_getTable(el.parentNode);\");\n\t\t\t\tftw.WriteLine(\"}\");\n\n\t\t\t\tftw.WriteLine(\"function sort_cmp_date(c1,c2) {\");\n\t\t\t\tftw.WriteLine(\"    t1 = sort_getInnerText(c1.cells[SORT_INDEX]);\");\n\t\t\t\tftw.WriteLine(\"    t2 = sort_getInnerText(c2.cells[SORT_INDEX]);\");\n\t\t\t\tftw.WriteLine(\"    dt1 = new Date(t1);\");\n\t\t\t\tftw.WriteLine(\"    dt2 = new Date(t2);\");\n\t\t\t\tftw.WriteLine(\"    if (dt1==dt2) return 0;\");\n\t\t\t\tftw.WriteLine(\"    if (dt1<dt2) return -SORT_DIR;\");\n\t\t\t\tftw.WriteLine(\"    return SORT_DIR;\");\n\t\t\t\tftw.WriteLine(\"}\");\n\n\t\t\t\t// numeric - removes any extraneous formating characters before parsing\n\t\t\t\tftw.WriteLine(\"function sort_cmp_number(c1,c2) {\"); \n\t\t\t\tftw.WriteLine(\"    t1 = sort_getInnerText(c1.cells[SORT_INDEX]).replace(/[^0-9.]/g,'');\");\n\t\t\t\tftw.WriteLine(\"    t2 = sort_getInnerText(c2.cells[SORT_INDEX]).replace(/[^0-9.]/g,'');\");\n\t\t\t\tftw.WriteLine(\"    n1 = parseFloat(t1);\");\n\t\t\t\tftw.WriteLine(\"    n2 = parseFloat(t2);\");\n\t\t\t\tftw.WriteLine(\"    if (isNaN(n1)) n1 = Number.MAX_VALUE\");\n\t\t\t\tftw.WriteLine(\"    if (isNaN(n2)) n2 = Number.MAX_VALUE\");\n\t\t\t\tftw.WriteLine(\"    return (n1 - n2)*SORT_DIR;\");\n\t\t\t\tftw.WriteLine(\"}\");\n\n\t\t\t\t// For string we first do a case insensitive comparison;\n\t\t\t\t//   when equal we then do a case sensitive comparison\n\t\t\t\tftw.WriteLine(\"function sort_cmp_string(c1,c2) {\");\n\t\t\t\tftw.WriteLine(\"    t1 = sort_getInnerText(c1.cells[SORT_INDEX]).toLowerCase();\");\n\t\t\t\tftw.WriteLine(\"    t2 = sort_getInnerText(c2.cells[SORT_INDEX]).toLowerCase();\");\n\t\t\t\tftw.WriteLine(\"    if (t1==t2) return sort_cmp_casesensitive(c1,c2);\");\n\t\t\t\tftw.WriteLine(\"    if (t1<t2) return -SORT_DIR;\");\n\t\t\t\tftw.WriteLine(\"    return SORT_DIR;\");\n\t\t\t\tftw.WriteLine(\"}\");\n\n\t\t\t\tftw.WriteLine(\"function sort_cmp_casesensitive(c1,c2) {\");\n\t\t\t\tftw.WriteLine(\"    t1 = sort_getInnerText(c1.cells[SORT_INDEX]);\");\n\t\t\t\tftw.WriteLine(\"    t2 = sort_getInnerText(c2.cells[SORT_INDEX]);\");\n\t\t\t\tftw.WriteLine(\"    if (t1==t2) return 0;\");\n\t\t\t\tftw.WriteLine(\"    if (t2<t2) return -SORT_DIR;\");\n\t\t\t\tftw.WriteLine(\"    return SORT_DIR;\");\n\t\t\t\tftw.WriteLine(\"}\");\n\t\t\t}\n\n\t\t\tif (bScriptToggle || bScriptTableSort)\n\t\t\t{\n\t\t\t\tftw.WriteLine(\"</script>\");\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// handle the Action tag\n\t\tprivate async Task<string> Action(Action a, Row r, string t, string tooltip)\n\t\t{\n\t\t\tif (a == null)\n\t\t\t\treturn t;\n\t\t\t\n\t\t\tstring result = t;\n\t\t\tif (a.Hyperlink != null)\n\t\t\t{\t// Handle a hyperlink\n\t\t\t\tstring url = await a.HyperLinkValue(this.r, r);\n\t\t\t\tif (tooltip == null)\n\t\t\t\t\tresult = String.Format(\"<a target=\\\"_top\\\" href=\\\"{0}\\\">{1}</a>\", url, t);\n\t\t\t\telse\n\t\t\t\t\tresult = String.Format(\"<a target=\\\"_top\\\" href=\\\"{0}\\\" title=\\\"{1}\\\">{2}</a>\", url, tooltip, t);\n\t\t\t}\n\t\t\telse if (a.Drill != null)\n\t\t\t{\t// Handle a drill through\n\t\t\t\tStringBuilder args= new StringBuilder(\"<a target=\\\"_top\\\" href=\\\"\");\n\t\t\t\tif (_Asp)\t// for ASP we go thru the default page and pass it as an argument\n\t\t\t\t\targs.Append(\"Default.aspx?rs:url=\");\n\t\t\t\targs.Append(a.Drill.ReportName);\n\t\t\t\targs.Append(\".rdl\");\n\t\t\t\tif (a.Drill.DrillthroughParameters != null)\n\t\t\t\t{\n\t\t\t\t\tbool bFirst = !_Asp;\t\t// ASP already have an argument\n\t\t\t\t\tforeach (DrillthroughParameter dtp in a.Drill.DrillthroughParameters.Items)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (!await dtp.OmitValue(this.r, r))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (bFirst)\n\t\t\t\t\t\t\t{\t// First parameter - prefixed by '?'\n\t\t\t\t\t\t\t\targs.Append('?');\n\t\t\t\t\t\t\t\tbFirst = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\t// Subsequant parameters - prefixed by '&'\n\t\t\t\t\t\t\t\targs.Append('&');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\targs.Append(dtp.Name.Nm);\n\t\t\t\t\t\t\targs.Append('=');\n\t\t\t\t\t\t\targs.Append(dtp.ValueValue(this.r, r));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\targs.Append('\"');\n\t\t\t\tif (tooltip != null)\n\t\t\t\t\targs.Append(String.Format(\" title=\\\"{0}\\\"\", tooltip));\n\t\t\t\targs.Append(\">\");\n\t\t\t\targs.Append(t);\n\t\t\t\targs.Append(\"</a>\");\n\t\t\t\tresult = args.ToString();\n\t\t\t}\n\t\t\telse if (a.BookmarkLink != null)\n\t\t\t{\t// Handle a bookmark\n\t\t\t\tstring bm = await a.BookmarkLinkValue(this.r, r);\n\t\t\t\tif (tooltip == null)\n\t\t\t\t\tresult = String.Format(\"<a href=\\\"#{0}\\\">{1}</a>\", bm, t);\n\t\t\t\telse\n\t\t\t\t\tresult = String.Format(\"<a href=\\\"#{0}\\\" title=\\\"{1}\\\">{2}</a>\", bm, tooltip, t);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tprivate string Bookmark(string bm, string t)\n\t\t{\n\t\t\tif (bm == null)\n\t\t\t\treturn t;\n\n\t\t\treturn String.Format(\"<div id=\\\"{0}\\\">{1}</div>\", bm, t);\n\t\t}\n\n\t\t// Generate the CSS styles and put them in the header\n\t\tprivate void CssGenerate(TextWriter ftw)\n\t\t{\n\t\t\tif (_styles.Count <= 0)\n\t\t\t\treturn;\n\n\t\t\tif (!_Asp)\n\t\t\t\tftw.WriteLine(\"<style type='text/css'>\");\n\n\t\t\tforeach (CssCacheEntry cce in _styles.Values)\n\t\t\t{\n\t\t\t\tint i = cce.Css.IndexOf('{');\n\t\t\t\tif (cce.Name.IndexOf('#') >= 0)\n\t\t\t\t\tftw.WriteLine(\"{0} {1}\", cce.Name, cce.Css.Substring(i));\n\t\t\t\telse\n\t\t\t\t\tftw.WriteLine(\".{0} {1}\", cce.Name, cce.Css.Substring(i));\n\t\t\t}\n\n\t\t\tif (!_Asp)\n\t\t\t\tftw.WriteLine(\"</style>\");\n\t\t}\n\n\t\tprivate async Task<string> CssAdd(Style s, ReportLink rl, Row row)\n\t\t{\n\t\t\treturn await CssAdd(s, rl, row, false, float.MinValue, float.MinValue);\n\t\t}\n\t\t\n\t\tprivate async Task<string> CssAdd(Style s, ReportLink rl, Row row, bool bForceRelative)\n\t\t{\n\t\t\treturn await CssAdd(s, rl, row, bForceRelative, float.MinValue, float.MinValue);\n\t\t}\n\t\tprivate async Task<string> CssAdd(Style s, ReportLink rl, Row row, bool bForceRelative, float h, float w)\n\t\t{\n\t\t\tstring css;\n\t\t\tstring prefix = CssPrefix(s, rl);\n\t\t\tif (_Asp && prefix == \"table#\")\n\t\t\t\tbForceRelative = true;\n\n\t\t\tif (s != null)\n\t\t\t\tcss = prefix + \"{\" + CssPosition(rl, row, bForceRelative, h, w) + await s.GetCSS(this.r, row, true) + \"}\";\n\t\t\telse if (rl is Table || rl is Matrix)\n\t\t\t\tcss = prefix + \"{\" + CssPosition(rl, row, bForceRelative, h, w) + \"border-collapse:collapse;}\";\n\t\t\telse\n\t\t\t\tcss = prefix + \"{\" + CssPosition(rl, row, bForceRelative, h, w) + \"}\";\n\n\t\t\tCssCacheEntry cce = (CssCacheEntry) _styles[css];\n\t\t\tif (cce == null)\n\t\t\t{\n\t\t\t\tstring name = prefix + this.Prefix + \"css\" + cssId++.ToString();\n\t\t\t\tcce = new CssCacheEntry(css, name);\n\t\t\t\t_styles.Add(cce.Css, cce);\n\t\t\t}\n\n\t\t\tint i = cce.Name.IndexOf('#');\n\t\t\tif (i > 0)\n\t\t\t\treturn cce.Name.Substring(i+1);\n\t\t\telse\n\t\t\t\treturn cce.Name;\n\t\t}\n\n\t\tprivate string CssPosition(ReportLink rl,Row row, bool bForceRelative, float h, float w)\n\t\t{\n\t\t\tif (!(rl is ReportItem))\t\t// if not a report item then no position\n\t\t\t\treturn \"\";\n\n\t\t\t// no positioning within a table\n\t\t\tfor (ReportLink p=rl.Parent; p != null; p=p.Parent)\n\t\t\t{\n\t\t\t\tif (p is TableCell)\n\t\t\t\t\treturn \"\";\n\t\t\t\tif (p is RowGrouping ||\n\t\t\t\t\tp is MatrixCell ||\n\t\t\t\t\tp is ColumnGrouping ||\n\t\t\t\t\tp is Corner)\n\t\t\t\t{\n\t\t\t\t\tStringBuilder sb2 = new StringBuilder();\n\t\t\t\t\tif (h != float.MinValue)\n\t\t\t\t\t\tsb2.AppendFormat(NumberFormatInfo.InvariantInfo, \"height: {0}pt; \", h);\n\t\t\t\t\tif (w != float.MinValue)\n\t\t\t\t\t\tsb2.AppendFormat(NumberFormatInfo.InvariantInfo, \"width: {0}pt; \", w);\n\t\t\t\t\treturn sb2.ToString();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// TODO: optimize by putting this into ReportItem and caching result???\n\t\t\tReportItem ri = (ReportItem) rl;\n\n\t\t\tStringBuilder sb = new StringBuilder();\n\n\t\t\tif (ri.Left != null && ri.Left.Size > 0)\n\t\t\t{\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"left: {0}; \", ri.Left.CSS);\n\t\t\t}\n            if (ri is Matrix || ri is Image || ri is Chart)\n            { }\n            else \n            {\n\t\t\t\tif (ri.Width != null)\n\t\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"width: {0}; \", ri.Width.CSS);\n\t\t\t}\n            if (ri.Top != null && ri.Top.Size > 0)\n\t\t\t{\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"top: {0}pt; \", ri.Gap(this.r));\n\t\t\t}\n\t\t\tif (ri is List)\n\t\t\t{\n\t\t\t\tList l = ri as List;\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"height: {0}pt; \", l.HeightOfList(this.r, GetGraphics,row));\n\t\t\t}\n\t\t\telse if (ri is Matrix || ri is Table || ri is Image || ri is Chart)\n\t\t\t{}\n\t\t\telse if (ri.Height != null)\n\t\t\t\tsb.AppendFormat(NumberFormatInfo.InvariantInfo, \"height: {0}; \", ri.Height.CSS);\n\n\t\t\tif (sb.Length > 0)\n\t\t\t{\n\t\t\t\tif (bForceRelative || ri.YParents != null)\n\t\t\t\t\tsb.Insert(0, \"position: relative; \");\n\t\t\t\telse\n\t\t\t\t\tsb.Insert(0, \"position: absolute; \");\n\t\t\t}\n\n\t\t\treturn sb.ToString();\n\t\t}\n\n\t\tprivate Graphics GetGraphics\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_g == null)\n\t\t\t\t{\n\t\t\t\t\t_bm = new Bitmap(10, 10);\n\t\t\t\t\t_g = Graphics.FromImage(_bm);\n\t\t\t\t}\n\t\t\t\treturn _g;\n\t\t\t}\n\t\t}\n\n\t\tprivate string CssPrefix(Style s, ReportLink rl)\n\t\t{\n\t\t\tstring cssPrefix=null;\n\t\t\tReportLink p;\n\n\t\t\tif (rl is Table || rl is Matrix || rl is Rectangle)\n\t\t\t{\n\t\t\t\tcssPrefix = \"table#\";\n\t\t\t}\n\t\t\telse if (rl is Body)\n\t\t\t{\n\t\t\t\tcssPrefix = \"body#\";\n\t\t\t}\n\t\t\telse if (rl is Line)\n\t\t\t{\n\t\t\t\tcssPrefix = \"table#\";\n\t\t\t}\n\t\t\telse if (rl is List)\n\t\t\t{\n\t\t\t\tcssPrefix = \"\";\n\t\t\t}\n\t\t\telse if (rl is Subreport)\n\t\t\t{\n\t\t\t\tcssPrefix = \"\";\n\t\t\t}\n\t\t\telse if (rl is Chart)\n\t\t\t{\t\n\t\t\t\tcssPrefix = \"\";\n\t\t\t}\n\t\t\tif (cssPrefix != null)\n\t\t\t\treturn cssPrefix;\n\n\t\t\t// now find what the style applies to\n\t\t\tfor (p=rl.Parent; p != null; p=p.Parent)\n\t\t\t{\n\t\t\t\tif (p is TableCell)\n\t\t\t\t{\n\t\t\t\t\tbool bHead = false;\n\t\t\t\t\tReportLink p2;\n\t\t\t\t\tfor (p2=p.Parent; p2 != null; p2=p2.Parent)\n\t\t\t\t\t{\n\t\t\t\t\t\tType t2 = p2.GetType();\n\t\t\t\t\t\tif (t2 == typeof(Header))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (p2.Parent is Table)\n\t\t\t\t\t\t\t\tbHead=true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (bHead)\n\t\t\t\t\t\tcssPrefix = \"th#\";\n\t\t\t\t\telse\n\t\t\t\t\t\tcssPrefix = \"td#\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse if (p is RowGrouping ||\n\t\t\t\t\tp is MatrixCell ||\n\t\t\t\t\tp is ColumnGrouping ||\n\t\t\t\t\tp is Corner)\n\t\t\t\t{\n\t\t\t\t\tcssPrefix = \"td#\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn cssPrefix == null? \"\": cssPrefix;\n\t\t}\n\n\t\tpublic async Task End()\n\t\t{\n\t\t\tstring bodyCssId;\n\t\t\tif (r.ReportDefinition.Body != null)\n\t\t\t\tbodyCssId = await CssAdd(r.ReportDefinition.Body.Style, r.ReportDefinition.Body, null);\t\t// add the style for the body\n\t\t\telse\n\t\t\t\tbodyCssId = null;\n\n\t\t\tTextWriter ftw = _sg.GetTextWriter();\t// the final text writer location\n\n\t\t\tif (_Asp)\n\t\t\t{\n\t\t\t\t// do any required JavaScript\n\t\t\t\tStringWriter sw = new StringWriter();\n\t\t\t\tScriptGenerate(sw);\n\t\t\t\t_JavaScript = sw.ToString();\n\t\t\t\tsw.Close();\n\t\t\t\t// do any required CSS\n\t\t\t\tsw = new StringWriter();\n\t\t\t\tCssGenerate(sw);\n\t\t\t\t_CSS = sw.ToString();\n\t\t\t\tsw.Close();\n\t\t\t}\n\t\t\telse\n            {\n                ftw.WriteLine(\"<!DOCTYPE html>\");\n\t\t\t\tftw.WriteLine(\"<html>\");\n\n\t\t\t\t// handle the <head>: description, javascript and CSS goes here\n\t\t\t\tftw.WriteLine(\"<head>\");\n                ftw.WriteLine(\"<meta charset=\\\"utf-8\\\">\");\n\n\t\t\t\tScriptGenerate(ftw);\n\t\t\t\tCssGenerate(ftw);\n\n\t\t\t\tif (r.Description != null)\t// Use description as title if provided\n\t\t\t\t\tftw.WriteLine(string.Format(@\"<title>{0}</title>\", XmlUtil.XmlAnsi(r.Description)));\n\n\t\t\t\tftw.WriteLine(@\"</head>\");\n\t\t\t}\n\n\t\t\t// Always want an HTML body - even if report doesn't have a body stmt\n\t\t\tif (this._Asp)\n\t\t\t{\n\t\t\t\tftw.WriteLine(\"<table style=\\\"position: relative;\\\">\");\n\t\t\t}\n\t\t\telse if (bodyCssId != null)\n\t\t\t\tftw.WriteLine(@\"<body id='{0}'><table>\", bodyCssId);\n\t\t\telse\n\t\t\t\tftw.WriteLine(\"<body><table>\");\n\n\t\t\tftw.Write(tw.ToString());\n\n\t\t\tif (this._Asp)\n\t\t\t\tftw.WriteLine(@\"</table>\");\n\t\t\telse\n\t\t\t\tftw.WriteLine(@\"</table></body></html>\");\n\n\t\t\tif (_g != null)\n\t\t\t{\n\t\t\t\t_g.Dispose();\n\t\t\t\t_g = null;\n\t\t\t}\n\t\t\tif (_bm != null)\n\t\t\t{\n\t\t\t\t_bm.Dispose();\n\t\t\t\t_bm = null;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Body: main container for the report\n\t\tpublic void BodyStart(Body b)\n\t\t{\n\t\t\tif (b.ReportItems != null && b.ReportItems.Items.Count > 0)\n\t\t\t\ttw.WriteLine(\"<tr><td><div style=\\\"POSITION: relative; \\\">\");\n\t\t}\n\n\t\tpublic void BodyEnd(Body b)\n\t\t{\n\t\t\tif (b.ReportItems != null && b.ReportItems.Items.Count > 0)\n\t\t\t\ttw.WriteLine(\"</div></td></tr>\");\n\t\t}\n\t\t\n\t\tpublic void PageHeaderStart(PageHeader ph)\n\t\t{\n\t\t\tif (ph.ReportItems != null && ph.ReportItems.Items.Count > 0)\n\t\t\t\ttw.WriteLine(\"<tr><td><div style=\\\"overflow: clip; POSITION: relative; HEIGHT: {0};\\\">\", ph.Height.CSS);\n\t\t}\n\n\t\tpublic void PageHeaderEnd(PageHeader ph)\n\t\t{\n\t\t\tif (ph.ReportItems != null && ph.ReportItems.Items.Count > 0)\n\t\t\t\ttw.WriteLine(\"</div></td></tr>\");\n\t\t}\n\t\t\n\t\tpublic void PageFooterStart(PageFooter pf)\n\t\t{\n\t\t\tif (pf.ReportItems != null && pf.ReportItems.Items.Count > 0)\n\t\t\t\ttw.WriteLine(\"<tr><td><div style=\\\"overflow: clip; POSITION: relative; HEIGHT: {0};\\\">\", pf.Height.CSS);\n\t\t}\n\n\t\tpublic void PageFooterEnd(PageFooter pf)\n\t\t{\n\t\t\tif (pf.ReportItems != null && pf.ReportItems.Items.Count > 0)\n\t\t\t\ttw.WriteLine(\"</div></td></tr>\");\n\t\t}\n\n\t\tpublic async Task Textbox(Textbox tb, string t, Row row)\n\t\t{\n            if (await tb.IsHtml(this.r, row))\t\t// we leave the text as is (except to handle unicode) when request is to treat as html\n            {                               //   this can screw up the generated HTML if not properly formed HTML\n                t = XmlUtil.HtmlAnsi(t);\n            }\n            else\n            {\t\t\t\t\t\t\t\t\t\n\t\t\t\t// make all the characters browser readable\n\t\t\t\tt = XmlUtil.XmlAnsi(t);\n\n\t\t\t\t// handle any specified bookmark\n\t\t\t\tt = Bookmark(await tb.BookmarkValue(this.r, row), t);\n\n\t\t\t\t// handle any specified actions\n\t\t\t\tt = await Action(tb.Action, row, t, await tb.ToolTipValue(this.r, row));\n\t\t\t}\n\t\t\t// determine if we're in a tablecell\n\t\t\tType tp = tb.Parent.Parent.GetType();\n\t\t\tbool bCell;\n\t\t\tif (tp == typeof(TableCell) ||\n\t\t\t\ttp == typeof(Corner) ||\n\t\t\t\ttp == typeof(DynamicColumns) ||\n\t\t\t\ttp == typeof(DynamicRows) ||\n\t\t\t\ttp == typeof(StaticRow) ||\n\t\t\t\ttp == typeof(StaticColumn) ||\n\t\t\t\ttp == typeof(Subtotal) ||\n\t\t\t\ttp == typeof(MatrixCell))\n\t\t\t\tbCell = true;\n\t\t\telse\n\t\t\t\tbCell = false;\n\n\t\t\tif (tp == typeof(Rectangle))\n\t\t\t\ttw.Write(\"<td>\");\n\n\t\t\tif (bCell)\n\t\t\t{\t// The cell has the formatting for this text\n\t\t\t\tif (t == \"\")\n\t\t\t\t\ttw.Write(\"<br />\");\t\t// must have something in cell for formating\n\t\t\t\telse\n\t\t\t\t\ttw.Write(t);\n\t\t\t}\n\t\t\telse\n\t\t\t{\t// Formatting must be specified\n\t\t\t\tstring cssName = await CssAdd(tb.Style, tb, row);\t// get the style name for this item\n\n\t\t\t\ttw.Write(\"<div class='{0}'>{1}</div>\", cssName, t);\n\t\t\t}\n\n\t\t\tif (tp == typeof(Rectangle))\n\t\t\t\ttw.Write(\"</td>\");\n\t\t}\n\n\t\tpublic async Task DataRegionNoRows(DataRegion d, string noRowsMsg)\t\t\t// no rows in table\n\t\t{\n\t\t\tif (noRowsMsg == null)\n\t\t\t\tnoRowsMsg = \"\";\n\n\t\t\tbool bTableCell = d.Parent.Parent.GetType() == typeof(TableCell);\n\n\t\t\tif (bTableCell)\n\t\t\t{\n\t\t\t\tif (noRowsMsg == \"\")\n\t\t\t\t\ttw.Write(\"<br />\");\n\t\t\t\telse\n\t\t\t\t\ttw.Write(noRowsMsg);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tstring cssName = await CssAdd(d.Style, d, null);\t// get the style name for this item\n\t\t\t\ttw.Write(\"<div class='{0}'>{1}</div>\", cssName, noRowsMsg);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Lists\n\t\tpublic async Task<bool> ListStart(List l, Row r)\n\t\t{\n\t\t\t// identifiy reportitem it if necessary\n\t\t\tstring bookmark = await l.BookmarkValue(this.r, r);\n\t\t\tif (bookmark != null)\t// \n\t\t\t\ttw.WriteLine(\"<div id=\\\"{0}\\\">\", bookmark);\t\t// can't use the table id since we're using for css style\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic async Task ListEnd(List l, Row r)\n\t\t{\n\t\t\tstring bookmark = await l.BookmarkValue(this.r, r);\n\t\t\tif (bookmark != null)\n\t\t\t\ttw.WriteLine(\"</div>\"); \n\t\t}\n\n\t\tpublic async Task ListEntryBegin(List l, Row r)\n\t\t{\n\t\t\tstring cssName = await CssAdd(l.Style, l, r, true);\t// get the style name for this item; force to be relative\n\t\t\ttw.WriteLine();\n\t\t\ttw.WriteLine(\"<div class={0}>\", cssName);\n\t\t}\n\n\t\tpublic void ListEntryEnd(List l, Row r)\n\t\t{\n\t\t\ttw.WriteLine();\n\t\t\ttw.WriteLine(\"</div>\");\n\t\t}\n\n\t\t// Tables\t\t\t\t\t// Report item table\n\t\tpublic async Task<bool> TableStart(Table t, Row row)\n\t\t{\n\t\t\tstring cssName = await CssAdd(t.Style, t, row);\t// get the style name for this item\n\n\t\t\t// Determine if report custom defn want this table to be sortable\n\t\t\tif (IsTableSortable(t))\n\t\t\t{\n\t\t\t\tthis.bScriptTableSort = true;\n\t\t\t}\n\n\t\t\tstring bookmark = await t.BookmarkValue(this.r, row);\n\t\t\tif (bookmark != null)\n\t\t\t\ttw.WriteLine(\"<div id=\\\"{0}\\\">\", bookmark);\t\t// can't use the table id since we're using for css style\n\n\t\t\t// Calculate the width of all the columns\n\t\t\tint width = await t.WidthInPixels(this.r, row);\n\t\t\tif (width <= 0)\n\t\t\t\ttw.WriteLine(\"<table id='{0}'>\", cssName);\n\t\t\telse\n\t\t\t\ttw.WriteLine(\"<table id='{0}' width={1}>\", cssName, width);\n\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic bool IsTableSortable(Table t)\n\t\t{\n\t\t\tif (t.TableGroups != null || t.Details == null || \n\t\t\t\tt.Details.TableRows == null || t.Details.TableRows.Items.Count != 1)\t\t\n\t\t\t\treturn false;\t// can't have tableGroups; must have 1 detail row\n\n\t\t\t// Determine if report custom defn want this table to be sortable\n\t\t\tbool bReturn = false;\n\t\t\tif (t.Custom != null)\n\t\t\t{\n\t\t\t\t// Loop thru all the child nodes\n\t\t\t\tforeach(XmlNode xNodeLoop in t.Custom.CustomXmlNode.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (xNodeLoop.Name == \"HTML\")\n\t\t\t\t\t{\n\t\t\t\t\t\tif (xNodeLoop.LastChild.InnerText.ToLower() == \"true\")\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbReturn = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn bReturn;\n\t\t}\n\n\t\tpublic async Task TableEnd(Table t, Row row)\n\t\t{\n\t\t\tstring bookmark = await t.BookmarkValue(this.r, row);\n\t\t\tif (bookmark != null)\n\t\t\t\ttw.WriteLine(\"</div>\"); \n\t\t\ttw.WriteLine(\"</table>\");\n\t\t\treturn;\n\t\t}\n \n\t\tpublic void TableBodyStart(Table t, Row row)\n\t\t{\n\t\t\ttw.WriteLine(\"<tbody>\");\n\t\t}\n\n\t\tpublic void TableBodyEnd(Table t, Row row)\n\t\t{\n\t\t\ttw.WriteLine(\"</tbody>\");\n\t\t}\n\n\t\tpublic void TableFooterStart(Footer f, Row row)\n\t\t{\n\t\t\ttw.WriteLine(\"<tfoot>\");\n\t\t}\n\n\t\tpublic void TableFooterEnd(Footer f, Row row)\n\t\t{\n\t\t\ttw.WriteLine(\"</tfoot>\");\n\t\t}\n\n\t\tpublic void TableHeaderStart(Header h, Row row)\n\t\t{\n\t\t\ttw.WriteLine(\"<thead>\");\n\t\t}\n\n\t\tpublic void TableHeaderEnd(Header h, Row row)\n\t\t{\n\t\t\ttw.WriteLine(\"</thead>\");\n\t\t}\n\n\t\tpublic async Task TableRowStart(TableRow tr, Row row)\n\t\t{\n\t\t\ttw.Write(\"\\t<tr\");\n\t\t\tReportLink rl = tr.Parent.Parent;\n\t\t\tVisibility v=null;\n\t\t\tTextbox togText=null;\t\t// holds the toggle text box if any\n\t\t\tif (rl is Details)\n\t\t\t{\n\t\t\t\tDetails d = (Details) rl;\n\t\t\t\tv = d.Visibility;\n\t\t\t\ttogText = d.ToggleTextbox;\n\t\t\t}\n\t\t\telse if (rl.Parent is TableGroup)\n\t\t\t{\n\t\t\t\tTableGroup tg = (TableGroup) rl.Parent;\n\t\t\t\tv = tg.Visibility;\n\t\t\t\ttogText = tg.ToggleTextbox;\n\t\t\t}\n\n\t\t\tif (v != null &&\n\t\t\t\tv.Hidden != null)\n\t\t\t{\n\t\t\t\tbool bHide = await v.Hidden.EvaluateBoolean(this.r, row);\n\t\t\t\tif (bHide)\n\t\t\t\t\ttw.Write(\" style=\\\"display:none;\\\"\");\n\t\t\t}\n\n\t\t\tif (togText != null && togText.Name != null)\n\t\t\t{\n\t\t\t\tstring name = togText.Name.Nm + \"_\" + togText.RunCount(this.r).ToString();\n\t\t\t\ttw.Write(\" id='{0}'\", name);\n\t\t\t}\n\n\t\t\ttw.Write(\">\");\n\t\t}\n\n\t\tpublic void TableRowEnd(TableRow tr, Row row)\n\t\t{\n\t\t\ttw.WriteLine(\"</tr>\");\n\t\t}\n\n\t\tpublic async Task TableCellStart(TableCell t, Row row)\n\t\t{\n\t\t\tstring cellType = t.InTableHeader? \"th\": \"td\";\n\n\t\t\tReportItem r = t.ReportItems.Items[0];\n\n\t\t\tstring cssName = await CssAdd(r.Style, r, row);\t// get the style name for this item\n\n\t\t\ttw.Write(\"<{0} id='{1}'\", cellType, cssName);\n\n\t\t\t// calculate width of column\n\t\t\tif (t.InTableHeader && t.OwnerTable.TableColumns != null)\n\t\t\t{\n\t\t\t\t// Calculate the width across all the spanned columns\n\t\t\t\tint width = 0;\n\t\t\t\tfor (int ci=t.ColIndex; ci < t.ColIndex + t.ColSpan; ci++)\n\t\t\t\t{\n\t\t\t\t\tTableColumn tc = t.OwnerTable.TableColumns.Items[ci] as TableColumn;\n\t\t\t\t\tif (tc != null && tc.Width != null)\n\t\t\t\t\t\twidth += tc.Width.PixelsX;\n\t\t\t\t}\n\t\t\t\tif (width > 0)\n\t\t\t\t\ttw.Write(\" width={0}\", width);\n\t\t\t}\n\n\t\t\tif (t.ColSpan > 1)\n\t\t\t\ttw.Write(\" colspan={0}\", t.ColSpan);\n\n\t\t\tTextbox tb = r as Textbox;\n\t\t\tif (tb != null &&\t\t\t\t// have textbox\n\t\t\t\ttb.IsToggle &&\t\t\t\t//   and its a toggle\n\t\t\t\ttb.Name != null)\t\t\t//   and need name as well\n\t\t\t{\n\t\t\t\tint groupNestCount = t.OwnerTable.GetGroupNestCount(this.r);\n\t\t\t\tif (groupNestCount > 0) // anything to toggle?\n\t\t\t\t{\n\t\t\t\t\tstring name = tb.Name.Nm + \"_\" + (tb.RunCount(this.r)+1).ToString();\n\t\t\t\t\tbScriptToggle = true;\n\n\t\t\t\t\t// need both hand and pointer because IE and Firefox use different names\n\t\t\t\t\ttw.Write(\" onClick=\\\"hideShow(this, {0}, '{1}')\\\" onMouseOver=\\\"style.cursor ='hand';style.cursor ='pointer'\\\">\", groupNestCount, name);\n                    tw.Write(\"<img class='toggle' src=\\\"plus.gif\\\" align=\\\"top\\\"/>\");\n\t\t\t\t}\n\t\t\t\telse\n                    tw.Write(\"<img src=\\\"empty.gif\\\" align=\\\"top\\\"/>\");\n\t\t\t}\n\t\t\telse\n\t\t\t\ttw.Write(\">\");\n\n\t\t\tif (t.InTableHeader)\n\t\t\t{\t\n\t\t\t\t// put the second half of the sort tags for the column; if needed\n\t\t\t\t// first half ---- <a href=\"#\" onclick=\"sort_table(this,sort_cmp_string,1,0);return false;\">\n\t\t\t\t// next half follows text  ---- <span class=\"sortarrow\">&nbsp;&nbsp;&nbsp;</span></a></th>\n\n\t\t\t\tstring sortcmp = SortType(t, tb);\t// obtain the sort type\n\t\t\t\tif (sortcmp != null)\t\t\t\t// null if sort not needed\n\t\t\t\t{\n\t\t\t\t\tint headerRows, footerRows;\n\t\t\t\t\theaderRows = t.OwnerTable.Header.TableRows.Items.Count;\t// since we're in header we know we have some rows\n\t\t\t\t\tif (t.OwnerTable.Footer != null &&\n\t\t\t\t\t\tt.OwnerTable.Footer.TableRows != null)\n\t\t\t\t\t\tfooterRows = t.OwnerTable.Footer.TableRows.Items.Count;\n\t\t\t\t\telse\n\t\t\t\t\t\tfooterRows = 0;\n\t\t\t\t\ttw.Write(\"<a href=\\\"#\\\" title='Sort' onclick=\\\"sort_table(this,{0},{1},{2});return false;\\\">\",sortcmp, headerRows, footerRows);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tprivate string SortType(TableCell tc, Textbox tb)\n\t\t{\n\t\t\t// return of null means don't sort\n\t\t\tif (tb == null || !IsTableSortable(tc.OwnerTable))\n\t\t\t\treturn null;\n\n\t\t\t// default is true if table is sortable;\n\t\t\t//   but user may place override on Textbox custom tag\n\t\t\tif (tb.Custom != null)\n\t\t\t{\n\t\t\t\t// Loop thru all the child nodes\n\t\t\t\tforeach(XmlNode xNodeLoop in tb.Custom.CustomXmlNode.ChildNodes)\n\t\t\t\t{\n\t\t\t\t\tif (xNodeLoop.Name == \"HTML\")\n\t\t\t\t\t{\n\t\t\t\t\t\tif (xNodeLoop.LastChild.InnerText.ToLower() == \"false\")\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Must find out the type of the detail column\n\t\t\tDetails d = tc.OwnerTable.Details;\n\t\t\tif (d == null)\n\t\t\t\treturn null;\n\t\t\tTableRow tr = d.TableRows.Items[0] as TableRow;\n\t\t\tif (tr == null)\n\t\t\t\treturn null;\n\t\t\tTableCell dtc = tr.TableCells.Items[tc.ColIndex] as TableCell;\n\t\t\tif (dtc == null)\n\t\t\t\treturn null;\n\t\t\tTextbox dtb = dtc.ReportItems.Items[0] as Textbox;\n\t\t\tif (dtb == null)\n\t\t\t\treturn null;\n\n\t\t\tstring sortcmp;\n\t\t\tswitch (dtb.Value.Type)\n\t\t\t{\n\t\t\t\tcase TypeCode.DateTime:\n\t\t\t\t\tsortcmp = \"sort_cmp_date\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase TypeCode.Int16:\n\t\t\t\tcase TypeCode.UInt16:\n\t\t\t\tcase TypeCode.Int32:\n\t\t\t\tcase TypeCode.UInt32:\n\t\t\t\tcase TypeCode.Int64:\n\t\t\t\tcase TypeCode.UInt64:\n\t\t\t\tcase TypeCode.Decimal:\n\t\t\t\tcase TypeCode.Single:\n\t\t\t\tcase TypeCode.Double:\n\t\t\t\t\tsortcmp = \"sort_cmp_number\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase TypeCode.String:\n\t\t\t\t\tsortcmp = \"sort_cmp_string\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase TypeCode.Empty:\t// Not a type we know how to sort\n\t\t\t\tdefault:\t\t\n\t\t\t\t\tsortcmp = null;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn sortcmp;\n\t\t}\n\n\t\tpublic void TableCellEnd(TableCell t, Row row)\n\t\t{\n\t\t\tstring cellType = t.InTableHeader? \"th\": \"td\";\n\t\t\tTextbox tb = t.ReportItems.Items[0] as Textbox;\n\t\t\tif (cellType == \"th\" && SortType(t, tb) != null)\n\t\t\t{\t// put the second half of the sort tags for the column\n\t\t\t\t// first half ---- <a href=\"#\" onclick=\"sort_table(this,sort_cmp_string,1,0);return false;\">\n\t\t\t\t// next half follows text  ---- <span class=\"sortarrow\">&nbsp;&nbsp;&nbsp;</span></a></th>\n\t\t\t\ttw.Write(\"<span class=\\\"sortarrow\\\">&nbsp;&nbsp;&nbsp;</span></a>\");\n\t\t\t}\n\n\t\t\ttw.Write(\"</{0}>\", cellType);\n\t\t\treturn;\n\t\t}\n\n        public async Task<bool> MatrixStart(Matrix m, MatrixCellEntry[,] matrix, Row r, int headerRows, int maxRows, int maxCols)\t\t\t\t// called first\n\t\t{\n\t\t\tstring bookmark = await m.BookmarkValue(this.r, r);\n\t\t\tif (bookmark != null)\n\t\t\t\ttw.WriteLine(\"<div id=\\\"{0}\\\">\", bookmark);\t\t// can't use the table id since we're using for css style\n\n\t\t\t// output some of the table styles\n\t\t\tstring cssName = await CssAdd(m.Style, m, r);\t// get the style name for this item\n\n\t\t\ttw.WriteLine(\"<table id='{0}'>\", cssName);\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void MatrixColumns(Matrix m, MatrixColumns mc)\t// called just after MatrixStart\n\t\t{\n\t\t}\n\n\t\tpublic async Task MatrixCellStart(Matrix m, ReportItem ri, int row, int column, Row r, float h, float w, int colSpan)\n\t\t{\n\t\t\tif (ri == null)\t\t\t// Empty cell?\n\t\t\t{\n\t\t\t\tif (_SkipMatrixCols == 0)\n\t\t\t\t\ttw.Write(\"<td>\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tstring cssName = await CssAdd(ri.Style, ri, r, false, h, w);\t// get the style name for this item\n\n\t\t\tawait tw.WriteAsync($\"<td id='{cssName}'\");\n\t\t\tif (colSpan != 1)\n\t\t\t{\n\t\t\t\ttw.Write(\" colspan={0}\", colSpan);\n\t\t\t\t_SkipMatrixCols=-(colSpan-1);\t// start it as negative as indicator that we need this </td>\n\t\t\t}\n\t\t\telse\n\t\t\t\t_SkipMatrixCols=0;\n\t\t\tif (ri is Textbox)\n\t\t\t{\n\t\t\t\tTextbox tb = (Textbox) ri;\n\t\t\t\tif (tb.IsToggle && tb.Name != null)\t\t// name is required for this\n\t\t\t\t{\n\t\t\t\t\tstring name = tb.Name.Nm + \"_\" + (tb.RunCount(this.r)+1).ToString();\n\n\t\t\t\t\tbScriptToggle = true;\t// we need to generate JavaScript in header\n\t\t\t\t\t// TODO -- need to calculate the hide count correctly\n\t\t\t\t\ttw.Write(\" onClick=\\\"hideShow(this, {0}, '{1}')\\\" onMouseOver=\\\"style.cursor ='hand'\\\"\", 0, name);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttw.Write(\">\");\n\t\t}\n\n\t\tpublic Task MatrixCellEnd(Matrix m, ReportItem ri, int row, int column, Row r)\n\t\t{\n\t\t\tif (_SkipMatrixCols == 0)\n\t\t\t\ttw.Write(\"</td>\");\n\t\t\telse if (_SkipMatrixCols < 0)\n\t\t\t{\n\t\t\t\ttw.Write(\"</td>\");\n\t\t\t\t_SkipMatrixCols = -_SkipMatrixCols;\n\t\t\t}\n\t\t\telse\n\t\t\t\t_SkipMatrixCols--;\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tpublic void MatrixRowStart(Matrix m, int row, Row r)\n\t\t{\n\t\t\ttw.Write(\"\\t<tr\");\n\n\t\t\ttw.Write(\">\");\n\t\t}\n\n\t\tpublic void MatrixRowEnd(Matrix m, int row, Row r)\n\t\t{\n\t\t\ttw.WriteLine(\"</tr>\");\n\t\t}\n\n\t\tpublic async Task MatrixEnd(Matrix m, Row r)\t\t\t\t// called last\n\t\t{\n\t\t\ttw.Write(\"</table>\");\n\n\t\t\tstring bookmark = await m.BookmarkValue(this.r, r);\n\t\t\tif (bookmark != null)\n\t\t\t\ttw.WriteLine(\"</div>\");\t\t\n\t\t\treturn;\n\t\t}\n\n\t\tpublic async Task Chart(Chart c, Row r, ChartBase cb)\n\t\t{\n\t\t\tstring relativeName;\n\n\t\t\tStream io = _sg.GetIOStream(out relativeName, \"png\");\n\t\t\ttry\n\t\t\t{\n\t\t\t\tcb.Save(this.r, io, ImageFormat.Png);\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tio.Flush();\n\t\t\t\tio.Close();\n\t\t\t}\n\t\t\t\n\t\t\trelativeName = FixupRelativeName(relativeName);\n\n\t\t\t// Create syntax in a string buffer\n\t\t\tStringWriter sw = new StringWriter();\n\n\t\t\tstring bookmark = await c.BookmarkValue(this.r, r);\n\t\t\tif (bookmark != null)\n\t\t\t\tsw.WriteLine(\"<div id=\\\"{0}\\\">\", bookmark);\t\t// can't use the table id since we're using for css style\n\n\t\t\tstring cssName = await CssAdd(c.Style, c, null);\t// get the style name for this item\n\n\t\t\tsw.Write(\"<img src=\\\"{0}\\\" class='{1}'\", relativeName, cssName);\n\t\t\tstring tooltip = await c.ToolTipValue(this.r, r);\n\t\t\tif (tooltip != null)\n\t\t\t\tsw.Write(\" alt=\\\"{0}\\\"\", tooltip);\n\t\t\tif (c.Height != null)\n\t\t\t\tsw.Write(\" height=\\\"{0}\\\"\", c.Height.PixelsY.ToString());\n\t\t\tif (c.Width != null)\n\t\t\t\tsw.Write(\" width=\\\"{0}\\\"\", c.Width.PixelsX.ToString());\n\t\t\tsw.Write(\">\");\n\t\t\tif (bookmark != null)\n\t\t\t\tsw.Write(\"</div>\");\n\n\t\t\ttw.Write(await Action(c.Action, r, sw.ToString(), tooltip));\n\t\t\t\n\t\t\treturn;\n\t\t}\n\n\t\tpublic async Task Image(Image i, Row r, string mimeType, Stream ioin)\n        {\n            string relativeName;\n            string suffix;\n\n            switch (mimeType)\n            {\n                case \"image/bmp\":\n                    suffix = \"bmp\";\n                    break;\n                case \"image/jpeg\":\n                    suffix = \"jpeg\";\n                    break;\n                case \"image/gif\":\n                    suffix = \"gif\";\n                    break;\n                case \"image/png\":\n                case \"image/x-png\":\n                    suffix = \"png\";\n                    break;\n                default:\n                    suffix = \"unk\";\n                    break;\n            }\n\n\n            if (i.ImageSource == ImageSourceEnum.Embedded) // embedded image in html\n            { \n                if (!string.IsNullOrWhiteSpace(i.EmbeddedImageData))\n                {\n                    relativeName = \"data:\" + mimeType + \";base64,\" + i.EmbeddedImageData;\n                }\n                else\n                {\n                    relativeName = \"data:\" + mimeType + \";base64,\" + await WriteImageToBase64String(ioin);\n                }\n              \n            }\n            else\n            {\n                relativeName = await WriteImageToFile(ioin, suffix);\n                relativeName = FixupRelativeName(relativeName);\n            }\n\n            // Create syntax in a string buffer\n            StringWriter sw = new StringWriter();\n\n            string bookmark = await i.BookmarkValue(this.r, r);\n            if (bookmark != null)\n                sw.WriteLine(\"<div id=\\\"{0}\\\">\", bookmark);     // we're using for css style\n\n            string cssName = await CssAdd(i.Style, i, null);    // get the style name for this item\n\n            sw.Write(\"<img src=\\\"{0}\\\" class='{1}'\", relativeName, cssName);\n\n            string tooltip = await i.ToolTipValue(this.r, r);\n            if (tooltip != null)\n                sw.Write(\" alt=\\\"{0}\\\"\", tooltip);\n            int h = i.Height == null ? -1 : i.Height.PixelsY;\n            int w = i.Width == null ? -1 : i.Width.PixelsX;\n            switch (i.Sizing)\n            {\n                case ImageSizingEnum.AutoSize:\n                    break;          // this is right\n                case ImageSizingEnum.Clip:\n                    break;          // not sure how to clip it    \n                case ImageSizingEnum.Fit:\n                    if (h > 0)\n                        sw.Write(\" height=\\\"{0}\\\"\", h.ToString());\n                    if (w > 0)\n                        sw.Write(\" width=\\\"{0}\\\"\", w.ToString());\n                    break;\n                case ImageSizingEnum.FitProportional:\n                    break;          // would have to create an image to handle this\n            }\n\n            sw.Write(\"/>\");\n\n            if (bookmark != null)\n                sw.Write(\"</div>\");\n\n            tw.Write(await Action(i.Action, r, sw.ToString(), tooltip));\n        }\n\n        private async Task<string> WriteImageToBase64String(Stream ioin)\n        {\n            using (MemoryStream ms = new MemoryStream())\n            {\n                ioin.Position = 0;\n                await ioin.CopyToAsync(ms);\n                byte[] imageBytes = ms.ToArray();\n                return Convert.ToBase64String(imageBytes);\n            }\n        }\n\n        private async Task<string> WriteImageToFile(Stream ioin, string suffix)\n        {\n            string relativeName;\n            Stream io = _sg.GetIOStream(out relativeName, suffix);\n            try\n            {\n                if (ioin.CanSeek)       // ioin.Length requires Seek support\n                {\n                    byte[] ba = new byte[ioin.Length];\n                    ioin.Read(ba, 0, ba.Length);\n                    io.Write(ba, 0, ba.Length);\n                }\n                else\n                {\n                    byte[] ba = new byte[1000];     // read a 1000 bytes at a time\n                    while (true)\n                    {\n                        int length = ioin.Read(ba, 0, ba.Length);\n                        if (length <= 0)\n                            break;\n                        io.Write(ba, 0, length);\n                    }\n                }\n            }\n            finally\n            {\n                await io.FlushAsync();\n                io.Close();\n            }\n\n            return relativeName;\n        }\n\n        public async Task Line(Line l, Row r)\n\t\t{\n\t\t\tbool bVertical;\n\t\t\tstring t;\n\t\t\tif (l.Height == null || l.Height.PixelsY > 0)\t// only handle horizontal rule\n\t\t\t{\n\t\t\t\tif (l.Width == null || l.Width.PixelsX > 0)\t//    and vertical rules\n\t\t\t\t\treturn;\n\t\t\t\tbVertical = true;\n\t\t\t\tt = \"<TABLE style=\\\"border-collapse:collapse;BORDER-STYLE: none;WIDTH: {0}; POSITION: absolute; LEFT: {1}; TOP: {2}; HEIGHT: {3}; BACKGROUND-COLOR:{4};\\\"><TBODY><TR style=\\\"WIDTH:{0}\\\"><TD style=\\\"WIDTH:{0}\\\"></TD></TR></TBODY></TABLE>\";\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tbVertical = false;\t\t\t\n\t\t\t\tt = \"<TABLE style=\\\"border-collapse:collapse;BORDER-STYLE: none;WIDTH: {0}; POSITION: absolute; LEFT: {1}; TOP: {2}; HEIGHT: {3}; BACKGROUND-COLOR:{4};\\\"><TBODY><TR style=\\\"HEIGHT:{3}\\\"><TD style=\\\"HEIGHT:{3}\\\"></TD></TR></TBODY></TABLE>\";\n\t\t\t}\n\n\t\t\tstring width, left, top, height, color;\n\t\t\tStyle s = l.Style;\n\n\t\t\tleft = l.Left == null? \"0px\": l.Left.CSS;\n\t\t\ttop = l.Top == null? \"0px\": l.Top.CSS;\n\n\t\t\tif (bVertical)\n\t\t\t{\n\t\t\t\theight = l.Height == null? \"0px\": l.Height.CSS;\n\t\t\t\t// width comes from the BorderWidth\n\t\t\t\tif (s != null && s.BorderWidth != null && s.BorderWidth.Default != null)\n\t\t\t\t\twidth = await s.BorderWidth.Default.EvaluateString(this.r, r);\n\t\t\t\telse\n\t\t\t\t\twidth = \"1px\";\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\twidth = l.Width == null? \"0px\": l.Width.CSS;\n\t\t\t\t// height comes from the BorderWidth\n\t\t\t\tif (s != null && s.BorderWidth != null && s.BorderWidth.Default != null)\n\t\t\t\t\theight = await s.BorderWidth.Default.EvaluateString(this.r, r);\n\t\t\t\telse\n\t\t\t\t\theight = \"1px\";\n\t\t\t}\n\n\t\t\tif (s != null && s.BorderColor != null && s.BorderColor.Default != null)\n\t\t\t\tcolor = await s.BorderColor.Default.EvaluateString(this.r, r);\n\t\t\telse\n\t\t\t\tcolor = \"black\";\n\t\t\t\n\t\t\ttw.WriteLine(t, width, left, top, height, color);\n\t\t\treturn;\n\t\t}\n\n\t\tpublic async Task<bool> RectangleStart(Rdl.Rectangle rect, Row r)\n\t\t{\n\t\t\tstring cssName = await CssAdd(rect.Style, rect, r);\t// get the style name for this item\n\n\t\t\tstring bookmark = await rect.BookmarkValue(this.r, r);\n\t\t\tif (bookmark != null)\n\t\t\t\ttw.WriteLine(\"<div id=\\\"{0}\\\">\", bookmark);\t\t// can't use the table id since we're using for css style\n\n\t\t\t// Calculate the width of all the columns\n\t\t\tint width = rect.Width == null? -1: rect.Width.PixelsX;\n\t\t\tif (width < 0)\n\t\t\t\ttw.WriteLine(\"<table id='{0}'><tr>\", cssName);\n\t\t\telse\n\t\t\t\ttw.WriteLine(\"<table id='{0}' width={1}><tr>\", cssName, width);\n\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic async Task RectangleEnd(Rdl.Rectangle rect, Row r)\n\t\t{\n\t\t\ttw.WriteLine(\"</tr></table>\");\n\t\t\tstring bookmark = await rect.BookmarkValue(this.r, r);\n\t\t\tif (bookmark != null)\n\t\t\t\ttw.WriteLine(\"</div>\"); \n\t\t\treturn;\n\t\t}\n\n\t\t// Subreport:  \n\t\tpublic async Task Subreport(Subreport s, Row r)\n\t\t{\n\t\t\tstring cssName = await CssAdd(s.Style, s, r);\t// get the style name for this item\n\n\t\t\ttw.WriteLine(\"<div class='{0}'>\", cssName);\n\n            await s.ReportDefn.Run(this);\n\t\t\t\n\t\t\ttw.WriteLine(\"</div>\");\n            return;\n        }\n\t\tpublic void GroupingStart(Grouping g)\t\t\t// called at start of grouping\n\t\t{\n\t\t}\n\t\tpublic void GroupingInstanceStart(Grouping g)\t// called at start for each grouping instance\n\t\t{\n\t\t}\n\t\tpublic void GroupingInstanceEnd(Grouping g)\t// called at start for each grouping instance\n\t\t{\n\t\t}\n\t\tpublic void GroupingEnd(Grouping g)\t\t\t// called at end of grouping\n\t\t{\n\t\t}\n\t\tpublic Task RunPages(Pages pgs)\t// we don't have paging turned on for html\n\t\t{\n            return Task.CompletedTask;\n        }\n\t}\n\t\n\n\tclass CssCacheEntry\n\t{\n\t\tstring _Css;\t\t\t\t\t// css \n\t\tstring _Name;\t\t\t\t\t// name of entry\n\n\t\tpublic CssCacheEntry(string css, string name)\n\t\t{\n\t\t\t_Css = css;\n\t\t\t_Name = name;\t\t\t\t\n\t\t}\n\n\t\tpublic string Css\n\t\t{\n\t\t\tget { return  _Css; }\n\t\t\tset { _Css = value; }\n\t\t}\n\n\t\tpublic string Name\n\t\t{\n\t\t\tget { return  _Name; }\n\t\t\tset { _Name = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Render/RenderPdf_iTextSharp.cs",
    "content": "/*\n *\n Copyright (C) 2004-2008  fyiReporting Software, LLC\n Copyright (C) 2011  Peter Gill <peter@majorsilence.com>\n Copyright (c) 2010 devFU Pty Ltd, Josh Wilson and Others (http://reportfu.org)\n\n\n\n This file has been modified with suggestiong from forum users.\n *Obtained from Forum, User: sinnovasoft http://www.fyireporting.com/forum/viewtopic.php?t=1049\n\n  Refactored by Daniel Romanowski http://dotlink.pl\n\n  This file is part of the fyiReporting RDL project.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n*/\n\nusing System;\nusing Majorsilence.Reporting.Rdl;\nusing System.IO;\nusing System.Collections;\nusing System.Collections.Generic;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\nusing Imaging = Majorsilence.Drawing.Imaging;\n#else\nusing Draw2 = System.Drawing;\nusing Imaging = System.Drawing.Imaging;\n#endif\nusing System.Text;\nusing iTextSharp.text;\nusing iTextSharp.text.pdf;\nusing Majorsilence.Reporting.Rdl.Utility;\nusing System.Security;\nusing System.Linq;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    ///<summary>\n    /// Renders a report to PDF.   This is a page oriented formatting renderer.\n    ///</summary>\n    [SecuritySafeCritical]\n    internal class RenderPdf_iTextSharp : RenderBase\n    {\n        #region private\n\n        Document _pdfDocument;\n        PdfContentByte _contentByte;\n        MemoryStream _ms;\n\n        int _osPlatform = (int)Environment.OSVersion.Platform;\n        int _osVersion = (int)Environment.OSVersion.Version.Major;\n\n        bool _dejavuFonts = false;\n\n        /// <summary>\n        /// List itextSharp Basefont added\n        /// </summary>\n        private List<BaseFont> _baseFonts = new List<BaseFont>();\n\n        /// <summary>\n        /// List font name\n        /// </summary>\n        private List<string> _baseFontsName = new List<string>();\n\n        #endregion\n\n        static RenderPdf_iTextSharp()\n        {\n            iTextSharp.text.FontFactory.RegisterDirectories();\n        }\n\n        #region properties\n\n        private bool IsOSX =>\n            System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(\n                System.Runtime.InteropServices.OSPlatform.OSX);\n\n        /// <summary> \n        /// Default I get embedded fonts in Fonts folder in current \n        /// folder RdlEngine.dll in, can set font folder here \n        /// </summary> \n        private string FontFolder\n        {\n            get\n            {\n                //Kind of MacOSX\n                if (IsOSX)\n                {\n                    return \"/System/Library/Fonts/Supplemental\";\n                }\n\n                if (_osPlatform == (int)PlatformID.Unix)\n                {\n                    if (System.IO.Directory.Exists(\"/usr/share/fonts/truetype/msttcorefonts\"))\n                    {\n                        return \"/usr/share/fonts/truetype/msttcorefonts\";\n                    }\n                    else if (System.IO.Directory.Exists(\"/usr/share/fonts/truetype/dejavu\"))\n                    {\n                        _dejavuFonts = true;\n                        return \"/usr/share/fonts/truetype/dejavu\";\n                    }\n                    else\n                    {\n                        _dejavuFonts = true;\n                        return Environment.GetFolderPath(Environment.SpecialFolder.Fonts);\n                    }\n                }\n\n                // get parent of System folder to have Windows folder\n                DirectoryInfo dirWindowsFolder =\n                    Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.System));\n                // Concatenate Fonts folder onto Windows folder.\n                return Path.Combine(dirWindowsFolder.FullName, \"Fonts\");\n                // Results in full path e.g. \"C:\\Windows\\Fonts\" \n            }\n        }\n\n        #endregion\n\n        #region ctor\n\n        public RenderPdf_iTextSharp(Report report, IStreamGen sg) : base(report, sg)\n        {\n            _pdfDocument = new Document();\n            _ms = new MemoryStream();\n        }\n\n        #endregion\n\n        #region implementations\n\n        protected internal override void CreateDocument()\n        {\n            Report r = base.Report();\n            PdfWriter writer = PdfWriter.GetInstance(_pdfDocument, _ms);\n            _pdfDocument.Open();\n            _contentByte = writer.DirectContent;\n            _pdfDocument.AddAuthor(r.Author);\n            _pdfDocument.AddCreationDate();\n            _pdfDocument.AddCreator(\"Majorsilence Reporting - RenderPdf_iTextSharp\");\n            _pdfDocument.AddSubject(r.Description);\n            _pdfDocument.AddTitle(r.Name);\n        }\n\n        protected internal override void EndDocument(Stream sg)\n        {\n            _pdfDocument.Close();\n            //write out ItextSharp pdf stream to RDL stream\n            byte[] contentbyte = _ms.ToArray();\n            sg.Write(contentbyte, 0, contentbyte.Length);\n            _ms.Dispose();\n            _baseFonts.Clear();\n            _baseFontsName.Clear();\n        }\n\n        protected internal override void CreatePage()\n        {\n            _pdfDocument.SetPageSize(new iTextSharp.text.Rectangle(PageSize.xWidth, PageSize.yHeight));\n            _pdfDocument.NewPage();\n        }\n\n        protected internal override void AfterProcessPage()\n        {\n        }\n\n        protected internal override void AddBookmark(PageText pt)\n        {\n        }\n\n        protected internal override void AddLine(float x, float y, float x2, float y2, float width, Draw2.Color c,\n            BorderStyleEnum ls)\n        {\n            // Get the line color\t\t\t\n            _contentByte.SetRgbColorStroke(c.R, c.G, c.B);\n            _contentByte.SetLineWidth(width);\n            // Get the line style Dotted - Dashed - Solid\n\n            switch (ls)\n            {\n                case BorderStyleEnum.Dashed:\n                    _contentByte.SetLineDash(new float[] { width * 3, width }, 0);\n                    break;\n                case BorderStyleEnum.Dotted:\n                    _contentByte.SetLineDash(new float[] { width }, 0);\n                    break;\n                case BorderStyleEnum.Solid:\n                default:\n                    _contentByte.SetLineDash(new float[] { }, 0);\n                    break;\n            }\n\n            _contentByte.MoveTo(x, PageSize.yHeight - y);\n            _contentByte.LineTo(x2, PageSize.yHeight - y2);\n            _contentByte.Stroke();\n        }\n\n        protected internal override void AddImage(string name, StyleInfo si, Imaging.ImageFormat imf, float x, float y,\n            float width, float height, Draw2.RectangleF clipRect, byte[] im, int samplesW, int samplesH, string url,\n            string tooltip)\n        {\n            iTextSharp.text.Image pdfImg = iTextSharp.text.Image.GetInstance(im);\n            pdfImg.ScaleAbsolute(width, height); //zoom\t\t  \n            pdfImg.SetAbsolutePosition(x, PageSize.yHeight - y - height); //Set position\n            _pdfDocument.Add(pdfImg);\n            //add url\n            if (url != null)\n                _pdfDocument.Add(new Annotation(x, PageSize.yHeight - y - PageSize.topMargin, width + x, height, url));\n            //add tooltip\n            if (!string.IsNullOrEmpty(tooltip))\n                _pdfDocument.Add(new Annotation(x, PageSize.yHeight - y - PageSize.topMargin, width + x, height,\n                    tooltip));\n            iAddBorder(si, x - si.PaddingLeft, y - si.PaddingTop,\n                height + si.PaddingTop + si.PaddingBottom,\n                width + si.PaddingLeft + si.PaddingRight); // add any required border\n        }\n\n        protected internal override void AddPolygon(Draw2.PointF[] pts, StyleInfo si, string url)\n        {\n            if (si.BackgroundColor.IsEmpty)\n                return; // nothing to do\n\n            // Get the fill color - could be a gradient or pattern etc...\n            Draw2.Color c = si.BackgroundColor;\n            iAddPoints(pts);\n            _contentByte.SetRgbColorFill(c.R, c.G, c.B);\n            _contentByte.ClosePathFillStroke();\n        }\n\n        protected internal override void AddRectangle(float x, float y, float height, float width, StyleInfo si,\n            string url, string tooltip)\n        {\n            // Draw background rectangle if needed\n            if (!si.BackgroundColor.IsEmpty && height > 0 && width > 0)\n            {\n                // background color, height and width are specified\n                iAddFillRect(x, y, width, height, si);\n            }\n\n            iAddBorder(si, x, y, height, width); // add any required border\n\n            if (url != null)\n                _pdfDocument.Add(new Annotation(x, PageSize.yHeight - y, width + x, height, url));\n            if (!string.IsNullOrEmpty(tooltip))\n                _pdfDocument.Add(new Annotation(x, PageSize.yHeight - y, width + x, height, tooltip));\n\n            return;\n        }\n\n\n        protected internal override void AddPie(float x, float y, float height, float width, StyleInfo si, string url,\n            string tooltip)\n        {\n            // Draw background rectangle if needed\n            if (!si.BackgroundColor.IsEmpty && height > 0 && width > 0)\n            {\n                // background color, height and width are specified\n                iAddFillRect(x, y, width, height, si);\n            }\n\n            iAddBorder(si, x, y, height, width); // add any required border\n\n            //add url\n            if (url != null)\n                _pdfDocument.Add(new Annotation(x, PageSize.yHeight - y, width + x, height, url));\n            //add tooltip\n            if (!string.IsNullOrEmpty(tooltip))\n                _pdfDocument.Add(new Annotation(x, PageSize.yHeight - y, width + x, height, tooltip));\n            return;\n        }\n\n        protected internal override void AddCurve(Draw2.PointF[] pts, StyleInfo si)\n        {\n            if (pts.Length > 2)\n            {\n                // do a spline curve\n                Draw2.PointF[] tangents = iGetCurveTangents(pts);\n                iDoCurve(pts, tangents, si);\n            }\n            else\n            {\n                // we only have two points; just do a line segment\n                AddLine(pts[0].X, pts[0].Y, pts[1].X, pts[1].Y, si);\n            }\n        }\n\n        protected internal override void AddEllipse(float x, float y, float height, float width, StyleInfo si,\n            string url)\n        {\n            if (si.BStyleTop != BorderStyleEnum.None)\n            {\n                switch (si.BStyleTop)\n                {\n                    case BorderStyleEnum.Dashed:\n                        _contentByte.SetLineDash(new float[] { '3', '2' }, 0);\n                        break;\n                    case BorderStyleEnum.Dotted:\n                        _contentByte.SetLineDash(new float[] { '2' }, 0);\n                        break;\n                    case BorderStyleEnum.Solid:\n                    default:\n                        _contentByte.SetLineDash(new float[] { }, 0);\n                        break;\n                }\n\n                _contentByte.SetRgbColorStroke(si.BColorTop.R, si.BColorTop.G, si.BColorTop.B);\n            }\n\n            float RadiusX = (width / 2.0f);\n            float RadiusY = (height / 2.0f);\n            _contentByte.Ellipse(x, PageSize.yHeight - y, x + RadiusX, y + RadiusY);\n            if (!si.BackgroundColor.IsEmpty)\n            {\n                _contentByte.SetRgbColorStrokeF(si.BackgroundColor.R, si.BackgroundColor.G, si.BackgroundColor.B);\n            }\n\n            if (si.BackgroundColor.IsEmpty)\n                _contentByte.ClosePathStroke();\n            else\n                _contentByte.ClosePathFillStroke();\n        }\n\n        #endregion\n\n        #region private methods\n\n        /// <summary>\n        /// Font name , for my application almost fonts  will be unicode and embedded\n        /// </summary>\n        /// <returns></returns>\n        private string iFontNameNormalize(string face)\n        {\n            string faceName = face;\n            switch (face.ToLower())\n            {\n                case \"times\":\n                case \"times-roman\":\n                case \"times roman\":\n                case \"timesnewroman\":\n                case \"times new roman\":\n                case \"timesnewromanps\":\n                case \"timesnewromanpsmt\":\n                case \"serif\":\n                    faceName = \"Times-Roman\";\n                    break;\n                case \"helvetica\":\n                case \"arial\":\n                case \"arialmt\":\n                case \"sans-serif\":\n                case \"sans serif\":\n                default:\n                    //faceName = \"Arial\";\n                    break;\n                case \"courier\":\n                case \"couriernew\":\n                case \"courier new\":\n                case \"couriernewpsmt\":\n                case \"monospace\":\n                    faceName = \"Courier New\";\n                    break;\n                case \"symbol\":\n                    faceName = \"Symbol\";\n                    break;\n                case \"zapfdingbats\":\n                case \"wingdings\":\n                case \"wingding\":\n                    faceName = \"ZapfDingbats\";\n                    break;\n            }\n\n            return faceName;\n        }\n\n        public bool IsAsian(string[] text)\n        {\n            bool asian = false;\n            for (var i = 0; i < text.Length; ++i)\n            {\n                asian |= text[i].Any(c => (c >= 0x3040 && c <= 0x309f) || //Hiragana\n                                          (c >= 0x30a0 && c <= 0x30ff) || //Katanka\n                                          (c >= 0xE00 && c <= 0xE7F) || //Thai\n                                          c >= 0x4e00);\n                if (asian)\n                {\n                    break;\n                }\n            }\n\n            return asian;\n        }\n\n        protected internal override void AddText(float x, float y, float height, float width, string[] sa, StyleInfo si,\n            float[] tw, bool bWrap, string url, bool bNoClip, string tooltip)\n        {\n            BaseFont bf = null;\n            string face = iFontNameNormalize(si.FontFamily);\n            string fontname = \"\";\n            bool fonttype1 = true;\n            var folder = FontFolder; //Call to determine folder and set value of _dejavuFonts;\n            if (face == \"Times-Roman\")\n            {\n                if (si.IsFontBold() && si.FontStyle == FontStyleEnum.Italic)\n                {\n                    //OSX\n                    if (IsOSX)\n                    {\n                        face = \"TimesNewRomanPS-BoldItalicMT\";\n                        fontname = \"Times New Roman Bold Italic.ttf\";\n                    }\n                    else\n                    {\n                        face = _dejavuFonts ? \"DejaVu Serif Condensed Bold Italic\" : \"Times-BoldItalic\";\n                        fontname = (_dejavuFonts ? \"DejaVuSerifCondensed-BoldItalic.ttf\" : \"timesbi.ttf\");\n                    }\n                }\n                else if (si.IsFontBold())\n                {\n                    //OSX\n                    if (IsOSX)\n                    {\n                        face = \"TimesNewRomanPS-BoldMT\";\n                        fontname = \"Times New Roman Bold.ttf\";\n                    }\n                    else\n                    {\n                        face = _dejavuFonts ? \"DejaVu Serif Condensed Bold\" : \"Times-Bold\";\n                        fontname = (_dejavuFonts ? \"DejaVuSerifCondensed-Bold.ttf\" : \"timesbd.ttf\");\n                    }\n                }\n                else if (si.FontStyle == FontStyleEnum.Italic)\n                {\n                    //OSX\n                    if (IsOSX)\n                    {\n                        face = \"TimesNewRomanPS-ItalicMT\";\n                        fontname = \"Times New Roman Italic.ttf\";\n                    }\n                    else\n                    {\n                        face = _dejavuFonts ? \"DejaVu Serif Condensed Italic\" : \"Times-Italic\";\n                        fontname = (_dejavuFonts ? \"DejaVuSerifCondensed-Italic.ttf\" : \"timesi.ttf\");\n                    }\n                }\n                else\n                {\n                    //OSX\n                    if (IsOSX)\n                    {\n                        face = \"TimesNewRomanPSMT\";\n                        fontname = \"Times New Roman.ttf\";\n                    }\n                    else\n                    {\n                        face = _dejavuFonts ? \"DejaVu Serif Condensed\" : face;\n                        fontname = (_dejavuFonts ? \"DejaVuSerifCondensed.ttf\" : \"times.ttf\");\n                    }\n                }\n\n                fonttype1 = false;\n            }\n            else if (face == \"Arial\")\n            {\n                if (IsAsian(sa))\n                {\n                    face = \"Arial Unicode MS\";\n                    fontname = \"arialuni.ttf\";\n                }\n                else if (si.IsFontBold() && si.FontStyle == FontStyleEnum.Italic)\n                {\n                    //OSX\n                    if (IsOSX)\n                    {\n                        face = \"Arial BoldItalicMT\";\n                        fontname = \"Arial Bold Italic.ttf\";\n                    }\n                    else\n                    {\n                        face = _dejavuFonts ? \"DejaVu Sans Condensed Bold Oblique\" : \"Arial-BoldItalic\";\n                        fontname = (_dejavuFonts ? \"DejaVuSansCondensed-BoldOblique.ttf\" : \"arialbi.ttf\");\n                    }\n                }\n                else if (si.IsFontBold())\n                {\n                    //OSX\n                    if (IsOSX)\n                    {\n                        face = \"Arial-BoldMT\";\n                        fontname = \"Arial Bold.ttf\";\n                    }\n                    else\n                    {\n                        face = _dejavuFonts ? \"DejaVu Sans Condensed Bold\" : \"Arial-Bold\";\n                        fontname = (_dejavuFonts ? \"DejaVuSansCondensed-Bold.ttf\" : \"arialbd.ttf\");\n                    }\n                }\n                else if (si.FontStyle == FontStyleEnum.Italic)\n                {\n                    //OSX\n                    if (IsOSX)\n                    {\n                        face = \"Arial-ItalicMT\";\n                        fontname = \"Arial Italic.ttf\";\n                    }\n                    else\n                    {\n                        face = _dejavuFonts ? \"DejaVu Sans Condensed Oblique\" : \"Arial-Italic\";\n                        fontname = (_dejavuFonts ? \"DejaVuSansCondensed-Oblique.ttf\" : \"ariali.ttf\");\n                    }\n                }\n                else\n                {\n                    //OSX\n                    if (IsOSX)\n                    {\n                        face = \"ArialMT\";\n                        fontname = \"Arial.ttf\";\n                    }\n                    else\n                    {\n                        face = _dejavuFonts ? \"DejaVu Sans Condensed\" : face;\n                        fontname = (_dejavuFonts ? \"DejaVuSansCondensed.ttf\" : \"arial.ttf\");\n                    }\n                }\n\n                fonttype1 = false;\n            }\n            else if (face == \"Courier New\")\n            {\n                if (si.IsFontBold() && si.FontStyle == FontStyleEnum.Italic)\n                {\n                    //OSX\n                    if (IsOSX)\n                    {\n                        face = \"CourierNewPS-BoldItalicMT\";\n                        fontname = \"Courier New Bold Italic.ttf\";\n                    }\n                    else\n                    {\n                        face = _dejavuFonts ? \"DejaVu Sans Mono Bold Oblique\" : \"Courier New-BoldItalic\";\n                        fontname = (_dejavuFonts ? \"DejaVuSansMono-BoldOblique.ttf\" : \"courbi.ttf\");\n                    }\n                }\n                else if (si.IsFontBold())\n                {\n                    //OSX\n                    if (IsOSX)\n                    {\n                        face = \"CourierNewPS-BoldMT\";\n                        fontname = \"Courier New Bold.ttf\";\n                    }\n                    else\n                    {\n                        face = _dejavuFonts ? \"DejaVu Sans Mono Bold\" : \"Courier New-Bold\";\n                        fontname = (_dejavuFonts ? \"DejaVuSansMono-Oblique.ttf\" : \"courbd.ttf\");\n                    }\n                }\n                else if (si.FontStyle == FontStyleEnum.Italic)\n                {\n                    //OSX\n                    if (IsOSX)\n                    {\n                        face = \"CourierNewPS-ItalicMT\";\n                        fontname = \"Courier New Italic.ttf\";\n                    }\n                    else\n                    {\n                        face = _dejavuFonts ? \"DejaVu Sans Mono Oblique\" : \"Courier New-Italic\";\n                        fontname = (_dejavuFonts ? \"DejaVuSansMono-Oblique.ttf\" : \"couri.ttf\");\n                    }\n                }\n                else\n                {\n                    //OSX\n                    if (IsOSX)\n                    {\n                        face = \"CourierNewPSMT\";\n                        fontname = \"Courier New.ttf\";\n                    }\n                    else\n                    {\n                        face = _dejavuFonts ? \"DejaVu Sans Mono\" : face;\n                        fontname = (_dejavuFonts ? \"DejaVuSansMono.ttf\" : \"cour.ttf\");\n                    }\n                }\n\n                fonttype1 = false;\n            }\n            else\n            {\n                int style = si.IsFontBold() ? iTextSharp.text.Font.BOLD : 0;\n                style += si.FontStyle == FontStyleEnum.Italic ? iTextSharp.text.Font.ITALIC : 0;\n                iTextSharp.text.Font ff = FontFactory.GetFont(face, BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 10f, style);\n                bf = ff.BaseFont;\n                if (bf == null)\n                {\n                    if (IsOSX)\n                    {\n                        face = \"ArialMT\";\n                        fontname = \"Arial.ttf\";\n                    }\n                    else\n                    {\n                        face = _dejavuFonts ? \"DejaVu Sans Condensed\" : \"Arial\";\n                        fontname = (_dejavuFonts ? \"DejaVuSansCondensed.ttf\" : \"arial.ttf\");\n                    }\n                }\n\n                /*                if (si.IsFontBold() &&\n                            si.FontStyle == FontStyleEnum.Italic)   // bold and italic?\n                                    face = face + \"-BoldOblique\";\n                                else if (si.IsFontBold())           // just bold?\n                                    face = face + \"-Bold\";\n                                else if (si.FontStyle == FontStyleEnum.Italic)\n                                    face = face + \"-Oblique\";*/\n                fonttype1 = false;\n            }\n\n            if (bf == null)\n            {\n                //Get index of fontname in List font name\n                int indexbf = _baseFontsName.FindIndex(delegate(string _fontname) { return _fontname == face; });\n                //If not found then add new BaseFont\n                if (indexbf == -1)\n                {\n                    _baseFontsName.Add(face);\n                    if (fonttype1)\n                    {\n                        bf = BaseFont.CreateFont(face, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);\n                    }\n                    else\n                    {\n                        string path = System.IO.Path.Combine(folder, fontname);\n                        bf = BaseFont.CreateFont(path, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);\n                    }\n\n                    _baseFonts.Add(bf);\n                }\n                else\n                    //Get from List\n                {\n                    bf = _baseFonts[indexbf];\n                }\n            }\n\n            // Loop thru the lines of text\n            for (int i = 0; i < sa.Length; i++)\n            {\n                string text = sa[i];\n                float textwidth = bf.GetWidthPoint(text, si.FontSize);\n                // Calculate the x positino\n                float startX = x + si.PaddingLeft; // TODO: handle tb_rl\n                float startY = y + si.PaddingTop + (i * si.FontSize); // TODO: handle tb_rl\n                int align = 0;\n                if (si.WritingMode == WritingModeEnum.lr_tb)\n                {\n                    // TODO: not sure what alignment means with tb_lr so I'll leave it out for now\n                    switch (si.TextAlign)\n                    {\n                        case TextAlignEnum.Center:\n                            if (width > 0)\n                            {\n                                startX = x + si.PaddingLeft + ((width - si.PaddingLeft - si.PaddingRight) / 2) -\n                                         (textwidth / 2);\n                                align = Element.ALIGN_CENTER;\n                            }\n\n                            break;\n                        case TextAlignEnum.Right:\n                            if (width > 0)\n                            {\n                                startX = x + width - textwidth - si.PaddingRight;\n                                align = Element.ALIGN_RIGHT;\n                            }\n\n                            break;\n                        case TextAlignEnum.Left:\n                        default:\n                            align = Element.ALIGN_LEFT;\n                            break;\n                    }\n\n                    // Calculate the y position\n                    switch (si.VerticalAlign)\n                    {\n                        case VerticalAlignEnum.Middle:\n                            if (height <= 0)\n                                break;\n\n                            // calculate the middle of the region\n                            startY = y + si.PaddingTop + ((height - si.PaddingTop - si.PaddingBottom) / 2) -\n                                     (si.FontSize / 2);\n                            // now go up or down depending on which line\n                            if (sa.Length == 1)\n                                break;\n                            if (sa.Length % 2 == 0) // even number\n                            {\n                                startY = startY - (((sa.Length / 2) - i) * si.FontSize) + (si.FontSize / 2);\n                            }\n                            else\n                            {\n                                startY = startY - (((sa.Length / 2) - i) * si.FontSize);\n                            }\n\n                            break;\n                        case VerticalAlignEnum.Bottom:\n                            if (height <= 0)\n                                break;\n\n                            startY = y + height - si.PaddingBottom - (si.FontSize * (sa.Length - i));\n                            break;\n                        case VerticalAlignEnum.Top:\n                        default:\n                            break;\n                    }\n                }\n                else\n                {\n                    //25072008 GJL - Move x in a little - it draws to close to the edge of the rectangle (25% of the font size seems to work!) and Center or right align vertical text\n                    startX += si.FontSize / 4;\n\n                    switch (si.TextAlign)\n                    {\n                        case TextAlignEnum.Center:\n                            if (height > 0)\n                                startY = y + si.PaddingLeft + ((height - si.PaddingLeft - si.PaddingRight) / 2) -\n                                         (textwidth / 2);\n                            break;\n                        case TextAlignEnum.Right:\n                            if (width > 0)\n                                startY = y + height - textwidth - si.PaddingRight;\n                            break;\n                        case TextAlignEnum.Left:\n                        default:\n                            break;\n                    }\n                }\n\n                // Draw background rectangle if needed (only put out on the first line, since we do whole rectangle)\n                if (!si.BackgroundColor.IsEmpty && height > 0 && width > 0 && i == 0)\n                {\n                    // background color, height and width are specified\n                    iAddFillRect(x, y, width, height, si.BackgroundColor);\n                }\n\n                // Set the clipping path, (Itext have no clip)\n                if (height > 0 && width > 0)\n                {\n                    _contentByte.SetRgbColorFill(si.Color.R, si.Color.G, si.Color.B);\n\n                    if (si.WritingMode == WritingModeEnum.lr_tb)\n                    {\n                        //If textline after measure with word break can fit just simple show Text\n                        if (width >= textwidth)\n                        {\n                            _contentByte.BeginText();\n                            _contentByte.SetFontAndSize(bf, si.FontSize);\n                            _contentByte.SetTextMatrix(startX, (PageSize.yHeight - startY - si.FontSize));\n                            _contentByte.ShowText(text);\n                            _contentByte.EndText();\n                        }\n                        else\n                        {\n                            //else use Column text to wrap or clip (wrap: for example a text like an URL so word break is not working here, itextsharp ColumnText do the work for us)\n                            ColumnText ct = new ColumnText(_contentByte);\n                            Phrase myPhrase = new Phrase(text, new iTextSharp.text.Font(bf, si.FontSize));\n                            ct.SetSimpleColumn(myPhrase, x + si.PaddingLeft, PageSize.yHeight - startY,\n                                x + width - si.PaddingRight, PageSize.yHeight - y - si.PaddingBottom - height, 10f,\n                                align);\n                            ct.Go();\n                        }\n                    }\n                    else\n                    {\n                        //Not checked\n                        double rads = -283.0 / 180.0;\n                        double radsCos = Math.Cos(rads);\n                        double radsSin = Math.Sin(rads);\n                        _contentByte.BeginText();\n                        _contentByte.SetFontAndSize(bf, si.FontSize);\n                        _contentByte.SetTextMatrix((float)radsCos, (float)radsSin, (float)-radsSin, (float)radsCos,\n                            startX, PageSize.yHeight - startY);\n                        _contentByte.ShowText(text);\n                        _contentByte.EndText();\n                    }\n\n                    //add URL\n                    if (url != null)\n                        _pdfDocument.Add(new Annotation(x, PageSize.yHeight - (y + height), width + x,\n                            PageSize.yHeight - y, url));\n                    //add tooltip\n                    if (tooltip != null)\n                        _pdfDocument.Add(new Annotation(x, PageSize.yHeight - (y + height), width + x,\n                            PageSize.yHeight - y, tooltip));\n                }\n\n                // Handle underlining etc.\n                float maxX;\n                switch (si.TextDecoration)\n                {\n                    case TextDecorationEnum.Underline:\n                        maxX = width > 0 ? Math.Min(x + width, startX + textwidth) : startX + textwidth;\n                        AddLine(startX, startY + si.FontSize + 1, maxX, startY + si.FontSize + 1, 1, si.Color,\n                            BorderStyleEnum.Solid);\n                        break;\n                    case TextDecorationEnum.LineThrough:\n                        maxX = width > 0 ? Math.Min(x + width, startX + textwidth) : startX + textwidth;\n                        AddLine(startX, startY + (si.FontSize / 2) + 1, maxX, startY + (si.FontSize / 2) + 1, 1,\n                            si.Color, BorderStyleEnum.Solid);\n                        break;\n                    case TextDecorationEnum.Overline:\n                        maxX = width > 0 ? Math.Min(x + width, startX + textwidth) : startX + textwidth;\n                        AddLine(startX, startY + 1, maxX, startY + 1, 1, si.Color, BorderStyleEnum.Solid);\n                        break;\n                    case TextDecorationEnum.None:\n                    default:\n                        break;\n                }\n            }\n\n            iAddBorder(si, x, y, height, width); // add any required border\n\n            return;\n        }\n\n        /// <summary>\n        /// Add a filled rectangle\n        /// </summary>\n        /// <returns></returns>\n        private void iAddFillRect(float x, float y, float width, float height, Draw2.Color c)\n        {\n            // Get the fill color\n            _contentByte.SetRgbColorFill(c.R, c.G, c.B);\n            _contentByte.Rectangle(x, PageSize.yHeight - y - height, width, height);\n            _contentByte.Fill();\n        }\n\n        /// <summary>\n        /// Add border\n        /// </summary>\n        private void iAddBorder(StyleInfo si, float x, float y, float height, float width)\n        {\n            // Handle any border required   TODO: optimize border by drawing a rect when possible\n            if (height <= 0 || width <= 0) // no bounding box to use\n                return;\n\n            float ybottom = (y + height);\n            float xright = x + width;\n            if (si.BStyleTop != BorderStyleEnum.None && si.BWidthTop > 0)\n                AddLine(x, y, xright, y, si.BWidthTop, si.BColorTop, si.BStyleTop);\n\n            if (si.BStyleRight != BorderStyleEnum.None && si.BWidthRight > 0)\n                AddLine(xright, y, xright, ybottom, si.BWidthRight, si.BColorRight, si.BStyleRight);\n\n            if (si.BStyleLeft != BorderStyleEnum.None && si.BWidthLeft > 0)\n                AddLine(x, y, x, ybottom, si.BWidthLeft, si.BColorLeft, si.BStyleLeft);\n\n            if (si.BStyleBottom != BorderStyleEnum.None && si.BWidthBottom > 0)\n                AddLine(x, ybottom, xright, ybottom, si.BWidthBottom, si.BColorBottom, si.BStyleBottom);\n\n            return;\n        }\n\n        private void iAddPoints(Draw2.PointF[] pts)\n        {\n            if (pts.Length > 0)\n            {\n                _contentByte.MoveTo(pts[0].X, PageSize.yHeight - pts[0].Y);\n                for (int pi = 1; pi < pts.Length; pi++)\n                {\n                    _contentByte.LineTo(pts[pi].X, PageSize.yHeight - pts[pi].Y);\n                }\n            }\n\n            return;\n        }\n\n        private void iAddFillRect(float x, float y, float width, float height, StyleInfo si)\n        {\n            Draw2.Color c;\n            // Get the fill color - could be a gradient or pattern etc...\n            c = si.BackgroundColor;\n            _contentByte.SetRgbColorFill(c.R, c.G, c.B);\n            _contentByte.Rectangle(x, PageSize.yHeight - y - height, width, height);\n            //_contentByte.ClosePathFillStroke();\n            _contentByte.Fill();\n        }\n\n        //25072008 GJL Draw a bezier curve\n        private void iAddCurve(float X1, float Y1, float X2, float Y2, float X3, float Y3, float X4, float Y4,\n            StyleInfo si, string url)\n        {\n            if (si.BStyleTop != BorderStyleEnum.None)\n            {\n                switch (si.BStyleTop)\n                {\n                    case BorderStyleEnum.Dashed:\n                        _contentByte.SetLineDash(new float[] { '3', '2' }, 0);\n                        break;\n                    case BorderStyleEnum.Dotted:\n                        _contentByte.SetLineDash(new float[] { '2' }, 0);\n                        break;\n                    case BorderStyleEnum.Solid:\n                    default:\n                        _contentByte.SetLineDash(new float[] { }, 0);\n                        break;\n                }\n\n                _contentByte.SetRgbColorStroke(si.BColorTop.R, si.BColorTop.G, si.BColorTop.B);\n            }\n\n            if (!si.BackgroundColor.IsEmpty)\n            {\n                _contentByte.SetRgbColorStrokeF(si.BackgroundColor.R, si.BackgroundColor.G, si.BackgroundColor.B);\n            }\n\n            _contentByte.CurveTo(X1, PageSize.yHeight - Y1, X2, PageSize.yHeight - Y1, X3, PageSize.yHeight - Y3);\n            if (si.BackgroundColor.IsEmpty)\n                _contentByte.ClosePathStroke();\n            else\n                _contentByte.ClosePathFillStroke();\n        }\n\n        private void iDoCurve(Draw2.PointF[] points, Draw2.PointF[] tangents, StyleInfo si)\n        {\n            int i;\n\n            for (i = 0; i < points.Length - 1; i++)\n            {\n                int j = i + 1;\n\n                float x0 = points[i].X;\n                float y0 = points[i].Y;\n\n                float x1 = points[i].X + tangents[i].X;\n                float y1 = points[i].Y + tangents[i].Y;\n\n                float x2 = points[j].X - tangents[j].X;\n                float y2 = points[j].Y - tangents[j].Y;\n\n                float x3 = points[j].X;\n                float y3 = points[j].Y;\n                iAddCurve(x0, y0, x1, y1, x2, y2, x3, y3, si, null);\n            }\n        }\n\n        private Draw2.PointF[] iGetCurveTangents(Draw2.PointF[] points)\n        {\n            float tension = .5f; // This  is the tension used on the DrawCurve GDI call.\n            float coefficient = tension / 3.0f;\n            int i;\n\n            Draw2.PointF[] tangents = new Draw2.PointF[points.Length];\n\n            // initialize everything to zero to begin with\n            for (i = 0; i < tangents.Length; i++)\n            {\n                tangents[i].X = 0;\n                tangents[i].Y = 0;\n            }\n\n            if (tangents.Length <= 2)\n                return tangents;\n            int count = tangents.Length;\n            for (i = 0; i < count; i++)\n            {\n                int r = i + 1;\n                int s = i - 1;\n\n                if (r >= points.Length)\n                    r = points.Length - 1;\n                if (s < 0)\n                    s = 0;\n\n                tangents[i].X += (coefficient * (points[r].X - points[s].X));\n                tangents[i].Y += (coefficient * (points[r].Y - points[s].Y));\n            }\n\n            return tangents;\n        }\n\n        #endregion\n    }\n}"
  },
  {
    "path": "RdlEngine/Render/RenderRtf.cs",
    "content": "\n\nusing System;\nusing Majorsilence.Reporting.Rdl;\nusing System.IO;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Xml;\nusing System.Globalization;\nusing System.Threading.Tasks;\n\n\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\nusing Majorsilence.Drawing.Imaging;\n#else\nusing Draw2 = System.Drawing;\nusing System.Drawing.Imaging;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\n    ///<summary>\n    /// Renders a report to HTML.   This handles some page formating but does not do true page formatting.\n    ///</summary>\n    internal class RenderRtf: IPresent\n\t{\n        static readonly char[] HEXCHARS = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };\n        \n        Report r;\t\t\t\t\t// report\n\t\tStringWriter tw;\t\t\t// temporary location where the output is going\n\t\tIStreamGen _sg;\t\t\t\t// stream generater\n        System.Collections.Generic.List<string> _Fonts;        // list of fonts used\n        System.Collections.Generic.List<Draw2.Color> _Colors;         // list of colors used\n        Draw2.Bitmap _bm=null;\t\t\t// bm and\n        Draw2.Graphics _g=null;\t\t\t//\t\t  g are needed when calculating string heights\n\n        // some matrix generation variables\n        int[] _MatrixColumnWidths;    // column widths for matrix\n        int _MatrixHeaderRows;\n        int _MatrixRows;            // # rows in matrix\n        int _MatrixCols;\n        int _MatrixCellSpan;        // work variable for matrixes\n        MatrixCellEntry[,] _MatrixData;\n\n\t\tpublic RenderRtf(Report rep, IStreamGen sg)\n\t\t{\n\t\t\tr = rep;\n\t\t\t_sg = sg;\t\t\t\t\t// We need this in future\n\n\t\t\ttw = new StringWriter();\t// will hold the bulk of the RTF until we generate\n            _Fonts = new System.Collections.Generic.List<string>();\n            _Colors = new System.Collections.Generic.List<Draw2.Color>();\n        }\n        public void Dispose() \n\t\t{\n\t\t\t// These should already be cleaned up; but in case of an unexpected error \n\t\t\t//   these still need to be disposed of\n\t\t\tif (_bm != null)\n\t\t\t\t_bm.Dispose();\n\t\t\tif (_g != null)\n\t\t\t\t_g.Dispose();\n\t\t}\n\n\t\tpublic Report Report()\n\t\t{\n\t\t\treturn r;\n\t\t}\n\n\t\tpublic bool IsPagingNeeded()\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tpublic void Start()\t\t\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tprivate Draw2.Graphics GetGraphics\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_g == null)\n\t\t\t\t{\n\t\t\t\t\t_bm = new Draw2.Bitmap(10, 10);\n\t\t\t\t\t_g = Draw2.Graphics.FromImage(_bm);\n\t\t\t\t}\n\t\t\t\treturn _g;\n\t\t\t}\n\t\t}\n\n\t\tpublic async Task End()\n\t\t{\n            TextWriter ftw = _sg.GetTextWriter();\t// the final text writer location\n\n            await ftw.WriteAsync(@\"{\\rtf1\\ansi\");      // start of the rtf file\n\n            // information group\n            PutInformationGroup(ftw);\n\n            // page metrics\n            PutPageMetrics(ftw);\n            \n            // do the font table\n            PutFontTable(ftw);\n            \n            // do the color table\n            PutColorTable(ftw);\n\n            // write out the body of the rtf file\n            ftw.Write(tw.ToString());\n            tw.Close();\n            tw = null;\n            \n            ftw.WriteLine(@\"}\");            // end of the rtf file\n\n\t\t\tif (_g != null)\n\t\t\t{\n\t\t\t\t_g.Dispose();\n\t\t\t\t_g = null;\n\t\t\t}\n\t\t\tif (_bm != null)\n\t\t\t{\n\t\t\t\t_bm.Dispose();\n\t\t\t\t_bm = null;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n        private void PutPageMetrics(TextWriter ftw)\n        {\n            ftw.Write(@\"\\paperw{0}\\paperh{1}\\margl{2}\\margr{3}\\margt{4}\\margb{5}\",\n                RSize.TwipsFromPoints(r.PageWidthPoints),\n                RSize.TwipsFromPoints(r.PageHeightPoints),\n                r.ReportDefinition.LeftMargin.Twips,\n                r.ReportDefinition.RightMargin.Twips,\n                r.ReportDefinition.TopMargin.Twips,\n                r.ReportDefinition.BottomMargin.Twips);\n        }\n\n        private void PutColorTable(TextWriter ftw)\n        {\n            ftw.Write(@\"{\\colortbl;\");\n            foreach (Draw2.Color color in _Colors)\n            {\n                ftw.Write(@\"\\red{0}\\green{1}\\blue{2};\", color.R, color.G, color.B);\n            }\n            ftw.Write(\"}\");     // close out the fonttbl section\n        }\n\n        private void PutFontTable(TextWriter ftw)\n        {\n            ftw.Write(@\"{\\fonttbl\");\n            int ifont = 0;\n            foreach (string font in _Fonts)\n            {\n                ftw.Write(\"{\");\n                string family = GetFontFamily(font);\n                ftw.Write(@\"\\f{0}\\f{1} {2};\", ifont, family, font);\n                ftw.Write(\"}\");\n                ifont++;\n            }\n            ftw.Write(\"}\");     // close out the fonttbl section\n        }\n\n        private void PutInformationGroup(TextWriter ftw)\n        {\n            ftw.Write(@\"{\\info\");\n            if (r.Name != null)\n            {\n                ftw.Write(@\"{\\\");\n                ftw.Write(@\"title {0}\", r.Name);\n                ftw.Write(\"}\");\n            }\n\n            if (r.Author != null)\n            {\n                ftw.Write(@\"{\\\");\n                ftw.Write(@\"author {0}\", r.Author);\n                ftw.Write(\"}\");\n            }\n\n            if (r.Description != null)\n            {\n                ftw.Write(@\"{\\\");\n                ftw.Write(@\"subject {0}\", r.Description);\n                ftw.Write(\"}\");\n            }\n\n            ftw.Write(\"{\");\n            DateTime dt = DateTime.Now;\n            ftw.Write(@\"\\creattime\\yr{0}\\mo{1}\\dy{2}\\hr{3}\\min{4}\\sec{5}\",\n                dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second);\n            ftw.Write(\"}\");\n\n            ftw.Write(@\"}\");            // end of information group\n        }\n\n        private string GetFontFamily(string font)\n        {\n            //  RTF support following families\n            /*\n             \\fnil Unknown or default fonts (the default) Not applicable\n            \\froman Roman, proportionally spaced serif fonts Times New Roman, Palatino\n            \\fswiss Swiss, proportionally spaced sans serif fonts Arial\n            \\fmodern Fixed-pitch serif and sans serif fonts Courier New, Pica\n            \\fscript Script fonts Cursive\n            \\fdecor Decorative fonts Old English, ITC Zapf Chancery\n            \\ftech Technical, symbol, and mathematical fonts Symbol\n            \\fbidi Arabic, Hebrew, or other bidirectional font Miriam \n            */\n\n            font = font.ToLowerInvariant();\n            if (font.StartsWith(\"arial\") || font.StartsWith(\"helvetica\"))\n                return \"swiss\";\n            if (font.StartsWith(\"times\") || font.StartsWith(\"palatino\"))\n                return \"roman\";\n            if (font.StartsWith(\"courier\") || font.StartsWith(\"pica\"))\n                return \"modern\";\n            if (font.StartsWith(\"cursive\"))\n                return \"script\";\n            if (font.StartsWith(\"old english\") || font.StartsWith(\"itc zapf\"))\n                return \"decor\";\n            if (font.StartsWith(\"symbol\"))\n                return \"tech\";\n            return \"nil\";\n        }\n\n\t\t// Body: main container for the report\n\t\tpublic void BodyStart(Body b)\n\t\t{\n\t\t}\n\n\t\tpublic void BodyEnd(Body b)\n\t\t{\n\t\t}\n\t\t\n\t\tpublic void PageHeaderStart(PageHeader ph)\n\t\t{\n\t\t}\n\n\t\tpublic void PageHeaderEnd(PageHeader ph)\n\t\t{\n\t\t}\n\t\t\n\t\tpublic void PageFooterStart(PageFooter pf)\n\t\t{\n\t\t}\n\n\t\tpublic void PageFooterEnd(PageFooter pf)\n\t\t{\n\t\t}\n\n\t\tpublic async Task Textbox(Textbox tb, string t, Row row)\n\t\t{\n            if (await tb.IsHtml(this.r, row))\t\t    \n            {                                   // just do escape chars > 128?\n                t = RtfAnsi(t);\n            }\n            else\n            {\t\t\t\t\t\t\t\t\t\n\t\t\t\t// make all the characters readable\n\t\t\t\tt = EscapeText(t);\n\t\t\t}\n\t\t\t// determine if we're in a tablecell\n            bool bCell = InTable(tb);\n\n            if (t != \"\")\n            {\n                tw.Write(\"{\");\n                await DoStyle(tb.Style, row);\n                tw.Write(t);\n                tw.Write(\"}\");\n            }\n            if (bCell)\n                tw.Write(@\"\\cell\");\n\n\t\t}\n\n        private static bool InTable(ReportItem tb)\n        {\n            Type tp = tb.Parent.Parent.GetType();\n            return (tp == typeof(TableCell));\n               //(tp == typeof(TableCell) ||\n//                tp == typeof(Corner) ||\n//                tp == typeof(DynamicColumns) ||\n//                tp == typeof(DynamicRows) ||\n//                tp == typeof(StaticRow) ||\n//                tp == typeof(StaticColumn) ||\n//                tp == typeof(Subtotal) ||\n                //tp == typeof(MatrixCell));\n            //return bCell;\n        }\n\n        private string EscapeText(string s)\n        {\n\t\t\tStringBuilder rs = new StringBuilder(s.Length);\n\n\t\t\tforeach (char c in s)\n\t\t\t{\n                if (c == '{' || c == '}' || c == '\\\\')\n                    rs.AppendFormat(@\"\\{0}\", c);\n                else if (c == '\\n')         // newline?\n                    rs.Append(@\"\\line\");\n                else if ((int)c <= 127)\t// in ANSI range\n                    rs.Append(c);\n                else\n                {\n                    rs.AppendFormat(@\"\\u{0}?\", (int)c);\n                }\n            }\n\t\t\treturn rs.ToString();\n\t\t}\n\n        private string RtfAnsi(string s)\n        {\n            StringBuilder rs = new StringBuilder(s.Length);\n            foreach (char c in s)\n            {\n                if ((int)c <= 127)   // in ANSI range \n                    rs.Append(c);\n                else\n                    rs.Append(@\"\\u\" + (int)c + \"?\");\n            }\n            return rs.ToString();\n        } \n\n        private async Task DoStyle(Style style, Row row)\n        {\n            if (style == null)\n                return;\n\n            StyleInfo si = await style.GetStyleInfo(r, row);\n\n//            tw.Write(@\"\\plain\");        // reset current attributes\n\n            // Handle the font\n            if (!_Fonts.Contains(si.FontFamily))\n                _Fonts.Add(si.FontFamily);\n            int fc = _Fonts.IndexOf(si.FontFamily);\n\n            tw.Write(@\"\\f{0} \", fc);\n\n            if (si.IsFontBold())\n                tw.Write(@\"\\b\");\n            if (si.FontStyle== FontStyleEnum.Italic)\n                tw.Write(@\"\\i\");\n            switch (si.TextDecoration)\n            {\n                case TextDecorationEnum.Underline:\n                    tw.Write(@\"\\ul\");\n                    break;\n                case TextDecorationEnum.LineThrough:\n                    tw.Write(@\"\\strike\");\n                    break;\n                default:\n                    break;\n            }\n\n            tw.Write(@\"\\fs{0}\", (int) Math.Round(si.FontSize * 2,0));        // font size\n\n            // Handle the color\n            int ic;\n            if (!_Colors.Contains(si.Color))\n                _Colors.Add(si.Color);\n            ic = _Colors.IndexOf(si.Color)+1;\n\n            tw.Write(@\"\\cf{0} \", ic);\n        }\n        \n\t\tpublic async Task DataRegionNoRows(DataRegion d, string noRowsMsg)\t\t\t// no rows in table\n\t\t{\n\t\t\tif (noRowsMsg == null)\n\t\t\t\tnoRowsMsg = \"\";\n\n\t\t\tbool bTableCell = d.Parent.Parent.GetType() == typeof(TableCell);\n\n            await DoStyle(d.Style, null);\n            tw.Write(noRowsMsg);\n\t\t\tif (bTableCell)\n\t\t\t{\n                tw.Write(@\"\\cell\");\n\t\t\t}\n\t\t}\n\n\t\t// Lists\n\t\tpublic Task<bool> ListStart(List l, Row r)\n\t\t{\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic Task ListEnd(List l, Row r)\n\t\t{\n            return Task.CompletedTask;\n        }\n\n\t\tpublic Task ListEntryBegin(List l, Row r)\n        {\n            return Task.CompletedTask;\n        }\n\n\t\tpublic void ListEntryEnd(List l, Row r)\n\t\t{\n\t\t}\n\n\t\t// Tables\t\t\t\t\t// Report item table\n\t\tpublic Task<bool> TableStart(Table t, Row row)\n\t\t{\n            tw.Write(@\"\\par{\");\n \n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic bool IsTableSortable(Table t)\n\t\t{\n            return false;\t// can't have tableGroups; must have 1 detail row\n\t\t}\n\n\t\tpublic Task TableEnd(Table t, Row row)\n\t\t{\n            tw.Write(@\"}\");\n            return Task.CompletedTask;\n\t\t}\n \n\t\tpublic void TableBodyStart(Table t, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic void TableBodyEnd(Table t, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic void TableFooterStart(Footer f, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic void TableFooterEnd(Footer f, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic void TableHeaderStart(Header h, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic void TableHeaderEnd(Header h, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic async Task TableRowStart(TableRow tr, Row row)\n\t\t{\n            Table t = null;\n            Header head = null;\n            for (ReportLink rl = tr.Parent.Parent; rl != null; rl = rl.Parent)\n            {\n                if (rl is Table)\n                {\n                    t = rl as Table;\n                    break;\n                }\n                else if (rl is Header)\n                    head = rl as Header;\n            }\n            if (t == null)\n                return;\n\n            tw.Write(@\"\\trowd \\trql\\trgaph108\\trrh0\\trleft236\");\n            if (head != null && head.RepeatOnNewPage)       // repeat table header on multiple pages\n                tw.Write(@\"\\trhdr\");\n\n            int pos=0;\n\n            int ci=0;\n            foreach (TableColumn tc in t.TableColumns)\n            {\n                pos += tc.Width.Twips;\n                string border=@\"\\clbrdrt\\brdrth\\clbrdrl\\brdrs\\clbrdrb\\brdrs\\clbrdrr\\brdrs\";\n                if (ci < tr.TableCells.Items.Count)\n                {\n                    ReportItem ri = tr.TableCells.Items[ci].ReportItems[0];\n                    if (ri.Style != null)\n                    {\n                        StyleInfo si = await ri.Style.GetStyleInfo(r, row);\n                        border = string.Format(@\"\\clbrdrt\\{0}\\clbrdrl\\{1}\\clbrdrb\\{2}\\clbrdrr\\{3}\",\n                            GetBorderStyle(si.BStyleTop),\n                            GetBorderStyle(si.BStyleLeft),\n                            GetBorderStyle(si.BStyleBottom),\n                            GetBorderStyle(si.BStyleRight));\n\n                    }\n                } \n                tw.Write(@\"{1}\\cellx{0}\", pos, border);\n            }\n            tw.Write(@\"\\pard \\intbl\");\n\t\t}\n\n        private string GetBorderStyle(BorderStyleEnum borderStyleEnum)\n        {\n            string bs;\n            /*\n\\brdrs Single-thickness border.\n\\brdrth Double-thickness border.\n\\brdrsh Shadowed border.\n\\brdrdb Double border.\n\\brdrdot Dotted border.\n\\brdrdash Dashed border.\n\\brdrhair Hairline border.\n\\brdrinset Inset border.\n\\brdrdashsm Dashed border (small).\n\\brdrdashd Dot-dashed border.\n\\brdrdashdd Dot-dot-dashed border.\n\\brdroutset Outset border.\n             */\n            switch (borderStyleEnum)\n            {\n                case BorderStyleEnum.Dashed:\n                    bs = \"brdrdash\"; break;\n                case BorderStyleEnum.Dotted:\n                    bs = \"brdrdot\"; break;\n                case BorderStyleEnum.Double:\n                    bs = \"brdrdb\"; break;\n                case BorderStyleEnum.Inset:\n                    bs = \"brdrinset\"; break;\n                case BorderStyleEnum.None:\n                    bs = \"brdrnil\"; break;\n                case BorderStyleEnum.Outset:\n                    bs = \"brdroutset\"; break;\n                case BorderStyleEnum.Ridge:\n                case BorderStyleEnum.Solid:\n                case BorderStyleEnum.Groove:\n                default:\n                    bs = \"brdrs\"; break;\n            }\n            return bs;\n        }\n\n\t\tpublic void TableRowEnd(TableRow tr, Row row)\n\t\t{\n\t\t\ttw.WriteLine(@\"\\row\");\n\t\t}\n\n\t\tpublic Task TableCellStart(TableCell t, Row row)\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tpublic void TableCellEnd(TableCell t, Row row)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n        public Task<bool> MatrixStart(Matrix m, MatrixCellEntry[,] matrix, Row r, int headerRows, int maxRows, int maxCols)\t\t\t\t// called first\n\t\t{\n            _MatrixCellSpan = 0;\n            _MatrixCols = maxCols;\n            _MatrixRows = maxRows;\n            _MatrixHeaderRows = headerRows;\n            _MatrixData = matrix;\n\n            float[] widths = m.ColumnWidths(this._MatrixData, maxCols);\n            _MatrixColumnWidths = new int[maxCols];\n            for (int i = 0; i < maxCols; i++)\n                _MatrixColumnWidths[i] = RSize.TwipsFromPoints(widths[i]);\n\n            tw.Write(@\"\\par{\");\n            return Task.FromResult(true);\n\t\t}\n\n\t\tpublic void MatrixColumns(Matrix m, MatrixColumns mc)\t// called just after MatrixStart\n\t\t{\n\t\t}\n\n\t\tpublic async Task MatrixCellStart(Matrix m, ReportItem ri, int row, int column, Row r, float h, float w, int colSpan)\n\t\t{\n            _MatrixCellSpan = colSpan;      // save this so that we can put out the right number of \\cell \n\n            if (column != 0)\n                return;\n\n            // Handle start of new row\n            tw.Write(@\"\\trowd \\trql\\trgaph108\\trrh0\\trleft236\");\n            if (row < _MatrixHeaderRows)       // repeat table header on multiple pages\n                tw.Write(@\"\\trhdr\");\n\n            int pos = 0;\n\n            foreach (int width in _MatrixColumnWidths)\n            {\n                pos += width;\n                string border;\n                if (ri != null && ri.Style != null)\n                {\n                    StyleInfo si = await ri.Style.GetStyleInfo(this.r, r);\n                    border = string.Format(@\"\\clbrdrt\\{0}\\clbrdrl\\{1}\\clbrdrb\\{2}\\clbrdrr\\{3}\",\n                        GetBorderStyle(si.BStyleTop),\n                        GetBorderStyle(si.BStyleLeft),\n                        GetBorderStyle(si.BStyleBottom),\n                        GetBorderStyle(si.BStyleRight));\n\n                }\n                else\n                    border = @\"\\clbrdrt\\brdrs\\clbrdrl\\brdrs\\clbrdrb\\brdrs\\clbrdrr\\brdrs\";\n                tw.Write(@\"{1}\\cellx{0}\", pos, border);\n            }\n            tw.Write(@\"\\pard \\intbl\");\n\n        }\n\n        public Task MatrixCellEnd(Matrix m, ReportItem ri, int row, int column, Row r)\n\t\t{\n            tw.Write(@\"\\cell\");\n            return Task.CompletedTask;\n\t\t}\n\n\t\tpublic void MatrixRowStart(Matrix m, int row, Row r)\n\t\t{\n            // we handle RowStart when the column is 0 so that we have a ReportItem to figure out the border information\n        }\n\n\t\tpublic void MatrixRowEnd(Matrix m, int row, Row r)\n\t\t{\n\t\t\ttw.WriteLine(@\"\\row\");\n\t\t}\n\n\t\tpublic Task MatrixEnd(Matrix m, Row r)\t\t\t\t// called last\n\t\t{\n            _MatrixCellSpan = _MatrixCols = _MatrixRows = _MatrixHeaderRows = 0;\n            _MatrixData = null;\n            _MatrixColumnWidths = null;\n            tw.WriteLine(@\"}\");\n            return Task.CompletedTask;\n\t\t}\n\n\t\tpublic Task Chart(Chart c, Row row, ChartBase cb)\n\t\t{\n           Draw2.Image im = cb.Image(r);\n            \n            PutImage(im, im.Width, im.Height);\n            \n            if (InTable(c))\n                tw.Write(@\"\\cell\");\n\n            return Task.CompletedTask;\n        }\n        public Task Image(Image i, Row r, string mimeType, Stream ioin)\n        {\n            using (Draw2.Image im = Draw2.Image.FromStream(ioin))\n            {\n                PutImage(im, i.Width == null ? 0 : i.Width.PixelsX, i.Height == null ? 0 : i.Height.PixelsY);\n            }\n\n            if (InTable(i))\n                tw.Write(@\"\\cell\");\n            //switch (i.Sizing)\n            //{\n            //    case ImageSizingEnum.AutoSize:\n            //        break;          // this is right\n            //    case ImageSizingEnum.Clip:\n            //        break;          // not sure how to clip it    \n            //    case ImageSizingEnum.Fit:\n            //        if (h > 0)\n            //            sw.Write(\" height=\\\"{0}\\\"\", h.ToString());\n            //        if (w > 0)\n            //            sw.Write(\" width=\\\"{0}\\\"\", w.ToString());\n            //        break;\n            //    case ImageSizingEnum.FitProportional:\n            //        break;          // would have to create an image to handle this\n            //}\n\n            return Task.CompletedTask;\n        }\n        /// <summary>\n        /// Put an image stream out.   Use by Chart and Image\n        /// </summary>\n        /// <param name=\"ioin\"></param>\n        /// <param name=\"width\"></param>\n        /// <param name=\"height\"></param>\n\t\tvoid PutImage(Draw2.Image im, int width, int height)\n\t\t{\n            MemoryStream ostrm = new MemoryStream();\n            ImageFormat imf;\n            imf = ImageFormat.Png;\n            im.Save(ostrm, imf);\n            byte[] ba = ostrm.ToArray();\n            ostrm.Close();\n            tw.Write('{');\n            // convert height/width to twips\n            // ???? not sure what picw pich units should really be??\n            int h = GetTwipsFromPixels(height <= 0 ? im.Height : height);\n            int w = GetTwipsFromPixels(width <= 0 ? im.Width : width);\n            int imw_twip = GetTwipsFromPixels(im.Width);\n            int imh_twip = GetTwipsFromPixels(im.Height);\n            tw.Write(@\"\\pict\\pngblip\\picwgoal{2}\\pichgoal{3} \",\n                w, h, imw_twip, imh_twip);\n            //tw.Write(@\"\\pict\\jpegblip\\picw423\\pich423\\picwgoal{2}\\pichgoal{3} \",\n            //    w, h, imw_twip, imh_twip);\n\n            foreach (byte b in ba)\n            {\n                tw.Write(HEXCHARS[(byte)((b >> 4) & 0x0f)]);\n                tw.Write(HEXCHARS[(byte)(b & 0x0f)]);\n            }\n\n            tw.Write('}');\n            \n            return;\n\t\t}\n\n        private int GetTwipsFromPixels(int pixels)\n        {\n            return (int)Math.Round(RSize.PointsFromPixels(GetGraphics, pixels) * 20, 0);\n        }\n\n\t\tpublic Task Line(Line l, Row r)\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tpublic Task<bool> RectangleStart(Rdl.Rectangle rect, Row r)\n\t\t{\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic Task RectangleEnd(Rdl.Rectangle rect, Row r)\n\t\t{\n            return Task.CompletedTask;\n        }\n\n\t\t// Subreport:  \n\t\tpublic Task Subreport(Subreport s, Row r)\n\t\t{\n            return Task.CompletedTask;\n        }\n\t\tpublic void GroupingStart(Grouping g)\t\t\t// called at start of grouping\n\t\t{\n\t\t}\n\t\tpublic void GroupingInstanceStart(Grouping g)\t// called at start for each grouping instance\n\t\t{\n\t\t}\n\t\tpublic void GroupingInstanceEnd(Grouping g)\t// called at start for each grouping instance\n\t\t{\n\t\t}\n\t\tpublic void GroupingEnd(Grouping g)\t\t\t// called at end of grouping\n\t\t{\n\t\t}\n\t\tpublic Task RunPages(Pages pgs)\t// we don't have paging turned on for html\n\t\t{\n            return Task.CompletedTask;\n        }\n\t}\n\t\n}\n"
  },
  {
    "path": "RdlEngine/Render/RenderTif.cs",
    "content": "/* ====================================================================\n   Copyright (C) 2008  samuelchoi - donated to RDL Project\n   Copyright (C) 2004-2008  fyiReporting Software, LLC\n   Copyright (C) 2011  Peter Gill <peter@majorsilence.com>  -- most of the drawing originally came from Viewer\n\n   This file is part of the fyiReporting RDL project.\n\t\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n\n   For additional information, email info@fyireporting.com or visit\n   the website www.fyiReporting.com.\n*/\n#if !DRAWINGCOMPAT\nusing System;\nusing Majorsilence.Reporting.Rdl;\nusing System.IO;\nusing System.Collections;\nusing System.Collections.Generic;\nusing Draw2 = System.Drawing;\nusing System.Drawing.Imaging;\n\nusing System.Text;\nusing System.Runtime.InteropServices;\nusing System.Threading.Tasks;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\n    ///<summary> \n    /// Renders a report to TIF.   This is a page oriented formatting renderer. \n    ///</summary> \n    internal class RenderTif : IPresent\n    {\n        Report r;               // report \n        Stream tw;               // where the output is going \n\n        Draw2.Bitmap _tif;\n\n        float DpiX;\n        float DpiY;\n\n        bool _RenderColor;\n\n        public RenderTif(Report rep, IStreamGen sg)\n        {\n            r = rep;\n            tw = sg.GetStream();\n            _RenderColor = true;\n        }\n\n        public void Dispose() { } \n\n        /// <summary>\n        /// Set RenderColor to false if you want to create a fax compatible tiff in black and white\n        /// </summary>\n        internal bool RenderColor\n        {\n            get { return _RenderColor; }\n            set { _RenderColor = value; }\n        }\n\n        public Report Report()\n        {\n            return r;\n        }\n\n        public bool IsPagingNeeded()\n        {\n            return true;\n        }\n\n        public void Start()\n        {\n        }\n\n        public Task End()\n        {\n            return Task.CompletedTask;\n        }\n\n        public async Task RunPages(Pages pgs)   // this does all the work \n        {\n            int pageNo = 1;\n\n            // STEP: processing a page. \n            foreach (Page p in pgs)\n            {\n                Draw2.Bitmap bm = CreateObjectBitmap();\n                Draw2.Graphics g = Draw2.Graphics.FromImage(bm);\n\n                g.PageUnit = Draw2.GraphicsUnit.Pixel;\n                g.ScaleTransform(1, 1);\n\n                DpiX = g.DpiX;\n                DpiY = g.DpiY;\n\n                // STEP: Fill backgroup \n                g.FillRectangle(Draw2.Brushes.White, 0F, 0F, (float)bm.Width, (float)bm.Height);\n\n                // STEP: draw page to bitmap \n                await ProcessPage(g, p);\n\n                // STEP: \n                Draw2.Bitmap bm2 = ConvertToBitonal(bm);\n\n                if (pageNo == 1)\n                    _tif = bm2;\n\n                SaveBitmap(_tif, bm2, tw, pageNo);\n\n                pageNo++;\n            }\n\n            if (_tif != null)\n            {\n                // STEP: prepare encoder parameters \n                Draw2.Imaging.EncoderParameters encoderParams = new Draw2.Imaging.EncoderParameters(1);\n                encoderParams.Param[0] = new Draw2.Imaging.EncoderParameter(\n                    Draw2.Imaging.Encoder.SaveFlag, (long)Draw2.Imaging.EncoderValue.Flush\n                );\n\n                // STEP: \n                _tif.SaveAdd(encoderParams);\n            }\n\n            return;\n        }\n\n        private async Task ProcessPage(Draw2.Graphics g, IEnumerable p)\n        {\n            foreach (PageItem pi in p)\n            {\n                if (pi is PageTextHtml)\n                {   // PageTextHtml is actually a composite object (just like a page) \n                    await ProcessHtml(pi as PageTextHtml, g);\n                    continue;\n                }\n\n                if (pi is PageLine)\n                {\n                    PageLine pl = pi as PageLine;\n                    DrawLine(\n                        pl.SI.BColorLeft, pl.SI.BStyleLeft, pl.SI.BWidthLeft,\n                        g, PixelsX(pl.X), PixelsY(pl.Y), PixelsX(pl.X2), PixelsY(pl.Y2)\n                    );\n                    continue;\n                }\n\n                Draw2.RectangleF rect = new Draw2.RectangleF(PixelsX(pi.X), PixelsY(pi.Y), PixelsX(pi.W), PixelsY(pi.H));\n\n                if (pi.SI.BackgroundImage != null)\n                {   // put out any background image \n                    PageImage i = pi.SI.BackgroundImage;\n                    DrawImage(i, g, rect);\n                }\n\n                if (pi is PageText)\n                {\n                    PageText pt = pi as PageText;\n                    DrawString(pt, g, rect);\n                }\n                else if (pi is PageImage)\n                {\n                    PageImage i = pi as PageImage;\n                    DrawImage(i, g, rect);\n                }\n                else if (pi is PageRectangle)\n                {\n                    this.DrawBackground(g, rect, pi.SI);\n                }\n                else if (pi is PageEllipse)\n                {\n                    PageEllipse pe = pi as PageEllipse;\n                    DrawEllipse(pe, g, rect);\n                }\n                else if (pi is PagePie)\n                {\n                    PagePie pp = pi as PagePie;\n                    DrawPie(pp, g, rect);\n                }\n                else if (pi is PagePolygon)\n                {\n                    PagePolygon ppo = pi as PagePolygon;\n                    FillPolygon(ppo, g, rect);\n                }\n                else if (pi is PageCurve)\n                {\n                    PageCurve pc = pi as PageCurve;\n                    DrawCurve(pc.SI.BColorLeft, pc.SI.BStyleLeft, pc.SI.BWidthLeft,\n                        g, pc.Points, pc.Offset, pc.Tension);\n                }\n\n                DrawBorder(pi, g, rect);\n            }\n        }\n\n        private async Task ProcessHtml(PageTextHtml pth, Draw2.Graphics g)\n        {\n            await pth.Build(g);            // Builds the subobjects that make up the html \n            await this.ProcessPage(g, pth);\n        }\n\n        private void DrawLine(Draw2.Color c, BorderStyleEnum bs, float w, Draw2.Graphics g, float x, float y, float x2, float y2)\n        {\n            if (bs == BorderStyleEnum.None || c.IsEmpty || w <= 0)   // nothing to draw \n                return;\n\n            Draw2.Pen p = null;\n            try\n            {\n                p = new Draw2.Pen(c, w);\n                switch (bs)\n                {\n                    case BorderStyleEnum.Dashed:\n                        p.DashStyle = Draw2.Drawing2D.DashStyle.Dash;\n                        break;\n                    case BorderStyleEnum.Dotted:\n                        p.DashStyle = Draw2.Drawing2D.DashStyle.Dot;\n                        break;\n                    case BorderStyleEnum.Double:\n                    case BorderStyleEnum.Groove:\n                    case BorderStyleEnum.Inset:\n                    case BorderStyleEnum.Solid:\n                    case BorderStyleEnum.Outset:\n                    case BorderStyleEnum.Ridge:\n                    case BorderStyleEnum.WindowInset:\n                    default:\n                        p.DashStyle = Draw2.Drawing2D.DashStyle.Solid;\n                        break;\n                }\n\n                g.DrawLine(p, x, y, x2, y2);\n            }\n            finally\n            {\n                if (p != null)\n                    p.Dispose();\n            }\n        }\n\n        private void DrawCurve(Draw2.Color c, BorderStyleEnum bs, float w, Draw2.Graphics g,\n            Draw2.PointF[] points, int Offset, float Tension)\n        {\n            if (bs == BorderStyleEnum.None || c.IsEmpty || w <= 0)\t// nothing to draw\n                return;\n\n            Draw2.Pen p = null;\n            try\n            {\n                p = new Draw2.Pen(c, w);\n                switch (bs)\n                {\n                    case BorderStyleEnum.Dashed:\n                        p.DashStyle = Draw2.Drawing2D.DashStyle.Dash;\n                        break;\n                    case BorderStyleEnum.Dotted:\n                        p.DashStyle = Draw2.Drawing2D.DashStyle.Dot;\n                        break;\n                    case BorderStyleEnum.Double:\n                    case BorderStyleEnum.Groove:\n                    case BorderStyleEnum.Inset:\n                    case BorderStyleEnum.Solid:\n                    case BorderStyleEnum.Outset:\n                    case BorderStyleEnum.Ridge:\n                    case BorderStyleEnum.WindowInset:\n                    default:\n                        p.DashStyle = Draw2.Drawing2D.DashStyle.Solid;\n                        break;\n                }\n                Draw2.PointF[] tmp = new Draw2.PointF[points.Length];\n                for (int i = 0; i < points.Length; i++)\n                {\n\n                    tmp[i].X = PixelsX(points[i].X);\n                    tmp[i].Y = PixelsY(points[i].Y);\n                }\n\n                g.DrawCurve(p, tmp, Offset, tmp.Length - 1, Tension);\n            }\n            finally\n            {\n                if (p != null)\n                    p.Dispose();\n            }\n\n        }\n\n        private void DrawEllipse(PageEllipse pe, Draw2.Graphics g, Draw2.RectangleF r)\n        {\n            StyleInfo si = pe.SI;\n            if (!si.BackgroundColor.IsEmpty)\n            {\n                g.FillEllipse(new Draw2.SolidBrush(si.BackgroundColor), r);\n            }\n            if (si.BStyleTop != BorderStyleEnum.None)\n            {\n                Draw2.Pen p = new Draw2.Pen(si.BColorTop, si.BWidthTop);\n                switch (si.BStyleTop)\n                {\n                    case BorderStyleEnum.Dashed:\n                        p.DashStyle = Draw2.Drawing2D.DashStyle.Dash;\n                        break;\n                    case BorderStyleEnum.Dotted:\n                        p.DashStyle = Draw2.Drawing2D.DashStyle.Dot;\n                        break;\n                    case BorderStyleEnum.Double:\n                    case BorderStyleEnum.Groove:\n                    case BorderStyleEnum.Inset:\n                    case BorderStyleEnum.Solid:\n                    case BorderStyleEnum.Outset:\n                    case BorderStyleEnum.Ridge:\n                    case BorderStyleEnum.WindowInset:\n                    default:\n                        p.DashStyle = Draw2.Drawing2D.DashStyle.Solid;\n                        break;\n                }\n                g.DrawEllipse(p, r);\n            }\n        }\n\n        private void FillPolygon(PagePolygon pp, Draw2.Graphics g, Draw2.RectangleF r)\n        {\n\n            StyleInfo si = pp.SI;\n            Draw2.PointF[] tmp = new Draw2.PointF[pp.Points.Length];\n            if (!si.BackgroundColor.IsEmpty)\n            {\n                for (int i = 0; i < pp.Points.Length; i++)\n                {\n                    tmp[i].X = PixelsX(pp.Points[i].X);\n                    tmp[i].Y = PixelsY(pp.Points[i].Y);\n                }\n                g.FillPolygon(new Draw2.SolidBrush(si.BackgroundColor), tmp);\n            }\n        }\n\n        private void DrawPie(PagePie pp, Draw2.Graphics g, Draw2.RectangleF r)\n        {\n            StyleInfo si = pp.SI;\n            if (!si.BackgroundColor.IsEmpty)\n            {\n                g.FillPie(new Draw2.SolidBrush(si.BackgroundColor), (int)r.X, (int)r.Y, (int)r.Width, (int)r.Height, (float)pp.StartAngle, (float)pp.SweepAngle);\n            }\n\n            if (si.BStyleTop != BorderStyleEnum.None)\n            {\n                Draw2.Pen p = new Draw2.Pen(si.BColorTop, si.BWidthTop);\n                switch (si.BStyleTop)\n                {\n                    case BorderStyleEnum.Dashed:\n                        p.DashStyle = Draw2.Drawing2D.DashStyle.Dash;\n                        break;\n                    case BorderStyleEnum.Dotted:\n                        p.DashStyle = Draw2.Drawing2D.DashStyle.Dot;\n                        break;\n                    case BorderStyleEnum.Double:\n                    case BorderStyleEnum.Groove:\n                    case BorderStyleEnum.Inset:\n                    case BorderStyleEnum.Solid:\n                    case BorderStyleEnum.Outset:\n                    case BorderStyleEnum.Ridge:\n                    case BorderStyleEnum.WindowInset:\n                    default:\n                        p.DashStyle = Draw2.Drawing2D.DashStyle.Solid;\n                        break;\n                }\n                g.DrawPie(p, r, pp.StartAngle, pp.SweepAngle);\n            }\n        }\n\n        private void DrawString(PageText pt, Draw2.Graphics g, Draw2.RectangleF r)\n        {\n            StyleInfo si = pt.SI;\n            string s = pt.Text;\n\n            Draw2.Font drawFont = null;\n            Draw2.StringFormat drawFormat = null;\n            Draw2.Brush drawBrush = null;\n            try\n            {\n                // STYLE \n                Draw2.FontStyle fs = 0;\n                if (si.FontStyle == FontStyleEnum.Italic)\n                    fs |= Draw2.FontStyle.Italic;\n\n                switch (si.TextDecoration)\n                {\n                    case TextDecorationEnum.Underline:\n                        fs |= Draw2.FontStyle.Underline;\n                        break;\n                    case TextDecorationEnum.LineThrough:\n                        fs |= Draw2.FontStyle.Strikeout;\n                        break;\n                    case TextDecorationEnum.Overline:\n                    case TextDecorationEnum.None:\n                        break;\n                }\n\n                // WEIGHT \n                switch (si.FontWeight)\n                {\n                    case FontWeightEnum.Bold:\n                    case FontWeightEnum.Bolder:\n                    case FontWeightEnum.W500:\n                    case FontWeightEnum.W600:\n                    case FontWeightEnum.W700:\n                    case FontWeightEnum.W800:\n                    case FontWeightEnum.W900:\n                        fs |= Draw2.FontStyle.Bold;\n                        break;\n                    default:\n                        break;\n                }\n                try\n                {\n                    drawFont = new Draw2.Font(si.GetFontFamily(), si.FontSize, fs);   // si.FontSize already in points \n                }\n                catch (ArgumentException)\n                {\n                    drawFont = new Draw2.Font(\"Arial\", si.FontSize, fs);   // if this fails we'll let the error pass thru \n                }\n                // ALIGNMENT \n                drawFormat = new Draw2.StringFormat();\n                switch (si.TextAlign)\n                {\n                    case TextAlignEnum.Right:\n                        drawFormat.Alignment = Draw2.StringAlignment.Far;\n                        break;\n                    case TextAlignEnum.Center:\n                        drawFormat.Alignment = Draw2.StringAlignment.Center;\n                        break;\n                    case TextAlignEnum.Left:\n                    default:\n                        drawFormat.Alignment = Draw2.StringAlignment.Near;\n                        break;\n                }\n                if (pt.SI.WritingMode == WritingModeEnum.tb_rl)\n                {\n                    drawFormat.FormatFlags |= Draw2.StringFormatFlags.DirectionRightToLeft;\n                    drawFormat.FormatFlags |= Draw2.StringFormatFlags.DirectionVertical;\n                }\n                switch (si.VerticalAlign)\n                {\n                    case VerticalAlignEnum.Bottom:\n                        drawFormat.LineAlignment = Draw2.StringAlignment.Far;\n                        break;\n                    case VerticalAlignEnum.Middle:\n                        drawFormat.LineAlignment = Draw2.StringAlignment.Center;\n                        break;\n                    case VerticalAlignEnum.Top:\n                    default:\n                        drawFormat.LineAlignment = Draw2.StringAlignment.Near;\n                        break;\n                }\n                // draw the background \n                DrawBackground(g, r, si);\n\n                // adjust drawing rectangle based on padding \n                Draw2.RectangleF r2 = new Draw2.RectangleF(r.Left + si.PaddingLeft,\n                                               r.Top + si.PaddingTop,\n                                               r.Width - si.PaddingLeft - si.PaddingRight,\n                                               r.Height - si.PaddingTop - si.PaddingBottom);\n\n                drawBrush = new Draw2.SolidBrush(si.Color);\n                if (pt.NoClip)   // request not to clip text \n                {\n                    g.DrawString(pt.Text, drawFont, drawBrush, new Draw2.PointF(r.Left, r.Top), drawFormat);\n                    //HighlightString(g, pt, new RectangleF(r.Left, r.Top, float.MaxValue, float.MaxValue),drawFont, drawFormat); \n                }\n                else\n                {\n                    g.DrawString(pt.Text, drawFont, drawBrush, r2, drawFormat);\n                    //HighlightString(g, pt, r2, drawFont, drawFormat); \n                }\n\n            }\n            finally\n            {\n                if (drawFont != null)\n                    drawFont.Dispose();\n                if (drawFormat != null)\n                    drawFont.Dispose();\n                if (drawBrush != null)\n                    drawBrush.Dispose();\n            }\n        }\n\n        private void DrawImage(PageImage pi, Draw2.Graphics g, Draw2.RectangleF r)\n        {\n            Stream strm = null;\n            Draw2.Image im = null;\n            try\n            {\n                strm = new MemoryStream(pi.GetImageData((int)r.Width, (int)r.Height));\n                im = Draw2.Image.FromStream(strm);\n                DrawImageSized(pi, im, g, r);\n            }\n            finally\n            {\n                if (strm != null)\n                    strm.Close();\n                if (im != null)\n                    im.Dispose();\n            }\n\n        }\n\n        private void DrawImageSized(PageImage pi, Draw2.Image im, Draw2.Graphics g, Draw2.RectangleF r)\n        {\n            float height, width;      // some work variables \n            StyleInfo si = pi.SI;\n\n            // adjust drawing rectangle based on padding \n            Draw2.RectangleF r2 = new Draw2.RectangleF(r.Left + PixelsX(si.PaddingLeft),\n                r.Top + PixelsY(si.PaddingTop),\n                r.Width - PixelsX(si.PaddingLeft + si.PaddingRight),\n                r.Height - PixelsY(si.PaddingTop + si.PaddingBottom));\n\n            Draw2.Rectangle ir;   // int work rectangle \n            switch (pi.Sizing)\n            {\n                case ImageSizingEnum.AutoSize:\n                    // Note: GDI+ will stretch an image when you only provide \n                    //  the left/top coordinates.  This seems pretty stupid since \n                    //  it results in the image being out of focus even though \n                    //  you don't want the image resized. \n                    if (g.DpiX == im.HorizontalResolution &&\n                        g.DpiY == im.VerticalResolution)\n                    {\n                        ir = new Draw2.Rectangle(Convert.ToInt32(r2.Left), Convert.ToInt32(r2.Top),\n                                                        im.Width, im.Height);\n                    }\n                    else\n                        ir = new Draw2.Rectangle(Convert.ToInt32(r2.Left), Convert.ToInt32(r2.Top),\n                                           Convert.ToInt32(r2.Width), Convert.ToInt32(r2.Height));\n                    g.DrawImage(im, ir);\n\n                    break;\n                case ImageSizingEnum.Clip:\n                    Draw2.Region saveRegion = g.Clip;\n                    Draw2.Region clipRegion = new Draw2.Region(g.Clip.GetRegionData());\n                    clipRegion.Intersect(r2);\n                    g.Clip = clipRegion;\n                    if (g.DpiX == im.HorizontalResolution &&\n                        g.DpiY == im.VerticalResolution)\n                    {\n                        ir = new Draw2.Rectangle(Convert.ToInt32(r2.Left), Convert.ToInt32(r2.Top),\n                                                        im.Width, im.Height);\n                    }\n                    else\n                        ir = new Draw2.Rectangle(Convert.ToInt32(r2.Left), Convert.ToInt32(r2.Top),\n                                           Convert.ToInt32(r2.Width), Convert.ToInt32(r2.Height));\n                    g.DrawImage(im, ir);\n                    g.Clip = saveRegion;\n                    break;\n                case ImageSizingEnum.FitProportional:\n                    float ratioIm = (float)im.Height / (float)im.Width;\n                    float ratioR = r2.Height / r2.Width;\n                    height = r2.Height;\n                    width = r2.Width;\n                    if (ratioIm > ratioR)\n                    {   // this means the rectangle width must be corrected \n                        width = height * (1 / ratioIm);\n                    }\n                    else if (ratioIm < ratioR)\n                    {   // this means the ractangle height must be corrected \n                        height = width * ratioIm;\n                    }\n                    r2 = new Draw2.RectangleF(r2.X, r2.Y, width, height);\n                    g.DrawImage(im, r2);\n                    break;\n                case ImageSizingEnum.Fit:\n                default:\n                    g.DrawImage(im, r2);\n                    break;\n            }\n            return;\n        }\n\n        private void DrawBackground(Draw2.Graphics g, Draw2.RectangleF rect, StyleInfo si)\n        {\n            Draw2.Drawing2D.LinearGradientBrush linGrBrush = null;\n            Draw2.SolidBrush sb = null;\n            try\n            {\n                if (si.BackgroundGradientType != BackgroundGradientTypeEnum.None &&\n                    !si.BackgroundGradientEndColor.IsEmpty &&\n                    !si.BackgroundColor.IsEmpty)\n                {\n                    Draw2.Color c = si.BackgroundColor;\n                    Draw2.Color ec = si.BackgroundGradientEndColor;\n\n                    switch (si.BackgroundGradientType)\n                    {\n                        case BackgroundGradientTypeEnum.LeftRight:\n                            linGrBrush = new Draw2.Drawing2D.LinearGradientBrush(rect, c, ec, Draw2.Drawing2D.LinearGradientMode.Horizontal);\n                            break;\n                        case BackgroundGradientTypeEnum.TopBottom:\n                            linGrBrush = new Draw2.Drawing2D.LinearGradientBrush(rect, c, ec, Draw2.Drawing2D.LinearGradientMode.Vertical);\n                            break;\n                        case BackgroundGradientTypeEnum.Center:\n                            linGrBrush = new Draw2.Drawing2D.LinearGradientBrush(rect, c, ec, Draw2.Drawing2D.LinearGradientMode.Horizontal);\n                            break;\n                        case BackgroundGradientTypeEnum.DiagonalLeft:\n                            linGrBrush = new Draw2.Drawing2D.LinearGradientBrush(rect, c, ec, Draw2.Drawing2D.LinearGradientMode.ForwardDiagonal);\n                            break;\n                        case BackgroundGradientTypeEnum.DiagonalRight:\n                            linGrBrush = new Draw2.Drawing2D.LinearGradientBrush(rect, c, ec, Draw2.Drawing2D.LinearGradientMode.BackwardDiagonal);\n                            break;\n                        case BackgroundGradientTypeEnum.HorizontalCenter:\n                            linGrBrush = new Draw2.Drawing2D.LinearGradientBrush(rect, c, ec, Draw2.Drawing2D.LinearGradientMode.Horizontal);\n                            break;\n                        case BackgroundGradientTypeEnum.VerticalCenter:\n                            linGrBrush = new Draw2.Drawing2D.LinearGradientBrush(rect, c, ec, Draw2.Drawing2D.LinearGradientMode.Vertical);\n                            break;\n                        default:\n                            break;\n                    }\n                }\n\n                if (linGrBrush != null)\n                {\n                    g.FillRectangle(linGrBrush, rect);\n                    linGrBrush.Dispose();\n                }\n                else if (!si.BackgroundColor.IsEmpty)\n                {\n                    sb = new Draw2.SolidBrush(si.BackgroundColor);\n                    g.FillRectangle(sb, rect);\n                    sb.Dispose();\n                }\n            }\n            finally\n            {\n                if (linGrBrush != null)\n                    linGrBrush.Dispose();\n                if (sb != null)\n                    sb.Dispose();\n            }\n            return;\n        }\n\n        private void DrawBorder(PageItem pi, Draw2.Graphics g, Draw2.RectangleF r)\n        {\n            if (r.Height <= 0 || r.Width <= 0)      // no bounding box to use \n                return;\n\n            StyleInfo si = pi.SI;\n\n            DrawLine(si.BColorTop, si.BStyleTop, si.BWidthTop, g, r.X, r.Y, r.Right, r.Y);\n\n            DrawLine(si.BColorRight, si.BStyleRight, si.BWidthRight, g, r.Right, r.Y, r.Right, r.Bottom);\n\n            DrawLine(si.BColorLeft, si.BStyleLeft, si.BWidthLeft, g, r.X, r.Y, r.X, r.Bottom);\n\n            DrawLine(si.BColorBottom, si.BStyleBottom, si.BWidthBottom, g, r.X, r.Bottom, r.Right, r.Bottom);\n\n            return;\n\n        }\n\n        #region TIFF image handler\n        private Draw2.Bitmap CreateObjectBitmap()\n        {\n            float dpiX = 200F;\n            float dpiY = 200F;\n\n            Draw2.Bitmap bm = new Draw2.Bitmap(\n                Convert.ToInt32(r.ReportDefinition.PageWidth.Size / 2540F * dpiX),\n                Convert.ToInt32(r.ReportDefinition.PageHeight.Size / 2540F * dpiY)\n            );\n\n            bm.MakeTransparent(Draw2.Color.White);\n            bm.SetResolution(dpiX, dpiY);\n\n            return bm;\n        }\n\n        private Draw2.Bitmap ConvertToBitonal(Draw2.Bitmap original)\n        {\n            if (_RenderColor)\n                return original;\n\n            Draw2.Bitmap source = null;\n\n            // If original bitmap is not already in 32 BPP, ARGB format, then convert \n            if (original.PixelFormat != Draw2.Imaging.PixelFormat.Format32bppArgb)\n            {\n                source = new Draw2.Bitmap(original.Width, original.Height, Draw2.Imaging.PixelFormat.Format32bppArgb);\n                source.SetResolution(original.HorizontalResolution, original.VerticalResolution);\n                using (Draw2.Graphics g = Draw2.Graphics.FromImage(source))\n                {\n                    g.DrawImageUnscaled(original, 0, 0);\n                }\n            }\n            else\n            {\n                source = original;\n            }\n\n            // Lock source bitmap in memory \n            Draw2.Imaging.BitmapData sourceData = source.LockBits(new Draw2.Rectangle(0, 0, source.Width, source.Height), \n                Draw2.Imaging.ImageLockMode.ReadOnly,\n                Draw2.Imaging.PixelFormat.Format32bppArgb);\n\n            // Copy image data to binary array \n            int imageSize = sourceData.Stride * sourceData.Height;\n            byte[] sourceBuffer = new byte[imageSize];\n            Marshal.Copy(sourceData.Scan0, sourceBuffer, 0, imageSize);\n\n            // Unlock source bitmap \n            source.UnlockBits(sourceData);\n\n            // Create destination bitmap \n            Draw2.Bitmap destination = new Draw2.Bitmap(source.Width, source.Height, Draw2.Imaging.PixelFormat.Format1bppIndexed);\n\n            // Set resolution \n            destination.SetResolution(source.HorizontalResolution, source.VerticalResolution);\n\n            // Lock destination bitmap in memory \n            Draw2.Imaging.BitmapData destinationData = destination.LockBits(new Draw2.Rectangle(0, 0, destination.Width, destination.Height), \n                Draw2.Imaging.ImageLockMode.WriteOnly, Draw2.Imaging.PixelFormat.Format1bppIndexed);\n\n            // Create destination buffer \n            imageSize = destinationData.Stride * destinationData.Height;\n            byte[] destinationBuffer = new byte[imageSize];\n\n            int sourceIndex = 0;\n            int destinationIndex = 0;\n            int pixelTotal = 0;\n            byte destinationValue = 0;\n            int pixelValue = 128;\n            int height = source.Height;\n            int width = source.Width;\n            int threshold = 500;\n\n            // Iterate lines \n            for (int y = 0; y < height; y++)\n            {\n                sourceIndex = y * sourceData.Stride;\n                destinationIndex = y * destinationData.Stride;\n                destinationValue = 0;\n                pixelValue = 128;\n\n                // Iterate pixels \n                for (int x = 0; x < width; x++)\n                {\n                    // Compute pixel brightness (i.e. total of Red, Green, and Blue values) \n                    pixelTotal = sourceBuffer[sourceIndex + 1] + sourceBuffer[sourceIndex + 2] + sourceBuffer[sourceIndex + 3];\n                    if (pixelTotal > threshold)\n                    {\n                        destinationValue += (byte)pixelValue;\n                    }\n                    if (pixelValue == 1)\n                    {\n                        destinationBuffer[destinationIndex] = destinationValue;\n                        destinationIndex++;\n                        destinationValue = 0;\n                        pixelValue = 128;\n                    }\n                    else\n                    {\n                        pixelValue >>= 1;\n                    }\n                    sourceIndex += 4;\n                }\n                if (pixelValue != 128)\n                {\n                    destinationBuffer[destinationIndex] = destinationValue;\n                }\n            }\n\n            // Copy binary image data to destination bitmap \n            Marshal.Copy(destinationBuffer, 0, destinationData.Scan0, imageSize);\n\n            // Unlock destination bitmap \n            destination.UnlockBits(destinationData);\n\n            // Return \n            return destination;\n        }\n\n        private void SaveBitmap(Draw2.Bitmap tif, Draw2.Bitmap bm, Stream st, int pageNo)\n        {\n            if (pageNo == 1)\n            {\n                // Handling saving first page \n\n                // STEP: Prepare ImageCodecInfo for saving \n                ImageCodecInfo info = null;\n\n                foreach (ImageCodecInfo i in ImageCodecInfo.GetImageEncoders())\n                {\n                    if (i.MimeType == \"image/tiff\")\n                    {\n                        info = i;\n                        break;\n                    }\n                }\n\n                // STEP: Prepare parameters \n                Draw2.Imaging.EncoderParameters encoderParams = new Draw2.Imaging.EncoderParameters(2);\n\n                encoderParams.Param[0] = new Draw2.Imaging.EncoderParameter(\n                    Draw2.Imaging.Encoder.SaveFlag, (long)Draw2.Imaging.EncoderValue.MultiFrame\n                );\n\n                encoderParams.Param[1] = new Draw2.Imaging.EncoderParameter(\n                    Draw2.Imaging.Encoder.Compression, \n                    (long)(_RenderColor? Draw2.Imaging.EncoderValue.CompressionLZW: Draw2.Imaging.EncoderValue.CompressionCCITT3)\n                );\n\n                // STEP: Save bitmap \n                tif.Save(st, info, encoderParams);\n            }\n            else\n            {\n                // STEP: Prepare parameters \n                Draw2.Imaging.EncoderParameters encoderParams = new Draw2.Imaging.EncoderParameters(1);\n\n                encoderParams.Param[0] = new Draw2.Imaging.EncoderParameter(\n                    Draw2.Imaging.Encoder.SaveFlag, (long)Draw2.Imaging.EncoderValue.FrameDimensionPage\n                );\n\n                // STEP: Save bitmap \n                tif.SaveAdd(bm, encoderParams);\n            }\n        }\n        #endregion\n\n        internal float PixelsX(float x)\n        {\n            return (x * DpiX / 72.0f);\n        }\n\n        internal float PixelsY(float y)\n        {\n            return (y * DpiY / 72.0f);\n        }\n\n        // Body: main container for the report \n        public void BodyStart(Body b)\n        {\n        }\n\n        public void BodyEnd(Body b)\n        {\n        }\n\n        public void PageHeaderStart(PageHeader ph)\n        {\n        }\n\n        public void PageHeaderEnd(PageHeader ph)\n        {\n        }\n\n        public void PageFooterStart(PageFooter pf)\n        {\n        }\n\n        public void PageFooterEnd(PageFooter pf)\n        {\n        }\n\n        public Task Textbox(Textbox tb, string t, Row row)\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task DataRegionNoRows(DataRegion d, string noRowsMsg)\n        {\n            return Task.CompletedTask;\n        }\n\n        // Lists \n        public Task<bool> ListStart(List l, Row r)\n        {\n            return Task.FromResult(true);\n        }\n\n        public Task ListEnd(List l, Row r)\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task ListEntryBegin(List l, Row r)\n        {\n            return Task.CompletedTask;\n        }\n\n        public void ListEntryEnd(List l, Row r)\n        {\n        }\n\n        // Tables               // Report item table \n        public Task<bool> TableStart(Table t, Row row)\n        {\n            return Task.FromResult(true);\n        }\n\n        public Task TableEnd(Table t, Row row)\n        {\n            return Task.CompletedTask;\n        }\n\n        public void TableBodyStart(Table t, Row row)\n        {\n        }\n\n        public void TableBodyEnd(Table t, Row row)\n        {\n        }\n\n        public void TableFooterStart(Footer f, Row row)\n        {\n        }\n\n        public void TableFooterEnd(Footer f, Row row)\n        {\n        }\n\n        public void TableHeaderStart(Header h, Row row)\n        {\n        }\n\n        public void TableHeaderEnd(Header h, Row row)\n        {\n        }\n\n        public Task TableRowStart(TableRow tr, Row row)\n        {\n            return Task.CompletedTask;\n        }\n\n        public void TableRowEnd(TableRow tr, Row row)\n        {\n        }\n\n        public Task TableCellStart(TableCell t, Row row)\n        {\n            return Task.CompletedTask;\n        }\n\n        public void TableCellEnd(TableCell t, Row row)\n        {\n            return;\n        }\n\n        public Task<bool> MatrixStart(Matrix m, MatrixCellEntry[,] matrix, Row r, int headerRows, int maxRows, int maxCols)            // called first \n        {\n            return Task.FromResult(true);\n        }\n\n        public void MatrixColumns(Matrix m, MatrixColumns mc)   // called just after MatrixStart \n        {\n        }\n\n        public Task MatrixCellStart(Matrix m, ReportItem ri, int row, int column, Row r, float h, float w, int colSpan)\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task MatrixCellEnd(Matrix m, ReportItem ri, int row, int column, Row r)\n        {\n            return Task.CompletedTask;\n        }\n\n        public void MatrixRowStart(Matrix m, int row, Row r)\n        {\n        }\n\n        public void MatrixRowEnd(Matrix m, int row, Row r)\n        {\n        }\n\n        public Task MatrixEnd(Matrix m, Row r)            // called last \n        {\n            return Task.CompletedTask;\n        }\n\n        public Task Chart(Chart c, Row r, ChartBase cb)\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task Image(Rdl.Image i, Row r, string mimeType, Stream ior)\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task Line(Line l, Row r)\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task<bool> RectangleStart(Rdl.Rectangle rect, Row r)\n        {\n            return Task.FromResult(true);\n        }\n\n        public Task RectangleEnd(Rdl.Rectangle rect, Row r)\n        {\n            return Task.CompletedTask;\n        }\n\n        public Task Subreport(Subreport s, Row r)\n        {\n            return Task.CompletedTask;\n        }\n\n        public void GroupingStart(Grouping g)         // called at start of grouping \n        {\n        }\n        public void GroupingInstanceStart(Grouping g)   // called at start for each grouping instance \n        {\n        }\n        public void GroupingInstanceEnd(Grouping g)   // called at start for each grouping instance \n        {\n        }\n        public void GroupingEnd(Grouping g)         // called at end of grouping \n        {\n        }\n    }\n}\n\n#endif"
  },
  {
    "path": "RdlEngine/Render/RenderXml.cs",
    "content": "\n\nusing System;\nusing Majorsilence.Reporting.Rdl;\nusing System.IO;\nusing System.Collections;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t\n\t///<summary>\n\t///The primary class to \"run\" a report to XML\n\t///</summary>\n\tinternal class RenderXml: IPresent\n\t{\n\t\tReport r;\t\t\t\t\t// report\n\t\tTextWriter tw;\t\t\t\t// where the output is going\n\t\tStack stkReportItem;\t\t// stack of nested report items\n\t\tStack stkContainers;\t\t// stack to hold container elements\n\t\tstring rowstart=null;\n\n\t\tpublic RenderXml(Report rep, IStreamGen sg)\n\t\t{\n\t\t\tr = rep;\n\t\t\ttw = sg.GetTextWriter();\n\t\t\tstkReportItem = new Stack();\n\t\t\tstkContainers = new Stack();\n\t\t}\n\n        public void Dispose() { } \n\n\t\tpublic Report Report()\n\t\t{\n\t\t\treturn r;\n\t\t}\n\n\t\tpublic bool IsPagingNeeded()\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tpublic void Start()\t\t\n\t\t{\n\t\t\ttw.WriteLine(\"<?xml version='1.0' encoding='UTF-8'?>\");\n\n\t\t\tPushContainer(r.ReportDefinition.DataElementName);\n\n\t\t\treturn;\n\t\t}\n\n\t\tpublic async Task End()\n\t\t{\n\t\t\tContainerIO cio = (ContainerIO) stkContainers.Pop();\t// this pop should empty the stack\n\t\t\tcio.WriteAttribute(\">\");\n\t\t\tawait tw.WriteLineAsync(cio.attribute_sb.ToString());\n\t\t\ttw.WriteLine(cio.subelement_sb);\n\t\t\ttw.WriteLine(\"</\" + r.ReportDefinition.DataElementName + \">\");\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Body: main container for the report\n\t\tpublic void BodyStart(Body b)\n\t\t{\n\t\t}\n\n\t\tpublic void BodyEnd(Body b)\n\t\t{\n\t\t}\n\t\t\n\t\tpublic void PageHeaderStart(PageHeader ph)\n\t\t{\n\t\t}\n\n\t\tpublic void PageHeaderEnd(PageHeader ph)\n\t\t{\n\t\t}\n \t\t\n\t\tpublic void PageFooterStart(PageFooter pf)\n\t\t{\n\t\t}\n\n\t\tpublic void PageFooterEnd(PageFooter pf)\n\t\t{\n\t\t}\n\n\t\tpublic Task Textbox(Textbox tb, string t, Row row)\n\t\t{\n\t\t\tif (tb.DataElementOutput != DataElementOutputEnum.Output ||\n\t\t\t\ttb.DataElementName == null)\n\t\t\t\treturn Task.CompletedTask;\n\t\t\t\n\t\t\tif (rowstart != null)\t\t// In case no items in row are visible\n\t\t\t{\t\t\t\t\t\t\t//   we delay until we get one.\n//\t\t\t\tWriteElement(rowstart);\n\t\t\t\trowstart = null;\n\t\t\t}\n\t\t\tt = XmlUtil.XmlAnsi(t);\n\t\t\tif (tb.DataElementStyle == DataElementStyleEnum.AttributeNormal)\n\t\t\t{\t// write out as attribute\n\t\t\t\tWriteAttribute(\" {0}='{1}'\",\n\t\t\t\t\t\t\t\ttb.DataElementName, XmlUtil.EscapeXmlAttribute(t));\n\t\t\t}\n\t\t\telse\n\t\t\t{\t// write out as element\n\t\t\t\tWriteElement(\"<{0}>{1}</{0}>\", tb.DataElementName, t);\n\t\t\t}\n            return Task.CompletedTask;\n        }\n\t\t\n\t\tpublic Task DataRegionNoRows(DataRegion t, string noRowMsg)\n\t\t{\n            return Task.CompletedTask;\n        }\n\n\t\t// Lists\n\t\tpublic Task<bool> ListStart(List l, Row r)\n\t\t{\n\t\t\tif (l.DataElementOutput == DataElementOutputEnum.NoOutput)\n\t\t\t\treturn Task.FromResult(false);\n\t\t\tif (l.DataElementOutput == DataElementOutputEnum.ContentsOnly)\n\t\t\t\treturn Task.FromResult(true);\n\t\t\tWriteElementLine(\"<{0}>\", l.DataElementName);\n\n\t\t\treturn Task.FromResult(true);\t//want to continue\n\t\t}\n\n\t\tpublic Task ListEnd(List l, Row r)\n\t\t{\n\t\t\tif (l.DataElementOutput == DataElementOutputEnum.NoOutput ||\n\t\t\t\tl.DataElementOutput == DataElementOutputEnum.ContentsOnly)\n\t\t\t\treturn Task.CompletedTask;\n\n\t\t\tWriteElementLine(\"</{0}>\", l.DataElementName);\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tpublic Task ListEntryBegin(List l, Row r)\n\t\t{\n\t\t\tstring d;\n\t\t\tif (l.Grouping == null)\n\t\t\t{\n\t\t\t\tif (l.DataElementOutput != DataElementOutputEnum.Output)\n\t\t\t\t\treturn Task.CompletedTask;\n\t\t\t\td = string.Format(\"<{0}\", l.DataInstanceName);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tGrouping g = l.Grouping;\n\t\t\t\tif (g.DataElementOutput != DataElementOutputEnum.Output)\n\t\t\t\t\treturn Task.CompletedTask;\n\t\t\t\td = string.Format(\"<{0}\", l.DataInstanceName);\n\t\t\t}\n\t\t\tPushContainer(l.DataInstanceName);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tpublic void ListEntryEnd(List l, Row r)\n\t\t{\n\t\t\tif (l.DataElementOutput != DataElementOutputEnum.Output)\n\t\t\t\treturn;\n\n\t\t\tPopContainer(l.DataInstanceName);\n\n\t\t}\n\n\t\t// Tables\t\t\t\t\t// Report item table\n\t\tpublic Task<bool> TableStart(Table t, Row row)\n\t\t{\n\t\t\tif (t.DataElementOutput == DataElementOutputEnum.NoOutput)\n\t\t\t\treturn Task.FromResult(false);\n\n\t\t\tPushContainer(t.DataElementName);\n\n\t\t\tstkReportItem.Push(t);\n\t\t\tstring cName = TableGetCollectionName(t);\n\t\t\tif (cName != null)\n\t\t\t\tWriteAttributeLine(\"><{0}\", cName);\n\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic Task TableEnd(Table t, Row row)\n\t\t{\n\t\t\tif (t.DataElementOutput == DataElementOutputEnum.NoOutput)\n\t\t\t\treturn Task.CompletedTask;\n\n\t\t\tstring cName = TableGetCollectionName(t);\n\t\t\tPopContainer(cName);\n\n\t\t\tWriteElementLine(\"</{0}>\", t.DataElementName);\n\t\t\tstkReportItem.Pop();\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tstring TableGetCollectionName(Table t)\n\t\t{\n\t\t\tstring cName;\n\t\t\tif (t.TableGroups == null)\n\t\t\t{\n\t\t\t\tif (t.Details != null && t.Details.Grouping != null)\n\t\t\t\t\tcName = t.Details.Grouping.DataCollectionName;\n\t\t\t\telse\n\t\t\t\t\tcName = t.DetailDataCollectionName;\n\t\t\t}\n\t\t\telse\n\t\t\t\tcName = null;\n\n\t\t\treturn cName;\n\t\t}\n \n\t\tpublic void TableBodyStart(Table t, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic void TableBodyEnd(Table t, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic void TableFooterStart(Footer f, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic void TableFooterEnd(Footer f, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic void TableHeaderStart(Header h, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic void TableHeaderEnd(Header h, Row row)\n\t\t{\n\t\t}\n\n\t\tpublic Task TableRowStart(TableRow tr, Row row)\n\t\t{\n\t\t\tstring n = TableGetRowElementName(tr);\n\t\t\tif (n == null)\n\t\t\t\treturn Task.CompletedTask;\n\t\t\tPushContainer(n);\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tpublic void TableRowEnd(TableRow tr, Row row)\n\t\t{\n\t\t\tstring n = TableGetRowElementName(tr);\n\t\t\tif (n == null)\n\t\t\t\treturn;\n\t\t\tthis.PopContainer(n);\n\t\t}\n\n\t\tstring TableGetRowElementName(TableRow tr)\n\t\t{\n\t\t\tfor (ReportLink rl = tr.Parent; !(rl is Table); rl = rl.Parent)\n\t\t\t{\n\t\t\t\tif (rl is Header || rl is Footer)\n\t\t\t\t\treturn null;\n\n\t\t\t\tif (rl is TableGroup)\n\t\t\t\t{\n\t\t\t\t\tTableGroup tg = rl as TableGroup;\n\t\t\t\t\tGrouping g = tg.Grouping;\n\t\t\t\t\treturn g.DataElementName;\n\t\t\t\t}\n\n\t\t\t\tif (rl is Details)\n\t\t\t\t{\n\t\t\t\t\tTable t = (Table) stkReportItem.Peek();\n\n                    return t.DetailDataElementOutput == DataElementOutputEnum.NoOutput?\n                        null: t.DetailDataElementName;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\tpublic Task TableCellStart(TableCell t, Row row)\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tpublic void TableCellEnd(TableCell t, Row row)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n        public Task<bool> MatrixStart(Matrix m, MatrixCellEntry[,] matrix, Row r, int headerRows, int maxRows, int maxCols)\t\t\t\t// called first\n\t\t{\n\t\t\tif (m.DataElementOutput != DataElementOutputEnum.Output)\n\t\t\t\treturn Task.FromResult(false);\n\t\t\ttw.WriteLine(\"<\" + (m.DataElementName == null? \"Matrix\": m.DataElementName) + \">\");\n\n\t\t\treturn Task.FromResult(true);\n\t\t}\n\n\t\tpublic void MatrixColumns(Matrix m, MatrixColumns mc)\t// called just after MatrixStart\n\t\t{\n\t\t}\n\n\t\tpublic Task MatrixCellStart(Matrix m, ReportItem ri, int row, int column, Row r, float h, float w, int colSpan)\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tpublic Task MatrixCellEnd(Matrix m, ReportItem ri, int row, int column, Row r)\n\t\t{\n            return Task.CompletedTask;\n        }\n\n\t\tpublic void MatrixRowStart(Matrix m, int row, Row r)\n\t\t{\n\t\t}\n\n\t\tpublic void MatrixRowEnd(Matrix m, int row, Row r)\n\t\t{\n\t\t}\n\n\t\tpublic Task MatrixEnd(Matrix m, Row r)\t\t\t\t// called last\n\t\t{\n\t\t\ttw.WriteLine(\"</\" + (m.DataElementName == null? \"Matrix\": m.DataElementName) + \">\");\n            return Task.CompletedTask;\n        }\n\n\t\tpublic Task Chart(Chart c, Row r, ChartBase cb)\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tpublic Task Image(Image i, Row r, string mimeType, Stream io)\n\t\t{\n            return Task.CompletedTask;\n        }\n\n\t\tpublic Task Line(Line l, Row r)\n\t\t{\n            return Task.CompletedTask;\n        }\n\n\t\tpublic Task<bool> RectangleStart(Rdl.Rectangle rect, Row r)\n\t\t{\n\t\t\tbool rc=true;\n\t\t\tswitch (rect.DataElementOutput)\n\t\t\t{\n\t\t\t\tcase DataElementOutputEnum.NoOutput:\n\t\t\t\t\trc = false;\n\t\t\t\t\tbreak;\n\t\t\t\tcase DataElementOutputEnum.Output:\n\t\t\t\t\tif (rowstart != null)\t\t// In case no items in row are visible\n\t\t\t\t\t{\t\t\t\t\t\t\t//   we delay until we get one.\n\t\t\t\t\t\ttw.Write(rowstart);\n\t\t\t\t\t\trowstart = null;\n\t\t\t\t\t}\n\t\t\t\t\tPushContainer(rect.DataElementName);\n\t\t\t\t\tbreak;\n\t\t\t\tcase DataElementOutputEnum.Auto:\n\t\t\t\tcase DataElementOutputEnum.ContentsOnly:\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn Task.FromResult(rc);\n\t\t}\n\n\t\tpublic Task RectangleEnd(Rdl.Rectangle rect, Row r)\n\t\t{\n\t\t\tif (rect.DataElementOutput != DataElementOutputEnum.Output)\n\t\t\t\treturn Task.CompletedTask;\n\t\t\tPopContainer(rect.DataElementName);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\t\t\n\t\tpublic async Task Subreport(Subreport s, Row r)\n\t\t{\n\t\t\tif (s.DataElementOutput != DataElementOutputEnum.Output)\n                return;\n\n            PushContainer(s.DataElementName);\n\n            await s.ReportDefn.Run(this);\n\n\t\t\tPopContainer(s.DataElementName);\n            return;\n        }\n\t\tpublic void GroupingStart(Grouping g)\t\t\t// called at start of grouping\n\t\t{\n\t\t\tif (g.DataElementOutput != DataElementOutputEnum.Output)\n\t\t\t\treturn;\n\n\t\t\tPushContainer(g.DataCollectionName);\n\n\t\t}\n\t\tpublic void GroupingInstanceStart(Grouping g)\t// called at start for each grouping instance\n\t\t{\n\t\t\tif (g.DataElementOutput != DataElementOutputEnum.Output)\n\t\t\t\treturn;\n\t\t\tPushContainer(g.DataElementName);\n\n\t\t}\n\t\tpublic void GroupingInstanceEnd(Grouping g)\t// called at start for each grouping instance\n\t\t{\n\t\t\tif (g.DataElementOutput != DataElementOutputEnum.Output)\n\t\t\t\treturn;\n\t\t\tPopContainer(g.DataElementName);\n\t\t}\n\t\tpublic void GroupingEnd(Grouping g)\t\t\t// called at end of grouping\n\t\t{\n\t\t\tif (g.DataElementOutput != DataElementOutputEnum.Output)\n\t\t\t\treturn;\n\t\t\tPopContainer(g.DataCollectionName);\n\t\t}\n\n\t\tpublic Task RunPages(Pages pgs)\t// we don't have paging turned on for xml\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tvoid PopContainer(string name)\n\t\t{\n\t\t\tContainerIO cio = (ContainerIO) this.stkContainers.Pop();\n\t\t\tif (cio.bEmpty)\n\t\t\t\treturn;\n\t\t\tcio.WriteAttribute(\">\");\n\t\t\tWriteElementLine(cio.attribute_sb.ToString());\n\t\t\tWriteElementLine(cio.subelement_sb.ToString());\n\t\t\tif (name != null)\n\t\t\t\tWriteElementLine(\"</{0}>\", name);\n\t\t}\n\n\t\tvoid PushContainer(string name)\n\t\t{\n\t\t\tContainerIO cio = new ContainerIO(\"<\" + name);\n\t\t\tstkContainers.Push(cio);\n\t\t}\n\n\t\tvoid WriteElement(string format)\n\t\t{\n\t\t\tContainerIO cio = (ContainerIO) this.stkContainers.Peek();\n\t\t\tcio.WriteElement(format);\n\t\t}\n\n\t\tvoid WriteElement(string format, params object[] arg)\n\t\t{\n\t\t\tContainerIO cio = (ContainerIO) this.stkContainers.Peek();\n\t\t\tcio.WriteElement(format, arg);\n\t\t}\n\n\t\tvoid WriteElementLine(string format)\n\t\t{\n\t\t\tContainerIO cio = (ContainerIO) this.stkContainers.Peek();\n\t\t\tcio.WriteElementLine(format);\n\t\t}\n\n\t\tvoid WriteElementLine(string format, params object[] arg)\n\t\t{\n\t\t\tContainerIO cio = (ContainerIO) this.stkContainers.Peek();\n\t\t\tcio.WriteElementLine(format, arg);\n\t\t}\n\n\t\tvoid WriteAttribute(string format)\n\t\t{\n\t\t\tContainerIO cio = (ContainerIO) this.stkContainers.Peek();\n\t\t\tcio.WriteAttribute(format);\n\t\t}\n\n\t\tvoid WriteAttribute(string format, params object[] arg)\n\t\t{\n\t\t\tContainerIO cio = (ContainerIO) this.stkContainers.Peek();\n\t\t\tcio.WriteAttribute(format, arg);\n\t\t}\n\n\t\tvoid WriteAttributeLine(string format)\n\t\t{\n\t\t\tContainerIO cio = (ContainerIO) this.stkContainers.Peek();\n\t\t\tcio.WriteAttributeLine(format);\n\t\t}\n\n\t\tvoid WriteAttributeLine(string format, params object[] arg)\n\t\t{\n\t\t\tContainerIO cio = (ContainerIO) this.stkContainers.Peek();\n\t\t\tcio.WriteAttributeLine(format, arg);\n\t\t}\n\n\t\tclass ContainerIO\n\t\t{\n\t\t\tinternal StringBuilder attribute_sb;\n\t\t\tinternal StringWriter attribute_sw;\n\n\t\t\tinternal StringBuilder subelement_sb;\n\t\t\tinternal StringWriter subelement_sw;\n\n\t\t\tinternal bool bEmpty=true;\n\n\t\t\tinternal ContainerIO(string begin)\n\t\t\t{\n\t\t\t\tsubelement_sb = new StringBuilder();\n\t\t\t\tsubelement_sw = new StringWriter(subelement_sb);\n\n\t\t\t\tattribute_sb = new StringBuilder(begin);\n\t\t\t\tattribute_sw = new StringWriter(attribute_sb);\n\t\t\t}\n\n\t\t\tinternal void WriteElement(string format)\n\t\t\t{\n\t\t\t\tbEmpty = false;\n\t\t\t\tsubelement_sw.Write(format);\n\t\t\t}\n\n\t\t\tinternal void WriteElement(string format, params object[] arg)\n\t\t\t{\n\t\t\t\tbEmpty = false;\n\t\t\t\tsubelement_sw.Write(format, arg);\n\t\t\t}\n\n\t\t\tinternal void WriteElementLine(string format)\n\t\t\t{\n\t\t\t\tbEmpty = false;\n\t\t\t\tsubelement_sw.WriteLine(format);\n\t\t\t}\n\n\t\t\tinternal void WriteElementLine(string format, params object[] arg)\n\t\t\t{\n\t\t\t\tbEmpty = false;\n\t\t\t\tsubelement_sw.WriteLine(format, arg);\n\t\t\t}\n\n\t\t\tinternal void WriteAttribute(string format)\n\t\t\t{\n\t\t\t\tbEmpty = false;\n\t\t\t\tattribute_sw.Write(format);\n\t\t\t}\n\n\t\t\tinternal void WriteAttribute(string format, params object[] arg)\n\t\t\t{\n\t\t\t\tbEmpty = false;\n\t\t\t\tattribute_sw.Write(format, arg);\n\t\t\t}\n\n\t\t\tinternal void WriteAttributeLine(string format)\n\t\t\t{\n\t\t\t\tbEmpty = false;\n\t\t\t\tattribute_sw.WriteLine(format);\n\t\t\t}\n\n\t\t\tinternal void WriteAttributeLine(string format, params object[] arg)\n\t\t\t{\n\t\t\t\tbEmpty = false;\n\t\t\t\tattribute_sw.WriteLine(format, arg);\n\t\t\t}\n\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "RdlEngine/Render/StreamGen.cs",
    "content": "\n\nusing System;\nusing Majorsilence.Reporting.Rdl;\nusing System.IO;\nusing System.Collections;\nusing System.Collections.Generic;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t\n\t///<summary>\n\t/// An implementation of IStreamGen.  Constructor is passed the name of a\n\t/// directory to place work files and the primary name of resultant file.  \n\t///</summary>\n\n\t[Serializable]\n\tpublic class StreamGen : IStreamGen, IDisposable\n\t{\n\t\tstring _Directory;\n\t\tstring _RelativeDirectory;\n\t\tStreamWriter _SW;\n\t\tStream _io;\n\t\tstring _FileName;\n\t\tRandom _rand;\n\t\tList<string> _FileList;\n\n\t\tpublic StreamGen(string directory, string relativeDirectory, string ext)\n\t\t{\n\t\t\t_Directory = directory;\n\t\t\t_RelativeDirectory = relativeDirectory;\n\t\t\tif (_Directory[_Directory.Length-1] == Path.DirectorySeparatorChar ||\n\t\t\t\t_Directory[_Directory.Length-1] == Path.AltDirectorySeparatorChar)\n\t\t\t\t_Directory = _Directory.Substring(0, _Directory.Length-1);\n\n\t\t\t// ensure we have a separator before and after the relative directory name\n\t\t\tif (_RelativeDirectory == null)\n\t\t\t\t_RelativeDirectory = Path.DirectorySeparatorChar.ToString();\n\n\t\t\tif (!(_RelativeDirectory[0] == Path.DirectorySeparatorChar ||\n\t\t\t\t_RelativeDirectory[0] == Path.AltDirectorySeparatorChar))\n\t\t\t\t_RelativeDirectory = Path.DirectorySeparatorChar + _RelativeDirectory;\n\n\t\t\tif (!(_RelativeDirectory[_RelativeDirectory.Length-1] == Path.DirectorySeparatorChar ||\n\t\t\t\t _RelativeDirectory[_RelativeDirectory.Length-1] == Path.AltDirectorySeparatorChar))\n\t\t\t\t_RelativeDirectory = _RelativeDirectory + Path.DirectorySeparatorChar;\n\n\t\t\t_FileList = new List<string>();\n\n\t\t\tstring relativeName;\n\t\t\t_io = GetIOStream(out relativeName, ext);\n\t\t\t_FileName = _Directory + relativeName;\n\t\t\t_rand = null;\n\t\t\n\t\t}\n\n\t\tpublic List<string> FileList\n\t\t{\n\t\t\tget { return _FileList; }\n\t\t}\n\t\t\n\t\tpublic string FileName\n\t\t{\n\t\t\tget { return _FileName; }\n\t\t}\n\t\t\n\t\tpublic string RelativeDirectory\n\t\t{\n\t\t\tget { return _RelativeDirectory; }\n\t\t}\n\n\t\t#region IStreamGen Members\n\t\tpublic void CloseMainStream()\n\t\t{\n\t\t\tif (_SW != null)\n\t\t\t{\n\t\t\t\t_SW.Close();\n\t\t\t\t_SW = null;\n\t\t\t}\n\t\t\tif (_io != null)\n\t\t\t{\n\t\t\t\t_io.Close();\n\t\t\t\t_io = null;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tpublic Stream GetStream()\n\t\t{\n\t\t\treturn this._io;\n\t\t}\n\n\t\tpublic TextWriter GetTextWriter()\n\t\t{\n\t\t\tif (_SW == null)\n\t\t\t\t_SW = new StreamWriter(_io);\n\t\t\treturn _SW;\n\t\t}\n\n\t\t// create a new file in the directory specified and return\n\t\t//   a Stream caller can then write to.   relativeName is filled in with\n\t\t//   name we generate (sans the directory).\n\t\tpublic Stream GetIOStream(out string relativeName, string extension)\n\t\t{\n\t\t\tStream io=null;\n\t\t\tlock (typeof(StreamGen))\t// single thread lock while we're creating a file\n\t\t\t{\t\t\t\t\t\t\t//  this assumes no other routine creates files in this directory\n\t\t\t\t// Obtain a new file name\n\t\t\t\tif (_rand == null)\n\t\t\t\t\t_rand = new Random();\n\t\t\t\tint rnd = _rand.Next();\n\n\t\t\t\tstring filename = _Directory + _RelativeDirectory + \"f\" + rnd.ToString() + \".\" + extension; \n\t\t\t\tFileInfo fi = new FileInfo(filename);\n\t\t\t\twhile (fi.Exists)\n\t\t\t\t{\n\t\t\t\t\trnd = _rand.Next();\n\t\t\t\t\tfilename = _Directory + _RelativeDirectory + \"f\" + rnd.ToString() + \".\" + extension; \n\t\t\t\t\tfi = new FileInfo(filename);\n\t\t\t\t}\n\n\t\t\t\trelativeName = _RelativeDirectory + \"f\" + rnd.ToString() + \".\" + extension;\n\t\t\t\tio = fi.Create();\n\t\t\t\t_FileList.Add(filename);\n\t\t\t}\n\t\t\treturn io; \n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable Members\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tif (_SW != null)\n\t\t\t{\n\t\t\t\t_SW.Flush();\n\t\t\t\t_SW.Close();\n\t\t\t\t_SW = null;\n\t\t\t}\n\t\t\tif (_io != null)\n\t\t\t{\n\t\t\t\t_io.Flush();\n\t\t\t\t_io.Close();\n\t\t\t\t_io = null;\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Resources/Strings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Majorsilence.Reporting.RdlEngine.Resources {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class Strings {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Strings() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Majorsilence.Reporting.RdlEngine.Resources.Strings\", typeof(Strings).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Cancel.\n        /// </summary>\n        public static string ButtonCancel_Text {\n            get {\n                return ResourceManager.GetString(\"ButtonCancel_Text\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Save.\n        /// </summary>\n        public static string ButtonSave_Text {\n            get {\n                return ResourceManager.GetString(\"ButtonSave_Text\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to error : FileReader.UnGet : ungetted first char.\n        /// </summary>\n        public static string CharReader_Error_FileReaderUnGetFirstChar {\n            get {\n                return ResourceManager.GetString(\"CharReader_Error_FileReaderUnGetFirstChar\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Plot area height is less than or equal to 0.\n        /// </summary>\n        public static string ChartLayout_Error_PlotAreaHeightIs0 {\n            get {\n                return ResourceManager.GetString(\"ChartLayout_Error_PlotAreaHeightIs0\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Plot area width is less than or equal to 0.\n        /// </summary>\n        public static string ChartLayout_Error_PlotAreaWidthIs0 {\n            get {\n                return ResourceManager.GetString(\"ChartLayout_Error_PlotAreaWidthIs0\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to No password provided for shared DataSource reference.\n        /// </summary>\n        public static string DataSourceDefn_Error_NoPasswordForDSR {\n            get {\n                return ResourceManager.GetString(\"DataSourceDefn_Error_NoPasswordForDSR\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Save File As.\n        /// </summary>\n        public static string FileChooser_SaveFileTo_Title {\n            get {\n                return ResourceManager.GetString(\"FileChooser_SaveFileTo_Title\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Filter operators TopN and BottomN require an integer value got {0}..\n        /// </summary>\n        public static string Filter_Error_TopNAndBottomNRequireInt {\n            get {\n                return ResourceManager.GetString(\"Filter_Error_TopNAndBottomNRequireInt\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to IPmt doesn&apos;t support payments due at beginning of period..\n        /// </summary>\n        public static string Financial_Error_IPmtNotSupportPayments {\n            get {\n                return ResourceManager.GetString(\"Financial_Error_IPmtNotSupportPayments\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} method not found in code.\n        /// </summary>\n        public static string FunctionCode_Error_MethodNotFound {\n            get {\n                return ResourceManager.GetString(\"FunctionCode_Error_MethodNotFound\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} method not found in class {1}.\n        /// </summary>\n        public static string FunctionCustomInstance_Error_MethodNotFoundInClass {\n            get {\n                return ResourceManager.GetString(\"FunctionCustomInstance_Error_MethodNotFoundInClass\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} method not found in class {1}.\n        /// </summary>\n        public static string FunctionCustomStatic_Error_MethodNotFoundInClass {\n            get {\n                return ResourceManager.GetString(\"FunctionCustomStatic_Error_MethodNotFoundInClass\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Field collection argument {0} is invalid.\n        /// </summary>\n        public static string FunctionFieldCollection_Error_FieldCollectionInvalid {\n            get {\n                return ResourceManager.GetString(\"FunctionFieldCollection_Error_FieldCollectionInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Field collection argument is null.\n        /// </summary>\n        public static string FunctionFieldCollection_Error_FieldCollectionNull {\n            get {\n                return ResourceManager.GetString(\"FunctionFieldCollection_Error_FieldCollectionNull\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Globals collection argument is null.\n        /// </summary>\n        public static string FunctionGlobalCollection_Error_GlobalsNull {\n            get {\n                return ResourceManager.GetString(\"FunctionGlobalCollection_Error_GlobalsNull\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Globals collection argument &apos;{0}&apos; is unknown..\n        /// </summary>\n        public static string FunctionGlobalCollection_Error_GlobalsUnknown {\n            get {\n                return ResourceManager.GetString(\"FunctionGlobalCollection_Error_GlobalsUnknown\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Parameter collection argument {0} is invalid.\n        /// </summary>\n        public static string FunctionParameterCollection_Error_ParameterCollectionInvalid {\n            get {\n                return ResourceManager.GetString(\"FunctionParameterCollection_Error_ParameterCollectionInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Parameter collection argument is null.\n        /// </summary>\n        public static string FunctionParameterCollection_Error_ParameterCollectionNull {\n            get {\n                return ResourceManager.GetString(\"FunctionParameterCollection_Error_ParameterCollectionNull\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to ReportItem collection argument {0} is invalid.\n        /// </summary>\n        public static string FunctionReportItemCollection_Error_ReportItemCollectionInvalid {\n            get {\n                return ResourceManager.GetString(\"FunctionReportItemCollection_Error_ReportItemCollectionInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to ReportItem collection argument is null.\n        /// </summary>\n        public static string FunctionReportItemCollection_Error_ReportItemCollectionNull {\n            get {\n                return ResourceManager.GetString(\"FunctionReportItemCollection_Error_ReportItemCollectionNull\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Internal error: unknown Report Parameter method.\n        /// </summary>\n        public static string FunctionReportParameter_Error_UnknownReporParameterMethod {\n            get {\n                return ResourceManager.GetString(\"FunctionReportParameter_Error_UnknownReporParameterMethod\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} method not found in class {1}.\n        /// </summary>\n        public static string FunctionSystem_Error_MethodNotFound {\n            get {\n                return ResourceManager.GetString(\"FunctionSystem_Error_MethodNotFound\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to User collection argument {0} is invalid..\n        /// </summary>\n        public static string FunctionUserCollection_Error_UserCollectionInvalid {\n            get {\n                return ResourceManager.GetString(\"FunctionUserCollection_Error_UserCollectionInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to User collection argument is null.\n        /// </summary>\n        public static string FunctionUserCollection_Error_UserCollectionNull {\n            get {\n                return ResourceManager.GetString(\"FunctionUserCollection_Error_UserCollectionNull\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid conversion from Language to boolean..\n        /// </summary>\n        public static string FunctionUserLanguage_Error_ConvertToBoolean {\n            get {\n                return ResourceManager.GetString(\"FunctionUserLanguage_Error_ConvertToBoolean\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid conversion from Language to DateTime..\n        /// </summary>\n        public static string FunctionUserLanguage_Error_ConvertToDateTime {\n            get {\n                return ResourceManager.GetString(\"FunctionUserLanguage_Error_ConvertToDateTime\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid conversion from Language to Decimal..\n        /// </summary>\n        public static string FunctionUserLanguage_Error_ConvertToDecimal {\n            get {\n                return ResourceManager.GetString(\"FunctionUserLanguage_Error_ConvertToDecimal\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid conversion from Language to double..\n        /// </summary>\n        public static string FunctionUserLanguage_Error_ConvertToDouble {\n            get {\n                return ResourceManager.GetString(\"FunctionUserLanguage_Error_ConvertToDouble\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid conversion from Language to Int32..\n        /// </summary>\n        public static string FunctionUserLanguage_Error_ConvertToInt32 {\n            get {\n                return ResourceManager.GetString(\"FunctionUserLanguage_Error_ConvertToInt32\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &apos;{0}&apos; should be followed by a number.\n        /// </summary>\n        public static string Lexer_Error_SeparatorMustFollowedNumber {\n            get {\n                return ResourceManager.GetString(\"Lexer_Error_SeparatorMustFollowedNumber\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unterminated comment!.\n        /// </summary>\n        public static string Lexer_Error_UnterminatedComment {\n            get {\n                return ResourceManager.GetString(\"Lexer_Error_UnterminatedComment\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid number constant..\n        /// </summary>\n        public static string Lexer_ErrorP_InvalidNumberConstant {\n            get {\n                return ResourceManager.GetString(\"Lexer_ErrorP_InvalidNumberConstant\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unterminated string!.\n        /// </summary>\n        public static string Lexer_ErrorP_UnterminatedString {\n            get {\n                return ResourceManager.GetString(\"Lexer_ErrorP_UnterminatedString\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The extension of the filename provided + &apos;{0}&apos;, does not have the expected extension(s) &apos;{1}&apos;.\n        /// </summary>\n        public static string MhtBuilder_Error_Extension {\n            get {\n                return ResourceManager.GetString(\"MhtBuilder_Error_Extension\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The filename provided, &apos;{0}&apos;, has no extension. If are specifying a folder, make sure it ends in a trailing slash. The expected file extension(s) are &apos;{1}&apos;.\n        /// </summary>\n        public static string MhtBuilder_Error_FilenameNoExtension {\n            get {\n                return ResourceManager.GetString(\"MhtBuilder_Error_FilenameNoExtension\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to unable to download &apos;{0}&apos;: {1}.\n        /// </summary>\n        public static string MhtBuilder_Error_UnableDownload {\n            get {\n                return ResourceManager.GetString(\"MhtBuilder_Error_UnableDownload\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Converting references only makes sense for HTML or CSS files; this file is of type &apos;{0}&apos;.\n        /// </summary>\n        public static string MhtWebFile_Error_ConvertOnlyHTMLOrCSS {\n            get {\n                return ResourceManager.GetString(\"MhtWebFile_Error_ConvertOnlyHTMLOrCSS\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to No filename was provided, and the HTML title tag was not found, so a filename could not be automatically generated. You&apos;ll need to provide a filename and not a folder..\n        /// </summary>\n        public static string MhtWebFile_Error_NoFilename {\n            get {\n                return ResourceManager.GetString(\"MhtWebFile_Error_NoFilename\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to File {0} already exists..\n        /// </summary>\n        public static string OneFileStreamGen_Error_FileAlreadyExists {\n            get {\n                return ResourceManager.GetString(\"OneFileStreamGen_Error_FileAlreadyExists\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to CurrentPage must be in the list of pages.\n        /// </summary>\n        public static string Pages_Error_CurrentPageMustInList {\n            get {\n                return ResourceManager.GetString(\"Pages_Error_CurrentPageMustInList\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Build method must be called prior to referencing TotalHeight..\n        /// </summary>\n        public static string PageTextHtml_Error_BuildMethodMustCalledPriorTotalHeight {\n            get {\n                return ResourceManager.GetString(\"PageTextHtml_Error_BuildMethodMustCalledPriorTotalHeight\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Aggregate function &apos;{0}&apos; cannot be nested in another aggregate function..\n        /// </summary>\n        public static string Parser_ErrorP_AggregateCannotNestedInAnotherAggregate {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_AggregateCannotNestedInAnotherAggregate\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Aggregate function &apos;{0}&apos; cannot be used within a Grouping expression..\n        /// </summary>\n        public static string Parser_ErrorP_AggregateCannotUsedWithinGrouping {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_AggregateCannotUsedWithinGrouping\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Aggregate function must have at least one argument..\n        /// </summary>\n        public static string Parser_ErrorP_AggregateMust1Argument {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_AggregateMust1Argument\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to AND/OR operations require both sides to be boolean expressions..\n        /// </summary>\n        public static string Parser_ErrorP_AND_OR_RequiresBoolean {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_AND_OR_RequiresBoolean\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to   At column {0}.\n        /// </summary>\n        public static string Parser_ErrorP_AtColumn {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_AtColumn\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &apos;)&apos; expected but not found..\n        /// </summary>\n        public static string Parser_ErrorP_BracketExpected {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_BracketExpected\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to First argument to Choose function must be numeric..\n        /// </summary>\n        public static string Parser_ErrorP_ChooseFirstArgumentMustNumeric {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_ChooseFirstArgumentMustNumeric\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Choose function requires at least 2 arguments..\n        /// </summary>\n        public static string Parser_ErrorP_ChooseRequires2Arguments {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_ChooseRequires2Arguments\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Class {0} is not known..\n        /// </summary>\n        public static string Parser_ErrorP_ClassUnknown {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_ClassUnknown\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &apos;}&apos; expected but not found..\n        /// </summary>\n        public static string Parser_ErrorP_CurlyBracketExpected {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_CurlyBracketExpected\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to End of expression expected..\n        /// </summary>\n        public static string Parser_ErrorP_EndExpressionExpected {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_EndExpressionExpected\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Expecting &apos;,&apos; or &apos;)&apos;..\n        /// </summary>\n        public static string Parser_ErrorP_ExpectingComma {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_ExpectingComma\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Field &apos;{0}&apos;  not found..\n        /// </summary>\n        public static string Parser_ErrorP_FieldNotFound {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_FieldNotFound\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Field &apos;{0}&apos; is not in DataSet {1}..\n        /// </summary>\n        public static string Parser_ErrorP_FieldNotInDataSet {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_FieldNotInDataSet\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Fields collection requires exactly 1 argument..\n        /// </summary>\n        public static string Parser_ErrorP_FieldsRequires1Argument {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_FieldsRequires1Argument\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Field &apos;{0}&apos;  only supports &apos;Value&apos; and &apos;IsMissing&apos; properties..\n        /// </summary>\n        public static string Parser_ErrorP_FieldSupportsValueAndIsMissing {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_FieldSupportsValueAndIsMissing\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Format function requires 2 arguments..\n        /// </summary>\n        public static string Parser_ErrorP_FormatRequires2Arguments {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_FormatRequires2Arguments\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to   Found &apos;{0}&apos;.\n        /// </summary>\n        public static string Parser_ErrorP_FoundValue {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_FoundValue\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Function &apos;{0}&apos; of class &apos;{1}&apos; is not known..\n        /// </summary>\n        public static string Parser_ErrorP_FunctionOfClassUnknown {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_FunctionOfClassUnknown\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Function {0} is not known..\n        /// </summary>\n        public static string Parser_ErrorP_FunctionUnknown {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_FunctionUnknown\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Globals &apos;{0}&apos;  not found..\n        /// </summary>\n        public static string Parser_ErrorP_GlobalsNotFound {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_GlobalsNotFound\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Globals collection requires exactly 1 argument..\n        /// </summary>\n        public static string Parser_ErrorP_GlobalsRequires1Argument {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_GlobalsRequires1Argument\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Constant or Identifier expected but not found..\n        /// </summary>\n        public static string Parser_ErrorP_IdentifierExpected {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_IdentifierExpected\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to iff function requires 3 arguments..\n        /// </summary>\n        public static string Parser_ErrorP_iff_function_requires_3_arguments {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_iff_function_requires_3_arguments\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid function arguments..\n        /// </summary>\n        public static string Parser_ErrorP_Invalid_function_arguments {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_Invalid_function_arguments\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to ReportItem &apos;{0}&apos;  not found..\n        /// </summary>\n        public static string Parser_ErrorP_ItemNotFound {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_ItemNotFound\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to ReportItem &apos;{0}&apos;  only supports &apos;Value&apos; property..\n        /// </summary>\n        public static string Parser_ErrorP_ItemSupportsValue {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_ItemSupportsValue\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &apos;-&apos; operator works only on numbers..\n        /// </summary>\n        public static string Parser_ErrorP_MinusNeedNumbers {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_MinusNeedNumbers\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to No scope provided for aggregate function &apos;{0}&apos; but more than one DataSet defined..\n        /// </summary>\n        public static string Parser_ErrorP_NoScope4Aggregate {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_NoScope4Aggregate\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} is not a Code method.  Verify the name of the method and its arguments match an existing code function..\n        /// </summary>\n        public static string Parser_ErrorP_NotCodeMethod {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_NotCodeMethod\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to NOT requires boolean expression..\n        /// </summary>\n        public static string Parser_ErrorP_NOTRequiresBoolean {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_NOTRequiresBoolean\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Report parameter &apos;{0}&apos;  not found..\n        /// </summary>\n        public static string Parser_ErrorP_ParameterNotFound {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_ParameterNotFound\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Parameters collection requires exactly 1 argument..\n        /// </summary>\n        public static string Parser_ErrorP_ParametersRequires1Argument {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_ParametersRequires1Argument\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Parameter &apos;{0}&apos;  only supports &apos;Value&apos; and &apos;Label&apos; properties..\n        /// </summary>\n        public static string Parser_ErrorP_ParameterSupportsValueAndLabel {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_ParameterSupportsValueAndLabel\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to ReportItems collection requires exactly 1 argument..\n        /// </summary>\n        public static string Parser_ErrorP_ReportItemsRequires1Argument {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_ReportItemsRequires1Argument\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to RunningValue takes 2 or 3 arguments..\n        /// </summary>\n        public static string Parser_ErrorP_RunningValue_takes_2_or_3_arguments {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_RunningValue_takes_2_or_3_arguments\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to RunningValue &apos;Function&apos; argument is invalid..\n        /// </summary>\n        public static string Parser_ErrorP_RunningValueArgumentInvalid {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_RunningValueArgumentInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to RunningValue function &apos;{0}&apos; is not supported..\n        /// </summary>\n        public static string Parser_ErrorP_RunningValueNotSupported {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_RunningValueNotSupported\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Illegal scope identifer specified..\n        /// </summary>\n        public static string Parser_ErrorP_ScopeIdentifer {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_ScopeIdentifer\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} function&apos;s scope must be a constant..\n        /// </summary>\n        public static string Parser_ErrorP_ScopeMustConstant {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_ScopeMustConstant\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Scope &apos;{0}&apos; does not reference a known DataSet..\n        /// </summary>\n        public static string Parser_ErrorP_ScopeNotKnownDataSet {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_ScopeNotKnownDataSet\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Scope &apos;{0}&apos; is not a known Grouping, DataSet or DataRegion name..\n        /// </summary>\n        public static string Parser_ErrorP_ScopeNotKnownGrouping {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_ScopeNotKnownGrouping\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Scope &apos;{0}&apos; can&apos;t be specified in a Page Header or Footer expression..\n        /// </summary>\n        public static string Parser_ErrorP_ScopeNotSpecifiedInHeaderOrFooter {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_ScopeNotSpecifiedInHeaderOrFooter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Second argument to Format function must be a string..\n        /// </summary>\n        public static string Parser_ErrorP_SecondMustString {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_SecondMustString\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Switch function must have a boolean expression every other argument..\n        /// </summary>\n        public static string Parser_ErrorP_SwitchMustBoolean {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_SwitchMustBoolean\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Switch function must have an even number of arguments..\n        /// </summary>\n        public static string Parser_ErrorP_SwitchMustEvenArguments {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_SwitchMustEvenArguments\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Switch function requires at least 2 arguments..\n        /// </summary>\n        public static string Parser_ErrorP_SwitchRequires2Arguments {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_SwitchRequires2Arguments\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &apos;{0}&apos; is an unknown identifer..\n        /// </summary>\n        public static string Parser_ErrorP_UnknownIdentifer {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_UnknownIdentifer\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} is not a known property for {1}..\n        /// </summary>\n        public static string Parser_ErrorP_UnknownProperty {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_UnknownProperty\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to User collection requires exactly 1 argument..\n        /// </summary>\n        public static string Parser_ErrorP_UserRequires1Argument {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_UserRequires1Argument\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to User variable &apos;{0}&apos;  not found..\n        /// </summary>\n        public static string Parser_ErrorP_UserVarNotFound {\n            get {\n                return ResourceManager.GetString(\"Parser_ErrorP_UserVarNotFound\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to GetObjectNumber must be called before GetOutlineDict.\n        /// </summary>\n        public static string PdfOutline_Error_GetObjectNumberMustBeforeGetOutlineDict {\n            get {\n                return ResourceManager.GetString(\"PdfOutline_Error_GetObjectNumberMustBeforeGetOutlineDict\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Report has errors.  Cannot be processed..\n        /// </summary>\n        public static string ProcessReport_Error_ReportHasErrors {\n            get {\n                return ResourceManager.GetString(\"ProcessReport_Error_ReportHasErrors\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error: XML Data must contain top level rows..\n        /// </summary>\n        public static string Query_Error_XMLMustContainTopLevelRows {\n            get {\n                return ResourceManager.GetString(\"Query_Error_XMLMustContainTopLevelRows\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} could not be found.\n        /// </summary>\n        public static string RdlEngineConfig_Error_CashModuleNotFound {\n            get {\n                return ResourceManager.GetString(\"RdlEngineConfig_Error_CashModuleNotFound\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} could not be loaded.\n        /// </summary>\n        public static string RdlEngineConfig_Error_CodeModuleNotLoaded {\n            get {\n                return ResourceManager.GetString(\"RdlEngineConfig_Error_CodeModuleNotLoaded\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} is not a known CustomReportItem type.\n        /// </summary>\n        public static string RdlEngineConfig_Error_NotKnownCustomReportItemType {\n            get {\n                return ResourceManager.GetString(\"RdlEngineConfig_Error_NotKnownCustomReportItemType\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unable to create instance of &apos;{0}&apos; for provider &apos;{1}&apos;.\n        /// </summary>\n        public static string RdlEngineConfig_Error_UnableCreateInstance {\n            get {\n                return ResourceManager.GetString(\"RdlEngineConfig_Error_UnableCreateInstance\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error: RDL doesn&apos;t contain a report element. .\n        /// </summary>\n        public static string RDLParser_ErrorP__NoReport {\n            get {\n                return ResourceManager.GetString(\"RDLParser_ErrorP__NoReport\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error: XML failed .\n        /// </summary>\n        public static string RDLParser_ErrorP_XMLFailed {\n            get {\n                return ResourceManager.GetString(\"RDLParser_ErrorP_XMLFailed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Severity.\n        /// </summary>\n        public static string ReportLog_Error_Severity {\n            get {\n                return ResourceManager.GetString(\"ReportLog_Error_Severity\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Directory contains file with the same name, do you want to overwrite it?.\n        /// </summary>\n        public static string SaveToFile_CheckIf_SameFilesInDir {\n            get {\n                return ResourceManager.GetString(\"SaveToFile_CheckIf_SameFilesInDir\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Subreport {0} doesn&apos;t define parameter {1}..\n        /// </summary>\n        public static string Subreport_Error_SubreportNotParameter {\n            get {\n                return ResourceManager.GetString(\"Subreport_Error_SubreportNotParameter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error: Recursive groups must be the only group definition..\n        /// </summary>\n        public static string Table_Error_RecursiveGroupsMustOnlyGroupDefinition {\n            get {\n                return ResourceManager.GetString(\"Table_Error_RecursiveGroupsMustOnlyGroupDefinition\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Internal error: TableRow not related to a Table.\n        /// </summary>\n        public static string TableRow_Error_TableRowNotRelatedToTable {\n            get {\n                return ResourceManager.GetString(\"TableRow_Error_TableRowNotRelatedToTable\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Internal error.  TableRows must be owned eventually by a table..\n        /// </summary>\n        public static string TableRows_Error_TableRowsMustOwnedTable {\n            get {\n                return ResourceManager.GetString(\"TableRows_Error_TableRowsMustOwnedTable\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Resources/Strings.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ChartLayout_Error_PlotAreaWidthIs0\" xml:space=\"preserve\">\n    <value>Plot area width is less than or equal to 0</value>\n  </data>\n  <data name=\"ChartLayout_Error_PlotAreaHeightIs0\" xml:space=\"preserve\">\n    <value>Plot area height is less than or equal to 0</value>\n  </data>\n  <data name=\"DataSourceDefn_Error_NoPasswordForDSR\" xml:space=\"preserve\">\n    <value>No password provided for shared DataSource reference</value>\n  </data>\n  <data name=\"Filter_Error_TopNAndBottomNRequireInt\" xml:space=\"preserve\">\n    <value>Filter operators TopN and BottomN require an integer value got {0}.</value>\n  </data>\n  <data name=\"Query_Error_XMLMustContainTopLevelRows\" xml:space=\"preserve\">\n    <value>Error: XML Data must contain top level rows.</value>\n  </data>\n  <data name=\"ReportLog_Error_Severity\" xml:space=\"preserve\">\n    <value>Severity</value>\n  </data>\n  <data name=\"Subreport_Error_SubreportNotParameter\" xml:space=\"preserve\">\n    <value>Subreport {0} doesn't define parameter {1}.</value>\n  </data>\n  <data name=\"Table_Error_RecursiveGroupsMustOnlyGroupDefinition\" xml:space=\"preserve\">\n    <value>Error: Recursive groups must be the only group definition.</value>\n  </data>\n  <data name=\"TableRow_Error_TableRowNotRelatedToTable\" xml:space=\"preserve\">\n    <value>Internal error: TableRow not related to a Table</value>\n  </data>\n  <data name=\"TableRows_Error_TableRowsMustOwnedTable\" xml:space=\"preserve\">\n    <value>Internal error.  TableRows must be owned eventually by a table.</value>\n  </data>\n  <data name=\"CharReader_Error_FileReaderUnGetFirstChar\" xml:space=\"preserve\">\n    <value>error : FileReader.UnGet : ungetted first char</value>\n  </data>\n  <data name=\"Financial_Error_IPmtNotSupportPayments\" xml:space=\"preserve\">\n    <value>IPmt doesn't support payments due at beginning of period.</value>\n  </data>\n  <data name=\"FunctionCode_Error_MethodNotFound\" xml:space=\"preserve\">\n    <value>{0} method not found in code</value>\n  </data>\n  <data name=\"FunctionCustomInstance_Error_MethodNotFoundInClass\" xml:space=\"preserve\">\n    <value>{0} method not found in class {1}</value>\n  </data>\n  <data name=\"FunctionCustomStatic_Error_MethodNotFoundInClass\" xml:space=\"preserve\">\n    <value>{0} method not found in class {1}</value>\n  </data>\n  <data name=\"FunctionFieldCollection_Error_FieldCollectionNull\" xml:space=\"preserve\">\n    <value>Field collection argument is null</value>\n  </data>\n  <data name=\"FunctionFieldCollection_Error_FieldCollectionInvalid\" xml:space=\"preserve\">\n    <value>Field collection argument {0} is invalid</value>\n  </data>\n  <data name=\"FunctionGlobalCollection_Error_GlobalsNull\" xml:space=\"preserve\">\n    <value>Globals collection argument is null</value>\n  </data>\n  <data name=\"FunctionGlobalCollection_Error_GlobalsUnknown\" xml:space=\"preserve\">\n    <value>Globals collection argument '{0}' is unknown.</value>\n  </data>\n  <data name=\"FunctionParameterCollection_Error_ParameterCollectionNull\" xml:space=\"preserve\">\n    <value>Parameter collection argument is null</value>\n  </data>\n  <data name=\"FunctionParameterCollection_Error_ParameterCollectionInvalid\" xml:space=\"preserve\">\n    <value>Parameter collection argument {0} is invalid</value>\n  </data>\n  <data name=\"FunctionReportItemCollection_Error_ReportItemCollectionNull\" xml:space=\"preserve\">\n    <value>ReportItem collection argument is null</value>\n  </data>\n  <data name=\"FunctionReportItemCollection_Error_ReportItemCollectionInvalid\" xml:space=\"preserve\">\n    <value>ReportItem collection argument {0} is invalid</value>\n  </data>\n  <data name=\"FunctionReportParameter_Error_UnknownReporParameterMethod\" xml:space=\"preserve\">\n    <value>Internal error: unknown Report Parameter method</value>\n  </data>\n  <data name=\"FunctionSystem_Error_MethodNotFound\" xml:space=\"preserve\">\n    <value>{0} method not found in class {1}</value>\n  </data>\n  <data name=\"FunctionUserCollection_Error_UserCollectionNull\" xml:space=\"preserve\">\n    <value>User collection argument is null</value>\n  </data>\n  <data name=\"FunctionUserCollection_Error_UserCollectionInvalid\" xml:space=\"preserve\">\n    <value>User collection argument {0} is invalid.</value>\n  </data>\n  <data name=\"FunctionUserLanguage_Error_ConvertToDouble\" xml:space=\"preserve\">\n    <value>Invalid conversion from Language to double.</value>\n  </data>\n  <data name=\"FunctionUserLanguage_Error_ConvertToDecimal\" xml:space=\"preserve\">\n    <value>Invalid conversion from Language to Decimal.</value>\n  </data>\n  <data name=\"FunctionUserLanguage_Error_ConvertToInt32\" xml:space=\"preserve\">\n    <value>Invalid conversion from Language to Int32.</value>\n  </data>\n  <data name=\"FunctionUserLanguage_Error_ConvertToDateTime\" xml:space=\"preserve\">\n    <value>Invalid conversion from Language to DateTime.</value>\n  </data>\n  <data name=\"FunctionUserLanguage_Error_ConvertToBoolean\" xml:space=\"preserve\">\n    <value>Invalid conversion from Language to boolean.</value>\n  </data>\n  <data name=\"MhtBuilder_Error_FilenameNoExtension\" xml:space=\"preserve\">\n    <value>The filename provided, '{0}', has no extension. If are specifying a folder, make sure it ends in a trailing slash. The expected file extension(s) are '{1}'</value>\n  </data>\n  <data name=\"MhtBuilder_Error_Extension\" xml:space=\"preserve\">\n    <value>The extension of the filename provided + '{0}', does not have the expected extension(s) '{1}'</value>\n  </data>\n  <data name=\"MhtWebFile_Error_ConvertOnlyHTMLOrCSS\" xml:space=\"preserve\">\n    <value>Converting references only makes sense for HTML or CSS files; this file is of type '{0}'</value>\n  </data>\n  <data name=\"MhtWebFile_Error_NoFilename\" xml:space=\"preserve\">\n    <value>No filename was provided, and the HTML title tag was not found, so a filename could not be automatically generated. You'll need to provide a filename and not a folder.</value>\n  </data>\n  <data name=\"OneFileStreamGen_Error_FileAlreadyExists\" xml:space=\"preserve\">\n    <value>File {0} already exists.</value>\n  </data>\n  <data name=\"PdfOutline_Error_GetObjectNumberMustBeforeGetOutlineDict\" xml:space=\"preserve\">\n    <value>GetObjectNumber must be called before GetOutlineDict</value>\n  </data>\n  <data name=\"ProcessReport_Error_ReportHasErrors\" xml:space=\"preserve\">\n    <value>Report has errors.  Cannot be processed.</value>\n  </data>\n  <data name=\"Pages_Error_CurrentPageMustInList\" xml:space=\"preserve\">\n    <value>CurrentPage must be in the list of pages</value>\n  </data>\n  <data name=\"PageTextHtml_Error_BuildMethodMustCalledPriorTotalHeight\" xml:space=\"preserve\">\n    <value>Build method must be called prior to referencing TotalHeight.</value>\n  </data>\n  <data name=\"RdlEngineConfig_Error_UnableCreateInstance\" xml:space=\"preserve\">\n    <value>Unable to create instance of '{0}' for provider '{1}'</value>\n  </data>\n  <data name=\"RdlEngineConfig_Error_NotKnownCustomReportItemType\" xml:space=\"preserve\">\n    <value>{0} is not a known CustomReportItem type</value>\n  </data>\n  <data name=\"RdlEngineConfig_Error_CashModuleNotFound\" xml:space=\"preserve\">\n    <value>{0} could not be found</value>\n  </data>\n  <data name=\"RdlEngineConfig_Error_CodeModuleNotLoaded\" xml:space=\"preserve\">\n    <value>{0} could not be loaded</value>\n  </data>\n  <data name=\"MhtBuilder_Error_UnableDownload\" xml:space=\"preserve\">\n    <value>unable to download '{0}': {1}</value>\n  </data>\n  <data name=\"RDLParser_ErrorP__NoReport\" xml:space=\"preserve\">\n    <value>Error: RDL doesn't contain a report element. </value>\n  </data>\n  <data name=\"RDLParser_ErrorP_XMLFailed\" xml:space=\"preserve\">\n    <value>Error: XML failed </value>\n  </data>\n  <data name=\"Lexer_ErrorP_InvalidNumberConstant\" xml:space=\"preserve\">\n    <value>Invalid number constant.</value>\n  </data>\n  <data name=\"Lexer_Error_SeparatorMustFollowedNumber\" xml:space=\"preserve\">\n    <value>'{0}' should be followed by a number</value>\n  </data>\n  <data name=\"Lexer_ErrorP_UnterminatedString\" xml:space=\"preserve\">\n    <value>Unterminated string!</value>\n  </data>\n  <data name=\"Lexer_Error_UnterminatedComment\" xml:space=\"preserve\">\n    <value>Unterminated comment!</value>\n  </data>\n\t<data name=\"Parser_ErrorP_AtColumn\" xml:space=\"preserve\">\n    <value>  At column {0}</value>\n  </data>\n\t<data name=\"Parser_ErrorP_EndExpressionExpected\" xml:space=\"preserve\">\n    <value>End of expression expected.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_AND_OR_RequiresBoolean\" xml:space=\"preserve\">\n    <value>AND/OR operations require both sides to be boolean expressions.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_NOTRequiresBoolean\" xml:space=\"preserve\">\n    <value>NOT requires boolean expression.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_MinusNeedNumbers\" xml:space=\"preserve\">\n    <value>'-' operator works only on numbers.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_FoundValue\" xml:space=\"preserve\">\n    <value>  Found '{0}'</value>\n  </data>\n\t<data name=\"Parser_ErrorP_BracketExpected\" xml:space=\"preserve\">\n    <value>')' expected but not found.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_IdentifierExpected\" xml:space=\"preserve\">\n    <value>Constant or Identifier expected but not found.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_FieldNotFound\" xml:space=\"preserve\">\n    <value>Field '{0}'  not found.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_FieldSupportsValueAndIsMissing\" xml:space=\"preserve\">\n    <value>Field '{0}'  only supports 'Value' and 'IsMissing' properties.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_ParameterNotFound\" xml:space=\"preserve\">\n    <value>Report parameter '{0}'  not found.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_ParameterSupportsValueAndLabel\" xml:space=\"preserve\">\n    <value>Parameter '{0}'  only supports 'Value' and 'Label' properties.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_ItemNotFound\" xml:space=\"preserve\">\n    <value>ReportItem '{0}'  not found.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_ItemSupportsValue\" xml:space=\"preserve\">\n    <value>ReportItem '{0}'  only supports 'Value' property.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_GlobalsNotFound\" xml:space=\"preserve\">\n    <value>Globals '{0}'  not found.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_UserVarNotFound\" xml:space=\"preserve\">\n    <value>User variable '{0}'  not found.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_UnknownIdentifer\" xml:space=\"preserve\">\n    <value>'{0}' is an unknown identifer.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_AggregateCannotUsedWithinGrouping\" xml:space=\"preserve\">\n    <value>Aggregate function '{0}' cannot be used within a Grouping expression.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_AggregateCannotNestedInAnotherAggregate\" xml:space=\"preserve\">\n    <value>Aggregate function '{0}' cannot be nested in another aggregate function.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_Invalid_function_arguments\" xml:space=\"preserve\">\n    <value>Invalid function arguments.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_ExpectingComma\" xml:space=\"preserve\">\n    <value>Expecting ',' or ')'.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_iff_function_requires_3_arguments\" xml:space=\"preserve\">\n    <value>iff function requires 3 arguments.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_ChooseRequires2Arguments\" xml:space=\"preserve\">\n    <value>Choose function requires at least 2 arguments.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_ChooseFirstArgumentMustNumeric\" xml:space=\"preserve\">\n    <value>First argument to Choose function must be numeric.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_SwitchRequires2Arguments\" xml:space=\"preserve\">\n    <value>Switch function requires at least 2 arguments.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_SwitchMustEvenArguments\" xml:space=\"preserve\">\n    <value>Switch function must have an even number of arguments.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_SwitchMustBoolean\" xml:space=\"preserve\">\n    <value>Switch function must have a boolean expression every other argument.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_FormatRequires2Arguments\" xml:space=\"preserve\">\n    <value>Format function requires 2 arguments.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_SecondMustString\" xml:space=\"preserve\">\n    <value>Second argument to Format function must be a string.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_FieldsRequires1Argument\" xml:space=\"preserve\">\n    <value>Fields collection requires exactly 1 argument.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_UnknownProperty\" xml:space=\"preserve\">\n    <value>{0} is not a known property for {1}.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_ParametersRequires1Argument\" xml:space=\"preserve\">\n    <value>Parameters collection requires exactly 1 argument.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_ReportItemsRequires1Argument\" xml:space=\"preserve\">\n    <value>ReportItems collection requires exactly 1 argument.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_GlobalsRequires1Argument\" xml:space=\"preserve\">\n    <value>Globals collection requires exactly 1 argument.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_UserRequires1Argument\" xml:space=\"preserve\">\n    <value>User collection requires exactly 1 argument.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_RunningValue_takes_2_or_3_arguments\" xml:space=\"preserve\">\n    <value>RunningValue takes 2 or 3 arguments.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_RunningValueArgumentInvalid\" xml:space=\"preserve\">\n    <value>RunningValue 'Function' argument is invalid.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_RunningValueNotSupported\" xml:space=\"preserve\">\n    <value>RunningValue function '{0}' is not supported.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_ScopeMustConstant\" xml:space=\"preserve\">\n    <value>{0} function's scope must be a constant.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_ScopeNotKnownDataSet\" xml:space=\"preserve\">\n    <value>Scope '{0}' does not reference a known DataSet.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_NoScope4Aggregate\" xml:space=\"preserve\">\n    <value>No scope provided for aggregate function '{0}' but more than one DataSet defined.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_FieldNotInDataSet\" xml:space=\"preserve\">\n    <value>Field '{0}' is not in DataSet {1}.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_AggregateMust1Argument\" xml:space=\"preserve\">\n    <value>Aggregate function must have at least one argument.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_ScopeNotSpecifiedInHeaderOrFooter\" xml:space=\"preserve\">\n    <value>Scope '{0}' can't be specified in a Page Header or Footer expression.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_ScopeNotKnownGrouping\" xml:space=\"preserve\">\n    <value>Scope '{0}' is not a known Grouping, DataSet or DataRegion name.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_ScopeIdentifer\" xml:space=\"preserve\">\n    <value>Illegal scope identifer specified.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_NotCodeMethod\" xml:space=\"preserve\">\n    <value>{0} is not a Code method.  Verify the name of the method and its arguments match an existing code function.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_FunctionUnknown\" xml:space=\"preserve\">\n    <value>Function {0} is not known.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_ClassUnknown\" xml:space=\"preserve\">\n    <value>Class {0} is not known.</value>\n  </data>\n\t<data name=\"Parser_ErrorP_FunctionOfClassUnknown\" xml:space=\"preserve\">\n    <value>Function '{0}' of class '{1}' is not known.</value>\n  </data>\n  <data name=\"Parser_ErrorP_CurlyBracketExpected\" xml:space=\"preserve\">\n    <value>'}' expected but not found.</value>\n  </data>\n  <data name=\"SaveToFile_CheckIf_SameFilesInDir\" xml:space=\"preserve\">\n    <value>Directory contains file with the same name, do you want to overwrite it?</value>\n  </data>\n  <data name=\"ButtonSave_Text\" xml:space=\"preserve\">\n    <value>Save</value>\n  </data>\n  <data name=\"ButtonCancel_Text\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"FileChooser_SaveFileTo_Title\" xml:space=\"preserve\">\n    <value>Save File As</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlEngine/Resources/Strings.ru-RU.Designer.cs",
    "content": ""
  },
  {
    "path": "RdlEngine/Resources/Strings.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"CharReader_Error_FileReaderUnGetFirstChar\" xml:space=\"preserve\">\n    <value>ошибка : не найден первый символ</value>\n  </data>\n  <data name=\"ChartLayout_Error_PlotAreaHeightIs0\" xml:space=\"preserve\">\n    <value>Высота участка меньше или равна 0</value>\n  </data>\n  <data name=\"ChartLayout_Error_PlotAreaWidthIs0\" xml:space=\"preserve\">\n    <value>Ширина участка меньше или равна 0</value>\n  </data>\n  <data name=\"DataSourceDefn_Error_NoPasswordForDSR\" xml:space=\"preserve\">\n    <value>Для общего источника данных не задан пароль</value>\n  </data>\n  <data name=\"Filter_Error_TopNAndBottomNRequireInt\" xml:space=\"preserve\">\n    <value>Операторы фильтра TopN и BottomN требуют целое значение {0}.</value>\n  </data>\n  <data name=\"Financial_Error_IPmtNotSupportPayments\" xml:space=\"preserve\">\n    <value>IPmt не поддерживает выплаты, причитающиеся на начало периода.</value>\n  </data>\n  <data name=\"FunctionCode_Error_MethodNotFound\" xml:space=\"preserve\">\n    <value>Метод \"{0}\" не найден в коде</value>\n  </data>\n  <data name=\"FunctionCustomInstance_Error_MethodNotFoundInClass\" xml:space=\"preserve\">\n    <value>Метод \"{0}\" не найден в классе \"{1}\"</value>\n  </data>\n  <data name=\"FunctionCustomStatic_Error_MethodNotFoundInClass\" xml:space=\"preserve\">\n    <value>Метод \"{0}\" не найден в классе \"{1}\"</value>\n  </data>\n  <data name=\"FunctionFieldCollection_Error_FieldCollectionInvalid\" xml:space=\"preserve\">\n    <value>Аргумент \"{0}\" недопустил для коллекции Field</value>\n  </data>\n  <data name=\"FunctionFieldCollection_Error_FieldCollectionNull\" xml:space=\"preserve\">\n    <value>Аргумент коллекции Field пуст</value>\n  </data>\n  <data name=\"FunctionGlobalCollection_Error_GlobalsNull\" xml:space=\"preserve\">\n    <value>Аргумент коллекции Globals пуст</value>\n  </data>\n  <data name=\"FunctionGlobalCollection_Error_GlobalsUnknown\" xml:space=\"preserve\">\n    <value>Аргумент \"{0}\" недопустил для коллекции Globals</value>\n  </data>\n  <data name=\"FunctionParameterCollection_Error_ParameterCollectionInvalid\" xml:space=\"preserve\">\n    <value>Аргумент \"{0}\" недопустил для коллекции Parameter</value>\n  </data>\n  <data name=\"FunctionParameterCollection_Error_ParameterCollectionNull\" xml:space=\"preserve\">\n    <value>Аргумент коллекции Parameter пуст</value>\n  </data>\n  <data name=\"FunctionReportItemCollection_Error_ReportItemCollectionInvalid\" xml:space=\"preserve\">\n    <value>Аргумент \"{0}\" недопустил для коллекции ReportItem</value>\n  </data>\n  <data name=\"FunctionReportItemCollection_Error_ReportItemCollectionNull\" xml:space=\"preserve\">\n    <value>Аргумент коллекции ReportItem пуст</value>\n  </data>\n  <data name=\"FunctionReportParameter_Error_UnknownReporParameterMethod\" xml:space=\"preserve\">\n    <value>Внутренняя ошибка: неизвестный метод Report Parameter</value>\n  </data>\n  <data name=\"FunctionSystem_Error_MethodNotFound\" xml:space=\"preserve\">\n    <value>Метод \"{0}\" не найден в классе \"{1}\"</value>\n  </data>\n  <data name=\"FunctionUserCollection_Error_UserCollectionInvalid\" xml:space=\"preserve\">\n    <value>Аргумент \"{0}\" недопустил для коллекции User</value>\n  </data>\n  <data name=\"FunctionUserCollection_Error_UserCollectionNull\" xml:space=\"preserve\">\n    <value>Аргумент коллекции User пуст</value>\n  </data>\n  <data name=\"FunctionUserLanguage_Error_ConvertToBoolean\" xml:space=\"preserve\">\n    <value>Недопустимый перевод из языка к Boolean.</value>\n  </data>\n  <data name=\"FunctionUserLanguage_Error_ConvertToDateTime\" xml:space=\"preserve\">\n    <value>Недопустимый перевод из языка к DateTime.</value>\n  </data>\n  <data name=\"FunctionUserLanguage_Error_ConvertToDecimal\" xml:space=\"preserve\">\n    <value>Недопустимый перевод из языка к Decimal.</value>\n  </data>\n  <data name=\"FunctionUserLanguage_Error_ConvertToDouble\" xml:space=\"preserve\">\n    <value>Недопустимый перевод из языка к Double.</value>\n  </data>\n  <data name=\"FunctionUserLanguage_Error_ConvertToInt32\" xml:space=\"preserve\">\n    <value>Недопустимый перевод из языка к Int32.</value>\n  </data>\n  <data name=\"MhtBuilder_Error_Extension\" xml:space=\"preserve\">\n    <value>Расширение имени файла '{0}' не имеет подходящего расширения из '{1}'</value>\n  </data>\n  <data name=\"MhtBuilder_Error_FilenameNoExtension\" xml:space=\"preserve\">\n    <value>Название файла '{0}' не имеет расширения. \nЕсли указываете папку, убедитесь, что она заканчивается косой чертой. Ожидаемые расширения файлов являются '{1}'</value>\n  </data>\n  <data name=\"MhtWebFile_Error_ConvertOnlyHTMLOrCSS\" xml:space=\"preserve\">\n    <value>Преобразование ссылок имеет смысл только для HTML или CSS-файлов; этот файл имеет тип '{0}'</value>\n  </data>\n  <data name=\"MhtWebFile_Error_NoFilename\" xml:space=\"preserve\">\n    <value>Имя файла не указано и HTML тег заголовка не найден, поэтому имя файла не может быть вычислено автоматически. Вы должны указать имя файла, а не папки.</value>\n  </data>\n  <data name=\"OneFileStreamGen_Error_FileAlreadyExists\" xml:space=\"preserve\">\n    <value>Файл {0} уже существует.</value>\n  </data>\n  <data name=\"Pages_Error_CurrentPageMustInList\" xml:space=\"preserve\">\n    <value>Текущая страница должна быть в списке страниц.</value>\n  </data>\n  <data name=\"PageTextHtml_Error_BuildMethodMustCalledPriorTotalHeight\" xml:space=\"preserve\">\n    <value>Метод Build должен быть вызван до обращения к свойству TotalHeight.</value>\n  </data>\n  <data name=\"PdfOutline_Error_GetObjectNumberMustBeforeGetOutlineDict\" xml:space=\"preserve\">\n    <value>GetObjectNumber должен вызываться до GetOutlineDict</value>\n  </data>\n  <data name=\"ProcessReport_Error_ReportHasErrors\" xml:space=\"preserve\">\n    <value>Отчёт имеет ошибки и не может быть обработан.</value>\n  </data>\n  <data name=\"Query_Error_XMLMustContainTopLevelRows\" xml:space=\"preserve\">\n    <value>Ошибка: XML-данные должны содержать строки верхнего уровня.</value>\n  </data>\n  <data name=\"RdlEngineConfig_Error_CashModuleNotFound\" xml:space=\"preserve\">\n    <value>Не удалось найти модуль {0}</value>\n  </data>\n  <data name=\"RdlEngineConfig_Error_CodeModuleNotLoaded\" xml:space=\"preserve\">\n    <value>Не удалось загрузить модуль {0}</value>\n  </data>\n  <data name=\"RdlEngineConfig_Error_NotKnownCustomReportItemType\" xml:space=\"preserve\">\n    <value>{0} не известный тип CustomReportItem.</value>\n  </data>\n  <data name=\"RdlEngineConfig_Error_UnableCreateInstance\" xml:space=\"preserve\">\n    <value>Не удалось создать экземпляр '{0}' для поставщика '{1}'</value>\n  </data>\n  <data name=\"ReportLog_Error_Severity\" xml:space=\"preserve\">\n    <value>Важность</value>\n  </data>\n  <data name=\"Subreport_Error_SubreportNotParameter\" xml:space=\"preserve\">\n    <value>В подотчёте {0} не объявлен параметр {1}.</value>\n  </data>\n  <data name=\"TableRows_Error_TableRowsMustOwnedTable\" xml:space=\"preserve\">\n    <value>Внутренняя ошибка: Строки таблицы должны принадлежать таблице.</value>\n  </data>\n  <data name=\"TableRow_Error_TableRowNotRelatedToTable\" xml:space=\"preserve\">\n    <value>Внутренняя ошибка: Строка таблицы не связана с таблицей.</value>\n  </data>\n  <data name=\"Table_Error_RecursiveGroupsMustOnlyGroupDefinition\" xml:space=\"preserve\">\n    <value>Ошибка: Рекурсивная группа должна быть единственным определением группы.</value>\n  </data>\n  <data name=\"MhtBuilder_Error_UnableDownload\" xml:space=\"preserve\">\n    <value>Не удалось загрузить '{0}': {1}</value>\n  </data>\n  <data name=\"Lexer_ErrorP_InvalidNumberConstant\" xml:space=\"preserve\">\n    <value>Некорректная числовая константа</value>\n  </data>\n  <data name=\"Lexer_ErrorP_UnterminatedString\" xml:space=\"preserve\">\n    <value>Незавершённая строка!</value>\n  </data>\n  <data name=\"Lexer_Error_SeparatorMustFollowedNumber\" xml:space=\"preserve\">\n    <value>'{0}' должен следовать после числа</value>\n  </data>\n  <data name=\"Lexer_Error_UnterminatedComment\" xml:space=\"preserve\">\n    <value>Незавершённый комментарий!</value>\n  </data>\n  <data name=\"Parser_ErrorP_AggregateCannotNestedInAnotherAggregate\" xml:space=\"preserve\">\n    <value>Агрегатная функция '{0}' не может быть вложена в другую агрегатную функцию.</value>\n  </data>\n  <data name=\"Parser_ErrorP_AggregateCannotUsedWithinGrouping\" xml:space=\"preserve\">\n    <value>Агрегатная функция '{0}' не может быть использована в выражении группирования.</value>\n  </data>\n  <data name=\"Parser_ErrorP_AggregateMust1Argument\" xml:space=\"preserve\">\n    <value>Aggregate function must have at least one argument.</value>\n  </data>\n  <data name=\"Parser_ErrorP_AND_OR_RequiresBoolean\" xml:space=\"preserve\">\n    <value>AND/OR операции требуют, чтобы с обоих сторон были логические выражения.</value>\n  </data>\n  <data name=\"Parser_ErrorP_AtColumn\" xml:space=\"preserve\">\n    <value>  В столбце {0}</value>\n  </data>\n  <data name=\"Parser_ErrorP_BracketExpected\" xml:space=\"preserve\">\n    <value>')' ожидалась, но не найдена.</value>\n  </data>\n  <data name=\"Parser_ErrorP_ChooseFirstArgumentMustNumeric\" xml:space=\"preserve\">\n    <value>Первый аргумент функции Choose должен быть числовым.</value>\n  </data>\n  <data name=\"Parser_ErrorP_ChooseRequires2Arguments\" xml:space=\"preserve\">\n    <value>Функция Choose требует как минимум 2 аргумента.</value>\n  </data>\n  <data name=\"Parser_ErrorP_ClassUnknown\" xml:space=\"preserve\">\n    <value>Неизвестный класс {0}.</value>\n  </data>\n  <data name=\"Parser_ErrorP_EndExpressionExpected\" xml:space=\"preserve\">\n    <value>Ожидался конец выражения.</value>\n  </data>\n  <data name=\"Parser_ErrorP_ExpectingComma\" xml:space=\"preserve\">\n    <value>Ожидается ',' или ')'.</value>\n  </data>\n  <data name=\"Parser_ErrorP_FieldNotFound\" xml:space=\"preserve\">\n    <value>Поле '{0}' не найдено</value>\n  </data>\n  <data name=\"Parser_ErrorP_FieldNotInDataSet\" xml:space=\"preserve\">\n    <value>Поля '{0}' нет в наборе данных {1}.</value>\n  </data>\n  <data name=\"Parser_ErrorP_FieldsRequires1Argument\" xml:space=\"preserve\">\n    <value>Коллекция Fields требует 1 аргумент.</value>\n  </data>\n  <data name=\"Parser_ErrorP_FieldSupportsValueAndIsMissing\" xml:space=\"preserve\">\n    <value>Поле '{0}' поддерживает только свойства 'Value' и 'IsMissing'.</value>\n  </data>\n  <data name=\"Parser_ErrorP_FormatRequires2Arguments\" xml:space=\"preserve\">\n    <value>Функция Format требует 2 аргумента.</value>\n  </data>\n  <data name=\"Parser_ErrorP_FoundValue\" xml:space=\"preserve\">\n    <value>  Найдено '{0}'</value>\n  </data>\n  <data name=\"Parser_ErrorP_FunctionOfClassUnknown\" xml:space=\"preserve\">\n    <value>Неизвестная функция '{0}' класса '{1}'.</value>\n  </data>\n  <data name=\"Parser_ErrorP_FunctionUnknown\" xml:space=\"preserve\">\n    <value>Неизвестная функция {0}.</value>\n  </data>\n  <data name=\"Parser_ErrorP_GlobalsNotFound\" xml:space=\"preserve\">\n    <value>Элемент '{0}' коллекции Globals не найден.</value>\n  </data>\n  <data name=\"Parser_ErrorP_GlobalsRequires1Argument\" xml:space=\"preserve\">\n    <value>Коллекция Globals требует 1 аргумент.</value>\n  </data>\n  <data name=\"Parser_ErrorP_IdentifierExpected\" xml:space=\"preserve\">\n    <value>Ожидалась константа или идентификатор.</value>\n  </data>\n  <data name=\"Parser_ErrorP_iff_function_requires_3_arguments\" xml:space=\"preserve\">\n    <value>Функция iff требует 3 аргумента.</value>\n  </data>\n  <data name=\"Parser_ErrorP_Invalid_function_arguments\" xml:space=\"preserve\">\n    <value>Некорректные аргументы функции.</value>\n  </data>\n  <data name=\"Parser_ErrorP_ItemNotFound\" xml:space=\"preserve\">\n    <value>Элемент '{0}' коллекции ReportItem не найден.</value>\n  </data>\n  <data name=\"Parser_ErrorP_ItemSupportsValue\" xml:space=\"preserve\">\n    <value>Элемент '{0}' коллекции ReportItem поддерживает только свойство 'Value'.</value>\n  </data>\n  <data name=\"Parser_ErrorP_MinusNeedNumbers\" xml:space=\"preserve\">\n    <value>Оператор '-' работает только с числами.</value>\n  </data>\n  <data name=\"Parser_ErrorP_NoScope4Aggregate\" xml:space=\"preserve\">\n    <value>Нет области предусмотренной для агрегатной функции, но определено более одного набора данных.</value>\n  </data>\n  <data name=\"Parser_ErrorP_NotCodeMethod\" xml:space=\"preserve\">\n    <value>{0} не является известным методом. Проверьте имя метода и его аргументы, которые должны соответствовать существующей функцию.</value>\n  </data>\n  <data name=\"Parser_ErrorP_NOTRequiresBoolean\" xml:space=\"preserve\">\n    <value>Операция NOT требует логического выражения.</value>\n  </data>\n  <data name=\"Parser_ErrorP_ParameterNotFound\" xml:space=\"preserve\">\n    <value>Параметр отчёта '{0}' не найден.</value>\n  </data>\n  <data name=\"Parser_ErrorP_ParametersRequires1Argument\" xml:space=\"preserve\">\n    <value>Коллекция Parameters требует одного аргумента.</value>\n  </data>\n  <data name=\"Parser_ErrorP_ParameterSupportsValueAndLabel\" xml:space=\"preserve\">\n    <value>Параметр '{0}' поддерживает только свойства 'Value' и 'Label'.</value>\n  </data>\n  <data name=\"Parser_ErrorP_ReportItemsRequires1Argument\" xml:space=\"preserve\">\n    <value>Коллекция ReportItems требует одного аргумента.</value>\n  </data>\n  <data name=\"Parser_ErrorP_RunningValueArgumentInvalid\" xml:space=\"preserve\">\n    <value>Аргумент 'Function' функции RunningValue некорректен.</value>\n  </data>\n  <data name=\"Parser_ErrorP_RunningValueNotSupported\" xml:space=\"preserve\">\n    <value>Функция '{0}' для функции RunningValue не поддерживается.</value>\n  </data>\n  <data name=\"Parser_ErrorP_RunningValue_takes_2_or_3_arguments\" xml:space=\"preserve\">\n    <value>Функция RunningValue требует 2 или 3 аргумента.</value>\n  </data>\n  <data name=\"Parser_ErrorP_ScopeIdentifer\" xml:space=\"preserve\">\n    <value>Идентификатор указан в неправильном месте.</value>\n  </data>\n  <data name=\"Parser_ErrorP_ScopeMustConstant\" xml:space=\"preserve\">\n    <value>Выражение функции {0} должно быть постоянным.</value>\n  </data>\n  <data name=\"Parser_ErrorP_ScopeNotKnownDataSet\" xml:space=\"preserve\">\n    <value>Выражение '{0}' не ссылается на известный набор данных.</value>\n  </data>\n  <data name=\"Parser_ErrorP_ScopeNotKnownGrouping\" xml:space=\"preserve\">\n    <value>Выражение '{0}' не является названием группы, набора данных или региона данных.</value>\n  </data>\n  <data name=\"Parser_ErrorP_ScopeNotSpecifiedInHeaderOrFooter\" xml:space=\"preserve\">\n    <value>Выражение '{0}' не может быть указано в колонтитулах.</value>\n  </data>\n  <data name=\"Parser_ErrorP_SecondMustString\" xml:space=\"preserve\">\n    <value>Второй аргумент функции Format должен быть строкой.</value>\n  </data>\n  <data name=\"Parser_ErrorP_SwitchMustBoolean\" xml:space=\"preserve\">\n    <value>Каждый нечётный аргумент функции Switch должен быть логическим выражением.</value>\n  </data>\n  <data name=\"Parser_ErrorP_SwitchMustEvenArguments\" xml:space=\"preserve\">\n    <value>Функция Switch должна иметь чётное количество аргументов.</value>\n  </data>\n  <data name=\"Parser_ErrorP_SwitchRequires2Arguments\" xml:space=\"preserve\">\n    <value>Функция Switch требует как минимум 2 аргумента.</value>\n  </data>\n  <data name=\"Parser_ErrorP_UnknownIdentifer\" xml:space=\"preserve\">\n    <value>Неизвестный идентификатор: '{0}'.</value>\n  </data>\n  <data name=\"Parser_ErrorP_UnknownProperty\" xml:space=\"preserve\">\n    <value>Неизвестное свойство {0} для {1}.</value>\n  </data>\n  <data name=\"Parser_ErrorP_UserRequires1Argument\" xml:space=\"preserve\">\n    <value>Коллекция User требует одного аргумента.</value>\n  </data>\n  <data name=\"Parser_ErrorP_UserVarNotFound\" xml:space=\"preserve\">\n    <value>Элемент коллекции User '{0}' не найден.</value>\n  </data>\n  <data name=\"RDLParser_ErrorP_XMLFailed\" xml:space=\"preserve\">\n    <value>Ошибка загрузки XML: </value>\n  </data>\n  <data name=\"RDLParser_ErrorP__NoReport\" xml:space=\"preserve\">\n    <value>Ошибка: RDL не содержит элемента \"Report\"</value>\n  </data>\n  <data name=\"Parser_ErrorP_CurlyBracketExpected\" xml:space=\"preserve\">\n    <value>ожидалась '}', но не найдена.</value>\n  </data>\n  <data name=\"SaveToFile_CheckIf_SameFilesInDir\" xml:space=\"preserve\">\n    <value>Такой файл уже существует, вы уверены, что хотите перезаписать его?</value>\n  </data>\n  <data name=\"ButtonSave_Text\" xml:space=\"preserve\">\n    <value>Сохранить</value>\n  </data>\n  <data name=\"ButtonCancel_Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"FileChooser_SaveFileTo_Title\" xml:space=\"preserve\">\n    <value>Сохранить файл как</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlEngine/Runtime/DataSet.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Collections;\nusing System.IO;\nusing System.Data;\nusing System.Data.SqlClient;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Runtime Information about a set of data; public interface to the definition\n\t///</summary>\n\t[Serializable]\n\tpublic class DataSet\n\t{\n\t\tReport _rpt;\t\t//\tthe runtime report\n\t\tDataSetDefn _dsd;\t//  the true definition of the DataSet\n\t\n\t\tinternal DataSet(Report rpt, DataSetDefn dsd)\n\t\t{\n\t\t\t_rpt = rpt;\n\t\t\t_dsd = dsd;\n\t\t}\n\n\t\tpublic async Task SetData(IDataReader dr)\n\t\t{\n            await _dsd.Query.SetData(_rpt, dr, _dsd.Fields, _dsd.Filters);\t\t// get the data (and apply the filters\n\t\t}\n\n\t\tpublic async Task SetData(DataTable dt)\n\t\t{\n            await _dsd.Query.SetData(_rpt, dt, _dsd.Fields, _dsd.Filters);\n\t\t}\n\n\t\tpublic async Task SetData(XmlDocument xmlDoc)\n\t\t{\n            await _dsd.Query.SetData(_rpt, xmlDoc, _dsd.Fields, _dsd.Filters);\n\t\t}\n\n        /// <summary>\n        /// Sets the data in the dataset from an IEnumerable. The content of the IEnumerable\n        /// depends on the flag collection. If collection is false it will contain classes whose fields\n        /// or properties will be matched to the dataset field names. If collection is true it may \n        /// contain IDictionary(s) that will be matched by key with the field name or IEnumerable(s) \n        /// that will be matched by column number. It is possible to have a mix of IDictionary and \n        /// IEnumerable when collection is true.\n        /// </summary>\n        /// <param name=\"ie\"></param>\n        /// <param name=\"collection\"></param>\n\t\tpublic async Task SetData(IEnumerable ie, bool collection = false)\n\t\t{\n            await _dsd.Query.SetData(_rpt, ie, _dsd.Fields, _dsd.Filters, collection);\n\t\t}\n\n        public async Task SetSource(string sql)\n        {\n            await _dsd.Query.CommandText.SetSource(sql);\n        }\n\n\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Runtime/DataSets.cs",
    "content": "\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.Xml;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// The sets of data (defined by DataSet) that are retrieved as part of the Report.\n\t///</summary>\n\t[Serializable]\n    public class DataSets : IEnumerable\n\t{\n\t\tReport _rpt;\t\t\t\t// runtime report\n\t\tIDictionary _Items;\t\t\t// list of report items\n\n\t\tinternal DataSets(Report rpt, DataSetsDefn dsn)\n\t\t{\n\t\t\t_rpt = rpt;\n\n\t\t\tif (dsn.Items.Count < 10)\n\t\t\t\t_Items = new ListDictionary();\t// Hashtable is overkill for small lists\n\t\t\telse\n\t\t\t\t_Items = new Hashtable(dsn.Items.Count);\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(DataSetDefn dsd in dsn.Items.Values)\n\t\t\t{\n\t\t\t\tDataSet ds = new DataSet(rpt, dsd);\n\t\t\t\t_Items.Add(dsd.Name.Nm, ds);\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic DataSet this[string name]\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\treturn _Items[name] as DataSet;\n\t\t\t}\n\t\t}\n\n        #region IEnumerable Members\n\n        public IEnumerator GetEnumerator()\n        {\n            return _Items.Values.GetEnumerator();\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Runtime/DataSource.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Data;\nusing System.Data.SqlClient;\nusing System.Data.OleDb;\nusing System.Data.Odbc;\nusing System.IO;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Information about the data source (e.g. a database connection string).\n\t///</summary>\n\t[Serializable]\n\tpublic class DataSource\n\t{\n\t\tReport _rpt;\t// Runtime report\n\t\tDataSourceDefn _dsd;\t// DataSource definition\n\n\t\tinternal DataSource(Report rpt, DataSourceDefn dsd)\n\t\t{\n\t\t\t_rpt = rpt;\n\t\t\t_dsd = dsd;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get/Set the database connection.  User must handle closing of connection.\n\t\t/// </summary>\n\t\tpublic IDbConnection UserConnection\n\t\t{\n\t\t\tget {return _dsd.IsUserConnection(_rpt)? _dsd.GetConnection(_rpt): null;}\t// never reveal connection internally connected\n\t\t\tset\n\t\t\t{\n\t\t\t\t_dsd.CleanUp(_rpt);\t\t\t\t\t// clean up prior connection if necessary\n\n\t\t\t\t_dsd.SetUserConnection(_rpt, value);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Runtime/DataSources.cs",
    "content": "\n\nusing System;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.Xml;\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Contains list of DataSource about how to connect to sources of data used by the DataSets.\n\t///</summary>\n\t[Serializable]\n    public class DataSources : IEnumerable\n\t{\n\t\tReport _rpt;\t\t\t\t// Runtime report\n\t\tListDictionary _Items;\t\t// list of report items\n\n\t\tinternal DataSources(Report rpt, DataSourcesDefn dsds)\n\t\t{\n\t\t\t_rpt = rpt;\n\t\t\t_Items = new ListDictionary();\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(DataSourceDefn dsd in dsds.Items.Values)\n\t\t\t{\n\t\t\t\tDataSource ds = new DataSource(rpt, dsd);\n\t\t\t\t_Items.Add(dsd.Name.Nm,\tds);\n\t\t\t}\n\t\t}\n\n\t\tpublic DataSource this[string name]\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\treturn _Items[name] as DataSource;\n\t\t\t}\n\t\t}\n        #region IEnumerable Members\n\n        public IEnumerator GetEnumerator()\n        {\n            return _Items.Values.GetEnumerator();\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Runtime/ICustomReportItem.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n#else\nusing Draw2 = System.Drawing;\n#endif\nusing System.Xml;\nusing Majorsilence.Reporting.Rdl;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// ICustomReportItem defines the protocol for implementing a CustomReportItem\n\t/// </summary>\n\n\tpublic interface ICustomReportItem : IDisposable    \n\t{\n        bool IsDataRegion();                            // Does CustomReportItem require DataRegions\n        void DrawImage(ref Draw2.Bitmap bm);       // Draw the image in the passed bitmap; do SetParameters first\n        void DrawDesignerImage(ref Draw2.Bitmap bm);   // Design time: Draw the designer image in the passed bitmap;\n        void SetProperties(IDictionary<string, object> parameters); // Set the runtime properties\n        object GetPropertiesInstance(XmlNode node);     // Design time: return class representing properties\n        void SetPropertiesInstance(XmlNode node, object inst);  // Design time: given class representing properties set the XML custom properties\n        string GetCustomReportItemXml();                // Design time: return string with <CustomReportItem> ... </CustomReportItem> syntax for the insert\n    }\n\n}\n"
  },
  {
    "path": "RdlEngine/Runtime/ImageQualityManager.cs",
    "content": "\n\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    class ImageQualityManager\n    {\n        public static long CustomImageQuality = 100L;\n        public static long ChartImageQuality = 90L;\n        public static long EmbeddedImageQuality = 100L;\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Runtime/Page.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\tpublic class Page : IEnumerable, IDisposable\n\t{\n\t\t// note: all sizes are in points\n\t\tint _pageno;\n\t\tList<PageItem> _items;              // array of items on the page\n\t\tfloat _yOffset;                 // current y offset; top margin, page header, other details, ... \n\t\tfloat _xOffset;                 // current x offset; margin, body taken into account?\n\t\tint _emptyItems;\t\t\t\t// # of items which constitute empty\n\t\tbool _needSort;                 // need sort\n\t\tint _lastZIndex;                // last ZIndex\n\t\tSystem.Collections.Generic.Dictionary<string, Rows> _PageExprReferences;    // needed to save page header/footer expressions\n\n\t\tpublic Page(int page)\n\t\t{\n\t\t\t_pageno = page;\n\t\t\t_items = new List<PageItem>();\n\t\t\t_emptyItems = 0;\n\t\t\t_needSort = false;\n\t\t}\n\n\t\tpublic PageItem this[int index]\n\t\t{\n\t\t\tget { return _items[index]; }\n\t\t}\n\n\t\tpublic int Count\n\t\t{\n\t\t\tget { return _items.Count; }\n\t\t}\n\n\t\tpublic void InsertObject(PageItem pi)\n\t\t{\n\t\t\tAddObjectInternal(pi);\n\t\t\t_items.Insert(0, pi);\n\t\t}\n\n\t\tpublic void AddObject(PageItem pi)\n\t\t{\n\t\t\tAddObjectInternal(pi);\n\t\t\t_items.Add(pi);\n\t\t}\n\n\t\tprivate void AddObjectInternal(PageItem pi)\n\t\t{\n\t\t\tpi.Page = this;\n\t\t\tpi.ItemNumber = _items.Count;\n\t\t\tif (_items.Count == 0)\n\t\t\t\t_lastZIndex = pi.ZIndex;\n\t\t\telse if (_lastZIndex != pi.ZIndex)\n\t\t\t\t_needSort = true;\n\n\t\t\t// adjust the page item locations\n\t\t\tpi.X += _xOffset;\n\t\t\tpi.Y += _yOffset;\n\t\t\tif (pi is PageLine)\n\t\t\t{\n\t\t\t\tPageLine pl = pi as PageLine;\n\t\t\t\tpl.X2 += _xOffset;\n\t\t\t\tpl.Y2 += _yOffset;\n\t\t\t}\n\t\t\telse if (pi is PagePolygon)\n\t\t\t{\n\t\t\t\tPagePolygon pp = pi as PagePolygon;\n\t\t\t\tfor (int i = 0; i < pp.Points.Length; i++)\n\t\t\t\t{\n\t\t\t\t\tpp.Points[i].X += _xOffset;\n\t\t\t\t\tpp.Points[i].Y += _yOffset;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (pi is PageCurve)\n\t\t\t{\n\t\t\t\tPageCurve pc = pi as PageCurve;\n\t\t\t\tfor (int i = 0; i < pc.Points.Length; i++)\n\t\t\t\t{\n\t\t\t\t\tpc.Points[i].X += _xOffset;\n\t\t\t\t\tpc.Points[i].Y += _yOffset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic bool IsEmpty()\n\t\t{\n\t\t\treturn _items.Count > _emptyItems ? false : true;\n\t\t}\n\n\t\tpublic void SortPageItems()\n\t\t{\n\t\t\tif (!_needSort)\n\t\t\t\treturn;\n\t\t\t_items.Sort();\n\t\t}\n\n\t\tpublic void ResetEmpty()\n\t\t{\n\t\t\t_emptyItems = 0;\n\t\t}\n\n\t\tpublic void SetEmpty()\n\t\t{\n\t\t\t_emptyItems = _items.Count;\n\t\t}\n\n\t\tpublic int PageNumber\n\t\t{\n\t\t\tget { return _pageno; }\n\t\t}\n\n\t\tpublic float XOffset\n\t\t{\n\t\t\tget { return _xOffset; }\n\t\t\tset { _xOffset = value; }\n\t\t}\n\n\t\tpublic float YOffset\n\t\t{\n\t\t\tget { return _yOffset; }\n\t\t\tset { _yOffset = value; }\n\t\t}\n\n\t\tinternal void AddPageExpressionRow(Report rpt, string exprname, Row r)\n\t\t{\n\t\t\tif (exprname == null || r == null)\n\t\t\t\treturn;\n\n\t\t\tif (_PageExprReferences == null)\n\t\t\t\t_PageExprReferences = new Dictionary<string, Rows>();\n\n\t\t\tRows rows = null;\n\t\t\t_PageExprReferences.TryGetValue(exprname, out rows);\n\t\t\tif (rows == null)\n\t\t\t{\n\t\t\t\trows = new Rows(rpt);\n\t\t\t\trows.Data = new List<Row>();\n\t\t\t\t_PageExprReferences.Add(exprname, rows);\n\t\t\t}\n\t\t\tRow row = new Row(rows, r); // have to make a new copy\n\t\t\trow.RowNumber = rows.Data.Count;\n\t\t\trows.Data.Add(row);         // add row to rows\n\t\t\treturn;\n\t\t}\n\n\t\tinternal Rows GetPageExpressionRows(string exprname)\n\t\t{\n\t\t\tif (_PageExprReferences == null)\n\t\t\t\treturn null;\n\n\t\t\tRows rows = null;\n\t\t\t_PageExprReferences.TryGetValue(exprname, out rows);\n\t\t\treturn rows;\n\t\t}\n\n\t\tinternal void ResetPageExpressions()\n\t\t{\n\t\t\t_PageExprReferences = null;     // clear it out; not needed once page header/footer are processed\n\t\t}\n\n\t\t#region IEnumerable Members\n\n\t\tpublic IEnumerator GetEnumerator()      // just loop thru the pages\n\t\t{\n\t\t\treturn _items.GetEnumerator();\n\t\t}\n\n\t\tpublic void Dispose()\n\t\t{\n\t\t\tforeach (var pageItems in _items)\n\t\t\t{\n\t\t\t\tpageItems.Dispose();\n\t\t\t}\n\t\t\t_items.Clear();\n\t\t\t_PageExprReferences?.Clear();\n\t\t}\n\n\t\t#endregion\n\t}\n}"
  },
  {
    "path": "RdlEngine/Runtime/PageItems/PageCurve.cs",
    "content": "using System;\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\n#else\nusing System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\tpublic class PageCurve : PageItem, ICloneable\n\t{\n\t\tPointF[] _pointsF;\n\t\tint _offset;\n\t\tfloat _Tension;\n\n\t\tpublic PageCurve()\n\t\t{\n\t\t}\n\n\t\tpublic PointF[] Points\n\t\t{\n\t\t\tget { return _pointsF; }\n\t\t\tset { _pointsF = value; }\n\t\t}\n\n\t\tpublic int Offset\n\t\t{\n\t\t\tget { return _offset; }\n\t\t\tset { _offset = value; }\n\t\t}\n\n\t\tpublic float Tension\n\t\t{\n\t\t\tget { return _Tension; }\n\t\t\tset { _Tension = value; }\n\t\t}\n\t\t#region ICloneable Members\n\n\t\tnew public object Clone()\n\t\t{\n\t\t\treturn this.MemberwiseClone();\n\t\t}\n\n\t\t#endregion\n\t}\n}"
  },
  {
    "path": "RdlEngine/Runtime/PageItems/PageEllipse.cs",
    "content": "using System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\tpublic class PageEllipse : PageItem, ICloneable\n\t{\n\t\tpublic PageEllipse()\n\t\t{\n\n\t\t}\n\n\t\t#region ICloneable Members\n\n\t\tnew public object Clone()\n\t\t{\n\t\t\treturn this.MemberwiseClone();\n\t\t}\n\n\t\t#endregion\n\t}\n}"
  },
  {
    "path": "RdlEngine/Runtime/PageItems/PageImage.cs",
    "content": "using System;\nusing System.Diagnostics;\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing.Imaging;\n#else\nusing System.Drawing.Imaging;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\tpublic class PageImage : PageItem, ICloneable\n\t{\n\t\tstring name;                // name of object if constant image\n\t\tImageFormat imf;            // type of image; png, jpeg are supported\n\t\tbyte[] imageData;\n\t\tint samplesW;\n\t\tint samplesH;\n\t\tImageRepeat repeat;\n\t\tImageSizingEnum sizing;\n\t\tprivate Func<ImageFormat, int, int, byte[]> imageGenerator;\n\n\t\tpublic PageImage(ImageFormat im, byte[] image, int w, int h)\n\t\t{\n#if DRAWINGCOMPAT\n            Debug.Assert(im == ImageFormat.Jpeg || im == ImageFormat.Png || im == ImageFormat.Gif,\n                \"PageImage only supports Jpeg, Gif and Png and WMF image formats (Thanks HYNE!).\");\n#else\nDebug.Assert(im == ImageFormat.Jpeg || im == ImageFormat.Png || im == ImageFormat.Gif || im == ImageFormat.Wmf,\n\t\t\t\t\"PageImage only supports Jpeg, Gif and Png and WMF image formats (Thanks HYNE!).\");\n#endif\n\n            imf = im;\n\t\t\timageData = image;\n\t\t\tsamplesW = w;\n\t\t\tsamplesH = h;\n\t\t\trepeat = ImageRepeat.NoRepeat;\n\t\t\tsizing = ImageSizingEnum.AutoSize;\n\t\t}\n\t\t\n\t\tpublic PageImage(ImageFormat im, Func<ImageFormat, int, int, byte[]> imageGenerator, ImageSizingEnum sizing = ImageSizingEnum.AutoSize)\n\t\t{\n#if DRAWINGCOMPAT\n            Debug.Assert(im == ImageFormat.Jpeg || im == ImageFormat.Png || im == ImageFormat.Gif,\n                \"PageImage only supports Jpeg, Gif and Png and WMF image formats (Thanks HYNE!).\");\n#else\nDebug.Assert(im == ImageFormat.Jpeg || im == ImageFormat.Png || im == ImageFormat.Gif || im == ImageFormat.Wmf,\n\t\t\t\t\"PageImage only supports Jpeg, Gif and Png and WMF image formats (Thanks HYNE!).\");\n#endif\n\n            imf = im;\n\t\t\tthis.imageGenerator = imageGenerator;\n\t\t\trepeat = ImageRepeat.NoRepeat;\n\t\t\tthis.sizing = sizing;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// if PageImage contain static image, method return original ImageData.\n\t\t/// if PageImage created by CustomReportItem, method regenerate image for wanted resolution.\n\t\t/// </summary>\n\t\t/// <param name=\"wantedWidth\">Desired width for image generation</param>\n\t\t/// <param name=\"wantedHeight\">Desired height for image generation</param>\n\t\tpublic byte[] GetImageData(int wantedWidth, int wantedHeight)\n\t\t{\n\t\t\tif (imageGenerator == null)\n\t\t\t\treturn imageData;\n\t\t\tif (imageData == null || wantedHeight != SamplesH || wantedWidth != SamplesW) {\n\t\t\t\timageData = imageGenerator(ImgFormat, wantedWidth, wantedHeight);\n\t\t\t\tsamplesW = wantedWidth;\n\t\t\t\tsamplesH = wantedHeight;\n\t\t\t}\n\t\t\treturn imageData;\n\t\t}\n\n\t\tpublic byte[] GetImageData() => imageData ?? GetImageData(SamplesW, samplesH);\n\n\t\tpublic ImageFormat ImgFormat\n\t\t{\n\t\t\tget { return imf; }\n\t\t}\n\n\t\tpublic string Name\n\t\t{\n\t\t\tget { return name; }\n\t\t\tset { name = value; }\n\t\t}\n\n\t\tpublic ImageRepeat Repeat\n\t\t{\n\t\t\tget { return repeat; }\n\t\t\tset { repeat = value; }\n\t\t}\n\n\t\tpublic ImageSizingEnum Sizing\n\t\t{\n\t\t\tget { return sizing; }\n\t\t\tset { sizing = value; }\n\t\t}\n\n\t\tpublic int SamplesW\n\t\t{\n\t\t\tget { return samplesW; }\n\t\t}\n\n\t\tpublic int SamplesH\n\t\t{\n\t\t\tget { return samplesH; }\n\t\t}\n\t\t#region ICloneable Members\n\n\t\tnew public object Clone()\n\t\t{\n\t\t\treturn this.MemberwiseClone();\n\t\t}\n\n\t\t#endregion\n\t}\n\t\n\tpublic enum ImageRepeat\n\t{\n\t\tRepeat,         // repeat image in both x and y directions\n\t\tNoRepeat,       // don't repeat\n\t\tRepeatX,        // repeat image in x direction\n\t\tRepeatY         // repeat image in y direction\n\t}\n}"
  },
  {
    "path": "RdlEngine/Runtime/PageItems/PageItem.cs",
    "content": "using System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\tpublic class PageItem : ICloneable, IComparable\n\t{\n\t\tPage parent;            // parent page\n\t\tfloat x;                // x coordinate\n\t\tfloat y;                // y coordinate\n\t\tfloat h;                // height  --- line redefines as Y2\n\t\tfloat w;                // width   --- line redefines as X2\n\t\tstring hyperlink;       //  a hyperlink the object should link to\n\t\tstring bookmarklink;\t//  a hyperlink within the report object should link to\n\t\tstring bookmark;        //  bookmark text for this pageItem\n\t\tstring tooltip;\t\t\t//  a message to display when user hovers with mouse\n\t\tint zindex;             // zindex; items will be sorted by this\n\t\tint itemNumber;         //  original number of item\n\t\tStyleInfo si;\t\t\t// all the style information evaluated\n\t\tbool allowselect = true;  // allow selection of this item\n\n\t\tpublic Page Page\n\t\t{\n\t\t\tget { return parent; }\n\t\t\tset { parent = value; }\n\t\t}\n\n\t\tpublic bool AllowSelect\n\t\t{\n\t\t\tget { return allowselect; }\n\t\t\tset { allowselect = value; }\n\t\t}\n\t\tpublic float X\n\t\t{\n\t\t\tget { return x; }\n\t\t\tset { x = value; }\n\t\t}\n\n\t\tpublic float Y\n\t\t{\n\t\t\tget { return y; }\n\t\t\tset { y = value; }\n\t\t}\n\n\t\tpublic int ZIndex\n\t\t{\n\t\t\tget { return zindex; }\n\t\t\tset { zindex = value; }\n\t\t}\n\n\t\tpublic int ItemNumber\n\t\t{\n\t\t\tget { return itemNumber; }\n\t\t\tset { itemNumber = value; }\n\t\t}\n\n\t\tpublic float H\n\t\t{\n\t\t\tget { return h; }\n\t\t\tset { h = value; }\n\t\t}\n\n\t\tpublic float W\n\t\t{\n\t\t\tget { return w; }\n\t\t\tset { w = value; }\n\t\t}\n\n\t\tpublic string HyperLink\n\t\t{\n\t\t\tget { return hyperlink; }\n\t\t\tset { hyperlink = value; }\n\t\t}\n\n\t\tpublic string BookmarkLink\n\t\t{\n\t\t\tget { return bookmarklink; }\n\t\t\tset { bookmarklink = value; }\n\t\t}\n\n\t\tpublic string Bookmark\n\t\t{\n\t\t\tget { return bookmark; }\n\t\t\tset { bookmark = value; }\n\t\t}\n\n\t\tpublic string Tooltip\n\t\t{\n\t\t\tget { return tooltip; }\n\t\t\tset { tooltip = value; }\n\t\t}\n\n\t\tpublic StyleInfo SI\n\t\t{\n\t\t\tget { return si; }\n\t\t\tset { si = value; }\n\t\t}\n\t\t#region ICloneable Members\n\n\t\tpublic object Clone()\n\t\t{\n\t\t\treturn this.MemberwiseClone();\n\t\t}\n\n\t\t#endregion\n\t\t#region IComparable Members\n\n\t\t// Sort items based on zindex, then on order items were added to array\n\t\tpublic int CompareTo(object obj)\n\t\t{\n\t\t\tPageItem pi = obj as PageItem;\n\n\t\t\tint rc = this.zindex - pi.zindex;\n\t\t\tif (rc == 0)\n\t\t\t\trc = this.itemNumber - pi.itemNumber;\n\t\t\treturn rc;\n\t\t}\n\n\t\tinternal void Dispose()\n\t\t{\n\t\t\tsi = null;\n\t\t\tparent = null;\n\t\t}\n\n\t\t#endregion\n\t}\n}"
  },
  {
    "path": "RdlEngine/Runtime/PageItems/PageLine.cs",
    "content": "using System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\tpublic class PageLine : PageItem, ICloneable\n\t{\n\t\tpublic PageLine()\n\t\t{\n\t\t}\n\n\t\tpublic float X2\n\t\t{\n\t\t\tget { return W; }\n\t\t\tset { W = value; }\n\t\t}\n\n\t\tpublic float Y2\n\t\t{\n\t\t\tget { return H; }\n\t\t\tset { H = value; }\n\t\t}\n\t\t#region ICloneable Members\n\n\t\tnew public object Clone()\n\t\t{\n\t\t\treturn this.MemberwiseClone();\n\t\t}\n\n\t\t#endregion\n\t}\n}"
  },
  {
    "path": "RdlEngine/Runtime/PageItems/PagePie.cs",
    "content": "using System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\tpublic class PagePie : PageItem, ICloneable\n\t{\n\t\tSingle SA;\n\t\tSingle SW;\n\t\tpublic PagePie()\n\t\t{\n\t\t}\n\t\tpublic Single StartAngle\n\t\t{\n\t\t\tget { return SA; }\n\t\t\tset { SA = value; }\n\t\t}\n\t\tpublic Single SweepAngle\n\t\t{\n\t\t\tget { return SW; }\n\t\t\tset { SW = value; }\n\t\t}\n\n\t\t#region ICloneable Members\n\n\t\tnew public object Clone()\n\t\t{\n\t\t\treturn this.MemberwiseClone();\n\t\t}\n\n\t\t#endregion\n\t}\n}"
  },
  {
    "path": "RdlEngine/Runtime/PageItems/PagePolygon.cs",
    "content": "using System;\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\n#else\nusing System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\tpublic class PagePolygon : PageItem, ICloneable\n\t{\n\t\tPointF[] Ps;\n\t\tpublic PagePolygon()\n\t\t{\n\t\t}\n\t\tpublic PointF[] Points\n\t\t{\n\t\t\tget { return Ps; }\n\t\t\tset { Ps = value; }\n\t\t}\n\t}\n}"
  },
  {
    "path": "RdlEngine/Runtime/PageItems/PageRectangle.cs",
    "content": "using System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\tpublic class PageRectangle : PageItem, ICloneable\n\t{\n\t\tpublic PageRectangle()\n\t\t{\n\t\t}\n\t\t#region ICloneable Members\n\n\t\tnew public object Clone()\n\t\t{\n\t\t\treturn this.MemberwiseClone();\n\t\t}\n\n\t\t#endregion\n\t}\n}"
  },
  {
    "path": "RdlEngine/Runtime/PageItems/PageText.cs",
    "content": "using System;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\tpublic class PageText : PageItem, ICloneable\n\t{\n\t\tstring text;            // the text\n\t\tfloat descent;          // in some cases the Font descent will be recorded; 0 otherwise\n\t\tbool bGrow;\n\t\tbool _NoClip = false;\t\t// on drawing disallow clipping\n\t\tPageTextHtml _HtmlParent = null;\n\n\t\tpublic PageText(string t)\n\t\t{\n\t\t\ttext = t;\n\t\t\tdescent = 0;\n\t\t\tbGrow = false;\n\t\t}\n\n\t\tpublic PageTextHtml HtmlParent\n\t\t{\n\t\t\tget { return _HtmlParent; }\n\t\t\tset { _HtmlParent = value; }\n\t\t}\n\n\t\tpublic string Text\n\t\t{\n\t\t\tget { return text; }\n\t\t\tset { text = value; }\n\t\t}\n\n\t\tpublic float Descent\n\t\t{\n\t\t\tget { return descent; }\n\t\t\tset { descent = value; }\n\t\t}\n\t\tpublic bool NoClip\n\t\t{\n\t\t\tget { return _NoClip; }\n\t\t\tset { _NoClip = value; }\n\t\t}\n\n\t\tpublic bool CanGrow\n\t\t{\n\t\t\tget { return bGrow; }\n\t\t\tset { bGrow = value; }\n\t\t}\n\t\t#region ICloneable Members\n\n\t\tnew public object Clone()\n\t\t{\n\t\t\treturn this.MemberwiseClone();\n\t\t}\n\n\t\t#endregion\n\t}\n}"
  },
  {
    "path": "RdlEngine/Runtime/PageTextHtml.cs",
    "content": "\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n#if DRAWINGCOMPAT\nusing Draw = Majorsilence.Drawing;\nusing Majorsilence.Drawing.Imaging;\n#else\nusing Draw = System.Drawing;\nusing System.Drawing.Imaging;\n#endif\nusing System.Text;\nusing System.IO;\nusing System.Net;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl.Utility;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    ///<summary>\n    /// PageTextHtml handles text that should to be formatted as HTML.  It only handles\n    /// a subset of HTML (e.g. \"<b>,<br>, ...\"\n    ///</summary>\n    public class PageTextHtml : PageText, IEnumerable, ICloneable\n\t{\n\t\tList<PageItem> _items=null;\n\t\tStack _StyleStack;\t\t\t\t// work variable when processing styles\n\t\tfloat _TotalHeight=0;\n\t\tpublic PageTextHtml(string t) : base(t)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reset will force a recalculation of the embedded PageItems;\n\t\t/// </summary>\n\t\tpublic void Reset()\n\t\t{\n\t\t\t_items = null;\n\t\t}\n\n\t\tpublic float TotalHeight\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_items == null)\n\t\t\t\t\tthrow new Exception(Strings.PageTextHtml_Error_BuildMethodMustCalledPriorTotalHeight);\n\t\t\t\treturn _TotalHeight;\n\t\t\t}\n\t\t}\n\n\t\tpublic async Task Build(Draw.Graphics g)\n\t\t{\n            Draw.Drawing2D.Matrix transform = g.Transform;\n            try\n            {\n                g.ResetTransform();\n                await BuildPrivate(g);\n            }\n            finally\n            {\n                g.Transform = transform;\n            }\n            return;\n        }\n\n\t\tprivate async Task BuildPrivate(Draw.Graphics g)\n        {\n            PageText model = new PageText(\"\");\n            model.AllowSelect = false;\n            model.Page = this.Page;\n\t\t\tmodel.HyperLink=null;\n\t\t\tmodel.Tooltip=null;\n\t\t\tint fontSizeModel = 3;\n\n\t\t\tif (_items != null)\t\t// this has already been built\n\t\t\t\treturn;\n            _items = new List<PageItem>();\n\t\t\t_StyleStack = new Stack();\n\n\t\t\t// The first item is always a text box with the border and background attributes\n\t\t\tPageText pt = new PageText(\"\");\n            pt.AllowSelect = true;                // This item represents HTML item for selection in RdlViewer\n            pt.Page = this.Page;\n            pt.HtmlParent = this;\n\t\t\tpt.X = this.X;\n\t\t\tpt.Y = this.Y;\n\t\t\tpt.H = this.H;\n\t\t\tpt.W = this.W;\n\t\t\tpt.CanGrow = false;\n\t\t\tpt.SI = this.SI.Clone() as StyleInfo;\n\t\t\tpt.SI.PaddingBottom = pt.SI.PaddingLeft = pt.SI.PaddingRight = pt.SI.PaddingTop = 0;\n\t\t\tpt.SI.TextAlign = TextAlignEnum.Left;\n\t\t\t_items.Add(pt);\n\n\t\t\t// Now we create multiple items that represent what is in the box\n\t\t\tPageTextHtmlLexer hl = new PageTextHtmlLexer(this.Text);\n\t\t\tList<string> tokens = hl.Lex();\n\n\t\t\tfloat textWidth = this.W - pt.SI.PaddingLeft - pt.SI.PaddingRight;\n\t\t\t// Now set the default style for the rest of the members\n\t\t\tStyleInfo si = this.SI.Clone() as StyleInfo;\n\t\t\tsi.BStyleBottom = si.BStyleLeft = si.BStyleRight = si.BStyleTop = BorderStyleEnum.None;\n\t\t\tpt.SI.TextAlign = TextAlignEnum.Left;\n\t\t\tpt.SI.VerticalAlign = VerticalAlignEnum.Top;\n\t\t\tsi.BackgroundColor = Draw.Color.Empty;\n\t\t\tsi.BackgroundGradientType = BackgroundGradientTypeEnum.None;\n\t\t\tsi.BackgroundImage = null;\n\n\t\t\tbool bFirstInLine=true;\n\t\t\tStringBuilder sb = new StringBuilder(); // this will hold the accumulating line\n\t\t\tfloat lineXPos=0;\n\t\t\tfloat xPos = 0;\n\t\t\tfloat yPos = 0;\n\t\t\tfloat maxLineHeight=0;\n\t\t\tfloat maxDescent=0;\n\t\t\tfloat descent;\t\t\t\t// working value for descent\n\t\t\tDraw.SizeF ms;\n\t\t\tbool bWhiteSpace=false;\n\t\t\tList<PageItem> lineItems = new List<PageItem>();\n            bool bIsOrderedList = false;\n\t\t\tint? OlLiCount = null;\t//Maintains number of OL items; zero indicates UL item (bullet)\n\t\t\tforeach (string token in tokens)\n\t\t\t{\n\t\t\t\tif (token[0] == PageTextHtmlLexer.HTMLCMD)\t\t// indicates an HTML command\n\t\t\t\t{\n\t\t\t\t\t// we need to create a PageText since the styleinfo is changing\n\t\t\t\t\tif (sb.Length != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tpt = new PageText(sb.ToString());\n                        pt.AllowSelect = false;\n                        pt.Page = this.Page;\n                        pt.HtmlParent = this;\n\t\t\t\t\t\tpt.HyperLink = model.HyperLink;\n\t\t\t\t\t\tpt.Tooltip = model.Tooltip;\n\t\t\t\t\t\tpt.NoClip = true;\n\t\t\t\t\t\tsb = new StringBuilder();\n\t\t\t\t\t\tpt.X = this.X + lineXPos;\n\t\t\t\t\t\tpt.Y = this.Y + yPos;\n\t\t\t\t\t\tpt.CanGrow = false;\n\t\t\t\t\t\tpt.SI = CurrentStyle(si).Clone() as StyleInfo;\n\t\t\t\t\t\t_items.Add(pt);\n\t\t\t\t\t\tlineItems.Add(pt);\n\t\t\t\t\t\tms = this.MeasureString(pt.Text, pt.SI, g, out descent);\n\t\t\t\t\t\tmaxDescent = Math.Max(maxDescent, descent);\n\t\t\t\t\t\tpt.W = ms.Width;\n\t\t\t\t\t\tpt.H = ms.Height;\n\t\t\t\t\t\tpt.Descent = descent;\n\t\t\t\t\t\tmaxLineHeight = Math.Max(maxLineHeight, ms.Height);\n\t\t\t\t\t\tlineXPos = xPos;\n\t\t\t\t\t}\n\t\t\t\t\t// Now reset the styleinfo\n\t\t\t\t\tStyleInfo cs = CurrentStyle(si);\n\t\t\t\t\tstring ltoken = token.Substring(1,Math.Min(token.Length-1,10)).ToLower();\n\t\t\t\t\tif (ltoken == \"<b>\" || ltoken == \"<strong>\")\n\t\t\t\t\t\tcs.FontWeight = FontWeightEnum.Bold;\n\t\t\t\t\telse if (ltoken == \"</b>\" || ltoken == \"</strong>\")\n\t\t\t\t\t\tcs.FontWeight = FontWeightEnum.Normal;\n\t\t\t\t\telse if (ltoken == \"<i>\" || ltoken == \"<cite>\" || ltoken == \"<var>\" || ltoken == \"<em>\")\n\t\t\t\t\t\tcs.FontStyle = FontStyleEnum.Italic;\n\t\t\t\t\telse if (ltoken == \"</i>\" || ltoken == \"</cite>\" || ltoken == \"</var>\" || ltoken == \"</em>\")\n\t\t\t\t\t\tcs.FontStyle = FontStyleEnum.Normal;\n\t\t\t\t\telse if (ltoken == \"<code>\" || ltoken == \"<samp>\")\n\t\t\t\t\t\tcs.FontFamily = \"Courier New\";\n\t\t\t\t\telse if (ltoken == \"</code>\" || ltoken == \"</samp>\")\n\t\t\t\t\t\tcs.FontFamily = this.SI.FontFamily;\n\t\t\t\t\telse if (ltoken == \"<kbd>\")\n\t\t\t\t\t{\n\t\t\t\t\t\tcs.FontFamily = \"Courier New\";\n\t\t\t\t\t\tcs.FontWeight = FontWeightEnum.Bold;\n\t\t\t\t\t}\n\t\t\t\t\telse if (ltoken == \"</kdd>\")\n\t\t\t\t\t{\n\t\t\t\t\t\tcs.FontFamily = this.SI.FontFamily;\n\t\t\t\t\t\tcs.FontWeight = FontWeightEnum.Normal;\n\t\t\t\t\t}\n\t\t\t\t\telse if (ltoken == \"<big>\")\n\t\t\t\t\t{\t// big makes it bigger by 20% for each time over the baseline of 3\n\t\t\t\t\t\tfontSizeModel++;\n\t\t\t\t\t\tfloat inc = 1;\n\t\t\t\t\t\tfor (int i=3; i < fontSizeModel; i++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tinc += .2f;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfloat h = this.SI.FontSize * inc;\n\t\t\t\t\t\tcs.FontSize = h;\n\t\t\t\t\t}\n\t\t\t\t\telse if (ltoken == \"</big>\")\n\t\t\t\t\t{\t// undoes the effect of big\n\t\t\t\t\t\tfontSizeModel--;\n\t\t\t\t\t\tfloat inc = 1;\n\t\t\t\t\t\tfor (int i=3; i < fontSizeModel; i++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tinc += .2f;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfloat h = this.SI.FontSize / inc;\n\t\t\t\t\t\tcs.FontSize = h;\n\t\t\t\t\t}\n\t\t\t\t\telse if (ltoken == \"<small>\")\n\t\t\t\t\t{\t// small makes it smaller by 20% for each time under the baseline of 3\n\t\t\t\t\t\tfontSizeModel--;\n\t\t\t\t\t\tfloat inc = 1;\n\t\t\t\t\t\tfor (int i=3; i > fontSizeModel; i--)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tinc += .2f;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfloat h = this.SI.FontSize / inc;\n\t\t\t\t\t\tcs.FontSize = h;\n\t\t\t\t\t}\n\t\t\t\t\telse if (ltoken == \"</small>\")\n\t\t\t\t\t{\t// undoes the effect of small\n\t\t\t\t\t\tfontSizeModel++;\n\t\t\t\t\t\tfloat inc = 1;\n\t\t\t\t\t\tfor (int i=3; i > fontSizeModel; i--)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tinc += .2f;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfloat h = this.SI.FontSize * inc;\n\t\t\t\t\t\tcs.FontSize = h;\n\t\t\t\t\t}\n\t\t\t\t\telse if (ltoken.StartsWith(\"<br\"))\n\t\t\t\t\t{\n\t\t\t\t\t\tyPos += maxLineHeight;\n\t\t\t\t\t\tNormalizeLineHeight(lineItems, maxLineHeight, maxDescent);\n\t\t\t\t\t\txPos = lineXPos = maxDescent = 0;\n\t\t\t\t\t\tbFirstInLine = true;\n\t\t\t\t\t\tbWhiteSpace = false;\n\t\t\t\t\t}\n                    else if (ltoken.StartsWith(\"<hr\"))\n                    {   // Add a line\n                        // Process existing line if any\n                        yPos += maxLineHeight;\n                        NormalizeLineHeight(lineItems, maxLineHeight, maxDescent);\n                        maxLineHeight = xPos = lineXPos = maxDescent = 0;\n                        bFirstInLine = true;\n                        bWhiteSpace = false;\n\n                        PageLine pl = new PageLine();\n                        pl.AllowSelect = false;\n                        pl.Page = this.Page;\n                        const int horzLineHeight = 10;\n                        pl.SI = cs.Clone() as StyleInfo;\n                        pl.SI.BStyleLeft = BorderStyleEnum.Ridge;\n                        pl.Y = pl.Y2 = this.Y + yPos + (horzLineHeight / 2);\n                        pl.X = this.X;\n                        pl.X2 = pl.X + this.W;\n                        _items.Add(pl);\n                        yPos += horzLineHeight;  // skip past horizontal line\n                    }\n                    else if (ltoken.StartsWith(\"<p\"))\n\t\t\t\t\t{\n\t\t\t\t\t\tyPos += maxLineHeight * 2;\n\t\t\t\t\t\tNormalizeLineHeight(lineItems, maxLineHeight, maxDescent);\n\t\t\t\t\t\tmaxLineHeight = xPos = lineXPos = maxDescent = 0;\n\t\t\t\t\t\tbFirstInLine = true;\n\t\t\t\t\t\tbWhiteSpace = false;\n\t\t\t\t\t}\n\t\t\t\t\telse if (ltoken.StartsWith(\"<a\"))\n\t\t\t\t\t{\n\t\t\t\t\t\tBuildAnchor(token.Substring(1), cs, model);\n\t\t\t\t\t}\n                    else if (ltoken.StartsWith(\"<img\"))\n                    {\n                        PageImage pimg = await BuildImage(g, token.Substring(1), cs, model);\n                        if (pimg != null)   // We got an image; add to process list\n                        {\n                            pimg.Y = this.Y + yPos;\n                            pimg.X = this.X;\n                            _items.Add(pimg);\n                            yPos += pimg.H;\t        // Increment y position\n                            maxLineHeight = xPos = lineXPos = maxDescent = 0;\n                            bFirstInLine = true;\n                            bWhiteSpace = false;\n                        }\n                    }\n                    else if (ltoken == \"</a>\")\n                    {\n                        model.HyperLink = model.Tooltip = null;\n                        PopStyle();\n                    }\n                    else if (ltoken.StartsWith(\"<span\"))\n                    {\n                        HandleStyle(token.Substring(1), si);\n                    }\n                    else if (ltoken == \"</span>\")\n                    {   // we really should match span and font but it shouldn't matter very often?\n                        PopStyle();\n                    }\n                    else if (ltoken.StartsWith(\"<font\"))\n                    {\n                        HandleFont(token.Substring(1), si);\n                    }\n                    else if (ltoken == \"</font>\")\n                    {   // we really should match span and font but it shouldn't matter very often?\n                        PopStyle();\n                    }\n                    else if (ltoken.StartsWith(\"<ol\") || ltoken.StartsWith(\"<ul\"))\n                    {\n                        yPos += maxLineHeight;\n                        NormalizeLineHeight(lineItems, maxLineHeight, maxDescent);\n                        maxLineHeight = xPos = lineXPos = maxDescent = 0;\n                        bFirstInLine = true;\n                        bWhiteSpace = false;\n\n                        bIsOrderedList = ltoken.StartsWith(\"<ol\");\n                    }\n                    else if (ltoken.StartsWith(\"<li\"))\n                    {\n                        yPos += maxLineHeight;\n                        NormalizeLineHeight(lineItems, maxLineHeight, maxDescent);\n                        maxLineHeight = xPos = lineXPos = maxDescent = 0;\n                        bFirstInLine = true;\n                        bWhiteSpace = false;\n\n                        if (OlLiCount == null)\n                            OlLiCount = 0;\n                        if(bIsOrderedList)\n                            OlLiCount++;\n                    }\n                    else if (ltoken.StartsWith(\"</ol\") || ltoken.StartsWith(\"</ul\"))\n                    {\n                        bIsOrderedList = false;\n                        OlLiCount = null;\n                    }                    \n                    continue;\n\t\t\t\t}\n\t\t\t\tif (token == PageTextHtmlLexer.WHITESPACE)\n\t\t\t\t{\n\t\t\t\t\tif (!bFirstInLine)\n\t\t\t\t\t\tbWhiteSpace = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (token != PageTextHtmlLexer.EOF)\n\t\t\t\t{\n\t\t\t\t\tstring ntoken;\n                    if (token == PageTextHtmlLexer.NBSP.ToString())\n                        ntoken = bWhiteSpace ? \"  \" : \" \";\n                    else\n                        ntoken = bWhiteSpace ? \" \" + token : token;\n                    ntoken = ntoken.Replace(PageTextHtmlLexer.NBSP, ' ');\n\n\t\t\t\t\tbWhiteSpace = false;\t\t\t// can only use whitespace once\n\t\t\t\t\tms = this.MeasureString(ntoken, CurrentStyle(si), g, out descent);\n\t\t\t\t\tif (xPos + ms.Width < textWidth)\n\t\t\t\t\t{\n                        if (bFirstInLine)\n                        {\n                            if (OlLiCount == 0)                        //Adds UL bullet\n                                sb.Append(\"•   \");\n                            else if (OlLiCount > 0)                        //Adds OL numeric prefix\n                                sb.AppendFormat(\"{0})   \", OlLiCount);\n                        }\n\n                        bFirstInLine = false;\n\t\t\t\t\t\tsb.Append(ntoken);\n\n\t\t\t\t\t\tmaxDescent = Math.Max(maxDescent, descent);\n\t\t\t\t\t\tmaxLineHeight = Math.Max(maxLineHeight, ms.Height);\n\t\t\t\t\t\txPos += ms.Width;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (sb.Length == 0)\t// EOF and no previous string means we're done\n\t\t\t\t\tcontinue;\n\n\t\t\t\tpt = new PageText(sb.ToString());\n                pt.AllowSelect = false;\n                pt.Page = this.Page;\n                pt.HtmlParent = this;\n                pt.NoClip = true;\n\t\t\t\tpt.HyperLink = model.HyperLink;\n\t\t\t\tpt.Tooltip = model.Tooltip;\n\t\t\t\tsb = new StringBuilder();\n\t\t\t\tsb.Append(token.Replace(PageTextHtmlLexer.NBSP, ' '));\n\t\t\t\tpt.SI = CurrentStyle(si).Clone() as StyleInfo;\n\t\t\t\tms = this.MeasureString(pt.Text, pt.SI, g, out descent);\n\t\t\t\tpt.X = this.X + lineXPos;\n\t\t\t\tpt.Y = this.Y + yPos;\n\t\t\t\tpt.H = ms.Height;\n\t\t\t\tpt.W = ms.Width; \n\t\t\t\tpt.Descent = descent;\n\t\t\t\tpt.CanGrow = false;\n\t\t\t\t_items.Add(pt);\n\t\t\t\tlineItems.Add(pt);\n\t\t\t\tmaxDescent = Math.Max(maxDescent, descent);\n\t\t\t\tmaxLineHeight = Math.Max(maxLineHeight, ms.Height);\n\t\t\t\tyPos += maxLineHeight;\t// Increment y position\n\t\t\t\tNormalizeLineHeight(lineItems, maxLineHeight, maxDescent);\n\t\t\t\tlineXPos = maxLineHeight = maxDescent = 0;\t// start line height over\n\n\t\t\t\t// Now set the xPos just after the current token\n\t\t\t\tms = this.MeasureString(token, CurrentStyle(si), g, out descent);\n\t\t\t\txPos = ms.Width;\t \n\t\t\t}\n\t\t\n\t\t\t_TotalHeight = yPos;\t\t// set the calculated height of the result\n\t\t\t_StyleStack = null;\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void BuildAnchor(string token, StyleInfo oldsi, PageText model)\n\t\t{\n\t\t\tStyleInfo si= oldsi.Clone() as StyleInfo;\t// always push a StyleInfo\n\t\t\t_StyleStack.Push(si);\t\t\t\t\t\t//   since they will always be popped\n\n\t\t\tHashtable ht = ParseHtmlCmd(token);\n\n\t\t\tstring href = (string) ht[\"href\"];\n\t\t\tif (href == null || href.Length < 1)\n\t\t\t\treturn;\n\t\t\tmodel.HyperLink = model.Tooltip = href;\n\t\t\tsi.TextDecoration = TextDecorationEnum.Underline;\n\t\t\tsi.Color = Draw.Color.Blue;\n\t\t}\n\n        private async Task<PageImage> BuildImage(Draw.Graphics g, string token, StyleInfo oldsi, PageText model)\n        {\n            PageTextHtmlCmdLexer hc = new PageTextHtmlCmdLexer(token.Substring(4));\n            Hashtable ht = hc.Lex();\n\n            string src = (string)ht[\"src\"];\n            if (src == null || src.Length < 1)\n                return null;\n\n            string alt = (string)ht[\"alt\"];\n\n            string height = (string)ht[\"height\"];\n            string width = (string)ht[\"width\"];\n            string align = (string)ht[\"align\"];\n\n            Stream strm = null;\n            Draw.Image im = null;\n            PageImage pi = null;\n            try\n            {\n                // Obtain the image stream\n                if (src.StartsWith(\"http:\") || src.StartsWith(\"file:\") || src.StartsWith(\"https:\"))\n                {\n                    using (HttpClient client = new HttpClient())\n                    {\n\t\t\t\t\t\tclient.AddMajorsilenceReportingUserAgent();\n                        strm = await client.GetStreamAsync(src);\n                    }\n                }\n                else\n                {\n                    strm = new FileStream(src, System.IO.FileMode.Open, FileAccess.Read);\n                }\n\n                im = Draw.Image.FromStream(strm);\n                int h = im.Height;\n                int w = im.Width;\n                MemoryStream ostrm = new MemoryStream();\n                ImageFormat imf;\n                imf = ImageFormat.Jpeg;\n                im.Save(ostrm, imf);\n                byte[] ba = ostrm.ToArray();\n                ostrm.Close();\n                pi = new PageImage(imf, ba, w, h);\n                pi.AllowSelect = false;\n                pi.Page = this.Page;\n                pi.HyperLink = model.HyperLink;\n                pi.Tooltip = alt == null ? model.Tooltip : alt;\n                pi.X = 0;\n                pi.Y = 0;\n\n                pi.W = RSize.PointsFromPixels(g, width != null ? Convert.ToInt32(width) : w);\n                pi.H = RSize.PointsFromPixels(g, height != null ? Convert.ToInt32(height) : h);\n                pi.SI = new StyleInfo();\n            }\n            catch\n            {\n                pi = null;\n            }\n            finally\n            {\n                if (strm != null)\n                    strm.Close();\n                if (im != null)\n                    im.Dispose();\n            }\n\n            return pi;\n        }\n\n\t\tprivate StyleInfo CurrentStyle(StyleInfo def)\n\t\t{\n\t\t\tif (_StyleStack == null  || _StyleStack.Count == 0)\n\t\t\t\treturn def;\n\t\t\telse\n\t\t\t\treturn (StyleInfo) _StyleStack.Peek();\n\t\t}\n\n\t\tprivate void HandleStyle(string token, StyleInfo model)\n\t\t{\n\t\t\tStyleInfo si= model.Clone() as StyleInfo;\t// always push a StyleInfo\n\t\t\t_StyleStack.Push(si);\t\t\t\t\t\t//   since they will always be popped\n\n\t\t\tHashtable ht = ParseHtmlCmd(token);\n\t\t\tstring style = (string) ht[\"style\"];\n\n            HandleStyleString(style, si);\n\n            return;\n        }\n\n        private void HandleFont(string token, StyleInfo model)\n        {\n            StyleInfo si = model.Clone() as StyleInfo;\t// always push a StyleInfo\n            _StyleStack.Push(si);\t\t\t\t\t\t//   since they will always be popped\n\n            PageTextHtmlCmdLexer hc = new PageTextHtmlCmdLexer(token.Substring(5));\n            Hashtable ht = hc.Lex();\n\n            string style = (string)ht[\"style\"];\n            HandleStyleString(style, si);\n\n            string color = (string)ht[\"color\"];\n            if (color != null && color.Length > 0)\n                si.Color = XmlUtil.ColorFromHtml(color, si.Color);\n\n            string size = (string)ht[\"size\"];\n            if (size != null && size.Length > 0)\n                HandleStyleFontSize(si, size);\n\n            string face = (string)ht[\"face\"];\n            if (face != null && face.Length > 0)\n                si.FontFamily = face;\n\n            return;\n        }\n\n        private void HandleStyleString(string style, StyleInfo si)\n        {\n            if (style == null || style.Length < 1)\n                return;\n\n\t\t\tstring[] styleList = style.Split(new char[] {';'});\n\n\t\t\tforeach (string item in styleList)\n\t\t\t{\n\t\t\t\tstring[] val = item.Split(new char[] {':'});\n\t\t\t\tif (val.Length != 2)\n\t\t\t\t\tcontinue;\t\t\t// must be illegal syntax\n\t\t\t\tstring tval = val[1].Trim();\n\t\t\t\tswitch (val[0].ToLower().Trim())\n\t\t\t\t{\n\t\t\t\t\tcase \"background\":\n\t\t\t\t\tcase \"background-color\":\n\t\t\t\t\t\tsi.BackgroundColor = XmlUtil.ColorFromHtml(tval, si.Color);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"color\":\n\t\t\t\t\t\tsi.Color = XmlUtil.ColorFromHtml(tval, si.Color);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"font-family\":\n\t\t\t\t\t\tsi.FontFamily = tval;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"font-size\":\n\t\t\t\t\t\tHandleStyleFontSize(si, tval);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"font-style\":\n\t\t\t\t\t\tif (tval == \"italic\")\n\t\t\t\t\t\t\tsi.FontStyle = FontStyleEnum.Italic;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"font-weight\":\n\t\t\t\t\t\tHandleStyleFontWeight(si, tval);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void HandleStyleFontSize(StyleInfo si, string size)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tint i = size.IndexOf(\"pt\");\n\n\t\t\t\tif (i > 0)\n\t\t\t\t{\n\t\t\t\t\tsize = size.Remove(i, 2);\n\t\t\t\t\tfloat n = (float) Convert.ToDouble(size);\n\t\t\t\t\tif (size[0] == '+')\n\t\t\t\t\t\tsi.FontSize += n;\n\t\t\t\t\telse\n\t\t\t\t\t\tsi.FontSize = n;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ti = size.IndexOf(\"%\");\n\t\t\t\tif (i > 0)\n\t\t\t\t{\n\t\t\t\t\tsize = size.Remove(i, 1);\n\t\t\t\t\tfloat n = (float) Convert.ToDouble(size);\n\t\t\t\t\tsi.FontSize = n*si.FontSize;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tswitch (size)\n\t\t\t\t{\n\t\t\t\t\tcase \"xx-small\":\n\t\t\t\t\t\tsi.FontSize = 6;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"x-small\":\n\t\t\t\t\t\tsi.FontSize = 8;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"small\":\n\t\t\t\t\t\tsi.FontSize = 10;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"medium\":\n\t\t\t\t\t\tsi.FontSize = 12;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"large\":\n\t\t\t\t\t\tsi.FontSize = 14;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"x-large\":\n\t\t\t\t\t\tsi.FontSize = 16;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"xx-large\":\n\t\t\t\t\t\tsi.FontSize = 18;\n\t\t\t\t\t\tbreak;\n                    case \"1\":\n                        si.FontSize = 8;\n                        break;\n                    case \"2\":\n                        si.FontSize = 10;\n                        break;\n                    case \"3\":\n                        si.FontSize = 12;\n                        break;\n                    case \"4\":\n                        si.FontSize = 14;\n                        break;\n                    case \"5\":\n                        si.FontSize = 18;\n                        break;\n                    case \"6\":\n                        si.FontSize = 24;\n                        break;\n                    case \"7\":\n                        si.FontSize = 36;\n                        break;\n                }\n\t\t\t}\n\t\t\tcatch {}\t\t// lots of user errors will cause an exception; ignore\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void HandleStyleFontWeight(StyleInfo si, string w)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tswitch (w)\n\t\t\t\t{\n\t\t\t\t\tcase \"bold\":\n\t\t\t\t\t\tsi.FontWeight = FontWeightEnum.Bold;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"bolder\":\n\t\t\t\t\t\tif (si.FontWeight > FontWeightEnum.Bolder)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (si.FontWeight < FontWeightEnum.W900)\n\t\t\t\t\t\t\t\tsi.FontWeight++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (si.FontWeight == FontWeightEnum.Normal)\n\t\t\t\t\t\t\tsi.FontWeight = FontWeightEnum.W700;\n\t\t\t\t\t\telse if (si.FontWeight == FontWeightEnum.Bold)\n\t\t\t\t\t\t\tsi.FontWeight = FontWeightEnum.W900;\n\t\t\t\t\t\telse if (si.FontWeight != FontWeightEnum.Bolder)\n\t\t\t\t\t\t\tsi.FontWeight = FontWeightEnum.Normal;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"lighter\":\n\t\t\t\t\t\tif (si.FontWeight > FontWeightEnum.Bolder)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (si.FontWeight > FontWeightEnum.W100)\n\t\t\t\t\t\t\t\tsi.FontWeight--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (si.FontWeight == FontWeightEnum.Normal)\n\t\t\t\t\t\t\tsi.FontWeight = FontWeightEnum.W300;\n\t\t\t\t\t\telse if (si.FontWeight == FontWeightEnum.Bold)\n\t\t\t\t\t\t\tsi.FontWeight = FontWeightEnum.W400;\n\t\t\t\t\t\telse if (si.FontWeight != FontWeightEnum.Lighter)\n\t\t\t\t\t\t\tsi.FontWeight = FontWeightEnum.Normal;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"normal\":\n\t\t\t\t\t\tsi.FontWeight = FontWeightEnum.Normal;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"100\":\n\t\t\t\t\t\tsi.FontWeight = FontWeightEnum.W100;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"200\":\n\t\t\t\t\t\tsi.FontWeight = FontWeightEnum.W200;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"300\":\n\t\t\t\t\t\tsi.FontWeight = FontWeightEnum.W300;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"400\":\n\t\t\t\t\t\tsi.FontWeight = FontWeightEnum.W400;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"500\":\n\t\t\t\t\t\tsi.FontWeight = FontWeightEnum.W500;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"600\":\n\t\t\t\t\t\tsi.FontWeight = FontWeightEnum.W600;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"700\":\n\t\t\t\t\t\tsi.FontWeight = FontWeightEnum.W700;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"800\":\n\t\t\t\t\t\tsi.FontWeight = FontWeightEnum.W800;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"900\":\n\t\t\t\t\t\tsi.FontWeight = FontWeightEnum.W900;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch {}\t\t// lots of user errors will cause an exception; ignore\n\t\t\treturn;\n\t\t}\n\n\t\tprivate void PopStyle()\n\t\t{\n\t\t\tif (_StyleStack != null && _StyleStack.Count > 0)\n\t\t\t\t_StyleStack.Pop();\n\t\t}\n\n\t\tprivate void NormalizeLineHeight(List<PageItem> lineItems, float maxLineHeight, float maxDescent)\n\t\t{\n\t\t\tforeach (PageItem pi in lineItems)\n\t\t\t{\n\t\t\t\tif (pi is PageText)\n\t\t\t\t{\t// force the text to line up\n\t\t\t\t\tPageText pt = (PageText) pi;\n\t\t\t\t\tif (pt.H >= maxLineHeight)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tpt.Y += maxLineHeight - pt.H;\n\t\t\t\t\tif (pt.Descent > 0 && pt.Descent < maxDescent)\n\t\t\t\t\t\tpt.Y -= (maxDescent - pt.Descent);\n\t\t\t\t}\n\t\t\t}\n\t\t\tlineItems.Clear();\n\t\t}\n\n\t\tprivate Hashtable ParseHtmlCmd(string token)\n\t\t{\n\t\t\tHashtable ht = new Hashtable();\n\t\t\t// find the start and the end of the command\n\t\t\tint start = token.IndexOf(' ');\t// look for first blank\n\t\t\tif (start < 0)\n\t\t\t\treturn ht;\n\t\t\tint end = token.LastIndexOf('>');\n\t\t\tif (end < 0 || end <= start)\n\t\t\t\treturn ht;\n\t\t\tstring cmd = token.Substring(start, end - start);\n\t\t\tstring[] keys = cmd.Split(new char[] {'='});\n            if (keys == null || keys.Length < 2)\n                return ht;\n            try\n            {\n                for (int i = 0; i < keys.Length - 1; i += 2)\n                {\n                    // remove \" from the value if any\n                    string v = keys[i + 1];\n                    if (v.Length > 0 && (v[0] == '\"' || v[0] == '\\''))\n                        v = v.Substring(1);\n                    if (v.Length > 0 && (v[v.Length - 1] == '\"' || v[v.Length - 1] == '\\''))\n                        v = v.Substring(0, v.Length - 1);\n                    // normalize key to lower case\n                    string key = keys[i].ToLower().Trim();\n                    ht.Add(key, v);\n                }\n            }\n            catch { }   // there are any number of ill formed strings that could cause problems; keep what we've found\n\t\t\treturn ht;\n\t\t}\n\n\t\tprivate Draw.SizeF MeasureString(string s, StyleInfo si, Draw.Graphics g, out float descent)\n\t\t{\n\t\t\tDraw.Font drawFont=null;\n\t\t\tDraw.StringFormat drawFormat=null;\n\t\t\tDraw.SizeF ms = Draw.SizeF.Empty;\n\t\t\tdescent = 0;\t\t\t\t\n\t\t\tif (s == null || s.Length == 0)\n\t\t\t\treturn ms;\n\t\t\ttry\n\t\t\t{\n\t\t\t\t// STYLE\n\t\t\t\tDraw.FontStyle fs = 0;\n\t\t\t\tif (si.FontStyle == FontStyleEnum.Italic)\n\t\t\t\t\tfs |= Draw.FontStyle.Italic;\n\n\t\t\t\t// WEIGHT\n\t\t\t\tswitch (si.FontWeight)\n\t\t\t\t{\n\t\t\t\t\tcase FontWeightEnum.Bold:\n\t\t\t\t\tcase FontWeightEnum.Bolder:\n\t\t\t\t\tcase FontWeightEnum.W500:\n\t\t\t\t\tcase FontWeightEnum.W600:\n\t\t\t\t\tcase FontWeightEnum.W700:\n\t\t\t\t\tcase FontWeightEnum.W800:\n\t\t\t\t\tcase FontWeightEnum.W900:\n\t\t\t\t\t\tfs |= Draw.FontStyle.Bold;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tDraw.FontFamily ff = si.GetFontFamily();\n\t\t\t\t\tdrawFont = new Draw.Font(ff, si.FontSize, fs);\n\t\t\t\t\t// following algorithm comes from the C# Font Metrics documentation\n\t\t\t\t\tfloat descentPixel = si.FontSize * ff.GetCellDescent(fs) / ff.GetEmHeight(fs);\n\t\t\t\t\tdescent = RSize.PointsFromPixels(g, descentPixel);\n\t\t\t\t}\n\t\t\t\tcatch\n\t\t\t\t{\n\t\t\t\t\tdrawFont = new Draw.Font(\"Arial\", si.FontSize, fs);\t// usually because font not found\n\t\t\t\t\tdescent = 0;\n\t\t\t\t}\n\t\t\t\tdrawFormat = new Draw.StringFormat();\n\t\t\t\tdrawFormat.Alignment = Draw.StringAlignment.Near;\n\n\t\t\t\tDraw.CharacterRange[] cr = {new Draw.CharacterRange(0, s.Length)};\n\t\t\t\tdrawFormat.SetMeasurableCharacterRanges(cr);\n\t\t\t\tDraw.Region[] rs = new Draw.Region[1];\n\t\t\t\trs = g.MeasureCharacterRanges(s, drawFont, new Draw.RectangleF(0,0,float.MaxValue,float.MaxValue),\n\t\t\t\t\tdrawFormat);\n\t\t\t\tDraw.RectangleF mr = rs[0].GetBounds(g);\n\n\t\t\t\tms.Height = RSize.PointsFromPixels(g, mr.Height);\t// convert to points from pixels\n\t\t\t\tms.Width = RSize.PointsFromPixels(g, mr.Width);\t\t// convert to points from pixels\n\t\t\t\treturn ms;\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (drawFont != null)\n\t\t\t\t\tdrawFont.Dispose();\n\t\t\t\tif (drawFormat != null)\n\t\t\t\t\tdrawFont.Dispose();\n\t\t\t}\n\t\t}\n\t\t\n\t\t#region IEnumerable Members\n\n\t\tpublic IEnumerator GetEnumerator()\n\t\t{\n            if (_items == null)\n                return null;\n\t\t\treturn _items.GetEnumerator();\n\t\t}\n\n\t\t#endregion\n\n\t\t#region ICloneable Members\n\n\t\tnew public object Clone()\n\t\t{\n\t\t\treturn this.MemberwiseClone();\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Runtime/PageTextHtmlCmdLexer.cs",
    "content": "\nusing System;\nusing System.IO;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Text;\nusing Majorsilence.Reporting.RdlEngine.Resources;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// A simple lexer that is used by PageTextHtml to break an HTML command into name value pairs.\n\t/// </summary>\n\tinternal class PageTextHtmlCmdLexer\n\t{\n\t\tprivate CharReader reader;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the Lexer class with the specified\n\t\t/// TextReader to lex.\n\t\t/// </summary>\n\t\t/// <param name=\"source\">A TextReader to lex.</param>\n\t\tinternal PageTextHtmlCmdLexer(string htmlcmd)\n\t\t{\n\t\t\t// read the file contents\n\t\t\treader = new CharReader(htmlcmd);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Breaks the input stream onto the tokens list and returns a hash table with the name value pairs.\n\t\t/// </summary>\n\t\t/// <returns>The hash table.</returns>\n\t\tinternal Hashtable Lex()\n\t\t{\n            Hashtable ht = new Hashtable();\n\t\t\twhile(true)\n\t\t\t{\n                string cmd = GetNextToken();\n                if (cmd == null)\n                    return ht;\n\n                if (GetNextToken() != \"=\")\n                    return ht;\n\n                string val = GetNextToken();\n                if (val == null)\n                    return ht;\n\n                ht.Add(cmd, val);\n\t\t\t}\n\t\t}\n\n\t\tprivate string GetNextToken()\n\t\t{\n\t\t\twhile(!reader.EndOfInput())\n\t\t\t{\n\t\t\t\tchar ch = reader.GetNext();\n\n\t\t\t\t// skipping whitespaces\tat front of token\n\t\t\t\tif(Char.IsWhiteSpace(ch))\n\t\t\t\t\tcontinue;\n\n\t\t\t\tswitch(ch)\n\t\t\t\t{\n\t\t\t\t\tcase '\\'':\n                    case '\"':\n\t\t\t\t\t\treturn ReadQuoted(ch);\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn ReadWord(ch);\n\t\t\t\t} // end of switch\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\t// Read html command string\n\t\tprivate string ReadQuoted(char firstc)\n\t\t{\n\t\t\tchar qChar = firstc;\n\t\t\tStringBuilder lt = new StringBuilder();\n\n\t\t\twhile(!reader.EndOfInput())\n\t\t\t{\n\t\t\t\tchar ch = reader.GetNext();\n                if (ch == qChar)\n                    break;\n                lt.Append(ch);\n\t\t\t}\n\t\t\treturn lt.ToString();\n\t\t}\n\n\t\t// Read to next white space or to specified character\n\t\tprivate string ReadWord(char ch)\n\t\t{\n            if (ch == '=')\n                return \"=\";\n\n\t\t\tStringBuilder lt = new StringBuilder();\n            lt.Append(ch);\n\n\t\t\twhile(!reader.EndOfInput())\n\t\t\t{\n\t\t\t\tch = reader.GetNext();\n\n                if (Char.IsWhiteSpace(ch) || ch == '=')\n\t\t\t\t{\n\t\t\t\t\treader.UnGet();\t\t// put it back on the stack\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tlt.Append(ch);\n\t\t\t}\n\t\t\treturn lt.ToString();\n\t\t}\n\n\t\tclass CharReader\n\t\t{\n\t\t\tstring file = null;\n\t\t\tint    ptr  = 0;\n\n\t\t\t/// <summary>\n\t\t\t/// Initializes a new instance of the CharReader class.\n\t\t\t/// </summary>\n\t\t\tinternal CharReader(string text)\n\t\t\t{\n\t\t\t\tfile = text;\n\t\t\t}\n\t\t\n\t\t\t/// <summary>\n\t\t\t/// Returns the next char from the stream.\n\t\t\t/// </summary>\n\t\t\tinternal char GetNext()\n\t\t\t{\n\t\t\t\tif (EndOfInput()) \n\t\t\t\t{\n\t\t\t\t\treturn '\\0';\n\t\t\t\t}\n\t\t\t\tchar ch = file[ptr++];\n\n\t\t\t\treturn ch;\n\t\t\t}\n\t\t\n\t\t\t/// <summary>\n\t\t\t/// Returns the next char from the stream without removing it.\n\t\t\t/// </summary>\n\t\t\tinternal char Peek()\n\t\t\t{\n\t\t\t\tif (EndOfInput()) // ok to peek at end of file\n\t\t\t\t\treturn '\\0';\n\n\t\t\t\treturn file[ptr];\n\t\t\t}\n\t\t\n\t\t\t/// <summary>\n\t\t\t/// Undoes the extracting of the last char.\n\t\t\t/// </summary>\n\t\t\tinternal void UnGet()\n\t\t\t{\n\t\t\t\t--ptr;\n\t\t\t\tif (ptr < 0) \n\t\t\t\t\tthrow new Exception(Strings.CharReader_Error_FileReaderUnGetFirstChar);\n\t\t\t\n\t\t\t\tchar ch = file[ptr];\n\t\t\t}\n\t\t\n\t\t\t/// <summary>\n\t\t\t/// Returns True if end of input was reached; otherwise False.\n\t\t\t/// </summary>\n\t\t\tinternal bool EndOfInput()\n\t\t\t{\n\t\t\t\treturn ptr >= file.Length;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Runtime/PageTextHtmlLexer.cs",
    "content": "\nusing System;\nusing System.IO;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Text;\nusing Majorsilence.Reporting.RdlEngine.Resources;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// A simple lexer that is used by PageTextHtml to break an HTML string into components.\n\t/// </summary>\n\tinternal class PageTextHtmlLexer\n\t{\n\t\tprivate List<string> tokens;\n\t\tprivate CharReader reader;\n\t\t// we reserve some of the strings for control purposes\n\t\tstatic internal string EOF = '\\ufffe'.ToString();\n\t\tstatic internal string WHITESPACE = '\\ufffd'.ToString();\n\t\tstatic internal char HTMLCMD = '\\ufffc';\n        static internal char NBSP = '\\ufffb';\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the Lexer class with the specified\n\t\t/// TextReader to lex.\n\t\t/// </summary>\n\t\t/// <param name=\"source\">A TextReader to lex.</param>\n\t\tinternal PageTextHtmlLexer(string html)\n\t\t{\n\t\t\t// token queue\n\t\t\ttokens = new List<string>();\n\n\t\t\t// read the file contents\n\t\t\treader = new CharReader(html);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Breaks the input stream onto the tokens list and returns it.\n\t\t/// </summary>\n\t\t/// <returns>The tokens list.</returns>\n\t\tinternal List<string> Lex()\n\t\t{\n\t\t\tstring token = GetNextToken();\n\t\t\twhile(true)\n\t\t\t{\n\t\t\t\tif(token == null)\n\t\t\t\t{\n\t\t\t\t\ttokens.Add(EOF);\t// add EOF token\n                    tokens.TrimExcess();\n\t\t\t\t\treturn tokens;\n\t\t\t\t}\n\t\t\t\ttokens.Add(token);\n\t\t\t\ttoken = GetNextToken();\n\t\t\t}\n\t\t}\n\n\t\tprivate string GetNextToken()\n\t\t{\n\t\t\tbool bWhiteSpace = false;\n\t\t\twhile(!reader.EndOfInput())\n\t\t\t{\n\t\t\t\tchar ch = reader.GetNext();\n\n\t\t\t\t// skipping whitespaces\tat front of token\n\t\t\t\tif(Char.IsWhiteSpace(ch))\n\t\t\t\t{\n\t\t\t\t\tbWhiteSpace = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If we had any white space \n\t\t\t\tif (bWhiteSpace)\n\t\t\t\t{\n\t\t\t\t\treader.UnGet();\n\t\t\t\t\treturn WHITESPACE;\t\t\t// indicates white space in location\n\t\t\t\t}\n\n\t\t\t\tswitch(ch)\n\t\t\t\t{\n\t\t\t\t\tcase '<':\n\t\t\t\t\t\treturn ReadHtml(ch, '>');\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn ReadWord(ch, '<');\n\t\t\t\t} // end of switch\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\t// Read html command string\n\t\tprivate string ReadHtml(char firstc, char ch)\n\t\t{\n\t\t\tchar qChar = ch;\n\t\t\tStringBuilder lt = new StringBuilder();\n            if (IsHtmlComment())\n            {       // HTML is a comment;   donated by jonh of the forum\n                char a;\n                char b = '\\0';\n                char c = '\\0';\n                a = firstc;\n                while (!reader.EndOfInput())\n                {\n                    if (a == '>' && b == '-' && c == '-')\n                    {\n                        break;\n                    }\n                    c = b;\n                    b = a;\n                    a = reader.GetNext();\n\n                }\n                lt.Append(HTMLCMD.ToString());   // mark as HTML command \n                lt.Append(\"<cmnt>\"); //wont display or cause anything to happen. \n            }\n            else\n            {\n                lt.Append(HTMLCMD.ToString());\t// mark as HTML command\n                lt.Append(firstc);\n\n                while (!reader.EndOfInput())\n                {\n                    ch = reader.GetNext();\n                    if (ch == '&')\n                        ch = ReadSpecial();\n                    lt.Append(ch);\n                    if (ch == qChar)\n                    {\n                        string cmd = lt.ToString();\n                        switch (cmd.Substring(1))\n                        {\n                            case \"<q>\":\n                            case \"</q>\":\n                                return \"\\\"\";\n                            default:\n                                return lt.ToString();\n                        }\n                    }\n                }\n            }\n\t\t\treturn lt.ToString();\n\t\t}\n        /// <summary>\n        /// Determine if HTML is part of a comment.   Donated by jonh of the forum\n        /// </summary>\n        /// <returns></returns>\n        private bool IsHtmlComment()\n        {\n            char a = '\\0';\n            char b = '\\0';\n            char c = '\\0';\n            if (!reader.EndOfInput()) a = reader.GetNext();\n            if (!reader.EndOfInput()) b = reader.GetNext();\n            if (!reader.EndOfInput()) c = reader.GetNext();\n\n            bool ret = false;\n\n            if (a == '!' && b == '-' && c == '-')\n                ret = true;\n            else\n            {\n                reader.UnGet();\n                reader.UnGet();\n                reader.UnGet();\n            }\n            return ret;\n        } \n\n\t\t// handles special characters; that is those beginning with &\n\t\tprivate char ReadSpecial()\n\t\t{\n\t\t\tStringBuilder lt = new StringBuilder();\n            int MAXSPECIAL = 8;             // should be the size of the maximum escaped character\n\t\t\twhile(!reader.EndOfInput() && MAXSPECIAL-- > 0)\n\t\t\t{\n\t\t\t\tchar ch = reader.GetNext();\n\t\t\t\tif (ch == ';')\n\t\t\t\t\tbreak;\t\t\t\t \n\t\t\t\tlt.Append(ch);\n\t\t\t}\n              \n            if (MAXSPECIAL <= 0)\n            {   // can't be an escaped character; undo all the reading\n                for (int i=1; i <= lt.Length; i++) // unget all the characters\n                { \n                    reader.UnGet();\n                }\n                return '&';\n            }\n\t\t\tstring s = lt.ToString();\n\t\t\tif (s.Length == 0)\t\t\t// not a valid character; return blank\n\t\t\t\treturn ' ';\n\t\t\tif (s[0] == '#')\t\t\t// number character\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tstring num = s.Substring(1);\t// this can cause an exception\n\t\t\t\t\tint nv = Convert.ToInt32(num);\t//    and this can too\n\t\t\t\t\tif (nv > 255)\n\t\t\t\t\t\treturn ' ';\t\t// not a valid number; return blank\n\t\t\t\t\treturn Convert.ToChar(nv);\n\t\t\t\t}\n\t\t\t\tcatch\n\t\t\t\t{\n\t\t\t\t\treturn ' ';\t\t\t// not a valid number; return blank\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch (s)\n            {   // see http://www.w3.org/TR/html4/sgml/entities.html\n\t\t\t\tcase \"quot\": return '\"';\n\t\t\t\tcase \"amp\": return '&';\n\t\t\t\tcase \"lt\": return '<';\n\t\t\t\tcase \"gt\": return '>';\n\t\t\t\tcase \"nbsp\": return NBSP;\n\t\t\t\tcase \"iexcl\": return Convert.ToChar(161);\n\t\t\t\tcase \"cent\": return Convert.ToChar(162);\n\t\t\t\tcase \"pound\": return Convert.ToChar(163);\n\t\t\t\tcase \"curren\": return Convert.ToChar(164);\n\t\t\t\tcase \"yen\": return Convert.ToChar(165);\n\t\t\t\tcase \"brvbar\": return Convert.ToChar(166);\n\t\t\t\tcase \"sect\": return Convert.ToChar(167);\n\t\t\t\tcase \"uml\": return Convert.ToChar(168);\n\t\t\t\tcase \"copy\": return Convert.ToChar(169);\n\t\t\t\tcase \"ordf\": return Convert.ToChar(170);\n\t\t\t\tcase \"laquo\": return Convert.ToChar(171);\n\t\t\t\tcase \"not\": return Convert.ToChar(172);\n\t\t\t\tcase \"shy\": return Convert.ToChar(173);\n\t\t\t\tcase \"reg\": return Convert.ToChar(174);\n\t\t\t\tcase \"macr\": return Convert.ToChar(175);\n\t\t\t\tcase \"deg\": return Convert.ToChar(176);\n\t\t\t\tcase \"plusmn\": return Convert.ToChar(177);\n\t\t\t\tcase \"sup2\": return Convert.ToChar(178);\n\t\t\t\tcase \"sup3\": return Convert.ToChar(179);\n\t\t\t\tcase \"acute\": return Convert.ToChar(180);\n\t\t\t\tcase \"micro\": return Convert.ToChar(181);\n\t\t\t\tcase \"para\": return Convert.ToChar(182);\n\t\t\t\tcase \"middot\": return Convert.ToChar(183);\n\t\t\t\tcase \"cedil\": return Convert.ToChar(184);\n\t\t\t\tcase \"sup1\": return Convert.ToChar(185);\n\t\t\t\tcase \"ordm\": return Convert.ToChar(186);\n\t\t\t\tcase \"raquo\": return Convert.ToChar(187);\n\t\t\t\tcase \"frac14\": return Convert.ToChar(188);\n\t\t\t\tcase \"frac12\": return Convert.ToChar(189);\n\t\t\t\tcase \"frac34\": return Convert.ToChar(190);\n\t\t\t\tcase \"iquest\": return Convert.ToChar(191);\n\t\t\t\tcase \"Agrave\": return Convert.ToChar(192);\n\t\t\t\tcase \"Aacute\": return Convert.ToChar(193);\n\t\t\t\tcase \"Acirc\": return Convert.ToChar(194);\n\t\t\t\tcase \"Atilde\": return Convert.ToChar(195);\n\t\t\t\tcase \"Auml\": return Convert.ToChar(196);\n\t\t\t\tcase \"Aring\": return Convert.ToChar(197);\n\t\t\t\tcase \"AElig\": return Convert.ToChar(198);\n\t\t\t\tcase \"Ccedil\": return Convert.ToChar(199);\n\t\t\t\tcase \"Egrave\": return Convert.ToChar(200);\n\t\t\t\tcase \"Eacute\": return Convert.ToChar(201);\n\t\t\t\tcase \"Ecirc\": return Convert.ToChar(202);\n\t\t\t\tcase \"Euml\": return Convert.ToChar(203);\n\t\t\t\tcase \"lgrave\": return Convert.ToChar(204);\n\t\t\t\tcase \"lacute\": return Convert.ToChar(205);\n\t\t\t\tcase \"lcirc\": return Convert.ToChar(206);\n\t\t\t\tcase \"luml\": return Convert.ToChar(207);\n\t\t\t\tcase \"EHT\": return Convert.ToChar(208);\n\t\t\t\tcase \"Ntilde\": return Convert.ToChar(209);\n\t\t\t\tcase \"Ograve\": return Convert.ToChar(210);\n\t\t\t\tcase \"Oacute\": return Convert.ToChar(211);\n\t\t\t\tcase \"Ocirc\": return Convert.ToChar(212);\n\t\t\t\tcase \"Otilde\": return Convert.ToChar(213);\n\t\t\t\tcase \"Ouml\": return Convert.ToChar(214);\n\t\t\t\tcase \"times\": return Convert.ToChar(215);\n\t\t\t\tcase \"Oslash\": return Convert.ToChar(216);\n\t\t\t\tcase \"Ugrave\": return Convert.ToChar(217);\n\t\t\t\tcase \"Uacute\": return Convert.ToChar(218);\n\t\t\t\tcase \"Ucirc\": return Convert.ToChar(219);\n\t\t\t\tcase \"Uuml\": return Convert.ToChar(220);\n\t\t\t\tcase \"Yacute\": return Convert.ToChar(221);\n\t\t\t\tcase \"THORN\": return Convert.ToChar(222);\n\t\t\t\tcase \"szlig\": return Convert.ToChar(223);\n\t\t\t\tcase \"agrave\": return Convert.ToChar(224);\n\t\t\t\tcase \"aacute\": return Convert.ToChar(225);\n\t\t\t\tcase \"acirc\": return Convert.ToChar(226);\n\t\t\t\tcase \"atilde\": return Convert.ToChar(227);\n\t\t\t\tcase \"auml\": return Convert.ToChar(228);\n\t\t\t\tcase \"aring\": return Convert.ToChar(229);\n\t\t\t\tcase \"aelig\": return Convert.ToChar(230);\n\t\t\t\tcase \"ccedil\": return Convert.ToChar(231);\n\t\t\t\tcase \"egrave\": return Convert.ToChar(232);\n\t\t\t\tcase \"eacute\": return Convert.ToChar(233);\n\t\t\t\tcase \"ecirc\": return Convert.ToChar(234);\n\t\t\t\tcase \"euml\": return Convert.ToChar(235);\n\t\t\t\tcase \"igrave\": return Convert.ToChar(236);\n\t\t\t\tcase \"iacute\": return Convert.ToChar(237);\n\t\t\t\tcase \"icirc\": return Convert.ToChar(238);\n\t\t\t\tcase \"iuml\": return Convert.ToChar(239);\n\t\t\t\tcase \"eth\": return Convert.ToChar(240);\n\t\t\t\tcase \"ntilde\": return Convert.ToChar(241);\n\t\t\t\tcase \"ograve\": return Convert.ToChar(242);\n\t\t\t\tcase \"oacute\": return Convert.ToChar(243);\n\t\t\t\tcase \"ocirc\": return Convert.ToChar(244);\n\t\t\t\tcase \"otilde\": return Convert.ToChar(245);\n\t\t\t\tcase \"ouml\": return Convert.ToChar(246);\n\t\t\t\tcase \"divide\": return Convert.ToChar(247);\n\t\t\t\tcase \"oslash\": return Convert.ToChar(248);\n\t\t\t\tcase \"ugrave\": return Convert.ToChar(249);\n\t\t\t\tcase \"uacute\": return Convert.ToChar(250);\n\t\t\t\tcase \"ucirc\": return Convert.ToChar(251);\n\t\t\t\tcase \"uuml\": return Convert.ToChar(252);\n\t\t\t\tcase \"yacute\": return Convert.ToChar(253);\n\t\t\t\tcase \"thorn\": return Convert.ToChar(254);\n\t\t\t\tcase \"yuml\": return Convert.ToChar(255);\n                //  Arrows \n                case \"larr\": return Convert.ToChar(8592);\n                case \"uarr\": return Convert.ToChar(8593);\n                case \"rarr\": return Convert.ToChar(8594);\n                case \"darr\": return Convert.ToChar(8595);\n                case \"harr\": return Convert.ToChar(8596);\n                case \"crarr\": return Convert.ToChar(8629);\n                case \"lArr\": return Convert.ToChar(8657);\n                case \"rArr\": return Convert.ToChar(8658);\n                case \"dArr\": return Convert.ToChar(8659);\n                case \"hArr\": return Convert.ToChar(8660);\n                // Miscellaneous Symbols -->\n                case \"spades\": return Convert.ToChar(9824);\n                case \"clubs\": return Convert.ToChar(9827);\n                case \"hearts\": return Convert.ToChar(9829);\n                case \"diams\": return Convert.ToChar(9830);\n                default: return ' ';\t\t\t// not a valid special character\n\t\t\t}\n\t\t}\n\n\t\t// Read to next white space or to specified character\n\t\tprivate string ReadWord(char firstc, char ch)\n\t\t{\n\t\t\tchar qChar = ch;\n\t\t\tStringBuilder lt = new StringBuilder();\n\t\t\tlt.Append(firstc=='&'? ReadSpecial(): firstc);\n\n\t\t\twhile(!reader.EndOfInput())\n\t\t\t{\n\t\t\t\tch = reader.GetNext();\n\t\t\t\tif (Char.IsWhiteSpace(ch) || ch == qChar || ch == '>')\n\t\t\t\t{\n\t\t\t\t\treader.UnGet();\t\t// put it back on the stack\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (ch == '&')\n\t\t\t\t\tch = ReadSpecial();\n\n\t\t\t\tlt.Append(ch);\n\t\t\t}\n\t\t\treturn lt.ToString();\n\t\t}\n\n\t\tclass CharReader\n\t\t{\n\t\t\tstring file = null;\n\t\t\tint    ptr  = 0;\n\n\t\t\t/// <summary>\n\t\t\t/// Initializes a new instance of the CharReader class.\n\t\t\t/// </summary>\n\t\t\tinternal CharReader(string text)\n\t\t\t{\n\t\t\t\tfile = text;\n\t\t\t}\n\t\t\n\t\t\t/// <summary>\n\t\t\t/// Returns the next char from the stream.\n\t\t\t/// </summary>\n\t\t\tinternal char GetNext()\n\t\t\t{\n\t\t\t\tif (EndOfInput()) \n\t\t\t\t{\n\t\t\t\t\treturn '\\0';\n\t\t\t\t}\n\t\t\t\tchar ch = file[ptr++];\n\n\t\t\t\treturn ch;\n\t\t\t}\n\t\t\n\t\t\t/// <summary>\n\t\t\t/// Returns the next char from the stream without removing it.\n\t\t\t/// </summary>\n\t\t\tinternal char Peek()\n\t\t\t{\n\t\t\t\tif (EndOfInput()) // ok to peek at end of file\n\t\t\t\t\treturn '\\0';\n\n\t\t\t\treturn file[ptr];\n\t\t\t}\n\t\t\n\t\t\t/// <summary>\n\t\t\t/// Undoes the extracting of the last char.\n\t\t\t/// </summary>\n\t\t\tinternal void UnGet()\n\t\t\t{\n\t\t\t\t--ptr;\n\t\t\t\tif (ptr < 0) \n\t\t\t\t\tthrow new Exception(Strings.CharReader_Error_FileReaderUnGetFirstChar);\n\t\t\t\n\t\t\t\tchar ch = file[ptr];\n\t\t\t}\n\t\t\n\t\t\t/// <summary>\n\t\t\t/// Returns True if end of input was reached; otherwise False.\n\t\t\t/// </summary>\n\t\t\tinternal bool EndOfInput()\n\t\t\t{\n\t\t\t\treturn ptr >= file.Length;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Runtime/Pages.cs",
    "content": "\n\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\n#else\nusing System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    ///<summary>\n    /// Represents all the pages of a report.  Needed when you need\n    /// render based on pages.  e.g. PDF\n    ///</summary>\n    public class Pages : IEnumerable, IDisposable\n    {\n        Bitmap _bm;                     // bitmap to build graphics object \n        Graphics _g;                    // graphics object\n        Report _report;\t\t\t\t\t// owner report\n        List<Page> _pages;              // array of pages\n        Page _currentPage;              // the current page; 1st page if null\n        float _BottomOfPage;            // the bottom of the page\n        float _PageHeight;              // default height for all pages\n        float _PageWidth;               // default width for all pages\n\n        public Pages(Report r)\n        {\n            _report = r;\n            _pages = new List<Page>();  // array of Page objects\n\n            _bm = new Bitmap(10, 10);   // create a small bitmap to base our graphics\n            _g = Graphics.FromImage(_bm);\n        }\n\n        internal Report Report\n        {\n            get { return _report; }\n        }\n\n        public Page this[int index]\n        {\n            get { return _pages[index]; }\n        }\n\n        public int Count\n        {\n            get { return _pages.Count; }\n        }\n\n        public void AddPage(Page p)\n        {\n            _pages.Add(p);\n            _currentPage = p;\n        }\n\n        public void NextOrNew()\n        {\n            if (_currentPage == this.LastPage)\n                AddPage(new Page(PageCount + 1));\n            else\n            {\n                _currentPage = _pages[_currentPage.PageNumber];\n                _currentPage.SetEmpty();\n            }\n            //Allows using PageNumber in report body.\n            //Important! This feature is NOT included in RDL specification!\n            //PageNumber will be wrong if element using it will cause carry to next page after render.\n            Report.PageNumber = _currentPage.PageNumber;\n        }\n\n        /// <summary>\n        /// CleanUp should be called after every render to reduce resource utilization.\n        /// </summary>\n        public void CleanUp()\n        {\n            if (_g != null)\n            {\n                _g.Dispose();\n                _g = null;\n            }\n            if (_bm != null)\n            {\n                _bm.Dispose();\n                _bm = null;\n            }\n        }\n\n        public void SortPageItems()\n        {\n            foreach (Page p in this)\n            {\n                p.SortPageItems();\n            }\n        }\n\n        public float BottomOfPage\n        {\n            get { return _BottomOfPage; }\n            set { _BottomOfPage = value; }\n        }\n\n        public Page CurrentPage\n        {\n            get\n            {\n                if (_currentPage != null)\n                    return _currentPage;\n\n                if (_pages.Count >= 1)\n                {\n                    _currentPage = _pages[0];\n                    return _currentPage;\n                }\n\n                return null;\n            }\n\n            set\n            {\n                _currentPage = value;\n#if DEBUG\n                if (value == null)\n                    return;\n                foreach (Page p in _pages)\n                {\n                    if (p == value)\n                        return;\n                }\n                throw new Exception(Strings.Pages_Error_CurrentPageMustInList);\n#endif\n            }\n        }\n\n        public Page FirstPage\n        {\n            get\n            {\n                if (_pages.Count <= 0)\n                    return null;\n                else\n                    return _pages[0];\n            }\n        }\n\n        public Page LastPage\n        {\n            get\n            {\n                if (_pages.Count <= 0)\n                    return null;\n                else\n                    return _pages[_pages.Count - 1];\n            }\n        }\n\n        public float PageHeight\n        {\n            get { return _PageHeight; }\n            set { _PageHeight = value; }\n        }\n\n        public float PageWidth\n        {\n            get { return _PageWidth; }\n            set { _PageWidth = value; }\n        }\n\n        public void RemoveLastPage()\n        {\n            Page lp = LastPage;\n\n            if (lp == null)             // if no last page nothing to do\n                return;\n\n            _pages.RemoveAt(_pages.Count - 1);  // remove the page\n\n            if (this.CurrentPage == lp) // reset the current if necessary\n            {\n                if (_pages.Count <= 0)\n                    CurrentPage = null;\n                else\n                    CurrentPage = _pages[_pages.Count - 1];\n            }\n\n            return;\n        }\n\n        public Graphics G\n        {\n            get\n            {\n                if (_g == null)\n                {\n                    _bm = new Bitmap(10, 10);   // create a small bitmap to base our graphics\n                    _g = Graphics.FromImage(_bm);\n                }\n                return _g;\n            }\n        }\n\n        public int PageCount\n        {\n            get { return _pages.Count; }\n        }\n\n        #region IEnumerable Members\n\n        public IEnumerator GetEnumerator()      // just loop thru the pages\n        {\n            return _pages.GetEnumerator();\n        }\n\n        public void Dispose()\n        {\n            foreach (var page in _pages)\n            {\n                page.Dispose();\n            }\n            CleanUp();\n            _pages.Clear();\n            _pages = null;\n            _report.Dispose();\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Runtime/ParameterLexer.cs",
    "content": "\nusing System;\nusing System.IO;\nusing System.Collections;\nusing System.Text;\nusing Majorsilence.Reporting.RdlEngine.Resources;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t/// <summary>\n\t/// A simple Lexer that is used to create a list of parameters.\n\t/// </summary>\n\tinternal class ParameterLexer\n\t{\n\t\tprivate TokenList tokens;\n\t\tprivate CharReader reader;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the Lexer class with the specified\n\t\t/// expression syntax to lex.\n\t\t/// </summary>\n\t\t/// <param name=\"expr\">An expression to lex.</param>\n\t\tinternal ParameterLexer(string expr)\n\t\t\t: this(new StringReader(expr))\n\t\t{\n\t\t\t// use this\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the Lexer class with the specified\n\t\t/// TextReader to lex.\n\t\t/// </summary>\n\t\t/// <param name=\"source\">A TextReader to lex.</param>\n\t\tinternal ParameterLexer(TextReader source)\n\t\t{\n\t\t\t// token queue\n\t\t\ttokens = new TokenList();\n\n\t\t\t// read the file contents\n\t\t\treader = new CharReader(source);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Breaks the input stream onto the tokens list and returns an ArrayList of strings.\n\t\t/// </summary>\n\t\t/// <returns>The array of items broken out from the string</returns>\n\t\tinternal ArrayList Lex()\n\t\t{\n\t\t\tToken token = GetNextToken();\n\t\t\twhile(true)\n\t\t\t{\n\t\t\t\tif(token != null)\n\t\t\t\t\ttokens.Add(token);\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\ttokens.Add(new Token(null, reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.EOF));\n                    break;\n\t\t\t\t}\n\n\t\t\t\ttoken = GetNextToken();\n\t\t\t}\n            // now just do a list of strings\n            ArrayList ar = new ArrayList(tokens.Count);\n            foreach (Token t in tokens)\n            {\n                if (t.Type == TokenTypes.QUOTE)\n                    ar.Add(t.Value);\n            }\n            return ar;\n\t\t}\n\n\t\tprivate Token GetNextToken()\n\t\t{\n\t\t\twhile(!reader.EndOfInput())\n\t\t\t{\n\t\t\t\tchar ch = reader.GetNext();\n\n\t\t\t\t// skipping whitespaces\n\t\t\t\tif(Char.IsWhiteSpace(ch))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tswitch(ch)\n\t\t\t\t{\n\t\t\t\t\tcase ',':\n\t\t\t\t\t\treturn new Token(ch.ToString(), reader.Line, reader.Column, reader.Line, reader.Column, TokenTypes.COMMA);\n\t\t\t\t\tcase '\"':\n\t\t\t\t\tcase '\\'':\n\t\t\t\t\t\treturn ReadQuoted(ch);\n\t\t\t\t\tdefault:\n                        return ReadToComma(ch);\n\t\t\t\t} // end of swith\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\t// Reads a decimal number with optional exponentiation \n\t\tprivate Token ReadToComma(char ch)\n\t\t{\n            StringBuilder sb = new StringBuilder();\n            sb.Append(ch);\n\t\t\twhile(!reader.EndOfInput() )\n\t\t\t{\n\t\t\t\tchar cPeek = reader.Peek();\n\t\t\t\tif (cPeek == ',')\n\t\t\t\t\tbreak;\n                cPeek = reader.GetNext();\n                sb.Append(cPeek);\n\t\t\t}\n\n\t\t\treturn new Token(sb.ToString(), TokenTypes.QUOTE);\n\t\t}\n\n\t\t// Quoted string like \" asdf \" or ' asdf '\n\t\tprivate Token ReadQuoted(char ch)\n\t\t{\n\t\t\tchar qChar = ch;\n\t\t\tint startLine = reader.Line;\n\t\t\tint startCol = reader.Column;\n\t\t\tStringBuilder quoted = new StringBuilder();\n\n\t\t\twhile(!reader.EndOfInput())\n\t\t\t{\n\t\t\t\tch = reader.GetNext();\n\t\t\t\tif (ch == '\\\\')\n                {\n                    char pChar = reader.Peek();\n                    if (pChar == qChar)\n                        ch = reader.GetNext();\t\t\t// got one skip escape char\n                    else if (pChar == 'n')\n                    {\n                        ch = '\\n';\n                        reader.GetNext();               // skip the character\n                    }\n                    else if (pChar == 'r')\n                    {\n                        ch = '\\r';\n                        reader.GetNext();               // skip the character\n                    }\n                }\n\t\t\t\telse if (ch == qChar)\n\t\t\t\t\treturn new Token(quoted.ToString(), startLine, startCol, reader.Line, reader.Column, TokenTypes.QUOTE);\n\n\t\t\t\tquoted.Append(ch);\n\t\t\t}\n\t\t\tthrow new ParserException(Strings.Lexer_ErrorP_UnterminatedString);\n\t\t}\n\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Runtime/RdlEngineConfig.cs",
    "content": "using System;\nusing System.Xml;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.Reflection;\nusing System.Data;\nusing System.Data.SqlClient;\nusing System.Data.OleDb;\nusing System.Data.Odbc;\nusing System.IO;\nusing Majorsilence.Reporting.RdlEngine.Resources;\nusing Majorsilence.Reporting.Rdl;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    ///<summary> \n    /// Handle SQL configuration and connections \n    ///</summary> \n    public class RdlEngineConfig\n    {\n        static internal IDictionary SqlEntries = null;\n        // list of entries\n        static internal Dictionary<string, CustomReportItemEntry> CustomReportItemEntries = null;\n        static DateTime _InitFileCreationTime = DateTime.MinValue;\n\n        // Compression entries\n        static CompressionConfig _Compression = null;\n        static string _DirectoryLoadedFrom = null;\n\n        static public string DirectoryLoadedFrom\n        {\n            get\n            {\n                return _DirectoryLoadedFrom;\n            }\n        }\n        // initializes when no init available\n        static public void RdlEngineConfigInit()\n        {\n            string d1, d2;\n            d1 = AppDomain.CurrentDomain.BaseDirectory;\n            d2 = AppDomain.CurrentDomain.RelativeSearchPath;\n            if (d2 != null && d2 != string.Empty)\n                d2 = (d2.Contains(\":\") ? \"\" : AppDomain.CurrentDomain.BaseDirectory) + d2 + Path.DirectorySeparatorChar;\n            RdlEngineConfigInit(d1, d2);\n        }\n\n        // initialize configuration\n        static public void RdlEngineConfigInit(params string[] dirs)\n        {\n            bool bLoaded = false;\n            XmlDocument xDoc = new XmlDocument();\n            xDoc.PreserveWhitespace = false;\n            string file = null;\n            DateTime fileTime = DateTime.MinValue;\n\n            foreach (string dir in dirs)\n            {\n                if (dir == null)\n                    continue;\n\n                file = System.IO.Path.Combine(dir, \"RdlEngineConfig.xml\");\n                 \n                try\n                {\n                    FileInfo fi = new FileInfo(file);\n                    fileTime = fi.CreationTime;\n                    if (_InitFileCreationTime == fileTime && SqlEntries != null)\n                        return;         // we've already inited with this file \n                    xDoc.Load(file);\n                    bLoaded = true;\n                    _DirectoryLoadedFrom = dir;\n                }\n                catch (Exception ex)\n                {   // can't do much about failures; no place to report them \n                    System.Console.WriteLine(\"Error opening RdlEngineConfig.xml: {0}\", ex.Message);\n                }\n                if (bLoaded)\n                    break;\n            }\n            if (!bLoaded)   // we couldn't find the configuration so we'll use internal one \n            {\n                if (SqlEntries != null)         // we don't need to reinit with internal one \n                    return;\n                xDoc.InnerXml = @\"<?xml version=\"\"1.0\"\" encoding=\"\"utf-8\"\"?>\n<config>\n\t<DataSources>\n\t\t<DataSource>\n\t\t\t<DataProvider>SQL</DataProvider>\n\t\t\t<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>Microsoft.Data.SqlClient</DataProvider>\n\t\t\t<CodeModule>Microsoft.Data.SqlClient.dll</CodeModule>\n\t\t\t<ClassName>Microsoft.Data.SqlClient.SqlConnection</ClassName>\n\t\t\t<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>SQLce</DataProvider>\n\t\t\t<CodeModule>C:\\Program Files\\Microsoft SQL Server Compact Edition\\v4.0\\Desktop\\System.Data.SqlServerCe.dll</CodeModule>\n\t\t\t<ClassName>System.Data.SqlServerCe.SqlCeConnection</ClassName>\n\t\t\t<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY TABLE_NAME, TABLE_TYPE</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>ODBC</DataProvider>\n\t\t\t<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t\t<ReplaceParameters>true</ReplaceParameters>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>OLEDB</DataProvider>\n\t\t\t<TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>Oracle</DataProvider>\n\t\t\t<CodeModule>F:\\oracle\\product\\10.2.0\\db_2\\BIN\\Oracle.DataAccess.dll</CodeModule>\n\t\t\t<ClassName>Oracle.DataAccess.Client.OracleConnection</ClassName>\n\t\t\t<TableSelect>select OWNER || '.' || TABLE_NAME from ALL_TABLES WHERE TABLESPACE_NAME NOT IN ('SYSTEM', 'SYSAUX')</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>MySQL.NET</DataProvider>\n\t\t\t<CodeModule>MySql.Data.dll</CodeModule>\n\t\t\t<ClassName>MySql.Data.MySqlClient.MySqlConnection</ClassName>\n\t\t\t<TableSelect>show tables</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t\t<ReplaceParameters>true</ReplaceParameters>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>Firebird.NET</DataProvider>\n\t\t\t<CodeModule>C:\\Program Files\\FirebirdNETProvider1.7\\FirebirdSql.Data.Firebird.dll</CodeModule>\n\t\t\t<ClassName>FirebirdSql.Data.Firebird.FbConnection</ClassName>\n\t\t\t<TableSelect>SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$RELATION_NAME NOT LIKE 'RDB$%' ORDER BY 1</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>Firebird.NET 2.0</DataProvider>\n\t\t\t<CodeModule>FirebirdSql.Data.FirebirdClient.dll</CodeModule>\n\t\t\t<ClassName>FirebirdSql.Data.FirebirdClient.FbConnection</ClassName>\n\t\t\t<TableSelect>SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0 ORDER BY 1</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>SQLite</DataProvider>\n\t\t\t<CodeModule>System.Data.SQLite.dll</CodeModule>\n\t\t\t<ClassName>System.Data.SQLite.SQLiteConnection</ClassName>\n\t\t\t<TableSelect>SELECT name FROM sqlite_master WHERE type = 'table'</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>Microsoft.Data.Sqlite</DataProvider>\n\t\t\t<CodeModule>Microsoft.Data.Sqlite.dll</CodeModule>\n\t\t\t<ClassName>Microsoft.Data.Sqlite.SqliteConnection</ClassName>\n\t\t\t<TableSelect>SELECT name FROM sqlite_master WHERE type = 'table'</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>iAnywhere.NET</DataProvider>\n\t\t\t<CodeModule>F:\\Sybase\\SQL Anywhere Studio 9\\win32\\iAnywhere.Data.AsaClient.dll</CodeModule>\n\t\t\t<ClassName>iAnywhere.Data.AsaClient.AsaConnection</ClassName>\n\t\t\t<TableSelect>\n\t\t\t\tselect table_name from systable\n\t\t\t\twhere table_type = 'BASE' and table_name not like 'SYS%'\n\t\t\t\tand table_name not like 'ix_%'\n\t\t\t\tand table_name not like 'ml_%'\n\t\t\t\tand table_name not like 'ul_%'\n\t\t\t\tand table_name not like 'rl_%'\n\t\t\t\tand table_name not like 'rs_%'\n\t\t\t\tand table_name not like 'migrate_%'\n\t\t\t\tand table_name not like 'spt_%'\n\t\t\t\tand table_name not like 'jdbc_%'\n\t\t\t\tand table_name not in ('DUMMY', 'RowGenerator', 'EXCLUDEOBJECT')\n\t\t\t</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>XML</DataProvider>\n\t\t\t<CodeModule>Majorsilence.Reporting.DataProviders.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Data.XmlConnection</ClassName>\n\t\t\t<TableSelect />\n\t\t\t<Interface>File</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>WebService</DataProvider>\n\t\t\t<CodeModule>Majorsilence.Reporting.DataProviders.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Data.WebServiceConnection</ClassName>\n\t\t\t<TableSelect />\n\t\t\t<Interface>WebService</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>WebLog</DataProvider>\n\t\t\t<CodeModule>Majorsilence.Reporting.DataProviders.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Data.LogConnection</ClassName>\n\t\t\t<TableSelect />\n\t\t\t<Interface>File</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>Text</DataProvider>\n\t\t\t<CodeModule>Majorsilence.Reporting.DataProviders.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Data.TxtConnection</ClassName>\n\t\t\t<TableSelect />\n\t\t\t<Interface>File</Interface>\n\t\t</DataSource>\n        <DataSource>\n\t\t\t<DataProvider>Json</DataProvider>\n\t\t\t<CodeModule>Majorsilence.Reporting.DataProviders.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Data.JsonConnection</ClassName>\n\t\t\t<TableSelect />\n\t\t\t<Interface>File</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>iTunes</DataProvider>\n\t\t\t<CodeModule>Majorsilence.Reporting.DataProviders.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Data.iTunesConnection</ClassName>\n\t\t\t<TableSelect />\n\t\t\t<Interface>File</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>FileDirectory</DataProvider>\n\t\t\t<CodeModule>Majorsilence.Reporting.DataProviders.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Data.FileDirConnection</ClassName>\n\t\t\t<TableSelect />\n\t\t\t<Interface>File</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>OracleSp</DataProvider>\n\t\t\t<CodeModule>OracleSp.dll</CodeModule>\n\t\t\t<ClassName>fyiReporting.OracleSp.OracleSpConnection</ClassName>\n\t\t\t<TableSelect>select OWNER || '.' || TABLE_NAME from ALL_TABLES WHERE TABLESPACE_NAME NOT IN ('SYSTEM', 'SYSAUX')</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>PostgreSQL</DataProvider>\n\t\t\t<CodeModule>Npgsql.dll</CodeModule>\n\t\t\t<ClassName>Npgsql.NpgsqlConnection</ClassName>\n\t\t\t<TableSelect>SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE 'pg_%' ORDER BY 1</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\t\t<DataSource>\n\t\t\t<DataProvider>PostgreSQL_Devart</DataProvider>\n\t\t\t<CodeModule>Devart.Data.PostgreSql.dll</CodeModule>\n\t\t\t<ClassName>Devart.Data.PostgreSql.PgSqlConnection</ClassName>\n\t\t\t<TableSelect>SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE 'pg_%' ORDER BY 1</TableSelect>\n\t\t\t<Interface>SQL</Interface>\n\t\t</DataSource>\n\n\t</DataSources>\n\t<Compression>\n\t\t<CodeModule>ICSharpCode.SharpZipLib.dll</CodeModule>\n\t\t<ClassName>ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream</ClassName>\n\t\t<Finish>Finish</Finish>\n\t\t<Enable>true</Enable>\n\t</Compression>\n\t<CustomReportItems>\n\t\t<CustomReportItem>\n\t\t\t<Type>BarCode EAN-13</Type>\n\t\t\t<CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Cri.BarCodeEAN13</ClassName>\n\t\t</CustomReportItem>\n\t\t<CustomReportItem>\n\t\t\t<Type>BarCode Bookland</Type>\n\t\t\t<CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Cri.BarCodeBookland</ClassName>\n\t\t</CustomReportItem>\n\t\t<CustomReportItem>\n\t\t\t<Type>QR Code</Type>\n\t\t\t<CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Cri.QrCode</ClassName>\n\t\t</CustomReportItem>\n        <CustomReportItem>\n            <Type>QRCode</Type>\n            <CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n            <ClassName>Majorsilence.Reporting.Cri.QrCode</ClassName>\n        </CustomReportItem>\n\t\t<CustomReportItem>\n\t\t\t<Type>ITF-14</Type>\n\t\t\t<CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Cri.BarCodeITF14</ClassName>\n\t\t</CustomReportItem>\n\t\t<CustomReportItem>\n\t\t\t<Type>AztecCode</Type>\n\t\t\t<CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Cri.AztecCode</ClassName>\n\t\t</CustomReportItem>\n\t\t<CustomReportItem>\n\t\t\t<Type>BarCode39</Type>\n\t\t\t<CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Cri.BarCode39</ClassName>\n\t\t</CustomReportItem>\n\t\t<CustomReportItem>\n\t\t\t<Type>BarCode128</Type>\n\t\t\t<CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Cri.BarCode128</ClassName>\n\t\t</CustomReportItem>\n\t\t<CustomReportItem>\n\t\t\t<Type>BarCodeEAN8</Type>\n\t\t\t<CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n\t\t\t<ClassName>Majorsilence.Reporting.Cri.BarCodeEAN8</ClassName>\n\t\t</CustomReportItem>\n        <CustomReportItem>\n            <Type>Pdf417</Type>\n            <CodeModule>Majorsilence.Reporting.RdlCri.dll</CodeModule>\n            <ClassName>Majorsilence.Reporting.Cri.Pdf417Barcode</ClassName>\n        </CustomReportItem>\n\t</CustomReportItems>\n</config>\";\n            }\n            XmlNode xNode;\n            xNode = xDoc.SelectSingleNode(\"//config\");\n             \n            IDictionary dsDir = new ListDictionary();\n            Dictionary<string, CustomReportItemEntry> crieDir =\n                new Dictionary<string, CustomReportItemEntry>(StringComparer.OrdinalIgnoreCase);   // list of entries \n\n            // Loop thru all the child nodes \n            foreach (XmlNode xNodeLoop in xNode.ChildNodes)\n            {\n                if (xNodeLoop.NodeType != XmlNodeType.Element)\n                    continue;\n                switch (xNodeLoop.Name)\n                {\n                    case \"DataSources\":\n                        GetDataSources(dsDir, xNodeLoop);\n                        break;\n                    case \"Compression\":\n                        GetCompression(xNodeLoop);\n                        break;\n                    case \"CustomReportItems\":\n                        GetCustomReportItems(crieDir, xNodeLoop);\n                        break;\n                    default:\n                        break;\n                }\n            }\n\n            SqlEntries = dsDir;\n            CustomReportItemEntries = crieDir;\n            _InitFileCreationTime = fileTime;           // save initialization time \n\n            return;\n        }\n\n        internal static CompressionConfig GetCompression()\n        {\n            if (SqlEntries == null)\n                RdlEngineConfigInit();      // init if necessary \n\n            return _Compression;\n        }\n\n        static void GetCompression(XmlNode xNode)\n        {\n            // loop thru looking to process all the datasource elements \n            string cm = null;\n            string cn = null;\n            string fn = null;\n            bool bEnable = true;\n            foreach (XmlNode xNodeLoop in xNode.ChildNodes)\n            {\n\n                if (xNodeLoop.NodeType != XmlNodeType.Element)\n                    continue;\n                switch (xNodeLoop.Name)\n                {\n                    case \"CodeModule\":\n                        if (xNodeLoop.InnerText.Length > 0)\n                            cm = xNodeLoop.InnerText;\n                        break;\n                    case \"ClassName\":\n                        if (xNodeLoop.InnerText.Length > 0)\n                            cn = xNodeLoop.InnerText;\n                        break;\n                    case \"Finish\":\n                        if (xNodeLoop.InnerText.Length > 0)\n                            fn = xNodeLoop.InnerText;\n                        break;\n                    case \"Enable\":\n                        if (xNodeLoop.InnerText.ToLower() == \"false\")\n                            bEnable = false;\n                        break;\n                }\n\n            }\n            if (bEnable)\n                _Compression = new CompressionConfig(cm, cn, fn);\n            else\n                _Compression = null;\n        }\n\n        static void GetDataSources(IDictionary dsDir, XmlNode xNode)\n        {\n            // loop thru looking to process all the datasource elements \n            foreach (XmlNode xNodeLoop in xNode.ChildNodes)\n            {\n                if (xNodeLoop.NodeType != XmlNodeType.Element)\n                    continue;\n                if (xNodeLoop.Name != \"DataSource\")\n                    continue;\n                GetDataSource(dsDir, xNodeLoop);\n            }\n        }\n\n        static void GetDataSource(IDictionary dsDir, XmlNode xNode)\n        {\n            string provider = null;\n            string codemodule = null;\n            string cname = null;\n            string inter = \"SQL\";\n            string tselect = null;\n            bool replaceparameters = false;\n            foreach (XmlNode xNodeLoop in xNode.ChildNodes)\n            {\n                if (xNodeLoop.NodeType != XmlNodeType.Element)\n                    continue;\n                switch (xNodeLoop.Name)\n                {\n                    case \"DataProvider\":\n                        provider = xNodeLoop.InnerText;\n                        break;\n                    case \"CodeModule\":\n                        codemodule = xNodeLoop.InnerText;\n                        break;\n                    case \"Interface\":\n                        inter = xNodeLoop.InnerText;\n                        break;\n                    case \"ClassName\":\n                        cname = xNodeLoop.InnerText;\n                        break;\n                    case \"TableSelect\":\n                        tselect = xNodeLoop.InnerText;\n                        break;\n                    case \"ReplaceParameters\":\n                        if (xNodeLoop.InnerText.ToLower() == \"true\")\n                            replaceparameters = true;\n                        break;\n                    default:\n                        break;\n                }\n            }\n            if (provider == null)\n                return;         // nothing to do if no provider specified \n\n            SqlConfigEntry sce;\n            try\n            {   // load the module early; saves problems with concurrency later \n                string msg = null;\n                Assembly la = null;\n                if (codemodule != null && cname != null)\n                {\n\n                    // When running report server and RdlEngineConfig is configured for local directy\n                    // The file cannot be found without adding the current directoyr\n                    if (System.IO.File.Exists(codemodule) == false && System.IO.Path.GetFileName(codemodule) == codemodule)\n                    {\n                        \n                        if (AppDomain.CurrentDomain.RelativeSearchPath != null)\n                        {\n                            codemodule = System.IO.Path.Combine(AppDomain.CurrentDomain.RelativeSearchPath, codemodule);\n                        }\n                        else if (AppDomain.CurrentDomain.BaseDirectory != null)\n                        {\n                            codemodule = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, codemodule);\n                        }\n                    }\n\n                    if (System.IO.File.Exists(codemodule) == false)\n                    {\n                        sce = new SqlConfigEntry(provider, codemodule, cname, null, tselect, string.Format(Strings.RdlEngineConfig_Error_CashModuleNotFound, codemodule));\n                        dsDir.Add(provider, sce);\n                        return;\n                    }\n\n                    // check to see if the DLL has been previously loaded \n                    //   many of the DataProvider done by fyiReporting are in a single code module \n                    foreach (SqlConfigEntry sc in dsDir.Values)\n                    {\n                        if (sc.FileName == codemodule &&\n                            sc.CodeModule != null)\n                        {\n                            la = sc.CodeModule;\n                            break;\n                        }\n                    }\n                    if (la == null)\n                    {\n                        la = XmlUtil.AssemblyLoadFrom(codemodule);\n                    }\n                    if (la == null)\n                    {\n                        msg = string.Format(Strings.RdlEngineConfig_Error_CashModuleNotFound, codemodule);\n                    }\n                }\n                sce = new SqlConfigEntry(provider, codemodule, cname, la, tselect, msg);\n                dsDir.Add(provider, sce);\n            }\n            catch (Exception e)\n            {      // keep exception;  if this DataProvided is ever useed we will see the message \n                sce = new SqlConfigEntry(provider, codemodule, cname, null, tselect, e.Message);\n                dsDir.Add(provider, sce);\n            }\n            sce.ReplaceParameters = replaceparameters;\n        }\n\n        public static IDbConnection GetConnection(string provider, string cstring)\n        {\n            IDbConnection cn = null;\n            switch (provider.ToLower())\n            {\n                case \"odbc\":\n                    cn = new OdbcConnection(cstring);\n                    break;\n                case \"oledb\":\n                    cn = new OleDbConnection(cstring);\n                    break;\n                case \"filedirectory\":\n                    cn = new Majorsilence.Reporting.Data.FileDirConnection(cstring);\n                    break;\n                case \"xml\":\n                    cn = new Majorsilence.Reporting.Data.XmlConnection(cstring);\n                    break;\n                case \"webservice\":\n                    cn = new Majorsilence.Reporting.Data.WebServiceConnection(cstring);\n                    break;\n                case \"weblog\":\n                    cn = new Majorsilence.Reporting.Data.LogConnection(cstring);\n                    break;\n                case \"text\":\n                    cn = new Majorsilence.Reporting.Data.TxtConnection(cstring);\n                    break;\n                case \"json\":\n                    cn = new Majorsilence.Reporting.Data.JsonConnection(cstring);\n                    break;\n                case \"itunes\":\n                    cn = new Majorsilence.Reporting.Data.iTunesConnection(cstring);\n                    break;\n                default:\n                    if (SqlEntries == null)\n                    {         // if never initialized; we should init \n                        RdlEngineConfigInit();\n                    }\n\n                    SqlConfigEntry sce = SqlEntries[provider] as SqlConfigEntry;\n                    if (sce == null || sce.CodeModule == null)\n                    {\n                        if (sce != null && sce.ErrorMsg != null)\n                        {   // error during initialization?? \n                            throw new Exception(sce.ErrorMsg);\n                        }\n                        break;\n                    }\n\n                    object[] args = new object[] { cstring };\n                    Assembly asm = sce.CodeModule;\n                    object o = asm.CreateInstance(sce.ClassName, false,\n                                   BindingFlags.CreateInstance, null, args, null, null);\n                    if (o == null)\n                        throw new Exception(string.Format(Strings.RdlEngineConfig_Error_UnableCreateInstance, sce.ClassName, provider));\n                    cn = o as IDbConnection ?? throw new InvalidCastException($\"Unable to cast instance of {sce.ClassName} to IDbConnection.\");\n                    break;\n            }\n\n            return cn;\n        }\n\n        static public string GetTableSelect(string provider)\n        {\n            return GetTableSelect(provider, null);\n        }\n\n        static public bool DoParameterReplacement(string provider, IDbConnection cn)\n        {\n            if (SqlEntries == null)\n                RdlEngineConfigInit();\n            SqlConfigEntry sce = SqlEntries[provider] as SqlConfigEntry;\n            return sce == null ? false : sce.ReplaceParameters;\n        }\n\n        static public string GetTableSelect(string provider, IDbConnection cn)\n        {\n            if (SqlEntries == null)\n                RdlEngineConfigInit();\n            SqlConfigEntry sce = SqlEntries[provider] as SqlConfigEntry;\n            if (sce == null)\n            {\n                if (cn != null)\n                {\n                    OdbcConnection oc = cn as OdbcConnection;\n                    if (oc != null && oc.Driver.ToLower().IndexOf(\"my\") >= 0)   // not a good way but ... \n                        return \"show tables\";               // mysql syntax is non-standard \n                }\n                return \"SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1\";\n            }\n            if (cn != null)\n            {\n                OdbcConnection oc = cn as OdbcConnection;\n                if (oc != null && oc.Driver.ToLower().IndexOf(\"my\") >= 0)   // not a good way but ... \n                    return \"show tables\";               // mysql syntax is non-standard \n            }\n            return sce.TableSelect;\n        }\n\n        static public string[] GetProviders()\n        {\n            if (SqlEntries == null)\n                RdlEngineConfigInit();\n            if (SqlEntries.Count == 0)\n                return null;\n            string[] items = new string[SqlEntries.Count];\n            int i = 0;\n            foreach (SqlConfigEntry sce in SqlEntries.Values)\n            {\n                items[i++] = sce.Provider;\n            }\n            return items;\n        }\n\n        static public string[] GetCustomReportTypes()\n        {\n            if (CustomReportItemEntries == null)\n                RdlEngineConfigInit();\n            if (CustomReportItemEntries.Count == 0)\n                return null;\n            string[] items = new string[CustomReportItemEntries.Count];\n            int i = 0;\n            foreach (CustomReportItemEntry crie in CustomReportItemEntries.Values)\n            {\n                items[i++] = crie.ItemName;\n            }\n            return items;\n        }\n\n        static void GetCustomReportItems(Dictionary<string, CustomReportItemEntry> crieDir, XmlNode xNode)\n        {\n            // loop thru looking to process all the datasource elements \n            foreach (XmlNode xNodeLoop in xNode.ChildNodes)\n            {\n                if (xNodeLoop.NodeType != XmlNodeType.Element)\n                    continue;\n                if (xNodeLoop.Name != \"CustomReportItem\")\n                    continue;\n                GetCustomReportItem(crieDir, xNodeLoop);\n            }\n        }\n\n        static void GetCustomReportItem(Dictionary<string, CustomReportItemEntry> crieDir, XmlNode xNode)\n        {\n            string friendlyTypeName = null;\n            string codemodule = null;\n            string classname = null;\n            foreach (XmlNode xNodeLoop in xNode.ChildNodes)\n            {\n                if (xNodeLoop.NodeType != XmlNodeType.Element)\n                    continue;\n                switch (xNodeLoop.Name)\n                {\n                    case \"Type\":\n                        friendlyTypeName = xNodeLoop.InnerText;\n                        break;\n                    case \"CodeModule\":\n                        codemodule = xNodeLoop.InnerText;\n                        break;\n                    case \"ClassName\":\n                        classname = xNodeLoop.InnerText;\n                        break;\n                    default:\n                        break;\n                }\n            }\n            if (friendlyTypeName == null)\n                return;         // nothing to do if no provider specified \n\n            CustomReportItemEntry crie;\n            try\n            {   // load the module early; saves problems with concurrency later \n                string msg = null;\n                Type dotNetType = null;\n                Assembly la = null;\n                if (codemodule != null && classname != null)\n                {\n                    // Check to see if previously loaded.  Many CustomReportItems share same CodeModule. \n                    Assembly[] allLoadedAss = AppDomain.CurrentDomain.GetAssemblies();\n                    foreach (Assembly ass in allLoadedAss)\n                    {\n                        var type = ass.GetType();\n                        if (type.GetMethod(\"Location\") != null)\n                        {\n                            if (ass.Location.Equals(codemodule, StringComparison.CurrentCultureIgnoreCase))\n                            {\n                                la = ass;\n                                break;\n                            }\n                        }\n                    }\n\n                    if (la == null)     // not previously loaded? \n                        la = XmlUtil.AssemblyLoadFrom(codemodule);\n                    if (la == null)\n                        msg = string.Format(Strings.RdlEngineConfig_Error_CodeModuleNotLoaded, codemodule);\n                    else\n                        dotNetType = la.GetType(classname);\n                }\n\n                crie = new CustomReportItemEntry(friendlyTypeName, dotNetType, msg);\n                crieDir.Add(friendlyTypeName, crie);\n            }\n            catch (Exception e)\n            {      // keep exception;  if this CustomReportItem is ever used we will see the message \n                crie = new CustomReportItemEntry(friendlyTypeName, null, e.Message);\n                crieDir.Add(friendlyTypeName, crie);\n            }\n        }\n\n        public static ICustomReportItem CreateCustomReportItem(string friendlyTypeName)\n        {\n            CustomReportItemEntry crie = null;\n            if (!CustomReportItemEntries.TryGetValue(friendlyTypeName, out crie))\n                throw new Exception(string.Format(Strings.RdlEngineConfig_Error_NotKnownCustomReportItemType, friendlyTypeName));\n            if (crie.Type == null)\n                throw new Exception(crie.ErrorMsg ??\n                    string.Format(Strings.RdlEngineConfig_Error_NotKnownCustomReportItemType, friendlyTypeName));\n\n            var item = (ICustomReportItem)Activator.CreateInstance(crie.Type);\n            return item;\n        }\n\n        public static void DeclareNewCustomReportItem(string itemName, Type type)\n        {\n            if (!typeof(ICustomReportItem).IsAssignableFrom(type))\n                throw new ArgumentException(\"The type does not implement the ICustomReportItem interface: \" +\n                    type == null ? \"null\" : type.Name);\n\n            if (CustomReportItemEntries == null)\n                RdlEngineConfigInit();\n\n            // Let's manage doublons, if any. \n            CustomReportItemEntry item;\n            if (!CustomReportItemEntries.TryGetValue(itemName, out item))\n                CustomReportItemEntries[itemName] = new CustomReportItemEntry(itemName, type, null);\n            else if (!item.Type.Equals(type))\n                throw new ArgumentException(\"A different type of CustomReportItem with the same has already been declared.\");\n        }\n    }\n\n    internal class CompressionConfig\n    {\n        int _UseCompression = -1;\n        Assembly _Assembly = null;\n        string _CodeModule;\n        string _ClassName;\n        string _Finish;\n        MethodInfo _FinishMethodInfo;\n        //   if there is a finish method\n        string _ErrorMsg;\n        // error encountered loading compression\n\n        internal CompressionConfig(string cm, string cn, string fn)\n        {\n            _CodeModule = cm;\n            _ClassName = cn;\n            _Finish = fn;\n            if (cm == null || cn == null || fn == null)\n                _UseCompression = 2;\n        }\n\n        internal bool CanCompress\n        {\n            get\n            {\n                if (_UseCompression >= 1)   // we've already successfully inited \n                    return true;\n                if (_UseCompression == 0)   // we've tried to init and failed \n                    return false;\n                Init();                  // initialize compression \n                return _UseCompression == 1;   // and return the status \n            }\n        }\n\n        internal void CallStreamFinish(Stream strm)\n        {\n            if (_UseCompression == 2)\n            {\n                strm.Close();\n                return;\n            }\n\n            if (_FinishMethodInfo == null)\n                return;\n\n            object returnVal = _FinishMethodInfo.Invoke(strm, null);\n\n            return;\n        }\n\n        internal byte[] GetArray(MemoryStream ms)\n        {\n            byte[] cmpData = ms.ToArray();\n\n            if (_UseCompression == 1)\n                return cmpData;\n\n            // we're using the MS routines;  need to prefix by 2 bytes; \n            //  see http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=97064 \n            //  see http://www.faqs.org/rfcs/rfc1950.html \n            //   bit of magic: \n            // DeflateStream follows RFC1951, so the info I have is based on what I've read about RFC1950. \n            //First byte: \n            //Bits 0-3: those will always be 8 for the Deflate compression method. \n            //Bits 4-7: Our window size is 8K so I think this should be 5. The compression info value is \n            // log base 2 of the window size minus 8 => 8K = 2^13, so 13-8. If you're having problems with \n            // this, note that I've seen some comments indicating this is interpreted as max window size, \n            // so you might also try setting this to 7, corresponding to a window size of 32K. \n            //The next byte consists of some checksums and flags which may be optional? \n\n            byte[] wa = new byte[cmpData.Length + 2 + 4];   // length = data length + prefix length + checksum length \n            // These values don't actally work for all since some compressions go wrong??? \n            //   (may have been corrected: kas 9/16/08 but didn't do exhaustive tests since ziplib is better in any case) \n            wa[0] = 0x58;   // 78 \n            wa[1] = 0x85;   // 9c \n            cmpData.CopyTo(wa, 2);\n\n            uint c = adler(cmpData);       // this is the checksum \n            wa[2 + cmpData.Length + 0] = (byte)(c >> 24);\n            wa[2 + cmpData.Length + 1] = (byte)(c >> 16);\n            wa[2 + cmpData.Length + 2] = (byte)(c >> 8);\n            wa[2 + cmpData.Length + 3] = (byte)(c);\n\n            return wa;\n        }\n\n        /// <summary> \n        /// Adler 32 checksum routine comes from http://en.wikipedia.org/wiki/Adler-32 \n        /// </summary> \n        /// <param name=\"cmpData\"></param> \n        /// <returns></returns> \n        private uint adler(byte[] cmpData)\n        {\n            const int MOD_ADLER = 65521;\n            int len = cmpData.Length;\n            uint a = 1, b = 0;\n            int i = 0;\n            while (len > 0)\n            {\n                int tlen = len > 5552 ? 5552 : len;\n                len -= tlen;\n                do\n                {\n                    a += cmpData[i++];\n                    b += a;\n                } while (--tlen > 0);\n\n                a %= MOD_ADLER;\n                b %= MOD_ADLER;\n            }\n\n            return (b << 16) | a;\n        }\n\n        internal Stream GetStream(Stream str)\n        {\n            if (_UseCompression == 2)\n            {   // use the built-in compression .NET 2 provides \n                //System.IO.Compression.GZipStream cs = \n                //    new System.IO.Compression.GZipStream(str, System.IO.Compression.CompressionMode.Compress); \n                System.IO.Compression.DeflateStream cs =\n                    new System.IO.Compression.DeflateStream(str, System.IO.Compression.CompressionMode.Compress);\n                return cs;\n            }\n\n            if (_UseCompression == 0)\n                return null;\n            if (_UseCompression == -1)   // make sure we're init'ed \n            {\n                Init();\n                if (_UseCompression != 1)\n                    return null;\n            }\n\n            try\n            {\n                object[] args = new object[] { str };\n\n                Stream so = _Assembly.CreateInstance(_ClassName, false,\n                                BindingFlags.CreateInstance, null, args, null, null) as Stream;\n                return so;\n            }\n            catch\n            {\n                return null;\n            }\n        }\n\n        internal string ErrorMsg\n        {\n            get { return _ErrorMsg; }\n        }\n\n        void Init()\n        {\n            lock (this)\n            {\n                if (_UseCompression != -1)\n                    return;\n                _UseCompression = 0;      // assume failure; and use the builtin MS routines \n\n                try\n                {\n                    // Load the assembly \n                    _Assembly = XmlUtil.AssemblyLoadFrom(_CodeModule);\n\n                    // Load up a test stream to make sure it will work \n                    object[] args = new object[] { new MemoryStream() };\n\n                    Stream so = _Assembly.CreateInstance(_ClassName, false,\n                                    BindingFlags.CreateInstance, null, args, null, null) as Stream;\n\n                    if (so != null)\n                    {      // we've successfully inited \n                        so.Close();\n                        _UseCompression = 1;\n                    }\n                    else\n                        _Assembly = null;\n\n                    if (_Finish != null)\n                    {\n                        Type theClassType = so.GetType();\n                        this._FinishMethodInfo = theClassType.GetMethod(_Finish);\n                    }\n                }\n                catch (Exception e)\n                {\n                    _ErrorMsg = e.InnerException == null ? e.Message : e.InnerException.Message;\n                    _UseCompression = 0;      // failure; force use the builtin MS routines \n                }\n\n            }\n        }\n    }\n\n    internal class SqlConfigEntry\n    {\n        internal string Provider;\n        internal Assembly CodeModule;\n        internal string ClassName;\n        internal string TableSelect;\n        internal string ErrorMsg;\n        internal bool ReplaceParameters;\n        internal string FileName;\n\n        internal SqlConfigEntry(string provider, string file, string cname, Assembly codemodule, string tselect, string msg)\n        {\n            Provider = provider;\n            CodeModule = codemodule;\n            ClassName = cname;\n            TableSelect = tselect;\n            ErrorMsg = msg;\n            ReplaceParameters = false;\n            FileName = file;\n        }\n    }\n\n    internal class CustomReportItemEntry\n    {\n        internal string ItemName;\n        internal Type Type;\n        internal string ErrorMsg;\n\n        internal CustomReportItemEntry(string itemName, Type type, string msg)\n        {\n            Type = type;\n            ItemName = itemName;\n            ErrorMsg = msg;\n        }\n    }\n\n}\n"
  },
  {
    "path": "RdlEngine/Runtime/Report.cs",
    "content": "using System;\nusing System.Xml;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Globalization;\nusing System.Data;\nusing System.Data.SqlClient;\nusing Majorsilence.Reporting.Rdl;\nusing System.Threading.Tasks;\nusing System.Collections.Concurrent;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Main Report definition; this is the top of the tree that contains the complete\n\t/// definition of a instance of a report.\n\t///</summary>\n\tpublic class Report : IDisposable\n\t{\n        // private definitions\n\t\tReportDefn _Report;\n\t\tDataSources _DataSources;\n\t\tDataSets _DataSets;\n\t\tint _RuntimeName=0;\t\t// used for the generation of unique runtime names\n\t\tIDictionary _LURuntimeName;\t\t// Runtime names\n\t\tICollection _UserParameters;\t// User parameters\n\t\tinternal ReportLog rl;\t// report log\n\t\tRCache _Cache;\n\n\t\t// Some report runtime variables\n\t\tprivate string _Folder;\t\t\t// folder name\n\t\tprivate string _ReportName;\t\t// report name\n\t\tprivate string _CSS;\t\t\t// after rendering ASPHTML; this is separate\n\t\tprivate string _JavaScript;\t\t// after rendering ASPHTML; this is separate\n\t\tprivate object _CodeInstance;\t// Instance of the class generated for the Code element\n\t\tprivate Page _CurrentPage;\t\t// needed for page header/footer references\n\t\tprivate string _UserID;\t\t\t// UserID of client executing the report\n\t\tprivate string _ClientLanguage;\t// Language code of the client executing the report.\n\t\tprivate DataSourcesDefn _ParentConnections;\t// When running subreport with merge transactions this is parent report connections\n\n\t\tinternal int PageNumber=1;\t\t\t// current page number\n\t\tinternal int TotalPages=1;\t\t\t// total number of pages in report\n\t\tinternal DateTime ExecutionTime;\t// start time of report execution\n        \n        private bool _itextpdf = true;\n        /// <summary> \n        ///  True: Renderpdf will use Add elements by itextsharp code; \n        ///  False : Render pdf by the old way if my code gets error or don't need font embedded. \n        /// </summary> \n        public bool ItextPDF\n        {\n            get { return _itextpdf; }\n            set { _itextpdf = value; }\n        }\n\n\t\t/// <summary>\n\t\t/// Construct a runtime Report object using the compiled report definition.\n\t\t/// </summary>\n\t\t/// <param name=\"r\"></param>\n\t\tpublic Report(ReportDefn r)\n\t\t{\n\t\t\t_Report = r;\n\t\t\t_Cache = new RCache();\n\t\t\trl = new ReportLog(r.rl);\n\t\t\t_ReportName = r.Name;\n\t\t\t_UserParameters = null;\n\t\t\t_LURuntimeName = new ListDictionary();\t// shouldn't be very many of these\n\t\t\tif (r.Code != null)\n\t\t\t\t_CodeInstance = r.Code.Load(this);\n\t\t\tif (r.Classes != null)\n\t\t\t\tr.Classes.Load(this);\n\t\t}\n\n        // Event for Subreport data retrieval\n        /// <summary>\n        /// Event invoked just prior to obtaining data for the subreport.  Setting DataSet \n        /// and DataConnection information during this event affects only this instance\n        /// of the Subreport.\n        /// </summary>\n        public event EventHandler<SubreportDataRetrievalEventArgs> SubreportDataRetrieval;\n        protected virtual void OnSubreportDataRetrieval(SubreportDataRetrievalEventArgs e)\n        {\n            if (SubreportDataRetrieval != null)\n                SubreportDataRetrieval(this, e);\n        }\n        internal void SubreportDataRetrievalTriggerEvent()\n        {\n            if (SubreportDataRetrieval != null)\n            {\n                OnSubreportDataRetrieval(new SubreportDataRetrievalEventArgs(this));\n            }\n\n        }\n        internal bool IsSubreportDataRetrievalDefined\n        {\n            get { return SubreportDataRetrieval != null; }\n        }\n\n\t\tinternal Page CurrentPage\n\t\t{\n\t\t\tget {return _CurrentPage;}\n\t\t\tset {_CurrentPage = value;}\n\t\t}\n\n\t\tinternal Rows GetPageExpressionRows(string exprname)\n\t\t{\n\t\t\tif (_CurrentPage == null)\n\t\t\t\treturn null;\n\n\t\t\treturn _CurrentPage.GetPageExpressionRows(exprname);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Read all the DataSets in the report\n\t\t/// </summary>\n\t\t/// <param name=\"parms\"></param>\n\t\tpublic async Task<bool> RunGetData(IDictionary parms)\n\t\t{\n\t\t\tExecutionTime = DateTime.Now;\n\t\t\tbool bRows = await _Report.RunGetData(this, parms);\n\t\t\treturn bRows;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Renders the report using the requested presentation type.\n\t\t/// </summary>\n\t\t/// <param name=\"sg\">IStreamGen for generating result stream</param>\n\t\t/// <param name=\"type\">Presentation type: HTML, XML, PDF, or ASP compatible HTML</param>\n\t\tpublic async Task RunRender(IStreamGen sg, OutputPresentationType type)\n\t\t{\n            await RunRender(sg, type, \"\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Renders the report using the requested presentation type.\n\t\t/// </summary>\n\t\t/// <param name=\"sg\">IStreamGen for generating result stream</param>\n\t\t/// <param name=\"type\">Presentation type: HTML, XML, PDF, MHT, or ASP compatible HTML</param>\n\t\t/// <param name=\"prefix\">For HTML puts prefix allowing unique name generation</param>\n\t\tpublic async Task RunRender(IStreamGen sg, OutputPresentationType type, string prefix)\n\t\t{\n\t\t\tif (sg == null)\n\t\t\t\tthrow new ArgumentException(\"IStreamGen argument cannot be null.\", \"sg\");\n\t\t\tRenderHtml rh=null;\n\n\t\t\tPageNumber = 1;\t\t// reset page numbers\n\t\t\tTotalPages = 1;\n\t\t\tIPresent ip;\n\t\t\tMemoryStreamGen msg = null;\n\t\t\tswitch (type)\n\t\t\t{\n                case OutputPresentationType.PDF:\n                case OutputPresentationType.RenderPdf_iTextSharp:\n                case OutputPresentationType.PDFOldStyle:\n                    ip =new RenderPdf_iTextSharp(this, sg);\n                    await _Report.Run(ip);\n                    break;          \n#if !DRAWINGCOMPAT\n\t\t\t\tcase OutputPresentationType.TIF:\n                    ip = new RenderTif(this, sg);\n                    await _Report.Run(ip);\n                    break;\n                case OutputPresentationType.TIFBW:\n                    RenderTif rtif = new RenderTif(this, sg);\n                    rtif.RenderColor = false;\n                    ip = rtif;\n                    await _Report.Run(ip);\n                    break;\n#endif\n                case OutputPresentationType.XML:\n\t\t\t\t\tif (_Report.DataTransform != null && _Report.DataTransform.Length > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tmsg = new MemoryStreamGen();\n\t\t\t\t\t\tip = new RenderXml(this, msg);\n                        await _Report.Run(ip);\n\t\t\t\t\t\tRunRenderXmlTransform(sg, msg);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tip = new RenderXml(this, sg);\n                        await _Report.Run(ip);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase OutputPresentationType.MHTML:\n                    await this.RunRenderMht(sg);\n\t\t\t\t\tbreak;\n                case OutputPresentationType.CSV:\n                    ip = new RenderCsv(this, sg);\n                    await _Report.Run(ip);\n                    break;\n                case OutputPresentationType.RTF:\n                    ip = new RenderRtf(this, sg);\n                    await _Report.Run(ip);\n                    break;\n\t\t\t\tcase OutputPresentationType.Excel2003:\n                case OutputPresentationType.Excel2007:\n\t\t\t\t\tip = new RenderExcel2007(this, sg);\n                    await _Report.Run(ip);\n\t\t\t\t\tbreak;\n                case OutputPresentationType.ExcelTableOnly:\n                case OutputPresentationType.Excel2007DataOnly:\n                    ip = new RenderExcel2007DataOnly(this, sg);\n                    await _Report.Run(ip);\n                    break;\n                case OutputPresentationType.ASPHTML:\n\t\t\t\tcase OutputPresentationType.HTML:\n\t\t\t\tdefault:\n\t\t\t\t\tip = rh = new RenderHtml(this, sg);\n\t\t\t\t\trh.Asp = (type == OutputPresentationType.ASPHTML);\n\t\t\t\t\trh.Prefix = prefix;\n                    await _Report.Run(ip);\n\t\t\t\t\t// Retain the CSS and JavaScript\n\t\t\t\t\tif (rh != null)\n\t\t\t\t\t{\n\t\t\t\t\t\t_CSS = rh.CSS;\n\t\t\t\t\t\t_JavaScript = rh.JavaScript;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tsg.CloseMainStream();\n            _Cache = new RCache();\n            return;\n\t\t}\n\n\t\tprivate async Task RunRenderMht(IStreamGen sg)\n\t\t{\n\t\t\tOneFileStreamGen temp = null;\n\t\t\tFileStream fs=null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tstring tempHtmlReportFileName = Path.ChangeExtension(Path.GetTempFileName(), \"htm\");\n\t\t\t\ttemp = new OneFileStreamGen(tempHtmlReportFileName, true);\n                await RunRender(temp, OutputPresentationType.HTML);\n\t\t\t\ttemp.CloseMainStream();\n\n\t\t\t\t// Create the mht file (into a temporary file position)\n\t\t\t\tMhtBuilder mhtConverter = new MhtBuilder();\n\t\t\t\tstring fileName = Path.ChangeExtension(Path.GetTempFileName(), \"mht\");\n                await mhtConverter.SavePageArchive(fileName, \"file://\" + tempHtmlReportFileName);\n\n\t\t\t\t// clean up the temporary files\n\t\t\t\tforeach (string tempFileName in temp.FileList)\n\t\t\t\t{\n\t\t\t\t\ttry\n\t\t\t\t\t{\n\t\t\t\t\t\tFile.Delete(tempFileName);\n\t\t\t\t\t}\n\t\t\t\t\tcatch{}\n\t\t\t\t}\n\n\t\t\t\t// Copy the mht file to the requested stream\n\t\t\t\tStream os = sg.GetStream();\n\t\t\t\tfs = File.OpenRead(fileName);\n\t\t\t\tbyte[] ba = new byte[4096];\n\t\t\t\tint rb=0;\n\t\t\t\twhile ((rb = fs.Read(ba, 0, ba.Length)) > 0)\n\t\t\t\t{\n\t\t\t\t\tos.Write(ba, 0, rb);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\trl.LogError(8, \"Error converting HTML to MHTML \" + ex.Message + \n\t\t\t\t\t\t\t\t\tEnvironment.NewLine + ex.StackTrace);\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (temp != null)\n\t\t\t\t\ttemp.CloseMainStream();\n\t\t\t\tif (fs != null)\n\t\t\t\t\tfs.Close();\n                _Cache = new RCache();\n            }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// RunRenderPdf will render a Pdf given the page structure\n\t\t/// </summary>\n\t\t/// <param name=\"sg\"></param>\n\t\t/// <param name=\"pgs\"></param>\n\t\tpublic async Task RunRenderPdf(IStreamGen sg, Pages pgs)\n\t\t{\n\t\t\tPageNumber = 1;\t\t// reset page numbers\n\t\t\tTotalPages = 1;\n\n            IPresent ip = new RenderPdf_iTextSharp(this, sg);\n         \n\t\t\ttry\n\t\t\t{\n\t\t\t\tip.Start();\n\t\t\t\tawait ip.RunPages(pgs);\n\t\t\t\tawait ip.End();\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tpgs.CleanUp();\t\t// always want to make sure we cleanup to reduce resource usage\n                _Cache = new RCache();\n            }\n\n\t\t\treturn;\n\t\t}\n\n#if !DRAWINGCOMPAT\n\t\t/// <summary>\n\t\t/// RunRenderTif will render a TIF given the page structure\n\t\t/// </summary>\n\t\t/// <param name=\"sg\"></param>\n\t\t/// <param name=\"pgs\"></param>\n\t\tpublic async Task RunRenderTif(IStreamGen sg, Pages pgs, bool bColor)\n        {\n            PageNumber = 1;\t\t// reset page numbers\n            TotalPages = 1;\n\n            RenderTif ip = new RenderTif(this, sg);\n            ip.RenderColor = bColor;\n            try\n            {\n                ip.Start();\n                await ip.RunPages(pgs);\n                await ip.End();\n            }\n            finally\n            {\n                pgs.CleanUp();\t\t// always want to make sure we cleanup to reduce resource usage\n                _Cache = new RCache();\n            }\n\n            return;\n        }\n#endif\n\n\t\tprivate void RunRenderXmlTransform(IStreamGen sg, MemoryStreamGen msg)\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\tstring file;\n\t\t\t\tif (_Report.DataTransform[0] != Path.DirectorySeparatorChar)\n\t\t\t\t\tfile = this.Folder + Path.DirectorySeparatorChar + _Report.DataTransform;\n\t\t\t\telse\n\t\t\t\t\tfile = this.Folder + _Report.DataTransform;\n\t\t\t\tXmlUtil.XslTrans(file, msg.GetText(), sg.GetStream());\n\t\t\t}\t\n\t\t\tcatch (Exception ex)\n\t\t\t{\n\t\t\t\trl.LogError(8, \"Error processing DataTransform \" + ex.Message + \"\\r\\n\" + ex.StackTrace);\n\t\t\t}\n\t\t\tfinally \n\t\t\t{\n\t\t\t\tmsg.Dispose();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\n\t\t/// <summary>\n\t\t/// Build the Pages for this report.\n\t\t/// </summary>\n\t\t/// <returns></returns>\n\t\tpublic async Task<Pages> BuildPages()\n\t\t{\n\t\t\tPageNumber = 1;\t\t// reset page numbers\n\t\t\tTotalPages = 1;\n\n\t\t\tPages pgs = new Pages(this);\n\t\t\tpgs.PageHeight = _Report.PageHeight.Points;\n\t\t\tpgs.PageWidth = _Report.PageWidth.Points;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tPage p = new Page(1);\t\t\t\t// kick it off with a new page\n\t\t\t\tpgs.AddPage(p);\n\n                // Create all the pages\n                await _Report.Body.RunPage(pgs);\n\n\t\t\t\tif (pgs.LastPage.IsEmpty() && pgs.PageCount > 1) // get rid of extraneous pages which\n\t\t\t\t\tpgs.RemoveLastPage();\t\t\t//   can be caused by region page break at end\n\n\t\t\t\t// Now create the headers and footers for all the pages (as needed)\n\t\t\t\tif (_Report.PageHeader != null)\n                    await _Report.PageHeader.RunPage(pgs);\n\t\t\t\tif (_Report.PageFooter != null)\n                    await _Report.PageFooter.RunPage(pgs);\n\t\t\t\t// clear out any runtime clutter\n\t\t\t\tforeach (Page pg in pgs)\n\t\t\t\t\tpg.ResetPageExpressions();\n\n                pgs.SortPageItems();             // Handle ZIndex ordering of pages\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\trl.LogError(8, \"Exception running report\\r\\n\" + e.Message + \"\\r\\n\" + e.StackTrace);\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tpgs.CleanUp();\t\t// always want to make sure we clean this up since \n                _Cache = new RCache();\n\t\t\t}\n\n\t\t\treturn pgs;\n\t\t}\n\n\t\tpublic NeedPassword GetDataSourceReferencePassword\n\t\t{\n\t\t\tget {return _Report.GetDataSourceReferencePassword;}\n\t\t\tset {_Report.GetDataSourceReferencePassword = value;}\n\t\t}\n\n\t\tpublic ReportDefn ReportDefinition\n\t\t{\n\t\t\tget {return this._Report;}\n\t\t}\n\n\t\tinternal void SetReportDefinition(ReportDefn r)\n\t\t{\n\t\t\t_Report = r;\n            _UserParameters = null;     // force recalculation of user parameters\n            _DataSets = null;           // force reload of datasets\n\t\t}\n\n\t\tpublic string Description\n\t\t{\n\t\t\tget { return _Report.Description; }\n\t\t}\n\n\t\tpublic string Author\n\t\t{\n\t\t\tget { return _Report.Author; }\n\t\t}\n\n\t\tpublic string CSS\n\t\t{\n\t\t\tget { return _CSS; }\n\t\t}\n\n\t\tpublic string JavaScript\n\t\t{\n\t\t\tget { return _JavaScript; }\n\t\t}\n \n\t\tinternal object CodeInstance\n\t\t{\n\t\t\tget {return this._CodeInstance;}\n\t\t}\n\n\t\tinternal string CreateRuntimeName(object ro)\n\t\t{\n\t\t\t_RuntimeName++;\t\t\t\t\t// increment the name generator\n\t\t\tstring name = \"o\" + _RuntimeName.ToString();\n\t\t\t_LURuntimeName.Add(name, ro);\n\t\t\treturn name;\t\t\t\n\t\t}\n\n\t\tpublic DataSources DataSources\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_Report.DataSourcesDefn == null)\n\t\t\t\t\treturn null;\n\t\t\t\tif (_DataSources == null)\n\t\t\t\t\t_DataSources = new DataSources(this, _Report.DataSourcesDefn);\n\t\t\t\treturn _DataSources;\n\t\t\t}\n\t\t}\n\n\t\tpublic DataSets DataSets\n\t\t{\n\t\t\tget \n\t\t\t{ \n\t\t\t\tif (_Report.DataSetsDefn == null)\n\t\t\t\t\treturn null;\n\t\t\t\tif (_DataSets == null)\n\t\t\t\t\t_DataSets = new DataSets(this, _Report.DataSetsDefn); \n\n\t\t\t\treturn _DataSets;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// User provided parameters to the report.  IEnumerable is a list of UserReportParameter.\n\t\t/// </summary>\n\t\tpublic ICollection UserReportParameters\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (_UserParameters != null)\t// only create this once\n\t\t\t\t\treturn _UserParameters;\t\t//  since it can be expensive to build\n\n\t\t\t\tif (ReportDefinition.ReportParameters == null || ReportDefinition.ReportParameters.Count <= 0)\n\t\t\t\t{\n                    List<UserReportParameter> parms = new List<UserReportParameter>(1);\n                    _UserParameters = parms;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n                    List<UserReportParameter> parms = new List<UserReportParameter>(ReportDefinition.ReportParameters.Count);\n\t\t\t\t\tforeach (ReportParameter p in ReportDefinition.ReportParameters)\n\t\t\t\t\t{\n\t\t\t\t\t\tUserReportParameter urp = new UserReportParameter(this, p);\n\t\t\t\t\t\tparms.Add(urp);\n\t\t\t\t\t}\n\t\t\t\t\tparms.TrimExcess();\n\t\t\t\t\t_UserParameters = parms;\n\t\t\t\t}\n\t\t\t\treturn _UserParameters;\n\t\t\t}\n\t\t}\n\t\t/// <summary>\n\t\t/// Get/Set the folder containing the report.\n\t\t/// </summary>\n\t\tpublic string Folder\n\t\t{\n\t\t\tget { return _Folder==null? _Report.ParseFolder: _Folder; }\n\t\t\tset { _Folder = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get/Set the report name.  Usually this is the file name of the report sans extension.\n\t\t/// </summary>\n\t\tpublic string Name\n\t\t{\n\t\t\tget { return _ReportName; }\n\t\t\tset { _ReportName = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the height of the page in points.\n\t\t/// </summary>\n\t\tpublic float PageHeightPoints\n\t\t{\n\t\t\tget { return _Report.PageHeight.Points;\t}\n\t\t}\n\t\t/// <summary>\n\t\t/// Returns the width of the page in points.\n\t\t/// </summary>\n\t\tpublic float PageWidthPoints\n\t\t{\n\t\t\tget { return _Report.PageWidthPoints; }\n\t\t}\n        /// <summary>\n        /// Returns the left margin size in points.\n        /// </summary>\n        public float LeftMarginPoints\n        {\n            get { return _Report.LeftMargin.Points; }\n        }\n        /// <summary>\n        /// Returns the right margin size in points.\n        /// </summary>\n        public float RightMarginPoints\n        {\n            get { return _Report.RightMargin.Points; }\n        }\n        /// <summary>\n        /// Returns the top margin size in points.\n        /// </summary>\n        public float TopMarginPoints\n        {\n            get { return _Report.TopMargin.Points; }\n        }\n        /// <summary>\n        /// Returns the bottom margin size in points.\n        /// </summary>\n        public float BottomMarginPoints\n        {\n            get { return _Report.BottomMargin.Points; }\n        }\n        /// <summary>\n\t\t/// Returns the maximum severity of any error.  4 or less indicating report continues running.\n\t\t/// </summary>\n\t\tpublic int ErrorMaxSeverity\n\t\t{\n\t\t\tget \n\t\t\t{\n\t\t\t\tif (this.rl == null)\n\t\t\t\t\treturn 0;\n\t\t\t\telse\n\t\t\t\t\treturn rl.MaxSeverity;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// List of errors encountered so far.\n\t\t/// </summary>\n\t\tpublic IList ErrorItems\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (this.rl == null)\n\t\t\t\t\treturn null;\n\t\t\t\telse\n\t\t\t\t\treturn rl.ErrorItems;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Clear all errors generated up to now.\n\t\t/// </summary>\n\t\tpublic void ErrorReset()\n\t\t{\n\t\t\tif (this.rl == null)\n\t\t\t\treturn;\n\t\t\trl.Reset();\n\t\t\treturn;\n\t\t}\n\n        public void Dispose()\n        {\n\t\t\t_UserParameters = null;\n\t\t\t_DataSets = null;\n\t\t\tif (_Report != null)\n\t\t\t{\n\t\t\t\t_Report.Dispose();\n\t\t\t\t_Report = null;\n\t\t\t}\n\t\t\t_Cache = null;\n\t\t\t_DataSources = null;\n\t\t\t_CurrentPage = null;\n\t\t}\n\n        /// <summary>\n        /// Get/Set the UserID, that is the running user.\n        /// </summary>\n        public string UserID\n\t\t{\n\t\t\tget { return _UserID == null? Environment.UserName: _UserID; }\n\t\t\tset { _UserID = value; }\n\t\t}\n\t\t/// <summary>\n\t\t/// Get/Set the three letter ISO language of the client of the report.\n\t\t/// </summary>\n\t\tpublic string ClientLanguage\n\t\t{\n\t\t\tget \n            {\n\t\t\t\tif (_Report.Language != null)\n\t\t\t\t{\n\t\t\t\t\t// HACK: async\n\t\t\t\t\treturn Task.Run(async () => await _Report.Language.EvaluateString(this, null)).GetAwaiter().GetResult();\n\t\t\t\t}\n\n                if (_ClientLanguage != null)\n                    return _ClientLanguage;\n\n                return CultureInfo.CurrentCulture.ThreeLetterISOLanguageName; \n            }\n\t\t\tset { _ClientLanguage = value; }\n\t\t}\n\n\t\tinternal DataSourcesDefn ParentConnections\n\t\t{\n\t\t\tget {return _ParentConnections; }\n\t\t\tset {_ParentConnections = value; }\n\t\t}\n\n\t\tinternal RCache Cache\n\t\t{\n\t\t\tget {return _Cache;}\n\t\t}\n\t}\n\n    internal class RCache\n    {\n        ConcurrentDictionary<string, object> _RunCache;\n\n        internal RCache()\n        {\n            _RunCache = new ConcurrentDictionary<string, object>();\n        }\n\n        internal void Add(ReportLink rl, string name, object o)\n        {\n            _RunCache.TryAdd(GetKey(rl, name), o);\n        }\n\n        internal void AddReplace(ReportLink rl, string name, object o)\n        {\n            string key = GetKey(rl, name);\n            _RunCache.AddOrUpdate(key, o, (k, v) => o);\n        }\n\n        internal object Get(ReportLink rl, string name)\n        {\n            _RunCache.TryGetValue(GetKey(rl, name), out var value);\n            return value;\n        }\n\n        internal void Remove(ReportLink rl, string name)\n        {\n            _RunCache.TryRemove(GetKey(rl, name), out _);\n        }\n\n        internal void Add(ReportDefn rd, string name, object o)\n        {\n            _RunCache.TryAdd(GetKey(rd, name), o);\n        }\n\n        internal void AddReplace(ReportDefn rd, string name, object o)\n        {\n            string key = GetKey(rd, name);\n            _RunCache.AddOrUpdate(key, o, (k, v) => o);\n        }\n\n        internal object Get(ReportDefn rd, string name)\n        {\n            _RunCache.TryGetValue(GetKey(rd, name), out var value);\n            return value;\n        }\n\n        internal void Remove(ReportDefn rd, string name)\n        {\n            _RunCache.TryRemove(GetKey(rd, name), out _);\n        }\n\n        internal void Add(string key, object o)\n        {\n            _RunCache.TryAdd(key, o);\n        }\n\n        internal void AddReplace(string key, object o)\n        {\n            _RunCache.AddOrUpdate(key, o, (k, v) => o);\n        }\n\n        internal object Get(string key)\n        {\n            _RunCache.TryGetValue(key, out var value);\n            return value;\n        }\n\n        internal void Remove(string key)\n        {\n            _RunCache.TryRemove(key, out _);\n        }\n\n        internal object Get(int i, string name)\n        {\n            _RunCache.TryGetValue(GetKey(i, name), out var value);\n            return value;\n        }\n\n        internal void Remove(int i, string name)\n        {\n            _RunCache.TryRemove(GetKey(i, name), out _);\n        }\n\n        string GetKey(ReportLink rl, string name)\n        {\n            return GetKey(rl.ObjectNumber, name);\n        }\n\n        string GetKey(ReportDefn rd, string name)\n        {\n            if (rd.Subreport == null) // top level report use 0 \n            {\n                return GetKey(0, name);\n            }\n            else // Use the subreports object number\n            {\n                return GetKey(rd.Subreport.ObjectNumber, name);\n            }\n        }\n\n        string GetKey(int onum, string name)\n        {\n            return name + onum.ToString();\n        }\n    }\n\n\t// holder objects for value types\n\tinternal class ODateTime\n\t{\n\t\tinternal DateTime dt;\n\n\t\tinternal ODateTime(DateTime adt)\n\t\t{\n\t\t\tdt = adt;\n\t\t}\n\t}\n\n\tinternal class ODecimal\n\t{\n\t\tinternal decimal d;\n\n\t\tinternal ODecimal(decimal ad)\n\t\t{\n\t\t\td = ad;\n\t\t}\n\t}\n\n\tinternal class ODouble\n\t{\n\t\tinternal double d;\n\n\t\tinternal ODouble(double ad)\n\t\t{\n\t\t\td = ad;\n\t\t}\n\t}\n\n\tinternal class OFloat\n\t{\n\t\tinternal float f;\n\n\t\tinternal OFloat(float af)\n\t\t{\n\t\t\tf = af;\n\t\t}\n\t}\n\n\tinternal class OInt\n\t{\n\t\tinternal int i;\n\n\t\tinternal OInt(int ai)\n\t\t{\n\t\t\ti = ai;\n\t\t}\n\t}\n\n    public class SubreportDataRetrievalEventArgs : EventArgs\n    {\n        public readonly Report Report;\n\n        public SubreportDataRetrievalEventArgs(Report r)\n        {\n            Report = r;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Runtime/StyleInfo.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.IO;\nusing System.Text;\n#if DRAWINGCOMPAT\nusing Draw = Majorsilence.Drawing;\nusing Drawing2D = Majorsilence.Drawing.Drawing2D;\n#else\nusing Draw = System.Drawing;\nusing Drawing2D = System.Drawing.Drawing2D;\n#endif\n\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// StyleInfo (borders, fonts, background, padding, ...)\n\t///</summary>\n\tpublic class StyleInfo: ICloneable\n\t{\n\t\t// note: all sizes are expressed as points\n\t\t// _BorderColor\n\t\t/// <summary>\n\t\t/// Color of the left border\n\t\t/// </summary>\n\t\tpublic Draw.Color BColorLeft;\t\t// (Color) Color of the left border\n\t\t/// <summary>\n\t\t/// Color of the right border\n\t\t/// </summary>\n\t\tpublic Draw.Color BColorRight;\t\t// (Color) Color of the right border\n\t\t/// <summary>\n\t\t/// Color of the top border\n\t\t/// </summary>\n\t\tpublic Draw.Color BColorTop;\t\t// (Color) Color of the top border\n\t\t/// <summary>\n\t\t/// Color of the bottom border\n\t\t/// </summary>\n\t\tpublic Draw.Color BColorBottom;\t// (Color) Color of the bottom border\n\t\t// _BorderStyle\n\t\t/// <summary>\n\t\t/// Style of the left border\n\t\t/// </summary>\n\t\tpublic BorderStyleEnum BStyleLeft;\t// (Enum BorderStyle) Style of the left border\n\t\t/// <summary>\n\t\t/// Style of the left border\n\t\t/// </summary>\n\t\tpublic BorderStyleEnum BStyleRight;\t// (Enum BorderStyle) Style of the left border\n\t\t/// <summary>\n\t\t/// Style of the top border\n\t\t/// </summary>\n\t\tpublic BorderStyleEnum BStyleTop;\t\t// (Enum BorderStyle) Style of the top border\n\t\t/// <summary>\n\t\t/// Style of the bottom border\n\t\t/// </summary>\n\t\tpublic BorderStyleEnum BStyleBottom;\t// (Enum BorderStyle) Style of the bottom border\n\t\t// _BorderWdith\n\t\t/// <summary>\n\t\t/// Width of the left border. Max: 20 pt Min: 0.25 pt\n\t\t/// </summary>\n\t\tpublic float BWidthLeft;\t//(Size) Width of the left border. Max: 20 pt Min: 0.25 pt\n\t\t/// <summary>\n\t\t/// Width of the right border. Max: 20 pt Min: 0.25 pt\n\t\t/// </summary>\n\t\tpublic float BWidthRight;\t//(Size) Width of the right border. Max: 20 pt Min: 0.25 pt\n\t\t/// <summary>\n\t\t/// Width of the right border. Max: 20 pt Min: 0.25 pt\n\t\t/// </summary>\n\t\tpublic float BWidthTop;\t\t//(Size) Width of the right border. Max: 20 pt Min: 0.25 pt\n\t\t/// <summary>\n\t\t/// Width of the bottom border. Max: 20 pt Min: 0.25 pt\n\t\t/// </summary>\n\t\tpublic float BWidthBottom;\t//(Size) Width of the bottom border. Max: 20 pt Min: 0.25 pt\n\n\t\t/// <summary>\n\t\t/// Color of the background\n\t\t/// </summary>\n\t\tpublic Draw.Color BackgroundColor;\t\t\t//(Color) Color of the background\n        public string BackgroundColorText;\t\t//(Textual Color) Color of the background\n        /// <summary>\n\t\t/// The type of background gradient\n\t\t/// </summary>\n\t\tpublic BackgroundGradientTypeEnum BackgroundGradientType;\t// The type of background gradient\n\t\t/// <summary>\n\t\t/// End color for the background gradient.\n\t\t/// </summary>\n\t\t\n\t\t/// <summary>\n\t\t/// The type of background pattern\n\t\t/// </summary>\n\t\tpublic patternTypeEnum PatternType;\n\t\t\n\t\tpublic Draw.Color BackgroundGradientEndColor;\t//(Color) End color for the background gradient.\n\t\t/// <summary>\n\t\t/// A background image for the report item.\n\t\t/// </summary>\n\t\tpublic PageImage BackgroundImage;\t// A background image for the report item.\n\t\t/// <summary>\n\t\t/// Font style Default: Normal\n\t\t/// </summary>\n\t\tpublic FontStyleEnum FontStyle;\t\t// (Enum FontStyle) Font style Default: Normal\n\t\t/// <summary>\n\t\t/// Name of the font family Default: Arial\n\t\t/// </summary>\n\t\tprivate string _FontFamily;\t\t\t//(string)Name of the font family Default: Arial -- allow comma separated value?\n\t\t/// <summary>\n\t\t/// Point size of the font\n\t\t/// </summary>\n\t\tpublic float FontSize;\t\t//(Size) Point size of the font\n\t\t/// <summary>\n\t\t/// Thickness of the font\n\t\t/// </summary>\n\t\tpublic FontWeightEnum FontWeight;\t\t//(Enum FontWeight) Thickness of the font\n        /// <summary>\n        /// Cell format in Excel07  Default: General\n        /// </summary>\n\t\tpublic string _Format;\t\t\t//WRP 28102008 Cell format string\n\t\t/// <summary>\n\t\t/// Special text formatting Default: none\n\t\t/// </summary>\n\t\tpublic TextDecorationEnum TextDecoration;\t// (Enum TextDecoration) Special text formatting Default: none\n\t\t/// <summary>\n\t\t/// Horizontal alignment of the text Default: General\n\t\t/// </summary>\n\t\tpublic TextAlignEnum TextAlign;\t\t// (Enum TextAlign) Horizontal alignment of the text Default: General\n\t\t/// <summary>\n\t\t/// Vertical alignment of the text Default: Top\n\t\t/// </summary>\n\t\tpublic VerticalAlignEnum VerticalAlign;\t// (Enum VerticalAlign)\tVertical alignment of the text Default: Top\n\t\t/// <summary>\n\t\t/// The foreground color\tDefault: Black\n\t\t/// </summary>\n\t\tpublic Draw.Color Color;\t\t\t// (Color) The foreground color\tDefault: Black\n        public string ColorText;    // (Color-text)\n        /// <summary>\n\t\t/// Padding between the left edge of the report item.\n\t\t/// </summary>\n\t\tpublic float PaddingLeft;\t// (Size)Padding between the left edge of the report item.\n\t\t/// <summary>\n\t\t/// Padding between the right edge of the report item.\n\t\t/// </summary>\n\t\tpublic float PaddingRight;\t// (Size) Padding between the right edge of the report item.\n\t\t/// <summary>\n\t\t/// Padding between the top edge of the report item.\n\t\t/// </summary>\n\t\tpublic float PaddingTop;\t\t// (Size) Padding between the top edge of the report item.\n\t\t/// <summary>\n\t\t/// Padding between the bottom edge of the report item.\n\t\t/// </summary>\n\t\tpublic float PaddingBottom;\t// (Size) Padding between the bottom edge of the report item.\n\t\t/// <summary>\n\t\t/// Height of a line of text.\n\t\t/// </summary>\n\t\tpublic float LineHeight;\t\t// (Size) Height of a line of text\n\t\t/// <summary>\n\t\t/// Indicates whether text is written left-to-right (default)\n\t\t/// </summary>\n\t\tpublic DirectionEnum Direction;\t\t// (Enum Direction) Indicates whether text is written left-to-right (default)\n\t\t/// <summary>\n\t\t/// Indicates the writing mode; e.g. left right top bottom or top bottom left right.\n\t\t/// </summary>\n\t\tpublic WritingModeEnum WritingMode;\t// (Enum WritingMode) Indicates whether text is written\n\t\t/// <summary>\n\t\t/// The primary language of the text.\n\t\t/// </summary>\n\t\tpublic string Language;\t\t// (Language) The primary language of the text.\n\t\t/// <summary>\n\t\t/// Unused.\n\t\t/// </summary>\n\t\tpublic UnicodeBiDirectionalEnum UnicodeBiDirectional;\t// (Enum UnicodeBiDirection) \n\t\t/// <summary>\n\t\t/// Calendar to use.\n\t\t/// </summary>\n\t\tpublic CalendarEnum Calendar;\t\t// (Enum Calendar)\n\t\t/// <summary>\n\t\t/// The digit format to use.\n\t\t/// </summary>\n\t\tpublic string NumeralLanguage;\t// (Language) The digit format to use as described by its\n\t\t/// <summary>\n\t\t/// The variant of the digit format to use.\n\t\t/// </summary>\n\t\tpublic int NumeralVariant;\t//(Integer) The variant of the digit format to use.\n\n\t\t/// <summary>\n\t\t/// Constructor using all defaults for the style.\n\t\t/// </summary>\n\t\tpublic StyleInfo()\n\t\t{\n\t\t\tBColorLeft = BColorRight = BColorTop = BColorBottom = Draw.Color.Black;\t// (Color) Color of the bottom border\n\t\t\tBStyleLeft = BStyleRight = BStyleTop = BStyleBottom = BorderStyleEnum.None;\n\t\t\t// _BorderWdith\n\t\t\tBWidthLeft = BWidthRight = BWidthTop = BWidthBottom = 1;\n\n\t\t\tBackgroundColor = Draw.Color.Empty;\n            BackgroundColorText = string.Empty;\n\t\t\tBackgroundGradientType = BackgroundGradientTypeEnum.None;\n\t\t\tBackgroundGradientEndColor = Draw.Color.Empty;\n\t\t\tBackgroundImage = null;\n\n\t\t\tFontStyle = FontStyleEnum.Normal;\n\t\t\t_FontFamily = \"Arial\";\n            //WRP 291008 numFmtId should be 0 (Zero) for General format - will be interpreted as a string\n            //It has default values in Excel07 as per ECMA-376 standard (SEction 3.8.30) for Office Open XML Excel07\n            _Format = \"General\";  \n\t\t\tFontSize = 10;\n\t\t\tFontWeight = FontWeightEnum.Normal;\n\n\t\t\tPatternType = patternTypeEnum.None;\n\t\t\tTextDecoration = TextDecorationEnum.None;\n\t\t\tTextAlign = TextAlignEnum.General;\n\t\t\tVerticalAlign = VerticalAlignEnum.Top;\n\t\t\tColor = Draw.Color.Black;\n            ColorText = \"Black\";\n            PaddingLeft = PaddingRight = PaddingTop = PaddingBottom = 0;\n\t\t\tLineHeight = 0;\n\t\t\tDirection = DirectionEnum.LTR;\n\t\t\tWritingMode = WritingModeEnum.lr_tb;\n\t\t\tLanguage = \"en-US\";\n\t\t\tUnicodeBiDirectional = UnicodeBiDirectionalEnum.Normal;\n\t\t\tCalendar = CalendarEnum.Gregorian;\n\t\t\tNumeralLanguage = Language;\n\t\t\tNumeralVariant=1;\n\t\t}\n\t\t/// <summary>\n\t\t/// Name of the font family Default: Arial\n\t\t/// </summary>\n\t\tpublic string FontFamily\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tint i = _FontFamily.IndexOf(\",\");\n\t\t\t\treturn i > 0? _FontFamily.Substring(0, i): _FontFamily;\n\t\t\t}\n\t\t\tset { _FontFamily = value; }\n\t\t}\n\t\t/// <summary>\n\t\t/// Name of the font family Default: Arial.  Support list of families separated by ','.\n\t\t/// </summary>\n\t\tpublic string FontFamilyFull\n\t\t{\n\t\t\tget {return _FontFamily;}\n\t\t}\n\t\t/// <summary>\n\t\t/// Gets the FontFamily instance using the FontFamily string.  This supports lists of fonts.\n\t\t/// </summary>\n\t\t/// <returns></returns>\n\t\tpublic Draw.FontFamily GetFontFamily()\n\t\t{\n\t\t\treturn GetFontFamily(_FontFamily);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the FontFamily instance using the passed face name.  This supports lists of fonts.\n\t\t/// </summary>\n\t\t/// <returns></returns>\n\t\tstatic public Draw.FontFamily GetFontFamily(string fface)\n\t\t{\n\t\t\tstring[] choices = fface.Split(',');\n\t\t\tDraw.FontFamily ff=null;\n\t\t\tforeach (string val in choices)\n\t\t\t{\n\t\t\t\ttry \n\t\t\t\t{\n\t\t\t\t\tstring font=null;\n\t\t\t\t\t// TODO: should be better way than to hard code; could put in config file??\n\t\t\t\t\tswitch (val.Trim().ToLower())\n\t\t\t\t\t{\n\t\t\t\t\t\tcase \"serif\":\n\t\t\t\t\t\t\tfont = \"Times New Roman\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"sans-serif\":\n\t\t\t\t\t\t\tfont = \"Arial\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"cursive\":\n\t\t\t\t\t\t\tfont = \"Comic Sans MS\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"fantasy\":\n\t\t\t\t\t\t\tfont = \"Impact\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"monospace\":\n                        case \"courier\":\n\t\t\t\t\t\t\tfont = \"Courier New\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tfont = val;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tff = new Draw.FontFamily(font);\n\t\t\t\t\tif (ff != null)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcatch {}\t// if font doesn't exist we will go to the next\n\t\t\t}\n\t\t\tif (ff == null)\n\t\t\t\tff = new Draw.FontFamily(\"Arial\");\n\t\t\treturn ff;\n\t\t}\n\t\t/// <summary>\n\t\t/// True if font is bold.\n\t\t/// </summary>\n\t\t/// <returns></returns>\n\t\tpublic bool IsFontBold()\n\t\t{\n\t\t\tswitch(FontWeight)\n\t\t\t{\n\t\t\t\tcase FontWeightEnum.Bold:\n\t\t\t\tcase FontWeightEnum.Bolder:\n\t\t\t\tcase FontWeightEnum.W500:\n\t\t\t\tcase FontWeightEnum.W600:\n\t\t\t\tcase FontWeightEnum.W700:\n\t\t\t\tcase FontWeightEnum.W800:\n\t\t\t\tcase FontWeightEnum.W900:\n\t\t\t\t\treturn true;\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\n        public static string ToUpperFirstLetter(string source)\n        {\n            if (string.IsNullOrEmpty(source))\n            {\n                return string.Empty;\n            }\n            // convert to char array of the string\n            char[] letters = source.ToCharArray();\n            // upper case the first char\n            letters[0] = char.ToUpper(letters[0]);\n            // return the array made of the new char array\n            return new string(letters);\n        }\n\n\t\t/// <summary>\n\t\t/// Gets the enumerated font weight.\n\t\t/// </summary>\n\t\t/// <param name=\"v\"></param>\n\t\t/// <param name=\"def\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public FontWeightEnum GetFontWeight(string v, FontWeightEnum def)\n\t\t{\n\t\t\tFontWeightEnum fw;\n\n            try\n            {\n                fw = (FontWeightEnum)System.Enum.Parse(typeof(FontWeightEnum), ToUpperFirstLetter(v));\n            }\n            catch\n            {\n                fw = def;\n            }\n            return fw; \n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns the font style (normal or italic).\n\t\t/// </summary>\n\t\t/// <param name=\"v\"></param>\n\t\t/// <param name=\"def\"></param>\n\t\t/// <returns></returns>\n\t\tpublic static FontStyleEnum GetFontStyle(string v, FontStyleEnum def)\n\t\t{\n\t\t\tFontStyleEnum f;\n            try\n            {\n                f = (FontStyleEnum)Enum.Parse(typeof(FontStyleEnum), v);\n            }\n            catch\n            {\n                f = def;\n            }\n\n            return f; \n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the background gradient type.\n\t\t/// </summary>\n\t\t/// <param name=\"v\"></param>\n\t\t/// <param name=\"def\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public BackgroundGradientTypeEnum GetBackgroundGradientType(string v, BackgroundGradientTypeEnum def)\n\t\t{\n\t\t\tBackgroundGradientTypeEnum gt;\n            try\n            {\n                gt = (BackgroundGradientTypeEnum)Enum.Parse(typeof(BackgroundGradientTypeEnum), v);\n            }\n            catch\n            {\n                gt = def;\n            }\n            return gt; \n\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the text decoration.\n\t\t/// </summary>\n\t\t/// <param name=\"v\"></param>\n\t\t/// <param name=\"def\"></param>\n\t\t/// <returns></returns>\n\t\tpublic static TextDecorationEnum GetTextDecoration(string v, TextDecorationEnum def)\n\t\t{\n\t\t\tTextDecorationEnum td;\n            try\n            {\n                td = (TextDecorationEnum)Enum.Parse(typeof(TextDecorationEnum), v);\n            }\n            catch\n            {\n                td = def;\n            }\n\n            return td; \n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the text alignment.\n\t\t/// </summary>\n\t\t/// <param name=\"v\"></param>\n\t\t/// <param name=\"def\"></param>\n\t\t/// <returns></returns>\n\t\tpublic static TextAlignEnum GetTextAlign(string v, TextAlignEnum def)\n\t\t{\n\t\t\tTextAlignEnum ta;\n            try\n            {\n\n                ta = (TextAlignEnum)Enum.Parse(typeof(TextAlignEnum), System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(v));\n            }\n            catch\n            {\n                ta = def;\n            }\n            return ta; \n\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the vertical alignment.\n\t\t/// </summary>\n\t\t/// <param name=\"v\"></param>\n\t\t/// <param name=\"def\"></param>\n\t\t/// <returns></returns>\n\t\tpublic static VerticalAlignEnum GetVerticalAlign(string v, VerticalAlignEnum def)\n\t\t{\n\t\t\tVerticalAlignEnum va;\n            try\n            {\n                va = (VerticalAlignEnum)Enum.Parse(typeof(VerticalAlignEnum), v);\n            }\n            catch\n            {\n                va = def;\n            }\n\n            return va;\n \n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the direction of the text.\n\t\t/// </summary>\n\t\t/// <param name=\"v\"></param>\n\t\t/// <param name=\"def\"></param>\n\t\t/// <returns></returns>\n\t\tpublic static DirectionEnum GetDirection(string v, DirectionEnum def)\n\t\t{\n\t\t\tDirectionEnum d;\n            try\n            {\n                d = (DirectionEnum)Enum.Parse(typeof(DirectionEnum), v);\n            }\n            catch\n            {\n                d = def;\n            }\n            return d; \n\n\n\t\t}\n\t\t/// <summary>\n\t\t/// Gets the writing mode; e.g. left right top bottom or top bottom left right.\n\t\t/// </summary>\n\t\t/// <param name=\"v\"></param>\n\t\t/// <param name=\"def\"></param>\n\t\t/// <returns></returns>\n\t\tpublic static WritingModeEnum GetWritingMode(string v, WritingModeEnum def)\n\t\t{\n\t\t\tWritingModeEnum w;\n\n            try\n            {\n                if (v == \"rl-tb\" || v == \"tb-rl\")\n                { // How the hell did it ever get saved as rl-tb?\n                    v = \"tb_rl\";\n                }\n                else if (v == \"lr-tb\")\n                {\n                    v = \"lr_tb\";\n                }\n                else if (v == \"tb-lr\")\n                { \n                    v = \"tb_lr\";\n                }\n                w = (WritingModeEnum)Enum.Parse(typeof(WritingModeEnum), v);\n            }\n            catch\n            {\n                w = def;\n            }\n\n            return w;\n \n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the unicode BiDirectional.\n\t\t/// </summary>\n\t\t/// <param name=\"v\"></param>\n\t\t/// <param name=\"def\"></param>\n\t\t/// <returns></returns>\n\t\tpublic static UnicodeBiDirectionalEnum GetUnicodeBiDirectional(string v, UnicodeBiDirectionalEnum def)\n\t\t{\n\t\t\tUnicodeBiDirectionalEnum u;\n            try\n            {\n                u = (UnicodeBiDirectionalEnum)Enum.Parse(typeof(UnicodeBiDirectionalEnum), v);\n            }\n            catch\n            {\n                u = def;\n            }\n            return u; \n\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the calendar (e.g. Gregorian, GregorianArabic, and so on)\n\t\t/// </summary>\n\t\t/// <param name=\"v\"></param>\n\t\t/// <param name=\"def\"></param>\n\t\t/// <returns></returns>\n\t\tpublic static CalendarEnum GetCalendar(string v, CalendarEnum def)\n\t\t{\n\t\t\tCalendarEnum c;\n\n            try\n            {\n                c = (CalendarEnum)Enum.Parse(typeof(CalendarEnum), v);\n            }\n            catch\n            {\n                c = def;\n            }\n            return c; \n\t\t}\n        // WRP 301008 return Excel07 format code as defined in section 3.8.30 of the ECMA-376 standard for Office Open XML Excel07 file formats\n        public static int GetFormatCode (string val)\n        {\n            switch (val)\n            {\n                case \"General\":\n                    return 0;\n                case \"0\":\n                    return 1;\n                case \"0.00\":\n                    return 2;\n                case \"#,##0\":\n                    return 3;\n                case \"#,##0.00\":\n                    return 4;\n                case \"0%\":\n                    return 9;\n                case \"p\":\n                case \"P\":\n                case \"0.00%\":\n                    return 10;\n                case \"0.00E+00\":\n                    return 11;\n                case \"# ?/?\":\n                    return 12;\n                case \" # ??/??\":\n                    return 13;\n                case \"mm-dd-yy\":\n                    return 14;\n                case \"d-mmm-yy\":\n                    return 15;\n                case \"d-mmm\":\n                    return 16;\n                case \"mmm-yy\":\n                    return 17;\n                case \"h:mm AM/PM\":\n                    return 18;\n                case \"h:mm:ss AM/PM\":\n                    return 19;\n                case \"h:mm\":\n                    return 20;\n                case \"h:mm:ss\":\n                    return 21;\n                case \"m/d/yy h:mm\":\n                    return 22;\n                case \"#,##0 ;(#,##0)\":\n                    return 37;\n                case \"#,##0 ;[Red](#,##0)\":\n                    return 38;\n                case \"#,##0.00;(#,##0.00)\":\n                    return 39;\n                case \"#,##0.00;[Red](#,##0.00)\":\n                    return 40;\n                case \"mm:ss\":\n                    return 45;\n                case \"[h]:mm:ss\":\n                    return 46;\n                case \"mmss.0\":\n                    return 47;\n                case \"##0.0E+0\":\n                    return 48;\n                case \"@\":\n                    return 49;\n                default:\n                    return 999;\n\n            }\n        }\n\t\t\n\t\tpublic static patternTypeEnum GetPatternType(Drawing2D.HatchStyle hs)\n\t\t{\n\t\t\tswitch (hs)\n\t\t\t{\n\t\t\t\tcase Drawing2D.HatchStyle.BackwardDiagonal:\n\t\t\t\t\treturn patternTypeEnum.BackwardDiagonal;\t\t\t\t\t\n\t\t\t\tcase Drawing2D.HatchStyle.Cross:\n\t\t\t\t\treturn patternTypeEnum.Cross;\t\t\t\t\n\t\t\t\tcase Drawing2D.HatchStyle.DarkDownwardDiagonal:\n\t\t\t\t\treturn patternTypeEnum.DarkDownwardDiagonal;\n\t\t\t\tcase Drawing2D.HatchStyle.DarkHorizontal:\n\t\t\t\t\treturn patternTypeEnum.DarkHorizontal;\n\t\t\t\tcase Drawing2D.HatchStyle.Vertical:\n\t\t\t\t\treturn patternTypeEnum.Vertical;\n\t\t\t\tcase Drawing2D.HatchStyle.LargeConfetti:\n\t\t\t\t\treturn patternTypeEnum.LargeConfetti;\n\t\t\t\tcase Drawing2D.HatchStyle.OutlinedDiamond:\n\t\t\t\t\treturn patternTypeEnum.OutlinedDiamond;\n\t\t\t\tcase Drawing2D.HatchStyle.SmallConfetti:\n\t\t\t\t\treturn patternTypeEnum.SmallConfetti;\n\t\t\t\tcase Drawing2D.HatchStyle.HorizontalBrick:\n\t\t\t\t\treturn patternTypeEnum.HorizontalBrick;\n\t\t\t\tcase Drawing2D.HatchStyle.LargeCheckerBoard:\n\t\t\t\t\treturn patternTypeEnum.CheckerBoard;\n\t\t\t\tcase Drawing2D.HatchStyle.SolidDiamond:\n\t\t\t\t\treturn patternTypeEnum.SolidDiamond;\n\t\t\t\tcase Drawing2D.HatchStyle.DiagonalBrick:\n\t\t\t\t\treturn patternTypeEnum.DiagonalBrick;\n\t\t\t\tdefault:\n\t\t\t\t\treturn patternTypeEnum.None;\t\t\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n\t\t#region ICloneable Members\n\n\t\tpublic object Clone()\n\t\t{\n\t\t\treturn this.MemberwiseClone();\n\t\t}\n\n\t\t#endregion\n\t}\n\t\n\t/// <summary>\n\t/// The types of patterns supported.\n\t/// </summary>\n\tpublic enum patternTypeEnum\n\t{\n\t\tNone,\n\t\tLargeConfetti,\n\t\tCross,\n\t\tDarkDownwardDiagonal,\n\t\tOutlinedDiamond,\n\t\tDarkHorizontal,\n\t\tSmallConfetti,\n\t\tHorizontalBrick,\n\t\tCheckerBoard,\n\t\tVertical,\n\t\tSolidDiamond,\n\t\tDiagonalBrick,\n\t\tBackwardDiagonal\n\t}\n\n\t/// <summary>\n\t/// The types of background gradients supported.\n\t/// </summary>\n\tpublic enum BackgroundGradientTypeEnum\n\t{\n\t\t/// <summary>\n\t\t/// No gradient\n\t\t/// </summary>\n\t\tNone,\n\t\t/// <summary>\n\t\t/// Left Right gradient\n\t\t/// </summary>\n\t\tLeftRight,\n\t\t/// <summary>\n\t\t/// Top Bottom gradient\n\t\t/// </summary>\n\t\tTopBottom,\n\t\t/// <summary>\n\t\t/// Center gradient\n\t\t/// </summary>\n\t\tCenter,\n\t\t/// <summary>\n\t\t/// Diagonal Left gradient\n\t\t/// </summary>\n\t\tDiagonalLeft,\n\t\t/// <summary>\n\t\t/// Diagonal Right gradient\n\t\t/// </summary>\n\t\tDiagonalRight,\n\t\t/// <summary>\n\t\t/// Horizontal Center gradient\n\t\t/// </summary>\n\t\tHorizontalCenter,\n\t\t/// <summary>\n\t\t/// Vertical Center\n\t\t/// </summary>\n\t\tVerticalCenter\n\t}\n\t/// <summary>\n\t/// Font styles supported\n\t/// </summary>\n\tpublic enum FontStyleEnum\n\t{\n\t\t/// <summary>\n\t\t/// Normal font\n\t\t/// </summary>\n\t\tNormal,\n\t\t/// <summary>\n\t\t/// Italic font\n\t\t/// </summary>\n\t\tItalic\n\t}\n\n\t/// <summary>\n\t/// Potential font weights\n\t/// </summary>\n\tpublic enum FontWeightEnum\n\t{\n\t\t/// <summary>\n\t\t/// Lighter font\n\t\t/// </summary>\n\t\tLighter,\n\t\t/// <summary>\n\t\t/// Normal font\n\t\t/// </summary>\n\t\tNormal,\n\t\t/// <summary>\n\t\t/// Bold font\n\t\t/// </summary>\n\t\tBold,\n\t\t/// <summary>\n\t\t/// Bolder font\n\t\t/// </summary>\n\t\tBolder,\n\t\t/// <summary>\n\t\t/// W100 font\n\t\t/// </summary>\n\t\tW100,\n\t\t/// <summary>\n\t\t/// W200 font\n\t\t/// </summary>\n\t\tW200,\n\t\t/// <summary>\n\t\t/// W300 font\n\t\t/// </summary>\n\t\tW300,\n\t\t/// <summary>\n\t\t/// W400 font\n\t\t/// </summary>\n\t\tW400,\n\t\t/// <summary>\n\t\t/// W500 font\n\t\t/// </summary>\n\t\tW500,\n\t\t/// <summary>\n\t\t/// W600 font\n\t\t/// </summary>\n\t\tW600,\n\t\t/// <summary>\n\t\t/// W700 font\n\t\t/// </summary>\n\t\tW700,\n\t\t/// <summary>\n\t\t/// W800 font\n\t\t/// </summary>\n\t\tW800,\n\t\t/// <summary>\n\t\t/// W900 font\n\t\t/// </summary>\n\t\tW900\n\t}\n\n\tpublic enum TextDecorationEnum\n\t{\n\t\tUnderline,\n\t\tOverline,\n\t\tLineThrough,\n\t\tNone\n\t}\n\n\tpublic enum TextAlignEnum\n\t{\n\t\tLeft,\n\t\tCenter,\n\t\tRight,\n\t\tGeneral,\n        Justified \n\t}\n\n\tpublic enum VerticalAlignEnum\n\t{\n\t\tTop,\n\t\tMiddle,\n\t\tBottom\n\t}\n\n\tpublic enum DirectionEnum\n\t{\n\t\tLTR,\t\t\t\t// left to right\n\t\tRTL\t\t\t\t\t// right to left\n\t}\n\n\tpublic enum WritingModeEnum\n\t{\n\t\tlr_tb,\t\t\t\t// left right - top bottom\n\t\ttb_rl,\t\t\t\t// top bottom - right left\n\t\ttb_lr\t\t\t\t// top bottom - left right\n\t}\n\n\tpublic enum UnicodeBiDirectionalEnum\n\t{\n\t\tNormal,\n\t\tEmbed,\n\t\tBiDi_Override\n\t}\n\t\t\n\tpublic enum CalendarEnum\n\t{\n\t\tGregorian,\n\t\tGregorianArabic,\n\t\tGregorianMiddleEastFrench,\n\t\tGregorianTransliteratedEnglish,\n\t\tGregorianTransliteratedFrench,\n\t\tGregorianUSEnglish,\n\t\tHebrew,\n\t\tHijri,\n\t\tJapanese,\n\t\tKorea,\n\t\tTaiwan,\n\t\tThaiBuddhist\n\t}\n}\n"
  },
  {
    "path": "RdlEngine/Runtime/XmlUtil.cs",
    "content": "\n\nusing System;\nusing System.Xml;\nusing System.Xml.Xsl;\nusing System.Text;\nusing System.IO;\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\n#else\nusing System.Drawing;\t\t\t// for Color class\n#endif\nusing System.Reflection;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n\t///<summary>\n\t/// Some utility classes consisting entirely of static routines.\n\t///</summary>\n\tpublic sealed class XmlUtil\n\t{\n\t\tstatic internal bool Boolean(string tf, ReportLog rl)\n\t\t{\n\t\t\tstring low_tf = tf.ToLower();\n\t\t\tif (low_tf.CompareTo(\"true\") == 0)\n\t\t\t\treturn true;\n\t\t\tif (low_tf.CompareTo(\"false\") == 0)\n\t\t\t\treturn false;\n\t\t\trl.LogError(4, \"Unknown True/False value '\" + tf + \"'.  False assumed.\");\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\tstatic internal Color ColorFromHtml(string sc, Color dc)\n\t\t{\n\t\t\treturn ColorFromHtml(sc, dc, null);\n\t\t}\n\n\t\tstatic internal Color ColorFromHtml(string sc, Color dc, Report rpt)\n\t\t{\n\t\t\tColor c;\n\t\t\ttry \n\t\t\t{\n\t\t\t\tc = ColorTranslator.FromHtml(sc);\n\t\t\t}\n\t\t\tcatch \n\t\t\t{\n\t\t\t\tc = dc;\n\t\t\t\tif (rpt != null)\n\t\t\t\t\trpt.rl.LogError(4, string.Format(\"'{0}' is an invalid HTML color.\", sc));\n\t\t\t}\n\n\t\t\treturn c;\n\t\t}\n\n\t\tstatic internal int Integer(string i)\n\t\t{\n\t\t\treturn Convert.ToInt32(i);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Takes an arbritrary string and returns a string that can be embedded in an\n\t\t/// XML element.  For example, '&lt;' is changed to '&amp;lt;'\n\t\t/// </summary>\n\t\t/// <param name=\"s\"></param>\n\t\t/// <returns></returns>\n\t\tstatic public string XmlAnsi(string s)\n\t\t{\n\t\t\tStringBuilder rs = new StringBuilder(s.Length);\n\n\t\t\tforeach (char c in s)\n\t\t\t{\n\t\t\t\tif (c == '<')\n\t\t\t\t\trs.Append(\"&lt;\");\n\t\t\t\telse if (c == '&')\n\t\t\t\t\trs.Append(\"&amp;\");\n\t\t\t\telse if ((int) c <= 127)\t// in ANSI range\n\t\t\t\t\trs.Append(c);\n\t\t\t\telse\n\t\t\t\t\trs.Append(\"&#\" + ((int) c).ToString() + \";\");\n\t\t\t}\n\n\t\t\treturn rs.ToString();\n\t\t}\n        /// <summary>\n        /// Takes an arbritrary string and returns a string that can be handles unicode\n        /// </summary>\n        /// <param name=\"s\"></param>\n        /// <returns></returns>\n        static public string HtmlAnsi(string s)\n        {\n            StringBuilder rs = new StringBuilder(s.Length);\n\n            foreach (char c in s)\n            {\n                if ((int)c <= 127)\t// in ANSI range\n                    rs.Append(c);\n                else\n                    rs.Append(\"&#\" + ((int)c).ToString() + \";\");\n            }\n\n            return rs.ToString();\n        }\n\n\t\tstatic internal void XslTrans(string xslFile, string inXml, Stream outResult)\n\t\t{\n\t\t\tXmlDocument xDoc = new XmlDocument();\n\t\t\txDoc.LoadXml(inXml);\n\n            XslCompiledTransform xslt = new XslCompiledTransform();\n\n\t\t\t//Load the stylesheet.\n\t\t\txslt.Load(xslFile);\n\n\t\t\txslt.Transform(xDoc,null,outResult);\n           \n\t\t\treturn;\n\t\t}\n\n\t\tstatic internal string EscapeXmlAttribute(string s)\n\t\t{\n\t\t\tstring result;\n\n\t\t\tresult = s.Replace(\"'\", \"&#39;\");\n\n\t\t\treturn result;\n\t\t}\n\t\t/// <summary>\n\t\t/// Loads assembly from file; tries up to 3 time; load with name, load from BaseDirectory, \n\t\t/// and load from BaseDirectory concatenated with Relative directory.\n\t\t/// </summary>\n\t\t/// <param name=\"s\"></param>\n\t\t/// <returns></returns>\n\t\tstatic internal Assembly AssemblyLoadFrom(string s)\n\t\t{\n\t\t\tAssembly ra=null;\n\t\t\ttry\n\t\t\t{\t// try 1) loading just from name\n                if (System.IO.File.Exists(s))\n                {\n                    ra = Assembly.LoadFrom(s);\n                }\n                else\n                {\n                    string path = System.IO.Path.Combine(RdlEngineConfig.DirectoryLoadedFrom, s);\n                    ra = Assembly.LoadFrom(path);\n                }\n\t\t\t}\n\t\t\tcatch\n\t\t\t{\t// try 2) loading from the various directories available\n                string d0 = RdlEngineConfig.DirectoryLoadedFrom;\n                string d1 = AppDomain.CurrentDomain.BaseDirectory;\n                string d2 = AppDomain.CurrentDomain.RelativeSearchPath;\n                if (d2 == null || d2 == string.Empty)\n                    ra = AssemblyLoadFromPvt(Path.GetFileName(s), d0, d1);\n                else\n                    ra = AssemblyLoadFromPvt(Path.GetFileName(s), d0, d1, d2);\n\t\t\t}\n\n\t\t\treturn ra;\n\t\t}\n\n        static Assembly AssemblyLoadFromPvt(string file, params string[] dir)\n        {\n            Assembly ra = null;\n            // EBN: check if the assembly is already loaded\n            foreach (Assembly loadedAssembly in AppDomain.CurrentDomain.GetAssemblies())\n            {\n                if (loadedAssembly.ManifestModule.Name == file)\n                {\n                    ra = loadedAssembly;\n                    return ra;\n                }\n            }\n\n\n            for (int i = 0; i < dir.Length; i++)\n            {\n                if (dir[i] == null)\n                    continue;\n\n                string f = dir[i] + file;\n                try\n                {\n                    ra = Assembly.LoadFile(f);\n                    if (ra != null)             // don't really need this as call will throw exception when it fails\n                        break;\n                }\n                catch \n                {\n                    if (i + 1 == dir.Length)\n                    {  // on last try just plain load of the file\n                        ra = Assembly.Load(file);\n                    }\n                }\n            }\n            return ra;\n        }\n\n        static internal MethodInfo GetMethod(Type t, string method, Type[] argTypes)\n        {\n            if (t == null || method == null)\n                return null;\n\n            MethodInfo mInfo = t.GetMethod(method,\n               BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Static, null,       // TODO: use Laxbinder class\n               argTypes, null);\n            if (mInfo == null)\n                mInfo = t.GetMethod(method, argTypes);  // be less specific and try again (Code VB functions don't always get caught?)\n            if (mInfo == null)\n            {\n                // Try to find method in base classes --- fix thanks to jonh\n                Type b = t.BaseType;\n                while (b != null)\n                {\n                    //                    mInfo = b.GetMethod(method, argTypes);\n                    mInfo = b.GetMethod(method,\n                        BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly,\n                        null, argTypes, null);\n                    if (mInfo != null)\n                        break;\n                    b = b.BaseType;\n                }\n            }\n            return mInfo;\n        }\n\n        static internal Type GetTypeFromTypeCode(TypeCode tc)\n\t\t{\n\t\t\tType t =null;\n\t\t\tswitch (tc)\n\t\t\t{\n\t\t\t\tcase TypeCode.Boolean:\n\t\t\t\t\tt = Type.GetType(\"System.Boolean\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase TypeCode.Byte:\n\t\t\t\t\tt = Type.GetType(\"System.Byte\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase TypeCode.Char:\n\t\t\t\t\tt = Type.GetType(\"System.Char\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase TypeCode.DateTime:\n\t\t\t\t\tt = Type.GetType(\"System.DateTime\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase TypeCode.Decimal:\n\t\t\t\t\tt = Type.GetType(\"System.Decimal\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase TypeCode.Double:\n\t\t\t\t\tt = Type.GetType(\"System.Double\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase TypeCode.Int16:\n\t\t\t\t\tt = Type.GetType(\"System.Int16\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase TypeCode.Int32:\n\t\t\t\t\tt = Type.GetType(\"System.Int32\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase TypeCode.Int64:\n\t\t\t\t\tt = Type.GetType(\"System.Int64\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase TypeCode.Object:\n\t\t\t\t\tt = Type.GetType(\"System.Object\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase TypeCode.SByte:\n\t\t\t\t\tt = Type.GetType(\"System.SByte\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase TypeCode.Single:\n\t\t\t\t\tt = Type.GetType(\"System.Single\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase TypeCode.String:\n\t\t\t\t\tt = Type.GetType(\"System.String\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase TypeCode.UInt16:\n\t\t\t\t\tt = Type.GetType(\"System.UInt16\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase TypeCode.UInt32:\n\t\t\t\t\tt = Type.GetType(\"System.UInt32\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase TypeCode.UInt64:\n\t\t\t\t\tt = Type.GetType(\"System.UInt64\");\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tt = Type.GetType(\"Object\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn t;\n\t\t}\n    \n        static internal object GetConstFromTypeCode(TypeCode tc)\n        {\n            object t = null;\n            switch (tc)\n            {\n                case TypeCode.Boolean:\n                    t = (object)true;\n                    break;\n                case TypeCode.Byte:\n                    t = (object) Byte.MinValue;\n                    break;\n                case TypeCode.Char:\n                    t = (object)Char.MinValue;\n                    break;\n                case TypeCode.DateTime:\n                    t = (object)DateTime.MinValue;\n                    break;\n                case TypeCode.Decimal:\n                    t = (object)Decimal.MinValue;\n                    break;\n                case TypeCode.Double:\n                    t = (object)Double.MinValue;\n                    break;\n                case TypeCode.Int16:\n                    t = (object)Int16.MinValue;\n                    break;\n                case TypeCode.Int32:\n                    t = (object)Int32.MinValue;\n                    break;\n                case TypeCode.Int64:\n                    t = (object)Int64.MinValue;\n                    break;\n                case TypeCode.Object:\n                    t = (object) \"\";\n                    break;\n                case TypeCode.SByte:\n                    t = (object)SByte.MinValue;\n                    break;\n                case TypeCode.Single:\n                    t = (object)Single.MinValue;\n                    break;\n                case TypeCode.String:\n                    t = (object)\"\";\n                    break;\n                case TypeCode.UInt16:\n                    t = (object)UInt16.MinValue;\n                    break;\n                case TypeCode.UInt32:\n                    t = (object)UInt32.MinValue;\n                    break;\n                case TypeCode.UInt64:\n                    t = (object)UInt64.MinValue;\n                    break;\n                default:\n                    t = (object)\"\";\n                    break;\n            }\n            return t;\n        }\n\n        internal static string XmlFileExists(string type)\n        {\n            if (!type.EndsWith(\"xml\", StringComparison.InvariantCultureIgnoreCase))\n                type += \".xml\";\n\n            string d0 = RdlEngineConfig.DirectoryLoadedFrom;\n            string d1 = AppDomain.CurrentDomain.BaseDirectory;\n            string d2 = AppDomain.CurrentDomain.RelativeSearchPath;\n            return FileExistsFrom(type, d0, d1, d2);\n\t\t}\n        \n        static string FileExistsFrom(string file, params string[] dir)\n        {\n            for (int i = 0; i < dir.Length; i++)\n            {\n                if (dir[i] == null || dir[i] == string.Empty)\n                    continue;\n\n                string f = Path.Combine(dir[i], file);  // Issue #37\n                if (File.Exists(f))\n                    return f;\n            }\n            // ok check to see if we can load without any directory\n            return File.Exists(file)? file: null;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Runtime/ZipWrap.cs",
    "content": "\nusing System;\nusing System.Xml;\nusing System.Collections;\nusing System.Reflection;\nusing System.IO;\nusing System.Text;\nusing Majorsilence.Reporting.Rdl;\n\nnamespace Majorsilence.Reporting.Rdl\n{\n    /// <summary>\n    /// ZipWrap loads the SharpZipLib dll and facilitates the wrapping of ZipOutputStream and ZipEntry \n    /// </summary>\n    public class ZipWrap\n    {\n        // \tpublic static void Main(string[] args)\n        // \t{\n        // \t\tstring[] filenames = Directory.GetFiles(args[0]);\n        // \t\tbyte[] buffer = new byte[4096];\n        // \t\t\n        // \t\tusing ( ZipOutputStream s = new ZipOutputStream(File.Create(args[1])) ) {\n        // \t\t\n        // \t\t\ts.SetLevel(9); // 0 - store only to 9 - means best compression\n        // \t\t\n        //if (e.Name != sourceDirectory_) {\n        //    ZipEntry entry = entryFactory_.MakeDirectoryEntry(e.Name);\n        //    outputStream_.PutNextEntry(entry);\n        // \t\t\tforeach (string file in filenames) {\n        // \t\t\t\tZipEntry entry = new ZipEntry(file);\n        // \t\t\t\ts.PutNextEntry(entry);\n        //\n        // \t\t\t\tusing (FileStream fs = File.OpenRead(file)) {\n        //\t\t\t\t\t\tStreamUtils.Copy(fs, s, buffer);\n        // \t\t\t\t}\n        // \t\t\t}\n        // \t\t}\n        // \t}\n\n        static readonly string ZIPNAME = \"ICSharpCode.SharpZipLib.dll\";\n        static string _ZipError = \"Call ZipWrap.Init() before instantiating this class\";\n        static Assembly _Assembly = null;\n\n        static public void Init()\n        {\n            if (_Assembly != null)\n                return;\n            lock (typeof(ZipWrap))\n            {\n                try\n                {\n                    _Assembly = XmlUtil.AssemblyLoadFrom(ZIPNAME);\n                    _ZipError = string.Empty;\n                }\n                catch (Exception ex)\n                {\n                    _ZipError = ex.Message;      // record error for later\n                }\n            }\n        }\n        static public Assembly ZipAssembly\n        {\n            get { return _Assembly; }\n        }\n        static public string ZipError\n        {\n            get { return _ZipError; }\n        }\n        static public void PropertySettingByEnum(object classInstance,Type classType,string propertyName,string desiredValue)\n        {\n            PropertyInfo dstPropertyInfo = classType.GetProperty(propertyName);\n            Type enumType = dstPropertyInfo.PropertyType;\n            object value2change = Enum.Parse(enumType, desiredValue);\n            dstPropertyInfo.SetValue(classInstance, value2change, null);\n        }\n    }\n\n    public class ZipOutputStream\n    {\n        object _ZipOutputStream;\n        MethodInfo _PutNextEntry;\n        MethodInfo _Write;\n        MethodInfo _Finish;\n        MethodInfo _Close;\n\n        public ZipOutputStream(Stream baseOutputStream)\n        {\n            if (ZipWrap.ZipAssembly == null)\n                throw new ArgumentNullException(ZipWrap.ZipError);\n\n            object[] args = new object[] { baseOutputStream };\n\n            _ZipOutputStream = ZipWrap.ZipAssembly.CreateInstance(\"ICSharpCode.SharpZipLib.Zip.ZipOutputStream\", false,\n                BindingFlags.CreateInstance, null, args, null, null);\n            \n            Type theClassType= _ZipOutputStream.GetType();\n            ZipWrap.PropertySettingByEnum(_ZipOutputStream, theClassType, \"UseZip64\",\"Off\");\n            this._PutNextEntry = theClassType.GetMethod(\"PutNextEntry\");\n            Type[] types = new Type[3];\n            types[0] = typeof(byte[]);\n            types[1] = typeof(int);\n            types[2] = typeof(int);\n            this._Write = theClassType.GetMethod(\"Write\", types);\n            types = new Type[0];\n            this._Finish = theClassType.GetMethod(\"Finish\", types);\n            this._Close = theClassType.GetMethod(\"Close\", types);\n        }\n        \n        public Stream ZipStream\n        {\n            get { return _ZipOutputStream as Stream; }\n        }\n        public void PutNextEntry(ZipEntry ze)\n        {\n            object[] args = new object[] { ze.Value };\n            _PutNextEntry.Invoke(_ZipOutputStream, args);\n        }\n\n        public void Write(string str)\n        {\n            byte[] ubuf = Encoding.Unicode.GetBytes(str);\n            Encoding enc = Encoding.GetEncoding(65001); // utf-8\n            byte[] abuf = Encoding.Convert(Encoding.Unicode, enc, ubuf);\n\n            Write(abuf, 0, abuf.Length);\n        }\n\n        public void Write(byte[] buffer, int offset, int count)\n        {\n            object[] args = new object[] { buffer, offset, count };\n            _Write.Invoke(_ZipOutputStream, args);\n        }\n\n        public void Finish()\n        {\n            _Finish.Invoke(_ZipOutputStream, null);\n        }\n\n        public void Close()\n        {\n            _Close.Invoke(_ZipOutputStream, null);\n        }\n    }\n\n    public class ZipEntry\n    {\n        object _ZipEntry;\n\n        public ZipEntry(string name)\n        {\n            if (ZipWrap.ZipAssembly == null)\n                throw new ArgumentNullException(ZipWrap.ZipError);\n\n            object[] args = new object[] { name };\n\n            _ZipEntry = ZipWrap.ZipAssembly.CreateInstance(\"ICSharpCode.SharpZipLib.Zip.ZipEntry\", false,\n                BindingFlags.CreateInstance, null, args, null, null);\n        }\n\n        public object Value\n        {\n            get { return _ZipEntry; }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Utility/HttpClientExtension.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl.Utility\n{\n    public static class HttpClientExtension\n    {\n        public static void AddMajorsilenceReportingUserAgent(this HttpClient client)\n        {\n            if (client.DefaultRequestHeaders.UserAgent.Count == 0)\n            {\n                client.DefaultRequestHeaders.UserAgent.ParseAdd(\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3 MajorsilenceReporting/1.0\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/Utility/Measurement.cs",
    "content": "﻿/*\n * This file is part of reportFU, based on the work of \n * Kim Sheffield and the fyiReporting project. \n *\n * Copyright (c) 2010 devFU Pty Ltd, Josh Wilson and Others (http://reportfu.org)\n * \n * Prior Copyrights:\n * _________________________________________________________\n * |Copyright (C) 2004-2008  fyiReporting Software, LLC     |\n * |For additional information, email info@fyireporting.com |\n * |or visit the website www.fyiReporting.com.              |\n * =========================================================\n *\n * License:\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n*/\n\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n#if DRAWINGCOMPAT\nusing Drawing = Majorsilence.Drawing;\nusing Drawing2D = Majorsilence.Drawing.Drawing2D;\n#else\nusing Drawing = System.Drawing;\nusing Drawing2D = System.Drawing.Drawing2D;\n#endif\n\nnamespace Majorsilence.Reporting.Rdl.Utility\n{\n    /// <summary>\n    /// A utility class that contains additional \n    /// methods for drawing and unit conversion (points/pixels).\n    /// </summary>\n    public sealed class Measurement\n    {\n        /// <summary>\n        /// A method used to obtain a rectangle from the screen coordinates supplied.\n        /// </summary>\n        public static Drawing.Rectangle RectFromPoints(Drawing.Point p1, Drawing.Point p2)\n        {\n            Drawing.Rectangle r = new Drawing.Rectangle();\n            // set the width and x of rectangle\n            if (p1.X < p2.X)\n            {\n                r.X = p1.X;\n                r.Width = p2.X - p1.X;\n            }\n            else\n            {\n                r.X = p2.X;\n                r.Width = p1.X - p2.X;\n            }\n            // set the height and y of rectangle\n            if (p1.Y < p2.Y)\n            {\n                r.Y = p1.Y;\n                r.Height = p2.Y - p1.Y;\n            }\n            else\n            {\n                r.Y = p2.Y;\n                r.Height = p1.Y - p2.Y;\n            }\n            return r;\n        }\n\n        /// <summary>\n        /// The constant value used to calculate the conversion of pixels into points, as a float.\n        /// </summary>\n        public const float POINTSIZE_F = 72.27f;\n        /// <summary>\n        /// The constant value used to calculate the conversion of pixels into points, as a decimal.\n        /// </summary>\n        public const decimal POINTSIZE_M = 72.27m;\n\n        public const float STANDARD_DPI_X = 96f;\n        public const float STANDARD_DPI_Y = 96f;\n\n        /// <summary>\n        /// A method used to convert pixels into points.\n        /// </summary>\n        /// <returns>A float containing the converted measurement of the pixels into points.</returns>\n        public static float PointsFromPixels(float pixels, float dpi)\n        {\n            return (pixels * POINTSIZE_F) / dpi;\n        }\n        /// <summary>\n        /// A method used to convert pixels into points.\n        /// </summary>\n        /// <returns>A PointF containing the point X and Y values for the pixel X and Y values that were supplied.</returns>\n        public static Drawing.PointF PointsFromPixels(float pixelsX, float pixelsY, Drawing.PointF Dpi)\n        {\n            return new Drawing.PointF(PointsFromPixels(pixelsX, Dpi.X), PointsFromPixels(pixelsY, Dpi.Y));\n        }\n        /// <summary>\n        /// A method used to convert points into pixels.\n        /// </summary>\n        /// <returns>An int containing the converted measurement of the points into pixels.</returns>\n        public static int PixelsFromPoints(float points, float dpi)\n        {\n            int r = (int)(((double)points * dpi) / POINTSIZE_F);\n            if (r == 0 && points > .0001f)\n                r = 1;\n            return r;\n        }\n        /// <summary>\n        /// A method used to convert points into pixels.\n        /// </summary>\n        /// <returns>A PointF containing the pixel X and Y values for the point X and Y values that were supplied.</returns>\n        public static Drawing.PointF PixelsFromPoints(float pointsX, float pointsY, Drawing.PointF Dpi)\n        {\n            return new Drawing.PointF(PixelsFromPoints(pointsX, Dpi.X), PixelsFromPoints(pointsY, Dpi.Y));\n        }\n        /// <summary>\n        /// A method used to convert points into twips.\n        /// </summary>\n        /// <returns>An int containing the twips for the number of points that were supplied.</returns>\n        public static int TwipsFromPoints(float points)\n        {\n            return (int)Math.Round(points * 20, 0);\n        }\n        /// <summary>\n        /// A method used to convert pixels into twips.\n        /// </summary>\n        /// <returns>An int containing the twips for the number of pixels that were supplied.</returns>\n        public static int TwipsFromPixels(float pixels, float dpi)\n        {\n            return TwipsFromPoints(PointsFromPixels(pixels, dpi));\n        }\n\n        #region Obsolete Methods\n        /// <summary>\n        /// A method used to convert Pixels into Points. Obsolete. Use PointsFromPixels instead.\n        /// </summary>\n        /// <returns>A float containing the converted measurement of the pixels into points.</returns>\n        [System.Obsolete(\"This method has been deprecated. Use PointsFromPixels() instead.\")]\n        public static float PointsX(float pixelX, float dpi)// pixels to points\n        {\n            return PointsFromPixels(pixelX, dpi);\n        }\n        /// <summary>\n        /// A method used to convert Pixels into Points. Obsolete. Use PointsFromPixels instead.\n        /// </summary>\n        /// <returns>A float containing the converted measurement of the pixels into points.</returns>\n        [System.Obsolete(\"This method has been deprecated. Use PointsFromPixels() instead.\")]\n        public static float PointsY(float pixelY, float dpi)\n        {\n            return PointsFromPixels(pixelY, dpi);\n        }\n\n        /// <summary>\n        /// A method used to convert Points into Pixels. Obsolete. Use PixelsFromPoints instead.\n        /// </summary>\n        /// <returns>An int containing the converted measurement of the points into pixels.</returns>\n        [System.Obsolete(\"This method has been deprecated. Use PixelsFromPoints() instead.\")]\n        public static int PixelsX(float pointX, float dpi)// points to pixels\n        {\n            return PixelsFromPoints(pointX, dpi);\n        }\n        /// <summary>\n        /// A method used to convert Points into Pixels. Obsolete. Use PixelsFromPoints instead.\n        /// </summary>\n        /// <returns>An int containing the converted measurement of the points into pixels.</returns>\n        [System.Obsolete(\"This method has been deprecated. Use PixelsFromPoints() instead.\")]\n        public static int PixelsY(float pointY, float dpi)\n        {\n            return PixelsFromPoints(pointY, dpi);\n        }\n        #endregion\n    }\n}"
  },
  {
    "path": "RdlEngine/Utility/Paths.cs",
    "content": "﻿using NPOI.HSSF.Record.Common;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.Rdl.Utility\n{\n    public static class Paths\n    {\n        public static string MajorsilenceRoamingFolder()\n        {\n            string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), \"MajorsilenceReporting\");\n            if (!Directory.Exists(path))\n            {\n                Directory.CreateDirectory(path);\n            }\n            return path;\n        }\n\n        public static string MajorsilenceLocalFolder()\n        {\n            string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), \"MajorsilenceReporting\");\n            if (!Directory.Exists(path))\n            {\n                Directory.CreateDirectory(path);\n            }\n            return path;\n        }\n\n        public static string MajorsilenceLocalStreamHacksFolder()\n        {\n            string path = System.IO.Path.Combine(MajorsilenceLocalFolder(), \"stream-hacks\");\n            if (!Directory.Exists(path))\n            {\n                Directory.CreateDirectory(path);\n            }\n            return path;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlEngine/usa_map.xml",
    "content": "<MapData>\n  <Polygon>\n    <Points>32,4,30,9,32,16,32,24,30,32,30,36,39,42,40,50,53,52,61,55,71,55,82,54,92,58,100,58,100,52,109,14,54,2,53,7,53,12,54,17,50,22,46,27,45,21,49,15,48,12,32,4</Points>\n    <Keys>WA,Washington</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>8,99,8,91,8,86,31,39,39,42,39,50,51,51,58,55,81,55,100,58,105,65,99,76,93,83,95,87,86,119,8,99</Points>\n    <Keys>OR,Oregon</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>7,99,55,112,43,156,92,231,96,237,96,244,92,247,91,253,87,257,88,263,84,266,55,261,54,260,53,251,46,242,43,241,43,237,38,234,30,227,20,221,21,212,17,210,10,191,11,186,13,183,9,171,13,171,12,168,12,164,9,164,5,161,2,149,3,139,1,127,2,118,7,111,7,99</Points>\n    <Keys>CA,California</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>110,12,120,16,116,31,119,38,123,45,127,53,131,56,127,63,125,71,127,72,132,71,134,78,134,84,138,87,139,93,154,92,156,90,159,94,153,132,87,119,96,87,94,84,105,66,100,58,100,52,110,12</Points>\n    <Keys>ID,Idaho</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>120,17,178,27,241,34,235,94,198,91,161,87,159,94,155,90,153,92,144,92,139,92,138,87,134,84,132,70,128,71,125,70,127,63,131,55,126,53,119,39,116,30,120,17</Points>\n    <Keys>MN,Montana</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>236,95,231,156,152,147,153,132,159,93,161,87,236,95</Points>\n    <Keys>WY,Wyoming</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>241,34,311,37,311,50,314,58,314,68,315,76,317,78,317,83,272,83,237,81,241,34</Points>\n    <Keys>ND,North Dakota</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>237,81,275,83,316,84,313,90,318,93,318,121,317,125,317,128,317,136,308,132,302,131,301,133,294,129,272,128,244,126,238,127,233,125,237,81</Points>\n    <Keys>SD,South Dakota</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>233,125,237,127,246,126,270,127,293,129,301,133,304,132,316,136,319,142,321,145,322,151,323,157,325,167,330,176,253,174,253,158,230,156,233,125</Points>\n    <Keys>NE,Nebraska</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>253,174,329,176,336,178,334,181,336,186,339,189,339,221,339,222,291,221,249,220,253,174</Points>\n    <Keys>KS,Kansas</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>238,220,339,222,340,233,341,241,342,273,342,274,335,271,332,270,331,272,326,270,323,271,319,272,315,271,311,270,309,272,308,270,305,271,302,268,300,271,296,267,292,267,287,266,282,262,278,262,274,259,274,230,238,227,238,220</Points>\n    <Keys>OK,Oklahoma</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>238,227,231,296,186,292,185,296,188,298,191,301,198,309,207,318,208,323,209,329,214,335,219,339,224,342,228,342,231,338,234,332,238,332,239,330,242,332,247,332,252,334,259,341,265,353,273,366,275,367,276,371,276,376,278,377,282,385,285,386,288,387,293,391,299,391,304,394,307,392,305,385,302,379,304,373,301,370,305,370,306,367,304,364,308,364,309,360,312,358,313,354,315,356,317,354,319,354,326,350,333,346,334,343,337,341,336,335,339,334,339,339,344,337,350,335,354,330,354,326,353,320,355,315,352,306,352,302,347,297,348,276,347,275,344,275,341,273,336,271,332,270,330,271,326,269,319,272,311,269,309,272,308,269,304,271,302,268,300,271,296,267,289,266,284,264,281,261,277,261,274,258,273,230,238,227</Points>\n    <Keys>TX,Texas</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>165,212,237,220,238,227,230,296,186,292,184,296,171,294,165,294,164,300,153,299,165,212</Points>\n    <Keys>NM,New Mexico</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>106,202,103,214,102,217,96,214,95,222,94,230,92,231,95,237,96,244,92,247,91,252,87,256,88,263,84,265,83,269,129,296,153,298,165,213,106,202</Points>\n    <Keys>AR,Arizona</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>54,111,42,156,92,231,94,230,96,214,102,216,106,202,120,126,54,111</Points>\n    <Keys>NV,Nevada</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>120,125,153,132,151,146,174,150,166,211,163,213,106,202,120,125</Points>\n    <Keys>UT,Utah</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>325,167,341,166,372,165,375,168,375,175,378,181,384,185,385,190,387,190,392,192,391,197,390,201,400,209,402,216,404,218,406,220,406,226,403,226,402,231,400,235,393,236,395,230,393,228,340,229,338,222,338,189,335,186,334,181,336,178,329,175,325,167</Points>\n    <Keys>MO,Missouri</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>57,321,54,323,48,329,46,329,45,331,51,337,50,338,48,337,46,337,42,338,43,341,46,344,50,344,52,343,52,346,49,348,47,348,46,350,44,353,45,355,47,356,46,359,47,360,50,358,50,360,50,364,53,362,55,364,59,363,58,365,57,368,54,371,52,373,49,374,47,376,45,377,50,375,52,375,52,376,54,374,56,373,57,370,60,369,63,365,64,362,64,360,66,356,68,355,68,358,69,360,71,358,72,356,71,354,75,354,80,356,86,355,88,356,91,356,93,358,98,362,102,361,104,361,103,363,106,365,106,363,107,361,109,364,108,360,103,358,94,351,92,354,89,353,84,352,75,323,62,323,57,321</Points>\n    <Keys>AK,Alaska</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>165,377,164,379,163,380,164,381,164,383,166,384,168,383,171,382,170,379,165,377</Points>\n    <Keys>HI,Hawaii</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>155,370,159,370,161,372,163,373,160,374,157,373,155,370</Points>\n    <Keys>HI,Hawaii</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>148,367,151,367,152,369,148,367</Points>\n    <Keys>HI,Hawaii</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>141,363,139,364,142,365,141,363</Points>\n    <Keys>HI,Hawaii</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>136,365,136,365,137,364,136,365</Points>\n    <Keys>HI,Hawaii</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>348,283,384,283,386,287,388,293,384,299,382,304,380,301,381,306,381,309,380,313,384,313,399,312,404,312,404,315,404,318,407,322,406,327,407,328,409,326,410,330,407,332,408,334,411,337,415,340,412,342,407,339,404,336,401,335,403,338,401,338,402,340,401,341,398,339,396,339,392,342,391,339,389,341,386,337,382,335,381,332,379,334,378,332,374,333,375,335,372,337,363,334,359,333,359,330,357,333,351,334,354,330,354,325,352,320,354,315,352,306,352,302,347,296,348,283</Points>\n    <Keys>LA,Louisiana</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>394,251,395,252,392,255,391,260,387,262,387,264,385,268,385,271,383,275,385,279,383,282,386,287,388,293,384,298,381,303,379,300,381,306,380,312,389,312,398,312,403,312,404,318,406,322,405,326,407,327,409,324,411,322,415,321,416,320,419,321,423,321,422,314,421,249,394,251</Points>\n    <Keys>MS,Mississippi</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>339,228,393,227,395,230,392,236,400,235,400,237,398,239,399,241,396,245,397,248,394,251,394,251,391,254,391,259,387,262,386,263,384,267,385,271,382,274,384,278,382,282,347,282,348,275,346,275,343,274,341,274,341,240,339,228</Points>\n    <Keys>AR,Arkansas</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>317,122,344,121,371,121,375,119,376,122,376,125,377,130,379,133,382,133,383,136,385,138,388,142,388,144,386,146,386,149,383,151,380,152,379,155,381,158,379,163,376,164,375,167,372,164,324,166,321,145,317,136,317,122</Points>\n    <Keys>IA,Iowa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>311,37,311,50,314,58,313,68,314,75,316,78,316,83,313,89,318,92,318,121,344,120,371,121,374,119,374,114,368,109,363,106,359,103,358,97,357,91,357,89,356,88,358,84,362,80,362,71,374,61,378,55,385,53,388,50,383,48,376,48,375,47,371,50,369,50,367,49,365,48,363,48,362,45,359,47,356,42,349,42,347,44,344,42,340,42,339,41,336,40,336,34,333,31,332,31,331,36,330,37,311,37</Points>\n    <Keys>MI,Minnesota</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>362,70,364,70,367,71,371,69,377,66,377,68,377,72,380,71,383,72,385,75,388,77,395,77,399,79,405,80,407,82,410,83,410,87,410,89,412,90,413,92,413,95,411,97,410,100,412,100,413,97,414,96,416,94,417,91,419,90,419,94,417,97,416,101,414,103,414,107,414,114,413,118,413,121,412,124,415,127,414,132,408,133,396,134,385,135,383,136,382,133,379,132,377,130,376,125,376,122,374,118,373,113,367,108,359,102,356,91,357,89,355,87,357,83,362,80,362,70</Points>\n    <Keys>WI,Wisconsin</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>383,136,385,135,405,133,414,132,415,137,418,142,420,146,420,158,421,160,421,172,421,174,422,185,423,190,422,193,421,197,419,201,418,205,418,206,418,209,419,211,416,211,414,212,414,215,415,217,412,217,408,215,404,218,401,216,400,208,390,200,392,192,386,190,384,189,384,185,378,180,375,175,374,167,376,164,379,163,381,157,378,155,380,152,382,151,386,148,386,146,388,144,388,141,383,136</Points>\n    <Keys>IL,Illinois</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>383,72,384,74,387,77,395,76,398,78,405,79,406,81,409,82,409,88,412,89,413,91,417,84,419,81,420,82,421,81,423,80,423,81,423,83,426,81,426,78,432,77,434,75,437,75,440,76,442,78,443,75,444,75,447,75,451,74,450,73,448,71,447,67,445,69,439,69,438,64,433,66,427,66,422,71,419,70,418,69,416,70,414,70,409,65,405,65,404,64,403,66,402,63,404,62,408,57,405,56,399,61,398,63,392,67,389,67,383,72</Points>\n    <Keys>MI,Michigan</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>427,143,430,140,430,136,432,133,431,124,429,118,427,113,427,108,427,105,428,104,429,97,430,96,430,93,432,92,435,89,436,90,435,93,435,95,437,94,438,91,437,88,438,86,441,85,440,82,441,79,442,78,444,80,446,81,449,81,450,83,453,83,454,84,457,84,459,86,460,87,459,87,457,89,461,92,460,99,459,101,458,103,456,105,455,108,456,110,459,110,462,106,462,106,465,103,467,103,471,110,472,115,473,119,473,123,470,124,469,128,467,131,466,134,465,137,465,139,463,141,457,141,450,142,449,141,427,143</Points>\n    <Keys>MI,Michigan</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>419,146,423,145,426,143,436,142,449,141,450,142,451,146,451,155,452,164,453,172,454,182,453,185,454,186,453,187,451,187,448,188,447,190,448,191,446,194,444,196,443,198,442,199,440,199,438,197,437,199,436,202,436,203,433,202,431,201,429,204,426,203,424,203,423,204,420,204,418,204,419,201,420,196,423,190,421,174,420,159,420,156,420,148,419,146</Points>\n    <Keys>IN,Indiana</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>406,226,406,219,404,218,407,214,412,217,415,217,413,215,413,212,416,210,418,211,418,208,417,204,422,204,424,203,425,203,428,204,431,201,435,203,435,201,437,197,439,198,439,198,442,198,443,196,445,194,447,191,446,190,447,188,451,187,453,187,454,185,453,184,454,181,459,181,461,184,461,185,465,185,466,186,469,186,471,186,473,186,477,184,480,186,482,189,482,192,487,199,490,201,490,202,485,207,485,207,481,213,479,214,478,215,472,218,469,219,460,220,442,221,426,223,420,223,420,225,413,226,406,226</Points>\n    <Keys>KY,Kentucky</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>402,226,413,226,420,225,419,222,426,222,442,220,457,220,470,219,474,217,485,217,497,214,497,218,495,219,494,222,491,222,487,226,485,226,482,231,479,230,476,234,473,235,470,237,471,239,470,239,467,240,467,244,451,246,439,247,428,248,393,251,396,248,395,245,399,241,398,239,400,237,400,235,402,231,402,226</Points>\n    <Keys>TN,Tennessee</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>421,248,440,247,451,246,459,272,465,286,464,287,464,292,462,293,463,296,464,298,465,303,466,306,450,308,439,309,433,310,432,312,435,314,436,319,434,319,433,321,430,322,431,319,429,317,428,314,427,316,426,319,426,321,425,320,422,320,422,313,421,294,421,248</Points>\n    <Keys>AL,Alabama</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>435,319,434,314,432,312,433,309,441,308,450,307,466,306,469,310,473,310,487,309,503,308,504,311,505,310,506,304,508,304,509,305,512,304,513,307,513,309,512,310,514,310,516,312,517,314,517,317,517,319,519,320,521,324,523,327,526,330,527,332,529,334,530,336,530,341,534,346,537,352,540,356,543,362,543,375,542,378,541,377,541,379,541,382,541,384,542,385,541,387,540,388,538,391,536,392,537,389,539,386,537,387,535,387,531,387,528,381,524,378,520,377,519,375,518,372,514,368,514,364,513,363,512,363,512,365,508,362,505,356,506,352,506,350,504,348,503,352,502,351,501,345,503,340,501,334,499,331,496,330,491,326,482,318,477,319,477,322,475,322,471,325,467,326,464,326,462,323,459,320,459,318,456,319,454,318,450,316,448,317,445,317,443,317,440,317,439,316,438,318,435,319</Points>\n    <Keys>FL,Florida</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>451,245,467,244,476,243,482,243,482,244,481,247,483,248,487,250,487,252,493,258,495,258,496,260,498,262,501,263,503,267,506,268,507,269,508,270,508,273,513,278,514,282,515,282,515,285,513,286,514,289,513,290,514,291,513,293,512,295,512,297,511,298,512,300,512,301,512,304,509,305,507,304,505,303,505,309,504,310,502,308,484,308,475,309,468,309,465,305,464,298,462,292,464,291,464,286,465,285,459,272,451,245</Points>\n    <Keys>GA,Georgia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>467,243,467,240,469,239,471,239,470,237,472,235,475,234,479,230,482,231,485,225,486,226,491,222,493,222,494,219,496,218,497,214,512,213,525,211,541,208,565,204,567,204,568,205,569,208,567,208,565,208,565,210,563,211,561,210,561,212,561,213,558,211,558,214,559,215,560,214,562,213,565,212,567,213,568,215,568,213,570,211,571,210,573,212,574,214,575,216,575,218,575,220,572,222,573,220,573,218,571,215,571,215,569,218,568,220,566,221,561,221,559,222,562,223,562,225,562,227,565,227,567,227,569,226,568,227,566,230,564,232,563,232,559,234,554,236,549,244,549,247,545,248,541,249,525,238,522,238,521,240,514,240,514,241,513,240,508,236,506,236,497,237,491,238,487,239,482,243,467,243</Points>\n    <Keys>NC,North Carolina</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>541,249,541,250,537,256,536,257,536,259,534,260,534,260,535,262,534,264,531,266,529,269,528,270,524,272,525,273,524,275,520,275,517,276,518,277,517,280,515,281,514,281,513,277,508,273,507,269,505,268,503,266,501,263,497,262,495,259,494,258,487,252,487,250,481,246,482,242,487,238,492,237,504,236,507,236,508,236,514,240,514,239,521,240,521,238,525,237,541,249</Points>\n    <Keys>SC,South Carolina</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>474,217,485,216,497,214,511,212,517,212,538,208,553,205,565,203,566,203,566,200,565,199,563,197,561,197,560,199,559,199,556,196,554,196,549,195,554,194,555,193,553,190,556,192,559,191,558,188,557,185,557,183,555,180,551,180,547,178,543,177,544,174,545,170,541,169,540,165,536,165,535,167,532,166,529,165,529,168,528,171,526,174,523,176,522,177,522,181,521,183,517,186,516,189,512,192,511,195,511,196,511,199,507,200,504,201,502,203,499,204,496,205,492,204,490,201,490,201,488,203,484,207,480,213,479,214,474,217</Points>\n    <Keys>VA,Virgina</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>450,142,457,141,462,141,464,139,468,140,470,141,471,143,473,142,475,143,479,141,482,139,483,140,490,135,496,131,498,137,499,143,500,148,501,151,500,153,501,156,500,157,499,161,499,163,499,167,496,170,493,172,491,174,489,177,487,181,485,184,485,186,484,187,482,188,480,186,476,183,473,185,466,185,465,185,461,184,461,183,458,180,453,180,452,165,451,154,451,145,450,142</Points>\n    <Keys>OH,Ohio</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>482,188,484,186,485,183,488,178,492,173,492,172,495,170,499,167,499,160,499,157,500,156,501,154,502,157,503,160,502,164,503,165,511,164,514,163,515,166,516,169,520,166,524,164,526,164,528,162,530,162,532,162,534,163,536,165,535,167,529,165,529,168,526,173,524,175,522,177,522,180,519,184,517,186,516,188,512,192,511,195,510,198,504,201,502,202,496,204,492,203,490,201,487,199,482,192,482,188</Points>\n    <Keys>WV,West Virgina</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>495,131,505,125,505,126,506,128,524,125,542,122,554,119,558,121,560,125,563,127,563,129,562,131,561,133,561,135,561,138,561,139,568,145,562,152,559,152,556,155,545,156,532,159,520,161,514,162,511,164,503,164,502,164,502,159,501,154,500,152,501,151,498,137,495,131</Points>\n    <Keys>PA,Pennsylvania</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>505,125,506,124,513,115,512,113,510,110,511,107,517,105,527,105,528,104,533,104,535,102,540,98,539,94,539,90,538,90,540,85,549,73,567,68,568,79,570,89,572,90,575,102,575,113,578,126,577,127,577,129,576,130,578,131,580,130,583,129,586,128,588,127,589,126,591,124,591,126,593,125,595,124,595,126,593,128,590,129,586,131,583,133,580,134,578,135,577,136,574,135,575,133,574,131,570,129,563,127,560,124,557,120,553,118,541,122,506,127,505,125</Points>\n    <Keys>NY,New York</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>563,126,569,128,574,131,574,133,574,134,574,137,573,139,575,140,575,146,577,148,574,155,572,161,570,163,569,161,566,161,563,160,560,157,561,152,567,144,561,138,561,132,563,129,563,126</Points>\n    <Keys>NJ,New Jersey</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>513,162,529,159,545,156,555,155,558,155,559,158,560,163,561,168,563,173,568,172,570,174,569,176,569,179,568,179,567,182,566,185,564,189,564,193,562,186,564,183,565,180,563,182,561,178,559,176,557,177,555,174,556,172,554,169,555,165,553,162,555,160,554,158,553,161,550,163,549,164,551,166,552,170,552,173,552,175,553,177,555,180,550,180,546,177,542,177,545,169,541,168,539,165,535,164,533,162,532,161,528,161,526,164,523,163,520,166,515,169,513,162</Points>\n    <Keys>MD,Maryland</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>557,154,559,152,561,151,560,156,563,160,564,163,566,166,567,166,568,167,569,168,569,170,569,171,569,171,567,171,562,172,561,168,559,158,557,154</Points>\n    <Keys>DE,Delaware</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>563,127,574,131,574,134,573,136,573,138,575,140,574,145,576,148,574,153,572,160,570,163,569,161,565,160,563,159,560,157,562,152,568,144,561,138,561,131,563,127</Points>\n    <Keys>NJ,New Jersey</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>575,113,580,112,587,111,593,109,594,111,594,114,595,115,595,119,590,121,585,123,582,125,577,128,576,126,578,125,575,113</Points>\n    <Keys>CT,Connecticut</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>593,109,594,111,593,114,594,115,594,118,595,119,597,119,598,118,599,116,599,113,600,112,601,114,602,115,602,113,601,112,600,110,597,108,593,109</Points>\n    <Keys>RI,Rhode Island</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>575,103,580,102,583,101,588,100,594,98,596,97,598,94,601,94,601,95,603,96,602,98,602,99,601,102,602,103,605,103,606,106,607,107,608,108,610,109,613,108,613,106,612,104,610,104,611,103,614,103,614,105,615,107,615,109,613,110,612,110,611,111,608,112,607,111,605,112,604,114,602,112,600,110,596,108,592,108,586,110,581,111,575,112,575,103</Points>\n    <Keys>MA,Massachusetts</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>567,68,576,65,585,64,585,67,586,71,586,73,583,75,582,85,582,92,582,100,575,103,572,90,569,88,568,78,567,68</Points>\n    <Keys>VT,Vermont</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>585,64,586,61,586,59,589,59,596,85,599,88,601,91,601,94,597,93,596,96,588,100,582,100,583,85,582,75,586,73,586,71,584,67,585,64</Points>\n    <Keys>NH,New Hampshire</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>589,59,590,57,592,55,592,52,593,49,593,42,593,34,598,22,600,20,601,22,602,23,604,23,608,19,609,20,615,22,620,37,620,41,621,43,624,43,627,48,630,50,631,52,633,53,631,55,628,58,626,59,624,63,622,61,621,64,618,63,618,65,617,65,615,63,615,66,615,70,614,72,612,73,611,73,611,74,608,75,608,75,607,78,607,76,604,77,603,79,603,80,604,82,603,83,603,84,602,85,601,87,602,89,601,90,596,85,589,59</Points>\n    <Keys>ME,Maine</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>174,150,230,156,253,158,253,173,248,220,237,220,166,212,174,150</Points>\n    <Keys>CO,Colorado</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>364,69,374,61,377,55,384,53,388,50,392,47,393,43,396,41,397,44,398,41,399,38,399,42,403,39,403,36,403,33,407,35,420,36,423,39,426,46,430,47,435,46,438,46,437,49,437,51,442,55,442,56,440,57,441,61,444,61,445,62,444,63,444,65,444,69,439,68,438,64,433,65,427,65,422,70,418,68,416,69,413,69,409,64,405,65,404,63,402,62,404,61,408,56,404,55,401,59,400,60,398,63,392,66,389,67,383,72,380,70,377,72,376,66,367,71,364,69</Points>\n    <FillColor>Azure</FillColor>\n  </Polygon>\n  <Polygon>\n    <Points>409,100,410,96,413,95,412,91,419,81,420,82,422,80,423,83,426,80,426,78,432,77,433,75,437,75,440,76,441,78,440,81,440,84,438,86,437,88,438,91,437,94,434,95,435,91,436,90,435,89,432,92,429,93,429,96,429,97,427,104,427,105,427,113,430,124,432,132,429,136,430,139,427,142,426,143,423,144,419,145,415,137,414,132,415,126,411,124,413,120,414,114,414,103,416,100,418,95,418,90,416,90,415,94,413,96,409,100</Points>\n    <FillColor>Azure</FillColor>\n  </Polygon>\n  <Polygon>\n    <Points>447,66,449,66,450,69,461,70,475,69,476,70,482,70,484,69,492,78,492,78,494,78,494,81,498,85,498,86,495,85,495,88,497,89,496,90,494,91,491,91,488,89,487,91,482,86,481,83,481,82,477,82,477,84,480,87,482,90,482,94,479,96,479,99,479,104,480,112,473,118,471,110,466,103,465,102,459,109,456,109,454,108,456,105,459,99,461,92,456,89,460,86,457,83,454,83,452,82,450,82,448,80,446,80,442,77,443,75,446,75,451,74,447,70,447,66</Points>\n    <FillColor>Azure</FillColor>\n  </Polygon>\n  <Polygon>\n    <Points>465,139,464,137,467,130,469,128,470,124,472,123,474,124,474,126,474,127,472,128,470,130,468,133,471,134,473,133,475,134,480,129,482,129,485,123,488,122,497,121,500,121,498,119,500,117,504,115,508,114,511,113,512,115,504,125,495,131,483,139,482,139,474,142,473,141,471,142,470,140,465,139</Points>\n    <FillColor>Azure</FillColor>\n  </Polygon>\n  <Polygon>\n    <Points>509,110,504,110,503,108,504,104,507,100,517,96,523,94,525,94,528,94,530,92,534,88,537,85,539,85,537,89,539,90,538,94,540,98,533,104,527,103,527,105,517,104,510,107,509,110</Points>\n    <FillColor>Azure</FillColor>\n  </Polygon>\n  <Text>\n    <Value>Washington</Value>\n    <Location>39,30</Location>\n  </Text>\n  <Text>\n    <Value>Oregon</Value>\n    <Location>34,75</Location>\n  </Text>\n  <Text>\n    <Value>Idaho</Value>\n    <Location>104,97</Location>\n  </Text>\n  <Text>\n    <Value>Montana</Value>\n    <Location>162,54</Location>\n  </Text>\n  <Text>\n    <Value>California</Value>\n    <Location>17,197</Location>\n  </Text>\n  <Text>\n    <Value>Nevada</Value>\n    <Location>63,152</Location>\n  </Text>\n  <Text>\n    <Value>Utah</Value>\n    <Location>129,165</Location>\n  </Text>\n  <Text>\n    <Value>Arizona</Value>\n    <Location>107,246</Location>\n  </Text>\n  <Text>\n    <Value>New Mexico</Value>\n    <Location>168,254</Location>\n  </Text>\n  <Text>\n    <Value>Colorado</Value>\n    <Location>187,180</Location>\n  </Text>\n  <Text>\n    <Value>Wyoming</Value>\n    <Location>172,119</Location>\n  </Text>\n  <Text>\n    <Value>North Dakota</Value>\n    <Location>242,59</Location>\n  </Text>\n  <Text>\n    <Value>South Dakota</Value>\n    <Location>244,102</Location>\n  </Text>\n  <Text>\n    <Value>Nebraska</Value>\n    <Location>258,143</Location>\n  </Text>\n  <Text>\n    <Value>Kansas</Value>\n    <Location>272,193</Location>\n  </Text>\n  <Text>\n    <Value>Texas</Value>\n    <Location>267,301</Location>\n  </Text>\n  <Text>\n    <Value>Oklahoma</Value>\n    <Location>282,239</Location>\n  </Text>\n  <Text>\n    <Value>Minnesota</Value>\n    <Location>316,54</Location>\n  </Text>\n  <Text>\n    <Value>Iowa</Value>\n    <Location>337,139</Location>\n  </Text>\n  <Text>\n    <Value>Wisconsin</Value>\n    <Location>365,99</Location>\n  </Text>\n  <Text>\n    <Value>MI</Value>\n    <Location>399,68</Location>\n  </Text>\n  <Text>\n    <Value>Michigan</Value>\n    <Location>428,112</Location>\n  </Text>\n  <Text>\n    <Value>Illinois</Value>\n    <Location>382,167</Location>\n  </Text>\n  <Text>\n    <Value>Indiana</Value>\n    <Location>420,170</Location>\n  </Text>\n  <Text>\n    <Value>Kentucky</Value>\n    <Location>425,204</Location>\n  </Text>\n  <Text>\n    <Value>Ohio</Value>\n    <Location>462,156</Location>\n  </Text>\n  <Text>\n    <Value>Tennessee</Value>\n    <Location>409,230</Location>\n  </Text>\n  <Text>\n    <Value>Mississippi</Value>\n    <Location>378,296</Location>\n  </Text>\n  <Text>\n    <Value>Louisiana</Value>\n    <Location>352,317</Location>\n  </Text>\n  <Text>\n    <Value>Alabama</Value>\n    <Location>420,277</Location>\n  </Text>\n  <Text>\n    <Value>Florida</Value>\n    <Location>505,344</Location>\n  </Text>\n  <Text>\n    <Value>Georgia</Value>\n    <Location>464,287</Location>\n  </Text>\n  <Text>\n    <Value>South</Value>\n    <Location>489,240</Location>\n  </Text>\n  <Text>\n    <Value>Carolina</Value>\n    <Location>493,249</Location>\n  </Text>\n  <Text>\n    <Value>North Carolina</Value>\n    <Location>485,224</Location>\n  </Text>\n  <Text>\n    <Value>Virginia</Value>\n    <Location>512,194</Location>\n  </Text>\n  <Text>\n    <Value>West</Value>\n    <Location>491,172</Location>\n  </Text>\n  <Text>\n    <Value>Virgina</Value>\n    <Location>484,180</Location>\n  </Text>\n  <Text>\n    <Value>Pennsylvania</Value>\n    <Location>499,138</Location>\n  </Text>\n  <Text>\n    <Value>New York</Value>\n    <Location>516,106</Location>\n  </Text>\n  <Text>\n    <Value>VT</Value>\n    <Location>567,71</Location>\n  </Text>\n  <Text>\n    <Value>NH</Value>\n    <Location>581,83</Location>\n  </Text>\n  <Text>\n    <Value>Maine</Value>\n    <Location>593,46</Location>\n  </Text>\n  <Text>\n    <Value>Mass</Value>\n    <Location>612,91</Location>\n  </Text>\n  <Text>\n    <Value>RI</Value>\n    <Location>600,114</Location>\n  </Text>\n  <Text>\n    <Value>CT</Value>\n    <Location>577,111</Location>\n  </Text>\n  <Text>\n    <Value>New</Value>\n    <Location>576,139</Location>\n  </Text>\n  <Text>\n    <Value>Jersey</Value>\n    <Location>576,147</Location>\n  </Text>\n  <Text>\n    <Value>Delaware</Value>\n    <Location>571,162</Location>\n  </Text>\n  <Text>\n    <Value>Maryland</Value>\n    <Location>571,173</Location>\n  </Text>\n  <Text>\n    <Value>Missouri</Value>\n    <Location>344,205</Location>\n  </Text>\n  <Text>\n    <Value>Arkansas</Value>\n    <Location>342,242</Location>\n  </Text>\n  <Text>\n    <Value>Alaska</Value>\n    <Location>54,333</Location>\n  </Text>\n  <Text>\n    <Value>Hawaii</Value>\n    <Location>127,371</Location>\n  </Text>\n</MapData>"
  },
  {
    "path": "RdlEngine/world_map.xml",
    "content": "<MapData>\n  <Polygon>\n    <Points>736,139,736,138,737,138,738,139,739,138,740,138,741,138,741,139,742,139,743,139,744,140,744,139,745,139,746,139,747,139,748,139,748,138,749,138,750,138,750,137,751,136,751,135,752,135,753,135,754,136,753,136,753,137,754,137,754,139,754,140,755,140,756,140,757,140,757,139,758,139,759,139,759,138,761,138,761,139,760,139,761,139,763,138,764,138,764,139,763,139,763,140,763,139,763,140,762,140,761,140,759,140,757,140,756,140,756,141,755,141,754,141,753,142,753,143,754,143,754,144,754,145,754,146,753,146,753,147,752,147,753,147,753,148,752,148,752,149,751,149,749,148,749,149,750,149,750,150,750,151,749,151,748,151,748,152,748,153,747,153,747,154,748,155,747,156,746,156,746,155,745,155,744,155,743,156,742,156,743,156,741,157,740,157,739,158,738,159,739,159,738,160,739,161,738,161,736,162,735,162,734,162,732,162,730,162,728,162,727,162,725,162,722,161,723,160,725,158,725,157,725,156,724,156,722,156,722,155,722,154,722,153,721,151,722,150,721,150,721,149,721,148,722,148,722,147,723,146,723,145,723,144,724,144,725,144,726,144,726,145,727,145,729,144,729,143,730,143,731,142,732,142,733,142,733,141,734,140,734,139,735,139,736,139</Points>\n    <Keys>Afghanistan, AFG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>598,124,598,123,599,123,600,123,600,124,601,124,601,125,601,126,601,127,602,127,602,128,603,128,603,129,602,129,601,130,601,131,600,131,601,131,600,131,599,131,600,131,599,130,598,130,597,129,598,130,598,129,597,129,598,128,598,127,598,128,598,127,598,126,598,125,598,124,597,124,598,124</Points>\n    <Keys>Albania, ALB, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>536,154,536,153,535,152,535,151,535,150,534,149,535,148,534,147,534,146,533,145,534,145,535,145,536,144,537,143,538,143,539,143,540,143,540,142,541,142,542,141,543,141,545,141,546,141,547,141,548,140,549,140,550,140,551,140,553,140,555,140,555,141,556,141,557,140,558,140,559,139,559,140,560,140,561,140,561,139,562,139,562,140,563,140,564,140,565,140,565,141,564,141,565,141,564,143,565,143,565,144,564,144,565,145,564,146,564,147,563,147,563,148,562,148,562,149,563,150,563,151,564,151,564,152,565,153,567,154,567,156,568,160,567,160,568,161,569,162,569,164,569,166,569,167,569,168,569,169,569,170,569,171,568,171,568,172,570,174,570,176,570,177,571,177,572,177,574,178,575,180,571,183,566,185,562,188,557,192,552,193,549,194,549,193,549,192,549,191,548,191,547,190,546,190,545,190,544,189,543,188,543,187,539,185,535,182,530,179,525,175,524,175,519,172,513,169,513,167,513,164,514,164,515,163,517,162,518,162,520,162,520,161,521,161,523,161,524,160,525,159,526,159,527,158,529,158,529,157,528,157,528,156,528,155,529,155,531,155,531,154,533,154,535,154,536,154</Points>\n    <Keys>Algeria, DZA, NorthAfrica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>545,123,544,123,545,123</Points>\n    <Keys>Andorra, AND, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>576,266,576,265,577,264,578,264,579,264,579,265,578,265,577,266,577,268,576,268,576,267,576,266</Points>\n    <Keys>Angola, AGO, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>579,268,580,268,581,268,583,268,585,268,587,268,589,268,589,269,590,269,590,270,590,271,590,272,591,272,591,273,591,274,592,274,592,275,593,275,594,275,595,274,596,274,598,274,598,273,598,272,598,271,600,271,601,271,601,272,603,272,605,272,605,273,605,274,605,275,605,276,605,277,605,278,605,279,606,280,606,282,606,283,606,284,607,284,608,284,609,284,610,283,611,284,611,283,612,285,611,286,611,287,612,287,612,288,611,289,612,289,612,290,609,290,607,290,605,290,605,294,606,299,606,300,609,303,610,303,608,304,604,305,603,304,602,304,602,305,601,304,600,304,599,304,598,304,596,304,595,303,591,303,586,303,582,303,581,303,580,302,580,301,578,302,577,302,576,302,575,302,575,301,575,299,575,298,576,297,576,296,577,294,576,293,577,292,577,291,577,290,578,290,578,289,579,288,580,288,580,287,581,286,581,285,581,284,581,283,581,282,580,282,580,281,579,280,579,279,578,278,579,277,579,278,579,277,580,277,580,276,579,274,578,272,578,271,577,271,577,270,576,269,578,269,578,268,579,268</Points>\n    <Keys>Angola, AGO, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1032,453,1033,453,1032,453</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>341,448,342,447,343,447,343,448,342,448,341,448</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>365,444,365,443,364,443,365,442,366,442,366,443,367,443,368,443,367,443,367,444,366,444,365,444</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>332,454,332,453,331,453,332,453,332,452,333,452,334,451,335,451,336,451,335,452,336,452,335,452,335,453,334,453,334,454,333,454,332,454</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>376,434,375,434,374,434,373,434,374,434,375,434,376,434</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>402,432,403,432,404,432,404,433,403,433,403,432,402,432</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>347,445,347,444,348,444,349,444,349,443,350,443,350,444,349,444,350,444,351,444,350,444,350,445,349,445,348,445,347,445</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>363,437,364,437,365,436,366,436,367,437,366,437,365,437,364,437,363,437</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>268,457,268,458,267,458,267,457,268,457</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>352,444,352,443,353,443,353,444,352,444</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>315,461,314,460,313,460,312,460,311,460,312,460,313,460,314,459,315,459,315,460,316,460,316,461,315,461</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>356,439,357,438,358,438,359,438,360,439,359,439,358,439,357,439,356,439</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>102,476,102,477,101,477,100,477,99,477,98,477,99,477,101,477,102,476</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>401,484,400,484,397,484,395,483,397,483,399,483,401,483,402,483,401,484</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1048,470,1048,471,1048,470</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>225,470,226,470,227,470,227,471,226,471,225,471,225,470</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>540,458,539,458,540,458,540,459,541,459,542,460,543,460,544,461,545,460,546,460,547,461,548,461,549,461,550,461,552,461,554,460,555,461,556,461,557,461,558,461,559,461,558,461,559,461,560,460,561,460,562,460,563,460,564,460,566,460,566,461,567,461,567,460,569,460,570,460,571,460,572,460,573,461,574,461,575,461,576,461,577,461,578,460,579,460,580,459,581,459,582,459,583,459,584,459,585,459,585,460,586,460,589,460,590,460,592,460,593,460,595,460,596,460,597,461,598,460,600,460,601,461,603,461,604,461,603,461,602,461,603,461,605,461,607,461,609,461,609,462,611,462,613,461,614,461,615,461,616,461,617,461,618,461,618,460,619,460,621,460,622,461,622,460,623,460,625,460,626,460,627,460,627,459,628,459,629,458,630,458,631,458,632,458,633,458,634,458,635,458,636,459,637,459,638,459,639,459,639,458,638,458,639,457,641,457,642,457,643,458,645,458,646,459,647,459,648,459,649,460,650,460,651,459,652,460,653,460,654,461,655,460,656,460,658,459,657,459,658,459,657,458,658,458,658,457,659,457,660,457,661,457,663,456,664,456,665,456,666,456,667,455,668,455,669,454,671,454,672,454,674,453,675,453,675,454,676,454,677,453,678,452,680,453,681,453,680,453,681,454,682,454,683,454,684,454,685,453,684,453,686,453,687,453,686,453,685,453,685,452,684,452,685,452,686,452,687,452,688,452,689,452,688,453,689,452,690,452,691,452,690,452,691,452,691,451,690,451,689,450,690,450,691,450,692,450,693,449,694,449,696,449,697,449,698,449,700,448,701,449,702,449,703,449,705,449,706,449,707,450,708,450,709,450,710,450,711,451,710,451,709,451,709,452,710,452,711,452,712,452,713,452,714,452,715,452,716,453,715,453,716,453,717,453,718,453,719,453,720,453,722,453,723,453,724,453,725,453,726,454,727,454,728,454,729,453,730,453,732,454,734,454,735,454,736,454,739,454,741,454,743,454,745,454,747,454,748,454,749,455,750,455,750,456,751,456,752,456,754,457,756,456,757,456,759,456,760,456,759,457,760,457,761,457,763,457,763,458,764,459,762,459,761,459,761,460,762,460,763,460,764,459,766,458,767,458,766,459,767,459,768,459,769,459,771,458,772,458,773,458,773,457,773,456,774,456,776,455,779,455,781,454,783,454,784,453,785,453,786,452,787,451,785,451,784,450,784,449,785,448,786,448,787,449,788,449,789,450,790,450,791,450,793,450,794,450,795,450,797,450,798,449,800,449,802,449,804,449,805,449,806,451,808,451,810,451,812,451,815,450,816,450,817,450,819,450,820,450,822,450,824,450,825,450,825,449,826,449,826,447,827,446,829,446,831,447,834,448,835,448,836,448,837,448,838,448,839,448,840,448,841,447,842,447,843,447,844,447,845,448,846,448,847,448,848,447,848,446,849,446,850,447,852,447,853,447,854,447,855,448,855,449,853,448,852,448,853,449,854,449,856,449,857,449,859,450,861,450,862,450,863,450,864,450,865,451,866,451,867,451,868,450,869,450,870,450,871,450,872,450,871,450,871,449,872,449,874,448,875,448,876,448,877,448,878,448,879,448,880,448,881,449,882,449,883,449,883,450,884,450,885,450,887,450,889,450,890,450,890,451,892,451,893,451,894,451,895,451,897,451,898,451,900,451,901,451,902,451,903,450,904,450,903,450,902,449,902,448,903,448,904,448,905,449,906,450,907,450,908,451,909,451,910,450,911,450,910,450,909,450,910,449,911,449,912,449,914,449,916,449,917,449,918,450,919,450,920,450,921,450,922,450,922,451,923,451,924,452,926,451,927,452,928,451,928,450,929,450,929,449,929,448,930,448,931,449,932,449,933,449,935,449,936,449,937,449,938,449,940,449,941,449,943,449,943,448,944,447,944,446,945,446,946,446,946,447,946,448,945,448,944,449,945,449,947,449,948,449,949,449,951,449,952,450,956,450,958,450,959,450,961,451,964,451,965,451,966,451,967,451,968,451,969,451,970,452,971,452,972,452,973,452,974,451,976,452,977,452,976,453,975,453,976,453,977,454,978,454,979,454,981,454,982,455,984,455,983,456,984,456,985,456,986,456,987,456,988,456,989,456,990,456,991,456,993,456,994,456,996,456,998,456,1000,456,1002,456,1003,456,1003,457,1004,458,1004,457,1006,457,1009,458,1010,458,1010,457,1011,458,1013,458,1014,458,1016,458,1017,459,1019,459,1020,460,1020,461,1022,461,1023,462,1023,461,1024,462,1025,462,1026,462,1026,463,1028,463,1030,463,1032,463,1033,463,1035,463,1037,462,1038,462,1038,463,1039,463,1040,463,1042,463,1042,464,1044,464,1045,464,1047,465,1048,465,1049,465,1050,465,1051,466,1050,467,1049,467,1049,468,1048,469,1047,470,1046,470,1045,470,1044,471,1042,471,1041,472,1040,472,1039,473,1038,473,1036,473,1034,473,1035,474,1036,474,1034,474,1032,475,1031,475,1030,476,1031,477,1033,477,1032,477,1030,477,1028,477,1027,478,1028,479,1030,479,1029,479,1027,479,1028,480,1027,481,1028,481,1027,481,1026,481,1027,481,1029,482,1030,483,1031,484,1033,484,1035,484,1037,484,1038,484,1036,483,1037,483,1038,482,1039,482,1040,482,1041,482,1042,482,1044,483,1046,483,1047,483,1048,483,1049,483,1050,483,1051,483,1056,483,1060,484,1063,484,1065,484,1069,484,1072,485,1075,485,1079,485,1080,485,1080,495,0,495,0,485,3,486,6,486,11,486,14,486,18,486,19,486,24,486,28,486,31,486,34,486,39,486,41,486,45,486,46,486,47,485,49,485,52,485,55,485,58,484,61,484,64,484,64,483,63,482,64,482,67,482,71,482,75,482,76,482,78,482,80,482,81,482,84,482,85,482,87,481,88,481,89,481,89,480,91,480,93,479,95,479,98,480,102,480,101,479,100,478,104,477,111,476,114,476,118,476,127,475,134,475,136,475,138,475,139,475,141,474,143,474,145,473,148,473,150,473,154,473,158,472,162,472,163,471,167,471,169,471,172,472,176,472,178,472,179,472,180,472,181,472,183,473,185,473,187,473,188,473,190,473,192,473,193,473,195,473,197,472,198,473,197,473,198,473,199,473,200,473,202,473,203,474,204,473,205,473,206,473,208,473,209,473,210,474,212,475,215,475,217,476,218,476,218,475,217,474,218,473,220,473,223,473,225,473,225,474,224,474,223,475,224,475,225,475,226,475,228,475,231,475,233,476,235,476,236,475,235,475,234,474,234,473,233,472,234,472,235,472,236,472,237,472,237,471,236,471,235,471,233,471,231,471,230,471,230,470,229,470,230,469,231,469,231,468,230,468,229,468,230,468,232,468,233,467,234,467,236,467,237,467,239,466,240,467,239,467,240,467,241,467,242,467,243,467,244,467,245,467,244,467,245,466,246,467,245,467,246,467,247,467,248,467,249,467,250,466,250,467,252,467,251,468,252,468,251,468,252,468,253,469,254,469,255,469,256,469,257,468,258,469,260,469,261,469,262,469,264,468,265,468,267,468,269,468,270,468,271,468,273,468,275,468,276,468,278,468,280,468,281,469,282,469,284,469,286,469,288,469,291,469,293,469,294,470,296,469,298,470,299,470,301,469,303,470,305,471,306,471,306,470,305,470,304,470,303,469,305,469,306,469,307,469,306,468,305,468,306,468,308,468,309,468,310,468,310,469,310,468,311,468,311,469,312,470,312,469,313,469,314,469,316,469,318,469,318,470,319,470,320,470,321,471,322,471,321,470,323,470,324,470,322,470,322,469,323,469,323,468,322,468,322,467,321,467,320,467,319,467,318,467,316,467,315,466,314,466,313,465,314,465,315,465,316,465,317,464,319,464,320,464,318,463,317,463,315,463,314,463,313,463,314,463,314,462,316,463,317,462,316,462,316,461,316,460,317,460,318,460,319,460,320,460,321,460,322,460,322,459,321,459,322,459,323,459,324,459,324,458,323,458,324,458,325,458,325,457,326,457,328,457,329,457,329,458,330,459,331,459,331,460,332,460,332,461,333,460,334,460,334,459,333,459,334,459,335,458,334,458,335,458,337,458,337,457,338,457,338,456,339,456,338,455,339,455,338,455,339,454,340,454,340,453,339,453,338,453,337,453,336,453,337,453,337,452,338,452,338,451,339,451,339,452,340,453,341,452,341,451,343,451,343,450,342,450,342,449,343,449,344,449,344,448,345,448,345,449,346,449,346,448,347,448,346,448,347,448,347,447,348,447,349,447,348,447,347,447,347,446,348,446,350,446,351,446,350,446,351,445,352,445,352,444,352,445,353,445,354,444,355,444,356,444,357,443,358,442,359,442,360,442,361,442,362,442,363,441,364,441,365,441,366,441,367,441,368,440,368,441,369,441,368,441,367,441,366,441,366,442,365,442,364,442,363,443,363,444,363,445,362,446,361,447,360,448,359,449,358,450,357,451,357,452,357,453,357,454,357,455,357,456,358,457,358,458,359,459,358,459,358,460,357,461,357,462,358,463,358,464,359,465,358,466,359,466,358,467,359,467,360,467,359,468,358,468,359,469,360,469,362,470,361,471,359,471,358,471,357,471,357,472,358,473,356,473,357,473,358,474,357,474,355,475,354,475,355,476,358,476,361,477,363,477,365,478,368,478,371,479,373,480,375,480,377,480,379,481,381,481,382,481,386,482,387,482,389,482,388,482,387,482,387,483,389,483,390,484,392,483,396,484,397,484,399,484,402,485,405,485,406,485,409,485,411,484,412,484,414,483,417,484,421,484,423,484,427,484,431,484,434,484,433,484,435,483,438,483,441,482,444,482,445,482,446,481,447,481,449,481,450,480,452,480,453,480,454,479,456,479,457,479,458,479,459,478,460,478,459,477,461,477,463,476,464,476,465,476,466,476,467,475,468,475,469,474,470,473,472,473,473,473,474,473,475,473,476,473,477,472,478,472,479,471,480,470,481,470,482,469,483,469,483,468,484,468,486,468,487,468,488,468,489,468,490,468,491,468,492,467,493,467,494,467,496,467,497,466,498,466,499,467,500,467,501,467,501,466,500,466,501,466,502,466,503,465,504,464,505,464,506,464,507,464,508,463,509,463,510,463,511,462,512,462,513,462,514,462,515,463,516,463,517,462,518,462,519,462,520,462,521,462,523,462,524,462,525,462,526,462,527,462,528,461,529,461,530,461,531,461,532,461,533,461,534,461,535,461,535,460,536,460,537,460,537,459,536,458,537,458,538,458,539,458,540,458</Points>\n    <Keys>Antarctica, ATA, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>354,198,354,197,354,198,354,197,354,198</Points>\n    <Keys>Antigua and Barbuda, ATG, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>354,200,354,199,354,200,354,199,355,199,354,199,354,200</Points>\n    <Keys>Antigua and Barbuda, ATG, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>334,414,334,412,334,410,334,408,335,409,335,410,335,409,334,410,335,410,335,411,336,412,337,412,339,413,340,414,342,415,344,414,344,415,343,415,342,415,341,415,340,415,340,416,338,415,335,415,334,415,334,414</Points>\n    <Keys>Argentina, ARG, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>345,415,346,415,347,415,348,415,347,415,346,415,345,415</Points>\n    <Keys>Argentina, ARG, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>340,317,341,316,342,316,342,317,343,317,345,317,346,317,346,318,346,319,347,319,347,318,348,317,351,316,351,317,352,317,353,318,353,319,354,319,355,320,356,321,356,322,358,322,359,323,361,323,361,324,362,324,363,325,364,325,365,325,366,326,367,326,367,327,366,328,365,329,365,330,365,331,364,331,365,331,364,331,364,332,365,332,366,332,367,333,368,333,369,333,370,333,371,333,371,332,372,333,373,333,373,332,373,331,374,331,375,331,375,330,376,329,376,328,376,327,376,328,376,327,377,327,378,327,378,328,379,329,378,330,378,331,378,332,377,332,377,333,376,333,375,333,375,334,374,334,373,334,373,335,372,335,372,336,371,336,371,337,370,337,370,338,369,339,368,340,367,341,366,342,366,343,366,344,366,345,365,345,366,345,365,346,365,347,365,348,365,349,365,350,364,350,364,351,364,352,364,353,364,354,365,354,366,355,368,356,368,357,367,358,368,359,369,360,369,359,369,360,370,361,369,361,369,362,368,363,367,364,367,365,366,366,364,366,362,367,360,367,358,367,356,367,354,367,353,367,352,367,353,367,353,368,352,368,353,368,353,369,353,368,353,369,353,370,352,371,352,372,353,372,352,372,353,373,353,372,353,373,352,373,351,374,349,374,348,374,347,374,345,373,344,373,344,374,345,375,344,376,345,376,344,376,344,377,345,377,346,377,346,378,347,378,347,377,348,377,349,378,349,379,348,379,347,379,347,378,346,378,345,379,344,379,346,379,347,379,346,380,345,380,344,380,344,381,344,382,344,383,344,384,343,384,344,384,343,384,342,385,343,385,343,386,342,385,342,386,341,385,340,386,339,386,338,387,337,388,337,389,337,390,338,391,339,392,342,392,342,393,342,394,342,395,341,395,340,395,341,396,339,396,338,397,337,397,337,398,336,398,336,399,337,398,336,400,335,401,334,401,334,400,334,401,333,401,333,402,332,402,332,403,332,404,333,405,332,405,331,405,332,405,332,406,332,405,333,405,333,406,334,407,334,408,334,407,332,407,331,407,330,406,327,406,324,406,323,406,323,405,322,405,323,404,322,404,323,404,323,403,322,403,323,402,322,402,322,403,321,402,320,403,320,402,320,401,319,401,319,400,319,399,319,398,320,398,321,397,322,397,322,396,323,396,323,395,322,394,323,393,322,393,323,393,323,392,324,392,324,391,324,390,324,389,325,388,324,388,324,387,325,387,326,386,325,386,325,385,323,385,324,385,325,385,326,385,326,384,324,384,324,383,324,382,325,382,324,382,324,381,324,380,323,380,323,379,323,378,323,377,324,377,324,375,324,374,324,373,324,372,325,371,324,371,325,370,324,370,324,369,325,369,325,368,325,367,326,367,327,367,327,366,326,364,326,363,326,362,326,361,326,360,327,360,327,359,328,359,328,358,328,357,328,356,329,355,329,354,329,353,330,353,330,352,330,351,330,350,329,350,330,349,329,349,329,348,329,347,328,347,329,347,329,346,328,346,328,345,328,344,329,344,329,343,329,342,330,342,330,341,330,340,329,339,329,338,330,338,330,336,331,336,331,335,332,335,332,334,332,333,333,333,333,332,334,332,335,332,335,331,334,330,334,329,334,328,334,327,334,326,334,325,334,324,335,324,337,323,338,321,338,320,338,319,338,318,339,318,339,317,340,317</Points>\n    <Keys>Argentina, ARG, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>670,127,671,127,672,127,673,127,674,127,675,127,676,127,676,128,676,129,677,130,678,130,677,130,676,130,676,131,677,131,678,131,678,132,679,132,679,133,679,134,678,134,678,133,677,133,678,133,677,133,677,132,676,132,675,132,675,131,674,131,673,131,672,130,670,130,671,130,670,129,671,128,670,128,670,127</Points>\n    <Keys>Armenia, ARM, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>879,329,878,328,878,327,879,327,878,327,879,328,879,329</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>985,372,984,372,983,372,984,372,984,371,985,372</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>993,322,993,321,993,322</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>950,293,949,293,949,292,950,291,950,292,950,293</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,410,759,409,760,410,760,409,760,410,761,410,760,410</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>999,328,998,328,998,327,999,327,999,326,999,325,1000,326,999,327,999,328</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>971,371,971,370,971,369,972,369,972,371,971,371</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>984,371,983,371,983,370,984,370,984,371,985,371,984,371</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>931,286,930,286,930,285,931,284,931,285,931,286</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>932,286,931,285,931,284,931,285,931,284,932,285,932,284,933,285,933,284,933,285,933,284,934,284,934,285,933,286,932,286</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>952,359,951,358,951,359,950,359,950,358,949,358,950,358,951,357,952,357,952,358,953,358,954,358,953,358,952,358,952,359</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>957,301,957,300,958,300,959,300,958,300,958,301,957,301</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>974,375,973,373,974,373,974,372,974,373,975,373,977,373,977,374,978,374,979,374,980,374,982,373,982,374,982,373,983,373,984,373,984,374,985,374,984,375,984,376,984,377,985,377,984,377,985,377,984,377,984,376,984,377,983,378,984,377,983,378,983,379,983,380,984,380,983,380,982,380,983,379,983,380,983,379,982,379,982,380,982,379,981,379,982,379,981,380,980,380,981,380,980,381,981,381,980,381,981,381,980,381,979,381,978,381,977,381,978,381,978,380,978,381,978,380,977,380,976,379,975,378,975,377,976,378,976,377,975,377,975,376,974,376,974,375</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>939,285,939,286,940,286,939,286,940,286,941,286,942,286,942,287,942,286,943,287,944,286,944,287,945,287,946,287,945,287,946,287,946,286,947,286,947,287,947,286,947,287,948,287,947,287,948,287,947,288,948,288,949,287,948,287,949,286,949,287,950,287,950,288,950,289,949,289,949,290,949,289,949,290,948,290,947,290,947,291,947,292,948,292,948,291,948,292,947,292,947,293,947,294,946,295,946,296,947,296,948,297,949,297,949,298,950,298,952,299,953,299,954,300,954,301,956,301,957,301,957,302,957,303,958,303,959,303,959,304,960,304,961,303,962,303,962,302,963,300,964,299,964,298,964,297,964,296,964,295,964,294,964,293,964,292,964,291,965,290,964,290,964,289,965,289,965,288,964,288,965,287,965,286,965,287,966,287,965,286,966,284,966,283,967,283,968,283,967,284,968,283,968,284,968,285,968,286,969,286,969,287,969,288,970,288,970,289,970,290,970,291,970,292,971,293,971,294,972,294,972,293,973,293,973,294,974,294,975,295,976,295,975,296,976,296,975,297,976,298,976,299,976,300,976,301,977,301,977,302,978,303,978,304,978,305,978,306,979,306,978,306,978,307,979,308,980,308,981,308,981,309,982,309,982,310,983,310,984,310,984,311,985,311,986,311,986,312,985,312,986,313,987,313,987,314,987,315,988,315,988,316,988,317,989,318,988,318,989,318,990,318,989,318,989,317,990,317,990,318,991,318,992,318,992,319,992,320,992,321,993,321,993,322,994,322,994,323,994,322,994,323,995,323,994,323,994,322,995,323,996,324,996,325,997,325,997,326,998,326,998,327,998,328,999,328,999,329,999,330,999,331,999,332,999,333,1000,334,1000,335,1000,336,1000,337,1000,338,1000,339,999,340,999,341,999,342,999,343,999,344,998,344,998,345,998,346,997,346,997,347,997,348,996,348,996,349,995,349,994,350,994,351,993,351,993,352,994,351,993,352,993,353,993,352,993,353,992,353,992,354,992,355,992,356,991,356,991,357,990,358,990,359,990,360,989,361,989,362,990,362,989,362,989,363,988,364,987,364,985,364,984,364,983,364,981,365,980,366,980,367,980,366,979,367,978,367,979,367,979,368,978,368,979,368,978,367,977,367,977,366,977,367,977,366,976,367,976,366,976,365,975,365,975,366,974,366,973,365,974,366,975,365,974,364,973,365,974,365,973,365,972,366,971,367,970,367,969,367,969,366,968,366,967,366,966,366,965,365,964,365,964,366,963,365,962,365,961,364,960,363,959,362,959,361,959,360,958,359,958,358,956,357,958,358,958,359,959,359,958,359,957,358,957,357,957,358,958,357,957,357,958,357,957,357,957,356,956,357,957,357,956,357,955,357,954,357,954,358,954,357,955,357,955,356,955,355,955,354,954,353,954,354,953,354,953,355,953,356,952,356,951,356,950,356,950,355,951,355,952,355,952,354,952,353,952,352,953,351,953,350,954,350,953,350,953,349,953,348,953,349,952,349,952,350,952,351,951,352,950,352,949,352,949,353,948,353,948,354,947,354,947,355,948,355,947,355,948,355,947,356,947,355,946,355,945,355,946,354,945,354,946,354,946,353,945,353,945,352,944,351,944,350,943,350,942,350,942,349,942,348,941,348,941,347,940,347,941,347,940,347,939,347,938,347,938,346,937,346,937,347,936,347,935,346,933,345,932,345,931,345,929,345,927,345,926,346,925,346,923,347,922,347,920,347,919,347,918,347,917,347,916,348,915,348,914,349,913,349,912,350,911,351,911,352,910,352,909,353,909,352,908,352,907,352,906,352,906,353,906,352,905,352,904,352,903,352,901,352,900,352,899,352,898,353,898,354,897,354,896,354,895,355,894,355,894,356,894,355,893,356,894,356,893,356,892,356,891,356,890,356,889,356,889,355,888,355,887,355,886,354,885,353,885,354,885,353,884,352,884,351,885,351,884,351,885,351,886,351,886,350,887,350,886,350,887,349,886,349,887,348,886,348,887,349,886,348,887,348,887,347,887,345,886,344,885,343,885,342,885,341,884,341,884,340,884,339,884,338,883,337,883,336,882,335,882,334,882,332,881,331,880,330,879,330,879,329,880,330,880,329,880,330,880,329,880,330,881,330,881,329,880,329,880,328,880,327,881,328,881,329,881,328,881,329,882,330,882,329,882,328,882,329,882,328,882,327,881,326,880,325,880,324,880,323,880,321,881,321,881,320,881,319,880,319,881,318,881,317,881,316,882,316,882,317,882,318,882,317,882,318,883,318,883,317,883,316,883,317,884,316,885,315,886,315,887,314,888,314,888,313,890,312,890,313,891,312,891,313,892,313,892,312,893,312,894,312,895,311,896,311,897,310,898,311,899,310,900,310,902,310,903,309,904,308,904,307,905,307,905,306,906,306,906,305,907,305,906,304,906,305,906,304,906,303,906,302,907,301,908,301,908,300,909,300,908,300,909,300,909,301,909,302,910,302,910,303,910,302,910,301,911,302,911,301,910,300,911,300,910,300,911,300,910,299,911,299,911,300,911,299,912,299,912,300,913,300,914,300,913,299,913,300,913,299,913,298,914,298,913,298,913,297,914,297,913,296,914,296,914,297,915,297,915,296,914,297,914,296,915,296,914,296,915,296,915,295,915,296,916,296,915,295,915,294,916,294,916,293,917,293,916,294,917,294,916,294,917,294,918,294,917,294,918,294,918,293,917,293,917,292,918,293,918,292,918,293,918,292,918,293,919,293,918,293,919,292,919,293,920,293,920,292,921,292,922,292,922,293,923,294,924,294,924,295,924,296,924,297,924,296,924,297,924,296,924,295,925,295,925,296,925,295,927,295,927,296,927,295,928,296,929,296,928,295,929,295,928,295,928,294,929,294,928,294,928,293,929,293,929,292,929,291,930,291,930,290,930,291,930,290,930,289,931,289,931,288,931,289,932,289,931,289,931,288,932,288,932,287,933,288,932,287,933,287,934,287,935,287,936,287,937,287,937,288,937,287,938,287,937,287,937,286,938,285,937,285,936,285,935,285,935,284,936,284,936,285,936,284,936,285,936,284,937,284,937,285,938,285,939,285</Points>\n    <Keys>Australia, AUS, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>590,104,590,105,590,106,591,106,591,107,590,107,589,107,589,108,590,108,589,108,589,109,588,110,587,110,588,111,586,110,586,111,585,111,584,111,583,111,582,111,581,111,580,111,578,111,577,110,576,110,576,109,575,110,574,109,574,110,573,110,572,110,571,110,571,109,570,110,569,110,569,109,568,109,568,108,569,108,570,108,570,109,571,108,572,108,573,108,574,108,575,108,576,108,576,107,577,107,577,108,578,107,578,108,579,108,579,107,578,107,579,107,578,106,580,105,581,105,581,104,582,104,582,105,583,105,584,105,584,104,584,103,585,103,585,104,586,104,587,104,588,104,589,104,590,104</Points>\n    <Keys>Austria, AUT, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>674,132,674,131,675,131,675,132,676,132,677,132,677,133,678,133,677,133,678,133,678,134,677,134,676,133,675,133,674,132</Points>\n    <Keys>Azerbaijan, AZE, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>679,125,680,125,681,126,681,127,682,127,683,127,683,126,684,126,685,126,685,125,686,126,687,127,687,128,688,128,688,129,689,129,690,129,691,129,691,130,690,130,690,129,689,129,688,130,688,131,687,132,688,132,688,133,687,132,687,133,687,134,687,133,686,133,686,134,686,135,685,135,684,134,684,133,685,132,683,131,683,132,682,132,681,133,680,133,679,134,679,133,679,132,678,132,678,131,677,131,676,131,676,130,677,130,678,130,677,130,676,129,676,128,676,127,675,127,675,126,676,126,677,126,677,127,678,127,679,127,680,127,679,126,678,126,679,126,678,126,679,126,678,126,678,125,679,125</Points>\n    <Keys>Azerbaijan, AZE, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>317,184,317,183,318,183,317,183,317,182,318,182,318,183,317,184</Points>\n    <Keys>Bahamas, The, BHS, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>308,173,307,172,308,172,308,171,307,171,307,170,306,170,307,170,308,171,308,172,308,173</Points>\n    <Keys>Bahamas, The, BHS, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>307,179,306,179,307,179,306,179,306,178,307,178,306,178,307,178,307,179</Points>\n    <Keys>Bahamas, The, BHS, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>313,178,313,177,312,177,312,176,313,177,313,178,314,178,313,178</Points>\n    <Keys>Bahamas, The, BHS, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>305,178,305,177,304,177,305,176,305,177,305,176,305,175,306,175,306,176,306,177,305,178</Points>\n    <Keys>Bahamas, The, BHS, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>311,177,311,176,311,175,310,174,309,174,310,174,311,175,311,176,311,177</Points>\n    <Keys>Bahamas, The, BHS, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>303,171,304,170,305,170,306,170,306,171,305,171,303,171</Points>\n    <Keys>Bahamas, The, BHS, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>315,182,315,181,314,181,314,180,314,179,314,181,315,181,315,182</Points>\n    <Keys>Bahamas, The, BHS, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>691,173,691,172,691,173</Points>\n    <Keys>Bahrain, BHR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>811,185,811,184,812,183,811,183,811,182,812,182,812,183,812,184,811,185</Points>\n    <Keys>Bangladesh, BGD, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>807,172,806,171,807,171,807,172,808,173,808,172,808,173,808,172,809,172,809,173,809,174,809,175,810,175,811,175,812,175,813,175,814,175,816,175,817,175,817,176,816,176,816,177,815,177,815,178,815,177,815,178,814,178,814,179,813,179,813,180,814,181,814,182,815,181,815,180,815,179,816,179,816,180,816,179,816,180,816,179,816,180,817,181,817,182,817,184,817,185,817,186,818,187,817,187,817,186,816,186,816,187,816,188,816,187,815,186,816,186,815,186,815,185,815,184,815,183,814,182,813,182,813,183,813,182,813,183,812,183,812,182,811,181,811,180,812,180,811,180,810,180,811,180,811,181,811,182,811,183,811,184,810,185,810,184,810,185,809,185,810,184,809,185,809,184,809,183,810,183,809,183,809,184,809,185,808,185,809,185,808,185,808,184,808,185,808,184,808,185,807,185,807,186,807,185,807,184,806,183,806,182,806,181,806,180,805,180,805,179,806,179,806,178,805,178,804,177,804,176,805,175,806,175,807,175,806,175,806,174,805,174,804,173,804,172,805,172,805,171,806,171,806,172,807,172</Points>\n    <Keys>Bangladesh, BGD, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>361,211,361,211</Points>\n    <Keys>Barbados, BRB, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>550,96,550,97,551,97,552,97,552,96,552,97,552,96,553,96,554,96,555,96,555,97,556,97,557,97,557,98,558,98,558,99,559,99,559,100,558,100,557,100,557,101,557,102,556,102,555,102,555,101,554,101,554,100,554,101,553,101,552,101,552,100,551,99,551,100,551,99,550,99,549,99,549,98,548,98,547,98,547,97,548,97,550,96</Points>\n    <Keys>Belgium, BEL, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>274,196,274,195,275,195,274,195,275,195,274,196,275,195,275,196,275,197,275,198,275,199,275,200,274,201,274,202,273,202,273,203,272,203,272,202,272,201,272,200,272,199,272,198,272,197,272,196,273,197,273,196,274,196</Points>\n    <Keys>Belize, BLZ, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>547,215,547,214,548,214,548,213,549,214,549,215,550,215,550,216,551,217,551,218,551,219,550,219,550,220,551,220,550,221,549,221,550,221,549,222,549,223,548,223,548,225,548,226,548,227,548,228,548,229,548,230,548,231,546,232,545,232,544,232,545,232,545,231,544,230,544,229,544,225,544,224,544,223,544,222,544,221,542,219,542,218,542,217,543,217,544,216,545,216,546,216,546,215,547,215</Points>\n    <Keys>Benin, BEN, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>345,154,345,153,345,154</Points>\n    <Keys>Bermuda, BMU, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>806,169,806,168,807,168,807,167,808,167,808,166,809,166,811,166,812,166,813,167,813,166,814,166,814,167,815,167,814,167,814,168,815,168,816,168,816,169,816,170,815,170,814,170,813,170,812,170,811,170,810,170,809,170,808,170,807,170,806,170,806,169</Points>\n    <Keys>Bhutan, BTN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>333,299,332,299,331,297,332,297,332,296,331,295,332,295,332,294,333,294,332,294,333,293,333,292,332,292,332,291,333,291,333,289,333,288,333,287,332,285,331,283,332,283,333,284,334,284,335,283,335,282,336,282,336,283,336,282,338,281,339,281,340,280,341,280,342,280,343,280,344,280,343,281,344,281,343,282,343,283,344,283,343,284,344,284,343,285,344,285,344,286,345,286,344,286,345,287,346,287,346,288,348,288,350,289,350,288,351,289,351,290,351,289,352,290,353,290,353,291,354,291,355,291,356,291,357,292,358,292,358,293,358,294,358,295,358,296,359,297,359,299,361,299,363,299,364,299,365,299,364,300,364,301,364,302,365,303,366,303,367,305,366,307,366,308,365,310,366,310,365,311,365,310,362,309,360,308,358,309,354,309,354,311,353,312,353,314,352,317,351,317,351,316,348,317,347,318,347,319,346,319,346,318,346,317,345,317,343,317,342,317,342,316,341,316,340,317,339,317,339,318,338,318,338,319,337,319,336,319,336,318,336,317,335,316,335,315,335,314,334,313,334,312,333,312,333,311,334,311,334,310,333,310,334,309,333,308,333,307,332,307,332,306,332,305,332,304,331,304,331,303,331,302,331,301,332,301,332,300,333,300,333,299</Points>\n    <Keys>Bolivia, BOL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>592,122,593,122,592,121,591,121,591,120,590,120,590,119,589,118,588,118,588,117,587,116,587,115,588,115,589,115,590,115,591,115,592,115,593,115,594,115,595,115,596,115,596,116,597,116,598,116,597,116,597,117,597,118,598,118,598,119,597,118,597,119,598,119,598,120,597,120,596,120,597,120,597,121,596,121,596,120,596,121,595,121,595,122,595,123,594,123,594,122,593,122,592,122</Points>\n    <Keys>Bosnia and Herzegovina, BIH, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>602,305,604,305,609,304,610,305,610,306,611,305,613,304,613,305,614,304,615,304,615,305,616,305,616,306,617,307,617,308,618,309,619,309,618,309,619,310,620,311,621,311,621,312,622,312,623,312,623,313,623,314,624,315,625,315,627,316,627,317,628,317,627,317,626,317,626,318,625,318,624,319,623,319,623,320,622,320,622,321,621,321,620,321,620,322,620,323,619,324,617,325,617,326,616,327,616,328,615,328,614,328,613,328,612,328,612,327,611,327,610,327,610,326,609,326,608,327,608,328,607,329,606,330,605,331,604,331,603,331,602,331,601,331,601,330,602,330,602,329,602,328,602,327,601,327,602,327,601,327,601,326,600,325,599,321,599,317,602,316,602,312,602,308,602,305</Points>\n    <Keys>Botswana, BWA, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>386,253,387,252,387,253,386,253</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>394,334,394,333,394,334</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>388,250,388,249,389,250,388,250</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>390,251,389,250,388,250,390,249,391,250,390,250,390,251</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>387,251,386,251,387,251,388,251,387,251</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>385,252,386,252,386,251,385,252</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>384,255,384,254,385,254,385,253,385,252,386,252,386,253,386,254,384,255</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>389,249,389,249</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>390,251,391,250,391,251,390,251</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>388,256,388,255,387,255,387,254,388,254,387,254,387,253,387,252,388,253,388,252,387,252,388,251,389,251,391,251,392,251,394,251,394,252,394,253,394,254,393,254,393,255,392,255,391,255,391,256,390,256,390,255,390,256,389,256,388,256,389,256,388,256</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>357,235,358,235,359,235,360,235,359,236,359,237,360,237,360,238,361,238,361,239,360,240,360,241,360,242,360,243,360,244,360,245,361,245,360,245,361,245,362,246,362,247,363,247,364,247,364,246,365,246,366,246,366,245,367,245,368,245,368,244,368,245,369,245,370,245,372,245,372,244,371,244,371,243,372,243,373,243,374,243,375,243,375,244,376,244,377,244,378,244,378,243,379,244,379,243,380,244,381,244,382,243,382,242,382,241,383,240,384,239,384,238,385,238,385,237,386,238,386,239,386,241,387,242,387,243,387,244,388,244,388,245,389,245,390,245,390,246,390,247,389,247,390,247,389,248,388,248,388,249,387,250,386,251,385,252,384,253,384,254,384,255,383,255,381,255,383,255,383,256,383,255,384,255,385,254,387,253,386,253,387,253,387,254,387,255,388,256,387,256,386,256,385,255,385,256,385,257,385,258,385,257,385,256,386,256,387,257,386,257,387,258,386,257,387,257,387,256,388,256,389,256,390,256,390,257,390,256,391,256,392,256,391,256,391,257,391,258,392,257,392,256,393,256,393,255,394,255,395,255,394,255,394,254,395,254,395,253,396,253,396,252,396,253,397,253,397,252,397,253,397,252,397,253,397,252,398,252,398,253,399,253,400,253,399,253,400,253,400,254,400,253,400,254,401,254,401,253,401,254,402,254,402,255,403,255,403,254,403,255,403,254,403,255,403,254,404,255,403,255,403,256,404,256,404,255,405,255,405,256,406,256,406,257,405,257,406,257,405,258,406,257,406,258,406,259,405,259,405,260,406,260,405,260,406,260,406,259,406,258,407,258,407,259,408,258,409,258,410,258,411,258,412,259,413,259,414,259,413,259,414,259,415,259,416,259,416,260,416,259,417,259,418,259,420,259,420,260,421,260,422,261,423,261,424,262,425,263,426,264,427,264,428,265,429,265,429,266,430,266,431,266,432,266,433,266,434,267,434,268,434,269,435,271,435,273,435,274,435,275,435,276,434,277,434,278,433,278,432,280,432,279,432,280,432,279,432,280,431,281,430,282,429,283,428,283,428,284,428,285,427,285,428,284,427,284,427,285,427,286,426,287,426,288,425,289,424,290,424,289,423,288,423,289,423,290,423,291,422,291,423,292,422,292,423,292,422,292,423,292,423,293,422,293,423,293,423,292,423,293,422,294,422,296,423,297,423,298,423,299,422,300,422,302,422,303,422,304,421,304,421,305,420,307,420,308,420,309,419,310,419,311,418,311,419,311,419,312,418,313,417,313,417,314,416,315,417,316,416,317,414,317,414,318,414,319,413,319,412,319,410,319,409,320,407,320,408,320,409,320,408,319,407,319,407,320,407,319,407,320,406,319,407,319,406,319,406,320,405,320,406,320,405,320,406,320,405,321,404,321,403,321,403,322,402,322,401,322,401,323,401,322,400,322,400,323,399,323,399,324,398,324,397,325,396,325,396,326,395,326,396,326,395,326,395,327,395,326,395,327,395,326,394,326,394,327,393,327,394,327,394,328,393,328,394,328,394,329,393,329,394,330,393,331,394,331,394,332,394,333,394,334,394,335,393,336,392,337,391,338,390,339,390,340,389,341,388,342,387,343,386,345,385,346,384,346,383,347,383,346,384,346,385,346,385,345,386,345,386,344,387,344,387,343,387,342,388,342,388,341,387,341,388,341,387,341,387,342,386,342,386,341,386,342,386,343,386,342,385,342,385,343,385,344,384,344,384,345,383,345,383,346,383,347,383,348,382,349,382,350,381,351,379,352,379,351,379,350,380,349,380,348,379,348,378,347,378,346,377,346,376,346,376,345,375,345,374,344,373,343,372,343,372,344,371,344,371,343,372,343,371,343,371,342,370,341,369,341,368,341,367,341,368,340,369,339,370,338,370,337,371,337,371,336,372,336,372,335,373,335,373,334,374,334,375,334,375,333,376,333,377,333,377,332,378,332,378,331,378,330,379,329,378,328,378,327,377,327,376,327,376,328,376,327,376,326,376,325,377,324,377,323,376,322,375,322,374,323,373,322,373,321,373,320,373,319,372,318,372,317,371,317,370,317,369,317,368,317,367,317,366,317,366,316,366,315,366,314,366,313,366,312,365,312,365,311,366,310,365,310,366,308,366,307,367,305,366,303,365,303,364,302,364,301,364,300,365,299,364,299,363,299,361,299,359,299,359,297,358,296,358,295,358,294,358,293,358,292,357,292,356,291,355,291,354,291,353,291,353,290,352,290,351,289,351,290,351,289,350,288,350,289,348,288,346,288,346,287,345,287,344,286,345,286,344,286,344,285,343,285,344,284,343,284,344,283,343,283,343,282,344,281,343,281,344,280,343,280,342,280,341,280,340,280,339,281,338,281,336,282,336,283,336,282,335,282,335,283,334,284,333,284,332,283,331,283,330,283,329,283,329,284,328,284,328,283,328,284,328,282,328,280,328,279,327,279,327,280,326,280,325,281,323,281,323,280,323,279,322,279,320,279,321,278,321,277,320,277,320,276,319,276,319,275,318,274,317,273,318,273,318,272,318,271,319,270,320,270,320,269,321,267,321,266,322,266,322,265,323,265,324,264,325,264,326,264,327,264,327,263,328,263,329,263,329,264,330,263,330,261,330,259,331,257,331,255,331,254,331,253,331,252,330,251,329,251,329,249,330,249,330,248,331,249,331,248,332,249,332,248,332,247,331,247,330,247,330,245,331,245,335,245,335,244,335,245,336,245,337,244,338,245,338,246,338,247,339,247,341,248,342,248,343,248,343,249,343,248,344,248,344,247,345,247,346,246,347,246,347,245,348,245,349,244,349,243,347,243,348,243,347,242,347,241,347,240,346,239,345,238,346,238,347,238,347,239,348,239,349,239,350,239,351,240,351,239,351,238,352,238,353,238,354,238,355,238,355,237,356,237,357,237,357,236,358,236,358,235,357,235</Points>\n    <Keys>Brazil, BRA, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>885,236,885,237,886,238,885,237,885,236</Points>\n    <Keys>Brunei, BRN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>885,236,884,236,884,237,884,238,883,238,882,238,882,237,883,236,884,236,885,235,884,236,885,236</Points>\n    <Keys>Brunei, BRN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>621,118,622,118,623,119,623,118,623,119,624,119,625,119,625,120,624,120,624,121,623,121,623,122,622,123,623,123,623,124,624,124,624,125,623,124,623,125,622,125,621,124,620,125,619,125,618,125,619,125,618,125,618,126,617,126,616,127,615,127,614,126,613,126,612,126,611,126,609,126,609,127,608,126,609,125,608,125,608,124,607,124,607,123,607,122,608,122,608,121,609,121,608,121,608,120,607,120,607,119,607,118,608,118,609,118,608,118,608,119,609,119,610,119,611,119,613,119,615,119,616,120,617,119,618,119,619,118,620,118,621,118</Points>\n    <Keys>Bulgaria, BGR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>531,210,531,209,531,208,532,208,533,208,534,207,536,206,537,205,538,205,539,205,540,206,540,207,541,208,541,209,542,209,542,210,543,210,543,211,543,210,542,210,542,211,543,211,544,213,545,213,545,212,546,212,546,213,547,215,546,215,546,216,545,216,544,216,543,217,542,217,542,218,541,218,541,217,539,217,538,217,538,218,537,218,533,217,531,217,531,218,531,219,531,220,531,221,531,222,531,221,530,221,528,221,527,221,527,222,526,222,526,221,525,221,525,220,524,220,523,220,523,219,523,218,523,217,524,217,524,216,524,215,523,215,524,215,525,214,526,214,526,213,526,214,526,213,526,212,527,212,526,211,527,211,527,210,528,210,529,211,530,211,530,209,530,210,531,210</Points>\n    <Keys>Burkina Faso, BFA, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>628,264,628,263,627,262,627,261,627,260,627,259,626,259,627,259,627,258,628,259,629,259,629,258,629,257,629,258,630,258,631,258,631,257,631,258,631,259,631,258,631,259,632,259,632,260,631,261,631,262,630,262,630,263,629,264,628,264</Points>\n    <Keys>Burundi, BDI, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>624,82,625,82,626,82,626,83,627,82,628,83,629,83,630,83,631,83,631,84,632,84,632,85,633,85,632,85,633,85,632,85,632,86,633,86,633,87,633,88,634,88,635,88,635,89,636,89,637,89,637,90,638,90,637,90,638,90,637,91,636,91,635,91,634,91,633,91,634,92,634,93,634,94,635,94,634,94,633,94,632,94,632,95,631,95,632,95,631,95,631,96,631,97,631,96,630,96,629,96,628,96,627,96,626,96,625,96,624,96,623,96,622,96,621,96,621,95,620,95,619,95,618,95,617,95,616,95,615,95,614,95,613,95,612,95,612,96,611,96,610,96,610,95,610,94,609,94,610,93,611,92,611,91,610,90,610,89,611,89,612,89,613,89,614,88,614,89,614,88,615,88,616,88,617,88,616,88,616,87,617,87,617,86,618,86,618,85,619,85,620,85,619,85,619,84,619,83,620,83,621,83,622,83,623,83,623,82,624,82</Points>\n    <Keys>Byelarus, BLR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>852,220,851,220,851,219,852,219,852,220</Points>\n    <Keys>Cambodia, KHM, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>858,207,859,207,860,207,860,208,860,207,861,207,862,207,862,206,862,207,862,208,862,209,862,210,862,211,862,212,862,213,862,214,861,214,860,214,860,215,859,215,859,216,858,215,857,216,857,217,858,217,858,218,857,218,857,217,856,218,855,218,854,219,853,219,852,219,851,219,851,218,851,219,850,219,850,218,851,218,850,217,850,218,849,218,849,217,849,216,848,216,849,216,848,215,849,215,848,215,848,216,848,215,848,214,848,213,847,213,847,212,847,211,847,210,847,209,848,209,848,208,849,208,850,207,851,207,852,207,853,207,854,207,855,207,855,208,855,207,855,208,856,208,857,208,857,209,858,209,858,208,857,207,858,207</Points>\n    <Keys>Cambodia, KHM, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>582,211,583,211,583,212,584,212,584,213,584,212,584,213,584,214,585,214,585,215,585,216,585,217,585,218,585,219,586,220,587,221,586,221,585,221,584,221,583,221,582,221,581,222,583,223,584,224,585,225,586,227,586,228,585,229,585,230,584,230,584,231,584,232,583,232,583,233,583,234,583,235,584,235,584,236,584,237,585,237,585,238,585,239,587,241,588,242,588,243,588,244,588,245,588,246,588,245,587,245,586,245,585,245,585,244,585,245,584,244,583,244,581,244,579,244,578,244,577,244,576,244,574,244,572,244,570,244,569,244,569,243,569,242,569,241,569,240,568,240,569,240,568,240,568,239,569,239,568,239,569,238,568,238,568,239,568,238,568,239,567,239,567,238,567,239,567,238,566,238,566,237,565,236,566,237,565,237,565,236,566,235,566,234,566,233,567,233,567,232,568,232,568,231,569,231,569,230,570,229,570,230,571,230,571,229,572,230,573,230,573,231,574,231,574,230,575,229,575,228,576,228,576,227,576,225,577,225,578,225,578,224,578,223,578,222,579,222,579,221,579,220,580,220,580,218,581,217,582,217,583,216,583,215,583,214,584,214,583,214,583,213,582,213,582,211</Points>\n    <Keys>Cameroon, CMR, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>306,61,305,61,304,60,305,60,307,60,307,61,306,61</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>355,81,355,80,355,81</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>309,60,308,60,307,60,307,59,308,59,309,60,310,60,309,60,310,60,309,60</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>300,83,301,82,300,83,299,83,300,82,301,82,301,81,301,82,302,81,303,81,303,82,302,82,302,83,303,82,303,81,302,81,302,82,302,83,302,82,301,83,300,83</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>299,82,300,81,301,81,300,82,299,82</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>303,82,303,81,304,81,303,82</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>165,103,165,104,164,104,164,103,163,103,163,104,162,103,163,103,162,103,162,102,162,103,161,103,162,103,162,102,161,103,161,102,160,102,161,102,161,101,160,101,159,101,158,101,158,100,157,100,156,100,156,99,157,99,156,99,157,99,155,99,154,98,156,98,157,98,158,99,159,99,161,99,162,99,163,99,163,100,164,100,164,101,165,101,165,102,165,101,165,102,166,102,168,103,168,104,169,104,169,105,169,104,169,105,170,105,169,105,169,106,168,106,168,105,166,105,164,104,165,103</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>282,59,281,60,280,59,280,60,279,60,278,60,278,59,279,59,281,58,280,58,280,57,281,56,281,55,281,54,281,53,282,53,283,53,284,53,284,54,284,55,285,55,286,54,287,54,287,55,289,55,290,56,292,56,293,56,294,57,294,58,295,58,294,58,294,59,295,58,297,59,297,58,298,59,297,59,298,59,299,59,298,59,297,60,296,60,295,60,294,60,293,59,293,60,292,59,290,59,290,58,291,58,290,58,289,58,288,58,289,59,288,59,287,60,286,60,286,61,284,61,283,61,283,60,283,59,282,59</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>285,54,285,53,284,53,284,52,285,53,286,54,285,54</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>289,54,289,53,289,54,288,53,287,53,286,52,287,52,288,52,288,53,289,53,290,53,290,54,289,54</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>160,99,160,98,161,98,161,99,160,99</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>365,86,366,86,365,86</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>319,47,317,47,316,47,315,47,315,46,316,46,317,46,319,46,319,47</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>278,6,275,6,271,6,268,6,267,6,271,6,269,6,269,5,268,5,269,6,267,5,267,6,266,6,267,6,265,6,264,6,264,5,265,5,266,5,270,5,271,5,272,5,271,5,272,5,273,5,272,5,274,4,275,4,277,4,278,4,278,5,279,5,278,5,279,5,278,4,279,4,281,4,282,4,283,5,282,5,283,4,284,5,285,5,286,5,285,5,285,4,280,4,279,4,283,4,283,3,282,3,284,3,286,3,285,3,286,3,287,3,288,3,289,4,290,4,291,4,290,4,294,4,293,4,292,4,290,4,291,4,292,4,297,4,299,5,301,5,302,5,300,5,300,4,298,4,297,4,295,4,292,3,291,3,292,3,294,3,292,3,293,2,295,3,297,3,298,3,297,3,295,2,298,2,299,2,300,3,300,2,303,3,304,2,302,2,300,2,299,2,298,2,301,2,302,2,303,2,304,2,305,2,306,2,308,2,309,2,310,3,312,3,311,3,313,3,311,2,312,2,310,2,307,2,308,1,310,1,311,1,316,1,318,2,321,2,322,2,321,2,319,2,321,1,325,1,324,1,325,2,327,2,325,1,326,1,328,1,330,1,331,1,332,1,333,1,333,2,334,1,335,2,336,2,338,2,341,2,340,2,339,2,334,3,339,2,342,2,343,2,344,2,343,2,344,2,345,2,346,2,347,2,349,2,348,2,349,2,350,3,349,3,351,3,350,3,352,3,353,3,355,3,356,3,356,4,355,4,354,4,353,4,348,5,347,5,346,5,344,5,343,5,341,5,342,5,343,5,342,6,341,6,336,6,335,6,332,5,334,6,333,6,335,6,338,6,339,6,340,6,333,7,329,7,331,7,329,7,331,7,341,6,345,6,346,6,343,7,342,7,340,7,338,8,337,8,333,8,333,9,332,9,331,9,329,9,328,9,327,9,328,9,330,10,329,10,327,10,325,10,324,10,323,10,322,10,324,10,322,10,323,10,327,10,328,10,327,11,325,11,326,11,327,11,326,11,323,12,321,11,320,11,317,11,315,11,319,11,320,11,320,12,319,12,318,12,316,12,315,12,314,12,315,12,314,12,312,12,311,12,308,12,311,12,312,12,311,13,309,12,308,12,307,12,308,13,306,12,305,12,306,13,308,13,311,13,313,13,316,13,315,13,316,13,315,13,313,13,312,13,311,13,308,13,307,13,304,13,303,13,306,13,305,14,306,14,310,13,312,14,311,14,310,14,312,14,315,14,315,15,316,15,313,15,311,15,314,15,314,16,313,16,310,16,309,16,313,16,312,17,311,16,310,17,309,17,306,17,305,17,304,17,305,17,306,17,305,17,306,17,305,17,306,18,305,18,303,19,303,18,302,19,301,19,300,19,297,19,296,18,294,17,294,18,295,18,296,18,296,19,294,19,293,19,294,19,296,19,299,19,298,19,299,19,300,19,302,19,301,20,303,20,304,20,304,19,305,19,306,20,306,21,305,21,304,21,303,21,302,21,302,22,300,22,296,22,297,22,296,22,297,21,296,21,295,21,294,21,293,21,294,21,293,21,294,20,293,21,292,20,291,20,292,20,292,21,293,21,291,21,290,21,289,20,290,21,288,21,287,21,286,21,285,21,284,21,285,21,286,22,283,22,280,21,281,21,280,21,281,21,280,21,279,21,278,21,277,21,276,21,274,21,274,20,273,20,274,20,274,21,273,21,274,21,273,21,272,21,271,21,270,21,271,21,271,20,274,19,277,19,279,19,278,19,279,18,278,18,277,19,276,18,277,18,276,18,275,18,275,17,278,17,280,17,282,17,282,18,283,18,285,18,285,19,286,19,286,18,288,18,289,18,291,17,292,17,292,16,293,16,292,16,291,16,291,17,290,17,288,18,285,18,286,17,285,18,284,18,284,17,283,17,285,17,284,17,283,17,284,17,285,17,286,17,287,17,286,17,284,17,283,17,282,17,283,17,284,16,285,16,287,16,286,16,285,16,284,16,285,16,286,16,287,16,286,16,285,16,285,15,286,15,285,15,283,16,281,16,282,16,282,15,281,16,280,16,279,16,278,16,277,16,278,16,277,16,277,15,278,15,279,15,278,15,280,14,284,14,289,14,292,15,293,15,292,14,293,14,290,14,294,14,295,14,294,14,295,14,295,13,294,14,293,14,292,14,291,14,287,14,285,13,286,13,287,13,288,13,289,13,288,13,287,13,288,13,287,13,286,13,286,12,285,12,284,12,283,11,280,11,281,11,283,11,284,11,280,11,280,10,281,9,288,10,289,10,292,11,293,11,294,11,295,12,294,12,295,12,298,12,300,12,300,11,297,12,295,11,293,10,290,10,299,9,305,9,304,9,300,9,305,8,310,8,309,8,305,8,303,8,303,7,304,7,309,6,306,6,304,7,303,7,301,7,302,7,301,8,302,8,301,8,296,9,291,9,290,9,293,8,294,8,290,8,289,8,290,8,289,8,288,8,288,9,287,9,282,9,283,9,282,9,281,9,280,9,279,9,280,9,282,8,285,7,286,7,292,7,290,7,284,7,283,7,281,8,278,9,277,9,272,8,271,8,273,8,275,7,279,7,282,7,285,7,282,7,280,7,271,7,269,7,268,7,269,7,273,7,271,7,270,7,273,6,276,6,278,6</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>279,47,279,46,280,46,280,47,279,47</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>309,49,308,49,308,48,308,47,309,46,310,46,311,46,312,45,312,46,314,46,314,47,314,48,313,48,311,49,309,49</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>159,102,159,101,160,102,159,102</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>226,45,225,45,224,45,225,45,226,45</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>315,46,314,45,313,45,314,44,315,45,315,46</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>234,45,232,44,233,44,234,44,234,45</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>268,13,262,13,261,13,262,13,266,12,264,12,262,12,263,12,262,12,261,12,260,12,259,12,260,12,259,12,259,13,258,13,257,13,257,12,258,12,256,12,255,13,254,13,254,12,253,12,252,12,256,12,257,11,256,11,257,11,256,11,254,12,252,12,250,11,251,11,250,11,249,10,250,10,252,10,256,11,255,10,256,10,257,10,256,10,255,10,254,10,253,10,252,10,253,10,252,10,250,10,249,9,250,9,251,9,253,9,251,9,252,9,251,9,255,9,258,9,256,9,255,9,256,8,257,8,254,8,255,8,254,8,253,8,254,8,253,8,254,8,254,7,255,7,256,7,256,8,258,7,256,7,260,7,259,7,258,7,256,7,257,6,259,7,259,6,260,6,263,7,264,7,266,8,267,8,268,9,267,9,269,9,270,9,271,9,272,9,272,10,274,10,275,10,274,10,273,10,274,10,273,9,274,9,276,9,277,10,276,10,275,10,276,10,278,10,278,11,277,11,278,11,279,11,278,11,278,12,277,12,278,12,279,12,280,12,281,12,282,12,283,12,284,12,285,13,280,13,280,14,279,14,279,13,279,14,278,14,277,14,277,15,276,14,275,14,276,14,276,13,275,14,275,15,276,15,275,15,274,15,273,15,274,15,273,16,272,16,271,15,270,15,269,15,270,15,271,16,270,16,269,16,267,16,269,16,268,16,269,16,268,16,265,16,264,16,263,16,262,16,262,15,261,15,260,15,259,15,259,14,258,14,259,14,260,14,258,14,257,14,259,13,260,13,264,13,268,13</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>142,91,141,91,142,91,142,90,141,91,141,90,142,91,142,90,141,90,140,89,141,89,140,89,140,88,142,88,141,89,142,89,142,88,143,88,143,89,142,89,142,90,142,89,142,90,143,90,143,89,143,90,143,89,143,88,144,88,145,88,144,88,144,89,144,90,144,91,143,91,142,91</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>238,44,238,43,239,44,238,44</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>148,89,147,89,148,89,147,89,148,88,149,89,148,89</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>302,44,301,44,302,44,302,43,303,43,304,43,303,43,304,42,305,42,305,43,304,43,303,44,302,44</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>269,43,268,43,268,42,269,42,269,43</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>309,43,308,43,307,43,307,42,308,42,309,42,310,42,309,43</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>251,42,250,42,251,42</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>236,42,235,42,236,42,237,42,236,42</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>151,91,150,90,149,90,150,90,149,90,149,89,150,90,151,90,151,91</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>252,43,252,42,253,42,252,42,251,42,252,42,253,42,253,43,252,43</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>137,44,136,44,135,44,133,44,132,44,132,43,132,44,132,43,133,43,132,43,133,43,133,42,134,43,134,42,135,42,136,42,136,41,137,41,136,41,137,41,137,42,138,42,137,42,136,43,135,43,136,44,137,44</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>303,42,304,42,304,41,305,41,305,42,305,41,306,41,306,42,305,42,303,42</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>300,42,299,42,298,42,297,41,298,41,299,41,300,41,301,41,302,41,301,41,301,42,300,42,299,42,300,42</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>250,45,248,45,247,45,246,45,245,44,244,44,243,44,242,44,241,43,243,43,244,43,244,42,245,42,244,42,245,41,246,41,247,41,247,42,248,41,248,42,249,42,251,43,252,43,252,44,253,44,254,44,253,44,252,44,252,45,251,45,250,45</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>152,90,152,89,153,89,153,90,152,90</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>150,91,149,90,148,90,150,90,150,91</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>270,21,269,21,268,20,269,20,270,20,270,21</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>353,109,354,108,355,108,354,108,354,109,353,109</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>153,93,153,92,154,92,153,92,154,92,153,92,153,93,153,92,153,93,152,92,153,91,152,91,153,91,152,92,152,91,153,91,154,91,154,92,154,93,153,93</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>297,92,296,92,295,92,294,92,293,91,294,91,295,91,296,91,297,92</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>153,93,152,93,152,92,153,93</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>146,94,145,93,143,92,144,92,143,92,142,92,143,92,142,91,143,91,144,91,145,91,144,91,144,92,144,91,145,91,145,92,144,92,145,92,144,92,144,93,145,93,146,93,145,93,146,94</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>154,93,154,92,155,93,154,93</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>239,39,238,39,237,39,238,39,237,38,238,39,239,39,238,39,239,39</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>156,95,156,94,157,94,157,93,158,93,158,94,157,94,156,95</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>223,32,222,31,221,31,220,30,218,30,220,29,221,29,222,29,223,29,224,29,226,30,226,31,224,32,223,32</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>228,22,226,22,226,21,227,21,226,21,225,21,227,20,228,21,227,21,228,21,229,21,230,21,228,22</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>356,114,355,113,355,112,356,112,356,111,357,110,358,110,358,109,358,110,358,109,358,110,359,110,358,110,358,111,358,112,357,112,356,113,357,113,357,112,357,113,356,113,357,113,356,113,357,113,357,114,357,113,358,113,357,113,357,112,358,112,359,112,358,112,359,112,360,112,360,113,359,113,358,114,357,114,356,114</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>301,95,301,94,302,94,302,95,301,95</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>155,95,155,94,156,94,155,95</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>243,11,242,11,241,11,242,11,241,11,239,11,239,10,240,10,242,10,243,10,243,11,244,11,243,11</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>351,113,351,112,350,112,351,112,350,112,351,112,350,112,349,112,348,112,348,111,347,111,346,111,346,110,348,109,347,110,348,110,348,111,349,111,350,111,351,111,352,111,354,111,353,111,352,111,352,112,352,113,351,113</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>230,22,228,22,226,22,228,22,232,22,230,22</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>156,96,155,96,155,95,156,95,156,96</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>178,23,178,22,178,23,177,22,178,22,177,22,178,22,177,22,176,22,177,23,176,23,177,23,176,23,174,22,173,22,173,23,172,23,171,23,172,22,171,22,170,22,171,22,172,22,172,21,173,21,175,21,176,21,176,20,178,20,181,19,182,19,184,18,187,19,188,19,188,18,189,19,190,18,189,18,188,18,189,18,190,18,192,18,193,18,193,19,192,19,190,19,191,19,192,20,191,20,190,20,192,20,191,21,189,21,188,21,189,21,188,21,189,21,188,22,187,22,185,21,186,21,185,21,186,21,186,20,185,20,184,20,185,21,184,21,183,21,184,21,184,22,183,22,182,22,181,22,181,21,180,22,181,22,180,22,181,22,180,22,181,22,180,22,181,22,181,23,180,23,181,23,180,23,179,23,178,23</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>301,23,300,23,301,23,303,22,302,23,303,23,302,23,301,23</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>202,22,204,23,203,23,205,23,205,24,206,24,207,24,208,24,209,24,212,24,213,24,212,24,213,24,213,23,210,23,211,23,210,23,209,23,211,22,212,22,211,22,212,22,211,22,210,22,209,22,208,22,208,21,210,21,211,20,212,20,213,20,214,20,213,20,214,20,214,21,213,21,214,21,215,21,215,22,214,22,216,22,217,22,217,23,215,23,216,23,218,23,219,23,219,24,219,23,220,23,219,23,220,22,221,22,222,23,223,23,223,24,222,24,223,24,222,24,223,24,222,25,221,25,222,25,221,25,219,26,218,26,217,26,216,25,215,26,216,26,214,26,214,25,213,25,212,26,211,26,207,26,208,26,206,27,205,27,203,27,201,27,199,27,197,27,196,27,196,26,197,26,200,26,201,26,204,26,205,25,206,25,207,25,206,25,205,25,204,25,202,25,203,25,202,25,201,25,200,25,198,25,200,24,198,24,197,24,197,25,196,25,197,25,196,25,195,26,194,26,194,25,193,25,193,26,192,26,191,25,190,25,189,25,187,25,186,25,188,24,191,24,193,24,194,24,195,23,194,23,190,24,188,24,189,23,192,23,193,23,195,23,190,23,189,23,190,23,190,22,189,22,190,22,194,22,195,22,194,22,192,22,192,21,193,21,194,21,195,21,197,21,197,22,198,22,200,22,201,22,202,22</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>373,96,373,97,371,96,371,97,372,97,371,98,371,99,370,99,370,100,369,100,369,101,369,102,370,101,371,100,371,101,371,100,372,100,372,101,373,100,373,101,371,101,371,102,372,101,372,102,371,102,372,102,373,102,374,102,373,102,373,103,374,102,373,102,374,103,374,102,374,103,373,103,374,103,373,103,374,103,374,102,375,103,374,103,375,103,375,102,375,103,376,102,376,103,376,102,377,102,378,102,379,103,378,103,378,104,377,104,378,104,377,104,378,104,378,105,378,104,378,105,378,104,378,105,379,104,378,105,377,105,378,105,379,105,378,105,379,105,380,105,380,104,381,105,380,105,379,105,379,106,378,106,378,107,379,106,378,107,378,108,378,107,378,108,379,108,379,107,380,106,381,106,381,107,380,107,380,108,381,108,381,107,382,108,381,108,382,108,381,109,381,110,380,111,380,110,379,110,379,111,379,110,379,109,377,110,377,109,378,109,378,108,378,107,377,107,377,108,376,108,375,108,374,109,374,110,373,110,372,110,372,109,373,109,374,109,374,108,375,108,375,107,375,108,374,108,375,107,374,108,373,108,373,107,373,108,372,108,371,108,373,107,372,108,372,107,371,107,371,108,370,108,369,108,368,108,367,108,366,108,365,107,364,108,365,107,364,107,364,108,362,108,362,107,361,107,363,106,364,105,365,105,364,105,362,105,363,104,363,105,364,104,364,103,365,103,365,104,366,104,365,104,365,103,366,103,365,103,366,103,365,103,365,102,366,102,366,101,367,100,367,99,368,99,367,98,368,98,369,98,368,97,369,98,369,97,369,96,371,96,372,96,373,96,372,96,373,96</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>345,65,344,65,345,65</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>300,66,299,65,299,64,299,63,300,63,301,63,302,64,301,65,300,66</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>345,66,344,66,343,66,344,65,345,66,346,66,345,66</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>346,70,345,69,346,69,346,70</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>328,63,327,63,327,62,326,62,328,62,328,63,329,63,328,63</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>334,70,335,69,336,69,336,70,335,70,334,70</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>288,64,288,63,289,62,290,62,291,62,292,62,293,62,294,62,293,63,292,63,290,64,289,64,288,64</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>317,63,316,62,317,62,317,63,318,63,317,63</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>346,63,345,63,346,63</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>230,23,229,23,230,23,231,23,233,23,234,23,232,23,231,23,230,23</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>248,17,249,17,246,16,247,16,246,16,247,16,249,16,248,16,246,16,245,16,245,15,244,15,245,15,244,14,245,14,244,14,246,14,248,14,251,15,252,15,254,15,255,15,253,16,254,16,255,16,254,17,253,17,251,17,249,17,248,17</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>302,32,301,32,300,32,299,31,298,31,297,31,297,30,297,29,298,29,301,30,305,29,308,30,309,31,310,31,311,31,311,32,308,32,306,32,305,32,302,32</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>269,19,268,19,266,18,267,18,269,18,270,18,271,19,270,19,269,19</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>240,29,241,29,242,29,243,29,245,29,246,29,247,29,248,29,249,29,249,30,248,30,247,30,246,30,247,30,248,30,246,31,244,31,244,32,245,32,246,31,248,32,247,32,248,32,248,33,249,32,250,32,250,33,251,33,249,34,250,34,249,34,250,34,250,35,249,35,250,35,249,35,248,35,247,36,246,36,245,36,244,35,245,35,244,35,245,36,243,37,243,36,242,36,241,36,240,35,239,35,238,34,237,34,236,34,236,33,235,34,234,33,232,32,231,32,232,32,232,31,233,31,234,31,234,32,235,32,236,32,237,32,238,32,239,32,238,32,238,31,239,31,238,31,238,32,239,32,239,31,238,31,239,31,240,31,239,31,238,30,238,31,237,31,236,31,235,30,236,30,237,30,238,30,237,30,236,29,237,29,239,29,240,29,239,29,240,29</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>244,29,241,29,242,29,246,28,247,28,246,29,245,29,244,29</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>227,25,225,25,226,24,227,24,228,24,228,25,229,25,228,25,227,25</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>257,35,255,34,254,35,254,34,254,33,253,32,252,32,253,32,252,32,253,31,252,31,253,31,253,30,252,30,253,30,252,30,253,30,252,30,252,29,253,29,254,29,256,30,256,29,255,29,254,29,255,29,254,29,254,28,257,28,258,28,259,28,261,28,262,28,263,29,264,28,267,29,269,29,268,29,268,30,267,30,266,31,265,31,264,32,263,32,260,32,259,32,257,32,258,32,258,33,259,33,258,34,257,34,257,35</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>205,16,204,16,204,15,202,15,200,16,200,15,203,15,205,15,208,14,211,15,212,15,211,16,207,16,206,15,206,16,205,16</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>203,19,202,18,201,18,200,18,200,17,202,17,206,16,207,16,210,16,211,16,210,17,209,17,207,17,208,17,209,17,209,18,208,18,207,18,206,18,203,19</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>235,21,234,21,237,20,239,20,236,21,235,21</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>197,17,196,17,194,17,195,17,196,16,197,16,196,16,199,17,198,17,197,17</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>164,33,165,33,164,33,165,32,164,32,166,32,165,31,166,31,165,31,166,30,167,30,168,29,167,29,166,28,165,28,166,28,165,28,165,27,171,27,173,27,175,27,176,27,177,27,181,28,180,28,181,28,182,28,182,29,183,28,185,28,187,28,189,28,192,29,193,30,194,30,192,30,189,31,188,31,187,32,183,32,182,33,180,34,179,34,178,35,178,36,177,36,175,36,174,36,173,37,172,37,171,37,170,37,169,37,169,36,167,35,165,35,163,35,162,35,162,34,163,34,162,34,163,34,164,33</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>289,32,288,32,284,31,285,30,286,31,286,30,287,30,288,30,288,31,289,31,289,30,288,30,290,30,291,29,294,29,295,29,296,30,296,31,298,31,298,32,299,32,298,33,297,33,296,33,295,34,296,34,297,33,298,33,297,33,297,34,298,34,297,34,296,34,297,34,297,35,298,34,299,34,300,34,299,34,299,33,300,33,301,33,300,34,301,34,301,33,302,33,302,34,303,34,302,34,302,35,303,35,304,35,303,35,303,34,304,34,304,35,305,35,306,35,305,35,306,35,305,35,304,35,304,34,303,34,304,33,304,34,306,34,307,34,309,34,308,34,307,34,304,33,307,32,308,32,309,32,310,32,309,33,311,33,312,33,314,33,315,34,314,34,312,34,311,34,311,35,310,35,311,34,312,34,313,34,314,34,313,34,313,35,312,35,311,35,312,35,313,35,314,34,315,34,317,34,317,35,316,35,314,35,315,35,315,36,314,36,313,36,314,36,315,35,316,35,316,36,315,36,314,36,315,36,314,37,315,37,316,36,315,36,316,36,317,35,317,36,317,35,318,35,318,36,317,36,317,37,318,37,318,36,319,36,318,37,319,37,318,37,319,37,319,36,320,37,319,37,319,38,320,37,321,37,321,36,322,36,325,36,326,37,325,37,324,37,323,37,323,38,322,38,323,38,322,38,322,39,323,38,326,38,326,37,327,37,328,37,328,38,327,38,326,39,325,39,324,39,324,40,324,39,325,39,326,39,326,40,325,40,326,40,326,39,327,39,330,38,329,39,328,39,329,39,328,39,329,39,330,39,330,38,331,38,335,39,334,39,333,40,332,40,329,40,330,40,330,41,329,41,328,41,329,41,330,41,330,40,331,40,332,40,333,40,334,40,333,40,331,41,330,41,329,42,330,42,330,41,331,41,332,41,333,41,334,40,335,40,334,40,335,40,336,40,338,41,336,41,335,41,335,42,334,42,332,42,330,42,329,42,330,42,332,42,333,42,334,42,336,42,338,42,339,42,339,43,340,43,339,43,338,43,337,43,335,43,332,42,332,43,335,43,334,43,333,43,332,43,333,43,332,44,333,44,333,43,334,43,336,43,335,44,335,43,334,44,335,44,336,44,334,44,336,44,334,44,333,44,332,44,331,44,332,44,331,44,333,44,334,44,335,44,335,45,333,45,334,45,335,45,336,45,337,45,338,45,339,45,340,45,338,45,336,45,336,46,337,46,338,45,338,46,337,46,338,46,339,46,339,47,340,46,341,46,340,46,341,46,340,47,339,47,340,47,341,47,342,46,341,47,342,47,341,48,342,47,343,47,343,48,344,48,343,47,344,47,344,46,345,47,344,47,344,48,344,47,345,47,346,47,346,48,347,47,347,48,346,48,348,48,348,49,345,48,347,49,346,49,345,49,348,49,347,49,346,49,345,49,346,49,349,49,348,49,348,50,348,49,349,49,350,49,351,49,350,49,350,50,349,50,348,50,349,50,350,50,349,50,351,50,351,51,351,50,352,50,353,50,352,50,353,50,353,49,353,50,354,50,353,50,354,50,355,50,354,50,355,50,356,50,356,51,355,51,354,51,353,50,353,51,354,51,355,51,354,51,355,51,354,52,353,52,353,51,352,51,351,51,352,51,353,52,352,52,351,52,351,51,351,52,352,52,353,52,353,53,351,52,350,52,351,52,352,53,353,53,352,53,351,53,352,53,351,53,352,53,352,54,351,54,352,54,351,54,351,53,351,54,350,54,349,53,349,54,350,54,349,54,350,54,349,54,349,55,349,56,349,55,348,56,348,55,349,55,348,55,347,55,346,55,347,54,346,55,345,55,345,54,346,54,345,54,344,54,345,54,344,54,345,53,344,53,344,54,343,53,344,53,345,52,345,53,345,52,346,52,345,52,344,52,343,53,342,53,342,52,343,52,343,51,342,52,341,52,340,52,340,51,339,51,338,51,339,51,338,51,337,51,336,51,338,51,337,51,338,52,337,52,337,51,336,51,336,52,338,52,338,53,337,53,336,53,335,53,336,52,335,52,334,52,335,52,335,53,335,52,335,53,334,52,335,52,335,53,334,53,335,53,336,53,336,54,335,54,336,54,337,53,338,54,337,54,338,54,337,54,338,54,337,54,338,55,339,55,338,55,339,55,339,56,340,56,339,56,339,55,340,55,340,56,341,56,340,56,341,56,342,56,342,57,342,56,343,56,342,56,343,56,343,57,342,57,343,57,344,57,344,58,343,58,344,58,343,58,344,58,345,58,345,59,345,58,346,59,345,59,346,59,346,60,346,61,345,60,344,59,344,60,345,60,344,60,345,60,345,61,344,61,345,61,344,61,345,61,345,62,346,62,345,62,344,62,344,61,344,62,345,62,345,63,344,63,344,62,343,62,344,62,343,62,344,62,343,62,344,62,343,62,342,62,342,61,342,62,342,61,342,62,341,62,341,61,341,62,340,61,339,61,339,60,339,61,340,61,340,62,339,61,338,61,339,61,338,61,339,60,338,60,338,61,337,60,336,60,336,59,336,60,335,60,335,59,335,60,334,60,334,59,333,59,333,60,335,61,336,61,337,61,336,61,336,62,336,61,337,61,337,62,338,62,339,62,339,63,339,62,339,63,340,63,341,63,340,63,341,64,340,64,341,63,341,64,342,64,341,64,342,65,341,65,340,65,339,64,338,64,337,64,336,64,334,64,333,64,333,63,332,63,331,63,331,62,330,62,329,62,328,62,327,62,326,62,327,62,327,61,326,62,326,61,327,61,326,61,325,61,324,61,325,61,324,61,325,61,324,61,324,60,323,60,324,60,325,60,326,60,325,60,325,59,325,60,324,59,323,59,324,59,324,60,324,59,323,60,323,59,322,59,323,59,322,59,322,58,321,58,322,59,321,59,321,58,320,58,319,58,319,57,320,57,319,57,320,57,319,57,320,57,319,57,320,57,319,57,318,57,318,58,317,57,318,57,317,57,317,56,317,57,317,56,317,57,316,57,315,56,316,56,315,56,316,57,315,57,314,57,313,57,312,57,313,57,312,57,311,57,310,57,311,58,310,58,309,58,310,58,309,58,308,58,307,58,307,57,307,58,306,57,305,57,306,57,305,57,305,56,307,55,308,55,307,55,307,54,308,54,307,54,308,54,309,54,312,55,313,55,313,56,314,56,313,56,314,55,313,55,312,55,313,54,313,55,314,55,314,54,315,54,316,55,316,54,317,54,318,54,319,54,318,53,317,53,316,52,317,52,319,51,320,51,320,50,324,51,325,51,326,51,326,52,326,53,327,52,328,52,329,52,330,52,331,52,332,51,331,51,330,51,331,51,332,51,331,51,330,51,328,50,327,50,326,49,326,50,325,50,325,51,321,50,320,50,321,50,321,49,322,49,323,49,322,49,322,48,322,47,321,47,322,47,321,47,321,46,320,46,319,46,320,46,320,45,319,46,318,46,318,45,318,44,317,44,318,45,317,45,316,45,315,44,316,44,315,44,316,44,315,44,314,44,315,44,314,44,315,43,315,44,316,43,315,43,314,44,313,43,313,44,310,44,309,44,310,44,310,43,311,43,312,43,313,43,312,43,311,42,310,42,311,42,310,41,310,42,309,42,308,42,308,41,309,41,308,41,307,41,306,40,305,40,304,40,304,39,303,39,302,39,303,39,302,38,302,39,301,39,302,40,302,39,303,40,304,41,303,41,300,41,299,41,299,40,299,41,298,40,296,40,294,40,296,40,297,41,295,41,294,41,294,40,290,40,291,40,294,41,293,41,292,41,291,41,290,40,289,41,287,41,285,40,283,40,282,40,283,40,284,41,282,40,281,40,280,40,280,39,281,39,280,39,280,40,279,40,279,39,278,39,279,39,279,40,276,40,277,40,276,40,275,40,275,39,276,40,275,39,274,39,273,39,272,39,272,38,271,38,272,38,271,37,272,37,273,37,274,37,274,38,275,38,277,38,278,37,276,37,271,37,270,36,269,36,270,36,269,36,270,35,269,35,270,34,271,34,270,34,270,33,271,33,271,32,272,32,271,32,272,32,271,32,271,31,272,31,273,31,272,31,273,31,273,30,274,30,276,30,277,29,281,29,284,29,285,29,285,30,284,30,282,30,280,32,279,32,279,33,280,33,281,33,280,34,281,35,283,36,285,36,285,37,284,37,283,37,282,37,281,37,279,38,280,38,283,37,284,37,285,37,284,37,285,37,285,38,285,37,286,37,285,37,285,36,286,36,286,35,285,35,285,36,284,35,283,35,281,35,281,34,282,34,283,34,285,34,287,34,287,35,287,34,286,34,285,34,285,33,284,33,283,33,282,33,282,32,283,32,282,32,283,32,284,32,284,31,283,31,284,31,285,31,287,31,289,32</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>259,18,252,18,251,18,251,17,253,17,254,17,255,17,258,17,259,17,260,17,260,18,259,18</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>184,24,183,24,181,24,183,23,184,23,185,23,185,22,187,22,187,23,186,23,185,24,184,24</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>353,103,350,103,349,102,348,102,346,101,347,101,349,101,351,101,353,102,354,103,355,103,354,103,353,103</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>199,20,195,20,196,20,197,20,198,20,199,20</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>167,102,166,101,167,102</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>240,17,238,17,237,17,237,16,236,16,234,16,233,16,232,16,231,16,232,15,231,15,228,16,226,16,225,15,224,15,225,15,226,15,229,15,227,15,228,15,229,14,230,14,229,14,228,14,227,14,228,14,227,14,226,14,225,14,224,14,225,14,225,13,223,13,224,13,228,12,231,13,232,13,232,14,231,14,232,14,232,13,234,13,235,13,236,14,238,14,239,14,240,14,239,15,241,15,240,15,240,16,241,16,243,16,243,17,242,17,241,17,240,17</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>263,21,265,20,266,21,268,21,267,21,265,21,267,21,272,22,271,22,269,22,268,22,269,22,266,22,265,22,267,22,268,22,269,22,266,23,267,23,266,23,267,23,268,23,269,23,270,22,270,23,271,23,272,23,272,24,271,24,272,24,273,24,273,23,274,24,275,24,276,24,277,24,278,24,279,24,280,24,281,24,282,24,284,24,286,23,287,23,288,23,290,23,292,23,293,23,296,23,296,24,299,24,300,24,299,24,298,24,299,24,300,24,301,24,301,25,300,25,298,25,299,26,300,25,301,26,302,26,301,26,300,26,299,26,298,26,299,26,299,27,296,27,294,27,293,27,292,27,291,27,290,27,290,26,289,26,290,26,289,27,288,27,286,27,285,27,285,26,284,27,283,27,283,26,283,27,281,27,280,27,279,27,280,27,279,27,278,27,277,27,278,27,277,27,276,27,274,27,274,26,275,26,274,26,273,26,273,27,273,26,272,26,272,27,270,27,269,27,268,27,267,26,266,26,267,26,266,26,266,27,266,26,265,26,266,26,265,27,264,26,265,26,264,26,263,26,263,25,262,25,263,24,262,24,263,24,263,23,262,22,260,22,260,21,259,22,258,22,257,22,256,22,254,22,253,22,254,22,255,22,255,21,252,21,251,21,252,21,253,21,252,21,250,21,250,20,249,20,250,20,251,20,249,20,250,20,249,20,250,19,252,19,256,20,257,20,258,20,259,20,260,20,260,21,259,21,260,21,263,21</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>379,106,378,106,379,106</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>240,26,239,25,238,25,239,25,238,25,239,25,238,25,237,24,238,24,240,24,239,24,240,24,236,24,232,24,231,24,232,24,231,23,232,23,233,23,232,23,233,23,234,23,235,23,236,23,235,23,236,23,235,23,235,22,235,23,234,22,235,22,233,22,233,21,234,21,233,21,234,21,235,21,236,22,237,22,238,22,237,22,238,22,239,23,240,23,241,23,240,23,239,22,240,22,241,22,240,22,239,22,238,22,239,22,239,21,237,21,238,21,239,21,241,21,242,21,243,21,242,21,243,21,243,20,244,20,244,21,246,21,247,21,246,21,247,21,246,22,247,22,247,23,246,23,247,23,247,24,248,24,247,24,246,24,245,24,246,24,245,24,246,24,245,24,245,25,246,25,247,25,246,25,245,25,246,25,243,26,243,25,241,26,241,25,242,25,241,25,241,26,240,26</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>249,32,248,32,248,31,249,31,250,31,250,32,249,32</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>225,19,223,19,224,19,223,19,223,18,222,18,223,18,222,18,221,17,223,17,224,18,225,18,224,18,226,19,225,19</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>233,17,232,17,234,17,236,17,237,17,233,17</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>257,27,254,26,253,26,252,26,251,26,251,25,251,26,250,26,251,26,251,25,250,26,250,25,251,25,252,24,251,24,252,24,253,24,255,24,256,24,257,24,258,24,259,25,259,26,259,27,257,27</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>196,33,197,33,199,32,199,33,198,33,199,32,200,32,200,31,202,32,206,32,206,33,205,33,204,33,204,34,204,33,205,34,204,34,205,34,205,33,206,33,205,33,206,33,206,34,206,33,207,33,206,33,207,33,208,33,209,33,210,33,209,33,210,33,209,33,209,32,210,33,210,32,209,32,208,32,207,32,207,31,208,31,210,32,211,32,210,32,211,32,213,32,213,33,212,33,213,33,214,33,214,34,214,35,215,35,216,36,216,35,217,35,218,35,217,35,218,35,217,35,217,34,216,34,216,33,215,33,216,33,215,33,215,32,215,31,216,31,215,31,215,30,217,31,218,31,219,31,220,31,221,31,222,31,222,32,223,32,224,32,223,32,224,33,225,34,224,34,225,35,226,35,226,36,227,36,226,36,226,37,226,38,227,38,229,39,230,39,231,39,230,39,230,38,230,39,231,39,233,39,234,40,235,40,236,40,237,40,236,40,237,41,236,42,236,41,235,41,235,42,234,41,233,41,232,41,231,41,232,41,232,42,231,42,230,42,230,41,229,41,229,42,230,42,231,42,230,43,231,42,232,42,233,42,234,42,233,42,233,43,234,43,234,44,232,44,231,44,230,44,229,44,227,44,226,44,225,44,224,44,225,43,224,43,223,43,222,43,221,43,220,43,221,43,221,42,220,42,219,42,219,43,218,43,217,44,215,44,214,44,213,44,209,45,208,45,207,45,205,45,206,45,205,45,201,45,200,45,199,45,199,44,198,44,199,44,198,44,199,43,198,43,197,43,195,43,194,43,192,43,190,42,189,42,188,41,187,41,188,40,190,40,194,40,197,40,198,40,200,40,202,40,203,40,204,40,205,40,205,39,204,39,203,39,202,39,201,39,200,39,198,38,197,39,196,38,195,39,191,39,190,39,189,39,187,39,186,39,186,38,185,38,184,38,186,37,189,37,191,36,192,36,191,36,193,36,194,36,193,36,188,36,187,36,186,36,185,36,186,36,186,35,185,36,184,36,183,36,182,36,182,35,183,35,183,34,184,34,185,34,185,33,184,33,185,32,186,32,187,32,192,31,196,30,197,31,198,31,197,32,198,32,197,32,196,32,197,32,196,33</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>312,117,311,117,310,118,309,120,306,120,303,120,302,120,302,121,303,122,302,122,299,123,296,124,295,124,292,125,291,125,290,125,290,124,291,123,292,123,292,122,292,121,293,120,293,119,292,117,292,114,291,114,289,113,289,112,288,112,287,112,287,111,286,111,285,111,285,110,283,109,280,108,277,107,274,106,273,106,271,107,271,106,270,106,270,107,270,106,269,106,268,106,267,106,266,106,265,106,264,106,263,105,263,106,262,106,262,105,261,105,262,105,260,105,259,105,258,105,257,104,256,104,255,104,255,103,254,102,254,103,254,104,248,104,238,104,228,104,218,104,209,104,199,104,189,104,179,104,171,104,171,103,170,103,170,104,170,103,171,103,171,102,171,103,170,103,170,102,170,101,170,102,169,102,168,102,167,102,167,101,168,101,168,102,169,101,168,102,168,101,168,100,168,101,167,101,166,101,165,101,165,100,165,101,165,100,166,100,165,100,166,99,165,99,165,100,165,99,164,100,164,99,165,99,165,98,165,99,164,99,163,99,163,98,163,99,162,99,161,99,162,99,161,99,162,98,163,98,163,97,163,98,162,98,163,98,162,98,161,99,161,98,160,98,161,98,160,98,160,97,160,98,159,98,158,98,159,98,158,98,157,98,157,97,156,97,157,97,158,97,158,96,158,97,157,97,157,96,156,97,156,96,157,96,158,95,159,96,160,95,159,96,157,95,157,96,156,96,157,96,156,96,156,95,157,94,158,94,159,94,159,93,158,93,159,92,158,92,159,92,158,93,156,94,156,93,156,94,156,93,156,94,155,93,156,93,155,93,155,94,154,94,155,93,155,92,154,92,154,91,153,91,153,90,154,90,155,90,156,91,155,90,154,90,153,90,153,89,154,89,153,89,154,88,153,88,153,89,152,89,152,90,151,90,150,89,149,89,149,88,150,88,151,88,150,88,149,88,149,87,148,87,149,87,148,87,148,86,149,86,149,87,150,87,149,86,150,86,150,85,150,86,150,85,150,84,149,85,149,86,149,85,150,85,149,84,149,83,150,83,149,83,149,82,148,82,147,81,146,81,145,81,144,81,144,80,143,80,143,79,142,79,143,79,142,78,140,76,139,75,138,75,138,74,137,74,136,74,136,73,135,73,134,72,135,72,134,72,133,71,130,72,131,72,130,72,130,73,129,73,127,74,127,73,126,72,124,71,123,71,122,71,122,70,122,69,120,69,120,70,118,70,117,70,116,60,116,50,117,42,118,42,120,42,122,42,123,42,124,43,125,43,128,44,129,44,130,44,131,44,133,44,134,44,133,44,134,44,135,44,136,44,137,44,136,44,136,43,137,43,138,43,138,42,140,42,141,42,142,42,143,41,142,41,142,42,142,41,143,41,144,41,145,41,146,41,146,40,147,40,146,40,147,40,148,40,149,40,150,40,151,40,149,41,148,41,147,42,146,42,143,42,142,43,143,43,142,43,141,43,141,44,141,43,140,43,140,44,139,44,140,44,141,44,140,44,139,44,140,44,141,44,142,44,141,44,141,43,142,43,143,43,144,43,144,42,145,42,144,42,145,42,145,43,145,42,146,42,145,43,146,42,146,43,146,42,147,42,146,42,146,43,147,42,147,43,146,43,147,43,147,42,148,42,147,42,148,41,150,41,152,41,153,41,152,41,153,41,155,41,155,40,154,40,155,40,157,40,156,40,155,40,155,39,156,39,155,39,156,39,158,40,159,40,159,41,162,42,163,43,163,42,164,42,163,42,164,42,163,42,163,41,164,41,165,41,165,42,165,41,164,41,165,41,166,41,165,40,165,41,165,40,164,41,164,40,165,40,166,40,165,40,166,40,166,41,167,41,167,42,166,42,167,42,168,42,167,42,168,42,169,42,170,42,170,41,171,41,173,41,174,41,177,42,179,42,180,42,183,43,184,43,187,44,189,44,190,44,191,44,192,44,191,44,192,44,193,44,195,44,196,44,196,45,197,45,198,45,197,46,195,46,194,46,194,47,193,47,194,47,196,47,197,47,199,47,202,47,203,47,204,47,205,47,206,47,207,47,208,47,209,47,209,46,210,47,209,47,210,47,211,47,210,47,211,47,212,47,213,48,212,48,213,48,214,48,215,49,216,49,215,49,214,49,215,50,216,50,216,51,216,50,217,51,218,51,217,51,216,50,216,49,217,50,216,49,217,49,217,50,216,50,217,50,218,50,218,49,217,49,218,49,217,49,216,48,217,48,216,48,216,47,215,47,216,47,217,47,216,47,216,46,216,47,217,46,218,46,219,46,220,46,220,45,221,45,222,45,223,45,221,45,220,45,220,46,219,45,218,45,218,46,216,45,216,46,217,46,216,46,215,46,214,46,215,46,214,46,213,46,214,45,215,45,218,44,219,44,220,44,221,44,222,44,223,44,223,45,224,45,223,45,224,45,224,46,225,45,225,46,226,46,225,46,226,46,228,46,229,46,232,47,233,47,234,47,235,47,237,47,238,47,240,47,242,47,243,47,244,47,243,47,243,46,244,46,245,47,246,47,246,48,247,48,248,47,247,47,247,46,246,46,246,47,245,47,244,46,245,46,243,45,244,45,245,46,245,45,246,45,245,45,246,45,247,45,248,45,248,46,249,46,250,46,249,46,250,46,249,46,250,46,251,46,252,46,251,46,251,47,251,48,251,47,250,48,251,48,250,48,251,48,251,49,252,48,252,49,253,48,253,49,252,49,253,49,254,49,253,50,252,50,252,49,251,49,251,50,251,49,250,49,250,50,251,50,252,50,252,51,253,50,252,50,251,50,253,50,254,50,253,49,254,49,253,49,254,49,253,48,254,48,253,48,252,47,253,47,253,46,254,46,255,46,257,46,257,45,259,45,258,45,258,44,259,44,258,44,258,43,258,44,257,44,256,44,256,43,257,43,257,42,258,42,259,42,258,43,259,42,258,42,257,42,256,42,256,41,255,42,252,41,251,41,250,40,250,39,251,39,252,39,251,39,250,38,250,37,251,37,251,36,252,36,253,37,253,36,252,36,253,35,254,35,255,35,256,35,254,35,255,35,256,35,256,36,257,35,258,35,258,36,260,36,261,36,261,37,261,38,260,38,261,38,262,38,261,38,262,38,263,39,264,39,263,40,264,40,264,39,264,40,265,40,263,40,262,40,263,40,264,40,263,41,262,41,261,41,262,41,262,42,263,42,264,42,265,42,266,42,265,42,266,42,267,42,268,42,267,42,268,42,267,42,267,43,266,43,267,42,266,43,268,43,267,43,267,44,268,44,268,45,269,45,269,46,269,45,270,45,270,44,270,45,270,44,270,43,272,43,273,43,275,44,276,44,276,46,275,46,275,45,274,46,275,46,274,46,274,47,275,47,275,48,276,48,277,49,278,49,279,49,278,48,279,49,279,48,280,48,280,47,281,47,281,46,281,47,282,46,282,45,283,44,284,44,285,44,284,44,285,44,284,44,285,44,285,43,286,44,286,43,284,43,285,43,284,43,283,43,283,42,283,41,284,41,283,41,284,41,285,41,286,41,287,41,288,41,289,41,290,41,291,41,293,42,292,42,291,42,292,42,290,42,291,42,293,42,292,42,293,43,294,43,295,43,296,43,295,43,295,44,294,44,295,44,296,44,296,45,295,45,294,45,293,45,292,45,292,46,293,46,292,46,293,46,294,46,293,46,293,47,294,47,295,48,296,48,295,49,295,50,294,50,293,50,292,50,292,51,290,51,289,51,288,51,287,51,287,50,288,50,288,51,288,50,287,50,286,50,287,50,286,50,285,49,286,50,284,50,285,50,286,50,285,50,286,50,285,50,286,50,287,50,286,50,287,50,287,51,288,51,288,52,287,52,286,52,286,51,286,52,285,52,284,52,284,51,283,51,282,51,281,51,280,51,279,51,280,51,279,51,280,52,282,52,281,52,282,52,281,53,280,53,279,54,278,54,277,55,276,55,275,54,274,54,272,53,271,53,270,53,269,53,268,53,269,53,268,53,266,53,265,53,266,53,269,53,270,53,271,54,272,54,272,55,276,55,278,55,279,55,278,56,277,56,277,57,276,57,275,58,276,58,275,58,274,58,273,58,273,59,272,58,272,59,272,58,272,59,271,58,271,59,270,58,269,58,270,58,270,59,269,59,269,58,269,59,270,59,269,59,269,60,268,60,268,59,267,60,268,60,268,59,268,60,267,60,265,59,264,59,263,59,262,59,261,59,259,58,258,58,259,58,259,59,258,59,259,59,260,59,259,59,262,59,263,59,263,60,262,60,263,60,264,59,265,60,267,60,267,61,268,61,267,62,266,62,265,62,263,62,262,62,263,63,264,63,263,63,262,63,261,63,262,64,261,64,260,64,261,64,260,64,260,65,259,64,260,65,259,65,260,65,259,65,260,65,259,65,260,65,258,66,258,67,257,67,258,67,257,68,256,68,256,69,255,69,256,69,255,69,256,69,255,70,255,71,255,72,256,72,255,73,255,74,256,74,257,74,257,75,256,76,257,75,257,74,258,74,259,74,260,74,260,75,261,76,261,77,262,78,262,79,261,80,262,79,263,79,262,80,263,80,263,79,265,79,267,79,268,79,270,80,273,80,275,81,276,81,277,82,277,83,278,83,280,83,281,83,282,84,283,84,284,84,284,85,283,85,284,85,286,85,287,85,288,85,289,85,288,85,290,85,291,85,292,85,293,85,292,85,293,85,293,86,292,88,293,88,293,89,293,90,293,91,293,92,294,92,295,93,295,94,294,94,295,94,297,94,297,95,298,95,298,96,298,97,297,97,298,97,298,96,299,97,302,98,301,98,301,97,300,97,300,96,301,96,302,96,303,97,303,96,303,95,302,95,303,95,303,94,304,94,304,93,303,93,303,92,303,91,303,90,302,90,303,90,302,90,303,90,302,90,302,89,303,89,302,89,303,89,302,89,303,89,302,88,301,88,301,87,300,87,301,86,302,86,303,86,304,85,306,85,307,84,308,84,308,83,309,82,310,82,310,80,310,79,309,78,309,77,308,76,306,76,305,75,304,75,305,75,304,75,304,74,305,74,305,73,306,73,306,72,306,71,307,72,307,71,308,71,307,71,308,71,308,70,307,70,306,69,307,69,306,69,307,68,306,68,307,68,306,68,305,68,306,67,306,66,307,66,306,66,307,66,306,66,306,65,305,64,305,63,306,63,307,63,310,63,312,64,313,64,314,64,315,64,316,64,315,64,316,64,318,63,319,63,321,64,322,64,322,65,321,65,322,65,323,65,324,65,323,66,324,66,324,65,324,66,325,66,324,66,325,66,324,66,325,67,324,67,325,67,326,67,327,67,328,67,329,67,329,68,330,68,331,68,330,68,331,67,331,68,330,68,331,69,330,69,330,70,331,70,330,70,330,71,328,70,329,71,330,71,331,71,331,72,330,72,331,72,330,72,330,73,331,72,331,73,332,73,331,73,331,74,330,74,330,73,330,74,329,74,330,74,330,75,331,74,332,74,333,74,334,74,334,75,335,75,334,76,333,77,332,77,331,77,333,77,334,76,335,76,335,75,336,75,336,76,335,76,336,76,336,75,336,76,337,76,336,76,336,77,337,76,338,75,339,75,340,75,340,74,341,74,341,75,342,75,341,75,342,75,341,75,342,75,341,74,342,74,342,73,342,74,342,73,343,73,344,73,343,73,342,73,343,73,343,72,344,72,345,72,343,72,343,71,344,71,344,70,345,70,345,69,346,70,345,70,346,70,345,70,345,71,346,70,346,71,347,71,347,70,347,71,348,72,347,72,348,72,347,72,348,72,348,73,349,72,349,73,348,73,347,73,348,73,348,74,348,73,350,73,349,73,350,73,350,74,351,74,350,74,351,74,350,74,351,74,351,75,350,75,349,75,349,76,350,75,351,75,352,75,352,76,351,76,352,76,350,76,349,77,350,76,351,76,352,76,353,76,352,77,352,76,352,77,353,77,354,78,353,78,352,78,353,78,354,78,354,79,353,79,354,79,355,79,354,79,355,79,355,80,354,80,355,81,354,81,354,80,353,81,352,80,353,80,352,80,353,81,354,81,355,81,354,81,353,81,354,81,355,82,354,82,355,82,354,82,353,82,354,82,355,82,356,82,355,82,355,83,356,83,357,83,358,83,358,84,358,83,359,83,358,83,358,84,359,84,358,84,359,84,358,84,358,85,357,85,357,86,359,85,360,85,361,85,360,86,361,85,362,85,361,86,362,85,363,85,362,86,363,85,363,86,364,86,365,86,366,86,366,87,367,87,366,87,365,88,364,88,363,88,361,88,361,89,363,88,364,88,363,88,363,89,360,89,359,89,359,90,358,89,357,89,358,89,358,90,359,90,358,90,358,91,359,90,359,91,358,91,359,91,360,90,361,90,362,89,363,89,365,88,366,88,365,88,364,88,365,88,367,88,368,89,367,90,368,90,367,90,368,90,368,89,369,89,370,89,369,89,370,90,371,90,372,90,371,90,372,90,371,90,372,90,372,91,371,92,372,92,371,92,372,92,372,93,371,93,372,93,371,93,372,93,373,93,372,93,372,94,373,94,372,94,372,95,372,94,372,95,370,95,370,96,369,96,368,96,367,96,366,96,365,97,364,97,363,97,364,97,363,97,363,98,363,97,362,97,363,98,362,98,361,99,360,99,360,100,359,100,357,100,356,100,355,100,354,100,353,100,352,100,351,100,349,100,348,100,347,100,346,100,345,100,344,100,342,100,341,100,340,100,339,100,339,101,338,101,338,102,337,103,335,103,334,103,333,104,334,104,333,104,332,104,332,105,331,106,330,106,329,106,328,105,327,105,327,106,328,105,328,106,329,106,330,106,330,107,329,108,328,108,328,109,327,109,326,110,327,110,328,110,328,109,329,109,329,108,331,107,332,106,334,105,336,104,338,104,340,103,342,103,343,103,345,103,347,104,346,104,347,105,345,105,345,106,344,106,343,106,342,106,341,106,340,106,339,106,339,107,340,106,342,107,343,107,342,108,343,108,344,107,345,107,345,108,345,109,343,109,344,109,345,109,345,110,345,111,346,111,346,112,346,111,346,112,347,112,348,112,347,112,348,113,349,113,350,113,349,113,350,113,351,113,352,113,351,114,352,113,352,114,352,113,354,113,354,114,355,114,355,113,356,114,355,114,356,114,357,115,356,115,355,115,354,115,355,115,354,115,353,115,353,116,352,116,351,116,350,116,350,117,349,117,349,116,349,117,349,116,349,117,348,117,348,116,347,117,346,117,347,117,346,118,347,118,346,118,345,118,346,118,345,119,344,119,344,120,344,119,343,119,344,119,343,120,342,120,342,119,342,120,342,119,341,119,341,118,341,117,342,117,341,117,342,116,342,117,343,117,343,116,342,116,344,116,345,115,346,115,346,114,346,115,347,115,346,115,347,115,347,116,347,115,348,115,349,115,349,114,348,114,347,114,346,114,345,114,345,115,345,114,345,115,345,114,346,113,347,113,346,113,347,113,346,113,345,112,345,113,346,113,345,114,344,114,343,114,342,115,341,115,341,114,342,114,341,114,341,115,340,115,339,115,338,115,337,115,337,114,336,113,336,111,336,109,335,109,335,108,334,108,334,109,333,109,332,109,332,108,331,109,329,110,329,111,329,112,329,113,328,113,327,114,328,114,327,114,327,115,327,114,326,114,326,115,325,115,324,115,321,115,320,115,319,115,318,115,315,115,314,116,313,116,312,117</Points>\n    <Keys>Canada, CAN, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>464,200,464,199,463,199,464,199,465,199,464,200</Points>\n    <Keys>Cape Verde, CPV, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>469,206,468,205,469,205,469,206</Points>\n    <Keys>Cape Verde, CPV, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>466,206,466,205,467,205,467,206,466,206</Points>\n    <Keys>Cape Verde, CPV, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>471,203,471,202,471,203</Points>\n    <Keys>Cape Verde, CPV, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>608,218,609,218,609,219,611,221,610,222,610,223,610,224,610,223,610,224,612,224,612,225,612,226,613,226,614,226,615,227,615,228,616,228,618,230,619,231,618,231,619,232,620,233,621,233,621,234,621,235,622,235,621,235,620,235,619,235,618,235,617,235,616,234,616,235,615,235,615,236,614,236,613,235,612,236,611,236,610,237,609,237,609,236,608,236,608,237,607,237,607,238,606,238,605,238,604,238,603,237,603,238,602,237,601,237,601,236,600,236,599,235,598,235,597,235,597,236,596,237,595,237,595,238,595,239,595,240,594,240,593,240,592,240,592,239,592,240,591,240,590,240,589,240,589,241,589,242,588,244,588,243,588,242,587,241,585,239,585,238,585,237,584,237,584,236,584,235,583,235,583,234,583,233,583,232,584,232,584,231,584,230,585,230,585,229,586,228,587,228,588,228,589,227,590,228,591,227,592,227,593,227,594,226,595,226,596,226,597,225,597,224,596,224,597,223,598,224,599,223,600,223,601,223,602,223,601,222,602,222,602,221,603,221,604,221,604,220,605,220,605,219,606,218,607,217,608,218</Points>\n    <Keys>Central African Republic, CAF, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>585,181,588,180,595,183,604,188,611,192,611,194,611,203,610,203,609,203,608,204,608,205,608,206,607,207,607,208,606,209,606,210,606,211,605,211,605,212,605,213,606,213,606,212,607,213,607,214,607,216,608,216,608,217,608,218,607,217,606,218,605,219,605,220,604,220,604,221,603,221,602,221,602,222,601,222,602,223,601,223,600,223,599,223,598,224,597,223,596,224,597,224,597,225,596,226,595,226,594,226,593,227,592,227,591,227,590,228,589,227,588,228,587,228,586,228,586,227,585,225,584,224,583,223,581,222,582,221,583,221,584,221,585,221,586,221,587,221,586,220,585,219,585,218,585,217,585,216,585,215,585,214,584,214,584,213,584,212,584,213,584,212,583,212,583,211,582,211,581,211,581,210,580,209,580,207,581,207,580,207,581,206,581,205,583,203,586,200,586,198,586,195,587,191,587,189,586,188,585,186,585,185,585,181</Points>\n    <Keys>Chad, TCD, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>316,394,317,394,318,394,316,394</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>318,382,317,382,318,382</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>314,405,314,404,314,405,314,404,314,405</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>330,416,330,415,331,415,332,415,330,416</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>313,397,313,396,312,396,313,396,314,396,313,397</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>315,389,314,389,315,389,315,388,314,388,315,388,315,389</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>315,398,314,398,315,398</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>338,416,337,416,336,416,335,416,335,415,334,415,337,415,338,415,338,416</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>328,416,327,416,327,415,326,415,327,415,328,415,327,416,329,416,328,416</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>334,408,334,410,334,412,334,414,334,415,333,415,332,415,331,415,330,415,329,415,330,415,329,415,328,415,327,415,328,414,327,415,326,415,327,414,326,414,326,415,326,414,325,414,325,415,325,414,324,414,323,414,324,414,323,414,324,414,325,414,324,414,325,414,326,414,325,414,326,414,327,414,327,413,328,414,327,414,328,414,327,414,328,414,329,414,328,414,328,413,327,413,329,414,329,413,330,413,330,414,330,413,331,414,332,414,331,414,331,415,332,414,330,413,329,413,329,412,331,411,330,411,329,411,328,411,328,410,328,409,328,410,329,410,329,409,328,409,329,409,330,409,331,408,332,408,332,409,333,408,334,408</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>317,403,316,403,316,402,315,402,316,402,317,403</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>314,397,314,396,313,396,313,395,314,396,314,397</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>324,414,324,413,323,413,323,412,324,412,325,412,324,412,324,413,324,412,324,413,325,413,324,413,324,414</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>315,404,315,403,315,404,315,403,316,403,316,404,315,404</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>317,386,316,386,316,385,317,385,318,385,317,385,317,386</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>317,406,317,405,318,405,317,406,318,406,317,406</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>328,413,327,413,327,412,328,412,327,412,328,411,328,412,328,413,327,412,328,412,328,413</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>317,408,317,407,316,407,317,407,318,407,318,408,317,408</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>318,381,317,380,316,380,317,379,317,378,317,377,317,376,318,376,317,376,318,376,319,376,319,377,319,378,318,378,319,378,318,378,319,379,318,379,319,380,318,380,318,381</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>320,385,319,385,320,385,319,385,319,384,320,384,321,384,321,385,320,385</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>319,388,318,388,318,387,319,387,318,387,319,387,319,388</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>314,405,315,404,315,405,315,404,316,404,316,405,315,404,315,405,314,405</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>316,397,315,396,314,396,315,396,315,395,316,396,315,396,316,396,316,397</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>315,407,314,407,315,407,314,406,315,406,315,405,315,406,315,407</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>314,400,313,400,313,399,314,400</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>321,413,320,413,321,413,321,412,322,412,321,412,320,412,320,413,320,412,319,412,319,411,320,411,321,412,321,411,320,411,319,411,320,411,321,411,320,411,321,411,321,412,321,411,321,412,322,412,322,411,321,411,322,411,322,412,323,412,322,412,323,412,323,413,322,413,322,412,322,413,321,413</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>314,398,314,397,313,398,313,397,314,397,314,398</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>318,407,317,406,318,407</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>318,386,317,386,318,385,318,386</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>335,418,335,417,334,417,333,417,333,416,332,416,331,416,332,416,331,416,332,417,331,417,330,416,331,416,330,416,329,416,330,416,331,416,332,415,333,415,334,415,334,416,335,416,334,416,333,416,332,416,334,416,335,416,334,416,333,416,334,417,334,416,334,417,335,417,336,417,335,417,336,418,335,418</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>315,401,315,400,315,401,315,400,316,400,315,400,315,399,316,399,315,399,314,399,315,399,314,399,314,400,315,399,315,400,314,400,315,400,314,400,314,399,313,399,313,398,314,399,314,398,314,399,314,398,315,399,315,398,315,397,315,398,315,397,314,397,315,397,314,397,315,397,314,397,315,397,316,397,316,398,316,399,316,400,316,401,315,401</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>314,402,314,401,313,402,313,401,314,401,313,401,314,401,313,401,314,401,315,401,314,401,315,401,314,401,314,402</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>317,385,316,385,317,385,316,385,316,384,317,384,318,384,318,385,317,385</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>316,388,316,387,317,387,317,388,316,388</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>315,403,315,402,315,403</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>314,396,314,395,315,395,315,396,314,396</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>318,409,318,408,317,408,318,408,318,409</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>315,395,314,395,314,394,314,395,314,394,315,394,315,395</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>326,414,325,413,326,413,325,413,324,413,325,413,325,412,325,413,325,412,326,413,327,413,326,413,326,414</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>314,403,313,403,313,402,314,402,313,402,314,402,314,403</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>320,411,319,410,318,410,317,410,316,409,315,409,316,409,317,409,318,409,318,410,319,410,320,410,319,410,320,411</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>328,306,329,305,330,305,330,304,330,303,331,303,331,304,332,304,332,305,332,306,332,307,333,307,333,308,334,309,333,310,334,310,334,311,333,311,333,312,334,312,334,313,335,314,335,315,335,316,336,317,336,318,336,319,337,319,338,319,338,320,338,321,337,323,335,324,334,324,334,325,334,326,334,327,334,328,334,329,334,330,335,331,335,332,334,332,333,332,333,333,332,333,332,334,332,335,331,335,331,336,330,336,330,338,329,338,329,339,330,340,330,341,330,342,329,342,329,343,329,344,328,344,328,345,328,346,329,346,329,347,328,347,329,347,329,348,329,349,330,349,329,350,330,350,330,351,330,352,330,353,329,353,329,354,329,355,328,356,328,357,328,358,328,359,327,359,327,360,326,360,326,361,326,362,326,363,326,364,327,366,327,367,326,367,325,367,325,368,325,369,324,369,324,370,325,370,324,371,325,371,324,372,324,373,324,374,324,375,324,377,323,377,323,378,323,379,323,380,324,380,324,381,324,382,325,382,324,382,324,383,324,384,326,384,326,385,325,385,324,385,323,385,325,385,325,386,326,386,325,387,324,387,324,388,325,388,324,389,324,390,324,391,324,392,323,392,323,393,322,393,323,393,322,394,323,395,323,396,322,396,322,397,321,397,320,398,319,398,319,399,319,400,319,401,320,401,320,402,320,403,321,402,322,403,322,402,323,402,322,403,323,403,323,404,322,404,323,404,322,405,323,405,323,406,324,406,327,406,330,406,331,407,332,407,334,407,334,408,334,407,333,407,332,407,331,407,331,408,330,408,329,408,328,409,328,408,328,409,327,409,327,410,327,411,327,412,326,412,324,412,323,412,322,411,322,410,323,410,323,411,323,410,324,410,324,411,323,411,324,411,324,410,325,410,326,410,326,409,325,409,324,409,323,410,322,410,323,410,322,410,322,411,321,411,320,410,321,410,322,410,321,410,321,409,322,409,321,409,322,409,323,409,324,408,324,409,325,408,323,408,322,408,321,408,321,409,321,408,321,409,320,409,321,409,321,410,320,410,319,410,319,409,320,409,319,409,320,409,320,408,320,409,319,408,320,408,319,408,319,409,318,409,319,408,318,408,319,408,318,408,319,408,319,407,318,407,319,407,320,407,321,407,320,407,321,407,321,406,321,407,322,407,322,408,321,408,322,408,322,407,322,406,321,405,320,405,321,405,321,406,322,406,321,406,320,406,320,405,320,406,321,406,320,406,321,406,320,406,320,407,320,406,319,405,320,407,319,407,319,406,319,407,319,406,318,406,318,405,319,405,318,405,318,404,317,404,317,403,317,404,317,403,318,403,318,402,319,402,319,403,319,402,318,402,319,402,318,402,318,403,317,403,317,402,318,402,317,402,317,401,316,402,316,401,315,401,316,401,317,401,318,401,317,401,318,401,317,401,316,400,317,400,318,401,317,400,318,400,317,400,316,400,317,400,317,399,318,399,318,400,318,399,317,399,317,398,318,399,318,398,317,398,318,398,317,398,318,398,317,398,317,399,316,399,316,398,316,397,317,397,316,397,316,396,317,396,318,396,317,396,318,396,317,396,317,395,316,395,316,394,316,395,317,395,317,394,318,395,319,395,320,395,319,395,319,394,320,395,320,394,319,394,318,394,319,393,318,393,318,394,317,394,316,394,315,394,316,393,316,394,316,393,316,394,317,394,317,393,316,393,317,392,317,393,317,392,318,392,317,392,318,392,317,391,316,391,315,391,314,390,315,390,314,390,313,390,313,391,312,391,313,390,314,390,314,389,314,390,314,389,315,389,315,388,316,388,316,389,316,388,317,388,317,389,317,388,318,389,317,389,316,389,317,389,318,390,318,389,317,389,318,389,318,390,319,389,318,389,319,389,319,388,320,388,320,387,319,387,319,388,319,387,320,387,320,386,320,387,321,387,320,387,320,386,319,386,320,386,319,386,319,385,320,385,321,385,321,384,322,384,321,384,321,383,320,383,320,382,321,382,320,382,321,381,320,381,320,380,321,380,321,379,321,378,322,378,321,378,321,377,322,377,322,378,322,377,322,376,322,377,321,377,321,376,322,376,322,375,323,375,322,375,322,376,321,376,321,375,320,375,320,376,319,376,318,376,319,375,318,375,318,374,318,373,318,372,318,371,319,371,318,370,319,370,320,369,320,368,319,367,319,366,319,365,319,364,318,364,318,363,319,363,318,363,319,362,320,362,320,361,320,360,320,361,321,361,321,360,321,358,322,358,322,357,322,356,323,356,323,355,323,354,324,354,323,353,324,353,324,352,325,351,324,351,324,350,325,350,325,349,325,348,325,347,325,346,325,345,325,344,324,343,324,342,325,341,325,340,326,340,326,339,325,339,326,339,325,338,325,337,326,337,326,336,326,335,326,333,326,334,327,333,327,332,327,331,327,330,328,329,327,329,328,328,327,328,328,327,328,326,328,325,328,324,328,323,328,322,328,321,328,320,329,319,329,318,329,316,329,315,329,314,329,313,329,312,329,311,329,310,329,309,329,307,329,306,328,306</Points>\n    <Keys>Chile, CHL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>905,156,904,156,903,155,904,155,905,156</Points>\n    <Keys>China, CHN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>906,161,906,160,906,161,905,160,906,160,906,161</Points>\n    <Keys>China, CHN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>868,196,867,196,867,195,866,195,866,194,865,194,865,193,866,193,865,193,866,192,867,191,868,191,869,190,869,191,870,191,870,190,871,190,871,191,871,190,872,190,872,191,872,190,872,191,873,192,872,192,871,193,871,194,871,195,871,194,870,195,869,195,869,196,868,196</Points>\n    <Keys>China, CHN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>897,101,897,100,898,99,897,99,898,98,899,97,899,96,900,96,900,95,901,95,902,95,902,94,901,94,902,93,901,93,900,93,900,92,901,91,902,91,904,91,906,90,908,90,909,90,911,90,912,90,913,91,914,91,915,91,916,91,917,92,916,92,917,92,918,92,917,93,918,93,919,93,918,94,919,94,918,94,919,94,919,95,920,96,920,97,921,98,922,99,921,99,922,99,921,100,922,100,922,101,923,101,923,102,924,102,925,102,926,102,927,102,928,102,928,103,929,103,930,104,931,104,932,104,931,105,932,105,932,106,931,106,932,106,932,107,933,107,934,107,934,108,936,107,937,107,938,107,938,106,939,106,940,106,942,105,943,105,943,106,944,106,943,106,943,107,944,107,944,108,943,108,942,108,942,109,942,110,942,111,941,111,941,112,940,113,940,114,939,114,939,115,938,115,936,115,935,115,935,114,935,115,934,115,934,116,933,116,932,116,933,116,933,118,933,120,933,121,933,122,932,122,931,122,931,123,930,122,929,122,929,123,928,123,927,124,926,124,925,124,924,124,924,125,924,126,923,126,922,126,921,126,921,125,920,125,919,126,918,128,917,128,916,128,917,128,916,128,916,129,915,129,914,129,913,130,912,131,911,131,910,131,909,131,908,132,907,132,906,133,905,133,905,134,905,133,905,134,904,133,904,134,905,134,903,134,904,134,903,133,904,133,905,133,904,133,905,133,905,132,904,132,903,132,904,132,904,131,905,131,905,130,906,129,906,128,905,128,904,128,903,128,902,128,903,128,902,129,901,129,901,130,900,130,898,131,897,132,896,133,895,133,894,133,893,133,893,134,892,134,892,135,893,136,894,136,895,136,896,136,897,137,896,138,896,139,898,139,899,139,899,138,900,138,900,137,901,137,902,137,903,137,903,138,904,138,905,138,904,138,905,138,906,138,908,138,907,138,907,139,907,140,907,139,907,140,906,140,906,139,906,140,905,139,905,140,904,140,903,140,903,141,902,141,902,142,901,142,902,142,901,142,900,142,901,142,900,142,900,143,900,142,900,143,899,143,899,144,898,144,898,145,897,145,897,146,898,146,898,147,899,147,900,148,901,149,901,150,902,151,902,152,902,153,903,153,904,153,904,154,905,155,904,155,903,155,902,155,902,154,901,154,900,155,899,154,898,153,899,154,898,154,899,154,899,155,900,155,901,155,901,154,902,155,903,156,904,157,905,157,905,158,904,158,902,159,901,159,901,160,900,160,901,160,902,160,901,160,902,160,903,160,904,160,905,161,906,161,905,161,905,162,904,162,905,162,905,163,905,162,905,163,904,163,905,163,905,164,904,164,903,164,904,164,904,165,904,166,904,165,904,166,903,166,903,165,903,166,902,166,902,167,902,166,901,166,902,167,901,167,902,167,901,168,902,168,901,168,901,169,900,169,901,169,900,169,900,170,900,171,899,171,900,170,899,170,899,171,899,170,898,170,898,171,899,171,898,171,899,172,899,171,899,172,898,172,898,173,897,172,897,173,898,173,898,172,899,173,898,173,898,174,897,174,897,175,897,174,897,175,898,175,897,175,896,175,897,175,896,175,896,176,897,175,896,176,895,176,896,176,895,176,896,176,895,177,895,176,895,177,894,177,893,177,894,177,894,178,894,177,894,178,893,178,893,179,893,178,892,179,891,179,891,180,891,179,891,180,890,180,889,180,889,181,890,181,889,181,889,182,888,182,887,182,886,182,886,183,886,182,885,182,884,182,884,183,884,182,883,182,883,183,882,183,881,183,881,182,880,182,880,181,880,182,880,181,881,181,880,181,880,182,879,182,880,182,880,183,880,184,879,183,880,184,879,184,878,184,879,185,878,185,877,185,876,185,875,185,875,186,874,186,873,186,872,186,871,187,871,186,872,186,871,187,871,186,871,187,870,186,871,187,870,187,870,188,871,188,870,189,871,189,871,190,870,190,869,190,869,189,870,189,869,189,869,188,868,188,869,187,869,186,868,186,869,186,868,186,868,185,868,186,867,186,866,186,866,185,866,186,866,185,865,185,865,186,865,185,864,185,864,186,863,186,863,185,863,186,862,186,861,185,860,184,860,185,860,184,859,184,859,183,860,183,860,182,859,182,858,182,857,182,857,181,856,181,855,180,855,181,854,181,854,182,853,182,852,182,852,183,851,183,850,182,850,183,850,182,849,182,849,183,848,183,848,182,847,182,847,183,846,183,845,183,844,184,845,185,845,186,845,187,844,187,843,187,843,186,843,185,842,185,842,186,841,186,840,186,840,185,839,185,839,184,838,184,837,184,837,183,838,183,837,182,838,182,838,181,837,181,836,181,836,180,836,179,836,178,835,178,834,178,832,179,833,178,832,178,832,177,833,177,832,177,832,176,833,176,833,175,834,175,834,174,835,174,835,173,836,173,835,173,835,172,836,172,835,172,836,171,836,170,836,169,836,168,835,168,835,167,835,168,834,168,834,167,834,166,833,165,832,165,832,166,831,166,831,165,830,166,830,165,829,165,828,165,829,165,829,164,829,163,828,164,828,163,829,163,828,163,828,162,826,163,825,163,824,163,823,163,822,163,822,164,821,164,820,164,819,165,818,166,817,166,818,166,818,167,817,167,816,167,815,167,814,167,815,167,814,167,814,166,813,166,813,167,812,166,811,166,809,166,808,166,808,167,807,167,807,168,806,168,806,169,806,168,806,167,806,166,805,166,804,167,803,167,802,167,801,167,800,167,800,166,799,166,799,167,798,166,798,167,797,167,797,166,797,165,796,166,795,166,795,165,794,165,792,164,792,163,791,163,790,163,790,162,789,162,788,161,787,161,786,160,786,159,784,159,784,160,784,159,784,160,783,160,781,159,780,159,780,158,779,158,778,158,777,157,777,156,776,157,776,156,776,157,776,156,776,155,776,154,775,154,775,153,776,153,777,153,778,153,778,152,778,151,777,151,776,151,776,150,777,150,777,149,776,149,777,148,778,148,778,147,779,147,780,147,780,146,780,145,781,144,780,144,779,144,778,143,776,143,775,143,774,144,773,144,772,144,770,144,769,143,768,143,768,142,767,142,768,142,768,141,767,141,767,140,766,140,765,139,764,140,764,139,763,139,764,139,765,139,765,138,764,138,764,137,764,136,764,135,763,135,763,134,762,135,761,135,761,134,760,133,760,132,761,132,761,131,761,130,762,130,763,130,764,129,764,130,764,129,765,129,766,129,767,129,766,129,767,130,768,129,769,129,769,128,770,128,770,127,771,127,772,128,774,127,775,127,775,126,776,126,777,125,778,125,779,125,779,124,780,124,780,123,780,122,781,122,781,121,782,121,782,120,781,119,781,118,781,117,781,116,780,116,779,116,780,115,782,115,784,115,785,114,785,115,786,115,787,115,787,114,786,114,787,113,787,112,788,111,788,110,789,110,789,109,790,109,792,110,793,110,794,110,795,109,796,109,797,109,797,108,796,108,796,107,797,105,798,105,799,105,800,104,800,103,801,103,802,103,803,103,803,104,804,104,804,105,803,105,805,105,805,106,806,106,807,107,808,106,809,107,810,107,811,107,811,108,811,109,812,110,813,110,813,111,812,112,813,112,812,113,812,114,812,115,813,115,814,115,815,115,816,115,817,115,819,115,820,116,822,116,822,117,823,117,824,117,825,118,826,118,826,119,827,120,827,121,829,122,831,122,835,123,838,123,840,123,840,122,842,122,845,123,846,124,847,124,848,124,850,125,851,125,852,125,853,125,853,126,854,126,855,126,855,125,856,125,858,124,860,124,861,124,861,123,862,123,865,123,866,123,867,123,868,123,869,123,870,123,870,122,871,122,872,121,874,120,875,119,874,118,874,117,874,116,875,115,877,115,877,116,879,116,880,116,881,116,882,116,883,115,883,114,884,114,887,114,888,113,889,112,890,111,891,111,892,111,893,111,894,110,895,110,896,110,897,110,898,111,899,111,899,110,899,109,898,109,897,108,898,108,897,108,896,107,895,107,893,106,893,107,892,107,892,108,891,107,890,107,889,107,888,107,887,107,886,107,886,106,887,106,887,105,888,104,890,101,891,102,893,102,895,101,896,101,897,101</Points>\n    <Keys>China, CHN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>326,215,325,215,324,216,323,217,322,217,322,218,321,219,321,221,320,222,319,223,320,223,321,223,322,225,322,226,322,227,322,228,323,228,323,229,324,230,325,229,326,230,327,229,328,229,329,230,331,232,332,232,333,232,334,232,335,232,336,232,337,232,337,233,337,234,336,234,336,235,336,237,336,238,336,239,337,239,337,240,338,240,337,241,336,242,337,242,337,243,338,243,338,244,338,245,339,245,339,247,338,247,338,246,338,245,337,244,336,245,335,245,335,244,335,245,331,245,330,245,330,247,331,247,332,247,332,248,332,249,331,248,331,249,330,248,330,249,329,249,329,251,330,251,331,252,331,253,331,254,331,255,331,257,330,259,330,261,330,263,329,262,328,262,327,262,329,259,329,258,329,259,329,258,328,258,329,258,328,258,327,257,326,257,326,258,325,258,325,257,325,258,325,257,324,257,324,258,323,258,322,258,321,258,320,258,320,257,320,256,319,256,319,255,318,254,317,254,317,253,316,252,315,252,315,251,314,251,313,251,313,250,312,250,311,249,311,250,311,249,310,249,310,250,309,250,308,249,307,249,307,248,306,248,304,247,303,246,302,246,303,245,304,245,304,244,304,245,303,244,304,243,305,243,306,243,306,242,307,242,306,242,307,242,306,242,306,241,307,241,307,240,308,240,308,239,308,238,307,239,307,238,308,238,307,238,307,237,308,237,308,236,307,236,307,234,308,234,308,233,307,232,307,231,307,230,307,231,307,230,306,230,307,230,306,229,306,228,306,227,307,227,307,228,308,227,307,227,308,227,308,226,307,226,307,225,307,224,308,225,309,226,309,227,309,226,309,225,310,224,311,224,311,223,312,222,313,222,313,221,312,221,313,221,313,220,313,219,314,218,315,217,316,218,317,218,317,217,317,216,318,217,319,217,320,216,322,215,323,215,323,214,324,214,324,213,324,214,324,213,325,213,324,213,325,213,326,214,326,215</Points>\n    <Keys>Colombia, COL, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>673,288,673,287,672,287,673,287,673,288</Points>\n    <Keys>Comoros, COM, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>670,286,669,286,669,285,670,285,670,286</Points>\n    <Keys>Comoros, COM, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>595,240,595,241,595,242,595,243,594,243,594,244,594,246,593,248,593,249,593,250,593,251,593,252,592,253,591,254,590,254,589,256,588,257,588,259,588,260,587,262,586,263,585,263,585,264,584,265,583,265,583,264,583,263,581,264,581,265,580,265,579,265,579,264,578,264,577,264,576,265,576,266,575,265,575,264,574,263,573,262,574,261,575,262,575,261,575,260,574,259,574,258,574,257,575,258,575,257,576,258,577,257,577,256,578,256,578,257,579,257,579,258,580,258,581,257,581,258,582,258,582,257,582,256,583,256,583,255,583,254,583,252,582,252,582,251,581,251,581,250,581,249,582,249,583,248,583,247,582,247,582,246,581,246,580,247,579,247,579,246,579,245,579,244,581,244,583,244,584,244,585,245,585,244,585,245,586,245,587,245,588,245,588,246,588,245,588,244,589,242,589,241,589,240,590,240,591,240,592,240,592,239,592,240,593,240,594,240,595,240</Points>\n    <Keys>Congo, COG, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>282,217,283,217,284,217,285,218,285,217,286,218,287,218,288,218,289,218,289,219,290,220,291,221,291,222,292,222,291,222,291,223,291,224,291,225,290,225,291,226,290,225,290,224,289,224,290,225,289,225,288,225,289,224,288,223,287,222,286,222,285,222,286,221,285,221,285,220,284,220,284,221,285,221,284,222,284,221,283,221,282,220,282,219,283,219,283,218,282,218,282,217</Points>\n    <Keys>Costa Rica, CRI, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>583,116,583,115,584,115,584,116,583,116</Points>\n    <Keys>Croatia, HRV, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>583,117,582,116,583,116,582,115,583,115,583,116,583,117</Points>\n    <Keys>Croatia, HRV, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>592,122,593,122,594,122,594,123,595,123,594,123,593,122,592,122,591,121,592,122,593,122,592,122</Points>\n    <Keys>Croatia, HRV, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>589,111,590,112,591,112,591,113,592,113,593,113,594,113,595,113,596,113,596,114,597,114,596,114,597,114,596,114,597,114,597,115,598,115,597,115,597,116,596,116,596,115,595,115,594,115,593,115,592,115,591,115,590,115,589,115,588,115,587,115,587,116,588,117,588,118,589,118,590,119,590,120,591,120,591,121,592,121,593,122,592,122,592,121,591,121,590,120,589,120,588,120,587,120,587,119,586,119,585,118,586,118,585,117,584,117,584,116,584,115,583,115,582,114,582,115,582,116,582,115,582,116,581,116,580,115,580,114,581,114,582,114,583,114,583,113,583,114,584,114,585,114,586,114,585,114,586,114,585,114,586,114,586,113,585,113,586,113,587,113,587,112,586,112,587,112,588,112,588,111,589,111</Points>\n    <Keys>Croatia, HRV, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>291,186,290,186,291,186,290,185,291,185,292,185,292,186,291,186</Points>\n    <Keys>Cuba, CUB, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>285,185,286,184,287,184,286,184,287,183,287,182,288,182,289,182,290,182,290,181,290,182,290,181,291,182,291,181,292,181,293,181,295,181,296,181,297,181,298,181,298,182,299,182,300,182,301,182,301,183,302,183,303,183,303,184,303,183,304,184,305,184,306,185,307,185,307,186,307,185,308,186,307,186,308,186,309,186,309,187,309,186,310,186,310,187,309,187,310,187,311,187,312,187,313,187,312,188,313,188,312,188,313,188,313,189,314,188,315,189,316,189,316,190,317,190,315,190,314,191,314,190,314,191,313,191,312,191,311,191,310,191,309,191,308,191,307,191,306,191,307,190,308,190,308,189,308,188,306,188,305,188,304,187,304,186,303,186,302,186,300,185,299,185,298,184,296,184,295,184,294,184,293,183,294,183,295,183,294,182,292,182,291,182,291,183,290,183,290,184,289,184,288,184,287,184,288,184,288,185,287,185,286,185,285,185</Points>\n    <Keys>Cuba, CUB, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>639,147,638,147,637,146,636,146,636,145,637,145,638,145,638,144,640,145,640,144,642,144,643,144,643,143,643,144,642,144,641,145,642,146,641,146,640,146,639,146,639,147</Points>\n    <Keys>Cyprus, CYP, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>576,100,577,100,577,99,578,99,579,99,580,99,580,98,581,98,582,98,583,98,582,98,583,97,583,98,584,98,585,98,584,97,585,97,585,98,586,98,587,98,588,99,588,98,589,99,588,99,589,100,590,100,591,100,590,99,591,99,592,100,593,100,592,100,593,100,593,101,594,100,594,101,595,101,596,101,596,102,595,102,595,103,594,103,593,103,593,104,592,104,591,104,590,104,590,105,590,104,589,104,588,104,587,104,586,104,585,104,585,103,584,103,584,104,584,105,583,105,582,105,582,104,581,104,580,104,580,103,579,103,578,102,578,103,577,102,577,101,576,100</Points>\n    <Keys>Czech Republic, CZE, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>569,86,568,85,569,85,570,86,569,86</Points>\n    <Keys>Denmark, DNK, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>572,86,571,86,572,86,572,85,572,86</Points>\n    <Keys>Denmark, DNK, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>574,87,573,86,572,86,573,86,574,86,575,86,575,87,574,87</Points>\n    <Keys>Denmark, DNK, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>565,80,566,80,565,80</Points>\n    <Keys>Denmark, DNK, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>571,84,572,84,572,85,571,85,570,85,569,85,569,84,570,84,571,84</Points>\n    <Keys>Denmark, DNK, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>585,85,584,85,585,85</Points>\n    <Keys>Denmark, DNK, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>575,83,574,83,575,83,575,84,575,83,576,83,575,83,576,84,576,83,575,83,576,82,577,82,577,83,577,84,576,84,577,84,577,85,576,85,576,86,575,85,575,86,576,86,575,86,575,87,575,86,575,85,574,85,575,85,573,85,573,84,573,85,573,84,572,84,573,84,572,83,573,83,574,83,573,83,574,83,575,83</Points>\n    <Keys>Denmark, DNK, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>568,86,566,86,565,86,566,85,565,85,566,85,565,84,564,84,564,83,565,83,564,82,564,83,564,82,564,81,564,80,564,81,565,81,566,81,566,80,567,80,567,81,568,81,567,81,567,80,568,79,568,80,568,79,569,79,568,79,567,79,567,80,567,79,566,80,565,80,565,81,564,80,565,79,566,79,567,79,568,79,569,78,571,78,571,77,571,78,571,79,571,80,570,79,569,79,570,80,571,80,570,80,569,81,570,80,571,80,571,81,570,81,571,81,572,81,572,82,571,82,570,82,570,83,569,83,570,83,569,83,568,83,569,84,568,84,569,85,568,85,569,86,568,86</Points>\n    <Keys>Denmark, DNK, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>665,217,665,216,665,215,667,213,668,213,669,213,669,212,670,213,670,214,670,215,669,215,668,215,667,216,668,216,667,216,668,216,669,216,668,217,668,218,668,217,667,217,666,218,665,218,665,217</Points>\n    <Keys>Djibouti, DJI, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>355,205,355,204,356,204,356,205,355,205</Points>\n    <Keys>Dominica, DMA, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>324,193,325,193,324,193,324,192,324,191,325,191,326,191,327,191,328,191,329,192,330,191,330,192,330,193,332,192,332,193,331,193,332,193,333,193,334,194,334,195,335,195,334,195,334,196,333,196,333,195,332,195,331,195,330,195,329,195,329,196,328,196,328,195,327,195,327,196,326,196,326,197,325,198,325,197,324,197,325,197,324,196,324,195,324,194,324,193</Points>\n    <Keys>Dominican Republic, DOM, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>266,254,265,254,265,253,266,253,266,252,265,251,265,250,266,250,266,251,267,252,267,253,266,254</Points>\n    <Keys>Ecuador, ECU, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>265,252,265,251,265,252</Points>\n    <Keys>Ecuador, ECU, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>268,252,267,252,267,251,268,251,268,252</Points>\n    <Keys>Ecuador, ECU, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>268,253,268,252,269,252,268,253</Points>\n    <Keys>Ecuador, ECU, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>271,253,272,253,271,253</Points>\n    <Keys>Ecuador, ECU, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>299,260,299,259,299,258,300,259,299,259,299,260</Points>\n    <Keys>Ecuador, ECU, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>304,247,306,248,307,248,307,249,308,249,309,250,310,250,310,249,311,249,311,250,311,249,312,250,313,250,313,251,314,251,313,251,313,252,314,252,314,253,313,253,313,255,311,257,310,258,307,259,306,260,305,261,304,261,304,262,304,263,303,264,304,264,303,264,303,265,302,266,301,265,301,264,300,264,299,263,298,264,298,263,298,262,299,263,299,262,299,261,298,261,299,260,300,260,300,259,300,258,300,257,300,258,299,258,300,258,299,258,300,257,299,258,299,259,297,258,297,257,296,257,297,257,297,256,297,255,297,254,297,253,298,253,298,252,299,252,298,252,298,251,299,251,299,250,299,249,299,248,300,248,301,248,302,247,303,247,303,246,304,247</Points>\n    <Keys>Ecuador, ECU, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>642,157,643,158,643,159,644,160,644,161,644,162,644,163,644,164,643,164,643,165,643,166,643,167,642,167,641,167,641,166,640,166,640,165,639,165,639,164,639,163,638,163,638,162,638,161,637,161,637,162,637,163,637,164,638,164,638,165,639,165,639,166,640,166,640,167,640,168,641,168,641,169,641,170,642,170,641,170,641,171,642,171,643,173,643,174,644,175,644,176,645,176,645,177,646,178,647,178,647,179,646,179,646,181,645,182,644,182,644,184,642,184,642,185,641,185,639,184,638,184,636,184,634,185,634,184,633,185,631,184,629,185,627,184,626,185,624,184,622,185,620,185,618,185,616,185,615,184,615,183,614,179,614,175,614,171,615,167,614,163,614,162,614,161,614,160,614,159,615,158,614,157,614,156,615,156,617,156,619,156,620,156,621,156,622,156,622,157,623,157,624,157,625,157,626,158,627,158,628,158,629,157,630,157,630,156,631,156,632,156,631,156,632,156,633,156,632,156,633,156,634,156,635,156,636,156,636,157,636,156,635,156,635,157,636,157,637,157,638,157,639,157,638,157,639,157,640,157,641,157,642,157</Points>\n    <Keys>Egypt, EGY, NorthAfrica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>271,207,272,208,272,207,273,208,274,208,274,209,275,209,276,209,276,210,276,211,275,211,274,211,273,211,274,211,273,211,272,210,271,210,270,210,269,209,270,208,271,208,271,207</Points>\n    <Keys>El Salvador, SLV, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>570,244,572,244,574,244,574,246,574,247,572,247,570,247,569,247,568,247,568,246,569,246,568,246,569,245,569,244,569,243,569,244,570,244</Points>\n    <Keys>Equatorial Guinea, GNQ, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>661,204,659,204,659,203,660,204,660,203,659,203,660,203,660,204,660,203,661,204</Points>\n    <Keys>Eritrea, ERI, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>665,209,666,209,666,210,667,210,667,211,668,211,668,212,669,212,669,213,668,213,667,213,666,213,666,212,665,212,665,211,664,211,664,210,663,210,663,209,662,209,662,208,661,208,661,207,660,207,659,207,658,207,657,207,656,207,655,207,654,207,654,206,653,206,653,207,652,208,652,207,651,207,651,208,650,208,649,208,649,207,649,206,649,205,649,204,650,204,650,203,650,202,650,201,651,200,650,200,651,199,650,199,651,199,652,199,652,198,653,198,654,198,655,198,655,197,655,196,655,197,656,198,656,199,657,200,657,201,657,202,657,203,658,203,658,204,659,205,659,204,660,205,660,206,661,206,661,205,661,206,662,206,663,207,664,207,664,208,664,209,665,209</Points>\n    <Keys>Eritrea, ERI, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>606,77,605,77,606,76,605,76,605,75,605,76,605,75,606,75,605,75,606,75,607,75,608,75,609,75,608,75,608,76,607,76,606,76,606,77</Points>\n    <Keys>Estonia, EST, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>607,74,606,74,607,73,608,73,608,74,609,74,608,74,607,74</Points>\n    <Keys>Estonia, EST, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>624,72,624,73,623,73,623,74,622,74,622,75,622,76,623,76,622,76,623,76,623,77,622,77,622,78,621,78,620,78,619,78,618,78,618,77,617,77,616,77,616,76,615,76,615,77,615,76,614,76,614,77,614,76,614,77,613,77,612,77,613,76,613,75,612,75,612,76,611,76,611,75,610,75,610,74,611,74,610,74,610,73,610,74,610,73,611,73,612,73,612,72,613,72,614,72,616,72,617,72,617,71,617,72,618,72,619,72,620,72,623,72,624,72</Points>\n    <Keys>Estonia, EST, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>667,213,665,215,665,216,665,217,665,218,666,218,667,217,668,217,668,218,668,217,667,219,668,219,668,220,669,221,669,222,670,222,672,223,676,225,681,226,683,226,679,231,674,236,671,236,670,236,669,236,668,237,668,238,667,238,666,238,665,238,665,239,663,239,662,238,661,238,659,239,658,240,657,240,656,240,655,240,654,240,653,239,650,237,649,237,648,237,647,237,647,236,647,235,647,234,646,234,645,234,645,233,644,233,644,232,644,231,644,230,643,230,642,229,642,228,640,227,639,227,638,227,639,226,639,225,640,225,641,225,642,225,642,224,642,222,642,220,643,220,642,219,643,218,644,218,645,217,644,217,645,216,645,215,646,214,647,213,648,212,648,211,648,210,649,210,649,209,649,208,650,208,651,208,651,207,652,207,652,208,653,207,653,206,654,206,654,207,655,207,656,207,657,207,658,207,659,207,660,207,661,207,661,208,662,208,662,209,663,209,663,210,664,210,664,211,665,211,665,212,666,212,666,213,667,213</Points>\n    <Keys>Ethiopia, ETH, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>361,408,360,407,361,407,361,406,362,406,363,406,363,405,362,405,363,405,362,405,363,405,363,404,364,405,364,404,364,405,365,405,364,405,365,405,364,405,365,405,366,405,365,405,366,405,366,406,365,406,364,406,363,406,364,406,364,407,363,407,364,407,363,407,362,406,362,407,361,407,362,408,361,408</Points>\n    <Keys>Falkland Islands (Islas Malvinas), FLK, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>431,415,430,414,429,414,428,414,428,413,427,413,428,413,427,413,428,413,427,413,426,413,427,413,426,413,427,413,426,413,425,413,427,413,428,413,429,413,428,413,429,413,430,413,429,413,430,413,429,413,430,413,430,414,430,413,430,414,430,413,431,413,431,414,432,414,432,415,431,415,432,415,431,415</Points>\n    <Keys>Falkland Islands (Islas Malvinas), FLK, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>358,407,357,407,356,407,357,407,357,406,358,406,359,406,358,406,359,405,359,406,359,405,358,405,359,405,360,405,359,405,360,405,361,405,362,405,361,405,360,406,359,406,359,407,358,407</Points>\n    <Keys>Falkland Islands (Islas Malvinas), FLK, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>519,65,519,64,518,64,519,64,519,65</Points>\n    <Keys>Faroe Islands, FRO, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>520,64,519,64,518,64,519,64,520,64,519,64,520,64</Points>\n    <Keys>Faroe Islands, FRO, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1074,308,1073,308,1074,308,1075,307,1075,308,1074,307,1074,308</Points>\n    <Keys>Fiji, FJI, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1074,305,1073,305,1071,305,1071,304,1072,304,1072,303,1073,303,1074,302,1074,303,1075,303,1075,304,1076,305,1075,305,1074,305</Points>\n    <Keys>Fiji, FJI, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1076,302,1075,301,1075,300,1075,301,1075,300,1076,301,1076,300,1078,300,1078,299,1079,299,1079,300,1078,300,1078,301,1079,300,1079,301,1078,301,1077,301,1078,301,1077,301,1076,301,1076,302</Points>\n    <Keys>Fiji, FJI, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>599,70,598,70,599,70,599,69,599,70,599,69,600,70,599,70,600,70,599,70,600,70,599,70</Points>\n    <Keys>Finland, FIN, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>607,71,607,70,608,70,607,70,607,71</Points>\n    <Keys>Finland, FIN, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>624,40,624,41,625,41,627,41,627,42,626,43,625,44,626,44,625,45,626,46,628,46,629,47,630,47,629,48,628,49,627,49,627,50,628,50,628,51,629,52,630,53,630,54,630,53,629,54,628,55,629,55,628,55,628,56,629,56,630,56,630,57,629,57,630,57,631,58,630,59,631,60,632,60,632,61,633,61,634,62,633,63,631,64,630,65,629,66,627,67,626,67,625,68,623,69,622,69,623,69,622,69,621,69,620,69,619,69,620,69,619,69,618,69,617,69,618,69,618,70,617,69,617,70,616,70,617,69,616,70,615,70,614,70,613,70,613,71,613,70,612,71,613,70,612,70,611,71,610,71,610,70,610,71,609,71,608,71,609,71,610,70,609,70,609,71,609,70,608,70,609,70,609,69,607,70,607,69,606,69,605,69,604,69,604,68,603,68,604,68,603,67,604,67,604,66,605,66,604,66,604,65,603,65,604,64,603,63,603,64,603,63,603,62,604,62,604,61,605,61,604,61,605,61,606,61,607,61,607,60,606,60,607,60,606,60,607,60,607,59,608,59,608,60,608,59,609,59,608,59,609,59,610,59,610,58,611,58,611,57,612,57,613,56,614,56,615,56,616,56,615,56,616,56,616,55,615,55,615,54,616,54,615,54,614,54,613,53,612,53,612,52,611,52,610,51,611,51,611,50,612,50,611,50,611,49,610,49,611,49,611,48,610,48,610,47,609,46,608,45,606,45,605,45,603,44,602,44,602,43,601,43,602,43,603,43,605,43,607,44,609,44,609,45,611,44,612,44,614,44,614,45,615,45,615,44,616,44,617,43,617,42,617,41,619,41,620,41,621,41,622,40,623,40,624,40</Points>\n    <Keys>Finland, FIN, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>567,126,566,126,566,125,565,125,566,124,565,124,566,124,565,123,566,123,565,123,566,123,567,123,567,122,568,122,567,122,568,122,568,121,568,122,568,123,568,124,568,125,568,126,567,126,568,126,567,126</Points>\n    <Keys>France, FRA, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>548,98,549,98,549,99,550,99,551,99,551,100,551,99,552,100,552,101,553,101,554,101,554,100,554,101,555,101,555,102,556,102,557,102,558,102,559,102,559,103,560,103,561,103,562,103,563,103,564,104,563,104,563,105,562,106,562,107,562,108,561,108,560,108,561,108,560,108,561,108,561,109,560,109,559,110,558,110,558,111,558,112,557,112,558,112,557,112,558,112,558,111,559,111,560,111,560,112,561,113,560,113,560,114,561,114,561,115,560,115,559,115,560,115,560,116,561,116,560,117,560,118,561,118,563,118,562,119,561,120,560,120,560,121,559,121,560,121,559,121,558,121,557,121,556,121,556,120,555,120,554,120,553,120,552,120,551,120,550,121,549,121,549,122,548,122,549,122,549,123,548,123,547,123,546,123,545,123,544,123,544,122,542,122,541,122,540,122,539,122,538,122,537,122,536,121,535,121,534,120,535,120,535,119,536,118,536,117,536,116,536,117,536,116,536,115,536,114,537,114,537,115,538,115,538,116,538,115,538,116,538,115,537,115,537,114,536,113,537,113,536,113,536,112,535,111,534,111,534,110,533,110,533,109,534,109,533,109,534,109,533,109,532,109,532,108,531,108,530,108,530,107,530,108,529,107,530,107,529,107,528,107,527,107,526,107,526,106,525,106,526,106,527,106,526,106,527,106,527,105,526,106,526,105,527,105,525,105,526,105,527,104,527,105,527,104,528,104,528,105,528,104,528,105,528,104,529,104,530,104,531,104,531,105,532,105,533,104,533,105,534,105,533,105,534,104,534,105,535,105,535,104,535,103,534,102,534,101,535,101,536,101,536,102,538,102,539,103,540,102,541,102,540,102,540,101,541,101,543,101,544,100,544,99,544,98,545,98,547,97,547,98,548,98</Points>\n    <Keys>France, FRA, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>377,241,377,240,378,240,377,240,377,239,376,238,377,238,376,238,376,236,376,235,377,235,377,234,378,233,379,234,381,234,382,235,382,236,383,236,382,236,383,236,384,237,383,238,384,237,384,238,385,238,384,238,384,239,383,240,382,241,382,242,382,243,381,244,380,244,379,243,379,244,378,243,378,244,377,244,376,244,376,243,377,242,377,241</Points>\n    <Keys>French Guiana, GUF, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>92,304,91,304,91,303,92,304</Points>\n    <Keys>French Polynesia, PYF, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>574,244,576,244,577,244,578,244,579,244,579,245,579,246,579,247,580,247,581,246,582,246,582,247,583,247,583,248,582,249,581,249,581,250,581,251,582,251,582,252,583,252,583,254,583,255,583,256,582,256,582,257,582,258,581,258,581,257,580,258,579,258,579,257,578,257,578,256,577,256,577,257,576,258,575,257,575,258,574,257,574,258,574,259,575,260,575,261,575,262,574,261,573,262,572,261,571,261,571,260,570,259,569,258,570,258,569,258,568,257,567,256,568,256,568,257,568,256,567,256,567,255,566,254,567,255,567,256,568,255,568,256,568,255,567,255,568,255,567,255,567,254,566,254,566,253,566,252,566,253,567,253,567,252,568,251,567,250,568,249,568,250,569,250,570,250,569,250,568,250,568,249,567,249,568,248,568,249,568,248,569,247,570,247,572,247,574,247,574,246,574,244</Points>\n    <Keys>Gabon, GAB, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>490,210,493,210,493,209,494,209,495,209,495,210,496,210,496,209,496,210,498,210,497,211,496,211,496,210,495,210,494,210,493,210,492,210,492,211,489,211,489,210,490,210,490,211,491,211,491,210,493,210,492,210,491,210,490,210</Points>\n    <Keys>Gambia, The, GMB, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>643,156,643,157,642,157,642,156,643,156</Points>\n    <Keys>Gaza Strip, ISR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>660,120,661,120,662,120,663,120,664,120,664,121,665,121,666,121,667,121,668,121,669,121,669,122,670,122,671,122,671,123,672,123,672,122,673,122,674,122,674,123,674,122,675,122,675,123,676,123,677,123,676,124,677,124,678,124,678,125,678,124,678,125,679,125,678,125,678,126,679,126,678,126,679,126,678,126,679,126,680,127,679,127,678,127,677,127,677,126,676,126,675,126,675,127,674,127,673,127,672,127,671,127,670,127,669,127,668,126,667,126,665,126,664,126,665,125,664,124,664,123,664,122,663,122,662,121,661,121,660,121,660,120</Points>\n    <Keys>Georgia, GEO, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>582,89,581,89,582,89,581,88,582,89</Points>\n    <Keys>Germany, DEU, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>580,88,579,88,579,87,580,87,579,87,580,86,580,87,581,87,580,87,581,87,581,88,581,87,580,88</Points>\n    <Keys>Germany, DEU, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>568,86,569,86,570,86,569,86,570,86,570,87,569,87,570,87,571,87,571,88,572,88,572,87,573,87,573,88,572,88,572,89,573,88,573,89,574,89,574,88,576,88,577,88,577,87,578,87,577,87,577,88,578,87,579,87,579,88,580,88,581,88,581,89,582,89,583,90,583,91,582,92,583,93,583,94,584,94,584,95,583,95,584,96,585,97,584,97,584,98,583,98,583,97,582,98,583,98,582,98,581,98,580,98,580,99,579,99,578,99,577,99,577,100,576,100,577,101,577,102,578,103,578,102,579,103,580,103,580,104,581,104,581,105,580,105,578,106,579,107,578,107,579,107,579,108,578,108,578,107,577,108,577,107,576,107,576,108,575,108,574,108,573,108,572,108,571,108,570,109,570,108,569,108,568,108,567,108,566,108,566,107,565,107,565,108,564,108,563,108,562,108,563,108,562,108,562,107,562,106,563,105,563,104,564,104,563,103,562,103,561,103,560,103,559,103,559,102,559,101,558,101,558,100,559,100,559,99,558,99,558,98,557,98,558,98,557,98,557,97,558,97,558,96,558,95,557,95,558,95,559,95,560,95,560,94,561,94,561,93,560,93,561,93,561,92,561,91,561,90,561,89,562,89,563,89,564,89,564,90,565,90,565,89,566,89,567,89,568,89,568,90,569,90,568,90,568,89,566,89,566,88,567,88,566,88,565,88,565,87,566,87,565,87,566,87,567,87,566,87,566,86,565,86,566,86,568,86</Points>\n    <Keys>Germany, DEU, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>531,217,533,217,537,218,538,218,538,217,539,217,540,217,540,218,539,218,539,219,540,219,540,220,541,220,540,221,541,221,541,222,540,221,540,222,541,222,540,222,541,222,541,223,541,224,541,225,542,225,542,226,541,226,541,227,541,228,541,229,541,230,542,231,542,232,543,232,542,233,541,233,541,232,540,232,541,232,541,233,540,233,540,234,538,234,537,235,536,235,535,235,535,236,534,236,533,236,532,236,530,235,531,235,531,234,531,233,530,233,530,232,530,231,530,230,530,229,531,227,531,226,532,226,532,224,532,223,531,223,532,223,531,223,531,222,531,221,531,220,531,219,531,218,531,217</Points>\n    <Keys>Ghana, GHA, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>602,136,601,136,601,135,601,136,601,135,601,136,602,136</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>614,146,614,145,613,145,612,145,611,145,610,145,610,144,611,144,611,143,611,144,612,144,613,144,614,144,615,144,616,145,617,144,617,145,618,145,617,145,616,146,615,146,614,146</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>614,137,614,137</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>602,138,601,137,602,137,602,138</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>618,136,617,136,617,135,618,135,618,136</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>620,138,620,137,619,137,620,137,621,137,620,138</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>600,132,599,132,598,131,599,131,599,132,600,132</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>616,140,616,139,616,140</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>619,134,618,133,617,133,618,133,618,132,619,132,619,133,619,134</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>623,143,623,142,624,141,624,142,623,142,623,143</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>613,137,613,136,613,137,612,136,612,135,611,135,610,135,609,134,608,134,609,134,609,133,610,134,611,134,612,135,612,136,613,136,613,137</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>616,131,615,131,615,130,616,131,616,130,616,131</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>613,129,613,128,614,128,614,129,613,129</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>618,125,619,125,619,126,619,127,618,127,618,128,616,128,615,128,615,127,614,128,613,128,612,128,611,128,611,129,612,129,611,129,612,130,613,130,612,130,611,129,611,130,612,130,611,131,611,130,610,130,609,130,610,130,611,131,610,131,609,130,608,129,607,129,607,130,608,131,608,132,609,132,610,133,609,133,608,132,608,133,609,133,608,134,607,134,608,134,609,134,609,135,610,135,609,135,610,135,611,135,611,136,612,136,611,136,612,137,612,138,611,137,610,137,610,136,609,137,608,137,609,137,609,138,610,138,609,138,610,138,609,138,609,139,609,138,608,138,608,139,609,139,609,140,609,141,608,141,608,140,607,140,607,141,606,140,606,139,605,140,604,139,605,139,604,138,603,138,603,137,603,136,604,136,605,136,605,135,606,136,608,136,608,137,608,136,609,136,608,136,608,135,607,135,607,136,607,135,606,135,605,135,605,136,604,135,604,136,604,135,603,135,603,136,603,135,602,134,603,134,603,133,602,133,602,134,602,133,601,133,600,132,600,131,601,131,600,131,601,131,601,130,602,129,603,129,603,128,602,128,603,128,604,128,605,128,605,127,606,127,607,127,608,127,608,126,609,127,609,126,611,126,612,126,613,126,614,126,615,127,616,127,617,126,618,126,618,125</Points>\n    <Keys>Greece, GRC, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>480,10,479,10,480,10,481,10,482,10,480,10</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>476,28,475,28,474,28,474,27,475,27,477,27,478,27,478,28,479,28,476,28</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>484,23,483,22,482,21,483,21,482,21,483,21,482,20,483,20,483,21,484,21,483,21,483,22,484,22,484,23</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>487,26,486,25,483,26,483,25,484,24,484,25,485,25,485,24,486,24,486,25,485,25,486,25,487,25,488,25,487,25,487,26</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>479,26,478,26,477,26,478,26,478,25,479,25,480,25,480,26,479,26,480,26,479,26</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>485,14,485,13,486,13,487,13,486,13,486,14,485,14</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>395,68,396,68,397,68,396,68,395,68</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>399,68,400,68,401,68,399,68</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>403,70,403,69,404,69,404,70,403,70</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>409,71,408,71,408,70,407,70,410,70,410,71,409,70,409,71</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>408,71,407,71,408,71,409,71,408,71</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>419,57,418,57,418,56,417,56,418,56,418,57,419,57</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>426,54,426,53,427,53,428,53,427,53,428,53,427,54,426,54,427,54,426,54</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>413,62,412,62,414,62,413,62</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>324,19,323,19,323,18,322,18,323,18,325,18,324,19</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>481,17,479,17,478,17,479,17,480,17,482,17,481,17</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>485,18,485,17,486,17,487,17,486,17,485,18</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>481,14,480,14,481,14,482,14,481,14,482,14,481,14,482,14,481,14</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>381,37,380,37,380,36,381,36,382,36,383,37,382,37,381,37</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>404,4,403,4,399,3,398,3,396,3,397,3,399,2,401,3,405,3,406,3,406,4,405,4,404,4,405,4,404,4</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>379,37,378,37,379,37</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>326,18,327,18,329,18,326,18</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>416,61,415,61,414,60,415,60,416,61</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>384,5,380,4,379,4,380,4,382,4,385,4,386,5,384,5</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>466,31,463,31,462,31,464,31,464,30,466,30,469,31,470,31,468,31,465,31,469,31,470,31,471,31,470,31,466,31</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>455,39,456,39,455,39,456,39,457,38,458,38,461,38,462,37,462,38,463,38,464,38,464,39,461,39,458,39,455,39</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>378,43,377,42,378,42,379,42,378,42,376,42,375,42,375,41,376,41,375,41,377,41,375,40,377,40,380,40,381,41,382,41,383,41,384,41,383,41,384,42,383,42,381,42,378,43</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>474,32,473,32,472,32,471,32,469,32,466,32,470,31,473,32,474,32,473,32,474,32</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>380,36,379,36,381,36,380,36</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>386,42,385,41,386,41,385,41,386,41,387,41,387,42,386,42</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>473,34,472,34,471,34,470,34,468,33,467,33,466,33,466,32,467,32,468,32,469,32,470,32,471,32,473,33,474,33,473,33,472,33,471,33,472,33,473,34</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>441,1,439,1,441,1,442,1,441,1,434,2,433,2,434,2,435,2,438,2,439,2,440,2,441,2,444,2,445,2,445,1,449,1,451,1,454,1,460,1,464,1,465,1,465,2,464,2,463,2,468,2,467,2,468,2,467,2,468,2,470,2,472,2,473,2,476,3,475,3,473,3,472,4,470,4,468,4,466,4,464,4,455,4,452,4,448,4,447,4,448,4,449,4,450,4,443,5,441,5,440,5,441,5,440,5,440,6,441,6,442,5,445,5,450,5,451,5,454,4,464,5,463,5,462,5,458,6,457,6,458,6,461,6,465,5,467,5,467,4,469,4,472,4,473,4,473,5,474,5,473,6,472,7,471,7,470,7,471,7,468,8,466,8,467,8,466,9,468,8,469,8,470,8,471,8,471,7,475,6,477,6,480,5,479,6,481,6,483,6,484,6,486,6,485,6,486,6,487,6,486,6,486,5,488,5,487,5,489,5,495,5,501,5,503,6,502,6,500,6,500,7,499,7,498,7,499,7,497,7,496,7,494,7,495,7,496,8,495,8,492,8,491,8,486,8,485,8,484,9,483,9,481,8,479,8,478,9,476,9,477,9,479,9,480,9,483,9,485,9,487,9,491,9,490,9,489,9,490,9,489,9,490,9,490,10,489,10,488,10,484,10,481,10,480,10,479,10,478,10,478,11,477,11,478,11,479,11,478,11,479,11,480,11,479,11,482,10,483,10,485,10,486,10,487,10,486,11,485,11,484,11,482,11,481,11,481,12,480,12,481,12,480,13,481,13,482,13,481,13,480,13,479,13,480,14,479,14,477,14,476,14,477,14,475,15,477,15,476,15,475,16,476,16,475,16,474,16,475,16,474,17,475,17,474,17,473,17,475,17,474,18,475,18,476,18,475,17,476,17,477,16,478,17,479,17,481,17,482,17,483,18,482,18,481,18,480,17,479,17,478,17,477,18,478,18,479,18,478,18,476,18,479,18,477,18,480,18,481,18,481,19,482,19,483,18,484,18,484,19,485,19,485,20,484,20,483,20,482,20,480,20,477,20,476,20,477,20,478,20,477,20,476,20,474,20,476,20,477,20,476,20,475,21,474,21,474,20,473,20,472,20,473,20,472,20,471,20,472,21,473,21,472,21,473,21,474,21,473,21,474,21,473,21,474,21,473,21,472,21,475,21,474,22,475,22,476,22,477,22,478,22,476,22,477,22,478,22,480,22,481,22,480,22,478,23,474,23,474,22,474,23,480,23,481,23,481,24,481,25,480,25,479,25,480,25,479,24,478,25,477,25,476,24,474,24,473,24,474,24,475,24,473,24,472,24,475,24,478,25,477,25,476,25,474,26,474,25,472,25,473,25,474,25,473,25,474,26,476,25,478,25,477,26,478,26,477,27,476,27,479,26,479,27,480,27,481,26,482,27,481,27,483,27,481,28,479,28,478,27,475,27,474,27,473,27,474,27,473,28,472,28,473,28,472,28,473,28,472,28,474,29,473,29,474,29,474,30,474,29,474,28,475,28,476,29,479,29,478,29,478,30,477,30,475,30,473,31,472,31,469,30,468,30,467,30,468,29,469,29,470,30,471,30,473,30,471,30,470,30,468,29,467,29,466,29,466,30,465,30,465,29,464,29,463,29,462,29,463,29,464,29,464,30,465,30,464,30,463,30,462,31,461,31,460,30,460,31,459,30,458,30,457,30,458,30,460,31,459,31,458,31,456,31,457,31,457,32,458,32,458,31,459,31,460,31,462,31,464,31,465,31,464,32,462,32,461,32,459,32,457,32,459,32,460,32,459,32,461,32,460,33,461,32,463,32,464,32,465,32,465,33,466,33,465,33,462,33,464,33,463,34,465,33,466,33,468,34,469,34,470,34,470,35,470,34,472,35,471,35,470,36,471,36,472,35,472,36,473,35,474,35,473,36,472,36,472,37,473,37,472,36,473,36,474,36,474,37,475,37,474,37,473,37,474,37,474,38,475,38,474,38,475,38,474,38,475,38,474,38,475,38,474,39,475,39,474,39,473,39,474,39,473,39,472,39,472,38,472,39,471,39,469,39,467,39,467,38,467,37,465,37,466,36,465,37,464,37,463,36,461,36,460,36,459,36,458,35,456,34,455,35,454,34,453,34,454,34,454,35,456,35,455,35,458,35,457,36,455,36,456,36,455,36,454,36,457,36,458,36,459,36,460,36,462,36,463,36,463,37,462,37,463,37,460,38,457,38,456,37,457,38,456,38,455,38,454,38,455,38,456,38,455,39,452,39,453,39,455,39,454,39,455,39,459,39,460,39,459,40,458,40,457,40,456,40,455,40,454,40,455,40,456,40,457,40,457,41,458,41,458,40,459,40,461,40,462,40,464,39,463,39,464,39,463,40,464,40,464,39,467,40,470,40,473,40,472,41,471,41,470,41,471,41,470,41,469,41,470,41,469,41,468,41,469,42,468,42,469,42,468,42,467,42,466,42,465,42,466,42,466,43,465,43,466,43,465,43,464,43,465,43,464,43,463,43,463,44,462,44,463,44,462,44,461,44,460,45,459,45,459,44,458,45,457,45,458,45,457,45,456,45,457,45,456,45,455,45,454,45,455,45,454,45,453,45,453,46,453,45,452,45,452,46,451,46,450,46,450,45,449,46,448,46,447,46,448,46,447,46,445,46,444,46,443,46,443,45,442,45,443,45,443,46,442,46,443,46,444,46,443,46,443,47,442,47,441,47,440,47,440,48,439,48,440,48,439,48,440,48,439,48,439,49,438,49,439,49,438,49,438,50,437,50,438,50,437,50,438,50,437,50,437,51,437,50,437,51,436,51,436,50,436,51,435,51,436,51,435,51,435,52,435,51,435,52,434,51,434,52,433,52,432,51,432,52,433,52,432,52,433,52,432,52,431,53,431,52,431,53,430,53,430,52,430,53,429,53,428,53,428,52,428,53,428,52,428,53,426,53,426,52,427,52,428,52,428,51,427,52,426,51,425,51,426,52,425,52,426,52,425,52,426,53,425,53,424,52,424,53,425,53,425,54,424,54,424,53,424,54,424,53,423,54,423,53,423,54,424,54,422,54,422,53,421,53,422,54,421,54,420,53,420,54,421,54,420,54,419,54,420,54,420,55,419,55,420,55,419,55,420,55,419,55,419,56,418,55,417,55,416,55,417,56,416,56,417,56,418,56,418,57,418,58,418,57,417,57,416,58,415,58,416,58,417,58,418,58,418,59,417,59,418,59,417,59,415,59,416,59,417,60,416,60,417,60,416,60,415,60,414,60,414,61,414,60,414,61,415,61,414,61,415,61,414,61,413,61,414,61,415,62,414,62,413,62,412,62,413,62,412,62,411,62,410,62,411,63,412,63,413,63,412,63,413,63,411,63,412,63,413,64,412,64,413,64,412,64,412,65,412,64,413,64,413,65,412,65,413,65,412,65,411,65,412,65,413,65,412,65,412,66,413,66,412,66,411,66,410,66,411,66,412,66,412,67,411,67,412,67,410,66,410,67,411,67,412,67,411,67,410,67,411,67,412,67,409,67,410,67,411,67,412,68,411,68,411,67,411,68,410,68,409,68,410,68,411,68,410,68,411,68,411,69,410,68,410,69,411,69,411,68,411,69,410,69,411,69,410,69,409,69,408,68,409,69,407,69,408,69,409,69,410,69,409,70,409,69,409,70,409,69,410,69,410,70,409,70,407,70,407,69,407,70,406,70,406,71,406,70,405,70,405,71,405,70,404,70,405,70,406,69,405,70,404,70,405,70,405,69,406,68,405,68,405,69,404,69,403,69,404,68,404,69,404,68,403,68,403,69,402,69,403,69,402,69,403,68,402,69,402,68,403,68,404,68,403,67,403,68,402,68,401,68,402,68,401,68,404,67,403,67,401,68,402,67,403,67,402,67,402,66,402,67,401,67,402,67,401,67,401,68,401,67,400,67,400,68,399,68,398,68,399,68,398,68,396,68,397,68,398,68,397,68,396,68,395,68,396,68,396,67,394,68,395,67,396,67,395,67,396,67,395,67,394,67,395,67,394,67,394,66,393,66,394,66,393,66,392,66,393,66,394,66,395,66,394,66,393,66,392,66,393,66,394,66,393,66,392,66,392,65,393,65,392,65,393,65,392,65,391,65,392,65,391,65,392,65,391,65,393,64,392,64,393,64,392,64,391,65,391,64,391,65,390,65,390,64,391,64,390,64,391,64,392,64,391,64,390,64,391,64,392,64,391,64,390,64,390,63,390,64,389,64,389,63,389,62,390,62,389,62,390,61,389,62,388,62,389,62,389,61,389,62,388,62,388,61,389,61,388,61,387,61,386,61,387,61,386,61,386,60,387,60,386,60,387,60,388,60,388,59,386,60,385,60,386,60,385,59,385,58,386,58,385,58,387,58,388,58,389,58,388,58,388,57,388,58,385,58,384,58,385,58,386,58,387,58,386,58,387,58,387,57,388,57,387,57,388,57,389,57,388,57,387,57,388,57,388,56,388,57,388,56,389,57,391,58,391,57,390,57,389,57,390,56,389,56,390,56,389,56,388,56,387,56,387,55,387,56,387,55,387,56,388,56,387,56,388,56,387,56,386,57,386,56,385,57,384,57,385,58,384,58,383,58,383,57,383,56,384,56,385,56,386,55,385,56,384,56,385,56,384,55,384,56,383,56,384,56,383,56,383,55,383,54,382,55,382,54,384,54,385,53,387,53,388,53,387,53,386,53,384,53,384,54,383,54,382,54,381,54,382,54,381,54,381,53,380,53,381,53,380,53,382,53,383,53,384,52,383,53,382,53,382,52,381,53,380,53,379,53,380,52,379,52,380,52,381,52,382,51,384,51,383,51,384,51,385,50,386,50,387,50,386,50,387,50,386,50,384,50,384,51,383,51,381,51,381,52,380,52,379,52,378,52,378,51,379,51,380,51,381,51,382,51,381,51,380,51,379,51,380,51,379,51,380,50,381,50,382,50,381,50,382,50,381,50,380,50,382,50,383,50,382,50,381,50,378,50,379,50,378,49,379,49,378,49,379,49,381,49,382,49,385,49,386,49,388,49,386,49,385,48,386,48,384,48,383,48,380,49,378,49,378,48,380,48,381,47,380,48,380,47,381,47,383,47,384,47,384,48,386,48,388,48,389,48,387,48,389,47,390,47,389,47,387,48,386,48,387,48,386,47,388,47,387,47,388,47,386,47,385,47,386,47,387,47,386,47,385,47,386,47,385,47,384,47,383,47,382,47,383,47,384,47,385,47,381,47,379,48,378,48,379,48,379,47,378,47,379,47,380,47,379,47,380,47,381,47,380,47,380,46,382,47,383,47,381,47,380,46,379,46,380,46,381,46,382,46,384,46,386,46,388,47,389,47,388,47,386,46,385,46,386,46,386,45,385,45,386,46,383,46,382,46,381,46,382,46,381,46,380,46,379,46,380,45,380,46,381,45,382,45,384,45,385,45,386,45,386,44,387,45,387,44,386,44,387,44,386,44,386,43,387,43,388,43,388,44,389,44,388,44,388,43,388,44,388,43,389,43,389,44,389,43,388,43,387,43,388,43,389,43,388,43,388,42,388,43,387,43,386,43,387,43,387,42,388,42,389,42,387,42,388,42,387,41,388,41,389,41,388,41,389,41,389,40,388,40,387,41,386,41,386,40,387,41,387,40,386,40,385,41,385,40,383,40,382,40,381,40,378,39,376,39,376,38,377,38,381,38,384,39,387,40,388,40,388,39,387,39,388,39,387,39,386,39,387,39,386,39,385,39,386,39,387,39,388,39,387,38,386,39,386,38,385,38,386,38,387,38,388,38,387,38,385,38,384,37,386,38,387,38,387,37,385,37,386,37,385,37,384,37,383,37,384,37,385,37,384,36,385,36,384,36,383,37,382,37,383,37,383,36,384,36,385,36,384,36,382,36,381,36,382,36,383,36,384,36,385,35,384,35,384,36,383,36,382,36,382,35,381,35,380,35,381,35,381,34,380,35,381,35,380,35,379,35,380,35,379,35,379,34,378,34,378,33,379,33,378,33,378,34,379,34,379,35,378,35,378,36,377,35,377,36,378,36,376,36,375,36,374,36,373,36,372,36,373,36,372,35,373,35,374,35,373,35,374,35,375,35,376,34,375,35,374,35,373,35,373,34,374,34,373,34,375,34,375,33,374,33,373,33,375,33,374,33,375,33,376,33,375,33,375,32,376,32,375,32,376,32,375,32,376,32,375,32,374,32,374,31,372,31,373,31,374,31,373,31,374,31,373,31,374,30,373,30,371,30,372,29,371,29,372,29,373,29,372,29,373,29,372,29,371,29,371,28,370,28,371,28,369,28,368,28,371,28,370,28,369,27,371,27,370,27,369,27,371,27,370,27,369,27,369,26,368,26,369,26,368,26,366,25,365,25,366,25,365,25,364,25,365,25,364,24,365,24,364,24,363,24,364,24,365,24,364,24,365,24,364,23,362,23,361,23,360,23,361,23,360,23,359,23,358,22,357,23,357,22,356,22,355,22,354,22,353,22,352,22,351,22,350,21,349,21,349,22,348,22,347,22,347,21,346,21,346,22,345,22,346,22,345,22,346,22,345,22,344,22,345,22,344,22,343,22,344,22,343,22,344,22,343,22,342,22,343,22,342,22,341,22,340,22,339,22,338,22,340,23,334,22,333,22,332,22,331,21,332,21,333,21,335,21,336,21,335,21,335,20,333,21,329,20,330,20,331,19,330,19,328,20,327,20,326,20,325,19,326,19,327,19,330,19,334,19,336,19,340,19,341,19,339,19,336,19,335,19,332,19,334,18,337,18,339,18,340,19,341,19,340,19,340,18,341,18,340,18,339,17,340,17,338,17,338,18,337,18,334,18,333,18,334,18,332,18,329,18,331,17,330,17,327,17,329,17,330,17,328,17,327,17,326,17,325,17,326,17,325,17,324,17,322,16,323,16,322,16,321,16,320,16,321,16,322,16,321,16,321,15,322,15,321,15,322,15,325,15,327,15,327,14,329,14,330,14,331,14,332,14,333,14,332,14,334,13,335,13,336,13,337,13,336,13,338,13,339,13,340,13,342,13,343,13,344,12,345,12,344,12,345,11,344,11,345,11,344,11,345,11,344,11,345,11,344,11,344,10,348,10,347,10,346,10,345,10,344,10,343,10,341,10,340,10,339,10,338,10,337,10,337,9,339,9,340,9,342,8,344,8,345,8,344,8,345,8,348,7,349,7,351,8,350,8,349,7,351,7,353,7,355,7,357,7,356,7,356,6,357,6,355,5,356,5,359,5,363,5,364,5,363,5,364,6,367,6,370,7,370,6,369,6,368,6,367,6,365,6,364,5,361,5,370,4,371,4,372,4,374,4,373,4,374,4,373,4,376,3,377,4,379,4,379,5,378,5,378,6,379,6,379,5,380,5,381,5,380,4,381,4,383,5,385,5,389,5,389,6,390,6,391,6,389,5,388,5,387,5,386,5,387,5,390,5,391,5,388,4,387,4,386,3,387,3,391,3,393,3,396,4,397,4,400,4,402,4,402,5,404,5,406,5,407,5,406,5,405,5,406,5,405,5,405,4,406,4,405,4,406,4,407,4,413,4,412,4,411,4,410,4,408,3,406,3,404,2,402,2,403,2,410,2,413,2,414,3,415,3,414,3,415,3,414,2,416,2,418,3,419,3,420,3,419,3,420,3,420,2,419,2,414,2,405,2,402,2,400,2,399,2,399,1,400,1,402,1,404,2,405,2,406,2,409,2,408,2,404,1,403,1,404,1,405,1,406,1,410,1,408,1,411,1,414,1,415,1,418,2,421,2,422,2,423,2,424,2,423,2,422,2,423,1,427,1,423,1,424,1,427,1,424,1,423,1,423,0,426,0,425,0,426,0,427,0,430,0,429,0,430,0,429,0,431,0,434,0,435,0,436,0,437,0,438,0,437,0,438,0,440,0,441,0,443,0,449,0,452,0,454,0,453,0,454,0,455,0,454,0,455,0,457,0,461,0,462,1,461,1,458,1,451,1,448,1,447,1,443,1,441,1</Points>\n    <Keys>Greenland, GRL, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>354,215,354,214,354,215,354,214,355,214,354,214,354,215,354,214,354,215</Points>\n    <Keys>Grenada, GRD, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>354,203,354,202,354,201,355,202,354,203</Points>\n    <Keys>Guadeloupe, GLP, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>355,202,355,201,356,202,355,202</Points>\n    <Keys>Guadeloupe, GLP, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>265,199,266,199,267,199,267,198,267,197,268,197,269,197,270,197,271,197,272,197,272,198,272,199,272,200,272,201,272,202,272,203,273,203,274,203,275,203,275,204,273,204,272,205,272,206,272,207,271,207,271,208,270,208,269,209,268,209,267,209,266,209,265,208,264,208,263,207,263,206,263,205,263,204,264,203,264,202,265,202,266,202,267,202,268,202,268,201,267,200,266,200,266,199,265,199</Points>\n    <Keys>Guatemala, GTM, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>565,241,565,240,566,239,566,240,565,241</Points>\n    <Keys>Guinea, GIN, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>498,213,500,213,501,213,502,213,502,214,503,213,504,213,505,213,505,214,506,215,506,214,507,214,508,215,508,214,509,214,510,214,511,214,512,213,511,213,512,213,513,213,513,214,513,216,514,216,514,217,513,218,514,218,514,217,515,217,515,219,516,219,516,220,515,220,515,221,515,222,516,222,516,223,516,224,516,225,517,225,516,225,515,225,515,226,516,226,515,226,515,228,514,228,514,227,513,227,513,228,513,229,512,229,512,228,511,228,511,227,511,226,511,225,510,225,509,225,508,225,508,226,508,225,507,226,508,225,508,224,508,223,507,223,508,223,507,222,506,221,504,221,503,221,502,221,502,222,501,222,501,223,500,223,500,222,499,223,499,222,498,222,499,221,498,221,497,220,498,220,497,220,496,220,496,219,496,218,495,219,495,218,496,218,495,218,495,217,495,218,495,217,495,218,494,218,495,217,495,216,496,216,497,215,497,216,498,215,498,214,499,213,498,213</Points>\n    <Keys>Guinea, GIN, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>489,213,490,213,491,213,492,213,493,213,494,212,498,212,498,213,499,213,498,214,498,215,497,216,497,215,496,216,495,216,495,217,494,218,494,217,494,218,494,217,493,217,493,216,494,216,493,216,494,216,494,215,494,216,493,215,493,216,493,215,493,216,493,215,494,215,495,215,494,215,495,215,494,215,493,215,492,215,492,214,492,215,491,215,490,215,490,214,491,214,490,214,489,213</Points>\n    <Keys>Guinea-Bissau, GNB, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>360,226,360,225,361,226,360,225,362,226,363,227,364,228,364,229,364,230,364,231,363,231,364,231,364,230,365,230,366,230,367,231,367,232,367,231,367,232,368,232,368,233,368,234,367,235,368,235,367,235,366,235,366,236,366,237,366,238,365,238,365,239,366,239,366,240,367,240,366,240,367,240,368,240,368,241,368,242,368,243,369,244,370,244,370,245,369,245,368,245,368,244,368,245,367,245,366,245,366,246,365,246,364,246,364,247,363,247,362,247,362,246,361,245,360,245,361,245,360,245,360,244,360,243,360,242,360,241,360,240,361,239,361,238,360,238,360,237,359,237,359,236,360,235,359,235,358,235,357,235,355,233,356,232,356,231,356,230,357,230,358,230,359,229,358,229,358,228,357,228,358,228,358,227,359,227,359,226,360,226</Points>\n    <Keys>Guyana, GUY, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>321,194,320,194,321,194</Points>\n    <Keys>Haiti, HTI, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>324,191,324,192,324,193,325,193,324,193,324,194,324,195,324,196,323,196,322,196,321,196,319,196,318,196,317,196,316,196,316,195,317,195,318,195,319,195,318,195,319,195,321,195,322,195,323,194,322,194,321,193,321,192,319,192,319,191,320,191,321,191,322,191,323,191,324,191,324,192,324,191</Points>\n    <Keys>Haiti, HTI, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>275,203,276,203,277,203,278,203,279,203,280,203,281,203,282,203,281,202,282,202,282,203,283,203,284,203,285,203,286,203,287,203,287,204,288,204,287,204,288,205,287,204,288,204,288,205,289,205,288,204,289,205,290,205,290,206,289,205,289,206,289,205,289,206,288,206,287,206,287,207,287,206,286,207,285,206,284,206,284,207,284,208,283,208,282,209,281,208,281,209,280,209,279,209,279,210,279,211,278,211,278,212,278,211,277,211,278,211,277,211,277,210,276,210,276,209,275,209,274,209,274,208,273,208,272,207,272,208,271,207,272,207,272,206,272,205,273,204,275,204,275,203</Points>\n    <Keys>Honduras, HND, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>882,183,883,183,883,184,881,184,881,183,882,183</Points>\n    <Keys>Hong Kong, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>606,105,606,106,607,106,608,106,608,107,607,107,606,107,606,108,605,108,605,109,604,109,605,109,604,110,604,111,603,111,603,112,602,112,601,112,600,112,599,112,598,112,597,113,597,112,597,113,596,113,595,113,594,113,593,113,592,113,591,113,591,112,590,112,589,111,589,110,588,110,589,110,588,110,589,109,589,108,590,108,589,108,589,107,590,107,591,107,591,106,592,107,593,107,595,107,596,107,596,106,597,106,598,106,599,106,600,106,601,106,601,105,602,105,603,105,604,105,605,105,606,105</Points>\n    <Keys>Hungary, HUN, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>475,53,476,53,475,53,474,53,475,53,475,54,476,54,475,54,476,54,476,55,476,54,477,54,477,53,478,53,478,54,479,54,479,53,478,52,479,52,480,53,481,53,481,52,482,52,483,52,484,52,484,53,485,53,485,54,485,53,485,52,486,52,487,53,487,52,488,52,489,52,490,52,489,52,490,52,490,51,491,51,492,51,492,52,493,52,494,52,495,51,496,51,494,52,495,52,494,52,495,52,496,52,496,53,495,53,496,53,497,53,496,54,497,54,498,54,499,54,498,54,498,55,499,55,497,55,499,55,498,55,499,55,499,56,498,56,497,55,498,55,498,56,497,56,498,56,497,56,496,56,497,56,497,57,496,57,495,57,496,57,495,57,495,58,494,58,493,57,493,58,492,58,491,58,490,59,489,59,488,59,489,59,487,59,486,59,486,60,486,59,486,60,485,60,483,60,481,60,480,60,479,60,478,60,478,59,478,60,478,59,479,59,478,59,477,59,476,59,475,59,474,59,473,59,471,59,472,59,471,59,471,58,472,58,472,59,474,58,473,58,474,58,473,58,474,58,474,57,475,57,474,57,474,58,473,58,473,57,474,57,473,57,474,57,475,57,474,57,473,57,472,57,473,56,472,56,473,56,472,56,471,56,470,56,469,56,468,56,467,56,468,56,470,56,470,55,470,56,471,55,471,56,472,56,472,55,474,55,473,55,472,55,473,55,474,54,473,54,472,54,473,54,472,54,471,54,470,54,469,54,468,54,467,54,466,54,467,54,468,54,467,54,468,54,467,53,469,53,469,54,470,53,469,53,470,53,469,53,468,53,470,53,468,53,468,52,469,52,470,52,471,52,471,53,471,52,472,53,472,52,471,52,472,52,471,52,472,51,471,52,471,51,471,52,470,52,470,51,471,51,472,51,473,51,473,52,474,52,475,52,474,52,475,52,476,53,475,53</Points>\n    <Keys>Iceland, ISL, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>818,214,818,215,818,216,818,215,818,216,817,216,817,215,817,214,818,214</Points>\n    <Keys>India, IND, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>821,230,821,229,820,229,821,229,821,230</Points>\n    <Keys>India, IND, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>817,219,817,218,817,219</Points>\n    <Keys>India, IND, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>773,144,774,144,775,143,776,143,778,143,779,144,780,144,781,144,780,145,780,146,780,147,779,147,778,147,778,148,777,148,776,149,777,149,777,150,776,150,776,151,777,151,778,151,778,152,778,153,777,153,776,153,775,153,775,154,776,154,776,155,776,156,776,157,776,156,776,157,777,156,777,157,778,158,779,158,780,158,780,159,781,159,783,160,782,160,781,161,781,162,780,162,780,163,780,164,781,165,781,164,782,165,783,165,783,166,784,166,785,167,786,167,787,167,788,167,788,168,789,168,790,168,791,168,792,168,793,168,794,169,793,169,794,169,794,170,795,170,796,170,797,170,797,171,798,171,800,171,801,171,802,171,803,171,804,171,804,170,803,169,804,169,804,168,804,167,805,166,806,166,806,167,806,168,806,169,806,170,807,170,808,170,809,170,810,170,811,170,812,170,813,170,814,170,815,170,816,170,816,169,816,168,815,168,814,168,814,167,815,167,816,167,817,167,818,167,818,166,817,166,818,166,819,165,820,164,821,164,822,164,822,163,823,163,824,163,825,163,826,163,828,162,828,163,829,163,828,163,828,164,829,163,829,164,829,165,828,165,829,165,830,165,830,166,831,165,831,166,832,166,831,166,832,166,832,167,831,167,830,168,831,169,830,169,830,168,829,168,829,169,828,169,827,169,827,170,826,170,825,171,825,170,825,171,825,172,825,173,824,174,823,174,823,175,824,175,823,176,823,177,822,178,822,179,820,178,820,179,820,178,819,179,820,179,820,180,820,181,819,181,819,182,819,183,819,184,818,185,818,184,818,185,818,184,817,185,817,184,817,182,817,181,816,180,816,179,816,180,816,179,816,180,816,179,815,179,815,180,815,181,814,182,814,181,813,180,813,179,814,179,814,178,815,178,815,177,815,178,815,177,816,177,816,176,817,176,817,175,816,175,814,175,813,175,812,175,811,175,810,175,809,175,809,174,809,173,809,172,808,172,808,173,808,172,808,173,807,172,807,171,806,171,807,172,806,172,806,171,805,171,805,172,804,172,804,173,805,174,806,174,806,175,807,175,806,175,805,175,804,176,804,177,805,178,806,178,806,179,805,179,805,180,806,180,806,181,806,182,806,183,807,184,807,185,806,185,807,185,807,186,806,186,806,185,806,186,806,185,806,184,806,185,805,185,805,184,806,184,805,184,805,185,805,186,805,185,805,186,805,185,805,186,804,186,804,185,804,186,804,185,804,184,803,184,803,183,803,184,804,184,804,185,803,185,803,186,801,186,800,186,800,187,800,188,801,188,800,189,799,190,799,191,798,190,798,191,799,191,798,191,797,191,796,192,796,191,795,191,795,192,796,191,796,192,795,192,796,192,795,192,794,193,793,194,792,195,792,196,791,196,790,197,789,197,789,198,788,198,787,199,786,200,787,200,786,201,785,202,784,201,783,202,782,203,783,203,782,203,782,202,782,203,781,203,780,203,780,205,780,206,780,207,780,208,780,209,780,210,780,209,780,210,780,209,780,210,781,210,780,211,780,212,780,213,780,214,779,214,779,216,779,217,779,216,779,218,779,220,778,220,777,220,777,221,776,222,777,223,778,223,777,223,776,223,775,223,774,224,774,225,773,226,772,226,771,226,770,225,769,224,769,223,769,224,769,223,768,222,768,221,769,221,769,222,769,221,768,221,768,220,767,219,767,218,767,216,766,216,766,215,765,215,766,215,765,215,765,214,764,213,764,212,764,211,763,210,764,210,764,209,763,210,763,209,763,208,763,207,762,207,762,206,761,205,761,204,760,203,760,202,759,201,760,201,759,200,759,199,759,198,759,197,758,196,759,196,758,196,758,195,759,195,758,195,758,194,759,194,758,194,759,194,758,194,758,193,758,194,758,193,759,193,758,193,758,192,758,191,757,191,758,190,758,189,758,188,758,187,757,187,758,187,757,187,757,186,758,186,757,186,758,186,759,185,757,186,757,185,758,185,757,185,757,184,758,184,757,184,757,183,756,184,756,185,755,185,756,185,756,186,756,187,755,187,754,188,753,188,752,188,750,188,750,187,749,186,748,185,747,185,746,184,747,183,747,184,748,184,748,183,749,183,750,183,750,182,751,182,751,181,751,182,750,182,749,182,747,182,745,181,745,180,745,179,746,179,745,179,744,180,744,179,745,179,746,179,746,178,747,178,748,178,749,178,750,178,751,177,751,178,752,178,752,177,753,177,752,177,753,176,752,175,752,174,751,173,750,173,750,172,750,171,749,171,748,170,748,169,750,168,750,167,751,166,751,167,752,167,753,167,754,167,755,167,755,166,756,165,756,164,757,164,758,163,759,162,760,161,760,160,761,160,761,159,762,158,763,157,764,157,763,157,763,156,763,155,764,155,764,154,765,154,766,154,765,153,764,153,763,153,764,152,763,152,762,152,763,152,763,151,762,151,762,150,761,149,762,149,762,148,761,148,762,148,761,148,761,147,762,146,763,146,764,146,765,147,766,147,767,147,768,147,768,146,769,146,770,146,770,147,770,146,771,146,771,145,772,145,773,144</Points>\n    <Keys>India, IND, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>818,212,818,213,818,214,818,213,818,212,818,211,818,210,819,210,819,211,818,211,818,212</Points>\n    <Keys>India, IND, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>952,276,953,275,953,273,954,273,955,273,956,273,957,273,956,274,956,275,955,276,954,276,953,276,952,276</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>932,255,932,254,931,253,932,253,933,253,933,254,932,255</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>837,256,836,256,835,254,835,253,836,253,836,254,837,254,837,255,837,256,837,255,837,256</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>868,254,868,253,869,254,868,254</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>840,259,839,258,840,258,840,259</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>885,277,885,276,884,276,883,276,883,275,884,275,885,275,886,275,887,276,886,276,885,277</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>839,258,838,257,839,257,839,258</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>863,260,862,260,862,259,862,258,863,258,864,258,864,259,864,260,863,260</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>909,263,908,263,909,262,909,263,909,262,909,263</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>918,258,917,258,917,257,917,256,918,257,917,257,918,258</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>929,275,928,274,929,274,929,275</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>917,275,917,274,917,273,918,274,919,273,920,274,919,274,918,274,917,274,917,275</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>948,256,947,256,946,256,946,255,947,255,948,256,949,256,950,256,949,256,948,256</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>908,283,909,282,910,282,910,283,909,283,908,283</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>905,282,905,282</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>913,257,912,256,913,256,913,255,915,256,914,256,913,257</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>901,281,900,281,899,280,898,280,897,280,896,279,897,279,898,279,899,279,899,278,900,279,901,279,901,280,902,280,902,281,901,281</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>913,278,914,278,915,277,915,276,917,276,918,276,919,276,920,275,921,276,921,275,921,276,921,277,919,277,918,277,917,278,916,278,915,279,914,279,914,280,913,280,913,281,912,281,911,282,910,282,910,281,911,281,910,281,910,280,911,279,912,278,913,278</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>909,276,909,275,910,275,909,276</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>908,268,908,267,908,268,908,267,907,268,907,267,908,266,908,265,908,264,909,264,909,265,908,266,909,266,909,267,908,267,908,268</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>859,260,859,259,857,259,857,258,857,257,856,257,855,257,855,256,856,256,856,255,857,255,856,256,857,256,857,255,858,255,858,256,858,257,859,258,860,258,860,259,859,259,860,260,859,260</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>841,260,840,259,841,260</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>889,277,888,277,887,277,888,277,888,276,888,275,889,275,890,276,889,277</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>932,262,931,261,929,261,929,260,928,260,928,261,926,261,926,260,926,261,925,261,924,260,924,261,923,261,923,260,924,260,924,259,926,259,927,259,928,259,930,259,931,260,931,261,932,261,932,262</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>912,276,911,276,912,275,912,276,912,275,912,276</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>910,276,909,276,910,276,910,275,910,276,910,275,911,275,911,276,910,276</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>956,276,955,276,955,275,956,275,956,276</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>913,276,913,275,915,275,915,276,913,276</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>924,275,923,275,924,275</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>891,278,890,278,890,277,890,276,891,276,892,276,893,276,893,277,894,276,893,276,893,275,894,275,894,276,895,275,896,276,895,276,896,276,896,275,897,276,897,277,896,277,895,277,895,276,894,277,893,277,892,278,891,278</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>907,267,907,266,907,267,907,266,907,267,906,267,906,266,907,266,906,265,907,265,908,264,908,265,907,266,907,267</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>903,277,902,277,901,277,900,277,899,277,899,276,900,276,900,275,901,275,902,275,902,276,903,276,904,276,905,276,906,276,907,276,908,276,908,275,909,275,908,276,907,277,906,277,905,277,904,277,903,277</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>853,253,852,252,853,252,853,253</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>829,243,828,243,827,243,827,242,828,242,828,243,828,242,829,243</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>854,252,854,251,853,251,853,250,853,251,854,251,855,251,854,251,854,252</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>921,252,921,251,921,252</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>835,252,834,252,835,252,835,251,835,252</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>847,248,846,247,846,246,847,247,847,248</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>920,239,919,238,920,238,920,237,920,238,920,239</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>923,253,922,253,922,252,921,252,922,251,922,252,922,251,922,252,923,252,922,252,922,253,923,253</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>905,267,905,266,906,266,906,267,905,267</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>861,269,861,268,862,269,863,269,864,270,864,269,865,270,865,271,866,271,867,271,868,271,869,271,870,271,871,271,872,270,873,270,873,271,874,271,874,270,875,271,876,271,877,271,877,272,878,272,877,272,878,272,878,273,879,274,880,274,881,274,882,273,882,274,883,274,883,276,883,277,883,276,882,276,881,276,880,276,879,275,878,276,877,276,876,276,875,275,875,276,874,275,873,275,872,275,871,275,869,274,868,274,867,274,866,274,866,273,866,274,865,274,863,274,862,273,860,273,859,273,859,272,859,271,858,272,858,271,857,271,856,271,855,271,856,271,856,270,857,270,857,269,858,268,858,269,858,268,859,269,860,269,861,269</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>901,270,901,269,901,268,901,269,901,270</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>924,262,924,261,923,262,924,261,925,261,924,261,924,262</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>930,257,929,257,929,256,930,256,931,256,931,257,931,256,930,257</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>916,256,917,256,919,256,918,256,917,256,916,256</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>933,275,933,274,933,275,933,274,933,273,934,273,934,272,935,272,934,272,934,273,935,273,934,274,934,275,933,275</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>920,262,918,261,918,260,920,260,921,260,921,261,921,262,920,262</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>846,267,846,266,847,267,846,267</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>942,271,942,270,942,269,943,270,943,271,942,271</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>938,268,937,268,938,268,937,267,938,267,938,268</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>909,255,909,254,909,255,908,255,908,254,909,254,909,255,910,254,910,255,909,255</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>922,256,922,255,923,255,924,255,924,256,923,256,922,256</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>938,268,939,267,939,266,939,267,938,268</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>888,263,888,262,888,261,888,260,888,261,888,262,888,263</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>943,270,943,269,942,269,942,268,943,268,942,268,943,268,943,267,944,267,943,267,944,267,944,268,943,268,944,269,943,270</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>924,244,925,243,926,243,925,244,924,244</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>886,241,886,240,886,239,887,238,887,237,888,238,888,237,889,237,889,238,889,237,890,238,890,237,890,238,891,237,892,238,893,239,892,239,893,239,893,240,892,240,892,239,892,240,891,240,892,240,892,241,891,241,892,241,892,242,893,242,892,242,893,242,892,242,893,242,894,244,893,244,893,245,894,245,894,246,895,246,896,247,897,247,896,248,895,248,894,248,893,247,894,248,893,248,892,250,892,251,892,252,892,253,891,253,890,254,890,255,889,255,888,256,889,256,889,257,888,257,889,257,889,258,888,258,889,258,889,259,888,260,888,259,888,260,887,261,886,262,885,262,884,263,883,263,883,261,882,261,883,260,882,261,882,260,882,261,881,261,880,261,880,260,879,260,879,259,879,260,878,260,877,261,876,260,876,261,875,261,875,260,875,259,874,260,874,259,873,259,873,260,872,260,872,259,872,260,871,260,871,259,870,260,870,259,870,258,870,257,870,256,869,256,870,256,870,255,870,254,869,254,869,253,868,253,867,253,868,253,868,252,867,252,867,251,867,250,866,250,866,249,866,248,866,247,867,247,867,246,867,247,866,247,867,246,868,245,867,245,868,245,868,244,868,245,869,245,869,246,870,247,871,248,872,248,872,247,873,247,874,247,874,248,874,247,875,248,875,247,876,247,876,246,877,246,879,246,878,246,879,246,880,247,881,247,881,246,882,246,883,246,884,245,884,244,884,243,885,243,885,242,885,241,885,242,886,241</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>847,247,846,246,845,246,846,246,847,246,847,247</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>908,248,910,248,911,248,912,247,913,247,913,246,914,246,914,245,915,245,915,246,914,248,913,249,911,249,910,250,909,250,909,249,908,249,907,249,906,249,905,249,904,249,903,249,902,249,901,249,900,250,900,251,900,252,900,253,901,253,901,254,901,255,902,255,903,255,904,254,904,253,905,253,906,253,907,253,908,253,908,252,909,252,910,252,910,253,910,254,909,254,909,253,908,253,908,254,907,254,907,255,906,255,905,256,904,256,903,256,904,256,904,257,905,257,905,258,906,258,906,259,906,260,907,260,906,260,906,261,907,261,906,261,907,262,907,263,908,263,908,264,907,264,906,264,906,265,905,265,904,264,904,263,904,262,903,262,903,261,902,261,902,260,903,260,903,259,902,259,903,259,902,258,901,259,900,259,900,260,901,260,901,261,901,262,901,264,901,265,900,265,900,266,901,267,900,267,899,267,899,268,898,267,898,266,898,265,898,264,898,263,898,262,898,261,897,261,896,261,896,260,896,259,896,258,897,258,897,257,897,256,898,256,897,256,897,255,897,254,898,253,899,253,898,253,899,252,899,253,899,252,899,251,898,251,899,250,899,251,899,250,899,249,900,249,900,248,901,248,902,248,902,247,903,247,904,247,905,247,906,247,907,247,907,248,908,248</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>932,252,932,251,931,251,931,252,931,251,930,251,931,251,930,251,931,251,932,251,933,251,934,251,933,252,933,251,932,252,932,251,931,251,932,251,932,252</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>844,245,844,244,845,244,845,245,844,245</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>833,249,832,248,832,247,831,247,831,246,832,246,833,247,833,248,833,249</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>963,258,963,260,963,262,963,264,963,266,963,268,963,269,962,270,962,271,963,271,963,273,963,275,963,277,963,278,962,278,961,277,961,276,960,275,959,275,960,275,960,274,960,275,959,275,958,275,957,275,957,274,957,275,956,275,956,274,957,273,956,273,956,272,955,272,956,272,957,272,956,272,955,271,956,271,957,271,956,271,956,270,956,271,955,270,955,269,954,269,954,268,955,268,954,268,955,268,954,268,954,267,953,267,953,266,953,267,953,266,952,266,951,266,951,265,951,266,951,265,950,265,949,265,948,264,947,264,946,264,945,264,944,263,943,263,944,263,944,262,943,262,943,263,943,262,942,262,943,262,942,263,942,262,941,262,941,261,941,262,941,261,940,261,941,261,941,260,941,259,941,260,940,260,940,261,940,262,939,263,938,263,938,262,938,261,938,260,938,261,937,260,936,259,935,259,936,259,935,259,936,259,937,259,938,259,939,258,940,258,941,258,941,259,941,258,941,257,941,258,941,257,940,257,939,257,938,257,937,257,936,257,935,256,936,256,935,256,935,255,934,255,933,255,934,255,933,255,932,255,933,254,933,253,934,253,935,253,936,252,937,252,938,252,939,252,940,253,941,253,942,253,942,255,942,256,942,257,943,259,943,258,944,259,944,260,944,261,946,261,946,260,947,260,947,259,948,258,949,258,949,257,950,257,951,257,951,256,952,255,953,255,954,255,955,256,956,256,957,257,958,257,959,258,960,258,960,257,960,258,961,258,962,258,963,258</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>864,240,864,239,863,238,864,238,865,239,864,239,864,240</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>917,240,916,240,916,239,917,239,917,240</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>849,248,848,248,847,248,847,247,847,248,848,247,849,248</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>849,248,848,248,848,247,847,247,848,247,849,247,849,248</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>853,248,853,247,852,247,853,247,854,247,853,248</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>948,254,947,254,947,253,946,253,946,252,947,253,948,254,949,254,948,254</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>924,246,923,247,922,247,922,248,923,248,923,247,924,247,924,246,925,246,926,246,926,247,924,248,925,249,926,249,926,250,925,250,925,249,924,249,923,249,923,250,923,251,924,252,925,253,924,253,923,252,922,251,923,250,922,249,922,248,922,247,922,246,922,245,923,244,924,244,923,245,924,245,923,246,924,246</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>825,234,826,234,827,234,828,235,829,235,830,235,831,235,832,235,833,236,833,237,834,237,834,238,835,238,835,239,836,239,837,240,838,241,839,241,839,242,840,243,839,242,840,242,840,243,840,242,840,243,841,244,842,244,842,245,842,244,843,244,844,245,844,246,845,245,845,246,846,246,846,247,847,248,848,248,849,249,848,249,847,250,849,249,850,249,851,250,851,251,850,251,849,251,850,251,850,252,850,253,851,253,851,254,851,253,852,254,853,254,853,255,853,256,853,257,853,256,854,257,854,256,854,257,854,258,853,258,854,258,853,258,853,259,854,258,854,257,854,258,854,257,855,258,856,258,857,259,858,260,857,261,857,262,857,263,857,264,857,265,857,266,857,267,857,268,856,268,856,267,856,268,856,267,855,267,855,268,854,267,853,267,854,268,853,268,852,267,852,266,851,266,851,265,850,265,849,265,849,264,848,264,848,263,846,262,846,261,845,261,844,260,844,259,843,259,843,258,842,257,842,256,841,255,841,254,841,253,840,253,840,252,839,251,838,250,837,250,837,249,837,248,836,247,836,246,836,245,835,245,834,244,833,244,832,243,832,242,832,241,831,241,830,240,830,239,829,239,828,238,827,238,826,237,826,236,825,235,825,234</Points>\n    <Keys>Indonesia, IDN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>705,171,706,170,707,170,708,170,707,170,705,171</Points>\n    <Keys>Iran, IRN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>674,132,675,133,676,133,677,134,678,134,679,134,680,133,681,133,682,132,683,132,683,131,685,132,684,133,684,134,685,135,686,135,686,136,687,137,687,138,688,138,690,138,690,139,692,140,693,140,695,141,697,140,699,140,701,140,702,140,700,140,701,140,702,140,701,140,702,139,701,138,702,139,703,138,704,138,704,137,705,136,706,136,707,136,708,136,709,136,708,136,709,136,710,136,711,136,712,136,712,137,713,137,714,137,715,138,715,137,716,138,716,137,717,138,718,138,718,139,719,139,720,139,721,141,723,141,723,142,723,143,723,144,723,145,723,146,722,147,722,148,721,148,721,149,721,150,722,150,721,151,722,153,722,154,722,155,722,156,724,156,725,156,725,157,725,158,723,160,722,161,724,162,724,163,724,164,726,165,727,165,727,166,728,166,728,167,728,168,728,169,729,169,730,169,729,169,729,170,729,171,728,171,727,171,726,171,726,172,725,172,725,173,724,175,723,175,721,175,721,174,721,175,720,174,720,175,720,174,719,174,718,174,717,174,716,174,715,174,714,174,713,173,713,174,713,173,711,173,711,172,711,171,711,170,710,170,710,169,709,169,708,169,706,170,705,170,704,171,703,171,702,170,701,170,700,170,699,169,698,169,697,168,698,168,697,168,696,167,694,167,693,166,693,165,693,164,692,164,692,163,691,163,692,162,691,162,690,161,690,160,689,160,688,160,687,160,686,159,687,159,686,159,687,159,686,159,686,160,685,160,685,161,685,160,684,160,684,159,684,158,683,157,683,156,683,155,682,154,682,153,681,153,680,152,679,152,678,152,678,151,677,150,676,149,676,148,676,147,677,147,676,146,677,146,677,145,678,145,677,144,678,144,678,143,679,143,677,143,676,143,676,142,676,143,676,142,675,141,675,140,674,140,674,139,673,138,673,137,672,137,673,136,673,135,672,135,672,134,672,133,672,132,673,132,673,131,674,132</Points>\n    <Keys>Iran, IRN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>667,139,668,138,668,139,669,138,669,139,670,139,671,139,672,139,672,140,673,139,674,139,674,140,675,140,675,141,676,142,676,143,676,142,676,143,677,143,679,143,678,143,678,144,677,144,678,145,677,145,677,146,676,146,677,147,676,147,676,148,676,149,677,150,678,151,678,152,679,152,680,152,681,153,682,153,682,154,683,155,683,156,683,157,684,158,684,159,684,160,685,160,685,161,684,160,683,160,682,160,681,160,681,161,680,162,679,163,677,162,676,162,674,163,672,162,670,162,670,160,670,159,669,159,668,158,667,158,663,156,660,154,657,154,657,153,657,152,656,151,656,150,660,148,663,147,663,146,663,145,663,144,664,144,664,143,663,142,663,141,664,141,665,141,667,139</Points>\n    <Keys>Iraq, IRQ, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>674,163,676,162,677,162,679,163,677,164,676,164,674,163</Points>\n    <Keys>Iraq-Saudi Arabia Neutral Zone, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>518,85,519,85,520,85,521,85,522,85,522,86,522,87,522,86,523,86,523,87,523,88,523,87,522,87,523,87,522,87,523,87,523,88,522,88,521,88,521,89,520,88,520,89,521,89,521,90,521,91,522,92,521,93,520,93,520,94,521,94,520,94,519,94,518,94,517,94,517,95,516,95,515,95,514,95,515,95,514,95,514,96,513,96,512,96,511,96,510,96,511,96,510,96,511,95,509,96,510,95,511,95,510,95,509,95,508,95,509,95,510,94,509,94,508,94,509,94,510,94,510,93,511,93,510,93,511,93,512,93,513,93,513,92,512,93,511,93,510,93,511,92,511,91,512,91,513,91,512,91,511,91,511,90,511,91,511,90,510,90,510,91,510,90,509,90,510,90,510,89,511,89,510,89,510,88,509,88,510,88,512,88,513,88,514,88,514,87,515,87,514,87,513,87,513,86,514,86,515,86,514,86,515,86,514,86,514,85,515,85,516,85,517,85,517,86,517,85,518,85,517,84,518,84,519,85,518,85</Points>\n    <Keys>Ireland, IRL, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>525,88,526,88,526,87,526,88,527,88,526,88,525,88</Points>\n    <Keys>Isle of Man, XIM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>645,151,646,151,647,151,646,151,646,152,646,153,645,153,644,154,645,155,644,155,645,155,645,156,644,156,645,156,646,156,646,157,646,158,645,158,645,159,645,160,644,162,644,161,644,160,643,159,643,158,642,157,643,157,643,156,643,155,644,155,644,154,644,153,644,152,645,152,645,151</Points>\n    <Keys>Israel, ISR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>585,141,584,140,583,140,582,139,581,139,580,139,579,138,578,138,577,137,577,136,578,136,579,136,580,136,581,137,582,136,583,136,584,136,585,136,586,136,585,137,585,138,585,139,586,139,585,140,585,141</Points>\n    <Keys>Italy, ITA, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>566,134,565,134,565,133,565,134,565,133,565,132,565,131,565,130,565,129,564,129,564,128,565,128,566,127,567,127,568,127,568,128,569,128,569,129,568,130,569,130,569,131,568,132,568,133,567,133,567,134,566,134</Points>\n    <Keys>Italy, ITA, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>571,110,572,110,573,110,574,110,574,109,575,110,576,109,576,110,577,110,578,111,580,111,581,111,580,111,580,112,580,113,581,113,581,114,580,113,579,113,579,114,578,114,577,114,576,114,576,115,577,115,577,116,576,116,576,117,577,118,578,119,579,119,580,120,581,121,581,122,582,123,583,124,584,124,586,125,587,125,588,125,587,126,588,126,589,127,590,127,591,128,592,128,593,128,593,129,594,129,595,129,595,130,595,131,594,131,593,131,594,130,593,130,592,130,591,129,590,129,590,130,589,130,589,131,589,132,590,132,591,132,591,133,591,134,590,134,589,134,589,135,588,136,588,137,587,137,586,136,587,136,587,135,587,134,588,134,588,133,588,132,587,132,587,131,586,130,586,131,585,130,584,130,584,129,584,128,583,129,582,129,583,129,583,128,582,128,581,127,580,127,579,127,578,126,577,126,577,125,576,125,575,124,574,124,574,123,573,123,572,122,571,122,571,121,570,120,570,119,570,118,569,118,568,118,567,117,567,118,566,117,565,118,564,118,564,119,563,119,562,119,563,118,561,118,560,118,560,117,561,116,560,116,560,115,559,115,560,115,561,115,561,114,560,114,560,113,561,113,562,113,563,113,563,112,564,112,565,111,565,112,566,112,566,113,567,113,566,113,567,113,567,112,567,111,568,111,568,112,569,112,569,111,569,112,570,112,570,111,571,111,571,110</Points>\n    <Keys>Italy, ITA, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>577,119,577,119</Points>\n    <Keys>Italy, ITA, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>520,218,520,219,520,218,521,218,521,219,521,220,522,220,522,219,523,219,523,220,524,220,525,220,525,221,526,221,526,222,527,222,527,221,528,221,530,221,531,221,531,222,531,223,532,223,531,223,532,223,532,224,532,226,531,226,531,227,530,229,530,230,530,231,530,232,530,233,531,233,531,234,531,235,530,235,530,234,530,235,528,235,527,235,528,235,528,234,528,235,527,235,526,235,525,235,526,235,527,235,528,235,527,235,525,235,524,235,525,235,524,235,523,235,524,235,523,235,522,235,520,236,519,237,518,237,517,237,517,236,517,235,517,234,517,233,516,233,516,232,515,232,515,231,514,231,514,230,515,229,514,229,514,228,515,228,515,226,516,226,515,226,515,225,516,225,517,225,516,225,516,224,516,223,516,222,515,222,515,221,515,220,516,220,516,219,517,219,517,220,518,220,519,220,519,219,520,219,519,219,520,218</Points>\n    <Keys>Ivory Coast, CIV, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>308,197,307,197,306,197,306,196,305,196,304,196,305,195,306,195,308,195,309,195,310,196,311,197,310,197,309,197,308,197</Points>\n    <Keys>Jamaica, JAM, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>512,38,514,37,515,37,516,37,515,37,516,37,515,38,514,38,513,38,512,38</Points>\n    <Keys>Jan Mayen, SJM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>947,150,946,150,946,149,945,149,945,148,946,147,946,146,945,146,945,147,944,147,944,146,943,146,942,146,942,147,941,147,942,147,941,147,940,147,939,148,939,147,939,148,939,147,939,148,939,147,938,148,937,148,937,147,936,148,936,149,935,149,935,148,934,149,934,148,934,149,934,148,934,149,933,149,933,148,932,149,932,148,932,147,933,147,932,147,933,147,934,147,935,146,936,146,937,145,938,144,937,144,938,144,939,144,940,144,941,144,942,144,943,144,944,144,945,143,945,144,946,144,947,144,947,143,948,143,948,144,948,143,947,143,948,142,949,141,950,140,950,139,950,138,951,138,952,138,951,138,951,139,950,139,951,139,951,140,950,140,951,140,952,140,953,139,955,138,956,138,956,137,957,137,958,136,958,135,959,134,959,133,960,133,960,132,960,131,959,131,959,130,960,130,959,129,960,128,960,127,961,128,960,127,961,127,961,128,962,128,963,128,963,127,962,127,962,126,963,126,964,126,964,127,964,129,965,130,965,131,965,132,966,132,965,132,966,132,965,132,965,133,965,132,965,133,965,134,964,134,964,135,964,136,964,135,963,135,963,136,963,135,963,136,962,136,962,137,963,138,962,140,961,141,961,142,962,143,961,144,961,145,960,145,959,146,959,145,959,144,960,144,959,144,958,144,959,144,958,144,959,145,958,145,957,145,957,146,956,147,956,146,956,145,955,145,955,146,954,146,955,146,954,147,953,147,952,147,951,147,952,146,951,146,950,146,950,145,949,146,949,147,950,147,950,148,949,148,948,148,948,149,947,150</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>928,148,928,147,927,147,928,147,927,147,928,147,928,146,928,147,928,148</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>944,148,944,147,945,147,944,147,944,148</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>928,166,927,166,927,165,928,165,929,165,928,166</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>931,152,931,151,930,151,930,152,931,152,930,153,930,152,929,152,929,153,929,152,928,152,929,151,929,152,930,152,929,151,928,151,929,151,928,151,928,150,929,150,929,151,929,150,930,150,931,150,931,149,932,149,933,149,932,149,933,150,934,150,934,149,935,150,934,150,934,151,935,151,936,151,935,151,935,152,936,152,935,152,936,152,935,152,935,153,934,153,935,153,934,153,934,155,934,156,933,156,933,157,932,157,931,158,932,157,932,156,931,156,932,156,932,155,931,155,931,156,931,157,930,157,930,156,931,156,930,155,930,154,931,153,931,152</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>960,126,959,126,960,126,960,125,960,124,959,124,959,123,960,122,961,122,961,121,960,121,961,121,961,120,962,121,963,121,964,121,964,120,964,119,964,118,965,117,965,116,964,115,964,114,965,114,966,114,966,115,968,116,969,117,970,118,971,118,972,118,973,119,974,119,974,118,975,117,976,118,975,118,975,119,976,121,975,120,975,121,976,121,976,120,977,120,977,121,976,121,975,121,974,122,974,121,974,122,973,122,972,122,971,122,970,123,970,124,969,124,969,125,968,124,966,123,965,123,964,123,963,123,962,124,962,123,961,123,960,123,960,124,961,124,962,124,963,125,962,125,961,125,961,126,960,126</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>938,152,937,152,938,152,937,152,937,151,937,150,936,150,937,150,937,149,938,149,938,148,939,148,939,149,940,149,940,148,941,148,941,147,942,147,942,148,942,147,942,148,943,148,943,149,944,149,943,149,944,149,943,150,942,150,942,151,941,150,940,150,939,151,938,152,939,152,938,152</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>954,137,955,137,954,137,954,136,955,136,955,137,954,137</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>929,154,930,154,929,154,930,154,929,153,930,153,930,154,929,154</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>931,160,931,159,931,160</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>932,159,933,158,932,159</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>926,153,925,153,925,152,926,152,926,153</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>923,172,922,172,923,172,923,171,923,170,923,171,924,171,924,170,924,171,923,171,923,172</Points>\n    <Keys>Japan, JPN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>645,155,644,154,645,153,646,153,646,152,647,152,648,153,649,153,650,153,650,154,651,153,652,153,652,152,653,152,654,151,655,151,656,150,656,151,657,152,657,153,657,154,656,155,655,155,654,155,653,155,652,156,651,156,651,157,652,158,653,158,654,159,653,159,652,160,651,161,650,161,649,162,648,162,648,163,647,163,646,163,645,163,644,162,645,162,644,162,645,160,645,159,645,158,646,158,646,157,646,156,645,156,644,156,645,156,645,155,644,155,645,155</Points>\n    <Keys>Jordan, JOR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>723,118,723,117,723,118,722,117,722,118,716,114,715,114,707,115,707,127,707,126,707,127,706,127,706,126,705,126,704,125,704,124,703,124,702,124,701,123,700,124,699,124,698,124,697,125,697,124,697,123,698,123,697,123,697,122,698,123,698,122,697,122,696,122,695,122,695,121,694,121,693,121,693,120,693,119,692,119,692,118,691,118,690,117,692,117,693,117,694,117,693,117,692,116,693,115,694,114,694,115,694,114,695,114,697,114,698,115,699,114,698,114,699,113,699,112,699,111,698,111,699,111,699,110,698,110,697,110,696,110,695,110,695,109,694,109,694,110,694,109,693,109,692,109,692,110,691,110,690,110,689,111,688,111,687,111,688,111,687,111,688,111,687,111,686,111,685,111,685,110,686,110,687,110,686,109,685,108,684,108,684,107,683,107,682,107,681,107,681,106,679,105,680,104,680,103,681,103,680,103,680,102,680,101,681,101,681,100,682,100,681,100,682,100,681,100,682,100,682,99,683,99,683,100,684,100,684,101,685,101,686,101,686,100,686,99,685,99,686,99,687,98,688,98,688,97,689,97,690,97,691,97,691,96,692,96,692,95,693,95,693,96,694,96,693,96,694,96,695,96,695,95,696,96,696,95,697,95,697,96,698,96,699,96,700,96,700,97,701,97,702,97,702,98,703,98,703,99,704,99,703,98,704,98,703,98,704,98,703,98,703,97,704,97,704,98,705,98,706,99,706,98,706,99,707,99,708,98,709,98,709,97,709,98,710,98,710,97,711,97,712,98,713,98,713,97,714,97,715,97,715,98,716,98,717,98,717,99,718,99,719,99,719,98,720,98,722,99,724,98,724,97,725,97,724,97,724,96,723,96,722,96,721,96,721,95,720,95,720,94,720,95,721,94,722,94,723,93,722,93,722,92,723,92,722,92,723,92,723,91,723,92,724,92,724,91,724,92,725,92,726,92,726,91,725,91,724,91,723,91,723,90,724,90,723,90,722,90,723,90,723,89,722,89,723,89,723,88,724,88,724,89,724,88,725,89,725,88,725,89,726,89,726,88,727,88,727,89,727,88,728,88,729,88,730,88,731,88,732,88,731,88,732,88,732,87,733,87,734,87,735,87,735,88,735,87,736,87,737,87,737,86,737,87,738,87,739,86,740,86,741,86,742,86,743,86,744,86,744,85,745,85,746,85,746,84,746,85,747,85,747,84,746,84,747,84,747,85,748,84,749,84,749,85,750,85,751,85,752,85,752,86,753,86,753,87,753,88,753,87,752,87,752,88,753,88,754,88,755,88,756,88,756,87,756,88,757,88,756,88,757,88,757,89,758,89,758,88,757,88,758,88,759,88,759,89,760,89,760,88,761,88,761,89,760,89,759,89,759,90,760,90,761,90,762,90,763,90,763,89,764,89,765,89,766,89,766,88,767,88,768,88,768,87,769,88,769,87,770,87,770,88,769,88,769,89,772,90,773,90,773,91,774,91,775,92,775,93,776,94,778,95,778,96,779,98,780,98,781,98,781,97,782,97,783,97,783,98,784,98,785,98,786,98,787,98,788,98,789,98,789,97,790,97,790,98,791,98,792,99,792,100,793,100,794,100,795,100,794,101,795,101,795,102,796,102,797,102,798,102,799,102,799,101,800,101,800,102,799,102,800,102,801,103,802,103,801,103,800,103,800,104,799,105,798,105,797,105,796,107,796,108,797,108,797,109,796,109,795,109,794,110,793,110,792,110,790,109,789,109,789,110,788,110,788,111,787,112,787,113,786,114,787,114,787,115,786,115,785,115,785,114,784,115,782,115,780,115,779,116,780,116,781,116,781,117,781,118,781,119,782,120,782,121,781,121,781,122,780,122,780,123,780,124,780,123,779,123,778,123,777,123,777,122,776,122,775,122,774,122,773,122,772,122,771,122,770,122,769,122,768,122,767,122,766,122,765,122,764,122,763,121,762,121,761,121,760,121,760,122,760,123,759,123,758,123,757,122,756,122,755,122,754,122,753,122,753,123,752,123,752,124,751,124,750,124,750,125,749,125,748,125,748,126,747,126,747,127,746,127,746,128,745,128,745,129,744,128,744,127,743,127,742,127,741,127,740,127,739,125,739,124,738,124,738,123,738,122,737,122,736,121,735,120,734,119,733,120,731,120,729,120,726,120,723,118</Points>\n    <Keys>Kazakhstan, KAZ, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>642,254,641,254,641,252,641,251,641,250,642,250,642,249,642,248,643,248,643,247,644,247,644,246,645,245,644,245,645,245,644,245,644,244,644,243,644,242,643,242,643,241,643,240,643,239,642,239,642,238,641,238,643,237,645,237,646,237,647,237,648,237,649,237,650,237,653,239,654,240,655,240,656,240,657,240,658,240,659,239,661,238,662,238,663,239,665,239,664,241,662,242,662,251,663,253,664,255,664,256,663,256,663,257,662,257,662,256,663,256,662,256,662,257,662,256,662,257,662,258,661,258,660,258,660,259,660,260,659,261,659,260,659,261,659,262,659,263,658,262,658,263,659,263,658,264,657,264,657,265,657,264,653,261,652,261,653,260,652,260,648,257,647,256,644,255,642,254</Points>\n    <Keys>Kenya, KEN, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>746,400,746,399,746,398,746,397,747,396,747,397,746,397,747,397,746,397,747,397,746,398,747,398,748,398,748,397,748,398,747,398,748,398,749,398,750,398,751,398,751,399,750,399,751,399,750,399,749,399,750,399,751,399,750,399,750,400,749,400,749,399,748,399,749,399,748,400,748,399,747,399,747,400,746,400</Points>\n    <Keys>Kerguelen, Antarctica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>68,245,67,245,67,244,68,245,67,245,68,245</Points>\n    <Keys>Kiribati, KIR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>925,135,924,135,924,136,923,136,921,136,920,136,920,137,919,137,918,137,917,137,916,136,917,137,916,137,915,137,915,136,914,136,913,136,914,136,914,135,915,135,914,135,915,135,915,134,916,134,915,134,915,133,916,133,916,132,914,132,914,131,914,132,913,132,913,131,912,131,913,131,913,130,914,129,915,129,916,129,916,128,917,128,916,128,917,128,918,128,919,126,920,125,921,125,921,126,922,126,923,126,924,126,924,125,924,124,925,124,926,124,927,124,928,123,929,123,929,122,930,122,931,123,931,124,932,124,931,124,930,124,929,125,928,126,929,126,929,127,929,128,928,128,927,128,927,129,926,129,926,130,925,130,926,130,925,130,924,130,923,130,923,131,922,131,922,132,922,133,922,132,922,133,923,133,924,134,925,134,925,135</Points>\n    <Keys>Korea, Peoples Republic of, PRK, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>925,146,926,145,926,146,925,146</Points>\n    <Keys>Korea, Republic of, KOR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>918,151,918,150,920,150,920,151,919,151,918,151</Points>\n    <Keys>Korea, Republic of, KOR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>920,137,920,136,921,136,923,136,924,136,924,135,925,135,926,136,927,137,927,138,927,139,928,139,928,140,928,141,928,142,928,143,928,142,928,143,928,144,927,145,926,145,925,145,925,146,924,146,925,146,924,146,924,145,924,146,923,146,922,146,923,146,922,146,922,147,922,146,922,147,921,147,921,146,921,147,922,146,921,146,921,147,920,147,919,147,919,148,919,147,918,147,918,146,919,147,919,146,919,147,919,146,918,146,919,146,919,145,918,145,919,145,918,145,919,144,920,144,919,144,920,143,919,143,920,143,920,142,919,142,919,141,919,140,919,141,919,140,918,140,919,141,918,141,918,140,919,140,918,140,919,140,919,139,919,140,919,139,919,140,920,140,921,140,920,140,920,139,920,138,919,138,920,138,919,138,919,137,920,138,920,137</Points>\n    <Keys>Korea, Republic of, KOR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>684,162,684,161,685,161,684,162</Points>\n    <Keys>Kuwait, KWT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>679,163,680,162,681,161,681,160,682,160,683,160,684,161,684,162,683,162,683,163,683,162,684,162,684,163,684,164,685,164,685,165,683,165,682,164,680,163,679,163</Points>\n    <Keys>Kuwait, KWT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>752,124,752,123,753,123,753,122,754,122,755,122,756,122,757,122,758,123,759,123,760,123,760,122,760,121,761,121,762,121,763,121,764,122,765,122,766,122,767,122,768,122,769,122,770,122,771,122,772,122,773,122,774,122,775,122,776,122,777,122,777,123,778,123,779,123,780,123,780,124,779,124,779,125,778,125,777,125,776,126,775,126,775,127,774,127,772,128,771,127,770,127,770,128,769,128,769,129,768,129,767,130,766,129,767,129,766,129,765,129,764,129,764,130,764,129,763,130,762,130,761,130,761,131,761,132,760,132,759,132,758,132,757,132,756,133,756,132,755,132,755,133,755,132,754,132,753,132,752,132,751,132,750,132,749,132,748,132,747,132,747,131,748,131,748,130,750,130,751,130,751,131,751,130,752,130,753,130,754,130,755,130,756,130,755,130,756,129,757,129,758,129,758,128,759,128,758,128,757,128,757,127,756,127,755,127,755,126,754,126,754,127,754,126,754,127,753,127,752,127,752,126,751,126,750,126,751,125,752,125,752,124,753,124,752,124</Points>\n    <Keys>Kyrgyzstan, KGZ, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>843,186,843,187,844,187,845,187,845,186,845,185,844,184,845,183,846,183,846,184,847,184,847,185,848,186,848,185,848,186,848,187,849,187,849,188,850,188,851,189,851,188,852,188,853,188,853,189,854,189,854,190,854,191,853,191,853,192,853,191,852,192,852,191,852,192,852,191,852,192,851,192,851,193,852,193,853,194,854,194,855,194,855,195,855,196,856,196,856,197,857,197,857,198,858,198,858,199,859,199,859,200,859,201,860,201,860,202,861,202,862,202,862,203,861,203,861,204,862,204,863,205,862,205,862,206,862,207,861,207,860,207,860,208,860,207,859,207,858,207,857,207,858,208,858,209,857,209,857,208,856,208,855,208,855,207,856,207,856,206,856,205,856,204,856,203,856,202,855,202,854,202,854,201,854,200,854,199,854,198,853,198,853,197,852,197,852,196,851,196,851,195,850,195,849,195,849,196,849,197,848,196,848,197,847,197,846,196,845,196,845,197,844,197,843,198,842,198,842,197,843,197,843,196,843,195,843,194,844,193,843,193,843,192,842,192,841,192,841,191,841,190,841,189,840,189,840,190,840,189,841,188,841,187,842,187,843,186</Points>\n    <Keys>Laos, LAO, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>612,77,613,77,614,77,614,76,614,77,614,76,615,76,615,77,615,76,616,76,616,77,617,77,618,77,618,78,619,78,620,78,621,78,622,78,623,79,623,80,622,80,623,80,624,80,624,81,624,82,623,82,623,83,622,83,621,83,620,83,619,83,618,83,617,82,616,82,615,82,614,81,613,81,613,82,612,82,611,82,611,81,610,81,609,81,609,82,608,81,607,81,606,81,605,82,604,82,603,82,602,82,603,81,602,81,603,80,604,80,604,79,604,78,605,78,607,77,607,78,608,78,609,78,609,79,610,80,611,80,613,79,613,78,612,77</Points>\n    <Keys>Latvia, LVA, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>647,147,648,147,648,146,649,146,649,147,649,148,648,149,649,149,648,149,647,149,647,150,648,150,647,150,646,151,645,151,645,150,646,150,646,149,646,148,647,147</Points>\n    <Keys>Lebanon, LBN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>621,339,622,339,622,338,623,337,624,337,625,336,626,336,626,337,627,337,627,338,628,339,627,339,627,340,626,341,625,341,624,341,624,342,623,342,622,342,622,341,621,341,621,339</Points>\n    <Keys>Lesotho, LSO, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>509,225,510,225,511,225,511,226,511,227,511,228,512,228,512,229,513,229,513,228,513,227,514,227,514,228,514,229,515,229,514,230,514,231,515,231,515,232,516,232,516,233,517,233,517,234,517,235,517,236,517,237,516,237,515,237,514,236,513,236,511,235,511,234,510,233,509,233,508,232,507,232,507,231,506,230,505,230,505,229,506,229,506,228,507,228,507,227,508,227,508,226,509,226,509,225</Points>\n    <Keys>Liberia, LBR, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>568,160,569,159,570,158,570,156,570,155,571,155,572,154,574,153,574,151,575,151,576,152,577,152,579,152,580,152,581,152,582,152,583,153,585,153,586,154,586,155,586,156,587,156,588,157,590,157,591,157,592,157,593,158,594,158,595,159,596,160,597,160,598,160,599,159,600,158,600,157,599,156,599,155,600,154,601,153,602,152,604,152,605,152,606,152,607,152,609,153,609,154,611,154,613,155,613,154,614,155,615,155,615,156,614,156,614,157,615,158,614,159,614,160,614,161,614,162,614,163,615,167,614,171,614,175,614,179,615,183,615,184,615,189,615,191,613,191,612,190,611,192,604,188,595,183,588,180,585,181,582,183,580,181,575,180,574,178,572,177,571,177,570,177,570,176,570,174,568,172,568,171,569,171,569,170,569,169,569,168,569,167,569,166,569,164,569,162,568,161,567,160,568,160</Points>\n    <Keys>Libya, LBY, NorthAfrica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>568,109,568,109</Points>\n    <Keys>Liechtenstein, LIE, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>608,87,606,87,604,88,601,87,599,87,600,87,601,86,600,86,600,87,600,86,599,86,599,87,598,87,599,87,599,86,601,86,602,85,603,84,603,83,603,84,602,85,601,86,602,86,603,86,603,85,603,84,603,83,603,82,604,82,605,82,606,81,607,81,608,81,609,82,609,81,610,81,611,81,611,82,612,82,613,82,613,81,614,81,615,82,616,82,617,82,618,83,619,83,619,84,619,85,620,85,619,85,618,85,618,86,617,86,617,87,616,87,616,88,617,88,616,88,615,88,614,88,614,89,614,88,613,89,612,89,611,89,610,89,610,88,609,88,609,87,608,87</Points>\n    <Keys>Lithuania, LTU, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>557,102,557,101,557,100,558,100,558,101,559,101,559,102,558,102,557,102</Points>\n    <Keys>Luxembourg, LUX, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>880,184,880,184</Points>\n    <Keys>Macau, MAC, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>601,125,602,125,602,124,603,124,604,124,605,124,606,124,606,123,607,124,608,124,608,125,609,125,608,126,608,127,607,127,606,127,605,127,605,128,604,128,603,128,602,128,602,127,601,127,601,126,601,125</Points>\n    <Keys>Macedonia, MKD, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>681,295,682,294,682,295,682,296,682,295,683,294,683,295,683,294,683,295,684,295,684,294,683,294,683,293,684,293,683,293,684,293,683,293,684,292,683,292,683,291,684,291,684,292,685,292,685,291,686,291,686,290,686,289,686,288,687,287,687,286,688,287,687,287,688,287,688,288,688,289,689,289,689,290,689,291,690,291,690,294,690,295,691,296,691,297,690,298,689,297,688,297,689,298,689,299,689,300,689,301,688,301,688,302,688,304,688,306,687,308,686,310,685,312,685,313,685,314,684,316,683,318,682,321,682,322,682,323,681,323,681,324,681,325,680,326,679,326,677,326,676,327,675,327,674,327,674,326,673,326,672,326,673,326,672,326,671,324,670,323,670,322,670,321,671,321,670,320,670,319,669,318,669,317,669,316,670,316,670,315,670,314,671,314,671,313,672,313,672,312,672,311,673,310,673,309,672,308,672,307,672,306,672,304,671,303,672,302,673,301,673,300,673,299,674,299,675,298,675,299,676,299,676,298,676,299,676,298,677,298,678,298,679,298,678,298,679,298,678,298,678,297,679,297,680,296,681,297,680,297,681,297,681,296,681,295,682,295,681,295</Points>\n    <Keys>Madagascar, MDG, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>641,280,641,279,642,279,643,280,643,281,643,282,644,283,643,284,644,284,644,285,643,285,643,286,643,287,643,288,643,289,643,291,644,291,645,292,647,294,647,295,647,296,647,297,647,299,646,299,645,299,645,300,645,301,645,302,645,301,644,301,644,300,643,300,643,299,642,298,643,298,643,297,643,296,643,295,643,294,642,294,641,294,640,294,639,293,639,292,639,293,638,292,638,291,639,290,638,290,639,289,638,289,639,288,640,288,640,287,640,288,640,287,639,287,639,286,639,285,640,284,639,283,640,283,641,282,640,282,640,281,639,281,640,280,639,280,639,279,638,279,639,279,640,279,641,279,641,280</Points>\n    <Keys>Malawi, MWI, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>891,229,891,228,891,229</Points>\n    <Keys>Malaysia, MYS, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>839,232,838,231,839,231,839,232</Points>\n    <Keys>Malaysia, MYS, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>840,231,840,230,841,231,842,231,842,232,843,232,843,233,842,233,843,233,843,234,843,233,844,233,845,233,846,232,847,232,847,233,849,234,849,235,850,236,850,238,850,239,850,240,850,242,850,243,851,243,851,244,852,244,852,245,852,246,851,246,852,246,851,246,850,246,850,247,850,246,849,246,848,245,847,244,846,244,845,243,844,242,843,242,844,242,844,241,843,241,843,240,842,239,842,238,841,238,841,237,841,236,841,237,841,236,841,235,841,234,841,233,840,232,840,231</Points>\n    <Keys>Malaysia, MYS, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>885,236,885,237,886,238,885,237,885,236,886,236,886,235,886,234,887,234,887,233,888,233,888,232,888,231,889,230,890,230,890,229,890,230,890,231,891,230,891,231,892,231,893,231,893,232,892,232,893,232,893,233,892,233,893,233,894,232,894,233,893,233,894,233,895,233,895,234,896,234,897,234,897,235,896,235,895,236,895,235,894,236,895,237,893,238,892,237,892,238,891,237,890,238,890,237,890,238,889,237,889,238,889,237,888,237,888,238,887,237,887,238,886,239,886,240,886,241,885,242,885,241,885,242,885,243,884,243,884,244,884,245,883,246,882,246,881,246,881,247,880,247,879,246,878,246,879,246,877,246,876,246,876,247,875,247,875,248,874,247,874,248,874,247,873,247,872,247,872,248,871,248,870,247,869,246,869,245,868,245,868,244,868,245,869,245,870,245,871,245,871,246,872,246,873,246,873,247,874,246,873,246,873,245,873,246,873,245,873,244,874,244,873,244,873,243,874,243,874,242,875,242,876,242,878,241,879,241,879,240,880,239,881,239,881,238,881,237,882,237,882,238,883,238,884,238,884,237,884,236,885,236</Points>\n    <Keys>Malaysia, MYS, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,233,760,233</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,238,760,238</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,233,758,233</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,237,760,237</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,235,760,235</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,240,758,240</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,233,760,233</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,233,760,233</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,233,758,233</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,238,758,238</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,234,760,234</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,235,759,235</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,232,759,232</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,232,759,232</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,232,759,232</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,232,759,232</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,232,759,232</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,232,759,232</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,231,759,231</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,231,758,231</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,231,759,231</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,238,760,238</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,231,759,231</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,231,759,230,759,231</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,238,760,238</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,230,759,230</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,242,758,242</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,230,759,230</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,230,759,230</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,230,758,230</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,230,759,230</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,230,759,230</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,239,758,238,758,239</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,229,758,229</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,229,758,229</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,233,758,233</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,233,760,233</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,239,760,239</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,243,759,243</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,238,760,238</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,239,760,239</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,239,760,239</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,243,760,243</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,243,760,243</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,239,760,239</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,240,758,240</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,233,758,233</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,244,758,244</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,244,758,244</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,244,759,244</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,242,758,242</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,233,758,233</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>761,240,761,240</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,240,760,240</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,244,759,244</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,245,759,245</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,253,759,253</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,241,760,241</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,253,759,253</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,253,759,252,759,253</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,242,760,242</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,244,760,244</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,244,760,244</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,244,760,244</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,245,760,245</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,244,760,244</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,242,760,242</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,245,759,245</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,245,760,245</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,249,758,249</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,249,760,249</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,252,759,252</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,245,760,245</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,239,758,239</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,250,758,250</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,245,760,245</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,245,759,245</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,245,760,245</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,250,759,250</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,252,759,252</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,252,759,252</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,241,758,241</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,242,760,242</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,251,760,251</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,249,760,249</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,242,760,242</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,249,758,249</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,250,760,250</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,242,759,242</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,248,759,248</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,248,759,248</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,242,760,242</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,248,760,248</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,242,760,242</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,250,759,250</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,250,759,250</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>761,237,761,237</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,240,758,240</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,236,760,236</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,235,759,235</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>761,237,761,237</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,235,760,235</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,237,760,237</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,235,759,235</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>758,236,758,236</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,242,759,242</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,237,760,237</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>759,234,760,234,759,234</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,237,760,237</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,234,760,234</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>760,234,760,234</Points>\n    <Keys>Maldives, MDV, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>520,176,525,175,530,179,535,182,539,185,543,187,543,188,544,189,545,190,546,190,547,190,548,191,549,191,549,192,549,193,549,194,552,193,552,195,552,200,552,201,552,202,551,202,552,203,551,203,551,204,550,204,549,204,543,205,542,206,541,205,541,206,540,205,540,206,539,205,538,205,537,205,536,206,534,207,533,208,532,208,531,208,531,209,531,210,530,210,530,209,530,211,529,211,528,210,527,210,527,211,526,211,527,212,526,212,526,213,526,214,526,213,526,214,525,214,524,215,523,215,524,215,524,216,524,217,523,217,523,218,523,219,522,219,522,220,521,220,521,219,521,218,520,218,520,219,520,218,519,219,520,219,519,219,519,220,518,220,517,220,517,219,516,219,516,220,516,219,515,219,515,217,514,217,514,218,513,218,514,217,514,216,513,216,513,214,513,213,512,213,511,213,512,213,511,214,510,214,509,214,508,214,508,215,507,214,506,214,506,215,505,214,505,213,505,212,505,211,505,210,504,210,504,211,504,210,503,210,503,209,504,209,503,208,504,208,503,208,503,207,503,206,504,206,504,205,504,204,505,204,506,204,507,205,507,204,509,204,510,204,511,204,511,203,512,204,511,204,517,204,522,204,523,204,523,202,523,201,522,196,522,191,521,186,520,181,520,176</Points>\n    <Keys>Mali, MLI, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>582,142,583,142,582,142</Points>\n    <Keys>Malta, MLT, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>583,143,582,143,583,143,582,143,583,143</Points>\n    <Keys>Malta, MLT, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>357,207,356,207,357,207,356,207,356,206,357,206,357,207</Points>\n    <Keys>Martinique, MTQ, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>513,172,513,169,519,172,524,175,525,175,520,176,520,181,521,186,522,191,522,196,523,201,523,202,523,204,522,204,517,204,511,204,512,204,511,203,511,204,510,204,509,204,507,204,507,205,506,204,505,204,504,204,504,205,504,206,503,206,502,206,502,205,501,205,501,204,500,204,499,202,498,202,497,201,496,201,495,201,495,200,494,201,494,200,494,201,493,201,492,201,491,201,490,202,490,200,491,199,491,198,491,197,491,195,491,194,491,193,490,193,490,192,491,192,490,192,491,191,491,190,490,188,490,189,489,188,489,187,488,187,489,188,488,188,489,186,494,186,499,186,501,186,500,183,500,182,501,181,502,181,503,180,503,173,513,173,513,172</Points>\n    <Keys>Mauritania, MRT, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>712,312,711,312,712,312,712,311,713,311,713,312,712,312</Points>\n    <Keys>Mauritius, MUS, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>200,163,199,163,199,162,199,163,200,163</Points>\n    <Keys>Mexico, MEX, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>279,190,278,190,278,189,279,189,279,190</Points>\n    <Keys>Mexico, MEX, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>194,166,193,166,194,166,194,165,194,166</Points>\n    <Keys>Mexico, MEX, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>202,164,202,163,203,163,203,164,202,164</Points>\n    <Keys>Mexico, MEX, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>188,153,194,152,195,152,195,153,201,155,206,157,215,157,215,155,220,155,221,156,222,157,223,158,224,158,225,159,225,160,225,161,226,162,228,163,229,163,230,164,230,163,231,163,231,162,231,161,232,161,233,161,234,161,235,161,235,162,236,162,237,163,238,164,238,165,239,165,239,166,240,167,240,168,241,168,241,169,241,170,242,170,242,171,243,171,244,172,245,172,246,172,247,172,247,173,248,173,248,174,247,175,247,177,246,179,246,181,246,182,246,183,246,182,246,183,246,185,247,185,247,186,248,186,247,187,247,186,247,185,246,184,247,186,248,188,248,189,249,190,250,191,251,192,251,193,252,193,252,194,253,194,253,195,253,194,252,194,253,194,254,194,254,195,255,195,256,196,258,196,259,195,260,195,261,195,263,194,264,194,264,195,263,195,264,195,265,195,266,195,266,194,265,194,267,193,267,192,267,191,268,191,268,190,268,189,268,188,268,187,269,187,271,187,273,186,274,186,275,186,276,186,277,186,278,186,277,186,278,186,279,186,279,187,279,188,278,189,277,190,277,191,276,191,276,192,277,192,276,193,277,193,277,194,276,194,276,195,276,196,276,195,275,195,275,194,275,195,274,195,274,196,273,196,273,197,272,196,272,197,271,197,270,197,269,197,268,197,267,197,267,198,267,199,266,199,265,199,266,199,266,200,267,200,268,201,268,202,267,202,266,202,265,202,264,202,264,203,263,204,263,205,263,206,263,207,262,206,261,205,260,204,259,203,258,202,257,202,256,202,257,202,258,202,257,202,256,202,255,202,256,202,256,201,255,202,255,201,254,202,255,202,254,202,253,203,252,203,251,203,250,204,248,203,246,203,246,202,245,202,244,202,243,201,241,200,240,200,238,199,236,199,236,198,235,198,234,197,233,197,231,196,230,196,229,196,229,195,228,195,228,194,227,193,226,193,225,193,224,192,224,191,223,191,223,190,222,189,223,189,224,189,224,188,223,188,224,187,224,186,223,186,223,184,222,183,222,182,221,182,220,181,220,180,219,179,218,178,216,177,217,177,216,177,215,176,216,176,215,176,215,175,215,176,215,175,215,176,215,175,214,175,214,174,213,174,214,174,213,174,212,174,213,174,213,173,212,174,212,173,212,174,211,174,211,173,212,174,212,173,211,173,211,172,212,172,212,171,212,172,212,171,212,172,212,171,211,170,210,170,210,169,209,169,208,169,208,168,208,167,207,167,206,167,205,166,205,165,204,165,204,164,203,163,202,163,202,162,202,161,201,161,201,160,201,159,200,158,200,157,200,158,200,157,199,156,198,156,197,156,196,155,195,155,194,155,195,155,195,156,195,157,195,158,195,159,196,159,196,160,196,161,197,161,198,162,199,163,199,164,200,164,200,165,201,165,201,166,201,167,202,168,203,169,204,169,203,169,204,170,204,171,204,170,205,170,205,171,205,172,206,172,205,173,206,174,207,175,207,176,207,177,208,178,209,178,208,178,209,178,209,177,209,178,210,178,210,179,210,180,211,180,211,181,210,182,209,182,209,181,208,180,208,179,207,178,206,178,205,177,204,177,204,176,203,176,203,175,203,176,203,175,203,174,203,173,203,172,202,172,201,172,200,171,200,170,199,170,198,170,198,169,198,170,197,169,196,169,196,168,195,168,195,167,194,167,195,167,196,167,197,167,198,167,197,167,197,166,197,165,197,164,196,164,195,163,195,162,194,162,193,162,192,161,192,160,192,159,191,159,191,158,191,157,190,156,189,156,190,156,189,155,190,155,189,155,189,154,188,154,188,153</Points>\n    <Keys>Mexico, MEX, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>619,106,620,106,620,105,620,106,620,105,621,105,622,105,623,105,623,106,624,106,625,106,624,106,625,106,626,106,626,107,627,107,627,108,628,108,628,109,628,108,628,109,628,110,629,110,629,111,630,111,629,111,628,111,629,111,628,111,627,111,626,111,626,112,627,112,626,112,626,113,625,113,625,114,624,114,624,113,624,112,624,111,624,110,623,109,622,108,621,108,621,107,621,106,620,106,619,106</Points>\n    <Keys>Moldova, MDA, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>562,119,562,119</Points>\n    <Keys>Monaco, MCO, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>836,94,837,94,838,95,839,95,840,95,842,95,844,96,846,96,846,97,846,98,847,98,846,99,847,99,849,100,850,100,851,100,852,100,853,100,854,99,855,99,857,99,858,99,858,100,859,99,860,100,861,100,863,101,865,102,868,103,870,103,871,103,872,103,874,102,876,102,877,102,878,102,879,102,879,101,880,100,882,100,883,100,884,100,885,100,886,101,887,101,888,100,889,101,890,101,888,104,887,105,887,106,886,106,886,107,887,107,888,107,889,107,890,107,891,107,892,108,892,107,893,107,893,106,895,107,896,107,897,108,898,108,897,108,898,109,899,109,899,110,899,111,898,111,897,110,896,110,895,110,894,110,893,111,892,111,891,111,890,111,889,112,888,113,887,114,884,114,883,114,883,115,882,116,881,116,880,116,879,116,877,116,877,115,875,115,874,116,874,117,874,118,875,119,874,120,872,121,871,122,870,122,870,123,869,123,868,123,867,123,866,123,865,123,862,123,861,123,861,124,860,124,858,124,856,125,855,125,855,126,854,126,853,126,853,125,852,125,851,125,850,125,848,124,847,124,846,124,845,123,842,122,840,122,840,123,838,123,835,123,831,122,829,122,827,121,827,120,826,119,826,118,825,118,824,117,823,117,822,117,822,116,820,116,819,115,817,115,816,115,815,115,814,115,813,115,812,115,812,114,812,113,813,112,812,112,813,111,813,110,812,110,811,109,811,108,811,107,810,107,809,107,808,106,807,107,806,106,805,106,805,105,803,105,804,105,804,104,803,104,803,103,804,103,804,102,805,102,806,102,807,102,808,102,809,101,808,101,809,101,810,101,810,100,812,100,812,99,813,99,814,99,815,98,816,98,817,98,818,98,818,99,819,99,820,99,821,99,822,99,823,100,824,100,825,101,826,101,827,100,827,101,828,100,828,101,829,101,830,101,831,101,832,101,833,101,834,100,834,99,833,98,834,98,833,98,833,97,834,96,834,95,835,95,836,95,836,94</Points>\n    <Keys>Mongolia, MNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>533,145,534,146,534,147,535,148,534,149,535,150,535,151,535,152,536,153,536,154,535,154,533,154,531,154,531,155,529,155,528,155,528,156,528,157,529,157,529,158,527,158,526,159,525,159,524,160,523,161,521,161,520,161,520,162,518,162,517,162,515,163,514,164,513,164,513,167,510,168,500,168,500,167,501,167,503,166,505,166,505,165,506,164,508,164,509,163,509,162,510,161,511,160,511,159,510,159,510,158,510,156,510,155,511,154,512,154,512,153,513,152,514,151,515,150,517,150,517,149,518,149,519,149,519,148,520,146,521,145,522,143,523,143,524,144,525,145,526,145,528,145,529,145,530,145,531,144,531,145,532,145,533,145</Points>\n    <Keys>Morocco, MAR, NorthAfrica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>644,285,646,285,647,285,648,285,648,286,649,286,650,286,650,285,651,285,651,286,652,286,653,285,653,284,654,284,655,285,656,284,657,284,658,283,659,283,660,283,660,282,661,282,661,283,661,284,661,285,661,286,661,287,661,288,661,289,661,290,661,289,661,290,661,291,661,292,661,293,662,293,662,294,661,294,662,294,662,295,661,295,662,295,661,295,662,296,661,296,662,296,661,297,661,298,660,299,659,299,659,300,657,301,656,302,655,302,654,302,653,303,652,303,651,304,650,305,650,304,650,305,649,306,649,307,648,307,647,308,646,309,645,309,644,310,643,309,644,310,644,311,643,311,644,311,644,312,643,312,644,312,643,312,644,312,644,313,645,313,645,314,645,315,646,317,645,318,646,318,646,317,646,318,646,319,646,320,646,321,646,322,646,323,645,324,643,325,641,326,640,326,639,326,639,327,638,327,638,328,637,328,637,329,638,329,638,331,636,331,636,330,636,329,635,328,636,327,635,327,636,326,636,324,635,323,635,322,635,321,634,321,634,320,633,318,634,318,637,314,637,315,637,314,637,313,637,312,638,311,639,311,639,310,638,310,638,309,638,310,638,309,638,308,638,307,638,306,639,306,638,305,639,305,638,305,638,304,639,304,639,303,638,303,639,303,638,302,638,301,638,300,637,300,636,300,635,300,635,299,634,299,633,299,632,299,631,299,631,297,631,296,630,296,630,295,632,295,634,294,636,294,639,293,640,294,641,294,642,294,643,294,643,295,643,296,643,297,643,298,642,298,643,299,643,300,644,300,644,301,645,301,645,302,645,301,645,300,645,299,646,299,647,299,647,297,647,296,647,295,647,294,645,292,644,291,643,291,643,289,643,288,643,287,643,286,643,285,644,285</Points>\n    <Keys>Mozambique, MOZ, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>835,216,835,215,835,216</Points>\n    <Keys>Myanmar (Burma), MMR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>821,194,820,194,821,194</Points>\n    <Keys>Myanmar (Burma), MMR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>834,214,834,213,834,212,835,213,834,214</Points>\n    <Keys>Myanmar (Burma), MMR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>821,193,821,192,820,192,821,192,821,193</Points>\n    <Keys>Myanmar (Burma), MMR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>823,203,823,202,824,202,823,202,823,203</Points>\n    <Keys>Myanmar (Burma), MMR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>821,193,821,194,820,192,821,193,821,192,821,191,820,191,821,191,820,191,820,190,819,190,819,191,818,190,819,190,818,190,819,189,819,190,818,190,818,189,818,190,817,189,817,188,816,187,816,186,817,186,817,187,818,187,817,186,817,185,818,184,818,185,818,184,818,185,819,184,819,183,819,182,819,181,820,181,820,180,820,179,819,179,820,178,820,179,820,178,822,179,822,178,823,177,823,176,824,175,823,175,823,174,824,174,825,173,825,172,825,171,825,170,825,171,826,170,827,170,827,169,828,169,829,169,829,168,830,168,830,169,831,169,830,168,831,167,832,167,832,166,831,166,832,166,832,165,833,165,834,166,834,167,834,168,835,168,835,167,835,168,836,168,836,169,836,170,836,171,835,172,836,172,835,172,835,173,836,173,835,173,835,174,834,174,834,175,833,175,833,176,832,176,832,177,833,177,832,177,832,178,833,178,832,179,834,178,835,178,836,178,836,179,836,180,836,181,837,181,838,181,838,182,837,182,838,183,837,183,837,184,838,184,839,184,839,185,840,185,840,186,841,186,842,186,842,185,843,185,843,186,842,187,841,187,841,188,840,189,839,189,839,190,838,190,838,189,838,190,837,190,837,191,836,191,835,191,834,191,834,192,833,192,833,193,833,194,833,195,832,195,832,196,833,197,833,198,834,198,835,199,835,200,835,201,836,202,836,201,836,202,835,202,835,203,835,204,835,205,835,204,835,205,834,205,834,206,835,207,836,208,837,209,837,210,837,211,837,212,838,213,838,214,838,215,838,216,837,218,836,218,836,219,835,221,835,220,835,219,835,218,836,218,836,217,835,217,836,217,836,216,836,215,835,215,836,215,835,215,836,215,836,214,835,214,836,214,835,214,836,214,836,213,835,213,836,213,835,213,836,212,835,212,835,211,835,210,834,209,834,208,834,209,834,210,834,209,834,208,833,206,833,207,834,207,833,206,833,205,833,204,833,203,832,202,832,201,833,201,832,201,831,200,831,199,830,198,830,199,830,200,829,201,828,201,828,200,828,201,829,201,828,201,828,202,828,201,828,202,827,202,827,203,826,203,825,203,826,202,825,203,825,202,825,203,824,203,824,202,824,203,823,203,824,202,823,203,824,202,824,201,823,202,822,203,822,202,822,201,823,201,823,200,823,199,823,198,823,197,823,196,822,196,823,196,822,195,822,194,822,193,822,192,822,193,821,193</Points>\n    <Keys>Myanmar (Burma), MMR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>583,320,583,319,583,318,582,317,581,316,581,315,580,314,579,312,579,311,579,310,578,309,577,308,577,307,576,306,575,305,575,304,575,302,576,302,577,302,578,302,580,301,580,302,581,303,582,303,586,303,591,303,595,303,596,304,598,304,599,304,600,304,601,304,602,305,602,304,603,304,604,305,608,304,610,303,612,303,614,303,615,303,615,304,614,304,613,305,613,304,611,305,610,306,610,305,609,304,604,305,602,305,602,308,602,312,602,316,599,317,599,321,600,325,600,329,599,333,599,336,598,336,598,337,597,337,596,337,595,337,594,337,593,337,592,337,592,336,591,336,592,336,592,335,591,335,590,335,590,336,589,336,588,336,587,335,587,334,586,334,585,332,585,331,585,330,585,331,585,330,584,330,584,329,584,328,584,327,584,326,584,325,583,324,583,323,583,321,583,320</Points>\n    <Keys>Namibia, NAM, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>782,160,783,160,784,160,784,159,784,160,784,159,786,159,786,160,787,161,788,161,789,162,790,162,790,163,791,163,792,163,792,164,794,165,795,165,795,166,796,166,797,165,797,166,797,167,798,167,798,166,799,167,799,166,800,166,800,167,801,167,802,167,803,167,804,167,804,168,804,169,803,169,804,170,804,171,803,171,802,171,801,171,800,171,798,171,797,171,797,170,796,170,795,170,794,170,794,169,793,169,794,169,793,168,792,168,791,168,790,168,789,168,788,168,788,167,787,167,786,167,785,167,784,166,783,166,783,165,782,165,781,164,781,165,780,164,780,163,780,162,781,162,781,161,782,160</Points>\n    <Keys>Nepal, NPL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>552,96,552,97,551,97,550,97,550,96,551,96,552,96</Points>\n    <Keys>Netherlands, NLD, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>557,97,556,97,555,97,555,96,554,96,553,96,552,96,551,96,550,96,551,96,552,96,551,96,552,96,551,96,551,95,552,95,553,94,553,93,554,92,555,92,556,91,557,91,557,90,558,90,560,90,561,91,561,92,561,93,560,93,561,93,561,94,560,94,560,95,559,95,558,95,557,95,558,95,558,96,558,97,557,97,557,98,558,98,557,98,558,98,557,98,557,97</Points>\n    <Keys>Netherlands, NLD, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1044,315,1043,315,1044,315</Points>\n    <Keys>New Caledonia, NCL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1042,314,1041,314,1041,313,1042,313,1042,314</Points>\n    <Keys>New Caledonia, NCL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1040,318,1040,317,1040,318,1039,317,1038,317,1038,316,1037,316,1036,316,1036,315,1035,315,1034,314,1034,315,1034,314,1033,313,1032,312,1032,311,1031,311,1032,311,1031,311,1032,311,1033,311,1034,312,1035,313,1036,313,1036,314,1037,314,1037,315,1038,315,1039,316,1040,316,1040,317,1041,317,1040,318</Points>\n    <Keys>New Caledonia, NCL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>10,383,10,382,9,382,10,382,11,382,10,382,11,383,10,383</Points>\n    <Keys>New Zealand, NZL, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1038,403,1037,403,1038,403,1037,403,1038,403,1038,402,1038,403</Points>\n    <Keys>New Zealand, NZL, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1064,365,1064,364,1064,363,1064,362,1064,363,1063,362,1064,362,1064,361,1063,361,1063,362,1063,361,1062,360,1063,360,1062,360,1062,359,1063,359,1062,359,1063,359,1062,359,1061,358,1062,359,1062,360,1062,359,1060,358,1060,357,1060,356,1060,357,1059,357,1059,356,1059,357,1059,356,1059,355,1058,354,1059,354,1058,354,1059,354,1059,355,1059,356,1060,355,1060,356,1060,355,1061,356,1062,356,1062,357,1062,356,1063,356,1063,357,1063,358,1063,359,1064,359,1064,360,1064,361,1063,361,1064,361,1063,361,1064,361,1065,361,1065,362,1066,362,1066,361,1066,360,1066,361,1067,361,1067,362,1067,363,1068,363,1067,363,1068,364,1068,363,1068,364,1068,363,1068,364,1071,364,1071,365,1071,364,1072,364,1073,364,1074,363,1073,363,1074,363,1075,363,1075,364,1075,365,1074,365,1075,366,1074,367,1073,367,1073,368,1072,368,1071,368,1070,369,1070,370,1070,369,1071,369,1071,370,1070,371,1069,372,1068,373,1067,374,1066,375,1065,375,1064,375,1064,374,1064,375,1063,374,1064,374,1064,373,1065,373,1065,371,1066,371,1065,371,1064,370,1063,370,1063,369,1062,369,1061,369,1061,368,1062,367,1063,367,1064,365</Points>\n    <Keys>New Zealand, NZL, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1042,392,1043,392,1043,391,1044,391,1043,391,1044,391,1044,392,1043,392,1042,392,1043,392,1042,392</Points>\n    <Keys>New Zealand, NZL, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1048,382,1048,381,1049,381,1050,380,1050,381,1050,380,1051,380,1050,380,1051,380,1052,379,1052,380,1052,379,1053,379,1052,379,1053,379,1052,379,1053,379,1052,379,1053,378,1054,378,1053,378,1053,377,1054,377,1054,376,1055,376,1055,375,1056,375,1056,374,1056,373,1057,373,1057,372,1058,372,1057,372,1058,373,1059,373,1059,374,1060,374,1061,374,1061,373,1062,373,1061,373,1061,374,1062,374,1061,374,1062,374,1061,374,1062,373,1062,374,1062,373,1062,374,1061,374,1062,374,1062,375,1062,376,1062,375,1062,376,1061,377,1061,378,1060,378,1060,379,1059,379,1059,380,1058,380,1057,380,1056,380,1057,380,1058,380,1058,381,1057,381,1056,381,1055,380,1056,381,1057,381,1058,381,1058,382,1058,381,1058,382,1059,381,1059,382,1058,382,1057,382,1056,382,1054,381,1054,380,1053,380,1054,380,1053,380,1052,380,1054,380,1054,381,1056,382,1055,383,1055,382,1055,383,1054,383,1053,383,1052,383,1053,383,1054,383,1053,384,1053,385,1052,385,1051,385,1053,385,1052,386,1052,387,1051,388,1052,388,1051,388,1052,388,1051,388,1050,389,1049,390,1048,390,1047,390,1047,391,1046,390,1045,390,1044,390,1045,390,1044,390,1043,390,1043,389,1042,389,1040,389,1040,388,1040,389,1039,389,1040,388,1039,389,1039,388,1040,388,1041,388,1040,388,1040,387,1041,387,1040,387,1040,386,1041,387,1041,386,1041,387,1041,386,1040,386,1041,386,1041,385,1041,386,1041,385,1042,385,1043,385,1042,385,1043,384,1043,385,1043,384,1044,383,1045,383,1045,382,1046,383,1047,382,1048,381,1048,382</Points>\n    <Keys>New Zealand, NZL, Australia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>282,209,283,208,284,208,284,207,284,206,285,206,286,207,287,206,287,207,287,206,288,206,289,206,289,205,289,206,289,205,290,206,289,206,290,206,290,207,290,208,289,208,289,209,289,210,289,211,289,212,289,213,289,212,289,213,288,213,289,213,289,214,288,215,288,214,288,215,288,216,288,217,288,218,289,218,288,218,287,218,286,218,285,217,285,218,284,217,283,217,282,217,281,216,280,215,279,214,278,213,277,212,276,212,277,212,277,211,277,212,278,212,278,211,279,211,279,210,279,209,280,209,281,209,281,208,282,209</Points>\n    <Keys>Nicaragua, NIC, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>575,180,580,181,582,183,585,181,585,185,585,186,586,188,587,189,587,191,586,195,586,198,586,200,583,203,581,205,581,206,580,207,581,207,580,207,580,209,579,209,579,210,578,210,578,211,577,211,576,211,575,211,574,210,573,210,572,210,570,211,569,211,568,212,566,212,565,212,565,211,564,211,563,210,562,211,561,211,561,212,560,212,560,211,560,210,559,210,558,209,558,210,556,209,555,209,554,209,553,209,552,210,552,212,551,212,550,213,551,215,550,215,551,215,550,215,549,215,549,214,548,213,548,214,547,214,547,215,546,213,546,212,545,212,545,213,544,213,543,211,542,211,542,210,543,210,543,211,543,210,542,210,542,209,541,209,541,208,540,207,540,206,540,205,541,206,541,205,542,206,543,205,549,204,550,204,551,204,551,203,552,203,551,202,552,202,552,201,552,200,552,195,552,193,557,192,562,188,566,185,571,183,575,180</Points>\n    <Keys>Niger, NER, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>580,209,581,210,581,211,582,211,582,213,583,213,583,214,584,214,583,214,583,215,583,216,582,217,581,217,580,218,580,220,579,220,579,221,579,222,578,222,578,223,578,224,578,225,577,225,576,225,576,227,576,228,575,228,575,229,574,230,574,231,573,231,573,230,572,230,571,229,571,230,570,230,570,229,569,230,569,231,568,231,568,232,567,232,567,233,566,233,566,234,566,235,565,236,564,236,565,237,564,237,563,237,562,237,562,236,562,237,561,237,561,236,561,237,560,236,560,237,561,237,560,237,560,236,560,237,560,238,559,238,559,237,559,238,558,238,558,237,558,238,558,237,558,238,557,238,557,237,556,237,556,236,556,235,556,234,555,234,556,234,555,234,556,233,555,234,555,233,554,232,553,232,553,231,552,231,550,231,551,231,550,231,548,231,548,230,548,229,548,228,548,227,548,226,548,225,548,223,549,223,549,222,550,221,549,221,550,221,551,220,550,220,550,219,551,219,551,218,551,217,550,216,550,215,551,215,550,215,551,215,550,213,551,212,552,212,552,210,553,209,554,209,555,209,556,209,558,210,558,209,559,210,560,210,560,211,560,212,561,212,561,211,562,211,563,210,564,211,565,211,565,212,566,212,568,212,569,211,570,211,572,210,573,210,574,210,575,211,576,211,577,211,578,211,578,210,579,210,579,209,580,209</Points>\n    <Keys>Nigeria, NGA, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>974,211,973,210,974,210,974,211</Points>\n    <Keys>Northern Mariana Islands, MNP, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>586,44,586,43,587,43,588,43,587,43,586,44,586,43,586,44</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>599,40,598,40,599,40,600,40,599,40</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>608,40,607,40,607,39,608,39,609,40,608,40</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>564,60,564,59,566,59,564,60</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>591,43,590,43,591,43,590,43,591,43,590,43,591,43,591,42,590,42,591,42,592,42,591,42,592,42,591,42,592,42,591,42,592,42,593,42,592,42,593,42,594,42,593,42,594,42,593,43,594,43,593,43,592,43,591,43</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>580,46,582,46,581,46,580,46</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>597,41,596,41,596,40,597,40,598,41,598,40,598,41,598,40,599,41,598,41,597,41</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>601,40,602,40,601,40</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>616,38,616,37,615,37,616,37,617,37,616,37,617,37,618,37,617,37,618,38,618,37,617,38,616,38</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>606,39,605,39,606,39,607,39,607,38,607,39,608,39,608,38,608,39,609,38,610,38,609,38,610,38,609,38,609,39,608,39,609,39,608,39,607,39,606,39</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>609,40,609,39,608,39,609,39,610,39,609,40</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>564,60,565,60,566,60,565,60,566,60,567,60,566,60,564,60</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>611,39,610,39,611,39,610,38,611,38,612,38,612,39,611,39</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>564,61,563,60,564,60,564,61</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>576,55,576,54,577,54,576,55</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>582,46,583,46,583,45,584,45,585,45,584,46,583,46,584,46,583,46,582,46</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>584,46,585,46,585,45,586,45,585,45,586,45,586,44,587,44,586,44,587,44,587,45,588,45,588,44,589,44,589,45,588,45,587,45,586,46,586,45,586,46,586,45,584,46</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>556,69,555,69,557,68,557,69,556,69</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>594,42,593,42,594,42,595,42,594,42,594,41,595,41,596,41,595,41,596,41,597,41,596,41,596,42,594,42</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>585,45,584,45,585,44,584,44,585,44,584,44,583,45,583,44,584,44,585,44,585,43,585,44,586,44,585,44,586,44,585,45</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>624,40,624,39,625,39,625,38,626,38,627,38,628,38,627,38,628,38,629,38,629,39,629,38,630,38,630,39,631,39,630,39,631,39,632,39,633,39,633,40,631,40,630,40,629,40,626,40,625,40,626,40,625,40,626,40,629,41,628,41,629,41,628,41,628,42,628,41,630,41,629,41,630,41,631,41,631,42,631,41,632,41,632,42,631,42,630,41,630,42,627,43,626,43,627,42,627,41,625,41,624,41,624,40</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>572,59,573,59,572,59,570,60,569,60,569,59,570,59,568,60,568,59,569,59,568,59,570,59,569,59,570,59,569,59,569,58,570,58,571,58,570,58,571,58,571,57,572,57,573,57,574,57,573,57,573,58,574,57,575,57,574,57,574,56,575,56,574,56,576,56,575,56,574,56,573,56,574,56,573,56,574,56,575,56,573,56,574,56,575,56,575,55,576,55,576,56,576,55,577,55,578,55,577,55,578,55,577,55,576,55,577,55,577,54,577,55,578,55,577,54,578,54,577,54,577,53,577,54,578,54,577,54,577,53,578,53,577,53,578,53,579,53,578,53,579,52,578,52,579,52,580,52,581,52,580,52,581,52,582,52,582,51,581,52,580,52,579,52,580,52,579,51,579,52,579,51,578,51,579,51,580,51,581,51,580,51,579,51,580,51,579,51,580,51,579,50,580,50,581,50,580,50,581,50,580,50,581,50,580,50,581,50,582,50,582,49,582,50,582,49,583,49,582,49,583,49,584,49,583,49,584,49,585,49,584,49,585,49,586,49,585,49,584,49,583,49,584,49,583,49,582,49,583,48,584,48,585,48,584,48,585,48,584,48,585,48,584,48,585,48,586,48,586,49,587,49,586,48,587,48,586,48,585,48,586,48,585,48,585,47,586,47,587,47,586,47,585,47,584,48,585,47,584,47,585,47,584,47,585,47,586,47,587,47,587,46,586,46,586,47,585,47,585,46,586,46,587,46,586,46,587,46,588,46,588,47,589,47,588,47,588,46,589,47,588,47,589,46,589,47,589,46,590,46,588,46,589,46,588,46,589,46,588,46,589,46,590,46,589,46,588,46,589,45,590,45,590,46,591,45,591,46,592,46,591,46,591,45,592,45,593,45,592,45,591,45,590,45,589,45,590,44,591,45,591,44,592,45,593,45,592,44,591,44,592,44,593,44,592,44,593,44,592,44,593,43,592,43,594,43,593,43,594,43,594,42,595,42,595,43,595,42,596,43,595,42,596,42,597,42,598,42,598,43,597,43,598,43,598,42,597,42,596,42,597,42,596,42,597,41,598,41,599,41,599,42,598,42,599,42,600,42,599,42,599,41,600,41,601,41,600,42,601,42,600,42,599,42,599,43,600,43,600,42,601,42,602,42,601,42,601,41,602,41,603,41,602,41,603,41,602,41,603,41,603,40,604,40,606,41,605,41,606,41,605,41,606,41,606,40,605,40,606,40,605,40,604,40,603,40,604,40,605,40,606,40,605,40,606,40,607,40,606,40,607,40,608,40,607,40,609,40,608,40,609,40,609,41,610,40,609,40,610,40,609,40,610,40,609,40,610,40,610,39,611,39,612,39,613,39,612,39,613,38,613,39,614,39,614,38,612,38,613,38,614,38,613,38,614,38,615,38,614,38,615,38,616,38,617,38,616,38,615,39,615,40,614,40,615,40,616,40,616,39,618,39,618,38,619,38,620,38,619,38,619,39,620,39,621,39,620,39,621,39,621,38,622,38,621,38,622,38,621,38,622,38,621,37,622,37,622,38,622,37,623,37,624,37,625,38,624,38,623,38,624,38,623,38,622,39,623,39,624,38,624,39,623,39,624,39,625,39,624,39,624,40,623,40,622,40,621,41,620,41,619,41,617,41,617,42,617,43,616,44,615,44,615,45,614,45,614,44,612,44,611,44,609,45,609,44,607,44,605,43,603,43,602,43,601,43,600,43,600,44,601,44,600,45,599,45,600,45,599,45,596,45,595,45,594,45,594,46,593,47,591,46,590,47,589,48,588,48,589,49,588,50,586,51,586,52,585,52,583,52,583,53,583,54,583,55,582,55,581,57,582,57,582,58,581,58,579,58,578,58,578,59,576,59,576,60,575,61,576,61,576,62,576,63,576,64,576,65,577,66,578,66,577,67,576,67,576,68,577,69,577,70,576,71,575,71,574,72,575,73,574,74,574,73,573,73,572,73,571,72,572,72,571,71,572,71,571,71,571,72,571,71,570,71,571,72,570,72,571,72,571,73,570,73,570,74,570,73,570,74,569,74,569,73,568,73,569,73,568,74,567,74,568,74,567,74,567,75,566,75,565,76,564,76,563,76,562,76,561,76,561,77,560,76,561,76,560,76,559,76,560,76,559,76,560,76,559,76,558,76,557,75,556,75,556,74,556,73,557,74,558,74,559,73,558,74,557,74,558,74,558,73,557,73,558,73,559,73,558,73,557,73,558,72,559,72,558,72,557,72,558,72,557,72,556,72,557,72,556,73,556,72,556,73,556,72,556,73,556,72,555,72,556,72,556,71,556,72,556,71,557,72,557,71,558,71,557,71,557,70,558,70,559,69,559,70,560,69,561,69,560,69,561,69,560,69,559,69,560,69,559,69,558,69,558,70,557,70,557,71,557,70,556,70,557,70,556,70,557,69,556,69,556,70,555,70,556,70,555,70,555,69,556,69,557,69,556,68,557,68,556,68,556,69,555,69,554,68,555,68,556,69,556,68,555,68,556,68,555,68,554,68,555,68,555,67,556,67,557,67,559,67,560,67,560,68,561,68,560,67,561,67,562,67,563,67,562,67,561,67,562,66,561,66,561,67,562,67,561,67,560,67,561,67,560,67,559,67,560,66,559,66,559,67,558,67,557,67,556,67,555,67,554,67,555,66,555,67,556,67,555,67,555,66,556,66,555,67,554,66,555,66,554,66,555,66,556,66,557,66,556,66,555,66,556,66,555,66,556,66,555,66,554,66,554,65,555,65,556,65,557,65,556,65,557,65,558,65,559,65,560,65,559,65,558,65,557,65,556,65,555,65,556,64,555,64,556,64,557,64,558,64,559,64,558,64,557,64,558,64,558,63,559,64,559,63,560,63,561,64,560,64,561,64,560,64,561,64,560,64,560,63,559,63,558,63,560,63,559,63,558,63,559,63,560,63,561,63,562,63,563,63,562,63,562,62,563,62,564,62,562,62,560,62,561,62,560,62,561,62,561,61,562,62,563,62,564,62,565,62,564,62,563,61,563,62,563,61,564,61,565,62,564,62,565,62,566,62,565,62,564,62,565,61,564,61,565,61,566,61,565,61,566,60,565,60,566,60,567,60,567,61,567,60,568,60,567,60,568,60,569,60,569,61,570,61,570,60,571,60,572,60,571,60,572,59,573,59,574,59,573,59,574,59,574,58,573,58,574,58,573,58,571,59,572,59</Points>\n    <Keys>Norway, NOR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>715,190,715,189,716,189,716,188,716,189,716,190,715,190</Points>\n    <Keys>Oman, OMN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>707,184,707,179,708,178,708,175,709,176,709,177,710,178,711,179,713,179,714,179,715,180,716,180,717,181,717,182,718,183,719,183,719,184,718,185,718,186,717,186,716,187,716,188,715,189,714,189,713,189,713,190,713,191,713,192,713,193,713,194,711,194,710,194,709,195,709,196,709,197,708,197,706,197,705,198,705,199,704,200,703,199,702,199,701,200,700,200,699,200,699,201,698,199,698,198,697,198,695,195,695,194,708,187,708,184,707,184</Points>\n    <Keys>Oman, OMN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>763,139,764,139,764,140,765,139,766,140,767,140,767,141,768,141,768,142,767,142,768,142,768,143,769,143,770,144,772,144,773,144,772,145,771,145,771,146,770,146,770,147,770,146,769,146,768,146,768,147,767,147,766,147,765,147,764,146,763,146,762,146,761,147,761,148,762,148,761,148,762,148,762,149,761,149,762,150,762,151,763,151,763,152,762,152,763,152,764,152,763,153,764,153,765,153,766,154,765,154,764,154,764,155,763,155,763,156,763,157,764,157,763,157,762,158,761,159,761,160,760,160,760,161,759,162,758,163,757,164,756,164,756,165,755,166,755,167,754,167,753,167,752,167,751,167,751,166,750,167,750,168,748,169,748,170,749,171,750,171,750,172,750,173,751,173,752,174,752,175,753,176,752,177,753,177,752,177,752,178,751,178,751,177,750,178,749,178,748,178,747,178,746,178,746,179,745,179,744,179,743,179,742,179,742,178,741,177,741,176,740,176,739,176,740,176,740,175,739,174,738,174,739,174,738,174,736,174,735,175,734,175,733,175,734,175,733,175,732,175,732,174,731,174,732,174,731,174,730,174,730,175,729,175,728,175,727,175,726,175,725,175,724,175,725,173,725,172,726,172,726,171,727,171,728,171,729,171,729,170,729,169,730,169,729,169,728,169,728,168,728,167,728,166,727,166,727,165,726,165,724,164,724,163,724,162,722,161,725,162,727,162,728,162,730,162,732,162,734,162,735,162,736,162,738,161,739,161,738,160,739,159,738,159,739,158,740,157,741,157,743,156,742,156,743,156,744,155,745,155,746,155,746,156,747,156,748,155,747,154,747,153,748,153,748,152,748,151,749,151,750,151,750,150,750,149,749,149,749,148,751,149,752,149,752,148,753,148,753,147,752,147,753,147,753,146,754,146,754,145,754,144,754,143,753,143,753,142,754,141,755,141,756,141,756,140,757,140,759,140,761,140,762,140,763,140,763,139,763,140,763,139</Points>\n    <Keys>Pakistan, PAK, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>295,229,294,228,295,228,295,229</Points>\n    <Keys>Panama, PAN, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>291,222,292,222,292,223,293,223,293,224,294,224,294,223,295,224,296,224,297,224,298,223,299,223,300,222,300,223,300,222,301,222,302,222,303,222,302,222,303,222,304,222,305,223,306,223,306,224,307,224,307,225,307,224,307,225,307,226,308,226,308,227,307,227,308,227,307,228,307,227,306,227,306,228,306,229,305,229,305,228,305,227,304,227,304,226,305,226,305,225,306,226,305,226,305,225,304,225,304,224,303,224,302,224,302,223,302,224,301,223,301,224,300,224,300,225,299,226,298,226,299,227,300,228,299,228,298,228,298,229,297,229,297,228,296,228,296,227,296,228,295,227,294,226,293,226,292,226,292,225,292,226,291,226,290,225,291,225,291,224,291,223,291,222</Points>\n    <Keys>Panama, PAN, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>991,279,990,279,990,278,991,278,991,279</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>992,280,992,279,991,279,992,279,992,280</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>993,281,992,281,992,280,992,281,992,280,993,280,993,281,993,280,993,281</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>979,257,980,256,981,257,982,257,982,256,982,257,981,257,980,257,979,257</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>991,259,990,259,990,258,989,258,990,258,991,258,991,259</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>990,269,989,269,988,269,987,269,986,269,986,268,985,268,984,268,985,267,986,267,987,267,989,267,990,266,990,267,991,267,992,267,993,266,993,265,994,265,995,265,994,265,994,264,994,263,995,263,995,264,996,263,995,263,996,263,997,264,997,265,996,265,995,265,995,266,996,266,996,267,995,267,994,267,994,268,993,268,993,269,992,269,991,269,990,269</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1000,285,999,285,999,284,1000,285,1001,285,1000,285</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>981,267,981,266,981,267</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>983,268,983,267,984,267,984,268,983,268</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>998,265,997,264,998,263,997,263,997,262,996,261,995,261,995,260,994,260,993,259,992,259,992,258,993,259,994,259,995,260,996,260,996,261,997,261,997,262,997,261,997,262,998,262,998,263,999,263,999,264,998,265</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>998,278,997,278,997,277,998,277,999,278,998,278</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>963,269,963,268,963,266,963,264,963,262,963,260,963,258,964,259,965,259,966,260,967,260,969,261,970,261,971,261,971,262,972,262,973,262,973,263,974,263,975,264,976,264,977,265,977,266,977,267,978,267,979,267,980,268,981,268,982,268,983,269,983,270,983,271,981,271,980,271,981,272,981,273,982,273,982,274,983,274,983,275,984,275,984,276,985,277,985,278,986,278,987,278,987,277,987,278,987,279,988,279,990,279,990,280,989,280,989,281,990,281,991,281,992,281,991,282,991,281,991,282,992,282,991,282,991,283,991,282,990,283,990,282,989,282,990,282,989,282,988,281,987,281,986,281,985,281,984,281,983,281,982,280,981,279,980,278,979,278,979,277,979,276,978,276,978,275,977,275,977,274,976,274,975,274,974,274,974,273,974,274,974,273,973,273,973,274,973,273,973,274,972,273,973,274,972,274,972,273,972,274,971,273,970,273,971,273,971,274,971,275,970,274,970,275,969,275,968,276,968,275,967,275,967,276,967,275,966,275,967,275,967,276,967,275,968,275,968,276,969,276,969,277,970,277,969,278,968,278,967,278,965,278,964,278,963,278,963,277,963,275,963,273,963,271,962,271,962,270,963,269</Points>\n    <Keys>Papua New Guinea, PNG, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>354,309,358,309,360,308,362,309,365,310,365,311,365,312,366,312,366,313,366,314,366,315,366,316,366,317,367,317,368,317,369,317,370,317,371,317,372,317,372,318,373,319,373,320,373,321,373,322,374,323,375,322,376,322,377,323,377,324,376,325,376,326,376,327,376,328,376,329,375,330,375,331,374,331,373,331,373,332,373,333,372,333,371,332,371,333,370,333,369,333,368,333,367,333,366,332,365,332,364,332,364,331,365,331,364,331,365,331,365,330,365,329,366,328,367,327,367,326,366,326,365,325,364,325,363,325,362,324,361,324,361,323,359,323,358,322,356,322,356,321,355,320,354,319,353,319,353,318,352,317,353,314,353,312,354,311,354,309</Points>\n    <Keys>Paraguay, PRY, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>331,297,332,299,333,299,333,300,332,300,332,301,331,301,331,302,331,303,330,303,330,304,330,305,329,305,328,306,327,305,327,304,326,304,325,304,325,303,325,302,324,302,323,302,323,301,322,301,321,300,320,300,319,299,318,299,317,298,316,298,315,297,314,297,314,296,313,296,313,295,312,294,311,293,311,292,310,292,311,292,311,291,310,290,310,289,309,288,309,287,308,287,308,286,308,285,307,284,306,283,306,282,305,281,305,280,304,279,304,278,304,277,303,277,303,276,303,275,302,275,302,274,301,274,301,272,300,272,300,271,299,270,298,270,296,269,296,268,297,268,297,267,296,266,296,265,295,265,296,264,296,263,297,262,298,261,299,261,299,262,299,263,298,262,298,263,298,264,299,263,300,264,301,264,301,265,302,266,303,265,303,264,304,264,303,264,304,263,304,262,304,261,305,261,306,260,307,259,310,258,311,257,313,255,313,253,314,253,314,252,313,252,313,251,314,251,315,251,315,252,316,252,317,253,317,254,318,254,319,255,319,256,320,256,320,257,320,258,321,258,322,258,323,258,324,258,324,257,325,257,325,258,325,257,325,258,326,258,326,257,327,257,328,258,329,258,328,258,329,258,329,259,329,258,329,259,327,262,328,262,329,262,330,263,329,264,329,263,328,263,327,263,327,264,326,264,325,264,324,264,323,265,322,265,322,266,321,266,321,267,320,269,320,270,319,270,318,271,318,272,318,273,317,273,318,274,319,275,319,276,320,276,320,277,321,277,321,278,320,279,322,279,323,279,323,280,323,281,325,281,326,280,327,280,327,279,328,279,328,280,328,282,328,284,328,283,328,284,329,284,329,283,330,283,331,283,332,285,333,287,333,288,333,289,333,291,332,291,332,292,333,292,333,293,332,294,333,294,332,294,332,295,331,295,332,296,332,297,331,297</Points>\n    <Keys>Peru, PER, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>899,235,900,234,900,235,899,235</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>909,223,908,223,908,222,907,221,908,220,908,219,908,218,909,218,910,218,910,219,909,220,909,221,909,222,909,223</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>909,222,910,220,910,219,911,219,911,218,911,217,912,217,911,217,912,217,912,219,911,220,910,220,910,222,909,222</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>916,221,916,220,916,219,917,219,916,220,917,221,916,221</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>911,222,911,221,912,221,912,220,913,220,913,221,913,222,912,222,911,222</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>907,219,907,218,908,218,908,219,907,219</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>906,227,907,226,908,226,909,225,910,225,910,224,910,225,911,225,911,226,910,226,910,227,911,226,912,226,912,225,913,225,914,225,914,224,914,223,914,224,915,224,915,223,915,224,916,223,916,222,916,221,916,222,917,222,917,223,918,223,918,224,918,225,919,225,919,226,918,226,919,226,919,227,919,228,919,229,919,230,918,230,919,230,918,230,918,231,918,232,918,231,918,230,917,230,917,229,917,228,916,229,916,230,916,231,916,232,917,232,916,233,916,234,915,234,915,233,915,232,915,233,914,233,913,233,912,232,912,231,912,230,911,230,912,229,912,228,911,227,910,227,910,228,909,228,909,227,909,228,908,228,908,227,907,227,907,228,906,229,906,228,906,229,906,230,905,230,905,229,906,229,906,228,906,227</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>917,217,916,217,915,217,914,217,914,216,915,215,914,215,914,214,913,214,912,213,913,213,914,213,915,213,915,214,916,214,916,215,916,216,916,217,917,217</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>915,220,914,220,914,219,914,218,913,217,913,218,913,217,913,216,912,216,913,216,913,217,914,216,914,217,915,217,915,218,915,219,915,220,915,219,914,219,915,220</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>912,215,911,215,910,214,909,215,909,214,909,213,910,213,911,214,912,215</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>897,217,898,217,898,216,898,217,898,218,898,219,899,219,898,219,897,220,896,221,895,223,894,223,893,224,892,224,892,225,891,226,891,225,892,224,892,223,893,223,894,223,894,222,895,221,896,220,897,219,896,219,897,219,898,218,897,218,898,218,897,218,897,217,898,217,897,217</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>905,231,905,230,906,230,906,231,905,231</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>903,233,902,233,902,232,903,232,903,233,904,232,904,233,903,233</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>906,214,905,214,906,214,905,214,905,213,906,213,905,213,906,212,906,213,906,214</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>900,215,900,214,900,215,900,214,900,215,899,214,899,213,899,214,900,214,901,214,900,214,901,214,900,215</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>906,211,905,211,905,210,906,210,906,211</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>907,214,907,213,908,213,907,214</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>905,207,905,206,905,205,906,206,905,206,906,206,905,207</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>913,216,913,215,913,216</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>912,210,912,209,912,208,912,209,913,209,913,210,912,210</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>900,210,901,210,902,210,903,210,903,211,904,211,904,212,904,213,904,214,903,214,903,213,903,214,902,213,902,212,902,211,901,211,901,210,900,210</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>905,219,905,218,906,217,906,216,906,215,905,215,906,215,907,215,907,216,908,216,909,216,909,217,908,217,908,218,907,218,906,219,905,219</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>900,202,901,202,900,201,901,200,901,199,901,198,901,197,901,196,901,195,902,195,903,195,904,195,904,196,905,196,904,195,905,196,906,195,906,196,906,197,906,198,907,198,907,199,907,200,907,201,906,202,905,202,904,203,904,204,904,205,904,206,905,206,904,207,905,208,906,209,906,208,907,208,908,208,908,207,908,208,909,208,909,209,909,208,910,208,910,209,911,209,910,209,910,210,911,210,911,211,912,211,912,212,912,213,911,213,911,212,912,212,911,212,910,212,910,211,909,211,909,210,908,210,908,209,907,209,907,210,908,211,907,211,907,210,906,210,906,209,905,209,904,209,904,210,903,210,903,209,902,209,901,209,902,209,901,209,901,208,902,208,902,207,902,206,901,206,901,207,900,206,900,205,899,204,899,203,899,202,899,201,899,202,900,202</Points>\n    <Keys>Philippines, PHL, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>598,87,599,87,601,87,604,88,606,87,608,87,609,87,609,88,610,88,610,89,610,90,611,91,611,92,610,93,609,94,610,94,610,95,610,96,611,96,610,97,611,97,611,98,612,98,611,98,612,99,611,99,610,100,609,100,608,101,608,102,607,102,608,103,607,103,606,103,605,103,604,102,603,102,602,103,602,102,601,102,600,103,599,103,599,102,598,102,597,102,596,102,596,101,595,101,594,101,594,100,593,101,593,100,592,100,593,100,592,100,591,99,590,99,591,100,590,100,589,100,588,99,589,99,588,98,588,99,587,98,586,98,585,98,585,97,584,97,585,98,584,98,584,97,585,97,584,96,583,95,584,95,584,94,583,94,583,93,582,92,583,91,583,90,582,89,583,89,583,90,583,89,582,89,583,89,584,88,586,88,587,88,588,88,588,87,589,87,590,87,591,86,592,86,593,86,595,86,596,87,596,86,595,86,595,87,596,87,597,87,598,87</Points>\n    <Keys>Poland, POL, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>463,137,462,137,463,137,464,137,463,137</Points>\n    <Keys>Portugal, PRT, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>455,135,454,135,455,135</Points>\n    <Keys>Portugal, PRT, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>458,135,457,134,458,134,458,135</Points>\n    <Keys>Portugal, PRT, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>489,153,488,152,489,152,489,153</Points>\n    <Keys>Portugal, PRT, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>513,125,514,124,515,124,515,125,516,125,517,125,518,125,519,125,520,125,520,126,520,125,521,126,520,127,519,127,519,128,519,129,519,130,518,130,519,130,518,131,517,132,517,131,517,132,518,132,518,133,519,133,518,134,518,135,518,136,519,136,518,136,518,137,517,138,517,139,516,139,515,139,514,139,513,140,513,139,513,138,513,137,513,136,513,135,512,135,512,134,512,135,513,134,512,134,513,134,512,134,511,134,511,133,511,132,512,132,513,130,513,129,513,128,514,128,513,127,513,126,513,125</Points>\n    <Keys>Portugal, PRT, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>339,197,338,197,338,196,338,195,340,195,341,195,342,195,343,195,343,196,342,196,342,197,341,197,340,197,339,197</Points>\n    <Keys>Puerto Rico, PRI, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>693,177,692,177,692,176,692,174,692,173,693,172,694,172,694,173,694,174,694,175,694,176,694,177,693,177,694,177,693,177</Points>\n    <Keys>Qatar, QAT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>706,315,706,314,705,314,705,313,706,313,707,313,707,314,707,315,706,315</Points>\n    <Keys>Reunion, REU, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>618,106,619,106,620,106,621,106,621,107,621,108,622,108,623,109,624,110,624,111,624,112,624,113,624,114,625,115,626,115,627,115,627,114,628,114,629,115,628,115,629,115,628,115,628,116,627,116,626,116,627,116,627,115,626,116,626,117,626,116,626,117,625,118,626,118,625,118,625,119,624,119,623,119,623,118,623,119,622,118,621,118,620,118,619,118,618,119,617,119,616,120,615,119,613,119,611,119,610,119,609,119,608,119,608,118,609,118,608,118,607,117,608,117,607,116,606,117,605,117,604,116,604,115,603,115,602,114,602,113,601,113,600,112,601,112,602,112,603,112,603,111,604,111,604,110,605,109,604,109,605,109,605,108,606,108,606,107,607,107,608,107,608,106,609,107,609,106,610,107,610,106,610,107,611,107,612,107,613,107,614,107,615,107,616,107,618,107,618,106</Points>\n    <Keys>Romania, ROM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>699,38,699,37,697,37,696,37,696,36,697,36,698,36,699,37,698,37,698,36,698,37,699,37,699,38</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>717,5,713,5,714,5,713,5,715,5,717,5,718,5,717,5,718,5,717,5</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>812,7,809,7,810,7,812,7,814,7,813,7,812,7</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1079,36,1080,36,1080,37,1079,38,1078,38,1077,38,1076,38,1075,37,1076,37,1078,36,1079,36</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>0,36,3,36,5,36,6,37,7,37,6,37,0,38,0,36</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>952,36,951,36,952,36,951,36,950,36,951,36,953,36,952,36</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1009,99,1008,98,1009,98,1009,99</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>770,34,770,33,771,33,772,33,773,33,774,33,775,33,773,34,770,34</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1006,101,1006,100,1005,100,1006,99,1007,99,1007,98,1008,98,1008,99,1007,100,1006,100,1006,101</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>926,34,925,34,924,34,923,33,922,33,920,33,919,33,920,33,921,33,923,33,926,33,927,33,928,33,927,34,928,34,927,34,928,34,926,34</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>925,33,924,33,926,32,926,33,925,33</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>921,33,923,32,924,32,928,32,927,33,925,32,924,32,921,33</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1004,103,1003,103,1003,102,1004,102,1004,103</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1030,75,1031,74,1031,73,1032,73,1033,73,1034,73,1033,74,1034,74,1033,74,1030,75</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>927,32,924,32,925,32,927,32</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>714,6,712,6,710,6,711,6,710,6,713,6,715,6,714,6</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>778,32,776,32,775,32,776,32,777,31,778,31,778,32</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>709,9,708,9,707,9,706,9,707,8,706,8,709,8,710,8,710,9,709,9</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>764,32,763,32,762,31,763,31,764,31,763,32,764,32</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>900,31,899,31,898,31,899,31,900,31</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>0,44,1,44,2,44,3,44,3,45,5,45,6,46,5,46,6,46,6,45,7,46,6,46,7,46,8,46,10,46,14,47,13,48,14,48,13,48,14,48,15,48,15,49,15,50,15,51,16,51,16,52,17,51,18,51,17,51,18,51,17,52,18,52,18,51,17,51,18,50,17,50,17,49,16,49,17,49,19,49,20,49,19,50,20,50,19,50,20,50,21,50,22,50,20,49,22,49,22,50,24,50,25,50,26,51,27,51,28,51,28,52,29,52,28,52,29,52,30,52,30,53,29,52,28,53,28,54,27,54,25,53,26,54,25,54,24,54,23,54,22,54,22,53,21,53,21,54,22,54,23,54,22,54,23,54,23,55,21,55,22,55,23,55,22,56,21,56,20,56,21,56,20,56,20,57,21,56,21,57,20,57,21,57,22,57,23,57,22,57,21,57,20,57,21,57,21,58,20,58,19,58,19,57,20,57,19,57,18,57,17,57,14,56,13,56,12,55,11,54,9,54,8,54,7,54,4,54,4,53,3,53,3,52,3,53,4,52,4,51,3,52,2,52,1,52,0,52,0,53,1,53,2,54,1,54,1,55,0,55,0,44</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>995,110,996,109,995,110</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>714,10,712,10,711,10,711,9,710,9,713,9,716,9,717,9,716,10,715,10,714,10,715,10,714,10,713,10,714,10</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>976,120,976,119,977,118,978,117,979,117,977,118,977,119,976,119,976,120</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>785,25,784,25,784,24,785,24,786,24,786,25,786,24,786,25,785,25</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>750,31,749,31,750,31,749,30,750,30,751,30,752,30,753,30,753,31,752,31,753,31,754,31,754,30,754,31,755,31,752,31,751,31,750,31</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>988,114,988,113,989,113,991,112,990,112,990,113,988,114</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>700,10,696,10,698,10,698,9,699,9,700,10,701,10,700,10</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>919,33,918,33,919,33,919,32,918,32,919,32,920,31,919,31,919,30,920,30,921,30,922,30,923,30,924,30,923,30,925,30,924,31,925,31,926,31,927,31,926,32,925,32,924,32,922,32,921,33,919,33</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>694,35,694,34,695,34,696,34,697,34,698,34,698,33,697,33,698,33,697,33,698,33,699,33,698,33,698,32,699,33,698,32,697,32,698,32,700,32,699,32,699,31,700,31,699,31,700,31,701,31,702,31,703,31,703,30,704,30,709,31,708,31,707,31,708,31,709,31,706,32,707,32,708,32,706,32,707,32,707,33,706,32,707,33,706,33,707,33,706,33,705,33,706,33,705,33,706,33,706,34,706,35,705,35,706,35,707,36,708,36,708,37,711,38,712,38,712,39,710,38,710,39,711,39,710,39,709,38,709,39,710,39,709,38,708,38,708,39,709,39,708,38,709,38,709,39,708,39,707,38,707,39,708,39,707,39,707,38,706,38,707,39,706,38,706,39,705,38,705,39,704,38,703,38,704,39,703,38,702,38,701,38,700,38,699,38,700,38,701,38,700,37,701,37,702,37,701,37,702,37,701,37,700,37,701,36,700,36,700,37,699,36,700,36,699,36,698,36,697,36,696,36,695,36,694,36,694,35</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>766,30,765,30,766,30,768,30,767,30,766,30</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>980,117,981,117,981,116,982,116,982,115,983,115,983,114,984,115,986,114,986,115,985,115,984,115,983,115,983,116,982,116,981,116,981,117,980,117</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>989,26,986,26,984,26,983,26,981,26,980,25,979,25,978,25,978,24,979,24,980,24,979,24,981,24,982,24,985,24,985,25,987,25,990,25,991,25,992,25,991,26,992,26,991,26,989,26</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>918,34,917,33,915,33,914,33,914,32,913,32,912,32,908,32,907,32,907,31,908,31,908,32,909,32,910,32,909,31,910,31,909,30,910,30,909,30,910,30,909,30,910,30,909,30,910,30,910,29,910,30,911,30,911,29,912,29,913,29,914,29,914,30,915,30,915,29,915,30,916,30,917,30,918,30,919,30,918,30,919,30,919,31,920,31,919,32,918,32,919,32,918,32,918,33,919,33,918,34</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>789,23,786,23,787,23,789,23</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>829,22,825,22,826,22,827,22,828,22,829,22,828,22,829,22</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>969,31,965,31,964,30,962,30,961,30,960,30,959,30,958,30,959,30,960,30,961,30,962,30,962,29,963,29,964,29,966,29,967,29,970,30,970,31,969,31</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>790,28,788,28,789,28,790,28</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>862,16,859,16,862,16,863,16,862,16</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>708,10,707,10,708,10,707,10,708,9,709,10,710,9,711,9,711,10,708,10</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>796,27,795,27,796,27</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>948,29,947,28,946,28,947,28,948,29</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>985,21,986,20,988,20,987,20,987,21,985,21</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>827,20,827,19,825,20,825,19,826,19,828,19,829,19,827,20</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>800,26,799,26,798,26,799,26,801,26,800,26</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>957,27,954,26,953,26,951,25,950,25,950,24,951,24,951,25,952,24,951,24,950,24,951,24,951,23,953,23,952,23,953,22,954,22,955,22,956,22,957,22,959,23,960,23,961,23,961,24,962,24,963,24,962,23,962,22,963,22,964,23,964,22,963,22,964,22,965,22,967,23,969,23,970,23,971,23,975,24,976,24,975,24,974,24,974,25,973,25,971,25,970,25,969,25,967,24,969,24,969,23,968,23,966,23,967,23,967,24,966,24,967,25,970,25,971,26,970,26,967,26,968,26,967,26,965,26,966,26,967,26,966,25,965,26,960,26,959,26,958,26,957,27</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>950,86,951,85,951,86,950,86</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>777,8,776,8,777,8,781,8,780,8,779,8,777,8</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>713,8,711,8,710,8,710,7,708,7,710,7,712,7,713,8,714,8,713,8</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>682,10,683,10,684,10,683,10,682,10,680,10,679,10,681,9,681,10,684,10,684,9,683,9,682,9,684,9,682,9,684,9,685,9,687,9,688,9,687,9,688,9,688,8,689,8,687,8,686,8,687,8,690,8,691,8,690,8,692,8,693,8,690,8,693,8,695,8,692,9,689,9,688,9,686,9,685,10,686,10,687,10,686,10,687,10,686,10,685,10,684,10,682,10</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>965,91,965,90,966,90,967,90,968,90,967,90,967,89,968,90,968,89,967,89,968,89,966,88,967,88,968,87,969,88,968,88,968,89,969,90,968,90,969,90,970,92,969,92,969,93,969,94,969,95,969,96,970,96,969,96,970,96,970,97,970,98,971,99,971,100,972,101,972,102,973,103,974,104,974,105,973,104,973,103,972,103,970,102,969,102,970,103,969,103,968,103,968,104,967,106,967,107,968,108,969,109,969,110,970,110,969,110,970,110,970,111,970,112,969,111,970,111,969,111,968,111,968,110,967,110,967,111,966,112,966,113,965,112,965,111,966,109,965,108,966,107,966,106,965,105,965,104,966,104,966,102,966,101,966,100,966,99,966,98,966,97,966,96,965,96,965,95,964,95,965,94,964,94,964,93,965,93,965,92,965,91</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>718,11,716,10,718,10,719,10,719,11,718,11</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>808,19,807,19,808,19,809,19,808,19,809,19,808,19</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>817,12,816,12,815,11,816,11,817,11,816,11,814,11,813,11,813,10,819,10,821,11,820,11,817,12</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>877,21,876,21,877,21,878,21,877,21</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>961,29,960,28,961,28,962,28,963,28,962,29,961,29</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>598,87,599,87,599,86,600,86,600,87,600,86,601,86,600,87,599,87,598,87</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>861,19,862,19,861,19,862,18,863,19,861,19</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>833,14,830,14,829,14,828,13,827,14,826,13,825,13,824,13,823,13,822,13,823,13,822,12,823,12,822,12,821,12,820,12,819,12,822,11,823,11,822,11,823,11,822,11,823,11,824,10,825,10,826,10,829,10,830,10,831,10,833,10,834,10,833,11,832,11,831,11,832,11,833,11,834,11,835,11,835,10,838,10,840,11,839,11,839,12,838,13,837,13,839,13,839,14,838,14,833,14</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>838,17,837,16,838,16,840,15,839,15,840,15,841,14,843,14,842,14,843,13,844,14,842,13,843,13,844,13,844,12,845,12,845,13,846,13,846,12,847,12,849,13,848,13,847,14,848,13,849,13,850,13,851,13,852,13,851,13,853,14,854,14,855,14,856,15,854,16,848,16,847,16,848,16,847,16,843,16,842,16,839,17,838,17</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>878,28,876,28,875,28,874,28,874,27,875,27,876,27,879,27,880,27,879,28,878,28</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>796,26,795,26,796,26,797,26,796,26</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>858,16,857,16,859,16,859,15,860,16,859,16,858,16</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>947,24,946,24,946,23,947,23,948,24,947,24,948,24,947,24</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>797,27,796,27,797,27,798,27,797,27</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>769,12,770,12,769,12,768,12,769,12,772,12,769,12</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>710,26,709,26,708,26,707,26,709,26,709,25,707,26,707,25,708,25,709,25,710,25,710,24,711,24,712,25,713,25,712,24,714,24,713,24,714,23,716,23,717,23,721,23,721,22,720,22,721,22,722,22,721,22,723,22,722,22,723,22,722,22,723,22,724,22,727,22,728,22,729,22,731,21,732,22,732,21,734,21,735,21,736,21,737,21,737,20,738,20,739,20,742,19,745,20,746,20,747,20,746,21,745,21,744,22,743,22,741,22,737,23,731,24,730,23,730,24,729,24,726,24,725,24,724,25,723,25,722,25,721,25,720,26,721,26,722,26,721,26,720,26,721,26,720,26,719,26,718,26,719,26,719,27,718,27,717,26,717,27,716,27,714,27,715,27,715,28,716,28,715,28,714,28,715,28,714,28,714,29,713,28,712,28,711,28,712,28,713,29,712,29,710,29,712,29,712,30,711,30,710,30,710,29,710,30,711,30,710,31,710,30,710,31,708,31,708,30,707,30,707,31,706,30,704,30,702,31,702,30,703,30,702,30,703,30,705,29,704,29,703,29,703,30,702,30,700,29,701,29,702,29,703,29,704,29,703,28,705,28,707,28,705,28,706,28,707,28,705,27,706,27,708,27,707,27,706,27,707,27,706,27,707,26,707,27,708,26,709,26,710,26</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>686,44,685,44,684,44,684,43,685,42,686,42,687,42,690,43,690,44,690,43,689,43,689,44,688,44,686,44</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>723,9,720,9,719,9,718,9,717,9,718,9,717,9,718,8,720,8,719,8,723,8,724,8,726,8,726,9,725,9,724,9,723,9</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>711,8,710,8,706,8,704,8,704,7,703,8,703,7,704,7,706,7,708,7,709,8,710,8,712,8,713,8,711,8</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1047,42,1046,42,1044,41,1043,41,1044,40,1048,41,1047,41,1047,42</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>729,8,727,8,729,8,731,8,732,7,733,7,734,7,735,7,736,7,735,8,736,8,733,8,729,8</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>722,8,720,8,720,7,721,7,723,7,725,7,724,7,723,8,722,8</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>704,8,702,8,701,8,702,8,704,8,705,8,707,8,706,8,704,8</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>719,41,718,41,716,41,717,41,716,41,715,40,716,40,715,40,716,39,717,39,718,40,719,40,720,40,720,41,721,41,719,41</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>678,9,676,9,674,9,680,8,681,8,682,8,684,8,685,8,686,9,685,9,683,8,682,8,681,9,682,9,681,9,679,9,680,9,679,9,678,9</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>709,7,708,7,707,7,706,7,708,7,709,7,709,6,711,6,713,7,711,7,709,7</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>953,87,952,87,952,86,951,86,952,85,953,85,953,86,953,85,954,85,954,86,953,86,953,87</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>730,6,728,6,726,5,728,5,729,5,730,5,731,5,731,6,730,6</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>647,56,647,55,646,55,647,55,647,56</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>821,11,819,10,816,10,818,10,816,10,819,10,814,10,815,9,816,9,815,9,818,9,819,8,817,8,818,8,819,8,819,7,824,7,825,7,826,7,825,7,826,7,829,7,830,7,829,8,830,8,833,8,833,9,831,9,831,8,831,9,832,10,831,10,827,10,825,10,823,10,821,11</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>630,42,630,41,631,42,632,42,632,41,634,41,633,42,634,41,635,41,636,41,635,41,636,41,637,41,638,41,639,41,639,42,638,42,636,42,636,41,636,42,635,42,636,42,637,42,636,42,637,42,638,42,639,42,638,42,638,43,638,42,639,42,640,42,639,43,640,43,639,43,640,43,639,43,639,44,639,43,640,43,643,43,645,43,647,43,649,43,653,45,654,45,655,45,656,46,655,46,655,45,657,46,658,46,659,46,660,47,661,47,660,47,661,47,662,47,663,47,663,48,662,48,663,48,663,49,664,49,663,50,662,51,661,51,657,52,655,52,653,52,652,52,646,51,644,51,643,51,642,50,641,50,640,50,639,50,638,49,637,49,636,49,635,49,636,49,637,49,637,50,638,50,639,51,640,51,639,51,638,51,639,51,640,51,641,51,640,51,640,52,639,52,640,52,641,52,642,52,643,52,644,53,644,54,643,54,644,54,643,54,643,55,644,55,643,55,644,55,644,56,645,56,644,56,644,57,645,57,645,58,646,58,646,57,647,58,648,58,651,59,652,59,653,59,654,58,653,58,654,58,653,57,652,57,651,57,650,56,649,56,650,56,650,55,651,55,653,55,653,56,654,56,655,56,654,56,654,57,654,56,655,56,656,56,658,57,659,57,659,56,661,57,661,56,660,56,660,55,659,54,661,53,662,53,663,53,664,52,666,51,667,51,668,51,667,51,669,51,670,51,670,52,671,52,669,52,670,52,670,53,670,52,671,52,672,52,672,53,672,52,672,51,673,51,673,50,672,49,673,49,672,49,671,49,671,48,672,48,672,47,672,48,672,47,672,46,673,46,672,46,672,45,669,45,669,44,670,44,671,45,672,45,673,45,675,45,677,45,678,45,677,45,678,46,679,46,679,47,680,47,676,47,675,47,676,47,676,48,675,48,674,48,676,49,677,50,678,50,679,50,681,50,682,50,683,50,683,49,683,48,684,48,685,47,685,48,686,47,687,48,687,47,686,47,685,47,686,47,687,47,689,47,691,46,692,45,693,45,694,45,696,45,697,45,696,45,696,46,697,45,698,45,697,45,696,45,699,44,701,44,703,43,703,44,700,44,701,44,702,44,701,44,701,45,700,45,701,45,701,46,700,45,699,46,700,46,701,46,702,46,703,46,704,46,704,45,705,45,707,45,709,45,710,45,711,45,712,45,712,44,713,44,714,44,715,44,714,44,715,44,717,44,716,44,717,44,718,44,717,44,717,45,719,45,719,44,720,44,721,44,722,44,722,43,721,43,721,42,720,42,720,41,721,42,722,41,721,41,722,41,724,41,729,41,732,42,734,43,735,43,737,43,741,44,742,44,743,45,744,45,744,46,745,46,745,45,746,45,747,44,746,44,747,44,746,44,745,44,744,43,744,42,743,42,742,42,740,41,740,42,740,41,740,40,741,40,740,41,741,41,741,40,741,39,742,38,741,38,740,38,739,38,740,37,739,37,740,37,741,37,743,36,744,35,745,35,746,34,746,33,746,32,747,32,748,32,749,32,748,32,754,32,755,32,756,32,758,32,758,33,758,34,757,34,757,35,756,35,757,35,756,35,756,36,755,36,756,37,757,37,758,37,757,37,758,38,758,39,757,39,757,40,757,41,758,41,757,41,757,42,757,43,757,44,758,44,760,45,759,46,759,47,758,47,758,48,757,48,757,49,756,49,755,49,756,49,755,50,754,50,753,50,754,50,754,51,754,50,753,51,752,51,750,51,752,50,751,50,750,50,749,50,748,50,747,50,746,50,747,50,747,51,748,51,749,51,751,52,752,51,754,51,756,52,757,52,757,51,756,51,757,51,758,51,759,50,760,50,761,50,761,49,762,48,764,47,764,46,763,46,763,45,763,44,764,44,767,44,769,44,770,44,769,44,770,44,771,45,771,46,772,46,771,46,771,47,773,48,777,48,776,48,775,48,775,47,775,48,774,47,774,48,773,47,772,47,772,46,773,46,774,46,773,45,773,44,772,44,770,43,766,43,765,43,762,43,761,43,761,42,760,41,761,40,762,39,762,38,761,38,761,37,760,37,759,36,760,36,760,35,761,35,763,35,764,34,765,34,765,33,764,32,765,32,766,32,767,33,766,33,767,34,766,34,766,35,765,35,766,35,766,36,765,36,766,37,768,37,770,37,771,37,773,37,773,38,775,38,777,38,777,37,776,38,776,37,776,38,775,38,775,37,774,37,773,37,774,36,773,36,773,37,772,37,771,36,770,36,768,36,768,35,769,34,770,34,771,35,772,35,773,35,774,35,774,34,773,34,772,34,773,34,775,33,778,33,779,34,782,34,781,34,783,35,784,35,785,35,788,35,789,35,789,36,788,36,789,36,786,37,787,37,786,37,786,38,787,38,786,38,786,39,786,40,787,40,786,40,786,39,787,39,787,38,788,38,789,38,789,39,788,39,789,39,787,40,788,40,789,40,788,40,790,40,791,39,790,38,790,37,789,37,790,36,790,35,789,35,787,35,786,34,783,33,782,33,781,32,782,32,782,31,781,31,780,31,781,31,780,31,780,30,781,30,782,30,781,30,782,30,784,30,790,30,794,29,795,29,796,29,800,29,801,29,797,30,797,31,798,31,799,31,800,32,800,31,799,31,797,31,797,30,798,30,801,30,802,29,801,29,802,29,801,29,800,28,801,28,802,28,801,28,800,28,799,28,798,28,797,28,797,27,798,27,798,28,798,27,799,27,800,27,800,28,800,27,801,28,801,27,800,27,799,27,800,27,798,27,797,27,798,26,799,26,798,26,799,26,799,27,800,27,800,26,801,26,802,26,801,26,802,26,803,25,800,25,801,25,803,25,804,25,805,25,806,24,807,24,806,24,807,24,808,24,809,24,808,24,810,24,809,24,812,24,813,24,814,24,814,23,821,23,822,23,820,23,819,23,818,23,819,23,818,23,818,22,819,22,820,22,821,22,823,22,824,22,823,22,824,22,826,22,828,22,827,22,828,22,827,22,828,23,826,23,827,23,829,23,828,23,829,22,829,23,830,23,831,23,832,22,831,22,831,23,832,23,833,23,833,22,832,22,833,22,834,22,833,22,834,22,835,22,836,22,837,22,838,22,839,22,839,23,838,23,837,23,837,24,839,24,839,25,840,25,839,24,837,24,837,23,838,23,837,23,838,23,839,23,839,22,838,22,837,21,836,21,838,21,840,21,842,21,845,21,846,21,842,21,843,21,843,20,842,20,843,20,843,19,846,18,847,18,848,18,849,18,850,18,852,17,853,17,852,17,853,18,853,17,854,17,854,18,857,18,858,18,857,18,856,19,852,19,856,19,857,19,856,19,856,20,857,20,858,19,859,19,860,19,859,19,860,19,861,19,861,20,862,20,861,20,862,20,861,20,860,20,860,21,859,21,860,21,862,21,863,21,864,21,863,21,863,20,864,20,867,20,869,20,871,20,872,20,873,20,874,20,874,21,875,21,876,21,875,21,876,21,878,22,877,22,878,22,877,22,878,22,877,22,879,22,878,22,879,22,878,22,879,22,880,22,880,23,881,23,881,24,880,24,879,23,877,23,878,23,878,24,879,24,878,24,879,24,880,24,881,24,880,24,881,24,880,25,878,26,876,26,875,27,874,26,872,27,873,27,871,27,870,27,871,27,870,27,868,28,869,28,868,28,867,28,865,29,864,30,861,30,860,30,860,31,858,31,857,31,857,32,856,32,855,32,856,32,857,32,858,32,858,31,859,31,860,31,863,31,864,31,865,31,864,31,865,31,867,30,868,30,867,30,868,30,870,30,871,30,872,29,871,29,870,29,869,29,869,30,868,29,869,29,870,28,873,29,873,28,874,28,873,29,875,29,876,29,877,29,878,29,880,29,880,30,879,30,880,30,880,31,880,32,879,32,880,33,882,33,881,33,879,32,880,32,880,31,881,31,882,30,881,30,880,30,884,30,885,29,889,30,891,30,894,30,896,30,895,30,895,31,898,31,898,32,899,32,901,32,899,32,899,31,903,32,904,32,905,32,906,32,910,32,911,32,913,33,914,33,915,33,918,34,919,33,919,34,920,34,921,35,921,36,921,35,920,34,920,33,921,33,922,33,923,34,925,34,925,35,926,35,927,35,927,34,927,35,928,35,926,35,926,36,927,36,928,37,929,37,928,37,930,37,930,38,931,38,932,38,933,38,934,38,935,37,936,37,935,37,936,36,937,35,938,35,939,36,941,36,942,36,943,36,944,36,943,37,944,37,944,36,945,36,946,36,947,36,949,36,950,36,951,36,952,36,952,37,953,37,952,37,953,37,954,37,953,37,954,37,953,37,955,37,954,36,953,36,954,36,955,36,956,36,957,36,958,36,959,36,960,36,959,36,959,35,958,35,959,34,960,34,958,34,957,34,957,33,958,33,961,33,963,33,962,33,963,32,962,32,961,32,964,32,965,32,969,32,975,33,980,33,977,33,976,33,974,33,973,34,972,34,973,34,974,34,980,34,977,35,978,34,979,34,978,34,977,34,976,34,977,34,976,34,977,34,977,35,975,35,974,35,975,35,974,35,976,36,976,35,977,35,978,35,981,34,983,34,986,34,989,34,990,35,989,35,988,35,987,35,986,35,987,35,986,35,987,35,988,36,989,36,990,36,989,36,990,36,991,36,990,37,991,37,991,36,992,36,991,37,992,37,993,36,994,37,996,37,996,38,995,38,994,38,997,38,1000,38,1001,38,1002,38,1006,37,1006,38,1006,37,1007,37,1010,37,1013,37,1017,38,1019,39,1020,39,1020,40,1019,40,1019,41,1020,41,1020,42,1022,42,1023,42,1022,42,1023,43,1022,43,1023,43,1024,44,1023,44,1023,45,1022,45,1023,45,1024,44,1023,44,1024,44,1024,43,1024,42,1026,42,1026,41,1028,42,1029,41,1030,41,1031,41,1032,41,1033,42,1034,42,1040,42,1042,41,1043,41,1044,41,1043,42,1044,42,1044,43,1045,43,1048,43,1048,44,1051,44,1052,44,1052,43,1053,43,1052,43,1052,42,1051,42,1050,42,1050,41,1051,41,1051,40,1057,41,1058,41,1059,41,1060,41,1059,41,1060,41,1061,41,1062,41,1063,41,1065,41,1066,41,1068,41,1069,41,1070,41,1074,42,1075,42,1076,42,1077,43,1076,43,1075,42,1076,43,1077,43,1079,43,1079,44,1078,43,1079,44,1080,44,1080,45,1080,46,1080,47,1080,48,1080,49,1080,50,1080,51,1080,52,1080,53,1080,54,1080,55,1079,55,1078,56,1077,56,1075,57,1076,57,1076,56,1075,56,1072,56,1071,56,1071,55,1070,55,1069,55,1068,55,1069,56,1070,55,1071,56,1070,56,1069,56,1068,56,1067,56,1065,56,1064,56,1063,56,1064,56,1065,56,1067,56,1068,56,1069,56,1068,57,1069,57,1069,56,1070,57,1071,56,1072,56,1072,57,1073,58,1074,58,1074,57,1075,58,1075,59,1076,59,1076,60,1075,59,1075,60,1076,60,1075,60,1074,60,1075,60,1076,60,1075,60,1076,60,1076,61,1076,60,1076,61,1077,61,1078,61,1077,61,1077,62,1078,62,1078,63,1077,63,1077,64,1076,63,1075,63,1071,63,1071,62,1072,62,1071,62,1070,62,1071,62,1070,62,1070,63,1071,63,1070,63,1069,63,1066,64,1065,64,1064,65,1063,65,1064,65,1063,65,1062,65,1061,66,1061,65,1060,65,1060,66,1059,66,1058,66,1058,67,1057,67,1058,67,1057,67,1056,67,1057,67,1056,67,1056,68,1055,68,1054,68,1054,69,1053,69,1052,69,1051,69,1051,70,1051,71,1050,71,1050,70,1049,70,1049,69,1048,69,1047,69,1048,69,1047,69,1045,69,1044,69,1043,69,1042,69,1041,69,1039,70,1038,71,1038,70,1038,69,1039,69,1038,69,1037,69,1036,70,1035,70,1034,70,1035,70,1035,71,1034,71,1033,70,1032,70,1033,70,1033,71,1032,71,1032,70,1030,70,1031,71,1030,71,1030,72,1029,72,1029,73,1028,73,1029,73,1028,74,1027,74,1026,75,1025,76,1026,77,1027,77,1028,77,1029,77,1029,78,1028,78,1028,79,1028,80,1029,80,1029,81,1030,82,1029,82,1028,82,1027,82,1028,82,1029,81,1028,81,1027,81,1027,82,1026,82,1025,84,1025,85,1026,86,1025,87,1024,87,1023,87,1022,87,1020,88,1019,88,1019,89,1019,90,1019,89,1019,90,1019,91,1020,91,1019,91,1018,91,1017,91,1016,92,1015,91,1015,92,1015,93,1015,94,1014,94,1014,95,1013,95,1012,96,1010,98,1009,98,1010,98,1010,97,1009,97,1009,96,1009,95,1009,94,1008,93,1009,93,1008,93,1008,92,1008,91,1007,89,1007,88,1006,86,1006,85,1006,84,1006,83,1007,82,1007,80,1008,80,1009,80,1009,79,1010,79,1010,78,1010,77,1011,77,1012,77,1012,76,1014,76,1014,77,1015,77,1014,76,1016,75,1017,75,1018,74,1019,74,1019,73,1020,73,1020,72,1021,72,1022,72,1023,71,1024,71,1025,70,1025,69,1026,69,1028,69,1028,68,1029,68,1030,68,1031,68,1030,67,1031,67,1032,66,1031,66,1032,65,1032,64,1033,63,1035,63,1035,64,1035,63,1036,63,1034,63,1033,62,1029,63,1030,63,1029,64,1029,65,1028,65,1029,65,1029,66,1028,66,1028,65,1027,65,1028,66,1027,66,1027,65,1026,66,1025,66,1025,67,1024,67,1023,67,1022,68,1021,68,1020,69,1020,68,1021,68,1021,67,1020,67,1019,68,1019,67,1019,66,1020,66,1020,65,1021,65,1020,65,1019,65,1018,66,1018,65,1017,65,1016,65,1015,65,1014,65,1013,65,1012,65,1011,65,1011,66,1010,66,1009,66,1009,67,1008,67,1007,68,1006,69,1004,69,1003,70,1003,71,1002,71,1003,72,1002,72,1003,72,1004,72,1005,72,1005,73,1004,73,1003,73,1002,73,1003,73,1002,73,1001,73,1000,73,1001,73,1000,73,999,73,998,73,998,74,997,74,997,73,996,73,996,74,995,74,994,74,993,74,993,73,994,73,995,73,996,73,995,73,995,72,994,72,992,72,991,72,992,72,991,72,988,71,987,72,986,72,986,73,985,73,985,72,984,72,983,72,983,73,982,73,981,73,980,72,979,72,978,72,979,73,978,73,977,73,977,72,974,72,971,72,970,72,969,72,967,73,966,73,965,74,964,75,962,75,962,76,961,77,960,77,959,77,959,78,958,79,957,79,956,79,955,80,954,81,953,81,953,82,952,82,952,83,951,83,949,84,948,84,948,85,947,85,946,85,945,86,946,87,947,87,948,87,949,87,950,86,950,87,950,88,949,89,950,89,951,89,951,88,952,88,953,88,952,88,951,88,952,89,953,89,952,89,952,90,951,90,952,90,953,90,954,89,955,89,955,90,954,90,955,90,956,88,955,88,956,88,955,88,956,88,958,88,959,88,960,88,961,89,960,89,961,89,961,90,962,90,963,90,964,91,963,91,963,92,962,91,962,92,963,92,963,93,964,94,963,94,964,95,963,95,962,96,962,97,962,96,962,97,961,97,962,97,962,98,961,98,961,99,961,100,962,100,961,100,961,101,961,102,961,103,960,103,960,104,961,103,961,104,960,104,960,105,959,106,958,106,958,107,957,108,955,109,955,110,955,111,954,111,954,112,953,112,952,113,952,114,951,114,950,115,949,116,948,116,949,116,948,116,948,117,947,117,947,118,946,118,946,119,945,119,945,120,944,120,943,121,941,122,940,122,939,122,938,122,937,122,936,122,936,121,937,121,936,121,937,121,936,121,935,121,936,121,935,121,935,120,935,121,934,121,934,122,933,122,933,123,932,123,932,122,932,123,932,124,931,124,931,123,931,122,932,122,933,122,933,121,933,120,933,118,933,116,932,116,933,116,934,116,934,115,935,115,935,114,935,115,936,115,938,115,939,115,939,114,940,114,940,113,941,112,941,111,942,111,942,110,942,109,942,108,943,108,944,108,944,107,943,107,943,106,944,106,943,106,943,105,942,105,940,106,939,106,938,106,938,107,937,107,936,107,934,108,934,107,933,107,932,107,932,106,931,106,932,106,932,105,931,105,932,104,931,104,930,104,929,103,928,103,928,102,927,102,926,102,925,102,924,102,923,102,923,101,922,101,922,100,921,100,922,99,921,99,922,99,921,98,920,97,920,96,919,95,919,94,918,94,919,94,918,94,919,93,918,93,917,93,918,92,917,92,916,92,917,92,916,91,915,91,914,91,913,91,912,90,911,90,909,90,908,90,906,90,904,91,902,91,901,91,900,92,900,93,901,93,902,93,901,94,902,94,902,95,901,95,900,95,900,96,899,96,899,97,898,98,897,99,898,99,897,100,897,101,896,101,895,101,893,102,891,102,890,101,889,101,888,100,887,101,886,101,885,100,884,100,883,100,882,100,880,100,879,101,879,102,878,102,877,102,876,102,874,102,872,103,871,103,870,103,868,103,865,102,863,101,861,100,860,100,859,99,858,100,858,99,857,99,855,99,854,99,853,100,852,100,851,100,850,100,849,100,847,99,846,99,847,98,846,98,846,97,846,96,844,96,842,95,840,95,839,95,838,95,837,94,836,94,836,95,835,95,834,95,834,96,833,97,833,98,834,98,833,98,834,99,834,100,833,101,832,101,831,101,830,101,829,101,828,101,828,100,827,101,827,100,826,101,825,101,824,100,823,100,822,99,821,99,820,99,819,99,818,99,818,98,817,98,816,98,815,98,814,99,813,99,812,99,812,100,810,100,810,101,809,101,808,101,809,101,808,102,807,102,806,102,805,102,804,102,804,103,803,103,802,103,801,103,800,102,799,102,800,102,800,101,799,101,799,102,798,102,797,102,796,102,795,102,795,101,794,101,795,100,794,100,793,100,792,100,792,99,791,98,790,98,790,97,789,97,789,98,788,98,787,98,786,98,785,98,784,98,783,98,783,97,782,97,781,97,781,98,780,98,779,98,778,96,778,95,776,94,775,93,775,92,774,91,773,91,773,90,772,90,769,89,769,88,770,88,770,87,769,87,769,88,768,87,768,88,767,88,766,88,766,89,765,89,764,89,763,89,763,90,762,90,761,90,760,90,759,90,759,89,760,89,761,89,761,88,760,88,760,89,759,89,759,88,758,88,757,88,758,88,758,89,757,89,757,88,756,88,757,88,756,88,756,87,756,88,755,88,754,88,753,88,752,88,752,87,753,87,753,88,753,87,753,86,752,86,752,85,751,85,750,85,749,85,749,84,748,84,747,85,747,84,746,84,747,84,747,85,746,85,746,84,746,85,745,85,744,85,744,86,743,86,742,86,741,86,740,86,739,86,738,87,737,87,737,86,737,87,736,87,735,87,735,88,735,87,734,87,733,87,732,87,732,88,731,88,732,88,731,88,730,88,729,88,728,88,727,88,727,89,727,88,726,88,726,89,725,89,725,88,725,89,724,88,724,89,724,88,723,88,723,89,722,89,723,89,723,90,722,90,723,90,724,90,723,90,723,91,724,91,725,91,726,91,726,92,725,92,724,92,724,91,724,92,723,92,723,91,723,92,722,92,723,92,722,92,722,93,723,93,722,94,721,94,720,95,720,94,720,95,721,95,721,96,722,96,723,96,724,96,724,97,725,97,724,97,724,98,722,99,720,98,719,98,719,99,718,99,717,99,717,98,716,98,715,98,715,97,714,97,713,97,713,98,712,98,711,97,710,97,710,98,709,98,709,97,709,98,708,98,707,99,706,99,706,98,706,99,705,98,704,98,704,97,703,97,703,98,704,98,703,98,704,98,703,98,704,99,703,99,703,98,702,98,702,97,701,97,700,97,700,96,699,96,698,96,697,96,697,95,696,95,696,96,695,95,695,96,694,96,693,96,694,96,693,96,693,95,692,95,692,96,691,96,691,97,690,97,689,97,688,97,688,98,687,98,686,99,685,99,686,99,686,100,686,101,685,101,684,101,684,100,683,100,683,99,682,99,682,100,681,100,682,100,681,100,682,100,681,100,681,101,680,101,680,102,680,103,681,103,680,103,680,104,679,105,681,106,681,107,682,107,683,107,684,107,684,108,685,108,686,109,687,110,686,110,685,110,685,111,686,111,687,111,687,112,686,112,685,112,686,112,686,113,685,113,684,113,683,113,683,114,683,113,682,113,682,114,682,113,682,114,682,115,681,115,681,116,680,116,681,116,680,116,680,117,681,117,681,118,682,119,682,120,682,119,683,119,682,119,682,120,682,121,683,122,683,123,684,124,685,125,685,126,684,126,683,126,683,127,682,127,681,127,681,126,680,125,679,125,678,125,678,124,678,125,678,124,677,124,676,124,677,123,676,123,675,123,675,122,674,122,674,123,674,122,673,122,672,122,672,123,671,123,671,122,670,122,669,122,669,121,668,121,667,121,666,121,665,121,664,121,664,120,663,120,662,120,661,120,660,120,659,120,658,119,657,118,656,118,655,117,654,117,653,117,653,116,653,117,652,116,651,116,651,115,650,115,649,115,650,115,650,114,650,115,650,114,650,115,650,114,651,115,652,115,652,114,652,115,653,115,653,114,652,114,653,114,652,113,653,113,653,112,654,112,654,113,654,112,655,112,654,112,654,111,653,111,653,110,653,111,654,110,655,111,655,110,656,110,657,109,658,109,657,109,656,109,655,109,656,109,655,109,654,109,654,108,655,108,656,107,657,107,658,107,659,107,659,106,660,106,659,106,659,105,658,105,659,104,660,104,659,104,659,103,660,103,660,102,659,102,658,102,658,101,657,101,656,101,655,101,655,100,654,100,654,101,653,100,652,100,652,99,651,99,650,99,650,100,649,100,648,100,648,99,647,99,646,99,646,98,645,98,646,97,645,97,644,97,643,97,642,97,642,96,642,95,643,95,642,95,642,94,641,94,641,93,640,94,640,93,639,93,639,94,638,94,637,94,637,93,637,94,636,94,635,94,634,94,634,93,634,92,633,91,634,91,635,91,636,91,637,91,638,90,637,90,638,90,637,90,637,89,636,89,635,89,635,88,634,88,633,88,633,87,633,86,632,86,632,85,633,85,632,85,633,85,632,85,632,84,631,84,631,83,630,83,629,83,628,83,627,82,626,83,626,82,625,82,624,82,624,81,624,80,623,80,622,80,623,80,623,79,622,78,622,77,623,77,623,76,622,76,623,76,622,76,622,75,622,74,623,74,623,73,624,73,624,72,623,71,624,71,625,72,625,71,626,71,627,71,626,71,627,70,628,71,629,71,630,71,629,70,628,70,627,70,626,69,625,69,626,69,625,69,626,69,625,69,626,69,625,68,626,68,625,68,625,69,624,69,623,69,625,68,626,67,627,67,629,66,630,65,631,64,633,63,634,62,633,61,632,61,632,60,631,60,630,59,631,58,630,57,629,57,630,57,630,56,629,56,628,56,628,55,629,55,628,55,629,54,630,53,630,54,630,53,629,52,628,51,628,50,627,50,627,49,628,49,629,48,630,47,629,47,628,46,626,46,625,45,626,44,625,44,626,43,627,43,630,42</Points>\n    <Keys>Russia, RUS, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>631,254,631,255,632,255,632,256,632,257,632,258,631,258,631,257,631,258,630,258,629,258,629,257,629,258,629,259,628,259,627,258,627,259,626,258,626,257,627,257,627,256,628,255,629,254,629,255,630,255,630,254,631,254</Points>\n    <Keys>Rwanda, RWA, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>577,119,577,119</Points>\n    <Keys>San Marino, SMR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>559,250,559,249,560,249,560,250,559,250</Points>\n    <Keys>Sao Tome and Principe, STP, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>562,246,561,246,562,246,562,245,562,246</Points>\n    <Keys>Sao Tome and Principe, STP, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>708,174,708,173,708,172,709,172,708,172,709,171,709,172,708,172,709,172,709,173,708,173,708,174</Points>\n    <Keys>Saudi Arabia, SAU, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>657,154,660,154,663,156,667,158,668,158,669,159,670,159,670,160,670,162,672,162,674,163,676,164,677,164,679,163,680,163,682,164,683,165,685,165,685,166,686,166,686,167,686,168,687,168,687,169,687,168,687,169,688,169,689,170,690,170,689,170,690,171,690,172,689,172,689,173,690,173,690,172,690,173,690,174,690,173,691,174,691,175,691,176,692,176,692,178,694,180,696,183,706,184,707,184,708,184,708,187,695,194,682,198,676,205,673,198,672,198,671,199,671,198,670,198,669,198,669,199,669,200,669,201,668,201,668,200,667,200,667,199,666,198,665,197,664,196,664,195,663,195,663,194,663,193,662,193,662,192,662,191,661,191,661,190,660,190,659,189,658,189,658,188,657,187,657,186,657,185,656,185,657,185,657,184,657,183,656,182,657,182,656,182,656,181,655,180,655,179,654,179,653,178,652,178,652,177,651,176,651,175,651,174,650,173,649,173,650,173,650,172,649,172,648,171,648,170,647,169,646,168,646,167,645,167,645,166,644,166,643,166,644,166,644,165,644,164,644,163,644,162,645,163,646,163,647,163,648,163,648,162,649,162,650,161,651,161,652,160,653,159,654,159,653,158,652,158,651,157,651,156,652,156,653,155,654,155,655,155,656,155,657,154</Points>\n    <Keys>Saudi Arabia, SAU, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>490,202,491,201,492,201,493,201,494,201,494,200,494,201,495,200,495,201,496,201,497,201,498,202,499,202,500,204,501,204,501,205,502,205,502,206,503,206,503,207,503,208,504,208,503,208,504,209,503,209,503,210,504,210,504,211,504,210,505,210,505,211,505,212,505,213,504,213,503,213,502,214,502,213,501,213,500,213,498,213,498,212,494,212,493,213,492,213,491,213,490,213,489,213,489,214,489,213,490,213,491,213,492,213,493,213,493,212,493,213,492,213,491,212,491,213,490,213,490,212,490,213,490,212,490,213,489,213,489,212,489,211,492,211,492,210,493,210,494,210,495,210,496,210,496,211,497,211,498,210,496,210,496,209,496,210,495,210,495,209,494,209,493,209,493,210,490,210,490,209,490,210,490,209,489,209,490,209,490,208,489,208,490,208,489,208,489,209,489,208,489,207,488,207,487,206,487,207,487,206,488,206,489,205,489,204,490,203,490,202</Points>\n    <Keys>Senegal, SEN, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>707,264,707,263,707,264</Points>\n    <Keys>Seychelles, SYC, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>706,265,706,264,706,265</Points>\n    <Keys>Seychelles, SYC, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>502,228,501,228,502,228</Points>\n    <Keys>Sierra Leone, SLE, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>501,223,501,222,502,222,502,221,503,221,504,221,506,221,507,222,508,223,507,223,508,223,508,224,508,225,507,226,508,225,508,226,508,225,509,225,509,226,508,226,508,227,507,227,507,228,506,228,506,229,505,229,505,230,504,229,502,228,503,228,502,228,502,227,501,227,501,226,500,226,500,225,501,225,500,225,500,224,500,223,501,223</Points>\n    <Keys>Sierra Leone, SLE, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>851,247,850,247,851,246,851,247</Points>\n    <Keys>Singapore, SGP, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>590,105,590,104,591,104,592,104,593,104,593,103,594,103,595,103,595,102,596,102,597,102,598,102,599,102,599,103,600,103,601,102,602,102,602,103,603,102,604,102,605,103,606,103,607,103,607,104,606,104,606,105,605,105,604,105,603,105,602,105,601,105,601,106,600,106,599,106,598,106,597,106,596,106,596,107,595,107,593,107,592,107,591,106,590,106,590,105</Points>\n    <Keys>Slovakia, SVK, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>588,111,587,110,588,110,589,110,588,110,589,110,589,111,588,111,588,112,587,112,586,112,587,112,587,113,586,113,585,113,586,113,586,114,585,114,586,114,585,114,586,114,585,114,584,114,583,114,583,113,583,114,582,114,581,114,580,114,581,114,581,113,580,113,580,112,580,111,581,111,582,111,583,111,584,111,585,111,586,111,586,110,588,111</Points>\n    <Keys>Slovenia, SVN, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1011,275,1010,275,1010,274,1011,274,1011,275</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1024,279,1023,279,1022,278,1022,277,1021,276,1022,276,1021,276,1021,275,1022,276,1022,275,1022,276,1023,276,1022,277,1023,277,1023,278,1024,279</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1007,271,1006,271,1005,270,1005,269,1004,269,1004,268,1004,267,1005,267,1005,268,1006,268,1006,269,1007,269,1007,270,1007,271</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1010,274,1009,274,1009,273,1010,273,1010,274</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1027,283,1025,283,1024,282,1023,282,1023,281,1024,281,1025,282,1026,282,1026,283,1027,283</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1014,277,1013,277,1013,276,1014,276,1014,277</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1003,267,1003,266,1004,266,1004,267,1003,267</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1021,280,1020,280,1019,280,1018,279,1018,278,1019,278,1019,279,1021,279,1022,280,1021,280</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1013,276,1012,276,1012,275,1011,275,1011,276,1011,275,1012,275,1012,274,1012,275,1013,275,1013,276</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1024,280,1024,279,1024,280</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1021,286,1020,285,1019,285,1020,285,1021,286</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1012,273,1011,273,1011,272,1010,272,1009,271,1009,270,1010,271,1011,271,1011,272,1012,272,1012,273</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1019,276,1018,276,1017,275,1016,274,1015,274,1015,273,1016,273,1016,274,1018,274,1018,275,1019,275,1019,276</Points>\n    <Keys>Solomon Islands, SLB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>701,214,700,213,699,213,700,213,700,212,701,213,702,212,702,213,703,213,702,213,701,214</Points>\n    <Keys>Somalia, SOM, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>668,217,669,216,670,216,670,217,671,218,672,219,673,219,674,219,677,218,678,218,679,218,681,217,682,217,683,217,684,217,685,217,686,217,688,216,690,216,691,215,692,215,693,215,693,217,693,218,693,219,694,219,693,219,692,219,692,220,692,221,692,222,692,223,691,223,691,224,690,225,690,226,689,227,688,229,687,230,687,231,687,232,686,233,685,234,685,235,684,236,683,238,682,239,681,240,680,241,679,242,678,243,677,244,676,244,675,245,673,246,672,247,671,248,670,248,669,249,668,250,668,251,667,252,666,253,665,254,664,256,664,255,663,253,662,251,662,242,664,241,665,239,665,238,666,238,667,238,668,238,668,237,669,236,670,236,671,236,674,236,679,231,683,226,681,226,676,225,672,223,670,222,669,222,669,221,668,220,668,219,667,219,668,217</Points>\n    <Keys>Somalia, SOM, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>628,317,629,317,630,317,630,318,632,317,633,317,633,318,634,320,634,321,635,321,635,322,635,323,636,324,636,326,635,327,636,327,635,328,634,328,633,328,633,329,632,330,632,331,632,332,633,332,634,332,635,332,636,331,638,331,638,332,637,333,637,335,637,336,636,337,635,337,636,337,635,337,634,338,633,339,633,340,632,341,631,342,630,343,629,344,629,345,628,345,628,346,627,347,626,348,625,348,624,349,623,350,622,350,620,351,619,352,618,352,617,352,616,352,617,353,616,353,615,352,614,353,613,353,611,353,610,352,610,353,609,353,608,353,608,352,608,353,607,352,607,353,606,353,605,353,605,354,604,354,603,354,602,354,601,354,600,355,599,355,597,354,598,354,597,354,597,353,597,354,596,354,596,353,595,353,595,354,594,353,595,352,594,351,594,350,593,350,594,350,593,350,593,349,594,349,594,348,595,348,595,347,594,346,594,345,593,344,592,343,591,342,591,341,590,339,590,338,590,337,589,337,589,336,590,336,590,335,591,335,592,335,592,336,591,336,592,336,592,337,593,337,594,337,595,337,596,337,597,337,598,337,598,336,599,336,599,333,600,329,600,325,601,326,601,327,602,327,601,327,602,327,602,328,602,329,602,330,601,330,601,331,602,331,603,331,604,331,605,331,606,330,607,329,608,328,608,327,609,326,610,326,610,327,611,327,612,327,612,328,613,328,614,328,615,328,616,328,616,327,617,326,617,325,619,324,620,323,620,322,620,321,621,321,622,321,622,320,623,320,623,319,624,319,625,318,626,318,626,317,627,317,628,317</Points>\n    <Keys>South Africa, ZAF, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>626,336,625,336,624,337,623,337,622,338,622,339,621,339,621,341,622,341,622,342,623,342,624,342,624,341,625,341,626,341,627,340,627,339,628,339,627,338,627,337,626,337,626,336</Points>\n    <Keys>South Africa, ZAF, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>497,166,496,166,497,166,497,165,498,164,498,165,498,166,497,166</Points>\n    <Keys>Spain, ESP, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>549,133,548,132,547,132,547,131,548,131,549,131,550,131,550,132,549,132,549,133</Points>\n    <Keys>Spain, ESP, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>493,167,492,167,492,166,493,166,493,167</Points>\n    <Keys>Spain, ESP, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>489,167,489,166,489,165,490,165,491,165,490,165,490,166,489,167</Points>\n    <Keys>Spain, ESP, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>544,134,543,134,543,133,544,133,544,134</Points>\n    <Keys>Spain, ESP, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>498,164,498,163,499,163,499,164,498,164</Points>\n    <Keys>Spain, ESP, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>486,165,486,164,486,165</Points>\n    <Keys>Spain, ESP, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>552,131,551,131,551,130,552,130,552,131,553,131,552,131</Points>\n    <Keys>Spain, ESP, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>544,123,545,123,546,123,547,123,548,123,549,123,549,124,549,125,548,125,547,126,546,126,546,127,545,127,543,127,542,127,542,128,541,129,540,130,539,131,538,132,539,133,539,134,540,134,540,135,539,135,538,135,538,136,537,137,537,138,537,137,537,138,536,138,535,138,534,139,534,140,533,140,532,140,531,140,529,140,528,140,526,140,525,141,524,141,524,142,523,142,523,143,522,142,521,142,521,141,520,141,520,140,520,139,519,139,518,139,517,139,517,138,518,137,518,136,519,136,518,136,518,135,518,134,519,133,518,133,518,132,517,132,517,131,517,132,518,131,519,130,518,130,519,130,519,129,519,128,519,127,520,127,521,126,520,125,520,126,520,125,519,125,518,125,517,125,516,125,515,125,515,124,514,124,513,125,513,124,514,124,514,123,513,124,513,123,514,123,513,123,512,123,513,122,512,122,512,121,513,121,513,120,513,121,514,121,514,120,515,120,515,121,515,120,514,120,515,120,516,119,517,119,518,120,519,120,520,120,521,120,522,120,523,120,524,120,525,120,527,120,528,120,529,120,530,120,531,120,533,121,534,120,535,121,536,121,537,122,538,122,539,122,540,122,541,122,542,122,544,122,544,123</Points>\n    <Keys>Spain, ESP, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>779,228,779,227,779,226,779,225,779,226,779,227,779,226,779,225,779,224,780,223,780,222,781,222,780,222,779,221,780,221,781,222,780,221,781,222,782,223,782,224,783,224,783,225,784,225,784,226,784,227,785,227,784,227,785,228,785,229,785,231,784,231,783,232,781,233,780,232,779,231,779,230,779,229,779,228</Points>\n    <Keys>Sri Lanka, LKA, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>352,199,352,199</Points>\n    <Keys>St. Christopher-Nevis, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>352,199,351,199,351,198,351,199,352,199</Points>\n    <Keys>St. Christopher-Nevis, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>357,209,356,209,357,208,357,209</Points>\n    <Keys>St. Lucia, LCA, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>356,212,356,211,356,212</Points>\n    <Keys>St. Vincent and the Grenadines, VCT, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>356,212,356,212</Points>\n    <Keys>St. Vincent and the Grenadines, VCT, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>356,212,356,212</Points>\n    <Keys>St. Vincent and the Grenadines, VCT, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>356,212,356,212</Points>\n    <Keys>St. Vincent and the Grenadines, VCT, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>355,213,355,213</Points>\n    <Keys>St. Vincent and the Grenadines, VCT, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>355,213,355,213</Points>\n    <Keys>St. Vincent and the Grenadines, VCT, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>355,213,355,213</Points>\n    <Keys>St. Vincent and the Grenadines, VCT, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>356,212,355,212,356,212,355,212,356,212</Points>\n    <Keys>St. Vincent and the Grenadines, VCT, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>356,212,356,212</Points>\n    <Keys>St. Vincent and the Grenadines, VCT, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>356,211,356,210,356,211</Points>\n    <Keys>St. Vincent and the Grenadines, VCT, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>646,237,645,237,643,237,641,238,640,239,639,239,638,239,637,239,636,240,635,240,635,239,634,239,634,240,633,239,632,239,632,240,632,239,631,240,631,239,630,239,630,238,629,238,629,237,628,236,627,237,626,237,625,237,625,238,625,237,624,237,623,237,623,236,622,236,622,235,621,235,621,234,621,233,620,233,619,232,618,231,619,231,618,230,616,228,615,228,615,227,614,226,613,226,612,226,612,225,612,224,610,224,610,223,610,224,610,223,610,222,611,221,609,219,609,218,608,218,608,217,608,216,607,216,607,214,607,213,606,212,606,213,605,213,605,212,605,211,606,211,606,210,606,209,607,208,607,207,608,206,608,205,608,204,609,203,610,203,611,203,611,194,611,192,612,190,613,191,615,191,615,189,615,184,616,185,618,185,620,185,622,185,624,184,626,185,627,184,629,185,631,184,633,185,634,184,634,185,636,184,638,184,639,184,641,185,642,185,642,184,644,184,644,182,645,182,646,181,647,182,648,182,648,183,649,184,650,184,650,185,650,186,651,186,651,187,651,188,651,189,651,190,652,193,652,194,653,194,653,195,654,195,654,196,655,196,655,197,655,198,654,198,653,198,652,198,652,199,651,199,650,199,651,199,650,200,651,200,650,201,650,202,650,203,650,204,649,204,649,205,649,206,649,207,649,208,649,209,649,210,648,210,648,211,648,212,647,213,646,214,645,215,645,216,644,217,645,217,644,218,643,218,642,219,643,220,642,220,642,222,642,224,642,225,641,225,640,225,639,225,639,226,638,227,639,227,640,227,642,228,642,229,643,230,644,230,644,231,644,232,644,233,645,233,645,234,646,234,647,234,647,235,647,236,647,237,646,237</Points>\n    <Keys>Sudan, SDN, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>367,240,366,240,367,240,366,240,366,239,365,239,365,238,366,238,366,237,366,236,366,235,367,235,368,235,367,235,368,234,368,233,369,233,370,233,371,233,372,233,374,233,375,233,374,233,375,233,376,233,377,233,378,233,377,234,377,235,376,235,376,236,376,238,377,238,376,238,377,239,377,240,378,240,377,240,377,241,377,242,376,243,376,244,375,244,375,243,374,243,373,243,372,243,371,243,371,244,372,244,372,245,370,245,370,244,369,244,368,243,368,242,368,241,368,240,367,240</Points>\n    <Keys>Suriname, SUR, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>615,21,614,21,615,21,616,20,615,21</Points>\n    <Keys>Svalbard, SJM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>620,15,619,14,620,14,621,14,620,15</Points>\n    <Keys>Svalbard, SJM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>624,14,623,14,624,14,625,14,626,14,627,14,628,14,629,14,627,14,625,14,624,14</Points>\n    <Keys>Svalbard, SJM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>607,19,607,18,608,18,607,18,606,18,602,18,603,18,603,17,604,17,602,16,605,16,608,16,610,16,609,16,610,17,611,17,612,17,614,17,612,17,612,18,611,18,610,18,609,18,608,18,608,19,607,19</Points>\n    <Keys>Svalbard, SJM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>635,10,634,10,639,10,640,10,635,10</Points>\n    <Keys>Svalbard, SJM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>602,16,601,16,602,16,601,16,602,15,601,15,600,15,603,15,604,15,606,15,606,16,605,16,602,16</Points>\n    <Keys>Svalbard, SJM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>597,27,596,27,597,27</Points>\n    <Keys>Svalbard, SJM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>610,13,609,13,608,13,607,13,607,12,608,12,602,12,600,12,599,12,598,12,600,12,601,12,603,12,601,11,606,11,607,11,606,11,605,11,601,11,598,11,596,11,594,11,596,10,594,10,595,10,594,10,593,10,594,10,596,10,597,10,598,10,597,10,596,9,597,9,597,10,598,10,599,10,599,9,598,9,599,9,598,9,599,9,600,9,601,9,601,10,602,10,603,10,604,10,605,10,604,10,605,10,606,10,606,11,607,11,607,10,606,10,607,10,607,9,608,9,607,9,608,10,608,9,609,9,610,9,609,10,608,10,609,10,610,10,611,10,613,10,612,9,613,9,613,10,614,9,614,10,616,10,615,10,616,10,617,10,619,10,620,10,621,10,621,11,619,11,617,12,615,13,614,12,612,13,610,13</Points>\n    <Keys>Svalbard, SJM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>589,21,588,21,589,21,586,20,588,20,589,20,588,19,587,19,587,20,585,19,583,19,582,19,582,18,581,18,582,18,581,18,582,18,583,18,584,18,587,18,588,18,587,18,586,18,584,18,587,17,589,17,590,17,591,17,590,17,591,17,590,17,589,17,587,17,586,17,585,17,581,17,580,17,581,17,580,16,581,16,582,16,582,17,583,17,582,16,585,16,584,16,585,16,586,16,587,16,586,16,587,15,590,15,591,15,590,15,588,15,589,15,590,15,590,14,589,14,589,15,588,15,587,15,586,15,585,15,586,15,586,14,585,14,585,15,584,15,584,14,583,14,583,15,584,15,582,15,582,16,581,16,580,16,579,16,578,16,578,15,577,15,579,15,578,15,575,15,575,14,574,14,575,14,574,14,576,14,577,14,576,14,575,14,576,14,576,13,575,13,576,13,575,13,574,13,575,13,573,13,572,13,572,12,573,12,572,12,574,12,573,11,574,11,575,11,576,11,577,12,577,11,576,11,577,11,579,11,581,11,580,11,579,11,577,12,579,12,580,12,579,12,580,12,581,12,581,13,582,13,582,12,581,12,582,12,582,11,583,11,584,11,585,12,586,12,587,13,586,13,587,13,588,13,588,14,589,14,588,13,587,13,587,12,586,11,587,11,588,11,587,11,588,10,589,10,590,11,592,11,594,11,592,12,593,12,592,12,593,12,594,12,595,12,596,12,596,13,595,13,596,13,597,13,598,13,599,13,604,14,604,15,602,14,601,15,599,15,598,15,599,15,596,15,597,15,596,16,597,16,596,16,597,16,596,16,595,16,595,17,595,18,594,18,593,18,592,18,592,19,591,19,591,20,590,20,591,20,591,21,590,21,589,21</Points>\n    <Keys>Svalbard, SJM, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>635,328,636,329,636,330,636,331,635,332,634,332,633,332,632,332,632,331,632,330,633,329,633,328,634,328,635,328</Points>\n    <Keys>Swaziland, SWZ, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>574,76,575,76,574,76</Points>\n    <Keys>Sweden, SWE, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>589,82,589,81,589,80,590,80,590,79,591,78,590,80,590,81,589,82</Points>\n    <Keys>Sweden, SWE, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>594,80,594,79,594,78,595,77,596,77,597,77,596,77,596,78,596,79,595,79,596,79,595,79,595,80,594,80</Points>\n    <Keys>Sweden, SWE, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>601,43,602,43,602,44,603,44,605,45,606,45,608,45,609,46,610,47,610,48,611,48,611,49,610,49,611,49,611,50,612,50,611,50,611,51,610,51,611,52,612,52,612,53,611,53,610,53,609,53,608,53,607,53,608,53,607,53,606,53,607,53,606,53,607,53,607,54,606,53,606,54,607,54,605,54,606,54,605,54,606,54,605,54,604,54,604,55,605,55,604,55,603,54,603,55,604,55,604,56,603,56,604,57,603,58,602,58,602,59,601,59,600,59,600,60,600,59,600,60,599,60,598,60,597,60,597,61,596,61,595,61,594,62,595,62,594,62,593,62,593,63,594,63,593,63,592,63,593,63,592,63,591,63,592,63,592,64,592,65,592,66,591,65,591,66,591,67,591,68,592,68,591,68,591,69,592,69,593,69,594,69,594,70,595,69,595,70,594,70,595,70,596,70,596,71,597,71,596,71,597,71,596,71,596,72,595,72,594,72,594,73,593,72,593,71,593,72,592,72,593,71,592,71,592,72,592,71,592,72,593,72,592,72,591,72,590,72,589,72,588,72,590,72,591,72,591,73,592,73,593,73,593,72,594,73,594,72,595,72,595,73,595,72,595,73,594,73,595,73,594,73,595,73,594,73,593,73,593,74,593,73,592,73,592,74,591,74,591,75,591,74,591,75,590,75,588,75,589,75,590,75,589,75,590,75,589,75,590,76,589,76,590,76,590,77,589,76,590,77,589,77,590,77,589,77,590,77,589,77,589,78,590,78,589,78,589,79,589,80,589,81,588,81,587,82,586,82,585,82,584,82,583,82,582,83,583,84,582,84,581,84,580,84,579,84,578,84,579,84,579,83,578,83,577,82,578,82,577,81,578,81,577,80,577,79,576,79,576,78,575,78,575,77,574,77,575,77,575,76,575,75,574,76,574,75,574,76,574,75,573,75,573,74,573,73,574,73,574,74,575,73,574,72,575,71,576,71,577,70,577,69,576,68,576,67,577,67,578,66,577,66,576,65,576,64,576,63,576,62,576,61,575,61,576,60,576,59,578,59,578,58,579,58,581,58,582,58,582,57,581,57,582,55,583,55,583,54,583,53,583,52,585,52,586,52,586,51,588,50,589,49,588,48,589,48,590,47,591,46,593,47,594,46,594,45,595,45,596,45,599,45,600,45,599,45,600,45,601,44,600,44,600,43,601,43</Points>\n    <Keys>Sweden, SWE, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>568,109,569,109,569,110,570,110,571,109,571,110,571,111,570,111,570,112,569,112,569,111,569,112,568,112,568,111,567,111,567,112,567,113,566,113,567,113,566,113,566,112,565,112,565,111,564,112,563,112,563,113,562,113,561,113,560,112,560,111,559,111,558,111,558,112,557,112,558,112,557,112,558,112,558,111,558,110,559,110,560,109,561,109,561,108,560,108,561,108,560,108,561,108,562,108,563,108,562,108,563,108,564,108,565,108,565,107,566,107,566,108,567,108,568,108,568,109</Points>\n    <Keys>Switzerland, CHE, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>667,139,665,141,664,141,663,141,663,142,664,143,664,144,663,144,663,145,663,146,663,147,660,148,656,150,655,151,654,151,653,152,652,152,652,153,651,153,650,154,650,153,649,153,648,153,647,152,646,152,646,151,647,151,646,151,647,150,648,150,647,150,647,149,648,149,649,149,648,149,649,148,649,147,649,146,648,146,648,147,647,147,647,146,647,145,647,144,647,143,648,143,649,142,650,142,649,141,649,140,650,140,651,140,651,141,652,141,653,140,654,140,655,140,656,140,657,141,658,140,659,140,660,140,661,140,662,139,663,139,664,139,665,139,666,139,667,139</Points>\n    <Keys>Syria, SYR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>902,185,902,184,901,183,900,183,900,182,900,181,900,180,901,178,901,177,902,177,902,176,903,175,904,175,905,175,905,176,905,177,905,178,904,178,904,179,904,181,903,182,902,183,902,184,902,185</Points>\n    <Keys>Taiwan, TWN, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>752,130,751,130,751,131,751,130,750,130,748,130,748,131,747,131,747,132,748,132,749,132,750,132,751,132,752,132,753,132,754,132,755,132,755,133,755,132,756,132,756,133,757,132,758,132,759,132,760,132,761,132,760,132,760,133,761,134,761,135,762,135,763,134,763,135,764,135,764,136,764,137,764,138,765,138,765,139,764,139,764,138,763,138,761,139,760,139,761,139,761,138,759,138,759,139,758,139,757,139,757,140,756,140,755,140,754,140,754,139,754,137,753,137,753,136,754,136,753,135,752,135,751,135,751,136,750,137,750,138,749,138,748,138,748,139,747,139,746,139,745,139,744,139,744,140,743,139,743,138,744,137,744,136,745,136,744,136,744,135,744,134,743,133,743,134,743,133,742,133,742,132,743,132,744,132,745,132,745,131,746,131,746,130,747,130,746,130,745,130,746,130,747,130,748,130,747,129,748,128,749,129,749,128,750,128,751,128,751,127,751,128,752,128,751,128,752,128,751,129,751,130,752,130</Points>\n    <Keys>Tajikistan, TJK, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>658,270,658,269,657,269,657,268,658,268,658,269,658,270</Points>\n    <Keys>Tanzania, United Republic of, TZA, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>658,274,659,274,659,273,659,274,658,274</Points>\n    <Keys>Tanzania, United Republic of, TZA, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>659,267,658,267,659,267,658,266,659,266,659,265,659,266,659,267</Points>\n    <Keys>Tanzania, United Republic of, TZA, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>628,264,629,264,630,263,630,262,631,262,631,261,632,260,632,259,631,259,631,258,631,259,631,258,632,258,632,257,632,256,632,255,631,255,631,254,632,253,634,253,635,253,636,253,638,253,640,254,641,254,642,254,644,255,647,256,648,257,652,260,653,260,652,261,653,261,657,264,657,265,657,266,656,268,656,269,656,270,657,270,657,271,658,271,658,272,658,273,657,273,657,274,658,274,658,275,657,275,657,276,658,276,658,277,658,278,658,279,659,280,659,281,659,280,659,281,660,281,661,282,661,281,661,282,660,282,660,283,659,283,658,283,657,284,656,284,655,285,654,284,653,284,653,285,652,286,651,286,651,285,650,285,650,286,649,286,648,286,648,285,647,285,646,285,644,285,644,284,643,284,644,283,643,282,643,281,643,280,642,279,641,279,641,280,641,279,640,279,639,279,638,279,638,278,637,278,636,278,635,278,635,277,634,277,634,276,633,276,632,276,632,275,631,273,631,272,630,271,629,271,628,269,628,268,628,267,628,265,628,264</Points>\n    <Keys>Tanzania, United Republic of, TZA, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>834,227,834,226,835,226,835,227,834,227</Points>\n    <Keys>Thailand, THA, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>838,189,838,190,839,190,839,189,840,189,840,190,840,189,841,189,841,190,841,191,841,192,842,192,843,192,843,193,844,193,843,194,843,195,843,196,843,197,842,197,842,198,843,198,844,197,845,197,845,196,846,196,847,197,848,197,848,196,849,197,849,196,849,195,850,195,851,195,851,196,852,196,852,197,853,197,853,198,854,198,854,199,854,200,854,201,854,202,855,202,856,202,856,203,856,204,856,205,856,206,856,207,855,207,855,208,855,207,854,207,853,207,852,207,851,207,850,207,849,208,848,208,848,209,847,209,847,210,847,211,847,212,847,213,848,213,848,214,848,215,848,216,848,215,848,214,847,214,846,214,847,213,846,214,846,213,846,214,846,213,845,213,845,212,844,213,843,213,843,212,842,213,842,212,842,211,842,210,841,210,840,210,839,211,840,211,839,212,840,214,839,215,838,217,838,218,837,219,837,220,837,221,837,222,837,223,838,223,839,223,839,224,839,225,840,225,840,227,841,228,841,229,841,228,840,228,840,227,840,228,841,229,842,230,843,230,844,230,843,230,844,230,845,231,846,232,845,233,844,233,843,233,843,234,843,233,842,233,843,233,843,232,842,232,842,231,841,231,840,230,840,231,839,231,839,230,839,229,838,229,838,228,838,229,838,228,838,229,838,228,837,228,837,227,836,226,835,226,835,225,835,226,834,226,834,225,834,224,835,223,834,223,835,223,835,222,835,221,836,220,836,219,836,218,837,218,838,216,838,215,838,214,838,213,837,212,837,211,837,210,837,209,836,208,835,207,834,206,834,205,835,205,835,204,835,205,835,204,835,203,835,202,836,202,836,201,836,202,835,201,835,200,835,199,834,198,833,198,833,197,832,196,832,195,833,195,833,194,833,193,833,192,834,192,834,191,835,191,836,191,837,191,837,190,838,190,838,189</Points>\n    <Keys>Thailand, THA, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>539,217,541,217,541,218,542,218,542,219,544,221,544,222,544,223,544,224,544,225,544,229,544,230,545,231,545,232,544,232,543,232,542,232,542,231,541,230,541,229,541,228,541,227,541,226,542,226,542,225,541,225,541,224,541,223,541,222,540,222,541,222,540,222,540,221,541,222,541,221,540,221,541,220,540,220,540,219,539,219,539,218,540,218,540,217,539,217</Points>\n    <Keys>Togo, TGO, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>16,307,15,307,16,307,15,307,16,307</Points>\n    <Keys>Tonga, TON, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>14,314,13,314,14,314,13,314,14,314</Points>\n    <Keys>Tonga, TON, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>17,307,17,307</Points>\n    <Keys>Tonga, TON, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>17,309,17,309</Points>\n    <Keys>Tonga, TON, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>14,310,14,310</Points>\n    <Keys>Tonga, TON, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>17,310,17,310</Points>\n    <Keys>Tonga, TON, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>15,315,15,314,15,315</Points>\n    <Keys>Tonga, TON, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>18,307,17,307,17,306,18,306,17,306,17,307,17,306,18,306,18,307</Points>\n    <Keys>Tonga, TON, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>354,220,355,220,355,219,355,218,356,218,357,218,356,218,356,219,357,220,355,220,354,220</Points>\n    <Keys>Trinidad and Tobago, TTO, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>572,150,572,149,573,149,572,150</Points>\n    <Keys>Tunisia, TUN, NorthAfrica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>574,151,574,153,572,154,571,155,570,155,570,156,570,158,569,159,568,160,567,156,567,154,565,153,564,152,564,151,563,151,563,150,562,149,562,148,563,148,563,147,564,147,564,146,565,145,564,144,565,144,565,143,564,143,565,141,564,141,565,141,565,140,566,140,566,139,567,139,568,139,569,138,569,139,570,139,571,140,570,140,571,140,572,140,572,139,573,139,573,140,572,140,572,141,571,141,571,142,571,143,572,143,573,144,573,145,572,146,571,147,570,148,570,149,571,149,571,150,572,149,572,150,573,150,573,151,574,151</Points>\n    <Keys>Tunisia, TUN, NorthAfrica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>619,125,618,125,619,125,620,125,621,124,622,125,623,125,623,124,624,125,623,125,624,125,624,126,625,126,627,127,626,128,625,128,625,127,625,128,624,127,623,128,622,128,621,128,620,129,619,129,619,130,618,130,619,129,620,129,619,129,618,129,618,128,618,127,619,127,619,126,619,125</Points>\n    <Keys>Turkey, TUR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>664,126,665,126,667,126,668,126,669,127,670,127,670,128,671,128,670,129,671,130,670,130,672,130,673,131,674,131,674,132,673,131,673,132,672,132,672,133,672,134,672,135,673,135,673,136,672,137,673,137,673,138,674,139,673,139,672,140,672,139,671,139,670,139,669,139,669,138,668,139,668,138,667,139,666,139,665,139,664,139,663,139,662,139,661,140,660,140,659,140,658,140,657,141,656,140,655,140,654,140,653,140,652,141,651,141,651,140,650,140,649,140,649,141,650,142,649,142,648,143,647,143,647,142,647,141,648,141,648,140,647,140,646,140,647,140,646,141,644,140,643,140,642,141,642,142,641,142,640,142,639,142,638,142,637,142,636,142,636,141,634,141,633,140,632,140,631,140,631,141,631,142,630,142,629,142,628,142,627,142,627,141,627,140,626,140,626,141,626,140,625,140,624,140,624,141,623,141,624,141,624,140,623,140,624,140,623,140,623,141,622,140,622,141,622,140,623,140,624,140,624,139,623,139,622,140,621,140,621,139,622,139,622,138,621,138,621,137,621,136,620,136,619,136,618,136,618,135,619,136,619,135,619,134,619,135,620,136,620,135,621,135,620,135,620,134,621,134,620,134,620,133,619,133,620,133,620,132,619,132,618,132,618,131,618,130,619,130,620,129,621,129,622,130,623,130,623,129,624,129,623,129,625,129,626,129,627,129,626,129,628,128,629,128,628,128,627,128,627,127,629,127,630,127,632,127,633,127,634,127,635,126,636,126,636,125,637,125,639,125,640,124,642,125,643,125,644,125,645,124,645,125,646,126,647,125,648,126,649,127,649,126,650,126,650,127,651,127,652,127,653,127,654,128,655,128,656,127,657,127,658,127,659,128,660,128,661,127,662,127,663,127,664,126</Points>\n    <Keys>Turkey, TUR, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>697,125,698,124,699,124,700,124,701,123,702,124,703,124,704,124,704,125,705,126,706,126,706,127,707,127,707,126,707,127,710,127,711,127,711,126,710,126,710,125,711,125,711,124,712,124,713,124,713,123,714,123,715,123,715,124,715,123,714,123,714,122,715,123,715,122,716,123,717,123,718,123,718,124,719,124,720,124,719,124,720,124,719,125,720,125,720,126,721,127,722,127,723,127,724,127,725,127,725,128,726,128,726,129,727,129,727,130,727,131,728,131,729,132,730,132,731,133,732,134,733,134,734,135,735,135,736,136,737,136,738,136,739,136,740,137,739,137,739,138,738,139,737,138,736,138,736,139,735,139,734,139,734,140,733,141,733,142,732,142,731,142,730,143,729,143,729,144,727,145,726,145,726,144,725,144,724,144,723,144,723,143,723,142,723,141,721,141,720,139,719,139,718,139,718,138,717,138,716,137,716,138,715,137,715,138,714,137,713,137,712,137,712,136,711,136,710,136,709,136,708,136,709,136,708,136,707,136,706,136,705,136,704,137,704,138,703,138,702,139,701,138,701,137,701,135,701,134,701,133,700,133,701,133,700,133,699,132,699,133,699,132,700,132,701,132,700,132,700,131,700,130,699,131,698,131,698,130,698,131,699,131,698,130,698,129,698,128,698,127,699,128,700,128,701,129,701,128,702,129,702,128,703,128,702,128,703,128,704,128,704,127,703,127,702,126,701,125,701,124,700,124,699,124,698,125,698,126,698,125,698,126,698,127,698,126,697,126,697,125</Points>\n    <Keys>Turkmenistan, TKM, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>319,188,318,187,319,187,320,187,320,188,319,188</Points>\n    <Keys>Turks and Caicos Islands, TCA, Caribbean</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>641,250,641,251,641,252,641,254,640,254,638,253,636,253,635,253,634,253,632,253,631,254,630,254,630,255,629,255,629,254,628,255,628,253,628,252,629,252,628,252,629,251,629,250,629,249,629,248,630,248,630,247,631,247,632,246,633,245,633,244,633,243,632,243,632,242,632,241,632,240,632,239,633,239,634,240,634,239,635,239,635,240,636,240,637,239,638,239,639,239,640,239,641,238,642,238,642,239,643,239,643,240,643,241,643,242,644,242,644,243,644,244,644,245,645,245,644,245,645,245,644,246,644,247,643,247,643,248,642,248,642,249,642,250,641,250</Points>\n    <Keys>Uganda, UGA, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>610,96,611,96,612,96,612,95,613,95,614,95,615,95,616,95,617,95,618,95,619,95,620,95,621,95,621,96,622,96,623,96,624,96,625,96,626,96,627,96,628,96,629,96,630,96,631,96,631,97,631,96,631,95,632,95,631,95,632,95,632,94,633,94,634,94,635,94,636,94,637,94,637,93,637,94,638,94,639,94,639,93,640,93,640,94,641,93,641,94,642,94,642,95,643,95,642,95,642,96,642,97,643,97,644,97,645,97,646,97,645,98,646,98,646,99,647,99,648,99,648,100,649,100,650,100,650,99,651,99,652,99,652,100,653,100,654,101,654,100,655,100,655,101,656,101,657,101,658,101,658,102,659,102,660,102,660,103,659,103,659,104,660,104,659,104,658,105,659,105,659,106,660,106,659,106,659,107,658,107,657,107,656,107,655,108,654,108,654,109,652,109,651,110,650,110,650,111,650,110,649,110,648,111,648,110,647,111,646,111,645,112,644,112,645,112,645,111,645,112,644,112,644,113,645,114,646,114,646,115,647,114,648,114,649,114,649,115,648,115,647,116,647,115,646,115,646,116,645,116,644,116,643,116,642,117,641,117,640,117,640,116,640,115,639,115,638,114,637,115,637,114,638,114,639,113,640,113,641,113,640,113,640,112,639,112,638,112,637,112,636,112,635,112,635,111,636,111,635,111,634,111,635,111,637,111,636,111,635,111,635,110,636,110,635,110,635,109,635,110,635,111,634,111,634,110,634,111,633,111,632,111,632,112,631,112,630,113,629,113,629,114,629,113,628,113,628,114,629,114,629,115,628,115,629,115,628,114,627,114,627,115,626,115,625,115,624,114,625,114,625,113,626,113,626,112,627,112,626,112,626,111,627,111,628,111,629,111,628,111,629,111,630,111,629,111,629,110,628,110,628,109,628,108,628,109,628,108,627,108,627,107,626,107,626,106,625,106,624,106,625,106,624,106,623,106,623,105,622,105,621,105,620,105,620,106,620,105,620,106,619,106,618,106,618,107,616,107,615,107,614,107,613,107,612,107,611,107,610,107,610,106,610,107,609,106,609,107,608,106,608,107,608,106,607,106,606,106,606,105,606,104,607,104,607,103,608,103,607,102,608,102,608,101,609,100,610,100,611,99,612,99,611,98,612,98,611,98,611,97,610,97,611,96,610,96</Points>\n    <Keys>Ukraine, UKR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>708,172,708,173,708,174,709,174,709,175,709,176,708,175,708,178,707,179,707,184,706,184,696,183,694,180,692,178,692,176,692,177,693,177,694,177,693,177,694,178,694,177,694,178,695,178,695,179,696,179,697,178,698,178,699,178,700,178,701,178,702,178,703,178,703,177,703,176,704,176,705,176,705,175,706,174,707,173,708,172</Points>\n    <Keys>United Arab Emirates, ARE, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>521,82,520,82,521,81,521,82,521,81,522,81,523,81,522,81,522,82,522,81,521,82</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>526,91,526,90,527,90,527,91,526,91</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>524,84,523,84,523,83,524,83,524,84</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>519,77,518,77,519,77,518,76,519,76,518,76,519,76,521,75,520,76,521,76,520,76,520,77,519,77,520,76,519,77,520,77,519,77</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>521,79,522,79,521,79,520,79,520,78,519,78,520,78,521,77,521,78,521,79,522,79,523,79,522,79,521,79</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>531,74,530,74,530,73,530,74,529,74,530,73,531,74</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>518,78,517,78,518,78,518,77,518,78</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>521,84,521,83,520,83,521,83,521,84</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>522,83,521,83,522,83,522,82,522,83</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>536,99,535,99,535,98,536,98,536,99</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>517,79,517,78,518,78,518,79,517,78,518,79,517,79</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>536,71,535,71,536,70,535,70,534,70,535,70,535,69,536,69,535,69,536,69,535,69,536,69,536,70,536,71</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>524,77,523,76,524,76,523,76,524,76,525,76,524,76,524,75,525,75,526,75,525,75,526,75,527,75,528,75,529,75,529,74,530,75,530,76,529,76,528,77,527,77,528,77,527,77,527,78,526,78,527,78,527,77,527,78,529,78,529,77,530,77,530,78,531,77,532,77,533,77,534,77,534,78,533,79,533,80,532,80,532,81,531,81,530,81,531,81,532,82,531,82,530,82,529,82,528,82,529,82,530,83,531,82,532,82,533,83,534,84,535,84,535,85,536,86,536,87,537,87,538,87,538,88,539,88,539,89,540,90,539,89,538,89,539,89,539,90,540,90,541,91,540,92,541,92,542,92,543,92,544,92,545,93,544,94,544,95,543,94,543,95,542,95,542,96,541,96,542,96,541,96,542,96,543,96,544,96,544,97,543,97,542,97,542,98,541,98,540,98,539,98,537,98,536,98,535,98,536,98,535,98,534,98,533,98,534,99,533,99,532,99,531,98,529,99,529,98,529,99,529,100,528,100,527,100,527,99,527,100,526,99,525,100,524,100,524,101,524,100,523,100,522,100,523,100,524,99,525,99,526,98,526,97,526,98,527,97,528,97,530,97,531,96,532,95,531,96,530,96,529,96,528,96,527,96,526,95,525,95,525,96,524,95,525,95,524,95,524,94,525,94,526,94,527,94,527,93,528,93,527,93,527,92,528,92,527,92,526,92,525,92,526,92,526,91,527,91,528,91,529,91,529,90,530,90,530,91,530,90,531,91,531,90,531,91,531,90,530,90,531,89,530,89,531,89,531,88,530,88,529,88,529,87,529,86,530,86,529,86,528,86,527,86,526,86,525,86,525,87,525,86,524,86,524,85,524,86,525,86,524,85,525,85,526,84,525,84,525,83,526,83,525,82,525,83,525,82,525,83,524,83,523,83,524,82,525,82,524,82,523,82,523,83,524,83,523,83,523,84,523,85,522,85,522,84,522,83,523,83,522,83,523,83,522,83,523,82,522,83,523,82,523,81,524,81,523,81,524,81,523,81,524,81,525,80,524,80,523,81,522,81,521,81,522,81,523,80,521,80,522,80,522,79,523,80,522,79,523,79,522,79,523,79,522,79,522,78,523,78,522,78,523,78,522,78,522,77,523,77,524,77,523,77,524,77</Points>\n    <Keys>United Kingdom, GBR, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>132,78,131,78,132,78,131,78,132,78,131,78,131,77,130,77,131,77,130,76,131,76,130,76,131,76,132,76,133,76,132,76,133,76,133,77,132,77,133,77,133,76,135,76,135,77,134,77,135,77,134,77,133,77,134,77,135,77,135,78,133,78,132,77,132,78,133,78,132,78</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>77,80,78,80,78,79,78,80,78,79,77,79,77,80,77,79,78,79,77,79,76,79,77,79,77,80,76,80,76,79,75,78,76,78,77,77,77,78,78,78,78,79,78,78,79,78,78,77,79,77,79,78,79,77,80,77,79,77,80,77,80,76,80,77,81,77,82,77,83,77,82,77,82,78,82,77,82,78,83,78,82,78,81,78,80,78,81,78,82,78,82,79,81,79,81,78,80,78,80,79,81,79,80,79,79,79,79,80,78,80,77,80</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>132,80,132,79,133,79,132,80</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>80,80,79,79,80,79,81,79,80,79,80,80</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>139,81,138,80,137,79,138,79,140,80,141,80,141,81,140,81,140,80,139,80,140,80,140,81,139,81</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>137,83,137,82,137,81,137,80,137,81,136,80,137,80,136,80,137,80,138,80,138,81,138,80,138,81,138,82,138,81,138,82,137,82,137,83</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>141,81,141,80,142,81,141,81</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>56,75,56,74,57,74,57,75,56,75</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>141,82,140,81,141,81,142,81,142,82,141,82</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>143,82,142,81,143,81,142,81,143,81,144,82,143,82</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>61,185,60,185,60,184,61,184,62,184,61,185</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>143,83,142,83,142,82,141,82,142,82,142,81,142,82,143,82,143,83</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>138,83,138,82,139,82,140,82,139,82,139,83,138,83</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>7,96,6,95,8,95,7,95,7,96</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>146,85,146,84,146,85,145,85,146,84,145,84,146,84,145,84,145,85,145,84,145,85,144,84,145,84,144,84,145,83,144,83,145,83,144,83,145,83,146,83,147,83,147,84,146,84,146,85</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>143,86,142,86,143,86,142,86,142,85,142,86,142,85,141,85,140,85,141,85,140,85,140,84,141,84,140,84,141,84,140,84,139,84,139,83,140,83,140,82,139,82,139,81,140,82,141,82,142,83,142,84,142,83,142,84,143,84,142,84,141,84,142,84,143,84,142,84,143,84,143,85,144,85,143,85,143,86,144,85,144,86,143,86,144,86,143,86</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1077,96,1076,96,1075,96,1076,96,1077,96,1078,96,1077,96</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>66,187,66,186,66,187,66,186,65,186,66,186,66,187,65,187,65,186,66,185,66,186,67,187,66,187</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>57,85,57,84,58,84,57,85,58,84,58,85,57,85</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1039,86,1038,85,1037,85,1037,84,1038,84,1038,85,1039,86</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>59,86,59,85,60,85,59,86</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>145,86,145,85,145,86</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>141,86,140,86,140,85,141,85,140,85,141,85,141,86</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>45,87,46,86,47,86,48,86,48,85,49,85,49,86,50,86,50,87,50,86,49,86,49,87,47,87,46,87,45,87</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1044,87,1043,87,1042,86,1044,87</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>42,88,41,88,42,88,43,88,42,88</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>37,91,36,91,36,90,38,90,39,90,38,90,39,90,38,89,39,89,39,90,39,89,38,89,39,88,40,89,41,89,40,89,41,89,40,90,39,90,37,91</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>32,92,33,91,34,91,34,90,35,90,36,90,35,91,34,91,33,92,32,92</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>69,187,68,187,69,187</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1058,92,1057,92,1057,91,1059,92,1060,92,1059,92,1058,92</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>19,94,18,94,17,94,19,94,21,94,20,94,19,94</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>14,94,15,94,16,94,17,94,16,94,17,93,18,94,17,94,16,94,14,94</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1071,95,1072,95,1072,94,1073,94,1072,95,1071,95</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>9,96,9,95,10,95,9,95,9,96,9,95,9,96</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>6,96,5,96,5,95,6,95,5,95,6,95,7,95,6,95,6,96</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>70,189,70,188,69,188,70,187,70,188,71,188,72,188,71,188,71,189,70,189</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>172,107,172,106,171,106,172,105,172,106,171,106,172,106,172,107</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>73,194,72,193,72,192,71,191,72,191,72,190,73,190,74,191,75,191,75,192,74,193,73,193,73,194</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>318,129,317,129,317,128,318,128,319,128,320,128,322,128,323,127,322,127,322,128,323,127,324,127,322,128,321,128,322,128,320,128,318,129</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>310,118,311,117,312,117,313,116,314,116,315,115,318,115,319,115,320,115,321,115,324,115,325,115,326,115,326,114,327,114,327,115,327,114,328,114,327,114,328,113,329,113,329,112,329,111,329,110,331,109,332,108,332,109,333,109,334,109,334,108,335,108,335,109,336,109,336,111,336,113,337,114,337,115,338,115,338,116,339,116,338,117,338,116,337,116,337,117,337,116,337,117,337,116,337,117,336,117,335,117,336,117,335,117,334,117,334,118,333,117,333,118,333,117,332,118,332,119,332,118,331,119,331,118,331,119,330,119,331,118,330,119,330,118,330,119,329,119,330,119,329,119,329,120,328,120,328,121,327,121,327,122,327,123,328,122,328,123,327,123,326,123,326,124,327,124,328,124,327,124,328,125,329,125,330,125,329,125,329,124,330,125,328,126,328,125,327,125,327,126,326,126,326,125,326,126,326,125,325,125,325,126,323,127,323,126,323,127,322,126,322,127,321,127,320,127,319,127,318,128,318,127,318,128,317,128,317,129,318,129,317,130,317,131,317,132,316,132,316,133,316,132,316,133,315,133,315,134,315,133,314,133,314,132,313,132,313,131,314,131,313,131,313,132,313,133,314,134,314,135,314,136,313,137,313,138,312,138,312,139,311,139,312,138,312,137,313,137,312,137,313,137,312,137,312,136,312,135,312,136,312,135,311,136,311,135,311,136,311,135,312,135,311,135,311,134,310,134,311,134,310,134,311,133,311,134,311,133,312,132,311,132,312,132,311,132,311,133,311,132,310,132,310,133,310,134,310,133,310,134,310,135,309,134,310,135,310,136,311,136,310,136,309,136,309,135,309,136,309,135,308,135,308,134,308,135,308,136,308,135,309,135,308,136,309,136,310,136,311,137,311,138,310,138,310,137,310,138,310,137,309,136,308,136,309,137,310,138,311,138,310,138,311,138,311,139,310,138,310,139,309,138,310,139,311,139,310,139,311,139,310,140,310,139,309,139,308,139,308,138,308,139,309,139,310,139,310,140,311,140,312,140,312,141,312,142,313,143,312,142,312,141,312,140,312,141,311,141,312,141,312,142,311,142,310,142,311,142,310,142,309,142,309,143,311,143,311,144,312,143,312,144,311,144,310,144,309,144,308,144,309,144,310,145,309,145,310,145,309,146,308,145,309,146,310,146,310,145,310,146,310,145,310,146,311,146,310,145,311,146,310,146,311,146,310,146,309,146,308,146,308,147,307,147,308,147,307,146,307,147,306,148,306,149,305,149,304,149,303,149,303,150,302,150,302,151,302,150,302,151,301,151,302,151,301,151,301,152,300,152,300,153,299,153,300,153,299,153,298,153,297,153,298,153,298,154,298,153,297,153,298,154,297,154,297,153,297,154,297,155,296,155,296,156,296,155,296,156,296,157,295,156,296,157,295,157,295,158,295,159,296,160,296,162,297,163,297,164,298,165,298,166,298,167,298,166,298,165,297,165,297,164,297,165,298,166,298,168,299,169,299,170,299,171,299,172,299,173,299,174,298,174,299,174,298,175,297,175,296,175,297,175,296,174,296,173,295,173,296,173,295,173,294,173,295,173,294,173,294,172,294,171,293,171,294,171,294,170,294,171,293,171,293,170,292,169,292,168,291,168,292,168,292,167,291,166,291,167,292,167,291,167,291,166,291,165,292,165,292,164,291,164,291,163,290,163,290,162,289,162,289,161,288,160,287,160,286,161,285,161,284,161,283,161,284,161,283,161,283,160,282,160,283,160,282,160,281,159,280,159,281,159,280,159,278,159,279,159,278,159,279,159,278,159,278,160,277,160,277,159,277,160,276,160,276,159,276,158,275,158,275,160,274,159,274,160,274,159,273,159,272,160,272,159,271,159,272,160,271,160,270,160,269,159,269,160,268,160,269,160,270,160,271,160,270,160,270,161,271,161,271,160,271,161,271,162,270,161,271,162,270,162,271,162,272,162,272,163,272,164,272,163,271,164,272,163,271,163,270,163,270,162,269,162,269,163,268,163,268,162,268,163,267,163,266,163,265,162,266,163,266,162,266,163,266,162,266,163,266,162,265,162,265,161,264,161,263,161,263,162,262,162,261,162,260,161,258,161,257,161,256,162,255,162,256,162,255,162,255,161,255,162,254,161,255,162,254,162,255,162,255,163,254,163,253,164,252,164,252,165,251,165,251,164,250,165,250,164,250,165,250,164,250,165,250,166,249,166,249,165,249,166,248,166,248,167,247,167,248,167,247,169,247,168,247,169,247,168,246,168,246,169,247,169,247,170,247,171,247,172,248,172,248,173,248,172,248,173,247,173,247,172,246,172,245,172,244,172,243,171,242,171,242,170,241,170,241,169,241,168,240,168,240,167,239,166,239,165,238,165,238,164,237,163,236,162,235,162,235,161,234,161,233,161,232,161,231,161,231,162,231,163,230,163,230,164,229,163,228,163,226,162,225,161,225,160,225,159,224,158,223,158,222,157,221,156,220,155,215,155,215,157,206,157,201,155,195,153,195,152,194,152,188,153,188,152,188,153,188,152,188,153,188,152,187,151,187,150,185,149,184,149,184,148,183,148,182,148,181,148,181,147,180,147,179,147,178,147,178,146,178,145,177,145,177,144,176,144,176,143,175,143,175,142,174,142,174,141,174,140,173,140,173,139,172,139,172,138,172,137,172,138,173,138,173,137,172,137,172,136,173,136,174,136,175,136,174,136,173,136,172,136,172,137,171,137,171,136,171,137,171,136,170,136,170,135,169,135,168,134,169,133,168,132,168,131,167,130,166,129,167,128,167,127,167,126,167,125,167,124,166,123,166,122,166,121,166,120,167,120,167,121,167,120,167,119,167,118,167,117,167,116,168,116,168,115,168,114,168,113,168,112,169,112,170,112,169,112,168,112,167,112,167,111,168,111,168,110,167,110,168,110,167,109,167,110,167,109,167,108,166,107,165,106,166,106,166,105,165,105,166,105,167,106,170,106,171,106,172,107,171,107,170,108,171,108,170,108,171,108,171,107,172,107,172,108,171,108,172,108,171,108,172,108,172,109,171,109,172,108,171,108,171,109,171,108,171,109,170,109,171,109,172,109,173,108,172,108,173,108,172,107,173,107,173,106,172,106,172,105,171,105,172,105,172,104,171,104,179,104,189,104,199,104,209,104,218,104,228,104,238,104,248,104,254,104,254,103,254,102,255,103,255,104,256,104,257,104,258,105,259,105,260,105,262,105,261,105,262,105,262,106,263,106,263,105,264,106,265,106,266,106,267,106,268,106,269,106,270,106,270,107,270,106,271,106,271,107,273,106,274,106,277,107,280,108,283,109,285,110,285,111,286,111,287,111,287,112,288,112,289,112,289,113,291,114,292,114,292,117,293,119,293,120,292,121,292,122,292,123,291,123,290,124,290,125,291,125,292,125,295,124,296,124,299,123,302,122,303,122,302,121,302,120,303,120,306,120,309,120,310,118</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>136,79,136,78,137,79,136,78,135,76,135,75,135,76,137,76,137,77,138,78,138,77,137,77,137,76,137,77,137,78,138,78,137,78,138,78,138,79,137,78,137,79,136,79</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>81,77,81,76,80,76,81,76,80,76,81,76,81,75,82,75,82,76,83,75,83,76,84,75,84,76,83,76,82,76,81,76,81,77</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>100,70,99,70,100,69,99,69,100,69,101,69,100,70</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>23,70,22,69,22,70,20,69,21,69,22,69,23,70</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>41,71,39,71,38,70,38,71,38,70,37,70,39,70,40,70,40,69,41,69,41,70,42,70,42,69,42,70,43,71,41,71</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>96,71,97,70,98,70,98,69,98,70,99,70,98,70,97,70,97,71,96,71</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>31,62,30,62,30,61,29,61,27,60,26,60,25,61,24,60,24,59,25,59,25,60,26,60,27,60,28,59,29,60,30,60,31,60,32,60,32,61,32,60,33,61,32,61,31,61,31,62</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>136,82,135,82,134,81,135,80,135,81,135,80,134,81,134,80,133,80,134,80,133,80,134,79,133,79,134,79,133,79,134,79,133,79,132,78,133,78,134,78,133,78,134,78,135,78,135,79,136,81,136,82</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>117,42,116,50,116,60,117,70,118,70,120,70,120,69,122,69,122,70,122,71,123,71,124,71,126,72,127,73,127,74,129,73,130,73,130,72,131,72,130,72,133,71,134,72,135,72,134,72,135,73,136,73,136,74,137,74,138,74,138,75,139,75,140,76,142,78,143,79,142,79,143,79,143,80,144,80,144,81,145,81,146,81,147,81,148,82,149,82,149,83,149,84,150,85,149,85,148,86,147,86,147,85,146,85,147,85,148,85,148,84,147,85,147,83,146,83,146,82,146,83,145,83,145,82,144,83,144,84,143,84,143,83,144,83,144,82,145,82,144,82,144,81,143,81,142,81,143,81,142,81,142,80,141,80,141,79,140,79,139,79,140,79,140,78,139,79,139,78,140,78,139,78,139,77,140,77,139,77,138,77,138,76,138,77,137,76,138,76,137,75,138,75,137,76,136,75,135,75,135,74,135,75,135,74,134,74,133,73,134,72,133,72,133,73,134,73,133,73,133,74,134,74,134,75,134,76,133,75,132,75,131,74,132,74,131,74,131,73,131,74,130,74,129,73,130,74,128,73,129,74,128,74,129,74,130,74,130,75,131,75,131,76,131,75,130,75,130,76,130,75,130,76,129,76,129,75,128,75,127,75,126,74,125,73,124,73,123,73,122,72,121,72,120,72,121,72,121,71,122,71,121,71,122,72,121,72,122,72,122,71,121,70,121,71,120,71,119,71,118,71,115,71,116,71,116,70,115,70,114,71,113,70,111,70,108,70,108,71,107,70,106,70,105,70,105,69,106,69,106,68,105,68,104,69,103,69,102,69,103,69,103,68,102,69,102,68,102,69,102,68,101,69,101,68,100,68,99,68,101,68,100,68,99,68,100,68,99,68,99,67,100,67,101,67,100,67,99,68,98,68,99,68,98,67,98,68,98,67,98,68,97,68,97,67,97,68,97,67,97,68,96,68,97,68,96,68,95,68,96,67,95,67,94,67,94,68,95,67,95,68,94,68,93,68,94,68,94,69,95,68,95,69,94,69,93,69,94,69,95,69,96,69,95,69,95,70,94,70,95,70,94,70,94,71,94,70,94,71,93,71,92,71,92,70,92,71,92,70,91,70,91,71,90,71,90,72,90,71,89,71,90,71,89,72,89,71,89,72,88,72,89,71,88,72,87,73,86,73,87,73,86,73,85,73,84,73,84,72,85,72,86,72,87,71,86,71,85,72,84,71,84,70,85,70,85,69,86,69,85,68,86,68,87,68,88,67,89,68,90,68,92,68,91,68,89,67,90,67,91,66,92,66,91,66,90,66,90,67,88,67,88,66,88,67,86,67,84,68,83,69,82,69,83,69,82,70,81,70,80,70,81,70,82,70,81,71,80,71,81,71,80,71,80,72,80,71,80,72,79,72,80,71,79,71,79,72,79,71,78,72,79,72,78,72,77,72,78,72,77,73,78,73,79,74,80,74,79,74,79,75,78,75,77,75,76,76,77,76,76,76,77,76,76,76,75,76,74,76,74,77,73,77,74,77,73,77,72,78,71,78,70,79,70,80,69,80,69,79,69,80,68,80,67,80,67,81,66,81,66,80,66,81,65,81,66,81,65,81,64,81,64,82,64,81,64,82,65,82,64,82,65,82,64,82,64,83,64,82,64,83,64,82,63,82,64,82,63,82,64,82,64,83,63,83,63,82,63,83,62,83,61,83,61,84,60,84,61,84,60,84,61,83,60,83,61,83,60,83,59,83,59,84,58,84,57,84,58,84,57,84,56,84,55,84,56,84,55,84,54,84,54,85,53,85,54,85,53,85,52,85,51,85,52,85,52,86,52,85,51,86,51,85,50,85,50,86,49,86,50,86,49,86,50,86,50,85,51,85,52,84,53,83,55,83,56,83,57,83,56,83,57,83,58,83,57,83,58,83,59,83,58,83,58,82,60,81,62,80,63,80,64,80,63,80,64,79,65,79,65,78,66,78,67,78,66,78,67,77,67,76,68,76,67,76,67,75,68,74,69,74,69,73,68,74,65,75,64,74,64,73,65,73,65,74,66,74,65,74,65,73,64,73,63,74,63,75,62,75,61,74,60,74,59,74,59,73,58,73,57,74,56,74,55,74,54,75,53,75,54,74,54,75,54,74,55,74,54,74,54,73,55,73,54,73,53,73,54,73,54,72,54,71,53,71,53,70,52,70,53,70,52,70,52,69,53,69,54,68,53,69,53,68,53,69,52,69,52,70,51,70,52,70,52,71,51,70,51,71,50,71,48,71,47,71,46,70,45,70,46,70,45,70,45,69,44,69,45,69,43,69,44,69,44,68,45,68,44,68,45,68,46,68,45,68,47,68,46,69,47,69,47,68,48,68,48,69,49,68,48,68,49,68,48,68,46,68,45,68,44,68,44,67,45,67,44,67,43,67,44,67,44,66,45,66,44,66,44,67,43,67,42,67,42,66,41,66,41,65,41,66,42,65,41,65,42,65,43,65,42,65,42,64,43,63,44,63,45,63,46,63,45,63,46,62,45,63,45,62,45,61,46,61,47,61,46,61,47,61,48,61,49,61,51,61,53,60,56,60,57,59,57,58,56,57,55,57,56,57,57,57,57,56,56,56,57,56,56,56,55,56,54,56,53,56,52,57,51,57,50,57,49,57,50,57,49,57,48,57,47,57,45,57,41,57,40,57,40,56,39,56,39,55,40,55,41,55,39,54,37,54,36,54,35,54,35,53,36,53,35,53,35,54,36,53,37,53,38,53,39,53,41,52,42,52,43,52,42,52,43,51,44,51,45,51,48,51,49,51,48,51,48,52,47,52,48,52,51,52,52,52,53,52,54,52,54,53,54,52,55,52,56,52,57,52,56,51,55,51,54,51,54,52,54,51,53,50,52,50,53,50,53,51,54,51,55,51,56,51,58,51,59,51,58,51,57,51,56,51,55,51,54,50,55,50,54,49,53,49,52,50,52,49,53,49,52,49,51,49,48,49,48,48,47,48,45,47,43,46,42,46,41,46,39,45,40,45,41,45,40,45,41,45,41,44,44,44,47,44,48,43,50,42,50,43,50,42,51,41,50,41,51,41,52,41,52,40,54,40,53,40,54,40,55,40,57,40,58,39,59,39,60,39,59,39,60,39,59,40,60,39,60,40,60,39,62,39,61,39,60,39,59,39,62,38,61,38,62,38,63,38,62,38,64,38,65,38,66,38,67,37,68,37,69,37,70,36,70,37,71,37,72,37,73,37,72,38,71,38,72,38,73,38,74,37,74,38,74,37,75,37,76,37,76,38,75,38,76,38,77,38,78,38,81,38,82,38,81,38,82,38,83,38,82,38,82,39,83,39,82,39,84,39,85,39,86,39,87,39,88,39,89,39,90,39,91,39,92,39,93,39,94,39,94,40,95,39,96,40,98,40,101,40,102,40,103,40,104,41,105,41,107,40,109,40,110,40,112,41,113,41,114,41,115,41,115,42,116,42,116,41,117,42</Points>\n    <Keys>United States, USA, North America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>365,348,365,347,365,346,366,345,365,345,366,345,366,344,366,343,366,342,367,341,368,341,369,341,370,341,371,342,371,343,372,343,371,343,371,344,372,344,372,343,373,343,374,344,375,345,376,345,376,346,377,346,378,346,378,347,379,348,380,348,380,349,379,350,379,351,379,352,379,353,378,353,378,354,377,354,377,355,377,354,376,354,377,355,376,355,375,355,374,355,373,355,372,355,371,355,370,355,369,354,368,354,367,354,366,354,365,353,364,352,364,351,364,350,365,350,365,349,365,348</Points>\n    <Keys>Uruguay, URY, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>715,114,716,114,722,118,722,117,723,118,723,117,723,118,726,120,729,120,731,120,733,120,734,119,735,120,736,121,737,122,738,122,738,123,738,124,739,124,739,125,740,127,741,127,742,127,743,127,744,127,744,128,745,129,745,128,746,128,746,127,747,127,747,126,748,126,748,125,749,125,750,125,750,124,751,124,752,124,753,124,752,124,752,125,751,125,750,126,751,126,752,126,752,127,753,127,754,127,754,126,754,127,754,126,755,126,755,127,756,127,757,127,757,128,758,128,759,128,758,128,758,129,757,129,756,129,755,130,756,130,755,130,754,130,753,130,752,130,751,130,751,129,752,128,751,128,752,128,751,128,751,127,751,128,750,128,749,128,749,129,748,128,747,129,748,130,747,130,746,130,745,130,746,130,747,130,746,130,746,131,745,131,745,132,744,132,743,132,742,132,742,133,743,133,743,134,743,133,744,134,744,135,744,136,745,136,744,136,744,137,743,138,743,139,742,139,741,139,741,138,740,138,739,138,739,137,740,137,739,136,738,136,737,136,736,136,735,135,734,135,733,134,732,134,731,133,730,132,729,132,728,131,727,131,727,130,727,129,726,129,726,128,725,128,725,127,724,127,723,127,722,127,721,127,720,126,720,125,719,125,720,124,719,124,720,124,719,124,718,124,718,123,717,123,716,123,715,122,715,123,714,122,714,123,715,123,715,124,715,123,714,123,713,123,713,124,712,124,711,124,711,125,710,125,710,126,711,126,711,127,710,127,707,127,707,115,715,114</Points>\n    <Keys>Uzbekistan, UZB, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1044,300,1043,299,1044,299,1044,300</Points>\n    <Keys>Vanuatu, VUT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1045,304,1044,304,1044,303,1045,303,1045,304</Points>\n    <Keys>Vanuatu, VUT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1047,308,1047,307,1046,307,1047,307,1046,307,1047,306,1047,307,1047,308</Points>\n    <Keys>Vanuatu, VUT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1045,301,1044,301,1044,300,1044,301,1045,301</Points>\n    <Keys>Vanuatu, VUT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1048,309,1047,309,1047,308,1048,308,1048,309</Points>\n    <Keys>Vanuatu, VUT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1044,298,1044,297,1044,298</Points>\n    <Keys>Vanuatu, VUT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1042,300,1042,299,1041,299,1041,298,1042,299,1043,300,1042,300</Points>\n    <Keys>Vanuatu, VUT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1043,297,1043,296,1044,296,1043,297</Points>\n    <Keys>Vanuatu, VUT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1037,283,1038,283,1037,283</Points>\n    <Keys>Vanuatu, VUT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>1040,297,1039,297,1039,296,1039,295,1039,294,1040,295,1040,296,1040,295,1041,295,1041,296,1041,297,1040,297</Points>\n    <Keys>Vanuatu, VUT, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>347,218,346,218,346,217,347,217,347,218,348,217,348,218,347,218</Points>\n    <Keys>Venezuela, VEN, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>320,223,319,223,320,222,321,221,321,219,322,218,322,217,323,217,324,216,325,215,326,215,325,215,324,216,324,217,325,217,325,218,324,217,325,218,325,219,324,219,323,221,324,222,323,222,324,222,323,222,324,222,324,223,325,223,326,223,326,222,326,221,325,220,325,219,325,218,326,217,327,217,328,217,329,216,330,216,330,215,329,216,329,215,329,214,330,214,330,215,330,216,331,216,332,216,333,216,334,217,335,218,334,218,335,218,335,219,336,219,338,219,339,219,341,219,342,220,343,220,344,220,345,220,346,220,346,219,347,219,348,219,349,219,348,219,347,219,347,218,347,219,348,219,348,218,348,219,349,219,350,218,351,218,352,218,353,218,354,218,354,219,353,219,351,219,350,220,351,220,351,219,351,220,352,220,351,220,351,221,351,220,351,221,351,220,352,220,352,221,353,221,353,222,353,221,353,220,353,221,354,221,355,221,355,222,356,222,357,222,357,223,356,223,357,223,356,224,356,225,355,225,356,225,357,225,358,225,359,225,360,225,360,226,359,226,359,227,358,227,358,228,357,228,358,228,358,229,359,229,358,230,357,230,356,230,356,231,356,232,355,233,357,235,358,235,358,236,357,236,357,237,356,237,355,237,355,238,354,238,353,238,352,238,351,238,351,239,351,240,350,239,349,239,348,239,347,239,347,238,346,238,345,238,346,239,347,240,347,241,347,242,348,243,347,243,349,243,349,244,348,245,347,245,347,246,346,246,345,247,344,247,344,248,343,248,343,249,343,248,342,248,341,248,339,247,339,245,338,245,338,244,338,243,337,243,337,242,336,242,337,241,338,240,337,240,337,239,336,239,336,238,336,237,336,235,336,234,337,234,337,233,337,232,336,232,335,232,334,232,333,232,332,232,331,232,329,230,328,229,327,229,326,230,325,229,324,230,323,229,323,228,322,228,322,227,322,226,322,225,321,223,320,223</Points>\n    <Keys>Venezuela, VEN, Latin America</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>852,191,852,192,852,191,852,192,853,191,853,192,853,191,854,191,854,190,854,189,853,189,853,188,852,188,851,188,851,189,850,188,849,188,849,187,848,187,848,186,848,185,848,186,847,185,847,184,846,184,846,183,847,183,847,182,848,182,848,183,849,183,849,182,850,182,850,183,850,182,851,183,852,183,852,182,853,182,854,182,854,181,855,181,855,180,856,181,857,181,857,182,858,182,859,182,860,182,860,183,859,183,859,184,860,184,860,185,860,184,861,185,862,186,863,186,863,185,863,186,864,186,863,186,862,187,861,188,861,187,861,188,860,188,860,187,859,187,860,188,860,189,859,189,859,190,858,190,858,191,857,191,857,192,857,193,856,193,856,194,857,194,857,195,858,196,859,196,859,197,859,198,860,198,860,199,861,199,861,200,862,201,863,201,863,202,863,201,863,202,864,201,864,202,865,203,865,204,866,204,865,204,866,204,866,205,866,206,867,206,867,207,867,208,867,209,867,210,868,210,867,210,867,211,868,212,868,213,868,212,868,213,868,212,867,213,868,213,867,213,867,214,867,215,867,214,867,215,867,216,866,217,865,217,865,218,864,218,863,218,863,219,862,219,861,219,860,219,860,218,860,219,859,219,860,219,860,220,859,220,860,220,859,221,859,220,858,220,859,220,859,221,860,221,859,221,858,220,859,221,859,222,858,221,857,221,857,220,857,221,858,221,858,222,857,223,856,223,855,224,855,225,854,225,854,224,854,223,854,222,854,221,855,221,855,220,854,220,853,220,853,219,854,219,855,218,856,218,857,217,857,218,858,218,858,217,857,217,857,216,858,215,859,216,859,215,860,215,860,214,861,214,862,214,862,213,862,212,862,211,862,210,862,209,862,208,862,207,862,206,862,205,863,205,862,204,861,204,861,203,862,203,862,202,861,202,860,202,860,201,859,201,859,200,859,199,858,199,858,198,857,198,857,197,856,197,856,196,855,196,855,195,855,194,854,194,853,194,852,193,851,193,851,192,852,192,852,191</Points>\n    <Keys>Vietnam, VNM, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>500,168,510,168,513,167,513,169,513,172,513,173,503,173,503,180,502,181,501,181,500,182,500,183,501,186,499,186,494,186,489,186,488,188,488,187,489,185,489,184,490,184,490,183,491,182,491,181,491,180,492,179,492,180,492,179,492,178,493,178,494,177,495,176,495,175,495,174,496,173,496,172,497,172,497,171,499,170,499,169,500,169,500,168</Points>\n    <Keys>Western Sahara, ESH, NorthAfrica</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>23,292,22,292,21,291,22,291,23,291,23,292</Points>\n    <Keys>Western Samoa, WSM, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>24,293,23,292,24,292,25,292,25,293,24,293</Points>\n    <Keys>Western Samoa, WSM, Pacific</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>695,194,695,195,697,198,698,198,698,199,699,201,698,201,697,201,696,202,696,203,696,204,695,204,695,205,694,205,692,205,691,205,691,206,690,206,688,206,687,207,687,208,686,208,685,208,684,209,684,208,683,208,683,209,682,210,681,210,680,210,679,210,678,210,676,211,675,212,674,212,675,212,674,212,673,212,672,213,671,213,670,212,669,211,669,210,669,209,669,208,668,207,669,207,668,206,668,205,667,205,668,205,668,204,668,205,668,204,668,203,668,202,668,201,669,201,669,200,669,199,669,198,670,198,671,198,671,199,672,198,673,198,676,205,682,198,695,194</Points>\n    <Keys>Yemen, YEM, Asia</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>597,113,597,112,597,113,598,112,599,112,600,112,601,113,602,113,602,114,603,115,604,115,604,116,605,117,606,117,607,116,608,117,607,117,608,118,607,118,607,119,607,120,608,120,608,121,609,121,608,121,608,122,607,122,607,123,607,124,606,123,606,124,605,124,604,124,603,124,602,124,602,125,601,125,601,124,600,124,600,123,599,123,598,123,598,124,597,124,598,124,598,125,597,125,597,124,596,124,596,123,595,123,596,123,595,123,595,122,595,121,596,121,596,120,596,121,597,121,597,120,596,120,597,120,598,120,598,119,597,119,597,118,598,119,598,118,597,118,597,117,597,116,598,116,597,116,597,115,598,115,597,115,597,114,596,114,597,114,596,114,597,114,596,114,596,113,597,113</Points>\n    <Keys>Yugoslavia, YUG, Europe</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>633,244,633,245,632,246,631,247,630,247,630,248,629,248,629,249,629,250,629,251,628,252,629,252,628,252,628,253,628,255,627,256,627,257,626,257,626,258,627,259,626,259,627,259,627,260,627,261,627,262,628,263,628,264,628,265,628,267,628,268,628,269,629,271,630,271,631,272,631,273,632,275,631,275,630,275,628,276,626,276,626,277,625,278,625,279,626,280,625,281,626,283,625,283,625,284,625,285,625,286,626,287,627,288,628,288,628,287,629,287,629,289,629,291,628,291,629,290,628,290,627,291,626,291,626,290,626,289,625,289,625,288,624,288,623,288,623,287,622,287,622,286,621,286,621,285,620,286,620,287,619,286,618,286,617,286,616,286,616,285,615,285,616,284,615,284,614,284,614,285,613,285,612,285,613,285,613,284,612,284,612,283,611,283,611,284,610,283,609,284,608,284,607,284,606,284,606,283,606,282,606,280,605,279,605,278,605,277,605,276,605,275,605,274,605,273,605,272,603,272,601,272,601,271,600,271,598,271,598,272,598,273,598,274,596,274,595,274,594,275,593,275,592,275,592,274,591,274,591,273,591,272,590,272,590,271,590,270,590,269,589,269,589,268,587,268,585,268,583,268,581,268,580,268,579,268,578,268,577,269,577,268,576,268,577,268,577,266,578,265,579,265,579,264,579,265,580,265,581,265,581,264,583,263,583,264,583,265,584,265,585,264,585,263,586,263,587,262,588,260,588,259,588,257,589,256,590,254,591,254,592,253,593,252,593,251,593,250,593,249,593,248,594,246,594,244,594,243,595,243,595,242,595,241,595,240,595,239,595,238,595,237,596,237,597,236,597,235,598,235,599,235,600,236,601,236,601,237,602,237,603,238,603,237,604,238,605,238,606,238,607,238,607,237,608,237,608,236,609,236,609,237,610,237,611,236,612,236,613,235,614,236,615,236,615,235,616,235,616,234,617,235,618,235,619,235,620,235,621,235,622,235,622,236,623,236,623,237,624,237,625,237,625,238,625,237,626,237,627,237,628,236,629,237,629,238,630,238,630,239,631,239,631,240,632,239,632,240,632,241,632,242,632,243,633,243,633,244</Points>\n    <Keys>Congo,DRC, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>626,300,624,301,623,301,622,302,622,303,621,304,620,305,619,304,618,304,617,305,617,304,616,304,615,304,615,303,614,303,612,303,610,303,609,303,606,300,606,299,605,294,605,290,607,290,609,290,612,290,612,289,611,289,612,288,612,287,611,287,611,286,612,285,611,283,612,283,612,284,613,284,613,285,612,285,613,285,614,285,614,284,615,284,616,284,615,285,616,285,616,286,617,286,618,286,619,286,620,287,620,286,621,285,621,286,622,286,622,287,623,287,623,288,624,288,625,288,625,289,626,289,626,290,626,291,627,291,628,290,629,290,628,291,629,291,629,289,629,287,628,287,628,288,627,288,626,287,625,286,625,285,625,284,625,283,626,283,625,281,626,280,625,279,625,278,626,277,626,276,628,276,630,275,631,275,632,275,632,276,633,276,634,276,634,277,635,277,635,278,636,278,637,278,638,278,638,279,639,279,639,280,640,280,639,281,640,281,640,282,641,282,640,283,639,283,640,284,639,285,639,286,639,287,640,287,640,288,640,287,640,288,639,288,638,289,639,289,638,290,639,290,638,291,638,292,639,293,639,292,639,293,636,294,634,294,632,295,630,295,630,296,631,296,631,297,629,297,627,298,626,298,626,299,626,300</Points>\n    <Keys>Zambia, ZMB, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Polygon>\n    <Points>626,300,626,299,626,298,627,298,629,297,631,297,631,299,632,299,633,299,634,299,635,299,635,300,636,300,637,300,638,300,638,301,638,302,639,303,638,303,639,303,639,304,638,304,638,305,639,305,638,305,639,306,638,306,638,307,638,308,638,309,638,310,638,309,638,310,639,310,639,311,638,311,637,312,637,313,637,314,637,315,637,314,634,318,633,318,633,317,632,317,630,318,630,317,629,317,628,317,627,317,627,316,625,315,624,315,623,314,623,313,623,312,622,312,621,312,621,311,620,311,619,310,618,309,619,309,618,309,617,308,617,307,616,306,616,305,615,305,615,304,616,304,617,304,617,305,618,304,619,304,620,305,621,304,622,303,622,302,623,301,624,301,626,300</Points>\n    <Keys>Zimbabwe, ZWE, Sub Saharan Africa</Keys>\n  </Polygon>\n  <Text>\n    <Value>United States</Value>\n    <Location>196,123</Location>\n  </Text>\n  <Text>\n    <Value>Canada</Value>\n    <Location>179,69</Location>\n  </Text>\n  <Text>\n    <Value>Brazil</Value>\n    <Location>372,274</Location>\n  </Text>\n  <Text>\n    <Value>Greenland</Value>\n    <Location>395,25</Location>\n  </Text>\n  <Text>\n    <Value>Iceland</Value>\n    <Location>468,62</Location>\n  </Text>\n  <Text>\n    <Value>United</Value>\n    <Location>518,51</Location>\n  </Text>\n  <Text>\n    <Value>Kingdom</Value>\n    <Location>509,62</Location>\n  </Text>\n  <Text>\n    <Value>Ireland</Value>\n    <Location>477,94</Location>\n  </Text>\n  <Text>\n    <Value>Algeria</Value>\n    <Location>526,162</Location>\n  </Text>\n  <Text>\n    <Value>Libya</Value>\n    <Location>577,164</Location>\n  </Text>\n  <Text>\n    <Value>South Africa</Value>\n    <Location>580,357</Location>\n  </Text>\n  <Text>\n    <Value>Angola</Value>\n    <Location>566,284</Location>\n  </Text>\n  <Text>\n    <Value>Peru</Value>\n    <Location>306,280</Location>\n  </Text>\n  <Text>\n    <Value>Bolivia</Value>\n    <Location>334,296</Location>\n  </Text>\n  <Text>\n    <Value>Chile</Value>\n    <Location>295,340</Location>\n  </Text>\n  <Text>\n    <Value>Russia</Value>\n    <Location>751,63</Location>\n  </Text>\n  <Text>\n    <Value>China</Value>\n    <Location>819,140</Location>\n  </Text>\n  <Text>\n    <Value>Japan</Value>\n    <Location>966,138</Location>\n  </Text>\n  <Text>\n    <Value>Australia</Value>\n    <Location>914,321</Location>\n  </Text>\n  <Text>\n    <Value>India</Value>\n    <Location>765,178</Location>\n  </Text>\n  <Text>\n    <Value>Egypt</Value>\n    <Location>613,171</Location>\n  </Text>\n  <Text>\n    <Value>Sudan</Value>\n    <Location>609,204</Location>\n  </Text>\n  <Text>\n    <Value>Iran</Value>\n    <Location>691,148</Location>\n  </Text>\n  <Text>\n    <Value>New Zealand</Value>\n    <Location>1033,396</Location>\n  </Text>\n  <Text>\n    <Value>Philippines</Value>\n    <Location>915,203</Location>\n  </Text>\n  <Text>\n    <Value>Antarctica</Value>\n    <Location>521,472</Location>\n  </Text>\n  <Text>\n    <Value>Mexico</Value>\n    <Location>217,173</Location>\n  </Text>\n  <Text>\n    <Value>Argentina</Value>\n    <Location>331,354</Location>\n  </Text>\n  <Text>\n    <Value>Congo</Value>\n    <Location>589,256</Location>\n  </Text>\n  <Text>\n    <Value>Madagascar</Value>\n    <Location>669,331</Location>\n  </Text>\n  <Text>\n    <Value>Indonesia</Value>\n    <Location>851,278</Location>\n  </Text>\n  <Text>\n    <Value>Papua New Guinea</Value>\n    <Location>972,250</Location>\n  </Text>\n  <Text>\n    <Value> PAK</Value>\n    <Location>724,163</Location>\n  </Text>\n  <Text>\n    <Value>Colombia</Value>\n    <Location>300,234</Location>\n    <FontFamily>Arial</FontFamily>\n    <FontSize>6</FontSize>\n    <FontWeight>Normal</FontWeight>\n    <FontStyle>Normal</FontStyle>\n    <TextDecoration>None</TextDecoration>\n  </Text>\n</MapData>"
  },
  {
    "path": "RdlGtk3/CairoPdfWriter.cs",
    "content": "// \n//  CairoPdfWriter.cs\n//  \n//  Author:\n//       Krzysztof Marecki \n//\n// Copyright (c) 2010-2011 Krzysztof Marecki \n//\n// This file is part of the NReports project\n// This file is part of the My-FyiReporting project \n//\t\n//   Licensed under the Apache License, Version 2.0 (the \"License\");\n//   you may not use this file except in compliance with the License.\n//   You may obtain a copy of the License at\n//\n//       http://www.apache.org/licenses/LICENSE-2.0\n//\n//   Unless required by applicable law or agreed to in writing, software\n//   distributed under the License is distributed on an \"AS IS\" BASIS,\n//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//   See the License for the specific language governing permissions and\n//   limitations under the License.\n\nusing Cairo;\nusing Majorsilence.Reporting.Rdl;\nusing System;\nusing System.IO;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.RdlGtk3\n{\n    public class CairoPdfWriter\n    {\n        #region IPdfWriter implementation\n\n        public async Task<byte[]> GetFileBytes(Report report)\n        {\n            Pages pages = await report.BuildPages();\n            int width = (int)report.PageWidthPoints;\n            int height = (int)report.PageHeightPoints;\n            string filename = $\"gen-{Guid.NewGuid()}.pdf\";\n\n            try\n            {\n                using (PdfSurface pdf = new(filename, width, height))\n                using (Context g = new(pdf))\n                using (RenderCairo render = new(g))\n                {\n                    render.RunPages(pages);\n                }\n\n                byte[] bytes = await File.ReadAllBytesAsync(filename);\n                return bytes;\n            }\n            finally\n            {\n                if (File.Exists(filename))\n                {\n                    File.Delete(filename);\n                }\n            }\n        }\n\n        #endregion\n    }\n}"
  },
  {
    "path": "RdlGtk3/Extensions/CairoExtensions.cs",
    "content": "// \n// CairoExtensions.cs\n//  \n// Author:\n//       Jonathan Pobst <monkey@jpobst.com>\n// \n// Copyright (c) 2010 Jonathan Pobst\n// \n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n// \n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nusing Cairo;\nusing Gdk;\nusing Color = Cairo.Color;\nusing Rectangle = Cairo.Rectangle;\n#if DRAWINGCOMPAT\nusing Draw2 = Majorsilence.Drawing;\n\n#else\nusing Draw2 = System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.RdlGtk3\n{\n    public static class CairoExtensions\n    {\n        public static bool ContainsPoint(this Rectangle r, double x, double y)\n        {\n            if (x < r.X || x >= r.X + r.Width)\n            {\n                return false;\n            }\n\n            if (y < r.Y || y >= r.Y + r.Height)\n            {\n                return false;\n            }\n\n            return true;\n        }\n\n        public static ImageSurface Clone(this ImageSurface surf)\n        {\n            ImageSurface newsurf = new(surf.Format, surf.Width, surf.Height);\n\n            using (Context g = new(newsurf))\n            {\n                g.SetSource(surf);\n                g.Paint();\n            }\n\n            return newsurf;\n        }\n\n        public static Color ToCairoColor(this Draw2.Color color)\n        {\n            return new Color(color.R / 255f, color.G / 255f, color.B / 255f, color.A / 255f);\n        }\n        // Most of these functions return an affected area\n        // This can be ignored if you don't need it\n\n        #region context\n\n        public static Rectangle DrawRectangle(this Context g, Rectangle r, Color color, int lineWidth)\n        {\n            // Put it on a pixel line\n            if (lineWidth == 1)\n            {\n                r = new Rectangle(r.X - 0.5, r.Y - 0.5, r.Width, r.Height);\n            }\n\n            g.Save();\n\n            g.MoveTo(r.X, r.Y);\n            g.LineTo(r.X + r.Width, r.Y);\n            g.LineTo(r.X + r.Width, r.Y + r.Height);\n            g.LineTo(r.X, r.Y + r.Height);\n            g.LineTo(r.X, r.Y);\n\n            g.SetSourceColor(color);\n            g.LineWidth = lineWidth;\n            g.LineCap = LineCap.Square;\n\n            Rectangle dirty = g.StrokeExtents();\n            g.Stroke();\n\n            g.Restore();\n\n            return dirty;\n        }\n\n\n        public static Rectangle FillRectangle(this Context g, Rectangle r, Color color)\n        {\n            g.Save();\n\n            g.MoveTo(r.X, r.Y);\n            g.LineTo(r.X + r.Width, r.Y);\n            g.LineTo(r.X + r.Width, r.Y + r.Height);\n            g.LineTo(r.X, r.Y + r.Height);\n            g.LineTo(r.X, r.Y);\n\n            g.SetSourceColor(color);\n\n            Rectangle dirty = g.StrokeExtents();\n\n            g.Fill();\n            g.Restore();\n\n            return dirty;\n        }\n\n        public static Rectangle FillRectangle(this Context g, Rectangle r, Pattern pattern)\n        {\n            g.Save();\n\n            g.MoveTo(r.X, r.Y);\n            g.LineTo(r.X + r.Width, r.Y);\n            g.LineTo(r.X + r.Width, r.Y + r.Height);\n            g.LineTo(r.X, r.Y + r.Height);\n            g.LineTo(r.X, r.Y);\n\n#pragma warning disable CS0618 // Type or member is obsolete\n            g.Pattern = pattern;\n#pragma warning restore CS0618 // Type or member is obsolete\n\n            Rectangle dirty = g.StrokeExtents();\n            g.Fill();\n\n            g.Restore();\n\n            return dirty;\n        }\n\n        public static void DrawPixbufRect(this Context g, Pixbuf pixbuf, Rectangle r, float scale)\n        {\n            double wScale = r.Width / scale / pixbuf.Width;\n            double hScale = r.Height / scale / pixbuf.Height;\n            g.Save();\n            g.Scale(scale * wScale, scale * hScale);\n            CairoHelper.SetSourcePixbuf(g, pixbuf, (int)(r.X / scale / wScale), (int)(r.Y / scale / hScale));\n            g.Paint();\n            g.Restore();\n        }\n\n        #endregion\n    }\n}"
  },
  {
    "path": "RdlGtk3/GlobalSuppressions.cs",
    "content": "﻿// This file is used by Code Analysis to maintain SuppressMessage\n// attributes that are applied to this project.\n// Project-level suppressions either have no target or are given\n// a specific target and scoped to a namespace, type, member, etc.\n\nusing System.Diagnostics.CodeAnalysis;\n\n#if !DRAWINGCOMPAT\n[assembly: SuppressMessage(\"Interoperability\", \"CA1416:Validate platform compatibility\",\n    Justification = \"System.Drawing usage is intentional\")]\n#endif"
  },
  {
    "path": "RdlGtk3/MainWindow.cs",
    "content": "using Gtk;\nusing Majorsilence.Reporting.Rdl;\nusing System;\nusing System.IO;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.RdlGtk3\n{\n    public class MainWindow : Window\n    {\n        private SpinButton CurrentPage;\n        private Button FirstPageButton;\n        private Box hbox1;\n        private Button LastPageButton;\n        private Button NextButton;\n        private Button OpenButton;\n        private Label PageCountLabel;\n        private Button PreviousButton;\n        private Button PrintButton;\n        private ReportViewer reportviewer1;\n        private Button SaveButton;\n        private ScrolledWindow scrolledwindow1;\n        private Box vbox1;\n\n        public MainWindow()\n            : base(WindowType.Toplevel)\n        {\n            Build();\n            Title = \"Report Viewer\";\n        }\n\n        protected virtual void Build()\n        {\n            reportviewer1 = new ReportViewer();\n            SetDefaultSize(800, 600);\n            vbox1 = new Box(Orientation.Vertical, 3);\n            vbox1.Name = \"vbox1\";\n\n            hbox1 = new Box(Orientation.Horizontal, 7);\n            hbox1.Name = \"hbox1\";\n\n            OpenButton = new Button();\n            OpenButton.CanFocus = true;\n            OpenButton.Name = \"OpenButton\";\n#pragma warning disable CS0612 // Type or member is obsolete\n            OpenButton.UseStock = true;\n#pragma warning restore CS0612 // Type or member is obsolete\n            OpenButton.UseUnderline = true;\n            OpenButton.Label = \"gtk-open\";\n            OpenButton.Clicked += OnFileOpen_Activated;\n            hbox1.PackStart(OpenButton, false, false, 0);\n\n            SaveButton = new Button();\n            SaveButton.CanFocus = true;\n            SaveButton.Name = \"SaveButton\";\n#pragma warning disable CS0612 // Type or member is obsolete\n            SaveButton.UseStock = true;\n#pragma warning restore CS0612 // Type or member is obsolete\n            SaveButton.UseUnderline = true;\n            SaveButton.Label = \"gtk-save\";\n            SaveButton.Clicked += OnFileSave_Activated;\n            hbox1.PackStart(SaveButton, false, false, 0);\n\n            PrintButton = new Button();\n            PrintButton.CanFocus = true;\n            PrintButton.Name = \"PrintButton\";\n#pragma warning disable CS0612 // Type or member is obsolete\n            PrintButton.UseStock = true;\n#pragma warning restore CS0612 // Type or member is obsolete\n            PrintButton.UseUnderline = true;\n            PrintButton.Label = \"gtk-print\";\n            PrintButton.Clicked += OnFilePrint_Activated;\n            hbox1.PackStart(PrintButton, false, false, 0);\n\n            FirstPageButton = new Button();\n            FirstPageButton.CanFocus = true;\n            FirstPageButton.Name = \"FirstPageButton\";\n#pragma warning disable CS0612 // Type or member is obsolete\n            FirstPageButton.UseStock = true;\n#pragma warning restore CS0612 // Type or member is obsolete\n            FirstPageButton.UseUnderline = true;\n            FirstPageButton.Label = \"gtk-goto-first\";\n            FirstPageButton.Clicked += OnFirstPageButton_Activated;\n            //this.hbox1.PackStart(this.FirstPageButton, false, false, 0);\n\n            PreviousButton = new Button();\n            PreviousButton.CanFocus = true;\n            PreviousButton.Name = \"PreviousButton\";\n#pragma warning disable CS0612 // Type or member is obsolete\n            PreviousButton.UseStock = true;\n#pragma warning restore CS0612 // Type or member is obsolete\n            PreviousButton.UseUnderline = true;\n            PreviousButton.Label = \"gtk-go-back\";\n            PreviousButton.Clicked += OnPreviousButton_Activated;\n            //this.hbox1.PackStart(this.PreviousButton, false, false, 0);\n\n            NextButton = new Button();\n            NextButton.CanFocus = true;\n            NextButton.Name = \"NextButton\";\n#pragma warning disable CS0612 // Type or member is obsolete\n            NextButton.UseStock = true;\n#pragma warning restore CS0612 // Type or member is obsolete\n            NextButton.UseUnderline = true;\n            NextButton.Label = \"gtk-go-forward\";\n            NextButton.Clicked += OnNextButton_Activated;\n            //this.hbox1.PackStart(this.NextButton, false, false, 0);\n\n            LastPageButton = new Button();\n            LastPageButton.CanFocus = true;\n            LastPageButton.Name = \"LastPageButton\";\n#pragma warning disable CS0612 // Type or member is obsolete\n            LastPageButton.UseStock = true;\n#pragma warning restore CS0612 // Type or member is obsolete\n            LastPageButton.UseUnderline = true;\n            LastPageButton.Label = \"gtk-goto-last\";\n            LastPageButton.Clicked += OnLastPageButton_Activated;\n            //this.hbox1.PackStart(this.LastPageButton, false, false, 0);\n\n            CurrentPage = new SpinButton(0, 999999, 1);\n            CurrentPage.CanFocus = true;\n            CurrentPage.Name = \"CurrentPage\";\n            CurrentPage.Adjustment.PageIncrement = 10;\n            CurrentPage.ClimbRate = 1;\n            CurrentPage.Numeric = true;\n            //this.hbox1.PackStart(this.CurrentPage, false, false, 0);\n\n            PageCountLabel = new Label();\n            PageCountLabel.Name = \"PageCountLabel\";\n            //this.hbox1.PackStart(this.PageCountLabel, false, false, 0);\n\n            vbox1.PackStart(hbox1, false, false, 0);\n\n            scrolledwindow1 = new ScrolledWindow();\n            scrolledwindow1.CanFocus = true;\n            scrolledwindow1.Name = \"scrolledwindow1\";\n            scrolledwindow1.ShadowType = ShadowType.In;\n\n            //Gtk.Viewport w10 = new Gtk.Viewport();\n            //w10.ShadowType = Gtk.ShadowType.None;\n\n            //this.vboxImages = new Gtk.Box(Gtk.Orientation.Vertical, 6);\n            //this.vboxImages.Name = \"vboxImages\";\n            //w10.Add(this.vboxImages);\n\n            //w10.Add(reportviewer1);\n            scrolledwindow1.Add(reportviewer1);\n            //this.scrolledwindow1.Add(w10);\n\n\n            vbox1.PackStart(scrolledwindow1, true, true, 0);\n\n\n            scrolledwindow1.ShowAll();\n\n            Add(vbox1);\n            ShowAll();\n\n            Destroyed += OnDeleteEvent;\n        }\n\n        protected void OnDeleteEvent(object sender, EventArgs a)\n        {\n            Application.Quit();\n        }\n\n        protected async void OnFileOpen_Activated(object sender, EventArgs e)\n        {\n            object[] param = new object[4];\n            param[0] = \"Cancel\";\n            param[1] = ResponseType.Cancel;\n            param[2] = \"Open\";\n            param[3] = ResponseType.Accept;\n\n            FileChooserDialog fc =\n                new(\"Open File\",\n                    null,\n                    FileChooserAction.Open,\n                    param);\n\n            if (fc.Run() != (int)ResponseType.Accept)\n            {\n                fc.Destroy();\n                return;\n            }\n\n            try\n            {\n                string filename = fc.Filename;\n                fc.Destroy();\n\n                if (File.Exists(filename))\n                {\n                    string parameters = await GetParameters(new Uri(filename));\n                    // Force UI update on main thread\n                    Application.Invoke(async (s, args) =>\n                    {\n                        await reportviewer1.LoadReport(new Uri(filename), parameters);\n                    });\n                }\n            }\n            catch (Exception ex)\n            {\n                MessageDialog m = new(null, DialogFlags.Modal, MessageType.Info,\n                    ButtonsType.Ok, false,\n                    \"Error Opening File.\" + Environment.NewLine + ex.Message);\n                m.Run();\n                m.Destroy();\n            }\n        }\n\n        public async void OnFileSave_Activated(object sender, EventArgs e)\n        {\n            await reportviewer1.SaveReport();\n        }\n\n        public void OnFilePrint_Activated(object sender, EventArgs e)\n        {\n            reportviewer1.PrintReport();\n        }\n\n        public void OnFirstPageButton_Activated(object sender, EventArgs e)\n        {\n            //this.reportviewer1.FirstPage();\n        }\n\n        public void OnPreviousButton_Activated(object sender, EventArgs e)\n        {\n            // this.reportviewer1.PreviousPage();\n        }\n\n        public void OnNextButton_Activated(object sender, EventArgs e)\n        {\n            //this.reportviewer1.NextPage();\n        }\n\n        public void OnLastPageButton_Activated(object sender, EventArgs e)\n        {\n            //this.reportviewer1.LastPage();\n        }\n\n        private async Task<string> GetParameters(Uri sourcefile)\n        {\n            string parameters = \"\";\n            string sourceRdl = await File.ReadAllTextAsync(sourcefile.LocalPath);\n            RDLParser parser = new(sourceRdl);\n            await parser.Parse();\n\n            if (parser.Report.UserReportParameters.Count > 0)\n            {\n                foreach (UserReportParameter rp in parser.Report.UserReportParameters)\n                {\n                    parameters += \"&\" + rp.Name + \"=\";\n                }\n\n                using ParameterPrompt prompt = new();\n                prompt.Parameters = parameters;\n\n                if (prompt.Run() == (int)ResponseType.Ok)\n                {\n                    parameters = prompt.Parameters;\n                }\n\n                prompt.Destroy();\n            }\n\n            return parameters;\n        }\n    }\n}"
  },
  {
    "path": "RdlGtk3/Majorsilence.Reporting.RdlGtk3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n    <PropertyGroup>\n        <OutputType>Library</OutputType>\n        <AssemblyName>RdlGtk3</AssemblyName>\n        <GeneratePackageOnBuild>True</GeneratePackageOnBuild>\n        <PackageId>Majorsilence.Reporting.RdlGtk3</PackageId>\n        <Configurations>Debug;Release;Debug-DrawingCompat;Release-DrawingCompat</Configurations>\n        <TargetFrameworks>net8.0;net10.0</TargetFrameworks>\n        <WarningsAsErrors>4014</WarningsAsErrors>\n    </PropertyGroup>\n    <ItemGroup>\n        <PackageReference Include=\"GtkSharp\"/>\n    </ItemGroup>\n    <ItemGroup>\n        <EmbeddedResource Include=\"Resources\\Icons\\Pdf_16x16.png\">\n            <DeployService-UseProjectRelativePath>True</DeployService-UseProjectRelativePath>\n        </EmbeddedResource>\n    </ItemGroup>\n    <ItemGroup>\n        <Content Include=\"app.desktop\">\n            <DeployService-TargetDirectoryId>Linux.DesktopApplications</DeployService-TargetDirectoryId>\n        </Content>\n    </ItemGroup>\n    <ItemGroup>\n        <ProjectReference Include=\"..\\Majorsilence.Drawing.Common\\Majorsilence.Drawing.Common.csproj\" />\n        <ProjectReference Include=\"..\\RdlCri\\Majorsilence.Reporting.RdlCri.csproj\"/>\n        <ProjectReference Include=\"..\\RdlEngine\\Majorsilence.Reporting.RdlEngine.csproj\"/>\n        <ProjectReference Include=\"..\\DataProviders\\Majorsilence.Reporting.DataProviders.csproj\"/>\n    </ItemGroup>\n    <ItemGroup>\n        <None Include=\"..\\RdlEngine\\RdlEngineConfig.xml\">\n            <Link>RdlEngineConfig.xml</Link>\n        </None>\n    </ItemGroup>\n</Project>\n"
  },
  {
    "path": "RdlGtk3/ParameterPrompt.cs",
    "content": "using Gtk;\n\nnamespace Majorsilence.Reporting.RdlGtk3\n{\n    public partial class ParameterPrompt : Dialog\n    {\n        private Entry TextBoxParameters;\n        private VBox vbox;\n        private HBox hbox3;\n        private Label label1;\n\n        public ParameterPrompt()\n        {\n            Build();\n        }\n\n        private void Build()\n        {\n            this.Title = \"Parameters\";\n            this.Modal = true;\n            this.DefaultWidth = 400;\n            this.DefaultHeight = 200;\n\n            // Create the main vbox for content\n            vbox = new VBox(false, 6);\n            vbox.BorderWidth = 12;\n\n            // Create label\n            label1 = new Label(\"Parameters:\");\n            label1.Xalign = 0;\n            vbox.PackStart(label1, false, false, 0);\n\n            // Create text entry\n            TextBoxParameters = new Entry();\n            vbox.PackStart(TextBoxParameters, false, false, 0);\n\n            // Create button box\n            hbox3 = new HBox(true, 6);\n            \n            Button cancelButton = new Button(\"Cancel\");\n            cancelButton.Clicked += (sender, e) => this.Respond(ResponseType.Cancel);\n            hbox3.PackStart(cancelButton, true, true, 0);\n\n            Button okButton = new Button(\"OK\");\n            okButton.Clicked += (sender, e) => this.Respond(ResponseType.Ok);\n            hbox3.PackStart(okButton, true, true, 0);\n\n            vbox.PackStart(hbox3, false, false, 0);\n\n            // Add the vbox to the dialog's content area\n            this.ContentArea.Add(vbox);\n            this.ShowAll();\n        }\n\n        public string Parameters\n        {\n            get => TextBoxParameters.Text;\n            set => TextBoxParameters.Text = value;\n        }\n    }\n}"
  },
  {
    "path": "RdlGtk3/RenderCairo.cs",
    "content": "// \n//  RenderCairo.cs\n//  \n//  Author:\n//       Krzysztof Marecki \n//\n// Copyright (c) 2010 Krzysztof Marecki \n//\n// This file is part of the NReports project\n// This file is part of the My-FyiReporting project \n//\t\n//   Licensed under the Apache License, Version 2.0 (the \"License\");\n//   you may not use this file except in compliance with the License.\n//   You may obtain a copy of the License at\n//\n//       http://www.apache.org/licenses/LICENSE-2.0\n//\n//   Unless required by applicable law or agreed to in writing, software\n//   distributed under the License is distributed on an \"AS IS\" BASIS,\n//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//   See the License for the specific language governing permissions and\n//   limitations under the License.\n\nusing Cairo;\nusing Gdk;\nusing Majorsilence.Reporting.Rdl;\nusing Pango;\nusing System;\nusing System.Collections;\nusing System.Globalization;\nusing System.Threading;\nusing CairoHelper = Pango.CairoHelper;\nusing Color = Cairo.Color;\nusing Context = Cairo.Context;\nusing Rectangle = Pango.Rectangle;\n\nnamespace Majorsilence.Reporting.RdlGtk3\n{\n    public class RenderCairo : IDisposable\n    {\n        private readonly float dpiX = 96;\n        private readonly float dpiY = 96;\n        private readonly Context g;\n        private readonly float scale = 1.0f;\n\n        public RenderCairo(Context g)\n            : this(g, 1.0f)\n        {\n        }\n\n        public RenderCairo(Context g, float scale)\n        {\n            this.g = g;\n            this.scale = scale;\n            g.Scale(scale, scale);\n        }\n\n        public void Dispose()\n        {\n            // Nothing to dispose here: Layouts are created and disposed locally in drawing methods.\n        }\n\n        internal float PixelsX(float x)\n        {\n            return x * dpiX / 96.0f;\n        }\n\n        internal float PixelsY(float y)\n        {\n            return y * dpiY / 96.0f;\n        }\n\n        private void ProcessPage(IEnumerable p)\n        {\n            try\n            {\n                 foreach (PageItem pi in p)\n                 {\n                    try\n                    {\n                     if (pi is PageTextHtml)\n                     {\n                         // PageTextHtml is actually a composite object (just like a page) \n                         ProcessHtml(pi as PageTextHtml);\n                         continue;\n                     }\n\n                     if (pi is PageLine)\n                     {\n                         PageLine pl = pi as PageLine;\n                         DrawLine(\n                             pl.SI.BColorLeft.ToCairoColor(), pl.SI.BStyleLeft, pl.SI.BWidthLeft,\n                             PixelsX(pl.X), PixelsY(pl.Y), PixelsX(pl.X2), PixelsY(pl.Y2)\n                         );\n                         continue;\n                     }\n\n                     //                RectangleF rect = new RectangleF(PixelsX(pi.X), PixelsY(pi.Y), PixelsX(pi.W), PixelsY(pi.H));\n                     Cairo.Rectangle rect = new(PixelsX(pi.X), PixelsY(pi.Y), PixelsX(pi.W), PixelsY(pi.H));\n\n                     if (pi.SI.BackgroundImage != null)\n                     {\n                         // put out any background image \n                         PageImage i = pi.SI.BackgroundImage;\n                         DrawImage(i, rect);\n                         continue;\n                     }\n\n                     if (pi is PageText)\n                     {\n                         PageText pt = pi as PageText;\n                         DrawString(pt, rect);\n                     }\n\n                     if (pi is PageImage)\n                     {\n                         PageImage i = pi as PageImage;\n                         DrawImage(i, rect);\n                     }\n\n                     if (pi is PageRectangle)\n                     {\n                         //DrawBackground(g, rect, pi.SI);\n                     }\n\n                     //                else if (pi is PageEllipse)\n                     //                {\n                     //                    PageEllipse pe = pi as PageEllipse;\n                     //                    DrawEllipse(pe, g, rect);\n                     //                }\n                     //                else if (pi is PagePie)\n                     //                {\n                     //                    PagePie pp = pi as PagePie;\n                     //                    DrawPie(pp, g, rect);\n                     //                }\n                     //                else if (pi is PagePolygon)\n                     //                {\n                     //                    PagePolygon ppo = pi as PagePolygon;\n                     //                    FillPolygon(ppo, g, rect);\n                     //                }\n                     //                else if (pi is PageCurve)\n                     //                {\n                     //                    PageCurve pc = pi as PageCurve;\n                     //                    DrawCurve(pc.SI.BColorLeft, pc.SI.BStyleLeft, pc.SI.BWidthLeft,\n                     //                        g, pc.Points, pc.Offset, pc.Tension);\n                     //                }\n                     //\n\n                    DrawBorder(pi, rect);\n                    }\n                    catch (Exception exItem)\n                    {\n                        System.Console.WriteLine($\"RenderCairo: exception drawing PageItem {pi?.GetType()?.Name}: {exItem}\");\n                        // continue with next item\n                    }\n                 }\n            }\n            catch (Exception ex)\n            {\n                System.Console.WriteLine(\"RenderCairo: exception processing page: \" + ex);\n            }\n         }\n\n        private void ProcessHtml(PageTextHtml pth)\n        {\n            // pth.Build(g);            // Builds the subobjects that make up the html \n            ProcessPage(pth);\n        }\n\n        private void DrawLine(Color c, BorderStyleEnum bs, float w, double x, double y, double x2, double y2)\n        {\n            if (bs == BorderStyleEnum.None //|| c.IsEmpty \n                || w <= 0) // nothing to draw \n            {\n                return;\n            }\n\n            g.Save();\n            //          Pen p = null;  \n            //          p = new Pen(c, w);\n            g.SetSourceColor(c);\n            g.LineWidth = w;\n            switch (bs)\n            {\n                case BorderStyleEnum.Dashed:\n                    // p.DashStyle = DashStyle.Dash;\n                    g.SetDash(new double[] { 2, 1 }, 0.0);\n                    break;\n                case BorderStyleEnum.Dotted:\n                    // p.DashStyle = DashStyle.Dot;\n                    g.SetDash(new double[] { 1 }, 0.0);\n                    break;\n                case BorderStyleEnum.Double:\n                case BorderStyleEnum.Groove:\n                case BorderStyleEnum.Inset:\n                case BorderStyleEnum.Solid:\n                case BorderStyleEnum.Outset:\n                case BorderStyleEnum.Ridge:\n                case BorderStyleEnum.WindowInset:\n                default:\n                    g.SetDash(new double[] { }, 0.0);\n                    break;\n            }\n\n            //    g.DrawLine(p, x, y, x2, y2);\n            g.MoveTo(x, y);\n            g.LineTo(x2, y2);\n            g.Stroke();\n\n            g.Restore();\n        }\n\n        private void DrawImage(PageImage pi, Cairo.Rectangle r)\n        {\n            double height, width;\n            StyleInfo si = pi.SI;\n\n            float imageScale = scale;\n            Surface target = this.g.GetTarget();\n\n            if (target.SurfaceType == SurfaceType.Pdf\n                || target.SurfaceType == SurfaceType.PS\n                || (int)target.SurfaceType == 12) // 12 = Cairo.SurfaceType.Win32Printing)\n            {\n                imageScale = 300 / dpiX * scale; // PDFs and printers are always 300dpi\n            }\n\n            // adjust drawing rectangle based on padding \n            Cairo.Rectangle r2 = new(r.X + PixelsX(si.PaddingLeft),\n                r.Y + PixelsY(si.PaddingTop),\n                r.Width - PixelsX(si.PaddingLeft + si.PaddingRight),\n                r.Height - PixelsY(si.PaddingTop + si.PaddingBottom));\n\n            // Guard against zero/negative size requests\n            int reqW = Math.Max(1, (int)(r2.Width * imageScale));\n            int reqH = Math.Max(1, (int)(r2.Height * imageScale));\n\n            try\n            {\n                using (Pixbuf im = new(pi.GetImageData(reqW, reqH)))\n                {\n                    // If Pixbuf has no pixels, skip drawing\n                    if (im.Width == 0 || im.Height == 0)\n                    {\n                        return;\n                    }\n\n                    switch (pi.Sizing)\n                    {\n                        case ImageSizingEnum.AutoSize:\n                            float imwidth = PixelsX(im.Width);\n                            float imheight = PixelsX(im.Height);\n                            Cairo.Rectangle ir = new(Convert.ToInt32(r2.X), Convert.ToInt32(r2.Y),\n                                imwidth, imheight);\n                            using (Pixbuf im2 = im.ScaleSimple(Math.Max(1, (int)r2.Width), Math.Max(1, (int)r2.Height), InterpType.Hyper))\n                            {\n                                if (im2 != null)\n                                {\n                                    this.g.DrawPixbufRect(im2, ir, scale);\n                                }\n                            }\n                            break;\n                        case ImageSizingEnum.Clip:\n                            g.Save();\n                            g.Rectangle(r2);\n                            g.Clip();\n                            if (r2.Width > im.Width || r2.Height > im.Height)\n                            {\n                                Cairo.Rectangle r3 = new(r2.X,\n                                    r2.Y,\n                                    im.Width,\n                                    im.Height);\n                                this.g.DrawPixbufRect(im, r3, scale);\n                            }\n                            else\n                            {\n                                this.g.DrawPixbufRect(im, r2, scale);\n                            }\n\n                            g.Restore();\n                            break;\n                        case ImageSizingEnum.FitProportional:\n                            double ratioIm = im.Height / (float)im.Width;\n                            double ratioR = r2.Height / r2.Width;\n                            height = r2.Height;\n                            width = r2.Width;\n                            if (ratioIm > ratioR)\n                            {\n                                // this means the rectangle width must be corrected \n                                width = height * (1 / ratioIm);\n                            }\n                            else if (ratioIm < ratioR)\n                            {\n                                // this means the ractangle height must be corrected \n                                height = width * ratioIm;\n                            }\n\n                            r2 = new Cairo.Rectangle(r2.X, r2.Y, width, height);\n                            this.g.DrawPixbufRect(im, r2, scale);\n                            break;\n                        case ImageSizingEnum.Fit:\n                        default:\n                            this.g.DrawPixbufRect(im, r2, scale);\n                            break;\n                    }\n                }\n            }\n            catch (Exception)\n            {\n                // Don't let image drawing crash the entire viewer. Swallow and continue.\n                // Individual image failures are not critical for scrolling stability.\n            }\n        }\n\n        private void DrawString(PageText pt, Cairo.Rectangle r)\n        {\n            switch (pt.SI.WritingMode)\n            {\n                case WritingModeEnum.lr_tb:\n                    DrawStringHorizontal(pt, r);\n                    break;\n                case WritingModeEnum.tb_rl:\n                    DrawStringTBRL(pt, r);\n                    break;\n                case WritingModeEnum.tb_lr:\n                    DrawStringTBLR(pt, r);\n                    break;\n                default:\n                    throw new NotSupportedException($\"Writing mode {pt.SI.WritingMode} is not supported\");\n            }\n        }\n\n        private void DrawStringHorizontal(PageText pt, Cairo.Rectangle r)\n        {\n            StyleInfo si = pt.SI;\n            string s = pt.Text;\n\n            g.Save();\n\n            Layout layout = CairoHelper.CreateLayout(this.g);\n\n            float fontsize = si.FontSize * 72f / 96f;\n            FontDescription font = FontDescription.FromString(string.Format(\"{0} {1}\", si.GetFontFamily().Name,\n                fontsize * PixelsX(1)));\n            if (si.FontStyle == FontStyleEnum.Italic)\n            {\n                font.Style = Style.Italic;\n            }\n\n            switch (si.FontWeight)\n            {\n                case FontWeightEnum.Bold:\n                case FontWeightEnum.Bolder:\n                case FontWeightEnum.W500:\n                case FontWeightEnum.W600:\n                case FontWeightEnum.W700:\n                case FontWeightEnum.W800:\n                case FontWeightEnum.W900:\n                    font.Weight = Weight.Bold;\n                    break;\n            }\n\n            FontDescription oldfont = layout.FontDescription;\n            layout.FontDescription = font;\n\n            switch (si.TextAlign)\n            {\n                case TextAlignEnum.Right:\n                    layout.Alignment = Alignment.Right;\n                    break;\n                case TextAlignEnum.Center:\n                    layout.Alignment = Alignment.Center;\n                    break;\n                case TextAlignEnum.Left:\n                default:\n                    layout.Alignment = Alignment.Left;\n                    break;\n            }\n\n            layout.Width = Units.FromPixels((int)(r.Width - si.PaddingLeft - si.PaddingRight - 2));\n            layout.Wrap = WrapMode.WordChar;\n            layout.SetText(s);\n\n            Rectangle logical;\n            Rectangle ink;\n            layout.GetExtents(out ink, out logical);\n            double height = logical.Height / Scale.PangoScale;\n            double y = 0;\n            switch (si.VerticalAlign)\n            {\n                case VerticalAlignEnum.Top:\n                    y = r.Y + si.PaddingTop;\n                    break;\n                case VerticalAlignEnum.Middle:\n                    y = r.Y + ((r.Height - height) / 2);\n                    break;\n                case VerticalAlignEnum.Bottom:\n                    y = r.Y + (r.Height - height) - si.PaddingBottom;\n                    break;\n            }\n\n            // draw the background \n            DrawBackground(r, si);\n\n            Cairo.Rectangle box = new(\n                r.X + si.PaddingLeft + 1,\n                y,\n                r.Width,\n                r.Height);\n\n            g.SetSourceColor(si.Color.ToCairoColor());\n\n            g.MoveTo(box.X, box.Y);\n\n            CairoHelper.ShowLayout(this.g, layout);\n\n            layout.FontDescription = oldfont;\n            font?.Dispose();\n            layout.Dispose();\n            g.Restore();\n        }\n\n        private void DrawStringTBRL(PageText pt, Cairo.Rectangle r)\n        {\n            StyleInfo si = pt.SI;\n            string s = pt.Text;\n\n            g.Save();\n\n            Layout layout = CairoHelper.CreateLayout(this.g);\n\n            //Pango fonts are scaled to 72dpi, Windows fonts uses 96dpi\n            float fontsize = si.FontSize * 72f / 96f;\n            FontDescription font = FontDescription.FromString($\"{si.GetFontFamily().Name} {fontsize * PixelsX(1)}\");\n            if (si.FontStyle == FontStyleEnum.Italic)\n            {\n                font.Style = Style.Italic;\n            }\n\n            switch (si.FontWeight)\n            {\n                case FontWeightEnum.Bold:\n                case FontWeightEnum.Bolder:\n                case FontWeightEnum.W500:\n                case FontWeightEnum.W600:\n                case FontWeightEnum.W700:\n                case FontWeightEnum.W800:\n                case FontWeightEnum.W900:\n                    font.Weight = Weight.Bold;\n                    break;\n            }\n\n            FontDescription oldfont = layout.FontDescription;\n            layout.FontDescription = font;\n\n            switch (si.TextAlign)\n            {\n                case TextAlignEnum.Right:\n                    layout.Alignment = Alignment.Right;\n                    break;\n                case TextAlignEnum.Center:\n                    layout.Alignment = Alignment.Center;\n                    break;\n                case TextAlignEnum.Left:\n                default:\n                    layout.Alignment = Alignment.Left;\n                    break;\n            }\n\n            layout.Width = Units.FromPixels((int)(r.Height - si.PaddingTop - si.PaddingBottom - 2));\n\n            layout.Wrap = WrapMode.WordChar;\n            layout.SetText(s);\n\n            Rectangle logical;\n            Rectangle ink;\n            layout.GetExtents(out ink, out logical);\n            double height = logical.Height / Scale.PangoScale;\n            double x = 0;\n\n            switch (si.VerticalAlign)\n            {\n                case VerticalAlignEnum.Top:\n                    x = r.X + r.Width - si.PaddingRight;\n                    break;\n                case VerticalAlignEnum.Middle:\n                    x = r.X + ((r.Width + height) / 2);\n                    break;\n                case VerticalAlignEnum.Bottom:\n                    x = r.X + height + si.PaddingLeft;\n                    break;\n            }\n\n            // draw the background \n            DrawBackground(r, si);\n\n            Cairo.Rectangle box = new(\n                x,\n                r.Y + si.PaddingTop + 1,\n                r.Width,\n                r.Height);\n\n            g.SetSourceColor(si.Color.ToCairoColor());\n\n            g.Rotate(90 * Math.PI / 180.0);\n            CairoHelper.UpdateLayout(this.g, layout);\n\n            g.MoveTo(box.Y, -box.X);\n            CairoHelper.ShowLayout(this.g, layout);\n\n            layout.FontDescription = oldfont;\n            font?.Dispose();\n            layout.Dispose();\n            g.Restore();\n        }\n\n        private void DrawStringTBLR(PageText pt, Cairo.Rectangle r)\n        {\n            StyleInfo si = pt.SI;\n            string s = pt.Text;\n\n            g.Save();\n\n            Layout layout = CairoHelper.CreateLayout(this.g);\n\n            //Pango fonts are scaled to 72dpi, Windows fonts uses 96dpi\n            float fontsize = si.FontSize * 72 / 96;\n            FontDescription font = FontDescription.FromString($\"{si.GetFontFamily().Name} {fontsize * PixelsX(1)}\");\n            if (si.FontStyle == FontStyleEnum.Italic)\n            {\n                font.Style = Style.Italic;\n            }\n\n            switch (si.FontWeight)\n            {\n                case FontWeightEnum.Bold:\n                case FontWeightEnum.Bolder:\n                case FontWeightEnum.W500:\n                case FontWeightEnum.W600:\n                case FontWeightEnum.W700:\n                case FontWeightEnum.W800:\n                case FontWeightEnum.W900:\n                    font.Weight = Weight.Bold;\n                    break;\n            }\n\n            FontDescription oldfont = layout.FontDescription;\n            layout.FontDescription = font;\n\n            switch (si.TextAlign)\n            {\n                case TextAlignEnum.Right:\n                    layout.Alignment = Alignment.Right;\n                    break;\n                case TextAlignEnum.Center:\n                    layout.Alignment = Alignment.Center;\n                    break;\n                case TextAlignEnum.Left:\n                default:\n                    layout.Alignment = Alignment.Left;\n                    break;\n            }\n\n            layout.Width = Units.FromPixels((int)(r.Height - si.PaddingTop - si.PaddingBottom - 2));\n\n            layout.Wrap = WrapMode.WordChar;\n            layout.SetText(s);\n\n            Rectangle logical;\n            Rectangle ink;\n            layout.GetExtents(out ink, out logical);\n            double height = logical.Height / Scale.PangoScale;\n            double x = 0;\n\n            switch (si.VerticalAlign)\n            {\n                case VerticalAlignEnum.Top:\n                    x = r.X + si.PaddingLeft;\n                    break;\n                case VerticalAlignEnum.Middle:\n                    x = r.X + ((r.Width - height) / 2);\n                    break;\n                case VerticalAlignEnum.Bottom:\n                    x = r.X + (r.Width - height) + si.PaddingLeft;\n                    break;\n            }\n\n            // draw the background \n            DrawBackground(r, si);\n\n            Cairo.Rectangle box = new(\n                x,\n                r.Y + r.Height - si.PaddingBottom - 1,\n                r.Height - si.PaddingBottom - si.PaddingTop,\n                r.Width - si.PaddingLeft + si.PaddingRight);\n\n            g.SetSourceColor(si.Color.ToCairoColor());\n\n            g.Rotate(270 * Math.PI / 180.0);\n            CairoHelper.UpdateLayout(this.g, layout);\n\n            g.MoveTo(-box.Y, box.X);\n            CairoHelper.ShowLayout(this.g, layout);\n\n            layout.FontDescription = oldfont;\n            font?.Dispose();\n            layout.Dispose();\n            g.Restore();\n        }\n\n        private void DrawBackground(Cairo.Rectangle rect, StyleInfo si)\n        {\n            //            LinearGradientBrush linGrBrush = null;\n            //            SolidBrush sb = null;\n            if (si.BackgroundColor.IsEmpty)\n            {\n                return;\n            }\n\n            g.Save();\n            Color c = si.BackgroundColor.ToCairoColor();\n            Gradient gradient = null;\n\n            if (si.BackgroundGradientType != BackgroundGradientTypeEnum.None &&\n                !si.BackgroundGradientEndColor.IsEmpty)\n            {\n                Color ec = si.BackgroundGradientEndColor.ToCairoColor();\n\n                switch (si.BackgroundGradientType)\n                {\n                    case BackgroundGradientTypeEnum.LeftRight:\n                        //                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.Horizontal);\n                        gradient = new LinearGradient(rect.X, rect.Y, rect.X + rect.Width, rect.Y);\n                        break;\n                    case BackgroundGradientTypeEnum.TopBottom:\n                        //                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.Vertical);\n                        gradient = new LinearGradient(rect.X, rect.Y, rect.X, rect.Y + rect.Height);\n                        break;\n                    case BackgroundGradientTypeEnum.Center:\n                        //                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.Horizontal);\n                        throw new NotSupportedException();\n                    //                            break;\n                    case BackgroundGradientTypeEnum.DiagonalLeft:\n                        //                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.ForwardDiagonal);\n                        gradient = new LinearGradient(rect.X, rect.Y, rect.X + rect.Width, rect.Y + rect.Height);\n                        break;\n                    case BackgroundGradientTypeEnum.DiagonalRight:\n                        //                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.BackwardDiagonal);\n                        gradient = new LinearGradient(rect.X + rect.Width, rect.Y + rect.Height, rect.X, rect.Y);\n                        break;\n                    case BackgroundGradientTypeEnum.HorizontalCenter:\n                        //                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.Horizontal);\n                        throw new NotSupportedException();\n                    //                    break;\n                    case BackgroundGradientTypeEnum.VerticalCenter:\n                        //                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.Vertical);\n                        throw new NotSupportedException();\n                    //                    break;\n                }\n\n                gradient.AddColorStop(0, c);\n                gradient.AddColorStop(1, ec);\n            }\n\n            if (gradient != null)\n            {\n                //                    g.FillRectangle(linGrBrush, rect);\n                this.g.FillRectangle(rect, gradient);\n                gradient?.Dispose();\n            }\n            else if (!si.BackgroundColor.IsEmpty)\n            {\n                this.g.FillRectangle(rect, c);\n                //\t\t\tg.DrawRoundedRectangle (rect, 2, c, 1);\n\n                //\t\t\tg.FillRoundedRectangle (rect, 8, c);\n            }\n\n            g.Restore();\n        }\n\n        private void DrawBorder(PageItem pi, Cairo.Rectangle r)\n        {\n            if (r.Height <= 0 || r.Width <= 0) // no bounding box to use \n            {\n                return;\n            }\n\n            double right = r.X + r.Width;\n            double bottom = r.Y + r.Height;\n            StyleInfo si = pi.SI;\n\n            DrawLine(si.BColorTop.ToCairoColor(), si.BStyleTop, si.BWidthTop, r.X, r.Y, right, r.Y);\n            DrawLine(si.BColorRight.ToCairoColor(), si.BStyleRight, si.BWidthRight, right, r.Y, right, bottom);\n            DrawLine(si.BColorLeft.ToCairoColor(), si.BStyleLeft, si.BWidthLeft, r.X, r.Y, r.X, bottom);\n            DrawLine(si.BColorBottom.ToCairoColor(), si.BStyleBottom, si.BWidthBottom, r.X, bottom, right, bottom);\n            //if (si.) {\n            //\t\t\tg.DrawRoundedRectangle (r, 8, si.BColorTop.ToCairoColor (), 1);\n            //}\n        }\n\n        #region IRender implementation\n\n        public void RunPages(Pages pgs)\n        {\n            //TODO : Why Cairo is broken when CurrentThread.CurrentCulture is set to local ?\n            //At Linux when CurrentCulture is set to local culture, Cairo rendering is serious broken\n            CultureInfo oldci = Thread.CurrentThread.CurrentCulture;\n            Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;\n\n            try\n            {\n                foreach (Page p in pgs)\n                {\n                    ProcessPage(p);\n                    break;\n                }\n            }\n            finally\n            {\n                Thread.CurrentThread.CurrentCulture = oldci;\n            }\n        }\n\n        public void RunPage(Page pgs)\n        {\n            //TODO : Why Cairo is broken when CurrentThread.CurrentCulture is set to local ?\n            //At Linux when CurrentCulture is set to local culture, Cairo rendering is serious broken\n            CultureInfo oldci = Thread.CurrentThread.CurrentCulture;\n            Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;\n\n            try\n            {\n                ProcessPage(pgs);\n            }\n            finally\n            {\n                Thread.CurrentThread.CurrentCulture = oldci;\n            }\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "RdlGtk3/ReportArea.cs",
    "content": "// \n//  ReportArea.cs\n//  \n//  Author:\n//       Krzysztof Marecki \n// \n//  Copyright (c) 2010 Krzysztof Marecki\n// \n// This file is part of the NReports project\n// This file is part of the My-FyiReporting project \n//\t\n//   Licensed under the Apache License, Version 2.0 (the \"License\");\n//   you may not use this file except in compliance with the License.\n//   You may obtain a copy of the License at\n//\n//       http://www.apache.org/licenses/LICENSE-2.0\n//\n//   Unless required by applicable law or agreed to in writing, software\n//   distributed under the License is distributed on an \"AS IS\" BASIS,\n//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//   See the License for the specific language governing permissions and\n//   limitations under the License.\n\nusing Cairo;\nusing Gdk;\nusing Gtk;\nusing Majorsilence.Reporting.Rdl;\nusing Pango;\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing Alignment = Pango.Alignment;\nusing CairoHelper = Pango.CairoHelper;\nusing Color = Cairo.Color;\nusing Context = Cairo.Context;\nusing Layout = Pango.Layout;\nusing Rectangle = Cairo.Rectangle;\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\n#else\nusing System.Drawing;\n#endif\n\nnamespace Majorsilence.Reporting.RdlGtk3\n{\n    [ToolboxItem(true)]\n    public class ReportArea : DrawingArea\n    {\n        private readonly object drawLock = new();\n        internal float DpiX = 96;\n\n        internal float DpiY = 96;\n\n        private readonly List<HitListEntry> hitList = new();\n        private Page pages;\n        private readonly int rep_padding = 10;\n        private Report report;\n        private float scale = 1.0f;\n\n        private PageItem selectedItem;\n        private readonly int shadow_padding = 16;\n        private ImageSurface cachedSurface = null;\n        private float cachedScale = -1f;\n\n        public ReportArea()\n        {\n            // Insert initialization code here.\n            AddEvents((int)EventMask.ButtonPressMask);\n        }\n\n        public float Scale\n        {\n            get => scale;\n            set\n            {\n                if (value != scale && value != 0)\n                {\n                    scale = value;\n\n                    QueueResize();\n                    //Window.InvalidateRect(new Gdk.Rectangle(0, 0, Allocation.Width, Allocation.Height), true);\n                }\n            }\n        }\n\n        protected override void OnRealized()\n        {\n            base.OnRealized();\n        }\n\n        public void SetReport(Report report, Page pages)\n        {\n            lock (drawLock)\n            {\n                this.pages = pages;\n                this.report = report;\n                // Invalidate cached rendering for this page\n                if (cachedSurface != null)\n                {\n                    try { cachedSurface.Dispose(); } catch { }\n                    cachedSurface = null;\n                    cachedScale = -1f;\n                }\n            }\n\n            // Request a resize/draw on the main loop\n            Application.Invoke((s, a) => QueueResize());\n            //Window.InvalidateRect(new Gdk.Rectangle(0, 0, Allocation.Width, Allocation.Height), true);\n        }\n\n        private Rectangle GetSelectedItemRectangle()\n        {\n            lock (drawLock)\n            {\n                if (selectedItem == null)\n                    return new Rectangle(0, 0, 0, 0);\n\n                return new Rectangle(selectedItem.X * scale, selectedItem.Y * scale, selectedItem.W * scale,\n                    selectedItem.H * scale);\n            }\n        }\n\n        protected override bool OnButtonPressEvent(EventButton ev)\n        {\n            if (ev.Button == 3)\n            {\n                HitListEntry hitAreaItem;\n                lock (drawLock)\n                {\n                    hitAreaItem = hitList.FirstOrDefault(x => x.Contains(new PointD(ev.X, ev.Y)));\n                }\n                if (hitAreaItem == null)\n                {\n                    return false;\n                }\n\n                string text;\n                if (hitAreaItem.pi is PageText)\n                {\n                    text = (hitAreaItem.pi as PageText).Text;\n                }\n                else if (hitAreaItem.pi is PageTextHtml)\n                {\n                    text = (hitAreaItem.pi as PageTextHtml).Text;\n                }\n                else\n                {\n                    return false;\n                }\n\n                lock (drawLock)\n                {\n                    selectedItem = hitAreaItem.pi;\n                }\n                QueueDraw();\n                //Window.InvalidateRect(new Gdk.Rectangle(0, 0, Allocation.Width, Allocation.Height), true);\n                Menu popupMenu = new();\n                MenuItem menuItem = new(\"Копировать\");\n                menuItem.Activated += (sender, e) =>\n                {\n                    Clipboard clipboard = Clipboard.Get(Atom.Intern(\"CLIPBOARD\", false));\n                    clipboard.Text = text;\n                    lock (drawLock)\n                    {\n                        selectedItem = null;\n                    }\n                    QueueDraw();\n                    //Window.InvalidateRect(new Gdk.Rectangle(0, 0, Allocation.Width, Allocation.Height), true);\n                };\n                popupMenu.Add(menuItem);\n                popupMenu.ShowAll();\n                popupMenu.Popup();\n                popupMenu.Hidden += (sender, e) =>\n                {\n                    lock (drawLock)\n                    {\n                        selectedItem = null;\n                    }\n                    QueueDraw();\n                    //Window.InvalidateRect(new Gdk.Rectangle(0, 0, Allocation.Width, Allocation.Height), true);\n                };\n            }\n\n            // Insert button press handling code here.\n            return base.OnButtonPressEvent(ev);\n        }\n\n        internal float PixelsX(float x)\n        {\n            return x * DpiX / 96.0f;\n        }\n\n        internal float PixelsY(float y)\n        {\n            return y * DpiY / 96.0f;\n        }\n\n        private void SetItemsHitArea()\n        {\n            lock (drawLock)\n            {\n                float XAdditional = GetLeftAreaPosition();\n                float YAdditional = rep_padding;\n                hitList.Clear();\n                if (pages == null)\n                    return;\n\n                foreach (PageItem pi in pages)\n                {\n                    if (pi is PageTextHtml)\n                    {\n                        // PageTextHtml is actually a composite object (just like a page)\n                        Rectangle hr = new(PixelsX(pi.X * scale) + XAdditional, PixelsY(pi.Y * scale) + YAdditional,\n                            PixelsX(pi.W * scale), PixelsY(pi.H * scale));\n                        hitList.Add(new HitListEntry(hr, pi));\n                        continue;\n                    }\n\n                    Rectangle rect = new(PixelsX(pi.X * scale) + XAdditional, PixelsY(pi.Y * scale) + YAdditional,\n                        PixelsX(pi.W * scale), PixelsY(pi.H * scale));\n\n                    if (pi is PageText || pi is PageImage)\n                    {\n                        hitList.Add(new HitListEntry(rect, pi));\n                    }\n                    // Only care about items with links and tips\n                    else if (pi.HyperLink != null || pi.BookmarkLink != null || pi.Tooltip != null)\n                    {\n                        HitListEntry hle;\n                        if (pi is PagePolygon)\n                        {\n                            hle = new HitListEntry(pi as PagePolygon, XAdditional, YAdditional, this);\n                        }\n                        else\n                        {\n                            hle = new HitListEntry(rect, pi);\n                        }\n\n                        hitList.Add(hle);\n                    }\n                }\n            }\n        }\n\n        private int GetLeftAreaPosition()\n        {\n            lock (drawLock)\n            {\n                if (report == null)\n                    return 0;\n\n                int width = (int)(report.PageWidthPoints * Scale);\n                int widgetWidth = Allocation.Width;\n                int widgetHeight = Allocation.Height;\n\n                int position = (widgetWidth - width) / 2;\n                return position;\n            }\n        }\n\n        protected override bool OnDrawn(Context g)\n        {\n            base.OnDrawn(g);\n\n            lock (drawLock)\n            {\n                if (pages == null || report == null)\n                {\n                    return false;\n                }\n\n                int width = (int)(report.PageWidthPoints * Scale);\n                int height = (int)(report.PageHeightPoints * Scale);\n                // Defensive: avoid creating zero-sized surfaces which can crash Cairo/GDK\n                if (width <= 0 || height <= 0)\n                {\n                    return false;\n                }\n                Rectangle rep_r = new(1, 1, width - 1, height - 1);\n\n                int widgetWidth = Allocation.Width;\n                int widgetHeight = Allocation.Height;\n\n                g.Translate(((widgetWidth - width) / 2) - rep_padding, 0);\n\n                // Wrap the drawing in a try/catch to prevent native crashes from bubbling up\n                try\n                {\n                    // If cachedSurface exists at the current scale, paint it directly. Otherwise render and cache it.\n                    if (cachedSurface == null || cachedScale != Scale)\n                    {\n                        // Dispose previous cached surface if any\n                        if (cachedSurface != null)\n                        {\n                            try { cachedSurface.Dispose(); } catch { }\n                            cachedSurface = null;\n                        }\n\n                        using (SolidPattern shadowGPattern = new(new Color(0.6, 0.6, 0.6)))\n                        using (SolidPattern repGPattern = new(new Color(1, 1, 1)))\n                        using (ImageSurface repS = new(Format.Argb32, width, height))\n                        using (Context repG = new(repS))\n                        using (ImageSurface shadowS = new ImageSurface(Format.Argb32, width, height))\n                        using (Context shadowG = new(shadowS))\n                        {\n#pragma warning disable CS0618 // Type or member is obsolete\n                            shadowG.Pattern = shadowGPattern;\n#pragma warning restore CS0618 // Type or member is obsolete\n                            shadowG.Paint();\n                            g.SetSourceSurface(shadowS, shadow_padding, shadow_padding);\n                            g.Paint();\n\n#pragma warning disable CS0618 // Type or member is obsolete\n                            repG.Pattern = repGPattern;\n#pragma warning restore CS0618 // Type or member is obsolete\n                            repG.Paint();\n                            repG.DrawRectangle(rep_r, new Color(0.1, 0.1, 0.1), 1);\n\n                            SetItemsHitArea();\n\n                            Pattern currentRepGPattern = null;\n                            if (selectedItem != null)\n                            {\n                                currentRepGPattern = new SolidPattern(new Color(0.4, 0.4, 1));\n#pragma warning disable CS0618 // Type or member is obsolete\n                                repG.Pattern = currentRepGPattern;\n#pragma warning restore CS0618 // Type or member is obsolete\n                                repG.Rectangle(GetSelectedItemRectangle());\n                                repG.Fill();\n                            }\n\n                            using (RenderCairo render = new(repG, Scale))\n                            {\n                                render.RunPage(pages);\n                            }\n\n                            // Move the freshly rendered repS into cache by creating a clone surface\n                            cachedSurface = repS.Clone();\n                            cachedScale = Scale;\n\n                            currentRepGPattern?.Dispose();\n                        }\n                    }\n\n                    // Paint cached surface to widget\n                    g.SetSourceSurface(cachedSurface, rep_padding, rep_padding);\n                    g.Paint();\n                }\n                catch (System.Exception ex)\n                {\n                    // Log and bail out; avoid crashing the process for native drawing errors\n                    System.Console.WriteLine(\"Render error in ReportArea.OnDrawn: \" + ex);\n                    return false;\n                }\n\n                return true;\n            }\n        }\n\n\n        private void DrawString(string s, Context g, Rectangle r)\n        {\n            StyleInfo si = new();\n            g.Save();\n\n            Layout layout;\n\n            layout = CairoHelper.CreateLayout(g);\n\n            float fontsize = si.FontSize * 72 / 96;\n            FontDescription font = FontDescription.FromString(string.Format(\"{0} {1}\", si.GetFontFamily().Name,\n                fontsize * PixelsX(1)));\n            if (si.FontStyle == FontStyleEnum.Italic)\n            {\n                font.Style = Pango.Style.Italic;\n            }\n\n            switch (si.FontWeight)\n            {\n                case FontWeightEnum.Bold:\n                case FontWeightEnum.Bolder:\n                case FontWeightEnum.W500:\n                case FontWeightEnum.W600:\n                case FontWeightEnum.W700:\n                case FontWeightEnum.W800:\n                case FontWeightEnum.W900:\n                    font.Weight = Weight.Bold;\n                    break;\n            }\n\n            FontDescription oldfont = layout.FontDescription;\n            layout.FontDescription = font;\n\n            switch (si.TextAlign)\n            {\n                case TextAlignEnum.Right:\n                    layout.Alignment = Alignment.Right;\n                    break;\n                case TextAlignEnum.Center:\n                    layout.Alignment = Alignment.Center;\n                    break;\n                case TextAlignEnum.Left:\n                default:\n                    layout.Alignment = Alignment.Left;\n                    break;\n            }\n\n            layout.Width = Units.FromPixels((int)(r.Width - si.PaddingLeft - si.PaddingRight - 2));\n            //\t\t\t\tlayout.Width = \t(int)Pango.Units.FromPixels((int)r.Width);\n\n            layout.SetText(s);\n\n            Pango.Rectangle logical;\n            Pango.Rectangle ink;\n            layout.GetExtents(out ink, out logical);\n            double height = logical.Height / Pango.Scale.PangoScale;\n            double y = 0;\n            switch (si.VerticalAlign)\n            {\n                case VerticalAlignEnum.Top:\n                    y = r.Y + si.PaddingTop;\n                    break;\n                case VerticalAlignEnum.Middle:\n                    y = r.Y + ((r.Height - height) / 2);\n                    break;\n                case VerticalAlignEnum.Bottom:\n                    y = r.Y + (r.Height - height) - si.PaddingBottom;\n                    break;\n            }\n\n            Rectangle box = new(\n                r.X + si.PaddingLeft + 1,\n                y,\n                r.Width,\n                r.Height);\n\n            g.SetSourceColor(si.Color.ToCairoColor());\n\n            g.MoveTo(box.X, box.Y);\n\n            CairoHelper.ShowLayout(g, layout);\n\n            layout.FontDescription = oldfont;\n            g.Restore();\n        }\n\n\n        protected override void OnSizeAllocated(Gdk.Rectangle allocation)\n        {\n            base.OnSizeAllocated(allocation);\n            // Insert layout code here.\n        }\n\n        public override void Destroy()\n        {\n            lock (drawLock)\n            {\n                try { cachedSurface?.Dispose(); } catch { }\n                cachedSurface = null;\n            }\n\n            base.Destroy();\n        }\n\n        protected override void OnGetPreferredWidth(out int minimumWidth, out int naturalWidth)\n        {\n            if (report != null)\n            {\n                minimumWidth = (int)(report.PageWidthPoints * scale) + (rep_padding * 2);\n                naturalWidth = minimumWidth;\n            }\n            else\n            {\n                minimumWidth = 0;\n                naturalWidth = 0;\n            }\n        }\n\n        protected override void OnGetPreferredHeight(out int minimumHeight, out int naturalHeight)\n        {\n            if (report != null)\n            {\n                minimumHeight = (int)(report.PageHeightPoints * scale) + (rep_padding * 2);\n                naturalHeight = minimumHeight;\n            }\n            else\n            {\n                minimumHeight = 0;\n                naturalHeight = 0;\n            }\n        }\n\n        private class HitListEntry\n        {\n            internal readonly PageItem pi;\n            internal readonly PointF[] poly;\n            internal readonly Rectangle rect;\n\n            internal HitListEntry(Rectangle r, PageItem pitem)\n            {\n                rect = r;\n                pi = pitem;\n                poly = null;\n            }\n\n            internal HitListEntry(PagePolygon pp, float x, float y, ReportArea ra)\n            {\n                pi = pp;\n                poly = new PointF[pp.Points.Length];\n                for (int i = 0; i < pp.Points.Length; i++)\n                {\n                    poly[i].X = ra.PixelsX(pp.Points[i].X + x);\n                    poly[i].Y = ra.PixelsY(pp.Points[i].Y + y);\n                }\n\n                rect = new Rectangle(0, 0, 0, 0);\n            }\n\n            /// <summary>\n            ///     Contains- determine whether point in the pageitem\n            /// </summary>\n            /// <param name=\"p\"></param>\n            /// <returns></returns>\n            internal bool Contains(PointD p)\n            {\n                return pi is PagePolygon ? PointInPolygon(p) : rect.ContainsPoint(p.X, p.Y);\n            }\n\n            /// <summary>\n            ///     PointInPolygon: uses ray casting algorithm ( http://en.wikipedia.org/wiki/Point_in_polygon )\n            /// </summary>\n            /// <param name=\"p\"></param>\n            /// <returns></returns>\n            private bool PointInPolygon(PointD p)\n            {\n                PointF p1, p2;\n                bool bIn = false;\n                if (poly.Length < 3)\n                {\n                    return false;\n                }\n\n                PointF op = new(poly[poly.Length - 1].X, poly[poly.Length - 1].Y);\n                for (int i = 0; i < poly.Length; i++)\n                {\n                    PointF np = new(poly[i].X, poly[i].Y);\n                    if (np.X > op.X)\n                    {\n                        p1 = op;\n                        p2 = np;\n                    }\n                    else\n                    {\n                        p1 = np;\n                        p2 = op;\n                    }\n\n                    if ((np.X < p.X) == (p.X <= op.X)\n                        && (p.Y - p1.Y) * (p2.X - p1.X) < (p2.Y - p1.Y) * (p.X - p1.X))\n                    {\n                        bIn = !bIn;\n                    }\n\n                    op = np;\n                }\n\n                return bIn;\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "RdlGtk3/ReportExporter.cs",
    "content": "﻿using Majorsilence.Reporting.Rdl;\nusing System;\nusing System.Collections.Specialized;\nusing System.IO;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.RdlGtk3\n{\n    public static class ReportExporter\n    {\n        private static Report report;\n        private static string connectionString;\n        private static bool overwriteSubreportConnection;\n        private static string workingDirectory;\n        private static Uri sourceFileUri;\n\n        // GetParameters creates a list dictionary\n        // consisting of a report parameter name and a value.\n        private static ListDictionary GetParmeters(string parms)\n        {\n            if (string.IsNullOrWhiteSpace(parms.Trim()))\n            {\n                return null;\n            }\n\n            ListDictionary ld = new();\n            if (parms == null)\n            {\n                return ld; // dictionary will be empty in this case\n            }\n\n            // parms are separated by & \n\n            char[] breakChars = new[] { '&' };\n            string[] ps = parms.Split(breakChars);\n\n            foreach (string p in ps)\n            {\n                int iEq = p.IndexOf(\"=\");\n                if (iEq > 0)\n                {\n                    string name = p.Substring(0, iEq);\n                    string val = p.Substring(iEq + 1);\n                    ld.Add(name, val);\n                }\n            }\n\n            return ld;\n        }\n\n        private static async Task<Report> GetReport(string reportSource)\n        {\n            // Now parse the file \n\n            RDLParser rdlp;\n            Report r;\n\n            rdlp = new RDLParser(reportSource);\n            rdlp.Folder = workingDirectory;\n            rdlp.OverwriteConnectionString = connectionString;\n            rdlp.OverwriteInSubreport = overwriteSubreportConnection;\n            // RDLParser takes RDL XML and Parse compiles the report\n\n            r = await rdlp.Parse();\n            if (r.ErrorMaxSeverity > 0)\n            {\n                foreach (string emsg in r.ErrorItems)\n                {\n                    Console.WriteLine(emsg);\n                }\n            }\n\n            return r;\n        }\n\n        #region Export to file\n\n        /// <summary>\n        ///     Export the report to file\n        /// </summary>\n        /// <param name=\"filename\">Filename.</param>\n        /// <param name=\"parameters\">Example: parameter1=someValue&parameter2=anotherValue</param>\n        /// <param name=\"connectionString\">Relace all Connection string in report.</param>\n        /// <param name=\"overwriteSubreportConnection\">If true connection string in subreport also will be overwrite</param>\n        public static async Task Export(Uri filename, string parameters, string connectionStr, string fileName,\n            OutputPresentationType exportType, bool overwriteSubreportCon = false)\n        {\n            //SourceFile = filename;\n\n            connectionString = connectionStr;\n            overwriteSubreportConnection = overwriteSubreportCon;\n\n            await Export(filename, parameters, fileName, exportType);\n        }\n\n        /// <summary>\n        ///     Export the report to file\n        /// </summary>\n        /// <param name=\"source\">Xml source of report</param>\n        /// <param name=\"parameters\">Example: parameter1=someValue&parameter2=anotherValue</param>\n        /// <param name=\"connectionString\">Relace all Connection string in report.</param>\n        /// <param name=\"overwriteSubreportConnection\">If true connection string in subreport also will be overwrite</param>\n        public static async Task Export(string source, string parameters, string connectionStr, string fileName,\n            OutputPresentationType exportType, bool overwriteSubreportCon = false)\n        {\n            connectionString = connectionStr;\n            overwriteSubreportConnection = overwriteSubreportCon;\n\n            await Export(source, parameters, fileName, exportType);\n        }\n\n        /// <summary>\n        ///     Export the report to file\n        /// </summary>\n        /// <param name='filename'>\n        ///     Filename.\n        /// </param>\n        public static async Task Export(Uri filename, string fileName, OutputPresentationType exportType)\n        {\n            await Export(filename, \"\", fileName, exportType);\n        }\n\n        /// <summary>\n        ///     Export the report to file\n        /// </summary>\n        /// <param name='sourcefile'>\n        ///     Filename.\n        /// </param>\n        /// <param name='parameters'>\n        ///     Example: parameter1=someValue&parameter2=anotherValue\n        /// </param>\n        public static async Task Export(Uri sourcefile, string parameters, string fileName,\n            OutputPresentationType exportType)\n        {\n            sourceFileUri = sourcefile;\n            workingDirectory = Path.GetDirectoryName(sourcefile.LocalPath);\n\n            string source = File.ReadAllText(sourcefile.LocalPath);\n            await Export(source, parameters, fileName, exportType);\n        }\n\n        /// <summary>\n        ///     Export the report to file\n        /// </summary>\n        /// <param name=\"source\">Xml source of report</param>\n        /// <param name=\"parameters\">Example: parameter1=someValue&parameter2=anotherValue</param>\n        public static async Task Export(string source, string parameters, string fileName,\n            OutputPresentationType exportType)\n        {\n            // Compile the report \n            report = await GetReport(source);\n            if (report == null)\n            {\n                throw new ArgumentException(\"Can not compile report\");\n            }\n\n            await report.RunGetData(GetParmeters(parameters));\n\n            OneFileStreamGen sg = null;\n\n            try\n            {\n                sg = new OneFileStreamGen(fileName, true);\n                await report.RunRender(sg, exportType);\n            }\n            finally\n            {\n                if (sg != null)\n                {\n                    sg.CloseMainStream();\n                }\n            }\n        }\n\n        #endregion\n\n        #region Export to memory stream\n\n        /// <summary>\n        ///     Export the report to memory stream\n        /// </summary>\n        /// <param name=\"filename\">Filename.</param>\n        /// <param name=\"parameters\">Example: parameter1=someValue&parameter2=anotherValue</param>\n        /// <param name=\"connectionString\">Relace all Connection string in report.</param>\n        /// <param name=\"overwriteSubreportConnection\">If true connection string in subreport also will be overwrite</param>\n        public static async Task<MemoryStream> ExportToMemoryStream(Uri filename, string parameters,\n            string connectionStr, OutputPresentationType exportType, bool overwriteSubreportCon = false)\n        {\n            //SourceFile = filename;\n\n            connectionString = connectionStr;\n            overwriteSubreportConnection = overwriteSubreportCon;\n\n            return await ExportToMemoryStream(filename, parameters, exportType);\n        }\n\n        /// <summary>\n        ///     Export the report to memory stream\n        /// </summary>\n        /// <param name=\"source\">Xml source of report</param>\n        /// <param name=\"parameters\">Example: parameter1=someValue&parameter2=anotherValue</param>\n        /// <param name=\"connectionString\">Relace all Connection string in report.</param>\n        /// <param name=\"overwriteSubreportConnection\">If true connection string in subreport also will be overwrite</param>\n        public static async Task<MemoryStream> ExportToMemoryStream(string source, string parameters,\n            string connectionStr, OutputPresentationType exportType, bool overwriteSubreportCon = false)\n        {\n            connectionString = connectionStr;\n            overwriteSubreportConnection = overwriteSubreportCon;\n\n            return await ExportToMemoryStream(source, parameters, exportType);\n        }\n\n        /// <summary>\n        ///     Export the report to memory stream\n        /// </summary>\n        /// <param name='filename'>\n        ///     Filename.\n        /// </param>\n        public static async Task<MemoryStream> ExportToMemoryStream(Uri filename, OutputPresentationType exportType)\n        {\n            return await ExportToMemoryStream(filename, \"\", exportType);\n        }\n\n        /// <summary>\n        ///     Export the report to memory stream\n        /// </summary>\n        /// <param name='sourcefile'>\n        ///     Filename.\n        /// </param>\n        /// <param name='parameters'>\n        ///     Example: parameter1=someValue&parameter2=anotherValue\n        /// </param>\n        public static async Task<MemoryStream> ExportToMemoryStream(Uri sourcefile, string parameters,\n            OutputPresentationType exportType)\n        {\n            sourceFileUri = sourcefile;\n            workingDirectory = Path.GetDirectoryName(sourcefile.LocalPath);\n\n            string source = File.ReadAllText(sourcefile.LocalPath);\n            return await ExportToMemoryStream(source, parameters, exportType);\n        }\n\n        /// <summary>\n        ///     Export the report to memory stream\n        /// </summary>\n        /// <param name=\"source\">Xml source of report</param>\n        /// <param name=\"parameters\">Example: parameter1=someValue&parameter2=anotherValue</param>\n        public static async Task<MemoryStream> ExportToMemoryStream(string source, string parameters,\n            OutputPresentationType exportType)\n        {\n            // Compile the report \n            report = await GetReport(source);\n            if (report == null)\n            {\n                throw new ArgumentException(\"Can not compile report\");\n            }\n\n            await report.RunGetData(GetParmeters(parameters));\n\n            using (MemoryStreamGen ms = new())\n            {\n                try\n                {\n                    await report.RunRender(ms, exportType);\n                    return ms.GetStream() as MemoryStream;\n                }\n                finally\n                {\n                    ms.CloseMainStream();\n                    report?.Dispose();\n                    report = null;\n                }\n            }\n        }\n\n        #endregion\n    }\n}"
  },
  {
    "path": "RdlGtk3/ReportViewer.cs",
    "content": "// \n//  ReportViewer.cs\n//  \n//  Author:\n//       Krzysztof Marecki\n// \n//  Copyright (c) 2010 Krzysztof Marecki\n//  Copyright (c) 2012 Peter Gill\n// \n// This file is part of the NReports project\n// This file is part of the My-FyiReporting project \n//\t\n//   Licensed under the Apache License, Version 2.0 (the \"License\");\n//   you may not use this file except in compliance with the License.\n//   You may obtain a copy of the License at\n//\n//       http://www.apache.org/licenses/LICENSE-2.0\n//\n//   Unless required by applicable law or agreed to in writing, software\n//   distributed under the License is distributed on an \"AS IS\" BASIS,\n//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//   See the License for the specific language governing permissions and\n//   limitations under the License.\n\nusing Cairo;\nusing Gtk;\nusing Majorsilence.Reporting.Rdl;\nusing System;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.ComponentModel;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Action = Gtk.Action;\nusing Strings = Majorsilence.Reporting.RdlEngine.Resources.Strings;\n\nnamespace Majorsilence.Reporting.RdlGtk3\n{\n    [ToolboxItem(true)]\n    public class ReportViewer : Bin\n    {\n        private string _connectionString;\n        private Action<Pages> _customPrintAction;\n        private ToggleAction _errorsAction;\n        private Box _hbox;\n        private bool _overwriteSubreportConnection;\n        private Pages _pages;\n        private Action _printAction;\n        private PrintOperation _printing;\n        private Action _refreshAction;\n        private Report _report;\n        private OutputPresentationType[] _restrictedOutputPresentationTypes;\n        private Action _saveAsAction;\n        private Box _vbox;\n        private Action _zoomInAction;\n        private Action _zoomOutAction;\n\n        public NeedPassword DataSourceReferencePassword = null;\n        private Paned _hpanedReport;\n\n        private int _hpanedWidth;\n        private ScrolledWindow _scrolledwindowErrors;\n        private ScrolledWindow _scrolledwindowPages;\n\n        private bool _showErrors;\n\n        private bool _showParams;\n\n        private Uri _sourceFile;\n        private TextView _textviewErrors;\n        private Box _vboxPages;\n        private Box _vboxParameters;\n\n        public ReportViewer()\n        {\n            Build();\n            Parameters = new ListDictionary();\n\n            _errorsAction.Toggled += OnErrorsActionToggled;\n            DisableActions();\n            ShowErrors = false;\n        }\n\n        private Toolbar ActionGroup { get; set; }\n\n        public ListDictionary Parameters { get; private set; }\n\n        public bool ShowErrors\n        {\n            get => _showErrors;\n            set\n            {\n                _showErrors = value;\n                CheckVisibility();\n            }\n        }\n\n        public string DefaultExportFileName { get; set; } = \"report\";\n\n        public bool ShowParameters\n        {\n            get => _showParams;\n            set\n            {\n                _showParams = value;\n                CheckVisibility();\n            }\n        }\n\n        public string WorkingDirectory { get; set; }\n\n        public Uri SourceFile\n        {\n            get => _sourceFile;\n            private set\n            {\n                _sourceFile = value;\n                WorkingDirectory = System.IO.Path.GetDirectoryName(_sourceFile.LocalPath);\n            }\n        }\n\n        public event EventHandler ReportPrinted;\n\n        protected virtual void Build()\n        {\n            ActionGroup = new Toolbar();\n\n#pragma warning disable CS0612 // Type or member is obsolete\n            _refreshAction = new Action(\"refresh\", \"Refresh\", \"gtk-refresh\", Stock.Refresh);\n            _refreshAction.IsImportant = true;\n            _refreshAction.Tooltip = \"Refresh the report\";\n            ActionGroup.Add(_refreshAction.CreateToolItem());\n\n            _saveAsAction = new Action(\"export\", \"Export\", \"gtk-save-as\", Stock.SaveAs);\n            _saveAsAction.Tooltip = \"Export as PDF, CSV, ASP, HTML, MHTML, XML, Excel\";\n            ActionGroup.Add(_saveAsAction.CreateToolItem());\n\n            _printAction = new Action(\"print\", \"Print\", \"gtk-print\", Stock.Print);\n            _printAction.Tooltip = \"Print the report\";\n            ActionGroup.Add(_printAction.CreateToolItem());\n\n            _zoomOutAction = new Action(\"zoom-out\", \"Zoom Out\", \"gtk-zoom-out\", Stock.ZoomOut);\n\n            _zoomOutAction.IsImportant = true;\n\n            _zoomOutAction.Tooltip = \"Zoom out the report\";\n            ActionGroup.Add(_zoomOutAction.CreateToolItem());\n\n            _zoomInAction = new Action(\"zoom-in\", \"Zoom In\", \"gtk-zoom-in\", Stock.ZoomIn);\n            _zoomInAction.IsImportant = true;\n            _zoomInAction.Tooltip = \"Zoom in the report\";\n            ActionGroup.Add(_zoomInAction.CreateToolItem());\n\n            _errorsAction = new ToggleAction(\"errors\", \"Errors\", \"gtk-dialog-warning\", Stock.DialogWarning);\n            _errorsAction.IsImportant = true;\n            _errorsAction.DrawAsRadio = true;\n            ActionGroup.Add(_errorsAction.CreateToolItem());\n\n            _vbox = new Box(Orientation.Vertical, 6);\n            _vbox.Homogeneous = false;\n            _vbox.Expand = true;\n\n\n            _hbox = new Box(Orientation.Horizontal, 6);\n            _hbox.Homogeneous = false;\n            _hbox.Expand = true;\n            _vboxParameters = new Box(Orientation.Horizontal, 6);\n            _vboxParameters.Homogeneous = false;\n            _hbox.PackStart(_vboxParameters, false, false, 0);\n            _vbox.Add(ActionGroup);\n\n            _hpanedReport = new Paned(Orientation.Horizontal);\n            _hpanedReport.Expand = true;\n            _scrolledwindowPages = new ScrolledWindow();\n            _scrolledwindowPages.Expand = true;\n\n            Viewport gtkViewport = new();\n            gtkViewport.Expand = true;\n            _vboxPages = new Box(Orientation.Vertical, 6);\n            _vboxPages.Homogeneous = false;\n            _vboxPages.Expand = true;\n            gtkViewport.Add(_vboxPages);\n            _scrolledwindowPages.Add(gtkViewport);\n            _hpanedReport.Pack1(_scrolledwindowPages, true, true);\n\n            _scrolledwindowErrors = new ScrolledWindow();\n            _textviewErrors = new TextView();\n            _textviewErrors.WidthRequest = 200;\n            _textviewErrors.Editable = false;\n            _textviewErrors.WrapMode = WrapMode.WordChar;\n            _scrolledwindowErrors.Add(_textviewErrors);\n            _hpanedReport.Pack2(_scrolledwindowErrors, true, true);\n\n            _hbox.PackEnd(_hpanedReport, true, true, 0);\n            _vbox.PackEnd(_hbox, true, true, 0);\n\n            Add(_vbox);\n            _vbox.ShowAll();\n\n            _refreshAction.Activated += OnRefreshActionActivated;\n            _saveAsAction.Activated += OnPdfActionActivated;\n            _printAction.Activated += OnPrintActionActivated;\n            _zoomOutAction.Activated += OnZoomOutActionActivated;\n            _zoomInAction.Activated += OnZoomInActionActivated;\n            _hpanedReport.SizeAllocated += OnHpanedReportSizeAllocated;\n#pragma warning restore CS0612 // Type or member is obsolete\n        }\n\n        /// <summary>\n        ///     Loads the report.\n        /// </summary>\n        /// <param name=\"filename\">Filename.</param>\n        /// <param name=\"parameters\">Example: parameter1=someValue&parameter2=anotherValue</param>\n        /// <param name=\"connectionString\">Relace all Connection string in report.</param>\n        /// <param name=\"overwriteSubreportConnection\">If true connection string in subreport also will be overwrite</param>\n        /// <param name=\"restrictedOutputPresentationTypes\">\n        ///     Restricts <see cref=\"OutputPresentationType\" /> to chose from in export\n        ///     dialog\n        /// </param>\n        /// <param name=\"customPrintAction\">>For use a custom print action</param>\n        public async Task LoadReport(Uri filename, string parameters, string connectionString,\n            bool overwriteSubreportConnection = false,\n            OutputPresentationType[] restrictedOutputPresentationTypes = null, Action<Pages> customPrintAction = null)\n        {\n            SourceFile = filename;\n\n            _connectionString = connectionString;\n            _overwriteSubreportConnection = overwriteSubreportConnection;\n            _customPrintAction = customPrintAction;\n\n            await LoadReport(filename, parameters, restrictedOutputPresentationTypes);\n        }\n\n        /// <summary>\n        ///     Loads the report.\n        /// </summary>\n        /// <param name=\"source\">Xml source of report</param>\n        /// <param name=\"parameters\">Example: parameter1=someValue&parameter2=anotherValue</param>\n        /// <param name=\"connectionString\">Relace all Connection string in report.</param>\n        /// <param name=\"overwriteSubreportConnection\">If true connection string in subreport also will be overwrite</param>\n        /// <param name=\"restrictedOutputPresentationTypes\">\n        ///     Restricts <see cref=\"OutputPresentationType\" /> to chose from in export\n        ///     dialog\n        /// </param>\n        public async Task LoadReport(string source, string parameters, string connectionString,\n            bool overwriteSubreportConnection = false,\n            OutputPresentationType[] restrictedOutputPresentationTypes = null)\n        {\n            _connectionString = connectionString;\n            _overwriteSubreportConnection = overwriteSubreportConnection;\n\n            await LoadReport(source, parameters, restrictedOutputPresentationTypes);\n        }\n\n        /// <summary>\n        ///     Loads the report.\n        /// </summary>\n        /// <param name='filename'>Filename.</param>\n        /// <param name=\"restrictedOutputPresentationTypes\">\n        ///     Restricts <see cref=\"OutputPresentationType\" /> to chose from in export\n        ///     dialog\n        /// </param>\n        public async Task LoadReport(Uri filename, OutputPresentationType[] restrictedOutputPresentationTypes = null)\n        {\n            await LoadReport(filename, \"\", restrictedOutputPresentationTypes);\n        }\n\n        /// <summary>\n        ///     Loads the report.\n        /// </summary>\n        /// <param name='sourcefile'>Filename.</param>\n        /// <param name='parameters'>Example: parameter1=someValue&parameter2=anotherValue</param>\n        /// <param name=\"restrictedOutputPresentationTypes\">\n        ///     Restricts <see cref=\"OutputPresentationType\" /> to chose from in export\n        ///     dialog\n        /// </param>\n        public async Task LoadReport(Uri sourcefile, string parameters,\n            OutputPresentationType[] restrictedOutputPresentationTypes = null)\n        {\n            SourceFile = sourcefile;\n\n            string source = await File.ReadAllTextAsync(sourcefile.LocalPath);\n            await LoadReport(source, parameters, restrictedOutputPresentationTypes);\n        }\n\n        /// <summary>\n        ///     Loads the report.\n        /// </summary>\n        /// <param name=\"source\">Xml source of report</param>\n        /// <param name=\"parameters\">Example: parameter1=someValue&parameter2=anotherValue</param>\n        /// <param name=\"restrictedOutputPresentationTypes\">\n        ///     Restricts <see cref=\"OutputPresentationType\" /> to chose from in export\n        ///     dialog\n        /// </param>\n        public async Task LoadReport(string source, string parameters,\n            OutputPresentationType[] restrictedOutputPresentationTypes = null)\n        {\n            _restrictedOutputPresentationTypes = restrictedOutputPresentationTypes ?? new OutputPresentationType[0];\n\n            // Any parameters?  e.g.  file1.rdl?orderid=5 \n            if (parameters.Trim() != \"\")\n            {\n                Parameters = GetParmeters(parameters);\n            }\n            else\n            {\n                Parameters = new ListDictionary();\n            }\n\n            // Compile the report \n            _report = await GetReport(source);\n            if (_report == null)\n            {\n                return;\n            }\n\n            AddParameterControls();\n\n            await RefreshReport();\n        }\n\n        private async Task RefreshReport()\n        {\n            if (ShowParameters)\n            {\n                SetParametersFromControls();\n            }\n\n            await _report.RunGetData(Parameters);\n            _pages = await _report.BuildPages();\n\n            // All GTK widget updates must run on the main thread. Use Application.Invoke to marshal.\n            Application.Invoke(delegate\n            {\n                try\n                {\n                    foreach (Widget w in _vboxPages.AllChildren.Cast<Widget>().ToList())\n                    {\n                        _vboxPages.Remove(w);\n                        try\n                        {\n                            w.Destroy();\n                        }\n                        catch (Exception ex)\n                        {\n                            Console.WriteLine(\"Warning destroying widget: \" + ex.Message);\n                        }\n                    }\n\n                    for (int pageCount = 0; pageCount < _pages.Count; pageCount++)\n                    {\n                        ReportArea area = new();\n                        area.SetReport(_report, _pages[pageCount]);\n                        //area.Scale\n                        _vboxPages.Add(area);\n                    }\n\n                    ShowAll();\n\n                    SetErrorMessages(_report.ErrorItems);\n\n                    if (_report.ErrorMaxSeverity == 0)\n                    {\n                        _showErrors = false;\n                    }\n\n                    //\t\t\tTitle = string.Format (\"RDL report viewer - {0}\", report.Name);\n                    EnableActions();\n                    CheckVisibility();\n                }\n                catch (Exception ex)\n                {\n                    // Don't allow UI update failures to crash the app. Log and carry on.\n                    Console.WriteLine(\"UI update failed during RefreshReport: \" + ex);\n                }\n            });\n        }\n\n        protected void OnZoomOutActionActivated(object sender, EventArgs e)\n        {\n            foreach (Widget w in _vboxPages.AllChildren)\n            {\n                if (w is ReportArea)\n                {\n                    ((ReportArea)w).Scale -= 0.1f;\n                }\n            }\n            //reportarea.Scale -= 0.1f;\n        }\n\n        protected void OnZoomInActionActivated(object sender, EventArgs e)\n        {\n            foreach (Widget w in _vboxPages.AllChildren)\n            {\n                if (w is ReportArea)\n                {\n                    ((ReportArea)w).Scale += 0.1f;\n                }\n            }\n            //reportarea.Scale += 0.1f;\n        }\n\n        // GetParameters creates a list dictionary\n        // consisting of a report parameter name and a value.\n        private ListDictionary GetParmeters(string parms)\n        {\n            ListDictionary ld = new();\n            if (parms == null)\n            {\n                return ld; // dictionary will be empty in this case\n            }\n\n            // parms are separated by & \n\n            char[] breakChars = new[] { '&' };\n            string[] ps = parms.Split(breakChars);\n\n            foreach (string p in ps)\n            {\n                int iEq = p.IndexOf(\"=\");\n                if (iEq > 0)\n                {\n                    string name = p.Substring(0, iEq);\n                    string val = p.Substring(iEq + 1);\n                    ld.Add(name, val);\n                }\n            }\n\n            return ld;\n        }\n\n        private async Task<Report> GetReport(string reportSource)\n        {\n            // Now parse the file \n\n            RDLParser rdlp;\n            Report r;\n\n            rdlp = new RDLParser(reportSource);\n            rdlp.Folder = WorkingDirectory;\n            rdlp.OverwriteConnectionString = _connectionString;\n            rdlp.OverwriteInSubreport = _overwriteSubreportConnection;\n            // RDLParser takes RDL XML and Parse compiles the report\n\n            r = await rdlp.Parse();\n            if (r.ErrorMaxSeverity > 0)\n            {\n                foreach (string emsg in r.ErrorItems)\n                {\n                    Console.WriteLine(emsg);\n                }\n\n                SetErrorMessages(r.ErrorItems);\n\n                int severity = r.ErrorMaxSeverity;\n                r.ErrorReset();\n                if (severity > 4)\n                {\n#pragma warning disable CS0612 // Type or member is obsolete\n                    _errorsAction.Active = true;\n#pragma warning restore CS0612 // Type or member is obsolete\n                    return null; // don't return when severe errors\n                }\n            }\n\n            return r;\n        }\n\n\n        private void OnErrorsActionToggled(object sender, EventArgs e)\n        {\n#pragma warning disable CS0612 // Type or member is obsolete\n            ShowErrors = _errorsAction.Active;\n#pragma warning restore CS0612 // Type or member is obsolete\n        }\n\n        private void CheckVisibility()\n        {\n            if (ShowErrors)\n            {\n                _scrolledwindowErrors.ShowAll();\n            }\n            else\n            {\n                _scrolledwindowErrors.Hide();\n            }\n\n            //scrolledwindowErrors.HideAll();\n            if (ShowParameters)\n            {\n                _vboxParameters.ShowAll();\n            }\n            //vboxParameters.HideAll();\n        }\n\n        protected override void OnShown()\n        {\n            base.OnShown();\n            CheckVisibility();\n        }\n\n        private void DisableActions()\n        {\n#pragma warning disable CS0612 // Type or member is obsolete\n            _saveAsAction.Sensitive = false;\n            _refreshAction.Sensitive = false;\n            _printAction.Sensitive = false;\n            _zoomInAction.Sensitive = false;\n            _zoomOutAction.Sensitive = false;\n#pragma warning restore CS0612 // Type or member is obsolete\n        }\n\n        private void EnableActions()\n        {\n#pragma warning disable CS0612 // Type or member is obsolete\n            _saveAsAction.Sensitive = true;\n            _refreshAction.Sensitive = true;\n            _printAction.Sensitive = true;\n            _zoomInAction.Sensitive = true;\n            _zoomOutAction.Sensitive = true;\n#pragma warning restore CS0612 // Type or member is obsolete\n        }\n\n        private void AddParameterControls()\n        {\n            foreach (Widget child in _vboxParameters.Children.Cast<Widget>().ToList())\n            {\n                _vboxParameters.Remove(child);\n                child.Destroy();\n            }\n\n            foreach (UserReportParameter rp in _report.UserReportParameters)\n            {\n#pragma warning disable CS0612 // Type or member is obsolete\n                HBox hbox = new();\n#pragma warning restore CS0612 // Type or member is obsolete\n                Label labelPrompt = new();\n#pragma warning disable CS0612 // Type or member is obsolete\n                labelPrompt.SetAlignment(0, 0.5f);\n#pragma warning restore CS0612 // Type or member is obsolete\n                labelPrompt.Text = string.Format(\"{0} :\", rp.Prompt);\n                hbox.PackStart(labelPrompt, true, true, 0);\n                Entry entryValue = new();\n                if (Parameters.Contains(rp.Name))\n                {\n                    if (Parameters[rp.Name] != null)\n                    {\n                        entryValue.Text = Parameters[rp.Name].ToString();\n                    }\n                }\n                else\n                {\n                    if (rp.DefaultValue != null)\n                    {\n                        StringBuilder sb = new();\n                        for (int i = 0; i < rp.DefaultValue.Length; i++)\n                        {\n                            if (i > 0)\n                            {\n                                sb.Append(\", \");\n                            }\n\n                            sb.Append(rp.DefaultValue[i]);\n                        }\n\n                        entryValue.Text = sb.ToString();\n                    }\n                }\n\n                hbox.PackStart(entryValue, false, false, 0);\n                _vboxParameters.PackStart(hbox, false, false, 0);\n            }\n        }\n\n        private void SetParametersFromControls()\n        {\n            int i = 0;\n            foreach (UserReportParameter rp in _report.UserReportParameters)\n            {\n                HBox hbox = (HBox)_vboxParameters.Children[i];\n                Entry entry = (Entry)hbox.Children[1];\n                //parameters.Add (rp.Name, entry.Text);\n                Parameters[rp.Name] = entry.Text;\n                i++;\n            }\n        }\n\n        private void SetErrorMessages(IList errors)\n        {\n            _textviewErrors.Buffer.Clear();\n\n            if (errors == null || errors.Count == 0)\n            {\n                return;\n            }\n\n            StringBuilder msgs = new();\n            msgs.AppendLine(\"Report rendering errors:\");\n            msgs.AppendLine();\n            foreach (object error in errors)\n            {\n                msgs.AppendLine(error.ToString());\n            }\n\n            _textviewErrors.Buffer.Text = msgs.ToString();\n            \n#pragma warning disable CS0612 // Type or member is obsolete\n            //_errorsAction.VisibleHorizontal = _report.ErrorMaxSeverity > 0;\n#pragma warning restore CS0612 // Type or member is obsolete\n\n        }\n\n        protected async void OnPdfActionActivated(object sender, EventArgs e)\n        {\n            await SaveReport();\n        }\n\n        public async Task SaveReport()\n        {\n            // *********************************\n            object[] param = new object[4];\n            param[0] = Strings.ButtonCancel_Text;\n            param[1] = ResponseType.Cancel;\n            param[2] = Strings.ButtonSave_Text;\n            param[3] = ResponseType.Accept;\n\n            FileChooserDialog fc =\n                new(Strings.FileChooser_SaveFileTo_Title,\n                    null,\n                    FileChooserAction.Save,\n                    param);\n\n            fc.CurrentName = DefaultExportFileName ?? _report.Name;\n\n            if (!_restrictedOutputPresentationTypes.Contains(OutputPresentationType.PDF))\n            {\n                FileFilter pdfFilter = new() { Name = \"PDF\" };\n                string extensionPDF = \".pdf\";\n                pdfFilter.AddPattern($\"*{extensionPDF}\");\n                fc.AddFilter(pdfFilter);\n            }\n\n            if (!_restrictedOutputPresentationTypes.Contains(OutputPresentationType.CSV))\n            {\n                FileFilter csvFilter = new() { Name = \"CSV\" };\n                string extensionCSV = \".csv\";\n                csvFilter.AddPattern($\"*{extensionCSV}\");\n                fc.AddFilter(csvFilter);\n            }\n\n            if (!_restrictedOutputPresentationTypes.Contains(OutputPresentationType.Excel2007DataOnly))\n            {\n                FileFilter excel2007Data = new() { Name = \"Excel no formatting\" };\n                string extensionXLSX = \".xlsx\";\n                excel2007Data.AddPattern($\"*{extensionXLSX}\");\n                fc.AddFilter(excel2007Data);\n            }\n\n            if (!_restrictedOutputPresentationTypes.Contains(OutputPresentationType.Excel2007))\n            {\n                FileFilter excel2007 = new() { Name = \"Excel with formatting\" };\n                string extensionXLSX = \".xlsx\";\n                excel2007.AddPattern($\"*{extensionXLSX}\");\n                fc.AddFilter(excel2007);\n            }\n\n            if (!_restrictedOutputPresentationTypes.Contains(OutputPresentationType.TIF))\n            {\n                FileFilter tiffFilter = new() { Name = \"TIFF\" };\n                string extensionTIFF = \".tiff\";\n                tiffFilter.AddPattern($\"*{extensionTIFF}\");\n                fc.AddFilter(tiffFilter);\n            }\n\n            if (!_restrictedOutputPresentationTypes.Contains(OutputPresentationType.ASPHTML))\n            {\n                FileFilter asphtmlFilter = new() { Name = \"ASP HTML\" };\n                string extensionASPHTML = \".asphtml\";\n                asphtmlFilter.AddPattern($\"*{extensionASPHTML}\");\n                fc.AddFilter(asphtmlFilter);\n            }\n\n            if (!_restrictedOutputPresentationTypes.Contains(OutputPresentationType.HTML))\n            {\n                FileFilter htmlFilter = new() { Name = \"HTML\" };\n                string extensionHTML = \".html\";\n                htmlFilter.AddPattern($\"*{extensionHTML}\");\n                fc.AddFilter(htmlFilter);\n            }\n\n            if (!_restrictedOutputPresentationTypes.Contains(OutputPresentationType.MHTML))\n            {\n                FileFilter mhtmlFilter = new() { Name = \"MHTML\" };\n                string extensionMHTML = \".mhtml\";\n                mhtmlFilter.AddPattern($\"*{extensionMHTML}\");\n                fc.AddFilter(mhtmlFilter);\n            }\n\n            if (!_restrictedOutputPresentationTypes.Contains(OutputPresentationType.XML))\n            {\n                FileFilter xmlFilter = new() { Name = \"XML\" };\n                string extensionXML = \".xml\";\n                xmlFilter.AddPattern($\"*{extensionXML}\");\n                fc.AddFilter(xmlFilter);\n            }\n\n            if (!fc.Filters.Any())\n            {\n                MessageDialog m = new(null, DialogFlags.Modal, MessageType.Info,\n                    ButtonsType.Ok, false,\n                    \"Export in all document formats is prohibited\");\n\n                m.WindowPosition = WindowPosition.Center;\n                m.Run();\n                m.Destroy();\n                fc.Destroy();\n                return;\n            }\n\n            if (fc.Run() == (int)ResponseType.Accept)\n            {\n                try\n                {\n                    string searchPattern = \"*\";\n\n                    string filename = fc.Filename;\n                    OutputPresentationType exportType = OutputPresentationType.PDF;\n                    if (fc.Filter.Name == \"CSV\")\n                    {\n                        exportType = OutputPresentationType.CSV;\n                        if (filename.ToLower().Trim().EndsWith(\".csv\") == false)\n                        {\n                            filename = filename + \".csv\";\n                            searchPattern = \"*.csv\";\n                        }\n                    }\n                    else if (fc.Filter.Name == \"PDF\")\n                    {\n                        exportType = OutputPresentationType.PDF;\n                        if (filename.ToLower().Trim().EndsWith(\".pdf\") == false)\n                        {\n                            filename = filename + \".pdf\";\n                            searchPattern = \"*.pdf\";\n                        }\n                    }\n                    else if (fc.Filter.Name == \"Excel 2007 Data\")\n                    {\n                        exportType = OutputPresentationType.ExcelTableOnly;\n                        if (filename.ToLower().Trim().EndsWith(\".xlsx\") == false)\n                        {\n                            filename = filename + \".xlsx\";\n                            searchPattern = \"*.xlsx\";\n                        }\n                    }\n                    else if (fc.Filter.Name == \"Excel 2007\")\n                    {\n                        exportType = OutputPresentationType.Excel2007;\n                        if (filename.ToLower().Trim().EndsWith(\".xlsx\") == false)\n                        {\n                            filename = filename + \".xlsx\";\n                            searchPattern = \"*.xlsx\";\n                        }\n                    }\n                    else if (fc.Filter.Name == \"TIFF\")\n                    {\n                        exportType = OutputPresentationType.TIF;\n                        if (filename.ToLower().Trim().EndsWith(\".tif\") == false)\n                        {\n                            filename = filename + \".tif\";\n                            searchPattern = \"*.tif\";\n                        }\n                    }\n                    else if (fc.Filter.Name == \"ASP HTML\")\n                    {\n                        exportType = OutputPresentationType.ASPHTML;\n                        if (filename.ToLower().Trim().EndsWith(\".asphtml\") == false)\n                        {\n                            filename = filename + \".asphtml\";\n                            searchPattern = \"*.asphtml\";\n                        }\n                    }\n                    else if (fc.Filter.Name == \"HTML\")\n                    {\n                        exportType = OutputPresentationType.HTML;\n                        if (filename.ToLower().Trim().EndsWith(\".html\") == false)\n                        {\n                            filename = filename + \".html\";\n                            searchPattern = \"*.html\";\n                        }\n                    }\n                    else if (fc.Filter.Name == \"MHTML\")\n                    {\n                        exportType = OutputPresentationType.MHTML;\n                        if (filename.ToLower().Trim().EndsWith(\".mhtml\") == false)\n                        {\n                            filename = filename + \".mhtml\";\n                            searchPattern = \"*.mhtml\";\n                        }\n                    }\n                    else if (fc.Filter.Name == \"XML\")\n                    {\n                        exportType = OutputPresentationType.XML;\n                        if (filename.ToLower().Trim().EndsWith(\".xml\") == false)\n                        {\n                            filename = filename + \".xml\";\n                            searchPattern = \"*.xml\";\n                        }\n                    }\n\n                    string directory = System.IO.Path.GetDirectoryName(filename);\n\n                    string[] files = Directory.GetFiles(directory, searchPattern);\n\n                    //Check for files with same name in directory\n                    if (files.Any())\n                    {\n                        for (int i = 0; i < files.Length; i++)\n                        {\n                            if (files[i] == filename)\n                            {\n                                //If found files with the same name in directory\n                                MessageDialog m = new(null, DialogFlags.Modal, MessageType.Question,\n                                    ButtonsType.YesNo, false,\n                                    Strings.SaveToFile_CheckIf_SameFilesInDir);\n\n                                m.SetPosition(WindowPosition.Center);\n                                ResponseType result = (ResponseType)m.Run();\n                                m.Destroy();\n                                if (result == ResponseType.Yes)\n                                {\n                                    // Must use the RunGetData before each export or there is no data.\n                                    await _report.RunGetData(Parameters);\n                                    await ExportReport(_report, filename, exportType);\n                                }\n\n                                break;\n                            }\n\n                            if (i + 1 == files.Length && files[i] != filename)\n                            {\n                                //If no files with the same name found in directory\n                                // Must use the RunGetData before each export or there is no data.\n                                await _report.RunGetData(Parameters);\n                                await ExportReport(_report, filename, exportType);\n                                break;\n                            }\n                        }\n                    }\n                    else\n                    {\n                        //If no files found in directory\n                        // Must use the RunGetData before each export or there is no data.\n                        await _report.RunGetData(Parameters);\n                        await ExportReport(_report, filename, exportType);\n                    }\n                }\n                catch (Exception ex)\n                {\n                    MessageDialog m = new(null, DialogFlags.Modal, MessageType.Info,\n                        ButtonsType.Ok, false,\n                        $\"Error Saving Copy of {fc.Filter?.Name}.\" + Environment.NewLine + ex.Message);\n\n                    m.Run();\n                    m.Destroy();\n                }\n            }\n\n            //Don't forget to call Destroy() or the FileChooserDialog window won't get closed.\n            fc.Destroy();\n        }\n\n        /// <summary>\n        ///     Save the report to the output selected.\n        /// </summary>\n        /// <param name='report'>\n        ///     Report.\n        /// </param>\n        /// <param name='FileName'>\n        ///     File name.\n        /// </param>\n        private async Task ExportReport(Report report, string FileName, OutputPresentationType exportType)\n        {\n            try\n            {\n                using OneFileStreamGen sg = new(FileName, true);\n                await report.RunRender(sg, exportType);\n            }\n            catch (Exception ex)\n            {\n                using MessageDialog m = new(null, DialogFlags.Modal, MessageType.Error,\n                    ButtonsType.Ok, false,\n                    ex.Message);\n\n                m.Run();\n                m.Destroy();\n            }\n        }\n\n        protected void OnPrintActionActivated(object sender, EventArgs e)\n        {\n        }\n\n        public void PrintReport()\n        {\n            using PrintContext context = new(Window.Handle);\n            if (_customPrintAction == null)\n            {\n                _printing = new PrintOperation();\n                _printing.Unit = Unit.Points;\n                _printing.UseFullPage = true;\n                _printing.DefaultPageSetup = new PageSetup();\n                _printing.DefaultPageSetup.Orientation =\n                    _report.PageHeightPoints > _report.PageWidthPoints\n                        ? PageOrientation.Portrait\n                        : PageOrientation.Landscape;\n\n                _printing.BeginPrint += HandlePrintBeginPrint;\n                _printing.DrawPage += HandlePrintDrawPage;\n                _printing.EndPrint += HandlePrintEndPrint;\n\n                _printing.Run(PrintOperationAction.PrintDialog, null);\n            }\n            else\n            {\n                _customPrintAction.Invoke(_pages);\n            }\n        }\n\n        private void HandlePrintBeginPrint(object o, BeginPrintArgs args)\n        {\n            _printing.NPages = _pages.Count;\n        }\n\n        private void HandlePrintDrawPage(object o, DrawPageArgs args)\n        {\n            if (args?.Context == null || _pages == null)\n            {\n                return;\n            }\n\n            using (Context g = args.Context.CairoContext)\n            using (RenderCairo render = new(g))\n            {\n                render.RunPage(_pages[args.PageNr]);\n            }\n        }\n\n        private void HandlePrintEndPrint(object o, EndPrintArgs args)\n        {\n            ReportPrinted?.Invoke(this, EventArgs.Empty);\n            _printing.BeginPrint -= HandlePrintBeginPrint;\n            _printing.DrawPage -= HandlePrintDrawPage;\n            _printing.EndPrint -= HandlePrintEndPrint;\n            _printing.DefaultPageSetup.Dispose();\n            _printing.Dispose();\n        }\n\n        protected async void OnRefreshActionActivated(object sender, EventArgs e)\n        {\n            await RefreshReport();\n        }\n\n        protected void OnHpanedReportSizeAllocated(object o, SizeAllocatedArgs args)\n        {\n            if (args.Allocation.Width != _hpanedWidth)\n            {\n                _hpanedWidth = args.Allocation.Width;\n                // int textviewWidth = scrolledwindowErrors.Allocation.Width + 10;\n                // hpanedReport.Position = hpanedWidth - textviewWidth;\n                _hpanedReport.Position = (int)(_hpanedWidth * 0.8);\n            }\n        }\n\n\n        public override void Destroy()\n        {\n            base.Destroy();\n        }\n\n        protected void OnDeleteEvent(object sender, DeleteEventArgs a)\n        {\n            _errorsAction.Toggled -= OnErrorsActionToggled;\n            _pages?.Dispose();\n            _pages = null;\n            _report?.Dispose();\n            Application.Quit();\n            a.RetVal = true;\n        }\n    }\n}\n\n"
  },
  {
    "path": "RdlGtk3/app.desktop",
    "content": "[Desktop Entry]\nEncoding=UTF-8\nType=Application\nName=RdlGtkViewer\nExec=rdlgtkviewer\nTerminal=false\n"
  },
  {
    "path": "RdlGtk3Viewer/Program.cs",
    "content": "﻿using Gtk;\n\nnamespace RdlGtk3Viewer\n{\n    class MainClass\n    {\n        public static void Main(string[] args)\n        {\n            Application.Init();\n            using var win = new Majorsilence.Reporting.RdlGtk3.MainWindow();\n            win.Show();\n            Application.Run();\n        }\n    }\n}"
  },
  {
    "path": "RdlGtk3Viewer/RdlGtk3Viewer.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\t<PropertyGroup>\n\t\t<OutputType>WinExe</OutputType>\n\t\t<RootNamespace>RdlGtk3Viewer</RootNamespace>\n\t\t<AssemblyName>RdlGtk3Viewer</AssemblyName>\n\t\t<Configurations>Debug;Release;Debug-DrawingCompat;Release-DrawingCompat</Configurations>\n\t\t<TargetFrameworks>net8.0;net10.0</TargetFrameworks>\n\t\t<WarningsAsErrors>4014</WarningsAsErrors>\n\t</PropertyGroup>\n\n\t<ItemGroup>\n\t\t<ProjectReference Include=\"..\\RdlGtk3\\Majorsilence.Reporting.RdlGtk3.csproj\" />\n\t</ItemGroup>\n\n\t<ItemGroup>\n\t\t<PackageReference Include=\"GtkSharp\" />\n\t\t<PackageReference Include=\"Microsoft.Data.SqlClient\" />\n\t\t<PackageReference Include=\"Microsoft.Data.Sqlite\" />\n\t\t<PackageReference Include=\"MySql.Data\" />\n\t\t<PackageReference Include=\"Npgsql\" />\n\t</ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "RdlGtk3Viewer/runtimeconfig.template.json",
    "content": "{\n  \"properties\": {\n    \"runtimeOptions\": {\n      \n    },\n    \"configProperties\": { \"System.Drawing.EnableUnixSupport\": true }\n  }\n}\n"
  },
  {
    "path": "RdlMapFile/DPSimp.cs",
    "content": "/* ====================================================================\n   Copyright (C) 2004-2008  fyiReporting Software, LLC\n   Copyright (C) 2011  Peter Gill <peter@majorsilence.com>\n\n   This file is part of the fyiReporting RDL project.\n\t\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at \n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n\n   For additional information, email info@fyireporting.com or visit\n   the website www.fyiReporting.com.\n*/\n// File derived from Douglas-Peucker line simplification algorithm implementation by Jack Snoeyink\n//   http://www.cs.sunysb.edu/~algorith/implement/DPsimp/implement.shtml\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Drawing;\n\nnamespace Majorsilence.Reporting.RdlMapFile\n{\n    public class DPSimp\n    {\n/*  \t\t\t\t1-26-94      Jack Snoeyink\nNon-recursive implementation of the Douglas Peucker line simplification\nalgorithm.\n*/\n\n        Stack<int> stack = new Stack<int>();         // recursion stack\n        Point[] V;\n        List<Point> R = new List<Point>();\n        bool outFlag = true;\n\n        internal DPSimp(Point[] vec)\n        {\n            V = vec;\n        }\n\n        internal Point[] GetDouglasPeuckerSimplified()\n        {\n            R.Clear();      // clear out result\n            \n            DPbasic(0, V.Length - 2);       // Assuming first and last point the same (closed polygon)\n\n            // Make sure we close the polygon\n            if (!(R[0].X == R[R.Count - 1].X &&\n                R[0].Y == R[R.Count - 1].Y))\n                R.Add(R[0]);\n\n            Point[] result = R.ToArray();\n            R.Clear();\n\n            return result;\n        }\n\n        class HOMOG \n        { \n            public int X=0; \n            public int Y=0; \n            public int W=0;\n\n            new public string ToString()\n            {\n                return string.Format(\"X={0}; Y={1}; W={2};\", X, Y, W);\n            }\n        }\n\n        void Find_Split(int i, int j, out int split, out float dist) /* linear search for farthest point */\n        {\n            int k;\n            HOMOG q= new HOMOG();\n            float tmp;\n            split = i;      // just to force a value\n            dist = -1;\n            if (i + 1 < j)\n            {\n                CROSSPROD_2CCH(V[i], V[j], q); /* out of loop portion */\n                /* of distance computation */\n                for (k = i + 1; k < j; k++)\n                {\n                    tmp = DOTPROD_2CH(V[k], q); /* distance computation */\n                    if (tmp < 0) tmp = -tmp; /* calling fabs() slows us down */\n                    if (tmp > dist)\n                    {\n                        dist = tmp;\t/* record the maximum */\n                        split = k;\n                    }\n                }\n                dist *= dist / (q.X * q.X + q.Y * q.Y); /* correction for segment */\n            }\t\t\t\t   /* length---should be redone if can == 0 */\n        }\n\n        void CROSSPROD_2CCH(Point p, Point q,  HOMOG r) /* 2-d cartesian to homog cross product */\n        {\n            r.W = p.X * q.Y - p.Y * q.X;\n            r.X = -q.Y + p.Y;\n            r.Y = q.X - p.X;\n        }\n\n        float DOTPROD_2CH(Point p, HOMOG q)\t/* 2-d cartesian to homog dot product */\n        {\n            return q.W + p.X * q.X + p.Y * q.Y;\n        }\n\n        void DPbasic(int i, int j)\t\t/* Basic DP line simplification */\n        {\n            int split;\n            float dist_sq;\n\n            stack.Clear();\n            stack.Push(j);\n            do\n            {\n                Find_Split(i, stack.Peek(), out split, out dist_sq);\n                if (dist_sq > 0.0f)\n                {\n                    stack.Push(split);\n                }\n                else\n                {\n                    Output(i, stack.Peek()); /* output segment Vi to Vtop */\n                    i = stack.Pop();\n                }\n            }\n            while (stack.Count > 0);\n        }\n\n        void Output(int i, int j)\n        {\n            if (outFlag)\n            {\n                outFlag = false;\n                R.Add(V[i]);\n            }\n            R.Add(V[j]);\n        }\n\n    }\n}\n"
  },
  {
    "path": "RdlMapFile/DesignXmlDraw.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.Drawing.Drawing2D;\nusing System.Drawing.Imaging;\nusing System.Windows.Forms;\nusing System.IO;\nusing System.Xml;\nusing System.Globalization;\nusing System.Net;\nusing System.Text;\nusing RdlMapFile.Resources;\nusing System.ComponentModel;\n\nnamespace Majorsilence.Reporting.RdlMapFile\n{\n\n\t/// <summary>\n\t/// Control for providing a designer image of RDL.   Works directly off the RDL XML.\n\t/// </summary>\n\tinternal class DesignXmlDraw: UserControl\n\t{\n        public delegate void DrawEventHandler(DesignXmlDraw dxd);\n        /// <summary>\n        /// Hyperlink invoked when report item with hyperlink is clicked on.\n        /// </summary>\n        public event DrawEventHandler ZoomChange;\n        public event DrawEventHandler XmlChange;\n        public event DrawEventHandler SelectionChange;\n        public event DrawEventHandler ToolChange;\n\n\t\tprivate XmlDocument _MapDoc;\t\t\t// the map file XML document\n        private Undo _Undo;\t\t\t\t\t//  the undo object tied to the _MapDoc;\n        private string _File=null;                   // the file name of the XML document; null if untitled\n        private Point _MouseLocation;\n\n        private Image _BackImage = null;\n\t\tfloat DpiX;\n\t\tfloat DpiY;\n\n\t\t// During drawing these are set\n\t\tGraphics g;\n        private VScrollBar vScrollBar;\n        private HScrollBar hScrollBar;\n        private float _Zoom = 1;\n        private List<XmlNode> _SelectedList = new List<XmlNode>();\n        private bool _Modified=false;\n        private ToolStripMenuItem _menuCopy=null;\n        private ToolStripMenuItem _menuPaste =null;\n\n        private ToolMode _Tool = ToolMode.Selection;\n        internal enum ToolMode                  // The tool mode affect how mouse processing is handled\n        {\n            Selection,\n            InsertPolygon,\n            InsertLine,\n            InsertText\n        }\n\n\t\tinternal DesignXmlDraw():base()\n\t\t{\n\t\t\t// Get our graphics DPI\t\t\t\t\t   \n\t\t\tGraphics ga = null;\t\t\t\t\n\t\t\ttry\n\t\t\t{\n\t\t\t\tga = this.CreateGraphics(); \n\t\t\t\tDpiX = ga.DpiX;\n\t\t\t\tDpiY = ga.DpiY;\n\t\t\t}\n\t\t\tcatch\n\t\t\t{\n\t\t\t\tDpiX = DpiY = 96;\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (ga != null)\n\t\t\t\t\tga.Dispose();\n\t\t\t}\n\n            InitializeComponent();\n\t\t\t\n\t\t\t// force to double buffering for smoother drawing\n\t\t\tthis.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer |\n\t\t\t\tControlStyles.UserPaint | \n\t\t\t\tControlStyles.AllPaintingInWmPaint,\n\t\t\t\ttrue);\n        }\n        internal XmlDocument MapDoc\n        {\n            get { return _MapDoc; }\n        }\n        \n        public string MapSource\n        {\n            get\n            {\n                if (_MapDoc == null)\n                    return null;\n\n                // Convert the document into a string\n                StringWriter sw = new StringWriter();\n                XmlTextWriter xtw = new XmlTextWriter(sw);\n                xtw.IndentChar = ' ';\n                xtw.Indentation = 2;\n                xtw.Formatting = Formatting.Indented;\n\n                _MapDoc.WriteContentTo(xtw);\n                xtw.Close();\n                sw.Close();\n                string result = sw.ToString();\n                result = result.Replace(\"xmlns=\\\"\\\"\", \"\");\n                return result;\n            }\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        internal string File\n        {\n            get { return _File; }\n            set { _File = value; }\n        }\n\n        internal void SelectAll()\n        {\n            if (_MapDoc == null)\n                return;\n\n            _SelectedList.Clear();\n            foreach (XmlNode xNodeLoop in GetRoot().ChildNodes)\n                _SelectedList.Add(xNodeLoop);\n\n            SignalSelectionChanged();\n            this.Invalidate();\n        }\n\n        internal void SelectByKey(List<string> select)\n        {\n            if (_MapDoc == null)\n                return;\n\n            _SelectedList.Clear();\n\n            foreach (XmlNode xNodeLoop in GetRoot().ChildNodes)\n            {\n                if (xNodeLoop.Name != \"Polygon\")\n                    continue;\n\n                string[] skeys = GetKeysInPolygon(xNodeLoop);\n                foreach (string k in skeys)\n                {\n                    if (select.BinarySearch(k) >= 0)\n                    {\n                        _SelectedList.Add(xNodeLoop);\n                        break;\n                    }\n                }\n            }\n\n            SignalSelectionChanged();\n            this.Invalidate();\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        internal ToolMode Tool\n        {\n            get { return _Tool; }\n            set \n            {\n                _Tool = value;\n                if (_Tool != ToolMode.Selection)\n                {\n                    _SelectedList.Clear();\n                    SignalSelectionChanged();                    \n                    this.Invalidate();\n                }   \n            }\n        }\n\n#region Undo\n        internal bool CanUndo\n        {\n            get \n            {\n                return _Undo == null? false: _Undo.CanUndo; \n            }\n        }\n        internal void ClearUndo()\n        {\n            _Undo.Reset();\n        }\n        internal string UndoText\n        {\n            get { return _Undo == null? \"\": _Undo.Description; }\n        }\n        internal void Undo()\n        {\n            if (_Undo == null)\n                return;\n            _Undo.undo();\n\n            // We need to validate the selected list\n            XmlNode root = GetRoot();\n            foreach (XmlNode sn in _SelectedList)\n            {\n                bool bFound = false;\n                foreach (XmlNode n in root.ChildNodes)\n                {\n                    if (sn == n)\n                    {\n                        bFound = true;\n                        break;\n                    }\n                }\n                if (!bFound)\n                {\n                    _SelectedList.Clear();\n                    SignalSelectionChanged();\n                    break;\n                }\n            }\n            this.Invalidate();\n        }\n\n        internal void StartUndoGroup(String description)\n        {\n            if (_Undo == null)\n                return;\n            _Undo.StartUndoGroup(description);\n        }\n\n        internal void EndUndoGroup()\n        {\n            if (_Undo == null)\n                return;\n            _Undo.EndUndoGroup();\n        }\t\n        #endregion\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public bool Modified\n        {\n            get { return _Modified; }\n            set { _Modified = value; }\n        }\n\n        public bool CanPaste()\n        {\n            if (MapDoc == null)\n                return false;\n\n            IDataObject iData = Clipboard.GetDataObject();\n            if (iData == null)\n                return false;\n            if (!iData.GetDataPresent(DataFormats.Text))\n                return false;\n            // Build the xml string in case it is a straight pasting of text\n            string t = (string)iData.GetData(DataFormats.Text);\n            if (!(t.StartsWith(\"<MapItems>\") && t.EndsWith(\"</MapItems>\")))\n                return false;\n\n            return true;\n        }\n        public void Copy()\n        {\n            if (SelectedList.Count == 0)\n                return;\n            StringBuilder sb = new StringBuilder(\"<MapItems>\");\n            foreach (XmlNode xn in SelectedList)\n            {\n                sb.Append(xn.OuterXml);\n            }\n            sb.Append(\"</MapItems>\");\n            Clipboard.SetDataObject(sb.ToString(), true);\n        }\n\n        /// <summary>\n        /// Paste the contents of the clipboard into the map\n        /// </summary>\n        /// <param name=\"p\"></param>\n        /// <returns></returns>\n        public bool Paste(Point offset)\n        {\n            if (MapDoc == null)\n                return false;\n\n            IDataObject iData = Clipboard.GetDataObject();\n            if (iData == null)\n                return false;\n            if (!iData.GetDataPresent(DataFormats.Text))\n                return false;\n            // Build the xml string in case it is a straight pasting of text\n            string t = (string)iData.GetData(DataFormats.Text);\n            return Paste(offset, t);\n        }\n\n        public bool Paste(Point offset, string t)\n        {\n            if (!(t.StartsWith(\"<MapItems>\") && t.EndsWith(\"</MapItems>\")))\n                return false;\n\n            XmlDocumentFragment fDoc = MapDoc.CreateDocumentFragment();\n            fDoc.InnerXml = t;\n\n            // Get the node we need to paste into\n            XmlNode mNode = GetNamedChildNode(fDoc, \"MapItems\");\n            if (mNode == null)\n                return false;\n\n            // We need to normalize the positions in the map items. Simple as 1, 2, 3\n            // 1) Find the left most object and the top most object\n            // 2) Adjust all objects positions\n            // 3) Move the nodes into the proper ReportItems collection\n\n            // 1) Find the left most and top most objects\n            int leftMost = int.MaxValue;\n            int topMost = int.MaxValue;\n            foreach (XmlNode mi in mNode.ChildNodes)\n            {\n                if (mi.NodeType != XmlNodeType.Element)\n                    continue;\n                switch (mi.Name)\n                {\n                    case \"Polygon\":\n                    case \"Lines\":\n                        Point[] pts = GetPolygon(mi, true);\n                        foreach (Point pt in pts)\n                        {\n                            if (leftMost > pt.X)\n                                leftMost = pt.X;\n                            if (topMost > pt.Y)\n                                topMost = pt.Y;\n                        }\n                        break;\n                    case \"Text\":\n                        Point p = GetTextPoint(mi, true);\n                        if (leftMost > p.X)\n                            leftMost = p.X;\n                        if (topMost > p.Y)\n                            topMost = p.Y;\n                        break;\n                    default:\n                        break;\n                }\n            }\n            // 2) Adjust all objects positions\n            foreach (XmlNode mi in mNode.ChildNodes)\n            {\n                if (mi.NodeType != XmlNodeType.Element)\n                    continue;\n                switch (mi.Name)\n                {\n                    case \"Polygon\":\n                    case \"Lines\":\n                        Point[] pts = GetPolygon(mi, true);\n                        for (int i = 0; i < pts.Length; i++ )\n                        {\n                            pts[i].X = pts[i].X - leftMost + offset.X;\n                            pts[i].Y = pts[i].Y - topMost + offset.Y;\n                        }\n                        SetPoints(mi, pts);\n                        break;\n                    case \"Text\":\n                        Point pt = GetTextPoint(mi, true);\n                        pt.X = pt.X - leftMost + offset.X;\n                        pt.Y = pt.Y - topMost + offset.Y;\n                        string loc = string.Format(\"{0},{1}\", pt.X, pt.Y);\n                        this.SetElement(mi, \"Location\", loc);\n                        break;\n                    default:\n                        break;\n                }\n            }\n\n            // 3) Move the nodes into the main collection\n            // Loop thru and put all the map items into the main document\n            // This loop is a little strange because when a node is appended to\n            //   the main document it is removed from the fragment.   Thus you\n            //   must continually grab the first child until all the children have\n            //   been removed.\n            _Undo.StartUndoGroup(Strings.DesignXmlDraw_Undo_Paste);\n            _SelectedList.Clear();\t\t// the new nodes end up selected\n            XmlNode root = GetRoot();\n            for (XmlNode mi = mNode.FirstChild; mi != null; mi = mNode.FirstChild)\n            {\n                root.AppendChild(mi);\n                _SelectedList.Add(mi);\n            }\n            SignalXmlChanged();\n            SignalSelectionChanged();\n            Invalidate();\n            _Undo.EndUndoGroup();\n            return true;\n        }\n\n        public int ReducePointCount()\n        {\n            int rcount = 0;\n            bool bFirst = true;\n            foreach (XmlNode pn in SelectedList)\n            {\n                if (pn.Name != \"Polygon\")\n                    continue;\n\n                Point[] pts = GetPolygon(pn, true);         // get polygon points unadjusted by scroll\n                if (pts == null || pts.Length <= 2)\n                    continue;\n                DPSimp dps = new DPSimp(pts);\n                Point[] res = dps.GetDouglasPeuckerSimplified();\n                if (pts.Length == res.Length)\n                    continue;\n                if (bFirst)\n                {\n                    _Undo.StartUndoGroup(Strings.DesignXmlDraw_Undo_ReducePointCount);    // we have at least one change\n                    bFirst = false;\n                }\n                rcount += (pts.Length - res.Length);\n                dps = null;\n                SetPoints(pn, res);\n            }\n            if (!bFirst)\n            {\n                _Undo.EndUndoGroup(true);\n                SignalXmlChanged();\n                this.Invalidate();\n            }\n            return rcount;\n        }\n\n        public void SizeSelected(float zoom)\n        {\n            bool bFirst = true;\n            Point anchor=Point.Empty;\n            List<XmlNode> empties = new List<XmlNode>();\n            foreach (XmlNode pn in SelectedList)\n            {\n                if (pn.Name != \"Polygon\")\n                    continue;\n\n                Point[] pts = GetPolygon(pn, true);         // get polygon points unadjusted by scroll\n                List<Point> ptsl = new List<Point>(pts.Length);\n                if (bFirst)\n                    anchor = new Point(pts[0].X, pts[0].Y);   // anchor point is first point in first selected polygon\n                // Build a new list with zoomed polygons (sans duplicate points)\n                ptsl.Add(anchor);\n                for (int pi = 1; pi < pts.Length; pi++ )\n                {\n                    pts[pi].X = (int)((pts[pi].X - anchor.X) * zoom) + anchor.X;      // make point relative to anchor then resize it\n                    pts[pi].Y = (int)((pts[pi].Y - anchor.Y) * zoom) + anchor.Y;\n                    if (!(pts[pi].X == pts[pi - 1].X && pts[pi].Y == pts[pi - 1].Y))\n                    {\n                        ptsl.Add(pts[pi]);\n                    }\n                }\n                if (bFirst)\n                {\n                    _Undo.StartUndoGroup(Strings.DesignXmlDraw_Undo_Resize);    // we have at least one change\n                    bFirst = false;\n                }\n                if (ptsl.Count > 2)\n                    SetPoints(pn, ptsl.ToArray());\n                else\n                    empties.Add(pn);\n            }\n            if (!bFirst)\n            {\n                foreach (XmlNode pn in empties)\n                {\n                    SelectedList.Remove(pn);\n                    this.Remove(pn);\n                }\n                _Undo.EndUndoGroup(true);\n                SignalXmlChanged();\n                if (empties.Count > 0)\n                    SignalSelectionChanged();\n                this.Invalidate();\n            }\n        }\n\n        public List<XmlNode> SelectedList\n        {\n            get { return _SelectedList; }\n        }\n        public XmlNode SelectedItem\n        {\n            get\n            {\n                return _SelectedList.Count == 0 ? null : _SelectedList[0];\n            }\n        }\n        \n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public float Zoom\n        {\n            get { return _Zoom; }\n            set\n            {\n                if (_Zoom == value)\n                    return;             // nothing to do\n                _Zoom = value;\n                if (ZoomChange != null)\n                    ZoomChange(this);\n                this.Refresh();\n            }\n        }\n\n        internal void SetMapFile(string file)\n        {\n            try\n            {\n                XmlDocument doc = new XmlDocument();\n                doc.PreserveWhitespace = false;\n                doc.Load(file);\n                XmlNode xNode = doc.LastChild;\n                if (xNode == null || xNode.Name != \"MapData\")\n                    throw new Exception(Strings.DesignXmlDraw_Error_XMLNotMapData);\n                \n                _File = file;                           // ok we opened it\n                _MapDoc = doc;                          // don't set new one until we know we've loaded the file\n                _Undo = new Undo(_MapDoc, 300);\n                _Undo.GroupsOnly = true;\t\t\t\t// don't record changes that we don't group.\n                _Modified = false;\n                _SelectedList.Clear();\n                SignalSelectionChanged();\n                SetBackgroundImage(null);\n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show(String.Format(\"{2} {0}\\n\\n{1}\", file, ex.Message, Strings.DesignXmlDraw_SetMapFile_Unable_to_open_file), Strings.DesignXmlDraw_SetMapFile_ErrorOpeningFile);\n            }\n            hScrollBar.Value = 0;\n            vScrollBar.Value = 0;\n            vScrollBar.Maximum = 1000;\n            hScrollBar.Maximum = 1000;\n\n            this.Invalidate();\n        }\n\n        internal void SetNew()\n        {\n            XmlDocument doc = new XmlDocument();\n            doc.PreserveWhitespace = false;\n            doc.InnerXml = \"<MapData></MapData>\";\n\n            _File = null;                           // ok we opened it\n            _MapDoc = doc;                          // don't set new one until we know we've loaded the file\n            _Undo = new Undo(_MapDoc, 300);\n            _Undo.GroupsOnly = true;\t\t\t\t// don't record changes that we don't group.\n            _Modified = false;\n            _SelectedList.Clear();\n            SetBackgroundImage(null);\n            hScrollBar.Value = 0;\n            vScrollBar.Value = 0;\n            vScrollBar.Maximum = 1000;\n            hScrollBar.Maximum = 1000;\n\n            this.Invalidate();\n        }\n\n\t\t/// <summary>\n\t\t/// Need to override otherwise don't get key events for up/down/left/right\n\t\t/// </summary>\n\t\t/// <param name=\"keyData\"></param>\n\t\t/// <returns></returns>\n\t\toverride protected bool IsInputKey(Keys keyData)\n\t\t{\n            if (keyData == Keys.Escape)\n                return false;\n\t\t\treturn true;\n\t\t}\n\n        protected override void OnKeyDown(KeyEventArgs e)\n        {\n            base.OnKeyDown(e);\n            int incX = 0;\n            int incY = 0;\n            int vScroll = vScrollBar.Value;\n            int hScroll = hScrollBar.Value;\n\n            // Force scroll up and down\n            if (e.KeyCode == Keys.Down)\n            {\n                incY = 1;\n            }\n            else if (e.KeyCode == Keys.Up)\n            {\n                incY = -1;\n            }\n            else if (e.KeyCode == Keys.Left)\n            {\n                incX = -1;\n            }\n            else if (e.KeyCode == Keys.Right)\n            {\n                incX = 1;\n            }\n            else if (e.KeyCode == Keys.PageDown)\n            {\n                vScroll = Math.Min(vScrollBar.Value + vScrollBar.LargeChange, vScrollBar.Maximum);\n            }\n            else if (e.KeyCode == Keys.PageUp)\n            {\n                vScroll = Math.Max(vScrollBar.Value - vScrollBar.LargeChange, 0);\n            }\n            else if (e.KeyCode == Keys.Enter)\n            {\n                e.Handled = true;\n                return;\n            }\n            else if (e.KeyCode == Keys.Tab)\n            { \n                bool bShiftOn = (Control.ModifierKeys & Keys.Shift) == Keys.Shift;\n\n                if (bShiftOn)\n                    PreviousItem();\n                else\n                    NextItem();\n                e.Handled = true;\n            }\n            else if (e.KeyCode == Keys.Delete)\n            {\n                this.DeleteSelected();\n                e.Handled = true;\n            }\n            else if (e.KeyCode == Keys.Escape)\n            {\n                Tool = ToolMode.Selection;          // force out of insertion mode\n                SignalToolChanged();\n                SetCursor(null);\n                e.Handled = true;\n            }\n\n            bool bRefresh = false;\n            if (vScroll != vScrollBar.Value)\n            {\n                vScrollBar.Value = Math.Max(vScroll, 0);\n                bRefresh = true;\n                e.Handled = true;\n            }\n\n            if (hScroll != hScrollBar.Value)\n            {\n                hScrollBar.Value = Math.Max(hScroll, 0);\n                bRefresh = true;\n                e.Handled = true;\n            }\n\n            if (incX != 0 || incY != 0)\n            {\n                MoveSelected(incX, incY);\n\n                e.Handled = true;\n            }\n\n            if (bRefresh)\n                this.Refresh();\n        }\n\n        private void MoveSelected(int incX, int incY)\n        {\n            if (_SelectedList.Count == 0)           // nothing to do\n                return;\n            if (incX == 0 && incY == 0)\n                return;\n\n            _Undo.StartUndoGroup(Strings.DesignXmlDraw_Undo_Move);\n            foreach (XmlNode n in _SelectedList)\n            {\n                MoveItem(n, incX, incY);\n            }\n            _Undo.EndUndoGroup(true);\n            SignalXmlChanged();\n            this.Invalidate();\n        }\n\n        private void MoveItem(XmlNode n, int incX, int incY)\n        {\n            switch (n.Name)\n            {\n                case \"Polygon\":\n                    Point[] pts = GetPolygon(n, true);\n                    StringBuilder sb = new StringBuilder();\n                    for (int i = 0; i < pts.Length; i++ )\n                    {\n                        if (i > 0)\n                            sb.Append(',');\n                        sb.AppendFormat(\"{0},{1}\", pts[i].X+incX, pts[i].Y+incY);\n                    }\n                    this.SetElement(n, \"Points\", sb.ToString());\n                    break;\n                case \"Lines\":\n                    Point[] line = GetLineCoord(n, true);\n                    line[0].X += incX;\n                    line[0].Y += incY;\n                    line[1].X += incX;\n                    line[1].Y += incY;\n                    string lt = string.Format(\"{0},{1},{2},{3}\", line[0].X, line[0].Y, line[1].X, line[1].Y);\n                    this.SetElement(n, \"Points\", lt);\n                    break;\n                case \"Text\":\n                    Point p = GetTextPoint(n, true);\n                    p.X += incX;\n                    p.Y += incY;\n                    string t = string.Format(\"{0},{1}\", p.X, p.Y);\n                    this.SetElement(n, \"Location\", t);\n                    break;\n            }\n        }\n/// <summary>\n/// Handle tabbing forward\n/// </summary>\n        void NextItem()\n        {\n            // Select next item in list\n            XmlNode next = null;\n            if (_SelectedList.Count == 0)\n            {\n                next = GetRoot().FirstChild;\n            }\n            else\n            {\n                next = SelectedItem.NextSibling;\n                if (next == null)\n                    next = GetRoot().FirstChild;\n                _SelectedList.Clear();\n            }\n            if (next != null)\n                _SelectedList.Add(next);\n            SignalSelectionChanged();\n            Invalidate();\n        }\n        /// <summary>\n        /// Handle tabbing backward\n        /// </summary>\n        void PreviousItem()\n        {\n            // Select next item in list\n            XmlNode next = null;\n            if (_SelectedList.Count == 0)\n            {\n                next = GetRoot().LastChild;\n            }\n            else\n            {\n                next = SelectedItem.PreviousSibling;\n                if (next == null)\n                    next = GetRoot().LastChild;\n                _SelectedList.Clear();\n            }\n            if (next != null)\n                _SelectedList.Add(next);\n            SignalSelectionChanged();\n            Invalidate();\n        }\n        #region MouseHandling\n        protected override void OnMouseDown(MouseEventArgs e)\n        {\n            base.OnMouseDown(e);\n            if (_MapDoc == null)\n                return;\n            _MouseLocation = e.Location;\n\n            if (e.Button == MouseButtons.Left)\n            {\n                switch (Tool)\n                {\n                    case ToolMode.Selection:\n                        MouseDownSelection(e);\n                        break;\n                    case ToolMode.InsertPolygon:\n                        MouseDownIPolygon(e);\n                        break;\n                    case ToolMode.InsertText:\n                        MouseDownIText(e);\n                        break;\n                    case ToolMode.InsertLine:\n                        MouseDownILine(e);\n                        break;\n                    default:\n                        break;\n                }\n                \n            }\n            else if (e.Button == MouseButtons.Middle)\n            {\n            }\n            else if (e.Button == MouseButtons.Right)\n            {\n                MouseDownContext(e);\n            }\n            SetCursor(e);\n        }\n\n        private void MouseDownContext(MouseEventArgs e)\n        {\n            ContextMenuStrip mc = new ContextMenuStrip();\n            mc.Opening += new System.ComponentModel.CancelEventHandler(mc_Popup);\n            if (_menuCopy == null)\n                _menuCopy = new ToolStripMenuItem(\"&Copy\", null, new EventHandler(mc_Copy));\n            if (_menuPaste == null)\n                _menuPaste = new ToolStripMenuItem(\"&Paste\", null, new EventHandler(mc_Paste));\n\n            mc.Items.AddRange(\n                new ToolStripMenuItem[] {_menuCopy, _menuPaste});\n            if (_SelectedList.Count == 1)\n            {\n                // add in the select by key options\n                mc.Items.Add(new ToolStripMenuItem(\"-\"));\n                string[] keys = GetKeysInPolygon(_SelectedList[0]);\n                foreach (string k in keys)\n                {\n                    ToolStripMenuItem mi = new ToolStripMenuItem(string.Format(\"Select by key = {0}\", k), null, new EventHandler(mc_Keys));\n                    mi.Tag = k;\n                    mc.Items.Add(mi);\n                }\n            }\n            mc.Show(this, e.Location);\n        }\n\n        void mc_Popup(object sender, CancelEventArgs e)\n        {\n            _menuPaste.Enabled = CanPaste();\n            _menuCopy.Enabled = _SelectedList.Count > 0;\n        }\n        void mc_Copy(object sender, EventArgs e)\n        {\n            Copy();\n        }\n        \n        void mc_Keys(object sender, EventArgs e)\n        {\n            ToolStripMenuItem mi = sender as ToolStripMenuItem;\n            if (mi == null)\n                return;\n            string key = mi.Tag as string;\n            if (key == null)\n                return;\n            List<string> select = new List<string>(1);\n            select.Add(key);\n\n            SelectByKey(select);\n        }\n\n        void mc_Paste(object sender, EventArgs e)\n        {\n            Point np = new Point((int)(_MouseLocation.X / Zoom + hScrollBar.Value), (int)(_MouseLocation.Y / Zoom + vScrollBar.Value));\n            Paste(np);\n        }\n\n        private void MouseDownILine(MouseEventArgs e)\n        {\n            _Undo.StartUndoGroup(Strings.DesignXmlDraw_Undo_InsertLinePoint);\n            Point np = new Point((int)(e.Location.X / Zoom + hScrollBar.Value), (int)(e.Location.Y / Zoom + vScrollBar.Value));\n            if (_SelectedList.Count == 0)\n            {\n                string poly = string.Format(\"{0},{1},{2},{3}\", np.X, np.Y, np.X, np.Y);\n                XmlNode root = GetRoot();\n                XmlNode xp = CreateElement(root, \"Lines\", null);\n                CreateElement(xp, \"Points\", poly);\n                _SelectedList.Add(xp);                  // make it selected\n                SignalXmlChanged();\n                SignalSelectionChanged();\n            }\n            else if (_SelectedList.Count == 1 && SelectedItem.Name == \"Lines\")\n            {\n                Point[] pts = GetLineCoord(SelectedItem, true);\n                pts[1] = new Point(np.X, np.Y);\n                SetPoints(SelectedItem, pts);\n                SignalXmlChanged();\n            }\n            EndUndoGroup();\n            this.Invalidate();          // should get bounding rectangle of rectangle\n        }\n\n        private void MouseDownIText(MouseEventArgs e)\n        {\n            _Undo.StartUndoGroup(Strings.DesignXmlDraw_Undo_InsertText);\n            _SelectedList.Clear();\n            Point np = new Point((int)(e.Location.X / Zoom + hScrollBar.Value), (int)(e.Location.Y / Zoom + vScrollBar.Value));\n            string loc = string.Format(\"{0},{1}\", np.X, np.Y);\n            XmlNode root = GetRoot();\n            XmlNode xp = CreateElement(root, \"Text\", null);\n            // <Value>DE</Value><Location>360,104</Location>\n            CreateElement(xp, \"Value\", \"Text\");\n            CreateElement(xp, \"Location\", loc);\n            _SelectedList.Add(xp);                  // make it selected\n            EndUndoGroup();\n\n            SignalXmlChanged();\n            SignalSelectionChanged();\n            this.Invalidate();          // should get bounding rectangle of rectangle\n        }\n\n        private void MouseDownIPolygon(MouseEventArgs e)\n        {\n            _Undo.StartUndoGroup(Strings.DesignXmlDraw_Undo_InsertPolygonPoint);\n            Point np = new Point((int) (e.Location.X / Zoom + hScrollBar.Value), (int)(e.Location.Y / Zoom + vScrollBar.Value));\n            if (_SelectedList.Count == 0)\n            {\n                string poly = string.Format(\"{0},{1},{2},{3}\", np.X, np.Y, np.X, np.Y);\n                XmlNode root = GetRoot();\n                XmlNode xp = CreateElement(root, \"Polygon\", null);\n                CreateElement(xp, \"Points\", poly);\n                _SelectedList.Add(xp);                  // make it selected\n                SignalXmlChanged();\n                SignalSelectionChanged();\n            }\n            else if (_SelectedList.Count == 1 && SelectedItem.Name == \"Polygon\")\n            {\n                Point[] pts = GetPolygon(SelectedItem, true);\n                Point[] new_pts = new Point[pts.Length + 1];\n                for (int i=0; i < pts.Length -1; i++)\n                    new_pts[i] = pts[i];\n                new_pts[pts.Length - 1] = new Point(np.X, np.Y);\n                new_pts[pts.Length] = new_pts[0];\n                SetPoints(SelectedItem, new_pts);\n            }\n            EndUndoGroup();\n            this.Invalidate();          // should get bounding rectangle of rectangle\n        }\n        \n        private void MouseDownSelection(MouseEventArgs e)\n        {\n            bool bCtrlOn = (Control.ModifierKeys & Keys.Control) == Keys.Control;\n            this.Capture = true;\n\n            g = this.CreateGraphics();          // need graphic for hit testing of text\n            try\n            {\n                // 1) check if we're hitting an item already selected\n                XmlNode h = HitTest(_SelectedList, e.Location);\n                if (h != null)\n                {\n                    XmlNode sib = HitTest(h, e.Location);       // check for items later in the list\n                    if (sib != null)\n                        h = sib;\n                }\n                else\n                    h = HitTest(_MapDoc.LastChild.ChildNodes, e.Location);\n                bool bChange = false;\n                if (bCtrlOn)\n                {\n                    if (_SelectedList.Contains(h))\n                    {\n                        _SelectedList.Remove(h);\n                        h = null;\n                        bChange = true;\n                    }\n                }\n                else\n                {\n                    if (_SelectedList.Count > 0)\n                    {\n                        bChange = true;\n                        _SelectedList.Clear();\n                    }\n                }\n                if (h != null)\n                    _SelectedList.Add(h);\n                if (bChange || h != null)\n                {\n                    this.Invalidate();              // should just invalidate the rectangle containing the polygon TODO\n                    SignalSelectionChanged();\n                }\n            }\n            finally\n            {\n                g.Dispose();\n                g = null;\n            }\n        }\n\n        protected override void OnMouseMove(MouseEventArgs e)\n        {\n            base.OnMouseMove(e);\n\n            if (e.Button == MouseButtons.Left)\n            {\n                switch (this.Tool)\n                {\n                    case ToolMode.Selection:\n                        if (this.Capture)           // have we captured the mouse\n                        {\n                            MoveSelected((int)((e.Location.X  - _MouseLocation.X) /Zoom), (int)((e.Location.Y - _MouseLocation.Y)/Zoom));\n                        }\n                        break;\n                    default:\n                        break;\n                }\n            }\n            else if (e.Button == MouseButtons.Middle)\n            {\n                // when middle mouse is down and mouse moves we scroll the window\n                int vScroll = Math.Min(vScrollBar.Value + (e.Location.Y - _MouseLocation.Y), vScrollBar.Maximum);\n                vScroll = Math.Max(vScroll, vScrollBar.Minimum);\n                int hScroll = Math.Min(hScrollBar.Value + (e.Location.X - _MouseLocation.X), hScrollBar.Maximum);\n                hScroll = Math.Max(hScroll, hScrollBar.Minimum);\n                vScrollBar.Value = vScroll;\n                hScrollBar.Value = hScroll;\n                this.Invalidate();\n            }\n\n            _MouseLocation = e.Location;\n            SetCursor(e);\n        }\n\n        private void SetCursor(MouseEventArgs e)\n        {\n            Cursor c = Cursors.Default;\n            if (e == null)\n            { }\n            else if (e.Button == MouseButtons.Middle)\n                c = Cursors.SizeAll;\n            else\n            {\n                switch (this.Tool)\n                {\n                    case ToolMode.Selection:\n                        c = Cursors.Default;\n                        break;\n                    default:\n                        c = Cursors.Cross;\n                        break;\n                }\n            }\n            if (c != this.Cursor)\n                this.Cursor = c;\n        }\n        private XmlNode HitTest(IEnumerable ienum, Point point)\n        {\n            // Loop thru all the child nodes\n            foreach (XmlNode xNodeLoop in ienum)\n            {\n                if (IsHit(xNodeLoop, point))\n                    return xNodeLoop;\n            }\n            return null;\n        }\n        /// <summary>\n        /// HitTest for testing sibling XML nodes\n        /// </summary>\n        /// <param name=\"xNode\"></param>\n        /// <param name=\"point\"></param>\n        /// <returns></returns>\n        private XmlNode HitTest(XmlNode xNode, Point point)\n        {\n            // Loop thru all the child nodes\n            for (XmlNode xNodeLoop = xNode.NextSibling; xNodeLoop != null; xNodeLoop = xNodeLoop.NextSibling)\n            {\n                if (IsHit(xNodeLoop, point))\n                    return xNodeLoop;\n            }\n            return null;\n        }\n\n        private bool IsHit(XmlNode xNode, Point point)\n        {\n            bool hit = false;\n            if (xNode.NodeType != XmlNodeType.Element)\n                return hit;\n            switch (xNode.Name)\n            {\n                case \"Polygon\":\n                    Point[] pts = GetPolygon(xNode, false);\n                    ApplyZoom(pts);\n                    if (PointInPolygon(pts, point))\n                        hit = true;\n                    break;\n                case \"Lines\":\n                    Point[] line = GetLineCoord(xNode, false);\n                    ApplyZoom(line);\n                    if (PointInLine(line, point))\n                        hit = true;\n                    break;\n                case \"Text\":\n                    Rectangle r = GetTextRect(xNode);\n                    Rectangle r2 = new Rectangle((int)(r.Left * Zoom), (int)(r.Top * Zoom), (int)(r.Width * Zoom), (int)(r.Height * Zoom));\n                    if (r2.Contains(point))\n                        hit = true;\n                    break;\n            }\n            return hit;\n        }\n        #endregion\n        private void ApplyZoom(Point[] pts)\n        {\n            if (Zoom == 1)\n                return;\n            for (int i = 0; i < pts.Length; i++)\n            {\n                pts[i].X = (int)(pts[i].X * Zoom);\n                pts[i].Y = (int)(pts[i].Y * Zoom);\n            }\n            return;\n        }\n        \n        protected override void OnMouseUp(MouseEventArgs e)\n        {\n            base.OnMouseDown(e);\n            if (_MapDoc == null)\n                return;\n\n            this.Capture = false;\n        }\n\n        protected override void OnMouseWheel(MouseEventArgs e)\n        {\n            base.OnMouseWheel(e);\n            int wvalue;\n            bool bCtrlOn = (Control.ModifierKeys & Keys.Control) == Keys.Control;\n\n            if (bCtrlOn)\n            {   // when ctrl key on and wheel rotated we zoom in or out\n                float zoom = Zoom;\n\n                if (e.Delta < 0)\n                {\n                    zoom -= .1f;\n                    if (zoom < .1f)\n                        zoom = .1f;\n                }\n                else\n                {\n                    zoom += .1f;\n                    if (zoom > 10)\n                        zoom = 10;\n                }\n                Zoom = zoom;\n                return;\n            }\n\n            if (e.Delta < 0)\n            {\n                if (vScrollBar.Value < vScrollBar.Maximum)\n                {\n                    wvalue = vScrollBar.Value + vScrollBar.SmallChange;\n\n                    vScrollBar.Value = Math.Min(vScrollBar.Maximum, wvalue);\n                    this.Refresh();\n                }\n            }\n            else\n            {\n                if (vScrollBar.Value > vScrollBar.Minimum)\n                {\n                    wvalue = vScrollBar.Value - vScrollBar.SmallChange;\n\n                    vScrollBar.Value = Math.Max(vScrollBar.Minimum, wvalue);\n                    this.Refresh();\n                }\n            }\n\n        }\n        protected override void OnPaint(PaintEventArgs e)\n        {\n            base.OnPaint(e);\n            if (_MapDoc == null)\n            {\n                e.Graphics.DrawString(\"Please open a map file!\", new Font(\"Arial\", 12), Brushes.Black, 1, 1);\n                return;\n            }\n            g = null;\n            try\n            {\n                g = e.Graphics;\n                this.Draw(e.ClipRectangle);\n            }\n            finally\n            {\n                g = null;\n            }\n        }\n\n        /// <summary>\n\t\t/// Draw the report definition\n\t\t/// </summary>\n\t\t/// <param name=\"g\"></param>\n\t\t/// <param name=\"hScroll\">Horizontal scroll position</param>\n\t\t/// <param name=\"vScroll\">Vertical scroll position</param>\n\t\t/// <param name=\"clipRectangle\"></param>\n\t\tinternal void Draw(System.Drawing.Rectangle cr)\n\t\t{\n\t\t\tg.PageUnit = GraphicsUnit.Pixel;\n            g.FillRectangle(Brushes.White, cr);\n            g.ScaleTransform(Zoom, Zoom);\n\n\n            if (this._BackImage != null)\n                g.DrawImage(this._BackImage, new Point(-hScrollBar.Value, -vScrollBar.Value));\n\n            //_clip = new Rectangle(cr.X + hScrollBar.Value, \n            //    cr.Y + vScrollBar.Value, \n            //    cr.Width, \n            //    cr.Height);\n\n            XmlNode xNode = GetRoot();\n            if (xNode == null)\n\t\t\t{\n                g.DrawString(\"MapData node not found\", new Font(\"Arial\", 12), Brushes.Black, new PointF(10, 10));\n                return;\n\t\t\t}\n\n\t\t\tProcessMap(xNode);\n\n            ProcessSelected();\n\t\t}\n\n        private XmlNode GetRoot()\n        {\n            if (_MapDoc == null)\n                return null;\n            XmlNode xNode = _MapDoc.LastChild;\n            if (xNode == null || xNode.Name != \"MapData\")\n                return null;\n            return xNode;\n        }\n\n\t\t// Process the map data\n\t\tprivate void ProcessMap(XmlNode xNode)\n\t\t{\n\n\t\t\t// Loop thru all the child nodes\n\t\t\tforeach(XmlNode xNodeLoop in xNode.ChildNodes)\n\t\t\t{\n\t\t\t\tif (xNodeLoop.NodeType != XmlNodeType.Element)\n\t\t\t\t\tcontinue;\n                bool bSelected = _SelectedList.Contains(xNodeLoop);\n\t\t\t\tswitch (xNodeLoop.Name)\n\t\t\t\t{\n\t\t\t\t\tcase \"Polygon\":\n\t\t\t\t\t\tDrawPolygon(xNodeLoop, bSelected);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Lines\":\n                        DrawLines(xNodeLoop, bSelected);\n                        break;\n\t\t\t\t\tcase \"Text\":\n                        DrawText(xNodeLoop, bSelected);\n                        break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n        // Process the selected objects by drawing the points\n        private void ProcessSelected()\n        {\n            bool bReset = false;\n            try\n            {\n                // Loop thru all the child nodes\n                foreach (XmlNode xNodeLoop in _SelectedList)\n                {\n                    Point[] pts = null;\n                    switch (xNodeLoop.Name)\n                    {\n                        case \"Polygon\":\n                            pts = GetPolygon(xNodeLoop, false);\n                            if (pts == null)\n                                bReset = true;\n                            break;\n                        case \"Lines\":\n                            pts = GetLineCoord(xNodeLoop, false);\n                            if (pts == null)\n                                bReset = true;\n                            break;\n                        case \"Text\":\n                            break;\n                    }\n                    if (pts == null)\n                        continue;\n                    foreach (Point p in pts)\n                    {\n                        g.DrawEllipse(Pens.Red, p.X - 2, p.Y - 2, 4, 4);\n                    }\n                }\n            }\n            catch\n            {       // selection list isn't valid;  usually as a result of an undo\n                bReset = true;\n            }\n            if (bReset)\n            {\n                // we ran into a problem; this can be caused by an \"undo\" affecting something that is selected\n                // set to a neutral condition with nothing selected\n                _SelectedList.Clear();\n                SignalSelectionChanged();\n                this.Invalidate();          // and we should repaint\n            }\n        }\n\n\t\tprivate void DrawLines(XmlNode xNode, bool bSelected)\n\t\t{\n            try\n            {\n                Point[] coord = GetLineCoord(xNode, false);\n                Pen p = bSelected ? Pens.Red : Pens.Black;\n                g.DrawLine(p, coord[0].X, coord[0].Y, coord[1].X, coord[1].Y);\n            }\n            catch (Exception e)\n            {\n                g.DrawString(e.Message, new Font(\"Arial\", 12), Brushes.Black, new PointF(0, 0));\n            }\n            finally\n            {\n            }\n\n\t\t\treturn;\n\t\t}\n\n        internal Point[] GetLineCoord(XmlNode xNode, bool bAsIs)\n        {\n            XmlNode v = GetNamedChildNode(xNode, \"Points\");\n            string t = v == null ? \"\" : v.InnerText;\n\n            string[] coord = t.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);\n\n            Point[] pts = new Point[2];\n            pts[0].X = int.Parse(coord[0], NumberStyles.Integer) - (bAsIs? 0:hScrollBar.Value); // x1\n            pts[0].Y = int.Parse(coord[1], NumberStyles.Integer) - (bAsIs? 0:vScrollBar.Value); // y1\n            pts[1].X = int.Parse(coord[2], NumberStyles.Integer) - (bAsIs? 0:hScrollBar.Value); // x2\n            pts[1].Y = int.Parse(coord[3], NumberStyles.Integer) - (bAsIs? 0:vScrollBar.Value); // y2\n\n            return pts;\n        }\n\n        private void DrawPolygon(XmlNode xNode, bool bSelected)\n        {\n            try\n            {\n                Point[] pts = GetPolygon(xNode, false);\n                Color fill = GetColor(GetNamedChildNode(xNode, \"FillColor\"));\n                Pen p = bSelected ? Pens.Red : Pens.Black;\n                g.DrawPolygon(p, pts);\n                if (!fill.IsEmpty)\n                {\n                    Brush b = new SolidBrush(fill);\n                    g.FillPolygon(b, pts);\n                    b.Dispose();\n                }\n            }\n            catch (Exception e)\n            {\n                g.DrawString(e.Message, new Font(\"Arial\", 12), bSelected?Brushes.Red: Brushes.Black, new PointF(0, 0));\n            }\n            finally\n            {\n            }\n\n            return;\n        }\n\n        private Color GetColor(XmlNode cNode)\n        {\n            if (cNode == null)\n                return Color.Empty;\n            string sc = cNode.InnerText;\n            Color c = Color.Empty;\n\t\t\ttry \n\t\t\t{\n\t\t\t\tc = ColorTranslator.FromHtml(sc);\n\t\t\t}\n\t\t\tcatch \n\t\t\t{       // if bad color just ignore and handle as empty color\n\t\t\t}\n\t\t\treturn c;\n        }\n\n        internal string[] GetKeysInPolygon(XmlNode pNode)\n        {\n            string k = this.GetElementValue(pNode, \"Keys\", \"\");\n            string[] skeys = k.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);\n            return skeys;\n        }\n\n        internal Point[] GetPolygon(XmlNode pNode, bool bAsIs)\n        {\n            XmlNode v = GetNamedChildNode(pNode, \"Points\");\n            if (v == null)\n                return null;\n            string t = v == null ? \"\" : v.InnerText;\n\n            string[] coord = t.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);\n\n            Point[] pts = new Point[coord.Length / 2];\n            for (int i = 0; i < pts.Length; i++)\n            {\n                pts[i].X = int.Parse(coord[i * 2], NumberStyles.Integer) - (bAsIs? 0: hScrollBar.Value);\n                pts[i].Y = int.Parse(coord[i * 2 + 1], NumberStyles.Integer) - (bAsIs ? 0 : vScrollBar.Value);\n            }\n            return pts;\n        }\n        \n        internal void SetPoints(XmlNode pNode, Point[] pts)\n        {\n            StringBuilder sb = new StringBuilder();\n            for (int i = 0; i < pts.Length; i++)\n            {\n                if (i > 0)\n                    sb.Append(',');\n                sb.AppendFormat(\"{0},{1}\", pts[i].X, pts[i].Y);\n            }\n            if (pNode.Name == \"Polygon\")\n            {   // Make sure polygon is closed\n                if (!(pts[0].X == pts[pts.Length-1].X &&\n                    pts[0].Y == pts[pts.Length-1].Y))\n                    sb.AppendFormat(\",{0},{1}\", pts[0].X, pts[0].Y);\n            }\n            SetElement(pNode, \"Points\", sb.ToString());\n        }\n \n        private void DrawText(XmlNode xNode, bool bSelected)\n\t\t{\n            Font font = null;\n            Brush br = null;\n            try\n            {\n                XmlNode v = GetNamedChildNode(xNode, \"Value\");\n                string t = v == null ? \"\" : v.InnerText;\n                Color c = GetTextColor(xNode);\n                br = new SolidBrush(c);\n\n                Point p = GetTextPoint(xNode, false);\n\n                font = GetTextFont(xNode);\n\n                g.DrawString(t, font, br, p);\n                if (bSelected)\n                {\n                    SizeF sz = g.MeasureString(t, font);\n                    Rectangle r = new Rectangle(p.X, p.Y, (int)Math.Round(sz.Width, 0), (int)Math.Round(sz.Height, 0));\n                    g.DrawRectangle(Pens.Red, r);\n                }\n            }\n            catch (Exception e)\n            {\n                g.DrawString(e.Message, new Font(\"Arial\", 12), Brushes.Black, new PointF(0, 0));\n            }\n            finally\n            {\n                if (font != null)\n                    font.Dispose();\n                if (br != null)\n                    br.Dispose();\n            }\n            return;\n\t\t}\n\n        internal Font GetTextFont(XmlNode xNode)\n        {\n            string face = GetTextFontFamily(xNode);\n            float pts = GetTextFontSize(xNode);\n\n            System.Drawing.FontStyle fs = 0;\n            if (IsTextFontWeightItalic(xNode))\n                fs |= System.Drawing.FontStyle.Italic;\n            if (IsTextFontWeightBold(xNode))\n                fs |= System.Drawing.FontStyle.Bold;\n\n            switch (GetTextDecoration(xNode))\n            {\n                case \"Underline\":\n                    fs |= System.Drawing.FontStyle.Underline;\n                    break;\n                case \"LineThrough\":\n                    fs |= System.Drawing.FontStyle.Strikeout;\n                    break;\n                default:\n                    break;\n            }\n\n            Font font;\n            try\n            {\n                font = new Font(face, pts, fs);\t// si.FontSize already in points\n            }\n            catch     // fonts that don't exist can throw exception; but we don't want it to\n            {\n                font = new Font(\"Arial\", pts, fs);  // if this throws exception; we'll let it\n            }\n\n            return font;\n        }\n\n        internal string GetTextDecoration(XmlNode xNode)\n        {\n            XmlNode cn = GetNamedChildNode(xNode, \"TextDecoration\");\n            if (cn == null)\n                return \"None\";\n            return cn.InnerText;\n        }\n        internal string GetTextFontFamily(XmlNode xNode)\n        {\n            XmlNode cn = GetNamedChildNode(xNode, \"FontFamily\");\n            if (cn == null)\n                return \"Arial\";\n            return cn.InnerText;\n        }\n\n        internal float GetTextFontSize(XmlNode xNode)\n        {\n            XmlNode cn = GetNamedChildNode(xNode, \"FontSize\");\n            if (cn == null)\n                return 8;\n\n            try\n            {\n                float x = float.Parse(cn.InnerText, NumberFormatInfo.InvariantInfo);\n                return x;\n            }\n            catch\n            {\n                return 8;\n            }\n        }\n        internal bool IsTextFontWeightBold(XmlNode xNode)\n        {\n            XmlNode cn = GetNamedChildNode(xNode, \"FontWeight\");\n            if (cn == null)\n                return false;\n\n            return cn.InnerText.ToLower() == \"bold\";\n        }\n        internal bool IsTextFontWeightItalic(XmlNode xNode)\n        {\n            XmlNode cn = GetNamedChildNode(xNode, \"FontStyle\");\n            if (cn == null)\n                return false;\n\n            return cn.InnerText.ToLower() == \"italic\";\n        }\n\n        internal Color GetTextColor(XmlNode tNode)\n        {\n            XmlNode cn = GetNamedChildNode(tNode, \"Color\");\n\n            Color c = GetColor(cn);\n            return c.IsEmpty ? Color.Black : c;\n        }\n\n        internal Point GetTextPoint(XmlNode xNode, bool bAsIs)\n        {\n            try\n            {\n                XmlNode l = GetNamedChildNode(xNode, \"Location\");\n                string[] coord = l.InnerText.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);\n\n                int x = int.Parse(coord[0], NumberStyles.Integer) - (bAsIs? 0:hScrollBar.Value);\n                int y = int.Parse(coord[1], NumberStyles.Integer) - (bAsIs ? 0 : vScrollBar.Value);\n                return new Point(x, y);\n            }\n            catch\n            {\n                return new Point(0, 0);     // failure\n            }\n        }\n        private Rectangle GetTextRect(XmlNode xNode)\n        {\n            XmlNode v = GetNamedChildNode(xNode, \"Value\");\n            string t = v == null ? \"\" : v.InnerText;\n\n            Point p = GetTextPoint(xNode, false);\n\n            if (g == null)\n                return new Rectangle(p.X, p.Y, t.Length * 8, 20);\n\n            Font font = null;\n            try\n            {\n                string face = GetTextFontFamily(xNode);\n                float pts = GetTextFontSize(xNode);\n                font = new Font(face, pts);\n\n                SizeF sz = g.MeasureString(t, font);\n                return new Rectangle(p.X, p.Y, (int)Math.Round(sz.Width,0), (int)Math.Round(sz.Height,0));\n            }\n            finally\n            {\n                if (font != null)\n                    font.Dispose();\n            }\n        }\n\n        private void InitializeComponent()\n        {\n            this.DoubleBuffered = true;\n            this.vScrollBar = new System.Windows.Forms.VScrollBar();\n            this.hScrollBar = new System.Windows.Forms.HScrollBar();\n            this.SuspendLayout();\n            // \n            // vScrollBar\n            // \n            this.vScrollBar.Dock = System.Windows.Forms.DockStyle.Right;\n            this.vScrollBar.Location = new System.Drawing.Point(133, 0);\n            this.vScrollBar.Name = \"vScrollBar\";\n            this.vScrollBar.Size = new System.Drawing.Size(17, 150);\n            this.vScrollBar.SmallChange = 10;\n            this.vScrollBar.TabIndex = 0;\n            this.vScrollBar.Scroll += new System.Windows.Forms.ScrollEventHandler(this.vScrollBar_Scroll);\n            // \n            // hScrollBar\n            // \n            this.hScrollBar.Dock = System.Windows.Forms.DockStyle.Bottom;\n            this.hScrollBar.Location = new System.Drawing.Point(0, 133);\n            this.hScrollBar.Name = \"hScrollBar\";\n            this.hScrollBar.Size = new System.Drawing.Size(133, 17);\n            this.hScrollBar.SmallChange = 10;\n            this.hScrollBar.TabIndex = 1;\n            this.hScrollBar.Scroll += new System.Windows.Forms.ScrollEventHandler(this.hScrollBar_Scroll);\n            // \n            // DesignXmlDraw\n            // \n            this.Controls.Add(this.hScrollBar);\n            this.Controls.Add(this.vScrollBar);\n            this.Name = \"DesignXmlDraw\";\n            this.ResumeLayout(false);\n\n        }\n\n        private void vScrollBar_Scroll(object sender, ScrollEventArgs e)\n        {\n            if (vScrollBar.IsDisposed)\n                return;\n\n            if (e.NewValue == e.OldValue)\n                return;\n\n            this.Refresh();\n        }\n\n        private void hScrollBar_Scroll(object sender, ScrollEventArgs e)\n        {\n            if (hScrollBar.IsDisposed)\n                return;\n\n            if (e.NewValue == e.OldValue)\n                return;\n\n            this.Refresh();\n        }\n        \n        bool PointInLine(Point[] line, Point pt)\n        {\n            Pen p = new Pen(Color.Black, 4);\n            GraphicsPath gp = new GraphicsPath();\n            gp.AddLine(line[0], line[1]);\n            gp.Widen(p);\n            p.Dispose();\n\n            return gp.IsVisible(pt);\n        }\n\n        /// <summary>\n        /// PointInPolygon: uses ray casting algorithm ( http://en.wikipedia.org/wiki/Point_in_polygon )\n        ///   could have used approach similar to PointInLine\n        /// </summary>\n        /// <param name=\"p\"></param>\n        /// <returns></returns>\n        bool PointInPolygon(Point[] poly, Point p)\n        {\n            Point p1, p2;\n            bool bIn = false;\n            if (poly.Length < 3)\n            {\n                return false;\n            }\n\n            Point op = new Point(poly[poly.Length - 1].X, poly[poly.Length - 1].Y);\n            for (int i = 0; i < poly.Length; i++)\n            {\n                Point np = new Point(poly[i].X, poly[i].Y);\n                if (np.X > op.X)\n                {\n                    p1 = op;\n                    p2 = np;\n                }\n                else\n                {\n                    p1 = np;\n                    p2 = op;\n                }\n\n                if ((np.X < p.X) == (p.X <= op.X)\n                    && (p.Y - p1.Y) * (p2.X - p1.X) < (p2.Y - p1.Y) * (p.X - p1.X))\n                {\n                    bIn = !bIn;\n                }\n                op = np;\n            }\n            return bIn;\n        }\n\n\n        internal void SetBackgroundImage(string fname)\n        {\n            if (fname == null)\n            {\n                if (_BackImage != null)\n                {\n                    _BackImage.Dispose();\n                    _BackImage = null;\n                }\n                return;\n            }\n\n            Stream strm = null;\n            System.Drawing.Image im = null;\n\n            try\n            {\n                if (fname.StartsWith(\"http:\") ||\n                    fname.StartsWith(\"file:\") ||\n                    fname.StartsWith(\"https:\"))\n                {\n                    WebRequest wreq = WebRequest.Create(fname);\n                    WebResponse wres = wreq.GetResponse();\n                    strm = wres.GetResponseStream();\n                }\n                else\n                    strm = new FileStream(fname, FileMode.Open, FileAccess.Read, FileShare.Read);\n                im = System.Drawing.Image.FromStream(strm);\n                if (_BackImage != null)\n                    _BackImage.Dispose();\n                _BackImage = im;\n            }\n            finally\n            {\n                if (strm != null)\n                    strm.Close();\n            }\n            this.Invalidate();\n        }\n\n        #region XML Manipulation\n        internal void DeleteSelected()\n        {\n            if (_SelectedList.Count == 0)       // Nothing to do\n                return;\n\n            StartUndoGroup(Strings.DesignXmlDraw_Undo_Delete);\n            foreach (XmlNode d in _SelectedList)\n                Remove(d);\n            EndUndoGroup();\n\n            _SelectedList.Clear();\n            SignalSelectionChanged();\n            this.Refresh();\n        }\n\n        internal XmlElement CreateElement(XmlNode parent, string name, string val)\n        {\n            XmlElement node;\n            \n            node = _MapDoc.CreateElement(name);\n            if (val != null)\n                node.InnerText = val;\n            parent.AppendChild(node);\n            return node;\n        }\n\n        internal XmlNode GetNamedChildNode(XmlNode xNode, string name)\n        {\n            if (xNode == null)\n                return null;\n\n            foreach (XmlNode cNode in xNode.ChildNodes)\n            {\n                if (cNode.NodeType == XmlNodeType.Element &&\n                    cNode.Name == name)\n                    return cNode;\n            }\n            return null;\n        }\n\n        internal string GetElementValue(XmlNode parent, string name, string defaultV)\n        {\n            XmlNode node = this.GetNamedChildNode(parent, name);\n            if (node == null)\n                return defaultV;\n            else\n                return node.InnerText;\n        }\n\n        internal void Remove(XmlNode node)\n        {\n            if (node != null)\n            {\n                node.ParentNode.RemoveChild(node);\n            }\n            return;\n        }\n\n        internal XmlNode SetElement(XmlNode parent, string name, string val)\n        {\n            XmlNode node = this.GetNamedChildNode(parent, name);\n            if (node == null)\n                node = CreateElement(parent, name, val);\n            else if (val != null)\n                node.InnerText = val;\n            return node;\n        }\n\n        #endregion\n\n        internal void SignalXmlChanged()\n        {\n            if (XmlChange != null)\n                XmlChange(this);\n            Modified = true;\n        }\n\n        internal void SignalSelectionChanged()\n        {\n            if (SelectionChange != null)\n                SelectionChange(this);\n        }\n\n        internal void SignalToolChanged()\n        {\n            if (ToolChange != null)\n                ToolChange(this);\n        }\n\n        internal SortedList<string, string> GetAllKeys()\n        {\n            SortedList<string, string> keys = new SortedList<string, string>(_MapDoc.ChildNodes.Count);\n            XmlNode root = GetRoot();\n            if (root == null)\n                return keys;\n\n            foreach (XmlNode xNodeLoop in root.ChildNodes)\n            {\n                if (xNodeLoop.NodeType != XmlNodeType.Element)\n                    continue;\n                if (xNodeLoop.Name != \"Polygon\")\n                    continue;\n                // obtain the keys for the polygon\n                string[] skeys = this.GetKeysInPolygon(xNodeLoop);\n                foreach (string key in skeys)\n                {\n                    if (!keys.ContainsKey(key))\n                        keys.Add(key, key);\n                }\n            }\n            return keys;\n        }\n    }\n\n}\n"
  },
  {
    "path": "RdlMapFile/DesignXmlDraw.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "RdlMapFile/DialogAbout.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlMapFile\n{\n    public partial class DialogAbout : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tprivate System.Windows.Forms.Button bOK;\nprivate System.Windows.Forms.TextBox tbLicense;\nprivate System.Windows.Forms.LinkLabel linkLabel3;\nprivate System.Windows.Forms.LinkLabel linkLabel4;\nprivate System.Windows.Forms.Label label5;\nprivate System.Windows.Forms.Label label6;\nprivate System.Windows.Forms.Label label8;\nprivate System.Windows.Forms.PictureBox pictureBox2;\nprivate System.Windows.Forms.Label lVersion;\nprivate System.Windows.Forms.Label lVMVersion;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DialogAbout));\n\t\t\tthis.bOK = new System.Windows.Forms.Button();\n\t\t\tthis.tbLicense = new System.Windows.Forms.TextBox();\n\t\t\tthis.linkLabel3 = new System.Windows.Forms.LinkLabel();\n\t\t\tthis.linkLabel4 = new System.Windows.Forms.LinkLabel();\n\t\t\tthis.label5 = new System.Windows.Forms.Label();\n\t\t\tthis.label6 = new System.Windows.Forms.Label();\n\t\t\tthis.lVersion = new System.Windows.Forms.Label();\n\t\t\tthis.label8 = new System.Windows.Forms.Label();\n\t\t\tthis.lVMVersion = new System.Windows.Forms.Label();\n\t\t\tthis.pictureBox2 = new System.Windows.Forms.PictureBox();\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// bOK\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bOK, \"bOK\");\n\t\t\tthis.bOK.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n\t\t\tthis.bOK.Name = \"bOK\";\n\t\t\t// \n\t\t\t// tbLicense\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbLicense, \"tbLicense\");\n\t\t\tthis.tbLicense.Name = \"tbLicense\";\n\t\t\tthis.tbLicense.ReadOnly = true;\n\t\t\t// \n\t\t\t// linkLabel3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.linkLabel3, \"linkLabel3\");\n\t\t\tthis.linkLabel3.Name = \"linkLabel3\";\n\t\t\tthis.linkLabel3.TabStop = true;\n\t\t\tthis.linkLabel3.Tag = \"https://github.com/majorsilence/My-FyiReporting/discussions\";\n\t\t\tthis.linkLabel3.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n\t\t\t// \n\t\t\t// linkLabel4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.linkLabel4, \"linkLabel4\");\n\t\t\tthis.linkLabel4.Name = \"linkLabel4\";\n\t\t\tthis.linkLabel4.TabStop = true;\n\t\t\tthis.linkLabel4.Tag = \"https://github.com/majorsilence/My-FyiReporting\";\n\t\t\tthis.linkLabel4.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n\t\t\t// \n\t\t\t// label5\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label5, \"label5\");\n\t\t\tthis.label5.Name = \"label5\";\n\t\t\t// \n\t\t\t// label6\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label6, \"label6\");\n\t\t\tthis.label6.Name = \"label6\";\n\t\t\t// \n\t\t\t// lVersion\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lVersion, \"lVersion\");\n\t\t\tthis.lVersion.Name = \"lVersion\";\n\t\t\t// \n\t\t\t// label8\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label8, \"label8\");\n\t\t\tthis.label8.Name = \"label8\";\n\t\t\t// \n\t\t\t// lVMVersion\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lVMVersion, \"lVMVersion\");\n\t\t\tthis.lVMVersion.Name = \"lVMVersion\";\n\t\t\t// \n\t\t\t// pictureBox2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.pictureBox2, \"pictureBox2\");\n\t\t\tthis.pictureBox2.Name = \"pictureBox2\";\n\t\t\tthis.pictureBox2.TabStop = false;\n\t\t\t// \n\t\t\t// DialogAbout\n\t\t\t// \n\t\t\tthis.AcceptButton = this.bOK;\n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.CancelButton = this.bOK;\n\t\t\tthis.Controls.Add(this.lVMVersion);\n\t\t\tthis.Controls.Add(this.linkLabel3);\n\t\t\tthis.Controls.Add(this.linkLabel4);\n\t\t\tthis.Controls.Add(this.label5);\n\t\t\tthis.Controls.Add(this.label6);\n\t\t\tthis.Controls.Add(this.lVersion);\n\t\t\tthis.Controls.Add(this.label8);\n\t\t\tthis.Controls.Add(this.pictureBox2);\n\t\t\tthis.Controls.Add(this.tbLicense);\n\t\t\tthis.Controls.Add(this.bOK);\n\t\t\tthis.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n\t\t\tthis.MaximizeBox = false;\n\t\t\tthis.MinimizeBox = false;\n\t\t\tthis.Name = \"DialogAbout\";\n\t\t\tthis.ShowInTaskbar = false;\n\t\t\tthis.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlMapFile/DialogAbout.cs",
    "content": "\nusing System;\nusing System.Reflection;\nusing System.Windows.Forms;\nusing RdlMapFile.Resources;\n\nnamespace Majorsilence.Reporting.RdlMapFile\n{\n    /// <summary>\n    /// Summary description for DialogAbout.\n    /// </summary>\n    public partial class DialogAbout \n    {\n        public DialogAbout()\n        {\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            tbLicense.Text = Strings.DialogAbout_About;\n\t        lVersion.Text = string.Format(Strings.DialogAbout_Version,  Assembly.GetExecutingAssembly().GetName().Version);\n\t        lVMVersion.Text = string.Format(\".NET {0}\", Environment.Version);\n        }\n\n        private void lnk_LinkClicked(object sender, LinkLabelLinkClickedEventArgs ea)\n        {\n            var lnk = (LinkLabel)sender;\n            lnk.Links[lnk.Links.IndexOf(ea.Link)].Visited = true;\n            System.Diagnostics.Process.Start(lnk.Tag.ToString());\n        }\n    }\n}\n"
  },
  {
    "path": "RdlMapFile/DialogAbout.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>498, 304</value>\n  </data>\n  <data name=\"lVMVersion.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleCenter</value>\n  </data>\n  <data name=\"&gt;&gt;pictureBox2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;pictureBox2.Name\" xml:space=\"preserve\">\n    <value>pictureBox2</value>\n  </data>\n  <data name=\"label5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 23</value>\n  </data>\n  <data name=\"linkLabel3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>280, 88</value>\n  </data>\n  <data name=\"&gt;&gt;lVersion.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"linkLabel3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 16</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel3.Name\" xml:space=\"preserve\">\n    <value>linkLabel3</value>\n  </data>\n  <data name=\"lVMVersion.Text\" xml:space=\"preserve\">\n    <value>.NET x.x.xxxx.xxxx</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lVersion.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>136, 16</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"tbLicense.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"label5.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>240, 88</value>\n  </data>\n  <data name=\"&gt;&gt;tbLicense.Name\" xml:space=\"preserve\">\n    <value>tbLicense</value>\n  </data>\n  <data name=\"label8.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Microsoft Sans Serif, 12pt, style=Bold</value>\n  </data>\n  <data name=\"pictureBox2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>212, 72</value>\n  </data>\n  <data name=\"label8.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>10</value>\n  </data>\n  <data name=\"label6.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 88</value>\n  </data>\n  <data name=\"label8.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>220, 16</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>213, 272</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Website:</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lVersion.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lVMVersion.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbLicense.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel3.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"linkLabel3.Text\" xml:space=\"preserve\">\n    <value>https://github.com/majorsilence/My-FyiReporting/discussions</value>\n  </data>\n  <data name=\"lVMVersion.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>17</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"tbLicense.ScrollBars\" type=\"System.Windows.Forms.ScrollBars, System.Windows.Forms\">\n    <value>Both</value>\n  </data>\n  <data name=\"linkLabel4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>72, 88</value>\n  </data>\n  <data name=\"&gt;&gt;tbLicense.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;pictureBox2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Name\" xml:space=\"preserve\">\n    <value>label8</value>\n  </data>\n  <data name=\"&gt;&gt;label5.Name\" xml:space=\"preserve\">\n    <value>label5</value>\n  </data>\n  <data name=\"label6.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>12</value>\n  </data>\n  <data name=\"lVersion.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>11</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel4.Name\" xml:space=\"preserve\">\n    <value>linkLabel4</value>\n  </data>\n  <data name=\"&gt;&gt;label5.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <data name=\"pictureBox2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>16</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"tbLicense.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>478, 136</value>\n  </data>\n  <data name=\"linkLabel4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>144, 16</value>\n  </data>\n  <data name=\"lVersion.Text\" xml:space=\"preserve\">\n    <value>Version x.x.x</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <data name=\"&gt;&gt;label6.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"lVersion.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>269, 40</value>\n  </data>\n  <data name=\"&gt;&gt;lVMVersion.Name\" xml:space=\"preserve\">\n    <value>lVMVersion</value>\n  </data>\n  <data name=\"pictureBox2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        R0lGODlh1ABIAIcAABoAfCAAeXsycGpqanh4d3pHeAAAihoahzEbgyAgjSQkkUc3lVdBmklCnWNJlX1e\n        o3BusUxJo118yXaOcnS6Z2+qY3vCbRyZ8zSU2FeA0Vai2HaU1HGr13Gz41219HrB9Lo0VJ5Jd5t6W4B3\n        d6tIb7N/f9kcLdIhNs0lPfoFBPsbBe8SGPsnA/o3BvozGekoMfQyL+keJ8guSOc9RvhXCPlMD/lSMfhn\n        Cft0BvVvFvdvLtNIXM5Va9Nkd/BOT+hbZPdxUPVlZe1wcpJUiJlmlYRjnIZ1rqBWg71qiLJxkqh8pMJq\n        htV2iPB9gIW/eqGhXqioZLCwbbazdaGYZIXJeYzUf/eGCvyHHviXCvWYFvuWPfmLMPanDfmoGvq3DPW5\n        FPikOfa3Kfm0PPKsKfeNT/iMbvqqTPmnXfi3Wfa4Svm3evWubvTGE/7YAvTYFfnIDfTHKPfIOvTYK/rU\n        PO7OKP/pAPLlFf/+AO3lHfLlJfLnNt7oQvfLWfjRUfjGefXUaPjWevjGafPmR/PpV/TmaPTrd8zfcYeH\n        h5eXl4+RjpuHtIyFupqvlriNlKGDrrmXtq6Kraampra2trW1rJKOwZKSxIeZ0Ye43JG+346n2qq23LSs\n        zai64Zq25JXIi5jXjJzckJXLipvkjp7okKLJm67Sp6XsmKnsja3soa7worLsqLzts7Xwqrzxs5zC3ZnF\n        5Y7H8anK5LfH47fT567W89SKmMibs8+Sp8+nuuuFiOSLluyUmPSYmPeRhu+dpPewjeyjq/Wkqf+ps/W4\n        ue+zscy0yfi8xOa8xNnZls3ausTrkcPyusXuvfTEmffamPjNiffKqffJtvfYqffXuOTZrvbnifTol+fm\n        nfflufXwp/XorcfHx9jL2tfX19POx8fZ6tbU5MnO5MvsxMnywdHpzdjo1df00c/g7cvj9Nbj7drn8evD\n        yOjV2f7AyvfXyPbZ1eXK0+fd5fDe4fboyPbo1/by1+/syOfo6Obs8urz6ezx9PXq6Pby6ff39/Dt8f//\n        /yH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAAD/ACwAAAAA1ABIAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAj\n        SpxIsaLFixgzatzIsaPHjyBD/stHblyrkyhbLTN3T6TLlzBjQtRHbhmrmyhXpUS5LJ/Mnwvz+dMHtOhD\n        fuZuskq5rKnTpyeXtTRKtarVhOVYqVoa9emycU6ZOUUpjt/Vs2h/6hunVOU4c07BjptLd+yqm6t8pnWp\n        Lt25dAj77QXJ7y7OVm/hNqXLGGzTVjpZpUpVbnBFffimHvzG+dvBfPhCW96ob1UqrovjNqaL2CRKyalM\n        VR498546fAnPzdqNu2DfdL1pXzR9+OlquV+X7ZSsKrYpzcIVYlYH3eC3WLFmqTN47m/w6BPHTf/m2jW1\n        18eQdba62Tz2qOfgF97T2+/cQcwJ86n7tj1+RX/+ZBZPOd0UmEgiiERyiIKHNHgIEZFEyAgiiByYyCFT\n        FLGKfwzp880sniVEFIcZmfVPN95Qc801yLTYohRQJCJFFFFAYeMUTzwxxYw02ghFjiIQ8MlsJBqEzyyy\n        xOLKLAap8womTBL0TTojFumQOQOxQ8cdXHbJ5RhAeCnmC2x02UYbXeJAgCilWLmZkksayQEHrxQUyyux\n        CObmQv2YIlA3uGwp5pdhcllHHV6+EEYejDbKaA5CDrmnna6EWJA+c2JCUDqYxDmpQuT4KRA8gt7RBqJc\n        hkGGl6hyCQMwxhj/086stP4QaZufCoSPff/MEotvB6UzCzq5JlSKKAJ5c0ypYoZR6KB3zODLrLHS2o6t\n        onwSSnWfzjLnr8U+5M8++wyUDyjIjsqsl2GUQUwz8MYLzS/S0iqrrO0EseYnn3gTrkCxaKABB3Z2UOUs\n        Ve65zzRrbHHDDTk0IxA5oogSjyTdbLOGH390DEjHf6zRBL7VthOrD8BQi++sQowgCiif4ArePdwa5Mol\n        Cf/TAQZRotNBB27u484vQOTwcA5rTFOuQMl8IkoxlbFDTLWx3nvLLtZm7cO0JguzcsvZahufPvf0VvOl\n        tAxECy29pQMLuPH5MzQZOtAAMRm/YGMiQceO/+INit5MbS+twORCctWz/pBy1iy7nK0nOVvmT39HZgcY\n        QjvDbeU+0fxCxg000JDDFmtEs/dBpogyyjZRIy6M1yYDwwvJXuP7gzCMs7wmzJ74Ax4+I+qmJK8HvYIB\n        sQJ9AEvyyO8l9C9l1B366GpEszRC/MzjDD+jvCfJNt4oazLjwOyCuMlV97A442Dz64lewuGj5zdJuoJb\n        LJfEkjNRtPCfNj4f6I9V+OGOYESvBjSowQ10gDd3XO8g2bMGH+DAhjjY4z2m2EY3/MGOlWVNGL44n8qE\n        gDt74asJLoNZKHzHIXX4ClyX4IAGiDcQdVxgeWfhxzuG0Ysy2KAGQKQBA/9/AQ16BMUezpjgF9hAB0Jg\n        QyCmMEUqEFGgbhSBAVh0wAKwyIAhhHBlJGvCEIrwgDKa8QEkiNQnPOEm0WBqTgJ5RQea1zygCE0YvQCC\n        D2rQAiDWYIjReAdD7oGNZ/QhDEv8ghz+oDeCjAdj92DHAgxAyUpS0gG1WEADFqBJTW6yCQiwpCVDQAAV\n        sjFXuhGIBnj2D1roSST+kMc7jMGLMujRBS1gAQuAaAMyrIEY7zgdQvyhvUCk4QvIZAMb+lANe7ySIMzx\n        yT28MUlRXlIJ1qwkE0KZTQGMgF+hOOW/0KE/G6btIvzYxztmKYxg9EIIQfABDFyggnqqgAUusAEQyvD/\n        i0A+MCH8oIc0/JCGMHQhmXD4QzOFWRB+KMMQe9BDNu7RjQZk0wAOgMRFDQDKi3qTX59gxL+a9MyIDMMF\n        MVhBClbK0pXWM59BKAMv/PmQfWhPDWboAhd2+oU4/MEajVRIPbBhjUHkwQ5IRao9ulFNAwAAAJV0QCMq\n        +VSoUjIX3HSqJT8ailDIbKQZGUZLVwADG8T0F8N4xz8HSQ9oPAMNYMgCFnYaBj4AQhv2YGhD7ZGNQggC\n        D0lNKh4EUYilWjSbGd2oLrIqSq4yIhlgRQex0PGByEFkGLhT60RsOq8zxFWuWRgDGvwgjbwypB72sIZf\n        jxpYpOphENU4xSkE4o97/0Tgog6wxUZ5wditjgAUnmAEkTikj/6Q8xVMUofA/oEOD1j2I/0QWmfpdgUc\n        WCELWkjDGp4xDyOeNhtF1QNrW5sH2GajHgMxh6gKBAEFuPe97oVAJBJA3/oeIAEHyOQB9svf/Trgm54Q\n        p3/wwZlYtOQbMQTXz56bEXK9IxrBWAMZtpADo+EAB1fQAhqeAY156NUgQ+2rIMZL3kEU4rzYE9U/AESz\n        blSoituIcYwTQQBESCJCOKbQAAbgoAyFsxtFygdnZmEfdVziEq44iDrqCJF90MMdEO4FGYCgAwSGbno5\n        0MIZiEiPDxOkH0O1BiEEIQfAttYOeXhtNVDckGUMBP9A+WhxFQEX40ngeBI3jlCCKHShCx1iAp8ghZdH\n        46HOCCQdAiwILD6wEH7woheQFoIef9iCSvcxiDnQwRb4KQ16sBCg9MDGNQrxBzm44dSBNXOaCQFU9Erk\n        lfzQR5wpeg8CcUPG25BEIh6woDzrmc9+PsQDPgFkK6WDM4m+1K/0QRQGB6Geuox2pYGog33+ohkOVAg/\n        6jEPbTzjD32gAx2UyYZTozqprz2xaUmTj1nPGQKSKIY3IjGJSRiCERPCcSQQMaEK+XkCXwXrP+R4zoVA\n        QwhCgPQvfkEMd6j1w06mxjScAYhA9GEMyEymMs3tBqTiId3nHbRFWvGeyZxmJfr/QIpJlOMVx6BHMlEc\n        xcvOFq5zvCLZTabHO6YRjXmp4Qxm0MIYsiDXnfJU429wQ7npIAhCrLkeIt9IPlKBQZOvpN3m2AnLH6Oe\n        m7gnW+QQ+D/0EQsaNiQaZSCD2nXA9gpfOAfWtQIWsJAFo3Mh4+RmukKzsW6q5MMUp4iiyVvjmp0Yfj2T\n        SR0owi5wffjKFThXSBmu/LALX9gKcp+73e8Ohz70ARDW0EY94LeXqUdRiiY/zGEO7/UoLl7sArlOLL7D\n        kF/goPJxz3xoxYAGQDxDGvOAepBZEXjBm3wrSmGFYdZzl1WgAvCyETtwYk97hsyDDGZYA7yk4Y4urzVX\n        4ji9//Eno4rym18VUXw+4EFRim7QjGbAE8qnrfQb2H8kH6w4PQZNMQpQ+B+koVAFVBAKVOAEjIBnm1AK\n        m5AM8tYN3OB+NCN/A4YP9Wd/HeEP5aAKolAFn1AFAWgBVEAFFkABJEgBFVABE9AgB0Ih+jYJxVAKMVYg\n        6UAz80cboSEaFqgRQkFRGVMKAWYBQFiCJ4iCBFCEBPAAEzAFE4AgLBgJkvCExaBBBVIO91CDOXiFKyZn\n        3rANybAJvjYhF2KEBDAAYzgAE1BGU3AIFJIgTigJMCiF8VCFJYWF9scPtQVjufaEv3YhE1CEO/aHO0YA\n        E5CCTIhjksCA4AOBVUiHWKgPtf/Fg1vohXnGZ4dQBEYIiH94hIdQiG24CTEIgf5AeowIeyxWRVuYhzlW\n        IYcwAmM4AWRIhkbYIGvYhpLgiRqUDnGYDwwmE/vAC0LgA+5wEMLwA/8ADLqQC7qgC8SwDi8RDooAHo/I\n        DgUSY09oZ/vmbw1yhmJIACqIIPr2hDHmDQ9Ig2gRBMLwDzDQBAexCyZQLkJgAj2wDsCwAzIgSBf4CAJR\n        DEZghYPxiOnggDGmgJLwCL+GjQ6yiSvIhvQGhYkIgUKBFikwDA6xDiegCwPBAzIgDx3xCM9oJXZ4D+lA\n        IFv4gpJgjde4hiipkE74gp9IhVUYdTDRDhE5kSZgkQKhCzL/wIz7cAtMsAS4YBHFUARGUAzgoBGuFhN2\n        6G4PeIpc+ITxdoi1KGN/kwzwEIc0uItAwQtBkAJBkAvB4AM+IJH7sAtNsA/E8APH8A/GUJEDwQQykJZM\n        oJHrIAO38A+3UAvrgAQkUJf5aAtKcAvcEA/F8AjsQAT46AiOIBDcoAjgAA6bsAnxkAkQoAkDwQmcYAmZ\n        YJnfUQhuMAdtQAgIUQ9yIAdtMA+FMAcd4YjMBiDxAAhzMGt/MAf3sA8Bgg1wcCZuMA/CIVYS+Q8z8AID\n        sQu7MJYmwIwUaZH+oAsowATFyAPwsA7wAAI9AA8kQALH4A+3sJf/kAQ/+Q/FcAS2QARE/1AMm1AM/4CY\n        K7YJDwAO/rAIRqAJ/rAJEIAbsmAJArEBG4AOVTIPcGAW89AH3NYHc8BMAvEHhfAP9TAIcPAGA0qg//Cf\n        2iAQ1VAN8zAIczAHEWoNf+CafRBQntcHEVoQpzkQhdAHA8EPb1ANBXqgtMGbAsELKxAMAjED5XIMMSCR\n        62ACGLmcafkPtcAE0Pmc8PAPS7AEA6EEJAAPIaCRAiGeSqAEBIGeJ7Ke/0AJlSAQ/QABRWkJlPkPnCAB\n        BeEHcUAQ/OAF0vCgcAAI8xAHdvVEgMAHAtEHY/oPf+AFgSAQceAMXuAM9SANXoAN2uAF1cAPzjAPYaAN\n        /KANXxCiAwuBDXAqEI46EM5gov/+IVbGMBAvAJzyQIz/cAwmcKnHaQwyIAMs1ANGWhBFOhC4QAK2EAIE\n        8QhD8KQEoQSJ+Q/goKX/oAhXKhC4agn26aUZUBDzwAWBAAjSQKiU+g/S0AWT+gzYYETPAAiQ2gUCEQbz\n        IAbVmk4DUXHTEAaSGgbTgA3YYHEFMQ3SCql+MBDRyiHGMJMvugLGoAu9aQwmkJbH+Q++IAM9IBC3QKoD\n        EQ/xkKqjspeuOhC2EKtQOhCK0JHcQKVWOhASUJThIAH2kQmyYBD0EK1i0AV+kK4DwQX/4AfTMBAdOxBd\n        MA/zkAb/gAV9igb/wAdz1wVjIAbTgK0C4QddIAZikAZm4LL/BIENHvsPQEuy5xofLioQ+xADPsCp/5Cj\n        oIoCNumWFskOMrAEvsMOzCmw/9Cq38kOA1EMCDurHQkODrur/xCxAhEOmrkQYKBdJ4oFIXumNxu0avAM\n        gTCyZvBW0+AHZmAW+2AGNAsGJPsMCjENPvsPhquuZsAhw7ACvSkQTRAD6igQ9MqMxAC1A0GPQ+qWICCd\n        Xqu1SWAL8RACtjAQkAAJsjoQm1AEisANtwpklWC2uCoLnJAQDCMQ/HAFanAFS4NT/6AGajAQP/cPXSYN\n        W3AFAvEMWqAFv3sGA3EGWjANiysQ08C7ySsNZjCy1Mu82zsQ7oAD2usMa0Ab77CVQdAO/wOxDyvApOvw\n        AxU5DD+AAjvQo/swqrcAIPDApP+ABEdwC7aABKX7D/BwBMUAD8WgBMUgntxQJfHgD/FQCRCwCeGwCBAQ\n        DvqgCRJQCfjQCRLQwRKwATS0D1dwBWSAA86rBjigBVugBWZBBsFLvThQwhKDA9M7DSb8D+5wBSusw1oA\n        DWRAEGeQwlnWDDfAvf8QDTdwYTdgBkl8YWrQDJaHA9BQJP4gBBmRqvo7EPAQmBgRDvuBDufwDQRDG9Hg\n        vBABk4MxMhmBBEggEuHwq5VJxmQQjBYIozMwAxqxBEkgEl/KCY15Dp1wOaO4F+2wtHM4EfBQpLhwyBoR\n        Dp2wAZkwex2DPMmUXMmWfMmYnMmavMmc3Mme/MmgHMqinBABAQA7\n</value>\n  </data>\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"pictureBox2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 8</value>\n  </data>\n  <data name=\"label8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>272, 24</value>\n  </data>\n  <data name=\"&gt;&gt;lVersion.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;lVMVersion.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;tbLicense.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label5.Text\" xml:space=\"preserve\">\n    <value>E-mail:</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel4.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label8.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"lVersion.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>TopCenter</value>\n  </data>\n  <data name=\"pictureBox2.SizeMode\" type=\"System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms\">\n    <value>AutoSize</value>\n  </data>\n  <data name=\"&gt;&gt;lVersion.Name\" xml:space=\"preserve\">\n    <value>lVersion</value>\n  </data>\n  <data name=\"label5.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>13</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel4.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"tbLicense.Multiline\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"&gt;&gt;pictureBox2.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"linkLabel4.Text\" xml:space=\"preserve\">\n    <value>https://github.com/majorsilence/My-FyiReporting</value>\n  </data>\n  <data name=\"linkLabel4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>14</value>\n  </data>\n  <data name=\"label6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 23</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>About</value>\n  </data>\n  <data name=\"&gt;&gt;label8.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbLicense.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 120</value>\n  </data>\n  <data name=\"&gt;&gt;lVMVersion.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"linkLabel3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>15</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DialogAbout</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Majorsilence Reporting MapFile Designer</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label6.Name\" xml:space=\"preserve\">\n    <value>label6</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"lVMVersion.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>144, 16</value>\n  </data>\n  <data name=\"lVMVersion.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>259, 64</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlMapFile/DialogAbout.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bOK.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"linkLabel3.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"linkLabel4.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label5.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label6.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label6.Text\" xml:space=\"preserve\">\n    <value>Веб-сайт:</value>\n  </data>\n  <data name=\"lVersion.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label8.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>266, 24</value>\n  </data>\n  <data name=\"label8.Text\" xml:space=\"preserve\">\n    <value>Редактор карт</value>\n  </data>\n  <data name=\"label8.TextAlign\" type=\"System.Drawing.ContentAlignment, System.Drawing\">\n    <value>MiddleCenter</value>\n  </data>\n  <data name=\"lVMVersion.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"pictureBox2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        R0lGODlh1ABIAIcAABoAfCAAeXsycGpqanh4d3pHeAAAihoahzEbgyAgjSQkkUc3lVdBmklCnWNJlX1e\n        o3BusUxJo118yXaOcnS6Z2+qY3vCbRyZ8zSU2FeA0Vai2HaU1HGr13Gz41219HrB9Lo0VJ5Jd5t6W4B3\n        d6tIb7N/f9kcLdIhNs0lPfoFBPsbBe8SGPsnA/o3BvozGekoMfQyL+keJ8guSOc9RvhXCPlMD/lSMfhn\n        Cft0BvVvFvdvLtNIXM5Va9Nkd/BOT+hbZPdxUPVlZe1wcpJUiJlmlYRjnIZ1rqBWg71qiLJxkqh8pMJq\n        htV2iPB9gIW/eqGhXqioZLCwbbazdaGYZIXJeYzUf/eGCvyHHviXCvWYFvuWPfmLMPanDfmoGvq3DPW5\n        FPikOfa3Kfm0PPKsKfeNT/iMbvqqTPmnXfi3Wfa4Svm3evWubvTGE/7YAvTYFfnIDfTHKPfIOvTYK/rU\n        PO7OKP/pAPLlFf/+AO3lHfLlJfLnNt7oQvfLWfjRUfjGefXUaPjWevjGafPmR/PpV/TmaPTrd8zfcYeH\n        h5eXl4+RjpuHtIyFupqvlriNlKGDrrmXtq6Kraampra2trW1rJKOwZKSxIeZ0Ye43JG+346n2qq23LSs\n        zai64Zq25JXIi5jXjJzckJXLipvkjp7okKLJm67Sp6XsmKnsja3soa7worLsqLzts7Xwqrzxs5zC3ZnF\n        5Y7H8anK5LfH47fT567W89SKmMibs8+Sp8+nuuuFiOSLluyUmPSYmPeRhu+dpPewjeyjq/Wkqf+ps/W4\n        ue+zscy0yfi8xOa8xNnZls3ausTrkcPyusXuvfTEmffamPjNiffKqffJtvfYqffXuOTZrvbnifTol+fm\n        nfflufXwp/XorcfHx9jL2tfX19POx8fZ6tbU5MnO5MvsxMnywdHpzdjo1df00c/g7cvj9Nbj7drn8evD\n        yOjV2f7AyvfXyPbZ1eXK0+fd5fDe4fboyPbo1/by1+/syOfo6Obs8urz6ezx9PXq6Pby6ff39/Dt8f//\n        /yH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAAD/ACwAAAAA1ABIAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAj\n        SpxIsaLFixgzatzIsaPHjyBD/stHblyrkyhbLTN3T6TLlzBjQtRHbhmrmyhXpUS5LJ/Mnwvz+dMHtOhD\n        fuZuskq5rKnTpyeXtTRKtarVhOVYqVoa9emycU6ZOUUpjt/Vs2h/6hunVOU4c07BjptLd+yqm6t8pnWp\n        Lt25dAj77QXJ7y7OVm/hNqXLGGzTVjpZpUpVbnBFffimHvzG+dvBfPhCW96ob1UqrovjNqaL2CRKyalM\n        VR498546fAnPzdqNu2DfdL1pXzR9+OlquV+X7ZSsKrYpzcIVYlYH3eC3WLFmqTN47m/w6BPHTf/m2jW1\n        18eQdba62Tz2qOfgF97T2+/cQcwJ86n7tj1+RX/+ZBZPOd0UmEgiiERyiIKHNHgIEZFEyAgiiByYyCFT\n        FLGKfwzp880sniVEFIcZmfVPN95Qc801yLTYohRQJCJFFFFAYeMUTzwxxYw02ghFjiIQ8MlsJBqEzyyy\n        xOLKLAap8womTBL0TTojFumQOQOxQ8cdXHbJ5RhAeCnmC2x02UYbXeJAgCilWLmZkksayQEHrxQUyyux\n        CObmQv2YIlA3uGwp5pdhcllHHV6+EEYejDbKaA5CDrmnna6EWJA+c2JCUDqYxDmpQuT4KRA8gt7RBqJc\n        hkGGl6hyCQMwxhj/086stP4QaZufCoSPff/MEotvB6UzCzq5JlSKKAJ5c0ypYoZR6KB3zODLrLHS2o6t\n        onwSSnWfzjLnr8U+5M8++wyUDyjIjsqsl2GUQUwz8MYLzS/S0iqrrO0EseYnn3gTrkCxaKABB3Z2UOUs\n        Ve65zzRrbHHDDTk0IxA5oogSjyTdbLOGH390DEjHf6zRBL7VthOrD8BQi++sQowgCiif4ArePdwa5Mol\n        Cf/TAQZRotNBB27u484vQOTwcA5rTFOuQMl8IkoxlbFDTLWx3nvLLtZm7cO0JguzcsvZahufPvf0VvOl\n        tAxECy29pQMLuPH5MzQZOtAAMRm/YGMiQceO/+INit5MbS+twORCctWz/pBy1iy7nK0nOVvmT39HZgcY\n        QjvDbeU+0fxCxg000JDDFmtEs/dBpogyyjZRIy6M1yYDwwvJXuP7gzCMs7wmzJ74Ax4+I+qmJK8HvYIB\n        sQJ9AEvyyO8l9C9l1B366GpEszRC/MzjDD+jvCfJNt4oazLjwOyCuMlV97A442Dz64lewuGj5zdJuoJb\n        LJfEkjNRtPCfNj4f6I9V+OGOYESvBjSowQ10gDd3XO8g2bMGH+DAhjjY4z2m2EY3/MGOlWVNGL44n8qE\n        gDt74asJLoNZKHzHIXX4ClyX4IAGiDcQdVxgeWfhxzuG0Ysy2KAGQKQBA/9/AQ16BMUezpjgF9hAB0Jg\n        QyCmMEUqEFGgbhSBAVh0wAKwyIAhhHBlJGvCEIrwgDKa8QEkiNQnPOEm0WBqTgJ5RQea1zygCE0YvQCC\n        D2rQAiDWYIjReAdD7oGNZ/QhDEv8ghz+oDeCjAdj92DHAgxAyUpS0gG1WEADFqBJTW6yCQiwpCVDQAAV\n        sjFXuhGIBnj2D1roSST+kMc7jMGLMujRBS1gAQuAaAMyrIEY7zgdQvyhvUCk4QvIZAMb+lANe7ySIMzx\n        yT28MUlRXlIJ1qwkE0KZTQGMgF+hOOW/0KE/G6btIvzYxztmKYxg9EIIQfABDFyggnqqgAUusAEQyvD/\n        i0A+MCH8oIc0/JCGMHQhmXD4QzOFWRB+KMMQe9BDNu7RjQZk0wAOgMRFDQDKi3qTX59gxL+a9MyIDMMF\n        MVhBClbK0pXWM59BKAMv/PmQfWhPDWboAhd2+oU4/MEajVRIPbBhjUHkwQ5IRao9ulFNAwAAAJV0QCMq\n        +VSoUjIX3HSqJT8ailDIbKQZGUZLVwADG8T0F8N4xz8HSQ9oPAMNYMgCFnYaBj4AQhv2YGhD7ZGNQggC\n        D0lNKh4EUYilWjSbGd2oLrIqSq4yIhlgRQex0PGByEFkGLhT60RsOq8zxFWuWRgDGvwgjbwypB72sIZf\n        jxpYpOphENU4xSkE4o97/0Tgog6wxUZ5wditjgAUnmAEkTikj/6Q8xVMUofA/oEOD1j2I/0QWmfpdgUc\n        WCELWkjDGp4xDyOeNhtF1QNrW5sH2GajHgMxh6gKBAEFuPe97oVAJBJA3/oeIAEHyOQB9svf/Trgm54Q\n        p3/wwZlYtOQbMQTXz56bEXK9IxrBWAMZtpADo+EAB1fQAhqeAY156NUgQ+2rIMZL3kEU4rzYE9U/AESz\n        blSoituIcYwTQQBESCJCOKbQAAbgoAyFsxtFygdnZmEfdVziEq44iDrqCJF90MMdEO4FGYCgAwSGbno5\n        0MIZiEiPDxOkH0O1BiEEIQfAttYOeXhtNVDckGUMBP9A+WhxFQEX40ngeBI3jlCCKHShCx1iAp8ghZdH\n        46HOCCQdAiwILD6wEH7woheQFoIef9iCSvcxiDnQwRb4KQ16sBCg9MDGNQrxBzm44dSBNXOaCQFU9Erk\n        lfzQR5wpeg8CcUPG25BEIh6woDzrmc9+PsQDPgFkK6WDM4m+1K/0QRQGB6Geuox2pYGog33+ohkOVAg/\n        6jEPbTzjD32gAx2UyYZTozqprz2xaUmTj1nPGQKSKIY3IjGJSRiCERPCcSQQMaEK+XkCXwXrP+R4zoVA\n        QwhCgPQvfkEMd6j1w06mxjScAYhA9GEMyEymMs3tBqTiId3nHbRFWvGeyZxmJfr/QIpJlOMVx6BHMlEc\n        xcvOFq5zvCLZTabHO6YRjXmp4Qxm0MIYsiDXnfJU429wQ7npIAhCrLkeIt9IPlKBQZOvpN3m2AnLH6Oe\n        m7gnW+QQ+D/0EQsaNiQaZSCD2nXA9gpfOAfWtQIWsJAFo3Mh4+RmukKzsW6q5MMUp4iiyVvjmp0Yfj2T\n        SR0owi5wffjKFThXSBmu/LALX9gKcp+73e8Ohz70ARDW0EY94LeXqUdRiiY/zGEO7/UoLl7sArlOLL7D\n        kF/goPJxz3xoxYAGQDxDGvOAepBZEXjBm3wrSmGFYdZzl1WgAvCyETtwYk97hsyDDGZYA7yk4Y4urzVX\n        4ji9//Eno4rym18VUXw+4EFRim7QjGbAE8qnrfQb2H8kH6w4PQZNMQpQ+B+koVAFVBAKVOAEjIBnm1AK\n        m5AM8tYN3OB+NCN/A4YP9Wd/HeEP5aAKolAFn1AFAWgBVEAFFkABJEgBFVABE9AgB0Ih+jYJxVAKMVYg\n        6UAz80cboSEaFqgRQkFRGVMKAWYBQFiCJ4iCBFCEBPAAEzAFE4AgLBgJkvCExaBBBVIO91CDOXiFKyZn\n        3rANybAJvjYhF2KEBDAAYzgAE1BGU3AIFJIgTigJMCiF8VCFJYWF9scPtQVjufaEv3YhE1CEO/aHO0YA\n        E5CCTIhjksCA4AOBVUiHWKgPtf/Fg1vohXnGZ4dQBEYIiH94hIdQiG24CTEIgf5AeowIeyxWRVuYhzlW\n        IYcwAmM4AWRIhkbYIGvYhpLgiRqUDnGYDwwmE/vAC0LgA+5wEMLwA/8ADLqQC7qgC8SwDi8RDooAHo/I\n        DgUSY09oZ/vmbw1yhmJIACqIIPr2hDHmDQ9Ig2gRBMLwDzDQBAexCyZQLkJgAj2wDsCwAzIgSBf4CAJR\n        DEZghYPxiOnggDGmgJLwCL+GjQ6yiSvIhvQGhYkIgUKBFikwDA6xDiegCwPBAzIgDx3xCM9oJXZ4D+lA\n        IFv4gpJgjde4hiipkE74gp9IhVUYdTDRDhE5kSZgkQKhCzL/wIz7cAtMsAS4YBHFUARGUAzgoBGuFhN2\n        6G4PeIpc+ITxdoi1KGN/kwzwEIc0uItAwQtBkAJBkAvB4AM+IJH7sAtNsA/E8APH8A/GUJEDwQQykJZM\n        oJHrIAO38A+3UAvrgAQkUJf5aAtKcAvcEA/F8AjsQAT46AiOIBDcoAjgAA6bsAnxkAkQoAkDwQmcYAmZ\n        YJnfUQhuMAdtQAgIUQ9yIAdtMA+FMAcd4YjMBiDxAAhzMGt/MAf3sA8Bgg1wcCZuMA/CIVYS+Q8z8AID\n        sQu7MJYmwIwUaZH+oAsowATFyAPwsA7wAAI9AA8kQALH4A+3sJf/kAQ/+Q/FcAS2QARE/1AMm1AM/4CY\n        K7YJDwAO/rAIRqAJ/rAJEIAbsmAJArEBG4AOVTIPcGAW89AH3NYHc8BMAvEHhfAP9TAIcPAGA0qg//Cf\n        2iAQ1VAN8zAIczAHEWoNf+CafRBQntcHEVoQpzkQhdAHA8EPb1ANBXqgtMGbAsELKxAMAjED5XIMMSCR\n        62ACGLmcafkPtcAE0Pmc8PAPS7AEA6EEJAAPIaCRAiGeSqAEBIGeJ7Ke/0AJlSAQ/QABRWkJlPkPnCAB\n        BeEHcUAQ/OAF0vCgcAAI8xAHdvVEgMAHAtEHY/oPf+AFgSAQceAMXuAM9SANXoAN2uAF1cAPzjAPYaAN\n        /KANXxCiAwuBDXAqEI46EM5gov/+IVbGMBAvAJzyQIz/cAwmcKnHaQwyIAMs1ANGWhBFOhC4QAK2EAIE\n        8QhD8KQEoQSJ+Q/goKX/oAhXKhC4agn26aUZUBDzwAWBAAjSQKiU+g/S0AWT+gzYYETPAAiQ2gUCEQbz\n        IAbVmk4DUXHTEAaSGgbTgA3YYHEFMQ3SCql+MBDRyiHGMJMvugLGoAu9aQwmkJbH+Q++IAM9IBC3QKoD\n        EQ/xkKqjspeuOhC2EKtQOhCK0JHcQKVWOhASUJThIAH2kQmyYBD0EK1i0AV+kK4DwQX/4AfTMBAdOxBd\n        MA/zkAb/gAV9igb/wAdz1wVjIAbTgK0C4QddIAZikAZm4LL/BIENHvsPQEuy5xofLioQ+xADPsCp/5Cj\n        oIoCNumWFskOMrAEvsMOzCmw/9Cq38kOA1EMCDurHQkODrur/xCxAhEOmrkQYKBdJ4oFIXumNxu0avAM\n        gTCyZvBW0+AHZmAW+2AGNAsGJPsMCjENPvsPhquuZsAhw7ACvSkQTRAD6igQ9MqMxAC1A0GPQ+qWICCd\n        Xqu1SWAL8RACtjAQkAAJsjoQm1AEisANtwpklWC2uCoLnJAQDCMQ/HAFanAFS4NT/6AGajAQP/cPXSYN\n        W3AFAvEMWqAFv3sGA3EGWjANiysQ08C7ySsNZjCy1Mu82zsQ7oAD2usMa0Ab77CVQdAO/wOxDyvApOvw\n        AxU5DD+AAjvQo/swqrcAIPDApP+ABEdwC7aABKX7D/BwBMUAD8WgBMUgntxQJfHgD/FQCRCwCeGwCBAQ\n        DvqgCRJQCfjQCRLQwRKwATS0D1dwBWSAA86rBjigBVugBWZBBsFLvThQwhKDA9M7DSb8D+5wBSusw1oA\n        DWRAEGeQwlnWDDfAvf8QDTdwYTdgBkl8YWrQDJaHA9BQJP4gBBmRqvo7EPAQmBgRDvuBDufwDQRDG9Hg\n        vBABk4MxMhmBBEggEuHwq5VJxmQQjBYIozMwAxqxBEkgEl/KCY15Dp1wOaO4F+2wtHM4EfBQpLhwyBoR\n        Dp2wAZkwex2DPMmUXMmWfMmYnMmavMmc3Mme/MmgHMqinBABAQA7\n</value>\n  </data>\n  <data name=\"pictureBox2.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"$this.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>О программе</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlMapFile/DialogFindByKey.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlMapFile\n{\n    public partial class DialogFindByKey : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tprivate DesignXmlDraw _Draw;\nprivate Label label1;\nprivate Button bOK;\nprivate Button bCancel;\nprivate ListBox lbKeyList;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DialogFindByKey));\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.bOK = new System.Windows.Forms.Button();\n\t\t\tthis.bCancel = new System.Windows.Forms.Button();\n\t\t\tthis.lbKeyList = new System.Windows.Forms.ListBox();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// bOK\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bOK, \"bOK\");\n\t\t\tthis.bOK.Name = \"bOK\";\n\t\t\tthis.bOK.UseVisualStyleBackColor = true;\n\t\t\tthis.bOK.Click += new System.EventHandler(this.bOK_Click);\n\t\t\t// \n\t\t\t// bCancel\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCancel, \"bCancel\");\n\t\t\tthis.bCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n\t\t\tthis.bCancel.Name = \"bCancel\";\n\t\t\tthis.bCancel.UseVisualStyleBackColor = true;\n\t\t\tthis.bCancel.Click += new System.EventHandler(this.bCancel_Click);\n\t\t\t// \n\t\t\t// lbKeyList\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lbKeyList, \"lbKeyList\");\n\t\t\tthis.lbKeyList.FormattingEnabled = true;\n\t\t\tthis.lbKeyList.Name = \"lbKeyList\";\n\t\t\tthis.lbKeyList.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;\n\t\t\t// \n\t\t\t// DialogFindByKey\n\t\t\t// \n\t\t\tthis.AcceptButton = this.bOK;\n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.CancelButton = this.bCancel;\n\t\t\tthis.Controls.Add(this.lbKeyList);\n\t\t\tthis.Controls.Add(this.bCancel);\n\t\t\tthis.Controls.Add(this.bOK);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n\t\t\tthis.MaximizeBox = false;\n\t\t\tthis.MinimizeBox = false;\n\t\t\tthis.Name = \"DialogFindByKey\";\n\t\t\tthis.ShowInTaskbar = false;\n\t\t\tthis.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlMapFile/DialogFindByKey.cs",
    "content": "\nusing System;\nusing System.Drawing;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing System.Reflection;\n\nnamespace Majorsilence.Reporting.RdlMapFile\n{\n    /// <summary>\n    /// Summary description for DialogFindByKey.\n    /// </summary>\n    public partial class DialogFindByKey \n    {\n\n        internal DialogFindByKey(DesignXmlDraw dxd)\n        {\n            _Draw = dxd;\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            // populate the keys\n            SortedList<string, string> keys = _Draw.GetAllKeys();\n            foreach (string key in keys.Keys)\n                lbKeyList.Items.Add(key);\n            return;\n        }\n\n        private void bOK_Click(object sender, EventArgs e)\n        {\n            List<string> select = new List<string>(lbKeyList.SelectedIndices.Count);\n            foreach (int si in lbKeyList.SelectedIndices)\n            {\n                select.Add(lbKeyList.Items[si].ToString());\n            }\n\n            _Draw.SelectByKey(select);\n\n            this.Close();\n        }\n\n        private void bCancel_Click(object sender, EventArgs e)\n        {\n            this.Close();\n        }\n    }\n\n}\n"
  },
  {
    "path": "RdlMapFile/DialogFindByKey.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Name\" xml:space=\"preserve\">\n    <value>bCancel</value>\n  </data>\n  <data name=\"&gt;&gt;lbKeyList.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"lbKeyList.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>345, 212</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"bCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Find Polygons By Key</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Select keys for the polygons you wish to select</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DialogFindByKey</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"bCancel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>12, 12</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>372, 293</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <data name=\"bCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>276, 258</value>\n  </data>\n  <data name=\"&gt;&gt;lbKeyList.Name\" xml:space=\"preserve\">\n    <value>lbKeyList</value>\n  </data>\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>182, 258</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>227, 13</value>\n  </data>\n  <data name=\"&gt;&gt;lbKeyList.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"lbKeyList.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"lbKeyList.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>15, 38</value>\n  </data>\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"&gt;&gt;lbKeyList.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlMapFile/DialogFindByKey.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>204, 13</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Выберите ключи для многоугольников</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Поиск многоугольников по ключу</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlMapFile/MapFile.Designer.cs",
    "content": "namespace Majorsilence.Reporting.RdlMapFile\n{\n    partial class MapFile\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MapFile));\n            this.DoubleBuffered = true;\n\t\t\tthis.menuMain = new System.Windows.Forms.MenuStrip();\n\t\t\tthis.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.importMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.undoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem3 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.cutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.pasteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.menuFindByKey = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.selectAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem4 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.setBackgroundImageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.reducePolygonPointsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.reToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem6 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem7 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem8 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem9 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem10 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.growSelectedByToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem11 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem12 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem13 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem14 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripMenuItem15 = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.helpHelpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.supportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.splitContainer1 = new System.Windows.Forms.SplitContainer();\n\t\t\tthis.pgXmlNode = new System.Windows.Forms.PropertyGrid();\n\t\t\tthis.toolStrip1 = new System.Windows.Forms.ToolStrip();\n\t\t\tthis.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel();\n\t\t\tthis.cbZoom = new System.Windows.Forms.ToolStripComboBox();\n\t\t\tthis.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();\n\t\t\tthis.bToolStrip = new System.Windows.Forms.ToolStripDropDownButton();\n\t\t\tthis.insertPolygonToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.insertTextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.insertLineToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.selectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.menuMain.SuspendLayout();\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n\t\t\tthis.splitContainer1.Panel2.SuspendLayout();\n\t\t\tthis.splitContainer1.SuspendLayout();\n\t\t\tthis.toolStrip1.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// menuMain\n\t\t\t// \n\t\t\tresources.ApplyResources(this.menuMain, \"menuMain\");\n\t\t\tthis.menuMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.fileToolStripMenuItem,\n            this.editToolStripMenuItem,\n            this.helpToolStripMenuItem});\n\t\t\tthis.menuMain.Name = \"menuMain\";\n\t\t\t// \n\t\t\t// fileToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.fileToolStripMenuItem, \"fileToolStripMenuItem\");\n\t\t\tthis.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.newToolStripMenuItem,\n            this.openToolStripMenuItem,\n            this.saveToolStripMenuItem,\n            this.saveAsToolStripMenuItem,\n            this.toolStripSeparator3,\n            this.importMenuItem,\n            this.toolStripMenuItem1,\n            this.exitToolStripMenuItem});\n\t\t\tthis.fileToolStripMenuItem.Name = \"fileToolStripMenuItem\";\n\t\t\t// \n\t\t\t// newToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.newToolStripMenuItem, \"newToolStripMenuItem\");\n\t\t\tthis.newToolStripMenuItem.Name = \"newToolStripMenuItem\";\n\t\t\tthis.newToolStripMenuItem.Click += new System.EventHandler(this.newToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// openToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.openToolStripMenuItem, \"openToolStripMenuItem\");\n\t\t\tthis.openToolStripMenuItem.Name = \"openToolStripMenuItem\";\n\t\t\tthis.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// saveToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.saveToolStripMenuItem, \"saveToolStripMenuItem\");\n\t\t\tthis.saveToolStripMenuItem.Name = \"saveToolStripMenuItem\";\n\t\t\tthis.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// saveAsToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.saveAsToolStripMenuItem, \"saveAsToolStripMenuItem\");\n\t\t\tthis.saveAsToolStripMenuItem.Name = \"saveAsToolStripMenuItem\";\n\t\t\tthis.saveAsToolStripMenuItem.Click += new System.EventHandler(this.saveAsToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripSeparator3, \"toolStripSeparator3\");\n\t\t\tthis.toolStripSeparator3.Name = \"toolStripSeparator3\";\n\t\t\t// \n\t\t\t// importMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.importMenuItem, \"importMenuItem\");\n\t\t\tthis.importMenuItem.Name = \"importMenuItem\";\n\t\t\tthis.importMenuItem.Click += new System.EventHandler(this.importMenuItem_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem1, \"toolStripMenuItem1\");\n\t\t\tthis.toolStripMenuItem1.Name = \"toolStripMenuItem1\";\n\t\t\t// \n\t\t\t// exitToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.exitToolStripMenuItem, \"exitToolStripMenuItem\");\n\t\t\tthis.exitToolStripMenuItem.Name = \"exitToolStripMenuItem\";\n\t\t\tthis.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// editToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.editToolStripMenuItem, \"editToolStripMenuItem\");\n\t\t\tthis.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.undoToolStripMenuItem,\n            this.toolStripMenuItem3,\n            this.cutToolStripMenuItem,\n            this.copyToolStripMenuItem,\n            this.pasteToolStripMenuItem,\n            this.deleteToolStripMenuItem,\n            this.toolStripMenuItem2,\n            this.menuFindByKey,\n            this.selectAllToolStripMenuItem,\n            this.toolStripMenuItem4,\n            this.setBackgroundImageToolStripMenuItem,\n            this.toolStripSeparator4,\n            this.reducePolygonPointsToolStripMenuItem,\n            this.reToolStripMenuItem,\n            this.growSelectedByToolStripMenuItem});\n\t\t\tthis.editToolStripMenuItem.Name = \"editToolStripMenuItem\";\n\t\t\tthis.editToolStripMenuItem.DropDownOpening += new System.EventHandler(this.editToolStripMenuItem_DropDownOpening);\n\t\t\t// \n\t\t\t// undoToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.undoToolStripMenuItem, \"undoToolStripMenuItem\");\n\t\t\tthis.undoToolStripMenuItem.Name = \"undoToolStripMenuItem\";\n\t\t\tthis.undoToolStripMenuItem.Click += new System.EventHandler(this.undoToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem3, \"toolStripMenuItem3\");\n\t\t\tthis.toolStripMenuItem3.Name = \"toolStripMenuItem3\";\n\t\t\t// \n\t\t\t// cutToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cutToolStripMenuItem, \"cutToolStripMenuItem\");\n\t\t\tthis.cutToolStripMenuItem.Name = \"cutToolStripMenuItem\";\n\t\t\tthis.cutToolStripMenuItem.Click += new System.EventHandler(this.cutToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// copyToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.copyToolStripMenuItem, \"copyToolStripMenuItem\");\n\t\t\tthis.copyToolStripMenuItem.Name = \"copyToolStripMenuItem\";\n\t\t\tthis.copyToolStripMenuItem.Click += new System.EventHandler(this.copyToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// pasteToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.pasteToolStripMenuItem, \"pasteToolStripMenuItem\");\n\t\t\tthis.pasteToolStripMenuItem.Name = \"pasteToolStripMenuItem\";\n\t\t\tthis.pasteToolStripMenuItem.Click += new System.EventHandler(this.pasteToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// deleteToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.deleteToolStripMenuItem, \"deleteToolStripMenuItem\");\n\t\t\tthis.deleteToolStripMenuItem.Name = \"deleteToolStripMenuItem\";\n\t\t\tthis.deleteToolStripMenuItem.Click += new System.EventHandler(this.deleteToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem2, \"toolStripMenuItem2\");\n\t\t\tthis.toolStripMenuItem2.Name = \"toolStripMenuItem2\";\n\t\t\t// \n\t\t\t// menuFindByKey\n\t\t\t// \n\t\t\tresources.ApplyResources(this.menuFindByKey, \"menuFindByKey\");\n\t\t\tthis.menuFindByKey.Name = \"menuFindByKey\";\n\t\t\tthis.menuFindByKey.Click += new System.EventHandler(this.menuFindByKey_Click);\n\t\t\t// \n\t\t\t// selectAllToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.selectAllToolStripMenuItem, \"selectAllToolStripMenuItem\");\n\t\t\tthis.selectAllToolStripMenuItem.Name = \"selectAllToolStripMenuItem\";\n\t\t\tthis.selectAllToolStripMenuItem.Click += new System.EventHandler(this.selectAllToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem4, \"toolStripMenuItem4\");\n\t\t\tthis.toolStripMenuItem4.Name = \"toolStripMenuItem4\";\n\t\t\t// \n\t\t\t// setBackgroundImageToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.setBackgroundImageToolStripMenuItem, \"setBackgroundImageToolStripMenuItem\");\n\t\t\tthis.setBackgroundImageToolStripMenuItem.Name = \"setBackgroundImageToolStripMenuItem\";\n\t\t\tthis.setBackgroundImageToolStripMenuItem.Click += new System.EventHandler(this.setBackgroundImageToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripSeparator4, \"toolStripSeparator4\");\n\t\t\tthis.toolStripSeparator4.Name = \"toolStripSeparator4\";\n\t\t\t// \n\t\t\t// reducePolygonPointsToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.reducePolygonPointsToolStripMenuItem, \"reducePolygonPointsToolStripMenuItem\");\n\t\t\tthis.reducePolygonPointsToolStripMenuItem.Name = \"reducePolygonPointsToolStripMenuItem\";\n\t\t\tthis.reducePolygonPointsToolStripMenuItem.Click += new System.EventHandler(this.reducePolygonPointsToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// reToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.reToolStripMenuItem, \"reToolStripMenuItem\");\n\t\t\tthis.reToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripMenuItem6,\n            this.toolStripMenuItem7,\n            this.toolStripMenuItem8,\n            this.toolStripMenuItem9,\n            this.toolStripMenuItem10});\n\t\t\tthis.reToolStripMenuItem.Name = \"reToolStripMenuItem\";\n\t\t\t// \n\t\t\t// toolStripMenuItem6\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem6, \"toolStripMenuItem6\");\n\t\t\tthis.toolStripMenuItem6.Name = \"toolStripMenuItem6\";\n\t\t\tthis.toolStripMenuItem6.Tag = \"-10\";\n\t\t\tthis.toolStripMenuItem6.Click += new System.EventHandler(this.sizePolygonPoints_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem7\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem7, \"toolStripMenuItem7\");\n\t\t\tthis.toolStripMenuItem7.Name = \"toolStripMenuItem7\";\n\t\t\tthis.toolStripMenuItem7.Tag = \"-20\";\n\t\t\tthis.toolStripMenuItem7.Click += new System.EventHandler(this.sizePolygonPoints_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem8\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem8, \"toolStripMenuItem8\");\n\t\t\tthis.toolStripMenuItem8.Name = \"toolStripMenuItem8\";\n\t\t\tthis.toolStripMenuItem8.Tag = \"-30\";\n\t\t\tthis.toolStripMenuItem8.Click += new System.EventHandler(this.sizePolygonPoints_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem9\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem9, \"toolStripMenuItem9\");\n\t\t\tthis.toolStripMenuItem9.Name = \"toolStripMenuItem9\";\n\t\t\tthis.toolStripMenuItem9.Tag = \"-40\";\n\t\t\tthis.toolStripMenuItem9.Click += new System.EventHandler(this.sizePolygonPoints_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem10\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem10, \"toolStripMenuItem10\");\n\t\t\tthis.toolStripMenuItem10.Name = \"toolStripMenuItem10\";\n\t\t\tthis.toolStripMenuItem10.Tag = \"-50\";\n\t\t\tthis.toolStripMenuItem10.Click += new System.EventHandler(this.sizePolygonPoints_Click);\n\t\t\t// \n\t\t\t// growSelectedByToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.growSelectedByToolStripMenuItem, \"growSelectedByToolStripMenuItem\");\n\t\t\tthis.growSelectedByToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripMenuItem11,\n            this.toolStripMenuItem12,\n            this.toolStripMenuItem13,\n            this.toolStripMenuItem14,\n            this.toolStripMenuItem15});\n\t\t\tthis.growSelectedByToolStripMenuItem.Name = \"growSelectedByToolStripMenuItem\";\n\t\t\t// \n\t\t\t// toolStripMenuItem11\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem11, \"toolStripMenuItem11\");\n\t\t\tthis.toolStripMenuItem11.Name = \"toolStripMenuItem11\";\n\t\t\tthis.toolStripMenuItem11.Tag = \"10\";\n\t\t\tthis.toolStripMenuItem11.Click += new System.EventHandler(this.sizePolygonPoints_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem12\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem12, \"toolStripMenuItem12\");\n\t\t\tthis.toolStripMenuItem12.Name = \"toolStripMenuItem12\";\n\t\t\tthis.toolStripMenuItem12.Tag = \"20\";\n\t\t\tthis.toolStripMenuItem12.Click += new System.EventHandler(this.sizePolygonPoints_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem13\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem13, \"toolStripMenuItem13\");\n\t\t\tthis.toolStripMenuItem13.Name = \"toolStripMenuItem13\";\n\t\t\tthis.toolStripMenuItem13.Tag = \"30\";\n\t\t\tthis.toolStripMenuItem13.Click += new System.EventHandler(this.sizePolygonPoints_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem14\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem14, \"toolStripMenuItem14\");\n\t\t\tthis.toolStripMenuItem14.Name = \"toolStripMenuItem14\";\n\t\t\tthis.toolStripMenuItem14.Tag = \"40\";\n\t\t\tthis.toolStripMenuItem14.Click += new System.EventHandler(this.sizePolygonPoints_Click);\n\t\t\t// \n\t\t\t// toolStripMenuItem15\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripMenuItem15, \"toolStripMenuItem15\");\n\t\t\tthis.toolStripMenuItem15.Name = \"toolStripMenuItem15\";\n\t\t\tthis.toolStripMenuItem15.Tag = \"50\";\n\t\t\tthis.toolStripMenuItem15.Click += new System.EventHandler(this.sizePolygonPoints_Click);\n\t\t\t// \n\t\t\t// helpToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.helpToolStripMenuItem, \"helpToolStripMenuItem\");\n\t\t\tthis.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.helpHelpToolStripMenuItem,\n            this.toolStripSeparator1,\n            this.supportToolStripMenuItem,\n            this.toolStripSeparator2,\n            this.aboutToolStripMenuItem});\n\t\t\tthis.helpToolStripMenuItem.Name = \"helpToolStripMenuItem\";\n\t\t\t// \n\t\t\t// helpHelpToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.helpHelpToolStripMenuItem, \"helpHelpToolStripMenuItem\");\n\t\t\tthis.helpHelpToolStripMenuItem.Name = \"helpHelpToolStripMenuItem\";\n\t\t\tthis.helpHelpToolStripMenuItem.Click += new System.EventHandler(this.helpHelpToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripSeparator1, \"toolStripSeparator1\");\n\t\t\tthis.toolStripSeparator1.Name = \"toolStripSeparator1\";\n\t\t\t// \n\t\t\t// supportToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.supportToolStripMenuItem, \"supportToolStripMenuItem\");\n\t\t\tthis.supportToolStripMenuItem.Name = \"supportToolStripMenuItem\";\n\t\t\tthis.supportToolStripMenuItem.Click += new System.EventHandler(this.supportToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripSeparator2, \"toolStripSeparator2\");\n\t\t\tthis.toolStripSeparator2.Name = \"toolStripSeparator2\";\n\t\t\t// \n\t\t\t// aboutToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.aboutToolStripMenuItem, \"aboutToolStripMenuItem\");\n\t\t\tthis.aboutToolStripMenuItem.Name = \"aboutToolStripMenuItem\";\n\t\t\tthis.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// splitContainer1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.splitContainer1, \"splitContainer1\");\n\t\t\tthis.splitContainer1.Name = \"splitContainer1\";\n\t\t\t// \n\t\t\t// splitContainer1.Panel1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.splitContainer1.Panel1, \"splitContainer1.Panel1\");\n\t\t\t// \n\t\t\t// splitContainer1.Panel2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.splitContainer1.Panel2, \"splitContainer1.Panel2\");\n\t\t\tthis.splitContainer1.Panel2.Controls.Add(this.pgXmlNode);\n\t\t\t// \n\t\t\t// pgXmlNode\n\t\t\t// \n\t\t\tresources.ApplyResources(this.pgXmlNode, \"pgXmlNode\");\n\t\t\tthis.pgXmlNode.Name = \"pgXmlNode\";\n\t\t\t// \n\t\t\t// toolStrip1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStrip1, \"toolStrip1\");\n\t\t\tthis.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel1,\n            this.cbZoom,\n            this.toolStripLabel2,\n            this.bToolStrip});\n\t\t\tthis.toolStrip1.Name = \"toolStrip1\";\n\t\t\t// \n\t\t\t// toolStripLabel1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripLabel1, \"toolStripLabel1\");\n\t\t\tthis.toolStripLabel1.Name = \"toolStripLabel1\";\n\t\t\t// \n\t\t\t// cbZoom\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbZoom, \"cbZoom\");\n\t\t\tthis.cbZoom.DropDownWidth = 50;\n\t\t\tthis.cbZoom.Items.AddRange(new object[] {\n            resources.GetString(\"cbZoom.Items\"),\n            resources.GetString(\"cbZoom.Items1\"),\n            resources.GetString(\"cbZoom.Items2\"),\n            resources.GetString(\"cbZoom.Items3\"),\n            resources.GetString(\"cbZoom.Items4\"),\n            resources.GetString(\"cbZoom.Items5\"),\n            resources.GetString(\"cbZoom.Items6\"),\n            resources.GetString(\"cbZoom.Items7\"),\n            resources.GetString(\"cbZoom.Items8\"),\n            resources.GetString(\"cbZoom.Items9\")});\n\t\t\tthis.cbZoom.Name = \"cbZoom\";\n\t\t\tthis.cbZoom.SelectedIndexChanged += new System.EventHandler(this.cbZoom_SelectedIndexChanged);\n\t\t\tthis.cbZoom.TextChanged += new System.EventHandler(this.cbZoom_SelectedIndexChanged);\n\t\t\t// \n\t\t\t// toolStripLabel2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripLabel2, \"toolStripLabel2\");\n\t\t\tthis.toolStripLabel2.Name = \"toolStripLabel2\";\n\t\t\t// \n\t\t\t// bToolStrip\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bToolStrip, \"bToolStrip\");\n\t\t\tthis.bToolStrip.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tthis.bToolStrip.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.insertPolygonToolStripMenuItem,\n            this.insertTextToolStripMenuItem,\n            this.insertLineToolStripMenuItem,\n            this.selectionToolStripMenuItem});\n\t\t\tthis.bToolStrip.Image = global::RdlMapFile.Properties.Resources.selection;\n\t\t\tthis.bToolStrip.Name = \"bToolStrip\";\n\t\t\t// \n\t\t\t// insertPolygonToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.insertPolygonToolStripMenuItem, \"insertPolygonToolStripMenuItem\");\n\t\t\tthis.insertPolygonToolStripMenuItem.Image = global::RdlMapFile.Properties.Resources.poly;\n\t\t\tthis.insertPolygonToolStripMenuItem.Name = \"insertPolygonToolStripMenuItem\";\n\t\t\tthis.insertPolygonToolStripMenuItem.Click += new System.EventHandler(this.insertPolygonToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// insertTextToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.insertTextToolStripMenuItem, \"insertTextToolStripMenuItem\");\n\t\t\tthis.insertTextToolStripMenuItem.Image = global::RdlMapFile.Properties.Resources.text;\n\t\t\tthis.insertTextToolStripMenuItem.Name = \"insertTextToolStripMenuItem\";\n\t\t\tthis.insertTextToolStripMenuItem.Click += new System.EventHandler(this.insertTextToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// insertLineToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.insertLineToolStripMenuItem, \"insertLineToolStripMenuItem\");\n\t\t\tthis.insertLineToolStripMenuItem.Image = global::RdlMapFile.Properties.Resources.line;\n\t\t\tthis.insertLineToolStripMenuItem.Name = \"insertLineToolStripMenuItem\";\n\t\t\tthis.insertLineToolStripMenuItem.Click += new System.EventHandler(this.insertLineToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// selectionToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.selectionToolStripMenuItem, \"selectionToolStripMenuItem\");\n\t\t\tthis.selectionToolStripMenuItem.Image = global::RdlMapFile.Properties.Resources.selection;\n\t\t\tthis.selectionToolStripMenuItem.Name = \"selectionToolStripMenuItem\";\n\t\t\tthis.selectionToolStripMenuItem.Click += new System.EventHandler(this.selectionToolStripMenuItem_Click);\n\t\t\t// \n\t\t\t// MapFile\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n\t\t\tthis.Controls.Add(this.splitContainer1);\n\t\t\tthis.Controls.Add(this.toolStrip1);\n\t\t\tthis.Controls.Add(this.menuMain);\n\t\t\tthis.MainMenuStrip = this.menuMain;\n\t\t\tthis.Name = \"MapFile\";\n\t\t\tthis.menuMain.ResumeLayout(false);\n\t\t\tthis.menuMain.PerformLayout();\n\t\t\tthis.splitContainer1.Panel2.ResumeLayout(false);\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n\t\t\tthis.splitContainer1.ResumeLayout(false);\n\t\t\tthis.toolStrip1.ResumeLayout(false);\n\t\t\tthis.toolStrip1.PerformLayout();\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.MenuStrip menuMain;\n        private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem saveAsToolStripMenuItem;\n        private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;\n        private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;\n        private System.Windows.Forms.SplitContainer splitContainer1;\n        private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem undoToolStripMenuItem;\n        private System.Windows.Forms.ToolStripSeparator toolStripMenuItem3;\n        private System.Windows.Forms.ToolStripMenuItem cutToolStripMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem pasteToolStripMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem;\n        private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;\n        private System.Windows.Forms.ToolStripMenuItem selectAllToolStripMenuItem;\n        private System.Windows.Forms.ToolStripSeparator toolStripMenuItem4;\n        private System.Windows.Forms.ToolStripMenuItem setBackgroundImageToolStripMenuItem;\n        private System.Windows.Forms.ToolStrip toolStrip1;\n        private System.Windows.Forms.ToolStripLabel toolStripLabel1;\n        private System.Windows.Forms.ToolStripComboBox cbZoom;\n        private System.Windows.Forms.PropertyGrid pgXmlNode;\n        private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem;\n        private System.Windows.Forms.ToolStripLabel toolStripLabel2;\n        private System.Windows.Forms.ToolStripDropDownButton bToolStrip;\n        private System.Windows.Forms.ToolStripMenuItem insertPolygonToolStripMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem insertTextToolStripMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem insertLineToolStripMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem selectionToolStripMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem helpHelpToolStripMenuItem;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;\n        private System.Windows.Forms.ToolStripMenuItem supportToolStripMenuItem;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;\n        private System.Windows.Forms.ToolStripMenuItem importMenuItem;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;\n        private System.Windows.Forms.ToolStripMenuItem reducePolygonPointsToolStripMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem menuFindByKey;\n        private System.Windows.Forms.ToolStripMenuItem reToolStripMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem6;\n        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem7;\n        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem8;\n        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem9;\n        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem10;\n        private System.Windows.Forms.ToolStripMenuItem growSelectedByToolStripMenuItem;\n        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem11;\n        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem12;\n        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem13;\n        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem14;\n        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem15;\n    }\n}\n\n"
  },
  {
    "path": "RdlMapFile/MapFile.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Text;\nusing System.Windows.Forms;\nusing System.Runtime.InteropServices;\nusing System.Xml;\nusing System.IO;\nusing RdlMapFile.Resources;\n\nnamespace Majorsilence.Reporting.RdlMapFile\n{\n    public partial class MapFile : Form, IMessageFilter\n    {\n        private DesignXmlDraw map;\n\n        public MapFile(string file)\n        {\n\n            InitializeComponent();\n            //map = new DesignXmlDraw();          // designer keeps deleting this code??!!\n            Application.AddMessageFilter(this);\n            // \n            // manually add controls to the splitter.  visual studio keeps deleting them\n            // \n            map = new DesignXmlDraw();         \n            this.splitContainer1.Panel1.Controls.Add(this.map);\n            // \n            // map\n            // \n            this.map.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.map.Location = new System.Drawing.Point(0, 0);\n            this.map.Name = \"map\";\n            this.map.Size = new System.Drawing.Size(620, 474);\n            this.map.TabIndex = 0;\n            this.map.Zoom = 1F;\n            map.ZoomChange += new DesignXmlDraw.DrawEventHandler(map_ZoomChange);\n            map.XmlChange += new DesignXmlDraw.DrawEventHandler(map_XmlChange);\n            map.SelectionChange += new DesignXmlDraw.DrawEventHandler(map_SelectionChange);\n            map.ToolChange += new DesignXmlDraw.DrawEventHandler(map_ToolChange);\n            this.Closing += new CancelEventHandler(MapFile_Closing);\n\n            if (file != null)\n            {\n                map.SetMapFile(file);\n                if (map.MapDoc == null)      // failed to open?\n                    map.SetNew();           //  yes, just start a new one\n            }\n            else\n                map.SetNew();\n            SetTitle(false);\n        }\n\n        void map_ToolChange(DesignXmlDraw dxd)\n        {\n            bToolStrip.Image = selectionToolStripMenuItem.Image;\n        }\n\n        void MapFile_Closing(object sender, CancelEventArgs e)\n        {\n            e.Cancel = !OkToClose();\n        }\n\n        void map_SelectionChange(DesignXmlDraw dxd)\n        {\n            XmlNode sNode = dxd.SelectedItem;\n            if (sNode == null)\n            {\n                pgXmlNode.SelectedObject = null;\n                return;\n            }\n\n            switch (sNode.Name)\n            {\n                case \"Text\":\n                    pgXmlNode.SelectedObject = new PropertyText(this.map);\n                    break;\n                case \"Polygon\":\n                    pgXmlNode.SelectedObject = new PropertyPolygon(this.map);\n                    // expand the Keys property.  Makes it easier for user to identify the polygon\n                    GridItem keys = findPropertyItem(\"Keys\", findPropertyRoot());\n                    if (keys != null)\n                        keys.Expanded = true;\n                    break;\n                case \"Lines\":\n                    pgXmlNode.SelectedObject = new PropertyLine(this.map);\n                    break;\n                default:\n                    pgXmlNode.SelectedObject = null;\n                    break;\n            }\n\n        }\n        \n        private GridItem findPropertyRoot()\n        {\n            // get the root item\n            GridItem root = pgXmlNode.SelectedGridItem;\n            if (root == null)\n                return null;\n            while (root.Parent != null)\n            {\n                root = root.Parent;\n            }\n            return root;\n        }\n        \n        private GridItem findPropertyItem(string label, GridItem root) \n        {\n            if (root == null)\n                return null;\n            if (root.Label == label)\n                return root;\n            // search the property grid's item tree for the indicated item\n            foreach (GridItem gi in root.GridItems)\n            {\n                GridItem result = findPropertyItem(label, gi);\n                if (result != null)\n                    return result;\n            }\n            return null;\n        }\n \n        void map_XmlChange(DesignXmlDraw dxd)\n        {\n            pgXmlNode.Refresh();\n            if (map.Modified)           // only need to process on the first change\n                return;\n            SetTitle(true);\n        }\n\n        void map_ZoomChange(DesignXmlDraw dxd)\n        {\n            string z = string.Format(\"{0}%\", Math.Round(dxd.Zoom * 100, 0));\n            cbZoom.Text = z;\n        }\n        /// <summary>\n        /// Handles mousewheel processing when window under mousewheel doesn't have focus\n        /// </summary>\n        /// <param name=\"m\"></param>\n        /// <returns></returns>\n        public bool PreFilterMessage(ref Message m)\n        {\n            if (m.Msg == 0x20a)\n            {\n                // WM_MOUSEWHEEL, find the control at screen position m.LParam\n                Point pos = new Point(m.LParam.ToInt32() & 0xffff, m.LParam.ToInt32() >> 16);\n                IntPtr hWnd = WindowFromPoint(pos);\n                if (hWnd != IntPtr.Zero && hWnd != m.HWnd && Control.FromHandle(hWnd) != null)\n                {\n                    SendMessage(hWnd, m.Msg, m.WParam, m.LParam);\n                    return true;\n                }\n            }\n            return false;\n        }\n\n        // P/Invoke declarations\n        [DllImport(\"user32.dll\")]\n        private static extern IntPtr WindowFromPoint(Point pt);\n        [DllImport(\"user32.dll\")]\n        private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);\n\n        private void exitToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            if (!OkToClose())\n                return;\n            Application.Exit();\n\n        }\n\n        private bool OkToClose()\n        {\n            if (!map.Modified)\n                return true;\n\n            DialogResult mb = MessageBox.Show(string.Format(Strings.MapFile_ShowB_WantSave, map.File == null ? Strings.MapFile_ShowB_Untitled : Path.GetFileName(map.File)),\n                Strings.MapFile_ShowB_RdlMapFileDesigner, MessageBoxButtons.YesNoCancel) ;\n            if (mb == DialogResult.Cancel)\n                return false;\n\n            if (mb == DialogResult.No)\n                return true;\n\n            \n            return Save();\n        }\n\n        private bool Save()\n        {\n            // need to save file first then exit\n            if (map.File == null)\n            {\n                if (!SaveAs())\n                    return false;\n            }\n            string file = map.File;\n\n            StreamWriter writer = null;\n            bool bOK = true;\n            try\n            {\n                writer = new StreamWriter(file);\n                writer.Write(map.MapSource);\n                map.Modified = false;\n                map.ClearUndo();\n                SetTitle(false);\n            }\n            catch (Exception ae)\n            {\n                bOK = false;\n                MessageBox.Show(ae.Message + \"\\r\\n\" + ae.StackTrace);\n            }\n            finally\n            {\n                writer.Close();\n            }\n            if (bOK)\n                map.Modified = false;\n            return bOK;\n                   \n        }\n/// <summary>\n/// Asks user for file name and sets the map file name to user specified one\n/// </summary>\n/// <returns></returns>\n        private bool SaveAs()\n        {\n            SaveFileDialog sfd = new SaveFileDialog();\n            sfd.DefaultExt = \"xml\";\n            sfd.Filter = Strings.MapFile_SaveAs_RDL_MapFilesFilter;\n            sfd.FilterIndex = 1;\n            sfd.CheckFileExists = false;\n            bool rc = false;\n            try\n            {\n                if (sfd.ShowDialog(this) == DialogResult.OK)\n                {\n                    map.File = sfd.FileName;\n                    rc = true;\n                }\n            }\n            finally\n            {\n                sfd.Dispose();\n            }\n            return rc;\n        }\n\n        private void SetTitle(bool bModified)\n        {\n            var title = Strings.MapFile_SetTitle_fyiReporting_MapFile_Designer + \" - \" +\n                (map.File ?? Strings.MapFile_SetTitle_untitled) +\n                (bModified ? \"*\" : \"\");\n\n            Text = title;\n        }\n        private void openToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            if (!OkToClose())\n                return;\n\n            OpenFileDialog ofd = new OpenFileDialog();\n            ofd.DefaultExt = \"xml\";\n            ofd.Filter = Strings.MapFile_openToolStripMenuItem_Click_OpenMap;\n            ofd.FilterIndex = 1;\n            ofd.CheckFileExists = true;\n            ofd.Multiselect = false;\n            if (map.File != null)\n            {\n                try\n                {\n                    ofd.InitialDirectory = Path.GetDirectoryName(map.File);\n                }\n                catch\n                {\n                }\n            }\n\n            try\n            {\n                if (ofd.ShowDialog(this) == DialogResult.OK)\n                {\n                    map.SetMapFile(ofd.FileName);\n                    SetTitle(false);\n                }\n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show(ex.Message, string.Format(\"{1} {0}\", ofd.FileName, Strings.MapFile_openToolStripMenuItem_Click_ErrorOpening));\n            }\n            finally\n            {\n                ofd.Dispose();\n            }\n\n        }\n\n        private void setBackgroundImageToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            OpenFileDialog ofd = new OpenFileDialog();\n            ofd.Filter = Strings.MapFile_setBackgroundImageToolStripMenuItem_Click_OpenPicture;\n            ofd.FilterIndex = 6;\n            ofd.CheckFileExists = true;\n            try\n            {\n                if (ofd.ShowDialog(this) == DialogResult.OK)\n                {\n                    map.SetBackgroundImage(ofd.FileName);\n                }\n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show(ex.Message, string.Format(\"{1} {0}\", ofd.FileName, Strings.MapFile_openToolStripMenuItem_Click_ErrorOpening));\n            }\n            finally\n            {\n                ofd.Dispose();\n            }\n\n        }\n\n        private void cbZoom_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            try\n            {\n                float z = int.Parse(cbZoom.Text.Replace(\"%\", \"\"), System.Globalization.NumberStyles.Integer) / 100f;\n                if (z < .1f)\n                    z = .1f;\n                else if (z > 10)\n                    z = 8;\n                this.map.Zoom = z;\n            }\n            catch { }       // happens when user types in a bad zoom value\n        }\n\n        private void deleteToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            this.map.DeleteSelected();\n        }\n\n        private void undoToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            this.map.Undo();\n        }\n\n        private void editToolStripMenuItem_DropDownOpening(object sender, EventArgs e)\n        {\n            undoToolStripMenuItem.Enabled = map.CanUndo;\n\t\t\tundoToolStripMenuItem.Text = map.CanUndo ? Strings.MapFile_editToolStripMenuItem_DropDownOpening_Undo + \" \" + map.UndoText : Strings.MapFile_editToolStripMenuItem_DropDownOpening_Undo;\n\n            deleteToolStripMenuItem.Enabled = reducePolygonPointsToolStripMenuItem.Enabled = (map.SelectedItem != null);\n            \n            selectAllToolStripMenuItem.Enabled = map.MapDoc != null;\n        }\n\n        private void saveToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            this.Save();\n        }\n\n        private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            if (SaveAs())\n                Save();\n        }\n\n        private void aboutToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            using (DialogAbout dlg = new DialogAbout())\n            { \n                dlg.ShowDialog();\n            }\n        }\n\n        private void insertPolygonToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            map.Tool = DesignXmlDraw.ToolMode.InsertPolygon;\n            bToolStrip.Image = ((ToolStripMenuItem)sender).Image;\n        }\n\n        private void insertTextToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            map.Tool = DesignXmlDraw.ToolMode.InsertText;\n            bToolStrip.Image = ((ToolStripMenuItem)sender).Image;\n        }\n\n        private void insertLineToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            map.Tool = DesignXmlDraw.ToolMode.InsertLine;\n            bToolStrip.Image = ((ToolStripMenuItem)sender).Image;\n        }\n\n        private void selectionToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            map.Tool = DesignXmlDraw.ToolMode.Selection;\n            bToolStrip.Image = ((ToolStripMenuItem)sender).Image;\n        }\n\n        private void newToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            if (!OkToClose())\n                return;\n            \n            map.SetNew();\n            pgXmlNode.SelectedObject = null;\n            SetTitle(false);\n        }\n\n        private void selectAllToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            map.SelectAll();\n        }\n\n        private void copyToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            map.Copy();\n        }\n\n        private void pasteToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            map.Paste(new Point(0, 0));\n        }\n\n        private void cutToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            map.Copy();\n            this.map.DeleteSelected();\n        }\n\n        private void helpHelpToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            try\n            {\n                System.Diagnostics.Process.Start(\"https://github.com/majorsilence/My-FyiReporting/discussions\");\n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show(ex.Message, Strings.MapFile_helpHelpToolStripMenuItem_Click_Help_URL_Invalid);\n            }\n\n        }\n\n        private void supportToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            try\n            {\n                System.Diagnostics.Process.Start(\"https://github.com/majorsilence/My-FyiReporting/discussions\");\n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show(ex.Message, Strings.MapFile_supportToolStripMenuItem_Click_Support_URL_Invalid);\n            }\n\n        }\n\n        private void importMenuItem_Click(object sender, EventArgs e)\n        {\n            OpenFileDialog ofd = new OpenFileDialog();\n            ofd.Filter = Strings.MapFile_importMenuItem_Click_OpenShape;\n            ofd.FilterIndex = 0;\n            ofd.CheckFileExists = true;\n            try\n            {\n                if (ofd.ShowDialog(this) == DialogResult.OK)\n                {\n                    map.ClearUndo();\n                    ShapeFile sf = new ShapeFile();\n                    sf.Read(ofd.FileName);\n                    StringBuilder sb = new StringBuilder(\"<MapItems>\", sf.Records.Count * 100);\n                    float xOffset = (float)-sf.FileHeader.XMin;\n                    float yOffset = (float)-sf.FileHeader.YMin;\n                    //PointF offset = this.MercatorConversion(new PointF((float)sf.FileHeader.XMin, (float)sf.FileHeader.YMin));\n                    //float xOffset = (float)-offset.X;\n                    //float yOffset = (float)-offset.Y;\n                    foreach (ShapeFileRecord sfr in sf.Records)\n                    {\n                        if (sfr.ShapeType == (int)ShapeType.Polygon)\n                        {\n                            HandlePolygon(sb, xOffset, yOffset, sfr);\n                        }\n                    }\n                    \n                    sb.Append(\"</MapItems>\");\n                    map.Paste(new Point(0, 0), sb.ToString());\n                    map.ClearUndo();\n                }\n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show(ex.Message, string.Format(\"{1} {0}\", ofd.FileName, Strings.MapFile_openToolStripMenuItem_Click_ErrorOpening));\n            }\n            finally\n            {\n                ofd.Dispose();\n            }\n\n        }\n\n        private void HandlePolygon(StringBuilder sb, float xOffset, float yOffset, ShapeFileRecord sfr)\n        {\n            // we'll use this key for all the polygons\n            StringBuilder keys = new StringBuilder();\n            keys.Append(\"<Keys>\");\n            int len = sfr.Attributes.ItemArray.GetLength(0);\n            for (int j = 0; j < len; j++)\n            {\n                string key = sfr.Attributes.ItemArray[j].ToString();\n                if (key.Length == 0)\n                    continue;\n                try { float.Parse(key); continue; }\n                catch { } // not a number \n                keys.Append(key);\n                if (j + 1 < len)\n                    keys.Append(\", \");\n            }\n            if (keys.ToString().EndsWith(\", \"))\n                keys.Remove(keys.Length - 2, 2);\n            keys.Append(\"</Keys>\");\n            string skeys = keys.ToString();\n\n            for (int i = 0; i < sfr.NumberOfParts; i++)\n            {\n                sb.Append(\"<Polygon>\");\n                sb.Append(\"<Points>\");\n                int oldx = int.MaxValue;\n                int oldy = int.MaxValue;\n                int cp = 0;\n                // Determine the starting index and the end index\n                // into the points array that defines the figure.\n                int start = sfr.Parts[i];\n                int end;\n                if (sfr.NumberOfParts > 1 && i != (sfr.NumberOfParts - 1))\n                    end = sfr.Parts[i + 1];\n                else\n                    end = sfr.NumberOfPoints;\n\n                // Add line segments to the figure.\n                for (int j = start; j < end; j++)\n                {\n                    PointF ll = sfr.Points[j];\n                    //PointF ll = MercatorConversion(sfr.Points[j]);        \n                    int x = (int)((ll.X + xOffset) * 4);\n                    int y = (int)(((-ll.Y) + yOffset) * 4);\n                    if (x == oldx && y == oldy)         // we're truncating the data so some points are redundant\n                        continue;\n                    cp++;\n                    oldx = x;\n                    oldy = y;\n\n                    sb.AppendFormat(\"{0},{1}\", x, y);\n                    if (j + 1 < sfr.Points.Count)\n                        sb.Append(\",\");\n                }\n                if (cp == 1)\n                    sb.AppendFormat(\",{0},{1}\", oldx, oldy);\n\n                sb.Append(\"</Points>\");\n                sb.Append(skeys);\n                sb.Append(\"</Polygon>\");\n\n            }\n        }\n\n        private PointF MercatorConversion(PointF ll)\n        {\n\t\t\tdouble dLat = Degrees2Radians(ll.Y);\n           \n\t\t\tif (Math.Abs(Math.Abs(dLat) - HALF_PI)  <= .0001f)\n\t\t\t{   // Not perfect but should be close;  latitude fails near poles (90 and -90 degree)\n                dLat = Degrees2Radians(ll.Y < 0 ? -87f: 87f);\n\t\t\t}\n            // see http://en.wikipedia.org/wiki/Mercator_projection for formula\n\t\t\tdouble y = Math.Log(Math.Tan(dLat)+ (1f / Math.Cos(dLat)));\n\t\t\treturn new PointF(ll.X, (float)Radians2Degrees(y)); \n        }\n\n        static double HALF_PI = Math.PI / 2;\n\n        private double Degrees2Radians(double d)\n        {\n            return d * Math.PI / 180;\n        }\n\n        private double Radians2Degrees(double r)\n        {\n            return r * 180 / Math.PI;\n        }\n\n        private void reducePolygonPointsToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            int count = map.ReducePointCount();\n\n\t\t\tMessageBox.Show(string.Format(\"{1} {0}.\", count, Strings.MapFile_reducePolygonPointsToolStripMenuItem_ReducePolygon), Strings.MapFile_reducePolygonPointsToolStripMenuItem_Click_Reduce_Polygon_Count);\n        }\n\n        private void sizePolygonPoints_Click(object sender, EventArgs e)\n        {\n            ToolStripItem tsi = (ToolStripItem)sender;\n            float zoom = (100f + Convert.ToSingle((string)(tsi.Tag))) / 100f;\n            map.SizeSelected(zoom);\n        }\n\n        private void menuFindByKey_Click(object sender, EventArgs e)\n        {\n            DialogFindByKey fbk = new DialogFindByKey(map);\n            try\n            {\n                fbk.ShowDialog(this);           // it does all the work\n            }\n            finally\n            {\n                fbk.Dispose();\n            }\n        }\n\n\n\n    }\n}"
  },
  {
    "path": "RdlMapFile/MapFile.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bToolStrip.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>White</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem15.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem15</value>\n  </data>\n  <data name=\"&gt;&gt;helpToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem10.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStripSeparator3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 6</value>\n  </data>\n  <data name=\"&gt;&gt;reducePolygonPointsToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"pgXmlNode.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"&gt;&gt;reducePolygonPointsToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>reducePolygonPointsToolStripMenuItem</value>\n  </data>\n  <data name=\"cbZoom.Items3\" xml:space=\"preserve\">\n    <value>150%</value>\n  </data>\n  <data name=\"cbZoom.Items2\" xml:space=\"preserve\">\n    <value>200%</value>\n  </data>\n  <data name=\"cbZoom.Items1\" xml:space=\"preserve\">\n    <value>400%</value>\n  </data>\n  <data name=\"cbZoom.Items7\" xml:space=\"preserve\">\n    <value>60%</value>\n  </data>\n  <data name=\"cbZoom.Items6\" xml:space=\"preserve\">\n    <value>80%</value>\n  </data>\n  <data name=\"cbZoom.Items5\" xml:space=\"preserve\">\n    <value>100%</value>\n  </data>\n  <data name=\"cbZoom.Items4\" xml:space=\"preserve\">\n    <value>125%</value>\n  </data>\n  <data name=\"&gt;&gt;deleteToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>deleteToolStripMenuItem</value>\n  </data>\n  <data name=\"cbZoom.Items9\" xml:space=\"preserve\">\n    <value>20%</value>\n  </data>\n  <data name=\"cbZoom.Items8\" xml:space=\"preserve\">\n    <value>40%</value>\n  </data>\n  <data name=\"&gt;&gt;pgXmlNode.Name\" xml:space=\"preserve\">\n    <value>pgXmlNode</value>\n  </data>\n  <data name=\"copyToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Copy</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem4.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem4</value>\n  </data>\n  <data name=\"selectionToolStripMenuItem.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>White</value>\n  </data>\n  <data name=\"&gt;&gt;fileToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStripMenuItem9.Text\" xml:space=\"preserve\">\n    <value>40%</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem6.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"menuFindByKey.Text\" xml:space=\"preserve\">\n    <value>Select By Key...</value>\n  </data>\n  <data name=\"toolStripMenuItem14.Text\" xml:space=\"preserve\">\n    <value>40%</value>\n  </data>\n  <data name=\"&gt;&gt;menuMain.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"selectAllToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"&gt;&gt;pgXmlNode.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"reToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"&gt;&gt;supportToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"openToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+O</value>\n  </data>\n  <data name=\"cbZoom.ToolTipText\" xml:space=\"preserve\">\n    <value>Zoom</value>\n  </data>\n  <data name=\"toolStripMenuItem4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>199, 6</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"editToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+Z</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem12.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;saveAsToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;insertLineToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>insertLineToolStripMenuItem</value>\n  </data>\n  <data name=\"toolStrip1.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Fill</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>RDL Map File</value>\n  </data>\n  <data name=\"&gt;&gt;reToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>reToolStripMenuItem</value>\n  </data>\n  <data name=\"toolStripLabel1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>39, 25</value>\n  </data>\n  <data name=\"undoToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Undo</value>\n  </data>\n  <data name=\"insertTextToolStripMenuItem.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>White</value>\n  </data>\n  <data name=\"insertTextToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Insert Text</value>\n  </data>\n  <data name=\"cbZoom.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 28</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem10.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem10</value>\n  </data>\n  <data name=\"openToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>155, 22</value>\n  </data>\n  <data name=\"toolStripSeparator2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>113, 6</value>\n  </data>\n  <data name=\"splitContainer1.Anchor\" type=\"System.Windows.Forms.AnchorStyles, System.Windows.Forms\">\n    <value>Top, Bottom, Left, Right</value>\n  </data>\n  <data name=\"setBackgroundImageToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Set Background Image...</value>\n  </data>\n  <data name=\"$this.AutoScaleDimensions\" type=\"System.Drawing.SizeF, System.Drawing\">\n    <value>6, 13</value>\n  </data>\n  <data name=\"$this.Icon\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        AAABAAIAICAQAAAABADoAgAAJgAAABAQEAAAAAQAKAEAAA4DAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC\n        AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/\n        AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAACIAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAgAAAAACI\n        AAAAAAAAAAAACIgAAAAIgAAAAAAAAACIAAiIiIiIiIAAAAAAAACIiIiIiIiIiIiAAAAAAACIiIiIiIiI\n        iIiIAAAAAACIiIiIiIiIiIiIiAAAAAAAiIiIiIiIiIiIiIgAAAAACIiIiIiIiIiIiIiIAAAAAAiIiIiI\n        iIiIiIiIiAAAAAAIiIiIiIiIiIiIiIgAAAAACIiIiIiIiIiIiIiIAAAAAAiIiIiIiIiIiIiIiAAAAAAI\n        iIiIiIiIiIiIiIgAAAAACIiIiIiIiIiIiIiIgAAAAAiIiIiIiIgAAAiIiIAAAAAIiIiIiIAAAAAAAIiI\n        AAAAAIiIAAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////\n        ///////////////////////n////wf//H8P//j+D//wfB/+EAAf+AAAP+AAAD+AAAA/gAAAf4AAAH8AA\n        AB/AAAAfwAAAH8AAAB/AAAAfwAAAD8AAAA/AAAAHwAD4B8AH/wfgf/+H////////////////////////\n        //8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA\n        AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AMzMzMzMzMzMyZmZmZmZ\n        mZzJmZmZmZmZnMmZmZn/mZ+cyZmZn//5/5zJmf//////nMmf//////mcyZ//////+ZzJn//////5nMmf\n        //////mcyZ////mf/5zJn/+ZmZmfnMmZmZmZmZmcyZmZmZmZmZzJmZmZmZmZnMzMzMzMzMzMAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\n</value>\n  </data>\n  <data name=\"&gt;&gt;insertPolygonToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"helpToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Help</value>\n  </data>\n  <data name=\"&gt;&gt;menuMain.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"newToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>155, 22</value>\n  </data>\n  <data name=\"supportToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Support</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1</value>\n  </data>\n  <data name=\"toolStripMenuItem11.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 22</value>\n  </data>\n  <data name=\"splitContainer1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>845, 474</value>\n  </data>\n  <data name=\"toolStripMenuItem1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 6</value>\n  </data>\n  <data name=\"undoToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+Z</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Name\" xml:space=\"preserve\">\n    <value>splitContainer1</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.Name\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel1</value>\n  </data>\n  <data name=\"selectAllToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Select All</value>\n  </data>\n  <data name=\"&gt;&gt;copyToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>copyToolStripMenuItem</value>\n  </data>\n  <data name=\"toolStrip1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 24</value>\n  </data>\n  <data name=\"&gt;&gt;newToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cutToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+X</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"toolStrip1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"growSelectedByToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"editToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>39, 20</value>\n  </data>\n  <data name=\"&gt;&gt;toolStrip1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"editToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Edit</value>\n  </data>\n  <data name=\"&gt;&gt;helpHelpToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>helpHelpToolStripMenuItem</value>\n  </data>\n  <data name=\"toolStripMenuItem14.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 22</value>\n  </data>\n  <data name=\"&gt;&gt;exitToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>exitToolStripMenuItem</value>\n  </data>\n  <data name=\"helpHelpToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Help</value>\n  </data>\n  <data name=\"toolStripMenuItem15.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem2.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem2</value>\n  </data>\n  <data name=\"&gt;&gt;undoToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;menuMain.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"reToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Shrink Selected By</value>\n  </data>\n  <data name=\"toolStripMenuItem6.Text\" xml:space=\"preserve\">\n    <value>10%</value>\n  </data>\n  <data name=\"&gt;&gt;growSelectedByToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;aboutToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>aboutToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;bToolStrip.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"saveToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>155, 22</value>\n  </data>\n  <data name=\"insertPolygonToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>150, 22</value>\n  </data>\n  <data name=\"&gt;&gt;pasteToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>pasteToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem1.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem1</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cutToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"pasteToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"cutToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Cut</value>\n  </data>\n  <data name=\"growSelectedByToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Grow Selected By</value>\n  </data>\n  <data name=\"saveToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Save</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>MapFile</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>845, 526</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator2.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator2</value>\n  </data>\n  <data name=\"&gt;&gt;menuFindByKey.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"importMenuItem.Text\" xml:space=\"preserve\">\n    <value>Import...</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"exitToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>E&amp;xit</value>\n  </data>\n  <data name=\"&gt;&gt;newToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>newToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;editToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem13.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem13</value>\n  </data>\n  <data name=\"&gt;&gt;fileToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>fileToolStripMenuItem</value>\n  </data>\n  <data name=\"toolStripMenuItem11.Text\" xml:space=\"preserve\">\n    <value>10%</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;selectionToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>selectionToolStripMenuItem</value>\n  </data>\n  <data name=\"toolStripMenuItem13.Text\" xml:space=\"preserve\">\n    <value>30%</value>\n  </data>\n  <data name=\"menuMain.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"insertTextToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>150, 22</value>\n  </data>\n  <data name=\"&gt;&gt;undoToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>undoToolStripMenuItem</value>\n  </data>\n  <data name=\"toolStripMenuItem12.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator4.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator4</value>\n  </data>\n  <data name=\"&gt;&gt;helpToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>helpToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;reToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbZoom.Items\" xml:space=\"preserve\">\n    <value>800%</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator3.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator3</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem7.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem6.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem6</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"splitContainer1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 52</value>\n  </data>\n  <data name=\"toolStripMenuItem15.Text\" xml:space=\"preserve\">\n    <value>50%</value>\n  </data>\n  <data name=\"toolStripMenuItem7.Text\" xml:space=\"preserve\">\n    <value>20%</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem11.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripLabel1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStrip1.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;editToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>editToolStripMenuItem</value>\n  </data>\n  <data name=\"insertLineToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>150, 22</value>\n  </data>\n  <data name=\"setBackgroundImageToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"insertLineToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Insert Line</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem3.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem3</value>\n  </data>\n  <data name=\"toolStripMenuItem10.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 22</value>\n  </data>\n  <data name=\"deleteToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"saveAsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>155, 22</value>\n  </data>\n  <data name=\"splitContainer1.SplitterDistance\" type=\"System.Int32, mscorlib\">\n    <value>548</value>\n  </data>\n  <data name=\"fileToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>File</value>\n  </data>\n  <data name=\"&gt;&gt;selectAllToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;pgXmlNode.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.PropertyGrid, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"insertLineToolStripMenuItem.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>White</value>\n  </data>\n  <data name=\"toolStripMenuItem8.Text\" xml:space=\"preserve\">\n    <value>30%</value>\n  </data>\n  <data name=\"helpToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>44, 20</value>\n  </data>\n  <data name=\"&gt;&gt;setBackgroundImageToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>setBackgroundImageToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;insertTextToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>insertTextToolStripMenuItem</value>\n  </data>\n  <data name=\"toolStripLabel2.Text\" xml:space=\"preserve\">\n    <value>Tool</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripLabel1.Name\" xml:space=\"preserve\">\n    <value>toolStripLabel1</value>\n  </data>\n  <data name=\"pgXmlNode.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>293, 474</value>\n  </data>\n  <data name=\"&gt;&gt;saveToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStrip1.Name\" xml:space=\"preserve\">\n    <value>toolStrip1</value>\n  </data>\n  <data name=\"&gt;&gt;cbZoom.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"pasteToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Paste</value>\n  </data>\n  <data name=\"&gt;&gt;toolStrip1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"aboutToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>116, 22</value>\n  </data>\n  <data name=\"menuFindByKey.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.Name\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel2</value>\n  </data>\n  <data name=\"toolStripMenuItem6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStripLabel1.Text\" xml:space=\"preserve\">\n    <value>Zoom</value>\n  </data>\n  <data name=\"reducePolygonPointsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Reduce Polygon Points</value>\n  </data>\n  <data name=\"toolStrip1.Text\" xml:space=\"preserve\">\n    <value>toolStrip1</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem14.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"importMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>155, 22</value>\n  </data>\n  <data name=\"toolStrip1.MaximumSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>0, 28</value>\n  </data>\n  <data name=\"toolStripSeparator1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>113, 6</value>\n  </data>\n  <data name=\"&gt;&gt;saveAsToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>saveAsToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;deleteToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem7.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem7</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem11.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem11</value>\n  </data>\n  <data name=\"bToolStrip.Text\" xml:space=\"preserve\">\n    <value>toolStripDropDownButton1</value>\n  </data>\n  <data name=\"menuMain.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>845, 24</value>\n  </data>\n  <data name=\"menuMain.Text\" xml:space=\"preserve\">\n    <value>menuStrip1</value>\n  </data>\n  <data name=\"&gt;&gt;openToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>openToolStripMenuItem</value>\n  </data>\n  <data name=\"toolStripMenuItem10.Text\" xml:space=\"preserve\">\n    <value>50%</value>\n  </data>\n  <data name=\"&gt;&gt;cbZoom.Name\" xml:space=\"preserve\">\n    <value>cbZoom</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem15.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStripMenuItem8.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 22</value>\n  </data>\n  <data name=\"&gt;&gt;importMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStripMenuItem3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>199, 6</value>\n  </data>\n  <data name=\"&gt;&gt;pasteToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;pgXmlNode.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1.Panel2</value>\n  </data>\n  <data name=\"&gt;&gt;cutToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>cutToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripLabel2.Name\" xml:space=\"preserve\">\n    <value>toolStripLabel2</value>\n  </data>\n  <data name=\"insertPolygonToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Insert Polygon</value>\n  </data>\n  <data name=\"&gt;&gt;selectAllToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>selectAllToolStripMenuItem</value>\n  </data>\n  <data name=\"openToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Open...</value>\n  </data>\n  <data name=\"newToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>New</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"toolStripSeparator4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>199, 6</value>\n  </data>\n  <data name=\"&gt;&gt;copyToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripLabel2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cutToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"deleteToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"&gt;&gt;insertPolygonToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>insertPolygonToolStripMenuItem</value>\n  </data>\n  <data name=\"toolStripMenuItem2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>199, 6</value>\n  </data>\n  <data name=\"toolStripLabel2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>31, 25</value>\n  </data>\n  <data name=\"&gt;&gt;supportToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>supportToolStripMenuItem</value>\n  </data>\n  <data name=\"toolStripMenuItem7.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 22</value>\n  </data>\n  <data name=\"bToolStrip.ToolTipText\" xml:space=\"preserve\">\n    <value>Select Tool</value>\n  </data>\n  <data name=\"helpHelpToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>116, 22</value>\n  </data>\n  <data name=\"toolStripMenuItem9.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 22</value>\n  </data>\n  <data name=\"reducePolygonPointsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"saveAsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Save As...</value>\n  </data>\n  <data name=\"pgXmlNode.Dock\" type=\"System.Windows.Forms.DockStyle, System.Windows.Forms\">\n    <value>Fill</value>\n  </data>\n  <data name=\"cbZoom.Text\" xml:space=\"preserve\">\n    <value>100%</value>\n  </data>\n  <data name=\"&gt;&gt;openToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"supportToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>116, 22</value>\n  </data>\n  <data name=\"&gt;&gt;exitToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem8.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;insertTextToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem9.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;saveToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>saveToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"selectionToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>150, 22</value>\n  </data>\n  <data name=\"&gt;&gt;insertLineToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"undoToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"&gt;&gt;selectionToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"exitToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>155, 22</value>\n  </data>\n  <data name=\"splitContainer1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;menuFindByKey.Name\" xml:space=\"preserve\">\n    <value>menuFindByKey</value>\n  </data>\n  <data name=\"&gt;&gt;importMenuItem.Name\" xml:space=\"preserve\">\n    <value>importMenuItem</value>\n  </data>\n  <data name=\"insertPolygonToolStripMenuItem.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>White</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem14.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem14</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator1.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator1</value>\n  </data>\n  <data name=\"toolStripMenuItem12.Text\" xml:space=\"preserve\">\n    <value>20%</value>\n  </data>\n  <data name=\"menuMain.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"copyToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+C</value>\n  </data>\n  <data name=\"pgXmlNode.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"toolStrip1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>845, 28</value>\n  </data>\n  <data name=\"&gt;&gt;splitContainer1.Panel2.Parent\" xml:space=\"preserve\">\n    <value>splitContainer1</value>\n  </data>\n  <data name=\"selectionToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Selection</value>\n  </data>\n  <data name=\"&gt;&gt;helpHelpToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bToolStrip.Name\" xml:space=\"preserve\">\n    <value>bToolStrip</value>\n  </data>\n  <data name=\"&gt;&gt;menuMain.Name\" xml:space=\"preserve\">\n    <value>menuMain</value>\n  </data>\n  <data name=\"&gt;&gt;growSelectedByToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>growSelectedByToolStripMenuItem</value>\n  </data>\n  <data name=\"bToolStrip.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>29, 25</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem9.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem9</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem8.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem8</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem12.Name\" xml:space=\"preserve\">\n    <value>toolStripMenuItem12</value>\n  </data>\n  <data name=\"saveToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+S</value>\n  </data>\n  <data name=\"toolStripMenuItem13.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>96, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripMenuItem13.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"fileToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>37, 20</value>\n  </data>\n  <data name=\"&gt;&gt;aboutToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;setBackgroundImageToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"pasteToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+V</value>\n  </data>\n  <data name=\"copyToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"aboutToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>About...</value>\n  </data>\n  <metadata name=\"toolStrip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>127, 17</value>\n  </metadata>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <metadata name=\"menuMain.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlMapFile/MapFile.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"fileToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 20</value>\n  </data>\n  <data name=\"fileToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Файл</value>\n  </data>\n  <data name=\"editToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>108, 20</value>\n  </data>\n  <data name=\"editToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Редактирование</value>\n  </data>\n  <data name=\"helpToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>68, 20</value>\n  </data>\n  <data name=\"helpToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Помощь</value>\n  </data>\n  <data name=\"newToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>173, 22</value>\n  </data>\n  <data name=\"newToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Создать</value>\n  </data>\n  <data name=\"openToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>173, 22</value>\n  </data>\n  <data name=\"openToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Открыть...</value>\n  </data>\n  <data name=\"saveToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>173, 22</value>\n  </data>\n  <data name=\"saveToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Сохранить</value>\n  </data>\n  <data name=\"saveAsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>173, 22</value>\n  </data>\n  <data name=\"saveAsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Сохранить как...</value>\n  </data>\n  <data name=\"toolStripSeparator3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>170, 6</value>\n  </data>\n  <data name=\"importMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>173, 22</value>\n  </data>\n  <data name=\"importMenuItem.Text\" xml:space=\"preserve\">\n    <value>Импорт...</value>\n  </data>\n  <data name=\"toolStripMenuItem1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>170, 6</value>\n  </data>\n  <data name=\"exitToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>173, 22</value>\n  </data>\n  <data name=\"exitToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Выйти</value>\n  </data>\n  <data name=\"undoToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>342, 22</value>\n  </data>\n  <data name=\"undoToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"toolStripMenuItem3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>339, 6</value>\n  </data>\n  <data name=\"cutToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>342, 22</value>\n  </data>\n  <data name=\"cutToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Вырезать</value>\n  </data>\n  <data name=\"copyToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>342, 22</value>\n  </data>\n  <data name=\"copyToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Скопировать</value>\n  </data>\n  <data name=\"pasteToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>342, 22</value>\n  </data>\n  <data name=\"pasteToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Вставить</value>\n  </data>\n  <data name=\"deleteToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>342, 22</value>\n  </data>\n  <data name=\"deleteToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Удалить</value>\n  </data>\n  <data name=\"toolStripMenuItem2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>339, 6</value>\n  </data>\n  <data name=\"menuFindByKey.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>342, 22</value>\n  </data>\n  <data name=\"menuFindByKey.Text\" xml:space=\"preserve\">\n    <value>Выбрать по ключу...</value>\n  </data>\n  <data name=\"selectAllToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>342, 22</value>\n  </data>\n  <data name=\"selectAllToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Выбрать все</value>\n  </data>\n  <data name=\"toolStripMenuItem4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>339, 6</value>\n  </data>\n  <data name=\"setBackgroundImageToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>342, 22</value>\n  </data>\n  <data name=\"setBackgroundImageToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Выбрать фоновое изображение...</value>\n  </data>\n  <data name=\"toolStripSeparator4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>339, 6</value>\n  </data>\n  <data name=\"reducePolygonPointsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>342, 22</value>\n  </data>\n  <data name=\"reducePolygonPointsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Уменьшить количество сторон многоугольника</value>\n  </data>\n  <data name=\"reToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>342, 22</value>\n  </data>\n  <data name=\"reToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Уменьшить выбранные на</value>\n  </data>\n  <data name=\"growSelectedByToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>342, 22</value>\n  </data>\n  <data name=\"growSelectedByToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Увеличить выбранные на</value>\n  </data>\n  <data name=\"helpHelpToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>158, 22</value>\n  </data>\n  <data name=\"helpHelpToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Помощь</value>\n  </data>\n  <data name=\"toolStripSeparator1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>155, 6</value>\n  </data>\n  <data name=\"supportToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>158, 22</value>\n  </data>\n  <data name=\"supportToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Поддержка</value>\n  </data>\n  <data name=\"toolStripSeparator2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>155, 6</value>\n  </data>\n  <data name=\"aboutToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>158, 22</value>\n  </data>\n  <data name=\"aboutToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>О программе...</value>\n  </data>\n  <data name=\"toolStripLabel1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>59, 25</value>\n  </data>\n  <data name=\"toolStripLabel1.Text\" xml:space=\"preserve\">\n    <value>Масштаб</value>\n  </data>\n  <data name=\"cbZoom.ToolTipText\" xml:space=\"preserve\">\n    <value>Масштаб</value>\n  </data>\n  <data name=\"toolStripLabel2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>74, 25</value>\n  </data>\n  <data name=\"toolStripLabel2.Text\" xml:space=\"preserve\">\n    <value>Инструмент</value>\n  </data>\n  <data name=\"bToolStrip.ToolTipText\" xml:space=\"preserve\">\n    <value>Выберите инструмент</value>\n  </data>\n  <data name=\"insertPolygonToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>162, 22</value>\n  </data>\n  <data name=\"insertPolygonToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Многоугольник</value>\n  </data>\n  <data name=\"insertTextToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>162, 22</value>\n  </data>\n  <data name=\"insertTextToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Текст</value>\n  </data>\n  <data name=\"insertLineToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>162, 22</value>\n  </data>\n  <data name=\"insertLineToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Линия</value>\n  </data>\n  <data name=\"selectionToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>162, 22</value>\n  </data>\n  <data name=\"selectionToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Выбор</value>\n  </data>\n  <data name=\"$this.Icon\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        AAABAAIAICAQAAAABADoAgAAJgAAABAQEAAAAAQAKAEAAA4DAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC\n        AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/\n        AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAACIAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAgAAAAACI\n        AAAAAAAAAAAACIgAAAAIgAAAAAAAAACIAAiIiIiIiIAAAAAAAACIiIiIiIiIiIiAAAAAAACIiIiIiIiI\n        iIiIAAAAAACIiIiIiIiIiIiIiAAAAAAAiIiIiIiIiIiIiIgAAAAACIiIiIiIiIiIiIiIAAAAAAiIiIiI\n        iIiIiIiIiAAAAAAIiIiIiIiIiIiIiIgAAAAACIiIiIiIiIiIiIiIAAAAAAiIiIiIiIiIiIiIiAAAAAAI\n        iIiIiIiIiIiIiIgAAAAACIiIiIiIiIiIiIiIgAAAAAiIiIiIiIgAAAiIiIAAAAAIiIiIiIAAAAAAAIiI\n        AAAAAIiIAAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////\n        ///////////////////////n////wf//H8P//j+D//wfB/+EAAf+AAAP+AAAD+AAAA/gAAAf4AAAH8AA\n        AB/AAAAfwAAAH8AAAB/AAAAfwAAAD8AAAA/AAAAHwAD4B8AH/wfgf/+H////////////////////////\n        //8oAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA\n        AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AMzMzMzMzMzMyZmZmZmZ\n        mZzJmZmZmZmZnMmZmZn/mZ+cyZmZn//5/5zJmf//////nMmf//////mcyZ//////+ZzJn//////5nMmf\n        //////mcyZ////mf/5zJn/+ZmZmfnMmZmZmZmZmcyZmZmZmZmZzJmZmZmZmZnMzMzMzMzMzMAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\n</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"$this.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Редактор карт</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlMapFile/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace RdlMapFile.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"RdlMapFile.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap line {\n            get {\n                object obj = ResourceManager.GetObject(\"line\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap poly {\n            get {\n                object obj = ResourceManager.GetObject(\"poly\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap selection {\n            get {\n                object obj = ResourceManager.GetObject(\"selection\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap text {\n            get {\n                object obj = ResourceManager.GetObject(\"text\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlMapFile/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"poly\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\poly.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"text\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\text.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"line\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\line.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"selection\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\selection.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlMapFile/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace RdlMapFile.Properties {\n    \n    \n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"17.2.0.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\n        \n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n        \n        public static Settings Default {\n            get {\n                return defaultInstance;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlMapFile/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>\n"
  },
  {
    "path": "RdlMapFile/RdlMapFile.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Windows.Forms;\n\nnamespace Majorsilence.Reporting.RdlMapFile\n{\n    static class RdlMapFile\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            string[] args = Environment.GetCommandLineArgs();   // we assume the arg line contains a filename if any\n\n            string file = null;\n            bool bnext = false;\n            for (int i = 0; i < args.Length && file == null; i++)\n            {\n                if (bnext)\n                    file = args[i];\n                else if (args[i] == \"/f\")\n                    bnext = true;\n                else if (args[i].StartsWith(\"/f\"))\n                    file = args[i].Substring(2);\n            }\n\n            Application.EnableVisualStyles();\n            Application.SetCompatibleTextRenderingDefault(false);\n            Application.Run(new MapFile(file));\n        }\n    }\n}"
  },
  {
    "path": "RdlMapFile/RdlMapFile.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\t<PropertyGroup>\n\t\t<OutputType>WinExe</OutputType>\n\t\t<ApplicationIcon>App.ico</ApplicationIcon>\n\t\t<UseWindowsForms>true</UseWindowsForms>\n\t\t<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>\n\t\t<EnableDefaultEmbeddedResourceItems>false</EnableDefaultEmbeddedResourceItems>\n\t\t<Configurations>Debug;Release;Debug-DrawingCompat</Configurations>\n\t\t<TargetFrameworks>net48;net8.0-windows;net10.0-windows</TargetFrameworks>\n\t\t<WarningsAsErrors>4014</WarningsAsErrors>\n        <GenerateResourceUsePreserializedResources>true</GenerateResourceUsePreserializedResources>\n    </PropertyGroup>\n\t<ItemGroup>\n\t\t<Compile Update=\"DesignXmlDraw.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<Content Include=\"App.ico\" />\n\t\t<Content Include=\"line.gif\" />\n\t\t<Content Include=\"poly.gif\" />\n\t\t<Content Include=\"selection.gif\" />\n\t\t<Content Include=\"text.gif\" />\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<EmbeddedResource Include=\"DialogAbout.ru-RU.resx\">\n\t\t\t<DependentUpon>DialogAbout.cs</DependentUpon>\n\t\t</EmbeddedResource>\n\t\t<EmbeddedResource Include=\"DialogFindByKey.resx\">\n\t\t\t<DependentUpon>DialogFindByKey.cs</DependentUpon>\n\t\t\t<SubType>Designer</SubType>\n\t\t</EmbeddedResource>\n\t\t<EmbeddedResource Include=\"DesignXmlDraw.resx\">\n\t\t\t<DependentUpon>DesignXmlDraw.cs</DependentUpon>\n\t\t\t<SubType>Designer</SubType>\n\t\t</EmbeddedResource>\n\t\t<EmbeddedResource Include=\"DialogAbout.resx\">\n\t\t\t<DependentUpon>DialogAbout.cs</DependentUpon>\n\t\t\t<SubType>Designer</SubType>\n\t\t</EmbeddedResource>\n\t\t<EmbeddedResource Include=\"DialogFindByKey.ru-RU.resx\">\n\t\t\t<DependentUpon>DialogFindByKey.cs</DependentUpon>\n\t\t</EmbeddedResource>\n\t\t<EmbeddedResource Include=\"RdlProperties\\Categories.resx\">\n\t\t\t<Generator>ResXFileCodeGenerator</Generator>\n\t\t\t<LastGenOutput>Categories.Designer.cs</LastGenOutput>\n\t\t</EmbeddedResource>\n\t\t<EmbeddedResource Include=\"RdlProperties\\Categories.ru-RU.resx\" />\n\t\t<EmbeddedResource Include=\"RdlProperties\\Descriptions.resx\">\n\t\t\t<Generator>ResXFileCodeGenerator</Generator>\n\t\t\t<LastGenOutput>Descriptions.Designer.cs</LastGenOutput>\n\t\t</EmbeddedResource>\n\t\t<EmbeddedResource Include=\"RdlProperties\\Descriptions.ru-RU.resx\" />\n\t\t<EmbeddedResource Include=\"RdlProperties\\DisplayNames.resx\">\n\t\t\t<Generator>ResXFileCodeGenerator</Generator>\n\t\t\t<LastGenOutput>DisplayNames.Designer.cs</LastGenOutput>\n\t\t</EmbeddedResource>\n\t\t<EmbeddedResource Include=\"RdlProperties\\DisplayNames.ru-RU.resx\" />\n\t\t<EmbeddedResource Include=\"Resources\\Strings.resx\">\n\t\t\t<Generator>ResXFileCodeGenerator</Generator>\n\t\t\t<LastGenOutput>Strings.Designer.cs</LastGenOutput>\n\t\t</EmbeddedResource>\n\t\t<EmbeddedResource Include=\"Resources\\Strings.ru-RU.resx\" />\n\t\t<EmbeddedResource Include=\"MapFile.resx\">\n\t\t\t<SubType>Designer</SubType>\n\t\t\t<DependentUpon>MapFile.cs</DependentUpon>\n\t\t</EmbeddedResource>\n\t\t<EmbeddedResource Include=\"MapFile.ru-RU.resx\">\n\t\t\t<DependentUpon>MapFile.cs</DependentUpon>\n\t\t</EmbeddedResource>\n\t\t<EmbeddedResource Include=\"Properties\\Resources.resx\">\n\t\t\t<Generator>ResXFileCodeGenerator</Generator>\n\t\t\t<LastGenOutput>Resources.Designer.cs</LastGenOutput>\n\t\t\t<SubType>Designer</SubType>\n\t\t</EmbeddedResource>\n\t\t<None Include=\"Properties\\Settings.settings\">\n\t\t\t<Generator>SettingsSingleFileGenerator</Generator>\n\t\t\t<LastGenOutput>Settings.Designer.cs</LastGenOutput>\n\t\t</None>\n\t</ItemGroup>\n\t<ItemGroup Condition=\"'$(TargetFramework)' == 'net10.0-windows' Or '$(TargetFramework)' == 'net8.0-windows' Or '$(TargetFramework)' == 'netstandard2.0' \">\n\t\t<!-- Add your item references here -->\n\t\t<PackageReference Include=\"System.Data.Odbc\" />\n\t\t<PackageReference Include=\"System.Data.OleDb\" />\n\t</ItemGroup>\n    <ItemGroup Condition=\"'$(TargetFramework)' == 'net48'\">\n\t  <PackageReference Include=\"System.Resources.Extensions\" />\n\t</ItemGroup>\n</Project>\n"
  },
  {
    "path": "RdlMapFile/RdlMapFile.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Express 2012 for Web\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlMapFile\", \"RdlMapFile.csproj\", \"{342676DA-226D-437F-AAC2-2FEA68EBC466}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{342676DA-226D-437F-AAC2-2FEA68EBC466}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{342676DA-226D-437F-AAC2-2FEA68EBC466}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{342676DA-226D-437F-AAC2-2FEA68EBC466}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{342676DA-226D-437F-AAC2-2FEA68EBC466}.Debug|x64.Build.0 = Debug|x64\n\t\t{342676DA-226D-437F-AAC2-2FEA68EBC466}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{342676DA-226D-437F-AAC2-2FEA68EBC466}.Debug|x86.Build.0 = Debug|x86\n\t\t{342676DA-226D-437F-AAC2-2FEA68EBC466}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{342676DA-226D-437F-AAC2-2FEA68EBC466}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{342676DA-226D-437F-AAC2-2FEA68EBC466}.Release|x64.ActiveCfg = Release|x64\n\t\t{342676DA-226D-437F-AAC2-2FEA68EBC466}.Release|x64.Build.0 = Release|x64\n\t\t{342676DA-226D-437F-AAC2-2FEA68EBC466}.Release|x86.ActiveCfg = Release|x86\n\t\t{342676DA-226D-437F-AAC2-2FEA68EBC466}.Release|x86.Build.0 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "RdlMapFile/RdlProperties/Categories.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace RdlMapFile.RdlProperties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Categories {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Categories() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"RdlMapFile.RdlProperties.Categories\", typeof(Categories).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlMapFile/RdlProperties/Categories.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "RdlMapFile/RdlProperties/Categories.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Line\" xml:space=\"preserve\">\n    <value>Линия</value>\n  </data>\n  <data name=\"Polygon\" xml:space=\"preserve\">\n    <value>Многоугольник</value>\n  </data>\n  <data name=\"Text\" xml:space=\"preserve\">\n    <value>Текст</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlMapFile/RdlProperties/Descriptions.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace RdlMapFile.RdlProperties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Descriptions {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Descriptions() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"RdlMapFile.RdlProperties.Descriptions\", typeof(Descriptions).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to One end of the line.\n        /// </summary>\n        internal static string Line_P1 {\n            get {\n                return ResourceManager.GetString(\"Line_P1\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Other end of the line.\n        /// </summary>\n        internal static string Line_P2 {\n            get {\n                return ResourceManager.GetString(\"Line_P2\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The fill color for the polygon.\n        /// </summary>\n        internal static string Polygon_FillColor {\n            get {\n                return ResourceManager.GetString(\"Polygon_FillColor\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The keys associated with this polygon.\n        /// </summary>\n        internal static string Polygon_Keys {\n            get {\n                return ResourceManager.GetString(\"Polygon_Keys\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The Points of the polygon.\n        /// </summary>\n        internal static string Polygon_Points {\n            get {\n                return ResourceManager.GetString(\"Polygon_Points\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The Color of the text.\n        /// </summary>\n        internal static string Text_Color {\n            get {\n                return ResourceManager.GetString(\"Text_Color\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The font of the text.  Only the family, size, bold, italic, underline, and strikethrough options are honored..\n        /// </summary>\n        internal static string Text_Font {\n            get {\n                return ResourceManager.GetString(\"Text_Font\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The Location of the text.\n        /// </summary>\n        internal static string Text_Location {\n            get {\n                return ResourceManager.GetString(\"Text_Location\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The value of the text.\n        /// </summary>\n        internal static string Text_Value {\n            get {\n                return ResourceManager.GetString(\"Text_Value\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlMapFile/RdlProperties/Descriptions.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Line_P1\" xml:space=\"preserve\">\n    <value>One end of the line</value>\n  </data>\n  <data name=\"Line_P2\" xml:space=\"preserve\">\n    <value>Other end of the line</value>\n  </data>\n  <data name=\"Polygon_FillColor\" xml:space=\"preserve\">\n    <value>The fill color for the polygon</value>\n  </data>\n  <data name=\"Polygon_Keys\" xml:space=\"preserve\">\n    <value>The keys associated with this polygon</value>\n  </data>\n  <data name=\"Polygon_Points\" xml:space=\"preserve\">\n    <value>The Points of the polygon</value>\n  </data>\n  <data name=\"Text_Color\" xml:space=\"preserve\">\n    <value>The Color of the text</value>\n  </data>\n  <data name=\"Text_Font\" xml:space=\"preserve\">\n    <value>The font of the text.  Only the family, size, bold, italic, underline, and strikethrough options are honored.</value>\n  </data>\n  <data name=\"Text_Location\" xml:space=\"preserve\">\n    <value>The Location of the text</value>\n  </data>\n  <data name=\"Text_Value\" xml:space=\"preserve\">\n    <value>The value of the text</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlMapFile/RdlProperties/Descriptions.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Line_P1\" xml:space=\"preserve\">\n    <value>Первый конец линии.</value>\n  </data>\n  <data name=\"Line_P2\" xml:space=\"preserve\">\n    <value>Второй конец линии.</value>\n  </data>\n  <data name=\"Polygon_FillColor\" xml:space=\"preserve\">\n    <value>Цвет заливки для многоугольника</value>\n  </data>\n  <data name=\"Polygon_Keys\" xml:space=\"preserve\">\n    <value>Ключи ассоциированные с многоугольником</value>\n  </data>\n  <data name=\"Polygon_Points\" xml:space=\"preserve\">\n    <value>Вершины многоугольника</value>\n  </data>\n  <data name=\"Text_Color\" xml:space=\"preserve\">\n    <value>Цвет текстового поля</value>\n  </data>\n  <data name=\"Text_Font\" xml:space=\"preserve\">\n    <value>Шрифт текста. Только семейство, размер, жирный, курсив, подчеркивание и перечеркивание.</value>\n  </data>\n  <data name=\"Text_Location\" xml:space=\"preserve\">\n    <value>Положение текстового поля</value>\n  </data>\n  <data name=\"Text_Value\" xml:space=\"preserve\">\n    <value>Значение текстового поля</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlMapFile/RdlProperties/DisplayNames.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace RdlMapFile.RdlProperties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class DisplayNames {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal DisplayNames() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"RdlMapFile.RdlProperties.DisplayNames\", typeof(DisplayNames).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to P1.\n        /// </summary>\n        internal static string Line_P1 {\n            get {\n                return ResourceManager.GetString(\"Line_P1\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to P2.\n        /// </summary>\n        internal static string Line_P2 {\n            get {\n                return ResourceManager.GetString(\"Line_P2\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to FillColor.\n        /// </summary>\n        internal static string Polygon_FillColor {\n            get {\n                return ResourceManager.GetString(\"Polygon_FillColor\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Keys.\n        /// </summary>\n        internal static string Polygon_Keys {\n            get {\n                return ResourceManager.GetString(\"Polygon_Keys\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Points.\n        /// </summary>\n        internal static string Polygon_Points {\n            get {\n                return ResourceManager.GetString(\"Polygon_Points\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Color.\n        /// </summary>\n        internal static string Text_Color {\n            get {\n                return ResourceManager.GetString(\"Text_Color\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Font.\n        /// </summary>\n        internal static string Text_Font {\n            get {\n                return ResourceManager.GetString(\"Text_Font\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Location.\n        /// </summary>\n        internal static string Text_Location {\n            get {\n                return ResourceManager.GetString(\"Text_Location\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Value.\n        /// </summary>\n        internal static string Text_Value {\n            get {\n                return ResourceManager.GetString(\"Text_Value\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlMapFile/RdlProperties/DisplayNames.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Line_P1\" xml:space=\"preserve\">\n    <value>P1</value>\n  </data>\n  <data name=\"Line_P2\" xml:space=\"preserve\">\n    <value>P2</value>\n  </data>\n  <data name=\"Polygon_FillColor\" xml:space=\"preserve\">\n    <value>FillColor</value>\n  </data>\n  <data name=\"Polygon_Keys\" xml:space=\"preserve\">\n    <value>Keys</value>\n  </data>\n  <data name=\"Polygon_Points\" xml:space=\"preserve\">\n    <value>Points</value>\n  </data>\n  <data name=\"Text_Color\" xml:space=\"preserve\">\n    <value>Color</value>\n  </data>\n  <data name=\"Text_Font\" xml:space=\"preserve\">\n    <value>Font</value>\n  </data>\n  <data name=\"Text_Location\" xml:space=\"preserve\">\n    <value>Location</value>\n  </data>\n  <data name=\"Text_Value\" xml:space=\"preserve\">\n    <value>Value</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlMapFile/RdlProperties/DisplayNames.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Line_P1\" xml:space=\"preserve\">\n    <value>Первый конец</value>\n  </data>\n  <data name=\"Line_P2\" xml:space=\"preserve\">\n    <value>Второй конец</value>\n  </data>\n  <data name=\"Polygon_FillColor\" xml:space=\"preserve\">\n    <value>Цвет заливки</value>\n  </data>\n  <data name=\"Polygon_Keys\" xml:space=\"preserve\">\n    <value>Ключи</value>\n  </data>\n  <data name=\"Polygon_Points\" xml:space=\"preserve\">\n    <value>Вершины</value>\n  </data>\n  <data name=\"Text_Color\" xml:space=\"preserve\">\n    <value>Цвет</value>\n  </data>\n  <data name=\"Text_Font\" xml:space=\"preserve\">\n    <value>Шрифт</value>\n  </data>\n  <data name=\"Text_Location\" xml:space=\"preserve\">\n    <value>Положение</value>\n  </data>\n  <data name=\"Text_Value\" xml:space=\"preserve\">\n    <value>Значение</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlMapFile/RdlProperties/LocalizedCategoryAttribute.cs",
    "content": "﻿using System.ComponentModel;\nusing System.Threading;\nusing RdlMapFile.RdlProperties;\n\nnamespace Majorsilence.Reporting.RdlMapFile\n{\n\tinternal class LocalizedCategoryAttribute : CategoryAttribute\n\t{\n\t\tinternal LocalizedCategoryAttribute(string category)\n\t\t\t: base(category)\n\t\t{\n\t\t}\n\n\t\tprotected override string GetLocalizedString(string value)\n\t\t{\n\t\t\treturn Categories.ResourceManager.GetString(value, Thread.CurrentThread.CurrentUICulture) ?? base.GetLocalizedString(value);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlMapFile/RdlProperties/LocalizedDescriptionAttribute.cs",
    "content": "﻿using System.ComponentModel;\nusing RdlMapFile.RdlProperties;\n\nnamespace Majorsilence.Reporting.RdlMapFile\n{\n\tpublic class LocalizedDescriptionAttribute : DescriptionAttribute\n\t{\n\t\tpublic LocalizedDescriptionAttribute(string description)\n\t\t\t: base(description)\n\t\t{\n\t\t}\n\n\t\tpublic override string Description\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\treturn Descriptions.ResourceManager.GetString(DescriptionValue, DisplayNames.Culture) ?? base.Description;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlMapFile/RdlProperties/LocalizedDisplayNameAttribute.cs",
    "content": "﻿using System.ComponentModel;\nusing RdlMapFile.RdlProperties;\n\nnamespace Majorsilence.Reporting.RdlMapFile\n{\n\tinternal class LocalizedDisplayNameAttribute : DisplayNameAttribute\n\t{\n\t\tinternal LocalizedDisplayNameAttribute(string displayName)\n\t\t\t: base(displayName)\n\t\t{\n\t\t}\n\n\t\tpublic override string DisplayName\n\t\t{\n\t\t\tget { return DisplayNames.ResourceManager.GetString(DisplayNameValue, DisplayNames.Culture) ?? base.DisplayName; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlMapFile/RdlProperties/PropertyBase.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Drawing;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Xml;\nusing System.Text.RegularExpressions;\nusing System.Drawing.Design;\nusing System.Globalization;\nusing System.Windows.Forms;\nusing System.Windows.Forms.Design;\nusing RdlMapFile.Resources;\n\nnamespace Majorsilence.Reporting.RdlMapFile\n{\n    /// <summary>\n    /// PropertyReportItem - The ReportItem Properties\n    /// </summary>\n    [DefaultProperty(\"Text\")]\n    internal class PropertyBase\n    {\n   \t\tprivate DesignXmlDraw _Draw;\n\n        internal PropertyBase(DesignXmlDraw d)\n        {\n            _Draw = d;\n        }\n\n        internal DesignXmlDraw Draw\n        {\n            get { return _Draw; }\n        }\n\n        internal string GetTextValue(string l)\n        {\n            XmlNode v = Draw.SelectedItem;\n            return Draw.GetElementValue(v, l, \"\");\n        }\n\n        internal void SetTextValue(string l, string v)\n        {\n            Draw.StartUndoGroup(l + \" \" + Strings.PropertyBase_Undo_change);\n            XmlNode xn = Draw.SelectedItem;\n            foreach (XmlNode n in Draw.SelectedList)\n            {\n                if (xn.Name == n.Name)\n                    Draw.SetElement(n, l, v);\n            }\n            Draw.EndUndoGroup();\n\n            Draw.SignalXmlChanged();\n            Draw.Invalidate();\n        }\n        internal void SetTextValue(string l, float f)\n        {\n            string fs = string.Format(NumberFormatInfo.InvariantInfo, \"{0}\", f);\n            SetTextValue(l, fs);\n        }\n\n    }\n}\n"
  },
  {
    "path": "RdlMapFile/RdlProperties/PropertyLine.cs",
    "content": "using System.ComponentModel;            // need this for the properties metadata\n\nusing System.Drawing;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlMapFile\n{\n    /// <summary>\n    /// PropertyReportItem - The ReportItem Properties\n    /// </summary>\n    [DefaultProperty(\"Line\")]\n    internal class PropertyLine : PropertyBase\n    {\n\n        internal PropertyLine(DesignXmlDraw d):base(d)\n        {\n        }\n\n        [LocalizedCategory(\"Line\")]\n\t\t[LocalizedDisplayName(\"Line_P1\")]\n\t\t[LocalizedDescription(\"Line_P1\")]\n        public Point P1\n        {\n            get \n            {\n                XmlNode v = Draw.SelectedItem;\n                Point[] pts = Draw.GetLineCoord(v, true);\n                return pts[0];\n            }\n            set \n            {\n                XmlNode v = Draw.SelectedItem;\n                Point[] pts = Draw.GetLineCoord(v, true);\n                string l = string.Format(\"{0},{1},{2}, {3}\", value.X, value.Y, pts[1].X, pts[1].Y);\n                SetTextValue(\"Points\", l); \n            }\n        }\n\n\t\t[LocalizedCategory(\"Line\")]\n\t\t[LocalizedDisplayName(\"Line_P2\")]\n\t\t[LocalizedDescription(\"Line_P2\")]\n        public Point P2\n        {\n            get\n            {\n                XmlNode v = Draw.SelectedItem;\n                Point[] pts = Draw.GetLineCoord(v, true);\n                return pts[1];\n            }\n            set\n            {\n                XmlNode v = Draw.SelectedItem;\n                Point[] pts = Draw.GetLineCoord(v, true);\n                string l = string.Format(\"{0},{1},{2}, {3}\", pts[1].X, pts[1].Y, value.X, value.Y);\n                SetTextValue(\"Points\", l);\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "RdlMapFile/RdlProperties/PropertyPolygon.cs",
    "content": "\nusing System;\nusing System.ComponentModel;            // need this for the properties metadata\nusing System.Drawing;\nusing System.Text;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlMapFile\n{\n    /// <summary>\n    /// PropertyReportItem - The ReportItem Properties\n    /// </summary>\n    [DefaultProperty(\"Polygon\")]\n    internal class PropertyPolygon : PropertyBase\n    {\n\n        internal PropertyPolygon(DesignXmlDraw d):base(d)\n        {\n        }\n\n        [LocalizedCategory(\"Polygon\")]\n\t\t[LocalizedDisplayName(\"Polygon_FillColor\")]\n\t\t[LocalizedDescription(\"Polygon_FillColor\")]\n        public Color FillColor\n        {\n            get\n            {\n                string sc = GetTextValue(\"FillColor\");\n                if (sc == null)\n                    return Color.Empty;\n                Color c = Color.Empty;\n\t\t\t    try \n\t\t\t    {\n\t\t\t\t    c = ColorTranslator.FromHtml(sc);\n\t\t\t    }\n\t\t\t    catch \n\t\t\t    {       // if bad color just ignore and handle as empty color\n\t\t\t    }\n    \t\t\treturn c;\n            }\n  \n            set\n            {\n                string sc = value.Name;\n                SetTextValue(\"FillColor\", sc);\n            }\n        }\n\n\t\t[LocalizedCategory(\"Polygon\")]\n\t\t[LocalizedDisplayName(\"Polygon_Keys\")]\n\t\t[LocalizedDescription(\"Polygon_Keys\")]\n        public string[] Keys\n        {\n            get \n            {\n                string k = GetTextValue(\"Keys\");\n                string[] keys = k.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);\n                return keys;\n            }\n            set\n            {\n                StringBuilder sb = new StringBuilder();\n                for (int i = 0; i < value.Length; i++)\n                {\n                    if (i > 0)\n                        sb.Append(',');\n                    sb.Append(value[i]);\n                }\n                SetTextValue(\"Keys\", sb.ToString()); \n            }\n        }\n\n\t\t[LocalizedCategory(\"Polygon\")]\n\t\t[LocalizedDisplayName(\"Polygon_Points\")]\n\t\t[LocalizedDescription(\"Polygon_Points\")]\n        public Point[] Points\n        {\n            get \n            {\n                XmlNode v = Draw.SelectedItem;\n                return Draw.GetPolygon(v, true);\n            }\n            set \n            {\n                StringBuilder sb = new StringBuilder();\n                for (int i = 0; i < value.Length; i++)\n                {\n                    if (i > 0)\n                        sb.Append(',');\n                    sb.AppendFormat(\"{0},{1}\", value[i].X, value[i].Y);\n                }\n                SetTextValue(\"Points\", sb.ToString()); \n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "RdlMapFile/RdlProperties/PropertyText.cs",
    "content": "using RdlMapFile.Resources;\nusing System.ComponentModel;            // need this for the properties metadata\n\nusing System.Drawing;\nusing System.Globalization;\nusing System.Xml;\n\nnamespace Majorsilence.Reporting.RdlMapFile\n{\n    /// <summary>\n    /// PropertyReportItem - The ReportItem Properties\n    /// </summary>\n    [DefaultProperty(\"Text\")]\n    internal class PropertyText : PropertyBase\n    {\n\n        internal PropertyText(DesignXmlDraw d):base(d)\n        {\n        }\n\n        [LocalizedCategory(\"Text\")]\n\t\t[LocalizedDisplayName(\"Text_Value\")]\n\t\t[LocalizedDescription(\"Text_Value\")]\n        public string Value\n        {\n            get {return GetTextValue(\"Value\"); }\n            set{SetTextValue(\"Value\", value); }\n        }\n\n        [RefreshProperties(RefreshProperties.Repaint)]\n\t\t[LocalizedCategory(\"Text\")]\n\t\t[LocalizedDisplayName(\"Text_Location\")]\n\t\t[LocalizedDescription(\"Text_Location\")]\n        public Point Location\n        {\n            get \n            {\n                XmlNode v = Draw.SelectedItem;\n                return Draw.GetTextPoint(v, true);\n            }\n            set \n            {\n                string l = string.Format(\"{0},{1}\", value.X, value.Y);\n                SetTextValue(\"Location\", l); \n            }\n        }\n\n\t\t[LocalizedCategory(\"Text\")]\n\t\t[LocalizedDisplayName(\"Text_Color\")]\n\t\t[LocalizedDescription(\"Text_Color\")]\n        public Color Color\n        {\n            get\n            {\n                XmlNode cn = Draw.SelectedItem;\n                return Draw.GetTextColor(cn);\n            }\n\n            set\n            {\n                string sc = value.Name;\n                SetTextValue(\"Color\", sc);\n            }\n        }\n\n\t\t[LocalizedCategory(\"Text\")]\n\t\t[LocalizedDisplayName(\"Text_Font\")]\n\t\t[LocalizedDescription(\"Text_Font\")]\n        public Font Font\n        {\n            get\n            {\n                XmlNode v = Draw.SelectedItem;\n                return Draw.GetTextFont(v);\n            }\n            set\n            {\n                string family = value.FontFamily.GetName(0);\n                string fs = string.Format(NumberFormatInfo.InvariantInfo, \"{0}\", value.SizeInPoints);\n\n                Draw.StartUndoGroup(Strings.PropertyText_Undo_FontChange);\n                XmlNode xn = Draw.SelectedItem;\n                foreach (XmlNode n in Draw.SelectedList)\n                {\n                    if (xn.Name != n.Name)\n                        continue;\n                    \n                    Draw.SetElement(n, \"FontFamily\", family);\n                    Draw.SetElement(n, \"FontSize\", fs);\n                    Draw.SetElement(n, \"FontWeight\", value.Bold? \"Bold\": \"Normal\");\n                    Draw.SetElement(n, \"FontStyle\", value.Italic? \"Italic\": \"Normal\");\n                    if (value.Underline)\n                        Draw.SetElement(n, \"TextDecoration\", \"Underline\");\n                    else if (value.Strikeout)\n                        Draw.SetElement(n, \"TextDecoration\", \"LineThrough\");\n                    else\n                        Draw.SetElement(n, \"TextDecoration\", \"None\");\n                }\n                Draw.EndUndoGroup();\n\n                Draw.SignalXmlChanged();\n                Draw.Invalidate();\n\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlMapFile/Resources/Strings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace RdlMapFile.Resources {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Strings {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Strings() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"RdlMapFile.Resources.Strings\", typeof(Strings).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The MapData XML file doesn&apos;t contain the &apos;MapData&apos; element.\n        /// </summary>\n        internal static string DesignXmlDraw_Error_XMLNotMapData {\n            get {\n                return ResourceManager.GetString(\"DesignXmlDraw_Error_XMLNotMapData\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error Opening File.\n        /// </summary>\n        internal static string DesignXmlDraw_SetMapFile_ErrorOpeningFile {\n            get {\n                return ResourceManager.GetString(\"DesignXmlDraw_SetMapFile_ErrorOpeningFile\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unable to open file.\n        /// </summary>\n        internal static string DesignXmlDraw_SetMapFile_Unable_to_open_file {\n            get {\n                return ResourceManager.GetString(\"DesignXmlDraw_SetMapFile_Unable_to_open_file\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Delete.\n        /// </summary>\n        internal static string DesignXmlDraw_Undo_Delete {\n            get {\n                return ResourceManager.GetString(\"DesignXmlDraw_Undo_Delete\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Insert Line Point.\n        /// </summary>\n        internal static string DesignXmlDraw_Undo_InsertLinePoint {\n            get {\n                return ResourceManager.GetString(\"DesignXmlDraw_Undo_InsertLinePoint\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Insert Polygon Point.\n        /// </summary>\n        internal static string DesignXmlDraw_Undo_InsertPolygonPoint {\n            get {\n                return ResourceManager.GetString(\"DesignXmlDraw_Undo_InsertPolygonPoint\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Insert Text.\n        /// </summary>\n        internal static string DesignXmlDraw_Undo_InsertText {\n            get {\n                return ResourceManager.GetString(\"DesignXmlDraw_Undo_InsertText\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Move.\n        /// </summary>\n        internal static string DesignXmlDraw_Undo_Move {\n            get {\n                return ResourceManager.GetString(\"DesignXmlDraw_Undo_Move\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Paste.\n        /// </summary>\n        internal static string DesignXmlDraw_Undo_Paste {\n            get {\n                return ResourceManager.GetString(\"DesignXmlDraw_Undo_Paste\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Reduce Point Count.\n        /// </summary>\n        internal static string DesignXmlDraw_Undo_ReducePointCount {\n            get {\n                return ResourceManager.GetString(\"DesignXmlDraw_Undo_ReducePointCount\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Resize.\n        /// </summary>\n        internal static string DesignXmlDraw_Undo_Resize {\n            get {\n                return ResourceManager.GetString(\"DesignXmlDraw_Undo_Resize\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Map File Designer creates XML files that can be used in map Charts within the RDL designer.\n        ///\n        ///Copyright (C) 2004-2008  fyiReporting Software, LLC\n        ///\t\n        ///Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);\n        ///you may not use this file except in compliance with the License.\n        ///You may obtain a copy of the License at\n        ///\n        ///http://www.apache.org/licenses/LICENSE-2.0\n        ///\n        ///Unless required by applicable law or agreed to in writing, software\n        ///distributed under the License is distributed on an &quot;AS IS&quot; BASIS,\n        ///WITHOUT WARRANTIE [rest of string was truncated]&quot;;.\n        /// </summary>\n        internal static string DialogAbout_About {\n            get {\n                return ResourceManager.GetString(\"DialogAbout_About\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Version {0}.\n        /// </summary>\n        internal static string DialogAbout_Version {\n            get {\n                return ResourceManager.GetString(\"DialogAbout_Version\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Undo.\n        /// </summary>\n        internal static string MapFile_editToolStripMenuItem_DropDownOpening_Undo {\n            get {\n                return ResourceManager.GetString(\"MapFile_editToolStripMenuItem_DropDownOpening_Undo\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Help URL Invalid.\n        /// </summary>\n        internal static string MapFile_helpHelpToolStripMenuItem_Click_Help_URL_Invalid {\n            get {\n                return ResourceManager.GetString(\"MapFile_helpHelpToolStripMenuItem_Click_Help_URL_Invalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Shape Files (*.shp)|*.shp|All files (*.*)|*.*.\n        /// </summary>\n        internal static string MapFile_importMenuItem_Click_OpenShape {\n            get {\n                return ResourceManager.GetString(\"MapFile_importMenuItem_Click_OpenShape\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error opening.\n        /// </summary>\n        internal static string MapFile_openToolStripMenuItem_Click_ErrorOpening {\n            get {\n                return ResourceManager.GetString(\"MapFile_openToolStripMenuItem_Click_ErrorOpening\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Map files (*.xml)|*.xml|All files (*.*)|*.*.\n        /// </summary>\n        internal static string MapFile_openToolStripMenuItem_Click_OpenMap {\n            get {\n                return ResourceManager.GetString(\"MapFile_openToolStripMenuItem_Click_OpenMap\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Reduce Polygon Count.\n        /// </summary>\n        internal static string MapFile_reducePolygonPointsToolStripMenuItem_Click_Reduce_Polygon_Count {\n            get {\n                return ResourceManager.GetString(\"MapFile_reducePolygonPointsToolStripMenuItem_Click_Reduce_Polygon_Count\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Polygon point count reduced by.\n        /// </summary>\n        internal static string MapFile_reducePolygonPointsToolStripMenuItem_ReducePolygon {\n            get {\n                return ResourceManager.GetString(\"MapFile_reducePolygonPointsToolStripMenuItem_ReducePolygon\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to RDL Map files (*.xml)|*.xml|All files (*.*)|*.*.\n        /// </summary>\n        internal static string MapFile_SaveAs_RDL_MapFilesFilter {\n            get {\n                return ResourceManager.GetString(\"MapFile_SaveAs_RDL_MapFilesFilter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Bitmap Files (*.bmp)|*.bmp|JPEG (*.jpg;*.jpeg;*.jpe;*.jfif)|*.jpg;*.jpeg;*.jpe;*.jfif|GIF (*.gif)|*.gif|TIFF (*.tif;*.tiff)|*.tif;*.tiff|PNG (*.png)|*.png|All Picture Files|*.bmp;*.jpg;*.jpeg;*.jpe;*.jfif;*.gif;*.tif;*.tiff;*.png|All files (*.*)|*.*.\n        /// </summary>\n        internal static string MapFile_setBackgroundImageToolStripMenuItem_Click_OpenPicture {\n            get {\n                return ResourceManager.GetString(\"MapFile_setBackgroundImageToolStripMenuItem_Click_OpenPicture\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to fyiReporting MapFile Designer.\n        /// </summary>\n        internal static string MapFile_SetTitle_fyiReporting_MapFile_Designer {\n            get {\n                return ResourceManager.GetString(\"MapFile_SetTitle_fyiReporting_MapFile_Designer\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to untitled.\n        /// </summary>\n        internal static string MapFile_SetTitle_untitled {\n            get {\n                return ResourceManager.GetString(\"MapFile_SetTitle_untitled\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to RdlMapFile designer.\n        /// </summary>\n        internal static string MapFile_ShowB_RdlMapFileDesigner {\n            get {\n                return ResourceManager.GetString(\"MapFile_ShowB_RdlMapFileDesigner\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to untitled.\n        /// </summary>\n        internal static string MapFile_ShowB_Untitled {\n            get {\n                return ResourceManager.GetString(\"MapFile_ShowB_Untitled\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Do you want to save changes you made to &apos;{0}&apos;?.\n        /// </summary>\n        internal static string MapFile_ShowB_WantSave {\n            get {\n                return ResourceManager.GetString(\"MapFile_ShowB_WantSave\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Support URL Invalid.\n        /// </summary>\n        internal static string MapFile_supportToolStripMenuItem_Click_Support_URL_Invalid {\n            get {\n                return ResourceManager.GetString(\"MapFile_supportToolStripMenuItem_Click_Support_URL_Invalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to change.\n        /// </summary>\n        internal static string NodeChangedUndo_Undo_change {\n            get {\n                return ResourceManager.GetString(\"NodeChangedUndo_Undo_change\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to insert.\n        /// </summary>\n        internal static string NodeInsertedUndo_Undo_insert {\n            get {\n                return ResourceManager.GetString(\"NodeInsertedUndo_Undo_insert\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to remove.\n        /// </summary>\n        internal static string NodeRemovedUndo_Undo_remove {\n            get {\n                return ResourceManager.GetString(\"NodeRemovedUndo_Undo_remove\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to change.\n        /// </summary>\n        internal static string PropertyBase_Undo_change {\n            get {\n                return ResourceManager.GetString(\"PropertyBase_Undo_change\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Font change.\n        /// </summary>\n        internal static string PropertyText_Undo_FontChange {\n            get {\n                return ResourceManager.GetString(\"PropertyText_Undo_FontChange\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid FileCode encountered. Expecting {0}..\n        /// </summary>\n        internal static string ShapeFile_ErrorA_InvalidFileCode {\n            get {\n                return ResourceManager.GetString(\"ShapeFile_ErrorA_InvalidFileCode\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to ShapeType {0} is not supported..\n        /// </summary>\n        internal static string ShapeFile_ErrorA_ShapeTypeNotSupported {\n            get {\n                return ResourceManager.GetString(\"ShapeFile_ErrorA_ShapeTypeNotSupported\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Internal logic error: EndGroup doesn&apos;t match StartGroup.\n        /// </summary>\n        internal static string Undo_Error_EndGroupNotMatchStartGroup {\n            get {\n                return ResourceManager.GetString(\"Undo_Error_EndGroupNotMatchStartGroup\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unknown Action.\n        /// </summary>\n        internal static string Undo_Error_UnknownAction {\n            get {\n                return ResourceManager.GetString(\"Undo_Error_UnknownAction\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlMapFile/Resources/Strings.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n\t<!-- \n\t\tMicrosoft ResX Schema\n\n\t\tVersion 1.3\n\n\t\tThe primary goals of this format is to allow a simple XML format \n\t\tthat is mostly human readable. The generation and parsing of the \n\t\tvarious data types are done through the TypeConverter classes \n\t\tassociated with the data types.\n\n\t\tExample:\n\n\t\t... ado.net/XML headers & schema ...\n\t\t<resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n\t\t<resheader name=\"version\">1.3</resheader>\n\t\t<resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n\t\t<resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n\t\t<data name=\"Name1\">this is my long string</data>\n\t\t<data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n\t\t<data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n\t\t\t[base64 mime encoded serialized .NET Framework object]\n\t\t</data>\n\t\t<data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n\t\t\t[base64 mime encoded string representing a byte array form of the .NET Framework object]\n\t\t</data>\n\n\t\tThere are any number of \"resheader\" rows that contain simple \n\t\tname/value pairs.\n\n\t\tEach data row contains a name, and value. The row also contains a \n\t\ttype or mimetype. Type corresponds to a .NET class that support \n\t\ttext/value conversion through the TypeConverter architecture. \n\t\tClasses that don't support this are serialized and stored with the \n\t\tmimetype set.\n\n\t\tThe mimetype is used for serialized objects, and tells the \n\t\tResXResourceReader how to depersist the object. This is currently not \n\t\textensible. For a given mimetype the value must be set accordingly:\n\n\t\tNote - application/x-microsoft.net.object.binary.base64 is the format \n\t\tthat the ResXResourceWriter will generate, however the reader can \n\t\tread any of the formats listed below.\n\n\t\tmimetype: application/x-microsoft.net.object.binary.base64\n\t\tvalue   : The object must be serialized with \n\t\t\t: System.Serialization.Formatters.Binary.BinaryFormatter\n\t\t\t: and then encoded with base64 encoding.\n\n\t\tmimetype: application/x-microsoft.net.object.soap.base64\n\t\tvalue   : The object must be serialized with \n\t\t\t: System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n\t\t\t: and then encoded with base64 encoding.\n\n\t\tmimetype: application/x-microsoft.net.object.bytearray.base64\n\t\tvalue   : The object must be serialized into a byte array \n\t\t\t: using a System.ComponentModel.TypeConverter\n\t\t\t: and then encoded with base64 encoding.\n\t-->\n\t\n\t<xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n\t\t<xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n\t\t\t<xsd:complexType>\n\t\t\t\t<xsd:choice maxOccurs=\"unbounded\">\n\t\t\t\t\t<xsd:element name=\"data\">\n\t\t\t\t\t\t<xsd:complexType>\n\t\t\t\t\t\t\t<xsd:sequence>\n\t\t\t\t\t\t\t\t<xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t\t<xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n\t\t\t\t\t\t\t</xsd:sequence>\n\t\t\t\t\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t<xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n\t\t\t\t\t\t\t<xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n\t\t\t\t\t\t</xsd:complexType>\n\t\t\t\t\t</xsd:element>\n\t\t\t\t\t<xsd:element name=\"resheader\">\n\t\t\t\t\t\t<xsd:complexType>\n\t\t\t\t\t\t\t<xsd:sequence>\n\t\t\t\t\t\t\t\t<xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n\t\t\t\t\t\t\t</xsd:sequence>\n\t\t\t\t\t\t\t<xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n\t\t\t\t\t\t</xsd:complexType>\n\t\t\t\t\t</xsd:element>\n\t\t\t\t</xsd:choice>\n\t\t\t</xsd:complexType>\n\t\t</xsd:element>\n\t</xsd:schema>\n\t<resheader name=\"resmimetype\">\n\t\t<value>text/microsoft-resx</value>\n\t</resheader>\n\t<resheader name=\"version\">\n\t\t<value>1.3</value>\n\t</resheader>\n\t<resheader name=\"reader\">\n\t\t<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n\t</resheader>\n\t<resheader name=\"writer\">\n\t\t<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n\t</resheader>\n\t<data name=\"DesignXmlDraw_SetMapFile_ErrorOpeningFile\" xml:space=\"preserve\">\n    <value>Error Opening File</value>\n  </data>\n\t<data name=\"DesignXmlDraw_SetMapFile_Unable_to_open_file\" xml:space=\"preserve\">\n    <value>Unable to open file</value>\n  </data>\n\t<data name=\"MapFile_openToolStripMenuItem_Click_ErrorOpening\" xml:space=\"preserve\">\n    <value>Error opening</value>\n  </data>\n\t<data name=\"MapFile_helpHelpToolStripMenuItem_Click_Help_URL_Invalid\" xml:space=\"preserve\">\n    <value>Help URL Invalid</value>\n  </data>\n\t<data name=\"MapFile_supportToolStripMenuItem_Click_Support_URL_Invalid\" xml:space=\"preserve\">\n    <value>Support URL Invalid</value>\n  </data>\n\t<data name=\"MapFile_reducePolygonPointsToolStripMenuItem_Click_Reduce_Polygon_Count\" xml:space=\"preserve\">\n    <value>Reduce Polygon Count</value>\n  </data>\n\t<data name=\"MapFile_reducePolygonPointsToolStripMenuItem_ReducePolygon\" xml:space=\"preserve\">\n    <value>Polygon point count reduced by</value>\n  </data>\n\t<data name=\"MapFile_ShowB_RdlMapFileDesigner\" xml:space=\"preserve\">\n    <value>RdlMapFile designer</value>\n  </data>\n\t<data name=\"MapFile_ShowB_Untitled\" xml:space=\"preserve\">\n    <value>untitled</value>\n  </data>\n\t<data name=\"MapFile_ShowB_WantSave\" xml:space=\"preserve\">\n    <value>Do you want to save changes you made to '{0}'?</value>\n  </data>\n\t<data name=\"DialogAbout_About\" xml:space=\"preserve\">\n    <value>Map File Designer creates XML files that can be used in map Charts within the RDL designer.\n\nCopyright (C) 2004-2008  fyiReporting Software, LLC\n\t\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nFor additional information, email info@fyireporting.com or visit\nthe website www.fyiReporting.com.</value>\n  </data>\n\t<data name=\"DialogAbout_Version\" xml:space=\"preserve\">\n    <value>Version {0}</value>\n  </data>\n\t<data name=\"MapFile_SetTitle_untitled\" xml:space=\"preserve\">\n    <value>untitled</value>\n  </data>\n\t<data name=\"MapFile_SetTitle_fyiReporting_MapFile_Designer\" xml:space=\"preserve\">\n    <value>fyiReporting MapFile Designer</value>\n  </data>\n\t<data name=\"MapFile_editToolStripMenuItem_DropDownOpening_Undo\" xml:space=\"preserve\">\n    <value>Undo</value>\n  </data>\n\t<data name=\"NodeChangedUndo_Undo_change\" xml:space=\"preserve\">\n    <value>change</value>\n  </data>\n\t<data name=\"NodeInsertedUndo_Undo_insert\" xml:space=\"preserve\">\n    <value>insert</value>\n  </data>\n\t<data name=\"NodeRemovedUndo_Undo_remove\" xml:space=\"preserve\">\n    <value>remove</value>\n  </data>\n\t<data name=\"DesignXmlDraw_Undo_Paste\" xml:space=\"preserve\">\n    <value>Paste</value>\n  </data>\n\t<data name=\"DesignXmlDraw_Undo_ReducePointCount\" xml:space=\"preserve\">\n    <value>Reduce Point Count</value>\n  </data>\n\t<data name=\"DesignXmlDraw_Undo_Resize\" xml:space=\"preserve\">\n    <value>Resize</value>\n  </data>\n\t<data name=\"DesignXmlDraw_Undo_Move\" xml:space=\"preserve\">\n    <value>Move</value>\n  </data>\n\t<data name=\"DesignXmlDraw_Undo_InsertLinePoint\" xml:space=\"preserve\">\n    <value>Insert Line Point</value>\n  </data>\n\t<data name=\"DesignXmlDraw_Undo_InsertText\" xml:space=\"preserve\">\n    <value>Insert Text</value>\n  </data>\n\t<data name=\"DesignXmlDraw_Undo_InsertPolygonPoint\" xml:space=\"preserve\">\n    <value>Insert Polygon Point</value>\n  </data>\n\t<data name=\"DesignXmlDraw_Undo_Delete\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n\t<data name=\"PropertyBase_Undo_change\" xml:space=\"preserve\">\n    <value>change</value>\n  </data>\n\t<data name=\"PropertyText_Undo_FontChange\" xml:space=\"preserve\">\n    <value>Font change</value>\n  </data>\n\t<data name=\"DesignXmlDraw_Error_XMLNotMapData\" xml:space=\"preserve\">\n    <value>The MapData XML file doesn't contain the 'MapData' element</value>\n  </data>\n\t<data name=\"Undo_Error_UnknownAction\" xml:space=\"preserve\">\n    <value>Unknown Action</value>\n  </data>\n\t<data name=\"Undo_Error_EndGroupNotMatchStartGroup\" xml:space=\"preserve\">\n    <value>Internal logic error: EndGroup doesn't match StartGroup</value>\n  </data>\n\t<data name=\"ShapeFile_ErrorA_InvalidFileCode\" xml:space=\"preserve\">\n    <value>Invalid FileCode encountered. Expecting {0}.</value>\n  </data>\n\t<data name=\"ShapeFile_ErrorA_ShapeTypeNotSupported\" xml:space=\"preserve\">\n    <value>ShapeType {0} is not supported.</value>\n  </data>\n\t<data name=\"MapFile_openToolStripMenuItem_Click_OpenMap\" xml:space=\"preserve\">\n    <value>Map files (*.xml)|*.xml|All files (*.*)|*.*</value>\n  </data>\n\t<data name=\"MapFile_setBackgroundImageToolStripMenuItem_Click_OpenPicture\" xml:space=\"preserve\">\n    <value>Bitmap Files (*.bmp)|*.bmp|JPEG (*.jpg;*.jpeg;*.jpe;*.jfif)|*.jpg;*.jpeg;*.jpe;*.jfif|GIF (*.gif)|*.gif|TIFF (*.tif;*.tiff)|*.tif;*.tiff|PNG (*.png)|*.png|All Picture Files|*.bmp;*.jpg;*.jpeg;*.jpe;*.jfif;*.gif;*.tif;*.tiff;*.png|All files (*.*)|*.*</value>\n  </data>\n\t<data name=\"MapFile_importMenuItem_Click_OpenShape\" xml:space=\"preserve\">\n    <value>Shape Files (*.shp)|*.shp|All files (*.*)|*.*</value>\n  </data>\n\t<data name=\"MapFile_SaveAs_RDL_MapFilesFilter\" xml:space=\"preserve\">\n    <value>RDL Map files (*.xml)|*.xml|All files (*.*)|*.*</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlMapFile/Resources/Strings.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"DesignXmlDraw_SetMapFile_ErrorOpeningFile\" xml:space=\"preserve\">\n    <value>Ошибка открытия файла</value>\n  </data>\n  <data name=\"DesignXmlDraw_SetMapFile_Unable_to_open_file\" xml:space=\"preserve\">\n    <value>Не удалётся отрыть файл</value>\n  </data>\n  <data name=\"MapFile_helpHelpToolStripMenuItem_Click_Help_URL_Invalid\" xml:space=\"preserve\">\n    <value>Некорректная ссылка на помощь</value>\n  </data>\n  <data name=\"MapFile_openToolStripMenuItem_Click_ErrorOpening\" xml:space=\"preserve\">\n    <value>Ошибка открытия</value>\n  </data>\n  <data name=\"MapFile_reducePolygonPointsToolStripMenuItem_Click_Reduce_Polygon_Count\" xml:space=\"preserve\">\n    <value>Уменьшение количества сторон многоугольника</value>\n  </data>\n  <data name=\"MapFile_reducePolygonPointsToolStripMenuItem_ReducePolygon\" xml:space=\"preserve\">\n    <value>Количество сторок многоугольника уменьшено на</value>\n  </data>\n  <data name=\"MapFile_ShowB_RdlMapFileDesigner\" xml:space=\"preserve\">\n    <value>Дизайнер карт</value>\n  </data>\n  <data name=\"MapFile_ShowB_Untitled\" xml:space=\"preserve\">\n    <value>безымянный</value>\n  </data>\n  <data name=\"MapFile_ShowB_WantSave\" xml:space=\"preserve\">\n    <value>Хотите сохранить изменения сделанные в '{0}'?</value>\n  </data>\n  <data name=\"MapFile_supportToolStripMenuItem_Click_Support_URL_Invalid\" xml:space=\"preserve\">\n    <value>Некорректная ссылка на поддержку</value>\n  </data>\n  <data name=\"DialogAbout_About\" xml:space=\"preserve\">\n    <value>Дизайнер карт создает XML файлы, которые можно использовать в диаграммах редактора отчёта.\n\nCopyright (C) 2004-2008 fyiReporting Software, LLC\n\nПод лицензией Apache, версии 2.0 (the \"License\");\nВы не можете использовать этот файл только в соответствии с лицензией.\nВы можете получить копию лицензии на\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nЕсли иное не требуется законодательством или согласовано в письменной форме, программное обеспечение\nраспространяется под лицензия КАК ЕСТЬ\",\nБЕЗ ГАРАНТИЙ ИЛИ УСЛОВИЙ ЛЮБОГО РОДА, явных или подразумеваемых.\nСм. Лицензию на других языках, регулирующих разрешения и\nограничения в рамках лицензии.\n\nДля получения дополнительной информации, напишите на info@fyireporting.com или посетите\nсайт www.fyiReporting.com.</value>\n  </data>\n  <data name=\"DialogAbout_Version\" xml:space=\"preserve\">\n    <value>Версия {0}</value>\n  </data>\n  <data name=\"MapFile_editToolStripMenuItem_DropDownOpening_Undo\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"MapFile_SetTitle_fyiReporting_MapFile_Designer\" xml:space=\"preserve\">\n    <value>Редактор карт</value>\n  </data>\n  <data name=\"MapFile_SetTitle_untitled\" xml:space=\"preserve\">\n    <value>безымянный</value>\n  </data>\n  <data name=\"DesignXmlDraw_Undo_Delete\" xml:space=\"preserve\">\n    <value>удаление</value>\n  </data>\n  <data name=\"DesignXmlDraw_Undo_InsertLinePoint\" xml:space=\"preserve\">\n    <value>вставку точки линии</value>\n  </data>\n  <data name=\"DesignXmlDraw_Undo_InsertPolygonPoint\" xml:space=\"preserve\">\n    <value>вставку вершины многоугольника</value>\n  </data>\n  <data name=\"DesignXmlDraw_Undo_InsertText\" xml:space=\"preserve\">\n    <value>вставку текста</value>\n  </data>\n  <data name=\"DesignXmlDraw_Undo_Move\" xml:space=\"preserve\">\n    <value>перемещение</value>\n  </data>\n  <data name=\"DesignXmlDraw_Undo_Paste\" xml:space=\"preserve\">\n    <value>вставку из буфера</value>\n  </data>\n  <data name=\"DesignXmlDraw_Undo_ReducePointCount\" xml:space=\"preserve\">\n    <value>уменьшение количества вершин</value>\n  </data>\n  <data name=\"DesignXmlDraw_Undo_Resize\" xml:space=\"preserve\">\n    <value>изменение размера</value>\n  </data>\n  <data name=\"NodeChangedUndo_Undo_change\" xml:space=\"preserve\">\n    <value>изменение</value>\n  </data>\n  <data name=\"NodeInsertedUndo_Undo_insert\" xml:space=\"preserve\">\n    <value>вставку</value>\n  </data>\n  <data name=\"NodeRemovedUndo_Undo_remove\" xml:space=\"preserve\">\n    <value>удаление</value>\n  </data>\n  <data name=\"PropertyBase_Undo_change\" xml:space=\"preserve\">\n    <value>изменение</value>\n  </data>\n  <data name=\"PropertyText_Undo_FontChange\" xml:space=\"preserve\">\n    <value>изменение шрифта</value>\n  </data>\n  <data name=\"DesignXmlDraw_Error_XMLNotMapData\" xml:space=\"preserve\">\n    <value>XML карты не содержит элемент 'MapData'.</value>\n  </data>\n  <data name=\"Undo_Error_EndGroupNotMatchStartGroup\" xml:space=\"preserve\">\n    <value>Внутренняя логическая ошибка: конец группы не соответствует началу группы</value>\n  </data>\n  <data name=\"Undo_Error_UnknownAction\" xml:space=\"preserve\">\n    <value>Неизвестное действие</value>\n  </data>\n  <data name=\"ShapeFile_ErrorA_InvalidFileCode\" xml:space=\"preserve\">\n    <value>Некорректный код файла. Ожидается {0}.</value>\n  </data>\n  <data name=\"ShapeFile_ErrorA_ShapeTypeNotSupported\" xml:space=\"preserve\">\n    <value>Тип фигуры {0} не поддерживается.</value>\n  </data>\n  <data name=\"MapFile_importMenuItem_Click_OpenShape\" xml:space=\"preserve\">\n    <value>Файлы фигур (*.shp)|*.shp|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"MapFile_openToolStripMenuItem_Click_OpenMap\" xml:space=\"preserve\">\n    <value>Файлы карт (*.xml)|*.xml|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"MapFile_setBackgroundImageToolStripMenuItem_Click_OpenPicture\" xml:space=\"preserve\">\n    <value>BMP (*.bmp)|*.bmp|JPEG (*.jpg;*.jpeg;*.jpe;*.jfif)|*.jpg;*.jpeg;*.jpe;*.jfif|GIF (*.gif)|*.gif|TIFF (*.tif;*.tiff)|*.tif;*.tiff|PNG (*.png)|*.png|Все файлы изображений|*.bmp;*.jpg;*.jpeg;*.jpe;*.jfif;*.gif;*.tif;*.tiff;*.png|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"MapFile_SaveAs_RDL_MapFilesFilter\" xml:space=\"preserve\">\n    <value>Карты (*.xml)|*.xml|Все файлы (*.*)|*.*</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlMapFile/ShapeFile.cs",
    "content": "/* ====================================================================\n   Copyright (C) 2004-2008  fyiReporting Software, LLC\n   Copyright (C) 2011  Peter Gill <peter@majorsilence.com>\n\n   This file is part of the fyiReporting RDL project.\n\t\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at \n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n\n   For additional information, email info@fyireporting.com or visit\n   the website www.fyiReporting.com.\n*/\n// File derived from http://www.c-sharpcorner.com/uploadfile/nschan/shapefile02252007134834pm/shapefile.aspx\n// Filename:    ShapeFile.cs\n// Description: Classes for reading ESRI shapefiles.\n// Reference:   ESRI Shapefile Technical Description, July 1998.\n//              http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf\n// 2007-01-22 nschan Initial revision.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Data;\nusing System.Data.OleDb;\nusing System.IO;\nusing System.Runtime.Serialization;\nusing System.Text;\nusing System.Windows;\nusing System.Drawing;\nusing RdlMapFile.Resources;\n\nnamespace Majorsilence.Reporting.RdlMapFile\n{\n    /// <summary>\n    /// Enumeration defining the various shape types. Each shapefile\n    /// contains only one type of shape (e.g., all polygons or all\n    /// polylines).\n    /// </summary>\n    public enum ShapeType\n    {\n        /// <summary>\n        /// Nullshape / placeholder record.\n        /// </summary>\n        NullShape = 0,\n\n        /// <summary>\n        /// Point record, for defining point locations such as a city.\n        /// </summary>\n        Point = 1,\n\n        /// <summary>\n        /// One or more sets of connected points. Used to represent roads,\n        /// hydrography, etc.\n        /// </summary>\n        PolyLine = 3,\n\n        /// <summary>\n        /// One or more sets of closed figures. Used to represent political\n        /// boundaries for countries, lakes, etc.\n        /// </summary>\n        Polygon = 5,\n\n        /// <summary>\n        /// A cluster of points represented by a single shape record.\n        /// </summary>\n        Multipoint = 8\n\n        // Unsupported types:\n        // PointZ = 11,        \n        // PolyLineZ = 13,        \n        // PolygonZ = 15,        \n        // MultiPointZ = 18,        \n        // PointM = 21,        \n        // PolyLineM = 23,        \n        // PolygonM = 25,        \n        // MultiPointM = 28,        \n        // MultiPatch = 31\n    }\n\n    /// <summary>\n    /// The ShapeFileHeader class represents the contents\n    /// of the fixed length, 100-byte file header at the\n    /// beginning of every shapefile.\n    /// </summary>\n    public class ShapeFileHeader\n    {\n        #region Private fields\n        private int fileCode;\n        private int fileLength;\n        private int version;\n        private int shapeType;\n\n        // Bounding box.\n        private double xMin;\n        private double yMin;\n        private double xMax;\n        private double yMax;\n        #endregion Private fields\n\n        #region Constructor\n        /// <summary>\n        /// Constructor for the ShapeFileHeader class.\n        /// </summary>\n        public ShapeFileHeader()\n        {\n        }\n        #endregion Constructor\n\n        #region Properties\n        /// <summary>\n        /// Indicate the fixed-length of this header in bytes.\n        /// </summary>\n        public static int Length\n        {\n            get { return 100; }\n        }\n\n        /// <summary>\n        /// Specifies the file code for an ESRI shapefile, which\n        /// should be the value, 9994.\n        /// </summary>\n        public int FileCode\n        {\n            get { return this.fileCode; }\n            set { this.fileCode = value; }\n        }\n\n        /// <summary>\n        /// Specifies the length of the shapefile, expressed\n        /// as the number of 16-bit words in the file.\n        /// </summary>\n        public int FileLength\n        {\n            get { return this.fileLength; }\n            set { this.fileLength = value; }\n        }\n\n        /// <summary>\n        /// Specifies the shapefile version number.\n        /// </summary>\n        public int Version\n        {\n            get { return this.version; }\n            set { this.version = value; }\n        }\n\n        /// <summary>\n        /// Specifies the shape type for the file. A shapefile\n        /// contains only one type of shape.\n        /// </summary>\n        public int ShapeType\n        {\n            get { return this.shapeType; }\n            set { this.shapeType = value; }\n        }\n\n        /// <summary>\n        /// Indicates the minimum x-position of the bounding\n        /// box for the shapefile (expressed in degrees longitude).\n        /// </summary>\n        public double XMin\n        {\n            get { return this.xMin; }\n            set { this.xMin = value; }\n        }\n\n        /// <summary>\n        /// Indicates the minimum y-position of the bounding\n        /// box for the shapefile (expressed in degrees latitude).\n        /// </summary>\n        public double YMin\n        {\n            get { return this.yMin; }\n            set { this.yMin = value; }\n        }\n\n        /// <summary>\n        /// Indicates the maximum x-position of the bounding\n        /// box for the shapefile (expressed in degrees longitude).\n        /// </summary>       \n        public double XMax\n        {\n            get { return this.xMax; }\n            set { this.xMax = value; }\n        }\n\n        /// <summary>\n        /// Indicates the maximum y-position of the bounding\n        /// box for the shapefile (expressed in degrees latitude).\n        /// </summary>\n        public double YMax\n        {\n            get { return this.yMax; }\n            set { this.yMax = value; }\n        }\n        #endregion Properties\n\n        #region Public methods\n        /// <summary>\n        /// Output some of the fields of the file header.\n        /// </summary>\n        /// <returns>A string representation of the file header.</returns>\n        public override string ToString()\n        {\n            StringBuilder sb = new StringBuilder();\n            sb.AppendFormat(\"ShapeFileHeader: FileCode={0}, FileLength={1}, Version={2}, ShapeType={3}\",\n                this.fileCode, this.fileLength, this.version, this.shapeType);\n\n            return sb.ToString();\n        }\n        #endregion Public methods\n    }\n\n    /// <summary>\n    /// The ShapeFileRecord class represents the contents of\n    /// a shape record, which is of variable length.\n    /// </summary>\n    public class ShapeFileRecord\n    {\n        #region Private fields\n        // Record Header.\n        private int recordNumber;\n        private int contentLength;\n\n        // Shape type.\n        private int shapeType;\n\n        // Bounding box for shape.\n        private double xMin;\n        private double yMin;\n        private double xMax;\n        private double yMax;\n\n        // Part indices and points array.\n        private Collection<int> parts = new Collection<int>();\n        private Collection<PointF> points = new Collection<PointF>();\n\n        // Shape attributes from a row in the dBASE file.\n        private DataRow attributes;\n        #endregion Private fields\n\n        #region Constructor\n        /// <summary>\n        /// Constructor for the ShapeFileRecord class.\n        /// </summary>\n        public ShapeFileRecord()\n        {\n        }\n        #endregion Constructor\n\n        #region Properties\n        /// <summary>\n        /// Indicates the record number (or index) which starts at 1.\n        /// </summary>\n        public int RecordNumber\n        {\n            get { return this.recordNumber; }\n            set { this.recordNumber = value; }\n        }\n\n        /// <summary>\n        /// Specifies the length of this shape record in 16-bit words.\n        /// </summary>\n        public int ContentLength\n        {\n            get { return this.contentLength; }\n            set { this.contentLength = value; }\n        }\n\n        /// <summary>\n        /// Specifies the shape type for this record.\n        /// </summary>\n        public int ShapeType\n        {\n            get { return this.shapeType; }\n            set { this.shapeType = value; }\n        }\n\n        /// <summary>\n        /// Indicates the minimum x-position of the bounding\n        /// box for the shape (expressed in degrees longitude).\n        /// </summary>\n        public double XMin\n        {\n            get { return this.xMin; }\n            set { this.xMin = value; }\n        }\n\n        /// <summary>\n        /// Indicates the minimum y-position of the bounding\n        /// box for the shape (expressed in degrees latitude).\n        /// </summary>\n        public double YMin\n        {\n            get { return this.yMin; }\n            set { this.yMin = value; }\n        }\n\n        /// <summary>\n        /// Indicates the maximum x-position of the bounding\n        /// box for the shape (expressed in degrees longitude).\n        /// </summary>\n        public double XMax\n        {\n            get { return this.xMax; }\n            set { this.xMax = value; }\n        }\n\n        /// <summary>\n        /// Indicates the maximum y-position of the bounding\n        /// box for the shape (expressed in degrees latitude).\n        /// </summary>\n        public double YMax\n        {\n            get { return this.yMax; }\n            set { this.yMax = value; }\n        }\n\n        /// <summary>\n        /// Indicates the number of parts for this shape.\n        /// A part is a connected set of points, analogous to\n        /// a PathFigure in WPF.\n        /// </summary>\n        public int NumberOfParts\n        {\n            get { return this.parts.Count; }\n        }\n\n        /// <summary>\n        /// Specifies the total number of points defining\n        /// this shape record.\n        /// </summary>\n        public int NumberOfPoints\n        {\n            get { return this.points.Count; }\n        }\n\n        /// <summary>      \n        /// A collection of indices for the points array.\n        /// Each index identifies the starting point of the\n        /// corresponding part (or PathFigure using WPF\n        /// terminology).\n        /// </summary>\n        public Collection<int> Parts\n        {\n            get { return this.parts; }\n        }\n\n        /// <summary>\n        /// A collection of all of the points defining the\n        /// shape record.\n        /// </summary>\n        public Collection<PointF> Points\n        {\n            get { return this.points; }\n        }\n\n        /// <summary>\n        /// Access the (dBASE) attribute values associated\n        /// with this shape record.\n        /// </summary>\n        public DataRow Attributes\n        {\n            get { return this.attributes; }\n            set { this.attributes = value; }\n        }\n        #endregion Properties\n\n        #region Public methods\n        /// <summary>\n        /// Output some of the fields of the shapefile record.\n        /// </summary>\n        /// <returns>A string representation of the record.</returns>\n        public override string ToString()\n        {\n            StringBuilder sb = new StringBuilder();\n            sb.AppendFormat(\"ShapeFileRecord: RecordNumber={0}, ContentLength={1}, ShapeType={2}\",\n                this.recordNumber, this.contentLength, this.shapeType);\n            \n            return sb.ToString();\n        }\n        #endregion Public methods\n    }\n\n    /// <summary>\n    /// The ShapeFileReadInfo class stores information about a shapefile\n    /// that can be used by external clients during a shapefile read.\n    /// </summary>\n    public class ShapeFileReadInfo\n    {\n        #region Private fields\n        private string fileName;\n        private ShapeFile shapeFile;\n        private Stream stream;\n        private int numBytesRead;\n        private int recordIndex;\n        #endregion Private fields\n\n        #region Constructor\n        /// <summary>\n        /// Constructor for the ShapeFileReadInfo class.\n        /// </summary>\n        public ShapeFileReadInfo()\n        {\n        }\n        #endregion Constructor\n\n        #region Properties\n        /// <summary>\n        /// The full pathname of the shapefile.\n        /// </summary>\n        public string FileName\n        {\n            get { return this.fileName; }\n            set { this.fileName = value; }\n        }\n\n        /// <summary>\n        /// A reference to the shapefile instance.\n        /// </summary>\n        public ShapeFile ShapeFile\n        {\n            get { return this.shapeFile; }\n            set { this.shapeFile = value; }\n        }\n\n        /// <summary>\n        /// An opened file stream for a shapefile.\n        /// </summary>\n        public Stream Stream\n        {\n            get { return this.stream; }\n            set { this.stream = value; }\n        }\n\n        /// <summary>\n        /// The number of bytes read from a shapefile so far.\n        /// Can be used to compute a progress value.\n        /// </summary>\n        public int NumberOfBytesRead\n        {\n            get { return this.numBytesRead; }\n            set { this.numBytesRead = value; }\n        }\n\n        /// <summary>\n        /// A general-purpose record index.\n        /// </summary>\n        public int RecordIndex\n        {\n            get { return this.recordIndex; }\n            set { this.recordIndex = value; }\n        }       \n        #endregion Properties\n\n        #region Public methods\n        /// <summary>\n        /// Output some of the field values in the form of a string.\n        /// </summary>\n        /// <returns>A string representation of the field values.</returns>\n        public override string ToString()\n        {\n            StringBuilder sb = new StringBuilder();\n            sb.AppendFormat(\"ShapeFileReadInfo: FileName={0}, \", this.fileName);\n            sb.AppendFormat(\"NumberOfBytesRead={0}, RecordIndex={1}\", this.numBytesRead, this.recordIndex);\n\n            return sb.ToString();\n        }\n        #endregion Public methods\n    }\n\n    /// <summary>\n    /// The ShapeFile class represents the contents of a single\n    /// ESRI shapefile. This is the class which contains functionality\n    /// for reading shapefiles and their corresponding dBASE attribute\n    /// files.\n    /// </summary>\n    /// <remarks>\n    /// You can call the Read() method to import both shapes and attributes\n    /// at once. Or, you can open the file stream yourself and read the file\n    /// header or individual records one at a time. The advantage of this is\n    /// that it allows you to implement your own progress reporting functionality,\n    /// for example.\n    /// </remarks>\n    public class ShapeFile\n    {\n        #region Constants\n        private const int expectedFileCode = 9994;\n        #endregion Constants\n\n        #region Private static fields\n        private static byte[] intBytes = new byte[4];\n        private static byte[] doubleBytes = new byte[8];\n        #endregion Private static fields\n\n        #region Private fields\n        // File Header.\n        private ShapeFileHeader fileHeader = new ShapeFileHeader();\n\n        // Collection of Shapefile Records.\n        private Collection<ShapeFileRecord> records = new Collection<ShapeFileRecord>();\n        #endregion Private fields\n\n        #region Constructor\n        /// <summary>\n        /// Constructor for the ShapeFile class.\n        /// </summary>\n        public ShapeFile()\n        {\n        }\n        #endregion Constructor\n\n        #region Properties\n        /// <summary>\n        /// Access the file header of this shapefile.\n        /// </summary>\n        public ShapeFileHeader FileHeader\n        {\n            get { return this.fileHeader; }\n        }\n\n        /// <summary>\n        /// Access the collection of records for this shapefile.\n        /// </summary>\n        public Collection<ShapeFileRecord> Records\n        {\n            get { return this.records; }\n        }\n        #endregion Properties\n\n        #region Public methods\n        /// <summary>\n        /// Read both shapes and attributes from the given\n        /// shapefile (and its corresponding dBASE file).\n        /// This is the top-level method for reading an ESRI\n        /// shapefile.\n        /// </summary>\n        /// <param name=\"fileName\">Full pathname of the shapefile.</param>\n        public void Read(string fileName)\n        {\n            if ( string.IsNullOrEmpty(fileName) )\n                throw new ArgumentNullException(\"fileName\");\n\n            // Read shapes first (geometry).\n            this.ReadShapes(fileName);\n\n            // Construct name and path of dBASE file. It's basically\n            // the same name as the shapefile except with a .dbf extension.\n            string dbaseFile = fileName.Replace(\".shp\", \".dbf\");\n            dbaseFile = dbaseFile.Replace(\".SHP\", \".DBF\");\n\n            // Read the attributes.\n            this.ReadAttributes(dbaseFile);\n        }\n\n        /// <summary>\n        /// Read shapes (geometry) from the given shapefile.\n        /// </summary>\n        /// <param name=\"fileName\">Full pathname of the shapefile.</param>\n        public void ReadShapes(string fileName)\n        {\n            using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))\n            {\n                this.ReadShapes(stream);\n            }\n        }\n\n        /// <summary>\n        /// Read shapes (geometry) from the given stream.\n        /// </summary>\n        /// <param name=\"stream\">Input stream for a shapefile.</param>\n        public void ReadShapes(Stream stream)\n        {\n            // Read the File Header.\n            this.ReadShapeFileHeader(stream);\n\n            // Read the shape records.\n            this.records.Clear();\n            while (true)\n            {\n                try\n                {\n                    this.ReadShapeFileRecord(stream);\n                }\n                catch(IOException)\n                {\n                    // Stop reading when EOF exception occurs.\n                    break;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Read the file header of the shapefile.\n        /// </summary>\n        /// <param name=\"stream\">Input stream.</param>\n        public void ReadShapeFileHeader(Stream stream)\n        {\n            // File Code.\n            this.fileHeader.FileCode = ShapeFile.ReadInt32_BE(stream);\n            if ( this.fileHeader.FileCode != ShapeFile.expectedFileCode )\n            {\n                string msg = String.Format(System.Globalization.CultureInfo.InvariantCulture, Strings.ShapeFile_ErrorA_InvalidFileCode, ShapeFile.expectedFileCode);\n                throw new ApplicationException(msg);\n            }\n\n            // 5 unused values.\n            ShapeFile.ReadInt32_BE(stream);\n            ShapeFile.ReadInt32_BE(stream);\n            ShapeFile.ReadInt32_BE(stream);\n            ShapeFile.ReadInt32_BE(stream);\n            ShapeFile.ReadInt32_BE(stream);\n\n            // File Length.\n            this.fileHeader.FileLength = ShapeFile.ReadInt32_BE(stream);\n\n            // Version.\n            this.fileHeader.Version = ShapeFile.ReadInt32_LE(stream);\n\n            // Shape Type.\n            this.fileHeader.ShapeType = ShapeFile.ReadInt32_LE(stream);\n\n            // Bounding Box.\n            this.fileHeader.XMin = ShapeFile.ReadDouble64_LE(stream);\n            this.fileHeader.YMin = ShapeFile.ReadDouble64_LE(stream);\n            this.fileHeader.XMax = ShapeFile.ReadDouble64_LE(stream);\n            this.fileHeader.YMax = ShapeFile.ReadDouble64_LE(stream);\n\n            // Adjust the bounding box in case it is too small.\n            if ( Math.Abs(this.fileHeader.XMax - this.fileHeader.XMin) < 1 )\n            {\n                this.fileHeader.XMin -= 5;\n                this.fileHeader.XMax += 5;\n            }\n            if ( Math.Abs(this.fileHeader.YMax - this.fileHeader.YMin) < 1 )\n            {\n                this.fileHeader.YMin -= 5;\n                this.fileHeader.YMax += 5;\n            }\n\n            // Skip the rest of the file header.\n            stream.Seek(100, SeekOrigin.Begin);\n        }\n\n        /// <summary>\n        /// Read a shapefile record.\n        /// </summary>\n        /// <param name=\"stream\">Input stream.</param>\n        public ShapeFileRecord ReadShapeFileRecord(Stream stream)\n        {\n            ShapeFileRecord record = new ShapeFileRecord();\n\n            // Record Header.\n            record.RecordNumber = ShapeFile.ReadInt32_BE(stream);\n            record.ContentLength = ShapeFile.ReadInt32_BE(stream);\n\n            // Shape Type.\n            record.ShapeType = ShapeFile.ReadInt32_LE(stream);\n\n            // Read the shape geometry, depending on its type.\n            switch (record.ShapeType)\n            {\n                case (int)ShapeType.NullShape:\n                    // Do nothing.\n                    break;\n                case (int)ShapeType.Point:\n                    ShapeFile.ReadPoint(stream, record);\n                    break;\n                case (int)ShapeType.PolyLine:\n                    // PolyLine has exact same structure as Polygon in shapefile.\n                    ShapeFile.ReadPolygon(stream, record);\n                    break;\n                case (int)ShapeType.Polygon:\n                    ShapeFile.ReadPolygon(stream, record);\n                    break;\n                case (int)ShapeType.Multipoint:\n                    ShapeFile.ReadMultipoint(stream, record);\n                    break;\n                default:\n                    {\n                        string msg = String.Format(System.Globalization.CultureInfo.InvariantCulture, Strings.ShapeFile_ErrorA_ShapeTypeNotSupported, (int)record.ShapeType);\n                        throw new ApplicationException(msg);\n                    }\n            }\n\n            // Add the record to our internal list.\n            this.records.Add(record);\n\n            return record;\n        }\n\n        /// <summary>\n        /// Read the table from specified dBASE (DBF) file and\n        /// merge the rows with shapefile records.\n        /// </summary>\n        /// <remarks>\n        /// The filename of the dBASE file is expected to follow 8.3 naming\n        /// conventions. If it doesn't follow the convention, we try to\n        /// determine the 8.3 short name ourselves (but the name we come up\n        /// with may not be correct in all cases).\n        /// </remarks>\n        /// <param name=\"dbaseFile\">Full file path of the dBASE (DBF) file.</param>\n        public void ReadAttributes(string dbaseFile)\n        {\n            if ( string.IsNullOrEmpty(dbaseFile) )\n                throw new ArgumentNullException(\"dbaseFile\");\n\n            // Check if the file exists. If it doesn't exist,\n            // this is not an error.\n            if ( !File.Exists(dbaseFile) )\n                return;\n\n            // Get the directory in which the dBASE (DBF) file resides.\n            FileInfo fi = new FileInfo(dbaseFile);\n            string directory = fi.DirectoryName;\n\n            // Get the filename minus the extension.\n            string fileNameNoExt = fi.Name.ToUpper(System.Globalization.CultureInfo.InvariantCulture);\n            if ( fileNameNoExt.EndsWith(\".DBF\") )\n                fileNameNoExt = fileNameNoExt.Substring(0, fileNameNoExt.Length - 4);\n\n            // Convert to a short filename (may not work in every case!).\n            if ( fileNameNoExt.Length > 8 )\n            {\n                if ( fileNameNoExt.Contains(\" \") )\n                {\n                    string noSpaces = fileNameNoExt.Replace(\" \", \"\");\n                    if ( noSpaces.Length > 8 )\n                        fileNameNoExt = noSpaces;\n                }\n                fileNameNoExt = fileNameNoExt.Substring(0, 6) + \"~1\";\n            }\n\n            // Set the connection string.\n            string connectionString = \"PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=\" + directory + \";Extended Properties=dBASE 5.0\";\n\n            // Set the select query.\n            string selectQuery = \"SELECT * FROM [\" + fileNameNoExt + \"#DBF];\";\n\n            // Create a database connection object using the connection string.\n            OleDbConnection connection = new OleDbConnection(connectionString);\n\n            // Create a database command on the connection using the select query.\n            OleDbCommand command = new OleDbCommand(selectQuery, connection);\n\n            try\n            {\n                // Open the connection.          \n                connection.Open();\n\n                // Create a data adapter to fill a dataset.\n                OleDbDataAdapter dataAdapter = new OleDbDataAdapter();\n                dataAdapter.SelectCommand = command;\n                DataSet dataSet = new DataSet();\n                dataSet.Locale = System.Globalization.CultureInfo.InvariantCulture;\n                dataAdapter.Fill(dataSet);\n\n                // Merge attributes into the shape file.\n                if ( dataSet.Tables.Count > 0 )\n                    this.MergeAttributes(dataSet.Tables[0]);\n            }\n            catch ( OleDbException )\n            {\n                // Note: An exception will occur if the filename of the dBASE\n                // file does not follow 8.3 naming conventions. In this case,\n                // you must use its short (MS-DOS) filename.\n\n                // Rethrow the exception.\n                throw;\n            }\n            finally\n            {\n                // Dispose of connection.\n                ((IDisposable)connection).Dispose();\n            }\n        }\n\n        /// <summary>\n        /// Output the File Header in the form of a string.\n        /// </summary>\n        /// <returns>A string representation of the file header.</returns>\n        public override string ToString()\n        {\n            return \"ShapeFile: \" + this.fileHeader.ToString();\n        }\n        #endregion Public methods\n\n        #region Private methods\n        /// <summary>\n        /// Read a 4-byte integer using little endian (Intel)\n        /// byte ordering.\n        /// </summary>\n        /// <param name=\"stream\">Input stream to read.</param>\n        /// <returns>The integer value.</returns>\n        private static int ReadInt32_LE(Stream stream)\n        {\n            for (int i = 0; i < 4; i++)\n            {\n                int b = stream.ReadByte();\n                if ( b == -1 )\n                    throw new EndOfStreamException();\n                intBytes[i] = (byte)b;\n            }\n\n            return BitConverter.ToInt32(intBytes, 0);\n        }\n\n        /// <summary>\n        /// Read a 4-byte integer using big endian\n        /// byte ordering.\n        /// </summary>\n        /// <param name=\"stream\">Input stream to read.</param>\n        /// <returns>The integer value.</returns>\n        private static int ReadInt32_BE(Stream stream)\n        {\n            for (int i = 3; i >= 0; i--)\n            {\n                int b = stream.ReadByte();\n                if ( b == -1 )\n                    throw new EndOfStreamException();\n                intBytes[i] = (byte)b;\n            }\n\n            return BitConverter.ToInt32(intBytes, 0);\n        }\n\n        /// <summary>\n        /// Read an 8-byte double using little endian (Intel)\n        /// byte ordering.\n        /// </summary>\n        /// <param name=\"stream\">Input stream to read.</param>\n        /// <returns>The double value.</returns>\n        private static double ReadDouble64_LE(Stream stream)\n        {            \n            for (int i = 0; i < 8; i++)\n            {\n                int b = stream.ReadByte();\n                if ( b == -1 )\n                    throw new EndOfStreamException();\n                doubleBytes[i] = (byte)b;\n            }\n\n            return BitConverter.ToDouble(doubleBytes, 0);\n        }        \n\n        /// <summary>\n        /// Read a shapefile Point record.\n        /// </summary>\n        /// <param name=\"stream\">Input stream.</param>\n        /// <param name=\"record\">Shapefile record to be updated.</param>\n        private static void ReadPoint(Stream stream, ShapeFileRecord record)\n        {\n            // Points - add a single point.\n            PointF p = new PointF();  \n            p.X = (float)ShapeFile.ReadDouble64_LE(stream);\n            p.Y = (float)ShapeFile.ReadDouble64_LE(stream);\n            record.Points.Add(p);\n\n            // Bounding Box.\n            record.XMin = p.X;\n            record.YMin = p.Y;\n            record.XMax = record.XMin;\n            record.YMax = record.YMin;\n        }\n\n        /// <summary>\n        /// Read a shapefile MultiPoint record.\n        /// </summary>\n        /// <param name=\"stream\">Input stream.</param>\n        /// <param name=\"record\">Shapefile record to be updated.</param>\n        private static void ReadMultipoint(Stream stream, ShapeFileRecord record)\n        {\n            // Bounding Box.\n            record.XMin = ShapeFile.ReadDouble64_LE(stream);\n            record.YMin = ShapeFile.ReadDouble64_LE(stream);\n            record.XMax = ShapeFile.ReadDouble64_LE(stream);\n            record.YMax = ShapeFile.ReadDouble64_LE(stream);\n\n            // Num Points.\n            int numPoints = ShapeFile.ReadInt32_LE(stream);\n\n            // Points.           \n            for (int i = 0; i < numPoints; i++)\n            {\n                PointF p = new PointF();\n                p.X = (float)ShapeFile.ReadDouble64_LE(stream);\n                p.Y = (float)ShapeFile.ReadDouble64_LE(stream);\n                record.Points.Add(p);\n            }\n        }\n\n        /// <summary>\n        /// Read a shapefile Polygon record.\n        /// </summary>\n        /// <param name=\"stream\">Input stream.</param>\n        /// <param name=\"record\">Shapefile record to be updated.</param>\n        private static void ReadPolygon(Stream stream, ShapeFileRecord record)\n        {\n            // Bounding Box.\n            record.XMin = ShapeFile.ReadDouble64_LE(stream);\n            record.YMin = ShapeFile.ReadDouble64_LE(stream);\n            record.XMax = ShapeFile.ReadDouble64_LE(stream);\n            record.YMax = ShapeFile.ReadDouble64_LE(stream);\n\n            // Num Parts and Points.\n            int numParts = ShapeFile.ReadInt32_LE(stream);\n            int numPoints = ShapeFile.ReadInt32_LE(stream);\n\n            // Parts.           \n            for (int i = 0; i < numParts; i++)\n            {\n                record.Parts.Add(ShapeFile.ReadInt32_LE(stream));\n            }\n\n            // Points.           \n            for (int i = 0; i < numPoints; i++)\n            {\n                PointF p = new PointF();\n                p.X = (float)ShapeFile.ReadDouble64_LE(stream);\n                p.Y = (float)ShapeFile.ReadDouble64_LE(stream);\n                record.Points.Add(p);\n            }\n        }\n\n        /// <summary>\n        /// Merge data rows from the given table with\n        /// the shapefile records.\n        /// </summary>\n        /// <param name=\"table\">Attributes table.</param>\n        private void MergeAttributes(DataTable table)\n        {\n            // For each data row, assign it to a shapefile record.\n            int index = 0;\n            foreach (DataRow row in table.Rows)\n            {\n                if ( index >= this.records.Count )\n                    break;\n                this.records[index].Attributes = row;\n                ++index;\n            }\n        }\n        #endregion Private methods\n    }\n}\n\n// END\n\n"
  },
  {
    "path": "RdlMapFile/Undo.cs",
    "content": "\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Xml;\nusing RdlMapFile.Resources;\n\nnamespace Majorsilence.Reporting.RdlMapFile\n{\n\tinternal class Undo\n\t{ \n\t\tStack _actions;\n\t\tbool _Undoing = false;\n\t\tXmlDocument _doc;\n\t\tUndoGroup _currentUndoGroup = null;\n\t\tobject _pState=null;\t\t\t\t\t// state saved with previous changing event\n\t\tint _UndoLevels;\n\t\tbool _GroupsOnly=false;\n\n\t\tinternal Undo(XmlDocument doc, int levels)\n\t\t{ \n\t\t\t_doc = doc;\n\t\t\t_UndoLevels = levels;\t\t\t\t// we don't currently support; need to write special Stack\n\t\t\t_doc.NodeChanging +=new XmlNodeChangedEventHandler(NodeChanging);\n\t\t\t_doc.NodeChanged += new XmlNodeChangedEventHandler(NodeChanged);\n\t\t\t_doc.NodeInserting +=new XmlNodeChangedEventHandler(NodeChanging);\n\t\t\t_doc.NodeInserted += new XmlNodeChangedEventHandler(NodeChanged);\n\t\t\t_doc.NodeRemoving +=new XmlNodeChangedEventHandler(NodeChanging);\n\t\t\t_doc.NodeRemoved += new XmlNodeChangedEventHandler(NodeChanged);\n\t\t\t_actions = new Stack();\n\t\t}\n\n\t\tinternal bool GroupsOnly\n\t\t{\n\t\t\tget {return _GroupsOnly;}\n\t\t\tset {_GroupsOnly = value;}\n\t\t}\n\n\t\tinternal bool CanUndo\n\t\t{\n\t\t\tget {return _actions.Count > 0;}\n\t\t}\n\n\t\tinternal string Description\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tif (_actions.Count == 0)\n\t\t\t\t\treturn \"\";\n\n\t\t\t\tUndoItem ui = (UndoItem) _actions.Peek();\n\t\t\t\treturn ui.GetDescription();\n\t\t\t}\n\t\t}\n\n\t\tinternal void Reset()\n\t\t{\n\t\t\t_actions.Clear();\n\t\t}\n\n\t\tinternal bool Undoing\n\t\t{\n\t\t\tget {return _Undoing;}\n\t\t\tset {_Undoing = value;}\n\t\t}\n\n\t\tprivate void NodeChanging(object sender, XmlNodeChangedEventArgs e)\n\t\t{\n\t\t\tif (_Undoing)\n\t\t\t\treturn;\n\n\t\t\tswitch (e.Action)\n\t\t\t{\n\t\t\t\tcase XmlNodeChangedAction.Insert:\n\t\t\t\t\t_pState = NodeInsertedUndo.PreviousState(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase XmlNodeChangedAction.Remove:\n\t\t\t\t\t_pState = NodeRemovedUndo.PreviousState(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase XmlNodeChangedAction.Change:\n\t\t\t\t\t_pState = NodeChangedUndo.PreviousState(e);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Exception(Strings.Undo_Error_UnknownAction);\n\t\t\t}\n\t\t}\n\n\t\tprivate void NodeChanged(object sender, XmlNodeChangedEventArgs e)\n\t\t{\n\t\t\tif (_Undoing)\n\t\t\t{\n\t\t\t\t// if we're undoing ignore the event since it is the result of an undo\n\t\t\t\t_pState = null;\n\t\t\t\t_Undoing = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tUndoItem undo = null;\n\t\t\tswitch (e.Action)\n\t\t\t{\n\t\t\t\tcase XmlNodeChangedAction.Insert:\n\t\t\t\t\tundo = new NodeInsertedUndo(e, _pState);\n\t\t\t\t\tbreak;\n\t\t\t\tcase XmlNodeChangedAction.Remove:\n\t\t\t\t\tundo = new NodeRemovedUndo(e, _pState);\n\t\t\t\t\tbreak;\n\t\t\t\tcase XmlNodeChangedAction.Change:\n\t\t\t\t\tundo = new NodeChangedUndo(e, _pState);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Exception(Strings.Undo_Error_UnknownAction);\n\t\t\t}\n\t\t\t_pState = null;\n\t\t\tif (_currentUndoGroup != null)\n\t\t\t{\n\t\t\t\t_currentUndoGroup.AddUndoItem(undo);\n\t\t\t}\n\t\t\telse if (GroupsOnly)\n\t\t\t{\n\t\t\t\t_pState = null;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t_actions.Push(undo);\n\t\t\t}\n\t\t}\n\n\t\tinternal void undo()\n\t\t{\n\t\t\tUndoItem undoItem = null;\n\n\t\t\tif (_actions.Count == 0)\n\t\t\t\treturn;\n\n\t\t\tundoItem = (UndoItem)_actions.Pop();\n\n\t\t\t_Undoing = true;\n\t\t\tundoItem.Undo();\n\t\t}\n\n\t\tinternal void StartUndoGroup(String description)\n\t\t{\n\t\t\tUndoGroup ug = new UndoGroup(this, description);\n\t\t\t_currentUndoGroup = ug;\n\t\t\t_actions.Push(ug);\n\t\t}\n\t\t\n\t\tinternal void EndUndoGroup()\n\t\t{\n\t\t\tEndUndoGroup(true);\t\t\t// we want to keep the undo items on the stack\n\t\t}\t\n\n\t\tinternal void EndUndoGroup(bool keepChanges)\n\t\t{\n\t\t\tif (_currentUndoGroup == null)\n\t\t\t\treturn;\n\n\t\t\t// group contains no items; or user doesn't want changes to part of undo\n\t\t\t//   \n\t\t\tif (_currentUndoGroup.Count == 0 || !keepChanges)\t\n\t\t\t{\n\t\t\t\tUndoGroup ug = _actions.Pop() as UndoGroup;\t// get rid of the empty group\n\t\t\t\tif (ug != _currentUndoGroup)\t\t\n\t\t\t\t\tthrow new Exception(Strings.Undo_Error_EndGroupNotMatchStartGroup);\n\t\t\t}\n\t\t\t_currentUndoGroup = null;\n\t\t}\n\t}\n\n    internal interface UndoItem\n    {\n        void Undo();\n        String GetDescription();\n    }\n\n    internal class NodeInsertedUndo : UndoItem\n    {\n        XmlNode iNode;\n\n        public NodeInsertedUndo(XmlNodeChangedEventArgs e, object previous)\n        {\n            iNode = e.Node;\n        }\n\n        public void Undo()\n        {\n            XmlNode parent = iNode.ParentNode;\n\t\t\tif (parent == null)\t\t// happens with attributes but doesn't affect the undo??\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n            parent.RemoveChild(iNode);\n        }\n\n        public String GetDescription()\n        {\n\t\t\treturn Strings.NodeInsertedUndo_Undo_insert;\t// could be more explicit using XmlNodeType but ...\n        }\n\t\n\t\tstatic internal object PreviousState(XmlNodeChangedEventArgs e)\n\t\t{\n\t\t\treturn null;\n\t\t}\n\t}\n\n    internal class NodeRemovedUndo : UndoItem\n    {\n        internal XmlNode removedNode;\n        internal XmlNode parentNode;\n        internal XmlNode nextSibling;\n\n        internal NodeRemovedUndo(XmlNodeChangedEventArgs e, object previous)\n        {\n            removedNode = e.Node;\n            parentNode = e.OldParent;\n            nextSibling = previous as XmlNode;\n        }\n\n        public void Undo()\n        {\n            parentNode.InsertBefore(removedNode, nextSibling);\n        }\n\n        public String GetDescription()\n        {\n\t\t\treturn Strings.NodeRemovedUndo_Undo_remove;\t\t// could be more specific using NodeType\n        }\n\n\t\tstatic internal object PreviousState(XmlNodeChangedEventArgs e)\n\t\t{\n\t\t\treturn e.Node.NextSibling;\n\t\t}\n\t}\n\n\n    /**\n     * Can be used for both CharacterData and ProcessingInstruction nodes.\n     */\n    internal class NodeChangedUndo : UndoItem\n    {\n        String oldValue;\n        XmlNode node;\n\n        internal NodeChangedUndo(XmlNodeChangedEventArgs e, object pValue)\n        {\n\t\t\toldValue = pValue as string;\n            node = e.Node;\t\t\n        }\n\n        public void Undo()\n        {\n\t\t\tnode.Value = oldValue;\n        }\n\n        public String GetDescription()\n        {\n\t\t\treturn Strings.NodeChangedUndo_Undo_change;\n        }\n\t\n\t\tstatic internal object PreviousState(XmlNodeChangedEventArgs e)\n\t\t{\n\t\t\treturn e.Node.Value;\n\t\t}\n\t}\n\n    /**\n     * Groups several undo events into one transaction.  Needed when one\n\t * user action corresponds to multiple dom events\n     * */\n    internal class UndoGroup : UndoItem\n    {\n\t\tUndo _undo;\n        string description;\n        List<UndoItem> undoItems = new List<UndoItem>();\n\n        internal UndoGroup(Undo undo, String description)\n        {\n\t\t\t_undo = undo;\n            this.description = description;\n        }\n\n        internal void AddUndoItem(UndoItem ui)\n        {\n            undoItems.Add(ui);\n        }\n\n\t\tinternal int Count\n\t\t{\n\t\t\tget {return undoItems.Count;}\n\t\t}\n\n        public void Undo()\n        {\n\t\t\t// loop thru group items backwards\n\t\t\tfor (int i=undoItems.Count-1; i >= 0; i--)\n            {\n\t\t\t\tUndoItem ui = undoItems[i] as UndoItem;\n                _undo.Undoing = true;\n                ui.Undo();\n            }\n        }\n\n        public String GetDescription()\n        {\n            return description;\n        }\n    }\n\n}"
  },
  {
    "path": "RdlReader/DialogAbout.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlReader\n{\n    public partial class DialogAbout : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tprivate System.Windows.Forms.Button bOK;\nprivate System.Windows.Forms.Label label1;\nprivate System.Windows.Forms.Label label3;\nprivate System.Windows.Forms.Label label4;\nprivate System.Windows.Forms.LinkLabel linkLabel1;\nprivate System.Windows.Forms.LinkLabel linkLabel2;\nprivate System.Windows.Forms.PictureBox pictureBox1;\nprivate System.Windows.Forms.TextBox tbLicense;\nprivate System.Windows.Forms.Label lVersion;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DialogAbout));\n\t\t\tthis.bOK = new System.Windows.Forms.Button();\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.lVersion = new System.Windows.Forms.Label();\n\t\t\tthis.label3 = new System.Windows.Forms.Label();\n\t\t\tthis.label4 = new System.Windows.Forms.Label();\n\t\t\tthis.linkLabel1 = new System.Windows.Forms.LinkLabel();\n\t\t\tthis.linkLabel2 = new System.Windows.Forms.LinkLabel();\n\t\t\tthis.tbLicense = new System.Windows.Forms.TextBox();\n\t\t\tthis.pictureBox1 = new System.Windows.Forms.PictureBox();\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// bOK\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bOK, \"bOK\");\n\t\t\tthis.bOK.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n\t\t\tthis.bOK.Name = \"bOK\";\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// lVersion\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lVersion, \"lVersion\");\n\t\t\tthis.lVersion.Name = \"lVersion\";\n\t\t\t// \n\t\t\t// label3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label3, \"label3\");\n\t\t\tthis.label3.Name = \"label3\";\n\t\t\t// \n\t\t\t// label4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label4, \"label4\");\n\t\t\tthis.label4.Name = \"label4\";\n\t\t\t// \n\t\t\t// linkLabel1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.linkLabel1, \"linkLabel1\");\n\t\t\tthis.linkLabel1.Name = \"linkLabel1\";\n\t\t\tthis.linkLabel1.TabStop = true;\n\t\t\tthis.linkLabel1.Tag = \"https://github.com/majorsilence/My-FyiReporting\";\n\t\t\tthis.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n\t\t\t// \n\t\t\t// linkLabel2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.linkLabel2, \"linkLabel2\");\n\t\t\tthis.linkLabel2.Name = \"linkLabel2\";\n\t\t\tthis.linkLabel2.TabStop = true;\n\t\t\tthis.linkLabel2.Tag = \"mailto:peter@majorsilence.com\";\n\t\t\tthis.linkLabel2.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n\t\t\t// \n\t\t\t// tbLicense\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbLicense, \"tbLicense\");\n\t\t\tthis.tbLicense.Name = \"tbLicense\";\n\t\t\tthis.tbLicense.ReadOnly = true;\n\t\t\t// \n\t\t\t// pictureBox1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.pictureBox1, \"pictureBox1\");\n\t\t\tthis.pictureBox1.Name = \"pictureBox1\";\n\t\t\tthis.pictureBox1.TabStop = false;\n\t\t\t// \n\t\t\t// DialogAbout\n\t\t\t// \n\t\t\tthis.AcceptButton = this.bOK;\n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.CancelButton = this.bOK;\n\t\t\tthis.Controls.Add(this.pictureBox1);\n\t\t\tthis.Controls.Add(this.tbLicense);\n\t\t\tthis.Controls.Add(this.linkLabel2);\n\t\t\tthis.Controls.Add(this.linkLabel1);\n\t\t\tthis.Controls.Add(this.label4);\n\t\t\tthis.Controls.Add(this.label3);\n\t\t\tthis.Controls.Add(this.lVersion);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.Controls.Add(this.bOK);\n\t\t\tthis.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n\t\t\tthis.MaximizeBox = false;\n\t\t\tthis.MinimizeBox = false;\n\t\t\tthis.Name = \"DialogAbout\";\n\t\t\tthis.ShowInTaskbar = false;\n\t\t\tthis.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;\n\t\t\t((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlReader/DialogAbout.cs",
    "content": "using RdlReader.Resources;\n\nusing System;\nusing System.Reflection;\nusing System.Windows.Forms;\n\nnamespace Majorsilence.Reporting.RdlReader\n{\n    /// <summary>\n    /// Summary description for DialogAbout.\n    /// </summary>\n    public partial class DialogAbout \n    {\n        public DialogAbout()\n        {\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            tbLicense.Text = Strings.DialogAbout_About;\n\n\t        lVersion.Text = string.Format(Strings.DialogAbout_Version, Assembly.GetExecutingAssembly().GetName().Version);\n        }\n\n        private void lnk_LinkClicked(object sender, LinkLabelLinkClickedEventArgs ea)\n        {\n            try\n            {\n                var lnk = (LinkLabel)sender;\n                lnk.Links[lnk.Links.IndexOf(ea.Link)].Visited = true;\n                System.Diagnostics.Process.Start(lnk.Tag.ToString());\n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show(ex.Message, Strings.DialogAbout_ShowD_Exception, MessageBoxButtons.OK, MessageBoxIcon.Error);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlReader/DialogAbout.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Majorsilence Reporting Reader</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"linkLabel1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>328, 16</value>\n  </data>\n  <data name=\"&gt;&gt;lVersion.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"linkLabel2.Text\" xml:space=\"preserve\">\n    <value>peter@majorsilence.com</value>\n  </data>\n  <data name=\"lVersion.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>104, 24</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"tbLicense.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;tbLicense.Name\" xml:space=\"preserve\">\n    <value>tbLicense</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label4.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;pictureBox1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>196, 278</value>\n  </data>\n  <data name=\"label1.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Microsoft Sans Serif, 12pt, style=Bold</value>\n  </data>\n  <data name=\"&gt;&gt;pictureBox1.Name\" xml:space=\"preserve\">\n    <value>pictureBox1</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Name\" xml:space=\"preserve\">\n    <value>label3</value>\n  </data>\n  <data name=\"&gt;&gt;lVersion.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"pictureBox1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>8</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbLicense.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"label3.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 88</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;pictureBox1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel1.Name\" xml:space=\"preserve\">\n    <value>linkLabel1</value>\n  </data>\n  <data name=\"lVersion.Text\" xml:space=\"preserve\">\n    <value>Version 1.9.6</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>176, 24</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel1.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"pictureBox1.SizeMode\" type=\"System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms\">\n    <value>Zoom</value>\n  </data>\n  <data name=\"&gt;&gt;tbLicense.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>8</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DialogAbout</value>\n  </data>\n  <data name=\"pictureBox1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>8, 8</value>\n  </data>\n  <data name=\"&gt;&gt;pictureBox1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Name\" xml:space=\"preserve\">\n    <value>label4</value>\n  </data>\n  <data name=\"tbLicense.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>448, 136</value>\n  </data>\n  <data name=\"label4.Text\" xml:space=\"preserve\">\n    <value>E-mail:</value>\n  </data>\n  <data name=\"label3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>56, 23</value>\n  </data>\n  <data name=\"linkLabel1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Website:</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <data name=\"&gt;&gt;label4.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label4.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"pictureBox1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>125, 77</value>\n  </data>\n  <data name=\"linkLabel2.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>51, 109</value>\n  </data>\n  <data name=\"tbLicense.ScrollBars\" type=\"System.Windows.Forms.ScrollBars, System.Windows.Forms\">\n    <value>Both</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"linkLabel2.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"lVersion.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>288, 48</value>\n  </data>\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;lVersion.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"linkLabel2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>152, 16</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbLicense.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lVersion.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"linkLabel1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>64, 88</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>240, 16</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>About</value>\n  </data>\n  <data name=\"&gt;&gt;lVersion.Name\" xml:space=\"preserve\">\n    <value>lVersion</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel2.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"label4.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>11, 109</value>\n  </data>\n  <data name=\"pictureBox1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO\n        wwAADsMBx2+oZAAABP5JREFUeF7t3KGNQwEQA9H0X1ZY0JX0A02skyzZJDsjPbzIdF8P0eEYAJ2OAdDp\n        GACdjgHQ6RgAnY4B0OkYAJ2OAdDpGACdjgHQ6RgAnS4ewPvzh3+sczchaQygbJ27CUljAGXr3E1IGgMo\n        W+duQtIYQNk6dxOSxgDK1rmbkDQGULbO3YSkMYCyde4mJI0BlK1zNyFpDKBsnbsJSWMAZevcTUgaAyhb\n        525C0hhA2Tp3E5LGAMrWuZuQNAZQts7dhKQxgLJ17iYkjQGUrXM3IWkMoGyduwlJYwBl69xNSBoDKFvn\n        bkLSGEDZOncTksYAyta5m5A0BlC2zt2EpDGAsnXuJiSNAZStczchaQygbJ27CUljAGXr3E1IGgMoW+du\n        QtIYQNk6dxOSxgDK1rmbkDQGULbO3YSkMYCyde4mJI0BlK1zNyFpDKBsnbsJSWMAZevcTUgaAyhb525C\n        0hhA2Tp3E5LGAMrWuZuQNAZQts7dhKQxgLJ17iYkjQGUrXM3IWkMoGyduwlJYwBl69xNSBoDKFvnbkLS\n        GEDZOncTksYAyta5m5A0BlC2zt2EpDGAsnXuJiSNAZStczchaQygbJ27CUljAGXr3E1IGgMoW+duQtIY\n        QNk6dxOSxgDK1rmbkDQGULbO3YSkMYCyde4mJI0BlK1zNyFpDKBsnbsJSWMAZevcTUgaAyhb525C0hhA\n        2Tp3E5LGAMrWuZuQNAZQts7dhKQxgLJ17iYkjQGUrXM3IWkMoGyduwlJYwBl69xNSBoDKFvnbkLSGEDZ\n        OncTksYAyta5m5A0BlC2zt2EpDGAsnXuJiQtHgDRL8UA6HQMgE7HAOh0DIBOxwDodAyATscA6HQMgE7H\n        AOh0DIBOxwDodAyATscA6HQMgE7HAOh0DIBOxwDodAyATscA6HQMgE7HAOh0DIBOxwDodPEA3DMiyDp3\n        E5LGAMrWuZuQNAZQts7dhKQxgLJ17iYkjQGUrXM3IWkMoGyduwlJYwBl69xNSBoDKFvnbkLSGEDZOncT\n        ksYAyta5m5A0BlC2zt2EpDGAsnXuJiSNAZStczchaQygbJ27CUljAGXr3E1IGgMoW+duQtIYQNk6dxOS\n        xgDK1rmbkDQGULbO3YSkMYCyde4mJI0BlK1zNyFpDKBsnbsJSWMAZevcTUgaAyhb525C0hhA2Tp3E5LG\n        AMrWuZuQNAZQts7dhKQxgLJ17iYkjQGUrXM3IWkMoGyduwlJYwBl69xNSBoDKFvnbkLSGEDZOncTksYA\n        yta5m5A0BlC2zt2EpDGAsnXuJiSNAZStczchaQygbJ27CUljAGXr3E1IGgMoW+duQtIYQNk6dxOSxgDK\n        1rmbkDQGULbO3YSkMYCyde4mJI0BlK1zNyFpDKBsnbsJSWMAZevcTUgaAyhb525C0hhA2Tp3E5LGAMrW\n        uZuQNAZQts7dhKQxgLJ17iYkjQGUrXM3IWkMoGyduwlJYwBl69xNSBoDKFvnbkLSGEDZOncTksYAyta5\n        m5A0BlC2zt2EpDGAsnXuJiSNAZStczchaQygbJ27CUljAGXr3E1IGgMoW+duQtIYQNk6dxOSxgDK1rmb\n        kDQGULbO3YSkMYCyde4mJI0BlK1zNyFpDKBsnbsJSWMAZevcTUgaAyhb525C0uIBEP1SDIBOxwDodAyA\n        TscA6HQMgE7HAOh0DIBOxwDodAyATscA6HQMgA73PF9uUkuXNf/SgwAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"label4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>40, 23</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbLicense.Multiline\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel2.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"linkLabel1.Text\" xml:space=\"preserve\">\n    <value>https://github.com/majorsilence/My-FyiReporting</value>\n  </data>\n  <data name=\"tbLicense.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>12, 128</value>\n  </data>\n  <data name=\"&gt;&gt;linkLabel2.Name\" xml:space=\"preserve\">\n    <value>linkLabel2</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>482, 304</value>\n  </data>\n  <data name=\"label3.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;label3.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"&gt;&gt;label3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlReader/DialogAbout.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bOK.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label1.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Просмотр отчётов</value>\n  </data>\n  <data name=\"lVersion.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"lVersion.Text\" xml:space=\"preserve\">\n    <value>Версия 1.9.6</value>\n  </data>\n  <data name=\"label3.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"label3.Text\" xml:space=\"preserve\">\n    <value>Веб-сайт:</value>\n  </data>\n  <data name=\"label4.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"linkLabel1.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"linkLabel2.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"pictureBox1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO\n        wwAADsMBx2+oZAAABP5JREFUeF7t3KGNQwEQA9H0X1ZY0JX0A02skyzZJDsjPbzIdF8P0eEYAJ2OAdDp\n        GACdjgHQ6RgAnY4B0OkYAJ2OAdDpGACdjgHQ6RgAnS4ewPvzh3+sczchaQygbJ27CUljAGXr3E1IGgMo\n        W+duQtIYQNk6dxOSxgDK1rmbkDQGULbO3YSkMYCyde4mJI0BlK1zNyFpDKBsnbsJSWMAZevcTUgaAyhb\n        525C0hhA2Tp3E5LGAMrWuZuQNAZQts7dhKQxgLJ17iYkjQGUrXM3IWkMoGyduwlJYwBl69xNSBoDKFvn\n        bkLSGEDZOncTksYAyta5m5A0BlC2zt2EpDGAsnXuJiSNAZStczchaQygbJ27CUljAGXr3E1IGgMoW+du\n        QtIYQNk6dxOSxgDK1rmbkDQGULbO3YSkMYCyde4mJI0BlK1zNyFpDKBsnbsJSWMAZevcTUgaAyhb525C\n        0hhA2Tp3E5LGAMrWuZuQNAZQts7dhKQxgLJ17iYkjQGUrXM3IWkMoGyduwlJYwBl69xNSBoDKFvnbkLS\n        GEDZOncTksYAyta5m5A0BlC2zt2EpDGAsnXuJiSNAZStczchaQygbJ27CUljAGXr3E1IGgMoW+duQtIY\n        QNk6dxOSxgDK1rmbkDQGULbO3YSkMYCyde4mJI0BlK1zNyFpDKBsnbsJSWMAZevcTUgaAyhb525C0hhA\n        2Tp3E5LGAMrWuZuQNAZQts7dhKQxgLJ17iYkjQGUrXM3IWkMoGyduwlJYwBl69xNSBoDKFvnbkLSGEDZ\n        OncTksYAyta5m5A0BlC2zt2EpDGAsnXuJiQtHgDRL8UA6HQMgE7HAOh0DIBOxwDodAyATscA6HQMgE7H\n        AOh0DIBOxwDodAyATscA6HQMgE7HAOh0DIBOxwDodAyATscA6HQMgE7HAOh0DIBOxwDodPEA3DMiyDp3\n        E5LGAMrWuZuQNAZQts7dhKQxgLJ17iYkjQGUrXM3IWkMoGyduwlJYwBl69xNSBoDKFvnbkLSGEDZOncT\n        ksYAyta5m5A0BlC2zt2EpDGAsnXuJiSNAZStczchaQygbJ27CUljAGXr3E1IGgMoW+duQtIYQNk6dxOS\n        xgDK1rmbkDQGULbO3YSkMYCyde4mJI0BlK1zNyFpDKBsnbsJSWMAZevcTUgaAyhb525C0hhA2Tp3E5LG\n        AMrWuZuQNAZQts7dhKQxgLJ17iYkjQGUrXM3IWkMoGyduwlJYwBl69xNSBoDKFvnbkLSGEDZOncTksYA\n        yta5m5A0BlC2zt2EpDGAsnXuJiSNAZStczchaQygbJ27CUljAGXr3E1IGgMoW+duQtIYQNk6dxOSxgDK\n        1rmbkDQGULbO3YSkMYCyde4mJI0BlK1zNyFpDKBsnbsJSWMAZevcTUgaAyhb525C0hhA2Tp3E5LGAMrW\n        uZuQNAZQts7dhKQxgLJ17iYkjQGUrXM3IWkMoGyduwlJYwBl69xNSBoDKFvnbkLSGEDZOncTksYAyta5\n        m5A0BlC2zt2EpDGAsnXuJiSNAZStczchaQygbJ27CUljAGXr3E1IGgMoW+duQtIYQNk6dxOSxgDK1rmb\n        kDQGULbO3YSkMYCyde4mJI0BlK1zNyFpDKBsnbsJSWMAZevcTUgaAyhb525C0uIBEP1SDIBOxwDodAyA\n        TscA6HQMgE7HAOh0DIBOxwDodAyATscA6HQMgA73PF9uUkuXNf/SgwAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"pictureBox1.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"$this.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>О программе</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlReader/MDIChild.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlReader\n{\n    public partial class MDIChild : Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tprivate Majorsilence.Reporting.RdlViewer.RdlViewer rdlViewer1;\n\n\t\t\n\t\t#endregion\n\n\t\t\n\t}\n}\n"
  },
  {
    "path": "RdlReader/MDIChild.cs",
    "content": "\nusing System;\nusing System.Drawing;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing System.Data;\nusing System.Drawing.Printing;\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlViewer;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.RdlReader\n{\n    /// <summary>\n    /// RdlReader is a application for displaying reports based on RDL.\n    /// </summary>\n    public partial class MDIChild \n    {\n\n\n        public MDIChild(int width, int height)\n        {\n            this.rdlViewer1 = new Majorsilence.Reporting.RdlViewer.RdlViewer();\n            this.SuspendLayout();\n            // \n            // rdlViewer1\n            // \n            this.rdlViewer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.rdlViewer1.Location = new System.Drawing.Point(0, 0);\n            this.rdlViewer1.Name = \"rdlViewer1\";\n            this.rdlViewer1.Size = new System.Drawing.Size(width, height);\n            this.rdlViewer1.TabIndex = 0;\n            // \n            // RdlReader\n            // \n            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);\n            this.ClientSize = new System.Drawing.Size(width, height);\n            this.Controls.Add(this.rdlViewer1);\n            this.Name = \"\";\n            this.Text = \"\";\n            this.ResumeLayout(false);\n        }\n\n        /// <summary>\n        /// The RDL file that should be displayed.\n        /// </summary>\n        public Uri SourceFile\n        {\n            get { return this.rdlViewer1.SourceFile; }\n        }\n\n        public async Task SetSourceFile(Uri file)\n        {\n            await this.rdlViewer1.SetSourceFile(file);\n            this.rdlViewer1.Refresh();\t\t// force the repaint\n        }\n\n        /// <summary>\n        /// Gets or sets the report parameters. Each parameter should be separated with an & character.\n        /// </summary>\n        /// <value>\n        /// The parameters.\n        /// </value>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string Parameters\n        {\n            get { return this.rdlViewer1.Parameters; }\n            set\n            {\n                this.rdlViewer1.Parameters = value;\n            }\n        }\n\n\n        public RdlViewer.RdlViewer Viewer\n        {\n            get { return this.rdlViewer1; }\n        }\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MDIChild));\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// MDIChild\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Name = \"MDIChild\";\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n    }\n}\n"
  },
  {
    "path": "RdlReader/MDIChild.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>284, 261</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>MDIChild</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlReader/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace RdlReader.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"RdlReader.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap document_open {\n            get {\n                object obj = ResourceManager.GetObject(\"document_open\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap document_print {\n            get {\n                object obj = ResourceManager.GetObject(\"document_print\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap document_save {\n            get {\n                object obj = ResourceManager.GetObject(\"document_save\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlReader/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"document_open\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\document-open.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"document_print\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\document-print.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"document_save\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\document-save.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlReader/RdlReader.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlReader\n{\n\tpublic partial class RdlReader : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tprivate System.ComponentModel.Container components = null;\nprivate MDIChild printChild=null;\n\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RdlReader));\n            this.DoubleBuffered = true;\n\t\t\tthis.menuStrip1 = new System.Windows.Forms.MenuStrip();\n\t\t\tthis.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.printToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.recentFilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.selectionToolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.findToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.zoomToToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.actualSizeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.fitPageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.fitWidthToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();\n\t\t\tthis.pageLayoutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.singlePageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.continuousToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.facingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.continuousFacingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.windowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.cascadeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.tileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.horizontallyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.verticallyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.closeAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n\t\t\tthis.toolStrip1 = new System.Windows.Forms.ToolStrip();\n\t\t\tthis.toolStripButtonOpen = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.toolStripButtonSave = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.toolStripButtonPrint = new System.Windows.Forms.ToolStripButton();\n\t\t\tthis.menuStrip1.SuspendLayout();\n\t\t\tthis.toolStrip1.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// menuStrip1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.menuStrip1, \"menuStrip1\");\n\t\t\tthis.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.fileToolStripMenuItem,\n            this.editToolStripMenuItem,\n            this.viewToolStripMenuItem,\n            this.windowToolStripMenuItem,\n            this.helpToolStripMenuItem});\n\t\t\tthis.menuStrip1.MdiWindowListItem = this.windowToolStripMenuItem;\n\t\t\tthis.menuStrip1.Name = \"menuStrip1\";\n\t\t\t// \n\t\t\t// fileToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.fileToolStripMenuItem, \"fileToolStripMenuItem\");\n\t\t\tthis.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.openToolStripMenuItem,\n            this.closeToolStripMenuItem,\n            this.toolStripSeparator1,\n            this.saveAsToolStripMenuItem,\n            this.printToolStripMenuItem,\n            this.toolStripSeparator2,\n            this.recentFilesToolStripMenuItem,\n            this.toolStripSeparator3,\n            this.exitToolStripMenuItem});\n\t\t\tthis.fileToolStripMenuItem.Name = \"fileToolStripMenuItem\";\n\t\t\t// \n\t\t\t// openToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.openToolStripMenuItem, \"openToolStripMenuItem\");\n\t\t\tthis.openToolStripMenuItem.Name = \"openToolStripMenuItem\";\n\t\t\tthis.openToolStripMenuItem.Click += new System.EventHandler(this.menuFileOpen_Click);\n\t\t\t// \n\t\t\t// closeToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.closeToolStripMenuItem, \"closeToolStripMenuItem\");\n\t\t\tthis.closeToolStripMenuItem.Name = \"closeToolStripMenuItem\";\n\t\t\tthis.closeToolStripMenuItem.Click += new System.EventHandler(this.menuFileClose_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripSeparator1, \"toolStripSeparator1\");\n\t\t\tthis.toolStripSeparator1.Name = \"toolStripSeparator1\";\n\t\t\t// \n\t\t\t// saveAsToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.saveAsToolStripMenuItem, \"saveAsToolStripMenuItem\");\n\t\t\tthis.saveAsToolStripMenuItem.Name = \"saveAsToolStripMenuItem\";\n\t\t\tthis.saveAsToolStripMenuItem.Click += new System.EventHandler(this.menuFileSaveAs_Click);\n\t\t\t// \n\t\t\t// printToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.printToolStripMenuItem, \"printToolStripMenuItem\");\n\t\t\tthis.printToolStripMenuItem.Name = \"printToolStripMenuItem\";\n\t\t\tthis.printToolStripMenuItem.Click += new System.EventHandler(this.menuFilePrint_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator2\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripSeparator2, \"toolStripSeparator2\");\n\t\t\tthis.toolStripSeparator2.Name = \"toolStripSeparator2\";\n\t\t\t// \n\t\t\t// recentFilesToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.recentFilesToolStripMenuItem, \"recentFilesToolStripMenuItem\");\n\t\t\tthis.recentFilesToolStripMenuItem.Name = \"recentFilesToolStripMenuItem\";\n\t\t\t// \n\t\t\t// toolStripSeparator3\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripSeparator3, \"toolStripSeparator3\");\n\t\t\tthis.toolStripSeparator3.Name = \"toolStripSeparator3\";\n\t\t\t// \n\t\t\t// exitToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.exitToolStripMenuItem, \"exitToolStripMenuItem\");\n\t\t\tthis.exitToolStripMenuItem.Name = \"exitToolStripMenuItem\";\n\t\t\tthis.exitToolStripMenuItem.Click += new System.EventHandler(this.menuFileExit_Click);\n\t\t\t// \n\t\t\t// editToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.editToolStripMenuItem, \"editToolStripMenuItem\");\n\t\t\tthis.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.selectionToolToolStripMenuItem,\n            this.toolStripSeparator4,\n            this.copyToolStripMenuItem,\n            this.toolStripSeparator5,\n            this.findToolStripMenuItem});\n\t\t\tthis.editToolStripMenuItem.Name = \"editToolStripMenuItem\";\n\t\t\t// \n\t\t\t// selectionToolToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.selectionToolToolStripMenuItem, \"selectionToolToolStripMenuItem\");\n\t\t\tthis.selectionToolToolStripMenuItem.Name = \"selectionToolToolStripMenuItem\";\n\t\t\tthis.selectionToolToolStripMenuItem.Click += new System.EventHandler(this.menuSelection_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator4\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripSeparator4, \"toolStripSeparator4\");\n\t\t\tthis.toolStripSeparator4.Name = \"toolStripSeparator4\";\n\t\t\t// \n\t\t\t// copyToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.copyToolStripMenuItem, \"copyToolStripMenuItem\");\n\t\t\tthis.copyToolStripMenuItem.Name = \"copyToolStripMenuItem\";\n\t\t\tthis.copyToolStripMenuItem.Click += new System.EventHandler(this.menuCopy_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator5\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripSeparator5, \"toolStripSeparator5\");\n\t\t\tthis.toolStripSeparator5.Name = \"toolStripSeparator5\";\n\t\t\t// \n\t\t\t// findToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.findToolStripMenuItem, \"findToolStripMenuItem\");\n\t\t\tthis.findToolStripMenuItem.Name = \"findToolStripMenuItem\";\n\t\t\tthis.findToolStripMenuItem.Click += new System.EventHandler(this.menuFind_Click);\n\t\t\t// \n\t\t\t// viewToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.viewToolStripMenuItem, \"viewToolStripMenuItem\");\n\t\t\tthis.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.zoomToToolStripMenuItem,\n            this.actualSizeToolStripMenuItem,\n            this.fitPageToolStripMenuItem,\n            this.fitWidthToolStripMenuItem,\n            this.toolStripSeparator6,\n            this.pageLayoutToolStripMenuItem});\n\t\t\tthis.viewToolStripMenuItem.Name = \"viewToolStripMenuItem\";\n\t\t\t// \n\t\t\t// zoomToToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.zoomToToolStripMenuItem, \"zoomToToolStripMenuItem\");\n\t\t\tthis.zoomToToolStripMenuItem.Name = \"zoomToToolStripMenuItem\";\n\t\t\tthis.zoomToToolStripMenuItem.Click += new System.EventHandler(this.menuPLZoomTo_Click);\n\t\t\t// \n\t\t\t// actualSizeToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.actualSizeToolStripMenuItem, \"actualSizeToolStripMenuItem\");\n\t\t\tthis.actualSizeToolStripMenuItem.Name = \"actualSizeToolStripMenuItem\";\n\t\t\tthis.actualSizeToolStripMenuItem.Click += new System.EventHandler(this.menuPLActualSize_Click);\n\t\t\t// \n\t\t\t// fitPageToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.fitPageToolStripMenuItem, \"fitPageToolStripMenuItem\");\n\t\t\tthis.fitPageToolStripMenuItem.Name = \"fitPageToolStripMenuItem\";\n\t\t\tthis.fitPageToolStripMenuItem.Click += new System.EventHandler(this.menuPLFitPage_Click);\n\t\t\t// \n\t\t\t// fitWidthToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.fitWidthToolStripMenuItem, \"fitWidthToolStripMenuItem\");\n\t\t\tthis.fitWidthToolStripMenuItem.Name = \"fitWidthToolStripMenuItem\";\n\t\t\tthis.fitWidthToolStripMenuItem.Click += new System.EventHandler(this.menuPLFitWidth_Click);\n\t\t\t// \n\t\t\t// toolStripSeparator6\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripSeparator6, \"toolStripSeparator6\");\n\t\t\tthis.toolStripSeparator6.Name = \"toolStripSeparator6\";\n\t\t\t// \n\t\t\t// pageLayoutToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.pageLayoutToolStripMenuItem, \"pageLayoutToolStripMenuItem\");\n\t\t\tthis.pageLayoutToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.singlePageToolStripMenuItem,\n            this.continuousToolStripMenuItem,\n            this.facingToolStripMenuItem,\n            this.continuousFacingToolStripMenuItem});\n\t\t\tthis.pageLayoutToolStripMenuItem.Name = \"pageLayoutToolStripMenuItem\";\n\t\t\t// \n\t\t\t// singlePageToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.singlePageToolStripMenuItem, \"singlePageToolStripMenuItem\");\n\t\t\tthis.singlePageToolStripMenuItem.Name = \"singlePageToolStripMenuItem\";\n\t\t\tthis.singlePageToolStripMenuItem.Click += new System.EventHandler(this.menuPLSinglePage_Click);\n\t\t\t// \n\t\t\t// continuousToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.continuousToolStripMenuItem, \"continuousToolStripMenuItem\");\n\t\t\tthis.continuousToolStripMenuItem.Name = \"continuousToolStripMenuItem\";\n\t\t\tthis.continuousToolStripMenuItem.Click += new System.EventHandler(this.menuPLContinuous_Click);\n\t\t\t// \n\t\t\t// facingToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.facingToolStripMenuItem, \"facingToolStripMenuItem\");\n\t\t\tthis.facingToolStripMenuItem.Name = \"facingToolStripMenuItem\";\n\t\t\tthis.facingToolStripMenuItem.Click += new System.EventHandler(this.menuPLFacing_Click);\n\t\t\t// \n\t\t\t// continuousFacingToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.continuousFacingToolStripMenuItem, \"continuousFacingToolStripMenuItem\");\n\t\t\tthis.continuousFacingToolStripMenuItem.Name = \"continuousFacingToolStripMenuItem\";\n\t\t\tthis.continuousFacingToolStripMenuItem.Click += new System.EventHandler(this.menuPLContinuousFacing_Click);\n\t\t\t// \n\t\t\t// windowToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.windowToolStripMenuItem, \"windowToolStripMenuItem\");\n\t\t\tthis.windowToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.cascadeToolStripMenuItem,\n            this.tileToolStripMenuItem,\n            this.closeAllToolStripMenuItem});\n\t\t\tthis.windowToolStripMenuItem.Name = \"windowToolStripMenuItem\";\n\t\t\t// \n\t\t\t// cascadeToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cascadeToolStripMenuItem, \"cascadeToolStripMenuItem\");\n\t\t\tthis.cascadeToolStripMenuItem.Name = \"cascadeToolStripMenuItem\";\n\t\t\tthis.cascadeToolStripMenuItem.Click += new System.EventHandler(this.menuWndCascade_Click);\n\t\t\t// \n\t\t\t// tileToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tileToolStripMenuItem, \"tileToolStripMenuItem\");\n\t\t\tthis.tileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.horizontallyToolStripMenuItem,\n            this.verticallyToolStripMenuItem});\n\t\t\tthis.tileToolStripMenuItem.Name = \"tileToolStripMenuItem\";\n\t\t\t// \n\t\t\t// horizontallyToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.horizontallyToolStripMenuItem, \"horizontallyToolStripMenuItem\");\n\t\t\tthis.horizontallyToolStripMenuItem.Name = \"horizontallyToolStripMenuItem\";\n\t\t\tthis.horizontallyToolStripMenuItem.Click += new System.EventHandler(this.menuWndTileH_Click);\n\t\t\t// \n\t\t\t// verticallyToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.verticallyToolStripMenuItem, \"verticallyToolStripMenuItem\");\n\t\t\tthis.verticallyToolStripMenuItem.Name = \"verticallyToolStripMenuItem\";\n\t\t\tthis.verticallyToolStripMenuItem.Click += new System.EventHandler(this.menuWndTileV_Click);\n\t\t\t// \n\t\t\t// closeAllToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.closeAllToolStripMenuItem, \"closeAllToolStripMenuItem\");\n\t\t\tthis.closeAllToolStripMenuItem.Name = \"closeAllToolStripMenuItem\";\n\t\t\tthis.closeAllToolStripMenuItem.Click += new System.EventHandler(this.menuWndCloseAll_Click);\n\t\t\t// \n\t\t\t// helpToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.helpToolStripMenuItem, \"helpToolStripMenuItem\");\n\t\t\tthis.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.aboutToolStripMenuItem});\n\t\t\tthis.helpToolStripMenuItem.Name = \"helpToolStripMenuItem\";\n\t\t\t// \n\t\t\t// aboutToolStripMenuItem\n\t\t\t// \n\t\t\tresources.ApplyResources(this.aboutToolStripMenuItem, \"aboutToolStripMenuItem\");\n\t\t\tthis.aboutToolStripMenuItem.Name = \"aboutToolStripMenuItem\";\n\t\t\tthis.aboutToolStripMenuItem.Click += new System.EventHandler(this.menuHelpAbout_Click);\n\t\t\t// \n\t\t\t// toolStrip1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStrip1, \"toolStrip1\");\n\t\t\tthis.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripButtonOpen,\n            this.toolStripButtonSave,\n            this.toolStripButtonPrint});\n\t\t\tthis.toolStrip1.Name = \"toolStrip1\";\n\t\t\t// \n\t\t\t// toolStripButtonOpen\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripButtonOpen, \"toolStripButtonOpen\");\n\t\t\tthis.toolStripButtonOpen.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tthis.toolStripButtonOpen.Image = global::RdlReader.Properties.Resources.document_open;\n\t\t\tthis.toolStripButtonOpen.Name = \"toolStripButtonOpen\";\n\t\t\tthis.toolStripButtonOpen.Click += new System.EventHandler(this.menuFileOpen_Click);\n\t\t\t// \n\t\t\t// toolStripButtonSave\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripButtonSave, \"toolStripButtonSave\");\n\t\t\tthis.toolStripButtonSave.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tthis.toolStripButtonSave.Image = global::RdlReader.Properties.Resources.document_save;\n\t\t\tthis.toolStripButtonSave.Name = \"toolStripButtonSave\";\n\t\t\tthis.toolStripButtonSave.Click += new System.EventHandler(this.menuFileSaveAs_Click);\n\t\t\t// \n\t\t\t// toolStripButtonPrint\n\t\t\t// \n\t\t\tresources.ApplyResources(this.toolStripButtonPrint, \"toolStripButtonPrint\");\n\t\t\tthis.toolStripButtonPrint.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n\t\t\tthis.toolStripButtonPrint.Image = global::RdlReader.Properties.Resources.document_print;\n\t\t\tthis.toolStripButtonPrint.Name = \"toolStripButtonPrint\";\n\t\t\tthis.toolStripButtonPrint.Click += new System.EventHandler(this.menuFilePrint_Click);\n\t\t\t// \n\t\t\t// RdlReader\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.toolStrip1);\n\t\t\tthis.Controls.Add(this.menuStrip1);\n\t\t\tthis.MainMenuStrip = this.menuStrip1;\n\t\t\tthis.Name = \"RdlReader\";\n\t\t\tthis.WindowState = System.Windows.Forms.FormWindowState.Maximized;\n\t\t\tthis.menuStrip1.ResumeLayout(false);\n\t\t\tthis.menuStrip1.PerformLayout();\n\t\t\tthis.toolStrip1.ResumeLayout(false);\n\t\t\tthis.toolStrip1.PerformLayout();\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif (components != null) \n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n        private MenuStrip menuStrip1;\n        private ToolStripMenuItem fileToolStripMenuItem;\n        private ToolStripMenuItem openToolStripMenuItem;\n        private ToolStripMenuItem closeToolStripMenuItem;\n        private ToolStripSeparator toolStripSeparator1;\n        private ToolStripMenuItem saveAsToolStripMenuItem;\n        private ToolStripMenuItem printToolStripMenuItem;\n        private ToolStripSeparator toolStripSeparator2;\n        private ToolStripMenuItem recentFilesToolStripMenuItem;\n        private ToolStripSeparator toolStripSeparator3;\n        private ToolStripMenuItem exitToolStripMenuItem;\n        private ToolStripMenuItem editToolStripMenuItem;\n        private ToolStripMenuItem selectionToolToolStripMenuItem;\n        private ToolStripSeparator toolStripSeparator4;\n        private ToolStripMenuItem copyToolStripMenuItem;\n        private ToolStripSeparator toolStripSeparator5;\n        private ToolStripMenuItem findToolStripMenuItem;\n        private ToolStripMenuItem viewToolStripMenuItem;\n        private ToolStripMenuItem zoomToToolStripMenuItem;\n        private ToolStripMenuItem actualSizeToolStripMenuItem;\n        private ToolStripMenuItem fitPageToolStripMenuItem;\n        private ToolStripMenuItem fitWidthToolStripMenuItem;\n        private ToolStripSeparator toolStripSeparator6;\n        private ToolStripMenuItem singlePageToolStripMenuItem;\n        private ToolStripMenuItem continuousToolStripMenuItem;\n        private ToolStripMenuItem facingToolStripMenuItem;\n        private ToolStripMenuItem pageLayoutToolStripMenuItem;\n        private ToolStripMenuItem continuousFacingToolStripMenuItem;\n        private ToolStripMenuItem windowToolStripMenuItem;\n        private ToolStripMenuItem cascadeToolStripMenuItem;\n        private ToolStripMenuItem tileToolStripMenuItem;\n        private ToolStripMenuItem horizontallyToolStripMenuItem;\n        private ToolStripMenuItem verticallyToolStripMenuItem;\n        private ToolStripMenuItem closeAllToolStripMenuItem;\n        private ToolStripMenuItem helpToolStripMenuItem;\n        private ToolStripMenuItem aboutToolStripMenuItem;\n        private ToolStrip toolStrip1;\n        private ToolStripButton toolStripButtonPrint;\n        private ToolStripButton toolStripButtonOpen;\n        private ToolStripButton toolStripButtonSave;\n\t}\n}\n"
  },
  {
    "path": "RdlReader/RdlReader.cs",
    "content": "\nusing System;\nusing System.Drawing;\nusing System.Collections;\nusing System.Windows.Forms;\nusing System.Drawing.Printing;\nusing System.Xml;\nusing System.IO;\nusing RdlReader.Resources;\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlViewer;\nusing System.Runtime.InteropServices;\nusing System.Collections.Generic;\n\nnamespace Majorsilence.Reporting.RdlReader\n{\n    using System.Diagnostics;\n    using System.Threading.Tasks;\n\n    /// <summary>\n    /// RdlReader is a application for displaying reports based on RDL.\n    /// </summary>\n    public partial class RdlReader : IMessageFilter\n    {\n        static readonly string optFileName = Path.Combine(Majorsilence.Reporting.Rdl.Utility.Paths.MajorsilenceRoamingFolder(), \"readerstate.xml\");\n        SortedList _RecentFiles = null;\n\n        /// <summary>\n        /// Uri, Parameter\n        /// </summary>\n        Dictionary<Uri, String> _CurrentFiles = null;\t\t\t// temporary variable for current files\n        private Rdl.NeedPassword _GetPassword;\n        private string _DataSourceReferencePassword = null;\n\n        public RdlReader() : this(false)\n        {\n        }\n        \n        [Obsolete(\"This constructor was only for Mono compatibility, use RdlReader() instead.\")]\n        public RdlReader(bool mono)\n        {\n            GetStartupState();\n\n            InitializeComponent();\n\n            BuildMenus();\n            // CustomReportItem load \n            RdlEngineConfig.GetCustomReportTypes();\n\n            Application.AddMessageFilter(this);\n\n            this.Closing += new System.ComponentModel.CancelEventHandler(this.RdlReader_Closing);\n            _GetPassword = new Rdl.NeedPassword(this.GetPassword);\n\n            this.Load += RdlReader_Load;\n        }\n\n        public async void RdlReader_Load(object sender, EventArgs e) \n        { \n            // open up the current files if any\n            if (_CurrentFiles != null)\n            {\n                foreach (var dict in _CurrentFiles)\n                {\n                    MDIChild mc = new MDIChild(this.ClientRectangle.Width * 3 / 4, this.ClientRectangle.Height * 3 / 4);\n                    mc.MdiParent = this;\n                    mc.Viewer.GetDataSourceReferencePassword = _GetPassword;\n\n                    await mc.SetSourceFile(dict.Key);\n                    if (dict.Value != string.Empty)\n                    {\n                        mc.Parameters = dict.Value;\n                    }\n\n                    mc.Text = dict.Key.LocalPath;\n\n                    if (_CurrentFiles.Count == 1)\n                    {\n                        mc.WindowState = FormWindowState.Maximized;\n                    }\n\n                    mc.Show();\n\n                }\n                _CurrentFiles = null;\t\t// don't need this any longer\n            }\n\n        }\n        /// <summary>\n        /// Handles mousewheel processing when window under mousewheel doesn't have focus\n        /// </summary>\n        /// <param name=\"m\"></param>\n        /// <returns></returns>\n        public bool PreFilterMessage(ref Message m)\n        {\n            if (m.Msg == 0x20a)\n            {\n                // WM_MOUSEWHEEL, find the control at screen position m.LParam\n                Point pos = new Point(m.LParam.ToInt32() & 0xffff, m.LParam.ToInt32() >> 16);\n                IntPtr hWnd = WindowFromPoint(pos);\n                if (hWnd != IntPtr.Zero && hWnd != m.HWnd && Control.FromHandle(hWnd) != null)\n                {\n                    SendMessage(hWnd, m.Msg, m.WParam, m.LParam);\n                    return true;\n                }\n            }\n            return false;\n        }\n\n        // P/Invoke declarations\n        [DllImport(\"user32.dll\")]\n        private static extern IntPtr WindowFromPoint(Point pt);\n        [DllImport(\"user32.dll\")]\n        private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n\n\n        string GetPassword()\n        {\n            if (_DataSourceReferencePassword != null)\n                return _DataSourceReferencePassword;\n\n            DataSourcePassword dlg = new DataSourcePassword();\n            if (dlg.ShowDialog() == DialogResult.OK)\n                _DataSourceReferencePassword = dlg.PassPhrase;\n\n            return _DataSourceReferencePassword;\n        }\n\n        #region Windows Form Designer generated code\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n\n        #endregion\n\n\n        /// <summary>\n        /// Uri, Parameters\n        /// </summary>\n        private static Dictionary<Uri, String> _startUpFiles;\n\n        private const string SET_DEFAULT_PRINTER = \"Default\";\n\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            string[] args = Environment.GetCommandLineArgs();\n\n            string reportFile = string.Empty;\n            string parameters = string.Empty;\n            string printerName = string.Empty;\n\n            for (int i = 0; i < args.Length; i++)\n            {\n                string argValue = args[i];\n                if (argValue == \"-r\")\n                {\n                    reportFile = args[i + 1];\n                    if (System.IO.Path.GetDirectoryName(reportFile) == string.Empty)\n                    {\n                        // Try to find the file in the current working directory\n                        reportFile = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), System.IO.Path.GetFileName(reportFile));\n                    }\n                }\n                else if (argValue == \"-p\")\n                {\n                    parameters = args[i + 1];\n                }\n                // if we have nothing or key after -print then we have to set printer by default\n                else if (argValue == \"-print\")\n                {\n                    if (args.Length > i + 1 && !args[i + 1].StartsWith(\"-\"))\n                    {\n                        printerName = args[i + 1];\n                    }\n                    else\n                    {\n                        printerName = SET_DEFAULT_PRINTER;\n                    }\n                }\n            }\n\n            if (reportFile == string.Empty)\n            {\n                // keep backwards compatiablity from when it worked with only a filename being passed in\n\n                if (args.Length > 1)\n                {\n                    if (args[1].Length >= 5)\n                    {\n                        reportFile = args[1];\n                        if (System.IO.Path.GetDirectoryName(reportFile) == string.Empty)\n                        {\n                            // Try to find the file in the current working directory\n                            reportFile = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), System.IO.Path.GetFileName(reportFile));\n                        }\n                    }\n                }\n            }\n\n            if (reportFile != string.Empty)\n            {\n                if (File.Exists(reportFile))\n                {\n                    if (!string.IsNullOrWhiteSpace(printerName))\n                    {\n                        // HACK: async\n                        Task.Run(async ()=> await SilentPrint(reportFile, parameters, printerName)).GetAwaiter().GetResult();\n                        return;\n                    }\n\n                    _startUpFiles = new Dictionary<Uri, string>();\n                    _startUpFiles.Add(new Uri(reportFile), parameters);\n                }\n                else\n                {\n                    MessageBox.Show(string.Format(Strings.RdlReader_ShowD_ReportNotLoaded, reportFile), Strings.RdlReader_Show_MyFyiReporting, MessageBoxButtons.OK, MessageBoxIcon.Error);\n                }\n            }\n            \n            Application.EnableVisualStyles();\n            Application.DoEvents();\n            \n            Application.Run(new RdlReader());\n        }\n\n        public static async Task SilentPrint(string reportPath, string parameters, string printerName = null)\n        {\n            var rdlViewer = new Majorsilence.Reporting.RdlViewer.RdlViewer();\n            rdlViewer.Visible = false;\n            await rdlViewer.SetSourceFile(new Uri(reportPath));\n            rdlViewer.Parameters = parameters;\n            await rdlViewer.Rebuild();\n\n            var pd = new PrintDocument();\n            pd.DocumentName = rdlViewer.SourceFile.LocalPath;\n            pd.PrinterSettings.FromPage = 1;\n            pd.PrinterSettings.ToPage = rdlViewer.PageCount;\n            pd.PrinterSettings.MaximumPage = rdlViewer.PageCount;\n            pd.PrinterSettings.MinimumPage = 1;\n            pd.DefaultPageSettings.Landscape = rdlViewer.PageWidth > rdlViewer.PageHeight;\n            pd.PrintController = new StandardPrintController();\n            // convert pt to hundredths of an inch.\n            pd.DefaultPageSettings.PaperSize = new PaperSize(\n                \"\",\n                (int)((rdlViewer.PageWidth / 72.27) * 100),\n                (int)((rdlViewer.PageHeight / 72.27) * 100));\n\n            if (!string.IsNullOrWhiteSpace(printerName) && printerName != SET_DEFAULT_PRINTER)\n            {\n                pd.DefaultPageSettings.PrinterSettings.PrinterName = printerName;\n            }\n\n            try\n            {\n                if (pd.PrinterSettings.PrintRange == PrintRange.Selection)\n                {\n                    pd.PrinterSettings.FromPage = rdlViewer.PageCurrent;\n                }\n\n                await rdlViewer.Print(pd);\n            }\n            catch (Exception ex)\n            {\n#if !DEBUG\n                const string rdlreaderlog = \"RdlReaderLog.txt\";\n                if (!File.Exists(rdlreaderlog))\n                {\n                    File.Create(rdlreaderlog).Dispose();\n                }\n\n                File.AppendAllLines(\n                    rdlreaderlog,\n                    new[] { string.Format(\"[{0}] {1}\", DateTime.Now.ToString(\"dd.MM.yyyy H:mm:ss\"), ex.Message) });\n#endif\n                Debug.WriteLine(Strings.RdlReader_ShowC_PrintError + ex.Message);\n            }\n        }\n\n        private void BuildMenus()\n        {\n            // FILE MENU\n\n            ToolStripMenuItem menuRecentItem = new ToolStripMenuItem(string.Empty);\n            recentFilesToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { menuRecentItem });\n            fileToolStripMenuItem.DropDownOpening += new EventHandler(menuFile_Popup);\n\n            // Intialize the recent file menu\n            RecentFilesMenu();\n            // Edit menu\n            editToolStripMenuItem.DropDownOpening += new EventHandler(this.menuEdit_Popup);\n\n            // VIEW MENU\n\n\n            pageLayoutToolStripMenuItem.DropDownOpening += new EventHandler(this.menuPL_Popup);\n            viewToolStripMenuItem.DropDownOpening += new EventHandler(this.menuView_Popup);\n\n            // Add the Window menu\n            windowToolStripMenuItem.DropDownOpening += new EventHandler(this.menuWnd_Popup);\n\n            // MAIN\n\n            IsMdiContainer = true;\n\n        }\n\n        private void menuFile_Popup(object sender, EventArgs e)\n        {\n            // These menus require an MDIChild in order to work\n            bool bEnable = this.MdiChildren.Length > 0 ? true : false;\n            closeToolStripMenuItem.Enabled = bEnable;\n            saveAsToolStripMenuItem.Enabled = bEnable;\n            printToolStripMenuItem.Enabled = bEnable;\n\n            // Recent File is enabled when there exists some files \n            recentFilesToolStripMenuItem.Enabled = this._RecentFiles.Count <= 0 ? false : true;\n        }\n\n        private void menuFileClose_Click(object sender, EventArgs e)\n        {\n            MDIChild mc = this.ActiveMdiChild as MDIChild;\n            if (mc != null)\n                mc.Close();\n        }\n\n        private void menuFileExit_Click(object sender, EventArgs e)\n        {\n            Environment.Exit(0);\n        }\n\n        private async void menuFileOpen_Click(object sender, EventArgs e)\n        {\n            OpenFileDialog ofd = new OpenFileDialog();\n            ofd.Filter = Strings.RdlReader_menuFileOpen_Click_Filter;\n            ofd.FilterIndex = 1;\n            ofd.CheckFileExists = true;\n            ofd.Multiselect = true;\n            if (ofd.ShowDialog(this) == DialogResult.OK)\n            {\n                foreach (string file in ofd.FileNames)\n                {\n                    await CreateMDIChild(new Uri(file), false);\n                }\n                RecentFilesMenu();\n            }\n        }\n\n        private async void menuRecentItem_Click(object sender, System.EventArgs e)\n        {\n            ToolStripMenuItem m = (ToolStripMenuItem)sender;\n            Uri file = new Uri(m.Text.Substring(2));\n\n            await CreateMDIChild(file, true);\n        }\n\n        // Create an MDI child.   Only creates it if not already open\n        private async Task CreateMDIChild(Uri file, bool bMenuUpdate)\n        {\n            MDIChild mcOpen = null;\n            if (file != null)\n            {\n                foreach (MDIChild mc in this.MdiChildren)\n                {\n                    if (file == mc.SourceFile)\n                    {\t\t\t\t\t\t\t// we found it\n                        mcOpen = mc;\n                        break;\n                    }\n                }\n            }\n            if (mcOpen == null)\n            {\n                MDIChild mc = new MDIChild(this.ClientRectangle.Width * 3 / 4, this.ClientRectangle.Height * 3 / 4);\n                mc.MdiParent = this;\n                mc.Viewer.GetDataSourceReferencePassword = _GetPassword;\n                await mc.SetSourceFile(file);\n                mc.Text = file == null ? string.Empty : file.LocalPath;\n                NoteRecentFiles(file, bMenuUpdate);\n                mc.Show();\n            }\n            else\n                mcOpen.Activate();\n        }\n\n        private async void menuFilePrint_Click(object sender, EventArgs e)\n        {\n            MDIChild mc = this.ActiveMdiChild as MDIChild;\n            if (mc == null)\n                return;\n            if (printChild != null)\t\t\t// already printing\n            {\n                MessageBox.Show(Strings.RdlReader_ShowC_PrintOneFile);\n                return;\n            }\n\n            printChild = mc;\n\n            PrintDocument pd = new PrintDocument();\n            pd.DocumentName = mc.SourceFile.LocalPath;\n            pd.PrinterSettings.FromPage = 1;\n            pd.PrinterSettings.ToPage = mc.Viewer.PageCount;\n            pd.PrinterSettings.MaximumPage = mc.Viewer.PageCount;\n            pd.PrinterSettings.MinimumPage = 1;\n            if (mc.Viewer.PageWidth > mc.Viewer.PageHeight)\n                pd.DefaultPageSettings.Landscape = true;\n            else\n                pd.DefaultPageSettings.Landscape = false;\n\n            PrintDialog dlg = new PrintDialog();\n            dlg.Document = pd;\n            dlg.AllowSelection = true;\n            dlg.AllowSomePages = true;\n            if (dlg.ShowDialog() == DialogResult.OK)\n            {\n                try\n                {\n                    if (pd.PrinterSettings.PrintRange == PrintRange.Selection)\n                    {\n                        pd.PrinterSettings.FromPage = mc.Viewer.PageCurrent;\n                    }\n                    await mc.Viewer.Print(pd);\n                }\n                catch (Exception ex)\n                {\n                    MessageBox.Show(Strings.RdlReader_ShowC_PrintError + ex.Message);\n                }\n            }\n            printChild = null;\n        }\n\n        private async void menuFileSaveAs_Click(object sender, EventArgs e)\n        {\n            MDIChild mc = this.ActiveMdiChild as MDIChild;\n            if (mc == null)\n                return;\n\n            SaveFileDialog sfd = new SaveFileDialog();\n            sfd.Filter = Strings.RdlReader_menuFileSaveAs_Click_FilesFilter;\n            sfd.FilterIndex = 1;\n\n            Uri file = mc.SourceFile;\n\n            if (file != null)\n            {\n                int index = file.LocalPath.LastIndexOf('.');\n                if (index > 1)\n                    sfd.FileName = file.LocalPath.Substring(0, index) + \".pdf\";\n                else\n                    sfd.FileName = \"*.pdf\";\n\n            }\n            else\n                sfd.FileName = \"*.pdf\";\n\n            if (sfd.ShowDialog(this) != DialogResult.OK)\n                return;\n\n            // save the report in a rendered format \n            string ext = null;\n            int i = sfd.FileName.LastIndexOf('.');\n            if (i < 1)\n                ext = string.Empty;\n            else\n                ext = sfd.FileName.Substring(i + 1).ToLower();\n\n            OutputPresentationType type = OutputPresentationType.Internal;\n            switch (ext)\n            {\n                case \"pdf\":\n                    type = OutputPresentationType.PDF;\n                    break;\n                case \"xml\":\n                    type = OutputPresentationType.XML;\n                    break;\n                case \"html\":\n                case \"htm\":\n                    type = OutputPresentationType.HTML;\n                    break;\n                case \"csv\":\n                    type = OutputPresentationType.CSV;\n                    break;\n                case \"rtf\":\n                    type = OutputPresentationType.RTF;\n                    break;\n                case \"mht\":\n                case \"mhtml\":\n                    type = OutputPresentationType.MHTML;\n                    break;\n                case \"xlsx\":\n                    type = sfd.FilterIndex == 7 ? OutputPresentationType.ExcelTableOnly : OutputPresentationType.Excel2007;\n                    break;\n                case \"tif\":\n                case \"tiff\":\n                    type = OutputPresentationType.TIF;\n                    break;\n                default:\n                    MessageBox.Show(this,\n                        String.Format(Strings.RdlReader_SaveG_NotValidFileType, sfd.FileName), Strings.RdlReader_SaveG_SaveAsError,\n                        MessageBoxButtons.OK, MessageBoxIcon.Error);\n                    break;\n            }\n\n            if (type == OutputPresentationType.TIF)\n            {\n                DialogResult dr = MessageBox.Show(this, Strings.RdlReader_ShowF_WantSaveColorsInTIF, Strings.RdlReader_ShowF_Export, MessageBoxButtons.YesNoCancel);\n                if (dr == DialogResult.No)\n                    type = OutputPresentationType.TIFBW;\n                else if (dr == DialogResult.Cancel)\n                    return;\n            }\n\n            if (type != OutputPresentationType.Internal)\n            {\n                try { await mc.Viewer.SaveAs(sfd.FileName, type); }\n                catch (Exception ex)\n                {\n                    MessageBox.Show(this,\n                        ex.Message, Strings.RdlReader_SaveG_SaveAsError,\n                        MessageBoxButtons.OK, MessageBoxIcon.Error);\n                }\n            }\n\n            return;\n        }\n\n        private void menuHelpAbout_Click(object sender, System.EventArgs ea)\n        {\n            DialogAbout dlg = new DialogAbout();\n            dlg.ShowDialog();\n        }\n\n        private void menuCopy_Click(object sender, System.EventArgs ea)\n        {\n            MDIChild mc = this.ActiveMdiChild as MDIChild;\n            if (mc == null || !mc.Viewer.CanCopy)\n                return;\n\n            mc.Viewer.Copy();\n        }\n\n        private async void menuFind_Click(object sender, System.EventArgs ea)\n        {\n            MDIChild mc = this.ActiveMdiChild as MDIChild;\n            if (mc == null)\n                return;\n\n            if (!mc.Viewer.ShowFindPanel)\n                mc.Viewer.ShowFindPanel = true;\n            await mc.Viewer.FindNext();\n        }\n\n        private void menuSelection_Click(object sender, System.EventArgs ea)\n        {\n            MDIChild mc = this.ActiveMdiChild as MDIChild;\n            if (mc == null)\n                return;\n\n            mc.Viewer.SelectTool = !mc.Viewer.SelectTool;\n        }\n        private void menuEdit_Popup(object sender, EventArgs e)\n        {\n            // These menus require an MDIChild in order to work\n            bool bEnable = this.MdiChildren.Length > 0 ? true : false;\n            copyToolStripMenuItem.Enabled = bEnable;\n            findToolStripMenuItem.Enabled = bEnable;\n            selectionToolToolStripMenuItem.Enabled = bEnable;\n            if (!bEnable)\n                return;\n\n            MDIChild mc = this.ActiveMdiChild as MDIChild;\n            copyToolStripMenuItem.Enabled = mc.Viewer.CanCopy;\n            selectionToolToolStripMenuItem.Checked = mc.Viewer.SelectTool;\n        }\n        private void menuView_Popup(object sender, EventArgs e)\n        {\n            // These menus require an MDIChild in order to work\n            bool bEnable = this.MdiChildren.Length > 0 ? true : false;\n            zoomToToolStripMenuItem.Enabled = bEnable;\n            actualSizeToolStripMenuItem.Enabled = bEnable;\n            fitPageToolStripMenuItem.Enabled = bEnable;\n            fitWidthToolStripMenuItem.Enabled = bEnable;\n            pageLayoutToolStripMenuItem.Enabled = bEnable;\n            if (!bEnable)\n                return;\n\n            // Now handle checking the correct sizing menu\n            MDIChild mc = this.ActiveMdiChild as MDIChild;\n            actualSizeToolStripMenuItem.Checked = fitPageToolStripMenuItem.Checked = fitWidthToolStripMenuItem.Checked = false;\n\n            if (mc.Viewer.ZoomMode == ZoomEnum.FitWidth)\n                fitWidthToolStripMenuItem.Checked = true;\n            else if (mc.Viewer.ZoomMode == ZoomEnum.FitPage)\n                fitPageToolStripMenuItem.Checked = true;\n            else if (mc.Viewer.Zoom == 1)\n                actualSizeToolStripMenuItem.Checked = true;\n\n        }\n\n        private void menuPL_Popup(object sender, EventArgs e)\n        {\n            MDIChild mc = this.ActiveMdiChild as MDIChild;\n            if (mc == null)\n                return;\n\n            singlePageToolStripMenuItem.Checked = continuousToolStripMenuItem.Checked =\n                    facingToolStripMenuItem.Checked = continuousFacingToolStripMenuItem.Checked = false; ;\n\n            switch (mc.Viewer.ScrollMode)\n            {\n                case ScrollModeEnum.Continuous:\n                    continuousToolStripMenuItem.Checked = true;\n                    break;\n                case ScrollModeEnum.ContinuousFacing:\n                    continuousFacingToolStripMenuItem.Checked = true;\n                    break;\n                case ScrollModeEnum.Facing:\n                    facingToolStripMenuItem.Checked = true;\n                    break;\n                case ScrollModeEnum.SinglePage:\n                    singlePageToolStripMenuItem.Checked = true;\n                    break;\n            }\n        }\n\n        private void menuPLZoomTo_Click(object sender, EventArgs e)\n        {\n            MDIChild mc = this.ActiveMdiChild as MDIChild;\n            if (mc == null)\n                return;\n\n            ZoomTo dlg = new ZoomTo(mc.Viewer);\n            dlg.StartPosition = FormStartPosition.CenterParent;\n            dlg.ShowDialog();\n        }\n\n        private void menuPLActualSize_Click(object sender, EventArgs e)\n        {\n            MDIChild mc = this.ActiveMdiChild as MDIChild;\n            if (mc != null)\n                mc.Viewer.Zoom = 1;\n        }\n\n        private void menuPLFitPage_Click(object sender, EventArgs e)\n        {\n            MDIChild mc = this.ActiveMdiChild as MDIChild;\n            if (mc != null)\n                mc.Viewer.ZoomMode = ZoomEnum.FitPage;\n        }\n\n        private void menuPLFitWidth_Click(object sender, EventArgs e)\n        {\n            MDIChild mc = this.ActiveMdiChild as MDIChild;\n            if (mc != null)\n                mc.Viewer.ZoomMode = ZoomEnum.FitWidth;\n        }\n\n        private void menuPLSinglePage_Click(object sender, EventArgs e)\n        {\n            MDIChild mc = this.ActiveMdiChild as MDIChild;\n            if (mc != null)\n                mc.Viewer.ScrollMode = ScrollModeEnum.SinglePage;\n        }\n\n        private void menuPLContinuous_Click(object sender, EventArgs e)\n        {\n            MDIChild mc = this.ActiveMdiChild as MDIChild;\n            if (mc != null)\n                mc.Viewer.ScrollMode = ScrollModeEnum.Continuous;\n        }\n\n        private void menuPLFacing_Click(object sender, EventArgs e)\n        {\n            MDIChild mc = this.ActiveMdiChild as MDIChild;\n            if (mc != null)\n                mc.Viewer.ScrollMode = ScrollModeEnum.Facing;\n        }\n\n        private void menuPLContinuousFacing_Click(object sender, EventArgs e)\n        {\n            MDIChild mc = this.ActiveMdiChild as MDIChild;\n            if (mc != null)\n                mc.Viewer.ScrollMode = ScrollModeEnum.ContinuousFacing;\n        }\n\n        private void menuWnd_Popup(object sender, EventArgs e)\n        {\n            // These menus require an MDIChild in order to work\n            bool bEnable = this.MdiChildren.Length > 0 ? true : false;\n\n            cascadeToolStripMenuItem.Enabled = bEnable;\n            tileToolStripMenuItem.Enabled = bEnable;\n            closeAllToolStripMenuItem.Enabled = bEnable;\n        }\n\n        private void menuWndCascade_Click(object sender, EventArgs e)\n        {\n            this.LayoutMdi(MdiLayout.Cascade);\n        }\n\n        private void menuWndCloseAll_Click(object sender, EventArgs e)\n        {\n            foreach (Form f in this.MdiChildren)\n            {\n                f.Close();\n            }\n        }\n\n        private void menuWndTileH_Click(object sender, EventArgs e)\n        {\n            this.LayoutMdi(MdiLayout.TileHorizontal);\n        }\n\n        private void menuWndTileV_Click(object sender, EventArgs e)\n        {\n            this.LayoutMdi(MdiLayout.TileVertical);\n        }\n\n        private void RdlReader_Closing(object sender, System.ComponentModel.CancelEventArgs e)\n        {\n            SaveStartupState();\n        }\n\n        private void NoteRecentFiles(Uri name, bool bResetMenu)\n        {\n            if (name == null)\n            {\n                return;\n            }\n\n            if (_RecentFiles.ContainsValue(name.LocalPath))\n            {\t// need to move it to top of list; so remove old one\n                int loc = _RecentFiles.IndexOfValue(name.LocalPath);\n                _RecentFiles.RemoveAt(loc);\n            }\n            if (_RecentFiles.Count >= 5)\n            {\n                _RecentFiles.RemoveAt(0);\t// remove the first entry\n            }\n            _RecentFiles.Add(DateTime.Now, name.LocalPath);\n            if (bResetMenu)\n                RecentFilesMenu();\n            return;\n        }\n\n        private void RecentFilesMenu()\n        {\n\n            recentFilesToolStripMenuItem.DropDownItems.Clear();\n            int mi = 1;\n            for (int i = _RecentFiles.Count - 1; i >= 0; i--)\n            {\n                string menuText = string.Format(\"&{0} {1}\", mi++, (string)(_RecentFiles.GetValueList()[i]));\n                ToolStripMenuItem m = new ToolStripMenuItem(menuText);\n                m.Click += new EventHandler(this.menuRecentItem_Click);\n                recentFilesToolStripMenuItem.DropDownItems.Add(m);\n            }\n        }\n\n        private void GetStartupState()\n        {\n            _RecentFiles = new SortedList();\n            _CurrentFiles = new Dictionary<Uri, string>();\n\n            if (_startUpFiles != null)\n            {\n                foreach (var dict in _startUpFiles)\n                {\n                    _CurrentFiles.Add(dict.Key, dict.Value);\n                }\n            }\n\n            try\n            {\n                XmlDocument xDoc = new XmlDocument();\n                xDoc.PreserveWhitespace = false;\n                xDoc.Load(optFileName);\n                XmlNode xNode;\n                xNode = xDoc.SelectSingleNode(\"//readerstate\");\n\n                // Loop thru all the child nodes\n                foreach (XmlNode xNodeLoop in xNode.ChildNodes)\n                {\n                    switch (xNodeLoop.Name)\n                    {\n                        case \"RecentFiles\":\n                            DateTime now = DateTime.Now;\n                            now = now.Subtract(new TimeSpan(0, 1, 0, 0, 0));\t// subtract an hour\n                            foreach (XmlNode xN in xNodeLoop.ChildNodes)\n                            {\n                                string file = xN.InnerText.Trim();\n                                if (File.Exists(file))\t\t\t// only add it if it exists\n                                {\n                                    _RecentFiles.Add(now, file);\n                                    now = now.AddSeconds(1);\n                                }\n                            }\n                            break;\n                        case \"CurrentFiles\":\n                            if (_startUpFiles != null)\n                                break;                          // not add if startUpFiles exists                        \n                            foreach (XmlNode xN in xNodeLoop.ChildNodes)\n                            {\n                                string file = xN.InnerText.Trim();\n                                if (File.Exists(file))\t\t\t// only add it if it exists\n                                {\n                                    if (_CurrentFiles.ContainsKey(new Uri(file)) == false)\n                                    {\n                                        _CurrentFiles.Add(new Uri(file), string.Empty);\n                                    }\n                                }\n                            }\n                            break;\n                        default:\n                            break;\n                    }\n                }\n            }\n            catch\n            {\t\t// Didn't sucessfully get the startup state but don't really care\n            }\n\n            return;\n        }\n\n        private void SaveStartupState()\n        {\n            try\n            {\n                XmlDocument xDoc = new XmlDocument();\n                XmlProcessingInstruction xPI;\n                xPI = xDoc.CreateProcessingInstruction(\"xml\", \"version='1.0' encoding='UTF-8'\");\n                xDoc.AppendChild(xPI);\n\n                XmlNode xDS = xDoc.CreateElement(\"readerstate\");\n                xDoc.AppendChild(xDS);\n\n                XmlNode xN;\n                // Loop thru the current files\n                XmlNode xFiles = xDoc.CreateElement(\"CurrentFiles\");\n                xDS.AppendChild(xFiles);\n                foreach (MDIChild mc in this.MdiChildren)\n                {\n                    Uri file = mc.SourceFile;\n                    if (file == null)\n                        continue;\n                    xN = xDoc.CreateElement(\"file\");\n                    xN.InnerText = file.LocalPath;\n                    xFiles.AppendChild(xN);\n                }\n\n                // Loop thru recent files list\n                xFiles = xDoc.CreateElement(\"RecentFiles\");\n                xDS.AppendChild(xFiles);\n                foreach (string f in _RecentFiles.Values)\n                {\n                    xN = xDoc.CreateElement(\"file\");\n                    xN.InnerText = f;\n                    xFiles.AppendChild(xN);\n                }\n\n                Directory.CreateDirectory(Path.GetDirectoryName(optFileName)); //Create directory if not exist\n                xDoc.Save(optFileName);\n            }\n            catch { }\t\t// still want to leave even on error\n\n            return;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlReader/RdlReader.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\t<PropertyGroup>\n\t\t<ProjectType>Local</ProjectType>\n\t\t<ApplicationIcon>App.ico</ApplicationIcon>\n\t\t<DelaySign>false</DelaySign>\n\t\t<OutputType>WinExe</OutputType>\n\t\t<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>\n\t\t<UseWindowsForms>true</UseWindowsForms>\n\t\t<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>\n\t\t<EnableDefaultEmbeddedResourceItems>false</EnableDefaultEmbeddedResourceItems>\n\t\t<Configurations>Debug;Release;Debug-DrawingCompat</Configurations>\n\t\t<TargetFrameworks>net48;net8.0-windows;net10.0-windows</TargetFrameworks>\n\t\t<WarningsAsErrors>4014</WarningsAsErrors>\n\t\t<ApplicationHighDpiMode>SystemAware</ApplicationHighDpiMode>\n\t\t<ApplicationManifest>app.manifest</ApplicationManifest>\n        <GenerateResourceUsePreserializedResources>true</GenerateResourceUsePreserializedResources>\n\t</PropertyGroup>\n\t<ItemGroup>\n\t\t<Reference Update=\"System\">\n\t\t\t<Name>System</Name>\n\t\t</Reference>\n\t\t<Reference Update=\"System.Data\">\n\t\t\t<Name>System.Data</Name>\n\t\t</Reference>\n\t\t<Reference Update=\"System.Drawing\">\n\t\t\t<Name>System.Drawing</Name>\n\t\t</Reference>\n\t\t<Reference Update=\"System.Xml\">\n\t\t\t<Name>System.XML</Name>\n\t\t</Reference>\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<EmbeddedResource Include=\"DialogAbout.resx\">\n\t\t\t<DependentUpon>DialogAbout.cs</DependentUpon>\n\t\t\t<SubType>Designer</SubType>\n\t\t</EmbeddedResource>\n\t\t<EmbeddedResource Include=\"DialogAbout.ru-RU.resx\">\n\t\t\t<DependentUpon>DialogAbout.cs</DependentUpon>\n\t\t</EmbeddedResource>\n\t\t<EmbeddedResource Include=\"MDIChild.resx\">\n\t\t\t<DependentUpon>MDIChild.cs</DependentUpon>\n\t\t\t<SubType>Designer</SubType>\n\t\t</EmbeddedResource>\n\t\t<EmbeddedResource Include=\"Properties\\Resources.resx\">\n\t\t\t<Generator>ResXFileCodeGenerator</Generator>\n\t\t\t<LastGenOutput>Resources.Designer.cs</LastGenOutput>\n\t\t</EmbeddedResource>\n\t\t<EmbeddedResource Include=\"RdlReader.fr.resx\">\n            <DependentUpon>RdlReader.cs</DependentUpon>\n        </EmbeddedResource>\n\t\t<EmbeddedResource Include=\"RdlReader.resx\">\n\t\t\t<DependentUpon>RdlReader.cs</DependentUpon>\n\t\t\t<SubType>Designer</SubType>\n\t\t</EmbeddedResource>\n\t\t<EmbeddedResource Include=\"RdlReader.ru-RU.resx\">\n\t\t\t<DependentUpon>RdlReader.cs</DependentUpon>\n\t\t</EmbeddedResource>\n\t\t<EmbeddedResource Include=\"ZoomTo.resx\">\n\t\t\t<DependentUpon>ZoomTo.cs</DependentUpon>\n\t\t\t<SubType>Designer</SubType>\n\t\t</EmbeddedResource>\n\t\t<EmbeddedResource Include=\"Resources\\Strings.resx\">\n\t\t\t<DependentUpon>Strings.Designer.cs</DependentUpon>\n\t\t\t<SubType>Designer</SubType>\n\t\t</EmbeddedResource>\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<Content Include=\"App.ico\" />\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<ProjectReference Include=\"..\\RdlCri\\Majorsilence.Reporting.RdlCri.csproj\" />\n\t\t<ProjectReference Include=\"..\\RdlEngine\\Majorsilence.Reporting.RdlEngine.csproj\" />\n\t\t<ProjectReference Include=\"..\\RdlViewer\\RdlViewer.csproj\" />\n\t</ItemGroup>\n\t<ItemGroup>\n\t  <Compile Update=\"Properties\\Resources.Designer.cs\">\n\t    <DesignTime>True</DesignTime>\n\t    <AutoGen>True</AutoGen>\n\t    <DependentUpon>Resources.resx</DependentUpon>\n\t  </Compile>\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<PackageReference Include=\"Microsoft.Data.SqlClient\" />\n\t\t<PackageReference Include=\"Microsoft.Data.Sqlite\" />\n\t\t<PackageReference Include=\"MySql.Data\" />\n\t\t<PackageReference Include=\"Npgsql\" />\n\t</ItemGroup>\n    <ItemGroup Condition=\"'$(TargetFramework)' == 'net48'\">\n        <PackageReference Include=\"System.Resources.Extensions\" />\n    </ItemGroup>\n</Project>"
  },
  {
    "path": "RdlReader/RdlReader.fr.resx",
    "content": "﻿<root>\n    <resheader name=\"resmimetype\">\n        <value>text/microsoft-resx</value>\n    </resheader>\n    <resheader name=\"version\">\n        <value>1.3</value>\n    </resheader>\n    <resheader name=\"reader\">\n        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n    </resheader>\n    <resheader name=\"writer\">\n        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n    </resheader>\n    <data name=\"$this.Text\" xml:space=\"preserve\">\n        <value>Lecteur de rapports Majorsilence</value>\n    </data>\n    <data name=\"aboutToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Environ</value>\n    </data>\n    <data name=\"actualSizeToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Taille réelle</value>\n    </data>\n    <data name=\"closeAllToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Tout fermer</value>\n    </data>\n    <data name=\"closeToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Fermer</value>\n    </data>\n    <data name=\"continuousFacingToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Surfaçage continu</value>\n    </data>\n    <data name=\"continuousToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Continu</value>\n    </data>\n    <data name=\"copyToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Copier</value>\n    </data>\n    <data name=\"editToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Éditer</value>\n    </data>\n    <data name=\"exitToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Sortie</value>\n    </data>\n    <data name=\"facingToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Parement</value>\n    </data>\n    <data name=\"fileToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Lime</value>\n    </data>\n    <data name=\"findToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Trouver</value>\n    </data>\n    <data name=\"fitPageToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Ajuster la page</value>\n    </data>\n    <data name=\"fitWidthToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Largeur d'ajustement</value>\n    </data>\n    <data name=\"helpToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Aide</value>\n    </data>\n    <data name=\"horizontallyToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Horizontalement</value>\n    </data>\n    <data name=\"openToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Ouvrir</value>\n    </data>\n    <data name=\"pageLayoutToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Mise en page</value>\n    </data>\n    <data name=\"printToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Imprimer...</value>\n    </data>\n    <data name=\"recentFilesToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Fichiers récents</value>\n    </data>\n    <data name=\"saveAsToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Enregistrer sous...</value>\n    </data>\n    <data name=\"selectionToolToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Outil de sélection</value>\n    </data>\n    <data name=\"singlePageToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Page unique</value>\n    </data>\n    <data name=\"tileToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Carreau</value>\n    </data>\n    <data name=\"toolStripButtonOpen.Text\" xml:space=\"preserve\">\n        <value>Ouvrir le fichier</value>\n    </data>\n    <data name=\"toolStripButtonPrint.Text\" xml:space=\"preserve\">\n        <value>Imprimer</value>\n    </data>\n    <data name=\"toolStripButtonSave.Text\" xml:space=\"preserve\">\n        <value>Enregistrer le fichier</value>\n    </data>\n    <data name=\"verticallyToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Verticalement</value>\n    </data>\n    <data name=\"viewToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Vue</value>\n    </data>\n    <data name=\"windowToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Fenêtre</value>\n    </data>\n    <data name=\"zoomToToolStripMenuItem.Text\" xml:space=\"preserve\">\n        <value>Zoom vers...</value>\n    </data>\n</root>"
  },
  {
    "path": "RdlReader/RdlReader.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"&gt;&gt;horizontallyToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>horizontallyToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;helpToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"menuStrip1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 0</value>\n  </data>\n  <data name=\"toolStripSeparator3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>160, 6</value>\n  </data>\n  <data name=\"printToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Print...</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripButtonSave.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStripSeparator6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>136, 6</value>\n  </data>\n  <data name=\"toolStripButtonPrint.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"&gt;&gt;tileToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>tileToolStripMenuItem</value>\n  </data>\n  <data name=\"actualSizeToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>139, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator2.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator4.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator4</value>\n  </data>\n  <data name=\"selectionToolToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>149, 22</value>\n  </data>\n  <data name=\"recentFilesToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Recent &amp;Files</value>\n  </data>\n  <data name=\"copyToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Copy</value>\n  </data>\n  <data name=\"&gt;&gt;menuStrip1.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;fileToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"zoomToToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>139, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStrip1.Name\" xml:space=\"preserve\">\n    <value>toolStrip1</value>\n  </data>\n  <data name=\"closeToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"&gt;&gt;continuousFacingToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>continuousFacingToolStripMenuItem</value>\n  </data>\n  <data name=\"menuStrip1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>712, 24</value>\n  </data>\n  <data name=\"printToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator3.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator5.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator5</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"openToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+O</value>\n  </data>\n  <data name=\"&gt;&gt;toolStrip1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>712, 470</value>\n  </data>\n  <data name=\"&gt;&gt;continuousToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;windowToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>windowToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;menuStrip1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Majorsilence Reporting Reader</value>\n  </data>\n  <data name=\"&gt;&gt;pageLayoutToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tileToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Tile</value>\n  </data>\n  <data name=\"&gt;&gt;copyToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;menuStrip1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"openToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"toolStripSeparator2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>160, 6</value>\n  </data>\n  <data name=\"findToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Find</value>\n  </data>\n  <data name=\"$this.Icon\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        AAABAAIAICAQAAAAAADoAgAAJgAAABAQEAAAAAAAKAEAAA4DAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC\n        AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/\n        AAAA//8A/wAAAP8A/wD//wAA////AP//////////////////////////////////////////////////\n        ////////////////AAAAAAAAAAAAAAAAD////w///////////////w////8P//////////////8P////\n        D///////////////D////w//mZmZn/mZzMER/w////8P/5mZmZ/5mczBEf8P////D///////+ZnMwRH/\n        D////w////////mZzMER/w////8P/5mZmZ/5mczBEf8P////D/+ZmZmf+ZnMwRH/D////w////////mZ\n        zM///w////8P/5mZmZ/5mczP//8P////D/+ZmZmf+ZnMz///D////w////////mZzM///w////8P////\n        ///5mf////8P////D/+ZmZmf+Zn/////D////w//mZmZn/mZ/////w////8P//////////////8P////\n        D///////////////D////w///////////////w////8P//8AD/////8AD/8P////D/8AAAAP/wAAAA//\n        D////w///////////////w////8P//////////////8P////D///////////////D////wAAAAAAAAAA\n        AAAAAA//////////////////////////////////////////////////////////////////AAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA\n        AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AP//////////8AAAAAAA\n        AA/w////////D/D5mZ/5/C8P8P////n8Lw/w+Zmf+fwvD/D////5/C8P8PmZn/n8/w/w////+f//D/D/\n        ///5//8P8P///////w/w//D//w//D/DwAA/wAA8P8P///////w/wAAAAAAAAD///////////AAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\n</value>\n  </data>\n  <data name=\"&gt;&gt;cascadeToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"helpToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Help</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripButtonSave.Name\" xml:space=\"preserve\">\n    <value>toolStripButtonSave</value>\n  </data>\n  <data name=\"exitToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+Q</value>\n  </data>\n  <data name=\"windowToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>63, 20</value>\n  </data>\n  <data name=\"toolStripButtonSave.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"toolStripButtonSave.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"&gt;&gt;copyToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>copyToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator6.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;fitWidthToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>fitWidthToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;findToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>findToolStripMenuItem</value>\n  </data>\n  <data name=\"editToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>39, 20</value>\n  </data>\n  <data name=\"&gt;&gt;toolStrip1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;continuousFacingToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"continuousFacingToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>174, 22</value>\n  </data>\n  <data name=\"&gt;&gt;fitWidthToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"pageLayoutToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Page La&amp;yout</value>\n  </data>\n  <data name=\"&gt;&gt;exitToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>exitToolStripMenuItem</value>\n  </data>\n  <data name=\"copyToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+C</value>\n  </data>\n  <data name=\"findToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>149, 22</value>\n  </data>\n  <data name=\"closeAllToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Close &amp;All</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripButtonPrint.Name\" xml:space=\"preserve\">\n    <value>toolStripButtonPrint</value>\n  </data>\n  <data name=\"&gt;&gt;facingToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>facingToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;recentFilesToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>recentFilesToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;zoomToToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>zoomToToolStripMenuItem</value>\n  </data>\n  <data name=\"closeAllToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+Shift+W</value>\n  </data>\n  <data name=\"tileToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>197, 22</value>\n  </data>\n  <data name=\"toolStripButtonOpen.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>23, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripButtonOpen.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;fitPageToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>fitPageToolStripMenuItem</value>\n  </data>\n  <data name=\"openToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Open</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>RdlReader</value>\n  </data>\n  <data name=\"menuStrip1.Text\" xml:space=\"preserve\">\n    <value>menuStrip1</value>\n  </data>\n  <data name=\"findToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+F</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator2.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator2</value>\n  </data>\n  <data name=\"&gt;&gt;openToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStripButtonPrint.Text\" xml:space=\"preserve\">\n    <value>Print</value>\n  </data>\n  <data name=\"exitToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>E&amp;xit</value>\n  </data>\n  <data name=\"&gt;&gt;editToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStripButtonSave.Text\" xml:space=\"preserve\">\n    <value>Save File</value>\n  </data>\n  <data name=\"cascadeToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>197, 22</value>\n  </data>\n  <data name=\"verticallyToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Vertically</value>\n  </data>\n  <data name=\"&gt;&gt;closeAllToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>closeAllToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;viewToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>viewToolStripMenuItem</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"toolStrip1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"printToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+P</value>\n  </data>\n  <data name=\"&gt;&gt;windowToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;helpToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>helpToolStripMenuItem</value>\n  </data>\n  <data name=\"fitWidthToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Fit &amp;Width</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator3.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator3</value>\n  </data>\n  <data name=\"fitPageToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>139, 22</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"menuStrip1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;verticallyToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripButtonOpen.Name\" xml:space=\"preserve\">\n    <value>toolStripButtonOpen</value>\n  </data>\n  <data name=\"&gt;&gt;toolStrip1.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"pageLayoutToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>139, 22</value>\n  </data>\n  <data name=\"&gt;&gt;editToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>editToolStripMenuItem</value>\n  </data>\n  <data name=\"singlePageToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>174, 22</value>\n  </data>\n  <data name=\"horizontallyToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>211, 22</value>\n  </data>\n  <data name=\"fitPageToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Fit &amp;Page</value>\n  </data>\n  <data name=\"&gt;&gt;closeToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>closeToolStripMenuItem</value>\n  </data>\n  <data name=\"cascadeToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+Shift+J</value>\n  </data>\n  <data name=\"&gt;&gt;zoomToToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;continuousToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>continuousToolStripMenuItem</value>\n  </data>\n  <data name=\"cascadeToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Cascade</value>\n  </data>\n  <data name=\"selectionToolToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Selection Tool</value>\n  </data>\n  <data name=\"&gt;&gt;viewToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"helpToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>44, 20</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator6.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator6</value>\n  </data>\n  <data name=\"toolStrip1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>712, 25</value>\n  </data>\n  <data name=\"verticallyToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+Shift+L</value>\n  </data>\n  <data name=\"&gt;&gt;findToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;selectionToolToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>selectionToolToolStripMenuItem</value>\n  </data>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"&gt;&gt;facingToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"viewToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>44, 20</value>\n  </data>\n  <data name=\"saveAsToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+S</value>\n  </data>\n  <data name=\"aboutToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>107, 22</value>\n  </data>\n  <data name=\"&gt;&gt;actualSizeToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>actualSizeToolStripMenuItem</value>\n  </data>\n  <data name=\"horizontallyToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+Shift+K</value>\n  </data>\n  <data name=\"closeToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Close</value>\n  </data>\n  <data name=\"fileToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;File</value>\n  </data>\n  <data name=\"horizontallyToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Horizontally</value>\n  </data>\n  <data name=\"toolStrip1.Text\" xml:space=\"preserve\">\n    <value>toolStrip1</value>\n  </data>\n  <data name=\"copyToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>149, 22</value>\n  </data>\n  <data name=\"toolStripSeparator1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>160, 6</value>\n  </data>\n  <data name=\"&gt;&gt;saveAsToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>saveAsToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;openToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>openToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator4.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"saveAsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"&gt;&gt;aboutToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"viewToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;View</value>\n  </data>\n  <data name=\"&gt;&gt;horizontallyToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;closeToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;printToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStrip1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>0, 24</value>\n  </data>\n  <data name=\"&gt;&gt;singlePageToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;aboutToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>aboutToolStripMenuItem</value>\n  </data>\n  <data name=\"toolStripButtonOpen.Text\" xml:space=\"preserve\">\n    <value>Open File</value>\n  </data>\n  <data name=\"editToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Edit</value>\n  </data>\n  <data name=\"&gt;&gt;actualSizeToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tileToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator5.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"actualSizeToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Act&amp;ual Size</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripButtonPrint.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStripSeparator4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>146, 6</value>\n  </data>\n  <data name=\"&gt;&gt;singlePageToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>singlePageToolStripMenuItem</value>\n  </data>\n  <data name=\"windowToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Window</value>\n  </data>\n  <data name=\"&gt;&gt;fileToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>fileToolStripMenuItem</value>\n  </data>\n  <data name=\"continuousFacingToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Continuous Facing</value>\n  </data>\n  <data name=\"facingToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>174, 22</value>\n  </data>\n  <data name=\"closeAllToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>197, 22</value>\n  </data>\n  <data name=\"saveAsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Save As...</value>\n  </data>\n  <data name=\"&gt;&gt;pageLayoutToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>pageLayoutToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;exitToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"toolStripButtonPrint.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"&gt;&gt;toolStripSeparator1.Name\" xml:space=\"preserve\">\n    <value>toolStripSeparator1</value>\n  </data>\n  <data name=\"&gt;&gt;saveAsToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"continuousToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>174, 22</value>\n  </data>\n  <data name=\"singlePageToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Single Page</value>\n  </data>\n  <data name=\"&gt;&gt;recentFilesToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"exitToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"&gt;&gt;selectionToolToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;fitPageToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;verticallyToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>verticallyToolStripMenuItem</value>\n  </data>\n  <data name=\"&gt;&gt;cascadeToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>cascadeToolStripMenuItem</value>\n  </data>\n  <data name=\"toolStripButtonOpen.ImageTransparentColor\" type=\"System.Drawing.Color, System.Drawing\">\n    <value>Magenta</value>\n  </data>\n  <data name=\"&gt;&gt;closeAllToolStripMenuItem.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"continuousToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Continuous</value>\n  </data>\n  <data name=\"&gt;&gt;menuStrip1.Name\" xml:space=\"preserve\">\n    <value>menuStrip1</value>\n  </data>\n  <data name=\"zoomToToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;Zoom To...</value>\n  </data>\n  <data name=\"recentFilesToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>163, 22</value>\n  </data>\n  <data name=\"&gt;&gt;printToolStripMenuItem.Name\" xml:space=\"preserve\">\n    <value>printToolStripMenuItem</value>\n  </data>\n  <data name=\"toolStripSeparator5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>146, 6</value>\n  </data>\n  <data name=\"fileToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>37, 20</value>\n  </data>\n  <data name=\"facingToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Facing</value>\n  </data>\n  <data name=\"verticallyToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>211, 22</value>\n  </data>\n  <data name=\"closeToolStripMenuItem.ShortcutKeys\" type=\"System.Windows.Forms.Keys, System.Windows.Forms\">\n    <value>Ctrl+W</value>\n  </data>\n  <data name=\"aboutToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>&amp;About</value>\n  </data>\n  <data name=\"fitWidthToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>139, 22</value>\n  </data>\n  <metadata name=\"menuStrip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>132, 17</value>\n  </metadata>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlReader/RdlReader.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"fileToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>48, 20</value>\n  </data>\n  <data name=\"fileToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Файл</value>\n  </data>\n  <data name=\"editToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>108, 20</value>\n  </data>\n  <data name=\"editToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Редактирование</value>\n  </data>\n  <data name=\"viewToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>39, 20</value>\n  </data>\n  <data name=\"viewToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Вид</value>\n  </data>\n  <data name=\"windowToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>47, 20</value>\n  </data>\n  <data name=\"windowToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Окна</value>\n  </data>\n  <data name=\"helpToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>68, 20</value>\n  </data>\n  <data name=\"helpToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Помощь</value>\n  </data>\n  <data name=\"openToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"openToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Открыть</value>\n  </data>\n  <data name=\"closeToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"closeToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Закрыть</value>\n  </data>\n  <data name=\"toolStripSeparator1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 6</value>\n  </data>\n  <data name=\"saveAsToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"saveAsToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Сохранить как...</value>\n  </data>\n  <data name=\"printToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"printToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Печатать...</value>\n  </data>\n  <data name=\"toolStripSeparator2.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 6</value>\n  </data>\n  <data name=\"recentFilesToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"recentFilesToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Недавно открытые файлы</value>\n  </data>\n  <data name=\"toolStripSeparator3.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>216, 6</value>\n  </data>\n  <data name=\"exitToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>219, 22</value>\n  </data>\n  <data name=\"exitToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Выйти</value>\n  </data>\n  <data name=\"selectionToolToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>181, 22</value>\n  </data>\n  <data name=\"selectionToolToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Выбор</value>\n  </data>\n  <data name=\"toolStripSeparator4.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>178, 6</value>\n  </data>\n  <data name=\"copyToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>181, 22</value>\n  </data>\n  <data name=\"copyToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Копировать</value>\n  </data>\n  <data name=\"toolStripSeparator5.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>178, 6</value>\n  </data>\n  <data name=\"findToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>181, 22</value>\n  </data>\n  <data name=\"findToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Найти</value>\n  </data>\n  <data name=\"zoomToToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>190, 22</value>\n  </data>\n  <data name=\"zoomToToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Масштабировать...</value>\n  </data>\n  <data name=\"actualSizeToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>190, 22</value>\n  </data>\n  <data name=\"actualSizeToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Реальный размер</value>\n  </data>\n  <data name=\"fitPageToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>190, 22</value>\n  </data>\n  <data name=\"fitPageToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Уместить страницу</value>\n  </data>\n  <data name=\"fitWidthToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>190, 22</value>\n  </data>\n  <data name=\"fitWidthToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Уместить по ширине</value>\n  </data>\n  <data name=\"toolStripSeparator6.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>187, 6</value>\n  </data>\n  <data name=\"pageLayoutToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>190, 22</value>\n  </data>\n  <data name=\"pageLayoutToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Макет страницы</value>\n  </data>\n  <data name=\"singlePageToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"singlePageToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Одна страница</value>\n  </data>\n  <data name=\"continuousToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"continuousToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Непрерывная</value>\n  </data>\n  <data name=\"facingToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"facingToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Внешняя</value>\n  </data>\n  <data name=\"continuousFacingToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>202, 22</value>\n  </data>\n  <data name=\"continuousFacingToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Непрерывная внешняя</value>\n  </data>\n  <data name=\"cascadeToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>218, 22</value>\n  </data>\n  <data name=\"cascadeToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Каскад</value>\n  </data>\n  <data name=\"tileToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>218, 22</value>\n  </data>\n  <data name=\"tileToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Плитка</value>\n  </data>\n  <data name=\"horizontallyToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>236, 22</value>\n  </data>\n  <data name=\"horizontallyToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>По горизонтали</value>\n  </data>\n  <data name=\"verticallyToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>236, 22</value>\n  </data>\n  <data name=\"verticallyToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>По вертикали</value>\n  </data>\n  <data name=\"closeAllToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>218, 22</value>\n  </data>\n  <data name=\"closeAllToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>Закрыть все</value>\n  </data>\n  <data name=\"aboutToolStripMenuItem.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>149, 22</value>\n  </data>\n  <data name=\"aboutToolStripMenuItem.Text\" xml:space=\"preserve\">\n    <value>О программе</value>\n  </data>\n  <data name=\"toolStripButtonOpen.Text\" xml:space=\"preserve\">\n    <value>Открыть</value>\n  </data>\n  <data name=\"toolStripButtonSave.Text\" xml:space=\"preserve\">\n    <value>Сохранить</value>\n  </data>\n  <data name=\"toolStripButtonPrint.Text\" xml:space=\"preserve\">\n    <value>Печатать</value>\n  </data>\n  <data name=\"$this.Icon\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        AAABAAIAICAQAAAAAADoAgAAJgAAABAQEAAAAAAAKAEAAA4DAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC\n        AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/\n        AAAA//8A/wAAAP8A/wD//wAA////AP//////////////////////////////////////////////////\n        ////////////////AAAAAAAAAAAAAAAAD////w///////////////w////8P//////////////8P////\n        D///////////////D////w//mZmZn/mZzMER/w////8P/5mZmZ/5mczBEf8P////D///////+ZnMwRH/\n        D////w////////mZzMER/w////8P/5mZmZ/5mczBEf8P////D/+ZmZmf+ZnMwRH/D////w////////mZ\n        zM///w////8P/5mZmZ/5mczP//8P////D/+ZmZmf+ZnMz///D////w////////mZzM///w////8P////\n        ///5mf////8P////D/+ZmZmf+Zn/////D////w//mZmZn/mZ/////w////8P//////////////8P////\n        D///////////////D////w///////////////w////8P//8AD/////8AD/8P////D/8AAAAP/wAAAA//\n        D////w///////////////w////8P//////////////8P////D///////////////D////wAAAAAAAAAA\n        AAAAAA//////////////////////////////////////////////////////////////////AAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAA\n        AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AP//////////8AAAAAAA\n        AA/w////////D/D5mZ/5/C8P8P////n8Lw/w+Zmf+fwvD/D////5/C8P8PmZn/n8/w/w////+f//D/D/\n        ///5//8P8P///////w/w//D//w//D/DwAA/wAA8P8P///////w/wAAAAAAAAD///////////AAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\n</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"$this.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Просмотр отчётов</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlReader/Resources/Strings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace RdlReader.Resources {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Strings {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Strings() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"RdlReader.Resources.Strings\", typeof(Strings).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to RDL Reader displays reports defined using the Report Definition Language Specification.\n        ///Copyright (C) 2004-2008  fyiReporting Software, LLC\n        ///Copyright (C) 2012 Peter Gill &lt;peter@majorsilence.com&gt;\n        ///\n        ///This file is part of the My-FyiReporting RDL project.\n        ///\t\n        ///Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);\n        ///you may not use this file except in compliance with the License.\n        ///You may obtain a copy of the License at\n        ///\n        ///    http://www.apache.org/licenses/LICENSE-2.0\n        ///\n        ///Unless required by applicable law or agree [rest of string was truncated]&quot;;.\n        /// </summary>\n        internal static string DialogAbout_About {\n            get {\n                return ResourceManager.GetString(\"DialogAbout_About\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Exception.\n        /// </summary>\n        internal static string DialogAbout_ShowD_Exception {\n            get {\n                return ResourceManager.GetString(\"DialogAbout_ShowD_Exception\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Version {0}.\n        /// </summary>\n        internal static string DialogAbout_Version {\n            get {\n                return ResourceManager.GetString(\"DialogAbout_Version\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to RDL files (*.rdl)|*.rdl|Encrypted RDL files (*.encrypted)|*.encrypted|All files (*.*)|*.*.\n        /// </summary>\n        internal static string RdlReader_menuFileOpen_Click_Filter {\n            get {\n                return ResourceManager.GetString(\"RdlReader_menuFileOpen_Click_Filter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to PDF files (*.pdf)|*.pdf|XML files (*.xml)|*.xml|HTML files (*.html)|*.html|CSV files (*.csv)|*.csv|RTF files (*.rtf)|*.rtf|TIF files (*.tif)|*.tif|Excel 2007 Table Only (*.xlsx)|*.xlsx|Excel 2007 (*.xlsx)|*.xlsx|MHT files (*.mht)|*.mht.\n        /// </summary>\n        internal static string RdlReader_menuFileSaveAs_Click_FilesFilter {\n            get {\n                return ResourceManager.GetString(\"RdlReader_menuFileSaveAs_Click_FilesFilter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} is not a valid file type.  File extension must be PDF, XML, HTML, CSV, MHT, RTF, TIF, XLSX..\n        /// </summary>\n        internal static string RdlReader_SaveG_NotValidFileType {\n            get {\n                return ResourceManager.GetString(\"RdlReader_SaveG_NotValidFileType\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Save As Error.\n        /// </summary>\n        internal static string RdlReader_SaveG_SaveAsError {\n            get {\n                return ResourceManager.GetString(\"RdlReader_SaveG_SaveAsError\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to My-FyiReporting.\n        /// </summary>\n        internal static string RdlReader_Show_MyFyiReporting {\n            get {\n                return ResourceManager.GetString(\"RdlReader_Show_MyFyiReporting\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Print error: .\n        /// </summary>\n        internal static string RdlReader_ShowC_PrintError {\n            get {\n                return ResourceManager.GetString(\"RdlReader_ShowC_PrintError\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Can only print one file at a time..\n        /// </summary>\n        internal static string RdlReader_ShowC_PrintOneFile {\n            get {\n                return ResourceManager.GetString(\"RdlReader_ShowC_PrintOneFile\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The specified report [ {0} ] could not be loaded..\n        /// </summary>\n        internal static string RdlReader_ShowD_ReportNotLoaded {\n            get {\n                return ResourceManager.GetString(\"RdlReader_ShowD_ReportNotLoaded\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Export.\n        /// </summary>\n        internal static string RdlReader_ShowF_Export {\n            get {\n                return ResourceManager.GetString(\"RdlReader_ShowF_Export\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Do you want to save colors in TIF file?.\n        /// </summary>\n        internal static string RdlReader_ShowF_WantSaveColorsInTIF {\n            get {\n                return ResourceManager.GetString(\"RdlReader_ShowF_WantSaveColorsInTIF\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Magnification level is an invalid number..\n        /// </summary>\n        internal static string ZoomTo_ShowI_MagnificationLevelInvalid {\n            get {\n                return ResourceManager.GetString(\"ZoomTo_ShowI_MagnificationLevelInvalid\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlReader/Resources/Strings.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"RdlReader_ShowC_PrintOneFile\" xml:space=\"preserve\">\n    <value>Can only print one file at a time.</value>\n  </data>\n  <data name=\"RdlReader_ShowC_PrintError\" xml:space=\"preserve\">\n    <value>Print error: </value>\n  </data>\n  <data name=\"DialogAbout_ShowD_Exception\" xml:space=\"preserve\">\n    <value>Exception</value>\n  </data>\n  <data name=\"RdlReader_Show_MyFyiReporting\" xml:space=\"preserve\">\n    <value>My-FyiReporting</value>\n  </data>\n  <data name=\"RdlReader_ShowD_ReportNotLoaded\" xml:space=\"preserve\">\n    <value>The specified report [ {0} ] could not be loaded.</value>\n  </data>\n  <data name=\"RdlReader_ShowF_Export\" xml:space=\"preserve\">\n    <value>Export</value>\n  </data>\n  <data name=\"RdlReader_ShowF_WantSaveColorsInTIF\" xml:space=\"preserve\">\n    <value>Do you want to save colors in TIF file?</value>\n  </data>\n  <data name=\"RdlReader_SaveG_SaveAsError\" xml:space=\"preserve\">\n    <value>Save As Error</value>\n  </data>\n  <data name=\"RdlReader_SaveG_NotValidFileType\" xml:space=\"preserve\">\n    <value>{0} is not a valid file type.  File extension must be PDF, XML, HTML, CSV, MHT, RTF, TIF, XLSX.</value>\n  </data>\n  <data name=\"ZoomTo_ShowI_MagnificationLevelInvalid\" xml:space=\"preserve\">\n    <value>Magnification level is an invalid number.</value>\n  </data>\n  <data name=\"DialogAbout_About\" xml:space=\"preserve\">\n    <value>RDL Reader displays reports defined using the Report Definition Language Specification.\nCopyright (C) 2004-2008  fyiReporting Software, LLC\nCopyright (C) 2012 Peter Gill &lt;peter@majorsilence.com&gt;\n\nThis file is part of the My-FyiReporting RDL project.\n\t\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nFor additional information, email peter@majorsilence.com or visit\nthe website https://github.com/majorsilence/My-FyiReporting.</value>\n  </data>\n  <data name=\"DialogAbout_Version\" xml:space=\"preserve\">\n    <value>Version {0}</value>\n  </data>\n  <data name=\"RdlReader_menuFileOpen_Click_Filter\" xml:space=\"preserve\">\n    <value>RDL files (*.rdl)|*.rdl|Encrypted RDL files (*.encrypted)|*.encrypted|All files (*.*)|*.*</value>\n  </data>\n  <data name=\"RdlReader_menuFileSaveAs_Click_FilesFilter\" xml:space=\"preserve\">\n    <value>PDF files (*.pdf)|*.pdf|XML files (*.xml)|*.xml|HTML files (*.html)|*.html|CSV files (*.csv)|*.csv|RTF files (*.rtf)|*.rtf|TIF files (*.tif)|*.tif|Excel 2007 Table Only (*.xlsx)|*.xlsx|Excel 2007 (*.xlsx)|*.xlsx|MHT files (*.mht)|*.mht</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlReader/Resources/Strings.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"DialogAbout_About\" xml:space=\"preserve\">\n    <value>Просмотрщик отчётов отображает отчеты, определенные с помощью языка определения отчётов (RDL).\nCopyright (C) 2004-2008 fyiReporting Software, LLC\nCopyright (C) 2012 Петр Гилл &lt;peter@majorsilence.com&gt;\n\nЭтот файл является частью проекта My-FyiReporting RDL.\n\nПод лицензией Apache, версии 2.0 (the \"License\");\nВы не можете использовать этот файл только в соответствии с лицензией.\nВы можете получить копию лицензии на\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\nЕсли иное не требуется законодательством или согласовано в письменной форме, программное обеспечение\nраспространяется под Лицензия \"КАК ЕСТЬ\",\nБЕЗ ГАРАНТИЙ ИЛИ УСЛОВИЙ ЛЮБОГО РОДА, явных или подразумеваемых.\nСм. Лицензию на других языках, регулирующая разрешения и\nограничения в рамках лицензии.\n\nДля получения дополнительной информации, напишите peter@majorsilence.com или посетите\nсайт https://github.com/majorsilence/My-FyiReporting.</value>\n  </data>\n  <data name=\"DialogAbout_ShowD_Exception\" xml:space=\"preserve\">\n    <value>Ошибка</value>\n  </data>\n  <data name=\"DialogAbout_Version\" xml:space=\"preserve\">\n    <value>Версия {0}</value>\n  </data>\n  <data name=\"RdlReader_menuFileOpen_Click_Filter\" xml:space=\"preserve\">\n    <value>Файлы отчётов (*.rdl)|*.rdl|Все файлы (*.*)|*.*</value>\n  </data>\n  <data name=\"RdlReader_SaveG_NotValidFileType\" xml:space=\"preserve\">\n    <value>{0} - некорректный тип файла. Допустимые расширения файлов: PDF, XML, HTML, CSV, MHT, RTF, TIF, XLSX.</value>\n  </data>\n  <data name=\"RdlReader_SaveG_SaveAsError\" xml:space=\"preserve\">\n    <value>Ошибка при сохранении</value>\n  </data>\n  <data name=\"RdlReader_ShowC_PrintError\" xml:space=\"preserve\">\n    <value>Ошибка печати: </value>\n  </data>\n  <data name=\"RdlReader_ShowC_PrintOneFile\" xml:space=\"preserve\">\n    <value>Печатать можно только один файл за раз.</value>\n  </data>\n  <data name=\"RdlReader_ShowD_ReportNotLoaded\" xml:space=\"preserve\">\n    <value>Указанный отчёт [ {0} ] не может быть загружен.</value>\n  </data>\n  <data name=\"RdlReader_ShowF_Export\" xml:space=\"preserve\">\n    <value>Экспорт</value>\n  </data>\n  <data name=\"RdlReader_ShowF_WantSaveColorsInTIF\" xml:space=\"preserve\">\n    <value>Хотите сохранить изображение в TIF-файл?</value>\n  </data>\n  <data name=\"RdlReader_Show_MyFyiReporting\" xml:space=\"preserve\">\n    <value>Редактор отчётов</value>\n  </data>\n  <data name=\"ZoomTo_ShowI_MagnificationLevelInvalid\" xml:space=\"preserve\">\n    <value>Уровень увеличения является недопустимым числом.</value>\n  </data>\n  <data name=\"RdlReader_menuFileSaveAs_Click_FilesFilter\" xml:space=\"preserve\">\n    <value>PDF (*.pdf)|*.pdf|XML (*.xml)|*.xml|HTML (*.html)|*.html|CSV files (*.csv)|*.csv|RTF (*.rtf)|*.rtf|TIF (*.tif)|*.tif|Excel 2007 только таблица (*.xlsx)|*.xlsx|Excel 2007 (*.xlsx)|*.xlsx|MHT (*.mht)|*.mht</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlReader/ZoomTo.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlReader\n{\n    public partial class ZoomTo : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tprivate System.Windows.Forms.Label label1;\nprivate System.Windows.Forms.ComboBox cbMagnify;\nprivate System.Windows.Forms.Button bOK;\nprivate System.Windows.Forms.Button bCancel;\nprivate RdlViewer.RdlViewer _Viewer;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ZoomTo));\n            this.DoubleBuffered = true;\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.cbMagnify = new System.Windows.Forms.ComboBox();\n\t\t\tthis.bOK = new System.Windows.Forms.Button();\n\t\t\tthis.bCancel = new System.Windows.Forms.Button();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// cbMagnify\n\t\t\t// \n\t\t\tresources.ApplyResources(this.cbMagnify, \"cbMagnify\");\n\t\t\tthis.cbMagnify.Items.AddRange(new object[] {\n            resources.GetString(\"cbMagnify.Items\"),\n            resources.GetString(\"cbMagnify.Items1\"),\n            resources.GetString(\"cbMagnify.Items2\"),\n            resources.GetString(\"cbMagnify.Items3\"),\n            resources.GetString(\"cbMagnify.Items4\"),\n            resources.GetString(\"cbMagnify.Items5\"),\n            resources.GetString(\"cbMagnify.Items6\"),\n            resources.GetString(\"cbMagnify.Items7\"),\n            resources.GetString(\"cbMagnify.Items8\"),\n            resources.GetString(\"cbMagnify.Items9\"),\n            resources.GetString(\"cbMagnify.Items10\")});\n\t\t\tthis.cbMagnify.Name = \"cbMagnify\";\n\t\t\t// \n\t\t\t// bOK\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bOK, \"bOK\");\n\t\t\tthis.bOK.DialogResult = System.Windows.Forms.DialogResult.OK;\n\t\t\tthis.bOK.Name = \"bOK\";\n\t\t\tthis.bOK.Click += new System.EventHandler(this.bOK_Click);\n\t\t\t// \n\t\t\t// bCancel\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCancel, \"bCancel\");\n\t\t\tthis.bCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n\t\t\tthis.bCancel.Name = \"bCancel\";\n\t\t\tthis.bCancel.Click += new System.EventHandler(this.bCancel_Click);\n\t\t\t// \n\t\t\t// ZoomTo\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.bCancel);\n\t\t\tthis.Controls.Add(this.bOK);\n\t\t\tthis.Controls.Add(this.cbMagnify);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n\t\t\tthis.MaximizeBox = false;\n\t\t\tthis.MinimizeBox = false;\n\t\t\tthis.Name = \"ZoomTo\";\n\t\t\tthis.ShowInTaskbar = false;\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlReader/ZoomTo.cs",
    "content": "\nusing System;\nusing System.Drawing;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing RdlReader.Resources;\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlViewer;\n\nnamespace Majorsilence.Reporting.RdlReader\n{\n    /// <summary>\n    /// Summary description for ZoomTo.\n    /// </summary>\n    public partial class ZoomTo \n    {\n        public ZoomTo(RdlViewer.RdlViewer viewer)\n        {\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            _Viewer = viewer;\n            // set the intial value for magnification\n            if (_Viewer.ZoomMode == ZoomEnum.FitPage)\n                cbMagnify.Text = \"Fit Page\";\n            else if (_Viewer.ZoomMode == ZoomEnum.FitWidth)\n                cbMagnify.Text = \"Fit Width\";\n            else if (_Viewer.Zoom == 1)\n                cbMagnify.Text = \"Actual Size\";\n            else\n            {\n                string formatted = string.Format(\"{0:#0.##}\", _Viewer.Zoom * 100);\n                if (formatted[formatted.Length - 1] == '.')\n                    formatted = formatted.Substring(0, formatted.Length - 2);\n                formatted = formatted + \"%\";\n                cbMagnify.Text = formatted;\n            }\n\n        }\n\n        private void bOK_Click(object sender, System.EventArgs e)\n        {\n            switch (cbMagnify.Text)\n            {\n                case \"Fit Page\":\n                    _Viewer.ZoomMode = ZoomEnum.FitPage;\n                    break;\n                case \"Actual Size\":\n                    _Viewer.Zoom = 1;\n                    break;\n                case \"Fit Width\":\n                    _Viewer.ZoomMode = ZoomEnum.FitWidth;\n                    break;\n                default:\n                    string z = cbMagnify.Text.Replace(\"%\", \"\");\n                    try\n                    {\n                        float zfactor = (float)(Convert.ToSingle(z) / 100.0);\n                        _Viewer.Zoom = zfactor;\n                    }\n                    catch\n                    {\n                        MessageBox.Show(this, Strings.ZoomTo_ShowI_MagnificationLevelInvalid);\n                        return;\n                    }\n                    break;\n            }\n            DialogResult = DialogResult.OK;\n        }\n\n        private void bCancel_Click(object sender, System.EventArgs e)\n        {\n            DialogResult = DialogResult.Cancel;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlReader/ZoomTo.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"cbMagnify.Items2\" xml:space=\"preserve\">\n    <value>200%</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;cbMagnify.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbMagnify.Items\" xml:space=\"preserve\">\n    <value>800%</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Magnification</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>248, 102</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>ZoomTo</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"cbMagnify.Items9\" xml:space=\"preserve\">\n    <value>Actual Size</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"&gt;&gt;cbMagnify.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;cbMagnify.Name\" xml:space=\"preserve\">\n    <value>cbMagnify</value>\n  </data>\n  <data name=\"cbMagnify.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>96, 16</value>\n  </data>\n  <data name=\"cbMagnify.Items8\" xml:space=\"preserve\">\n    <value>Fit Page</value>\n  </data>\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"bCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>136, 64</value>\n  </data>\n  <data name=\"cbMagnify.Items4\" xml:space=\"preserve\">\n    <value>125%</value>\n  </data>\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>24, 64</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"cbMagnify.Items10\" xml:space=\"preserve\">\n    <value>Fit Width</value>\n  </data>\n  <data name=\"cbMagnify.Items5\" xml:space=\"preserve\">\n    <value>100%</value>\n  </data>\n  <data name=\"cbMagnify.Items7\" xml:space=\"preserve\">\n    <value>25%</value>\n  </data>\n  <data name=\"&gt;&gt;cbMagnify.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>72, 23</value>\n  </data>\n  <data name=\"cbMagnify.Items1\" xml:space=\"preserve\">\n    <value>400%</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"cbMagnify.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"cbMagnify.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>120, 21</value>\n  </data>\n  <data name=\"cbMagnify.Items6\" xml:space=\"preserve\">\n    <value>50%</value>\n  </data>\n  <data name=\"bCancel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Name\" xml:space=\"preserve\">\n    <value>bCancel</value>\n  </data>\n  <data name=\"cbMagnify.Items3\" xml:space=\"preserve\">\n    <value>150%</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Zoom To</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlReader/ZoomTo.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Масштаб</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Масштабирование</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlReader/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\" xmlns:asmv3=\"urn:schemas-microsoft-com:asm.v3\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"Majorsilence.Reporting.RdlReader.app\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <!-- UAC Manifest Options\n             If you want to change the Windows User Account Control level replace the \n             requestedExecutionLevel node with one of the following.\n\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n        <requestedExecutionLevel  level=\"requireAdministrator\" uiAccess=\"false\" />\n        <requestedExecutionLevel  level=\"highestAvailable\" uiAccess=\"false\" />\n\n            Specifying requestedExecutionLevel element will disable file and registry virtualization. \n            Remove this element if your application requires this virtualization for backwards\n            compatibility.\n        -->\n        <requestedExecutionLevel level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on\n           and is designed to work with. Uncomment the appropriate elements\n           and Windows will automatically select the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <!--<supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />-->\n\n      <!-- Windows 7 -->\n      <!--<supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />-->\n\n      <!-- Windows 8 -->\n      <!--<supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />-->\n\n      <!-- Windows 8.1 -->\n      <!--<supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />-->\n\n      <!-- Windows 10 -->\n      <!--<supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />-->\n\n    </application>\n  </compatibility>\n\n\t<asmv3:application>\n\t\t<asmv3:windowsSettings xmlns=\"http://schemas.microsoft.com/SMI/2017/WindowsSettings\">\n\t\t\t<gdiScaling>true</gdiScaling>\n\t\t</asmv3:windowsSettings>\n\t\t<asmv3:windowsSettings xmlns:ws2=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">\n\t\t\t<ws2:longPathAware>true</ws2:longPathAware>\n\t\t</asmv3:windowsSettings>\n\t\t<asmv3:windowsSettings xmlns=\"http://schemas.microsoft.com/SMI/2011/WindowsSettings\">\n\t\t\t<printerDriverIsolation>true</printerDriverIsolation>\n\t\t</asmv3:windowsSettings>\n\t\t<asmv3:windowsSettings xmlns=\"http://schemas.microsoft.com/SMI/2019/WindowsSettings\">\n\t\t\t<activeCodePage>UTF-8</activeCodePage>\n\t\t</asmv3:windowsSettings>\n\t</asmv3:application>\n\t\n  <!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher\n       DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need \n       to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should \n       also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. \n       \n       Makes the application long-path aware. See https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation -->\n  <!--\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true</dpiAware>\n      <longPathAware xmlns=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">true</longPathAware>\n    </windowsSettings>\n  </application>\n  -->\n\n  <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->\n  <!--\n  <dependency>\n    <dependentAssembly>\n      <assemblyIdentity\n          type=\"win32\"\n          name=\"Microsoft.Windows.Common-Controls\"\n          version=\"6.0.0.0\"\n          processorArchitecture=\"*\"\n          publicKeyToken=\"6595b64144ccf1df\"\n          language=\"*\"\n        />\n    </dependentAssembly>\n  </dependency>\n  -->\n\n</assembly>\n"
  },
  {
    "path": "RdlTests/DataTests/AssemblyInfo.cs",
    "content": "using System.Reflection;\nusing System.Runtime.CompilerServices;\n\n//\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n//\n[assembly: AssemblyTitle(\"\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"\")]\n[assembly: AssemblyCopyright(\"\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\t\t\n\n//\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n\n[assembly: AssemblyVersion(\"1.9.1\")]\n\n//\n// In order to sign your assembly you must specify a key to use. Refer to the \n// Microsoft .NET Framework documentation for more information on assembly signing.\n//\n// Use the attributes below to control which key is used for signing. \n//\n// Notes: \n//   (*) If no key is specified, the assembly is not signed.\n//   (*) KeyName refers to a key that has been installed in the Crypto Service\n//       Provider (CSP) on your machine. KeyFile refers to a file which contains\n//       a key.\n//   (*) If the KeyFile and the KeyName values are both specified, the \n//       following processing occurs:\n//       (1) If the KeyName can be found in the CSP, that key is used.\n//       (2) If the KeyName does not exist and the KeyFile does exist, the key \n//           in the KeyFile is installed into the CSP and used.\n//   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.\n//       When specifying the KeyFile, the location of the KeyFile should be\n//       relative to the project output directory which is\n//       %Project Directory%\\obj\\<configuration>. For example, if your KeyFile is\n//       located in the project directory, you would specify the AssemblyKeyFile \n//       attribute as [assembly: AssemblyKeyFile(\"..\\\\..\\\\mykey.snk\")]\n//   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework\n//       documentation for more information on this.\n//\n[assembly: AssemblyDelaySign(false)]\n[assembly: AssemblyKeyFile(\"\")]\n[assembly: AssemblyKeyName(\"\")]\n"
  },
  {
    "path": "RdlTests/DataTests/DataTests.cs",
    "content": "using System;\nusing System.Drawing;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing System.Data;\nusing System.Data.SqlClient;\nusing System.Xml;\nusing fyiReporting.RdlViewer;\nusing fyiReporting.RDL;\n\nnamespace DataTests\n{\n\t/// <summary>\n\t/// Summary description for Form1.\n\t/// </summary>\n\tpublic class Form1 : System.Windows.Forms.Form\n\t{\n        private fyiReporting.RdlViewer.RdlViewer rdlViewer;\n\t\tprivate System.Windows.Forms.Panel panel1;\n\t\tprivate System.Windows.Forms.Button bSetReport;\n\t\tprivate System.Windows.Forms.Button bManualDataTable;\n\t\tprivate System.Windows.Forms.Button bXMLData;\n\t\tprivate System.Windows.Forms.Button bIDataReader;\n\t\tprivate System.Windows.Forms.TextBox tbConnectionString;\n\t\tprivate System.Windows.Forms.Button bDataSource;\n\t\tprivate System.Windows.Forms.Button bEnumerable;\n\t\tprivate System.Windows.Forms.Button bParameters;\n\t\tprivate System.Windows.Forms.Button bSetParm;\n        private TextBox tbParms;\n        private Button bOpen;\n        private CheckBox chkFind;\n        private Button bPageUp;\n        private Button bPageDown;\n        private string _DataSourceReferencePassword = null;\n        /// <summary>\n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.Container components = null;\n\n\t\tpublic Form1()\n\t\t{\n\t\t\t//\n\t\t\t// Required for Windows Form Designer support\n\t\t\t//\n\t\t\tInitializeComponent();\n\n\n            InitMenuItems();\n\t\t\t//\n\t\t\t// Handle the Hyperlink event.\n\t\t\t//\n            this.rdlViewer.Hyperlink += new RdlViewer.HyperlinkEventHandler(rdlViewer_Hyperlink);\n            this.rdlViewer.SubreportDataRetrieval +=new EventHandler<SubreportDataRetrievalEventArgs>(rdlViewer_SubreportDataRetrieval);\n            this.rdlViewer.GetDataSourceReferencePassword = new fyiReporting.RDL.NeedPassword(this.GetPassword); \n        }\n\n        void InitMenuItems()\n        {\n            MenuItem menuResources = new MenuItem(\"&Resources\", new EventHandler(this.menuResources_Click));\n\n            // Create file menu and add array of sub-menu items\n            MenuItem menuTools = new MenuItem(\"&Tools\");\n            menuTools.MenuItems.AddRange(\n                new MenuItem[] { menuResources });\n\n            MainMenu menuMain = new MainMenu(new MenuItem[]{menuTools});\n            this.Menu = menuMain;\n        }\n\n        void rdlViewer_Hyperlink(object source, HyperlinkEventArgs e)\n        {\n            if (MessageBox.Show(string.Format(\"Do you wish to invoke Hyperlink {0}\", e.Hyperlink), \"Hyperlink\", MessageBoxButtons.YesNo)\n                == DialogResult.No)\n            {\n                e.Cancel = true;\n            }\n        }\n\n        void rdlViewer_SubreportDataRetrieval(object sender, SubreportDataRetrievalEventArgs e)\n        {\n            int ids = 0;\n            foreach (fyiReporting.RDL.DataSet ds in e.Report.DataSets)\n                ids++;\n            MessageBox.Show(string.Format(\"Subreport Data Retrieval: {0} datasets\", ids));\n        }\n        \n        string GetPassword()\n        {\n            if (_DataSourceReferencePassword != null)\n                return _DataSourceReferencePassword;\n\n            DataSourcePassword dlg = new DataSourcePassword();\n            if (dlg.ShowDialog() == DialogResult.OK)\n                _DataSourceReferencePassword = dlg.PassPhrase;\n\n            return _DataSourceReferencePassword;\n        }\n\n        private void menuResources_Click(object sender, EventArgs e)\n        {\n            if (this.rdlViewer.PageCurrent > 1)\n                rdlViewer.PageCurrent -= 1; \n\n\n            //MessageBox.Show(\"test\");\n            return;\n        }\n\n\t\t/// <summary>\n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif (components != null) \n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\n\t\t#region Windows Form Designer generated code\n\t\t/// <summary>\n\t\t/// Required method for Designer support - do not modify\n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent()\n\t\t{\n            this.rdlViewer = new fyiReporting.RdlViewer.RdlViewer();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.bPageUp = new System.Windows.Forms.Button();\n            this.chkFind = new System.Windows.Forms.CheckBox();\n            this.bOpen = new System.Windows.Forms.Button();\n            this.tbParms = new System.Windows.Forms.TextBox();\n            this.bSetParm = new System.Windows.Forms.Button();\n            this.bParameters = new System.Windows.Forms.Button();\n            this.bEnumerable = new System.Windows.Forms.Button();\n            this.bDataSource = new System.Windows.Forms.Button();\n            this.tbConnectionString = new System.Windows.Forms.TextBox();\n            this.bIDataReader = new System.Windows.Forms.Button();\n            this.bXMLData = new System.Windows.Forms.Button();\n            this.bManualDataTable = new System.Windows.Forms.Button();\n            this.bSetReport = new System.Windows.Forms.Button();\n            this.bPageDown = new System.Windows.Forms.Button();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // rdlViewer\n            // \n            this.rdlViewer.Cursor = System.Windows.Forms.Cursors.Default;\n            this.rdlViewer.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.rdlViewer.Folder = null;\n            this.rdlViewer.HighlightAll = false;\n            this.rdlViewer.HighlightAllColor = System.Drawing.Color.Fuchsia;\n            this.rdlViewer.HighlightCaseSensitive = false;\n            this.rdlViewer.HighlightItemColor = System.Drawing.Color.Aqua;\n            this.rdlViewer.HighlightPageItem = null;\n            this.rdlViewer.HighlightText = null;\n            this.rdlViewer.Location = new System.Drawing.Point(0, 0);\n            this.rdlViewer.Name = \"rdlViewer\";\n            this.rdlViewer.PageCurrent = 1;\n            this.rdlViewer.Parameters = null;\n            this.rdlViewer.ReportName = null;\n            this.rdlViewer.ScrollMode = fyiReporting.RdlViewer.ScrollModeEnum.Continuous;\n            this.rdlViewer.ShowFindPanel = false;\n            this.rdlViewer.ShowParameterPanel = false;\n            this.rdlViewer.Size = new System.Drawing.Size(768, 362);\n            this.rdlViewer.SourceFile = null;\n            this.rdlViewer.SourceRdl = null;\n            this.rdlViewer.TabIndex = 0;\n            this.rdlViewer.Text = \"rdlViewer1\";\n            this.rdlViewer.UseTrueMargins = true;\n            this.rdlViewer.Zoom = 0.8913237F;\n            this.rdlViewer.ZoomMode = fyiReporting.RdlViewer.ZoomEnum.FitWidth;\n            this.rdlViewer.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.rdlViewer_KeyPress);\n            // \n            // panel1\n            // \n            this.panel1.Controls.Add(this.bPageDown);\n            this.panel1.Controls.Add(this.bPageUp);\n            this.panel1.Controls.Add(this.chkFind);\n            this.panel1.Controls.Add(this.bOpen);\n            this.panel1.Controls.Add(this.tbParms);\n            this.panel1.Controls.Add(this.bSetParm);\n            this.panel1.Controls.Add(this.bParameters);\n            this.panel1.Controls.Add(this.bEnumerable);\n            this.panel1.Controls.Add(this.bDataSource);\n            this.panel1.Controls.Add(this.tbConnectionString);\n            this.panel1.Controls.Add(this.bIDataReader);\n            this.panel1.Controls.Add(this.bXMLData);\n            this.panel1.Controls.Add(this.bManualDataTable);\n            this.panel1.Controls.Add(this.bSetReport);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;\n            this.panel1.Location = new System.Drawing.Point(0, 362);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(768, 65);\n            this.panel1.TabIndex = 2;\n            // \n            // bPageUp\n            // \n            this.bPageUp.Location = new System.Drawing.Point(691, 9);\n            this.bPageUp.Name = \"bPageUp\";\n            this.bPageUp.Size = new System.Drawing.Size(20, 23);\n            this.bPageUp.TabIndex = 13;\n            this.bPageUp.Text = \"<\";\n            this.bPageUp.UseVisualStyleBackColor = true;\n            this.bPageUp.Click += new System.EventHandler(this.bPageUp_Click);\n            // \n            // chkFind\n            // \n            this.chkFind.AutoSize = true;\n            this.chkFind.Location = new System.Drawing.Point(590, 37);\n            this.chkFind.Name = \"chkFind\";\n            this.chkFind.Size = new System.Drawing.Size(46, 17);\n            this.chkFind.TabIndex = 12;\n            this.chkFind.Text = \"Find\";\n            this.chkFind.UseVisualStyleBackColor = true;\n            this.chkFind.CheckedChanged += new System.EventHandler(this.chkFind_CheckedChanged);\n            // \n            // bOpen\n            // \n            this.bOpen.Location = new System.Drawing.Point(590, 8);\n            this.bOpen.Name = \"bOpen\";\n            this.bOpen.Size = new System.Drawing.Size(57, 23);\n            this.bOpen.TabIndex = 11;\n            this.bOpen.Text = \"Open\";\n            this.bOpen.UseVisualStyleBackColor = true;\n            this.bOpen.Click += new System.EventHandler(this.bOpen_Click);\n            // \n            // tbParms\n            // \n            this.tbParms.Location = new System.Drawing.Point(410, 37);\n            this.tbParms.Name = \"tbParms\";\n            this.tbParms.Size = new System.Drawing.Size(166, 20);\n            this.tbParms.TabIndex = 10;\n            this.tbParms.Text = \"Name=%\";\n            // \n            // bSetParm\n            // \n            this.bSetParm.Location = new System.Drawing.Point(499, 9);\n            this.bSetParm.Name = \"bSetParm\";\n            this.bSetParm.Size = new System.Drawing.Size(77, 23);\n            this.bSetParm.TabIndex = 9;\n            this.bSetParm.Text = \"Set Parm\";\n            this.bSetParm.Click += new System.EventHandler(this.bSetParm_Click);\n            // \n            // bParameters\n            // \n            this.bParameters.Location = new System.Drawing.Point(401, 8);\n            this.bParameters.Name = \"bParameters\";\n            this.bParameters.Size = new System.Drawing.Size(93, 23);\n            this.bParameters.TabIndex = 8;\n            this.bParameters.Text = \"Parameter Rep\";\n            this.bParameters.Click += new System.EventHandler(this.bParameters_Click);\n            // \n            // bEnumerable\n            // \n            this.bEnumerable.Location = new System.Drawing.Point(310, 7);\n            this.bEnumerable.Name = \"bEnumerable\";\n            this.bEnumerable.Size = new System.Drawing.Size(77, 23);\n            this.bEnumerable.TabIndex = 7;\n            this.bEnumerable.Text = \"IEnumerable\";\n            this.bEnumerable.Click += new System.EventHandler(this.bEnumerable_Click);\n            // \n            // bDataSource\n            // \n            this.bDataSource.Location = new System.Drawing.Point(13, 38);\n            this.bDataSource.Name = \"bDataSource\";\n            this.bDataSource.Size = new System.Drawing.Size(75, 23);\n            this.bDataSource.TabIndex = 6;\n            this.bDataSource.Text = \"Data Source\";\n            this.bDataSource.Click += new System.EventHandler(this.bDataSource_Click);\n            // \n            // tbConnectionString\n            // \n            this.tbConnectionString.Location = new System.Drawing.Point(188, 38);\n            this.tbConnectionString.Name = \"tbConnectionString\";\n            this.tbConnectionString.Size = new System.Drawing.Size(199, 20);\n            this.tbConnectionString.TabIndex = 5;\n            this.tbConnectionString.Text = \"Server=(local)\\\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeo\" +\n                \"ut=5\";\n            // \n            // bIDataReader\n            // \n            this.bIDataReader.Location = new System.Drawing.Point(102, 38);\n            this.bIDataReader.Name = \"bIDataReader\";\n            this.bIDataReader.Size = new System.Drawing.Size(80, 23);\n            this.bIDataReader.TabIndex = 4;\n            this.bIDataReader.Text = \"IDataReader\";\n            this.bIDataReader.Click += new System.EventHandler(this.bIDataReader_Click);\n            // \n            // bXMLData\n            // \n            this.bXMLData.Location = new System.Drawing.Point(223, 7);\n            this.bXMLData.Name = \"bXMLData\";\n            this.bXMLData.Size = new System.Drawing.Size(75, 23);\n            this.bXMLData.TabIndex = 3;\n            this.bXMLData.Text = \"XML Data\";\n            this.bXMLData.Click += new System.EventHandler(this.bXMLData_Click);\n            // \n            // bManualDataTable\n            // \n            this.bManualDataTable.Location = new System.Drawing.Point(101, 7);\n            this.bManualDataTable.Name = \"bManualDataTable\";\n            this.bManualDataTable.Size = new System.Drawing.Size(110, 23);\n            this.bManualDataTable.TabIndex = 2;\n            this.bManualDataTable.Text = \"Manual Data Table\";\n            this.bManualDataTable.Click += new System.EventHandler(this.ManualDataTable_Click);\n            // \n            // bSetReport\n            // \n            this.bSetReport.Location = new System.Drawing.Point(14, 7);\n            this.bSetReport.Name = \"bSetReport\";\n            this.bSetReport.Size = new System.Drawing.Size(75, 23);\n            this.bSetReport.TabIndex = 1;\n            this.bSetReport.Text = \"Set Report\";\n            this.bSetReport.Click += new System.EventHandler(this.bSetReport_Click);\n            // \n            // bPageDown\n            // \n            this.bPageDown.Location = new System.Drawing.Point(717, 9);\n            this.bPageDown.Name = \"bPageDown\";\n            this.bPageDown.Size = new System.Drawing.Size(20, 23);\n            this.bPageDown.TabIndex = 14;\n            this.bPageDown.Text = \">\";\n            this.bPageDown.UseVisualStyleBackColor = true;\n            this.bPageDown.Click += new System.EventHandler(this.bPageDown_Click);\n            // \n            // Form1\n            // \n            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);\n            this.ClientSize = new System.Drawing.Size(768, 427);\n            this.Controls.Add(this.rdlViewer);\n            this.Controls.Add(this.panel1);\n            this.KeyPreview = true;\n            this.Name = \"Form1\";\n            this.Text = \"Data Tests\";\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n\t\t}\n\t\t#endregion\n\n\t\t/// <summary>\n\t\t/// The main entry point for the application.\n\t\t/// </summary>\n\t\t[STAThread]\n\t\tstatic void Main() \n\t\t{\n\t\t\tApplication.Run(new Form1());\n\t\t}\n\n\t\tprivate void bSetReport_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tthis.rdlViewer.SourceRdl = @\"<?xml version='1.0' encoding='utf-8'?>\n<Report>\n  <DataElementStyle>ElementNormal</DataElementStyle>\n  <RightMargin>0.25in</RightMargin>\n  <Body>\n    <ReportItems>\n      <List Name='list1'>\n        <DataInstanceName>Row</DataInstanceName>\n\t\t<NoRows>There are no rows</NoRows>\n        <Style />\n        <DataSetName>Data</DataSetName>\n        <ReportItems>\n          <Textbox Name='Phone'>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n              <PaddingBottom>2pt</PaddingBottom>\n              <PaddingTop>2pt</PaddingTop>\n              <PaddingRight>2pt</PaddingRight>\n            </Style>\n            <ZIndex>1</ZIndex>\n            <CanGrow>false</CanGrow>\n            <Value>=Fields!Phone.Value</Value>\n            <Left>1.5in</Left>\n            <Width>1in</Width>\n            <Height>14pt</Height>\n          </Textbox>\n          <Textbox Name='ContactName'>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n              <PaddingBottom>2pt</PaddingBottom>\n              <PaddingTop>2pt</PaddingTop>\n              <PaddingRight>2pt</PaddingRight>\n            </Style>\n            <Width>1.5in</Width>\n            <Height>14pt</Height>\n            <CanGrow>false</CanGrow>\n            <Value>=Fields!ContactName.Value</Value>\n          </Textbox>\n        </ReportItems>\n      </List>\n    </ReportItems>\n    <Style />\n    <Height>0.25in</Height>\n    <ColumnSpacing>0.25in</ColumnSpacing>\n    <Columns>3</Columns>\n  </Body>\n  <TopMargin>0.5in</TopMargin>\n  <DataSources>\n    <DataSource Name='DS1'>\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n\t\t<ConnectString></ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name='Data'>\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT ContactName, Phone FROM Customers ORDER BY 1</CommandText>\n      </Query>\n      <Fields>\n        <Field Name='ContactName'>\n          <DataField>ContactName</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name='Phone'>\n          <DataField>Phone</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <LeftMargin>0.25in</LeftMargin>\n  <BottomMargin>0.5in</BottomMargin>\n  <Width>2.5in</Width>\n  <PageHeader>\n    <Height>0pt</Height>\n  </PageHeader>\n  <PageFooter>\n    <Height>0pt</Height>\n  </PageFooter>\n</Report>\";\n\t\t}\n\n\t\tprivate void ManualDataTable_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tif (this.rdlViewer.SourceRdl == null)\n\t\t\t{\n\t\t\t\tMessageBox.Show(\"Hit the Set Report button first!\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Create a DataTable and manually populate it.\n\t\t\tDataTable dt = new DataTable();\n\t\t\t// The column names need to match the Field DataField element\n\t\t\tdt.Columns.Add(new DataColumn(\"ContactName\", typeof(string))); \n\t\t\tdt.Columns.Add(new DataColumn(\"Phone\", typeof(string)));\n\t\t\t// Create some data and add it to the data table\n\t\t\tstring[] rowValues = new string[2];\n\t\t\trowValues[0] = \"Lily\";\n\t\t\trowValues[1] = \"617-555-1234\";\n\t\t\tdt.Rows.Add(rowValues);\n\t\t\trowValues[0] = \"Daisy\";\n\t\t\trowValues[1] = \"617-555-8324\";\n\t\t\tdt.Rows.Add(rowValues);\n\n\t\t\t// Tell the report to use the data\n\t\t\tReport rpt = this.rdlViewer.Report;\t\t\t// Get the report\n\t\t\tfyiReporting.RDL.DataSet ds = rpt.DataSets[\"Data\"];\t\t// get the data set\n\t\t\tds.SetData(dt);\t\t\t\t\t// set the data for the dataset\n\t\t\trdlViewer.Rebuild();\t\t\t// force report to get rebuilt\n\t\t}\n\n\t\tprivate void bXMLData_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tif (this.rdlViewer.SourceRdl == null)\n\t\t\t{\n\t\t\t\tMessageBox.Show(\"Hit the Set Report button first!\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tstring xmlData = @\"<?xml version='1.0' encoding='UTF-8'?>\n<Rows>\n<Row><ContactName>Alejandra Camino</ContactName><Phone>(91) 745 6200</Phone></Row>\n<Row><ContactName>Alexander Feuer</ContactName><Phone>0342-023176</Phone></Row>\n<Row><ContactName>Ana Trujillo</ContactName><Phone>(5) 555-4729</Phone></Row>\n<Row><ContactName>Anabela Domingues</ContactName><Phone>(11) 555-2167</Phone></Row>\n<Row><ContactName>Andr&#233; Fonseca</ContactName><Phone>(11) 555-9482</Phone></Row>\n</Rows>\";\n\n\t\t\tXmlDocument doc = new XmlDocument();\n\t\t\tdoc.LoadXml(xmlData);\n\n\t\t\t// Tell the report to use the data\n\t\t\tReport rpt = this.rdlViewer.Report;\t\t\t// Get the report\n\t\t\tfyiReporting.RDL.DataSet ds = rpt.DataSets[\"Data\"];\t\t// get the data set\n\t\t\tds.SetData(doc);\n\t\t\trdlViewer.Rebuild();\t\t\t// force report to get rebuilt\n\t\t}\n\n\t\tprivate void bIDataReader_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tif (this.rdlViewer.SourceRdl == null)\n\t\t\t{\n\t\t\t\tMessageBox.Show(\"Hit the Set Report button first!\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tCursor saveCursor=Cursor.Current;\n\t\t\tCursor.Current = Cursors.WaitCursor;\n\n\t\t\tIDbConnection cnSQL=null;\n\t\t\tIDbCommand cmSQL=null;\n\t\t\tIDataReader dr=null;\t   \n\t\t\ttry\n\t\t\t{\n\t\t\t\tcnSQL = new SqlConnection(this.tbConnectionString.Text);\n\t\t\t\tcnSQL.Open();\n\t\t\t\tcmSQL = new SqlCommand(\"SELECT ContactName, Phone FROM Customers ORDER BY 1\", \n\t\t\t\t\t\t\t\t\t\t(SqlConnection) cnSQL);\n\t\t\t\tdr = cmSQL.ExecuteReader(CommandBehavior.SequentialAccess);\n\n\t\t\t\t// Tell the report to use the data\n\t\t\t\tReport rpt = this.rdlViewer.Report;\t\t\t// Get the report\n\t\t\t\tfyiReporting.RDL.DataSet ds = rpt.DataSets[\"Data\"];\t\t// get the data set\n\t\t\t\tds.SetData(dr);\n\t\t\t\trdlViewer.Rebuild();\t// force report to get rebuilt\n\t\t\t}\n\t\t\tcatch (SqlException sqle)\n\t\t\t{\n\t\t\t\tMessageBox.Show(sqle.Message, \"SQL Error\");\n\t\t\t}\n\t\t\tcatch (Exception ge)\n\t\t\t{\n\t\t\t\tMessageBox.Show(ge.Message, \"Error\");\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (cnSQL != null)\n\t\t\t\t{\n\t\t\t\t\tcnSQL.Close();\n\t\t\t\t\tcnSQL.Dispose();\n\t\t\t\t\tif (cmSQL != null)\n\t\t\t\t\t{\n\t\t\t\t\t\tcmSQL.Dispose();\n\t\t\t\t\t\tif (dr != null)\n\t\t\t\t\t\t\tdr.Close();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tCursor.Current = saveCursor;\n\t\t\t}\n\t\t}\n\n\t\tprivate void bDataSource_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tif (this.rdlViewer.SourceRdl == null)\n\t\t\t{\n\t\t\t\tMessageBox.Show(\"Hit the Set Report button first!\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tCursor saveCursor=Cursor.Current;\n\t\t\tCursor.Current = Cursors.WaitCursor;\n\n\t\t\tIDbConnection cnSQL=null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\tcnSQL = new SqlConnection(this.tbConnectionString.Text);\n\t\t\t\tcnSQL.Open();\n\n\t\t\t\t// Tell the report to use this connection\n\t\t\t\tReport rpt = this.rdlViewer.Report;\t\t\t// Get the report\n\t\t\t\tfyiReporting.RDL.DataSource ds = rpt.DataSources[\"DS1\"];\t\t// get the data source\n\t\t\t\tds.UserConnection = cnSQL;\n\t\t\t\t// reset call to set user data (if made)\n\t\t\t\tfyiReporting.RDL.DataSet dts = rpt.DataSets[\"Data\"];\t\t// get the data set\n\t\t\t\tdts.SetData((XmlDocument) null);\t\t// this will clear out user data (if any); otherwise userdata would override\n\n\t\t\t\trdlViewer.Rebuild();\t\t\t// force report to get rebuilt\n\t\t\t\tds.UserConnection = null;\t\t// clear it out\n\t\t\t}\n\t\t\tcatch (SqlException sqle)\n\t\t\t{\n\t\t\t\tMessageBox.Show(sqle.Message, \"SQL Error\");\n\t\t\t}\n\t\t\tcatch (Exception ge)\n\t\t\t{\n\t\t\t\tMessageBox.Show(ge.Message, \"Error\");\n\t\t\t}\n\t\t\tfinally\n\t\t\t{\n\t\t\t\tif (cnSQL != null)\n\t\t\t\t{\n\t\t\t\t\tcnSQL.Close();\n\t\t\t\t\tcnSQL.Dispose();\n\t\t\t\t}\n\t\t\t\tCursor.Current = saveCursor;\n\t\t\t}\n\t\t}\n\n\t\tprivate void bEnumerable_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tif (this.rdlViewer.SourceRdl == null)\n\t\t\t{\n\t\t\t\tMessageBox.Show(\"Hit the Set Report button first!\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry\n\t\t\t{\n\t\t\t\tArrayList ar = new ArrayList();\n\t\t\t\tar.Add(new Contact(\"Contact Object\", \"(555) 712 1234\"));\n\t\t\t\tar.Add(new Contact(\"Alejandra Camino\", \"(91) 745 6200\"));\n\t\t\t\tar.Add(new Contact(\"Alexander Feuer\", \"0342-023176\"));\n\t\t\t\tar.Add(new Contact(\"Ana Trujillo\", \"(5) 555-4729\"));\n\t\t\t\tar.Add(new Contact(\"Anabela Domingues\", \"(11) 555-2167\"));\n\n\t\t\t\t// Tell the report to use this IEnumerable\n\t\t\t\tReport rpt = this.rdlViewer.Report;\t\t\t// Get the report\n\t\t\t\t// reset call to set user data (if made)\n\t\t\t\tfyiReporting.RDL.DataSet dts = rpt.DataSets[\"Data\"];\t\t// get the data set\n\t\t\t\tdts.SetData(ar);\t\t// reset the data\n\n\t\t\t\trdlViewer.Rebuild();\t\t\t// force report to get rebuilt\n\t\t\t}\n\t\t\tcatch (Exception ge)\n\t\t\t{\n\t\t\t\tMessageBox.Show(ge.Message, \"Error\");\n\t\t\t}\n\t\t\n\t\t}\n\n\t\tprivate void bParameters_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tthis.rdlViewer.SourceRdl = @\"<?xml version='1.0' encoding='utf-8'?>\n<Report>\n  <DataElementStyle>ElementNormal</DataElementStyle>\n  <RightMargin>0.25in</RightMargin>\n  <ReportParameters>\n\t<ReportParameter Name='Name'>\n\t\t<DataType>String</DataType>\n\t\t<DefaultValue>\n\t\t\t<Values><Value>%</Value></Values>\n\t\t</DefaultValue>\n\t</ReportParameter>\n  </ReportParameters>\n  <Body>\n    <ReportItems>\n          <Textbox Name='ParmTB'>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n              <PaddingBottom>2pt</PaddingBottom>\n              <PaddingTop>2pt</PaddingTop>\n              <PaddingRight>2pt</PaddingRight>\n            </Style>\n            <ZIndex>1</ZIndex>\n            <CanGrow>false</CanGrow>\n            <Value>=Parameters!Name.Value</Value>\n            <Left>0in</Left>\n            <Width>2in</Width>\n            <Height>14pt</Height>\n          </Textbox>\n      <List Name='list1'>\n        <DataInstanceName>Row</DataInstanceName>\n\t\t<NoRows>There are no rows</NoRows>\n        <Style />\n        <DataSetName>Data</DataSetName>\n        <ReportItems>\n          <Textbox Name='Phone'>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n              <PaddingBottom>2pt</PaddingBottom>\n              <PaddingTop>2pt</PaddingTop>\n              <PaddingRight>2pt</PaddingRight>\n            </Style>\n            <ZIndex>1</ZIndex>\n            <CanGrow>false</CanGrow>\n            <Value>=Fields!Phone.Value</Value>\n            <Left>1.5in</Left>\n            <Width>1in</Width>\n            <Height>14pt</Height>\n          </Textbox>\n          <Textbox Name='ContactName'>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n              <PaddingBottom>2pt</PaddingBottom>\n              <PaddingTop>2pt</PaddingTop>\n              <PaddingRight>2pt</PaddingRight>\n            </Style>\n            <Width>1.5in</Width>\n            <Height>14pt</Height>\n            <CanGrow>false</CanGrow>\n            <Value>=Fields!ContactName.Value</Value>\n          </Textbox>\n        </ReportItems>\n        <Top>1in</Top>\n      </List>\n    </ReportItems>\n    <Style />\n    <Height>0.25in</Height>\n    <ColumnSpacing>0.25in</ColumnSpacing>\n    <Columns>3</Columns>\n  </Body>\n  <TopMargin>0.5in</TopMargin>\n  <DataSources>\n    <DataSource Name='DS1'>\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n\t\t<ConnectString>Server=(local)\\VSDotNet;DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name='Data'>\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT ContactName, Phone FROM Customers WHERE ContactName LIKE @Contact ORDER BY 1</CommandText>\n\t\t<QueryParameters>\n\t\t\t<QueryParameter Name='Contact'>\n\t\t\t\t<Value>=Parameters!Name.Value</Value>\n\t\t\t</QueryParameter>\n\t\t</QueryParameters>\n      </Query>\n      <Fields>\n        <Field Name='ContactName'>\n          <DataField>ContactName</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name='Phone'>\n          <DataField>Phone</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <LeftMargin>0.25in</LeftMargin>\n  <BottomMargin>0.5in</BottomMargin>\n  <Width>2.5in</Width>\n  <PageHeader>\n    <Height>0pt</Height>\n  </PageHeader>\n  <PageFooter>\n    <Height>0pt</Height>\n  </PageFooter>\n</Report>\";\n           // this.rdlViewer.ShowParameterPanel = true;\n            this.rdlViewer.Parameters = this.tbParms.Text;\n            rdlViewer.Rebuild();\t\t\t// force report to get rebuilt\n\n\t\t}\n\n\t\tprivate void bSetParm_Click(object sender, System.EventArgs e)\n\t\t{\n\t\t\tthis.rdlViewer.Parameters = this.tbParms.Text;\n\t\t\tthis.rdlViewer.Rebuild();\n\t\t}\n\n        private void bOpen_Click(object sender, EventArgs e)\n        {\n            OpenFileDialog ofd = new OpenFileDialog();\n            ofd.Filter = \"Report files (*.rdl)|*.rdl|\" +\n                \"All files (*.*)|*.*\";\n            ofd.FilterIndex = 1;\n            ofd.CheckFileExists = true;\n            if (ofd.ShowDialog(this) == DialogResult.OK)\n            {\n                this.rdlViewer.SourceFile = new System.Uri (ofd.FileName);\n            }\n\n        }\n\n        private void rdlViewer_KeyPress(object sender, KeyPressEventArgs e)\n        {\n            if ((int)e.KeyChar == (int) Keys.Escape)\n                this.Close();\n        }\n\n        private void chkFind_CheckedChanged(object sender, EventArgs e)\n        {\n            rdlViewer.ShowFindPanel = chkFind.Checked;\n        }\n\n        private void bPageUp_Click(object sender, EventArgs e)\n        {\n            //if (rdlViewer.ZoomMode != ZoomEnum.FitPage)\n            //    rdlViewer.ZoomMode = ZoomEnum.FitPage;\n            if (this.rdlViewer.PageCurrent > 1)\n                rdlViewer.PageCurrent -= 1; \n\n        }\n\n        private void bPageDown_Click(object sender, EventArgs e)\n        {\n            if (rdlViewer.PageCurrent < rdlViewer.PageCount)\n                rdlViewer.PageCurrent += 1; \n        }\n\t}\n\tclass Contact\n\t{\n\t\tpublic string ContactName;\n\t\tstring _Phone;\n\n\t\tpublic Contact (string contact, string phone)\n\t\t{\n\t\t\tContactName = contact;\n\t\t\t_Phone = phone;\n\t\t}\n\n        public string Phone\n        {\n            get { return _Phone; }\n        }\n\t}\n}\n"
  },
  {
    "path": "RdlTests/DataTests/DataTests.csproj",
    "content": "﻿<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"3.5\">\n  <PropertyGroup>\n    <ProjectType>Local</ProjectType>\n    <ProductVersion>9.0.30729</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{83A3414F-44B6-4FFB-89F2-A5F4EA2E8A3A}</ProjectGuid>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ApplicationIcon>App.ico</ApplicationIcon>\n    <AssemblyKeyContainerName>\n    </AssemblyKeyContainerName>\n    <AssemblyName>DataTests</AssemblyName>\n    <AssemblyOriginatorKeyFile>\n    </AssemblyOriginatorKeyFile>\n    <DefaultClientScript>JScript</DefaultClientScript>\n    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>\n    <DefaultTargetSchema>IE50</DefaultTargetSchema>\n    <DelaySign>false</DelaySign>\n    <OutputType>WinExe</OutputType>\n    <RootNamespace>DataTests</RootNamespace>\n    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>\n    <StartupObject>\n    </StartupObject>\n    <FileUpgradeFlags>\n    </FileUpgradeFlags>\n    <UpgradeBackupLocation>\n    </UpgradeBackupLocation>\n    <OldToolsVersion>2.0</OldToolsVersion>\n    <PublishUrl>publish\\</PublishUrl>\n    <Install>true</Install>\n    <InstallFrom>Disk</InstallFrom>\n    <UpdateEnabled>false</UpdateEnabled>\n    <UpdateMode>Foreground</UpdateMode>\n    <UpdateInterval>7</UpdateInterval>\n    <UpdateIntervalUnits>Days</UpdateIntervalUnits>\n    <UpdatePeriodically>false</UpdatePeriodically>\n    <UpdateRequired>false</UpdateRequired>\n    <MapFileExtensions>true</MapFileExtensions>\n    <ApplicationRevision>0</ApplicationRevision>\n    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\n    <IsWebBootstrapper>false</IsWebBootstrapper>\n    <UseApplicationTrust>false</UseApplicationTrust>\n    <BootstrapperEnabled>true</BootstrapperEnabled>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\n    <BaseAddress>285212672</BaseAddress>\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\n    <ConfigurationOverrideFile>\n    </ConfigurationOverrideFile>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <DocumentationFile>\n    </DocumentationFile>\n    <DebugSymbols>true</DebugSymbols>\n    <FileAlignment>4096</FileAlignment>\n    <NoStdLib>false</NoStdLib>\n    <NoWarn>\n    </NoWarn>\n    <Optimize>false</Optimize>\n    <RegisterForComInterop>false</RegisterForComInterop>\n    <RemoveIntegerChecks>false</RemoveIntegerChecks>\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\n    <WarningLevel>4</WarningLevel>\n    <DebugType>full</DebugType>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <OutputPath>bin\\Release\\</OutputPath>\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\n    <BaseAddress>285212672</BaseAddress>\n    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\n    <ConfigurationOverrideFile>\n    </ConfigurationOverrideFile>\n    <DefineConstants>TRACE</DefineConstants>\n    <DocumentationFile>\n    </DocumentationFile>\n    <DebugSymbols>false</DebugSymbols>\n    <FileAlignment>4096</FileAlignment>\n    <NoStdLib>false</NoStdLib>\n    <NoWarn>\n    </NoWarn>\n    <Optimize>true</Optimize>\n    <RegisterForComInterop>false</RegisterForComInterop>\n    <RemoveIntegerChecks>false</RemoveIntegerChecks>\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\n    <WarningLevel>4</WarningLevel>\n    <DebugType>none</DebugType>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x64' \">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x64\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <BaseAddress>285212672</BaseAddress>\n    <FileAlignment>4096</FileAlignment>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x64' \">\n    <OutputPath>bin\\x64\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <BaseAddress>285212672</BaseAddress>\n    <Optimize>true</Optimize>\n    <FileAlignment>4096</FileAlignment>\n    <PlatformTarget>x64</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <BaseAddress>285212672</BaseAddress>\n    <FileAlignment>4096</FileAlignment>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <BaseAddress>285212672</BaseAddress>\n    <Optimize>true</Optimize>\n    <FileAlignment>4096</FileAlignment>\n    <PlatformTarget>x86</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\">\n      <Name>System</Name>\n    </Reference>\n    <Reference Include=\"System.Data\">\n      <Name>System.Data</Name>\n    </Reference>\n    <Reference Include=\"System.Drawing\">\n      <Name>System.Drawing</Name>\n    </Reference>\n    <Reference Include=\"System.Windows.Forms\">\n      <Name>System.Windows.Forms</Name>\n    </Reference>\n    <Reference Include=\"System.Xml\">\n      <Name>System.XML</Name>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"App.ico\" />\n    <Compile Include=\"AssemblyInfo.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"DataTests.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <EmbeddedResource Include=\"DataTests.resx\">\n      <DependentUpon>DataTests.cs</DependentUpon>\n      <SubType>Designer</SubType>\n    </EmbeddedResource>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\RdlEngine\\RdlEngine.csproj\">\n      <Project>{C97E91F4-B310-44E2-9B6C-96775395722D}</Project>\n      <Name>RdlEngine</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\..\\RdlViewer\\RdlViewer.csproj\">\n      <Project>{D99145B1-CB6C-41F5-BA86-723325145FB5}</Project>\n      <Name>RdlViewer</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework Client Profile</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.2.0\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>\n      <Install>true</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.0\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\n      <Visible>False</Visible>\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\n      <Install>false</Install>\n    </BootstrapperPackage>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <PropertyGroup>\n    <PreBuildEvent>\n    </PreBuildEvent>\n    <PostBuildEvent>\n    </PostBuildEvent>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "RdlTests/DataTests/DataTests.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "RdlTests/RdlTests.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 10.00\n# Visual Studio 2008\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DataTests\", \"DataTests\\DataTests.csproj\", \"{83A3414F-44B6-4FFB-89F2-A5F4EA2E8A3A}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"TestLibrary\", \"TestLibrary\\TestLibrary.csproj\", \"{BD38FD13-1D56-4ECC-912A-F8694C4FD9F6}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlEngine\", \"..\\RdlEngine\\RdlEngine.csproj\", \"{C97E91F4-B310-44E2-9B6C-96775395722D}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlViewer\", \"..\\RdlViewer\\RdlViewer.csproj\", \"{D99145B1-CB6C-41F5-BA86-723325145FB5}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{83A3414F-44B6-4FFB-89F2-A5F4EA2E8A3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{83A3414F-44B6-4FFB-89F2-A5F4EA2E8A3A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{83A3414F-44B6-4FFB-89F2-A5F4EA2E8A3A}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{83A3414F-44B6-4FFB-89F2-A5F4EA2E8A3A}.Debug|x64.Build.0 = Debug|x64\n\t\t{83A3414F-44B6-4FFB-89F2-A5F4EA2E8A3A}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{83A3414F-44B6-4FFB-89F2-A5F4EA2E8A3A}.Debug|x86.Build.0 = Debug|x86\n\t\t{83A3414F-44B6-4FFB-89F2-A5F4EA2E8A3A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{83A3414F-44B6-4FFB-89F2-A5F4EA2E8A3A}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{83A3414F-44B6-4FFB-89F2-A5F4EA2E8A3A}.Release|x64.ActiveCfg = Release|x64\n\t\t{83A3414F-44B6-4FFB-89F2-A5F4EA2E8A3A}.Release|x64.Build.0 = Release|x64\n\t\t{83A3414F-44B6-4FFB-89F2-A5F4EA2E8A3A}.Release|x86.ActiveCfg = Release|x86\n\t\t{83A3414F-44B6-4FFB-89F2-A5F4EA2E8A3A}.Release|x86.Build.0 = Release|x86\n\t\t{BD38FD13-1D56-4ECC-912A-F8694C4FD9F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{BD38FD13-1D56-4ECC-912A-F8694C4FD9F6}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{BD38FD13-1D56-4ECC-912A-F8694C4FD9F6}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{BD38FD13-1D56-4ECC-912A-F8694C4FD9F6}.Debug|x64.Build.0 = Debug|x64\n\t\t{BD38FD13-1D56-4ECC-912A-F8694C4FD9F6}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{BD38FD13-1D56-4ECC-912A-F8694C4FD9F6}.Debug|x86.Build.0 = Debug|x86\n\t\t{BD38FD13-1D56-4ECC-912A-F8694C4FD9F6}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{BD38FD13-1D56-4ECC-912A-F8694C4FD9F6}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{BD38FD13-1D56-4ECC-912A-F8694C4FD9F6}.Release|x64.ActiveCfg = Release|x64\n\t\t{BD38FD13-1D56-4ECC-912A-F8694C4FD9F6}.Release|x64.Build.0 = Release|x64\n\t\t{BD38FD13-1D56-4ECC-912A-F8694C4FD9F6}.Release|x86.ActiveCfg = Release|x86\n\t\t{BD38FD13-1D56-4ECC-912A-F8694C4FD9F6}.Release|x86.Build.0 = Release|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.Build.0 = Debug|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.Build.0 = Debug|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.ActiveCfg = Release|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.Build.0 = Release|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.ActiveCfg = Release|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.Build.0 = Release|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x64.Build.0 = Debug|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x86.Build.0 = Debug|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x64.ActiveCfg = Release|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x64.Build.0 = Release|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x86.ActiveCfg = Release|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x86.Build.0 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "RdlTests/TestLibrary/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"TestLibrary\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"TestLibrary\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2007\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"242ffb0d-8dd1-4e91-ac49-f2e4137e442d\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "RdlTests/TestLibrary/TestClass.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace TestLibrary\n{\n    public class TestClass\n    {\n        public static string Test()\n        { \n            return \"baseclass\";\n        }\n    }\n    public class XTestClass : TestClass \n    {\n        public static string XTest()\n        {\n            return \"inherited class\";\n        }\n    }\n    \n    public static class Util\n    {\n        public static DateTime? GetDateTime()\n        {\n            return DateTime.Now;\n        }\n        public static decimal Test(DateTime? d)\n        {\n            return 0;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlTests/TestLibrary/TestLibrary.csproj",
    "content": "﻿<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"3.5\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>9.0.30729</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{BD38FD13-1D56-4ECC-912A-F8694C4FD9F6}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>TestLibrary</RootNamespace>\n    <AssemblyName>TestLibrary</AssemblyName>\n    <FileUpgradeFlags>\n    </FileUpgradeFlags>\n    <OldToolsVersion>2.0</OldToolsVersion>\n    <UpgradeBackupLocation>\n    </UpgradeBackupLocation>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x64' \">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x64\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x64' \">\n    <OutputPath>bin\\x64\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <Optimize>true</Optimize>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <Optimize>true</Optimize>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"TestClass.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "RdlViewer/DataSourcePassword.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlViewer\n{\n    public partial class DataSourcePassword : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tprivate System.Windows.Forms.Label label1;\nprivate System.Windows.Forms.Button bOK;\nprivate System.Windows.Forms.Button bCancel;\nprivate System.Windows.Forms.TextBox tbPassPhrase;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DataSourcePassword));\n\t\t\tthis.label1 = new System.Windows.Forms.Label();\n\t\t\tthis.bOK = new System.Windows.Forms.Button();\n\t\t\tthis.bCancel = new System.Windows.Forms.Button();\n\t\t\tthis.tbPassPhrase = new System.Windows.Forms.TextBox();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// label1\n\t\t\t// \n\t\t\tresources.ApplyResources(this.label1, \"label1\");\n\t\t\tthis.label1.Name = \"label1\";\n\t\t\t// \n\t\t\t// bOK\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bOK, \"bOK\");\n\t\t\tthis.bOK.DialogResult = System.Windows.Forms.DialogResult.OK;\n\t\t\tthis.bOK.Name = \"bOK\";\n\t\t\t// \n\t\t\t// bCancel\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bCancel, \"bCancel\");\n\t\t\tthis.bCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n\t\t\tthis.bCancel.Name = \"bCancel\";\n\t\t\t// \n\t\t\t// tbPassPhrase\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbPassPhrase, \"tbPassPhrase\");\n\t\t\tthis.tbPassPhrase.Name = \"tbPassPhrase\";\n\t\t\t// \n\t\t\t// DataSourcePassword\n\t\t\t// \n\t\t\tthis.AcceptButton = this.bOK;\n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.CancelButton = this.bCancel;\n\t\t\tthis.Controls.Add(this.tbPassPhrase);\n\t\t\tthis.Controls.Add(this.bCancel);\n\t\t\tthis.Controls.Add(this.bOK);\n\t\t\tthis.Controls.Add(this.label1);\n\t\t\tthis.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n\t\t\tthis.MaximizeBox = false;\n\t\t\tthis.MinimizeBox = false;\n\t\t\tthis.Name = \"DataSourcePassword\";\n\t\t\tthis.ShowInTaskbar = false;\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlViewer/DataSourcePassword.cs",
    "content": "\nusing System;\nusing System.Drawing;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlViewer;\n\nnamespace Majorsilence.Reporting.RdlViewer\n{\n    /// <summary>\n    /// Summary description for ZoomTo.\n    /// </summary>\n    public partial class DataSourcePassword \n    {\n\n        public DataSourcePassword()\n        {\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n        }\n\n        public string PassPhrase\n        {\n            get { return tbPassPhrase.Text; }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlViewer/DataSourcePassword.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"label1.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Name\" xml:space=\"preserve\">\n    <value>bCancel</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbPassPhrase.Name\" xml:space=\"preserve\">\n    <value>tbPassPhrase</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bCancel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbPassPhrase.PasswordChar\" type=\"System.Char, mscorlib\" xml:space=\"preserve\">\n    <value>*</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Please enter the pass phrase for shared data sources</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DataSourcePassword</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"bCancel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>208, 80</value>\n  </data>\n  <data name=\"bCancel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"label1.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <data name=\"tbPassPhrase.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 40</value>\n  </data>\n  <data name=\"tbPassPhrase.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>280, 23</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>306, 112</value>\n  </data>\n  <data name=\"&gt;&gt;label1.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <data name=\"&gt;&gt;tbPassPhrase.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Name\" xml:space=\"preserve\">\n    <value>label1</value>\n  </data>\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>112, 80</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"&gt;&gt;tbPassPhrase.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;tbPassPhrase.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bCancel.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"tbPassPhrase.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>272, 20</value>\n  </data>\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Shared Data Sources</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <data name=\"&gt;&gt;label1.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlViewer/DataSourcePassword.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"label1.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>272, 28</value>\n  </data>\n  <data name=\"label1.Text\" xml:space=\"preserve\">\n    <value>Введите пароль для общего источника данных</value>\n  </data>\n  <data name=\"bCancel.Text\" xml:space=\"preserve\">\n    <value>Отменить</value>\n  </data>\n  <data name=\"tbPassPhrase.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 47</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Общий источник данных</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlViewer/DialogMessages.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlViewer\n{\n    public partial class DialogMessages : System.Windows.Forms.Form\n\t{\n\t\t#region Windows Form Designer generated code\n\t\tprivate System.Windows.Forms.Button bOK;\nprivate System.Windows.Forms.TextBox tbMessages;\nprivate System.ComponentModel.Container components = null;\n\n\t\tprivate void InitializeComponent()\n\t\t{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DialogMessages));\n\t\t\tthis.bOK = new System.Windows.Forms.Button();\n\t\t\tthis.tbMessages = new System.Windows.Forms.TextBox();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// bOK\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bOK, \"bOK\");\n\t\t\tthis.bOK.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n\t\t\tthis.bOK.Name = \"bOK\";\n\t\t\t// \n\t\t\t// tbMessages\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbMessages, \"tbMessages\");\n\t\t\tthis.tbMessages.Name = \"tbMessages\";\n\t\t\tthis.tbMessages.ReadOnly = true;\n\t\t\t// \n\t\t\t// DialogMessages\n\t\t\t// \n\t\t\tthis.AcceptButton = this.bOK;\n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.CancelButton = this.bOK;\n\t\t\tthis.Controls.Add(this.tbMessages);\n\t\t\tthis.Controls.Add(this.bOK);\n\t\t\tthis.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n\t\t\tthis.MaximizeBox = false;\n\t\t\tthis.MinimizeBox = false;\n\t\t\tthis.Name = \"DialogMessages\";\n\t\t\tthis.ShowInTaskbar = false;\n\t\t\tthis.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n\t\t}\n\t\t#endregion\n\n\t\tprotected override void Dispose( bool disposing )\n\t\t{\n\t\t\tif( disposing )\n\t\t\t{\n\t\t\t\tif(components != null)\n\t\t\t\t{\n\t\t\t\t\tcomponents.Dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbase.Dispose( disposing );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "RdlViewer/DialogMessages.cs",
    "content": "\nusing System;\nusing System.Drawing;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Windows.Forms;\n\nnamespace Majorsilence.Reporting.RdlViewer\n{\n    /// <summary>\n    /// DialogMessage is used in place of a message box when the text can be large\n    /// </summary>\n    public partial class DialogMessages \n    {\n\n        public DialogMessages(IList msgs)\n        {\n            //\n            // Required for Windows Form Designer support\n            //\n            InitializeComponent();\n\n            string[] lines = new string[msgs.Count];\n            int l = 0;\n            foreach (string msg in msgs)\n            {\n                lines[l++] = msg;\n            }\n            tbMessages.Lines = lines;\n            return;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlViewer/DialogMessages.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"bOK.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>75, 23</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bOK.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"$this.ClientSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>482, 240</value>\n  </data>\n  <data name=\"&gt;&gt;tbMessages.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;tbMessages.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbMessages.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>16, 16</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"tbMessages.ScrollBars\" type=\"System.Windows.Forms.ScrollBars, System.Windows.Forms\">\n    <value>Both</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"$this.AutoScaleBaseSize\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>5, 13</value>\n  </data>\n  <data name=\"$this.StartPosition\" type=\"System.Windows.Forms.FormStartPosition, System.Windows.Forms\">\n    <value>CenterParent</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.Name\" xml:space=\"preserve\">\n    <value>bOK</value>\n  </data>\n  <data name=\"tbMessages.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>448, 176</value>\n  </data>\n  <data name=\"bOK.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>200, 208</value>\n  </data>\n  <data name=\"&gt;&gt;tbMessages.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"tbMessages.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>9</value>\n  </data>\n  <data name=\"&gt;&gt;bOK.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"tbMessages.Multiline\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Report Warnings</value>\n  </data>\n  <data name=\"bOK.Text\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"&gt;&gt;tbMessages.Name\" xml:space=\"preserve\">\n    <value>tbMessages</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>DialogMessages</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlViewer/DialogMessages.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"$this.Text\" xml:space=\"preserve\">\n    <value>Предупреждения отчёта</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlViewer/PageDrawing.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.Drawing.Drawing2D;\nusing System.Windows.Forms;\nusing System.IO;\nusing System.Text;\nusing Majorsilence.Reporting.RdlViewer.Resources;\nusing Majorsilence.Reporting.Rdl;\nusing System.ComponentModel;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.RdlViewer\n{\n    /// <summary>\n    /// PageDrawing draws to a graphics context the loaded Pages class.   This \n    /// class is usually created from running a RDL file thru the renderer.\n    /// </summary>\n    public class PageDrawing : UserControl\n    {\n        private Pages _pgs;\t\t\t\t\t// the pages of the report to view\n\n        // During drawing these are set\n        float _left;\n        float _top;\n        float _vScroll;\n        float _hScroll;\n        float DpiX;\n        float DpiY;\n        PageItem _HighlightItem = null;\n        string _HighlightText = null;\n        bool _HighlightCaseSensitive = false;\n        bool _HighlightAll = false;\n        Color _HighlightItemColor = Color.Aqua;\n        Color _HighlightAllColor = Color.Fuchsia;\n        Color _SelectItemColor = Color.DarkBlue;\n\n        // Mouse handling\n        List<HitListEntry> _HitList;\n        float _LastZoom;\n        ToolTip _tt;\n\n        // Selection handling\n        bool _bHaveMouse = false;       // have we captured the mouse\n        bool _bSelect = false;              // use the selection tool\n        private Point _ptRBOriginal = new Point();\t// starting position of the mouse (rubber banding)\n        private Point _ptRBLast = new Point();\t\t//   last position of mouse (rubber banding)\n        private Point _MousePosition = new Point();\t\t// position of the mouse\n        private List<PageItem> _SelectList;\n\n        public PageDrawing() : this(null)\n        {         \n            this.DoubleBuffered = true;\n        }\n        public PageDrawing(Pages pgs)\n        {\n            this.DoubleBuffered = true;\n            // Set up the tooltip\n            _tt = new ToolTip();\n            _tt.Active = false;\n            _tt.ShowAlways = true;\n\n            _HitList = new List<HitListEntry>();\n            _SelectList = new List<PageItem>();\n            _LastZoom = 1;\n\n            _pgs = pgs;\n\n            // Get our graphics DPI\t\t\t\t\t   \n            Graphics ga = null;\n            try\n            {\n                ga = this.CreateGraphics();\n                DpiX = ga.DpiX;\n                DpiY = ga.DpiY;\n            }\n            catch\n            {\n                DpiX = DpiY = 96;\n            }\n            finally\n            {\n                if (ga != null)\n                    ga.Dispose();\n            }\n            // force to double buffering for smoother drawing\n            //this.SetStyle(ControlStyles.DoubleBuffer | \n            //    ControlStyles.UserPaint | \n            //    ControlStyles.AllPaintingInWmPaint,\n            //    true);\n\n            this.DoubleBuffered = true;\n        }\n        /// <summary>\n        /// Enabling the SelectTool allows the user to select text and images.  Enabling or disabling\n        /// the SelectTool also clears out the current selection.\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        internal bool SelectTool\n        {\n            get { return _bSelect; }\n            set\n            {\n                _bSelect = value;\n                _SelectList.Clear();        // clear out the selection list\n                this.Invalidate();          // force repaint to create hitlist of items on screen\n            }\n        }\n        internal bool CanCopy\n        {\n            get\n            {\n                if (!SelectTool)\n                    return false;\n                return _SelectList.Count > 0;\n            }\n        }\n        /// <summary>\n        /// When the only selected object is a PageImage then SelectImage holds\n        /// the Image value; otherwise it will be null;\n        /// </summary>\n        internal Image SelectImage\n        {\n            get\n            {\n                if (!SelectTool || _SelectList.Count != 1)\n                    return null;\n                PageImage pi = _SelectList[0] as PageImage;\n                if (pi == null)\n                    return null;\n\n                Stream strm = null;\n                System.Drawing.Image im = null;\n                try\n                {\n                    strm = new MemoryStream(pi.GetImageData());\n                    im = System.Drawing.Image.FromStream(strm);\n                }\n                finally\n                {\n                    if (strm != null)\n                        strm.Close();\n                }\n                return im;\n            }\n        }\n        /// <summary>\n        /// The contents of the selected text.  Tab separate items on same y coordinate;\n        /// newline separate items when y coordinate changes.   Order is based on user\n        /// selection order.\n        /// </summary>\n        internal string SelectText\n        {\n            get\n            {\n                if (!SelectTool || _SelectList.Count == 0)\n                    return null;\n\n                StringBuilder sb = new StringBuilder();\n                float lastY = float.MinValue;\n\n                _SelectList.Sort(ComparePageItemByPageXY);\n                foreach (PageItem pi in _SelectList)\n                {\n                    PageText pt = pi as PageText;\n                    if (pt == null)\n                        continue;\n                    if (pt.HtmlParent != null)              // if an underlying PageText is selected we'll get it through the PageTextHtml\n                        continue;\n                    if (lastY != float.MinValue)            // if first time then don't need separator\n                    {\n                        if (pt.Y == lastY)\n                            sb.Append('\\t');                // same line put in a tab between values\n                        else\n                            sb.Append(Environment.NewLine); // force a new line\n                    }\n                    if (pt is PageTextHtml)\n                        SelectTextHtml(pt as PageTextHtml, sb);\n                    else\n                        sb.Append(pt.Text);\n                    lastY = pt.Y;\n                }\n                return sb.ToString();\n            }\n        }\n\n        private void SelectTextHtml(PageTextHtml ph, StringBuilder sb)\n        {\n            bool bFirst = true;\n            float lastY = float.MaxValue;\n            foreach (PageItem pi in ph)\n            {\n                if (bFirst)                 // we ignore the contents of the first item\n                {\n                    bFirst = false;\n                    continue;\n                }\n                PageText pt = pi as PageText;\n                if (pt == null)\n                    continue;\n                if (pt.Y > lastY)           // we've gone to a new line; put a blank in between the text\n                    sb.Append(' ');         //   this isn't always ideal: if user was just selecting html text\n                //   then they might want to retain the new lines; but when selecting\n                //   html page items and other page items new lines affect the table building\n\n                sb.Append(pt.Text);         // append on this text\n                lastY = pt.Y;\n            }\n            return;\n        }\n\n        private static int ComparePageItemByPageXY(PageItem pi1, PageItem pi2)\n        {\n            if (pi1.Page.Count != pi2.Page.Count)\n                return pi1.Page.Count - pi2.Page.Count;\n\n            if (pi1.Y != pi2.Y)\n            {\n                return Convert.ToInt32((pi1.Y - pi2.Y) * 1000);\n            }\n            return Convert.ToInt32((pi1.X - pi2.X) * 1000);\n        }\n        \n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        internal Pages Pgs\n        {\n            get { return _pgs; }\n            set { _pgs = value; }\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        internal Color HighlightItemColor\n        {\n            get { return _HighlightItemColor; }\n            set { _HighlightItemColor = value; }\n        }\n        \n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        internal Color HighlightAllColor\n        {\n            get { return _HighlightAllColor; }\n            set { _HighlightAllColor = value; }\n        }\n\n        protected override bool IsInputKey(Keys keyData)\n        {\n            if (keyData == Keys.Left ||\n                keyData == Keys.Right ||\n                keyData == Keys.Up ||\n                keyData == Keys.Down ||\n                keyData == Keys.Home ||\n                keyData == Keys.End ||\n                keyData == Keys.PageDown ||\n                keyData == Keys.PageUp)\n                return true;\n            return base.IsInputKey(keyData);\n        }\n\n        /// <summary>\n        /// Draw- simple draw of an entire page.  Useful when printing or creating an image.\n        /// </summary>\n        /// <param name=\"g\"></param>\n        /// <param name=\"page\"></param>\n        /// <param name=\"clipRectangle\"></param>\n        public async Task Draw(Graphics g, int page, System.Drawing.Rectangle clipRectangle, bool drawBackground, PointF pageOffset)\n        {\n            DpiX = g.DpiX;\t\t\t // this can change (e.g. printing graphics context)\n            DpiY = g.DpiY;\n            _HighlightText = null;\n            _HighlightItem = null;\n            _HighlightAll = false;\n            _HighlightCaseSensitive = false;\n\n            //\t\t\tg.InterpolationMode = InterpolationMode.HighQualityBilinear;\t// try to unfuzz charts\n            g.PageUnit = GraphicsUnit.Pixel;\n            g.ScaleTransform(1, 1);\n\n            if (!pageOffset.IsEmpty)    // used when correcting for non-printable area on paper\n            {\n                g.TranslateTransform(pageOffset.X, pageOffset.Y);\n            }\n\n            _left = 0;\n            _top = 0;\n            _hScroll = 0;\n            _vScroll = 0;\n\n            RectangleF r = new RectangleF(clipRectangle.X, clipRectangle.Y,\n                                            clipRectangle.Width, clipRectangle.Height);\n\n            if (drawBackground)\n                g.FillRectangle(Brushes.White, PixelsX(_left), PixelsY(_top),\n                    PixelsX(_pgs.PageWidth), PixelsY(_pgs.PageHeight));\n\n            await ProcessPage(g, _pgs[page], r, false);\n        }\n        /// <summary>\n        /// Draw: accounting for scrolling and zoom factors\n        /// </summary>\n        /// <param name=\"g\"></param>\n        /// <param name=\"zoom\"></param>\n        /// <param name=\"leftOffset\"></param>\n        /// <param name=\"pageGap\"></param>\n        /// <param name=\"hScroll\"></param>\n        /// <param name=\"vScroll\"></param>\n        /// <param name=\"clipRectangle\"></param>\n        public async Task Draw(Graphics g, float zoom, float leftOffset, float pageGap,\n            float hScroll, float vScroll,\n            System.Drawing.Rectangle clipRectangle,\n            PageItem highLightItem,\n            string highLight, bool highLightCaseSensitive, bool highLightAll)\n        {\n            // init for mouse handling\n            _HitList.Clear();\t\t\t// remove all items from list\n            _LastZoom = zoom;\n            _HighlightItem = highLightItem;\n            _HighlightText = highLight;\n            _HighlightCaseSensitive = highLightCaseSensitive;\n            _HighlightAll = highLightAll;\n\n            if (_pgs == null)\n            {\t// No pages; means nothing to draw\n                g.FillRectangle(Brushes.White, clipRectangle);\n                return;\n            }\n\n            g.PageUnit = GraphicsUnit.Pixel;\n            g.ScaleTransform(zoom, zoom);\n            DpiX = g.DpiX;\n            DpiY = g.DpiY;\n\n            // Zoom affects how much will show on the screen.  Adjust our perceived clipping rectangle\n            //  to account for it.\n            RectangleF r;\n            r = new RectangleF((clipRectangle.X) / zoom, (clipRectangle.Y) / zoom,\n                (clipRectangle.Width) / zoom, (clipRectangle.Height) / zoom);\n\n            // Calculate the top of the page\n            int fpage = (int)(vScroll / (_pgs.PageHeight + pageGap));\n            int lpage = (int)((vScroll + r.Height) / (_pgs.PageHeight + pageGap)) + 1;\n            if (fpage >= _pgs.PageCount)\n                return;\n            if (lpage >= _pgs.PageCount)\n                lpage = _pgs.PageCount - 1;\n\n            _hScroll = hScroll;\n            _left = leftOffset;\n            _top = pageGap;\n            // Loop thru the visible pages\n            for (int p = fpage; p <= lpage; p++)\n            {\n                _vScroll = vScroll - p * (_pgs.PageHeight + pageGap);\n\n                System.Drawing.Rectangle pr =\n                    new System.Drawing.Rectangle((int)PixelsX(_left - _hScroll), (int)PixelsY(_top - _vScroll),\n                                                    (int)PixelsX(_pgs.PageWidth), (int)PixelsY(_pgs.PageHeight));\n                g.FillRectangle(Brushes.White, pr);\n\n                await ProcessPage(g, _pgs[p], r, true);\n\n                // Draw the page outline\n                using (Pen pn = new Pen(Brushes.Black, 1))\n                {\n                    int z3 = Math.Min((int)(3f / zoom), 3);\n                    if (z3 <= 0)\n                        z3 = 1;\n                    int z4 = Math.Min((int)(4f / zoom), 4);\n                    if (z4 <= 0)\n                        z4 = 1;\n                    g.DrawRectangle(pn, pr);\t\t\t\t\t// outline of page\n                    g.FillRectangle(Brushes.Black,\n                        pr.X + pr.Width, pr.Y + z3, z3, pr.Height);\t\t// right side of page\n                    g.FillRectangle(Brushes.Black,\n                        pr.X + z3, pr.Y + pr.Height, pr.Width, z4);\t\t// bottom of page\n                }\n            }\n        }\n\n        override protected void OnMouseDown(MouseEventArgs mea)\n        {\n            base.OnMouseDown(mea);\t\t\t// allow base to process first\n            _MousePosition = new Point(mea.X, mea.Y);\n\n            if (MouseDownRubberBand(mea))\n                return;\n\n            HitListEntry hle = this.GetHitListEntry(mea);\n            SetHitListCursor(hle);\t\t\t// set the cursor based on the hit list entry\n\n            if (mea.Button != MouseButtons.Left || hle == null)\n                return;\n\n            if (hle.pi.HyperLink != null)\n            {\n                RdlViewer rv = this.Parent as RdlViewer;\n                bool bInvoke = true;\n                if (rv != null)\n                {\n                    HyperlinkEventArgs hlea = new HyperlinkEventArgs(hle.pi.HyperLink);\n                    rv.InvokeHyperlink(hlea);     // reset any mousemove\n                    bInvoke = !hlea.Cancel;\n                }\n                try\n                {\n                    if (bInvoke)\n                        System.Diagnostics.Process.Start(hle.pi.HyperLink);\n                }\n                catch (Exception ex)\n                {\n                    MessageBox.Show(string.Format(\"{3} {0}{1}{2}\",\n                        hle.pi.HyperLink, Environment.NewLine, ex.Message, Strings.PageDrawing_OnMouseDown_UnableLink), Strings.PageDrawing_OnMouseDown_HyperLinkError);\n                }\n            }\n        }\n\n        private bool MouseDownRubberBand(MouseEventArgs e)\n        {\n            if (!SelectTool)\n                return false;\n\n            if (e.Button != MouseButtons.Left)\n            {\n                return true;\t\t// well no rubber band but it's been handled\n            }\n\n            // We have a rubber band operation\n            _bHaveMouse = true;\n            // keep the starting point of the rectangular rubber band\n            this._ptRBOriginal.X = e.X;\n            this._ptRBOriginal.Y = e.Y;\n            // -1 indicates no previous rubber band\n            this._ptRBLast.X = this._ptRBLast.Y = -1;\n            this.Cursor = Cursors.Cross;\t\t// use cross hair to indicate drawing\n\n            return true;\n        }\n\n        protected override void OnMouseUp(MouseEventArgs e)\n        {\n            base.OnMouseUp(e);\n\n            if (!this._bHaveMouse)\n                return;\n\n            // Handle the end of the rubber banding\n            _bHaveMouse = false;\n            // remove last rectangle if necessary\n            bool bCtrlOn = (Control.ModifierKeys & Keys.Control) == Keys.Control;\n            if (this._ptRBLast.X != -1)\n            {\n                this.RubberBand(this._ptRBOriginal, this._ptRBLast);\n                // Process the rectangle\n                Rectangle r = RectFromPoints(this._ptRBOriginal, this._ptRBLast);\n                if (!bCtrlOn)\t                // we allow addition to selection\n                {\n                    _SelectList.Clear();        // remove prior selection when ctrl key not on\n                }\n                CreateSelectionList(r, bCtrlOn);         // create the selection list\n            }\n            else\n            {   // no last rectangle but use still might have clicked on a pageItem\n                if (!bCtrlOn)\n                    _SelectList.Clear();        // remove prior selection when ctrl key not on (even when no prior mouse movement)\n                Rectangle r = RectFromPoints(this._ptRBOriginal, this._ptRBOriginal);\n                CreateSelectionList(r, bCtrlOn);         // create the selection list\n            }\n            // clear out the points for the next time\n            _ptRBOriginal.X = _ptRBOriginal.Y = _ptRBLast.X = _ptRBLast.Y = -1;\n            this.Invalidate();      // need to repaint since selection might have changed\n        }\n\n        override protected void OnMouseLeave(EventArgs ea)\n        {\n            _tt.Active = false;\n        }\n\n        override protected void OnMouseMove(MouseEventArgs mea)\n        {\n            if (SelectTool)\n            {   // When selection we skip other cursor processing\n                if (this.Cursor != Cursors.Cross)\n                    this.Cursor = Cursors.Cross;\n\n                if (!_bHaveMouse)\n                    return;\n\n                Point newMousePosition = new Point(mea.X, mea.Y);\n\n                // we're rubber banding\n                // If we drew previously; we'll draw again to remove old rectangle\n                if (this._ptRBLast.X != -1)\n                {\n                    this.RubberBand(this._ptRBOriginal, _ptRBLast);\n                }\n                _MousePosition = newMousePosition;\n                // Update last point;  but don't rubber band outside our client area\n                if (newMousePosition.X < 0)\n                    newMousePosition.X = 0;\n                if (newMousePosition.X > this.Width)\n                    newMousePosition.X = this.Width;\n                if (newMousePosition.Y < 0)\n                    newMousePosition.Y = 0;\n                if (newMousePosition.Y > this.Height)\n                    newMousePosition.Y = this.Height;\n                _ptRBLast = newMousePosition;\n                if (_ptRBLast.X < 0)\n                    _ptRBLast.X = 0;\n                if (_ptRBLast.Y < 0)\n                    _ptRBLast.Y = 0;\n                // Draw new lines.\n                this.RubberBand(_ptRBOriginal, newMousePosition);\n                this.Cursor = Cursors.Cross;\t\t// use cross hair to indicate drawing\n                return;\n            }\n\n            HitListEntry hle = this.GetHitListEntry(mea);\n            SetHitListCursor(hle);\n            SetHitListTooltip(hle);\n            return;\n        }\n\n        private void RubberBand(Point p1, Point p2)\n        {\n            // Convert the points to screen coordinates\n            p1 = PointToScreen(p1);\n            p2 = PointToScreen(p2);\n\n            // Get a rectangle from the two points\n            Rectangle rc = RectFromPoints(p1, p2);\n\n            // Draw reversibleFrame\n            ControlPaint.DrawReversibleFrame(rc, Color.Black, FrameStyle.Dashed);\n\n            return;\n        }\n\n        private void CreateSelectionList(Rectangle rc, bool bCtrlOn)\n        {\n            if (_HitList.Count <= 0)\n                return;\n\n            RectangleF rf = new RectangleF(rc.X / _LastZoom, rc.Y / _LastZoom, rc.Width / _LastZoom, rc.Height / _LastZoom);\n\n            try\n            {\n                foreach (HitListEntry hle in this._HitList)\n                {\n                    if (!hle.rect.IntersectsWith(rf))\n                        continue;\n                    bool bInList = _SelectList.Contains(hle.pi);\n                    if (bCtrlOn)\n                    {\n                        if (bInList)       // When ctrl is on we allow user to deselect item in list\n                            _SelectList.Remove(hle.pi);\n                        else\n                            _SelectList.Add(hle.pi);\n                    }\n                    else\n                    {\n                        if (!bInList)\n                            _SelectList.Add(hle.pi);\n                    }\n                }\n            }\n            catch\n            {\n                // can get synchronization error due to multi-threading; just skip the error\n            }\n            return;\n        }\n\n        private Rectangle RectFromPoints(Point p1, Point p2)\n        {\n            Rectangle r = new Rectangle();\n            // set the width and x of rectangle\n            if (p1.X < p2.X)\n            {\n                r.X = p1.X;\n                r.Width = p2.X - p1.X;\n            }\n            else\n            {\n                r.X = p2.X;\n                r.Width = p1.X - p2.X;\n            }\n            // set the height and y of rectangle\n            if (p1.Y < p2.Y)\n            {\n                r.Y = p1.Y;\n                r.Height = p2.Y - p1.Y;\n            }\n            else\n            {\n                r.Y = p2.Y;\n                r.Height = p1.Y - p2.Y;\n            }\n            return r;\n        }\n\n        private void SetHitListCursor(HitListEntry hle)\n        {\n            Cursor c = Cursors.Default;\n            if (hle == null)\n            { }\n            else if (hle.pi.HyperLink != null || hle.pi.BookmarkLink != null)\n                c = Cursors.Hand;\n\n            if (this.Cursor != c)\n                this.Cursor = c;\n        }\n\n        private void SetHitListTooltip(HitListEntry hle)\n        {\n            if (hle == null || hle.pi.Tooltip == null)\n                _tt.Active = false;\n            else\n            {\n                _tt.SetToolTip(this, hle.pi.Tooltip);\n                _tt.Active = true;\n            }\n        }\n\n        private HitListEntry GetHitListEntry(MouseEventArgs mea)\n        {\n            if (_HitList.Count <= 0)\n                return null;\n\n            PointF p = new PointF(mea.X / _LastZoom, mea.Y / _LastZoom);\n            try\n            {\n                foreach (HitListEntry hle in this._HitList)\n                {\n                    if (hle.Contains(p))\n                        return hle;\n                }\n            }\n            catch\n            {\n                // can get synchronization error due to multi-threading; just skip the error\n            }\n            return null;\n        }\n\n        internal float PixelsX(float x)\n        {\n            return (float)(x * DpiX / 72.0f);\n        }\n\n        internal float PixelsY(float y)\n        {\n            return (float)(y * DpiY / 72.0f);\n        }\n\n        // render all the objects in a page (or any composite object\n        private async Task ProcessPage(Graphics g, IEnumerable p, RectangleF clipRect, bool bHitList)\n        {\n            // TODO: (Peter) Support can grow and can shrink\n            foreach (PageItem pi in p)\n            {\n                if (pi is PageTextHtml)\n                {\t// PageTextHtml is actually a composite object (just like a page)\n                    if (SelectTool && bHitList)\n                    {\n                        RectangleF hr = new RectangleF(PixelsX(pi.X + _left - _hScroll), PixelsY(pi.Y + _top - _vScroll),\n                                                                            PixelsX(pi.W), PixelsY(pi.H));\n                        _HitList.Add(new HitListEntry(hr, pi));\n                    }\n                    await ProcessHtml(pi as PageTextHtml, g, clipRect, bHitList);\n                    continue;\n                }\n\n                if (pi is PageLine)\n                {\n                    PageLine pl = pi as PageLine;\n                    DrawLine(pl.SI.BColorLeft, pl.SI.BStyleLeft, pl.SI.BWidthLeft,\n                        g, PixelsX(pl.X + _left - _hScroll), PixelsY(pl.Y + _top - _vScroll),\n                        PixelsX(pl.X2 + _left - _hScroll), PixelsY(pl.Y2 + _top - _vScroll));\n                    continue;\n                }\n\n\n                RectangleF rect = new RectangleF(PixelsX(pi.X + _left - _hScroll), PixelsY(pi.Y + _top - _vScroll),\n                                                                    PixelsX(pi.W), PixelsY(pi.H));\n\n                // Maintain the hit list\n                if (bHitList)\n                {\n                    if (SelectTool)\n                    {   // we need all PageText and PageImage items that have been displayed\n                        if (pi is PageText || pi is PageImage)\n                        {\n                            _HitList.Add(new HitListEntry(rect, pi));\n                        }\n                    }\n                    // Only care about items with links and tips\n                    else if (pi.HyperLink != null || pi.BookmarkLink != null || pi.Tooltip != null)\n                    {\n                        HitListEntry hle;\n                        if (pi is PagePolygon)\n                            hle = new HitListEntry(pi as PagePolygon, _left - _hScroll, _top - _vScroll, this);\n                        else\n                            hle = new HitListEntry(rect, pi);\n                        _HitList.Add(hle);\n                    }\n                }\n\n                if ((pi is PagePolygon) || (pi is PageCurve))\n                { // intentionally empty; polygon's rectangles aren't calculated\n                }\n                else if (!rect.IntersectsWith(clipRect))\n                    continue;\n\n                if (pi.SI.BackgroundImage != null)\n                {\t// put out any background image\n                    PageImage i = pi.SI.BackgroundImage;\n                    DrawImageBackground(i, pi.SI, g, rect);\n                }\n\n                if (pi is PageText)\n                {\n                    // TODO: enable can shrink, can grow\n                    // 2005 spec file, page 9, in the text box has\n                    // CanGrow and CanShrink\n                    PageText pt = pi as PageText;\n                    DrawString(pt, g, rect);\n                }\n                else if (pi is PageImage)\n                {\n                    PageImage i = pi as PageImage;\n                    DrawImage(i, g, rect);\n                }\n                else if (pi is PageRectangle)\n                {\n                    this.DrawBackground(g, rect, pi.SI);\n                }\n                else if (pi is PageEllipse)\n                {\n                    PageEllipse pe = pi as PageEllipse;\n                    DrawEllipse(pe, g, rect);\n                }\n                else if (pi is PagePie)\n                {\n                    PagePie pp = pi as PagePie;\n                    DrawPie(pp, g, rect);\n                }\n                else if (pi is PagePolygon)\n                {\n                    PagePolygon ppo = pi as PagePolygon;\n                    FillPolygon(ppo, g, rect);\n                }\n                else if (pi is PageCurve)\n                {\n                    PageCurve pc = pi as PageCurve;\n                    DrawCurve(pc.SI.BColorLeft, pc.SI.BStyleLeft, pc.SI.BWidthLeft,\n                        g, pc.Points, pc.Offset, pc.Tension);\n                }\n\n\n                DrawBorder(pi, g, rect);\n            }\n        }\n\n        private void DrawBackground(Graphics g, System.Drawing.RectangleF rect, StyleInfo si)\n        {\n            LinearGradientBrush linGrBrush = null;\n            SolidBrush sb = null;\n            HatchBrush hb = null;\n            try\n            {\n                if (si.BackgroundGradientType != BackgroundGradientTypeEnum.None &&\n                    !si.BackgroundGradientEndColor.IsEmpty &&\n                    !si.BackgroundColor.IsEmpty)\n                {\n                    Color c = si.BackgroundColor;\n                    Color ec = si.BackgroundGradientEndColor;\n\n                    switch (si.BackgroundGradientType)\n                    {\n                        case BackgroundGradientTypeEnum.LeftRight:\n                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.Horizontal);\n                            break;\n                        case BackgroundGradientTypeEnum.TopBottom:\n                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.Vertical);\n                            break;\n                        case BackgroundGradientTypeEnum.Center:\n                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.Horizontal);\n                            break;\n                        case BackgroundGradientTypeEnum.DiagonalLeft:\n                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.ForwardDiagonal);\n                            break;\n                        case BackgroundGradientTypeEnum.DiagonalRight:\n                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.BackwardDiagonal);\n                            break;\n                        case BackgroundGradientTypeEnum.HorizontalCenter:\n                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.Horizontal);\n                            break;\n                        case BackgroundGradientTypeEnum.VerticalCenter:\n                            linGrBrush = new LinearGradientBrush(rect, c, ec, LinearGradientMode.Vertical);\n                            break;\n                        default:\n                            break;\n                    }\n                }\n                if (si.PatternType != patternTypeEnum.None)\n                {\n                    switch (si.PatternType)\n                    {\n                        case patternTypeEnum.BackwardDiagonal:\n                            hb = new HatchBrush(HatchStyle.BackwardDiagonal, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.CheckerBoard:\n                            hb = new HatchBrush(HatchStyle.LargeCheckerBoard, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.Cross:\n                            hb = new HatchBrush(HatchStyle.Cross, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.DarkDownwardDiagonal:\n                            hb = new HatchBrush(HatchStyle.DarkDownwardDiagonal, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.DarkHorizontal:\n                            hb = new HatchBrush(HatchStyle.DarkHorizontal, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.DiagonalBrick:\n                            hb = new HatchBrush(HatchStyle.DiagonalBrick, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.HorizontalBrick:\n                            hb = new HatchBrush(HatchStyle.HorizontalBrick, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.LargeConfetti:\n                            hb = new HatchBrush(HatchStyle.LargeConfetti, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.OutlinedDiamond:\n                            hb = new HatchBrush(HatchStyle.OutlinedDiamond, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.SmallConfetti:\n                            hb = new HatchBrush(HatchStyle.SmallConfetti, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.SolidDiamond:\n                            hb = new HatchBrush(HatchStyle.SolidDiamond, si.Color, si.BackgroundColor);\n                            break;\n                        case patternTypeEnum.Vertical:\n                            hb = new HatchBrush(HatchStyle.Vertical, si.Color, si.BackgroundColor);\n                            break;\n                    }\n                }\n\n                if (linGrBrush != null)\n                {\n                    g.FillRectangle(linGrBrush, rect);\n                    linGrBrush.Dispose();\n                }\n                else if (hb != null)\n                {\n                    g.FillRectangle(hb, rect);\n                    hb.Dispose();\n                }\n                else if (!si.BackgroundColor.IsEmpty)\n                {\n                    sb = new SolidBrush(si.BackgroundColor);\n                    g.FillRectangle(sb, rect);\n                    sb.Dispose();\n                }\n            }\n            finally\n            {\n                if (linGrBrush != null)\n                    linGrBrush.Dispose();\n                if (sb != null)\n                    sb.Dispose();\n            }\n            return;\n        }\n\n        private void DrawBorder(PageItem pi, Graphics g, RectangleF r)\n        {\n            if (pi.GetType().Name.Equals(\"PagePie\")) return;\n            if (r.Height <= 0 || r.Width <= 0)\t\t// no bounding box to use\n                return;\n\n            StyleInfo si = pi.SI;\n\n            DrawLine(si.BColorTop, si.BStyleTop, si.BWidthTop, g, r.X, r.Y, r.Right, r.Y);\n\n            DrawLine(si.BColorRight, si.BStyleRight, si.BWidthRight, g, r.Right, r.Y, r.Right, r.Bottom);\n\n            DrawLine(si.BColorLeft, si.BStyleLeft, si.BWidthLeft, g, r.X, r.Y, r.X, r.Bottom);\n\n            DrawLine(si.BColorBottom, si.BStyleBottom, si.BWidthBottom, g, r.X, r.Bottom, r.Right, r.Bottom);\n\n            return;\n\n        }\n\n        private void DrawImage(PageImage pi, Graphics g, RectangleF r)\n        {\n            Stream strm = null;\n            System.Drawing.Image im = null;\n            try\n            {\n                strm = new MemoryStream(pi.GetImageData((int)r.Width, (int)r.Height));\n                im = System.Drawing.Image.FromStream(strm);\n                DrawImageSized(pi, im, g, r);\n            }\n            finally\n            {\n                if (strm != null)\n                    strm.Close();\n                if (im != null)\n                    im.Dispose();\n            }\n\n        }\n        private void DrawImageBackground(PageImage pi, StyleInfo si, Graphics g, RectangleF r)\n        {\n            Stream strm = null;\n            System.Drawing.Image im = null;\n            try\n            {\n                // http://www.fyireporting.com/forum/viewtopic.php?t=892\n                //A.S.> convert pt to px if needed(when printing we need px, when draw preview - pt) \n\n                RectangleF r2;\n                if (g.PageUnit == GraphicsUnit.Pixel)\n                {\n                    r2 = new RectangleF(r.Left + (si.PaddingLeft * g.DpiX) / 72,\n                    r.Top + (si.PaddingTop * g.DpiX) / 72,\n                    r.Width - ((si.PaddingLeft + si.PaddingRight) * g.DpiX) / 72,\n                    r.Height - ((si.PaddingTop + si.PaddingBottom) * g.DpiX) / 72);\n                }\n                else\n                {\n                    // adjust drawing rectangle based on padding\n                    r2 = new RectangleF(r.Left + si.PaddingLeft,\n                    r.Top + si.PaddingTop,\n                    r.Width - si.PaddingLeft - si.PaddingRight,\n                    r.Height - si.PaddingTop - si.PaddingBottom);\n                }\n\n                strm = new MemoryStream(pi.GetImageData((int)r2.Width, (int)r2.Height));\n                im = System.Drawing.Image.FromStream(strm);\n\n                int repeatX = 0;\n                int repeatY = 0;\n                switch (pi.Repeat)\n                {\n                    case ImageRepeat.Repeat:\n                        repeatX = (int)Math.Floor(r2.Width / pi.SamplesW);\n                        repeatY = (int)Math.Floor(r2.Height / pi.SamplesH);\n                        break;\n                    case ImageRepeat.RepeatX:\n                        repeatX = (int)Math.Floor(r2.Width / pi.SamplesW);\n                        repeatY = 1;\n                        break;\n                    case ImageRepeat.RepeatY:\n                        repeatY = (int)Math.Floor(r2.Height / pi.SamplesH);\n                        repeatX = 1;\n                        break;\n                    case ImageRepeat.NoRepeat:\n                    default:\n                        repeatX = repeatY = 1;\n                        break;\n                }\n\n                //make sure the image is drawn at least 1 times \n                repeatX = Math.Max(repeatX, 1);\n                repeatY = Math.Max(repeatY, 1);\n\n                float startX = r2.Left;\n                float startY = r2.Top;\n\n                Region saveRegion = g.Clip;\n                Region clipRegion = new Region(g.Clip.GetRegionData());\n                clipRegion.Intersect(r2);\n                g.Clip = clipRegion;\n\n                for (int i = 0; i < repeatX; i++)\n                {\n                    for (int j = 0; j < repeatY; j++)\n                    {\n                        float currX = startX + i * pi.SamplesW;\n                        float currY = startY + j * pi.SamplesH;\n                        g.DrawImage(im, new RectangleF(currX, currY, pi.SamplesW, pi.SamplesH));\n                    }\n                }\n                g.Clip = saveRegion;\n            }\n            finally\n            {\n                if (strm != null)\n                    strm.Close();\n                if (im != null)\n                    im.Dispose();\n            }\n        }\n        private void DrawImageSized(PageImage pi, Image im, Graphics g, RectangleF r)\n        {\n            float height, width;\t\t// some work variables\n            StyleInfo si = pi.SI;\n\n            // adjust drawing rectangle based on padding\n\n            // http://www.fyireporting.com/forum/viewtopic.php?t=892\n            //A.S.> convert pt to px if needed(when printing we need px, when draw preview - pt) \n\n            RectangleF r2;\n            if (g.PageUnit == GraphicsUnit.Pixel)\n            {\n                r2 = new RectangleF(r.Left + (si.PaddingLeft * g.DpiX) / 72,\n                r.Top + (si.PaddingTop * g.DpiX) / 72,\n                r.Width - ((si.PaddingLeft + si.PaddingRight) * g.DpiX) / 72,\n                r.Height - ((si.PaddingTop + si.PaddingBottom) * g.DpiX) / 72);\n            }\n            else\n            {\n                // adjust drawing rectangle based on padding\n                r2 = new RectangleF(r.Left + si.PaddingLeft,\n                r.Top + si.PaddingTop,\n                r.Width - si.PaddingLeft - si.PaddingRight,\n                r.Height - si.PaddingTop - si.PaddingBottom);\n            } \n\n            Rectangle ir;\t// int work rectangle\n            ir = new Rectangle(Convert.ToInt32(r2.Left), Convert.ToInt32(r2.Top),\n                               Convert.ToInt32(r2.Width), Convert.ToInt32(r2.Height));\n            switch (pi.Sizing)\n            {\n                case ImageSizingEnum.AutoSize:\n                    // Note: GDI+ will stretch an image when you only provide\n                    //  the left/top coordinates.  This seems pretty stupid since\n                    //  it results in the image being out of focus even though\n                    //  you don't want the image resized.\n                    if (g.DpiX == im.HorizontalResolution &&\n                        g.DpiY == im.VerticalResolution)\n                    {\n                        ir = new Rectangle(Convert.ToInt32(r2.Left), Convert.ToInt32(r2.Top),\n                                                        im.Width, im.Height);\n                    }\n                    g.DrawImage(im, ir);\n\n                    break;\n                case ImageSizingEnum.Clip:\n                    Region saveRegion = g.Clip;\n                    Region clipRegion = new Region(g.Clip.GetRegionData());\n                    clipRegion.Intersect(r2);\n                    g.Clip = clipRegion;\n                    if (g.DpiX == im.HorizontalResolution &&\n                        g.DpiY == im.VerticalResolution)\n                    {\n                        ir = new Rectangle(Convert.ToInt32(r2.Left), Convert.ToInt32(r2.Top),\n                                                        im.Width, im.Height);\n                    }\n                    g.DrawImage(im, ir);\n                    g.Clip = saveRegion;\n                    break;\n                case ImageSizingEnum.FitProportional:\n                    float ratioIm = (float)im.Height / (float)im.Width;\n                    float ratioR = r2.Height / r2.Width;\n                    height = r2.Height;\n                    width = r2.Width;\n                    if (ratioIm > ratioR)\n                    {\t// this means the rectangle width must be corrected\n                        width = height * (1 / ratioIm);\n                    }\n                    else if (ratioIm < ratioR)\n                    {\t// this means the ractangle height must be corrected\n                        height = width * ratioIm;\n                    }\n                    r2 = new RectangleF(r2.X, r2.Y, width, height);\n                    g.DrawImage(im, r2);\n                    break;\n                case ImageSizingEnum.Fit:\n                default:\n                    g.DrawImage(im, r2);\n                    break;\n            }\n\n            if (SelectTool && pi.AllowSelect && _SelectList.Contains(pi))\n            {\n                g.FillRectangle(new SolidBrush(Color.FromArgb(50, _SelectItemColor)), ir);\n            }\n\n            return;\n        }\n\n        private void DrawLine(Color c, BorderStyleEnum bs, float w, Graphics g,\n                                float x, float y, float x2, float y2)\n        {\n            if (bs == BorderStyleEnum.None || c.IsEmpty || w <= 0)\t// nothing to draw\n                return;\n\n            float widthPen = w;\n            if (g.PageUnit == GraphicsUnit.Pixel)\n                widthPen=Rdl.Utility.Measurement.PixelsFromPoints(w, g.DpiX);\n            using (Pen p = new Pen(c, widthPen))\n            {\n                switch (bs)\n                {\n                    case BorderStyleEnum.Dashed:\n                        p.DashStyle = DashStyle.Dash;\n                        break;\n                    case BorderStyleEnum.Dotted:\n                        p.DashStyle = DashStyle.Dot;\n                        break;\n                    case BorderStyleEnum.Double:\n                    case BorderStyleEnum.Groove:\n                    case BorderStyleEnum.Inset:\n                    case BorderStyleEnum.Solid:\n                    case BorderStyleEnum.Outset:\n                    case BorderStyleEnum.Ridge:\n                    case BorderStyleEnum.WindowInset:\n                    default:\n                        p.DashStyle = DashStyle.Solid;\n                        break;\n                }\n\n                g.DrawLine(p, x, y, x2, y2);\n            }\n            \n        }\n\n       \n        private void DrawCurve(Color c, BorderStyleEnum bs, float w, Graphics g,\n                                PointF[] points, int Offset, float Tension)\n        {\n            if (bs == BorderStyleEnum.None || c.IsEmpty || w <= 0)\t// nothing to draw\n                return;\n\n            Pen p = null;\n            try\n            {\n                p = new Pen(c, w);\n                switch (bs)\n                {\n                    case BorderStyleEnum.Dashed:\n                        p.DashStyle = DashStyle.Dash;\n                        break;\n                    case BorderStyleEnum.Dotted:\n                        p.DashStyle = DashStyle.Dot;\n                        break;\n                    case BorderStyleEnum.Double:\n                    case BorderStyleEnum.Groove:\n                    case BorderStyleEnum.Inset:\n                    case BorderStyleEnum.Solid:\n                    case BorderStyleEnum.Outset:\n                    case BorderStyleEnum.Ridge:\n                    case BorderStyleEnum.WindowInset:\n                    default:\n                        p.DashStyle = DashStyle.Solid;\n                        break;\n                }\n                PointF[] tmp = new PointF[points.Length];\n                for (int i = 0; i < points.Length; i++)\n                {\n\n                    tmp[i].X = PixelsX(points[i].X + _left - _hScroll);\n                    tmp[i].Y = PixelsY(points[i].Y + _top - _vScroll);\n                }\n\n                g.DrawCurve(p, tmp, Offset, tmp.Length - 1, Tension);\n            }\n            finally\n            {\n                if (p != null)\n                    p.Dispose();\n            }\n\n        }\n\n\n        private async Task ProcessHtml(PageTextHtml pth, Graphics g, RectangleF clipRect, bool bHitList)\n        {\n            await pth.Build(g);             // Builds the subobjects that make up the html\n            await this.ProcessPage(g, pth, clipRect, bHitList);\n        }\n\n        private void DrawEllipse(PageEllipse pe, Graphics g, RectangleF r)\n        {\n            StyleInfo si = pe.SI;\n            if (!si.BackgroundColor.IsEmpty)\n            {\n                g.FillEllipse(new SolidBrush(si.BackgroundColor), r);\n            }\n            if (si.BStyleTop != BorderStyleEnum.None)\n            {\n                Pen p = new Pen(si.BColorTop, si.BWidthTop);\n                switch (si.BStyleTop)\n                {\n                    case BorderStyleEnum.Dashed:\n                        p.DashStyle = DashStyle.Dash;\n                        break;\n                    case BorderStyleEnum.Dotted:\n                        p.DashStyle = DashStyle.Dot;\n                        break;\n                    case BorderStyleEnum.Double:\n                    case BorderStyleEnum.Groove:\n                    case BorderStyleEnum.Inset:\n                    case BorderStyleEnum.Solid:\n                    case BorderStyleEnum.Outset:\n                    case BorderStyleEnum.Ridge:\n                    case BorderStyleEnum.WindowInset:\n                    default:\n                        p.DashStyle = DashStyle.Solid;\n                        break;\n                }\n                g.DrawEllipse(p, r);\n            }\n        }\n\n        private void FillPolygon(PagePolygon pp, Graphics g, RectangleF r)\n        {\n\n            StyleInfo si = pp.SI;\n            PointF[] tmp = new PointF[pp.Points.Length];\n            if (!si.BackgroundColor.IsEmpty)\n            //RectangleF(PixelsX(pi.X + _left - _hScroll), PixelsY(pi.Y + _top - _vScroll), \n            //                                                                    PixelsX(pi.W), PixelsY(pi.H))           \n            {\n                for (int i = 0; i < pp.Points.Length; i++)\n                {\n\n                    tmp[i].X = PixelsX(pp.Points[i].X + _left - _hScroll);\n                    tmp[i].Y = PixelsY(pp.Points[i].Y + _top - _vScroll);\n                }\n                g.FillPolygon(new SolidBrush(si.BackgroundColor), tmp);\n            }\n        }\n\n        private void DrawPie(PagePie pp, Graphics g, RectangleF r)\n        {\n            StyleInfo si = pp.SI;\n            if (!si.BackgroundColor.IsEmpty)\n            {\n                g.FillPie(new SolidBrush(si.BackgroundColor), (int)r.X, (int)r.Y, (int)r.Width, (int)r.Height, (float)pp.StartAngle, (float)pp.SweepAngle);\n            }\n\n            if (si.BStyleTop != BorderStyleEnum.None)\n            {\n                Pen p = new Pen(si.BColorTop, si.BWidthTop);\n                switch (si.BStyleTop)\n                {\n                    case BorderStyleEnum.Dashed:\n                        p.DashStyle = DashStyle.Dash;\n                        break;\n                    case BorderStyleEnum.Dotted:\n                        p.DashStyle = DashStyle.Dot;\n                        break;\n                    case BorderStyleEnum.Double:\n                    case BorderStyleEnum.Groove:\n                    case BorderStyleEnum.Inset:\n                    case BorderStyleEnum.Solid:\n                    case BorderStyleEnum.Outset:\n                    case BorderStyleEnum.Ridge:\n                    case BorderStyleEnum.WindowInset:\n                    default:\n                        p.DashStyle = DashStyle.Solid;\n                        break;\n                }\n                g.DrawPie(p, r, pp.StartAngle, pp.SweepAngle);\n            }\n        }\n\n        private void DrawString(PageText pt, Graphics g, RectangleF r)\n        {\n            StyleInfo si = pt.SI;\n            string s = pt.Text;\n\n            Font drawFont = null;\n            StringFormat drawFormat = null;\n            Brush drawBrush = null;\n            try\n            {\n                // STYLE\n                System.Drawing.FontStyle fs = 0;\n                if (si.FontStyle == FontStyleEnum.Italic)\n                    fs |= System.Drawing.FontStyle.Italic;\n\n                switch (si.TextDecoration)\n                {\n                    case TextDecorationEnum.Underline:\n                        fs |= System.Drawing.FontStyle.Underline;\n                        break;\n                    case TextDecorationEnum.LineThrough:\n                        fs |= System.Drawing.FontStyle.Strikeout;\n                        break;\n                    case TextDecorationEnum.Overline:\n                    case TextDecorationEnum.None:\n                        break;\n                }\n\n                // WEIGHT\n                switch (si.FontWeight)\n                {\n                    case FontWeightEnum.Bold:\n                    case FontWeightEnum.Bolder:\n                    case FontWeightEnum.W500:\n                    case FontWeightEnum.W600:\n                    case FontWeightEnum.W700:\n                    case FontWeightEnum.W800:\n                    case FontWeightEnum.W900:\n                        fs |= System.Drawing.FontStyle.Bold;\n                        break;\n                    default:\n                        break;\n                }\n                try\n                {\n                    drawFont = new Font(si.GetFontFamily(), si.FontSize, fs);\t// si.FontSize already in points\n                }\n                catch (ArgumentException)\n                {\n                    drawFont = new Font(\"Arial\", si.FontSize, fs);\t// if this fails we'll let the error pass thru\n                }\n                // ALIGNMENT\n                drawFormat = new StringFormat();\n                switch (si.TextAlign)\n                {\n                    case TextAlignEnum.Right:\n                        drawFormat.Alignment = StringAlignment.Far;\n                        break;\n                    case TextAlignEnum.Center:\n                        drawFormat.Alignment = StringAlignment.Center;\n                        break;\n                    case TextAlignEnum.Left:\n                    default:\n                        drawFormat.Alignment = StringAlignment.Near;\n                        break;\n                }\n                if (pt.SI.WritingMode == WritingModeEnum.tb_rl)\n                {\n                    drawFormat.FormatFlags |= StringFormatFlags.DirectionRightToLeft;\n                    drawFormat.FormatFlags |= StringFormatFlags.DirectionVertical;\n                }\n                switch (si.VerticalAlign)\n                {\n                    case VerticalAlignEnum.Bottom:\n                        drawFormat.LineAlignment = StringAlignment.Far;\n                        break;\n                    case VerticalAlignEnum.Middle:\n                        drawFormat.LineAlignment = StringAlignment.Center;\n                        break;\n                    case VerticalAlignEnum.Top:\n                    default:\n                        drawFormat.LineAlignment = StringAlignment.Near;\n                        break;\n                }\n                // draw the background \n                DrawBackground(g, r, si);\n\n                // adjust drawing rectangle based on padding\n                // http://www.fyireporting.com/forum/viewtopic.php?t=892\n                //A.S.> convert pt to px if needed(when printing we need px, when draw preview - pt) \n                RectangleF r2;\n                if (g.PageUnit == GraphicsUnit.Pixel)\n                {\n                    r2 = new RectangleF(r.Left + (si.PaddingLeft * g.DpiX) / 72,\n                    r.Top + (si.PaddingTop * g.DpiX) / 72,\n                    r.Width - ((si.PaddingLeft + si.PaddingRight) * g.DpiX) / 72,\n                    r.Height - ((si.PaddingTop + si.PaddingBottom) * g.DpiX) / 72);\n                }\n                else\n                {\n                    // adjust drawing rectangle based on padding\n                   r2 = new RectangleF(r.Left + si.PaddingLeft,\n                   r.Top + si.PaddingTop,\n                   r.Width - si.PaddingLeft - si.PaddingRight,\n                   r.Height - si.PaddingTop - si.PaddingBottom);\n                } \n\n                drawBrush = new SolidBrush(si.Color);\n                if (si.TextAlign == TextAlignEnum.Justified)\n                {\n                    GraphicsExtended.DrawStringJustified(g, pt.Text, drawFont, drawBrush, r2); \n                }\n                else if (pt.NoClip)\t// request not to clip text\n                {\n                    g.DrawString(pt.Text, drawFont, drawBrush, new PointF(r.Left, r.Top), drawFormat);\n                    HighlightString(g, pt, new RectangleF(r.Left, r.Top, float.MaxValue, float.MaxValue),\n                        drawFont, drawFormat);\n                }\n                else\n                {\n                    g.DrawString(pt.Text, drawFont, drawBrush, r2, drawFormat);\n                    HighlightString(g, pt, r2, drawFont, drawFormat);\n                }\n                if (SelectTool)\n                {\n                    if (pt.AllowSelect && _SelectList.Contains(pt))\n                        g.FillRectangle(new SolidBrush(Color.FromArgb(50, _SelectItemColor)), r2);\n                }\n            }\n            finally\n            {\n                if (drawFont != null)\n                    drawFont.Dispose();\n                if (drawFormat != null)\n                    drawFont.Dispose();\n                if (drawBrush != null)\n                    drawBrush.Dispose();\n            }\n        }\n\n        private void HighlightString(Graphics g, PageText dtext, RectangleF r, Font f, StringFormat sf)\n        {\n            if (_HighlightText == null || _HighlightText.Length == 0)\n                return;         // nothing to highlight\n            bool bhighlightItem = dtext == _HighlightItem ||\n                    (_HighlightItem != null && dtext.HtmlParent == _HighlightItem);\n            if (!(_HighlightAll || bhighlightItem))\n                return;         // not highlighting all and not on current highlight item\n\n            string hlt = _HighlightCaseSensitive ? _HighlightText : _HighlightText.ToLower();\n            string text = _HighlightCaseSensitive ? dtext.Text : dtext.Text.ToLower();\n\n            if (text.IndexOf(hlt) < 0)\n                return;         // string not in text\n\n            StringFormat sf2 = null;\n            try\n            {\n                // Create a CharacterRange array with the highlight location and length\n                // Handle multiple occurences of text\n                List<CharacterRange> rangel = new List<CharacterRange>();\n                int loc = text.IndexOf(hlt);\n                int hlen = hlt.Length;\n                int len = text.Length;\n                while (loc >= 0)\n                {\n                    rangel.Add(new CharacterRange(loc, hlen));\n                    if (loc + hlen < len)  // out of range of text\n                        loc = text.IndexOf(hlt, loc + hlen);\n                    else\n                        loc = -1;\n                }\n\n                if (rangel.Count <= 0)      // we should have gotten one; but\n                    return;\n\n                CharacterRange[] ranges = rangel.ToArray();\n\n                // Construct a new StringFormat object.\n                sf2 = sf.Clone() as StringFormat;\n\n                // Set the ranges on the StringFormat object.\n                sf2.SetMeasurableCharacterRanges(ranges);\n\n                // Get the Regions to highlight by calling the \n                // MeasureCharacterRanges method.\n                if (r.Width <= 0 || r.Height <= 0)\n                {\n                    SizeF ts = g.MeasureString(dtext.Text, f);\n                    r.Height = ts.Height;\n                    r.Width = ts.Width;\n                }\n                Region[] charRegion = g.MeasureCharacterRanges(dtext.Text, f, r, sf2);\n\n                // Fill in the region using a semi-transparent color to highlight\n                foreach (Region rg in charRegion)\n                {\n                    Color hl = bhighlightItem ? _HighlightItemColor : _HighlightAllColor;\n                    g.FillRegion(new SolidBrush(Color.FromArgb(50, hl)), rg);\n                }\n            }\n            catch { }   // if highlighting fails we don't care; need to continue\n            finally\n            {\n                if (sf2 != null)\n                    sf2.Dispose();\n            }\n        }\n\n        class HitListEntry\n        {\n            internal RectangleF rect;\n            internal PageItem pi;\n            internal PointF[] poly;\n            internal HitListEntry(RectangleF r, PageItem pitem)\n            {\n                rect = r;\n                pi = pitem;\n                poly = null;\n            }\n            internal HitListEntry(PagePolygon pp, float x, float y, PageDrawing pd)\n            {\n                pi = pp;\n                poly = new PointF[pp.Points.Length];\n                for (int i = 0; i < pp.Points.Length; i++)\n                {\n                    poly[i].X = pd.PixelsX(pp.Points[i].X + x);\n                    poly[i].Y = pd.PixelsY(pp.Points[i].Y + y);\n                }\n                rect = RectangleF.Empty;\n            }\n            /// <summary>\n            /// Contains- determine whether point in the pageitem\n            /// </summary>\n            /// <param name=\"p\"></param>\n            /// <returns></returns>\n            internal bool Contains(PointF p)\n            {\n                return (pi is PagePolygon) ? PointInPolygon(p) : rect.Contains(p);\n            }\n\n            /// <summary>\n            /// PointInPolygon: uses ray casting algorithm ( http://en.wikipedia.org/wiki/Point_in_polygon )\n            /// </summary>\n            /// <param name=\"p\"></param>\n            /// <returns></returns>\n            bool PointInPolygon(PointF p)\n            {\n                PointF p1, p2;\n                bool bIn = false;\n                if (poly.Length < 3)\n                {\n                    return false;\n                }\n\n                PointF op = new PointF(poly[poly.Length - 1].X, poly[poly.Length - 1].Y);\n                for (int i = 0; i < poly.Length; i++)\n                {\n                    PointF np = new PointF(poly[i].X, poly[i].Y);\n                    if (np.X > op.X)\n                    {\n                        p1 = op;\n                        p2 = np;\n                    }\n                    else\n                    {\n                        p1 = np;\n                        p2 = op;\n                    }\n\n                    if ((np.X < p.X) == (p.X <= op.X)\n                        && (p.Y - p1.Y) * (p2.X - p1.X) < (p2.Y - p1.Y) * (p.X - p1.X))\n                    {\n                        bIn = !bIn;\n                    }\n                    op = np;\n                }\n                return bIn;\n            }\n\n        }\n\n        private void InitializeComponent()\n        {\n            this.SuspendLayout();\n            // \n            // PageDrawing\n            // \n            this.Name = \"PageDrawing\";\n            this.ResumeLayout(false);\n\n        }\n    }\n}\n"
  },
  {
    "path": "RdlViewer/PageDrawing.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "RdlViewer/RdlViewer.Designer.cs",
    "content": "using System;\nusing System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\nusing System.Collections;\n\nnamespace Majorsilence.Reporting.RdlViewer\n{\n\tpublic partial class RdlViewer\n\t{\n\t\t#region Windows Form Designer generated code\n\nprivate ToolTip _vScrollToolTip;\nprivate PageDrawing _DrawPanel;\nprivate Button _RunButton;\nprivate PictureBox _WarningButton;\nprivate ScrollableControl _ParameterPanel;\nprivate RdlViewerFind _FindCtl;\n\n\t\t\n\t\t#endregion\nprivate HScrollBar _hScroll;\nprivate VScrollBar _vScroll;\n\n\nprivate void InitializeComponent()\n{\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RdlViewer));\n            this.DoubleBuffered = true;\n\t\t\tthis._RunButton = new System.Windows.Forms.Button();\n\t\t\tthis._hScroll = new System.Windows.Forms.HScrollBar();\n\t\t\tthis._vScroll = new System.Windows.Forms.VScrollBar();\n\t\t\tthis._DrawPanel = new Majorsilence.Reporting.RdlViewer.PageDrawing();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// _RunButton\n\t\t\t// \n\t\t\tresources.ApplyResources(this._RunButton, \"_RunButton\");\n\t\t\tthis._RunButton.Name = \"_RunButton\";\n\t\t\tthis._RunButton.UseVisualStyleBackColor = true;\n\t\t\tthis._RunButton.Click += new System.EventHandler(this.ParametersViewClick);\n\t\t\t// \n\t\t\t// _hScroll\n\t\t\t// \n\t\t\tresources.ApplyResources(this._hScroll, \"_hScroll\");\n\t\t\tthis._hScroll.Name = \"_hScroll\";\n\t\t\tthis._hScroll.Scroll += new System.Windows.Forms.ScrollEventHandler(this.HorizontalScroll);\n\t\t\t// \n\t\t\t// _vScroll\n\t\t\t// \n\t\t\tresources.ApplyResources(this._vScroll, \"_vScroll\");\n\t\t\tthis._vScroll.Name = \"_vScroll\";\n\t\t\tthis._vScroll.Scroll += new System.Windows.Forms.ScrollEventHandler(this.VerticalScroll);\n\t\t\t// \n\t\t\t// _DrawPanel\n\t\t\t// \n\t\t\tresources.ApplyResources(this._DrawPanel, \"_DrawPanel\");\n\t\t\tthis._DrawPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\n\t\t\tthis._DrawPanel.Name = \"_DrawPanel\";\n\t\t\tthis._DrawPanel.Paint += new System.Windows.Forms.PaintEventHandler(this.DrawPanelPaint);\n\t\t\tthis._DrawPanel.KeyDown += new System.Windows.Forms.KeyEventHandler(this.DrawPanelKeyDown);\n\t\t\tthis._DrawPanel.Resize += new System.EventHandler(this.DrawPanelResize);\n\t\t\t// \n\t\t\t// RdlViewer\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this._vScroll);\n\t\t\tthis.Controls.Add(this._hScroll);\n\t\t\tthis.Controls.Add(this._RunButton);\n\t\t\tthis.Controls.Add(this._DrawPanel);\n\t\t\tthis.Name = \"RdlViewer\";\n\t\t\tthis.ResumeLayout(false);\n\n}\n\t\t\n\t}\n}\n"
  },
  {
    "path": "RdlViewer/RdlViewer.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.IO;\nusing System.Windows.Forms;\nusing System.Drawing.Printing;\nusing System.Text;\nusing EncryptionProvider;\nusing EncryptionProvider.String;\nusing Majorsilence.Reporting.RdlViewer.Resources;\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.WinformUtils;\nusing System.ComponentModel;\n\nnamespace Majorsilence.Reporting.RdlViewer\n{\n    using System.Threading;\n    using System.Threading.Tasks;\n\n    /// <summary>\n    /// RdlViewer displays RDL files or syntax. \n    /// </summary>\n    public partial class RdlViewer : System.Windows.Forms.UserControl\n    {\n        public delegate void HyperlinkEventHandler(object source, HyperlinkEventArgs e);\n\n        public delegate void PageNavigationEventHandler(object sender, PageNavigationEventArgs e);\n\n        /// <summary>\n        /// Hyperlink invoked when report item with hyperlink is clicked on.\n        /// </summary>\n        public event HyperlinkEventHandler Hyperlink;\n        public event EventHandler<SubreportDataRetrievalEventArgs> SubreportDataRetrieval;\n        public event PageNavigationEventHandler PageNavigation;\n\n        /// <summary>\n        /// EBN 31/03/2014\n        /// Delegate is used to provide the content of a sub report from an alternate source (server, database, memory, ...)\n        /// </summary>\n        /// <param name=\"SubReportName\">Name and path of the subreport</param>\n        /// <returns>The content of the sub report (XML content)</returns>\n        private CrossDelegate SubReportGetContent = new CrossDelegate();\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public CrossDelegate.GetContent dSubReportGetContent\n        {\n            get { return SubReportGetContent.SubReportGetContent; }\n            set { SubReportGetContent.SubReportGetContent = value; }\n        }\n\n        public NeedPassword GetDataSourceReferencePassword = null;\n        /// <summary>\n        /// File name to use\n        /// </summary>\n        private Uri _SourceFileName;\n        /// <summary>\n        /// Source Rdl; if provided overrides filename\n        /// </summary>\n        private string _SourceRdl;\n        /// <summary>\n        /// Parameters to run the report\n        /// </summary>\n        private IDictionary _Parameters = new Dictionary<string, string>();\n        /// <summary>\n        /// The Report\n        /// </summary>\n        private Report _Report;\n        /// <summary>\n        /// Folder for DataSourceReference (if file name not provided)\n        /// </summary>\n        private string _Folder;\n        /// <summary>\n        /// The pages of the report to view\n        /// </summary>\n        private Pages _pgs;\n        /// <summary>\n        /// Last load of report failed\n        /// </summary>\n        private bool _loadFailed;\n        /// <summary>\n        /// Left margin; calculated based on size of window & scroll style\n        /// </summary>\n        private float _leftMargin;\n\n        #region report information\n\n        /// <summary>\n        /// Width of page\n        /// </summary>\n        private float _PageWidth;\n        /// <summary>\n        /// Height of page\n        /// </summary>\n        private float _PageHeight;\n        private string _ReportDescription;\n        private string _ReportAuthor;\n        private string _ReportName;\n        private IList _errorMsgs;\n\n        #endregion report information\n\n        //private PageDrawing _pd;\t\t\t// draws the pages of a report\n\n        #region Zoom\n\n        /// <summary>\n        /// Zoom factor\n        /// </summary>\n        private float _zoom;\n        private float DpiX;\n        private float DpiY;\n        private ZoomEnum _zoomMode = ZoomEnum.FitWidth;\n        /// <summary>\n        /// Right margin: 10 points\n        /// </summary>\n        private float _leftGap = 10;\n        /// <summary>\n        /// Left margin: 10 points\n        /// </summary>\n        private float _rightGap = 10;\n        /// <summary>\n        /// gap between pages: 10 points\n        /// </summary>\n        private float _pageGap = 10;\n\n        #endregion\n\n        #region Printing\n\n        /// <summary>\n        /// Compensate for non-printable region\n        /// </summary>\n        private bool _UseTrueMargins = true;\n        /// <summary>\n        /// End page\n        /// </summary>\n        private int printEndPage;\n        /// <summary>\n        /// Current page to print\n        /// </summary>\n        private int printCurrentPage;\n\n        #endregion Printing\n\n        // Scrollbars\n        private ScrollModeEnum _ScrollMode;\n\n        // the main drawing panel\n\n\n        // panel for specifying parameters\n        private int _ParametersMaxHeight;\n        // max height of controls in _ParameterPanel\n\n        private string _HighlightText = null;\n        // text that should be highlighted when drawn\n        private bool _HighlightCaseSensitive = false;\n        // highlight text is case insensitive\n        private bool _HighlightAll = false;\n        // highlight all instances of Highlight text\n        private PageItem _HighlightItem = null;\n        // page item to highlight\n\n        private bool _ShowParameters = true;\n        private bool _ShowWaitDialog = true;\n        // show wait dialog when running report\n\n        public RdlViewer()\n        {\n            // CustomReportItem init \n            RdlEngineConfig.GetCustomReportTypes();\n\n            this.InitializeComponent();\n            _DrawPanel.BorderStyle = BorderStyle.None;\n            _SourceFileName = null;\n            _SourceRdl = null;\n            _Parameters = null;             // parameters to run the report\n            _pgs = null;                        // the pages of the report to view\n            _loadFailed = false;\n            _PageWidth = 0;\n            _PageHeight = 0;\n            _ReportDescription = null;\n            _ReportAuthor = null;\n            _ReportName = null;\n            _zoom = -1;                     // force zoom to be calculated\n\n            // Get our graphics DPI\t\t\t\t\t   \n            Graphics g = null;\n            try\n            {\n                g = this.CreateGraphics();\n                DpiX = g.DpiX;\n                DpiY = g.DpiY;\n            }\n            catch\n            {\n                DpiX = DpiY = 96;\n            }\n            finally\n            {\n                if (g != null)\n                    g.Dispose();\n            }\n\n            _ScrollMode = ScrollModeEnum.Continuous;\n\n            // tooltip \n            _vScrollToolTip = new ToolTip();\n            _vScrollToolTip.AutomaticDelay = 100;   // .1 seconds\n            _vScrollToolTip.AutoPopDelay = 1000;    // 1 second\n            _vScrollToolTip.ReshowDelay = 100;      // .1 seconds\n            _vScrollToolTip.InitialDelay = 10;      // .01 seconds\n            _vScrollToolTip.ShowAlways = false;\n            _vScrollToolTip.SetToolTip(_vScroll, \"\");\n\n            _DrawPanel.Parent = this;\n\n            _DrawPanel.MouseWheel += new MouseEventHandler(DrawPanelMouseWheel);\n\n            _WarningButton = new PictureBox();\n            _WarningButton.Parent = this;\n            _WarningButton.Width = 15;\n            _WarningButton.Height = 15;\n            _WarningButton.Paint += new PaintEventHandler(_WarningButton_Paint);\n            _WarningButton.Click += new System.EventHandler(WarningClick);\n            ToolTip tip = new ToolTip();\n            tip.AutomaticDelay = 500;\n            tip.ShowAlways = true;\n            tip.SetToolTip(_WarningButton, \"Click to see Report Warnings\");\n\n            _ParameterPanel = new ScrollableControl();\n\n            _FindCtl = new RdlViewerFind();\n            _FindCtl.Height = 27;\n            _FindCtl.Parent = this;\n            _FindCtl.Viewer = this;\n            _FindCtl.Visible = false;\n\n            this.Layout += new LayoutEventHandler(RdlViewer_Layout);\n            this.SuspendLayout();\n\n            // Must be added in this order for DockStyle to work correctly\n            this.Controls.Add(_FindCtl);\n            this.Controls.Add(_ParameterPanel);\n\n            this.ResumeLayout(false);\n        }\n\n        public new bool Focus()\n        {\n            return (this._DrawPanel.Focus());\n        }\n\n        /// <summary>\n        /// When true printing will compensate for non-printable area of paper\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public bool UseTrueMargins\n        {\n            get { return _UseTrueMargins; }\n            set { _UseTrueMargins = value; }\n        }\n\n        /// <summary>\n        /// Show the Wait Dialog when retrieving and rendering report when true.\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public bool ShowWaitDialog\n        {\n            get { return _ShowWaitDialog; }\n            set { _ShowWaitDialog = value; }\n        }\n\n        /// <summary>\n        /// True if Parameter panel should be shown. \n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public bool ShowParameterPanel\n        {\n            get\n            {\n                // HACK: async\n                Task.Run(async () => await LoadPageIfNeeded()).GetAwaiter().GetResult();\n                return _ShowParameters;\n            }\n            set\n            {\n                _ShowParameters = value;\n                RdlViewer_Layout(this, null);               // re layout based on new report\n            }\n        }\n\n        /// <summary>\n        /// True when find panel is visible\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public bool ShowFindPanel\n        {\n            get\n            {\n                return _FindCtl.Visible;\n            }\n            set\n            {\n                _FindCtl.Visible = value;\n                RdlViewer_Layout(this, null);               // re layout based on new report\n            }\n        }\n\n        /// <summary>\n        /// Causes the find panel to find the next item\n        /// </summary>\n        public async Task FindNext()\n        {\n            await _FindCtl.FindNext();\n        }\n\n        /// <summary>\n        /// The color to use when highlighting the current found item\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public Color HighlightItemColor\n        {\n            get { return _DrawPanel.HighlightItemColor; }\n            set { _DrawPanel.HighlightItemColor = value; }\n        }\n\n        /// <summary>\n        /// The color to use when highlighting all\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public Color HighlightAllColor\n        {\n            get { return _DrawPanel.HighlightAllColor; }\n            set { _DrawPanel.HighlightAllColor = value; }\n        }\n\n        /// <summary>\n        /// The text to highlight when either HighLightAll is on or the HighLightItem is on.\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string HighlightText\n        {\n            get { return _HighlightText; }\n            set\n            {\n                _HighlightText = value;\n                _DrawPanel.Invalidate();    // force redraw\n            }\n        }\n\n        /// <summary>\n        /// When HighlightText has a value; HighlightAll controls whether\n        /// all page items with that text will be highlighted\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public bool HighlightAll\n        {\n            get { return _HighlightAll; }\n            set\n            {\n                _HighlightAll = value;\n                if (_HighlightText != null && _HighlightText.Length > 0)\n                    _DrawPanel.Invalidate();    // force redraw when need to\n            }\n        }\n\n        /// <summary>\n        /// When HighlightText has a value; HighlightCaseSensitive controls whether\n        /// the comparison is case sensitive.\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public bool HighlightCaseSensitive\n        {\n            get { return _HighlightCaseSensitive; }\n            set\n            {\n                _HighlightCaseSensitive = value;\n                if (_HighlightText != null && _HighlightText.Length > 0)\n                    _DrawPanel.Invalidate();    // force redraw when need to\n            }\n        }\n\n        /// <summary>\n        /// When used with HighlightText; HighlightPageItem will only highlight the selected item.\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public PageItem HighlightPageItem\n        {\n            get { return _HighlightItem; }\n            set\n            {\n                _HighlightItem = value;\n                _DrawPanel.Invalidate();    // force redraw\n            }\n        }\n\n        /// <summary>\n        /// Returns the number of pages in the report.  0 is returned if no report has been loaded.\n        /// </summary>\n        public int PageCount\n        {\n            get\n            {\n                // HACK: async\n                Task.Run(async () => await LoadPageIfNeeded()).GetAwaiter().GetResult();\n                if (_pgs == null)\n                    return 0;\n                else\n                    return _pgs.PageCount;\n            }\n        }\n\n        /// <summary>\n        /// Sets/Returns the page currently showing\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public int PageCurrent\n        {\n            get\n            {\n                if (_pgs == null)\n                    return 0;\n                int pc = (int)(_pgs.PageCount * ((long)_vScroll.Value + PageHeight) / (double)_vScroll.Maximum) + 1;\n                if (pc > _pgs.PageCount)\n                    pc = _pgs.PageCount;\n                return pc;\n            }\n            set\n            {\n                if (_pgs == null)\n                    return;\n                // Contributed by Henrique (h2a) 07/14/2006\n                if (value <= _pgs.PageCount && value >= 1)\n                {\n                    //\t\t\t\t\t_vScroll.Value = (int)((double)_vScroll.Maximum / _pgs.PageCount * (value -1)); \n\n                    double scrollValue = ((double)_vScroll.Maximum * (value - 1)) / _pgs.PageCount;\n                    _vScroll.Value = Math.Min((int)Math.Round(scrollValue), _vScroll.Maximum);\n\n                    string tt = string.Format(\"Page {0} of {1}\",\n                                    (int)(_pgs.PageCount * (long)_vScroll.Value / (double)_vScroll.Maximum) + 1,\n                                    _pgs.PageCount);\n\n                    _vScrollToolTip.SetToolTip(_vScroll, tt);\n\n                    _DrawPanel.Invalidate();\n                    _DrawPanel.Refresh();\n                    Refresh();\n                    ChangePageEvent();\n                }\n                else\n                    throw new ArgumentOutOfRangeException(\"PageCurrent\", value, String.Format(\"Value must be between 1 and {0}.\", _pgs.PageCount));\n            }\n        }\n\n        /// <summary>\n        /// Gets the report definition.\n        /// </summary>\n        public async Task<Report> Report()\n        {\n            await LoadPageIfNeeded();\n            return _Report;    \n        }\n\n        /// <summary>\n        /// Forces the report to get rebuilt especially after changing parameters or data.\n        /// </summary>\n        public async Task Rebuild()\n        {\n            // Aulofee customization - start. Code added (2 lines) to avoid to execute twice GetPages and so the SQL query (custo end). \n            if (_pgs == null)\n            {\n                await LoadPageIfNeeded();\n\n                if (_Report == null)\n                    throw new Exception(Strings.RdlViewer_Error_Report_must_be_loaded_prior_to_Rebuild_being_called);\n                // Aulofee customization - start. Code added (2 lines) to avoid to execute twice GetPages and so the SQL query (custo end). \n            }\n            else\n            {\n                _pgs = await GetPages(_Report);\n            }\n            _DrawPanel.Pgs = _pgs;\n            _vScroll.Value = 0;\n            CalcZoom();\n            _DrawPanel.Invalidate();\n        }\n\n        /// <summary>\n        /// Gets/Sets the ScrollMode.  \n        ///\t\tSinglePage: Shows a single page shows in pane.\n        ///\t\tContinuous: Shows pages as a continuous vertical column.\n        ///\t\tFacing: Shows first page on right side of pane, then alternating\n        ///\t\t\t\twith single page scrolling.\n        ///\t\tContinuousFacing: Shows 1st page on right side of pane, then alternating \n        ///\t\t\t\twith continuous scrolling.\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public ScrollModeEnum ScrollMode\n        {\n            get { return _ScrollMode; }\n            set\n            {\n                _ScrollMode = value;\n                CalcZoom();\n                this._DrawPanel.Invalidate();\n            }\n        }\n\n        /// <summary>\n        /// Enables/Disables the selection tool.  The selection tool allows the user\n        /// to select text and images on the display and copy it to the clipboard.\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public bool SelectTool\n        {\n            get { return _DrawPanel.SelectTool; }\n            set { _DrawPanel.SelectTool = value; }\n        }\n\n        /// <summary>\n        /// Returns true when one or more PageItems are selected.\n        /// </summary>\n        public bool CanCopy\n        {\n            get { return _DrawPanel.CanCopy; }\n        }\n\n        /// <summary>\n        /// Copies the current selection (if any) to the clipboard.\n        /// </summary>\n        public void Copy()\n        {\n            if (!CanCopy)\n                return;\n\n            Image im = _DrawPanel.SelectImage;\n            if (im == null)\n                Clipboard.SetDataObject(SelectText, true);\n            else\n            {\n                Clipboard.SetImage(im);\n                im.Dispose();\n            }\n        }\n\n        /// <summary>\n        /// The contents of the selected text.  Tab separate items on same y coordinate;\n        /// newline separate items when y coordinate changes.   Order is based on user\n        /// selection order.\n        /// </summary>\n        public string SelectText\n        {\n            get\n            {\n                return _DrawPanel.SelectText;\n            }\n        }\n\n        /// <summary>\n        /// Holds a file name that contains the RDL (Report Specification Language).  Setting\n        /// this field will cause a new report to be loaded into the viewer.\n        /// SourceFile is mutually exclusive with SourceRdl.  Setting SourceFile will nullify SourceRdl.\n        /// </summary>\n        public Uri SourceFile\n        {\n            get\n            {\n                return _SourceFileName;\n            }\n        }\n\n        public async Task SetSourceFile(Uri value)\n        {\n            _SourceFileName = value;\n            if (value != null)\n                _SourceRdl = null;\n            _vScroll.Value = _hScroll.Value = 0;\n            _pgs = null;                // reset pages, only if SourceRdl is also unavailable\n            _DrawPanel.Pgs = null;\n            _loadFailed = false;            // attempt to load the report\n            if (this.Visible)\n            {\n                await LoadPageIfNeeded();         // force load of report\n                this._DrawPanel.Invalidate();\n            }\n        }\n\n        /// <summary>\n        /// Holds the XML source of the report in RDL (Report Specification Language).\n        /// SourceRdl is mutually exclusive with SourceFile.  Setting SourceRdl will nullify SourceFile.\n        /// </summary>\n        public string SourceRdl\n        {\n            get { return _SourceRdl; }\n        }\n\n        public async Task SetSourceRdl(string value)\n        {\n            _SourceRdl = value;\n            if (value != null)\n                _SourceFileName = null;\n            _pgs = null;                // reset pages\n            _DrawPanel.Pgs = null;\n            _loadFailed = false;            // attempt to load the report\t\n            _vScroll.Value = _hScroll.Value = 0;\n            if (this.Visible)\n            {\n                await LoadPageIfNeeded();\n                this._DrawPanel.Invalidate();\n            }\n        }\n\n        /// <summary>\n        /// Do not force report loading \n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string SourceRdlNoLoad\n        {\n            get { return _SourceRdl; }\n            set\n            {\n                _SourceRdl = value;\n                if (value != null)\n                    _SourceFileName = null;\n                _pgs = null;                // reset pages\n                _DrawPanel.Pgs = null;\n                _loadFailed = false;            // attempt to load the report\t\n                _vScroll.Value = _hScroll.Value = 0;\n                //if (this.Visible)\n                //{\n                //    LoadPageIfNeeded();         // force load of report\n                //    this._DrawPanel.Invalidate();\n                //}\n            }\n        }\n\n        /// <summary>\n        /// Holds the folder to data source reference files when SourceFileName not available.\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string Folder\n        {\n            get { return _Folder; }\n            set { _Folder = value; }\n        }\n\n        /// <summary>\n        /// Parameters passed to report when run.  Parameters are separated by '&'.  For example,\n        /// OrderID=10023&OrderDate=10/14/2002\n        /// Note: these parameters will override the user specified ones.\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string Parameters\n        {\n            get\n            {\n                string result = \"\";\n\n                // Check for zero to working form designer\n                if (_Parameters != null)\n                {\n                    foreach (DictionaryEntry kvp in _Parameters)\n                    {\n                        result += String.Format(\"{0:s}={1:s};\", kvp.Key, kvp.Value);\n                    }\n                }\n\n                return result.TrimEnd(';');\n            }\n            set\n            {\n                SetReportParametersAmpersandSeparated(value);\n            }\n        }\n\n        #region Parameter setting methods\n        public void SetReportParametersAmpersandSeparated(string parameterString)\n        {\n            _Parameters = new Dictionary<string, string>();\n            if (String.IsNullOrEmpty(parameterString))\n                return;\n            String[] prms = parameterString.TrimEnd(';').Split('&');\n            foreach (String p in prms)\n            {\n                int iEq = p.IndexOf(\"=\");\n                if (iEq > 0)\n                {\n                    string name = p.Substring(0, iEq);\n                    string val = p.Substring(iEq + 1);\n                    _Parameters.Add(name, val);\n                }\n            }\n        }\n\n        public void SetReportParametersAsJson(string jsonParameterString)\n        {\n            var dict = System.Text.Json.JsonSerializer.Deserialize<Dictionary<string, string>>(jsonParameterString);\n            SetReportParameters(dict);\n        }\n        \n        public void SetReportParameters(IDictionary<string, string> parameters)\n        {\n            _Parameters = new Dictionary<string, string>();\n\n            foreach (var parameter in parameters)\n            {\n                _Parameters.Add(parameter.Key, parameter.Value);\n            }\n        }\n        #endregion\n\n        /// <summary>\n        /// The height of the report page (in points) as defined within the report.\n        /// </summary>\n        public float PageHeight\n        {\n            get\n            {\n                // HACK: async\n                Task.Run(async () => await LoadPageIfNeeded()).GetAwaiter().GetResult();\n                return _PageHeight;\n            }\n        }\n\n        /// <summary>\n        /// The width of the report page (in points) as defined within the report.\n        /// </summary>\n        public float PageWidth\n        {\n            get\n            {\n                // HACK: async\n                Task.Run(async () => await LoadPageIfNeeded()).GetAwaiter().GetResult();\n                return _PageWidth;\n            }\n        }\n\n        /// <summary>\n        /// Description of the report.\n        /// </summary>\n        public string ReportDescription\n        {\n            get\n            {\n                // HACK: async\n                Task.Run(async () => await LoadPageIfNeeded()).GetAwaiter().GetResult();\n                return _ReportDescription;\n            }\n        }\n\n        /// <summary>\n        /// Author of the report.\n        /// </summary>\n        public string ReportAuthor\n        {\n            get\n            {\n                // HACK: async\n                Task.Run(async () => await LoadPageIfNeeded()).GetAwaiter().GetResult();\n                return _ReportAuthor;\n            }\n        }\n\n        /// <summary>\n        /// Name of the report.\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string ReportName\n        {\n            get\n            {\n                return _ReportName;\n            }\n            set { _ReportName = value; }\n        }\n\n        /// <summary>\n        /// Zoom factor.  For example, .5 is a 50% reduction, 2 is 200% increase.\n        /// Setting this value will force ZoomMode to UseZoom.\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public float Zoom\n        {\n            get { return _zoom; }\n            set\n            {\n                _zoom = value;\n                this._zoomMode = ZoomEnum.UseZoom;\n                CalcZoom();         // this adjust any scrolling issues\n                this._DrawPanel.Invalidate();\n            }\n        }\n\n        /// <summary>\n        /// ZoomMode.  Optionally, allows zoom to dynamically change depending on pane size.\n        /// </summary>\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public ZoomEnum ZoomMode\n        {\n            get { return _zoomMode; }\n            set\n            {\n                _zoomMode = value;\n                CalcZoom();             // force zoom calculation\n                this._DrawPanel.Invalidate();\n            }\n        }\n\n        /// <summary>\n        /// Print the report.\n        /// </summary>\n        public async Task Print(PrintDocument pd)\n        {\n            await LoadPageIfNeeded();\n\n            pd.PrintPage += new PrintPageEventHandler(PrintPage);\n\n            // This is a work around where many printers do not support printing\n            // more then one copy.  This will cause a prompt for each copy if using XPS\n            //\n            // http://msdn.microsoft.com/en-us/library/system.drawing.printing.printersettings.copies.aspx\n            // \"Not all printers support printing multiple copes. You can use the MaximumCopies property \n            // to determine the maximum number of copies the printer supports. If the number of \n            // copies is set higher than the maximum copies supported by the printer, only the \n            // maximum number of copies will be printed, and no exception will occur.\"\n            // \n            if (pd.PrinterSettings.MaximumCopies == 1 && pd.PrinterSettings.Copies > 1)\n            {\n                for (int i = 0; i < pd.PrinterSettings.Copies; i++)\n                {\n                    _Print(pd);\n                }\n            }\n            else\n            {\n                _Print(pd);\n            }\n        }\n\n        private void _Print(PrintDocument pd)\n        {\n            printCurrentPage = -1;\n            switch (pd.PrinterSettings.PrintRange)\n            {\n                case PrintRange.AllPages:\n                    printCurrentPage = 0;\n                    printEndPage = _pgs.PageCount - 1;\n                    break;\n                case PrintRange.Selection:\n                    printCurrentPage = pd.PrinterSettings.FromPage - 1;\n                    printEndPage = pd.PrinterSettings.FromPage - 1;\n                    break;\n                case PrintRange.SomePages:\n                    printCurrentPage = pd.PrinterSettings.FromPage - 1;\n                    if (printCurrentPage < 0)\n                        printCurrentPage = 0;\n                    printEndPage = pd.PrinterSettings.ToPage - 1;\n                    if (printEndPage >= _pgs.PageCount)\n                        printEndPage = _pgs.PageCount - 1;\n                    break;\n            }\n            pd.Print();\n        }\n\n        private async void PrintPage(object sender, PrintPageEventArgs e)\n        {\n            System.Drawing.Rectangle r = new System.Drawing.Rectangle(0, 0, int.MaxValue, int.MaxValue);\n            // account for the non-printable area of the paper\n            PointF pageOffset;\n            if (this.UseTrueMargins && this._Report != null)\n            {\n                // The page offset is set in pixels as the Draw method changes the graphics object to use pixels\n                // (the origin transform does not get changed by the change in units.  PrintableArea returns\n                // numbers in the hundredths of an inch.\n\n                float x = ((e.PageSettings.PrintableArea.X * e.Graphics.DpiX) / 100.0F) - e.Graphics.Transform.OffsetX;\n                float y = ((e.PageSettings.PrintableArea.Y * e.Graphics.DpiY) / 100.0F) - e.Graphics.Transform.OffsetY;\n\n                // Get the margins in printer pixels (don't use the function!)\n                // Points to pixels conversion ((double)x * DpiX / POINTSIZEF)\n                float lm = (float)((double)_Report.LeftMarginPoints * e.Graphics.DpiX / POINTSIZEF);\n                float tm = (float)((double)_Report.TopMarginPoints * e.Graphics.DpiY / POINTSIZEF);\n                // Correct based on the report margin\n                if (x > lm)      // left margin is less than the minimum left margin\n                    x = 0;\n                if (y > tm)      // top margin is less than the minimum top margin\n                    y = 0;\n                pageOffset = new PointF(-x, -y);\n            }\n            else\n            {\n                pageOffset = PointF.Empty;\n            }\n\n            await _DrawPanel.Draw(e.Graphics, printCurrentPage, r, false, pageOffset);\n\n            printCurrentPage++;\n            if (printCurrentPage > printEndPage)\n                e.HasMorePages = false;\n            else\n                e.HasMorePages = true;\n        }\n\n\n        /// <summary>\n        /// Save the file.  The extension determines the type of file to save.\n        /// </summary>\n        /// <param name=\"FileName\">Name of the file to be saved to.</param>\n        /// <param name=\"type\">Type of file to save.  Should be \"pdf\", \"xml\", \"html\", \"mhtml\", \"csv\", \"rtf\", \"excel\", \"tif\".</param>\n        public async Task SaveAs(string FileName, Majorsilence.Reporting.Rdl.OutputPresentationType type)\n        {\n            await LoadPageIfNeeded();\n\n\n            OneFileStreamGen sg = new OneFileStreamGen(FileName, true); // overwrite with this name\n            if (!(type == OutputPresentationType.PDF || type == OutputPresentationType.PDFOldStyle ||\n                type == OutputPresentationType.TIF || type == OutputPresentationType.TIFBW))\n            {\n                var ld = await GetParameters();        // split parms into dictionary\n                await _Report.RunGetData(ld);                     // obtain the data (again)\n            }\n            try\n            {\n                switch (type)\n                {\n                    case OutputPresentationType.PDF:\n                        _Report.ItextPDF = true;\n                        await _Report.RunRenderPdf(sg, _pgs);\n                        break;\n                    case OutputPresentationType.PDFOldStyle:\n                        _Report.ItextPDF = false;\n                        await _Report.RunRenderPdf(sg, _pgs);\n                        break;\n                    case OutputPresentationType.TIF:\n                        await _Report.RunRenderTif(sg, _pgs, true);\n                        break;\n                    case OutputPresentationType.TIFBW:\n                        await _Report.RunRenderTif(sg, _pgs, false);\n                        break;\n                    case OutputPresentationType.CSV:\n                        await _Report.RunRender(sg, OutputPresentationType.CSV);\n                        break;\n                    case OutputPresentationType.Word:\n                    case OutputPresentationType.RTF:\n                        await _Report.RunRender(sg, OutputPresentationType.RTF);\n                        break;\n                    case OutputPresentationType.ExcelTableOnly:\n                        await _Report.RunRender(sg, OutputPresentationType.ExcelTableOnly);\n                        break;\n                    case OutputPresentationType.Excel2007:\n                        await _Report.RunRender(sg, OutputPresentationType.Excel2007);\n                        break;\n                    case OutputPresentationType.XML:\n                        await _Report.RunRender(sg, OutputPresentationType.XML);\n                        break;\n                    case OutputPresentationType.HTML:\n                        await _Report.RunRender(sg, OutputPresentationType.HTML);\n                        break;\n                    case OutputPresentationType.MHTML:\n                        await _Report.RunRender(sg, OutputPresentationType.MHTML);\n                        break;\n                    default:\n                        throw new Exception(Strings.RdlViewer_Error_UnsupportedExtension);\n                }\n            }\n            finally\n            {\n                if (sg != null)\n                {\n                    sg.CloseMainStream();\n                }\n\n\n            }\n            return;\n        }\n\n        /// <summary>\n        /// Finds the first instance of the search string.\n        /// </summary>\n        /// <param name=\"search\"></param>\n        /// <returns>null if not found</returns>\n        public async Task<PageItem> Find(string search)\n        {\n            return await Find(search, null, RdlViewerFinds.None);\n        }\n\n        /// <summary>\n        /// Find locates the next string after the passed location.  Use ScrollToPageItem to then\n        /// reposition the Viewer on that item\n        /// </summary>\n        /// <param name=\"search\">Text to search for</param>\n        /// <param name=\"position\">PageItem after which to start search.  null starts at beginning</param>\n        /// <param name=\"options\">Multiple options can be or'ed together.</param>\n        /// <returns>null if not found</returns>\n        public async Task<PageItem> Find(string search, PageItem position, RdlViewerFinds options)\n        {\n            await LoadPageIfNeeded();\n\n            if (_pgs == null || _pgs.Count == 0)       // no report nothing to find\n                return null;\n\n            // initialize the loop direction and starting point\n            int increment;\n            int sPage;\n            int sItem;\n            if (((options & RdlViewerFinds.Backward) == RdlViewerFinds.Backward))\n            {   // set to backward direction\n                increment = -1;                 // go backwards\n                sPage = _pgs.PageCount - 1;     // start at last page\n                sItem = _pgs[sPage].Count - 1;  // start at bottom of last page\n            }\n            else\n            {   // set to forward direction\n                increment = 1;\n                sPage = 0;\n                sItem = 0;\n            }\n\n            bool bFirst = true;\n            if (position != null)\n            {\n                sPage = position.Page.PageNumber - 1;   // start on same page as current\n                sItem = position.ItemNumber + increment;  //   but on the item after/before the current one\n            }\n\n            if (!((options & RdlViewerFinds.MatchCase) == RdlViewerFinds.MatchCase))\n                search = search.ToLower();          // should use Culture!!! todo\n\n            PageItem found = null;\n            for (int pi = sPage; pi < _pgs.Count && found == null && pi >= 0; pi = pi + increment)\n            {\n                Page p = _pgs[pi];\n                if (bFirst)         // The first time sItem is already set\n                    bFirst = false;\n                else\n                {\n                    if (increment < 0)  // we're going backwards?\n                        sItem = p.Count - 1;    // yes, start at bottom of page\n                    else\n                        sItem = 0;              // no, start at top of page\n                }\n                for (int pii = sItem; pii < p.Count && found == null && pii >= 0; pii = pii + increment)\n                {\n                    PageText pt = p[pii] as PageText;\n                    if (pt == null)\n                        continue;\n\n                    if ((options & RdlViewerFinds.MatchCase) == RdlViewerFinds.MatchCase)\n                    {\n                        if (pt.Text.Contains(search))\n                            found = pt;\n                    }\n                    else\n                    {\n                        if (pt.Text.ToLower().Contains(search))\n                            found = pt;\n                    }\n                }\n            }\n\n            return found;\n        }\n\n        public async Task ScrollToPageItem(PageItem pi)\n        {\n            await LoadPageIfNeeded();\n            if (_pgs == null || _pgs.PageCount <= 0)    // nothing to scroll to\n                return;\n\n            int sPage = 0;\n            int sItem = 0;\n            int itemVerticalOffset = 0;\n            int itemHorzOffset = 0;\n            int height = 0;\n            int width = 0;\n            if (pi != null)\n            {\n                sPage = pi.Page.PageNumber - 1;\n                sItem = pi.ItemNumber;\n                RectangleF rect = new RectangleF(PixelsX(pi.X + _leftMargin),\n                                      PixelsY(pi.Y),\n                                      PixelsX(pi.W),\n                                      PixelsY(pi.H));\n                itemVerticalOffset = (int)(rect.Top);\n                itemHorzOffset = (int)rect.Left;\n                width = (int)rect.Width;\n                height = (int)(rect.Height);\n            }\n\n            // set the vertical scroll\n            int scroll = (int)((double)_vScroll.Maximum * sPage / _pgs.PageCount) + itemVerticalOffset;\n\n            // do we need to scroll vertically?\n            if (!(_vScroll.Value <= scroll && _vScroll.Value + _DrawPanel.Height / this.Zoom >= scroll + height))\n            {   // item isn't on visible part of window; force scroll\n                int maxScroll = Math.Max(_vScroll.Minimum, _vScroll.Maximum - _DrawPanel.Height);\n                _vScroll.Value = Math.Min(Math.Max(scroll, _vScroll.Minimum), Math.Min(maxScroll, _vScroll.Maximum));\n                SetScrollControlsV();\n                ScrollEventArgs sa = new ScrollEventArgs(ScrollEventType.ThumbPosition, _vScroll.Maximum + 1); // position is intentionally wrong\n                VerticalScroll(_vScroll, sa);\n            }\n\n            // set the horizontal scroll\n            scroll = itemHorzOffset;\n\n            // do we need to scroll horizontally?\n            if (!(_hScroll.Value <= scroll && _hScroll.Value + _DrawPanel.Width / this.Zoom >= scroll + width))\n            {   // item isn't on visible part of window; force scroll\n                int maxScroll = Math.Max(_hScroll.Minimum, _hScroll.Maximum - _DrawPanel.Width);\n                _hScroll.Value = Math.Min(Math.Max(scroll, _hScroll.Minimum), Math.Min(maxScroll, _hScroll.Maximum));\n                SetScrollControlsH();\n                ScrollEventArgs sa = new ScrollEventArgs(ScrollEventType.ThumbPosition, _hScroll.Maximum + 1); // position is intentionally wrong\n                HorizontalScroll(_hScroll, sa);\n            }\n        }\n\n        private Bitmap _buffer;\n        // HACK: async shenanigans\n        bool doGraphicsDraw;\n        private async void DrawPanelPaint(object sender, System.Windows.Forms.PaintEventArgs e)\n        {\n            try         // never want to die in here\n            {\n                if (doGraphicsDraw && _buffer != null)\n                {            \n                    e.Graphics.DrawImage(_buffer, 0, 0);\n                    _buffer.Dispose();\n                    _buffer = null;            \n                }\n                else\n                {\n                    await LoadPageIfNeeded();             // make sure we have something to show\n\n                    if (_zoom < 0)\n                        CalcZoom();             // new report or resize client requires new zoom factor\n\n                    // Draw the page\n                    _buffer = new Bitmap(Math.Max(1, _DrawPanel.Width), Math.Max(1, _DrawPanel.Height));\n                    using (Graphics g = Graphics.FromImage(_buffer))\n                    {\n                        await _DrawPanel.Draw(g, _zoom, _leftMargin, _pageGap,\n                                PointsX(_hScroll.Value), PointsY(_vScroll.Value),\n                                e.ClipRectangle,\n                                _HighlightItem, _HighlightText, _HighlightCaseSensitive, _HighlightAll);                         \n                    }\n\n                    doGraphicsDraw = true;\n                    _DrawPanel.Invalidate();       // force a redraw\n                }         \n            }\n            catch (Exception ex)\n            {   // don't want to kill process if we die\n                using (Font font = new Font(\"Arial\", 8))\n                    e.Graphics.DrawString(ex.Message + \"\\r\\n\" + ex.StackTrace, font, Brushes.Black, 0, 0);\n            }\n        }\n\n        private void DrawPanelResize(object sender, EventArgs e)\n        {\n            CalcZoom();                         // calc zoom\n            _DrawPanel.Invalidate();\n        }\n\n        private float POINTSIZEF = 72.27f;\n\n        private float PointsX(float x)      // pixels to points\n        {\n            return x * POINTSIZEF / DpiX;\n        }\n\n        private float PointsY(float y)\n        {\n            return y * POINTSIZEF / DpiY;\n        }\n\n        private int PixelsX(float x)        // points to pixels\n        {\n            int r = (int)((double)x * DpiX / POINTSIZEF);\n            if (r == 0 && x > .0001f)\n                r = 1;\n            return r;\n        }\n\n        private int PixelsY(float y)\n        {\n            int r = (int)((double)y * DpiY / POINTSIZEF);\n            if (r == 0 && y > .0001f)\n                r = 1;\n            return r;\n        }\n\n        private void CalcZoom()\n        {\n            switch (_zoomMode)\n            {\n                case ZoomEnum.UseZoom:\n                    if (_zoom <= 0)\t\t\t// normalize invalid values\n                        _zoom = 1;\n                    break;                  // nothing to calculate\n                case ZoomEnum.FitWidth:\n                    CalcZoomFitWidth();\n                    break;\n                case ZoomEnum.FitPage:\n                    CalcZoomFitPage();\n                    break;\n            }\n            if (_zoom <= 0)\n                _zoom = 1;\n            float w = PointsX(_DrawPanel.Width);    // convert to points\n\n            if (w > (this._PageWidth + _leftGap + _rightGap) * _zoom)\n                _leftMargin = ((w - (this._PageWidth + _leftGap + _rightGap) * _zoom) / 2) / _zoom;\n            else\n                _leftMargin = _leftGap;\n            if (_leftMargin < 0)\n                _leftMargin = 0;\n            SetScrollControls();            // zoom affects the scroll bars\n            return;\n        }\n\n        private void CalcZoomFitPage()\n        {\n            try\n            {\n                float w = PointsX(_DrawPanel.Width);    // convert to points\n                float h = PointsY(_DrawPanel.Height);\n                float xratio = w / (this._PageWidth + _leftGap + _rightGap);\n                float yratio = h / (this._PageHeight + this._pageGap + this._pageGap);\n                _zoom = Math.Min(xratio, yratio);\n            }\n            catch\n            {\n                _zoom = 1;          // shouldn't ever happen but this routine must never throw exception\n            }\n        }\n\n        private void CalcZoomFitWidth()\n        {\n            try\n            {\n                float w = PointsX(_DrawPanel.Width);    // convert to points\n                float h = PointsY(_DrawPanel.Height);\n                _zoom = w / (this._PageWidth + _leftGap + _rightGap);\n\n            }\n            catch\n            {\n                _zoom = 1;          // shouldn't ever happen but this routine must never throw exception\n            }\n        }\n\n        // Obtain the Pages by running the report\n        private async Task<Report> GetReport()\n        {\n            string prog;\n\n            // Obtain the source\n            if (_loadFailed)\n                prog = GetReportErrorMsg();\n            else if (_SourceRdl != null)\n                prog = _SourceRdl;\n            else if (_SourceFileName != null)\n                prog = GetRdlSource();\n            else\n                prog = GetReportEmptyMsg();\n\n            // Compile the report\n            // Now parse the file\n            RDLParser rdlp;\n            Report r;\n            try\n            {\n                _errorMsgs = null;\n                rdlp = new RDLParser(prog);\n                rdlp.DataSourceReferencePassword = GetDataSourceReferencePassword;\n                if (_SourceFileName != null)\n                    rdlp.Folder = Path.GetDirectoryName(_SourceFileName.LocalPath);\n                else\n                    rdlp.Folder = this.Folder;\n\n                // EBN 31/03/2014\n                // Cross objects\n                rdlp.OnSubReportGetContent.SubReportGetContent = dSubReportGetContent;\n\n                r = await rdlp.Parse();\n                if (r.ErrorMaxSeverity > 0)\n                {\n                    _errorMsgs = r.ErrorItems;      // keep a copy of the errors\n\n                    int severity = r.ErrorMaxSeverity;\n                    r.ErrorReset();\n                    if (severity > 4)\n                    {\n                        r = null;           // don't return when severe errors\n                        _loadFailed = true;\n                    }\n                }\n                // If we've loaded the report; we should tell it where it got loaded from\n                if (r != null && !_loadFailed)\n                {   // Don't care much if this fails; and don't want to null out report if it does\n                    try\n                    {\n                        if (_SourceFileName != null)\n                        {\n                            r.Name = Path.GetFileNameWithoutExtension(_SourceFileName.LocalPath);\n                            r.Folder = Path.GetDirectoryName(_SourceFileName.LocalPath);\n                        }\n                        else\n                        {\n                            r.Folder = this.Folder;\n                            r.Name = this.ReportName;\n                        }\n                    }\n                    catch\n                    {\n                    }\n                }\n            }\n            catch (Exception ex)\n            {\n                _loadFailed = true;\n                _errorMsgs = new List<string>();        // create new error list\n                _errorMsgs.Add(ex.Message);         // put the message in it\n                _errorMsgs.Add(ex.StackTrace);      //   and the stack trace\n                r = null;\n            }\n\n            if (r != null)\n            {\n                _PageWidth = r.PageWidthPoints;\n                _PageHeight = r.PageHeightPoints;\n                _ReportDescription = r.Description;\n                _ReportAuthor = r.Author;\n                r.SubreportDataRetrieval += new EventHandler<SubreportDataRetrievalEventArgs>(r_SubreportDataRetrieval);\n                ParametersBuild(r);\n            }\n            else\n            {\n                _PageWidth = 0;\n                _PageHeight = 0;\n                _ReportDescription = null;\n                _ReportAuthor = null;\n                _ReportName = null;\n            }\n            return r;\n        }\n\n        void r_SubreportDataRetrieval(object sender, SubreportDataRetrievalEventArgs e)\n        {\n            if (this.SubreportDataRetrieval != null)\n                SubreportDataRetrieval(this, e);\n        }\n\n        private string GetReportEmptyMsg()\n        {\n            string prog = \"<Report><Width>8.5in</Width><Body><Height>1in</Height><ReportItems><Textbox><Value></Value><Style><FontWeight>Bold</FontWeight></Style><Height>.3in</Height><Width>5 in</Width></Textbox></ReportItems></Body></Report>\";\n            return prog;\n        }\n\n        private string GetReportErrorMsg()\n        {\n            string data1 = @\"<?xml version='1.0' encoding='UTF-8'?>\n<Report> \n\t<LeftMargin>.4in</LeftMargin><Width>8.5in</Width>\n\t<Author></Author>\n\t<DataSources>\n\t\t<DataSource Name='DS1'>\n\t\t\t<ConnectionProperties> \n\t\t\t\t<DataProvider>xxx</DataProvider>\n\t\t\t\t<ConnectString></ConnectString>\n\t\t\t</ConnectionProperties>\n\t\t</DataSource>\n\t</DataSources>\n\t<DataSets>\n\t\t<DataSet Name='Data'>\n\t\t\t<Query>\n\t\t\t\t<DataSourceName>DS1</DataSourceName>\n\t\t\t</Query>\n\t\t\t<Fields>\n\t\t\t\t<Field Name='Error'> \n\t\t\t\t\t<DataField>Error</DataField>\n\t\t\t\t\t<TypeName>String</TypeName>\n\t\t\t\t</Field>\n\t\t\t</Fields>\";\n\n            string data2 = @\"\n\t\t</DataSet>\n\t</DataSets>\n\t<PageHeader>\n\t\t<Height>1 in</Height>\n\t\t<ReportItems>\n\t\t\t<Textbox><Top>.1in</Top><Value>Majorsilence Reporting</Value><Style><FontSize>18pt</FontSize><FontWeight>Bold</FontWeight></Style></Textbox>\n\t\t\t<Textbox><Top>.1in</Top><Left>4.25in</Left><Value>=Globals!ExecutionTime</Value><Style><Format>dddd, MMMM dd, yyyy hh:mm:ss tt</Format><FontSize>12pt</FontSize><FontWeight>Bold</FontWeight></Style></Textbox>\n\t\t\t<Textbox><Top>.5in</Top><Value>Errors processing report</Value><Style><FontSize>12pt</FontSize><FontWeight>Bold</FontWeight></Style></Textbox>\n\t\t</ReportItems>\n\t</PageHeader>\n\t<Body><Height>3 in</Height>\n\t\t<ReportItems>\n\t\t\t<Table>\n\t\t\t\t<Style><BorderStyle>Solid</BorderStyle></Style>\n\t\t\t\t<TableColumns>\n\t\t\t\t\t<TableColumn><Width>7 in</Width></TableColumn>\n\t\t\t\t</TableColumns>\n\t\t\t\t<Header>\n\t\t\t\t\t<TableRows>\n\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t<Height>15 pt</Height>\n\t\t\t\t\t\t\t<TableCells>\n\t\t\t\t\t\t\t\t<TableCell>\n\t\t\t\t\t\t\t\t\t<ReportItems><Textbox><Value>Messages</Value><Style><FontWeight>Bold</FontWeight></Style></Textbox></ReportItems>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableCells>\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t</TableRows>\n\t\t\t\t\t<RepeatOnNewPage>true</RepeatOnNewPage>\n\t\t\t\t</Header>\n\t\t\t\t<Details>\n\t\t\t\t\t<TableRows>\n\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t<Height>12 pt</Height>\n\t\t\t\t\t\t\t<TableCells>\n\t\t\t\t\t\t\t\t<TableCell>\n\t\t\t\t\t\t\t\t\t<ReportItems><Textbox Name='ErrorMsg'><Value>=Fields!Error.Value</Value><CanGrow>true</CanGrow></Textbox></ReportItems>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableCells>\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t</TableRows>\n\t\t\t\t</Details>\n\t\t\t</Table>\n\t\t</ReportItems>\n\t</Body>\n</Report>\";\n\n            StringBuilder sb = new StringBuilder(data1, data1.Length + data2.Length + 1000);\n            // Build out the error messages\n            sb.Append(\"<Rows>\");\n            foreach (string msg in _errorMsgs)\n            {\n                sb.Append(\"<Row><Error>\");\n                string newmsg = msg.Replace(\"&\", @\"&amp;\");\n                newmsg = newmsg.Replace(\"<\", @\"&lt;\");\n                sb.Append(newmsg);\n                sb.Append(\"</Error></Row>\");\n            }\n            sb.Append(\"</Rows>\");\n            sb.Append(data2);\n            return sb.ToString();\n        }\n\n        private async Task<Pages> GetPages()\n        {\n            this._Report = await GetReport();\n            if (_loadFailed)\t\t\t// retry on failure; this will get error report\n                this._Report = await GetReport();\n\n            return await GetPages(this._Report);\n        }\n\n        private async Task<Pages> GetPages(Report report)\n        {\n            Pages pgs = null;\n\n            var ld = await GetParameters();        // split parms into dictionary\n\n            try\n            {\n                await report.RunGetData(ld);\n\n                pgs = await report.BuildPages();\n\n                if (report.ErrorMaxSeverity > 0)\n                {\n                    if (_errorMsgs == null)\n                    {\n                        _errorMsgs = report.ErrorItems;     // keep a copy of the errors\n                    }\n                    else\n                    {\n                        foreach (string err in report.ErrorItems)\n                        {\n                            _errorMsgs.Add(err);\n                        }\n                    }\n\n                    report.ErrorReset();\n                }\n\n            }\n            catch (Exception e)\n            {\n                string msg = e.Message;\n            }\n\n            return pgs;\n        }\n\n        private async Task<IDictionary> GetParameters()\n        {\n            // If we have a loaded report with user parameters, use those runtime values\n            // instead of the _Parameters dictionary which may be stale\n            if (_Report != null && _Report.UserReportParameters != null && _Report.UserReportParameters.Count > 0)\n            {\n                Dictionary<string, object> runtimeParams = new Dictionary<string, object>();\n                foreach (UserReportParameter urp in _Report.UserReportParameters)\n                {\n                    // Always include user parameters, even when the value is null, so that\n                    // stale values from _Parameters cannot override user-visible parameters.\n                    runtimeParams[urp.Name] = await urp.GetValueAsync();\n                }\n                // Merge with any parameters from _Parameters that aren't in UserReportParameters\n                if (_Parameters != null)\n                {\n                    foreach (DictionaryEntry kvp in _Parameters)\n                    {\n                        string key = kvp.Key.ToString();\n                        if (!runtimeParams.ContainsKey(key))\n                        {\n                            runtimeParams[key] = kvp.Value;\n                        }\n                    }\n                }\n                return runtimeParams;\n            }\n            return _Parameters;\n        }\n\n        private void SetParameterValue(String key, String value)\n        {\n            if (_Parameters.Contains(key))\n                _Parameters[key] = value;\n            else\n                _Parameters.Add(key, value);\n        }\n\n        private string GetRdlSource()\n        {\n            StreamReader fs = null;\n            string prog = null;\n            try\n            {\n                fs = new StreamReader(_SourceFileName.LocalPath);\n                prog = fs.ReadToEnd();\n            }\n            finally\n            {\n                if (fs != null)\n                    fs.Close();\n            }\n\n            prog = doPossibleDecryption(prog);\n\n            return prog;\n        }\n\n        private String doPossibleDecryption(String rdl)\n        {\n\n            if (Path.GetExtension(_SourceFileName.LocalPath).Equals(\".encrypted\"))\n            {\n\n                try\n                {\n                    StringEncryption enc = new StringEncryption(Prompt.ShowDialog(\"Please enter the passkey\", \"Passkey?\"));\n                    rdl = enc.Decrypt(rdl);\n                }\n                catch (Exception)\n                {\n                    MessageBox.Show(Strings.RdlViewer_doPossibleDecryption_Incorrect_Pass_key_entered_);\n                }\n            }\n\n            return rdl;\n        }\n\n        // 15052008 AJM - Updating Render notification window - This could be improved to show current action in the future\n        private void showWait()\n        {\n            try\n            {\n                this.ShowWaiter();\n            }\n            catch (ObjectDisposedException)\n            {\n                // Just let it go\n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show(ex.Message, Strings.RdlViewer_ShowD_Error, MessageBoxButtons.OK, MessageBoxIcon.Error);\n            }\n        }\n        \n        /// <summary>\n        /// Call LoadPageIfNeeded when a routine requires the report to be loaded in order\n        /// to fulfill the request.\n        /// </summary>\n        private async Task LoadPageIfNeeded()\n        {\n            if (_pgs == null)\n            {\n                Cursor savec = null;\n                try\n                {\n                    // 15052008 AJM - Updating Render notification window - This could be improved to show current action in the future\n                    if (_ShowWaitDialog)\n                    {\n                        showWait();\n                    }\n\n                    savec = this.Cursor;                // this could take a while so put up wait cursor\n                    this.Cursor = Cursors.WaitCursor;              \n                    _pgs = await GetPages();\n                    _DrawPanel.Pgs = _pgs;\n                    CalcZoom();                         // this could affect zoom\n                    _DrawPanel.Invalidate();\n                }\n                finally\n                {\n                    this.HideWaiter();\n                    if (savec != null)\n                        this.Cursor = savec;\n                }\n                RdlViewer_Layout(this, null);               // re layout based on new report\n            }\n        }\n\n        private void ParametersBuild(Report r)\n        {\n            // Remove all previous controls\n            _ParameterPanel.Controls.Clear();\n            _ParameterPanel.AutoScroll = true;\n\n            int yPos = 10;\n            foreach (UserReportParameter rp in r.UserReportParameters)\n            {\n                if (rp.Prompt == null || rp.Prompt.Length == 0)\t\t// skip parameters that don't have a prompt\n                    continue;\n\n                // Create a label\n                Label label = new Label();\n                label.Parent = _ParameterPanel;\n                label.AutoSize = true;\n                label.Text = rp.Prompt;\n                label.Location = new Point(10, yPos);\n\n                // Create a control\n                Control v;\n                int width = 90;\n                if (rp.DisplayValues == null)\n                {\n                    TextBox tb = new TextBox();\n                    v = tb;\n                    tb.Height = tb.PreferredHeight;\n                    tb.Validated += new System.EventHandler(ParametersTextValidated);\n                }\n                else\n                {\n                    ComboBox cb = new ComboBox();\n                    // create a label to auto\n                    Label l = new Label();\n                    l.AutoSize = true;\n                    l.Visible = false;\n\n                    cb.Leave += new EventHandler(ParametersLeave);\n                    v = cb;\n                    width = 0;\n                    foreach (string s in rp.DisplayValues)\n                    {\n                        l.Text = s;\n                        if (width < l.Width)\n                            width = l.Width;\n                        cb.Items.Add(s);\n                    }\n                    if (width > 0)\n                    {\n                        l.Text = \"XX\";\n                        width += l.Width;       // give some extra room for the drop down arrow\n                    }\n                    else\n                        width = 90;             // just force the default\n                }\n                v.Parent = _ParameterPanel;\n                v.Width = width;\n                v.Location = new Point(label.Location.X + label.Width + 5, yPos);\n                if (rp.DefaultValue != null)\n                {\n                    StringBuilder sb = new StringBuilder();\n                    for (int i = 0; i < rp.DefaultValue.Length; i++)\n                    {\n                        if (i > 0)\n                            sb.Append(\", \");\n                        sb.Append(rp.DefaultValue[i].ToString());\n                    }\n                    v.Text = sb.ToString();\n                }\n                v.Tag = rp;\n\n                yPos += Math.Max(label.Height, v.Height) + 5;\n            }\n\n            this._ParametersMaxHeight = yPos;\n        }\n\n        private void ParametersLeave(object sender, EventArgs e)\n        {\n            ComboBox cb = sender as ComboBox;\n            if (cb == null)\n                return;\n\n            UserReportParameter rp = cb.Tag as UserReportParameter;\n            if (rp == null)\n                return;\n\n            try\n            {\n                rp.Value = cb.Text;\n            }\n            catch (ArgumentException ae)\n            {\n                MessageBox.Show(ae.Message, Strings.RdlViewer_ParametersLeave_InvalidReportParameter);\n            }\n        }\n\n        private void ParametersTextValidated(object sender, System.EventArgs e)\n        {\n            TextBox tb = sender as TextBox;\n            if (tb == null)\n                return;\n\n            UserReportParameter rp = tb.Tag as UserReportParameter;\n            if (rp == null)\n                return;\n\n            try\n            {\n                rp.Value = tb.Text;\n            }\n            catch (ArgumentException ae)\n            {\n                MessageBox.Show(ae.Message, Strings.RdlViewer_ParametersLeave_InvalidReportParameter);\n            }\n        }\n\n        private async void ParametersViewClick(object sender, System.EventArgs e)\n        {\n            Cursor.Current = Cursors.WaitCursor;\n            try\n            {\n                _RunButton.Enabled = false;\n                _errorMsgs = null;          // reset the error message\n                if (this._Report == null)\n                {\n                    return;\n                }\n\n                // Force parameters to get built\n                foreach (Control ctl in _ParameterPanel.Controls)\n                {\n                    if (ctl.Tag is UserReportParameter)\n                    {\n                        if (ctl is TextBox)\n                        {\n                            this.ParametersTextValidated(ctl, new EventArgs());\n                        }\n                        else if (ctl is ComboBox)\n                        {\n                            this.ParametersLeave(ctl, new EventArgs());\n                        }\n                    }\n                }\n\n                bool bFail = false;\n                foreach (UserReportParameter rp in _Report.UserReportParameters)\n                {\n                    if (rp.Prompt == null)\n                        continue;\n                    if (rp.Value == null && !rp.Nullable)\n                    {\n                        MessageBox.Show(string.Format(Strings.RdlViewer_ParametersViewClick_RequiredParameterNotProvided, String.IsNullOrEmpty(rp.Prompt) ? rp.Name : rp.Prompt), Strings.RdlViewer_ParametersViewClick_ReportParameterMissing);\n                        bFail = true;\n                    }\n                }\n                if (bFail)\n                {\n                    return;\n                }\n                \n                showWait();\n                  \n                _pgs = await GetPages(this._Report);\n                _DrawPanel.Pgs = _pgs;\n                _vScroll.Value = 0;\n                CalcZoom();\n                _WarningButton.Visible = WarningVisible();\n                _DrawPanel.Invalidate();\n            }\n            catch\n            {\n                // don't fail out;  occasionally get thread abort exception\n            }\n            finally\n            {\n                this.HideWaiter();\n                _RunButton.Enabled = true;\n                Cursor.Current = Cursors.Default;\n\n               \n            }\n        }\n\n        private void WarningClick(object sender, System.EventArgs e)\n        {\n            if (_errorMsgs == null)\n                return;                     // shouldn't even be visible if no warnings\n\n            DialogMessages dm = new DialogMessages(_errorMsgs);\n            dm.ShowDialog();\n            return;\n        }\n\n        private void SetScrollControls()\n        {\n            if (_pgs == null)       // nothing loaded; nothing to do\n            {\n                _vScroll.Enabled = _hScroll.Enabled = false;\n                _vScroll.Value = _hScroll.Value = 0;\n                return;\n            }\n            SetScrollControlsV();\n            SetScrollControlsH();\n        }\n\n        private void SetScrollControlsV()\n        {\n            // calculate the vertical scroll needed\n            float h = PointsY(_DrawPanel.Height);   // height of pane\n            if (_zoom * ((this._PageHeight + this._pageGap) * _pgs.PageCount + this._pageGap) <= h)\n            {\n                _vScroll.Enabled = false;\n                _vScroll.Value = 0;\n                return;\n            }\n            _vScroll.Minimum = 0;\n            _vScroll.Maximum = (int)(PixelsY((this._PageHeight + this._pageGap) * _pgs.PageCount + this._pageGap));\n            _vScroll.Value = Math.Min(_vScroll.Value, _vScroll.Maximum);\n            if (this._zoomMode == ZoomEnum.FitPage)\n            {\n                _vScroll.LargeChange = (int)(_vScroll.Maximum / _pgs.PageCount);\n                _vScroll.SmallChange = _vScroll.LargeChange;\n            }\n            else\n            {\n                _vScroll.LargeChange = (int)(Math.Max(_DrawPanel.Height, 0) / _zoom);\n                _vScroll.SmallChange = _vScroll.LargeChange / 5;\n            }\n            _vScroll.Enabled = true;\n            string tt = string.Format(\"Page {0} of {1}\",\n                            (int)(_pgs.PageCount * (long)_vScroll.Value / (double)_vScroll.Maximum) + 1,\n                            _pgs.PageCount);\n\n            _vScrollToolTip.SetToolTip(_vScroll, tt);\n            //\t\t\tswitch (_ScrollMode)\n            //\t\t\t{\n            //\t\t\t\tcase ScrollModeEnum.SinglePage:\n            //\t\t\t\t\tbreak;\n            //\t\t\t\tcase ScrollModeEnum.Continuous:\n            //\t\t\t\tcase ScrollModeEnum.ContinuousFacing:\n            //\t\t\t\tcase ScrollModeEnum.Facing:\n            //\t\t\t\t\tbreak;\n            //\t\t\t}\n            return;\n        }\n\n        private void SetScrollControlsH()\n        {\n            // calculate the horizontal scroll needed\n            float w = PointsX(_DrawPanel.Width);    // width of pane\n            if (_zoomMode == ZoomEnum.FitPage ||\n                _zoomMode == ZoomEnum.FitWidth ||\n                _zoom * (this._PageWidth + this._leftGap + this._rightGap) <= w)\n            {\n                _hScroll.Enabled = false;\n                _hScroll.Value = 0;\n                return;\n            }\n\n            _hScroll.Minimum = 0;\n            _hScroll.Maximum = (int)(PixelsX(this._PageWidth + this._leftGap + this._rightGap));\n            _hScroll.Value = Math.Min(_hScroll.Value, _hScroll.Maximum);\n            _hScroll.LargeChange = (int)(Math.Max(_DrawPanel.Width, 0) / _zoom);\n            _hScroll.SmallChange = _hScroll.LargeChange / 5;\n            _hScroll.Enabled = true;\n\n            return;\n        }\n\n        private void HorizontalScroll(object sender, System.Windows.Forms.ScrollEventArgs e)\n        {\n            if (_hScroll.IsDisposed)\n                return;\n\n            if (e.NewValue == _hScroll.Value)\t// don't need to scroll if already there\n                return;\n\n            _DrawPanel.Invalidate();\n        }\n\n        private void VerticalScroll(object sender, System.Windows.Forms.ScrollEventArgs e)\n        {\n            if (_vScroll.IsDisposed)\n                return;\n\n            if (e.NewValue == _vScroll.Value)\t// don't need to scroll if already there\n                return;\n\n            string tt = string.Format(\"Page {0} of {1}\",\n                            (int)(_pgs.PageCount * (long)_vScroll.Value / (double)_vScroll.Maximum) + 1,\n                            _pgs.PageCount);\n\n            _vScrollToolTip.SetToolTip(_vScroll, tt);\n\n            _DrawPanel.Invalidate();\n            ChangePageEvent();\n        }\n\n        private int previousPage = 1;\n\n        private void ChangePageEvent()\n        {\n\n            if (PageNavigation == null)\n            {\n                return;\n            }\n\n            int currentPage = PageCurrent;\n\n            if (previousPage != currentPage)\n            {\n                PageNavigation(this, new PageNavigationEventArgs(currentPage));\n            }\n\n            previousPage = currentPage;\n\n        }\n\n        private void DrawPanelMouseWheel(object sender, MouseEventArgs e)\n        {\n            int wvalue;\n            bool bCtrlOn = (Control.ModifierKeys & Keys.Control) == Keys.Control;\n\n            if (bCtrlOn)\n            {   // when ctrl key on and wheel rotated we zoom in or out\n                float zoom = Zoom;\n\n                if (e.Delta < 0)\n                {\n                    zoom -= .1f;\n                    if (zoom < .1f)\n                        zoom = .1f;\n                }\n                else\n                {\n                    zoom += .1f;\n                    if (zoom > 10)\n                        zoom = 10;\n                }\n                Zoom = zoom;\n                _DrawPanel.Refresh();\n                return;\n            }\n\n            if (e.Delta < 0)\n            {\n                if (_vScroll.Value < _vScroll.Maximum)\n                {\n                    wvalue = _vScroll.Value + _vScroll.SmallChange;\n\n                    //Changed from forum, User: robertopisati http://www.fyireporting.com/forum/viewtopic.php?t=863\n                    int maxScroll = (int)Math.Max(_vScroll.Minimum, _vScroll.Maximum - (_DrawPanel.Height / _zoom));\n                    _vScroll.Value = Math.Min(Math.Max(wvalue, _vScroll.Minimum), Math.Min(maxScroll, _vScroll.Maximum));\n                    _DrawPanel.Refresh();\n                }\n            }\n            else\n            {\n                if (_vScroll.Value > _vScroll.Minimum)\n                {\n                    wvalue = _vScroll.Value - _vScroll.SmallChange;\n\n                    _vScroll.Value = Math.Max(_vScroll.Minimum, wvalue);\n                    _DrawPanel.Refresh();\n                }\n            }\n\n            ChangePageEvent();\n        }\n\n        private async void DrawPanelKeyDown(object sender, KeyEventArgs e)\n        {\n            // Force scroll up and down\n            if (e.KeyCode == Keys.Down)\n            {\n                if (!_vScroll.Enabled)\n                    return;\n                int wvalue = _vScroll.Value + _vScroll.SmallChange;\n                int maxScroll = (int)Math.Max(_vScroll.Minimum, _vScroll.Maximum - (_DrawPanel.Height / _zoom));\n                _vScroll.Value = Math.Min(Math.Max(wvalue, _vScroll.Minimum), Math.Min(maxScroll, _vScroll.Maximum));\n                _DrawPanel.Refresh();\n                e.Handled = true;\n            }\n            else if (e.KeyCode == Keys.Up)\n            {\n                if (!_vScroll.Enabled)\n                    return;\n                _vScroll.Value = Math.Max(_vScroll.Value - _vScroll.SmallChange, _vScroll.Minimum);\n                _DrawPanel.Refresh();\n                e.Handled = true;\n            }\n            else if (e.KeyCode == Keys.PageDown)\n            {\n                if (!_vScroll.Enabled)\n                    return;\n                int maxScroll = Math.Max(_vScroll.Minimum, _vScroll.Maximum - _DrawPanel.Height);\n                _vScroll.Value = Math.Min(Math.Max(_vScroll.Value + _vScroll.LargeChange, _vScroll.Minimum), Math.Min(maxScroll, _vScroll.Maximum));\n                _DrawPanel.Refresh();\n                e.Handled = true;\n            }\n            else if (e.KeyCode == Keys.PageUp)\n            {\n                if (!_vScroll.Enabled)\n                    return;\n                _vScroll.Value = Math.Max(_vScroll.Value - _vScroll.LargeChange, _vScroll.Minimum);\n                _DrawPanel.Refresh();\n                e.Handled = true;\n            }\n            else if (e.KeyCode == Keys.Home)\n            {\n                if (!_vScroll.Enabled)\n                    return;\n                _vScroll.Value = _vScroll.Minimum;\n                _DrawPanel.Refresh();\n                e.Handled = true;\n            }\n            else if (e.KeyCode == Keys.End)\n            {\n                if (!_vScroll.Enabled)\n                    return;\n                if (_pgs != null && _pgs.Count > 0)\n                {\n                    Page last = _pgs[_pgs.Count - 1];\n                    if (last.Count > 0)\n                    {\n                        PageItem lastItem = last[last.Count - 1];\n                        await this.ScrollToPageItem(lastItem);\n                        e.Handled = true;\n                    }\n                }\n            }\n            else if (e.KeyCode == Keys.Left)\n            {\n                if (!_hScroll.Enabled)\n                    return;\n                if (e.Control)\n                    _hScroll.Value = _hScroll.Minimum;\n                else\n                    _hScroll.Value = Math.Max(_hScroll.Value - _hScroll.SmallChange, _hScroll.Minimum);\n                _DrawPanel.Refresh();\n                e.Handled = true;\n            }\n            else if (e.KeyCode == Keys.Right)\n            {\n                if (!_hScroll.Enabled)\n                    return;\n                if (e.Control)\n                {\n                    int maxScroll = Math.Max(_hScroll.Minimum, _hScroll.Maximum - _DrawPanel.Width);\n                    _hScroll.Value = Math.Min(maxScroll, _hScroll.Maximum);\n                }\n                else\n                {\n                    int maxScroll = Math.Max(_hScroll.Minimum, _hScroll.Maximum - _DrawPanel.Width);\n                    _hScroll.Value = Math.Min(Math.Max(_hScroll.Value + _hScroll.SmallChange, _hScroll.Minimum), Math.Min(maxScroll, _hScroll.Maximum));\n                }\n                _DrawPanel.Refresh();\n                e.Handled = true;\n            }\n\n        }\n\n        private bool WarningVisible()\n        {\n            if (!_ShowParameters)\n                return false;\n\n            return _errorMsgs != null;\n        }\n\n        private void RdlViewer_Layout(object sender, LayoutEventArgs e)\n        {\n            int fHeight = _FindCtl.Visible ? _FindCtl.Height : 0;\n            int pHeight;\n            if (_ShowParameters)\n            {   // Only the parameter panel is visible\n                _ParameterPanel.Visible = true;\n                _RunButton.Visible = true;\n\n                _WarningButton.Visible = WarningVisible();\n\n                _ParameterPanel.Location = new Point(0, 0);\n                _ParameterPanel.Width = this.Width - _RunButton.Width - _WarningButton.Width - 5;\n                pHeight = this.Height / 3;\n                if (pHeight > _ParametersMaxHeight)\n                    pHeight = _ParametersMaxHeight;\n                if (pHeight < _RunButton.Height + 15)\n                    pHeight = _RunButton.Height + 15;\n                _ParameterPanel.Height = pHeight;\n            }\n            else\n            {\n                //\t\t\t\tpHeight=_RunButton.Height + 15;\n                pHeight = 0;\n                _RunButton.Visible = false;\n                _WarningButton.Visible = false;\n                _ParameterPanel.Visible = false;\n            }\n            _DrawPanel.Location = new Point(0, pHeight);\n            _DrawPanel.Width = this.Width - _vScroll.Width;\n            _DrawPanel.Height = this.Height - _hScroll.Height - pHeight - fHeight;\n            _hScroll.Location = new Point(0, this.Height - _hScroll.Height - fHeight);\n            _hScroll.Width = _DrawPanel.Width;\n            _vScroll.Location = new Point(this.Width - _vScroll.Width, _DrawPanel.Location.Y);\n            _vScroll.Height = _DrawPanel.Height;\n\n            if (_FindCtl.Visible)\n            {\n                _FindCtl.Location = new Point(0, this.Height - _FindCtl.Height);\n                _FindCtl.Width = this.Width;\n                _FindCtl.BringToFront();\n            }\n\n            _RunButton.Location = new Point(this.Width - _RunButton.Width - 2 - _WarningButton.Width, 10);\n            _WarningButton.Location = new Point(_RunButton.Location.X + _RunButton.Width + 2, 13);\n        }\n\n        private void _WarningButton_Paint(object sender, PaintEventArgs e)\n        {\n            int midPoint = _WarningButton.Width / 2;\n            Graphics g = e.Graphics;\n\n            Point[] triangle = new Point[5];\n            triangle[0] = triangle[4] = new Point(midPoint - 1, 0);\n            triangle[1] = new Point(0, _WarningButton.Height - 1);\n            triangle[2] = new Point(_WarningButton.Width, _WarningButton.Height - 1);\n            triangle[3] = new Point(midPoint + 1, 0);\n            g.FillPolygon(Brushes.Yellow, triangle);\n            g.DrawPolygon(Pens.Black, triangle);\n            g.FillRectangle(Brushes.Red, midPoint - 1, 5, 2, 5);\n            g.FillRectangle(Brushes.Red, midPoint - 1, 11, 2, 2);\n        }\n\n        internal void InvokeHyperlink(HyperlinkEventArgs hlea)\n        {\n            if (Hyperlink != null)\n                Hyperlink(this, hlea);\n        }\n\n        public void HideRunButton()\n        {\n            _RunButton.Visible = false;\n        }\n\n        public void ShowRunButton()\n        {\n            _RunButton.Visible = true;\n        }\n    }\n\n    public enum RdlViewerFinds\n    {\n        None = 0,\n        MatchCase = 1,\n        Backward = 2\n    }\n\n    public enum ScrollModeEnum\n    {\n        SinglePage,\n        Continuous,\n        Facing,\n        ContinuousFacing\n    }\n\n    public enum ZoomEnum\n    {\n        UseZoom,\n        FitPage,\n        FitWidth\n    }\n\n    /// <summary>\n    /// HyperlinkEventArgs passed when a report item with a hyperlink defined is clicked on\n    /// </summary>\n    public class HyperlinkEventArgs : System.ComponentModel.CancelEventArgs\n    {\n        string _Hyperlink;\n        // Hyperlink text\n        public HyperlinkEventArgs(string hyperlink)\n            : base()\n        {\n            _Hyperlink = hyperlink;\n        }\n\n        public string Hyperlink\n        {\n            get { return _Hyperlink; }\n        }\n    }\n\n    public class PageNavigationEventArgs : EventArgs\n    {\n        public PageNavigationEventArgs(int newPage)\n            : base()\n        {\n            _newPage = newPage;\n        }\n\n        private int _newPage;\n\n        public int NewPage\n        {\n            get\n            {\n                return _newPage;\n            }\n        }\n\n    }\n\n\n}\n"
  },
  {
    "path": "RdlViewer/RdlViewer.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\t<PropertyGroup>\n\t\t<ProjectType>Local</ProjectType>\n\t\t<DelaySign>false</DelaySign>\n\t\t<OutputType>Library</OutputType>\n\t\t<RootNamespace>Majorsilence.Reporting.RdlViewer</RootNamespace>\n\t\t<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>\n\t\t<PublishUrl>publish\\</PublishUrl>\n\t\t<UseWindowsForms>true</UseWindowsForms>\n\t\t<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>\n\t\t<GeneratePackageOnBuild>True</GeneratePackageOnBuild>\n\t\t<AssemblyTitle>RDL Viewer</AssemblyTitle>\n\t\t<DelaySign>false</DelaySign>\n\t\t<PackageId>Majorsilence.Reporting.RdlViewer</PackageId>\n\t\t<Configurations>Debug;Release;Debug-DrawingCompat</Configurations>\n\t\t<TargetFrameworks>net48;net8.0-windows;net10.0-windows</TargetFrameworks>\n\t\t<WarningsAsErrors>4014</WarningsAsErrors>\n        <GenerateResourceUsePreserializedResources>true</GenerateResourceUsePreserializedResources>\n    </PropertyGroup>\n\t<ItemGroup>\n\t\t<Compile Remove=\"RdlReader\\bin\\**\" />\n\t\t<Compile Remove=\"RdlReader\\obj\\**\" />\n\t\t<EmbeddedResource Remove=\"RdlReader\\bin\\**\" />\n\t\t<EmbeddedResource Remove=\"RdlReader\\obj\\**\" />\n\t\t<None Remove=\"RdlReader\\bin\\**\" />\n\t\t<None Remove=\"RdlReader\\obj\\**\" />\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<Reference Update=\"System\">\n\t\t\t<Name>System</Name>\n\t\t</Reference>\n\t\t<Reference Update=\"System.Data\">\n\t\t\t<Name>System.Data</Name>\n\t\t</Reference>\n\t\t<Reference Update=\"System.Drawing\">\n\t\t\t<Name>System.Drawing</Name>\n\t\t</Reference>\n\t\t<Reference Update=\"System.Xml\">\n\t\t\t<Name>System.XML</Name>\n\t\t</Reference>\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<Compile Update=\"PageDrawing.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"RdlViewer.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"RdlViewerFind.cs\">\n\t\t\t<SubType>UserControl</SubType>\n\t\t</Compile>\n\t\t<Compile Update=\"ViewerToolstrip.cs\">\n\t\t\t<SubType>Component</SubType>\n\t\t</Compile>\n\t\t<EmbeddedResource Include=\"Resources\\document-print.png\" />\n\t\t<EmbeddedResource Include=\"Resources\\document-open.png\" />\n\t\t<EmbeddedResource Include=\"Resources\\document-save.png\" />\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<ProjectReference Include=\"..\\EncryptionProvider\\EncryptionProvider.csproj\" />\n\t\t<ProjectReference Include=\"..\\Majorsilence.WinformUtils\\Majorsilence.WinformUtils.csproj\" />\n\t\t<ProjectReference Include=\"..\\RdlEngine\\Majorsilence.Reporting.RdlEngine.csproj\" />\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<Compile Remove=\"RdlReader\\AssemblyInfo.cs\" />\n\t\t<Compile Remove=\"RdlReader\\DialogAbout.cs\" />\n\t\t<Compile Remove=\"RdlReader\\DialogAbout.Designer.cs\" />\n\t\t<Compile Remove=\"RdlReader\\MDIChild.cs\" />\n\t\t<Compile Remove=\"RdlReader\\MDIChild.Designer.cs\" />\n\t\t<Compile Remove=\"RdlReader\\Properties\\Resources.Designer.cs\" />\n\t\t<Compile Remove=\"RdlReader\\RdlReader.cs\" />\n\t\t<Compile Remove=\"RdlReader\\RdlReader.Designer.cs\" />\n\t\t<Compile Remove=\"RdlReader\\Resources\\Strings.Designer.cs\" />\n\t\t<Compile Remove=\"RdlReader\\ZoomTo.cs\" />\n\t\t<Compile Remove=\"RdlReader\\ZoomTo.Designer.cs\" />\n\t\t<EmbeddedResource Remove=\"RdlReader\\DialogAbout.resx\" />\n\t\t<EmbeddedResource Remove=\"RdlReader\\DialogAbout.ru-RU.resx\" />\n\t\t<EmbeddedResource Remove=\"RdlReader\\MDIChild.resx\" />\n\t\t<EmbeddedResource Remove=\"RdlReader\\Properties\\Resources.resx\" />\n\t\t<EmbeddedResource Remove=\"RdlReader\\RdlReader.resx\" />\n\t\t<EmbeddedResource Remove=\"RdlReader\\RdlReader.ru-RU.resx\" />\n\t\t<EmbeddedResource Remove=\"RdlReader\\Resources\\Strings.resx\" />\n\t\t<EmbeddedResource Remove=\"RdlReader\\Resources\\Strings.ru-RU.resx\" />\n\t\t<EmbeddedResource Remove=\"RdlReader\\ZoomTo.resx\" />\n\t\t<EmbeddedResource Remove=\"RdlReader\\ZoomTo.ru-RU.resx\" />\n\t</ItemGroup>\n\t<ItemGroup>\n\t  <PackageReference Include=\"System.Text.Json\" />\n\t</ItemGroup>\n    <ItemGroup Condition=\"'$(TargetFramework)' == 'net48'\">\n        <PackageReference Include=\"System.Resources.Extensions\" />\n    </ItemGroup>\n</Project>\n"
  },
  {
    "path": "RdlViewer/RdlViewer.fr.resx",
    "content": "﻿<root>\n    <resheader name=\"resmimetype\">\n        <value>text/microsoft-resx</value>\n    </resheader>\n    <resheader name=\"version\">\n        <value>1.3</value>\n    </resheader>\n    <resheader name=\"reader\">\n        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n    </resheader>\n    <resheader name=\"writer\">\n        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n    </resheader>\n    <data name=\"_RunButton.Text\" xml:space=\"preserve\">\n        <value>Exécuter le rapport</value>\n    </data>\n</root>"
  },
  {
    "path": "RdlViewer/RdlViewer.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"_RunButton.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>90, 23</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"_hScroll.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;_hScroll.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"_hScroll.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>80, 17</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;_vScroll.Name\" xml:space=\"preserve\">\n    <value>_vScroll</value>\n  </data>\n  <data name=\"&gt;&gt;_DrawPanel.Type\" xml:space=\"preserve\">\n    <value>fyiReporting.RdlViewer.PageDrawing, RdlViewer, Version=4.5.5081.35598, Culture=neutral, PublicKeyToken=null</value>\n  </data>\n  <data name=\"&gt;&gt;_hScroll.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"_vScroll.Enabled\" type=\"System.Boolean, mscorlib\">\n    <value>False</value>\n  </data>\n  <data name=\"_vScroll.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"_RunButton.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;_vScroll.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"_hScroll.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>242, 306</value>\n  </data>\n  <data name=\"_vScroll.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>17, 80</value>\n  </data>\n  <data name=\"&gt;&gt;_RunButton.Name\" xml:space=\"preserve\">\n    <value>_RunButton</value>\n  </data>\n  <data name=\"&gt;&gt;_RunButton.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;_DrawPanel.Name\" xml:space=\"preserve\">\n    <value>_DrawPanel</value>\n  </data>\n  <data name=\"&gt;&gt;_hScroll.Name\" xml:space=\"preserve\">\n    <value>_hScroll</value>\n  </data>\n  <data name=\"_DrawPanel.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>95, 51</value>\n  </data>\n  <data name=\"_RunButton.Text\" xml:space=\"preserve\">\n    <value>Run Report</value>\n  </data>\n  <data name=\"_DrawPanel.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>353, 224</value>\n  </data>\n  <data name=\"&gt;&gt;_DrawPanel.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;_vScroll.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.VScrollBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"_RunButton.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>454, 14</value>\n  </data>\n  <data name=\"&gt;&gt;_DrawPanel.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;_RunButton.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"_vScroll.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>541, 142</value>\n  </data>\n  <data name=\"&gt;&gt;_vScroll.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;_hScroll.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.HScrollBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;_RunButton.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"_DrawPanel.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>558, 323</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>RdlViewer</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"_RunButton.FlatStyle\" type=\"System.Windows.Forms.FlatStyle, System.Windows.Forms\">\n    <value>Flat</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlViewer/RdlViewer.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"_RunButton.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"_RunButton.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>441, 14</value>\n  </data>\n  <data name=\"_RunButton.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>103, 23</value>\n  </data>\n  <data name=\"_RunButton.Text\" xml:space=\"preserve\">\n    <value>Построить отчёт</value>\n  </data>\n  <data name=\"_hScroll.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n  <data name=\"_vScroll.ImeMode\" type=\"System.Windows.Forms.ImeMode, System.Windows.Forms\">\n    <value>NoControl</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlViewer/RdlViewer.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Express 2012 for Web\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlViewer\", \"RdlViewer.csproj\", \"{D99145B1-CB6C-41F5-BA86-723325145FB5}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlReader\", \"RdlReader\\RdlReader.csproj\", \"{2412E381-D3D9-4AB7-A2FA-02D9786260F0}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RdlEngine\", \"..\\RdlEngine\\RdlEngine.csproj\", \"{C97E91F4-B310-44E2-9B6C-96775395722D}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x64.Build.0 = Debug|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Debug|x86.Build.0 = Debug|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x64.ActiveCfg = Release|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x64.Build.0 = Release|x64\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x86.ActiveCfg = Release|x86\n\t\t{D99145B1-CB6C-41F5-BA86-723325145FB5}.Release|x86.Build.0 = Release|x86\n\t\t{2412E381-D3D9-4AB7-A2FA-02D9786260F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{2412E381-D3D9-4AB7-A2FA-02D9786260F0}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{2412E381-D3D9-4AB7-A2FA-02D9786260F0}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{2412E381-D3D9-4AB7-A2FA-02D9786260F0}.Debug|x64.Build.0 = Debug|x64\n\t\t{2412E381-D3D9-4AB7-A2FA-02D9786260F0}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{2412E381-D3D9-4AB7-A2FA-02D9786260F0}.Debug|x86.Build.0 = Debug|x86\n\t\t{2412E381-D3D9-4AB7-A2FA-02D9786260F0}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{2412E381-D3D9-4AB7-A2FA-02D9786260F0}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{2412E381-D3D9-4AB7-A2FA-02D9786260F0}.Release|x64.ActiveCfg = Release|x64\n\t\t{2412E381-D3D9-4AB7-A2FA-02D9786260F0}.Release|x64.Build.0 = Release|x64\n\t\t{2412E381-D3D9-4AB7-A2FA-02D9786260F0}.Release|x86.ActiveCfg = Release|x86\n\t\t{2412E381-D3D9-4AB7-A2FA-02D9786260F0}.Release|x86.Build.0 = Release|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x64.Build.0 = Debug|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Debug|x86.Build.0 = Debug|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.ActiveCfg = Release|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x64.Build.0 = Release|x64\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.ActiveCfg = Release|x86\n\t\t{C97E91F4-B310-44E2-9B6C-96775395722D}.Release|x86.Build.0 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "RdlViewer/RdlViewerFind.cs",
    "content": "\nusing System;\nusing System.Collections;\nusing System.Collections.Specialized;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.IO;\nusing System.Windows.Forms;\nusing System.Drawing.Printing;\nusing System.Text;\nusing Majorsilence.Reporting.RdlViewer.Resources;\nusing Majorsilence.Reporting.Rdl;\nusing System.ComponentModel;\nusing System.Threading.Tasks;\n\nnamespace Majorsilence.Reporting.RdlViewer\n{\n\t/// <summary>\n\t/// RdlViewerFind finds text inside of the RdlViewer control\n\t/// </summary>\n\tpublic class RdlViewerFind : System.Windows.Forms.UserControl\n    {\n        private Button bClose;\n        private Button bFindNext;\n        private Button bFindPrevious;\n        private CheckBox ckHighlightAll;\n        private CheckBox ckMatchCase;\n        private Label lFind;\n        private Label lStatus;\n        private TextBox tbFind;\n        private PageItem position = null;\n\n        private RdlViewer _Viewer;\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public RdlViewer Viewer\n        {\n            get { return _Viewer; }\n            set { _Viewer = value; }\n        }\n\n        public RdlViewerFind()\n        {\n            InitializeComponent();\n        }\n\n        private void InitializeComponent()\n        {\n\t\t\tSystem.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RdlViewerFind));\n            this.DoubleBuffered = true;\n\t\t\tthis.bClose = new System.Windows.Forms.Button();\n\t\t\tthis.tbFind = new System.Windows.Forms.TextBox();\n\t\t\tthis.bFindNext = new System.Windows.Forms.Button();\n\t\t\tthis.bFindPrevious = new System.Windows.Forms.Button();\n\t\t\tthis.ckHighlightAll = new System.Windows.Forms.CheckBox();\n\t\t\tthis.ckMatchCase = new System.Windows.Forms.CheckBox();\n\t\t\tthis.lFind = new System.Windows.Forms.Label();\n\t\t\tthis.lStatus = new System.Windows.Forms.Label();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// bClose\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bClose, \"bClose\");\n\t\t\tthis.bClose.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(192)))), ((int)(((byte)(192)))));\n\t\t\tthis.bClose.FlatAppearance.BorderSize = 0;\n\t\t\tthis.bClose.Name = \"bClose\";\n\t\t\tthis.bClose.UseVisualStyleBackColor = false;\n\t\t\tthis.bClose.Click += new System.EventHandler(this.bClose_Click);\n\t\t\t// \n\t\t\t// tbFind\n\t\t\t// \n\t\t\tresources.ApplyResources(this.tbFind, \"tbFind\");\n\t\t\tthis.tbFind.Name = \"tbFind\";\n\t\t\tthis.tbFind.TextChanged += new System.EventHandler(this.tbFind_TextChanged);\n\t\t\t// \n\t\t\t// bFindNext\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bFindNext, \"bFindNext\");\n\t\t\tthis.bFindNext.Name = \"bFindNext\";\n\t\t\tthis.bFindNext.UseVisualStyleBackColor = true;\n\t\t\tthis.bFindNext.Click += new System.EventHandler(this.bFindNext_Click);\n\t\t\t// \n\t\t\t// bFindPrevious\n\t\t\t// \n\t\t\tresources.ApplyResources(this.bFindPrevious, \"bFindPrevious\");\n\t\t\tthis.bFindPrevious.Name = \"bFindPrevious\";\n\t\t\tthis.bFindPrevious.UseVisualStyleBackColor = true;\n\t\t\tthis.bFindPrevious.Click += new System.EventHandler(this.bFindPrevious_Click);\n\t\t\t// \n\t\t\t// ckHighlightAll\n\t\t\t// \n\t\t\tresources.ApplyResources(this.ckHighlightAll, \"ckHighlightAll\");\n\t\t\tthis.ckHighlightAll.Name = \"ckHighlightAll\";\n\t\t\tthis.ckHighlightAll.UseVisualStyleBackColor = true;\n\t\t\tthis.ckHighlightAll.CheckedChanged += new System.EventHandler(this.ckHighlightAll_CheckedChanged);\n\t\t\t// \n\t\t\t// ckMatchCase\n\t\t\t// \n\t\t\tresources.ApplyResources(this.ckMatchCase, \"ckMatchCase\");\n\t\t\tthis.ckMatchCase.Name = \"ckMatchCase\";\n\t\t\tthis.ckMatchCase.UseVisualStyleBackColor = true;\n\t\t\tthis.ckMatchCase.CheckedChanged += new System.EventHandler(this.ckMatchCase_CheckedChanged);\n\t\t\t// \n\t\t\t// lFind\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lFind, \"lFind\");\n\t\t\tthis.lFind.Name = \"lFind\";\n\t\t\t// \n\t\t\t// lStatus\n\t\t\t// \n\t\t\tresources.ApplyResources(this.lStatus, \"lStatus\");\n\t\t\tthis.lStatus.ForeColor = System.Drawing.Color.Salmon;\n\t\t\tthis.lStatus.Name = \"lStatus\";\n\t\t\t// \n\t\t\t// RdlViewerFind\n\t\t\t// \n\t\t\tresources.ApplyResources(this, \"$this\");\n\t\t\tthis.Controls.Add(this.lStatus);\n\t\t\tthis.Controls.Add(this.lFind);\n\t\t\tthis.Controls.Add(this.ckMatchCase);\n\t\t\tthis.Controls.Add(this.ckHighlightAll);\n\t\t\tthis.Controls.Add(this.bFindPrevious);\n\t\t\tthis.Controls.Add(this.bFindNext);\n\t\t\tthis.Controls.Add(this.tbFind);\n\t\t\tthis.Controls.Add(this.bClose);\n\t\t\tthis.Name = \"RdlViewerFind\";\n\t\t\tthis.VisibleChanged += new System.EventHandler(this.RdlViewerFind_VisibleChanged);\n\t\t\tthis.ResumeLayout(false);\n\t\t\tthis.PerformLayout();\n\n        }\n\n        private void bClose_Click(object sender, EventArgs e)\n        {\n            this.Visible = false;\n        }\n\n        private async void bFindNext_Click(object sender, EventArgs e)\n        {\n            await FindNext();\n        }\n\n        public async Task FindNext()\n        {\n            if (_Viewer == null)\n                throw new ApplicationException(Strings.RdlViewerFind_ErrorA_PropertyMustSetPriorFindNext);\n\n            if (tbFind.Text.Length == 0)    // must have something to find\n                return;\n\n            RdlViewerFinds findOptions =\n                ckMatchCase.Checked ?\n                RdlViewerFinds.MatchCase :\n                RdlViewerFinds.None;\n\n            bool begin = position == null;\n            position = await _Viewer.Find(tbFind.Text, position, findOptions);\n            if (position == null)\n            {   \n                if (!begin)     // if we didn't start from beginning already; try from beginning\n                    position = await _Viewer.Find(tbFind.Text, position, findOptions);\n\n                lStatus.Text = position == null ? \n                    Strings.RdlViewerFind_FindNext_Phrase_not_found : Strings.RdlViewerFind_FindNext_Reached_end_of_report;\n\n                _Viewer.HighlightPageItem = position;\n                if (position != null)\n                    await _Viewer.ScrollToPageItem(position);\n            }\n            else\n            {\n                lStatus.Text = \"\";\n                _Viewer.HighlightPageItem = position;\n                await _Viewer.ScrollToPageItem(position);\n            }\n        }\n\n        private async void bFindPrevious_Click(object sender, EventArgs e)\n        {\n            await FindPrevious();\n        }\n\n        public async Task FindPrevious()\n        {\n            if (_Viewer == null)\n                throw new ApplicationException(Strings.RdlViewerFind_ErrorA_PropertyMustSetPriorFindPrevious);\n\n            if (tbFind.Text.Length == 0)    // must have something to find\n                return;\n\n            RdlViewerFinds findOptions = RdlViewerFinds.Backward |\n                (ckMatchCase.Checked ? RdlViewerFinds.MatchCase : RdlViewerFinds.None);\n\n            bool begin = position == null;\n            position = await _Viewer.Find(tbFind.Text, position, findOptions);\n            if (position == null)\n            {\n                if (!begin)     // if we didn't start from beginning already; try from bottom\n                    position = await _Viewer.Find(tbFind.Text, position, findOptions);\n\n                lStatus.Text = position == null ?\n\t\t\t\t\tStrings.RdlViewerFind_FindNext_Phrase_not_found : Strings.RdlViewerFind_FindPrevious_Reached_top_of_report;\n\n                _Viewer.HighlightPageItem = position;\n                if (position != null)\n                    await _Viewer.ScrollToPageItem(position);\n            }\n            else\n            {\n                lStatus.Text = \"\";\n                _Viewer.HighlightPageItem = position;\n                await _Viewer.ScrollToPageItem(position);\n            }\n        }\n\n        private async void RdlViewerFind_VisibleChanged(object sender, EventArgs e)\n        {\n            lStatus.Text = \"\";\n            if (this.Visible)\n            {\n                _Viewer.HighlightText = tbFind.Text;\n                tbFind.Focus();\n                await FindNext();         // and go find the contents of the textbox\n            }\n            else\n            {   // turn off any highlighting when find control not visible\n                _Viewer.HighlightPageItem = position = null;\n                _Viewer.HighlightText = null;\n                _Viewer.HighlightAll = false;\n                ckHighlightAll.Checked = false;\n            }\n        }\n\n        private async void tbFind_TextChanged(object sender, EventArgs e)\n        {\n            lStatus.Text = \"\";\n            position = null;        // reset position when edit changes?? todo not really\n            _Viewer.HighlightText = tbFind.Text;\n            ckHighlightAll.Enabled = bFindNext.Enabled = bFindPrevious.Enabled =\n                    tbFind.Text.Length > 0;\n            if (tbFind.Text.Length > 0)\n                await FindNext();\n        }\n\n        private void ckHighlightAll_CheckedChanged(object sender, EventArgs e)\n        {\n            _Viewer.HighlightAll = ckHighlightAll.Checked;\n        }\n\n        private void ckMatchCase_CheckedChanged(object sender, EventArgs e)\n        {\n            _Viewer.HighlightCaseSensitive = ckMatchCase.Checked;\n        }\n    }\n}\n"
  },
  {
    "path": "RdlViewer/RdlViewerFind.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"&gt;&gt;ckHighlightAll.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bFindPrevious.Text\" xml:space=\"preserve\">\n    <value>Find Previous</value>\n  </data>\n  <assembly alias=\"mscorlib\" name=\"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"lFind.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"lFind.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>6</value>\n  </data>\n  <data name=\"bFindNext.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;ckHighlightAll.ZOrder\" xml:space=\"preserve\">\n    <value>3</value>\n  </data>\n  <data name=\"&gt;&gt;tbFind.Name\" xml:space=\"preserve\">\n    <value>tbFind</value>\n  </data>\n  <data name=\"ckHighlightAll.Text\" xml:space=\"preserve\">\n    <value>Highlight All</value>\n  </data>\n  <data name=\"&gt;&gt;lFind.Name\" xml:space=\"preserve\">\n    <value>lFind</value>\n  </data>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"tbFind.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>53, 4</value>\n  </data>\n  <data name=\"lStatus.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>501, 7</value>\n  </data>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"bClose.FlatStyle\" type=\"System.Windows.Forms.FlatStyle, System.Windows.Forms\">\n    <value>Flat</value>\n  </data>\n  <data name=\"&gt;&gt;tbFind.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bClose.Margin\" type=\"System.Windows.Forms.Padding, System.Windows.Forms\">\n    <value>0, 0, 0, 0</value>\n  </data>\n  <data name=\"&gt;&gt;ckMatchCase.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bFindPrevious.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"ckMatchCase.Text\" xml:space=\"preserve\">\n    <value>Match Case</value>\n  </data>\n  <data name=\"&gt;&gt;lStatus.ZOrder\" xml:space=\"preserve\">\n    <value>0</value>\n  </data>\n  <data name=\"ckMatchCase.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>410, 6</value>\n  </data>\n  <data name=\"ckMatchCase.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"&gt;&gt;bFindPrevious.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bClose.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>2, 4</value>\n  </data>\n  <data name=\"&gt;&gt;tbFind.ZOrder\" xml:space=\"preserve\">\n    <value>6</value>\n  </data>\n  <data name=\"ckMatchCase.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>5</value>\n  </data>\n  <data name=\"ckMatchCase.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>83, 17</value>\n  </data>\n  <data name=\"lFind.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>30, 13</value>\n  </data>\n  <data name=\"&gt;&gt;lFind.ZOrder\" xml:space=\"preserve\">\n    <value>1</value>\n  </data>\n  <data name=\"&gt;&gt;lStatus.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;ckHighlightAll.Name\" xml:space=\"preserve\">\n    <value>ckHighlightAll</value>\n  </data>\n  <data name=\"&gt;&gt;lFind.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bFindNext.ZOrder\" xml:space=\"preserve\">\n    <value>5</value>\n  </data>\n  <data name=\"bFindPrevious.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>82, 23</value>\n  </data>\n  <data name=\"&gt;&gt;bFindNext.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"lFind.Text\" xml:space=\"preserve\">\n    <value>Find:</value>\n  </data>\n  <data name=\"&gt;&gt;ckHighlightAll.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;lStatus.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bClose.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"tbFind.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>1</value>\n  </data>\n  <data name=\"$this.AutoSizeMode\" type=\"System.Windows.Forms.AutoSizeMode, System.Windows.Forms\">\n    <value>GrowAndShrink</value>\n  </data>\n  <data name=\"lStatus.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"ckHighlightAll.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>4</value>\n  </data>\n  <data name=\"&gt;&gt;tbFind.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"bClose.Font\" type=\"System.Drawing.Font, System.Drawing\">\n    <value>Arial, 6.75pt, style=Bold</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Name\" xml:space=\"preserve\">\n    <value>RdlViewerFind</value>\n  </data>\n  <data name=\"bFindNext.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>61, 23</value>\n  </data>\n  <data name=\"bFindNext.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>177, 2</value>\n  </data>\n  <data name=\"&gt;&gt;lFind.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"&gt;&gt;bFindNext.Name\" xml:space=\"preserve\">\n    <value>bFindNext</value>\n  </data>\n  <data name=\"&gt;&gt;bFindPrevious.ZOrder\" xml:space=\"preserve\">\n    <value>4</value>\n  </data>\n  <data name=\"bFindPrevious.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>242, 2</value>\n  </data>\n  <data name=\"tbFind.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>118, 20</value>\n  </data>\n  <data name=\"bClose.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>0</value>\n  </data>\n  <data name=\"&gt;&gt;$this.Type\" xml:space=\"preserve\">\n    <value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"ckHighlightAll.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>330, 6</value>\n  </data>\n  <data name=\"$this.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>740, 27</value>\n  </data>\n  <data name=\"&gt;&gt;ckMatchCase.ZOrder\" xml:space=\"preserve\">\n    <value>2</value>\n  </data>\n  <data name=\"&gt;&gt;ckMatchCase.Name\" xml:space=\"preserve\">\n    <value>ckMatchCase</value>\n  </data>\n  <data name=\"lFind.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>20, 7</value>\n  </data>\n  <data name=\"bFindNext.Text\" xml:space=\"preserve\">\n    <value>Find Next</value>\n  </data>\n  <data name=\"&gt;&gt;lStatus.Name\" xml:space=\"preserve\">\n    <value>lStatus</value>\n  </data>\n  <data name=\"bFindPrevious.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>3</value>\n  </data>\n  <data name=\"ckHighlightAll.AutoSize\" type=\"System.Boolean, mscorlib\">\n    <value>True</value>\n  </data>\n  <data name=\"&gt;&gt;bClose.ZOrder\" xml:space=\"preserve\">\n    <value>7</value>\n  </data>\n  <data name=\"&gt;&gt;bFindNext.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"bClose.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>18, 18</value>\n  </data>\n  <data name=\"&gt;&gt;bClose.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"lStatus.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>0, 13</value>\n  </data>\n  <data name=\"&gt;&gt;ckMatchCase.Parent\" xml:space=\"preserve\">\n    <value>$this</value>\n  </data>\n  <data name=\"&gt;&gt;bFindPrevious.Name\" xml:space=\"preserve\">\n    <value>bFindPrevious</value>\n  </data>\n  <data name=\"bClose.Text\" xml:space=\"preserve\">\n    <value>X</value>\n  </data>\n  <data name=\"&gt;&gt;bClose.Name\" xml:space=\"preserve\">\n    <value>bClose</value>\n  </data>\n  <data name=\"lStatus.TabIndex\" type=\"System.Int32, mscorlib\">\n    <value>7</value>\n  </data>\n  <data name=\"ckHighlightAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>81, 17</value>\n  </data>\n  <metadata name=\"$this.Localizable\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "RdlViewer/RdlViewerFind.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"tbFind.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>67, 4</value>\n  </data>\n  <data name=\"bFindNext.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>191, 2</value>\n  </data>\n  <data name=\"bFindNext.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>81, 23</value>\n  </data>\n  <data name=\"bFindNext.Text\" xml:space=\"preserve\">\n    <value>Следующий</value>\n  </data>\n  <data name=\"bFindPrevious.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>278, 2</value>\n  </data>\n  <data name=\"bFindPrevious.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>90, 23</value>\n  </data>\n  <data name=\"bFindPrevious.Text\" xml:space=\"preserve\">\n    <value>Предыдущий</value>\n  </data>\n  <data name=\"ckHighlightAll.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>374, 5</value>\n  </data>\n  <data name=\"ckHighlightAll.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>119, 17</value>\n  </data>\n  <data name=\"ckHighlightAll.Text\" xml:space=\"preserve\">\n    <value>Подсвечивать все</value>\n  </data>\n  <data name=\"ckMatchCase.Location\" type=\"System.Drawing.Point, System.Drawing\">\n    <value>499, 5</value>\n  </data>\n  <data name=\"ckMatchCase.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>124, 17</value>\n  </data>\n  <data name=\"ckMatchCase.Text\" xml:space=\"preserve\">\n    <value>Учитывать регистр</value>\n  </data>\n  <data name=\"lFind.Size\" type=\"System.Drawing.Size, System.Drawing\">\n    <value>41, 13</value>\n  </data>\n  <data name=\"lFind.Text\" xml:space=\"preserve\">\n    <value>Найти:</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlViewer/Resources/Strings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Majorsilence.Reporting.RdlViewer.Resources {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Strings {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Strings() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"fyiReporting.RdlViewer.Resources.Strings\", typeof(Strings).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Minutes.\n        /// </summary>\n        internal static string DialogWait_Minutes {\n            get {\n                return ResourceManager.GetString(\"DialogWait_Minutes\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Seconds.\n        /// </summary>\n        internal static string DialogWait_Seconds {\n            get {\n                return ResourceManager.GetString(\"DialogWait_Seconds\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to HyperLink Error.\n        /// </summary>\n        internal static string PageDrawing_OnMouseDown_HyperLinkError {\n            get {\n                return ResourceManager.GetString(\"PageDrawing_OnMouseDown_HyperLinkError\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unable to link to.\n        /// </summary>\n        internal static string PageDrawing_OnMouseDown_UnableLink {\n            get {\n                return ResourceManager.GetString(\"PageDrawing_OnMouseDown_UnableLink\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Incorrect Pass key entered..\n        /// </summary>\n        internal static string RdlViewer_doPossibleDecryption_Incorrect_Pass_key_entered_ {\n            get {\n                return ResourceManager.GetString(\"RdlViewer_doPossibleDecryption_Incorrect_Pass_key_entered_\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Report must be loaded prior to Rebuild being called..\n        /// </summary>\n        internal static string RdlViewer_Error_Report_must_be_loaded_prior_to_Rebuild_being_called {\n            get {\n                return ResourceManager.GetString(\"RdlViewer_Error_Report_must_be_loaded_prior_to_Rebuild_being_called\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Unsupported file extension for SaveAs.\n        /// </summary>\n        internal static string RdlViewer_Error_UnsupportedExtension {\n            get {\n                return ResourceManager.GetString(\"RdlViewer_Error_UnsupportedExtension\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to PDF files (*.pdf)|*.pdf|XML files (*.xml)|*.xml|HTML files (*.html)|*.html|CSV files (*.csv)|*.csv|RTF files (*.rtf)|*.rtf|TIF files (*.tif)|*.tif|Excel 2007 Table Only (*.xlsx)|*.xlsx|Excel 2007 (*.xlsx)|*.xlsx|MHT files (*.mht)|*.mht.\n        /// </summary>\n        internal static string RdlViewer_menuFileSaveAs_Click_FilesFilter {\n            get {\n                return ResourceManager.GetString(\"RdlViewer_menuFileSaveAs_Click_FilesFilter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Invalid Report Parameter.\n        /// </summary>\n        internal static string RdlViewer_ParametersLeave_InvalidReportParameter {\n            get {\n                return ResourceManager.GetString(\"RdlViewer_ParametersLeave_InvalidReportParameter\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Report Parameter Missing.\n        /// </summary>\n        internal static string RdlViewer_ParametersViewClick_ReportParameterMissing {\n            get {\n                return ResourceManager.GetString(\"RdlViewer_ParametersViewClick_ReportParameterMissing\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Parameter &apos;{0}&apos; is required but not provided..\n        /// </summary>\n        internal static string RdlViewer_ParametersViewClick_RequiredParameterNotProvided {\n            get {\n                return ResourceManager.GetString(\"RdlViewer_ParametersViewClick_RequiredParameterNotProvided\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error.\n        /// </summary>\n        internal static string RdlViewer_ShowD_Error {\n            get {\n                return ResourceManager.GetString(\"RdlViewer_ShowD_Error\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Viewer property must be set prior to issuing FindNext..\n        /// </summary>\n        internal static string RdlViewerFind_ErrorA_PropertyMustSetPriorFindNext {\n            get {\n                return ResourceManager.GetString(\"RdlViewerFind_ErrorA_PropertyMustSetPriorFindNext\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Viewer property must be set prior to issuing FindPrevious..\n        /// </summary>\n        internal static string RdlViewerFind_ErrorA_PropertyMustSetPriorFindPrevious {\n            get {\n                return ResourceManager.GetString(\"RdlViewerFind_ErrorA_PropertyMustSetPriorFindPrevious\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Phrase not found.\n        /// </summary>\n        internal static string RdlViewerFind_FindNext_Phrase_not_found {\n            get {\n                return ResourceManager.GetString(\"RdlViewerFind_FindNext_Phrase_not_found\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Reached end of report, continued from top.\n        /// </summary>\n        internal static string RdlViewerFind_FindNext_Reached_end_of_report {\n            get {\n                return ResourceManager.GetString(\"RdlViewerFind_FindNext_Reached_end_of_report\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Reached top of report, continued from end.\n        /// </summary>\n        internal static string RdlViewerFind_FindPrevious_Reached_top_of_report {\n            get {\n                return ResourceManager.GetString(\"RdlViewerFind_FindPrevious_Reached_top_of_report\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "RdlViewer/Resources/Strings.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"DialogWait_Minutes\" xml:space=\"preserve\">\n    <value>Minutes</value>\n  </data>\n  <data name=\"DialogWait_Seconds\" xml:space=\"preserve\">\n    <value>Seconds</value>\n  </data>\n  <data name=\"PageDrawing_OnMouseDown_HyperLinkError\" xml:space=\"preserve\">\n    <value>HyperLink Error</value>\n  </data>\n  <data name=\"PageDrawing_OnMouseDown_UnableLink\" xml:space=\"preserve\">\n    <value>Unable to link to</value>\n  </data>\n  <data name=\"RdlViewer_ParametersLeave_InvalidReportParameter\" xml:space=\"preserve\">\n    <value>Invalid Report Parameter</value>\n  </data>\n  <data name=\"RdlViewer_ParametersViewClick_ReportParameterMissing\" xml:space=\"preserve\">\n    <value>Report Parameter Missing</value>\n  </data>\n  <data name=\"RdlViewer_ParametersViewClick_RequiredParameterNotProvided\" xml:space=\"preserve\">\n    <value>Parameter '{0}' is required but not provided.</value>\n  </data>\n  <data name=\"RdlViewer_ShowD_Error\" xml:space=\"preserve\">\n    <value>Error</value>\n  </data>\n  <data name=\"RdlViewer_Error_Report_must_be_loaded_prior_to_Rebuild_being_called\" xml:space=\"preserve\">\n    <value>Report must be loaded prior to Rebuild being called.</value>\n  </data>\n  <data name=\"RdlViewer_Error_UnsupportedExtension\" xml:space=\"preserve\">\n    <value>Unsupported file extension for SaveAs</value>\n  </data>\n  <data name=\"RdlViewerFind_ErrorA_PropertyMustSetPriorFindNext\" xml:space=\"preserve\">\n    <value>Viewer property must be set prior to issuing FindNext.</value>\n  </data>\n  <data name=\"RdlViewerFind_ErrorA_PropertyMustSetPriorFindPrevious\" xml:space=\"preserve\">\n    <value>Viewer property must be set prior to issuing FindPrevious.</value>\n  </data>\n  <data name=\"RdlViewerFind_FindNext_Phrase_not_found\" xml:space=\"preserve\">\n    <value>Phrase not found</value>\n  </data>\n  <data name=\"RdlViewerFind_FindNext_Reached_end_of_report\" xml:space=\"preserve\">\n    <value>Reached end of report, continued from top</value>\n  </data>\n  <data name=\"RdlViewerFind_FindPrevious_Reached_top_of_report\" xml:space=\"preserve\">\n    <value>Reached top of report, continued from end</value>\n  </data>\n  <data name=\"RdlViewer_doPossibleDecryption_Incorrect_Pass_key_entered_\" xml:space=\"preserve\">\n    <value>Incorrect Pass key entered.</value>\n  </data>\n  <data name=\"RdlViewer_menuFileSaveAs_Click_FilesFilter\" xml:space=\"preserve\">\n    <value>PDF files (*.pdf)|*.pdf|XML files (*.xml)|*.xml|HTML files (*.html)|*.html|CSV files (*.csv)|*.csv|RTF files (*.rtf)|*.rtf|TIF files (*.tif)|*.tif|Excel 2007 Table Only (*.xlsx)|*.xlsx|Excel 2007 (*.xlsx)|*.xlsx|MHT files (*.mht)|*.mht</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlViewer/Resources/Strings.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"DialogWait_Minutes\" xml:space=\"preserve\">\n    <value>минут</value>\n  </data>\n  <data name=\"DialogWait_Seconds\" xml:space=\"preserve\">\n    <value>секунд</value>\n  </data>\n  <data name=\"PageDrawing_OnMouseDown_HyperLinkError\" xml:space=\"preserve\">\n    <value>Не правильная гиперссылка</value>\n  </data>\n  <data name=\"PageDrawing_OnMouseDown_UnableLink\" xml:space=\"preserve\">\n    <value>Не удаётся перейти по ссылке</value>\n  </data>\n  <data name=\"RdlViewerFind_ErrorA_PropertyMustSetPriorFindNext\" xml:space=\"preserve\">\n    <value>Свойство Viewer должно быть установлено до начала поиска.</value>\n  </data>\n  <data name=\"RdlViewerFind_ErrorA_PropertyMustSetPriorFindPrevious\" xml:space=\"preserve\">\n    <value>Свойство Viewer должно быть установлено до начала поиска.</value>\n  </data>\n  <data name=\"RdlViewerFind_FindNext_Phrase_not_found\" xml:space=\"preserve\">\n    <value>Фраза не найдена</value>\n  </data>\n  <data name=\"RdlViewerFind_FindNext_Reached_end_of_report\" xml:space=\"preserve\">\n    <value>Достигнут конец отчета, продолжаем сначала.</value>\n  </data>\n  <data name=\"RdlViewerFind_FindPrevious_Reached_top_of_report\" xml:space=\"preserve\">\n    <value>Достигнуто начало отчёта, продолжаем с конца.</value>\n  </data>\n  <data name=\"RdlViewer_Error_Report_must_be_loaded_prior_to_Rebuild_being_called\" xml:space=\"preserve\">\n    <value>Отчёт должен быть загружен прежде чем пытаться его перестроить.</value>\n  </data>\n  <data name=\"RdlViewer_Error_UnsupportedExtension\" xml:space=\"preserve\">\n    <value>Неподдерживаемое разрешение</value>\n  </data>\n  <data name=\"RdlViewer_menuFileSaveAs_Click_FilesFilter\" xml:space=\"preserve\">\n    <value>PDF (*.pdf)|*.pdf|XML (*.xml)|*.xml|HTML (*.html)|*.html|CSV files (*.csv)|*.csv|RTF (*.rtf)|*.rtf|TIF (*.tif)|*.tif|Excel 2007 только таблица (*.xlsx)|*.xlsx|Excel 2007 (*.xlsx)|*.xlsx|MHT (*.mht)|*.mht</value>\n  </data>\n  <data name=\"RdlViewer_ParametersLeave_InvalidReportParameter\" xml:space=\"preserve\">\n    <value>Некорректный параметр отчёта</value>\n  </data>\n  <data name=\"RdlViewer_ParametersViewClick_ReportParameterMissing\" xml:space=\"preserve\">\n    <value>Отсутствует параметр отчёта</value>\n  </data>\n  <data name=\"RdlViewer_ParametersViewClick_RequiredParameterNotProvided\" xml:space=\"preserve\">\n    <value>Параметр '{0}' обязателен, но не указан</value>\n  </data>\n  <data name=\"RdlViewer_ShowD_Error\" xml:space=\"preserve\">\n    <value>Ошибка</value>\n  </data>\n</root>"
  },
  {
    "path": "RdlViewer/ViewerToolstrip.cs",
    "content": "﻿using System;\nusing System.Windows.Forms;\nusing System.Drawing.Printing;\nusing System.Drawing;\nusing System.Resources;\nusing System.Reflection;\nusing System.IO;\nusing Majorsilence.Reporting.Rdl;\nusing Majorsilence.Reporting.RdlViewer.Resources;\nusing System.ComponentModel;\n\nnamespace Majorsilence.Reporting.RdlViewer\n{\n    public class ViewerToolstrip : ToolStrip\n    {\n        public ViewerToolstrip()\n        {\n            Init();\n        }\n\n        public ViewerToolstrip(RdlViewer viewer)\n        {\n            Init();\n            this.Viewer = viewer;\n        }\n\n        private RdlViewer _viewer = null;\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public RdlViewer Viewer\n        { \n            get{ return _viewer; }\n            set\n            { \n                _viewer = value;\n                this.Viewer.PageNavigation += HandlePageNavigation;\n            } \n        }\n\n        private ToolStripTextBox currentPage = new ToolStripTextBox();\n        private ToolStripLabel pageCount = new ToolStripLabel(\"\");\n\n        private void Init()\n        {\n            InitializeToolBar();\n     \n        }\n\n        private async void OpenClicked(object sender, System.EventArgs e)\n        {\n            var dlg = new OpenFileDialog();\n            var result = dlg.ShowDialog();\n            if (result != DialogResult.OK)\n            {\n                return;\n            }\n\n            await Viewer.SetSourceFile(new Uri(dlg.FileName));\n            await Viewer.Rebuild();\n\n            currentPage.Text = Viewer.PageCurrent.ToString();\n            pageCount.Text = \"/\" + Viewer.PageCount;\n        }\n\n        private async void PrintClicked(object sender, System.EventArgs e)\n        {\n            if (Viewer == null)\n            {\n                return;\n            }\n\n            PrintDocument pd = new PrintDocument();\n            pd.DocumentName = Viewer.SourceFile.LocalPath;\n            pd.PrinterSettings.FromPage = 1;\n            pd.PrinterSettings.ToPage = Viewer.PageCount;\n            pd.PrinterSettings.MaximumPage = Viewer.PageCount;\n            pd.PrinterSettings.MinimumPage = 1;\n            pd.DefaultPageSettings.Landscape = Viewer.PageWidth > Viewer.PageHeight ? true : false;\n            using (PrintDialog dlg = new PrintDialog())\n            {\n                dlg.Document = pd;\n                dlg.AllowSelection = true;\n                dlg.AllowSomePages = true;\n                if (dlg.ShowDialog() == DialogResult.OK)\n                {\n                    await Viewer.Print(pd);\n                }\n            }\n\n        }\n\n        private async void SaveAsClicked(object sender, System.EventArgs e)\n        {\n            if (Viewer == null)\n            {\n                return;\n            }\n\n            var dlg = new SaveFileDialog();\n            dlg.Filter = Strings.RdlViewer_menuFileSaveAs_Click_FilesFilter;\n            dlg.FileName = \".pdf\";\n            var result = dlg.ShowDialog();\n            if (result != DialogResult.OK)\n            {\n                return;\n            }\n            // save the report in a rendered format\n            string ext = null;\n            int i = dlg.FileName.LastIndexOf('.');\n            if (i < 1)\n            {\n                ext = \"\";\n            }\n            else\n            {\n                ext = dlg.FileName.Substring(i + 1).ToLower();\n            }\n            Majorsilence.Reporting.Rdl.OutputPresentationType type = Majorsilence.Reporting.Rdl.OutputPresentationType.Internal;\n            switch (ext)\n            {\n                case \"pdf\":\n                    type = Majorsilence.Reporting.Rdl.OutputPresentationType.PDF;\n                    break;\n                case \"xml\":\n                    type = Majorsilence.Reporting.Rdl.OutputPresentationType.XML;\n                    break;\n                case \"html\":\n                    type = Majorsilence.Reporting.Rdl.OutputPresentationType.HTML;\n                    break;\n                case \"htm\":\n                    type = Majorsilence.Reporting.Rdl.OutputPresentationType.HTML;\n                    break;\n                case \"csv\":\n                    type = Majorsilence.Reporting.Rdl.OutputPresentationType.CSV;\n                    break;\n                case \"rtf\":\n                    type = Majorsilence.Reporting.Rdl.OutputPresentationType.RTF;\n                    break;\n                case \"mht\":\n                    type = Majorsilence.Reporting.Rdl.OutputPresentationType.MHTML;\n                    break;\n                case \"mhtml\":\n                    type = Majorsilence.Reporting.Rdl.OutputPresentationType.MHTML;\n                    break;\n                case \"xlsx\":\n                    type = dlg.FilterIndex == 7 ? OutputPresentationType.ExcelTableOnly : OutputPresentationType.Excel2007;\n                    break;\n                case \"tif\":\n                    type = Majorsilence.Reporting.Rdl.OutputPresentationType.TIF;\n                    break;\n                case \"tiff\":\n                    type = Majorsilence.Reporting.Rdl.OutputPresentationType.TIF;\n                    break;\n                default:\n                    MessageBox.Show(String.Format(\"{0} is not a valid file type. File extension must be PDF, XML, HTML, CSV, MHT, RTF, TIF, XLSX.\", dlg.FileName),\n                        \"Invalid File Type\", MessageBoxButtons.OK, MessageBoxIcon.Information);\n                    break;\n            }\n\n            await Viewer.SaveAs(dlg.FileName, type);\n        }\n\n        private void FirstPageClicked(object sender, System.EventArgs e)\n        {\n            if (Viewer == null)\n            {\n                return;\n            }\n\n            Viewer.PageCurrent = 1;\n        }\n\n        private void PreviousPageClicked(object sender, System.EventArgs e)\n        {\n            if (Viewer == null)\n            {\n                return;\n            }\n\n            if (Viewer.PageCurrent == 1)\n            {\n                return;\n            }\n\n            Viewer.PageCurrent -= 1;\n\n        }\n\n        private void NextPageClicked(object sender, System.EventArgs e)\n        {\n            if (Viewer == null)\n            {\n                return;\n            }\n\n            if (Viewer.PageCurrent == Viewer.PageCount)\n            {\n                return;\n            }\n            Viewer.PageCurrent += 1;\n\n        }\n\n        private void LastPageClicked(object sender, System.EventArgs e)\n        {\n            if (Viewer == null)\n            {\n                return;\n            }\n\n            Viewer.PageCurrent = Viewer.PageCount;\n        }\n\n        private void ZoomInClicked(object sender, System.EventArgs e)\n        {\n            if (Viewer == null)\n            {\n                return;\n            }\n\n            Viewer.Zoom += 0.5f;\n        }\n\n        private void ZoomOutClicked(object sender, System.EventArgs e)\n        {\n            if (Viewer == null)\n            {\n                return;\n            }\n\n            Viewer.Zoom -= 0.5f;\n        }\n\n        private void InitializeToolBar()\n        {\n\n           \n\n            this.Items.Add(new ToolStripButton(\"Open\", GetImage(\"fyiReporting.RdlViewer.Resources.document-open.png\"), OpenClicked));\n            this.Items.Add(new ToolStripButton(\"Save As\", GetImage(\"fyiReporting.RdlViewer.Resources.document-save.png\"), SaveAsClicked));\n            this.Items.Add(new ToolStripButton(\"Print\", GetImage(\"fyiReporting.RdlViewer.Resources.document-print.png\"), PrintClicked));\n            this.Items.Add(new ToolStripButton(\"<<\", null, FirstPageClicked));\n            this.Items.Add(new ToolStripButton(\"<\", null, PreviousPageClicked));\n            this.Items.Add(new ToolStripButton(\">\", null, NextPageClicked));\n            this.Items.Add(new ToolStripButton(\">>\", null, LastPageClicked));\n            this.Items.Add(this.currentPage);\n            this.Items.Add(this.pageCount);\n            this.Items.Add(new ToolStripButton(\"Zoom In\", null, ZoomInClicked));\n            this.Items.Add(new ToolStripButton(\"Zoom Out\", null, ZoomOutClicked));\n        }\n\n\n        void HandlePageNavigation(object sender, PageNavigationEventArgs e)\n        {\n            currentPage.Text = e.NewPage.ToString();\n        }\n\n        private Bitmap GetImage(string resourceName)\n        {\n\n            var assembly = Assembly.GetExecutingAssembly();\n\n            using (Stream stream = assembly.GetManifestResourceStream(resourceName))\n            {\n                return new Bitmap(stream);\n            }\n\n        }\n\n    }\n}\n\n"
  },
  {
    "path": "RdlViewer.Tests/ParameterSettingMethodsTest.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing NUnit.Framework;\n\nnamespace RdlViewer.Tests\n{\n    [TestFixture]\n    public class ParameterSettingMethodsTest\n    {\n        [Test]\n        public void SetJsonParameterWithAmpersAndSpecialValues()\n        {\n            var sut = new Majorsilence.Reporting.RdlViewer.RdlViewer();\n\n            var paramDic = new Dictionary<string, string>();\n\n            paramDic.Add(\"testparam1\", \"testvalue1\");\n            paramDic.Add(\"ampersand\", \"test & value1\");\n            paramDic.Add(\"badsigns\", \"{}[]?*!\\\\\\\"\");\n\n            var paramString =  System.Text.Json.JsonSerializer.Serialize(paramDic);\n\n            sut.SetReportParametersAsJson(paramString);\n\n            var result = sut.Parameters;\n\n            Assert.That(result.Contains(\"testvalue1\"));\n            Assert.That(result.Contains(\"test & value1\"));\n            Assert.That(result.Contains(\"{}[]?*!\\\\\\\"\"));\n        }\n\n        [TestCase(\"normaltest\", \"normalvalue\", ExpectedResult = true)] // this is how it works\n        [TestCase(\"testwithampersand\", \"here & there\", ExpectedResult = false)] // this is to demonstrate the ampersand-parameter-problem\n        [Test]\n        public bool SetParametersWithAmpersandSeparation(string key, string value)\n        {\n            var sut = new Majorsilence.Reporting.RdlViewer.RdlViewer();\n\n            var paramString = key + \"=\" + value;\n\n            sut.Parameters = paramString;\n\n            var result = sut.Parameters;\n\n            return result.Contains(key) && result.Contains(value);\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "RdlViewer.Tests/RdlEngineConfig.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<config>\n   <DataSources>\n      <DataSource>\n         <DataProvider>SQL</DataProvider>\n         <TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>\n         <Interface>SQL</Interface>\n      </DataSource>\n      <DataSource>\n         <DataProvider>SQLce</DataProvider>\n         <CodeModule>C:\\Program Files\\Microsoft SQL Server Compact Edition\\v4.0\\Desktop\\System.Data.SqlServerCe.dll</CodeModule>\n         <ClassName>System.Data.SqlServerCe.SqlCeConnection</ClassName>\n         <TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY TABLE_NAME, TABLE_TYPE</TableSelect>\n         <Interface>SQL</Interface>\n      </DataSource>\n      <DataSource>\n         <DataProvider>ODBC</DataProvider>\n         <TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>\n         <Interface>SQL</Interface>\n         <ReplaceParameters>true</ReplaceParameters>\n      </DataSource>\n      <DataSource>\n         <DataProvider>OLEDB</DataProvider>\n         <TableSelect>SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1</TableSelect>\n         <Interface>SQL</Interface>\n      </DataSource>\n      <DataSource>\n         <DataProvider>Oracle</DataProvider>\n         <CodeModule>F:\\oracle\\product\\10.2.0\\db_2\\BIN\\Oracle.DataAccess.dll</CodeModule>\n         <ClassName>Oracle.DataAccess.Client.OracleConnection</ClassName>\n         <TableSelect>select OWNER || '.' || TABLE_NAME from ALL_TABLES WHERE TABLESPACE_NAME NOT IN ('SYSTEM', 'SYSAUX')</TableSelect>\n         <Interface>SQL</Interface>\n      </DataSource>\n      <DataSource>\n         <DataProvider>MySQL.NET</DataProvider>\n         <CodeModule>MySql.Data.dll</CodeModule>\n         <ClassName>MySql.Data.MySqlClient.MySqlConnection</ClassName>\n         <TableSelect>show tables</TableSelect>\n         <Interface>SQL</Interface>\n         <ReplaceParameters>true</ReplaceParameters>\n      </DataSource>\n      <DataSource>\n         <DataProvider>Firebird.NET</DataProvider>\n         <CodeModule>C:\\Program Files\\FirebirdNETProvider1.7\\FirebirdSql.Data.Firebird.dll</CodeModule>\n         <ClassName>FirebirdSql.Data.Firebird.FbConnection</ClassName>\n         <TableSelect>SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$RELATION_NAME NOT LIKE 'RDB$%' ORDER BY 1</TableSelect>\n         <Interface>SQL</Interface>\n      </DataSource>\n      <DataSource>\n         <DataProvider>Firebird.NET 2.0</DataProvider>\n         <CodeModule>FirebirdSql.Data.FirebirdClient.dll</CodeModule>\n         <ClassName>FirebirdSql.Data.FirebirdClient.FbConnection</ClassName>\n         <TableSelect>SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0 ORDER BY 1</TableSelect>\n         <Interface>SQL</Interface>\n      </DataSource>\n      <DataSource>\n         <DataProvider>SQLite</DataProvider>\n         <CodeModule>System.Data.SQLite.dll</CodeModule>\n         <ClassName>System.Data.SQLite.SQLiteConnection</ClassName>\n         <TableSelect>SELECT name FROM sqlite_master WHERE type = 'table'</TableSelect>\n         <Interface>SQL</Interface>\n      </DataSource>\n      <DataSource>\n         <DataProvider>iAnywhere.NET</DataProvider>\n         <CodeModule>F:\\Sybase\\SQL Anywhere Studio 9\\win32\\iAnywhere.Data.AsaClient.dll</CodeModule>\n         <ClassName>iAnywhere.Data.AsaClient.AsaConnection</ClassName>\n         <TableSelect>select table_name from systable \n\t\t\t\t\twhere table_type = 'BASE' and table_name not like 'SYS%' \n\t\t\t\t\t\t\tand table_name not like 'ix_%' \n\t\t\t\t\t\t\tand table_name not like 'ml_%'\n\t\t\t\t\t\t\tand table_name not like 'ul_%'\n\t\t\t\t\t\t\tand table_name not like 'rl_%'\n\t\t\t\t\t\t\tand table_name not like 'rs_%'\n\t\t\t\t\t\t\tand table_name not like 'migrate_%'\n\t\t\t\t\t\t\tand table_name not like 'spt_%'\n\t\t\t\t\t\t\tand table_name not like 'jdbc_%'\n\t\t\t\t\t\t\tand table_name not in ('DUMMY', 'RowGenerator', 'EXCLUDEOBJECT')</TableSelect>\n         <Interface>SQL</Interface>\n      </DataSource>\n      <DataSource>\n         <DataProvider>XML</DataProvider>\n         <CodeModule>DataProviders.dll</CodeModule>\n         <ClassName> Majorsilence.Reporting.Data.XmlConnection</ClassName>\n         <TableSelect />\n         <Interface>File</Interface>\n      </DataSource>\n      <DataSource>\n         <DataProvider>WebService</DataProvider>\n         <CodeModule>DataProviders.dll</CodeModule>\n         <ClassName> Majorsilence.Reporting.Data.WebServiceConnection</ClassName>\n         <TableSelect />\n         <Interface>WebService</Interface>\n      </DataSource>\n      <DataSource>\n         <DataProvider>WebLog</DataProvider>\n         <CodeModule>DataProviders.dll</CodeModule>\n         <ClassName> Majorsilence.Reporting.Data.LogConnection</ClassName>\n         <TableSelect />\n         <Interface>File</Interface>\n      </DataSource>\n      <DataSource>\n         <DataProvider>Text</DataProvider>\n         <CodeModule>DataProviders.dll</CodeModule>\n         <ClassName> Majorsilence.Reporting.Data.TxtConnection</ClassName>\n         <TableSelect />\n         <Interface>File</Interface>\n      </DataSource>\n      <DataSource>\n         <DataProvider>iTunes</DataProvider>\n         <CodeModule>DataProviders.dll</CodeModule>\n         <ClassName> Majorsilence.Reporting.Data.iTunesConnection</ClassName>\n         <TableSelect />\n         <Interface>File</Interface>\n      </DataSource>\n      <DataSource>\n         <DataProvider>FileDirectory</DataProvider>\n         <CodeModule>DataProviders.dll</CodeModule>\n         <ClassName> Majorsilence.Reporting.Data.FileDirConnection</ClassName>\n         <TableSelect />\n         <Interface>File</Interface>\n      </DataSource>\n      <DataSource>\n         <DataProvider>OracleSp</DataProvider>\n         <CodeModule>OracleSp.dll</CodeModule>\n         <ClassName>fyiReporting.OracleSp.OracleSpConnection</ClassName>\n         <TableSelect>select OWNER || '.' || TABLE_NAME from ALL_TABLES WHERE TABLESPACE_NAME NOT IN ('SYSTEM', 'SYSAUX')</TableSelect>\n         <Interface>SQL</Interface>\n      </DataSource>\n      <DataSource>\n         <DataProvider>PostgreSQL</DataProvider>\n         <CodeModule>Npgsql.dll</CodeModule>\n         <ClassName>Npgsql.NpgsqlConnection</ClassName>\n         <TableSelect>SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE 'pg_%' ORDER BY 1</TableSelect>\n         <Interface>SQL</Interface>\n      </DataSource>\n     <DataSource>\n       <DataProvider>PostgreSQL_Devart</DataProvider>\n       <CodeModule>Devart.Data.PostgreSql.dll</CodeModule>\n       <ClassName>Devart.Data.PostgreSql.PgSqlConnection</ClassName>\n       <TableSelect>SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE 'pg_%' ORDER BY 1</TableSelect>\n       <Interface>SQL</Interface>\n     </DataSource>\n\n   </DataSources>\n   <Compression>\n      <CodeModule>ICSharpCode.SharpZipLib.dll</CodeModule>\n      <ClassName>ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream</ClassName>\n      <Finish>Finish</Finish>\n      <Enable>true</Enable>\n   </Compression>\n   <CustomReportItems>\n      <CustomReportItem>\n         <Type>BarCode EAN-13</Type>\n         <CodeModule>RdlCri.dll</CodeModule>\n         <ClassName>Majorsilence.Reporting.Cri.BarCodeEAN13</ClassName>\n      </CustomReportItem>\n      <CustomReportItem>\n         <Type>BarCode Bookland</Type>\n         <CodeModule>RdlCri.dll</CodeModule>\n         <ClassName>Majorsilence.Reporting.Cri.BarCodeBookland</ClassName>\n      </CustomReportItem>\n      <CustomReportItem>\n         <Type>QR Code</Type>\n         <CodeModule>RdlCri.dll</CodeModule>\n         <ClassName>Majorsilence.Reporting.Cri.QrCode</ClassName>\n      </CustomReportItem>\n     <CustomReportItem>\n       <Type>ITF-14</Type>\n       <CodeModule>RdlCri.dll</CodeModule>\n       <ClassName>Majorsilence.Reporting.Cri.BarCodeITF14</ClassName>\n     </CustomReportItem>\n     <CustomReportItem>\n       <Type>AztecCode</Type>\n       <CodeModule>RdlCri.dll</CodeModule>\n       <ClassName>Majorsilence.Reporting.Cri.AztecCode</ClassName>\n     </CustomReportItem>\n      <CustomReportItem>\n         <Type>BarCode39</Type>\n         <CodeModule>RdlCri.dll</CodeModule>\n         <ClassName>Majorsilence.Reporting.Cri.BarCode39</ClassName>\n      </CustomReportItem>\n      <CustomReportItem>\n         <Type>BarCode128</Type>\n         <CodeModule>RdlCri.dll</CodeModule>\n         <ClassName>Majorsilence.Reporting.Cri.BarCode128</ClassName>\n      </CustomReportItem>\n      <CustomReportItem>\n         <Type>BarCodeEAN8</Type>\n         <CodeModule>RdlCri.dll</CodeModule>\n         <ClassName>Majorsilence.Reporting.Cri.BarCodeEAN8</ClassName>\n      </CustomReportItem>\n   </CustomReportItems>\n</config>"
  },
  {
    "path": "RdlViewer.Tests/RdlViewer.Tests.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\t<PropertyGroup>\n\t\t<OutputType>Library</OutputType>\n\t\t<UseWindowsForms>true</UseWindowsForms>\n\t\t<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>\n\t\t<Configurations>Debug;Release;Debug-DrawingCompat</Configurations>\n\t\t<TargetFrameworks>net48;net8.0-windows;net10.0-windows</TargetFrameworks>\n\t\t<WarningsAsErrors>4014</WarningsAsErrors>\n\t</PropertyGroup>\n\t<ItemGroup>\n\t\t<ProjectReference Include=\"..\\RdlCri\\Majorsilence.Reporting.RdlCri.csproj\" />\n\t\t<ProjectReference Include=\"..\\RdlViewer\\RdlViewer.csproj\" />\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<Service Include=\"{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}\" />\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<Content Include=\"RdlEngineConfig.xml\">\n\t\t\t<CopyToOutputDirectory>Always</CopyToOutputDirectory>\n\t\t</Content>\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<PackageReference Include=\"Microsoft.NET.Test.Sdk\" />\n\t\t<PackageReference Include=\"NUnit\" />\n\t\t<PackageReference Include=\"NUnit3TestAdapter\" />\n\t\t<PackageReference Include=\"coverlet.collector\" />\n\t\t<PackageReference Include=\"System.Data.DataSetExtensions\" />\n\t\t<PackageReference Include=\"System.Text.Json\" />\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<Folder Include=\"Properties\\\" />\n\t</ItemGroup>\n</Project>\n"
  },
  {
    "path": "Readme.md",
    "content": "# Majorsilence Reporting (formerly My-FyiReporting)\n\nIf you have any question about Majorsilence Reporting or do you want to contribute a discussion group for Majorsilence Reporting is available here:\n\nhttps://groups.google.com/d/forum/myfyireporting\n\n\n|         |Linux |Mac | Win | Win(AppeyVeyor) |\n|---------|:------:|:------:|:------:|:------:|\n|**Master**| [![linux](https://github.com/majorsilence/My-FyiReporting/actions/workflows/linux.yml/badge.svg?branch=master)](https://github.com/majorsilence/My-FyiReporting/actions/workflows/linux.yml) | [![mac](https://github.com/majorsilence/My-FyiReporting/actions/workflows/mac.yml/badge.svg?branch=master)](https://github.com/majorsilence/My-FyiReporting/actions/workflows/mac.yml) | [![.github/workflows/windows.yml](https://github.com/majorsilence/My-FyiReporting/actions/workflows/windows.yml/badge.svg?branch=master)](https://github.com/majorsilence/My-FyiReporting/actions/workflows/windows.yml) | [![Build status appveyor](https://ci.appveyor.com/api/projects/status/a44n015bli95rmpw?svg=true)](https://ci.appveyor.com/project/majorsilence/my-fyireporting) | \n\n\n\n# Documentation\nSee the [projects wiki](https://github.com/majorsilence/My-FyiReporting/wiki).\n\n# Download\n\nSee the [downloads page](https://github.com/majorsilence/My-FyiReporting/wiki/Downloads).\n\nAlternatively if you want keep up with the latest version you can always use Git\n\n    git clone https://github.com/majorsilence/My-FyiReporting.git\n\n# Introduction\nMajorsilence Reporting is a powerful, open-source .NET reporting framework designed for developers who need to create, design, and deliver rich, reports. Supporting modern .NET versions (8.0), it provides a flexible and extensible platform for building reports from a variety of data sources. With a drag-and-drop designer, multiple viewer options, and cross-platform support, Majorsilence Reporting is ideal for both desktop and web applications. Whether you need to generate reports programmatically or empower users with a visual designer (windows only), this project offers the tools and documentation to get you started quickly.\n\n**The core of Majorsilence Reporting supports Linux and macOS for server-side application report generation. Only the WinForms-based designer and viewer are Windows-only.**\n\n# Quick start\n\nAdd these nuget packages to your project.\n\n```bash\ndotnet add package Majorsilence.Reporting.RdlCreator.SkiaSharp\ndotnet add package Majorsilence.Reporting.RdlEngine.SkiaSharp\ndotnet add package Majorsilence.Reporting.RdlCri.SkiaSharp\n```\n\nIf running on linux install the [required fonts](https://github.com/majorsilence/My-FyiReporting/wiki/Linux---PDF-export-and-Fonts).\n\n```bash\nsudo apt install ttf-mscorefonts-installer\n```\n\nYou are now ready to create and generate reports.\n\n## c# example, create report, connected to an sql database\n\nSee [Database Providers](https://github.com/majorsilence/My-FyiReporting/wiki/Database-Providers-Howto).\n\n```cs\nusing Majorsilence.Reporting.RdlCreator;\n\n// One time per app instance\nRdlEngineConfig.RdlEngineConfigInit();\n\nstring dataProvider = \"[PLACEHOLDER/Json/Microsoft.Data.SqlClient/MySQL.NET/Firebird.NET 2.0/Microsoft.Data.Sqlite/PostgreSQL\";\nvar create = new Majorsilence.Reporting.RdlCreator.Create();\n\nusing var report = await create.GenerateRdl(dataProvider,\n    connectionString,\n    \"SELECT CategoryID, CategoryName, Description FROM Categories\",\n    pageHeaderText: \"DataProviderTest TestMethod1\");\n\nstring filepath = System.IO.Path.Combine(Environment.CurrentDirectory, \"PLACEHOLDER.pdf\");\nusing var ofs = new Majorsilence.Reporting.Rdl.OneFileStreamGen(filepath, true);\nawait report.RunGetData(null);\nawait report.RunRender(ofs, Majorsilence.Reporting.Rdl.OutputPresentationType.PDF);\n```\n\n## c# example, create a pdf document\n\n```cs\nusing Majorsilence.Reporting.RdlCreator;\n\n// One time per app instance\nRdlEngineConfig.RdlEngineConfigInit();\n\nvar document = new Majorsilence.Reporting.RdlCreator.Document()\n{\n    Description = \"Sample report\",\n    Author = \"John Doe\",\n    PageHeight = \"11in\",\n    PageWidth = \"8.5in\",\n    //Width = \"7.5in\",\n    TopMargin = \".25in\",\n    LeftMargin = \".25in\",\n    RightMargin = \".25in\",\n    BottomMargin = \".25in\"\n}\n.WithPage((page) =>\n{\n    page.WithHeight(\"10in\")\n    .WithWidth(\"7.5in\")\n    .WithText(new Text\n    {\n        Name = \"TheSimplePageText\",\n        Top = \".1in\",\n        Left = \".1in\",\n        Width = \"6in\",\n        Height = \".25in\",\n        Value = new Value { Text = \"Text Area 1\" },\n        Style = new Style { FontSize = \"12pt\", FontWeight = \"Bold\" }\n    });\n});\n\nusing var fileStream = new FileStream(\"PLACEHOLDER.pdf\", FileMode.Create, FileAccess.Write);\nawait document.Create(fileStream);\n```\n\n## c# load an existing rdl report via RdlEngine\n\nnote: Notice the namespace and type difference of Majorsilence.Reporting.RdlCreator.Report for creating new rdl reports versus Majorsilence.Reporting.Rdl.Report for running a report.\n\n```cs\nusing Majorsilence.Reporting.Rdl;\n\n// One time per app instance\nRdlEngineConfig.RdlEngineConfigInit();\n\nvar rdlp = new RDLParser(System.IO.File.ReadAllText(@\"C:\\path\\to\\report\\file.rdl\"));\nusing var report = await rdlp.Parse();\n\nstring filepath = System.IO.Path.Combine(Environment.CurrentDirectory, \"PLACEHOLDER.pdf\");\nusing var ofs = new Majorsilence.Reporting.Rdl.OneFileStreamGen(filepath, true);\nawait report.RunGetData(null);\nawait report.RunRender(ofs, Majorsilence.Reporting.Rdl.OutputPresentationType.PDF);\n```\n\n\n# Development\nMajorsilence Reporting is developed with the following workflow:\n\n* Nothing happens for weeks or months\n* Someone needs it to do something it doesn't already do\n* That person implements that something and submits a pull request\n* Repeat\n\nIf it doesn't have a feature that you want it to have, add it.  If it has a bug you need fixed, fix it.\n\nSee [Contribute](https://github.com/majorsilence/My-FyiReporting/wiki/Contribute).\n\n# Benchmarks\n\n## one\n\nBenchmarkDotNet v0.15.2, macOS 26.0.1 (25A362) [Darwin 25.0.0]\nApple M2, 1 CPU, 8 logical and 8 physical cores\n.NET SDK 9.0.200\n  [Host]     : .NET 8.0.13 (8.0.1325.6609), Arm64 RyuJIT AdvSIMD\n  Job-AKATUD : .NET 8.0.13 (8.0.1325.6609), Arm64 RyuJIT AdvSIMD\n\nBuildConfiguration=Release-DrawingCompat  RunStrategy=Throughput  \n\n| Method     | Mean     | Error     | StdDev    | Ratio | RatioSD | Gen0     | Gen1     | Allocated | Alloc Ratio |\n|----------- |---------:|----------:|----------:|------:|--------:|---------:|---------:|----------:|------------:|\n| NestedJson | 5.401 ms | 0.0560 ms | 0.0935 ms |  0.99 |    0.03 | 390.6250 | 125.0000 |   3.12 MB |        1.00 |\n\n\n|Threads|Duration|Source|Calls/Sec|Total Calls|Errors|\n|-------|--------|------|---------:|----------:|-----:|\n|1|30|JsonDataProviderBenchmark|162|4,873|0|\n|20|30|JsonDataProviderBenchmark|362|10,865|0|\n|20|30|JsonDataProviderBenchmark|363|10,894|0|\n|30|30|JsonDataProviderBenchmark|334|10,043|0|\n|40|30|JsonDataProviderBenchmark|316|9,497|0|\n|50|30|JsonDataProviderBenchmark|296|8,905|0|\n\n\n## two\n\nBenchmarkDotNet v0.15.2, Windows 11 (10.0.26100.6584/24H2/2024Update/HudsonValley)\nIntel Core i5-8350U CPU 1.70GHz (Max: 1.90GHz) (Kaby Lake R), 1 CPU, 8 logical and 4 physical cores\n.NET SDK 8.0.414\n  [Host]     : .NET 8.0.20 (8.0.2025.41914), X64 RyuJIT AVX2\n  Job-AKATUD : .NET 8.0.20 (8.0.2025.41914), X64 RyuJIT AVX2\n\nBuildConfiguration=Release-DrawingCompat  RunStrategy=Throughput  \n\n| Method     | Mean     | Error    | StdDev   | Median   | Ratio | RatioSD | Gen0     | Gen1     | Allocated | Alloc Ratio |\n|----------- |---------:|---------:|---------:|---------:|------:|--------:|---------:|---------:|----------:|------------:|\n| NestedJson | 16.67 ms | 0.796 ms | 2.140 ms | 15.84 ms |  1.01 |    0.17 | 727.2727 | 272.7273 |   3.24 MB |        1.00 |\n\n\n|Threads|Duration|Source|Calls/Sec|Total Calls|Errors|\n|-------|--------|------|---------:|----------:|-----:|\n|1|30|JsonDataProviderBenchmark|34|1,009|0|\n|20|30|JsonDataProviderBenchmark|64|1,920|0|\n|20|30|JsonDataProviderBenchmark|63|1,893|0|\n|30|30|JsonDataProviderBenchmark|58|1,739|0|\n|40|30|JsonDataProviderBenchmark|49|1,497|0|\n|50|30|JsonDataProviderBenchmark|51|1,546|0|\n\n## three\n\nBenchmarkDotNet v0.15.2, Linux Ubuntu 24.04.3 LTS (Noble Numbat)\nAMD Ryzen 5 3600 4.21GHz, 1 CPU, 12 logical and 6 physical cores\n.NET SDK 8.0.120\n[Host]     : .NET 8.0.20 (8.0.2025.41914), X64 RyuJIT AVX2\nJob-AKATUD : .NET 8.0.20 (8.0.2025.41914), X64 RyuJIT AVX2\n\nBuildConfiguration=Release-DrawingCompat  RunStrategy=Throughput\n\n| Method     | Mean     | Error     | StdDev    | Ratio | RatioSD | Gen0     | Gen1     | Allocated | Alloc Ratio |\n|----------- |---------:|----------:|----------:|------:|--------:|---------:|---------:|----------:|------------:|\n| NestedJson | 5.542 ms | 0.1100 ms | 0.2011 ms |  1.00 |    0.05 | 359.3750 | 125.0000 |   2.94 MB |        1.00 |\n\n\n|Threads|Duration|Source|Calls/Sec|Total Calls|Errors|\n|-------|--------|------|---------:|----------:|-----:|\n|1|30|JsonDataProviderBenchmark|152|4,571|0|\n|20|30|JsonDataProviderBenchmark|403|12,115|0|\n|20|30|JsonDataProviderBenchmark|406|12,196|0|\n|30|30|JsonDataProviderBenchmark|358|10,757|0|\n|40|30|JsonDataProviderBenchmark|315|9,460|0|\n|50|30|JsonDataProviderBenchmark|290|8,720|0|\n\n\n"
  },
  {
    "path": "References/Linux.txt",
    "content": "On linux you will be required to provide managed sqlite dlls from \nhttp://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki or your system repository."
  },
  {
    "path": "References/dot net 4/xwt-license.txt",
    "content": "See https://github.com/mono/xwt\n\nAuthor:\n      Lluis Sanchez <lluis@xamarin.com>\n\nCopyright (c) 2012 Xamarin Inc\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE."
  },
  {
    "path": "References/postgresql-license.txt",
    "content": "Copyright (c) 2002-2010, The Npgsql Development Team\n\nPermission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies.\n\nIN NO EVENT SHALL THE NPGSQL DEVELOPMENT TEAM BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE NPGSQL DEVELOPMENT TEAM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nTHE NPGSQL DEVELOPMENT TEAM SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN \"AS IS\" BASIS, AND THE NPGSQL DEVELOPMENT TEAM HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. "
  },
  {
    "path": "Release-Builds/setup-majorsilence-reporting.warsetup",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<WarSetup-Project xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" menuShortcutDirName=\"\" overRideMenuShortcutDir=\"false\" projectRunAfterInstall=\"true\" mainTargetApp=\"ID_ac0d4a40_2eb5_401a_8daf_5e534e01e7d8\" nextUniqueId=\"1914\" projectName=\"Majorsilence Reporting\" projectUuid=\"f62cca83-b421-4c45-b05e-b6b03c48894a\" projectUpgradeUuid=\"cb05fe8c-3572-41c2-83ce-46055393e123\" projectVersion=\"4.15.0\" projectOrganization=\"MajorSilence\" projectFromWindowsVersion=\"Windows XP SP 3\" projectMustBeAdministratorToInstall=\"true\" project64BitTarget=\"false\" projectTargetDirectory=\"C:\\Users\\peter\\Projects\\My-FyiReporting\\Release-Builds\\build-output\" projectRequireDotNetVersion=\".NET 4.0 FULL\" projectTargetName=\"setup-Majorsilence-Reporting-dot-net4-x86\" projectType=\"0\" projectUserInterface=\"WixUI_FeatureTree\">\n  <LicencePaths>\n    <string>C:\\Program Files (x86)\\MajorSilence\\War Setup Fork\\Licenses</string>\n  </LicencePaths>\n  <Virgin>false</Virgin>\n  <projectFeatures featureId=\"ID9B106713A3E92B1477BABCABAE633CD5\" featureName=\"MyFyiReporting\" featureDescription=\"The complete package\" configurableDirectory=\"APPLICATIONFOLDER\" configurableDirectoryDefaultPath=\"[ProjectName]\" enableInDefaultInstall=\"true\" enableInMinimalInstall=\"true\" excludeFromBuild=\"false\">\n    <childFeatures featureId=\"PROGRAM\" featureName=\"Program\" featureDescription=\"The Main Executable\" enableInDefaultInstall=\"true\" enableInMinimalInstall=\"true\" excludeFromBuild=\"false\">\n      <components componentId=\"ID1001\" componentGuid=\"9c3c6d14-a827-41af-b3a5-022f790da794\">\n        <componentFiles fileId=\"ID_a6e1fb3c_88ff_43e8_be50_72f4357e1b01\" srcName=\"DataProviders.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"DataProviders.dll\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"DataProviders\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1000\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1003\" componentGuid=\"b38c5476-947e-4c89-bea3-27380b7fc740\">\n        <componentFiles fileId=\"ID_3d89abca_ede6_4bcb_a701_22533bca77e1\" srcName=\"RdlAsp.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"RdlAsp.dll\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"RdlAsp\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1002\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1005\" componentGuid=\"9fc9d1f4-bd19-4acf-b8c9-43955a92fe12\">\n        <componentFiles fileId=\"ID_64544db4_2639_4149_bbd1_d1e13deff1fd\" srcName=\"RdlCmd.exe\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"RdlCmd.exe\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"RdlCmd\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1004\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1007\" componentGuid=\"11d111b7-4b41-497b-94d9-631ad75233ec\">\n        <componentFiles fileId=\"ID_406a9850_0b49_4784_810e_64d292bb4967\" srcName=\"RdlCri.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"RdlCri.dll\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"RdlCri\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1006\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1009\" componentGuid=\"55650161-2332-44d9-990e-530fb863d250\">\n        <componentFiles fileId=\"ID_ac0d4a40_2eb5_401a_8daf_5e534e01e7d8\" srcName=\"RdlDesigner.exe\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"RdlDesigner.exe\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"RdlDesigner\" shortcutInProgramFilesMenu=\"true\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"[APPLICATIONFOLDER]\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1008\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1011\" componentGuid=\"ff8dd868-beb6-458d-9853-4ba64d41ecac\">\n        <componentFiles fileId=\"ID_3cb54950_92a9_4b23_8987_3e5993703958\" srcName=\"RdlDesktop.exe\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"RdlDesktop.exe\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"RdlDesktop\" shortcutInProgramFilesMenu=\"true\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"[APPLICATIONFOLDER]\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1010\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1013\" componentGuid=\"ac5e68a3-840f-4086-af77-a4c2855fd938\">\n        <componentFiles fileId=\"ID_404c80fb_2d3f_4b3d_88ce_6d79d0640888\" srcName=\"RdlEngine.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"RdlEngine.dll\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"RdlEngine\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1012\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1015\" componentGuid=\"dba40b89-c801-458a-bdd1-e3861e5eb01c\">\n        <componentFiles fileId=\"ID_a784b71d_ddc7_44d8_99c1_ef195afd4608\" srcName=\"RdlMapFile.exe\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"RdlMapFile.exe\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"RdlMapFile\" shortcutInProgramFilesMenu=\"true\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"[APPLICATIONFOLDER]\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1014\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1017\" componentGuid=\"3e3b192a-1238-46fe-8174-3ee42e87bf9c\">\n        <componentFiles fileId=\"ID_f6209c5e_7386_4d22_97e6_2f70b110248c\" srcName=\"RdlReader.exe\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"RdlReader.exe\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"RdlReader\" shortcutInProgramFilesMenu=\"true\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"[APPLICATIONFOLDER]\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1016\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1019\" componentGuid=\"1b0892d4-4a76-4a9f-9079-f79bfdffc438\">\n        <componentFiles fileId=\"ID_6e3be04f_7097_4e95_ad21_db1bffeffd2f\" srcName=\"RdlViewer.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"RdlViewer.dll\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"RdlViewer\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1018\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1081\" componentGuid=\"bd2952be-9de8-4907-b00f-8bff512f2fd7\">\n        <componentFiles fileId=\"ID_46eace7f_2d2a_46e5_897d_25dec36a0373\" srcName=\"ICSharpCode.SharpZipLib.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"ICSharpCode.SharpZipLib.dll\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"ICSharpCode.SharpZipLib\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1080\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1087\" componentGuid=\"dca17666-6240-47a2-af68-3d4a4bd8e905\">\n        <componentFiles fileId=\"ID_bf906c86_9b87_4632_9716_9b25ac2d9ddd\" srcName=\"System.Data.SQLite.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"System.Data.SQLite.dll\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"System.Data.SQLite\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1086\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1149\" componentGuid=\"62d1aa07-a62d-4432-92ee-704200772f72\">\n        <componentFiles fileId=\"ID_a30c65ad_0a8c_4635_8d4c_62abb99a1f9b\" srcName=\"config.xml\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"config.xml\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"config\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1148\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1151\" componentGuid=\"6afb238f-fe84-42b2-88f2-d4df3cc48672\">\n        <componentFiles fileId=\"ID_f26e721e_f5f7_45f3_a833_6603018c5cfe\" srcName=\"RdlEngineConfig.xml\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"RdlEngineConfig.xml\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"RdlEngineConfig\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1150\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1213\" componentGuid=\"4903a9f0-13fd-4f32-974a-27dbdde4d2d0\">\n        <componentFiles fileId=\"ID_2c2756d3_1e6e_4d55_b311_2e302e2213c8\" srcName=\"itextsharp.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"itextsharp.dll\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"itextsharp\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1212\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1215\" componentGuid=\"d53857ae-bdbd-4d54-97ea-3acfe53558ca\">\n        <componentFiles fileId=\"ID_8da8160f_e034_489d_8f6e_3a4e137b84e2\" srcName=\"LibRdlCrossPlatformViewer.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"LibRdlCrossPlatformViewer.dll\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"LibRdlCrossPlatformViewer\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1214\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1217\" componentGuid=\"439384d1-ef9a-40f4-b425-57dd97d24eb4\">\n        <componentFiles fileId=\"ID_6d86d2a3_dfc6_45c7_abda_23b75d1707d8\" srcName=\"Xwt.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"Xwt.dll\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"Xwt\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1216\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1219\" componentGuid=\"6b37cd9a-26a4-4ce2-8ea6-001220ff8752\">\n        <componentFiles fileId=\"ID_79c3f002_0831_4be6_ab3f_22c633fc351e\" srcName=\"Xwt.Gtk.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"Xwt.Gtk.dll\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"Xwt.Gtk\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1218\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1221\" componentGuid=\"2fae0b56-858a-47d4-9c09-750fba9040ec\">\n        <componentFiles fileId=\"ID_63c5fbae_5287_4c01_9b80_7c9ab2e53604\" srcName=\"Xwt.WPF.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"Xwt.WPF.dll\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"Xwt.WPF\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1220\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1223\" componentGuid=\"892cdfc6-a553-4185-bea2-781a3e8b560e\">\n        <componentFiles fileId=\"ID_01aafddc_7110_4c3e_a35c_b6ae426d4a4a\" srcName=\"xwt-license.txt\" srcDirectory=\"..\\References\\dot net 4\" dstName=\"xwt-license.txt\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"xwt-license\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1222\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1225\" componentGuid=\"adcfdf72-5bbd-4b5a-9e0e-5f742d2189e8\">\n        <componentFiles fileId=\"ID_1bc8213a_810d_4062_89ad_e7f29cddd813\" srcName=\"LICENSE-2_0.txt\" srcDirectory=\"..\" dstName=\"LICENSE-2_0.txt\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"LICENSE-2_0\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1224\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1659\" componentGuid=\"05f314c3-1676-4ada-8535-7beb35ab1297\">\n        <componentFiles fileId=\"ID_79493b44_e333_404d_949d_60386f3c8b4f\" srcName=\"zxing.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"zxing.dll\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"zxing\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1658\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1795\" componentGuid=\"aede0b54-3651-4d5c-96e1-32c733b27a6b\">\n        <componentFiles fileId=\"ID_2969c7c6_44c9_47c2_9dff_82c670619555\" srcName=\"EncryptionProvider.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"EncryptionProvider.dll\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"EncryptionProvider\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1794\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1913\" componentGuid=\"bba63854-5ffa-43dc-bb89-26263e274cbe\">\n        <componentFiles fileId=\"ID_06507cef_616f_43cc_927e_b93fb0b26c1a\" srcName=\"ScintillaNET.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\" dstName=\"ScintillaNET.dll\" dstPath=\"\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"ScintillaNET\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1912\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <defaultInstallMode>3</defaultInstallMode>\n    </childFeatures>\n    <defaultInstallMode>3</defaultInstallMode>\n  </projectFeatures>\n  <projectFeatures featureId=\"ID9B106713A3E92B1477BABCABAE633CD6\" featureName=\"Localizations\" featureDescription=\"Interface translations\" configurableDirectory=\"\" enableInDefaultInstall=\"true\" enableInMinimalInstall=\"false\" excludeFromBuild=\"false\">\n    <childFeatures featureId=\"Russian\" featureName=\"Russian\" featureDescription=\"Russian language\" configurableDirectory=\"\" configurableDirectoryDefaultPath=\"\" enableInDefaultInstall=\"true\" enableInMinimalInstall=\"false\" excludeFromBuild=\"false\">\n      <components componentId=\"ID1227\" componentGuid=\"e3283cb5-48ca-4183-87da-e65d1e6912b7\">\n        <componentFiles fileId=\"ID_a86b2a75_6325_41a4_b9c4_e2ef02822f2c\" srcName=\"RdlDesigner.resources.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\\ru-RU\" dstName=\"RdlDesigner.resources.dll\" dstPath=\"[APPLICATIONFOLDER]\\ru-RU\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"RdlDesigner.resources\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1226\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1229\" componentGuid=\"956fd582-18f1-4b8a-ae7e-8002f782f24a\">\n        <componentFiles fileId=\"ID_7756e23c_7397_4766_a433_d39953978c0d\" srcName=\"RdlDesktop.resources.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\\ru-RU\" dstName=\"RdlDesktop.resources.dll\" dstPath=\"[APPLICATIONFOLDER]\\ru-RU\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"RdlDesktop.resources\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1228\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1231\" componentGuid=\"d325613a-a2f4-4f2c-9c57-b03117d8b665\">\n        <componentFiles fileId=\"ID_2120ebed_978e_42ca_8f80_7978bfb759db\" srcName=\"RdlEngine.resources.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\\ru-RU\" dstName=\"RdlEngine.resources.dll\" dstPath=\"[APPLICATIONFOLDER]\\ru-RU\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"RdlEngine.resources\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1230\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1233\" componentGuid=\"7f674809-3195-428f-87b7-122e0b7ea1ab\">\n        <componentFiles fileId=\"ID_384db4ff_ed51_4ca2_a340_24752b37dbac\" srcName=\"RdlMapFile.resources.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\\ru-RU\" dstName=\"RdlMapFile.resources.dll\" dstPath=\"[APPLICATIONFOLDER]\\ru-RU\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"RdlMapFile.resources\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1232\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1235\" componentGuid=\"37356523-eb5d-49eb-9b8c-bf88dc11eacc\">\n        <componentFiles fileId=\"ID_23133ce2_377e_4bf8_851a_d17802e77be5\" srcName=\"RdlReader.resources.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\\ru-RU\" dstName=\"RdlReader.resources.dll\" dstPath=\"[APPLICATIONFOLDER]\\ru-RU\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"RdlReader.resources\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1234\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <components componentId=\"ID1237\" componentGuid=\"e1262433-9ea9-4496-976d-596eee17c1c7\">\n        <componentFiles fileId=\"ID_9a35f8d9_28aa_47cb_8133_633e4841e9d8\" srcName=\"RdlViewer.resources.dll\" srcDirectory=\".\\build-output\\majorsilence-reporting-build-dot-net-4-x86\\ru-RU\" dstName=\"RdlViewer.resources.dll\" dstPath=\"[APPLICATIONFOLDER]\\ru-RU\" isTrueTypeFont=\"false\" isComModule=\"false\" typelibGuid=\"\" menuName=\"RdlViewer.resources\" shortcutInProgramFilesMenu=\"false\" shortcutOnDesktop=\"false\" shortcutInQuickLaunch=\"false\" shortcutInStartupFolder=\"false\" shortcutWorkingDirectory=\"\" shortcutCommandArguments=\"\" shortcutDescription=\"\">\n          <service StartWhenInstalled=\"true\" Remove=\"both\" id=\"ID1236\" isService=\"false\" userAccount=\"\" userPassword=\"\" cmdLineArguments=\"\" errorControl=\"normal\" interactive=\"false\" loadOrderGroup=\"\" serviceName=\"\" startMode=\"auto\" vital=\"true\" />\n          <executeOnInstall>false</executeOnInstall>\n          <executeOnInstallParameters />\n        </componentFiles>\n        <addToCreateFolder>false</addToCreateFolder>\n      </components>\n      <defaultInstallMode>1</defaultInstallMode>\n    </childFeatures>\n    <defaultInstallMode>3</defaultInstallMode>\n  </projectFeatures>\n  <projectInstallForCurrentOrAllUsers>1</projectInstallForCurrentOrAllUsers>\n  <License>\n    <System>true</System>\n    <Name>Apache Software License 2.0</Name>\n  </License>\n  <projectProperties LicencePath=\"\" TopBanner=\"\" BigBanner=\"\" ExclamationIcon=\"\" InfoIcon=\"\" NewIcon=\"\" UpIcon=\"\" VS2003Integration=\"VS2003_INTEGRATION\" VS2005Integration=\"VS2005_INTEGRATION\" UseRelativePaths=\"true\" LaunchAppText=\"\" UseWixUI_ErrorProgressText=\"true\" UseWixUI=\"true\" CreateUninstallShortcut=\"false\" Codepage=\"1252\" ProductLanguage=\"1033\" AlwaysMajorUpgrade=\"true\" SupressValidation=\"false\" Compress=\"true\" BuildTarget=\"true\" PublisherUrl=\"https://github.com/majorsilence/My-FyiReporting\" SupportContact=\"\" SupportUrl=\"https://github.com/majorsilence/My-FyiReporting\" SupportPhone=\"\" ReadMeFile=\"\" UpdateUrl=\"https://github.com/majorsilence/My-FyiReporting\" Comments=\".NET Reporting Solution\" Icon=\"\" EmbedCab=\"true\" MaxCabSize=\"0\" CabCompressionLevel=\"mszip\" InstallerVersion=\"300\">\n    <UiCultures Name=\"en-US\" Enabled=\"true\" />\n    <UiCultures Name=\"de-de\" Enabled=\"false\" />\n    <UiCultures Name=\"es-es\" Enabled=\"false\" />\n    <UiCultures Name=\"nl-nl\" Enabled=\"false\" />\n  </projectProperties>\n</WarSetup-Project>"
  },
  {
    "path": "ReportDesigner/Program.cs",
    "content": "using Majorsilence.Reporting.RdlDesign;\nusing System.Globalization;\n\nnamespace ReportDesigner\n{\n    public class Program\n    {\n\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            string version = typeof(Program).Assembly.GetName().Version.ToString().Replace(\".\", \"\");\n\n            string ipcChannelPortName = string.Format(\"RdlProject{0}\", version);\n            // Determine if an instance is already running?\n            bool firstInstance;\n            string mName = string.Format(\"Local\\\\RdlDesigner{0}\", version);\n            //   can't use Assembly in this context\n            System.Threading.Mutex mutex = new System.Threading.Mutex(false, mName, out firstInstance);\n\n            if (firstInstance)\n            {// just start up the designer when we're first in line\n                var thread = System.Threading.Thread.CurrentThread;\n\n                try\n                {\n                    if (Majorsilence.Reporting.RdlDesign.DialogToolOptions.DesktopConfiguration.Language != null)\n                    {\n                        thread.CurrentCulture = new CultureInfo(DialogToolOptions.DesktopConfiguration.Language);\n                    }\n                    else\n                    {\n                        thread.CurrentCulture = new CultureInfo(thread.CurrentCulture.Name);\n                    }\n                }\n                catch\n                {\n                    thread.CurrentCulture = new CultureInfo(thread.CurrentCulture.Name);\n                }\n\n                if (thread.CurrentCulture.Equals(CultureInfo.InvariantCulture))\n                {\n                    thread.CurrentCulture = new CultureInfo(\"en-US\");\n                }\n                // for working in non-default cultures\n                thread.CurrentCulture.NumberFormat.NumberDecimalSeparator = \".\";\n                thread.CurrentUICulture = thread.CurrentCulture;\n\n                Application.EnableVisualStyles();\n                Application.DoEvents();\n                Application.Run(new RdlDesigner(ipcChannelPortName, true));\n                return;\n            }\n\n            // Process already running.   Notify other process that is might need to open another file\n            string[] args = Environment.GetCommandLineArgs();\n\n        }\n    }\n}"
  },
  {
    "path": "ReportDesigner/ReportDesigner.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFrameworks>net48;net8.0-windows;net10.0-windows</TargetFrameworks>\n    <Nullable>enable</Nullable>\n    <UseWindowsForms>true</UseWindowsForms>\n    <ImplicitUsings>enable</ImplicitUsings>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Data.Sqlite\" />\n\t<PackageReference Include=\"Microsoft.Data.SqlClient\" />\n\t<PackageReference Include=\"MySql.Data\" />\n\t<PackageReference Include=\"Npgsql\" />\n\t<PackageReference Include=\"System.Data.SqlClient\" />\n\t<PackageReference Include=\"System.Data.Odbc\" />\n    <PackageReference Include=\"System.Data.OleDb\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\RdlDesign\\Majorsilence.Reporting.ReportDesigner.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n\t<None Include=\"..\\RdlEngine\\RdlEngineConfig.xml\">\n\t\t<Link>RdlEngineConfig.xml</Link>\n\t\t<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t</None>\n  </ItemGroup>\n\n  <ItemGroup>\n    <Content Include=\"..\\jekyll_site\\schemas\\reporting\\2025\\12\\reportdefinition\\ReportDefinition.xsd\">\n      <Link>ReportDefinition.xsd</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "ReportTests/DatabaseInfo.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace ReportTests\n{\n    public class DatabaseInfo\n    {\n\n        public static string Connection\n        {\n            get\n            {\n                string cwd = System.Environment.CurrentDirectory;\n                string db = System.IO.Path.Combine(cwd, \"northwindEF.db\");\n\n                string cn = String.Format(\"Data Source={0};Version=3;Pooling=True;Max Pool Size=100;\", db);\n                return cn;\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "ReportTests/ExampleTest.cs",
    "content": "using System;\nusing NUnit.Framework;\n\nnamespace ReportTests\n{\n\tpublic class ExampleTest\n\t{\n\n\t\t[Test()]\n\t\tpublic void Test1()\n\t\t{\n\n\t\t\tvar conn = new Majorsilence.Reporting.Data.XmlConnection(\"RdlEngineconfig.xml\");\n\t\t\tAssert.That(conn.Database == null);\n\n\t\t}\n\n\t}\n}\n\n"
  },
  {
    "path": "ReportTests/ExcelValetTests.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing DocumentFormat.OpenXml.Packaging;\nusing DocumentFormat.OpenXml.Validation;\nusing Majorsilence.Reporting.Rdl;\nusing NUnit.Framework;\nusing ReportTests.Utils;\n\nnamespace ReportTests\n{\n    [TestFixture]\n    public class ExcelValetTests\n    {\n\n        private Uri _reportFolder=null;\n        private Uri _outputFolder=null;\n        private string _extOuput = \".xlsx\";\n\n\n        [SetUp]\n        public void Prepare2Tests()\n        {\n            if (_outputFolder==null)\n            {\n                _outputFolder = GeneralUtils.OutputTestsFolder();\n            }\n\n            _reportFolder = GeneralUtils.ReportsFolder();\n\n            Directory.CreateDirectory(_outputFolder.LocalPath);\n\n            RdlEngineConfig.RdlEngineConfigInit();\n        }\n\n        private static readonly object[] TestCasesExcelValetFormat =\n        {\n            new object[]{\"testdata.rdl\",\n                            \"pl-PL\",\n                            \"to_100items\",\n                            new Func<Dictionary<string, IEnumerable>>( () => SampleTestData(100) ) },\n\n            new object[]{\"testdata.rdl\",\n                            \"pl-PL\",\n                            \"to_100items_from_1_10000000_100\",\n                            new Func<Dictionary<string, IEnumerable>>( () => SampleTestData(100,1,10000000,100) ) },\n\n             new object[]{\"testdata.rdl\",\n                            \"en-GB\",\n                            \"to_100items_from_1_10000000_100\",\n                            new Func<Dictionary<string, IEnumerable>>( () => SampleTestData(100,1,10000000,100) ) },\n\n            new object[]{\"testdata.rdl\",\n                            \"en-US\",\n                            \"to_100items_from_1_10000000_100\",\n                            new Func<Dictionary<string, IEnumerable>>( () => SampleTestData(100,1,10000000,100) ) },\n\n            new object[]{\"testdata.rdl\",\n                            \"ru-RU\",\n                            \"to_100items_from_1_10000000_100\",\n                            new Func<Dictionary<string, IEnumerable>>( () => SampleTestData(100,1,10000000,100) ) },\n\n            new object[]{\"testdata.rdl\",\n                            \"ru-RU\",\n                            \"to_100items\",\n                            new Func<Dictionary<string, IEnumerable>>( () => SampleTestData(100) ) },\n\n            new object[]{\"testdata.rdl\",\n                            \"en-GB\",\n                            \"to_100items\",\n                            new Func<Dictionary<string, IEnumerable>>( () => SampleTestData(100) ) },\n\n            new object[]{ \"WorldFacts.rdl\",\n                            \"pl-PL\",\n                            \"general\",\n                            null } //Load data from xml file\n            \n        };\n\n        [Test, TestCaseSource(\"TestCasesExcelValetFormat\")]\n        public async Task ExcelValet_Format(string file2test,\n                                      string cultureName,\n                                      string suffixFileName,\n                                      Func<Dictionary<string, IEnumerable>> fillDatasets)\n        {\n            GeneralUtils.ChangeCurrentCultrue(cultureName);\n            OneFileStreamGen sg = null;\n\n            Uri fileRdlUri = new Uri(_reportFolder, file2test);\n            Report rap = await RdlUtils.GetReport(fileRdlUri);\n            rap.Folder = _reportFolder.LocalPath;\n            if (fillDatasets != null)\n            {\n                Dictionary<string, IEnumerable> dataSets = fillDatasets();\n\n                foreach (var dataset in dataSets)\n                {\n                    await rap.DataSets[dataset.Key].SetData(dataset.Value);\n                }\n            }\n            await rap.RunGetData(null);\n\n            string fileNameOut = string.Format(\"{0}_{1}_{2}{3}\",\n                                                file2test,\n                                                cultureName,\n                                                suffixFileName,\n                                                _extOuput);\n\n            string fullOutputPath = System.IO.Path.Combine(_outputFolder.LocalPath, fileNameOut);\n            sg = new OneFileStreamGen(fullOutputPath, true);\n            await rap.RunRender(sg, OutputPresentationType.ExcelTableOnly);\n\n\n            \n            Assert.That(OpenXmlUtils.ValidateSpreadsheetDocument(fullOutputPath));\n            \n\n            \n        }\n\n        public static Dictionary<string, IEnumerable> SampleTestData(int maxRows,\n                                                                     int minValue=1,\n                                                                     int maxValue=100,\n                                                                     int denominator=100,\n                                                                     string dataSetName = \"Data\")\n        {\n            List<ExcelTestData> values = new List<ExcelTestData>();\n            Dictionary<string, IEnumerable> results = new Dictionary<string, IEnumerable>();\n\n            Random random = new Random();\n            RandomDateTime randomdt = new RandomDateTime(1990, 1, 1);\n\n            for (int i = 0; i < maxRows; i++)\n            {\n                int r = random.Next(minValue, maxValue); \n                decimal result =Convert.ToDecimal( (double)r / denominator);\n                values.Add(new ExcelTestData() {\n                    decimalvalue = result,\n                    datetimevalue = randomdt.Next()\n                });\n            }\n\n            results.Add(dataSetName, values);\n            return results;\n        }\n\n\n       \n    }\n\n    internal class ExcelTestData\n    {\n        public decimal decimalvalue;\n        public DateTime datetimevalue;\n    }\n\n}\n"
  },
  {
    "path": "ReportTests/FunctionTest.cs",
    "content": "﻿using NUnit.Framework;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace ReportTests\n{\n    public class FunctionTest\n    {\n        [Test()]\n        public void Test1()\n        {\n            // disable test.  travis ci does not have x11\n            //string cwd = System.Environment.CurrentDirectory;\n           \n            //var rdlView = new Majorsilence.Reporting.RdlViewer.RdlViewer();\n            //rdlView.SourceFile = new Uri(System.IO.Path.Combine(cwd,\"Reports\", \"FunctionTest.rdl\"));\n            //rdlView.Parameters += string.Format(\"ConnectionString={0}\", DatabaseInfo.Connection);\n            //rdlView.Rebuild();\n\n            ////foreach (string msg in rdlView.ErrorMessages)\n            ////{\n            ////    Assert.True(msg.Contains(\"expression\") == false);\n            ////}\n\n            //string pdf = System.IO.Path.Combine(cwd, \"Test1.pdf\");\n\n            //if (System.IO.File.Exists(pdf))\n            //{\n            //    System.IO.File.Delete(pdf);\n            //}\n\n            //rdlView.SaveAs(pdf, Majorsilence.Reporting.Rdl.OutputPresentationType.PDF);\n\n            \n            \n            //Assert.True(System.IO.File.Exists(pdf));\n\n        }\n    }\n}\n"
  },
  {
    "path": "ReportTests/MajorsilenceDarawingColorTranslatorTests.cs",
    "content": "﻿using NUnit.Framework;\n\nnamespace ReportTests\n{\n    [TestFixture]\n    public class MajorsilenceDarawingColorTranslatorTests\n    {\n        private static readonly (string ColorString, Majorsilence.Drawing.Color ExpectedColor)[] TestColors =\n        {\n            (\"Bisque\", new Majorsilence.Drawing.Color(255, 228, 196)),\n            (\"Red\", new Majorsilence.Drawing.Color(255, 0, 0)),\n            (\"#F00\", new Majorsilence.Drawing.Color(255, 0, 0)),\n            (\"#FF0000\", new Majorsilence.Drawing.Color(255, 0, 0)),\n            (\"#80FF0000\", new Majorsilence.Drawing.Color(128, 255, 0)),\n            (\"#FF5733\", new Majorsilence.Drawing.Color(255, 87, 51)),\n            (\"#80FF5733\", new Majorsilence.Drawing.Color(128, 255, 87, 51)),\n            (\"#000000\", new Majorsilence.Drawing.Color(0, 0, 0)),\n            (\"#FFFFFFFF\", new Majorsilence.Drawing.Color(255, 255, 255)),\n            (\"#123456\", new Majorsilence.Drawing.Color(18, 52, 86)),\n            (\"#7F123456\", new Majorsilence.Drawing.Color(127, 18, 52))\n        };\n        \n        [Test, TestCaseSource(nameof(TestColors))]\n        public void FromHtml_ValidHexWithoutHash_ReturnsCorrectColor((string ColorString, Majorsilence.Drawing.Color ExpectedColor) testCase)\n        {\n            var color = Majorsilence.Drawing.ColorTranslator.FromHtml(testCase.ColorString);\n            Assert.That(color.R, Is.EqualTo(testCase.ExpectedColor.R));\n            Assert.That(color.G, Is.EqualTo(testCase.ExpectedColor.G));\n            Assert.That(color.B, Is.EqualTo(testCase.ExpectedColor.B));\n        }\n    }\n}"
  },
  {
    "path": "ReportTests/RenderPdf_Base64ImageParameter.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\nusing NUnit.Framework;\nusing ReportTests.Utils;\nusing UglyToad.PdfPig;\nusing ZXing;\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\nusing ZXing.SkiaSharp;\n\n#else\nusing System.Drawing;\nusing ZXing.Windows.Compatibility;\n#endif\n\nnamespace ReportTests.Utils\n{\n    [TestFixture]\n    public class RenderPdf_Base64ImageParameter\n    {\n        private Uri _reportFolder = null;\n        private Uri _outputFolder = null;\n\n        [SetUp]\n        public void Prepare2Tests()\n        {\n            if (_outputFolder == null)\n            {\n                _outputFolder = GeneralUtils.OutputTestsFolder();\n            }\n\n            _reportFolder = GeneralUtils.ReportsFolder();\n            Directory.CreateDirectory(_outputFolder.LocalPath);\n            RdlEngineConfig.RdlEngineConfigInit();\n        }\n\n        [Test]\n        public async Task Base64ImageParameterTest()\n        {\n            Uri fileRdlUri = new Uri(_reportFolder, \"barcode.rdl\");\n            // We change dir so the SQL lite database is found\n            System.IO.Directory.SetCurrentDirectory(_reportFolder.LocalPath);\n            Report rap = await RdlUtils.GetReport(fileRdlUri,\n                $\"Data Source={_reportFolder.LocalPath}sqlitetestdb2.db\");\n\n            rap.Folder = _reportFolder.LocalPath;\n\n            var parameters = new Dictionary<string, string>\n            {\n                { \"BarCode\", \"QrCode\" },\n                { \"Logo\", GetBase64Image(System.IO.Path.Combine(_reportFolder.LocalPath, \"logo-example.png\")) }\n            };\n\n            await rap.RunGetData(parameters);\n\n            string fullOutputPath = System.IO.Path.Combine(_outputFolder.LocalPath, $\".pdf\");\n            using var sg = new OneFileStreamGen(fullOutputPath, true);\n            await rap.RunRender(sg, OutputPresentationType.PDF);\n\n            using var pdfDocument = PdfDocument.Open(fullOutputPath);\n            var images = pdfDocument.GetPages().SelectMany(page => page.GetImages()).ToList();\n\n            Assert.Multiple(() =>\n            {\n                Assert.That(images.Count, Is.GreaterThan(0), \"No images found in PDF\");\n            });\n        }\n\n        private string GetBase64Image(string filePath)\n        {\n            byte[] imageBytes = System.IO.File.ReadAllBytes(filePath);\n            return Convert.ToBase64String(imageBytes);\n        }\n    }\n}"
  },
  {
    "path": "ReportTests/RenderPdf_WithBarcodeParameter.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\nusing NUnit.Framework;\nusing ReportTests.Utils;\nusing UglyToad.PdfPig;\nusing ZXing;\n#if DRAWINGCOMPAT\nusing Majorsilence.Drawing;\nusing ZXing.SkiaSharp;\n#else\nusing System.Drawing;\nusing ZXing.Windows.Compatibility;\n#endif\n\nnamespace ReportTests.Utils\n{\n    [TestFixture]\n    public class RenderPdf_WithBarcodeParameter\n    {\n        private Uri _reportFolder = null;\n        private Uri _outputFolder = null;\n\n        [SetUp]\n        public void Prepare2Tests()\n        {\n            if (_outputFolder == null)\n            {\n                _outputFolder = GeneralUtils.OutputTestsFolder();\n            }\n\n            _reportFolder = GeneralUtils.ReportsFolder();\n\n            Directory.CreateDirectory(_outputFolder.LocalPath);\n\n            RdlEngineConfig.RdlEngineConfigInit();\n        }\n\n        private static readonly string[] BarCodeTypes =\n        {\n            \"QrCode\", \"BarCode128\", \"AztecCode\", \"DataMatrix\", \"Pdf417\", \"BarCode39\"\n        };\n\n        [Test, TestCaseSource(nameof(BarCodeTypes))]\n        public async Task RenderPdf_BarcodeTypesViaParameter(string barcodeType)\n        {\n            Uri fileRdlUri = new Uri(_reportFolder, \"barcode.rdl\");\n            // We change dir so the SQL lite database is found\n            System.IO.Directory.SetCurrentDirectory(_reportFolder.LocalPath);\n            Report rap = await RdlUtils.GetReport(fileRdlUri,\n                $\"Data Source={_reportFolder.LocalPath}sqlitetestdb2.db\");\n\n            rap.Folder = _reportFolder.LocalPath;\n\n            var parameters = new Dictionary<string, string> { { \"BaRcOdEtYpE\", barcodeType } };\n\n            await rap.RunGetData(parameters);\n\n            string fullOutputPath = System.IO.Path.Combine(_outputFolder.LocalPath, $\"{barcodeType}.pdf\");\n            using var sg = new OneFileStreamGen(fullOutputPath, true);\n            await rap.RunRender(sg, OutputPresentationType.PDF);\n\n            using var pdfDocument = PdfDocument.Open(fullOutputPath);\n            var images = pdfDocument.GetPages().SelectMany(page => page.GetImages()).ToList();\n\n            Assert.Multiple(() =>\n            {\n                Assert.That(images.Count, Is.GreaterThan(0), \"No images found in PDF\");\n\n                foreach (var image in images)\n                {\n#if DRAWINGCOMPAT\n                    var reader = new ZXing.SkiaSharp.BarcodeReader();\n#elif NET6_0_OR_GREATER\n                    var reader = new ZXing.Windows.Compatibility.BarcodeReader();\n#else\n                    var reader = new ZXing.BarcodeReader();\n#endif\n                    using var ms = new MemoryStream(image.RawBytes.ToArray());\n                    using var barcodeBitmap = new Bitmap(ms);\n                    var result = reader.Decode(barcodeBitmap);\n\n                    Assert.That(result, Is.Not.Null);\n\n                    switch (barcodeType)\n                    {\n                        case \"QrCode\":\n                            Assert.That(result.BarcodeFormat,\n                                Is.EqualTo(BarcodeFormat.QR_CODE),\n                                \"No QrCode image found in PDF\");\n                            break;\n                        case \"BarCode128\":\n                            Assert.That(result.BarcodeFormat,\n                                Is.EqualTo(BarcodeFormat.CODE_128),\n                                \"No BarCode128 image found in PDF\");\n                            break;\n                        case \"AztecCode\":\n                            Assert.That(result.BarcodeFormat,\n                                Is.EqualTo(BarcodeFormat.AZTEC),\n                                \"No AztecCode image found in PDF\");\n                            break;\n                        case \"DataMatrix\":\n                            Assert.That(result.BarcodeFormat,\n                                Is.EqualTo(BarcodeFormat.DATA_MATRIX),\n                                \"No DataMatrix image found in PDF\");\n                            break;\n                        case \"Pdf417\":\n                            Assert.That(result.BarcodeFormat,\n                                Is.EqualTo(BarcodeFormat.PDF_417),\n                                \"No Pdf417 image found in PDF\");\n                            break;\n                        case \"BarCode39\":\n                            Assert.That(result.BarcodeFormat,\n                                Is.EqualTo(BarcodeFormat.CODE_39),\n                                \"No BarCode39 image found in PDF\");\n                            break;\n                        default:\n                            Assert.Fail($\"Unknown barcode type: {barcodeType}\");\n                            break;\n                    }\n                }\n            });\n        }\n    }\n}"
  },
  {
    "path": "ReportTests/RenderPdf_iTextSharpTests.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing DocumentFormat.OpenXml.Packaging;\nusing DocumentFormat.OpenXml.Validation;\nusing Majorsilence.Reporting.Rdl;\nusing NUnit.Framework;\nusing ReportTests.Utils;\n\nnamespace ReportTests.Utils\n{\n    [TestFixture]\n    public class RenderPdf_iTextSharpTests\n    {\n        private Uri _reportFolder = null;\n        private Uri _outputFolder = null;\n        private string _extOuput = \".pdf\";\n\n\n        [SetUp]\n        public void Prepare2Tests()\n        {\n            if (_outputFolder == null)\n            {\n                _outputFolder = GeneralUtils.OutputTestsFolder();\n            }\n\n            _reportFolder = GeneralUtils.ReportsFolder();\n\n            Directory.CreateDirectory(_outputFolder.LocalPath);\n\n            RdlEngineConfig.RdlEngineConfigInit();\n        }\n\n        private static readonly object[] TestCasesRenderPdf_iTextSharpDraw =\n        {\n            new object[]{\"LineObjects.rdl\",\n                            \"en-US\",\n                            \"RenderPdf_iTextSharp\",\n                            null },\n            new object[]{ \"WorldFacts.rdl\",\n                            \"pl-PL\",\n                            \"RenderPdf_iTextSharp\",\n                            null }, //Load data from xml file\n            new object[]{ \"ChartTypes.rdl\",\n                            \"en-US\",\n                            \"RenderPdf_iTextSharp\",\n                            null } ,//Load data from sqlite\n            new object[]{ \"MatrixExample.rdl\",\n                            \"en-US\",\n                            \"RenderPdf_iTextSharp\",\n                            null }, //Load data from sqlite\n            new object[]{ \"ListReport.rdl\",\n                            \"en-US\",\n                            \"RenderPdf_iTextSharp\",\n                            null } //Load data from sqlite\n      \n      \n      \n\n        };\n\n        [Test, TestCaseSource(\"TestCasesRenderPdf_iTextSharpDraw\")]\n        public async Task RenderPdf_iTextSharpDraw(string file2test,\n                                      string cultureName,\n                                      string suffixFileName,\n                                      Func<Dictionary<string, IEnumerable>> fillDatasets)\n        {\n            GeneralUtils.ChangeCurrentCultrue(cultureName);\n            OneFileStreamGen sg = null;\n\n            Uri fileRdlUri = new Uri(_reportFolder, file2test);\n            // We change dir so the SQL lite database is found\n            System.IO.Directory.SetCurrentDirectory(_reportFolder.LocalPath);\n            Report rap = await RdlUtils.GetReport(fileRdlUri);\n            rap.Folder = _reportFolder.LocalPath;\n            if (fillDatasets != null)\n            {\n                Dictionary<string, IEnumerable> dataSets = fillDatasets();\n\n                foreach (var dataset in dataSets)\n                {\n                    await rap.DataSets[dataset.Key].SetData(dataset.Value);\n                }\n            }\n            await rap.RunGetData(null);\n\n            string fileNameOut = string.Format(\"{0}_{1}_{2}{3}\",\n                                                file2test,\n                                                cultureName,\n                                                suffixFileName,\n                                                _extOuput);\n\n            string fullOutputPath = System.IO.Path.Combine(_outputFolder.LocalPath, fileNameOut);\n            sg = new OneFileStreamGen(fullOutputPath, true);\n            await rap.RunRender(sg, OutputPresentationType.RenderPdf_iTextSharp);\n        }\n\n    }\n}\n"
  },
  {
    "path": "ReportTests/ReportDefnDisposeTest.cs",
    "content": "using NUnit.Framework;\nusing System;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\nusing ReportTests.Utils;\n\nnamespace ReportTests\n{\n    /// <summary>\n    /// Tests for ReportDefn IDisposable implementation\n    /// </summary>\n    [TestFixture]\n    public class ReportDefnDisposeTest\n    {\n        private Uri _reportFolder = null;\n\n        [SetUp]\n        public void Prepare2Tests()\n        {\n            _reportFolder = GeneralUtils.ReportsFolder();\n            RdlEngineConfig.RdlEngineConfigInit();\n        }\n\n        [Test]\n        public async Task Report_Dispose_ShouldNotThrow()\n        {\n            // Arrange\n            Uri fileRdlUri = new Uri(_reportFolder, \"testdata.rdl\");\n            \n            // Act\n            Report report = await RdlUtils.GetReport(fileRdlUri);\n            \n            // Assert - Should not throw when disposing Report\n            Assert.DoesNotThrow(() => report.Dispose());\n            \n            // Call Dispose again to verify it handles multiple calls\n            Assert.DoesNotThrow(() => report.Dispose());\n        }\n\n        [Test]\n        public async Task Report_UsingStatement_ShouldNotThrow()\n        {\n            // Arrange\n            Uri fileRdlUri = new Uri(_reportFolder, \"testdata.rdl\");\n            \n            // Act & Assert - Should not throw when disposing via using statement\n            Assert.DoesNotThrowAsync(async () =>\n            {\n                using (Report report = await RdlUtils.GetReport(fileRdlUri))\n                {\n                    // Use the report\n                    Assert.That(report, Is.Not.Null);\n                }\n            });\n        }\n\n        [Test]\n        public async Task Report_WithMultipleReports_Dispose_ShouldNotThrow()\n        {\n            // Arrange\n            Uri fileRdlUri1 = new Uri(_reportFolder, \"testdata.rdl\");\n            Uri fileRdlUri2 = new Uri(_reportFolder, \"ListReport.rdl\");\n            \n            // Act\n            Report report1 = await RdlUtils.GetReport(fileRdlUri1);\n            Report report2 = await RdlUtils.GetReport(fileRdlUri2);\n            \n            // Assert - Should not throw when disposing multiple reports\n            Assert.DoesNotThrow(() => \n            {\n                report1.Dispose();\n                report2.Dispose();\n            });\n        }\n\n        [Test]\n        public async Task Report_AfterDispose_SecondDispose_ShouldNotThrow()\n        {\n            // Arrange\n            Uri fileRdlUri = new Uri(_reportFolder, \"testdata.rdl\");\n            Report report = await RdlUtils.GetReport(fileRdlUri);\n            \n            // Act - Dispose multiple times\n            report.Dispose();\n            \n            // Assert - Second dispose should not throw\n            Assert.DoesNotThrow(() => report.Dispose());\n        }\n    }\n}\n"
  },
  {
    "path": "ReportTests/ReportTests.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\t<PropertyGroup>\n\t\t<OutputType>Library</OutputType>\n\t\t<Configurations>Debug;Release;Debug-DrawingCompat;Release-DrawingCompat</Configurations>\n\t\t<TargetFrameworks>net48;net8.0;net10.0</TargetFrameworks>\n        <TargetFrameworks Condition=\"'$(OS)' == 'Unix'\">net8.0;net10.0</TargetFrameworks>\n\t\t<WarningsAsErrors>4014</WarningsAsErrors>\n\t\t<Platforms>AnyCPU</Platforms>\n\t</PropertyGroup>\n\t<ItemGroup>\n\t\t<ProjectReference Include=\"..\\DataProviders\\Majorsilence.Reporting.DataProviders.csproj\" />\n\t\t<ProjectReference Include=\"..\\Majorsilence.Drawing.Common\\Majorsilence.Drawing.Common.csproj\" />\n\t\t<ProjectReference Include=\"..\\RdlCmd\\RdlCmd.csproj\" />\n\t\t<ProjectReference Include=\"..\\RdlCri\\Majorsilence.Reporting.RdlCri.csproj\" />\n\t\t<ProjectReference Include=\"..\\RdlEngine\\Majorsilence.Reporting.RdlEngine.csproj\" />\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<None Update=\"Reports\\BaseTestReport.rdl\">\n\t\t\t<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t\t</None>\n\t\t<None Update=\"Reports\\ListReport.rdl\">\n\t\t\t<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t\t</None>\n\t\t<None Update=\"Reports\\MatrixExample.rdl\">\n\t\t\t<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t\t</None>\n\t\t<None Update=\"Reports\\testdata.rdl\">\n\t\t\t<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t\t</None>\n\t\t<None Update=\"Reports\\WorldFacts.rdl\">\n\t\t\t<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t\t</None>\n\t\t<None Update=\"Reports\\FunctionTest.rdl\">\n\t\t\t<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t\t</None>\n\t\t<None Include=\"..\\Examples\\northwindEF.db\">\n\t\t\t<Link>Reports\\northwindEF.db</Link>\n\t\t\t<CopyToOutputDirectory>Always</CopyToOutputDirectory>\n\t\t</None>\n        <None Include=\"..\\Examples\\SqliteExamples\\sqlitetestdb2.db\">\n            <Link>Reports\\sqlitetestdb2.db</Link>\n            <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n        </None>\n\t\t<None Update=\"Reports\\LineObjects.rdl\">\n\t\t\t<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t\t</None>\n\t\t<None Update=\"Reports\\ChartTypes.rdl\">\n\t\t\t<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t\t</None>\n\t\t<None Update=\"Reports\\logo-example.png\">\n\t\t  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t\t</None>\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<None Include=\"..\\RdlEngine\\RdlEngineConfig.xml\">\n\t\t\t<Link>RdlEngineConfig.xml</Link>\n\t\t\t<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t\t</None>\n\t\t<None Include=\"..\\Examples\\SqliteExamples\\barcode.rdl\">\n\t\t  <Link>Reports\\barcode.rdl</Link>\n\t\t  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t\t</None>\n\t\t<Content Include=\"Reports\\WorldFacts.xml\">\n\t\t\t<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n\t\t</Content>\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<Service Include=\"{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}\" />\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<PackageReference Include=\"DocumentFormat.OpenXml\" />\n\t\t<PackageReference Include=\"Microsoft.Data.SqlClient\" />\n\t\t<PackageReference Include=\"Microsoft.Data.Sqlite\" />\n\t\t<PackageReference Include=\"Microsoft.NET.Test.Sdk\" />\n\t\t<PackageReference Include=\"Npgsql\" />\n\t\t<PackageReference Include=\"NUnit\" />\n\t\t<PackageReference Include=\"NUnit3TestAdapter\" />\n\t\t<PackageReference Include=\"coverlet.collector\" />\n\t\t<PackageReference Include=\"PdfPig\" />\n\t\t<PackageReference Include=\"SharpZipLib\" />\n\t</ItemGroup>\n</Project>"
  },
  {
    "path": "ReportTests/Reports/BaseTestReport.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\" xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>11in</PageHeight>\n  <PageWidth>8.5in</PageWidth>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone, Fax FROM Customers</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"CustomerID\">\n          <DataField>CustomerID</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CompanyName\">\n          <DataField>CompanyName</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"ContactName\">\n          <DataField>ContactName</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"ContactTitle\">\n          <DataField>ContactTitle</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Address\">\n          <DataField>Address</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"City\">\n          <DataField>City</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Region\">\n          <DataField>Region</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"PostalCode\">\n          <DataField>PostalCode</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Country\">\n          <DataField>Country</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Phone\">\n          <DataField>Phone</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Fax\">\n          <DataField>Fax</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>.5in</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Top>.02in</Top>\n        <Left>.1in</Left>\n        <Width>6in</Width>\n        <Height>.25in</Height>\n        <Value>Base Test Report</Value>\n        <Style>\n          <FontSize>15pt</FontSize>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle  />\n          <BorderColor  />\n          <BorderWidth  />\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox2\">\n        <Top>.3in</Top>\n        <Left>0.0in</Left>\n        <Width>1.25in</Width>\n        <Height>.2in</Height>\n        <Value>CustomerID</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox3\">\n        <Top>.3in</Top>\n        <Left>1.25in</Left>\n        <Width>1.375in</Width>\n        <Height>.2in</Height>\n        <Value>CompanyName</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox4\">\n        <Top>.3in</Top>\n        <Left>2.625in</Left>\n        <Width>1.375in</Width>\n        <Height>.2in</Height>\n        <Value>ContactName</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox5\">\n        <Top>.3in</Top>\n        <Left>4.000in</Left>\n        <Width>1.5in</Width>\n        <Height>.2in</Height>\n        <Value>ContactTitle</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox6\">\n        <Top>.3in</Top>\n        <Left>5.500in</Left>\n        <Width>1in</Width>\n        <Height>.2in</Height>\n        <Value>Address</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox7\">\n        <Top>.3in</Top>\n        <Left>6.500in</Left>\n        <Width>1in</Width>\n        <Height>.2in</Height>\n        <Value>City</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox8\">\n        <Top>.3in</Top>\n        <Left>7.500in</Left>\n        <Width>1in</Width>\n        <Height>.2in</Height>\n        <Value>Region</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox9\">\n        <Top>.3in</Top>\n        <Left>8.500in</Left>\n        <Width>1.25in</Width>\n        <Height>.2in</Height>\n        <Value>PostalCode</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox10\">\n        <Top>.3in</Top>\n        <Left>9.750in</Left>\n        <Width>1in</Width>\n        <Height>.2in</Height>\n        <Value>Country</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox11\">\n        <Top>.3in</Top>\n        <Left>10.750in</Left>\n        <Width>1in</Width>\n        <Height>.2in</Height>\n        <Value>Phone</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox12\">\n        <Top>.3in</Top>\n        <Left>11.750in</Left>\n        <Width>1in</Width>\n        <Height>.2in</Height>\n        <Value>Fax</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>25pt</Height>\n    <ReportItems>\n      <List Name=\"List1\">\n        <DataSetName>Data</DataSetName>\n        <Height>24pt</Height>\n        <NoRows>Query returned no rows!</NoRows>\n        <ReportItems>\n          <Textbox Name=\"CustomerID\">\n            <Top>.1in</Top>\n            <Left>0.0in</Left>\n            <Width>1.25in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!CustomerID.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"CompanyName\">\n            <Top>.1in</Top>\n            <Left>1.25in</Left>\n            <Width>1.375in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!CompanyName.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"ContactName\">\n            <Top>.1in</Top>\n            <Left>2.625in</Left>\n            <Width>1.375in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!ContactName.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"ContactTitle\">\n            <Top>.1in</Top>\n            <Left>4.000in</Left>\n            <Width>1.5in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!ContactTitle.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"Address\">\n            <Top>.1in</Top>\n            <Left>5.500in</Left>\n            <Width>1in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!Address.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"City\">\n            <Top>.1in</Top>\n            <Left>6.500in</Left>\n            <Width>1in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!City.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"Region\">\n            <Top>.1in</Top>\n            <Left>7.500in</Left>\n            <Width>1in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!Region.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"PostalCode\">\n            <Top>.1in</Top>\n            <Left>8.500in</Left>\n            <Width>1.25in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!PostalCode.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"Country\">\n            <Top>.1in</Top>\n            <Left>9.750in</Left>\n            <Width>1in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!Country.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"Phone\">\n            <Top>.1in</Top>\n            <Left>10.750in</Left>\n            <Width>1in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!Phone.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"Fax\">\n            <Top>.1in</Top>\n            <Left>11.750in</Left>\n            <Width>1in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!Fax.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n        </ReportItems>\n        <Width>12.750in</Width>\n      </List>\n    </ReportItems>\n  </Body>\n  <PageFooter>\n    <Height>14pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox13\">\n        <Top>1pt</Top>\n        <Left>10pt</Left>\n        <Height>12pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n  <ReportParameters>\n    <ReportParameter Name=\"ConnectionString\">\n      <DataType>String</DataType>\n      <Nullable>false</Nullable>\n      <AllowBlank>false</AllowBlank>\n      <MultiValue>false</MultiValue>\n      <Prompt>Enter a connection string</Prompt>\n    </ReportParameter>\n  </ReportParameters>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQLite</DataProvider>\n        <ConnectString>={?ConnectionString}</ConnectString>\n        <IntegratedSecurity>false</IntegratedSecurity>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n</Report>"
  },
  {
    "path": "ReportTests/Reports/ChartTypes.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>8.5 in</PageHeight>\n  <PageWidth>11 in</PageWidth>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n      </Query>\n      <Fields>\n        <Field Name=\"Region\">\n          <DataField>Region</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"State\">\n          <DataField>State</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Year\">\n          <DataField>Year</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Qtr\">\n          <DataField>Qtr</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Sales\">\n          <DataField>Sales</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <Rows>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>50</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>36</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>42</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>27</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>19</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>10</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>34</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>32</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>28</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>9</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>20</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>11</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>16</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>47</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>37</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>5</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>48</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>5</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>44</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>7</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>43</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>31</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>41</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>45</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>24</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>30</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>43</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>27</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>18</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>34</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>6</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>33</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>20</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>16</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>22</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>34</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>12</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>20</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>10</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>15</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>30</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>32</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>13</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>11</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>50</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>39</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>13</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>9</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>24</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>15</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>36</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>25</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>11</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>22</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>13</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>18</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>25</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>28</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>49</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>7</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>8</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>24</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>37</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>32</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>36</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>10</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>26</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>18</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>26</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>15</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>44</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>22</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>48</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>30</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>24</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>25</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>16</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>5</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>32</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>5</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>6</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>28</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>39</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>42</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>39</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>28</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>39</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>40</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>41</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>9</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>25</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>37</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>16</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>40</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>40</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>45</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>27</Sales>\n        </Row>\n      </Rows>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>0.0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>553.6pt</Height>\n    <ReportItems>\n      <Matrix Name=\"Matrix1\">\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor>\n            <Default>blue</Default>\n          </BorderColor>\n          <BackgroundColor>yellow</BackgroundColor>\n          <BorderWidth />\n        </Style>\n        <Corner>\n          <ReportItems>\n            <Textbox Name=\"Corner\">\n              <Value>Region\\Year</Value>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Left>1pt</Left>\n                  <Right>1pt</Right>\n                  <Top>1pt</Top>\n                  <Bottom>1pt</Bottom>\n                </BorderWidth>\n                <FontWeight>Bold</FontWeight>\n                <BorderColor />\n                <FontStyle>Normal</FontStyle>\n                <FontFamily>Arial</FontFamily>\n                <FontSize>10pt</FontSize>\n                <TextDecoration>None</TextDecoration>\n                <TextAlign>Left</TextAlign>\n                <VerticalAlign>Middle</VerticalAlign>\n                <Color>Black</Color>\n                <Direction>LTR</Direction>\n                <WritingMode>lr-tb</WritingMode>\n              </Style>\n            </Textbox>\n          </ReportItems>\n        </Corner>\n        <ColumnGroupings>\n          <ColumnGrouping>\n            <Height>12.1pt</Height>\n            <DynamicColumns Name=\"DynamicColumns1\">\n              <Grouping Name=\"colGrouping1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Year\">\n                  <Value>=\"\" + Fields!Year.Value + \" = \"+ Sum(Fields!Sales.Value)</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>1pt</Left>\n                      <Right>1pt</Right>\n                      <Top>1pt</Top>\n                      <Bottom>1pt</Bottom>\n                      <Default>1pt</Default>\n                    </BorderWidth>\n                    <FontWeight>Bold</FontWeight>\n                    <FontStyle>Normal</FontStyle>\n                    <FontFamily>Arial</FontFamily>\n                    <FontSize>10pt</FontSize>\n                    <TextDecoration>None</TextDecoration>\n                    <TextAlign>Center</TextAlign>\n                    <VerticalAlign>Middle</VerticalAlign>\n                    <Color>Black</Color>\n                    <Direction>LTR</Direction>\n                    <WritingMode>lr-tb</WritingMode>\n                    <BorderColor />\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox1\">\n                    <Value>Column Grand Total </Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>1pt</Left>\n                        <Right>1pt</Right>\n                        <Top>1pt</Top>\n                        <Bottom>1pt</Bottom>\n                        <Default>1pt</Default>\n                      </BorderWidth>\n                      <FontWeight>Bold</FontWeight>\n                      <FontStyle>Normal</FontStyle>\n                      <FontFamily>Arial</FontFamily>\n                      <FontSize>10pt</FontSize>\n                      <TextDecoration>None</TextDecoration>\n                      <TextAlign>Center</TextAlign>\n                      <VerticalAlign>Middle</VerticalAlign>\n                      <Color>Black</Color>\n                      <Direction>LTR</Direction>\n                      <WritingMode>lr-tb</WritingMode>\n                      <BorderColor />\n                    </Style>\n                    <CanGrow>True</CanGrow>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n        </ColumnGroupings>\n        <RowGroupings>\n          <RowGrouping>\n            <Width>82.1pt</Width>\n            <DynamicRows Name=\"DynamicRows1\">\n              <Grouping Name=\"rowGrouping1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Region\">\n                  <Value>=Fields!Region.Value</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>1pt</Left>\n                      <Right>1pt</Right>\n                      <Top>1pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>Bold</FontWeight>\n                    <BorderColor />\n                    <FontStyle>Normal</FontStyle>\n                    <FontFamily>Arial</FontFamily>\n                    <FontSize>10pt</FontSize>\n                    <TextDecoration>None</TextDecoration>\n                    <TextAlign>General</TextAlign>\n                    <VerticalAlign>Middle</VerticalAlign>\n                    <Color>Black</Color>\n                    <Direction>LTR</Direction>\n                    <WritingMode>lr-tb</WritingMode>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox2\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>1pt</Left>\n                        <Right>1pt</Right>\n                        <Top>1pt</Top>\n                        <Bottom>1pt</Bottom>\n                        <Default>1pt</Default>\n                      </BorderWidth>\n                      <FontWeight>Bold</FontWeight>\n                      <BorderColor />\n                      <FontStyle>Normal</FontStyle>\n                      <FontFamily>Arial</FontFamily>\n                      <FontSize>10pt</FontSize>\n                      <TextDecoration>None</TextDecoration>\n                      <TextAlign>General</TextAlign>\n                      <VerticalAlign>Middle</VerticalAlign>\n                      <Color>Black</Color>\n                      <Direction>LTR</Direction>\n                      <WritingMode>lr-tb</WritingMode>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n        </RowGroupings>\n        <MatrixRows>\n          <MatrixRow>\n            <Height>15.7pt</Height>\n            <MatrixCells>\n              <MatrixCell>\n                <ReportItems>\n                  <Textbox Name=\"SumSales\">\n                    <Value>=sum(Fields!Sales.Value)</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                      <BorderColor />\n                      <TextAlign>Center</TextAlign>\n                      <VerticalAlign>Middle</VerticalAlign>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </MatrixCell>\n            </MatrixCells>\n          </MatrixRow>\n        </MatrixRows>\n        <MatrixColumns>\n          <MatrixColumn>\n            <Width>1 in</Width>\n          </MatrixColumn>\n        </MatrixColumns>\n        <Left>40.7pt</Left>\n        <Top>450.0pt</Top>\n      </Matrix>\n      <Chart Name=\"Chart1\">\n        <Height>144.00pt</Height>\n        <Width>288.00pt</Width>\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BackgroundColor>White</BackgroundColor>\n          <BackgroundGradientType>LeftRight</BackgroundGradientType>\n          <BackgroundGradientEndColor>Azure</BackgroundGradientEndColor>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Type>Column</Type>\n        <Subtype>Plain</Subtype>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"DynamicCategoriesGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <CategoryAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Region</Caption>\n              <Style>\n                <BorderStyle />\n                <BorderColor />\n                <BorderWidth />\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </CategoryAxis>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"DynamicSeriesGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <ValueAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <FontSize>8pt</FontSize>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Sales</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </ValueAxis>\n        <Legend>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <PaddingLeft>5pt</PaddingLeft>\n            <FontSize>8pt</FontSize>\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Visible>True</Visible>\n          <Position>RightCenter</Position>\n        </Legend>\n        <Title>\n          <Style>\n            <FontWeight>Bold</FontWeight>\n            <FontSize>14pt</FontSize>\n            <TextAlign>Center</TextAlign>\n            <BorderStyle />\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Caption>Region Year Chart</Caption>\n        </Title>\n        <Left>40.6pt</Left>\n        <Top>2.7pt</Top>\n      </Chart>\n      <Chart Name=\"Chart2\">\n        <Height>111.62pt</Height>\n        <Width>288.00pt</Width>\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BackgroundColor>White</BackgroundColor>\n          <BackgroundGradientType>LeftRight</BackgroundGradientType>\n          <BackgroundGradientEndColor>Azure</BackgroundGradientEndColor>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Type>Area</Type>\n        <Subtype>Stacked</Subtype>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"DynamicCategoriesGroup2\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <CategoryAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Region</Caption>\n              <Style>\n                <BorderStyle />\n                <BorderColor />\n                <BorderWidth />\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </CategoryAxis>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"DynamicSeriesGroup2\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <ValueAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <FontSize>8pt</FontSize>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Sales</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n            <MajorInterval>200</MajorInterval>\n          </Axis>\n        </ValueAxis>\n        <Legend>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <PaddingLeft>5pt</PaddingLeft>\n            <FontSize>8pt</FontSize>\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Visible>True</Visible>\n          <Position>RightCenter</Position>\n        </Legend>\n        <Title>\n          <Style>\n            <FontWeight>Bold</FontWeight>\n            <FontSize>14pt</FontSize>\n            <TextAlign>Center</TextAlign>\n            <BorderStyle />\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Caption>Region Year Chart</Caption>\n        </Title>\n        <Left>378.00pt</Left>\n        <Top>2.70pt</Top>\n      </Chart>\n      <Chart Name=\"Chart3\">\n        <Height>144.00pt</Height>\n        <Width>288.00pt</Width>\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BackgroundColor>White</BackgroundColor>\n          <BackgroundGradientType>LeftRight</BackgroundGradientType>\n          <BackgroundGradientEndColor>Azure</BackgroundGradientEndColor>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Type>Bar</Type>\n        <Subtype>Plain</Subtype>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"DynamicCategoriesGroup3\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <CategoryAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Region</Caption>\n              <Style>\n                <BorderStyle />\n                <BorderColor />\n                <BorderWidth />\n                <WritingMode>tb-rl</WritingMode>\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </CategoryAxis>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"DynamicSeriesGroup3\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <ValueAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <FontSize>8pt</FontSize>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Sales</Caption>\n              <Style>\n                <WritingMode>lr-tb</WritingMode>\n                <BorderStyle />\n                <BorderColor />\n                <BorderWidth />\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </ValueAxis>\n        <Legend>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <PaddingLeft>5pt</PaddingLeft>\n            <FontSize>8pt</FontSize>\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Visible>True</Visible>\n          <Position>RightCenter</Position>\n        </Legend>\n        <Title>\n          <Style>\n            <FontWeight>Bold</FontWeight>\n            <FontSize>14pt</FontSize>\n            <TextAlign>Center</TextAlign>\n            <BorderStyle />\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Caption>Region Year Chart</Caption>\n        </Title>\n        <Left>40.6pt</Left>\n        <Top>151.3pt</Top>\n      </Chart>\n      <Chart Name=\"Chart4\">\n        <Height>118.42pt</Height>\n        <Width>288.00pt</Width>\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BackgroundColor>White</BackgroundColor>\n          <BackgroundGradientType>LeftRight</BackgroundGradientType>\n          <BackgroundGradientEndColor>Azure</BackgroundGradientEndColor>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Type>Line</Type>\n        <Subtype>Smooth</Subtype>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"DynamicCategoriesGroup4\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <CategoryAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Region</Caption>\n              <Style>\n                <BorderStyle />\n                <BorderColor />\n                <BorderWidth />\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </CategoryAxis>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"DynamicSeriesGroup4\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <ValueAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <FontSize>8pt</FontSize>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Sales</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n            <MajorInterval>100</MajorInterval>\n          </Axis>\n        </ValueAxis>\n        <Legend>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <PaddingLeft>5pt</PaddingLeft>\n            <FontSize>8pt</FontSize>\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Visible>True</Visible>\n          <Position>RightCenter</Position>\n        </Legend>\n        <Title>\n          <Style>\n            <FontWeight>Bold</FontWeight>\n            <FontSize>14pt</FontSize>\n            <TextAlign>Center</TextAlign>\n            <BorderStyle />\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Caption>Region Year Chart</Caption>\n        </Title>\n        <Left>378.00pt</Left>\n        <Top>131.50pt</Top>\n      </Chart>\n      <Chart Name=\"Chart5\">\n        <Height>144.00pt</Height>\n        <Width>288.00pt</Width>\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BackgroundColor>White</BackgroundColor>\n          <BackgroundGradientType>LeftRight</BackgroundGradientType>\n          <BackgroundGradientEndColor>Azure</BackgroundGradientEndColor>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Type>Pie</Type>\n        <Subtype>Plain</Subtype>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"DynamicCategoriesGroup5\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <CategoryAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Region</Caption>\n              <Style>\n                <BorderStyle />\n                <BorderColor />\n                <BorderWidth />\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </CategoryAxis>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"DynamicSeriesGroup5\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <ValueAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <FontSize>8pt</FontSize>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Sales</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </ValueAxis>\n        <Legend>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <PaddingLeft>5pt</PaddingLeft>\n            <FontSize>8pt</FontSize>\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Visible>True</Visible>\n          <Position>RightCenter</Position>\n        </Legend>\n        <Title>\n          <Style>\n            <FontWeight>Bold</FontWeight>\n            <FontSize>14pt</FontSize>\n            <TextAlign>Center</TextAlign>\n            <BorderStyle />\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Caption>Region Year Chart</Caption>\n        </Title>\n        <Left>40.6pt</Left>\n        <Top>300.2pt</Top>\n      </Chart>\n      <Textbox Name=\"Textbox4\">\n        <Height>62.49pt</Height>\n        <Width>21.06pt</Width>\n        <Value>Column</Value>\n        <Left>9.70pt</Left>\n        <Top>31.20pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <WritingMode>tb-rl</WritingMode>\n          <FontWeight>Bold</FontWeight>\n          <FontSize>14pt</FontSize>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox5\">\n        <Height>62.49pt</Height>\n        <Width>21.06pt</Width>\n        <Value>Bar</Value>\n        <Left>9.70pt</Left>\n        <Top>171.69pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <WritingMode>tb-rl</WritingMode>\n          <FontWeight>Bold</FontWeight>\n          <FontSize>14pt</FontSize>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox6\">\n        <Height>118.21pt</Height>\n        <Width>23.31pt</Width>\n        <Value>Area - Stacked</Value>\n        <Left>345.60pt</Left>\n        <Top>0.00pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <WritingMode>tb-rl</WritingMode>\n          <FontWeight>Bold</FontWeight>\n          <FontSize>14pt</FontSize>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox7\">\n        <Height>111.41pt</Height>\n        <Width>27.83pt</Width>\n        <Value>Line - Smooth</Value>\n        <Left>341.08pt</Left>\n        <Top>130.90pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <WritingMode>tb-rl</WritingMode>\n          <FontWeight>Bold</FontWeight>\n          <FontSize>14pt</FontSize>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox8\">\n        <Height>62.49pt</Height>\n        <Width>21.06pt</Width>\n        <Value>Pie</Value>\n        <Left>9.70pt</Left>\n        <Top>313.97pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <WritingMode>tb-rl</WritingMode>\n          <FontWeight>Bold</FontWeight>\n          <FontSize>14pt</FontSize>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox9\">\n        <Height>62.49pt</Height>\n        <Width>21.06pt</Width>\n        <Value>Matrix</Value>\n        <Left>9.7pt</Left>\n        <Top>462.5pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <WritingMode>tb-rl</WritingMode>\n          <FontWeight>Bold</FontWeight>\n          <FontSize>14pt</FontSize>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox10\">\n        <Height>100.90pt</Height>\n        <Width>24.06pt</Width>\n        <Value>Doughnut</Value>\n        <Left>344.85pt</Left>\n        <Top>261.40pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <WritingMode>tb-rl</WritingMode>\n          <FontWeight>Bold</FontWeight>\n          <FontSize>14pt</FontSize>\n        </Style>\n      </Textbox>\n      <Chart Name=\"Chart6\">\n        <Height>113.17pt</Height>\n        <Width>288.00pt</Width>\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BackgroundColor>White</BackgroundColor>\n          <BackgroundGradientType>LeftRight</BackgroundGradientType>\n          <BackgroundGradientEndColor>Azure</BackgroundGradientEndColor>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Type>Doughnut</Type>\n        <Subtype>Plain</Subtype>\n        <CategoryGroupings>\n          <CategoryGrouping>\n            <DynamicCategories>\n              <Grouping Name=\"DynamicCategoriesGroup6\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n            </DynamicCategories>\n          </CategoryGrouping>\n        </CategoryGroupings>\n        <CategoryAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Region</Caption>\n              <Style>\n                <BorderStyle />\n                <BorderColor />\n                <BorderWidth />\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </CategoryAxis>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"DynamicSeriesGroup6\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Year.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <ValueAxis>\n          <Axis>\n            <Visible>True</Visible>\n            <MajorTickMarks>Inside</MajorTickMarks>\n            <MajorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <FontSize>8pt</FontSize>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <ShowGridLines>True</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <Title>\n              <Caption>Sales</Caption>\n              <Style>\n                <WritingMode>tb-rl</WritingMode>\n              </Style>\n            </Title>\n            <Style>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n          </Axis>\n        </ValueAxis>\n        <Legend>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <PaddingLeft>5pt</PaddingLeft>\n            <FontSize>8pt</FontSize>\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Visible>True</Visible>\n          <Position>RightCenter</Position>\n        </Legend>\n        <Title>\n          <Style>\n            <FontWeight>Bold</FontWeight>\n            <FontSize>14pt</FontSize>\n            <TextAlign>Center</TextAlign>\n            <BorderStyle />\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Caption>Region Year Chart</Caption>\n        </Title>\n        <Left>378.00pt</Left>\n        <Top>262.00pt</Top>\n      </Chart>\n      <Textbox Name=\"Textbox3\">\n        <Height>111.41pt</Height>\n        <Width>27.83pt</Width>\n        <Value>Bubble</Value>\n        <Left>341.1pt</Left>\n        <Top>386.0pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <WritingMode>tb-rl</WritingMode>\n          <FontWeight>Bold</FontWeight>\n          <FontSize>14pt</FontSize>\n        </Style>\n      </Textbox>\n      <Chart Name=\"Chart7\">\n        <Height>157.13pt</Height>\n        <Width>281.92pt</Width>\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Legend>\n          <Visible>true</Visible>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BorderColor />\n            <BorderWidth />\n          </Style>\n          <Position>BottomCenter</Position>\n          <Layout>Table</Layout>\n          <InsidePlotArea>false</InsidePlotArea>\n        </Legend>\n        <Subtype>Plain</Subtype>\n        <Title />\n        <CategoryAxis>\n          <Axis>\n            <Title>\n              <Caption>Sales</Caption>\n              <Style>\n                <FontWeight>700</FontWeight>\n              </Style>\n            </Title>\n            <Style>\n              <FontFamily>Verdana</FontFamily>\n              <FontSize>8pt</FontSize>\n              <Format>C0</Format>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n            </Style>\n            <MajorGridLines>\n              <ShowGridLines>true</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n              </Style>\n            </MinorGridLines>\n            <MajorTickMarks>Outside</MajorTickMarks>\n            <Visible>true</Visible>\n            <Scalar>true</Scalar>\n          </Axis>\n        </CategoryAxis>\n        <PointWidth>0</PointWidth>\n        <ThreeDProperties>\n          <Rotation>30</Rotation>\n          <Inclination>30</Inclination>\n          <Shading>Simple</Shading>\n          <WallThickness>50</WallThickness>\n        </ThreeDProperties>\n        <SeriesGroupings>\n          <SeriesGrouping>\n            <DynamicSeries>\n              <Grouping Name=\"DynamicSeriesGroup7\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value + \" \" + Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <Label>=Fields!Region.Value + \" \" + Fields!Year.Value</Label>\n            </DynamicSeries>\n          </SeriesGrouping>\n        </SeriesGroupings>\n        <PlotArea>\n          <Style>\n            <BorderStyle>\n              <Default>Solid</Default>\n            </BorderStyle>\n            <BackgroundColor>LightGoldenrodYellow</BackgroundColor>\n            <BackgroundGradientEndColor>WhiteSmoke</BackgroundGradientEndColor>\n            <BackgroundGradientType>TopBottom</BackgroundGradientType>\n          </Style>\n        </PlotArea>\n        <ValueAxis>\n          <Axis>\n            <Title>\n              <Caption>Year</Caption>\n              <Style>\n                <FontWeight>700</FontWeight>\n                <WritingMode>tb-rl</WritingMode>\n                <BorderStyle />\n                <BorderColor />\n                <BorderWidth />\n              </Style>\n            </Title>\n            <Style>\n              <FontFamily>Verdana</FontFamily>\n              <FontSize>8pt</FontSize>\n              <BorderStyle />\n              <BorderColor />\n              <BorderWidth />\n              <BackgroundColor>Black</BackgroundColor>\n            </Style>\n            <MajorGridLines>\n              <ShowGridLines>true</ShowGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderColor>\n                  <Default>Black</Default>\n                </BorderColor>\n                <BorderWidth>\n                  <Default>1pt</Default>\n                </BorderWidth>\n              </Style>\n            </MajorGridLines>\n            <MinorGridLines>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderColor>\n                  <Default>Black</Default>\n                </BorderColor>\n                <BorderWidth>\n                  <Default>1pt</Default>\n                </BorderWidth>\n              </Style>\n              <ShowGridLines>false</ShowGridLines>\n            </MinorGridLines>\n            <MajorTickMarks>None</MajorTickMarks>\n            <Min>1992</Min>\n            <MajorInterval>1</MajorInterval>\n            <Margin>true</Margin>\n            <Visible>true</Visible>\n            <Scalar>true</Scalar>\n            <Max>1995</Max>\n          </Axis>\n        </ValueAxis>\n        <Type>Bubble</Type>\n        <Palette>Default</Palette>\n        <ChartData>\n          <ChartSeries>\n            <DataPoints>\n              <DataPoint>\n                <DataValues>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                  <DataValue>\n                    <Value>=Fields!Year.Value</Value>\n                  </DataValue>\n                  <DataValue>\n                    <Value>=Sum(Fields!Sales.Value)</Value>\n                  </DataValue>\n                </DataValues>\n                <DataLabel />\n                <Marker>\n                  <Size>6pt</Size>\n                </Marker>\n              </DataPoint>\n            </DataPoints>\n          </ChartSeries>\n        </ChartData>\n        <Style>\n          <BackgroundColor>White</BackgroundColor>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <BackgroundGradientEndColor>Azure</BackgroundGradientEndColor>\n          <BackgroundGradientType>LeftRight</BackgroundGradientType>\n        </Style>\n        <Left>378.00pt</Left>\n        <Top>384.70pt</Top>\n      </Chart>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>7in</Width>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQLite</DataProvider>\n        <ConnectString>Data Source=northwindEF.db</ConnectString>\n        <IntegratedSecurity>false</IntegratedSecurity>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n</Report>"
  },
  {
    "path": "ReportTests/Reports/FunctionTest.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\" xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>11in</PageHeight>\n  <PageWidth>8.5in</PageWidth>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>SELECT CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone, Fax FROM Customers</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"CustomerID\">\n          <DataField>CustomerID</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"CompanyName\">\n          <DataField>CompanyName</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"ContactName\">\n          <DataField>ContactName</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"ContactTitle\">\n          <DataField>ContactTitle</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Address\">\n          <DataField>Address</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"City\">\n          <DataField>City</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Region\">\n          <DataField>Region</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"PostalCode\">\n          <DataField>PostalCode</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Country\">\n          <DataField>Country</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Phone\">\n          <DataField>Phone</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n        <Field Name=\"Fax\">\n          <DataField>Fax</DataField>\n          <rd:TypeName>System.String</rd:TypeName>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>.5in</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Top>.02in</Top>\n        <Left>.1in</Left>\n        <Width>6in</Width>\n        <Height>.25in</Height>\n        <Value>Function Test</Value>\n        <Style>\n          <FontSize>15pt</FontSize>\n          <FontWeight>Bold</FontWeight>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox2\">\n        <Top>.3in</Top>\n        <Left>0.0in</Left>\n        <Width>1.25in</Width>\n        <Height>.2in</Height>\n        <Value>CustomerID</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox3\">\n        <Top>.3in</Top>\n        <Left>1.25in</Left>\n        <Width>1.375in</Width>\n        <Height>.2in</Height>\n        <Value>CompanyName</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox4\">\n        <Top>.3in</Top>\n        <Left>2.625in</Left>\n        <Width>1.375in</Width>\n        <Height>.2in</Height>\n        <Value>ContactName</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox5\">\n        <Top>.3in</Top>\n        <Left>4.000in</Left>\n        <Width>1.5in</Width>\n        <Height>.2in</Height>\n        <Value>ContactTitle</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox6\">\n        <Top>.3in</Top>\n        <Left>5.500in</Left>\n        <Width>1in</Width>\n        <Height>.2in</Height>\n        <Value>Address</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox7\">\n        <Top>.3in</Top>\n        <Left>6.500in</Left>\n        <Width>1in</Width>\n        <Height>.2in</Height>\n        <Value>City</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox8\">\n        <Top>.3in</Top>\n        <Left>7.500in</Left>\n        <Width>1in</Width>\n        <Height>.2in</Height>\n        <Value>Region</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox9\">\n        <Top>.3in</Top>\n        <Left>8.500in</Left>\n        <Width>1.25in</Width>\n        <Height>.2in</Height>\n        <Value>PostalCode</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox10\">\n        <Top>.3in</Top>\n        <Left>9.750in</Left>\n        <Width>1in</Width>\n        <Height>.2in</Height>\n        <Value>Country</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox11\">\n        <Top>.3in</Top>\n        <Left>10.750in</Left>\n        <Width>1in</Width>\n        <Height>.2in</Height>\n        <Value>Phone</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox12\">\n        <Top>.3in</Top>\n        <Left>11.750in</Left>\n        <Width>1in</Width>\n        <Height>.2in</Height>\n        <Value>Fax</Value>\n        <Style>\n          <FontWeight>Bold</FontWeight>\n          <BorderStyle>\n            <Bottom>Solid</Bottom>\n          </BorderStyle>\n          <BorderWidth>\n            <Bottom>3pt</Bottom>\n          </BorderWidth>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>25pt</Height>\n    <ReportItems>\n      <List Name=\"List1\">\n        <DataSetName>Data</DataSetName>\n        <Height>24pt</Height>\n        <NoRows>Query returned no rows!</NoRows>\n        <ReportItems>\n          <Textbox Name=\"CustomerID\">\n            <Top>.1in</Top>\n            <Left>0.0in</Left>\n            <Width>1.25in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!CustomerID.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"CompanyName\">\n            <Top>.1in</Top>\n            <Left>1.25in</Left>\n            <Width>1.375in</Width>\n            <Height>.25in</Height>\n            <Value>=Mid(Fields!CompanyName.Value, 1, 3)</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"ContactName\">\n            <Top>.1in</Top>\n            <Left>2.625in</Left>\n            <Width>1.375in</Width>\n            <Height>.25in</Height>\n            <Value>=Left(Fields!ContactName.Value, 4)</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"ContactTitle\">\n            <Top>.1in</Top>\n            <Left>4.000in</Left>\n            <Width>1.5in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!ContactTitle.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"Address\">\n            <Top>.1in</Top>\n            <Left>5.500in</Left>\n            <Width>1in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!Address.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"City\">\n            <Top>.1in</Top>\n            <Left>6.500in</Left>\n            <Width>1in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!City.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"Region\">\n            <Top>.1in</Top>\n            <Left>7.500in</Left>\n            <Width>1in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!Region.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"PostalCode\">\n            <Top>.1in</Top>\n            <Left>8.500in</Left>\n            <Width>1.25in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!PostalCode.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"Country\">\n            <Top>.1in</Top>\n            <Left>9.750in</Left>\n            <Width>1in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!Country.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"Phone\">\n            <Top>.1in</Top>\n            <Left>10.750in</Left>\n            <Width>1in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!Phone.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n          <Textbox Name=\"Fax\">\n            <Top>.1in</Top>\n            <Left>11.750in</Left>\n            <Width>1in</Width>\n            <Height>.25in</Height>\n            <Value>=Fields!Fax.Value</Value>\n            <CanGrow>true</CanGrow>\n            <Style>\n              <PaddingLeft>2pt</PaddingLeft>\n            </Style>\n          </Textbox>\n        </ReportItems>\n        <Width>12.750in</Width>\n      </List>\n    </ReportItems>\n  </Body>\n  <PageFooter>\n    <Height>14pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox13\">\n        <Top>1pt</Top>\n        <Left>10pt</Left>\n        <Height>12pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n  <ReportParameters>\n    <ReportParameter Name=\"ConnectionString\">\n      <DataType>String</DataType>\n      <Nullable>false</Nullable>\n      <AllowBlank>false</AllowBlank>\n      <MultiValue>false</MultiValue>\n      <Prompt>Enter a connection string</Prompt>\n    </ReportParameter>\n  </ReportParameters>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQLite</DataProvider>\n        <ConnectString>={?ConnectionString}</ConnectString>\n        <IntegratedSecurity>false</IntegratedSecurity>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n</Report>"
  },
  {
    "path": "ReportTests/Reports/LineObjects.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\" xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description>Test lines </Description>\n  <Author>\n  </Author>\n  <PageHeight>11in</PageHeight>\n  <PageWidth>8.5in</PageWidth>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <PageHeader>\n    <Height>0.0pt</Height>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>412.1pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Height>11.26pt</Height>\n        <Width>575.24pt</Width>\n        <Value>dotted</Value>\n        <ZIndex>1</ZIndex>\n        <Left>2.0pt</Left>\n        <Top>0.1pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <TextAlign>Center</TextAlign>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox2\">\n        <Height>12pt</Height>\n        <Width>0.5in</Width>\n        <Value>1pt</Value>\n        <ZIndex>1</ZIndex>\n        <Left>11.9pt</Left>\n        <Top>12.6pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n      <Line Name=\"Line1\">\n        <Height>-0.04pt</Height>\n        <Width>518.09pt</Width>\n        <Style>\n          <BorderStyle>\n            <Default>Dotted</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Left>55.71pt</Left>\n        <Top>18.87pt</Top>\n      </Line>\n      <Textbox Name=\"Textbox3\">\n        <Height>12pt</Height>\n        <Width>0.5in</Width>\n        <Value>2pt</Value>\n        <ZIndex>2</ZIndex>\n        <Left>11.9pt</Left>\n        <Top>22.6pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n      <Line Name=\"Line2\">\n        <Height>-0.04pt</Height>\n        <Width>518.09pt</Width>\n        <Style>\n          <BorderStyle>\n            <Default>Dotted</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth>\n            <Default>2pt</Default>\n          </BorderWidth>\n        </Style>\n        <Left>55.8pt</Left>\n        <Top>28.1pt</Top>\n      </Line>\n      <Textbox Name=\"Textbox4\">\n        <Height>12pt</Height>\n        <Width>0.5in</Width>\n        <Value>3pt</Value>\n        <ZIndex>3</ZIndex>\n        <Left>11.9pt</Left>\n        <Top>32.6pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n      <Line Name=\"Line3\">\n        <Height>-0.04pt</Height>\n        <Width>518.09pt</Width>\n        <Style>\n          <BorderStyle>\n            <Default>Dotted</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth>\n            <Default>3pt</Default>\n          </BorderWidth>\n        </Style>\n        <Left>55.8pt</Left>\n        <Top>38.1pt</Top>\n      </Line>\n      <Textbox Name=\"Textbox5\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>12pt</Height>\n        <Width>0.5in</Width>\n        <Value>4pt</Value>\n        <ZIndex>3</ZIndex>\n        <Left>12.0pt</Left>\n        <Top>43.8pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n      <Line Name=\"Line4\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>-0.04pt</Height>\n        <Width>518.09pt</Width>\n        <Style>\n          <BorderStyle>\n            <Default>Dotted</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth>\n            <Default>4pt</Default>\n          </BorderWidth>\n        </Style>\n        <Left>55.9pt</Left>\n        <Top>49.3pt</Top>\n      </Line>\n      <Textbox Name=\"Textbox6\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>12pt</Height>\n        <Width>0.5in</Width>\n        <Value>5pt</Value>\n        <ZIndex>3</ZIndex>\n        <Left>10.9pt</Left>\n        <Top>56.0pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n      <Line Name=\"Line5\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>-0.04pt</Height>\n        <Width>518.09pt</Width>\n        <Style>\n          <BorderStyle>\n            <Default>Dotted</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth>\n            <Default>5pt</Default>\n          </BorderWidth>\n        </Style>\n        <Left>54.8pt</Left>\n        <Top>61.5pt</Top>\n      </Line>\n      <Textbox Name=\"Textbox7\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>12pt</Height>\n        <Width>0.5in</Width>\n        <Value>6pt</Value>\n        <ZIndex>3</ZIndex>\n        <Left>11.9pt</Left>\n        <Top>69.7pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n      <Line Name=\"Line6\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>-0.04pt</Height>\n        <Width>518.09pt</Width>\n        <Style>\n          <BorderStyle>\n            <Default>Dotted</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth>\n            <Default>6pt</Default>\n          </BorderWidth>\n        </Style>\n        <Left>55.8pt</Left>\n        <Top>75.2pt</Top>\n      </Line>\n      <Textbox Name=\"Textbox8\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>12pt</Height>\n        <Width>0.5in</Width>\n        <Value>7pt</Value>\n        <ZIndex>3</ZIndex>\n        <Left>11.6pt</Left>\n        <Top>83.7pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n      <Line Name=\"Line7\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>-0.04pt</Height>\n        <Width>518.09pt</Width>\n        <Style>\n          <BorderStyle>\n            <Default>Dotted</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth>\n            <Default>7pt</Default>\n          </BorderWidth>\n        </Style>\n        <Left>55.5pt</Left>\n        <Top>89.2pt</Top>\n      </Line>\n      <Textbox Name=\"Textbox9\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>12pt</Height>\n        <Width>0.5in</Width>\n        <Value>8pt</Value>\n        <ZIndex>3</ZIndex>\n        <Left>12.8pt</Left>\n        <Top>97.8pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n      <Line Name=\"Line8\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>-0.04pt</Height>\n        <Width>518.09pt</Width>\n        <Style>\n          <BorderStyle>\n            <Default>Dotted</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth>\n            <Default>8pt</Default>\n          </BorderWidth>\n        </Style>\n        <Left>56.7pt</Left>\n        <Top>103.3pt</Top>\n      </Line>\n      <Textbox Name=\"Textbox10\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>12pt</Height>\n        <Width>0.5in</Width>\n        <Value>9pt</Value>\n        <ZIndex>3</ZIndex>\n        <Left>13.4pt</Left>\n        <Top>112.0pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n      <Line Name=\"Line9\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>-0.04pt</Height>\n        <Width>518.09pt</Width>\n        <Style>\n          <BorderStyle>\n            <Default>Dotted</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth>\n            <Default>9pt</Default>\n          </BorderWidth>\n        </Style>\n        <Left>55.6pt</Left>\n        <Top>116.7pt</Top>\n      </Line>\n      <Textbox Name=\"Textbox11\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>11.26pt</Height>\n        <Width>575.24pt</Width>\n        <Value>dashed</Value>\n        <ZIndex>1</ZIndex>\n        <Left>3.2pt</Left>\n        <Top>143.1pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <TextAlign>Center</TextAlign>\n        </Style>\n      </Textbox>\n      <Textbox Name=\"Textbox12\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>12pt</Height>\n        <Width>0.5in</Width>\n        <Value>1pt</Value>\n        <ZIndex>1</ZIndex>\n        <Left>11.6pt</Left>\n        <Top>155.6pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n      <Line Name=\"Line10\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>-0.04pt</Height>\n        <Width>518.09pt</Width>\n        <Style>\n          <BorderStyle>\n            <Default>Dashed</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <Left>55.4pt</Left>\n        <Top>161.9pt</Top>\n      </Line>\n      <Textbox Name=\"Textbox13\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>12pt</Height>\n        <Width>0.5in</Width>\n        <Value>2pt</Value>\n        <ZIndex>2</ZIndex>\n        <Left>11.6pt</Left>\n        <Top>165.6pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n      <Line Name=\"Line11\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>-0.04pt</Height>\n        <Width>518.09pt</Width>\n        <Style>\n          <BorderStyle>\n            <Default>Dashed</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth>\n            <Default>2pt</Default>\n          </BorderWidth>\n        </Style>\n        <Left>55.5pt</Left>\n        <Top>171.1pt</Top>\n      </Line>\n      <Textbox Name=\"Textbox14\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>12pt</Height>\n        <Width>0.5in</Width>\n        <Value>3pt</Value>\n        <ZIndex>3</ZIndex>\n        <Left>11.6pt</Left>\n        <Top>175.6pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n      <Line Name=\"Line12\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>-0.04pt</Height>\n        <Width>518.09pt</Width>\n        <Style>\n          <BorderStyle>\n            <Default>Dashed</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth>\n            <Default>3pt</Default>\n          </BorderWidth>\n        </Style>\n        <Left>55.5pt</Left>\n        <Top>181.1pt</Top>\n      </Line>\n      <Textbox Name=\"Textbox15\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>12pt</Height>\n        <Width>0.5in</Width>\n        <Value>4pt</Value>\n        <ZIndex>3</ZIndex>\n        <Left>11.7pt</Left>\n        <Top>186.8pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n      <Line Name=\"Line13\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>-0.04pt</Height>\n        <Width>518.09pt</Width>\n        <Style>\n          <BorderStyle>\n            <Default>Dashed</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth>\n            <Default>4pt</Default>\n          </BorderWidth>\n        </Style>\n        <Left>55.6pt</Left>\n        <Top>192.3pt</Top>\n      </Line>\n      <Textbox Name=\"Textbox16\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>12pt</Height>\n        <Width>0.5in</Width>\n        <Value>5pt</Value>\n        <ZIndex>3</ZIndex>\n        <Left>10.6pt</Left>\n        <Top>199.0pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n      <Line Name=\"Line14\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>-0.04pt</Height>\n        <Width>518.09pt</Width>\n        <Style>\n          <BorderStyle>\n            <Default>Dashed</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth>\n            <Default>5pt</Default>\n          </BorderWidth>\n        </Style>\n        <Left>54.5pt</Left>\n        <Top>204.5pt</Top>\n      </Line>\n      <Textbox Name=\"Textbox17\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>12pt</Height>\n        <Width>0.5in</Width>\n        <Value>6pt</Value>\n        <ZIndex>3</ZIndex>\n        <Left>11.6pt</Left>\n        <Top>212.7pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n      <Line Name=\"Line15\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>-0.04pt</Height>\n        <Width>518.09pt</Width>\n        <Style>\n          <BorderStyle>\n            <Default>Dashed</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth>\n            <Default>6pt</Default>\n          </BorderWidth>\n        </Style>\n        <Left>55.5pt</Left>\n        <Top>218.2pt</Top>\n      </Line>\n      <Textbox Name=\"Textbox18\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>12pt</Height>\n        <Width>0.5in</Width>\n        <Value>7pt</Value>\n        <ZIndex>3</ZIndex>\n        <Left>11.3pt</Left>\n        <Top>226.7pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n      <Line Name=\"Line16\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>-0.04pt</Height>\n        <Width>518.09pt</Width>\n        <Style>\n          <BorderStyle>\n            <Default>Dashed</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth>\n            <Default>7pt</Default>\n          </BorderWidth>\n        </Style>\n        <Left>55.2pt</Left>\n        <Top>232.2pt</Top>\n      </Line>\n      <Textbox Name=\"Textbox19\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>12pt</Height>\n        <Width>0.5in</Width>\n        <Value>8pt</Value>\n        <ZIndex>3</ZIndex>\n        <Left>12.5pt</Left>\n        <Top>240.8pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n      <Line Name=\"Line17\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>-0.04pt</Height>\n        <Width>518.09pt</Width>\n        <Style>\n          <BorderStyle>\n            <Default>Dashed</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth>\n            <Default>8pt</Default>\n          </BorderWidth>\n        </Style>\n        <Left>56.4pt</Left>\n        <Top>246.3pt</Top>\n      </Line>\n      <Textbox Name=\"Textbox20\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>12pt</Height>\n        <Width>0.5in</Width>\n        <Value>9pt</Value>\n        <ZIndex>3</ZIndex>\n        <Left>13.1pt</Left>\n        <Top>255.0pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n      </Textbox>\n      <Line Name=\"Line18\" xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n        <Height>-0.04pt</Height>\n        <Width>518.09pt</Width>\n        <Style>\n          <BorderStyle>\n            <Default>Dashed</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth>\n            <Default>9pt</Default>\n          </BorderWidth>\n        </Style>\n        <Left>55.3pt</Left>\n        <Top>259.7pt</Top>\n      </Line>\n    </ReportItems>\n    <Columns >1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>14pt</Height>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n  <DataElementName >Report</DataElementName>\n  <DataElementStyle >AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "ReportTests/Reports/ListReport.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"EmployeeReport\">\n  <Description>This is the very first report</Description>\n  <Author>Kim A, Sheffield</Author>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQLite</DataProvider>\n        <ConnectString>Data Source=northwindEF.db;Version=3;</ConnectString>\n        <IntegratedSecurity>false</IntegratedSecurity>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>Select EmployeeID, LastName, FirstName from Employees</CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"EmployeeID\">\n          <DataField>EmployeeID</DataField>\n        </Field>\n        <Field Name=\"LastName\">\n          <DataField>LastName</DataField>\n        </Field>\n        <Field Name=\"FirstName\">\n          <DataField>FirstName</DataField>\n        </Field>\n      </Fields>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>31.7pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox8\">\n        <Height>20.4pt</Height>\n        <Width>320.1pt</Width>\n        <Value>List Report Showing Absolute Positioning</Value>\n        <Left>31.5pt</Left>\n        <Top>5.25pt</Top>\n        <Style>\n          <BorderStyle />\n          <BorderColor />\n          <BorderWidth />\n          <FontStyle>Normal</FontStyle>\n          <FontFamily>Arial</FontFamily>\n          <FontWeight>Bold</FontWeight>\n          <FontSize>14pt</FontSize>\n          <TextDecoration>None</TextDecoration>\n          <TextAlign>General</TextAlign>\n          <VerticalAlign>Top</VerticalAlign>\n          <Color>Black</Color>\n          <Direction>LTR</Direction>\n          <WritingMode>lr-tb</WritingMode>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>96.9pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Top>0 in</Top>\n        <Left>.5 in</Left>\n        <Width>1 in</Width>\n        <Height>.25 in</Height>\n        <Value>Employee ID </Value>\n        <Action>\n          <Hyperlink>http://www.fyireporting.com</Hyperlink>\n        </Action>\n      </Textbox>\n      <Textbox Name=\"Textbox2\">\n        <Top>0 in</Top>\n        <Left>1.5 in</Left>\n        <Width>1 in</Width>\n        <Height>.25 in</Height>\n        <Value>Last Name </Value>\n      </Textbox>\n      <Textbox Name=\"Textbox3\">\n        <Top>.25 in</Top>\n        <Left>2.5 in</Left>\n        <Width>1 in</Width>\n        <Height>.25 in</Height>\n        <Value>First Name --</Value>\n      </Textbox>\n      <List Name=\"List1\">\n        <Top>.75 in</Top>\n        <Height>.5 in</Height>\n        <ReportItems>\n          <Textbox Name=\"Textbox4\">\n            <Top>0 in</Top>\n            <Left>.5 in</Left>\n            <Width>1 in</Width>\n            <Height>.25 in</Height>\n            <Value>=Fields!EmployeeID.Value</Value>\n          </Textbox>\n          <Textbox Name=\"Textbox5\">\n            <Top>0 in</Top>\n            <Left>1.5 in</Left>\n            <Width>1 in</Width>\n            <Height>.25 in</Height>\n            <Value>=Fields!LastName.Value</Value>\n            <Action>\n              <Hyperlink>=\"http://www.google.com/search?q=\" + Fields!LastName.Value</Hyperlink>\n            </Action>\n          </Textbox>\n          <Textbox Name=\"Textbox6\">\n            <Top>0 in</Top>\n            <Left>2.5 in</Left>\n            <Width>1 in</Width>\n            <Height>.25 in</Height>\n            <Value>=Fields!FirstName.Value</Value>\n          </Textbox>\n          <Textbox Name=\"Textbox7\">\n            <Top>.25 in</Top>\n            <Left>.5 in</Left>\n            <Width>2 in</Width>\n            <Height>.25 in</Height>\n            <Value>=Fields!FirstName.Value+\" \"+Fields!LastName.Value</Value>\n          </Textbox>\n        </ReportItems>\n      </List>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>8in</Width>\n  <PageWidth>8.5in</PageWidth>\n  <PageHeight>11in</PageHeight>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n</Report>"
  },
  {
    "path": "ReportTests/Reports/MatrixExample.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>8.5 in</PageHeight>\n  <PageWidth>11 in</PageWidth>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n      </Query>\n      <Fields>\n        <Field Name=\"Region\">\n          <DataField>Region</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"State\">\n          <DataField>State</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Year\">\n          <DataField>Year</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Qtr\">\n          <DataField>Qtr</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Sales\">\n          <DataField>Sales</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <Rows>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>50</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>36</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>42</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>27</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>19</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>10</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>MA</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>34</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>32</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>28</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>9</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>20</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>11</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>16</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>RI</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>47</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>37</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>5</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>48</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>5</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>44</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>7</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>43</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>CT</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>31</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>41</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>45</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>24</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>30</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>43</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>27</Sales>\n        </Row>\n        <Row>\n          <Region>New England</Region>\n          <State>ME</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>18</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>34</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>6</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>33</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>20</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>16</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>WI</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>22</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>34</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>12</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>20</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>10</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>MI</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>15</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>30</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>32</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>13</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>11</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>50</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>KS</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>39</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>13</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>9</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>21</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>24</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>15</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>36</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>25</Sales>\n        </Row>\n        <Row>\n          <Region>Central</Region>\n          <State>TX</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>11</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>22</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>13</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>18</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>25</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>28</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>49</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>CA</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>7</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>8</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>24</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>37</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>32</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>36</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>10</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>26</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>OR</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>18</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>26</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>15</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>44</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>22</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>48</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>30</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>24</Sales>\n        </Row>\n        <Row>\n          <Region>West</Region>\n          <State>WA</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>25</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>16</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>5</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>35</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>32</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>5</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>6</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>FL</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>28</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>39</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>42</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>39</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>28</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>39</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>40</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>41</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>LA</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>9</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1993</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>25</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1993</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>37</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1993</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>16</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1993</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>40</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1994</Year>\n          <Qtr>Q1</Qtr>\n          <Sales>40</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1994</Year>\n          <Qtr>Q2</Qtr>\n          <Sales>45</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1994</Year>\n          <Qtr>Q3</Qtr>\n          <Sales>29</Sales>\n        </Row>\n        <Row>\n          <Region>South</Region>\n          <State>NC</State>\n          <Year>1994</Year>\n          <Qtr>Q4</Qtr>\n          <Sales>27</Sales>\n        </Row>\n      </Rows>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>0.7pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>6 in</Height>\n    <ReportItems>\n      <Matrix Name=\"Matrix1\">\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor>\n            <Default>blue</Default>\n          </BorderColor>\n          <BackgroundColor>yellow</BackgroundColor>\n        </Style>\n        <Corner>\n          <ReportItems>\n            <Textbox Name=\"Corner\">\n              <Value>Region\\Year</Value>\n              <Style>\n                <BorderStyle>\n                  <Default>Solid</Default>\n                </BorderStyle>\n                <BorderWidth>\n                  <Left>0pt</Left>\n                  <Right>1pt</Right>\n                  <Top>0pt</Top>\n                  <Bottom>1pt</Bottom>\n                </BorderWidth>\n                <FontWeight>bold</FontWeight>\n              </Style>\n            </Textbox>\n          </ReportItems>\n        </Corner>\n        <ColumnGroupings>\n          <ColumnGrouping>\n            <Height>24.5pt</Height>\n            <DynamicColumns>\n              <Grouping Name=\"DynamicColumnsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Year\">\n                  <Value>=\"\" + Fields!Year.Value + \" = \"+ Sum(Fields!Sales.Value)</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox1\">\n                    <Value>Column Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n        </ColumnGroupings>\n        <RowGroupings>\n          <RowGrouping>\n            <Width>1 in</Width>\n            <DynamicRows>\n              <Grouping Name=\"DynamicRowsGroup1\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Region\">\n                  <Value>=Fields!Region.Value</Value>\n                  <Style>\n                    <BorderStyle>\n                      <Default>Solid</Default>\n                    </BorderStyle>\n                    <BorderWidth>\n                      <Left>0pt</Left>\n                      <Right>1pt</Right>\n                      <Top>0pt</Top>\n                      <Bottom>1pt</Bottom>\n                    </BorderWidth>\n                    <FontWeight>bold</FontWeight>\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox2\">\n                    <Value>Grand Total</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n        </RowGroupings>\n        <MatrixRows>\n          <MatrixRow>\n            <Height>0.25in</Height>\n            <MatrixCells>\n              <MatrixCell>\n                <ReportItems>\n                  <Textbox Name=\"SumSales\">\n                    <Value>=sum(Fields!Sales.Value)</Value>\n                    <Style>\n                      <BorderStyle>\n                        <Default>Solid</Default>\n                      </BorderStyle>\n                      <BorderWidth>\n                        <Left>0pt</Left>\n                        <Right>1pt</Right>\n                        <Top>0pt</Top>\n                        <Bottom>1pt</Bottom>\n                      </BorderWidth>\n                      <FontWeight>bold</FontWeight>\n                    </Style>\n                  </Textbox>\n                </ReportItems>\n              </MatrixCell>\n            </MatrixCells>\n          </MatrixRow>\n        </MatrixRows>\n        <MatrixColumns>\n          <MatrixColumn>\n            <Width>1 in</Width>\n          </MatrixColumn>\n        </MatrixColumns>\n        <Left>7.1pt</Left>\n        <Top>4.7pt</Top>\n      </Matrix>\n      <Matrix Name=\"Matrix2\">\n        <Corner>\n          <ReportItems>\n            <Textbox Name=\"ACorner\">\n              <Value>=\"Total: \" + sum(Fields!Sales.Value)</Value>\n              <Style>\n                <BorderStyle />\n                <BorderColor />\n                <BorderWidth />\n              </Style>\n            </Textbox>\n          </ReportItems>\n        </Corner>\n        <ColumnGroupings>\n          <ColumnGrouping>\n            <Height>23.8pt</Height>\n            <DynamicColumns>\n              <Grouping Name=\"DynamicColumnsGroup2\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Year.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Textbox3\">\n                  <Value>=Fields!Year.Value</Value>\n                  <Style>\n                    <BorderStyle />\n                    <BorderColor />\n                    <BorderWidth />\n                  </Style>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox4\">\n                    <Value>=\"Total= \" + sum(Fields!Sales.Value)</Value>\n                    <Style>\n                      <BorderStyle />\n                      <BorderColor />\n                      <BorderWidth />\n                    </Style>\n                    <CanGrow>True</CanGrow>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n          <ColumnGrouping>\n            <Height>22.0pt</Height>\n            <DynamicColumns>\n              <Grouping Name=\"DynamicColumnsGroup3\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Qtr.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Textbox5\">\n                  <Value>=Fields!Qtr.Value</Value>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox6\">\n                    <Value>Total</Value>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicColumns>\n          </ColumnGrouping>\n        </ColumnGroupings>\n        <RowGroupings>\n          <RowGrouping>\n            <Width>1 in</Width>\n            <DynamicRows>\n              <Grouping Name=\"DynamicRowsGroup2\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!Region.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Textbox7\">\n                  <Value>=Fields!Region.Value</Value>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox8\">\n                    <Value>=\" Total \" + sum(Fields!Sales.Value)</Value>\n                    <Style>\n                      <BorderStyle />\n                      <BorderColor />\n                      <BorderWidth />\n                    </Style>\n                    <CanGrow>True</CanGrow>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n          <RowGrouping>\n            <Width>1 in</Width>\n            <DynamicRows>\n              <Grouping Name=\"DynamicRowsGroup3\">\n                <GroupExpressions>\n                  <GroupExpression>=Fields!State.Value</GroupExpression>\n                </GroupExpressions>\n              </Grouping>\n              <ReportItems>\n                <Textbox Name=\"Textbox9\">\n                  <Value>=Fields!State.Value</Value>\n                </Textbox>\n              </ReportItems>\n              <Subtotal>\n                <ReportItems>\n                  <Textbox Name=\"Textbox10\">\n                    <Value>Total</Value>\n                  </Textbox>\n                </ReportItems>\n              </Subtotal>\n            </DynamicRows>\n          </RowGrouping>\n        </RowGroupings>\n        <MatrixRows>\n          <MatrixRow>\n            <Height>0.25in</Height>\n            <MatrixCells>\n              <MatrixCell>\n                <ReportItems>\n                  <Textbox Name=\"Textbox11\">\n                    <Value>=sum(Fields!Sales.Value)</Value>\n                  </Textbox>\n                </ReportItems>\n              </MatrixCell>\n            </MatrixCells>\n          </MatrixRow>\n        </MatrixRows>\n        <MatrixColumns>\n          <MatrixColumn>\n            <Width>45.7pt</Width>\n          </MatrixColumn>\n        </MatrixColumns>\n        <Left>17.8pt</Left>\n        <Top>87.2pt</Top>\n      </Matrix>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>11in</Width>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>SQLite</DataProvider>\n        <ConnectString>Data Source=northwindEF.db</ConnectString>\n        <IntegratedSecurity>false</IntegratedSecurity>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n</Report>"
  },
  {
    "path": "ReportTests/Reports/WorldFacts.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report Name=\"WorldFacts\">\n  <Description>Worlds Facts - test data from MySQL World database</Description>\n  <Author>fyiReporting Software, LLC</Author>\n  <DataElementStyle>ElementNormal</DataElementStyle>\n  <LeftMargin>.4in</LeftMargin>\n  <RightMargin>.4in</RightMargin>\n  <TopMargin>.5in</TopMargin>\n  <BottomMargin>.5in</BottomMargin>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <!--\t\t\t<DataProvider>ODBC</DataProvider>   Use this line when using ODBC driver-->\n        <DataProvider>xxx</DataProvider>\n        <!-- Use this line when using xml data -->\n        <ConnectString>dsn=world;UID=uuu;PWD=ppp;</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <!--\t\t\t<CommandText>SELECT Code, Name, Continent, Region, Population, IndepYear, SurfaceArea FROM Country</CommandText> -->\n      </Query>\n      <Fields>\n        <Field Name=\"Code\">\n          <DataField>Code</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Name\">\n          <DataField>Name</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Continent\">\n          <DataField>Continent</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Region\">\n          <DataField>Region</DataField>\n          <TypeName>String</TypeName>\n        </Field>\n        <Field Name=\"Population\">\n          <DataField>Population</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n        <Field Name=\"IndependenceYear\">\n          <DataField>IndependenceYear</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n        <Field Name=\"SurfaceArea\">\n          <DataField>SurfaceArea</DataField>\n          <TypeName>Float</TypeName>\n        </Field>\n      </Fields>\n      <Rows File=\"WorldFacts.xml\" />\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>.5 in</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox1\">\n        <Top>.1 in</Top>\n        <Left>.1 in</Left>\n        <Height>.25 in</Height>\n        <Value>The World's Countries</Value>\n        <Style>\n          <FontSize>15pt</FontSize>\n          <FontWeight>Bold</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>64.4pt</Height>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DetailDataElementName>Row</DetailDataElementName>\n        <DetailDataCollectionName>Rows</DetailDataCollectionName>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>.75 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>.5 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>2.5 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1 in</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>Continent</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>Code</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>Name</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value>Region</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox6\">\n                      <Value>Population</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox7\">\n                      <Value>Independence</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox8\">\n                      <Value>Surface Area</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <TableGroups>\n          <TableGroup>\n            <Header>\n              <TableRows>\n                <TableRow>\n                  <Height>12 pt</Height>\n                  <TableCells>\n                    <TableCell>\n                      <ColSpan>7</ColSpan>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox9\">\n                          <Value>=Fields.Continent.Value</Value>\n                          <Style>\n                            <PaddingLeft>2 pt</PaddingLeft>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                            <FontWeight>Bold</FontWeight>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                  </TableCells>\n                </TableRow>\n              </TableRows>\n              <RepeatOnNewPage>true</RepeatOnNewPage>\n            </Header>\n            <Footer>\n              <TableRows>\n                <TableRow>\n                  <Height>12 pt</Height>\n                  <TableCells>\n                    <TableCell>\n                      <ColSpan>7</ColSpan>\n                      <ReportItems>\n                        <Textbox Name=\"Textbox14\">\n                          <Value>=\"Count of countries in \" + Fields.Continent.Value + \" = \" +Count(Fields.Name.Value)</Value>\n                          <Style>\n                            <PaddingLeft>2 pt</PaddingLeft>\n                            <BorderStyle>\n                              <Default>Solid</Default>\n                            </BorderStyle>\n                            <FontWeight>Bold</FontWeight>\n                          </Style>\n                        </Textbox>\n                      </ReportItems>\n                    </TableCell>\n                  </TableCells>\n                </TableRow>\n              </TableRows>\n            </Footer>\n            <Grouping Name=\"ContinentGroup\">\n              <GroupExpressions>\n                <GroupExpression>=Fields!Continent.Value</GroupExpression>\n              </GroupExpressions>\n            </Grouping>\n          </TableGroup>\n        </TableGroups>\n        <Details>\n          <Sorting>\n            <SortBy>\n              <SortExpression>=Fields!Name.Value</SortExpression>\n            </SortBy>\n          </Sorting>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                          <Bottom>None</Bottom>\n                          <Top>None</Top>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Code\">\n                      <Value>=Fields!Code.Value</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Name\">\n                      <CanGrow>true</CanGrow>\n                      <Value>=Fields!Name.Value</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Region\">\n                      <CanGrow>true</CanGrow>\n                      <Value>=Fields!Region.Value</Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox11\">\n                      <Value>=Fields!Population.Value</Value>\n                      <Style>\n                        <Format>#,##0</Format>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox12\">\n                      <Value>=switch(Fields!IndependenceYear.Value = 0, \"\", Fields!IndependenceYear.Value &gt; 0, Fields!IndependenceYear.Value, true, -Fields!IndependenceYear.Value + \" BC\")</Value>\n                      <Style>\n                        <Format>0000</Format>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox13\">\n                      <Value>=Fields!SurfaceArea.Value</Value>\n                      <Style>\n                        <Format>#,##0</Format>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n        <Footer>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ColSpan>4</ColSpan>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox15\">\n                      <Value>=CountDistinct(Fields.Continent.Value) + \" continents.  \" + Count(Fields.Name.Value)+ \" countries.\" </Value>\n                      <Style>\n                        <PaddingLeft>2 pt</PaddingLeft>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ColSpan>1</ColSpan>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox16\">\n                      <Value>=Sum(Fields.Population.Value)</Value>\n                      <Style>\n                        <Format>#,##0</Format>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ColSpan>1</ColSpan>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox17\">\n                      <Value>\n                      </Value>\n                      <Style>\n                        <Format>#,##0</Format>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ColSpan>1</ColSpan>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox18\">\n                      <Value>=Sum(Fields.SurfaceArea.Value)</Value>\n                      <Style>\n                        <Format>#,##0</Format>\n                        <TextAlign>Right</TextAlign>\n                        <PaddingRight>2 pt</PaddingRight>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Footer>\n      </Table>\n    </ReportItems>\n    <Columns>1</Columns>\n  </Body>\n  <PageFooter>\n    <Height>0pt</Height>\n    <PrintOnFirstPage>True</PrintOnFirstPage>\n    <PrintOnLastPage>True</PrintOnLastPage>\n  </PageFooter>\n  <Width>7in</Width>\n  <PageWidth>8.5in</PageWidth>\n  <PageHeight>11in</PageHeight>\n  <DataElementName>Report</DataElementName>\n</Report>"
  },
  {
    "path": "ReportTests/Reports/WorldFacts.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n<Rows>\n<Row><Code>DZA</Code><Continent>Africa</Continent><Name>Algeria</Name><Region>Northern Africa</Region><Population>31,471,000</Population><IndependenceYear>1962</IndependenceYear><SurfaceArea>2,381,741</SurfaceArea></Row>\n<Row><Code>AGO</Code><Continent>Africa</Continent><Name>Angola</Name><Region>Central Africa</Region><Population>12,878,000</Population><IndependenceYear>1975</IndependenceYear><SurfaceArea>1,246,700</SurfaceArea></Row>\n<Row><Code>BEN</Code><Continent>Africa</Continent><Name>Benin</Name><Region>Western Africa</Region><Population>6,097,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>112,622</SurfaceArea></Row>\n<Row><Code>BWA</Code><Continent>Africa</Continent><Name>Botswana</Name><Region>Southern Africa</Region><Population>1,622,000</Population><IndependenceYear>1966</IndependenceYear><SurfaceArea>581,730</SurfaceArea></Row>\n<Row><Code>IOT</Code><Continent>Africa</Continent><Name>British Indian Ocean Territory</Name><Region>Eastern Africa</Region><Population>0</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>78</SurfaceArea></Row>\n<Row><Code>BFA</Code><Continent>Africa</Continent><Name>Burkina Faso</Name><Region>Western Africa</Region><Population>11,937,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>274,000</SurfaceArea></Row>\n<Row><Code>BDI</Code><Continent>Africa</Continent><Name>Burundi</Name><Region>Eastern Africa</Region><Population>6,695,000</Population><IndependenceYear>1962</IndependenceYear><SurfaceArea>27,834</SurfaceArea></Row>\n<Row><Code>CMR</Code><Continent>Africa</Continent><Name>Cameroon</Name><Region>Central Africa</Region><Population>15,085,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>475,442</SurfaceArea></Row>\n<Row><Code>CPV</Code><Continent>Africa</Continent><Name>Cape Verde</Name><Region>Western Africa</Region><Population>428,000</Population><IndependenceYear>1975</IndependenceYear><SurfaceArea>4,033</SurfaceArea></Row>\n<Row><Code>CAF</Code><Continent>Africa</Continent><Name>Central African Republic</Name><Region>Central Africa</Region><Population>3,615,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>622,984</SurfaceArea></Row>\n<Row><Code>TCD</Code><Continent>Africa</Continent><Name>Chad</Name><Region>Central Africa</Region><Population>7,651,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>1,284,000</SurfaceArea></Row>\n<Row><Code>COM</Code><Continent>Africa</Continent><Name>Comoros</Name><Region>Eastern Africa</Region><Population>578,000</Population><IndependenceYear>1975</IndependenceYear><SurfaceArea>1,862</SurfaceArea></Row>\n<Row><Code>COG</Code><Continent>Africa</Continent><Name>Congo</Name><Region>Central Africa</Region><Population>2,943,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>342,000</SurfaceArea></Row>\n<Row><Code>COD</Code><Continent>Africa</Continent><Name>Congo, The Democratic Republic of the</Name><Region>Central Africa</Region><Population>51,654,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>2,344,858</SurfaceArea></Row>\n<Row><Code>CIV</Code><Continent>Africa</Continent><Name>C&#244;te d&#8217;Ivoire</Name><Region>Western Africa</Region><Population>14,786,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>322,463</SurfaceArea></Row>\n<Row><Code>DJI</Code><Continent>Africa</Continent><Name>Djibouti</Name><Region>Eastern Africa</Region><Population>638,000</Population><IndependenceYear>1977</IndependenceYear><SurfaceArea>23,200</SurfaceArea></Row>\n<Row><Code>EGY</Code><Continent>Africa</Continent><Name>Egypt</Name><Region>Northern Africa</Region><Population>68,470,000</Population><IndependenceYear>1922</IndependenceYear><SurfaceArea>1,001,449</SurfaceArea></Row>\n<Row><Code>GNQ</Code><Continent>Africa</Continent><Name>Equatorial Guinea</Name><Region>Central Africa</Region><Population>453,000</Population><IndependenceYear>1968</IndependenceYear><SurfaceArea>28,051</SurfaceArea></Row>\n<Row><Code>ERI</Code><Continent>Africa</Continent><Name>Eritrea</Name><Region>Eastern Africa</Region><Population>3,850,000</Population><IndependenceYear>1993</IndependenceYear><SurfaceArea>117,600</SurfaceArea></Row>\n<Row><Code>ETH</Code><Continent>Africa</Continent><Name>Ethiopia</Name><Region>Eastern Africa</Region><Population>62,565,000</Population><IndependenceYear>-1000</IndependenceYear><SurfaceArea>1,104,300</SurfaceArea></Row>\n<Row><Code>GAB</Code><Continent>Africa</Continent><Name>Gabon</Name><Region>Central Africa</Region><Population>1,226,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>267,668</SurfaceArea></Row>\n<Row><Code>GMB</Code><Continent>Africa</Continent><Name>Gambia</Name><Region>Western Africa</Region><Population>1,305,000</Population><IndependenceYear>1965</IndependenceYear><SurfaceArea>11,295</SurfaceArea></Row>\n<Row><Code>GHA</Code><Continent>Africa</Continent><Name>Ghana</Name><Region>Western Africa</Region><Population>20,212,000</Population><IndependenceYear>1957</IndependenceYear><SurfaceArea>238,533</SurfaceArea></Row>\n<Row><Code>GIN</Code><Continent>Africa</Continent><Name>Guinea</Name><Region>Western Africa</Region><Population>7,430,000</Population><IndependenceYear>1958</IndependenceYear><SurfaceArea>245,857</SurfaceArea></Row>\n<Row><Code>GNB</Code><Continent>Africa</Continent><Name>Guinea-Bissau</Name><Region>Western Africa</Region><Population>1,213,000</Population><IndependenceYear>1974</IndependenceYear><SurfaceArea>36,125</SurfaceArea></Row>\n<Row><Code>KEN</Code><Continent>Africa</Continent><Name>Kenya</Name><Region>Eastern Africa</Region><Population>30,080,000</Population><IndependenceYear>1963</IndependenceYear><SurfaceArea>580,367</SurfaceArea></Row>\n<Row><Code>LSO</Code><Continent>Africa</Continent><Name>Lesotho</Name><Region>Southern Africa</Region><Population>2,153,000</Population><IndependenceYear>1966</IndependenceYear><SurfaceArea>30,355</SurfaceArea></Row>\n<Row><Code>LBR</Code><Continent>Africa</Continent><Name>Liberia</Name><Region>Western Africa</Region><Population>3,154,000</Population><IndependenceYear>1847</IndependenceYear><SurfaceArea>111,369</SurfaceArea></Row>\n<Row><Code>LBY</Code><Continent>Africa</Continent><Name>Libyan Arab Jamahiriya</Name><Region>Northern Africa</Region><Population>5,605,000</Population><IndependenceYear>1951</IndependenceYear><SurfaceArea>1,759,540</SurfaceArea></Row>\n<Row><Code>MDG</Code><Continent>Africa</Continent><Name>Madagascar</Name><Region>Eastern Africa</Region><Population>15,942,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>587,041</SurfaceArea></Row>\n<Row><Code>MWI</Code><Continent>Africa</Continent><Name>Malawi</Name><Region>Eastern Africa</Region><Population>10,925,000</Population><IndependenceYear>1964</IndependenceYear><SurfaceArea>118,484</SurfaceArea></Row>\n<Row><Code>MLI</Code><Continent>Africa</Continent><Name>Mali</Name><Region>Western Africa</Region><Population>11,234,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>1,240,192</SurfaceArea></Row>\n<Row><Code>MRT</Code><Continent>Africa</Continent><Name>Mauritania</Name><Region>Western Africa</Region><Population>2,670,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>1,025,520</SurfaceArea></Row>\n<Row><Code>MUS</Code><Continent>Africa</Continent><Name>Mauritius</Name><Region>Eastern Africa</Region><Population>1,158,000</Population><IndependenceYear>1968</IndependenceYear><SurfaceArea>2,040</SurfaceArea></Row>\n<Row><Code>MYT</Code><Continent>Africa</Continent><Name>Mayotte</Name><Region>Eastern Africa</Region><Population>149,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>373</SurfaceArea></Row>\n<Row><Code>MAR</Code><Continent>Africa</Continent><Name>Morocco</Name><Region>Northern Africa</Region><Population>28,351,000</Population><IndependenceYear>1956</IndependenceYear><SurfaceArea>446,550</SurfaceArea></Row>\n<Row><Code>MOZ</Code><Continent>Africa</Continent><Name>Mozambique</Name><Region>Eastern Africa</Region><Population>19,680,000</Population><IndependenceYear>1975</IndependenceYear><SurfaceArea>801,590</SurfaceArea></Row>\n<Row><Code>NAM</Code><Continent>Africa</Continent><Name>Namibia</Name><Region>Southern Africa</Region><Population>1,726,000</Population><IndependenceYear>1990</IndependenceYear><SurfaceArea>824,292</SurfaceArea></Row>\n<Row><Code>NER</Code><Continent>Africa</Continent><Name>Niger</Name><Region>Western Africa</Region><Population>10,730,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>1,267,000</SurfaceArea></Row>\n<Row><Code>NGA</Code><Continent>Africa</Continent><Name>Nigeria</Name><Region>Western Africa</Region><Population>111,506,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>923,768</SurfaceArea></Row>\n<Row><Code>REU</Code><Continent>Africa</Continent><Name>R&#233;union</Name><Region>Eastern Africa</Region><Population>699,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>2,510</SurfaceArea></Row>\n<Row><Code>RWA</Code><Continent>Africa</Continent><Name>Rwanda</Name><Region>Eastern Africa</Region><Population>7,733,000</Population><IndependenceYear>1962</IndependenceYear><SurfaceArea>26,338</SurfaceArea></Row>\n<Row><Code>SHN</Code><Continent>Africa</Continent><Name>Saint Helena</Name><Region>Western Africa</Region><Population>6,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>314</SurfaceArea></Row>\n<Row><Code>STP</Code><Continent>Africa</Continent><Name>Sao Tome and Principe</Name><Region>Central Africa</Region><Population>147,000</Population><IndependenceYear>1975</IndependenceYear><SurfaceArea>964</SurfaceArea></Row>\n<Row><Code>SEN</Code><Continent>Africa</Continent><Name>Senegal</Name><Region>Western Africa</Region><Population>9,481,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>196,722</SurfaceArea></Row>\n<Row><Code>SYC</Code><Continent>Africa</Continent><Name>Seychelles</Name><Region>Eastern Africa</Region><Population>77,000</Population><IndependenceYear>1976</IndependenceYear><SurfaceArea>455</SurfaceArea></Row>\n<Row><Code>SLE</Code><Continent>Africa</Continent><Name>Sierra Leone</Name><Region>Western Africa</Region><Population>4,854,000</Population><IndependenceYear>1961</IndependenceYear><SurfaceArea>71,740</SurfaceArea></Row>\n<Row><Code>SOM</Code><Continent>Africa</Continent><Name>Somalia</Name><Region>Eastern Africa</Region><Population>10,097,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>637,657</SurfaceArea></Row>\n<Row><Code>ZAF</Code><Continent>Africa</Continent><Name>South Africa</Name><Region>Southern Africa</Region><Population>40,377,000</Population><IndependenceYear>1910</IndependenceYear><SurfaceArea>1,221,037</SurfaceArea></Row>\n<Row><Code>SDN</Code><Continent>Africa</Continent><Name>Sudan</Name><Region>Northern Africa</Region><Population>29,490,000</Population><IndependenceYear>1956</IndependenceYear><SurfaceArea>2,505,813</SurfaceArea></Row>\n<Row><Code>SWZ</Code><Continent>Africa</Continent><Name>Swaziland</Name><Region>Southern Africa</Region><Population>1,008,000</Population><IndependenceYear>1968</IndependenceYear><SurfaceArea>17,364</SurfaceArea></Row>\n<Row><Code>TZA</Code><Continent>Africa</Continent><Name>Tanzania</Name><Region>Eastern Africa</Region><Population>33,517,000</Population><IndependenceYear>1961</IndependenceYear><SurfaceArea>883,749</SurfaceArea></Row>\n<Row><Code>TGO</Code><Continent>Africa</Continent><Name>Togo</Name><Region>Western Africa</Region><Population>4,629,000</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>56,785</SurfaceArea></Row>\n<Row><Code>TUN</Code><Continent>Africa</Continent><Name>Tunisia</Name><Region>Northern Africa</Region><Population>9,586,000</Population><IndependenceYear>1956</IndependenceYear><SurfaceArea>163,610</SurfaceArea></Row>\n<Row><Code>UGA</Code><Continent>Africa</Continent><Name>Uganda</Name><Region>Eastern Africa</Region><Population>21,778,000</Population><IndependenceYear>1962</IndependenceYear><SurfaceArea>241,038</SurfaceArea></Row>\n<Row><Code>ESH</Code><Continent>Africa</Continent><Name>Western Sahara</Name><Region>Northern Africa</Region><Population>293,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>266,000</SurfaceArea></Row>\n<Row><Code>ZMB</Code><Continent>Africa</Continent><Name>Zambia</Name><Region>Eastern Africa</Region><Population>9,169,000</Population><IndependenceYear>1964</IndependenceYear><SurfaceArea>752,618</SurfaceArea></Row>\n<Row><Code>ZWE</Code><Continent>Africa</Continent><Name>Zimbabwe</Name><Region>Eastern Africa</Region><Population>11,669,000</Population><IndependenceYear>1980</IndependenceYear><SurfaceArea>390,757</SurfaceArea></Row>\n<Row><Code>ATA</Code><Continent>Antarctica</Continent><Name>Antarctica</Name><Region>Antarctica</Region><Population>0</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>13,120,000</SurfaceArea></Row>\n<Row><Code>BVT</Code><Continent>Antarctica</Continent><Name>Bouvet Island</Name><Region>Antarctica</Region><Population>0</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>59</SurfaceArea></Row>\n<Row><Code>ATF</Code><Continent>Antarctica</Continent><Name>French Southern territories</Name><Region>Antarctica</Region><Population>0</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>7,780</SurfaceArea></Row>\n<Row><Code>HMD</Code><Continent>Antarctica</Continent><Name>Heard Island and McDonald Islands</Name><Region>Antarctica</Region><Population>0</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>359</SurfaceArea></Row>\n<Row><Code>SGS</Code><Continent>Antarctica</Continent><Name>South Georgia and the South Sandwich Islands</Name><Region>Antarctica</Region><Population>0</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>3,903</SurfaceArea></Row>\n<Row><Code>AFG</Code><Continent>Asia</Continent><Name>Afghanistan</Name><Region>Southern and Central Asia</Region><Population>22,720,000</Population><IndependenceYear>1919</IndependenceYear><SurfaceArea>652,090</SurfaceArea></Row>\n<Row><Code>ARM</Code><Continent>Asia</Continent><Name>Armenia</Name><Region>Middle East</Region><Population>3,520,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>29,800</SurfaceArea></Row>\n<Row><Code>AZE</Code><Continent>Asia</Continent><Name>Azerbaijan</Name><Region>Middle East</Region><Population>7,734,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>86,600</SurfaceArea></Row>\n<Row><Code>BHR</Code><Continent>Asia</Continent><Name>Bahrain</Name><Region>Middle East</Region><Population>617,000</Population><IndependenceYear>1971</IndependenceYear><SurfaceArea>694</SurfaceArea></Row>\n<Row><Code>BGD</Code><Continent>Asia</Continent><Name>Bangladesh</Name><Region>Southern and Central Asia</Region><Population>129,155,000</Population><IndependenceYear>1971</IndependenceYear><SurfaceArea>143,998</SurfaceArea></Row>\n<Row><Code>BTN</Code><Continent>Asia</Continent><Name>Bhutan</Name><Region>Southern and Central Asia</Region><Population>2,124,000</Population><IndependenceYear>1910</IndependenceYear><SurfaceArea>47,000</SurfaceArea></Row>\n<Row><Code>BRN</Code><Continent>Asia</Continent><Name>Brunei</Name><Region>Southeast Asia</Region><Population>328,000</Population><IndependenceYear>1984</IndependenceYear><SurfaceArea>5,765</SurfaceArea></Row>\n<Row><Code>KHM</Code><Continent>Asia</Continent><Name>Cambodia</Name><Region>Southeast Asia</Region><Population>11,168,000</Population><IndependenceYear>1953</IndependenceYear><SurfaceArea>181,035</SurfaceArea></Row>\n<Row><Code>CHN</Code><Continent>Asia</Continent><Name>China</Name><Region>Eastern Asia</Region><Population>1,277,558,000</Population><IndependenceYear>-1523</IndependenceYear><SurfaceArea>9,572,900</SurfaceArea></Row>\n<Row><Code>CYP</Code><Continent>Asia</Continent><Name>Cyprus</Name><Region>Middle East</Region><Population>754,700</Population><IndependenceYear>1960</IndependenceYear><SurfaceArea>9,251</SurfaceArea></Row>\n<Row><Code>TMP</Code><Continent>Asia</Continent><Name>East Timor</Name><Region>Southeast Asia</Region><Population>885,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>14,874</SurfaceArea></Row>\n<Row><Code>GEO</Code><Continent>Asia</Continent><Name>Georgia</Name><Region>Middle East</Region><Population>4,968,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>69,700</SurfaceArea></Row>\n<Row><Code>HKG</Code><Continent>Asia</Continent><Name>Hong Kong</Name><Region>Eastern Asia</Region><Population>6,782,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>1,075</SurfaceArea></Row>\n<Row><Code>IND</Code><Continent>Asia</Continent><Name>India</Name><Region>Southern and Central Asia</Region><Population>1,013,662,000</Population><IndependenceYear>1947</IndependenceYear><SurfaceArea>3,287,263</SurfaceArea></Row>\n<Row><Code>IDN</Code><Continent>Asia</Continent><Name>Indonesia</Name><Region>Southeast Asia</Region><Population>212,107,000</Population><IndependenceYear>1945</IndependenceYear><SurfaceArea>1,904,569</SurfaceArea></Row>\n<Row><Code>IRN</Code><Continent>Asia</Continent><Name>Iran</Name><Region>Southern and Central Asia</Region><Population>67,702,000</Population><IndependenceYear>1906</IndependenceYear><SurfaceArea>1,648,195</SurfaceArea></Row>\n<Row><Code>IRQ</Code><Continent>Asia</Continent><Name>Iraq</Name><Region>Middle East</Region><Population>23,115,000</Population><IndependenceYear>1932</IndependenceYear><SurfaceArea>438,317</SurfaceArea></Row>\n<Row><Code>ISR</Code><Continent>Asia</Continent><Name>Israel</Name><Region>Middle East</Region><Population>6,217,000</Population><IndependenceYear>1948</IndependenceYear><SurfaceArea>21,056</SurfaceArea></Row>\n<Row><Code>JPN</Code><Continent>Asia</Continent><Name>Japan</Name><Region>Eastern Asia</Region><Population>126,714,000</Population><IndependenceYear>-0660</IndependenceYear><SurfaceArea>377,829</SurfaceArea></Row>\n<Row><Code>JOR</Code><Continent>Asia</Continent><Name>Jordan</Name><Region>Middle East</Region><Population>5,083,000</Population><IndependenceYear>1946</IndependenceYear><SurfaceArea>88,946</SurfaceArea></Row>\n<Row><Code>KAZ</Code><Continent>Asia</Continent><Name>Kazakstan</Name><Region>Southern and Central Asia</Region><Population>16,223,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>2,724,900</SurfaceArea></Row>\n<Row><Code>KWT</Code><Continent>Asia</Continent><Name>Kuwait</Name><Region>Middle East</Region><Population>1,972,000</Population><IndependenceYear>1961</IndependenceYear><SurfaceArea>17,818</SurfaceArea></Row>\n<Row><Code>KGZ</Code><Continent>Asia</Continent><Name>Kyrgyzstan</Name><Region>Southern and Central Asia</Region><Population>4,699,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>199,900</SurfaceArea></Row>\n<Row><Code>LAO</Code><Continent>Asia</Continent><Name>Laos</Name><Region>Southeast Asia</Region><Population>5,433,000</Population><IndependenceYear>1953</IndependenceYear><SurfaceArea>236,800</SurfaceArea></Row>\n<Row><Code>LBN</Code><Continent>Asia</Continent><Name>Lebanon</Name><Region>Middle East</Region><Population>3,282,000</Population><IndependenceYear>1941</IndependenceYear><SurfaceArea>10,400</SurfaceArea></Row>\n<Row><Code>MAC</Code><Continent>Asia</Continent><Name>Macao</Name><Region>Eastern Asia</Region><Population>473,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>18</SurfaceArea></Row>\n<Row><Code>MYS</Code><Continent>Asia</Continent><Name>Malaysia</Name><Region>Southeast Asia</Region><Population>22,244,000</Population><IndependenceYear>1957</IndependenceYear><SurfaceArea>329,758</SurfaceArea></Row>\n<Row><Code>MDV</Code><Continent>Asia</Continent><Name>Maldives</Name><Region>Southern and Central Asia</Region><Population>286,000</Population><IndependenceYear>1965</IndependenceYear><SurfaceArea>298</SurfaceArea></Row>\n<Row><Code>MNG</Code><Continent>Asia</Continent><Name>Mongolia</Name><Region>Eastern Asia</Region><Population>2,662,000</Population><IndependenceYear>1921</IndependenceYear><SurfaceArea>1,566,500</SurfaceArea></Row>\n<Row><Code>MMR</Code><Continent>Asia</Continent><Name>Myanmar</Name><Region>Southeast Asia</Region><Population>45,611,000</Population><IndependenceYear>1948</IndependenceYear><SurfaceArea>676,578</SurfaceArea></Row>\n<Row><Code>NPL</Code><Continent>Asia</Continent><Name>Nepal</Name><Region>Southern and Central Asia</Region><Population>23,930,000</Population><IndependenceYear>1769</IndependenceYear><SurfaceArea>147,181</SurfaceArea></Row>\n<Row><Code>PRK</Code><Continent>Asia</Continent><Name>North Korea</Name><Region>Eastern Asia</Region><Population>24,039,000</Population><IndependenceYear>1948</IndependenceYear><SurfaceArea>120,538</SurfaceArea></Row>\n<Row><Code>OMN</Code><Continent>Asia</Continent><Name>Oman</Name><Region>Middle East</Region><Population>2,542,000</Population><IndependenceYear>1951</IndependenceYear><SurfaceArea>309,500</SurfaceArea></Row>\n<Row><Code>PAK</Code><Continent>Asia</Continent><Name>Pakistan</Name><Region>Southern and Central Asia</Region><Population>156,483,000</Population><IndependenceYear>1947</IndependenceYear><SurfaceArea>796,095</SurfaceArea></Row>\n<Row><Code>PSE</Code><Continent>Asia</Continent><Name>Palestine</Name><Region>Middle East</Region><Population>3,101,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>6,257</SurfaceArea></Row>\n<Row><Code>PHL</Code><Continent>Asia</Continent><Name>Philippines</Name><Region>Southeast Asia</Region><Population>75,967,000</Population><IndependenceYear>1946</IndependenceYear><SurfaceArea>300,000</SurfaceArea></Row>\n<Row><Code>QAT</Code><Continent>Asia</Continent><Name>Qatar</Name><Region>Middle East</Region><Population>599,000</Population><IndependenceYear>1971</IndependenceYear><SurfaceArea>11,000</SurfaceArea></Row>\n<Row><Code>SAU</Code><Continent>Asia</Continent><Name>Saudi Arabia</Name><Region>Middle East</Region><Population>21,607,000</Population><IndependenceYear>1932</IndependenceYear><SurfaceArea>2,149,690</SurfaceArea></Row>\n<Row><Code>SGP</Code><Continent>Asia</Continent><Name>Singapore</Name><Region>Southeast Asia</Region><Population>3,567,000</Population><IndependenceYear>1965</IndependenceYear><SurfaceArea>618</SurfaceArea></Row>\n<Row><Code>KOR</Code><Continent>Asia</Continent><Name>South Korea</Name><Region>Eastern Asia</Region><Population>46,844,000</Population><IndependenceYear>1948</IndependenceYear><SurfaceArea>99,434</SurfaceArea></Row>\n<Row><Code>LKA</Code><Continent>Asia</Continent><Name>Sri Lanka</Name><Region>Southern and Central Asia</Region><Population>18,827,000</Population><IndependenceYear>1948</IndependenceYear><SurfaceArea>65,610</SurfaceArea></Row>\n<Row><Code>SYR</Code><Continent>Asia</Continent><Name>Syria</Name><Region>Middle East</Region><Population>16,125,000</Population><IndependenceYear>1941</IndependenceYear><SurfaceArea>185,180</SurfaceArea></Row>\n<Row><Code>TWN</Code><Continent>Asia</Continent><Name>Taiwan</Name><Region>Eastern Asia</Region><Population>22,256,000</Population><IndependenceYear>1945</IndependenceYear><SurfaceArea>36,188</SurfaceArea></Row>\n<Row><Code>TJK</Code><Continent>Asia</Continent><Name>Tajikistan</Name><Region>Southern and Central Asia</Region><Population>6,188,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>143,100</SurfaceArea></Row>\n<Row><Code>THA</Code><Continent>Asia</Continent><Name>Thailand</Name><Region>Southeast Asia</Region><Population>61,399,000</Population><IndependenceYear>1350</IndependenceYear><SurfaceArea>513,115</SurfaceArea></Row>\n<Row><Code>TUR</Code><Continent>Asia</Continent><Name>Turkey</Name><Region>Middle East</Region><Population>66,591,000</Population><IndependenceYear>1923</IndependenceYear><SurfaceArea>774,815</SurfaceArea></Row>\n<Row><Code>TKM</Code><Continent>Asia</Continent><Name>Turkmenistan</Name><Region>Southern and Central Asia</Region><Population>4,459,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>488,100</SurfaceArea></Row>\n<Row><Code>ARE</Code><Continent>Asia</Continent><Name>United Arab Emirates</Name><Region>Middle East</Region><Population>2,441,000</Population><IndependenceYear>1971</IndependenceYear><SurfaceArea>83,600</SurfaceArea></Row>\n<Row><Code>UZB</Code><Continent>Asia</Continent><Name>Uzbekistan</Name><Region>Southern and Central Asia</Region><Population>24,318,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>447,400</SurfaceArea></Row>\n<Row><Code>VNM</Code><Continent>Asia</Continent><Name>Vietnam</Name><Region>Southeast Asia</Region><Population>79,832,000</Population><IndependenceYear>1945</IndependenceYear><SurfaceArea>331,689</SurfaceArea></Row>\n<Row><Code>YEM</Code><Continent>Asia</Continent><Name>Yemen</Name><Region>Middle East</Region><Population>18,112,000</Population><IndependenceYear>1918</IndependenceYear><SurfaceArea>527,968</SurfaceArea></Row>\n<Row><Code>ALB</Code><Continent>Europe</Continent><Name>Albania</Name><Region>Southern Europe</Region><Population>3,401,200</Population><IndependenceYear>1912</IndependenceYear><SurfaceArea>28,748</SurfaceArea></Row>\n<Row><Code>AND</Code><Continent>Europe</Continent><Name>Andorra</Name><Region>Southern Europe</Region><Population>78,000</Population><IndependenceYear>1278</IndependenceYear><SurfaceArea>468</SurfaceArea></Row>\n<Row><Code>AUT</Code><Continent>Europe</Continent><Name>Austria</Name><Region>Western Europe</Region><Population>8,091,800</Population><IndependenceYear>1918</IndependenceYear><SurfaceArea>83,859</SurfaceArea></Row>\n<Row><Code>BLR</Code><Continent>Europe</Continent><Name>Belarus</Name><Region>Eastern Europe</Region><Population>10,236,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>207,600</SurfaceArea></Row>\n<Row><Code>BEL</Code><Continent>Europe</Continent><Name>Belgium</Name><Region>Western Europe</Region><Population>10,239,000</Population><IndependenceYear>1830</IndependenceYear><SurfaceArea>30,518</SurfaceArea></Row>\n<Row><Code>BIH</Code><Continent>Europe</Continent><Name>Bosnia and Herzegovina</Name><Region>Southern Europe</Region><Population>3,972,000</Population><IndependenceYear>1992</IndependenceYear><SurfaceArea>51,197</SurfaceArea></Row>\n<Row><Code>BGR</Code><Continent>Europe</Continent><Name>Bulgaria</Name><Region>Eastern Europe</Region><Population>8,190,900</Population><IndependenceYear>1908</IndependenceYear><SurfaceArea>110,994</SurfaceArea></Row>\n<Row><Code>HRV</Code><Continent>Europe</Continent><Name>Croatia</Name><Region>Southern Europe</Region><Population>4,473,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>56,538</SurfaceArea></Row>\n<Row><Code>CZE</Code><Continent>Europe</Continent><Name>Czech Republic</Name><Region>Eastern Europe</Region><Population>10,278,100</Population><IndependenceYear>1993</IndependenceYear><SurfaceArea>78,866</SurfaceArea></Row>\n<Row><Code>DNK</Code><Continent>Europe</Continent><Name>Denmark</Name><Region>Nordic Countries</Region><Population>5,330,000</Population><IndependenceYear>0800</IndependenceYear><SurfaceArea>43,094</SurfaceArea></Row>\n<Row><Code>EST</Code><Continent>Europe</Continent><Name>Estonia</Name><Region>Baltic Countries</Region><Population>1,439,200</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>45,227</SurfaceArea></Row>\n<Row><Code>FRO</Code><Continent>Europe</Continent><Name>Faroe Islands</Name><Region>Nordic Countries</Region><Population>43,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>1,399</SurfaceArea></Row>\n<Row><Code>FIN</Code><Continent>Europe</Continent><Name>Finland</Name><Region>Nordic Countries</Region><Population>5,171,300</Population><IndependenceYear>1917</IndependenceYear><SurfaceArea>338,145</SurfaceArea></Row>\n<Row><Code>FRA</Code><Continent>Europe</Continent><Name>France</Name><Region>Western Europe</Region><Population>59,225,700</Population><IndependenceYear>0843</IndependenceYear><SurfaceArea>551,500</SurfaceArea></Row>\n<Row><Code>DEU</Code><Continent>Europe</Continent><Name>Germany</Name><Region>Western Europe</Region><Population>82,164,700</Population><IndependenceYear>1955</IndependenceYear><SurfaceArea>357,022</SurfaceArea></Row>\n<Row><Code>GIB</Code><Continent>Europe</Continent><Name>Gibraltar</Name><Region>Southern Europe</Region><Population>25,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>6</SurfaceArea></Row>\n<Row><Code>GRC</Code><Continent>Europe</Continent><Name>Greece</Name><Region>Southern Europe</Region><Population>10,545,700</Population><IndependenceYear>1830</IndependenceYear><SurfaceArea>131,626</SurfaceArea></Row>\n<Row><Code>VAT</Code><Continent>Europe</Continent><Name>Holy See (Vatican City State)</Name><Region>Southern Europe</Region><Population>1,000</Population><IndependenceYear>1929</IndependenceYear><SurfaceArea>0</SurfaceArea></Row>\n<Row><Code>HUN</Code><Continent>Europe</Continent><Name>Hungary</Name><Region>Eastern Europe</Region><Population>10,043,200</Population><IndependenceYear>1918</IndependenceYear><SurfaceArea>93,030</SurfaceArea></Row>\n<Row><Code>ISL</Code><Continent>Europe</Continent><Name>Iceland</Name><Region>Nordic Countries</Region><Population>279,000</Population><IndependenceYear>1944</IndependenceYear><SurfaceArea>103,000</SurfaceArea></Row>\n<Row><Code>IRL</Code><Continent>Europe</Continent><Name>Ireland</Name><Region>British Islands</Region><Population>3,775,100</Population><IndependenceYear>1921</IndependenceYear><SurfaceArea>70,273</SurfaceArea></Row>\n<Row><Code>ITA</Code><Continent>Europe</Continent><Name>Italy</Name><Region>Southern Europe</Region><Population>57,680,000</Population><IndependenceYear>1861</IndependenceYear><SurfaceArea>301,316</SurfaceArea></Row>\n<Row><Code>LVA</Code><Continent>Europe</Continent><Name>Latvia</Name><Region>Baltic Countries</Region><Population>2,424,200</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>64,589</SurfaceArea></Row>\n<Row><Code>LIE</Code><Continent>Europe</Continent><Name>Liechtenstein</Name><Region>Western Europe</Region><Population>32,300</Population><IndependenceYear>1806</IndependenceYear><SurfaceArea>160</SurfaceArea></Row>\n<Row><Code>LTU</Code><Continent>Europe</Continent><Name>Lithuania</Name><Region>Baltic Countries</Region><Population>3,698,500</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>65,301</SurfaceArea></Row>\n<Row><Code>LUX</Code><Continent>Europe</Continent><Name>Luxembourg</Name><Region>Western Europe</Region><Population>435,700</Population><IndependenceYear>1867</IndependenceYear><SurfaceArea>2,586</SurfaceArea></Row>\n<Row><Code>MKD</Code><Continent>Europe</Continent><Name>Macedonia</Name><Region>Southern Europe</Region><Population>2,024,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>25,713</SurfaceArea></Row>\n<Row><Code>MLT</Code><Continent>Europe</Continent><Name>Malta</Name><Region>Southern Europe</Region><Population>380,200</Population><IndependenceYear>1964</IndependenceYear><SurfaceArea>316</SurfaceArea></Row>\n<Row><Code>MDA</Code><Continent>Europe</Continent><Name>Moldova</Name><Region>Eastern Europe</Region><Population>4,380,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>33,851</SurfaceArea></Row>\n<Row><Code>MCO</Code><Continent>Europe</Continent><Name>Monaco</Name><Region>Western Europe</Region><Population>34,000</Population><IndependenceYear>1861</IndependenceYear><SurfaceArea>2</SurfaceArea></Row>\n<Row><Code>NLD</Code><Continent>Europe</Continent><Name>Netherlands</Name><Region>Western Europe</Region><Population>15,864,000</Population><IndependenceYear>1581</IndependenceYear><SurfaceArea>41,526</SurfaceArea></Row>\n<Row><Code>NOR</Code><Continent>Europe</Continent><Name>Norway</Name><Region>Nordic Countries</Region><Population>4,478,500</Population><IndependenceYear>1905</IndependenceYear><SurfaceArea>323,877</SurfaceArea></Row>\n<Row><Code>POL</Code><Continent>Europe</Continent><Name>Poland</Name><Region>Eastern Europe</Region><Population>38,653,600</Population><IndependenceYear>1918</IndependenceYear><SurfaceArea>323,250</SurfaceArea></Row>\n<Row><Code>PRT</Code><Continent>Europe</Continent><Name>Portugal</Name><Region>Southern Europe</Region><Population>9,997,600</Population><IndependenceYear>1143</IndependenceYear><SurfaceArea>91,982</SurfaceArea></Row>\n<Row><Code>ROM</Code><Continent>Europe</Continent><Name>Romania</Name><Region>Eastern Europe</Region><Population>22,455,500</Population><IndependenceYear>1878</IndependenceYear><SurfaceArea>238,391</SurfaceArea></Row>\n<Row><Code>RUS</Code><Continent>Europe</Continent><Name>Russian Federation</Name><Region>Eastern Europe</Region><Population>146,934,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>17,075,400</SurfaceArea></Row>\n<Row><Code>SMR</Code><Continent>Europe</Continent><Name>San Marino</Name><Region>Southern Europe</Region><Population>27,000</Population><IndependenceYear>0885</IndependenceYear><SurfaceArea>61</SurfaceArea></Row>\n<Row><Code>SVK</Code><Continent>Europe</Continent><Name>Slovakia</Name><Region>Eastern Europe</Region><Population>5,398,700</Population><IndependenceYear>1993</IndependenceYear><SurfaceArea>49,012</SurfaceArea></Row>\n<Row><Code>SVN</Code><Continent>Europe</Continent><Name>Slovenia</Name><Region>Southern Europe</Region><Population>1,987,800</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>20,256</SurfaceArea></Row>\n<Row><Code>ESP</Code><Continent>Europe</Continent><Name>Spain</Name><Region>Southern Europe</Region><Population>39,441,700</Population><IndependenceYear>1492</IndependenceYear><SurfaceArea>505,992</SurfaceArea></Row>\n<Row><Code>SJM</Code><Continent>Europe</Continent><Name>Svalbard and Jan Mayen</Name><Region>Nordic Countries</Region><Population>3,200</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>62,422</SurfaceArea></Row>\n<Row><Code>SWE</Code><Continent>Europe</Continent><Name>Sweden</Name><Region>Nordic Countries</Region><Population>8,861,400</Population><IndependenceYear>0836</IndependenceYear><SurfaceArea>449,964</SurfaceArea></Row>\n<Row><Code>CHE</Code><Continent>Europe</Continent><Name>Switzerland</Name><Region>Western Europe</Region><Population>7,160,400</Population><IndependenceYear>1499</IndependenceYear><SurfaceArea>41,284</SurfaceArea></Row>\n<Row><Code>UKR</Code><Continent>Europe</Continent><Name>Ukraine</Name><Region>Eastern Europe</Region><Population>50,456,000</Population><IndependenceYear>1991</IndependenceYear><SurfaceArea>603,700</SurfaceArea></Row>\n<Row><Code>GBR</Code><Continent>Europe</Continent><Name>United Kingdom</Name><Region>British Islands</Region><Population>59,623,400</Population><IndependenceYear>1066</IndependenceYear><SurfaceArea>242,900</SurfaceArea></Row>\n<Row><Code>YUG</Code><Continent>Europe</Continent><Name>Yugoslavia</Name><Region>Southern Europe</Region><Population>10,640,000</Population><IndependenceYear>1918</IndependenceYear><SurfaceArea>102,173</SurfaceArea></Row>\n<Row><Code>AIA</Code><Continent>North America</Continent><Name>Anguilla</Name><Region>Caribbean</Region><Population>8,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>96</SurfaceArea></Row>\n<Row><Code>ATG</Code><Continent>North America</Continent><Name>Antigua and Barbuda</Name><Region>Caribbean</Region><Population>68,000</Population><IndependenceYear>1981</IndependenceYear><SurfaceArea>442</SurfaceArea></Row>\n<Row><Code>ABW</Code><Continent>North America</Continent><Name>Aruba</Name><Region>Caribbean</Region><Population>103,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>193</SurfaceArea></Row>\n<Row><Code>BHS</Code><Continent>North America</Continent><Name>Bahamas</Name><Region>Caribbean</Region><Population>307,000</Population><IndependenceYear>1973</IndependenceYear><SurfaceArea>13,878</SurfaceArea></Row>\n<Row><Code>BRB</Code><Continent>North America</Continent><Name>Barbados</Name><Region>Caribbean</Region><Population>270,000</Population><IndependenceYear>1966</IndependenceYear><SurfaceArea>430</SurfaceArea></Row>\n<Row><Code>BLZ</Code><Continent>North America</Continent><Name>Belize</Name><Region>Central America</Region><Population>241,000</Population><IndependenceYear>1981</IndependenceYear><SurfaceArea>22,696</SurfaceArea></Row>\n<Row><Code>BMU</Code><Continent>North America</Continent><Name>Bermuda</Name><Region>North America</Region><Population>65,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>53</SurfaceArea></Row>\n<Row><Code>CAN</Code><Continent>North America</Continent><Name>Canada</Name><Region>North America</Region><Population>31,147,000</Population><IndependenceYear>1867</IndependenceYear><SurfaceArea>9,970,610</SurfaceArea></Row>\n<Row><Code>CYM</Code><Continent>North America</Continent><Name>Cayman Islands</Name><Region>Caribbean</Region><Population>38,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>264</SurfaceArea></Row>\n<Row><Code>CRI</Code><Continent>North America</Continent><Name>Costa Rica</Name><Region>Central America</Region><Population>4,023,000</Population><IndependenceYear>1821</IndependenceYear><SurfaceArea>51,100</SurfaceArea></Row>\n<Row><Code>CUB</Code><Continent>North America</Continent><Name>Cuba</Name><Region>Caribbean</Region><Population>11,201,000</Population><IndependenceYear>1902</IndependenceYear><SurfaceArea>110,861</SurfaceArea></Row>\n<Row><Code>DMA</Code><Continent>North America</Continent><Name>Dominica</Name><Region>Caribbean</Region><Population>71,000</Population><IndependenceYear>1978</IndependenceYear><SurfaceArea>751</SurfaceArea></Row>\n<Row><Code>DOM</Code><Continent>North America</Continent><Name>Dominican Republic</Name><Region>Caribbean</Region><Population>8,495,000</Population><IndependenceYear>1844</IndependenceYear><SurfaceArea>48,511</SurfaceArea></Row>\n<Row><Code>SLV</Code><Continent>North America</Continent><Name>El Salvador</Name><Region>Central America</Region><Population>6,276,000</Population><IndependenceYear>1841</IndependenceYear><SurfaceArea>21,041</SurfaceArea></Row>\n<Row><Code>GRL</Code><Continent>North America</Continent><Name>Greenland</Name><Region>North America</Region><Population>56,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>2,166,090</SurfaceArea></Row>\n<Row><Code>GRD</Code><Continent>North America</Continent><Name>Grenada</Name><Region>Caribbean</Region><Population>94,000</Population><IndependenceYear>1974</IndependenceYear><SurfaceArea>344</SurfaceArea></Row>\n<Row><Code>GLP</Code><Continent>North America</Continent><Name>Guadeloupe</Name><Region>Caribbean</Region><Population>456,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>1,705</SurfaceArea></Row>\n<Row><Code>GTM</Code><Continent>North America</Continent><Name>Guatemala</Name><Region>Central America</Region><Population>11,385,000</Population><IndependenceYear>1821</IndependenceYear><SurfaceArea>108,889</SurfaceArea></Row>\n<Row><Code>HTI</Code><Continent>North America</Continent><Name>Haiti</Name><Region>Caribbean</Region><Population>8,222,000</Population><IndependenceYear>1804</IndependenceYear><SurfaceArea>27,750</SurfaceArea></Row>\n<Row><Code>HND</Code><Continent>North America</Continent><Name>Honduras</Name><Region>Central America</Region><Population>6,485,000</Population><IndependenceYear>1838</IndependenceYear><SurfaceArea>112,088</SurfaceArea></Row>\n<Row><Code>JAM</Code><Continent>North America</Continent><Name>Jamaica</Name><Region>Caribbean</Region><Population>2,583,000</Population><IndependenceYear>1962</IndependenceYear><SurfaceArea>10,990</SurfaceArea></Row>\n<Row><Code>MTQ</Code><Continent>North America</Continent><Name>Martinique</Name><Region>Caribbean</Region><Population>395,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>1,102</SurfaceArea></Row>\n<Row><Code>MEX</Code><Continent>North America</Continent><Name>Mexico</Name><Region>Central America</Region><Population>98,881,000</Population><IndependenceYear>1810</IndependenceYear><SurfaceArea>1,958,201</SurfaceArea></Row>\n<Row><Code>MSR</Code><Continent>North America</Continent><Name>Montserrat</Name><Region>Caribbean</Region><Population>11,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>102</SurfaceArea></Row>\n<Row><Code>ANT</Code><Continent>North America</Continent><Name>Netherlands Antilles</Name><Region>Caribbean</Region><Population>217,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>800</SurfaceArea></Row>\n<Row><Code>NIC</Code><Continent>North America</Continent><Name>Nicaragua</Name><Region>Central America</Region><Population>5,074,000</Population><IndependenceYear>1838</IndependenceYear><SurfaceArea>130,000</SurfaceArea></Row>\n<Row><Code>PAN</Code><Continent>North America</Continent><Name>Panama</Name><Region>Central America</Region><Population>2,856,000</Population><IndependenceYear>1903</IndependenceYear><SurfaceArea>75,517</SurfaceArea></Row>\n<Row><Code>PRI</Code><Continent>North America</Continent><Name>Puerto Rico</Name><Region>Caribbean</Region><Population>3,869,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>8,875</SurfaceArea></Row>\n<Row><Code>KNA</Code><Continent>North America</Continent><Name>Saint Kitts and Nevis</Name><Region>Caribbean</Region><Population>38,000</Population><IndependenceYear>1983</IndependenceYear><SurfaceArea>261</SurfaceArea></Row>\n<Row><Code>LCA</Code><Continent>North America</Continent><Name>Saint Lucia</Name><Region>Caribbean</Region><Population>154,000</Population><IndependenceYear>1979</IndependenceYear><SurfaceArea>622</SurfaceArea></Row>\n<Row><Code>SPM</Code><Continent>North America</Continent><Name>Saint Pierre and Miquelon</Name><Region>North America</Region><Population>7,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>242</SurfaceArea></Row>\n<Row><Code>VCT</Code><Continent>North America</Continent><Name>Saint Vincent and the Grenadines</Name><Region>Caribbean</Region><Population>114,000</Population><IndependenceYear>1979</IndependenceYear><SurfaceArea>388</SurfaceArea></Row>\n<Row><Code>TTO</Code><Continent>North America</Continent><Name>Trinidad and Tobago</Name><Region>Caribbean</Region><Population>1,295,000</Population><IndependenceYear>1962</IndependenceYear><SurfaceArea>5,130</SurfaceArea></Row>\n<Row><Code>TCA</Code><Continent>North America</Continent><Name>Turks and Caicos Islands</Name><Region>Caribbean</Region><Population>17,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>430</SurfaceArea></Row>\n<Row><Code>USA</Code><Continent>North America</Continent><Name>United States</Name><Region>North America</Region><Population>278,357,000</Population><IndependenceYear>1776</IndependenceYear><SurfaceArea>9,363,520</SurfaceArea></Row>\n<Row><Code>VGB</Code><Continent>North America</Continent><Name>Virgin Islands, British</Name><Region>Caribbean</Region><Population>21,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>151</SurfaceArea></Row>\n<Row><Code>VIR</Code><Continent>North America</Continent><Name>Virgin Islands, U.S.</Name><Region>Caribbean</Region><Population>93,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>347</SurfaceArea></Row>\n<Row><Code>ASM</Code><Continent>Oceania</Continent><Name>American Samoa</Name><Region>Polynesia</Region><Population>68,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>199</SurfaceArea></Row>\n<Row><Code>AUS</Code><Continent>Oceania</Continent><Name>Australia</Name><Region>Australia and New Zealand</Region><Population>18,886,000</Population><IndependenceYear>1901</IndependenceYear><SurfaceArea>7,741,220</SurfaceArea></Row>\n<Row><Code>CXR</Code><Continent>Oceania</Continent><Name>Christmas Island</Name><Region>Australia and New Zealand</Region><Population>2,500</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>135</SurfaceArea></Row>\n<Row><Code>CCK</Code><Continent>Oceania</Continent><Name>Cocos (Keeling) Islands</Name><Region>Australia and New Zealand</Region><Population>600</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>14</SurfaceArea></Row>\n<Row><Code>COK</Code><Continent>Oceania</Continent><Name>Cook Islands</Name><Region>Polynesia</Region><Population>20,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>236</SurfaceArea></Row>\n<Row><Code>FJI</Code><Continent>Oceania</Continent><Name>Fiji Islands</Name><Region>Melanesia</Region><Population>817,000</Population><IndependenceYear>1970</IndependenceYear><SurfaceArea>18,274</SurfaceArea></Row>\n<Row><Code>PYF</Code><Continent>Oceania</Continent><Name>French Polynesia</Name><Region>Polynesia</Region><Population>235,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>4,000</SurfaceArea></Row>\n<Row><Code>GUM</Code><Continent>Oceania</Continent><Name>Guam</Name><Region>Micronesia</Region><Population>168,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>549</SurfaceArea></Row>\n<Row><Code>KIR</Code><Continent>Oceania</Continent><Name>Kiribati</Name><Region>Micronesia</Region><Population>83,000</Population><IndependenceYear>1979</IndependenceYear><SurfaceArea>726</SurfaceArea></Row>\n<Row><Code>MHL</Code><Continent>Oceania</Continent><Name>Marshall Islands</Name><Region>Micronesia</Region><Population>64,000</Population><IndependenceYear>1990</IndependenceYear><SurfaceArea>181</SurfaceArea></Row>\n<Row><Code>FSM</Code><Continent>Oceania</Continent><Name>Micronesia, Federated States of</Name><Region>Micronesia</Region><Population>119,000</Population><IndependenceYear>1990</IndependenceYear><SurfaceArea>702</SurfaceArea></Row>\n<Row><Code>NRU</Code><Continent>Oceania</Continent><Name>Nauru</Name><Region>Micronesia</Region><Population>12,000</Population><IndependenceYear>1968</IndependenceYear><SurfaceArea>21</SurfaceArea></Row>\n<Row><Code>NCL</Code><Continent>Oceania</Continent><Name>New Caledonia</Name><Region>Melanesia</Region><Population>214,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>18,575</SurfaceArea></Row>\n<Row><Code>NZL</Code><Continent>Oceania</Continent><Name>New Zealand</Name><Region>Australia and New Zealand</Region><Population>3,862,000</Population><IndependenceYear>1907</IndependenceYear><SurfaceArea>270,534</SurfaceArea></Row>\n<Row><Code>NIU</Code><Continent>Oceania</Continent><Name>Niue</Name><Region>Polynesia</Region><Population>2,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>260</SurfaceArea></Row>\n<Row><Code>NFK</Code><Continent>Oceania</Continent><Name>Norfolk Island</Name><Region>Australia and New Zealand</Region><Population>2,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>36</SurfaceArea></Row>\n<Row><Code>MNP</Code><Continent>Oceania</Continent><Name>Northern Mariana Islands</Name><Region>Micronesia</Region><Population>78,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>464</SurfaceArea></Row>\n<Row><Code>PLW</Code><Continent>Oceania</Continent><Name>Palau</Name><Region>Micronesia</Region><Population>19,000</Population><IndependenceYear>1994</IndependenceYear><SurfaceArea>459</SurfaceArea></Row>\n<Row><Code>PNG</Code><Continent>Oceania</Continent><Name>Papua New Guinea</Name><Region>Melanesia</Region><Population>4,807,000</Population><IndependenceYear>1975</IndependenceYear><SurfaceArea>462,840</SurfaceArea></Row>\n<Row><Code>PCN</Code><Continent>Oceania</Continent><Name>Pitcairn</Name><Region>Polynesia</Region><Population>50</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>49</SurfaceArea></Row>\n<Row><Code>WSM</Code><Continent>Oceania</Continent><Name>Samoa</Name><Region>Polynesia</Region><Population>180,000</Population><IndependenceYear>1962</IndependenceYear><SurfaceArea>2,831</SurfaceArea></Row>\n<Row><Code>SLB</Code><Continent>Oceania</Continent><Name>Solomon Islands</Name><Region>Melanesia</Region><Population>444,000</Population><IndependenceYear>1978</IndependenceYear><SurfaceArea>28,896</SurfaceArea></Row>\n<Row><Code>TKL</Code><Continent>Oceania</Continent><Name>Tokelau</Name><Region>Polynesia</Region><Population>2,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>12</SurfaceArea></Row>\n<Row><Code>TON</Code><Continent>Oceania</Continent><Name>Tonga</Name><Region>Polynesia</Region><Population>99,000</Population><IndependenceYear>1970</IndependenceYear><SurfaceArea>650</SurfaceArea></Row>\n<Row><Code>TUV</Code><Continent>Oceania</Continent><Name>Tuvalu</Name><Region>Polynesia</Region><Population>12,000</Population><IndependenceYear>1978</IndependenceYear><SurfaceArea>26</SurfaceArea></Row>\n<Row><Code>UMI</Code><Continent>Oceania</Continent><Name>United States Minor Outlying Islands</Name><Region>Micronesia/Caribbean</Region><Population>0</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>16</SurfaceArea></Row>\n<Row><Code>VUT</Code><Continent>Oceania</Continent><Name>Vanuatu</Name><Region>Melanesia</Region><Population>190,000</Population><IndependenceYear>1980</IndependenceYear><SurfaceArea>12,189</SurfaceArea></Row>\n<Row><Code>WLF</Code><Continent>Oceania</Continent><Name>Wallis and Futuna</Name><Region>Polynesia</Region><Population>15,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>200</SurfaceArea></Row>\n<Row><Code>ARG</Code><Continent>South America</Continent><Name>Argentina</Name><Region>South America</Region><Population>37,032,000</Population><IndependenceYear>1816</IndependenceYear><SurfaceArea>2,780,400</SurfaceArea></Row>\n<Row><Code>BOL</Code><Continent>South America</Continent><Name>Bolivia</Name><Region>South America</Region><Population>8,329,000</Population><IndependenceYear>1825</IndependenceYear><SurfaceArea>1,098,581</SurfaceArea></Row>\n<Row><Code>BRA</Code><Continent>South America</Continent><Name>Brazil</Name><Region>South America</Region><Population>170,115,000</Population><IndependenceYear>1822</IndependenceYear><SurfaceArea>8,547,403</SurfaceArea></Row>\n<Row><Code>CHL</Code><Continent>South America</Continent><Name>Chile</Name><Region>South America</Region><Population>15,211,000</Population><IndependenceYear>1810</IndependenceYear><SurfaceArea>756,626</SurfaceArea></Row>\n<Row><Code>COL</Code><Continent>South America</Continent><Name>Colombia</Name><Region>South America</Region><Population>42,321,000</Population><IndependenceYear>1810</IndependenceYear><SurfaceArea>1,138,914</SurfaceArea></Row>\n<Row><Code>ECU</Code><Continent>South America</Continent><Name>Ecuador</Name><Region>South America</Region><Population>12,646,000</Population><IndependenceYear>1822</IndependenceYear><SurfaceArea>283,561</SurfaceArea></Row>\n<Row><Code>FLK</Code><Continent>South America</Continent><Name>Falkland Islands</Name><Region>South America</Region><Population>2,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>12,173</SurfaceArea></Row>\n<Row><Code>GUF</Code><Continent>South America</Continent><Name>French Guiana</Name><Region>South America</Region><Population>181,000</Population><IndependenceYear>0000</IndependenceYear><SurfaceArea>90,000</SurfaceArea></Row>\n<Row><Code>GUY</Code><Continent>South America</Continent><Name>Guyana</Name><Region>South America</Region><Population>861,000</Population><IndependenceYear>1966</IndependenceYear><SurfaceArea>214,969</SurfaceArea></Row>\n<Row><Code>PRY</Code><Continent>South America</Continent><Name>Paraguay</Name><Region>South America</Region><Population>5,496,000</Population><IndependenceYear>1811</IndependenceYear><SurfaceArea>406,752</SurfaceArea></Row>\n<Row><Code>PER</Code><Continent>South America</Continent><Name>Peru</Name><Region>South America</Region><Population>25,662,000</Population><IndependenceYear>1821</IndependenceYear><SurfaceArea>1,285,216</SurfaceArea></Row>\n<Row><Code>SUR</Code><Continent>South America</Continent><Name>Suriname</Name><Region>South America</Region><Population>417,000</Population><IndependenceYear>1975</IndependenceYear><SurfaceArea>163,265</SurfaceArea></Row>\n<Row><Code>URY</Code><Continent>South America</Continent><Name>Uruguay</Name><Region>South America</Region><Population>3,337,000</Population><IndependenceYear>1828</IndependenceYear><SurfaceArea>175,016</SurfaceArea></Row>\n<Row><Code>VEN</Code><Continent>South America</Continent><Name>Venezuela</Name><Region>South America</Region><Population>24,170,000</Population><IndependenceYear>1811</IndependenceYear><SurfaceArea>912,050</SurfaceArea></Row>\n</Rows>\n"
  },
  {
    "path": "ReportTests/Reports/testdata.rdl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\" xmlns:rd=\"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner\">\n  <Description>\n  </Description>\n  <Author>\n  </Author>\n  <PageHeight>11in</PageHeight>\n  <PageWidth>8.5in</PageWidth>\n  <DataSources>\n    <DataSource Name=\"DS1\">\n      <ConnectionProperties>\n        <DataProvider>xxx</DataProvider>\n        <ConnectString>dsn=PGSMREDYKAJNY;</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <Width>7.5in</Width>\n  <TopMargin>.25in</TopMargin>\n  <LeftMargin>.25in</LeftMargin>\n  <RightMargin>.25in</RightMargin>\n  <BottomMargin>.25in</BottomMargin>\n  <DataSets>\n    <DataSet Name=\"Data\">\n      <Query>\n        <DataSourceName>DS1</DataSourceName>\n        <CommandText>\n        </CommandText>\n      </Query>\n      <Fields>\n        <Field Name=\"decimalvalue\">\n          <DataField>decimalvalue</DataField>\n          <rd:TypeName>System.Decimal</rd:TypeName>\n        </Field>\n        <Field Name=\"datetimevalue\">\n          <DataField>datetimevalue</DataField>\n          <rd:TypeName>System.Datetime</rd:TypeName>\n        </Field>\n      </Fields>\n      <fyi:Rows xmlns:fyi=\"http://www.fyireporting.com/schemas\">\n        <Row>\n          <decimalvalue>1.99</decimalvalue>\n        </Row>\n        <Row>\n          <decimalvalue>2011.89</decimalvalue>\n        </Row>\n        <Row>\n          <decimalvalue>300,78</decimalvalue>\n        </Row>\n        <Row>\n          <decimalvalue>4</decimalvalue>\n        </Row>\n        <Row>\n          <decimalvalue>5</decimalvalue>\n        </Row>\n        <Row>\n          <decimalvalue>6</decimalvalue>\n        </Row>\n        <Row>\n          <decimalvalue>7</decimalvalue>\n        </Row>\n        <Row>\n          <decimalvalue>8</decimalvalue>\n        </Row>\n        <Row>\n          <decimalvalue>9</decimalvalue>\n        </Row>\n      </fyi:Rows>\n    </DataSet>\n  </DataSets>\n  <PageHeader>\n    <Height>.5in</Height>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageHeader>\n  <Body>\n    <Height>25.0pt</Height>\n    <ReportItems>\n      <Table Name=\"Table1\">\n        <DataSetName>Data</DataSetName>\n        <NoRows>Query returned no rows!</NoRows>\n        <Style>\n          <BorderStyle>\n            <Default>Solid</Default>\n          </BorderStyle>\n          <BorderColor />\n          <BorderWidth />\n        </Style>\n        <TableColumns>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn>\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn >\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn >\n            <Width>1in</Width>\n          </TableColumn>\n          <TableColumn >\n            <Width>153.9pt</Width>\n          </TableColumn>\n        </TableColumns>\n        <Header>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox5\">\n                      <Value>decimal str</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox1\">\n                      <Value>#,##0.00</Value>\n                      <Style>\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox3\">\n                      <Value>#,##0</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell >\n                  <ReportItems>\n                    <Textbox Name=\"Textbox8\">\n                      <Value>datetime str</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell >\n                  <ReportItems>\n                    <Textbox Name=\"Textbox10\">\n                      <Value>MM/dd/yyyy</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell >\n                  <ReportItems>\n                    <Textbox Name=\"Textbox12\">\n                      <Value>dddd, MMMM dd, yyyy HH:mm:ss</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <TextAlign>Center</TextAlign>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <FontWeight>Bold</FontWeight>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n          <RepeatOnNewPage>true</RepeatOnNewPage>\n        </Header>\n        <Details>\n          <TableRows>\n            <TableRow>\n              <Height>12 pt</Height>\n              <TableCells>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox7\">\n                      <Value>=Fields!decimalvalue.Value</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox2\">\n                      <Value>=Fields!decimalvalue.Value</Value>\n                      <CanGrow>true</CanGrow>\n                      <Style>\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <Format>#,##0.00</Format>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell>\n                  <ReportItems>\n                    <Textbox Name=\"Textbox4\">\n                      <Value>=Fields!decimalvalue.Value</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <Format>#,##0</Format>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell >\n                  <ReportItems>\n                    <Textbox Name=\"Textbox9\">\n                      <Value>=Fields!datetimevalue.Value</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <Format>#,##0</Format>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell >\n                  <ReportItems>\n                    <Textbox Name=\"Textbox11\">\n                      <Value>=Fields!datetimevalue.Value</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <Format>MM/dd/yyyy</Format>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n                <TableCell >\n                  <ReportItems>\n                    <Textbox Name=\"Textbox13\">\n                      <Value>=Fields!datetimevalue.Value</Value>\n                      <Style xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition\">\n                        <BorderStyle>\n                          <Default>Solid</Default>\n                        </BorderStyle>\n                        <BorderColor />\n                        <BorderWidth />\n                        <Format>dddd, MMMM dd, yyyy HH:mm:ss</Format>\n                      </Style>\n                    </Textbox>\n                  </ReportItems>\n                </TableCell>\n              </TableCells>\n            </TableRow>\n          </TableRows>\n        </Details>\n        <Left>0.0pt</Left>\n        <Top>0.0pt</Top>\n      </Table>\n    </ReportItems>\n  </Body>\n  <PageFooter>\n    <Height>14pt</Height>\n    <ReportItems>\n      <Textbox Name=\"Textbox6\">\n        <Top>1pt</Top>\n        <Left>10pt</Left>\n        <Height>12pt</Height>\n        <Width>3in</Width>\n        <Value>=Globals!PageNumber + ' of ' + Globals!TotalPages</Value>\n        <Style>\n          <FontSize>10pt</FontSize>\n          <FontWeight>Normal</FontWeight>\n        </Style>\n      </Textbox>\n    </ReportItems>\n    <PrintOnFirstPage>true</PrintOnFirstPage>\n    <PrintOnLastPage>true</PrintOnLastPage>\n  </PageFooter>\n</Report>"
  },
  {
    "path": "ReportTests/Utils/GeneralUtils.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Text;\n\nnamespace ReportTests.Utils\n{\n    public static class GeneralUtils\n    {\n        public static void ChangeCurrentCultrue(string cultureName)\n        {\n            var thread = System.Threading.Thread.CurrentThread;\n\n            thread.CurrentCulture = new CultureInfo(cultureName);\n        }\n\n        public static Uri OutputTestsFolder()\n        {\n            string tmpf = System.IO.Path.GetTempPath();\n            return new Uri(System.IO.Path.Combine(tmpf, \"rdlTestResults\", Guid.NewGuid().ToString()));\n        }\n\n        public static Uri ReportsFolder(string subFoder = null)\n        {\n            string defaultReportsFolder = \"Reports/\";\n            string cwd = CurrentDirectory();\n            if (subFoder != null)\n                return new Uri(System.IO.Path.Combine(cwd, defaultReportsFolder, subFoder));\n            else\n                return new Uri(System.IO.Path.Combine(cwd, defaultReportsFolder));\n        }\n\n        static string CurrentDirectory()\n        {\n            return AppContext.BaseDirectory;\n        }\n    }\n}"
  },
  {
    "path": "ReportTests/Utils/OpenXmlUtils.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing DocumentFormat.OpenXml.Packaging;\nusing DocumentFormat.OpenXml.Validation;\n\nnamespace ReportTests.Utils\n{\n    public static class OpenXmlUtils\n    {\n\n\n        public static bool ValidateSpreadsheetDocument(string calcfile)\n        {\n            return ValidateOpenXmlDocument(SpreadsheetDocument.Open(calcfile, true));\n        }\n\n\n        private static bool ValidateOpenXmlDocument(OpenXmlPackage package )\n        {\n            string errorDesc = \"\";\n            try\n            {\n                OpenXmlValidator validator = new OpenXmlValidator();\n                int count = 0;\n                foreach (ValidationErrorInfo error in validator.Validate(package))\n                {\n                    count++;\n                    errorDesc += String.Format(\"Error: {0}\", count) + Environment.NewLine;\n                    errorDesc += String.Format(\"Description: {0}\", error.Description) + Environment.NewLine;\n                    errorDesc += String.Format(\"Path: {0}\", error.Path.XPath) + Environment.NewLine;\n                    errorDesc += String.Format(\"Part: {0}\", error.Part.Uri) + Environment.NewLine;\n                    errorDesc += \"-------------------------------------------\" + Environment.NewLine;\n                }\n            }\n            catch (Exception ex)\n            {\n                errorDesc += ex.Message;\n            }\n            if (!string.IsNullOrEmpty(errorDesc))\n            {\n                throw new Exception(errorDesc);\n            }\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "ReportTests/Utils/RandomDateTime.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace ReportTests.Utils\n{\n    public class RandomDateTime\n    {\n        DateTime start;\n        Random gen = new Random();\n        int range;\n\n        public RandomDateTime(int yearStart,int monthStart,int dayStart)\n        {\n            start = new DateTime(yearStart, monthStart, dayStart);\n            gen = new Random();\n            range = (DateTime.Today - start).Days;\n        }\n\n        public DateTime Next()\n        {\n            return start.AddDays(gen.Next(range)).AddHours(gen.Next(0, 24)).AddMinutes(gen.Next(0, 60)).AddSeconds(gen.Next(0, 60));\n        }\n    }\n}\n"
  },
  {
    "path": "ReportTests/Utils/RdlUtils.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Majorsilence.Reporting.Rdl;\n\nnamespace ReportTests.Utils\n{\n    public static class RdlUtils\n    {\n        public static async Task<Report> GetReport(Uri uri2Rdl, string overWriteConnectionString = null)\n        {\n            //string cwd = System.Environment.CurrentDirectory;\n\n            //var rdlView = new Majorsilence.Reporting.RdlViewer.RdlViewer();\n            //rdlView.SourceFile = new Uri(System.IO.Path.Combine(cwd,\"Reports\", \"FunctionTest.rdl\"));\n            string filePath = uri2Rdl.LocalPath;\n            // Now parse the file \n            string source = System.IO.File.ReadAllText(filePath);\n\n            RDLParser rdlp;\n            Report r;\n\n            rdlp = new RDLParser(source);\n            // RDLParser takes RDL XML and Parse compiles the report\n            if (!string.IsNullOrWhiteSpace(overWriteConnectionString))\n            {\n                rdlp.OverwriteConnectionString = overWriteConnectionString;\n            }\n\n            r = await rdlp.Parse();\n            if (r.ErrorMaxSeverity > 0)\n            {\n                foreach (string emsg in r.ErrorItems)\n                {\n                    //  Console.WriteLine(emsg);\n                }\n\n                int severity = r.ErrorMaxSeverity;\n                r.ErrorReset();\n                if (severity > 4)\n                {\n                    r = null; // don't return when severe errors\n                }\n            }\n\n            return r;\n        }\n    }\n}"
  },
  {
    "path": "ReportTests/iTextSharpTests.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing DocumentFormat.OpenXml.Packaging;\nusing DocumentFormat.OpenXml.Validation;\nusing Majorsilence.Reporting.Rdl;\nusing NUnit.Framework;\nusing ReportTests.Utils;\n\nnamespace ReportTests\n{\n    [TestFixture]\n    public class iTextSharpTests\n    {\n\n        private Uri _reportFolder = null;\n        private Uri _outputFolder = null;\n        private string _extOuput = \".pdf\";\n\n\n        [SetUp]\n        public void Prepare2Tests()\n        {\n            if (_outputFolder == null)\n            {\n                _outputFolder = GeneralUtils.OutputTestsFolder();\n            }\n\n            _reportFolder = GeneralUtils.ReportsFolder();\n\n            Directory.CreateDirectory(_outputFolder.LocalPath);\n\n            RdlEngineConfig.RdlEngineConfigInit();\n        }\n\n        private static readonly object[] TestCasesiTextSharpDraw =\n        {\n            new object[]{\"LineObjects.rdl\",\n                            \"en-US\",\n                            \"\",\n                            null }\n\n        };\n\n        [Test, TestCaseSource(\"TestCasesiTextSharpDraw\")]\n        public async Task iTextSharpDraw(string file2test,\n                                      string cultureName,\n                                      string suffixFileName,\n                                      Func<Dictionary<string, IEnumerable>> fillDatasets)\n        {\n            GeneralUtils.ChangeCurrentCultrue(cultureName);\n            OneFileStreamGen sg = null;\n\n            Uri fileRdlUri = new Uri(_reportFolder, file2test);\n            Report rap = await RdlUtils.GetReport(fileRdlUri);\n            rap.Folder = _reportFolder.LocalPath;\n            if (fillDatasets != null)\n            {\n                Dictionary<string, IEnumerable> dataSets = fillDatasets();\n\n                foreach (var dataset in dataSets)\n                {\n                    await rap.DataSets[dataset.Key].SetData(dataset.Value);\n                }\n            }\n            await rap.RunGetData(null);\n\n            string fileNameOut = string.Format(\"{0}_{1}_{2}{3}\",\n                                                file2test,\n                                                cultureName,\n                                                suffixFileName,\n                                                _extOuput);\n\n            string fullOutputPath = System.IO.Path.Combine(_outputFolder.LocalPath, fileNameOut);\n            sg = new OneFileStreamGen(fullOutputPath, true);\n            await rap.RunRender(sg, OutputPresentationType.PDF);\n        }\n\n    }\n}\n"
  },
  {
    "path": "ReportTests.Windows/DesignerUtilityTests.cs",
    "content": "﻿using Majorsilence.Reporting.RdlDesign;\nusing NUnit.Framework;\nusing System;\n\nnamespace ReportTests.Windows\n{\n    [TestFixture]\n    public class DesignerUtilityTests\n    {\n        [TestCase(\"=Parameters!Test.Value\", \"Test\")]\n        [TestCase(\"={?Test}\", \"Test\")]\n        public void ExtractParameterNameFromExpression(string expression, string expectedname)\n        {\n            var result = DesignerUtility.ExtractParameterNameFromParameterExpression(expression);\n            Assert.That(result.Equals(expectedname));\n        }\n    }\n}\n"
  },
  {
    "path": "ReportTests.Windows/ReportTests.Windows.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n        <TargetFrameworks>net48;net8.0-windows;net10.0-windows</TargetFrameworks>\n        <LangVersion>latest</LangVersion>\n        <UseWindowsForms>true</UseWindowsForms>\n        <ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>\n        <ImplicitUsings>enable</ImplicitUsings>\n        <Nullable>enable</Nullable>\n    </PropertyGroup>\n\n    <ItemGroup>\n        <ProjectReference Include=\"..\\DataProviders\\Majorsilence.Reporting.DataProviders.csproj\" />\n        <ProjectReference Include=\"..\\RdlCmd\\RdlCmd.csproj\" />\n        <ProjectReference Include=\"..\\RdlCri\\Majorsilence.Reporting.RdlCri.csproj\" />\n        <ProjectReference Include=\"..\\RdlDesign\\Majorsilence.Reporting.ReportDesigner.csproj\" />\n        <ProjectReference Include=\"..\\RdlDesktop\\RdlDesktop.csproj\" />\n        <ProjectReference Include=\"..\\RdlEngine\\Majorsilence.Reporting.RdlEngine.csproj\" />\n        <ProjectReference Include=\"..\\RdlMapFile\\RdlMapFile.csproj\" />\n        <ProjectReference Include=\"..\\RdlReader\\RdlReader.csproj\" />\n        <ProjectReference Include=\"..\\RdlViewer\\RdlViewer.csproj\" />\n        <ProjectReference Include=\"..\\EncryptionProvider\\EncryptionProvider.csproj\" />\n    </ItemGroup>\n    <ItemGroup>\n        <None Include=\"..\\RdlEngine\\RdlEngineConfig.xml\">\n            <Link>RdlEngineConfig.xml</Link>\n            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n        </None>\n    </ItemGroup>\n    <ItemGroup>\n        <PackageReference Include=\"DocumentFormat.OpenXml\" />\n        <PackageReference Include=\"Microsoft.Data.SqlClient\" />\n        <PackageReference Include=\"Microsoft.Data.Sqlite\" />\n        <PackageReference Include=\"Microsoft.NET.Test.Sdk\" />\n        <PackageReference Include=\"Npgsql\" />\n        <PackageReference Include=\"NUnit\" />\n        <PackageReference Include=\"NUnit3TestAdapter\" />\n        <PackageReference Include=\"coverlet.collector\" />\n        <PackageReference Include=\"SharpZipLib\" />\n    </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "ReportTests.Windows/StringEncryptionTests.cs",
    "content": "﻿using System;\nusing EncryptionProvider.String;\nusing NUnit.Framework;\n\nnamespace ReportTests.Windows\n{\n    [TestFixture()]\n    public class StringEncryptionTests\n    {\n        [Test()]\n        public void DecryptTest()\n        {\n            // Arrange\n            // var pass = \"Your+Secret+Static+Encryption+Key+Goes+Here=\";\n            var pass = \"AAECAwQFBgcICQoLDA0ODw==\";\n\n            // var pass2 = \"This is a test key\";\n            var pass2 = \"CCECAwQFBgcICQoLDA0ODw==\";\n            var subject = new StringEncryption(pass);\n            var subject2 = new StringEncryption(pass2);\n            var originalString = \"Testing123!£$\";\n\n            // Act\n            var encryptedString1 = subject.Encrypt(originalString);\n            var encryptedString2 = subject.Encrypt(originalString);\n            var decryptedString1 = subject.Decrypt(encryptedString1);\n            var decryptedString2 = subject.Decrypt(encryptedString2);\n\n            var encryptedString3 = subject2.Encrypt(originalString);\n            var encryptedString4 = subject2.Encrypt(originalString);\n            var decryptedString3 = subject2.Decrypt(encryptedString3);\n            var decryptedString4 = subject2.Decrypt(encryptedString4);\n\n            // Assert\n            Assert.That(originalString, Is.EqualTo(decryptedString1), \"Decrypted string should match original string\");\n            Assert.That(originalString, Is.EqualTo(decryptedString2), \"Decrypted string should match original string\");\n            Assert.That(originalString, Is.EqualTo(decryptedString3), \"Decrypted string should match original string\");\n            Assert.That(originalString, Is.EqualTo(decryptedString4), \"Decrypted string should match original string\");\n\n\n        }\n\n        [Test()]\n        public void EncryptTest()\n        {\n            var pass = \"Your+Secret+Static+Encryption+Key+Goes+Here=\";\n            var pass2 = \"This is a test key\";\n            var subject = new StringEncryption(pass);\n            var subject2 = new StringEncryption(pass2);\n            var originalString = \"Testing123!£$\";\n\n            // Act\n            var encryptedString1 = subject.Encrypt(originalString);\n            var encryptedString2 = subject.Encrypt(originalString);\n            var encryptedString3 = subject.Encrypt(originalString);\n            var encryptedString4 = subject.Encrypt(originalString);\n\n            Assert.That(originalString, Is.Not.EqualTo(encryptedString1), \"Encrypted string should not match original string\");\n            Assert.That(encryptedString1, Is.Not.EqualTo(encryptedString2), \"String should never be encrypted the same twice\");\n            Assert.That(originalString, Is.Not.EqualTo(encryptedString3), \"Encrypted string should not match original string\");\n            Assert.That(encryptedString3, Is.Not.EqualTo(encryptedString4), \"String should never be encrypted the same twice\");\n        }\n    }\n}\n\n"
  },
  {
    "path": "Specification.md",
    "content": "# Majorsilence.Reporting RDL XML Specification\n\n\nDraft Date: December 28, 2025\n\n\n## Overview\n\nThis document specifies the structure and elements of the Report Definition Language (RDL) XML files supported by the `Majorsilence.Reporting` engine. The RDL file describes the layout, data sources, parameters, and rendering instructions for a report.\n\n## Schema / targetNamespace\n\n- Primary XSD (implementation reference): `jekyll_site/schemas/reporting/2025/12/reportdefinition/ReportDefinition.xsd`\n- targetNamespace used by the schema: `http://reporting.majorsilence.com/schemas/reporting/2025/12/reportdefinition`\n- The schema uses `elementFormDefault=\"qualified\"` — elements must be in the target namespace when validating.\n\nWhen authoring or validating reports for this engine prefer the schema above (or a compatible RDL variant). Note: the engine supports a number of extensions not present in the canonical Microsoft RDL schemas — these are documented below.\n\n## Root Element\n\n- `<Report>`: The root element. All other elements are children of this node. Use the RDL namespace in documents that target the Majorsilence schema (for example: `xmlns=\"http://reporting.majorsilence.com/schemas/reporting/2025/12/reportdefinition\"`) so the file can be validated against the XSD shipped in `jekyll_site`.\n\n## Child Elements\n\n- `<Description>`: (Optional) Text describing the report.\n- `<Author>`: (Optional) The report author.\n- `<AutoRefresh>`: (Optional) Integer, page auto-refresh interval in seconds.\n- `<DataSources>`: (Optional) Contains one or more `<DataSource>` elements. Required only if the report references external data connections.\n- `<DataSets>`: (Optional) Contains one or more `<DataSet>` elements. Required only if the report defines datasets.\n- `<ReportParameters>`: (Optional) Contains one or more `<ReportParameter>` elements. See details below.\n- `<PageWidth>`: (Recommended) The width of the report page (e.g., `8.5in`).\n- `<PageHeight>`: (Recommended) The height of the report page (e.g., `11in`).\n- `<LeftMargin>`, `<RightMargin>`, `<TopMargin>`, `<BottomMargin>`: (Optional) Margins. Engine defaults may vary; specify explicitly in the report for portability.\n- `<EmbeddedImages>`: (Optional) Contains one or more `<EmbeddedImage>` elements.\n- `<Language>`: (Optional) The primary language (default: server or engine language if not specified).\n- `<Code>`: (Optional) Embedded VB.NET code. (The standard RDL format historically supports VB.NET for embedded code.)\n- `<CodeModules>`: (Optional) List of external code modules to reference.\n- `<Classes>`: (Optional) Custom extension used by Majorsilence.Reporting to instantiate classes at report-load time. This is not part of the standard RDL schema and will fail strict RDL XSD validation unless your processor explicitly supports the extension. See \"Engine-specific extensions\" below.\n- `<DataTransform>`: (Optional) Path to a data transformation (XSLT).\n- `<DataSchema>`: (Optional) Data schema or namespace.\n- `<DataElementName>`: (Optional) Name for the top-level data element (default: `Report`).\n- `<DataElementStyle>`: (Optional) Rendering style for data elements (engine-specific; e.g., `AttributeNormal`).\n- `<Body>`: (Required) Contains the main report items and sizing. The `<Body>` element typically contains a `<Height>` and a `<Width>` which describe the body (printable) area. Note: page size is defined by `<PageWidth>`/`<PageHeight>` on the report root; body width/height live under `<Body>`.\n\n## ReportParameters\n\n- `<ReportParameters>`: (Optional) Container for report parameters.\n  - `<ReportParameter Name=\"...\">`: Defines a single parameter.\n    - `<DataType>`: (Recommended) The data type (e.g., `String`, `Integer`, `DateTime`).\n    - `<Prompt>`: (Optional) The prompt text for the parameter.\n    - `<DefaultValues>`: (Optional) The default values container.\n      - `<Values>`\n        - `<Value>`: (Optional) A single default value.\n    - `<ValidValues>`: (Optional) A container for allowed values. For static lists use a simple values collection:\n      - `<Values>`\n        - `<Value>` (or use `<ParameterValues>` / `<ParameterValue>` with `<Label>` and `<Value>` where supported by the engine).\n    - Other parameter-specific elements as supported by the engine.\n\n**Example:**\n```xml\n<ReportParameters>\n  <ReportParameter Name=\"StartDate\">\n    <DataType>DateTime</DataType>\n    <Prompt>Start Date</Prompt>\n    <DefaultValues>\n      <Values>\n        <Value>2024-01-01</Value>\n      </Values>\n    </DefaultValues>\n  </ReportParameter>\n  <ReportParameter Name=\"Category\">\n    <DataType>String</DataType>\n    <Prompt>Category</Prompt>\n    <ValidValues>\n      <Values>\n        <Value>Books</Value>\n        <Value>Electronics</Value>\n      </Values>\n    </ValidValues>\n  </ReportParameter>\n</ReportParameters>\n```\n\nNotes on parameters: the exact container names (`DefaultValues`/`Values`/`Value`, `ValidValues`/`Values`/`Value` or `ParameterValues`/`ParameterValue`) can vary between RDL versions and engines; validate your documents against the XSD for the RDL version you target.\n\n## Example\n\nA short, corrected example that follows the typical RDL 2008-style layout and uses the RDL namespace:\n\n```xml\n<Report xmlns=\"http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition\">\n  <Description>Sample report</Description>\n  <Author>majorsilence</Author>\n  <AutoRefresh>0</AutoRefresh>\n  <DataSources>\n    <DataSource Name=\"DataSource1\">\n      <ConnectionProperties>\n        <DataProvider>SQL</DataProvider>\n        <ConnectString>Data Source=localhost;Initial Catalog=SampleDb;</ConnectString>\n      </ConnectionProperties>\n    </DataSource>\n  </DataSources>\n  <DataSets>\n    <DataSet Name=\"DataSet1\">\n      <Query>\n        <DataSourceName>DataSource1</DataSourceName>\n        <CommandText>SELECT * FROM SampleTable</CommandText>\n      </Query>\n    </DataSet>\n  </DataSets>\n  <ReportParameters>\n    <ReportParameter Name=\"Param1\">\n      <DataType>String</DataType>\n      <Prompt>Parameter 1</Prompt>\n    </ReportParameter>\n  </ReportParameters>\n\n  <!-- Page size (report-level) -->\n  <PageWidth>8.5in</PageWidth>\n  <PageHeight>11in</PageHeight>\n\n  <!-- Margins -->\n  <LeftMargin>0.5in</LeftMargin>\n  <RightMargin>0.5in</RightMargin>\n  <TopMargin>0.5in</TopMargin>\n  <BottomMargin>0.5in</BottomMargin>\n\n  <EmbeddedImages>\n    <EmbeddedImage Name=\"Logo\">\n      <MIMEType>image/png</MIMEType>\n      <ImageData>...</ImageData>\n    </EmbeddedImage>\n  </EmbeddedImages>\n\n  <Language>en-US</Language>\n  <Code>\n    <![CDATA[\n      ' VB.NET code here\n    ]]>\n  </Code>\n  <CodeModules>\n    <CodeModule>MyCustomAssembly.dll</CodeModule>\n  </CodeModules>\n\n  <!-- Custom extension: Classes is NOT standard RDL. Keep it only if your engine supports it. -->\n  <Classes>\n    <Class Name=\"MyClass\">\n      <Instance>\n        <InstanceMember Name=\"MyMember\">Value</InstanceMember>\n      </Instance>\n    </Class>\n  </Classes>\n\n  <DataTransform>transform.xslt</DataTransform>\n  <DataSchema>http://example.com/schema</DataSchema>\n  <DataElementName>Report</DataElementName>\n  <DataElementStyle>AttributeNormal</DataElementStyle>\n\n  <Body>\n    <!-- Body sizing (use Body/Width for printable area width) -->\n    <Width>8in</Width>\n    <Height>9in</Height>\n    <!-- Report items go here -->\n  </Body>\n</Report>\n```\n\n## Engine-specific extensions and behavior\n\nThe Majorsilence.Reporting XSD and implementation include several engine-specific extensions and behaviors not present in every canonical RDL distribution. These are supported by the runtime and definition classes under `RdlEngine/Definition` and `RdlEngine/Runtime`.\n\nKey extensions and notes:\n\n- Inline `<Rows>` inside a `<DataSet>` (engine extension):\n  - Purpose: allow embedding sample or static XML rows directly inside a DataSet for testing or offline reports.\n  - Where: Definition class `RdlEngine/Definition/Rows.cs` and `StaticRows.cs` (see `DataSetDefn.cs` for parsing). The XSD contains a `Rows`/`StaticRows` type and the implementation contains code comments noting this extension.\n  - Usage: `<Rows file=\"path-or-omit\">` … `</Rows>` or embedded `<XmlRowData>` child nodes. If `file` is present the engine will load row data from the file; otherwise use inline XML.\n\n- `<Classes>` and `Class` element instantiation:\n  - Purpose: instantiate CLR objects at report load time and make them available for expressions.\n  - Where: Definition classes `RdlEngine/Definition/Classes.cs` and `RdlEngine/Definition/ReportClass.cs`. Instances are wired into the runtime `Report` via `Report.Classes`.\n  - Notes: assemblies referenced by `CodeModules` should be available to the process; reflection/activator-based instantiation is used.\n\n- `<Code>` and `<CodeModules>` handling:\n  - Purpose: embedded VB.NET code and external modules referenced by the report.\n  - Where: `RdlEngine/Definition/Code.cs` and `CodeModules.cs`; `Report` initialization in `RdlEngine/Runtime/Report.cs` integrates compiled/external code.\n  - Notes: Code execution is sandboxed to the engine's expression evaluator; loading external assemblies requires those assemblies to be resolvable by the hosting process.\n\n- `DataSourceReference` and data source resolution:\n  - Purpose: allow references to shared data sources or external data source definitions.\n  - Where: `RdlEngine/Definition/DataSourceReference.cs` and `DataSourceDefn.cs`; runtime access in `RdlEngine/Runtime/DataSource.cs` and `DataSources.cs`.\n\n- `CustomReportItem` extensibility:\n  - Purpose: allows adding non-standard report items implemented by external assemblies.\n  - Where: Definition `RdlEngine/Definition/CustomReportItem.cs` and runtime interface `RdlEngine/Runtime/ICustomReportItem.cs`.\n  - Notes: Implementors must supply a runtime that implements `ICustomReportItem` and register it with the engine (see related comments in the source).\n\n- Connection provider resolution and configuration:\n  - The `ConnectionProperties` element includes a `DataProvider` string; the engine maps provider strings to data providers via `RdlEngine/Runtime/RdlEngineConfig.cs` and `RdlEngine/Definition/ConnectionProperties.cs`.\n\n## Mapping: XSD elements/types → Definition & Runtime source\n\nThis section provides a quick reference mapping from important XSD elements/types to the implementation files (relative to repo root). Use this to locate parsing/definition logic and runtime behavior.\n\nNote: this is a prioritized, non-exhaustive list of the most commonly-used types.\n\n- Report (element)\n  - Definition: `RdlEngine/Definition/ReportDefn.cs` (class ReportDefn)\n  - Runtime: `RdlEngine/Runtime/Report.cs` (class Report)\n\n- DataSources / DataSource\n  - Definition: `RdlEngine/Definition/DataSourcesDefn.cs`, `RdlEngine/Definition/DataSourceDefn.cs`\n  - Runtime: `RdlEngine/Runtime/DataSources.cs`, `RdlEngine/Runtime/DataSource.cs`\n\n- ConnectionProperties\n  - Definition: `RdlEngine/Definition/ConnectionProperties.cs`\n\n- DataSets / DataSet\n  - Definition: `RdlEngine/Definition/DataSetsDefn.cs`, `RdlEngine/Definition/DataSetDefn.cs`\n  - Runtime: `RdlEngine/Runtime/DataSets.cs`, `RdlEngine/Runtime/DataSet.cs`\n\n- Query / QueryParameter\n  - Definition: `RdlEngine/Definition/Query.cs`, `RdlEngine/Definition/QueryParameters.cs`, `RdlEngine/Definition/QueryParameter.cs`\n\n- Fields / Field\n  - Definition: `RdlEngine/Definition/Fields.cs`, `RdlEngine/Definition/Field.cs`\n\n- ReportParameters / ReportParameter\n  - Definition: `RdlEngine/Definition/ReportParameters.cs`, `RdlEngine/Definition/ReportParameter.cs`\n\n- Body / ReportItems / ReportItem\n  - Definition: `RdlEngine/Definition/Body.cs`, `RdlEngine/Definition/ReportItems.cs`, `RdlEngine/Definition/ReportItem.cs`\n  - Runtime (layout/rendering): `RdlEngine/Runtime/Page.cs`, `RdlEngine/Runtime/Pages.cs`, `RdlEngine/Runtime/PageTextHtml.cs`\n\n- Textbox / Image / Subreport\n  - Definition: `RdlEngine/Definition/Textbox.cs`, `RdlEngine/Definition/EmbeddedImage.cs`, `RdlEngine/Definition/Subreport.cs`\n  - Runtime: page item classes under `RdlEngine/Runtime` (see `PageTextHtml.cs` and related rendering code)\n\n- Table / Matrix / List\n  - Definition: `RdlEngine/Definition/Table*.cs` (Table/Rows/Columns etc.), `RdlEngine/Definition/Matrix.cs`, `RdlEngine/Definition/List.cs`\n\n- Chart\n  - Definition: `RdlEngine/Definition/Chart.cs` and many chart-specific files (e.g., `ChartBar.cs`, `ChartPie.cs`, `ChartData.cs`, `ChartSeries.cs`, `ChartGridLines.cs`)\n\n- Code / CodeModules\n  - Definition: `RdlEngine/Definition/Code.cs`, `RdlEngine/Definition/CodeModules.cs`, `RdlEngine/Definition/CodeModule.cs`\n  - Runtime: `RdlEngine/Runtime/Report.cs` integrates code modules at report load\n\n- Classes / Class instantiation\n  - Definition: `RdlEngine/Definition/Classes.cs`, `RdlEngine/Definition/ReportClass.cs`\n  - Runtime: instantiated and stored in `Report.Classes` (see `RdlEngine/Runtime/Report.cs`)\n\n- EmbeddedImages / EmbeddedImage\n  - Definition: `RdlEngine/Definition/EmbeddedImage.cs`\n  - Runtime: handled by `Report` at render time (image rendering code lives in `RdlEngine/Runtime`)\n\n- CustomReportItem\n  - Definition: `RdlEngine/Definition/CustomReportItem.cs`\n  - Runtime interface: `RdlEngine/Runtime/ICustomReportItem.cs`\n\n- Rows / StaticRows (inline XML rows extension)\n  - Definition: `RdlEngine/Definition/Rows.cs`, `RdlEngine/Definition/StaticRows.cs`, `RdlEngine/Definition/StaticRow.cs`\n  - Runtime: DataSet parsing loads row XML into runtime dataset objects (`RdlEngine/Runtime/DataSet.cs`)\n\n- Filters / Filter\n  - Definition: `RdlEngine/Definition/Filters.cs`, `RdlEngine/Definition/Filter.cs`\n\nThis mapping is not exhaustive — the `RdlEngine/Definition` directory contains numerous types for styling, grouping, sorting, chart/plot configuration and other fine-grained features. Use the mapping above as the most useful starting point.\n\n## Example snippets (recommended additions to the spec)\n\nBelow are concise examples you can paste into reports targeting the Majorsilence schema.\n\n1) Minimal report skeleton (use the Majorsilence target namespace):\n\n```xml\n<Report xmlns=\"http://reporting.majorsilence.com/schemas/reporting/2025/12/reportdefinition\">\n  <Body>\n    <Width>8in</Width>\n    <Height>2in</Height>\n  </Body>\n</Report>\n```\n\n2) DataSource with ConnectionProperties (most common case):\n\n```xml\n<DataSources>\n  <DataSource Name=\"DS1\">\n    <ConnectionProperties>\n      <DataProvider>SQL</DataProvider>\n      <ConnectString>Data Source=.;Initial Catalog=Northwind;</ConnectString>\n    </ConnectionProperties>\n  </DataSource>\n</DataSources>\n```\n\n3) DataSet with Query and Fields:\n\n```xml\n<DataSet Name=\"Products\">\n  <Query>\n    <DataSourceName>DS1</DataSourceName>\n    <CommandText>SELECT ProductID, ProductName FROM Products</CommandText>\n  </Query>\n  <Fields>\n    <Field Name=\"ProductID\"><DataField>ProductID</DataField></Field>\n    <Field Name=\"ProductName\"><DataField>ProductName</DataField></Field>\n  </Fields>\n</DataSet>\n```\n\n4) Inline Rows extension (engine-specific) — embed XML rows or reference a file:\n\n```xml\n<DataSet Name=\"InlineXml\">\n  <Fields>\n    <Field Name=\"Id\"><DataField>Id</DataField></Field>\n    <Field Name=\"Value\"><DataField>Value</DataField></Field>\n  </Fields>\n  <Rows>\n    <XmlRowData>\n      <Row><Id>1</Id><Value>One</Value></Row>\n      <Row><Id>2</Id><Value>Two</Value></Row>\n    </XmlRowData>\n  </Rows>\n</DataSet>\n```\n\n5) Classes + CodeModules (instantiate CLR helpers):\n\n```xml\n<CodeModules>\n  <CodeModule>MyHelpers.dll</CodeModule>\n</CodeModules>\n<Classes>\n  <Class Name=\"MyHelpers.MathHelper\" InstanceName=\"Math\"/>\n</Classes>\n```\n\n- The `Classes` element is implemented by `RdlEngine/Definition/Classes.cs` and `ReportClass.cs`. At runtime `Report` creates instances that can be referenced from expressions (see `Report.Classes` usage in `RdlEngine/Runtime/Report.cs`).\n\n## Notes and validation guidance\n\n- XML element and attribute names are case-sensitive. Use the exact element and attribute names required by the RDL version you target.\n- Required elements: `<Body>` is required for a valid report body. Page size (`<PageWidth>`/`<PageHeight>`) and margins are strongly recommended; if omitted the rendering engine will apply its defaults.\n- `<DataSources>` and `<DataSets>` are required only when the report references external data.\n- Embedded code is typically VB.NET in standard RDL; external code modules are supported via `<CodeModules>` when the engine allows external assemblies.\n- `<Classes>` and similar top-level extensions are not part of the official RDL schema and will fail strict XSD validation against Microsoft schemas; they are supported by this engine as implemented in `RdlEngine/Definition/Classes.cs`.\n- Unknown or non-standard elements will cause strict RDL XSD validation to fail. Some renderers may ignore unknown elements at runtime, but you cannot rely on this behavior for portability.\n- Always validate your RDL documents against the XSD in `jekyll_site/schemas/reporting/2025/12/reportdefinition/ReportDefinition.xsd` when targeting this codebase, and test reports against the `RdlEngine` implementation.\n\n## Appendix: Implementation files of interest (short list)\n\n- RdlEngine/Definition/ReportDefn.cs\n- RdlEngine/Definition/RDLParser.cs\n- RdlEngine/Definition/DataSetDefn.cs\n- RdlEngine/Definition/DataSourceDefn.cs\n- RdlEngine/Definition/Rows.cs\n- RdlEngine/Definition/StaticRows.cs\n- RdlEngine/Definition/Classes.cs\n- RdlEngine/Definition/ReportClass.cs\n- RdlEngine/Definition/Code.cs\n- RdlEngine/Definition/CodeModules.cs\n- RdlEngine/Definition/EmbeddedImage.cs\n- RdlEngine/Definition/CustomReportItem.cs\n- RdlEngine/Runtime/Report.cs\n- RdlEngine/Runtime/DataSet.cs\n- RdlEngine/Runtime/DataSource.cs\n- RdlEngine/Runtime/ICustomReportItem.cs\n- RdlEngine/Runtime/Pages.cs\n"
  },
  {
    "path": "Tests/TestParameterNameExtraction.cs",
    "content": "﻿using NUnit.Framework;\nusing System;\n\nnamespace Tests\n{\n    [TestFixture]\n    public class TestParameterNameExtraction\n    {\n        [TestCase(\"=Parameters!Test.Value\", \"Test\")]\n        [TestCase(\"={?Test}\", \"Test\")]\n        public void ExtractNameFromParameterExpression(string expression, string expectedParameterName)\n        {\n            ReportNames t = new fyiReporting.RdlDesign.re\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Tests.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netstandard2.0</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"NUnit\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\RdlDesign\\ReportDesigner.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "build-mac-wine-package.sh",
    "content": "#!/usr/bin/env bash\n\nset -e\n\n# This script builds a macOS package for a Wine application.\n\n# See https://github.com/majorsilence/wine-bundler\n\nexport WINEPREFIX=/opt/majorsilence/wine64\nexport WINEARCH=win64\n\nmkdir -p /opt/majorsilence && apt update \\\n    && dpkg --add-architecture i386 \\\n    && apt update \\\n    && apt install -y --no-install-recommends software-properties-common gnupg2 icnsutils xz-utils zip bc wget curl imagemagick icoutils rsync sed coreutils jq grep \\\n    && mkdir -pm755 /etc/apt/keyrings \\\n    && wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key \\\n    && wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/noble/winehq-noble.sources \\\n    && apt update \\\n    && apt install -y winehq-devel winbind cabextract xvfb \\\n    && mkdir -p $WINEPREFIX \\\n    && apt-get clean\n\nwinecfg && wineboot -u && wineserver -k\n\nwget --user-agent=\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:133.0) Gecko/20100101 Firefox/133.0\" -O /opt/majorsilence/windowsdesktop-runtime-8-win-x64.exe https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.19/windowsdesktop-runtime-8.0.19-win-x64.exe \\\n    && ls -la /opt/majorsilence \\\n    && xvfb-run wine /opt/majorsilence/windowsdesktop-runtime-8-win-x64.exe /quiet /install /norestart \\& \\\n    && sleep 60 \\\n    && rm -rf /opt/majorsilence/windowsdesktop-runtime-8-win-x64.exe\n\n# download bash script https://raw.githubusercontent.com/majorsilence/wine-bundler/refs/heads/master/wine-bundler\nwget -O /opt/majorsilence/wine-bundler https://raw.githubusercontent.com/majorsilence/wine-bundler/refs/heads/master/wine-bundler \\\n\t&& chmod +x /opt/majorsilence/wine-bundler\n\nmkdir -p /opt/majorsilence/wine64/drive_c/app\necho 'Directory created'\ncp -r /build-output/Release-Builds/build-output/majorsilence-reporting-designer-net8.0-windows-anycpu/net8.0-windows/* /opt/majorsilence/wine64/drive_c/app\necho 'Files copied'\necho 'Changed directory'\nmkdir -p /build-output/build/workingdirectory/\nmkdir -p /build-output/macpackage-output/\ncd /build-output/macpackage-output/\n/opt/majorsilence/wine-bundler -i /build-output/Release-Builds/build-output/majorsilence-reporting-designer-net8.0-windows-anycpu/net8.0-windows/reporting.ico -n \\\\\"Majorsilence Reporting Designer\\\\\" -c en_US.UTF-8 -w devel -a win64 -p /opt/majorsilence/wine64 -t /build-output/build/workingdirectory/.cache -s 'c:\\\\app\\\\ReportDesigner.exe'\n\nls -la /build-output/macpackage-output/\n"
  },
  {
    "path": "build-release-rdlcmd-linux.ps1",
    "content": "#!/usr/bin/env pwsh\n$ErrorActionPreference = \"Stop\"\n$CURRENTPATH=$pwd.Path\n\nfunction GetVersions([ref]$theVersion)\n{\n\t$csprojPath = Join-Path $CURRENTPATH \"./RdlEngine/RdlEngine.csproj\"\n\t$xml = [xml](Get-Content $csprojPath)\n\t$theVersion.Value = $xml.Project.PropertyGroup.Version\n}\n\nfunction BuildRdlCmd{\n\tGet-ChildItem ./ -include bin,obj,build-output -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }\n\n\t$Version=\"\"\n\tGetVersions([ref]$Version)\n\tWrite-Host  $Version\n\tdotnet restore \"./MajorsilenceReporting.sln\"\n\n\tWrite-Output \"Linux x64 rdlcmd build\"\n\n\t$buildoutputpath_rdlcmd_linux=\"$CURRENTPATH/Release-Builds/build-output/majorsilence-reporting-rdlcmd-linux-x64\"\n\trmf -rf $buildoutputpath_rdlcmd_linux\n\tmkdir -p $buildoutputpath_rdlcmd_linux\n\n\tdotnet publish RdlCmd -c Release -r linux-x64 -f net8.0 -p:PublishReadyToRun=true --self-contained true -p:PublishSingleFile=true -p:EnableCompressionInSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true\n\tCopy-Item ./RdlCmd/bin/Release/net8.0/linux-x64/publish -Destination \"$buildoutputpath_rdlcmd_linux/\" -Recurse\n\n\tcd Release-Builds\n\tcd build-output\t\n\t7za a $Version-majorsilence-reporting-rdlcmd-linux-x64.zip majorsilence-reporting-rdlcmd-linux-x64\\\n\tcd \"$CURRENTPATH\"\n}\n\nparam (\n    [Parameter(Mandatory=$false)]\n    [string]$arg\n)\n\nif ($arg -eq \"build\") {\n    BuildRdlCmd\n} else {\n\tWrite-Output \"Usage: ./build-release-linux.ps1 docker\"\n\tWrite-Output \"net8.0 using the mono System.Drawing.Common library from nuget package ZKWeb.System.Drawing\"\n\tWrite-Output \"requires libgdiplus be installed apt-get install -y libgdiplus\"\n\tWrite-Output \"Micrsoft has deprecated System.Drawing.Common in .net 6.0\"\n\tWrite-Output \"https://learn.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/6.0/system-drawing-common-windows-only\"\n    docker run --memory 4gb --rm -v ${CURRENTPATH}:/src mcr.microsoft.com/dotnet/sdk:8.0 bash -c \"cd /src && ./build-release-linux.ps1 build\"\n}\n\n\t\t"
  },
  {
    "path": "build-release.ps1",
    "content": "#!/usr/bin/env pwsh\n$ErrorActionPreference = \"Stop\"\n$CURRENTPATH=$pwd.Path\n\n# /p:Configuration=\"Debug\", \"Debug-DrawingCompat\", \"Release\", \"Release-DrawingCompat\"\n$pConfiguration=\"Release\"\n$pConfigurationCompat=\"Release-DrawingCompat\"\n$pTargetFramework=\"net8.0-windows\"\n$pTargetFrameworkGeneric=\"net8.0\"\n\nfunction delete_files([string]$path)\n{\n\tIf (Test-Path $path){\n\t\tWrite-Host \"Deleting path $path\" -ForegroundColor Green\n\t\tRemove-Item -recurse -force $path\n\t}\n}\n\nfunction GetVersions([ref]$theVersion)\n{\n\t$csprojPath = Join-Path $CURRENTPATH \".\\Directory.Build.props\"\n\t$xml = [xml](Get-Content $csprojPath)\n\t$theVersion.Value = $xml.Project.PropertyGroup.Version\n}\n\nGet-ChildItem .\\ -include bin,obj,build-output -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }\n\n$Version=\"\"\nGetVersions([ref]$Version)\nWrite-Host  $Version\n\ndotnet restore \"./MajorsilenceReporting.sln\"\n# ************* Begin anycpu *********************************************\ndotnet build \"$CURRENTPATH\\MajorsilenceReporting.sln\" --configuration Release-DrawingCompat --verbosity minimal\ndotnet publish RdlCmd -c Release-DrawingCompat -r linux-x64 -f net8.0 --self-contained true #-p:PublishSingleFile=true\ndotnet publish RdlCmd -c Release-DrawingCompat -r linux-arm64 -f net8.0 --self-contained true #-p:PublishSingleFile=true\ndotnet publish RdlCmd -c Release-DrawingCompat -r osx-x64 -f net8.0 --self-contained true #-p:PublishSingleFile=true\ndotnet publish RdlCmd -c Release-DrawingCompat -r osx-arm64 -f net8.0 --self-contained true #-p:PublishSingleFile=true\n\ndotnet build \"$CURRENTPATH\\MajorsilenceReporting.sln\" --configuration $pConfiguration --verbosity minimal\ndotnet publish RdlCmd -c Release -r win-x64 -f net8.0 --self-contained true #-p:PublishSingleFile=true\ndotnet publish RdlCmd -c Release -r win-arm64 -f net8.0 --self-contained true #-p:PublishSingleFile=true\n\n$buildoutputpath_designer=\"$CURRENTPATH\\Release-Builds\\build-output\\majorsilence-reporting-designer-$pTargetFramework-anycpu\"\n$buildoutputpath_desktop=\"$CURRENTPATH\\Release-Builds\\build-output\\majorsilence-reporting-desktop-$pTargetFrameworkGeneric-anycpu\"\n$buildoutputpath_rdlcmd=\"$CURRENTPATH\\Release-Builds\\build-output\\majorsilence-reporting-rdlcmd-$pTargetFrameworkGeneric-anycpu\"\n$buildoutputpath_rdlcmd_selfcontained=\"$CURRENTPATH\\Release-Builds\\build-output\\majorsilence-reporting-rdlcmd-self-contained\"\n$buildoutputpath_reader=\"$CURRENTPATH\\Release-Builds\\build-output\\majorsilence-reporting-reader-$pTargetFramework-anycpu\"\n$buildoutputpath_mapfile=\"$CURRENTPATH\\Release-Builds\\build-output\\majorsilence-reporting-mapfile-$pTargetFramework-anycpu\"\n\nRemove-Item \"$buildoutputpath_designer\" -Recurse -ErrorAction Ignore\nmkdir \"$buildoutputpath_designer\"\nRemove-Item \"$buildoutputpath_desktop\" -Recurse -ErrorAction Ignore\nmkdir \"$buildoutputpath_desktop\"\nRemove-Item \"$buildoutputpath_rdlcmd\" -Recurse -ErrorAction Ignore\nmkdir \"$buildoutputpath_rdlcmd\"\nRemove-Item \"$buildoutputpath_rdlcmd_selfcontained\" -Recurse -ErrorAction Ignore\nmkdir \"$buildoutputpath_rdlcmd_selfcontained\"\nRemove-Item \"$buildoutputpath_reader\" -Recurse -ErrorAction Ignore\nmkdir \"$buildoutputpath_reader\"\nRemove-Item \"$buildoutputpath_mapfile\" -Recurse -ErrorAction Ignore\nmkdir \"$buildoutputpath_mapfile\"\n\nCopy-Item .\\ReportDesigner\\bin\\$pConfiguration\\$pTargetFramework\\ -Destination \"$buildoutputpath_designer\\\" -Recurse\nCopy-Item .\\RdlDesign\\App.ico -Destination \"$buildoutputpath_designer\\\" -Recurse\n\nCopy-Item .\\RdlDesktop\\bin\\$pConfiguration\\$pTargetFrameworkGeneric\\ -Destination \"$buildoutputpath_desktop\\\" -Recurse\nCopy-Item .\\RdlCmd\\bin\\$pConfiguration\\$pTargetFrameworkGeneric\\ -Destination \"$buildoutputpath_rdlcmd\\\" -Recurse\n\n\n$rdlcmd_win=\"$buildoutputpath_rdlcmd_selfcontained\\win-x64\"\n$rdlcmd_linux=\"$buildoutputpath_rdlcmd_selfcontained\\linux-x64\"\n$rdlcmd_osx=\"$buildoutputpath_rdlcmd_selfcontained\\osx-x64\"\n$rdlcmd_win_arm64=\"$buildoutputpath_rdlcmd_selfcontained\\win-arm64\"\n$rdlcmd_linux_arm64=\"$buildoutputpath_rdlcmd_selfcontained\\linux-arm64\"\n$rdlcmd_osx_arm64=\"$buildoutputpath_rdlcmd_selfcontained\\osx-arm64\"\nmkdir \"$rdlcmd_win\"\nmkdir \"$rdlcmd_linux\"\nmkdir \"$rdlcmd_osx\"\nmkdir \"$rdlcmd_win_arm64\"\nmkdir \"$rdlcmd_linux_arm64\"\nmkdir \"$rdlcmd_osx_arm64\"\n\nCopy-Item .\\RdlCmd\\bin\\$pConfiguration\\$pTargetFrameworkGeneric\\win-x64\\publish -Destination \"$rdlcmd_win\" -Recurse\nCopy-Item .\\RdlCmd\\bin\\$pConfiguration\\$pTargetFrameworkGeneric\\win-arm64\\publish -Destination \"$rdlcmd_win_arm64\" -Recurse\nCopy-Item .\\RdlCmd\\bin\\$pConfigurationCompat\\$pTargetFrameworkGeneric\\linux-x64\\publish -Destination \"$rdlcmd_linux\" -Recurse\nCopy-Item .\\RdlCmd\\bin\\$pConfigurationCompat\\$pTargetFrameworkGeneric\\linux-arm64\\publish -Destination \"$rdlcmd_linux_arm64\" -Recurse\nCopy-Item .\\RdlCmd\\bin\\$pConfigurationCompat\\$pTargetFrameworkGeneric\\osx-x64\\publish -Destination \"$rdlcmd_osx\" -Recurse\nCopy-Item .\\RdlCmd\\bin\\$pConfigurationCompat\\$pTargetFrameworkGeneric\\osx-arm64\\publish -Destination \"$rdlcmd_osx_arm64\" -Recurse\nCopy-Item .\\RdlReader\\bin\\$pConfiguration\\$pTargetFramework\\ -Destination \"$buildoutputpath_reader\\\" -Recurse\nCopy-Item .\\RdlMapFile\\bin\\$pConfiguration\\$pTargetFramework\\ -Destination \"$buildoutputpath_mapfile\\\" -Recurse\n\ncd Release-Builds\ncd build-output\t\n..\\7za.exe a -tzip $Version-majorsilence-reporting-designer-$pTargetFramework-anycpu.zip majorsilence-reporting-designer-$pTargetFramework-anycpu\\\n..\\7za.exe a -tzip $Version-majorsilence-reporting-desktop-$pTargetFrameworkGeneric-anycpu.zip majorsilence-reporting-desktop-$pTargetFrameworkGeneric-anycpu\\\n..\\7za.exe a -tzip $Version-majorsilence-reporting-mapfile-$pTargetFrameworkGeneric-anycpu.zip majorsilence-reporting-mapfile-$pTargetFrameworkGeneric-anycpu\\\n\n..\\7za.exe a -tzip \"$Version-majorsilence-reporting-rdlcmd-$pTargetFrameworkGeneric-anycpu.zip\" `\n  -x!\"majorsilence-reporting-rdlcmd-$pTargetFrameworkGeneric-anycpu\\$pTargetFrameworkGeneric\\win-arm64\\\" `\n  -x!\"majorsilence-reporting-rdlcmd-$pTargetFrameworkGeneric-anycpu\\$pTargetFrameworkGeneric\\win-x64\\\" `\n  \"majorsilence-reporting-rdlcmd-$pTargetFrameworkGeneric-anycpu\\\"\n\n\n..\\7za.exe a -tzip $Version-majorsilence-reporting-reader-$pTargetFramework-anycpu.zip majorsilence-reporting-reader-$pTargetFramework-anycpu\\\n..\\7za.exe a -tzip $Version-majorsilence-reporting-rdlcmd-self-contained.zip majorsilence-reporting-rdlcmd-self-contained\\\ncd \"$CURRENTPATH\"\n\n\n# ************* End anycpu *********************************************\n\n\n# ************* Begin PHP *********************************************\n$buildoutputpath_php=\"$CURRENTPATH\\Release-Builds\\build-output\\majorsilence-reporting-php\"\ndelete_files \"$buildoutputpath_php\"\nmkdir \"$buildoutputpath_php\"\n\nCopy-Item \".\\LanguageWrappers\\php\\report.php\" \"$buildoutputpath_php\\report.php\"\n\ncd Release-Builds\ncd build-output\t\n..\\7za.exe a -tzip $Version-majorsilence-reporting-build-php.zip majorsilence-reporting-php\\\ncd \"$CURRENTPATH\"\n\n# ************* End PHP *********************************************\n\n\n\n# ************* Begin Python *********************************************\n$buildoutputpath_python=\"$CURRENTPATH\\Release-Builds\\build-output\\majorsilence-reporting-python\"\ndelete_files \"$buildoutputpath_python\"\nmkdir \"$buildoutputpath_python\"\n\nCopy-Item \".\\LanguageWrappers\\python\\report.py\" \"$buildoutputpath_python\\report.py\"\n\ncd Release-Builds\ncd build-output\t\n..\\7za.exe a -tzip $Version-majorsilence-reporting-python.zip majorsilence-reporting-python\\\ncd \"$CURRENTPATH\"\n# ************* End Python *********************************************\n\n\n# ************* Begin Ruby *********************************************\n$buildoutputpath_ruby=\"$CURRENTPATH\\Release-Builds\\build-output\\majorsilence-reporting-ruby\"\ndelete_files \"$buildoutputpath_ruby\"\nmkdir \"$buildoutputpath_ruby\"\n\nCopy-Item \".\\LanguageWrappers\\ruby\\report.rb\" \"$buildoutputpath_ruby\\report.rb\"\n\ncd Release-Builds\ncd build-output\t\n..\\7za.exe a -tzip $Version-majorsilence-reporting-ruby.zip majorsilence-reporting-ruby\\\ncd \"$CURRENTPATH\"\n\n# ************* End Ruby *********************************************\n\n\n# ************* Nuget ************************************************\nGet-ChildItem -Recurse -Exclude \"$CURRENTPATH\\Release-Builds\\build-output\" .\\*.nupkg | Copy-Item -Destination \"$CURRENTPATH\\Release-Builds\\build-output\" -Force -ErrorAction SilentlyContinue\nGet-ChildItem -Recurse -Exclude \"$CURRENTPATH\\Release-Builds\\build-output\" .\\*.snupkg | Copy-Item -Destination \"$CURRENTPATH\\Release-Builds\\build-output\" -Force -ErrorAction SilentlyContinue\n\n\nWrite-Output \"Publish nuget packages with commands\"\nWrite-Output \"dotnet nuget push $CURRENTPATH\\Release-Builds\\build-output\\*.nupkg -k YOUR_API_KEY -s https://api.nuget.org/v3/index.json --skip-duplicate\"\nWrite-Output \"dotnet nuget push $CURRENTPATH\\Release-Builds\\build-output\\*.snupkg -k YOUR_API_KEY -s https://api.nuget.org/v3/index.json --skip-duplicate\"\n"
  },
  {
    "path": "jekyll_site/.gitattributes",
    "content": "###############################################################################\n# Set default behavior to automatically normalize line endings.\n###############################################################################\n* text=auto\n\n###############################################################################\n# Set default behavior for command prompt diff.\n#\n# This is need for earlier builds of msysgit that does not have it on by\n# default for csharp files.\n# Note: This is only used by command line\n###############################################################################\n#*.cs     diff=csharp\n\n###############################################################################\n# Set the merge driver for project and solution files\n#\n# Merging from the command prompt will add diff markers to the files if there\n# are conflicts (Merging from VS is not affected by the settings below, in VS\n# the diff markers are never inserted). Diff markers may cause the following \n# file extensions to fail to load in VS. An alternative would be to treat\n# these files as binary and thus will always conflict and require user\n# intervention with every merge. To do so, just uncomment the entries below\n###############################################################################\n#*.sln       merge=binary\n#*.csproj    merge=binary\n#*.vbproj    merge=binary\n#*.vcxproj   merge=binary\n#*.vcproj    merge=binary\n#*.dbproj    merge=binary\n#*.fsproj    merge=binary\n#*.lsproj    merge=binary\n#*.wixproj   merge=binary\n#*.modelproj merge=binary\n#*.sqlproj   merge=binary\n#*.wwaproj   merge=binary\n\n###############################################################################\n# behavior for image files\n#\n# image files are treated as binary by default.\n###############################################################################\n#*.jpg   binary\n#*.png   binary\n#*.gif   binary\n\n###############################################################################\n# diff behavior for common document formats\n# \n# Convert binary document formats to text before diffing them. This feature\n# is only available from the command line. Turn it on by uncommenting the \n# entries below.\n###############################################################################\n#*.doc   diff=astextplain\n#*.DOC   diff=astextplain\n#*.docx  diff=astextplain\n#*.DOCX  diff=astextplain\n#*.dot   diff=astextplain\n#*.DOT   diff=astextplain\n#*.pdf   diff=astextplain\n#*.PDF   diff=astextplain\n#*.rtf   diff=astextplain\n#*.RTF   diff=astextplain\n"
  },
  {
    "path": "jekyll_site/.gitignore",
    "content": "gemini-output/\n.DS_Store\n.jekyll-cache/\n# Created by https://www.gitignore.io\n\n.jekyll-metadata\n_site/\n\n### VisualStudio ###\n## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\nbuild/\nbld/\n[Bb]in/\n[Oo]bj/\n\n# Roslyn cache directories\n*.ide/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n#NUNIT\n*.VisualState.xml\nTestResult.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n*_i.c\n*_p.c\n*_i.h\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opensdf\n*.sdf\n*.cachefile\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JustCode is a .NET coding addin-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# TODO: Comment the next line if you want to checkin your web deploy settings \n# but database connection strings (with potential passwords) will be unencrypted\n*.pubxml\n*.publishproj\n\n# NuGet Packages\n*.nupkg\n# The packages folder can be ignored because of Package Restore\n**/packages/*\n# except build/, which is used as an MSBuild target.\n!**/packages/build/\n# If using the old MSBuild-Integrated Package Restore, uncomment this:\n#!**/packages/repositories.config\n\n# Windows Azure Build Output\ncsx/\n*.build.csdef\n\n# Windows Store app package directory\nAppPackages/\n\n# Others\nsql/\n*.Cache\nClientBin/\n[Ss]tyle[Cc]op.*\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.pfx\n*.publishsettings\nnode_modules/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\n*.mdf\n*.ldf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# Created by https://www.gitignore.io\n\n### XamarinStudio ###\nbin/\nobj/\n*.userprefs\n\n/VbBook1/AutomatedTesting/Chapter019.xml\n/VbBook1/AutomatedTesting/My Project/Resources.resources\n\n# Created by https://www.gitignore.io/api/vagrant\n\n### Vagrant ###\n.vagrant/\n\n.jekyll-metadata\n"
  },
  {
    "path": "jekyll_site/CNAME",
    "content": "reporting.majorsilence.com"
  },
  {
    "path": "jekyll_site/_config.yml",
    "content": "safe: true\nexclude:\n  - README.md\n  - Gemfile*\n  - docker.sh\n  - .gitattributes\n  - .gitignore\n\n# Blog specific settings\npaginate_path: \"posts/page/:num\"\npaginate: 5\n\n# General settings\ndefaults:\n  - scope:\n      path: \"\"\n      type: \"posts\"\n    values:\n      categories: [posts] # this is a slight hack so Jekyll generates the blog posts in /posts\n\nhighlighter: rouge\nkramdown:\n  math_engine: mathjax\n  syntax_highlighter: rouge\n\n## The application virtual path\nbaseurl: \nsiteversion: 2025.12.27\ntitle: Majorsilence Reporting\n\nplugins: [jekyll-paginate, jekyll-redirect-from, jekyll-sitemap]\n"
  },
  {
    "path": "jekyll_site/_includes/blogpost/author.html",
    "content": "{% capture author %}{{ page.author }}{{ blogpost.author }}{% endcapture %}\n\n{{ author }}\n"
  },
  {
    "path": "jekyll_site/_includes/blogpost/date.html",
    "content": "{% capture date %}{{ page.date }}{{ blogpost.date }}{% endcapture %}\n{% capture has_date %}{{ date | size }}{% endcapture %}\n\n{% if has_date != '0' %}\n  {% capture time %}<time datetime=\"{{ date | datetime | date_to_xmlschema }}\" itemprop=\"datePublished\">{{ date | date: \"%B %e, %Y\" }}</time>{% endcapture %}\n{% endif %}\n\n\n"
  },
  {
    "path": "jekyll_site/_includes/blogpost/meta.html",
    "content": "<div class=\"meta\">\n  <span class=\"author\">{% include blogpost/author.html %}</span>\n  <span class=\"date\">{% include blogpost/date.html %}{{ time }}</span>\n{% if page.tags == empty or blogpost.tags == empty %}\n{% else %}\n  <span class=\"tags\">{% include blogpost/tags.html %}</span>\n{% endif %}\n</div>\n"
  },
  {
    "path": "jekyll_site/_includes/blogpost/tags.html",
    "content": " {{ page.tags | join: ', ' }}{{ blogpost.tags | join: ', ' }}\n"
  },
  {
    "path": "jekyll_site/_includes/blogpost.html",
    "content": "{% if index %}\n  <h1 itemprop=\"name\"><a href=\"{{blogpost.url}}\" itemprop=\"url\">{{ blogpost.title }}</a></h1>\n  {% include blogpost/meta.html %}\n  <div itemprop=\"articleBody\">\n    {{ content | excerpt }}\n    {% capture excerpted %}{{ content | has_excerpt }}{% endcapture %}\n    {% if excerpted == 'true' %}<a href=\"{{blogpost.url}}\">{{ site.excerpt_link }}</a>{% endif %}\n  </div>\n{% else %}\n  <h1 itemprop=\"name\">{{ page.title }}</h1>\n  {% include blogpost/meta.html %}\n  <div itemprop=\"articleBody\">{{ content }}</div>\n{% endif %}\n"
  },
  {
    "path": "jekyll_site/_includes/disqus.html",
    "content": "{% if page.comments %}\n\n<div id=\"disqus_thread\"></div>\n<script>\n    /**\n    *  RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS.\n    *  LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables    */\n    /*\n    var disqus_config = function () {\n    this.page.url = PAGE_URL;  // Replace PAGE_URL with your page's canonical URL variable\n    this.page.identifier = PAGE_IDENTIFIER; // Replace PAGE_IDENTIFIER with your page's unique identifier variable\n    };\n    */\n    (function() { // DON'T EDIT BELOW THIS LINE\n    var d = document, s = d.createElement('script');\n    s.src = 'https://majorsilence-1.disqus.com/embed.js';\n    s.setAttribute('data-timestamp', +new Date());\n    (d.head || d.body).appendChild(s);\n    })();\n</script>\n<noscript>Please enable JavaScript to view the <a href=\"https://disqus.com/?ref_noscript\">comments powered by Disqus.</a></noscript>\n\n{% endif %}"
  },
  {
    "path": "jekyll_site/_includes/footer.html",
    "content": "<footer id=\"footer\">\n    <p class=\"copyright\">&copy; Majorsilence devs 2025. All rights reserved.\n\n    <ul class=\"icons\">\n        <li>\n            <a href=\"https://x.com/intent/post?url={{site.url}}{{page.url}}\" target=\"_new\">\n                <img src=\"/assets/images/logos/x.svg\" alt=\"x (formerly twitter)\" title=\"share on x\" loading=\"lazy\"\n                    style=\"max-height: 1em;\" />\n            </a>\n        </li>\n        <li>\n            <a href=\"https://facebook.com/sharer.php?u={{site.url}}{{page.url}}\" target=\"_new\">\n                <img src=\"/assets/images/logos/facebook.svg\" alt=\"facebook\" title=\"share on facebook\" loading=\"lazy\"\n                    style=\"max-height: 1em;\" />\n            </a>\n        </li>\n        <li>\n            <a href=\"https://bsky.app/intent/compose?text={{site.url}}{{page.url}}\" target=\"_new\">\n                <img src=\"/assets/images/logos/bluesky.svg\" alt=\"bluesky\" title=\"share on bluesky\" loading=\"lazy\"\n                    style=\"max-height: 1em;\" />\n            </a>\n        </li>\n    </ul>\n</footer>"
  },
  {
    "path": "jekyll_site/_includes/opengraph.html",
    "content": "<meta content=\"{{ site.title }}\" property=\"og:site_name\">\n{% if page.title %}\n  <meta content=\"{{ page.title }}\" property=\"og:title\">\n{% else %}\n  <meta content=\"{{ site.title }}\" property=\"og:title\">\n{% endif %}\n{% if page.title %}\n  <meta content=\"article\" property=\"og:type\">\n{% else %}\n  <meta content=\"website\" property=\"og:type\">\n{% endif %}\n{% if page.description %}\n  <meta content=\"{{ page.description }}\" property=\"og:description\">\n{% else %}\n  <meta content=\"{{ site.description }}\" property=\"og:description\">\n{% endif %}\n{% if page.url %}\n  <meta content=\"{{ site.url }}{{ page.url }}\" property=\"og:url\">\n{% endif %}\n{% if page.date %}\n  <meta content=\"{{ page.date | date_to_xmlschema }}\" property=\"article:published_time\">\n  <meta content=\"{{ site.url }}/about/\" property=\"article:author\">\n{% endif %}\n{% if page.image %}\n  <meta content=\"{{ site.url }}/images/srcset/{{ page.image }}\" property=\"og:image\">\n{% else %}\n  <meta content=\"{{ site.url }}/images/profile.webp\" property=\"og:image\">\n{% endif %}\n{% if page.categories %}\n  {% for category in page.categories limit:1 %}\n  <meta content=\"{{ category }}\" property=\"article:section\">\n  {% endfor %}\n{% endif %}\n{% if page.tags %}\n  {% for tag in page.tags %}\n  <meta content=\"{{ tag }}\" property=\"article:tag\">\n  {% endfor %}\n{% endif %}"
  },
  {
    "path": "jekyll_site/_includes/page_header.html",
    "content": "<header id=\"header\">\n\n\n    <nav>\n        <a href=\"{{site.baseurl}}/\">\n            <i aria-hidden=\"true\"></i> Home\n        </a>\n        |\n        <a href=\"{{site.baseurl}}/posts\">\n            <i aria-hidden=\"true\"></i> Posts\n        </a>\n    </nav>\n\n    {% include search.html %}\n\n    <a href=\"#\" class=\"logo\">\n        <strong>{{ page.title }}</strong>\n\n        {% if page.date And page.date != \"\" And page.date != nil %}\n        <br />\n        Created <time datetime=\"date\" itemprop=\"datePublished\">{{ page.date }}</time>\n        {% endif %}\n        {% if page.last_modified And page.last_modified != \"\" And page.last_modified != nil %}\n        <br />\n        Last modified <time datetime=\"date\" itemprop=\"datePublished\">{{ page.last_modified }}</time>\n        {% endif %}\n    </a>\n</header>"
  },
  {
    "path": "jekyll_site/_includes/search.html",
    "content": "<section id=\"search\" class=\"alt\">\n    <form method=\"get\" action=\"https://www.google.com/search\">\n        <input type=\"hidden\" name=\"sitesearch\" value=\"reporting.majorsilence.com\" checked />\n        <input type=\"text\" name=\"q\" id=\"q\" placeholder=\"Search\" />\n        \n        <input type=\"hidden\" name=\"ie\" value=\"utf-8\">\n        <input type=\"hidden\" name=\"oe\" value=\"utf-8\">\n    </form>\n</section>\n"
  },
  {
    "path": "jekyll_site/_includes/toc.html",
    "content": "{% capture tocWorkspace %}\n    {% comment %}\n        Copyright (c) 2017 Vladimir \"allejo\" Jimenez\n\n        Permission is hereby granted, free of charge, to any person\n        obtaining a copy of this software and associated documentation\n        files (the \"Software\"), to deal in the Software without\n        restriction, including without limitation the rights to use,\n        copy, modify, merge, publish, distribute, sublicense, and/or sell\n        copies of the Software, and to permit persons to whom the\n        Software is furnished to do so, subject to the following\n        conditions:\n\n        The above copyright notice and this permission notice shall be\n        included in all copies or substantial portions of the Software.\n\n        THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n        EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n        OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n        NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n        HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n        WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n        FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n        OTHER DEALINGS IN THE SOFTWARE.\n    {% endcomment %}\n    {% comment %}\n        Version 1.2.0\n          https://github.com/allejo/jekyll-toc\n\n        \"...like all things liquid - where there's a will, and ~36 hours to spare, there's usually a/some way\" ~jaybe\n\n        Usage:\n            {% include toc.html html=content sanitize=true class=\"inline_toc\" id=\"my_toc\" h_min=2 h_max=3 %}\n\n        Parameters:\n            * html         (string) - the HTML of compiled markdown generated by kramdown in Jekyll\n\n        Optional Parameters:\n            * sanitize      (bool)   : false  - when set to true, the headers will be stripped of any HTML in the TOC\n            * class         (string) :   ''   - a CSS class assigned to the TOC\n            * id            (string) :   ''   - an ID to assigned to the TOC\n            * h_min         (int)    :   1    - the minimum TOC header level to use; any header lower than this value will be ignored\n            * h_max         (int)    :   6    - the maximum TOC header level to use; any header greater than this value will be ignored\n            * ordered       (bool)   : false  - when set to true, an ordered list will be outputted instead of an unordered list\n            * item_class    (string) :   ''   - add custom class(es) for each list item; has support for '%level%' placeholder, which is the current heading level\n            * submenu_class (string) :   ''   - add custom class(es) for each child group of headings; has support for '%level%' placeholder which is the current \"submenu\" heading level\n            * base_url      (string) :   ''   - add a base url to the TOC links for when your TOC is on another page than the actual content\n            * anchor_class  (string) :   ''   - add custom class(es) for each anchor element\n            * skip_no_ids   (bool)   : false  - skip headers that do not have an `id` attribute\n\n        Output:\n            An ordered or unordered list representing the table of contents of a markdown block. This snippet will only\n            generate the table of contents and will NOT output the markdown given to it\n    {% endcomment %}\n\n    {% capture newline %}\n    {% endcapture %}\n    {% assign newline = newline | rstrip %} <!-- Remove the extra spacing but preserve the newline -->\n\n    {% capture deprecation_warnings %}{% endcapture %}\n\n    {% if include.baseurl %}\n        {% capture deprecation_warnings %}{{ deprecation_warnings }}<!-- jekyll-toc :: \"baseurl\" has been deprecated, use \"base_url\" instead -->{{ newline }}{% endcapture %}\n    {% endif %}\n\n    {% if include.skipNoIDs %}\n        {% capture deprecation_warnings %}{{ deprecation_warnings }}<!-- jekyll-toc :: \"skipNoIDs\" has been deprecated, use \"skip_no_ids\" instead -->{{ newline }}{% endcapture %}\n    {% endif %}\n\n    {% capture jekyll_toc %}{% endcapture %}\n    {% assign orderedList = include.ordered | default: false %}\n    {% assign baseURL = include.base_url | default: include.baseurl | default: '' %}\n    {% assign skipNoIDs = include.skip_no_ids | default: include.skipNoIDs | default: false %}\n    {% assign minHeader = include.h_min | default: 1 %}\n    {% assign maxHeader = include.h_max | default: 6 %}\n    {% assign nodes = include.html | strip | split: '<h' %}\n\n    {% assign firstHeader = true %}\n    {% assign currLevel = 0 %}\n    {% assign lastLevel = 0 %}\n\n    {% capture listModifier %}{% if orderedList %}ol{% else %}ul{% endif %}{% endcapture %}\n\n    {% for node in nodes %}\n        {% if node == \"\" %}\n            {% continue %}\n        {% endif %}\n\n        {% assign currLevel = node | replace: '\"', '' | slice: 0, 1 | times: 1 %}\n\n        {% if currLevel < minHeader or currLevel > maxHeader %}\n            {% continue %}\n        {% endif %}\n\n        {% assign _workspace = node | split: '</h' %}\n\n        {% assign _idWorkspace = _workspace[0] | split: 'id=\"' %}\n        {% assign _idWorkspace = _idWorkspace[1] | split: '\"' %}\n        {% assign htmlID = _idWorkspace[0] %}\n\n        {% assign _classWorkspace = _workspace[0] | split: 'class=\"' %}\n        {% assign _classWorkspace = _classWorkspace[1] | split: '\"' %}\n        {% assign htmlClass = _classWorkspace[0] %}\n\n        {% if htmlClass contains \"no_toc\" %}\n            {% continue %}\n        {% endif %}\n\n        {% if firstHeader %}\n            {% assign minHeader = currLevel %}\n        {% endif %}\n\n        {% capture _hAttrToStrip %}{{ _workspace[0] | split: '>' | first }}>{% endcapture %}\n        {% assign header = _workspace[0] | replace: _hAttrToStrip, '' %}\n\n        {% if include.item_class and include.item_class != blank %}\n            {% capture listItemClass %} class=\"{{ include.item_class | replace: '%level%', currLevel | split: '.' | join: ' ' }}\"{% endcapture %}\n        {% endif %}\n\n        {% if include.submenu_class and include.submenu_class != blank %}\n            {% assign subMenuLevel = currLevel | minus: 1 %}\n            {% capture subMenuClass %} class=\"{{ include.submenu_class | replace: '%level%', subMenuLevel | split: '.' | join: ' ' }}\"{% endcapture %}\n        {% endif %}\n\n        {% capture anchorBody %}{% if include.sanitize %}{{ header | strip_html }}{% else %}{{ header }}{% endif %}{% endcapture %}\n\n        {% if htmlID %}\n            {% capture anchorAttributes %} href=\"{% if baseURL %}{{ baseURL }}{% endif %}#{{ htmlID }}\"{% endcapture %}\n\n            {% if include.anchor_class %}\n                {% capture anchorAttributes %}{{ anchorAttributes }} class=\"{{ include.anchor_class | split: '.' | join: ' ' }}\"{% endcapture %}\n            {% endif %}\n\n            {% capture listItem %}<a{{ anchorAttributes }}>{{ anchorBody }}</a>{% endcapture %}\n        {% elsif skipNoIDs == true %}\n            {% continue %}\n        {% else %}\n            {% capture listItem %}{{ anchorBody }}{% endcapture %}\n        {% endif %}\n\n        {% if currLevel > lastLevel %}\n            {% capture jekyll_toc %}{{ jekyll_toc }}<{{ listModifier }}{{ subMenuClass }}>{% endcapture %}\n        {% elsif currLevel < lastLevel %}\n            {% assign repeatCount = lastLevel | minus: currLevel %}\n\n            {% for i in (1..repeatCount) %}\n                {% capture jekyll_toc %}{{ jekyll_toc }}</li></{{ listModifier }}>{% endcapture %}\n            {% endfor %}\n\n            {% capture jekyll_toc %}{{ jekyll_toc }}</li>{% endcapture %}\n        {% else %}\n            {% capture jekyll_toc %}{{ jekyll_toc }}</li>{% endcapture %}\n        {% endif %}\n\n        {% capture jekyll_toc %}{{ jekyll_toc }}<li{{ listItemClass }}>{{ listItem }}{% endcapture %}\n\n        {% assign lastLevel = currLevel %}\n        {% assign firstHeader = false %}\n    {% endfor %}\n\n    {% assign repeatCount = minHeader | minus: 1 %}\n    {% assign repeatCount = lastLevel | minus: repeatCount %}\n    {% for i in (1..repeatCount) %}\n        {% capture jekyll_toc %}{{ jekyll_toc }}</li></{{ listModifier }}>{% endcapture %}\n    {% endfor %}\n\n    {% if jekyll_toc != '' %}\n        {% assign rootAttributes = '' %}\n        {% if include.class and include.class != blank %}\n            {% capture rootAttributes %} class=\"{{ include.class | split: '.' | join: ' ' }}\"{% endcapture %}\n        {% endif %}\n\n        {% if include.id and include.id != blank %}\n            {% capture rootAttributes %}{{ rootAttributes }} id=\"{{ include.id }}\"{% endcapture %}\n        {% endif %}\n\n        {% if rootAttributes %}\n            {% assign nodes = jekyll_toc | split: '>' %}\n            {% capture jekyll_toc %}<{{ listModifier }}{{ rootAttributes }}>{{ nodes | shift | join: '>' }}>{% endcapture %}\n        {% endif %}\n    {% endif %}\n{% endcapture %}{% assign tocWorkspace = '' %}{{ deprecation_warnings }}{{ jekyll_toc -}}\n"
  },
  {
    "path": "jekyll_site/_layouts/base.html",
    "content": "<!DOCTYPE HTML>\n<html lang=\"en\">\n\n<head>\n\t<title>{{ page.title }} | Majorsilence</title>\n\t<meta charset=\"utf-8\" />\n\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=yes\" />\n\t{% if page.enable_syntax_highlighting %}\n\t<link rel=\"stylesheet\" href=\"{{site.baseurl}}/assets/css/style.css?v={{site.siteversion}}\" />\n\t{% endif %}\n\t<link rel=\"stylesheet\" href=\"{{site.baseurl}}/assets/css/bundle.css?v={{site.siteversion}}\" />\n\t{% include opengraph.html %}\n</head>\n\n<body>\n\t<div class=\"container\">\n\t\t{% include page_header.html %}\n\t\t<header class=\"main\">\n\t\t\t<h1>{{ page.title }}</h1>\n\t\t</header>\n\t\t{{ content | replace: '<img', '<img loading=\"lazy\"' }}\n\t\t\n\t\t{% include footer.html %}\n\t</div>\n\t<!-- Scripts -->\n\t<script defer=\"defer\" src=\"{{site.baseurl}}/assets/js/bundle.js?v={{site.siteversion}}\"></script>\n</body>\n\n</html>"
  },
  {
    "path": "jekyll_site/_layouts/main.html",
    "content": "---\nlayout: base\n---\n\n<!-- Banner -->\n<section id=\"banner\">\n\t<div class=\"content\">\n\t\t{{ content }}\n\t</div>\n</section>"
  },
  {
    "path": "jekyll_site/_layouts/post.html",
    "content": "---\nlayout: base\n---\n\n<!-- Content -->\n<div itemscope itemtype=\"http://schema.org/BlogPosting\">\n\t{% include toc.html html=content %}\n\t{{ content }}\n</div>"
  },
  {
    "path": "jekyll_site/_posts/2025-12-28-quick-start.md",
    "content": "---\nlayout: post\ntitle: First Post\ndate: 2025-12-28\nlast_modified: 2025-12-28\ncomments: true\nenable_syntax_highlighting: true\n---\n\nMajorsilence Reporting is a powerful, open-source .NET reporting framework designed for developers who need to create, design, and deliver rich, reports. Supporting modern .NET versions (8.0, 10.0), it provides a flexible and extensible platform for building reports from a variety of data sources. With a drag-and-drop designer (windows only), multiple viewer options, and cross-platform support, Majorsilence Reporting is ideal for both desktop and web applications. Whether you need to generate reports programmatically or empower users with a visual designer, this project offers the tools and documentation to get you started quickly.\n\n**The core of Majorsilence Reporting supports Linux and macOS for server-side application report generation.\n\n## Quick Start\n\n### Create a new report\n\n```cs\nusing Majorsilence.Reporting.RdlCreator;\n\n// One time per app instance\nRdlEngineConfig.RdlEngineConfigInit();\n\nstring dataProvider = \"[PLACEHOLDER/Json/Microsoft.Data.SqlClient/MySQL.NET/Firebird.NET 2.0/Microsoft.Data.Sqlite/PostgreSQL\";\nvar create = new Majorsilence.Reporting.RdlCreator.Create();\n\nvar report = await create.GenerateRdl(dataProvider,\n    connectionString,\n    \"SELECT CategoryID, CategoryName, Description FROM Categories\",\n    pageHeaderText: \"DataProviderTest TestMethod1\");\n\nstring filepath = System.IO.Path.Combine(Environment.CurrentDirectory, \"PLACEHOLDER.pdf\");\nvar ofs = new Majorsilence.Reporting.Rdl.OneFileStreamGen(filepath, true);\nawait report.RunGetData(null);\nawait report.RunRender(ofs, Majorsilence.Reporting.Rdl.OutputPresentationType.PDF);\n```\n\n### Create an ad hoc PDF document\n\n```cs\nusing Majorsilence.Reporting.RdlCreator;\n\n// One time per app instance\nRdlEngineConfig.RdlEngineConfigInit();\n\nvar document = new Majorsilence.Reporting.RdlCreator.Document()\n{\n    Description = \"Sample report\",\n    Author = \"John Doe\",\n    PageHeight = \"11in\",\n    PageWidth = \"8.5in\",\n    //Width = \"7.5in\",\n    TopMargin = \".25in\",\n    LeftMargin = \".25in\",\n    RightMargin = \".25in\",\n    BottomMargin = \".25in\"\n}\n.WithPage((page) =>\n{\n    page.WithHeight(\"10in\")\n    .WithWidth(\"7.5in\")\n    .WithText(new Text\n    {\n        Name = \"TheSimplePageText\",\n        Top = \".1in\",\n        Left = \".1in\",\n        Width = \"6in\",\n        Height = \".25in\",\n        Value = new Value { Text = \"Text Area 1\" },\n        Style = new Style { FontSize = \"12pt\", FontWeight = \"Bold\" }\n    });\n});\n\nusing var fileStream = new FileStream(\"PLACEHOLDER.pdf\", FileMode.Create, FileAccess.Write);\nawait document.Create(fileStream);\n```\n\n## Reference\n\n[Majorsilence Reporting Wiki contents page](https://github.com/majorsilence/Reporting/wiki/_pages) - external link.\n"
  },
  {
    "path": "jekyll_site/assets/css/bundle.css",
    "content": "---\n---\n\n{% include_relative main.css %}\n"
  },
  {
    "path": "jekyll_site/assets/css/main.css",
    "content": "/* Modernized main.css — clean, responsive, variable-driven */\n:root{\n  --bg: #0f1724;           /* deep blue-gray background */\n  --surface: #0b1220;      /* slightly lighter surface */\n  --card: #0f1724;\n  --muted: #9aa4b2;\n  --text: #e6eef8;\n  --accent: #4f9cf9;       /* primary accent */\n  --accent-2: #7c5cff;     /* secondary accent */\n  --success: #22c55e;\n  --danger: #ff6b6b;\n  --glass: rgba(255,255,255,0.04);\n  --radius: 12px;\n  --max-width: 1100px;\n  --gap: 1.25rem;\n  --fw-regular: 400;\n  --fw-medium: 500;\n  --fw-bold: 700;\n  --shadow-1: 0 6px 18px rgba(2,6,23,0.6);\n}\n\n/* Light color-scheme fallback */\n@media (prefers-color-scheme: light){\n  :root{\n    --bg: #f7fafc;\n    --surface: #ffffff;\n    --card: #ffffff;\n    --muted: #6b7280;\n    --text: #0f1724;\n    --glass: rgba(2,6,23,0.02);\n  }\n}\n\n/* Reset / base */\n*{box-sizing:border-box}\nhtml,body{height:100%}\nbody{\n  margin:0;\n  background:linear-gradient(180deg,var(--bg),color-mix(in srgb, var(--bg) 90%, var(--surface) 10%));\n  color:var(--text);\n  font-family: Inter, ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial;\n  font-weight:var(--fw-regular);\n  -webkit-font-smoothing:antialiased;\n  -moz-osx-font-smoothing:grayscale;\n  line-height:1.5;\n  padding:2rem 1rem;\n}\n\n.container{\n  width:100%;\n  max-width:var(--max-width);\n  margin:0 auto;\n  padding:0 1rem;\n}\n\n/* Utility helpers */\n.row{display:flex;flex-wrap:wrap;gap:var(--gap)}\n.col{flex:1 1 0}\n.center{display:flex;align-items:center;justify-content:center}\n.muted{color:var(--muted)}\n.small{font-size:.9rem}\n\n/* Header / nav */\n.header{\n  display:flex;align-items:center;justify-content:space-between;\n  gap:1rem;padding:1rem 1rem;margin-bottom:2rem;\n  background:linear-gradient(180deg, transparent 0%, transparent 60%);\n}\n.brand{\n  display:flex;align-items:center;gap:.75rem;font-weight:var(--fw-medium);\n}\n.brand .logo{\n  width:44px;height:44px;border-radius:10px;background:linear-gradient(135deg,var(--accent),var(--accent-2));\n  box-shadow:var(--shadow-1);display:flex;align-items:center;justify-content:center;color:white;font-weight:700;\n}\n.nav{\n  display:flex;gap:1rem;align-items:center;\n}\n.nav a{\n  color:var(--muted);text-decoration:none;padding:.5rem .75rem;border-radius:10px;font-weight:var(--fw-medium);\n}\n.nav a:hover{color:var(--text);background:var(--glass)}\n\n/* Mobile nav: simple collapse */\n.nav-toggle{display:none}\n@media (max-width:720px){\n  .nav{display:none}\n  .nav-toggle{display:inline-flex}\n}\n\n/* Hero */\n.hero{\n  background:linear-gradient(90deg, rgba(79,156,249,0.06), rgba(124,92,255,0.04));\n  border-radius:var(--radius);padding:2rem;margin-bottom:1.5rem;display:grid;grid-template-columns:1fr 340px;gap:1.25rem;align-items:center;\n}\n@media (max-width:940px){.hero{grid-template-columns:1fr}}\n.hero h1{font-size:2rem;margin:0 0 .5rem}\n.hero p{margin:0;color:var(--muted)}\n\n/* Cards */\n.card{\n  background:linear-gradient(180deg,var(--card), color-mix(in srgb,var(--card) 92%, var(--surface) 8%));\n  border-radius:calc(var(--radius) - 2px);padding:1rem;box-shadow:var(--shadow-1);\n}\n.card .title{font-weight:var(--fw-medium);margin-bottom:.5rem}\n.card-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem}\n@media (max-width:940px){.card-grid{grid-template-columns:repeat(2,1fr)}}\n@media (max-width:540px){.card-grid{grid-template-columns:1fr}}\n\n/* Buttons */\n.btn{display:inline-flex;align-items:center;gap:.5rem;padding:.6rem .9rem;border-radius:10px;border:0;cursor:pointer;font-weight:600;background:var(--accent);color:white;transition:transform .12s ease, box-shadow .12s ease}\n.btn.secondary{background:transparent;color:var(--text);border:1px solid rgba(255,255,255,0.06)}\n.btn.ghost{background:transparent;color:var(--muted)}\n.btn:hover{transform:translateY(-2px);box-shadow:0 8px 30px rgba(15,23,36,0.45)}\n.btn:active{transform:translateY(0)}\n\n/* Form elements */\n.input,textarea,select{\n  width:100%;padding:.6rem .75rem;border-radius:10px;border:1px solid rgba(255,255,255,0.04);background:transparent;color:var(--text);outline:none;font-size:1rem\n}\n.input:focus,textarea:focus,select:focus{box-shadow:0 6px 18px rgba(79,156,249,0.08);border-color:rgba(79,156,249,0.18)}\n\n/* Footer */\n.footer{margin-top:2.5rem;padding:1rem;border-top:1px solid rgba(255,255,255,0.03);color:var(--muted);display:flex;justify-content:space-between;align-items:center}\n@media (max-width:540px){.footer{flex-direction:column;gap:.5rem}}\n\n/* Utility card variants */\n.kpi{display:flex;flex-direction:column;gap:.25rem}\n.kpi .value{font-size:1.5rem;font-weight:var(--fw-bold)}\n.kpi .label{font-size:.85rem;color:var(--muted)}\n\n/* Table */\n.table{width:100%;border-collapse:collapse}\n.table th{ text-align:left;padding:.75rem .5rem;color:var(--muted);font-size:.9rem}\n.table td{padding:.75rem .5rem;border-top:1px solid rgba(255,255,255,0.03)}\n\n/* Small helpers */\n.chips{display:flex;gap:.5rem;flex-wrap:wrap}\n.chip{padding:.35rem .6rem;background:var(--glass);border-radius:999px;font-size:.85rem;color:var(--muted)}\n\n/* Accessibility & motion preferences */\n@media (prefers-reduced-motion: reduce){\n  *{transition:none!important}\n}\n\n/* Page-specific helpers */\n.header .cta{display:inline-flex}\n\n/* Toggle for dark/light (class-based) */\n.theme-light{\n  --bg:#f7fafc;--surface:#ffffff;--card:#ffffff;--muted:#6b7280;--text:#0f1724;--glass:rgba(2,6,23,0.02);\n}\n.theme-dark{\n  --bg:#0b1220;--surface:#0f1724;--card:#0b1220;--muted:#9aa4b2;--text:#e6eef8;--glass:rgba(255,255,255,0.03);\n}\n\n/* Small responsive tweaks */\n@media (max-width:720px){\n  body{padding:1rem}\n  .hero{padding:1rem}\n  .brand .logo{width:40px;height:40px}\n}\n\n/* End of main.css */\n\n"
  },
  {
    "path": "jekyll_site/assets/js/bundle.js",
    "content": "---\n---\n\n{% include_relative main.js %}\n\n"
  },
  {
    "path": "jekyll_site/assets/js/main.js",
    "content": ""
  },
  {
    "path": "jekyll_site/index.html",
    "content": "---\nlayout: main\ntitle: Majorsilence Reporting\n---\n\n<header>\n    <h1>Majorsilence Reporting<br />\n</header>\n<p>Placeholder site for Majorsilence Reporting.</p>\n<ul class=\"actions\">\n    <li><a href=\"/posts/\">Posts</a></li>\n    <li><a href=\"https://github.com/majorsilence/Reporting\">Majorsilence Reporting Github</a></li>\n    <li><a href=\"https://github.com/majorsilence/Reporting/wiki\">Majorsilence Reporting Github Wiki</a></li>\n    <li><a href=\"/schemas/reporting/2025/12/reportdefinition.html\">Report Definition Schema</a></li>\n</ul>\n"
  },
  {
    "path": "jekyll_site/posts/index.html",
    "content": "---\nlayout: base\ntitle: Posts\nnavgroup: posts\n---\n<div class=\"row\">\n  <div class=\"small-12 columns\">\n    <nav>\n      {% if paginator.previous_page %}\n        <a href=\"{{site.baseurl}}{{ paginator.previous_page_path | replace: 'index.html', '' }}\" class=\"prev\">&laquo; Previous Page</a> | \n      {% endif %}\n      {% if paginator.next_page %}\n        <a href=\"{{site.baseurl}}{{ paginator.next_page_path }}/\" class=\"next\">Next Page &raquo; </a>\n      {% endif %}\n    </nav>\n\n     {% assign index = true %}\n     <div itemscope itemtype=\"http://schema.org/Blog\">\n     <br/>\n     {% for blogpost in paginator.posts %}\n     {% assign content = blogpost.content %}\n       <article itemprop=\"blogPost\" itemscope itemtype=\"http://schema.org/BlogPosting\">\n         {% include blogpost.html %}\n       </article>\n       <hr/>\n     {% endfor %}\n     </div>\n     <nav>\n       {% if paginator.previous_page %}\n         <a href=\"{{site.baseurl}}{{ paginator.previous_page_path | replace: 'index.html', '' }}\" class=\"prev\">&laquo; Previous Page</a> | \n       {% endif %}\n       {% if paginator.next_page %}\n         <a href=\"{{site.baseurl}}{{ paginator.next_page_path }}/\" class=\"next\">Next Page &raquo; </a>\n       {% endif %}\n     </nav>\n  </div>\n</div>\n"
  },
  {
    "path": "jekyll_site/posts/listings.html",
    "content": "---\nlayout: base\ntitle: Posts Listing\nnavgroup: posts\n---\n\n<h1>Pages</h1>\n\n<ul>\n    {% for page in site.pages %}{% if page.exclude != true %}<url>\n    <li>\n        <a href=\"{{site.canonical_domain}}{{site.baseurl}}{{ page.url }}\">\n        {% if page.title == empty %}\n            {{site.canonical_domain}}{{site.baseurl}}{{ page.url }}\n        {% else %}\n            {{page.title}} - {{site.canonical_domain}}{{site.baseurl}}{{ page.url }}\n        {% endif %}\n        </a>\n    </li>\n    {% endif %}{% endfor %}\n</ul>\n    \n<h1>Posts</h1>\n<ul>\n    {% for item in site.posts %}{% if item.exclude != true %}\n        <li>\n            <a href=\"{{site.canonical_domain}}{{site.baseurl}}{{ item.url }}\">\n            {% if item.title == empty %}\n                {{site.canonical_domain}}{{site.baseurl}}{{ item.url }}\n            {% else %}\n                {{item.title}}\n            {% endif %}\n            </a> \n        </li>\n    {% endif %}{% endfor %}\n</ul>\n"
  },
  {
    "path": "jekyll_site/robots.txt",
    "content": "User-agent: *\nAllow: /\n"
  },
  {
    "path": "jekyll_site/schemas/reporting/2025/12/reportdefinition/ReportDefinition.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<xsd:schema targetNamespace=\"http://reporting.majorsilence.com/schemas/reporting/2025/12/reportdefinition\"\n            xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"\n            xmlns=\"http://reporting.majorsilence.com/schemas/reporting/2025/12/reportdefinition\"\n            elementFormDefault=\"qualified\">\n    <xsd:annotation>\n        <xsd:documentation>\n\n            Majorsilence Reporting began as an open‑source implementation of the Report Definition Language (RDL)\n            via the fyiReporting project.\n            \n            This schema was imported from RDL but is now maintained and evolved independently; compatibility with RDL is not guaranteed.\n            The schema and any products derived from it are provided \"AS IS\". Majorsilence Reporting disclaims all warranties,\n            including merchantability and fitness for a particular purpose, and accepts no liability for damages arising from use.\n            Users remain responsible for securing any required intellectual property rights for their use of this schema.\n\n            MAJORSILENCE REPORTING SHALL NOT BE LIABLE FOR ANY DAMAGES OF ANY KIND ARISING OUT OF OR\n            IN CONNECTION WITH THE USE OF THE SCHEMA, INCLUDING WITHOUT LIMITATION, ANY\n            DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL (INCLUDING ANY LOST PROFITS),\n            PUNITIVE OR SPECIAL DAMAGES, WHETHER OR NOT MAJORSILENCE REPORTING HAS BEEN ADVISED OF\n            SUCH DAMAGES.\n\n            (c) Majorsilence Reporting devs.\n\n        </xsd:documentation>\n    </xsd:annotation>\n \n    <xsd:element name=\"Rows\">\n        <xsd:complexType>\n            <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n                <xsd:element name=\"Row\" type=\"RowType\"/>\n                <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n            </xsd:choice>\n            <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:complexType>\n    </xsd:element>\n    <xsd:complexType name=\"RowType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:element name=\"CanOmit\">\n        <xsd:complexType>\n            <xsd:simpleContent>\n                <xsd:extension base=\"xsd:string\">\n                    <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n                </xsd:extension>\n            </xsd:simpleContent>\n        </xsd:complexType>\n    </xsd:element>\n\n\n    <xsd:element name=\"Report\">\n        <xsd:complexType>\n            <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n                <xsd:element name=\"Description\" type=\"xsd:string\" minOccurs=\"0\"/>\n                <xsd:element name=\"Author\" type=\"xsd:string\" minOccurs=\"0\"/>\n                <xsd:element name=\"AutoRefresh\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n                <xsd:element name=\"DataSources\" type=\"DataSourcesType\" minOccurs=\"0\"/>\n                <xsd:element name=\"DataSets\" type=\"DataSetsType\" minOccurs=\"0\"/>\n                <xsd:element name=\"Body\" type=\"BodyType\"/>\n                <xsd:element name=\"ReportParameters\" type=\"ReportParametersType\" minOccurs=\"0\"/>\n                <xsd:element name=\"Code\" type=\"xsd:string\" minOccurs=\"0\"/>\n                <xsd:element name=\"Width\" type=\"SizeType\"/>\n                <xsd:element name=\"PageHeader\" type=\"PageHeaderFooterType\" minOccurs=\"0\"/>\n                <xsd:element name=\"PageFooter\" type=\"PageHeaderFooterType\" minOccurs=\"0\"/>\n                <xsd:element name=\"PageHeight\" type=\"SizeType\" minOccurs=\"0\"/>\n                <xsd:element name=\"PageWidth\" type=\"SizeType\" minOccurs=\"0\"/>\n                <xsd:element name=\"InteractiveHeight\" type=\"SizeType\" minOccurs=\"0\"/>\n                <xsd:element name=\"InteractiveWidth\" type=\"SizeType\" minOccurs=\"0\"/>\n                <xsd:element name=\"LeftMargin\" type=\"SizeType\" minOccurs=\"0\"/>\n                <xsd:element name=\"RightMargin\" type=\"SizeType\" minOccurs=\"0\"/>\n                <xsd:element name=\"TopMargin\" type=\"SizeType\" minOccurs=\"0\"/>\n                <xsd:element name=\"BottomMargin\" type=\"SizeType\" minOccurs=\"0\"/>\n                <xsd:element name=\"EmbeddedImages\" type=\"EmbeddedImagesType\" minOccurs=\"0\"/>\n                <xsd:element name=\"Language\" type=\"xsd:string\" minOccurs=\"0\"/>\n                <xsd:element name=\"CodeModules\" type=\"CodeModulesType\" minOccurs=\"0\"/>\n                <xsd:element name=\"Classes\" type=\"ClassesType\" minOccurs=\"0\"/>\n                <xsd:element name=\"CustomProperties\" type=\"CustomPropertiesType\" minOccurs=\"0\"/>\n                <xsd:element name=\"DataTransform\" type=\"xsd:string\" minOccurs=\"0\"/>\n                <xsd:element name=\"DataSchema\" type=\"xsd:string\" minOccurs=\"0\"/>\n                <xsd:element name=\"DataElementName\" type=\"xsd:string\" minOccurs=\"0\"/>\n                <xsd:element name=\"DataElementStyle\" minOccurs=\"0\">\n                    <xsd:simpleType>\n                        <xsd:restriction base=\"xsd:string\">\n                            <xsd:enumeration value=\"AttributeNormal\"/>\n                            <xsd:enumeration value=\"ElementNormal\"/>\n                        </xsd:restriction>\n                    </xsd:simpleType>\n                </xsd:element>\n                <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n            </xsd:choice>\n            <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:complexType>\n    </xsd:element>\n    <xsd:complexType name=\"ReportParametersType\">\n        <xsd:sequence>\n            <xsd:element name=\"ReportParameter\" type=\"ReportParameterType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ReportParameterType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"DataType\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Boolean\"/>\n                        <xsd:enumeration value=\"DateTime\"/>\n                        <xsd:enumeration value=\"Integer\"/>\n                        <xsd:enumeration value=\"Float\"/>\n                        <xsd:enumeration value=\"String\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"Nullable\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"DefaultValue\" type=\"DefaultValueType\" minOccurs=\"0\"/>\n            <xsd:element name=\"AllowBlank\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"Prompt\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"ValidValues\" type=\"ValidValuesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Hidden\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"MultiValue\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"UsedInQuery\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"False\"/>\n                        <xsd:enumeration value=\"True\"/>\n                        <xsd:enumeration value=\"Auto\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:attribute name=\"Name\" type=\"xsd:normalizedString\" use=\"required\"/>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ValidValuesType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"DataSetReference\" type=\"DataSetReferenceType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ParameterValues\" type=\"ParameterValuesType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DataSetReferenceType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"DataSetName\" type=\"xsd:string\"/>\n            <xsd:element name=\"ValueField\" type=\"xsd:string\"/>\n            <xsd:element name=\"LabelField\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ParameterValuesType\">\n        <xsd:sequence>\n            <xsd:element name=\"ParameterValue\" type=\"ParameterValueType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ParameterValueType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Value\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Label\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DefaultValueType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"DataSetReference\" type=\"DataSetReferenceType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Values\" type=\"ValuesType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ValuesType\">\n        <xsd:sequence>\n            <xsd:element name=\"Value\" type=\"xsd:string\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DataSetsType\">\n        <xsd:sequence>\n            <xsd:element name=\"DataSet\" type=\"DataSetType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DataSetType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Fields\" type=\"FieldsType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Query\" type=\"QueryType\"/>\n            <xsd:element name=\"CaseSensitivity\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"True\"/>\n                        <xsd:enumeration value=\"False\"/>\n                        <xsd:enumeration value=\"Auto\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"Collation\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"AccentSensitivity\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"True\"/>\n                        <xsd:enumeration value=\"False\"/>\n                        <xsd:enumeration value=\"Auto\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"KanatypeSensitivity\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"True\"/>\n                        <xsd:enumeration value=\"False\"/>\n                        <xsd:enumeration value=\"Auto\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"WidthSensitivity\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"True\"/>\n                        <xsd:enumeration value=\"False\"/>\n                        <xsd:enumeration value=\"Auto\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"Filters\" type=\"FiltersType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:attribute name=\"Name\" type=\"xsd:normalizedString\" use=\"required\"/>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"FieldsType\">\n        <xsd:sequence>\n            <xsd:element name=\"Field\" type=\"FieldType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"FieldType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"DataField\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Value\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:attribute name=\"Name\" type=\"xsd:normalizedString\" use=\"required\"/>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"QueryType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"DataSourceName\" type=\"xsd:string\"/>\n            <xsd:element name=\"CommandType\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Text\"/>\n                        <xsd:enumeration value=\"StoredProcedure\"/>\n                        <xsd:enumeration value=\"TableDirect\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"CommandText\" type=\"xsd:string\"/>\n            <xsd:element name=\"QueryParameters\" type=\"QueryParametersType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Timeout\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DataSourcesType\">\n        <xsd:sequence>\n            <xsd:element name=\"DataSource\" type=\"DataSourceType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DataSourceType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Transaction\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"ConnectionProperties\" type=\"ConnectionPropertiesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataSourceReference\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:attribute name=\"Name\" type=\"xsd:string\" use=\"required\"/>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ConnectionPropertiesType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"DataProvider\" type=\"xsd:string\"/>\n            <xsd:element name=\"ConnectString\" type=\"xsd:string\"/>\n            <xsd:element name=\"IntegratedSecurity\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"Prompt\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"QueryParametersType\">\n        <xsd:sequence>\n            <xsd:element name=\"QueryParameter\" type=\"QueryParameterType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"QueryParameterType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Value\" type=\"xsd:string\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:attribute name=\"Name\" type=\"xsd:string\" use=\"required\"/>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"CodeModulesType\">\n        <xsd:sequence>\n            <xsd:element name=\"CodeModule\" type=\"xsd:string\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ClassesType\">\n        <xsd:sequence>\n            <xsd:element name=\"Class\" type=\"ClassType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ClassType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"ClassName\" type=\"xsd:string\"/>\n            <xsd:element name=\"InstanceName\" type=\"xsd:normalizedString\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"BodyType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"ReportItems\" type=\"ReportItemsType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Height\" type=\"SizeType\"/>\n            <xsd:element name=\"Columns\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n            <xsd:element name=\"ColumnSpacing\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"PageHeaderFooterType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Height\" type=\"SizeType\"/>\n            <xsd:element name=\"PrintOnFirstPage\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"PrintOnLastPage\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"ReportItems\" type=\"ReportItemsType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"EmbeddedImagesType\">\n        <xsd:sequence>\n            <xsd:element name=\"EmbeddedImage\" type=\"EmbeddedImageType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"EmbeddedImageType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"MIMEType\" type=\"xsd:string\"/>\n            <xsd:element name=\"ImageData\" type=\"xsd:string\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:attribute name=\"Name\" type=\"xsd:normalizedString\" use=\"required\"/>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ReportItemsType\">\n        <xsd:choice maxOccurs=\"unbounded\">\n            <xsd:element name=\"Line\" type=\"LineType\"/>\n            <xsd:element name=\"Rectangle\" type=\"RectangleType\"/>\n            <xsd:element name=\"Textbox\" type=\"TextboxType\"/>\n            <xsd:element name=\"Image\" type=\"ImageType\"/>\n            <xsd:element name=\"Subreport\" type=\"SubreportType\"/>\n            <xsd:element name=\"List\" type=\"ListType\"/>\n            <xsd:element name=\"Matrix\" type=\"MatrixType\"/>\n            <xsd:element name=\"Table\" type=\"TableType\"/>\n            <xsd:element name=\"Chart\" type=\"ChartType\"/>\n            <xsd:element name=\"CustomReportItem\" type=\"CustomReportItemType\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ActionType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Hyperlink\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Drillthrough\" type=\"DrillthroughType\" minOccurs=\"0\"/>\n            <xsd:element name=\"BookmarkLink\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Label\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DrillthroughType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"ReportName\" type=\"xsd:string\"/>\n            <xsd:element name=\"Parameters\" type=\"ParametersType\" minOccurs=\"0\"/>\n            <xsd:element name=\"BookmarkLink\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"VisibilityType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Hidden\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"ToggleItem\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"LineType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Action\" type=\"ActionType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Top\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Left\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Height\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Width\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ZIndex\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n            <xsd:element name=\"Visibility\" type=\"VisibilityType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ToolTip\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Label\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"LinkToChild\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Bookmark\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"RepeatWith\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"CustomProperties\" type=\"CustomPropertiesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementOutput\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Output\"/>\n                        <xsd:enumeration value=\"NoOutput\"/>\n                        <xsd:enumeration value=\"ContentsOnly\"/>\n                        <xsd:enumeration value=\"Auto\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:attribute name=\"Name\" type=\"xsd:normalizedString\" use=\"required\"/>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"RectangleType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Action\" type=\"ActionType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Top\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Left\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Height\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Width\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ZIndex\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n            <xsd:element name=\"Visibility\" type=\"VisibilityType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ToolTip\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Label\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"LinkToChild\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Bookmark\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"RepeatWith\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"CustomProperties\" type=\"CustomPropertiesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ReportItems\" type=\"ReportItemsType\" minOccurs=\"0\"/>\n            <xsd:element name=\"PageBreakAtStart\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"PageBreakAtEnd\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementOutput\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Output\"/>\n                        <xsd:enumeration value=\"NoOutput\"/>\n                        <xsd:enumeration value=\"ContentsOnly\"/>\n                        <xsd:enumeration value=\"Auto\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:attribute name=\"Name\" type=\"xsd:normalizedString\" use=\"required\"/>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"TextboxType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Action\" type=\"ActionType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Top\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Left\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Height\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Width\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ZIndex\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n            <xsd:element name=\"Visibility\" type=\"VisibilityType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ToolTip\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Label\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"LinkToChild\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Bookmark\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"RepeatWith\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"CustomProperties\" type=\"CustomPropertiesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Value\" type=\"xsd:string\"/>\n            <xsd:element name=\"CanGrow\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"CanShrink\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"HideDuplicates\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"ToggleImage\" type=\"ToggleImageType\" minOccurs=\"0\"/>\n            <xsd:element name=\"UserSort\" type=\"UserSortType\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementOutput\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Output\"/>\n                        <xsd:enumeration value=\"NoOutput\"/>\n                        <xsd:enumeration value=\"ContentsOnly\"/>\n                        <xsd:enumeration value=\"Auto\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"DataElementStyle\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Auto\"/>\n                        <xsd:enumeration value=\"AttributeNormal\"/>\n                        <xsd:enumeration value=\"ElementNormal\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:attribute name=\"Name\" type=\"xsd:normalizedString\" use=\"required\"/>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ToggleImageType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"InitialState\" type=\"xsd:string\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ImageType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Action\" type=\"ActionType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Top\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Left\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Height\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Width\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ZIndex\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n            <xsd:element name=\"Visibility\" type=\"VisibilityType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ToolTip\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Label\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"LinkToChild\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Bookmark\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"RepeatWith\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"CustomProperties\" type=\"CustomPropertiesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Source\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"External\"/>\n                        <xsd:enumeration value=\"Embedded\"/>\n                        <xsd:enumeration value=\"Database\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"Value\" type=\"xsd:string\"/>\n            <xsd:element name=\"MIMEType\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Sizing\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"AutoSize\"/>\n                        <xsd:enumeration value=\"Fit\"/>\n                        <xsd:enumeration value=\"FitProportional\"/>\n                        <xsd:enumeration value=\"Clip\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"DataElementName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementOutput\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Output\"/>\n                        <xsd:enumeration value=\"NoOutput\"/>\n                        <xsd:enumeration value=\"ContentsOnly\"/>\n                        <xsd:enumeration value=\"Auto\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:attribute name=\"Name\" type=\"xsd:normalizedString\" use=\"required\"/>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"SubreportType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Action\" type=\"ActionType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Top\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Left\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Height\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Width\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ZIndex\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n            <xsd:element name=\"Visibility\" type=\"VisibilityType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ToolTip\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Label\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"LinkToChild\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Bookmark\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"RepeatWith\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"CustomProperties\" type=\"CustomPropertiesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ReportName\" type=\"xsd:string\"/>\n            <xsd:element name=\"Parameters\" type=\"ParametersType\" minOccurs=\"0\"/>\n            <xsd:element name=\"NoRows\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"MergeTransactions\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementOutput\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Output\"/>\n                        <xsd:enumeration value=\"NoOutput\"/>\n                        <xsd:enumeration value=\"ContentsOnly\"/>\n                        <xsd:enumeration value=\"Auto\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:attribute name=\"Name\" type=\"xsd:normalizedString\" use=\"required\"/>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"CustomReportItemType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Type\" type=\"xsd:string\"/>\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Top\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Left\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Height\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Width\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ZIndex\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n            <xsd:element name=\"Visibility\" type=\"VisibilityType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Label\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Bookmark\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"RepeatWith\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"CustomProperties\" type=\"CustomPropertiesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"AltReportItem\" type=\"ReportItemsType\" minOccurs=\"0\"/>\n            <xsd:element name=\"CustomData\" type=\"CustomDataType\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementOutput\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Output\"/>\n                        <xsd:enumeration value=\"NoOutput\"/>\n                        <xsd:enumeration value=\"ContentsOnly\"/>\n                        <xsd:enumeration value=\"Auto\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:attribute name=\"Name\" type=\"xsd:normalizedString\" use=\"required\"/>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"CustomDataType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"DataSetName\" type=\"xsd:string\"/>\n            <xsd:element name=\"Filters\" type=\"FiltersType\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataColumnGroupings\" type=\"DataColumnGroupingsType\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataRowGroupings\" type=\"DataRowGroupingsType\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataRows\" type=\"DataRowsType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DataColumnGroupingsType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"DataGroupings\" type=\"DataGroupingsType\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DataRowGroupingsType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"DataGroupings\" type=\"DataGroupingsType\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DataGroupingsType\">\n        <xsd:sequence>\n            <xsd:element name=\"DataGrouping\" type=\"DataGroupingType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DataGroupingType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Static\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"Grouping\" type=\"GroupingType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Sorting\" type=\"SortingType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Subtotal\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"CustomProperties\" type=\"CustomPropertiesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataGroupings\" type=\"DataGroupingsType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DataRowsType\">\n        <xsd:sequence>\n            <xsd:element name=\"DataRow\" type=\"DataRowType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DataRowType\">\n        <xsd:sequence>\n            <xsd:element name=\"DataCell\" type=\"DataCellType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DataCellType\">\n        <xsd:sequence>\n            <xsd:element name=\"DataValue\" type=\"DataValueType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n\n    <xsd:complexType name=\"ParametersType\">\n        <xsd:sequence>\n            <xsd:element name=\"Parameter\" type=\"ParameterType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ParameterType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Value\" type=\"xsd:string\"/>\n            <xsd:element name=\"Omit\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:attribute name=\"Name\" type=\"xsd:string\" use=\"required\"/>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ListType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Action\" type=\"ActionType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Top\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Left\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Height\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Width\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ZIndex\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n            <xsd:element name=\"Visibility\" type=\"VisibilityType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ToolTip\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Label\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"LinkToChild\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Bookmark\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"RepeatWith\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"CustomProperties\" type=\"CustomPropertiesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"KeepTogether\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"NoRows\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataSetName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"PageBreakAtStart\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"PageBreakAtEnd\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"Filters\" type=\"FiltersType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Grouping\" type=\"GroupingType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Sorting\" type=\"SortingType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ReportItems\" type=\"ReportItemsType\" minOccurs=\"0\"/>\n            <xsd:element name=\"FillPage\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataInstanceName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataInstanceElementOutput\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Output\"/>\n                        <xsd:enumeration value=\"NoOutput\"/>\n                        <xsd:enumeration value=\"ContentsOnly\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"DataElementName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementOutput\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Output\"/>\n                        <xsd:enumeration value=\"NoOutput\"/>\n                        <xsd:enumeration value=\"ContentsOnly\"/>\n                        <xsd:enumeration value=\"Auto\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:attribute name=\"Name\" type=\"xsd:normalizedString\" use=\"required\"/>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"GroupingType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Label\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"GroupExpressions\" type=\"GroupExpressionsType\"/>\n            <xsd:element name=\"PageBreakAtStart\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"PageBreakAtEnd\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"CustomProperties\" type=\"CustomPropertiesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Filters\" type=\"FiltersType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Parent\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataCollectionName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementOutput\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Output\"/>\n                        <xsd:enumeration value=\"NoOutput\"/>\n                        <xsd:enumeration value=\"ContentsOnly\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:attribute name=\"Name\" type=\"xsd:normalizedString\" use=\"required\"/>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"GroupExpressionsType\">\n        <xsd:sequence>\n            <xsd:element name=\"GroupExpression\" type=\"xsd:string\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"SortingType\">\n        <xsd:sequence>\n            <xsd:element name=\"SortBy\" type=\"SortByType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"SortByType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"SortExpression\" type=\"xsd:string\"/>\n            <xsd:element name=\"Direction\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Ascending\"/>\n                        <xsd:enumeration value=\"Descending\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"MatrixType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Action\" type=\"ActionType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Top\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Left\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Height\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Width\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ZIndex\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n            <xsd:element name=\"Visibility\" type=\"VisibilityType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ToolTip\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Label\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"LinkToChild\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Bookmark\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"RepeatWith\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"CustomProperties\" type=\"CustomPropertiesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"KeepTogether\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"NoRows\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataSetName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"PageBreakAtStart\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"PageBreakAtEnd\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"Filters\" type=\"FiltersType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Corner\" type=\"CornerType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ColumnGroupings\" type=\"ColumnGroupingsType\"/>\n            <xsd:element name=\"RowGroupings\" type=\"RowGroupingsType\"/>\n            <xsd:element name=\"MatrixRows\" type=\"MatrixRowsType\"/>\n            <xsd:element name=\"MatrixColumns\" type=\"MatrixColumnsType\"/>\n            <xsd:element name=\"LayoutDirection\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"LTR\"/>\n                        <xsd:enumeration value=\"RTL\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"GroupsBeforeRowHeaders\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementOutput\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Output\"/>\n                        <xsd:enumeration value=\"NoOutput\"/>\n                        <xsd:enumeration value=\"ContentsOnly\"/>\n                        <xsd:enumeration value=\"Auto\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"CellDataElementName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"CellDataElementOutput\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Output\"/>\n                        <xsd:enumeration value=\"NoOutput\"/>\n                        <xsd:enumeration value=\"ContentsOnly\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:attribute name=\"Name\" type=\"xsd:normalizedString\" use=\"required\"/>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"CornerType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"ReportItems\" type=\"ReportItemsType\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ColumnGroupingsType\">\n        <xsd:sequence>\n            <xsd:element name=\"ColumnGrouping\" type=\"ColumnGroupingType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ColumnGroupingType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Height\" type=\"SizeType\"/>\n            <xsd:element name=\"FixedHeader\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"DynamicColumns\" type=\"DynamicColumnsRowsType\" minOccurs=\"0\"/>\n            <xsd:element name=\"StaticColumns\" type=\"StaticColumnsType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DynamicColumnsRowsType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Grouping\" type=\"GroupingType\"/>\n            <xsd:element name=\"Sorting\" type=\"SortingType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Subtotal\" type=\"SubtotalType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ReportItems\" type=\"ReportItemsType\"/>\n            <xsd:element name=\"Visibility\" type=\"VisibilityType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"StaticColumnsType\">\n        <xsd:sequence>\n            <xsd:element name=\"StaticColumn\" type=\"StaticColumnType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"StaticColumnType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"ReportItems\" type=\"ReportItemsType\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"RowGroupingsType\">\n        <xsd:sequence>\n            <xsd:element name=\"RowGrouping\" type=\"RowGroupingType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"RowGroupingType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Width\" type=\"SizeType\"/>\n            <xsd:element name=\"FixedHeader\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"DynamicRows\" type=\"DynamicColumnsRowsType\" minOccurs=\"0\"/>\n            <xsd:element name=\"StaticRows\" type=\"StaticRowsType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"StaticRowsType\">\n        <xsd:sequence>\n            <xsd:element name=\"StaticRow\" type=\"StaticRowType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"StaticRowType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"ReportItems\" type=\"ReportItemsType\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"SubtotalType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"ReportItems\" type=\"ReportItemsType\"/>\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Position\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Before\"/>\n                        <xsd:enumeration value=\"After\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"DataElementName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementOutput\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Output\"/>\n                        <xsd:enumeration value=\"NoOutput\"/>\n                        <xsd:enumeration value=\"ContentsOnly\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"MatrixColumnsType\">\n        <xsd:sequence>\n            <xsd:element name=\"MatrixColumn\" type=\"MatrixColumnType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"MatrixColumnType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Width\" type=\"SizeType\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"MatrixRowsType\">\n        <xsd:sequence>\n            <xsd:element name=\"MatrixRow\" type=\"MatrixRowType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"MatrixRowType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Height\" type=\"SizeType\"/>\n            <xsd:element name=\"MatrixCells\" type=\"MatrixCellsType\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"MatrixCellsType\">\n        <xsd:sequence>\n            <xsd:element name=\"MatrixCell\" type=\"MatrixCellType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"MatrixCellType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"ReportItems\" type=\"ReportItemsType\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"TableType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Action\" type=\"ActionType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Top\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Left\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Height\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Width\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ZIndex\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n            <xsd:element name=\"Visibility\" type=\"VisibilityType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ToolTip\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Label\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"LinkToChild\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Bookmark\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"RepeatWith\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"CustomProperties\" type=\"CustomPropertiesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"KeepTogether\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"NoRows\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataSetName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"PageBreakAtStart\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"PageBreakAtEnd\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"Filters\" type=\"FiltersType\" minOccurs=\"0\"/>\n            <xsd:element name=\"TableColumns\" type=\"TableColumnsType\"/>\n            <xsd:element name=\"Header\" type=\"HeaderType\" minOccurs=\"0\"/>\n            <xsd:element name=\"TableGroups\" type=\"TableGroupsType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Details\" type=\"DetailsType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Footer\" type=\"FooterType\" minOccurs=\"0\"/>\n            <xsd:element name=\"FillPage\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementOutput\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Output\"/>\n                        <xsd:enumeration value=\"NoOutput\"/>\n                        <xsd:enumeration value=\"ContentsOnly\"/>\n                        <xsd:enumeration value=\"Auto\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"DetailDataElementName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DetailDataCollectionName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DetailDataElementOutput\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Output\"/>\n                        <xsd:enumeration value=\"NoOutput\"/>\n                        <xsd:enumeration value=\"ContentsOnly\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:attribute name=\"Name\" type=\"xsd:normalizedString\" use=\"required\"/>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"TableColumnsType\">\n        <xsd:sequence>\n            <xsd:element name=\"TableColumn\" type=\"TableColumnType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"TableColumnType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Width\" type=\"SizeType\"/>\n            <xsd:element name=\"Visibility\" type=\"VisibilityType\" minOccurs=\"0\"/>\n            <xsd:element name=\"FixedHeader\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"HeaderType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"TableRows\" type=\"TableRowsType\"/>\n            <xsd:element name=\"FixedHeader\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"RepeatOnNewPage\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"TableRowsType\">\n        <xsd:sequence>\n            <xsd:element name=\"TableRow\" type=\"TableRowType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"TableRowType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"TableCells\" type=\"TableCellsType\"/>\n            <xsd:element name=\"Height\" type=\"SizeType\"/>\n            <xsd:element name=\"Visibility\" type=\"VisibilityType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"FooterType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"TableRows\" type=\"TableRowsType\"/>\n            <xsd:element name=\"RepeatOnNewPage\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"TableGroupsType\">\n        <xsd:sequence>\n            <xsd:element name=\"TableGroup\" type=\"TableGroupType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"TableGroupType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Grouping\" type=\"GroupingType\"/>\n            <xsd:element name=\"Sorting\" type=\"SortingType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Header\" type=\"HeaderType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Footer\" type=\"FooterType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Visibility\" type=\"VisibilityType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DetailsType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"TableRows\" type=\"TableRowsType\"/>\n            <xsd:element name=\"Grouping\" type=\"GroupingType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Sorting\" type=\"SortingType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Visibility\" type=\"VisibilityType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"TableCellsType\">\n        <xsd:sequence>\n            <xsd:element name=\"TableCell\" type=\"TableCellType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"TableCellType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"ReportItems\" type=\"ReportItemsType\"/>\n            <xsd:element name=\"ColSpan\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ChartType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Type\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Column\"/>\n                        <xsd:enumeration value=\"Bar\"/>\n                        <xsd:enumeration value=\"Line\"/>\n                        <xsd:enumeration value=\"Pie\"/>\n                        <xsd:enumeration value=\"Scatter\"/>\n                        <xsd:enumeration value=\"Bubble\"/>\n                        <xsd:enumeration value=\"Area\"/>\n                        <xsd:enumeration value=\"Doughnut\"/>\n                        <xsd:enumeration value=\"Stock\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"Subtype\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Stacked\"/>\n                        <xsd:enumeration value=\"PercentStacked\"/>\n                        <xsd:enumeration value=\"Plain\"/>\n                        <xsd:enumeration value=\"Smooth\"/>\n                        <xsd:enumeration value=\"Exploded\"/>\n                        <xsd:enumeration value=\"Line\"/>\n                        <xsd:enumeration value=\"SmoothLine\"/>\n                        <xsd:enumeration value=\"HighLowClose\"/>\n                        <xsd:enumeration value=\"OpenHighLowClose\"/>\n                        <xsd:enumeration value=\"Candlestick\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Action\" type=\"ActionType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Top\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Left\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Height\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Width\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ZIndex\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n            <xsd:element name=\"Visibility\" type=\"VisibilityType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ToolTip\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Label\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"LinkToChild\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Bookmark\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"CustomProperties\" type=\"CustomPropertiesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"KeepTogether\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"NoRows\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataSetName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"PageBreakAtStart\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"PageBreakAtEnd\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"Filters\" type=\"FiltersType\" minOccurs=\"0\"/>\n            <xsd:element name=\"SeriesGroupings\" type=\"SeriesGroupingsType\" minOccurs=\"0\"/>\n            <xsd:element name=\"CategoryGroupings\" type=\"CategoryGroupingsType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ChartData\" type=\"ChartDataType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Legend\" type=\"LegendType\" minOccurs=\"0\"/>\n            <xsd:element name=\"CategoryAxis\" type=\"CategoryAxisType\" minOccurs=\"0\"/>\n            <xsd:element name=\"ValueAxis\" type=\"ValueAxisType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Title\" type=\"TitleType\" minOccurs=\"0\"/>\n            <xsd:element name=\"PointWidth\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n            <xsd:element name=\"Palette\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Default\"/>\n                        <xsd:enumeration value=\"EarthTones\"/>\n                        <xsd:enumeration value=\"Excel\"/>\n                        <xsd:enumeration value=\"GrayScale\"/>\n                        <xsd:enumeration value=\"Light\"/>\n                        <xsd:enumeration value=\"Pastel\"/>\n                        <xsd:enumeration value=\"SemiTransparent\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"ThreeDProperties\" type=\"ThreeDPropertiesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"PlotArea\" type=\"PlotAreaType\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementOutput\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Output\"/>\n                        <xsd:enumeration value=\"NoOutput\"/>\n                        <xsd:enumeration value=\"ContentsOnly\"/>\n                        <xsd:enumeration value=\"Auto\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"ChartElementOutput\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Output\"/>\n                        <xsd:enumeration value=\"NoOutput\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:attribute name=\"Name\" type=\"xsd:normalizedString\" use=\"required\"/>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"SeriesGroupingsType\">\n        <xsd:sequence>\n            <xsd:element name=\"SeriesGrouping\" type=\"SeriesGroupingType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"SeriesGroupingType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"DynamicSeries\" type=\"DynamicSeriesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"StaticSeries\" type=\"StaticSeriesType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DynamicSeriesType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Grouping\" type=\"GroupingType\"/>\n            <xsd:element name=\"Sorting\" type=\"SortingType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Label\" type=\"xsd:string\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"StaticSeriesType\">\n        <xsd:sequence>\n            <xsd:element name=\"StaticMember\" type=\"StaticMemberType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"StaticMemberType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Label\" type=\"xsd:string\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"CategoryGroupingsType\">\n        <xsd:sequence>\n            <xsd:element name=\"CategoryGrouping\" type=\"CategoryGroupingType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"CategoryGroupingType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"DynamicCategories\" type=\"DynamicCategoriesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"StaticCategories\" type=\"StaticCategoriesType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DynamicCategoriesType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Grouping\" type=\"GroupingType\"/>\n            <xsd:element name=\"Sorting\" type=\"SortingType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Label\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"StaticCategoriesType\">\n        <xsd:sequence>\n            <xsd:element name=\"StaticMember\" type=\"StaticMemberType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"TitleType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Caption\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Position\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Center\"/>\n                        <xsd:enumeration value=\"Near\"/>\n                        <xsd:enumeration value=\"Far\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"LegendType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Visible\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Position\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"TopLeft\"/>\n                        <xsd:enumeration value=\"TopCenter\"/>\n                        <xsd:enumeration value=\"TopRight\"/>\n                        <xsd:enumeration value=\"LeftTop\"/>\n                        <xsd:enumeration value=\"LeftCenter\"/>\n                        <xsd:enumeration value=\"LeftBottom\"/>\n                        <xsd:enumeration value=\"RightTop\"/>\n                        <xsd:enumeration value=\"RightCenter\"/>\n                        <xsd:enumeration value=\"RightBottom\"/>\n                        <xsd:enumeration value=\"BottomLeft\"/>\n                        <xsd:enumeration value=\"BottomCenter\"/>\n                        <xsd:enumeration value=\"BottomRight\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"Layout\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Column\"/>\n                        <xsd:enumeration value=\"Row\"/>\n                        <xsd:enumeration value=\"Table\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"InsidePlotArea\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"CategoryAxisType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Axis\" type=\"AxisType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ValueAxisType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Axis\" type=\"AxisType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"AxisType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Visible\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Title\" type=\"TitleType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Margin\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"MajorTickMarks\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"None\"/>\n                        <xsd:enumeration value=\"Inside\"/>\n                        <xsd:enumeration value=\"Outside\"/>\n                        <xsd:enumeration value=\"Cross\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"MinorTickMarks\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"None\"/>\n                        <xsd:enumeration value=\"Inside\"/>\n                        <xsd:enumeration value=\"Outside\"/>\n                        <xsd:enumeration value=\"Cross\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"MajorGridLines\" type=\"MajorGridLinesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"MinorGridLines\" type=\"MinorGridLinesType\" minOccurs=\"0\"/>\n            <xsd:element name=\"MajorInterval\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"MinorInterval\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Reverse\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"CrossAt\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Interlaced\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"Scalar\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"Min\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Max\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"LogScale\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ChartDataType\">\n        <xsd:sequence>\n            <xsd:element name=\"ChartSeries\" type=\"ChartSeriesType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ChartSeriesType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"DataPoints\" type=\"DataPointsType\"/>\n            <xsd:element name=\"PlotType\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Auto\"/>\n                        <xsd:enumeration value=\"Line\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DataPointsType\">\n        <xsd:sequence>\n            <xsd:element name=\"DataPoint\" type=\"DataPointType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DataPointType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"DataValues\" type=\"DataValuesType\"/>\n            <xsd:element name=\"DataLabel\" type=\"DataLabelType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Action\" type=\"ActionType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Marker\" type=\"MarkerType\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementName\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"DataElementOutput\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Output\"/>\n                        <xsd:enumeration value=\"NoOutput\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DataValuesType\">\n        <xsd:sequence>\n            <xsd:element name=\"DataValue\" type=\"DataValueType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DataValueType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Name\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Value\" type=\"xsd:string\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"DataLabelType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Visible\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Value\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Position\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Auto\"/>\n                        <xsd:enumeration value=\"Top\"/>\n                        <xsd:enumeration value=\"TopLeft\"/>\n                        <xsd:enumeration value=\"TopRight\"/>\n                        <xsd:enumeration value=\"Left\"/>\n                        <xsd:enumeration value=\"Center\"/>\n                        <xsd:enumeration value=\"Right\"/>\n                        <xsd:enumeration value=\"BottomLeft\"/>\n                        <xsd:enumeration value=\"Bottom\"/>\n                        <xsd:enumeration value=\"BottomRight\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"Rotation\" type=\"xsd:integer\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"MarkerType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Type\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"None\"/>\n                        <xsd:enumeration value=\"Square\"/>\n                        <xsd:enumeration value=\"Circle\"/>\n                        <xsd:enumeration value=\"Diamond\"/>\n                        <xsd:enumeration value=\"Triangle\"/>\n                        <xsd:enumeration value=\"Cross\"/>\n                        <xsd:enumeration value=\"Auto\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"Size\" type=\"SizeType\" minOccurs=\"0\"/>\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"ThreeDPropertiesType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Enabled\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"ProjectionMode\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Perspective\"/>\n                        <xsd:enumeration value=\"Orthographic\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"Rotation\" type=\"xsd:integer\" minOccurs=\"0\"/>\n            <xsd:element name=\"Inclination\" type=\"xsd:integer\" minOccurs=\"0\"/>\n            <xsd:element name=\"Perspective\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n            <xsd:element name=\"HeightRatio\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n            <xsd:element name=\"DepthRatio\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n            <xsd:element name=\"Shading\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"None\"/>\n                        <xsd:enumeration value=\"Simple\"/>\n                        <xsd:enumeration value=\"Real\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"GapDepth\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n            <xsd:element name=\"WallThickness\" type=\"xsd:unsignedInt\" minOccurs=\"0\"/>\n            <xsd:element name=\"DrawingStyle\" minOccurs=\"0\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Cube\"/>\n                        <xsd:enumeration value=\"Cylinder\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"Clustered\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"PlotAreaType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"MajorGridLinesType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"ShowGridLines\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"MinorGridLinesType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"ShowGridLines\" type=\"xsd:boolean\" minOccurs=\"0\"/>\n            <xsd:element name=\"Style\" type=\"StyleType\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"StyleType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"BorderColor\" type=\"BorderColorStyleWidthType\" minOccurs=\"0\"/>\n            <xsd:element name=\"BorderStyle\" type=\"BorderColorStyleWidthType\" minOccurs=\"0\"/>\n            <xsd:element name=\"BorderWidth\" type=\"BorderColorStyleWidthType\" minOccurs=\"0\"/>\n            <xsd:element name=\"BackgroundColor\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"BackgroundGradientType\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"BackgroundGradientEndColor\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"BackgroundImage\" type=\"BackgroundImageType\" minOccurs=\"0\"/>\n            <xsd:element name=\"FontStyle\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"FontFamily\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"FontSize\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"FontWeight\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Format\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"TextDecoration\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"TextAlign\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"VerticalAlign\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Color\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"PaddingLeft\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"PaddingRight\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"PaddingTop\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"PaddingBottom\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"LineHeight\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Direction\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"WritingMode\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Language\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"UnicodeBiDi\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Calendar\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"NumeralLanguage\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"NumeralVariant\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"BorderColorStyleWidthType\">\n        <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Default\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Left\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Right\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Top\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Bottom\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"BackgroundImageType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Source\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"External\"/>\n                        <xsd:enumeration value=\"Embedded\"/>\n                        <xsd:enumeration value=\"Database\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"Value\" type=\"xsd:string\"/>\n            <xsd:element name=\"MIMEType\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"BackgroundRepeat\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"FiltersType\">\n        <xsd:sequence>\n            <xsd:element name=\"Filter\" type=\"FilterType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"FilterType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"FilterExpression\" type=\"xsd:string\"/>\n            <xsd:element name=\"Operator\">\n                <xsd:simpleType>\n                    <xsd:restriction base=\"xsd:string\">\n                        <xsd:enumeration value=\"Equal\"/>\n                        <xsd:enumeration value=\"Like\"/>\n                        <xsd:enumeration value=\"NotEqual\"/>\n                        <xsd:enumeration value=\"GreaterThan\"/>\n                        <xsd:enumeration value=\"GreaterThanOrEqual\"/>\n                        <xsd:enumeration value=\"LessThan\"/>\n                        <xsd:enumeration value=\"LessThanOrEqual\"/>\n                        <xsd:enumeration value=\"TopN\"/>\n                        <xsd:enumeration value=\"BottomN\"/>\n                        <xsd:enumeration value=\"TopPercent\"/>\n                        <xsd:enumeration value=\"BottomPercent\"/>\n                        <xsd:enumeration value=\"In\"/>\n                        <xsd:enumeration value=\"Between\"/>\n                    </xsd:restriction>\n                </xsd:simpleType>\n            </xsd:element>\n            <xsd:element name=\"FilterValues\" type=\"FilterValuesType\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"FilterValuesType\">\n        <xsd:sequence>\n            <xsd:element name=\"FilterValue\" type=\"xsd:string\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"UserSortType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"SortExpression\" type=\"xsd:string\"/>\n            <xsd:element name=\"SortExpressionScope\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"SortTarget\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:simpleType name=\"SizeType\">\n        <xsd:restriction base=\"xsd:normalizedString\">\n        </xsd:restriction>\n    </xsd:simpleType>\n    <xsd:complexType name=\"CustomPropertiesType\">\n        <xsd:sequence>\n            <xsd:element name=\"CustomProperty\" type=\"CustomPropertyType\" maxOccurs=\"unbounded\"/>\n        </xsd:sequence>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:complexType name=\"CustomPropertyType\">\n        <xsd:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n            <xsd:element name=\"Name\" type=\"xsd:string\" minOccurs=\"0\"/>\n            <xsd:element name=\"Value\" type=\"xsd:string\"/>\n            <xsd:any namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:choice>\n        <xsd:anyAttribute namespace=\"##other\" processContents=\"skip\"/>\n    </xsd:complexType>\n</xsd:schema>"
  },
  {
    "path": "jekyll_site/schemas/reporting/2025/12/reportdefinition/index.html",
    "content": "<html xmlns:rddl=\"http://www.rddl.org/\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns=\"http://www.w3.org/1999/xhtml\">\n\n<head>\n    <title>Majorsilence Reporting — Report Definition Language (RDL) 2025</title>\n</head>\n\n<body>\n    <h1>Majorsilence Reporting — Report Definition Language (RDL) 2025</h1>December 2025\n    <h2>Description</h2>\n    This schema describes the structure of the Report Definition Language (RDL) used by Majorsilence Reporting,\n    an XML schema for representing reports which includes query, calculation and layout metadata.\n    <p xmlns=\"http://www.w3.org/1999/xhtml\" />\n    See <a xmlns=\"http://www.w3.org/1999/xhtml\"\n        href=\"http://reporting.majorsilence.com/schemas/reporting/2025/12/reportdefinition\">http://reporting.majorsilence.com/schemas/reporting/2025/12/reportdefinition</a>\n    for the RDL 2025 variant.\n\n    Current version: <rddl:resource id=\"Report_Definition_Language_(RDL)_2025\" xlink:title=\"Report_Definition_Language_(RDL)_2025\" xlink:role=\"http://www.w3.org/2001/XMLSchema\" xlink:arcrole=\"http://www.rddl.org/purposes#schema-validation\" xlink:href=\"ReportDefinition.xsd\" xlink:type=\"simple\" xlink:show=\"none\" xlink:actuate=\"none\">\n        <a href=\"ReportDefinition.xsd\">ReportDefinition.xsd</a>\n    </rddl:resource>\n</body>\n\n<body><br />\n    <table width=\"60%\">\n        <font size=\"-2\">The following schema for Majorsilence Reporting is presented in XML\n            format and is for informational purposes only.The schema is provided on an AS IS basis.\n           \nCopyright 2025 Majorsilence Reporting developers\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n        \n        </font>\n    </table>\n</body>\n\n</html>"
  },
  {
    "path": "jekyll_site/stylesheets/menu.css",
    "content": "html {\n  font-size: 16px;\n}\n\nbody {\n  margin: 0;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-size: 0.875rem;\n  line-height: 1.42857143;\n  color: #333;\n}\n\nheader {\n  position: relative;\n  /*top: 0;\n  left: 0;*/\n  z-index: 999;\n\n  width: 100%;\n  height: 50px;\n\n  background: #eee;\n  box-shadow: rgba(0, 0, 0, 0.5) 0 -20px 20px 20px;\n}\n\nheader h1 {\n  margin: 0;\n  padding: 0 15px;\n  height: 50px;\n  line-height: 50px;\n  font-weight: 400;\n  font-size: 18px;\n  float: left;\n}\n\n.wrapper {\n  /*margin-top: 50px;*/\n  padding: 15px 30px;\n  transition: all 0.3s ease-out;\n}\n\n.clearfix:after {\n  content: \"\";\n  display: block;\n  clear: both;\n}\n\n\n/* Small devices (tablets)\n==========================*/\n@media (min-width: 768px) {\n\n}\n\n\n/* Medium devices (desktops)\n==========================*/\n@media (min-width: 992px) {\n\n  body {\n    overflow-y: scroll;\n  }\n\n  .logo img {\n    width: 200px;\n    text-align: center;\n    margin-top: 10px;\n    float: none;\n  }\n\n  .wrapper {\n    margin-left: 300px;\n  }\n\n  .wrapper__minify {\n    margin-left: 50px;\n  }\n\n}\n"
  },
  {
    "path": "jekyll_site/stylesheets/normalize.css",
    "content": "/* normalize.css 2012-02-07T12:37 UTC - https://github.com/necolas/normalize.css */\n/* =============================================================================\n   HTML5 display definitions\n   ========================================================================== */\n/*\n * Corrects block display not defined in IE6/7/8/9 & FF3\n */\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n/*\n * Corrects inline-block display not defined in IE6/7/8/9 & FF3\n */\naudio,\ncanvas,\nvideo {\n  display: inline-block;\n  *display: inline;\n  *zoom: 1;\n}\n\n/*\n * Prevents modern browsers from displaying 'audio' without controls\n */\naudio:not([controls]) {\n  display: none;\n}\n\n/*\n * Addresses styling for 'hidden' attribute not present in IE7/8/9, FF3, S4\n * Known issue: no IE6 support\n */\n[hidden] {\n  display: none;\n}\n\n/* =============================================================================\n   Base\n   ========================================================================== */\n/*\n * 1. Corrects text resizing oddly in IE6/7 when body font-size is set using em units\n *    http://clagnut.com/blog/348/#c790\n * 2. Prevents iOS text size adjust after orientation change, without disabling user zoom\n *    www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/\n */\nhtml {\n  font-size: 100%;\n  /* 1 */\n  -webkit-text-size-adjust: 100%;\n  /* 2 */\n  -ms-text-size-adjust: 100%;\n  /* 2 */\n}\n\n/*\n * Addresses font-family inconsistency between 'textarea' and other form elements.\n */\nhtml,\nbutton,\ninput,\nselect,\ntextarea {\n  font-family: sans-serif;\n}\n\n/*\n * Addresses margins handled incorrectly in IE6/7\n */\nbody {\n  margin: 0;\n}\n\n/* =============================================================================\n   Links\n   ========================================================================== */\n/*\n * Addresses outline displayed oddly in Chrome\n */\na:focus {\n  outline: thin dotted;\n}\n\n/*\n * Improves readability when focused and also mouse hovered in all browsers\n * people.opera.com/patrickl/experiments/keyboard/test\n */\na:hover,\na:active {\n  outline: 0;\n}\n\n/* =============================================================================\n   Typography\n   ========================================================================== */\n/*\n * Addresses font sizes and margins set differently in IE6/7\n * Addresses font sizes within 'section' and 'article' in FF4+, Chrome, S5\n */\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\nh2 {\n  font-size: 1.5em;\n  margin: 0.83em 0;\n}\n\nh3 {\n  font-size: 1.17em;\n  margin: 1em 0;\n}\n\nh4 {\n  font-size: 1em;\n  margin: 1.33em 0;\n}\n\nh5 {\n  font-size: 0.83em;\n  margin: 1.67em 0;\n}\n\nh6 {\n  font-size: 0.75em;\n  margin: 2.33em 0;\n}\n\n/*\n * Addresses styling not present in IE7/8/9, S5, Chrome\n */\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\n/*\n * Addresses style set to 'bolder' in FF3+, S4/5, Chrome\n*/\nb,\nstrong {\n  font-weight: bold;\n}\n\nblockquote {\n  margin: 1em 40px;\n}\n\n/*\n * Addresses styling not present in S5, Chrome\n */\ndfn {\n  font-style: italic;\n}\n\n/*\n * Addresses styling not present in IE6/7/8/9\n */\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n/*\n * Addresses margins set differently in IE6/7\n */\np,\npre {\n  margin: 1em 0;\n}\n\n/*\n * Corrects font family set oddly in IE6, S4/5, Chrome\n * en.wikipedia.org/wiki/User:Davidgothberg/Test59\n */\npre,\ncode,\nkbd,\nsamp {\n  font-family: monospace, serif;\n  _font-family: 'courier new', monospace;\n  font-size: 1em;\n}\n\n/*\n * 1. Addresses CSS quotes not supported in IE6/7\n * 2. Addresses quote property not supported in S4\n */\n/* 1 */\nq {\n  quotes: none;\n}\n\n/* 2 */\nq:before,\nq:after {\n  content: '';\n  content: none;\n}\n\nsmall {\n  font-size: 75%;\n}\n\n/*\n * Prevents sub and sup affecting line-height in all browsers\n * gist.github.com/413930\n */\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n/* =============================================================================\n   Lists\n   ========================================================================== */\n/*\n * Addresses margins set differently in IE6/7\n */\ndl,\nmenu,\nol,\nul {\n  margin: 1em 0;\n}\n\ndd {\n  margin: 0 0 0 40px;\n}\n\n/*\n * Addresses paddings set differently in IE6/7\n */\nmenu,\nol,\nul {\n  padding: 0 0 0 40px;\n}\n\n/*\n * Corrects list images handled incorrectly in IE7\n */\nnav ul,\nnav ol {\n  list-style: none;\n  list-style-image: none;\n}\n\n/* =============================================================================\n   Embedded content\n   ========================================================================== */\n/*\n * 1. Removes border when inside 'a' element in IE6/7/8/9, FF3\n * 2. Improves image quality when scaled in IE7\n *    code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/\n */\nimg {\n  border: 0;\n  /* 1 */\n  -ms-interpolation-mode: bicubic;\n  /* 2 */\n}\n\n/*\n * Corrects overflow displayed oddly in IE9\n */\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* =============================================================================\n   Figures\n   ========================================================================== */\n/*\n * Addresses margin not present in IE6/7/8/9, S5, O11\n */\nfigure {\n  margin: 0;\n}\n\n/* =============================================================================\n   Forms\n   ========================================================================== */\n/*\n * Corrects margin displayed oddly in IE6/7\n */\nform {\n  margin: 0;\n}\n\n/*\n * Define consistent border, margin, and padding\n */\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n/*\n * 1. Corrects color not being inherited in IE6/7/8/9\n * 2. Corrects text not wrapping in FF3 \n * 3. Corrects alignment displayed oddly in IE6/7\n */\nlegend {\n  border: 0;\n  /* 1 */\n  padding: 0;\n  white-space: normal;\n  /* 2 */\n  *margin-left: -7px;\n  /* 3 */\n}\n\n/*\n * 1. Corrects font size not being inherited in all browsers\n * 2. Addresses margins set differently in IE6/7, FF3+, S5, Chrome\n * 3. Improves appearance and consistency in all browsers\n */\nbutton,\ninput,\nselect,\ntextarea {\n  font-size: 100%;\n  /* 1 */\n  margin: 0;\n  /* 2 */\n  vertical-align: baseline;\n  /* 3 */\n  *vertical-align: middle;\n  /* 3 */\n}\n\n/*\n * Addresses FF3/4 setting line-height on 'input' using !important in the UA stylesheet\n */\nbutton,\ninput {\n  line-height: normal;\n  /* 1 */\n}\n\n/*\n * 1. Improves usability and consistency of cursor style between image-type 'input' and others\n * 2. Corrects inability to style clickable 'input' types in iOS\n * 3. Removes inner spacing in IE7 without affecting normal text inputs\n *    Known issue: inner spacing remains in IE6\n */\nbutton,\ninput[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  cursor: pointer;\n  /* 1 */\n  -webkit-appearance: button;\n  /* 2 */\n  *overflow: visible;\n  /* 3 */\n}\n\n/*\n * Re-set default cursor for disabled elements\n */\nbutton[disabled],\ninput[disabled] {\n  cursor: default;\n}\n\n/*\n * 1. Addresses box sizing set to content-box in IE8/9\n * 2. Removes excess padding in IE8/9\n * 3. Removes excess padding in IE7\n      Known issue: excess padding remains in IE6\n */\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box;\n  /* 1 */\n  padding: 0;\n  /* 2 */\n  *height: 13px;\n  /* 3 */\n  *width: 13px;\n  /* 3 */\n}\n\n/*\n * 1. Addresses appearance set to searchfield in S5, Chrome\n * 2. Addresses box-sizing set to border-box in S5, Chrome (include -moz to future-proof)\n */\ninput[type=\"search\"] {\n  -webkit-appearance: textfield;\n  /* 1 */\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box;\n  /* 2 */\n  box-sizing: content-box;\n}\n\n/*\n * Removes inner padding and search cancel button in S5, Chrome on OS X\n */\ninput[type=\"search\"]::-webkit-search-decoration,\ninput[type=\"search\"]::-webkit-search-cancel-button {\n  -webkit-appearance: none;\n}\n\n/*\n * Removes inner padding and border in FF3+\n * www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/\n */\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n/*\n * 1. Removes default vertical scrollbar in IE6/7/8/9\n * 2. Improves readability and alignment in all browsers\n */\ntextarea {\n  overflow: auto;\n  /* 1 */\n  vertical-align: top;\n  /* 2 */\n}\n\n/* =============================================================================\n   Tables\n   ========================================================================== */\n/*\n * Remove most spacing between table cells\n */\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n"
  },
  {
    "path": "jekyll_site/stylesheets/vertical-responsive-menu.css",
    "content": "/*\n=========================\nVertical Reponsive Menu\n=========================\nSee https://github.com/cbfranca/vertical-responsive-menu\n*/\n/* line 6, sass/import/mixins.scss */\n.vertical_nav, .collapse_menu .collapse_menu--icon {\n  -moz-transition: all 0.3s ease-out;\n  -webkit-transition: all 0.3s ease-out;\n  transition: all 0.3s ease-out; }\n\n/* line 14, sass/vertical-responsive-menu.scss */\n* {\n  box-sizing: border-box; }\n\n/* line 26, sass/vertical-responsive-menu.scss */\n:focus,\n:active {\n  outline: none; }\n\n/* line 32, sass/vertical-responsive-menu.scss */\n.toggle_menu {\n  display: block;\n  float: left;\n  width: 50px;\n  height: 50px;\n  line-height: 50px;\n  padding: 0;\n  background: none;\n  border: 0;\n  text-align: center;\n  cursor: pointer; }\n  /* line 44, sass/vertical-responsive-menu.scss */\n  .toggle_menu i {\n    display: block;\n    font-size: 28px; }\n\n/* line 52, sass/vertical-responsive-menu.scss */\n.vertical_nav {\n  position: absolute;\n  left: -300px;\n  top: 50px;\n  bottom: 0px;\n  width: 300px;\n  background: #f6f6f6; }\n\n/* line 63, sass/vertical-responsive-menu.scss */\n.vertical_nav__closed {\n  left: -300px !important; }\n\n/* line 67, sass/vertical-responsive-menu.scss */\n.vertical_nav__opened {\n  left: 0px !important;\n  box-shadow: rgba(0, 0, 0, 0.4) -30px 0 30px 30px; }\n\n/* line 73, sass/vertical-responsive-menu.scss */\n.menu {\n  position: absolute;\n  top: 20px;\n  bottom: 40px;\n  /* overflow-y: auto; */\n  width: 100%;\n  margin: 0;\n  padding: 0;\n  list-style-type: none; }\n\n/* line 84, sass/vertical-responsive-menu.scss */\n.menu--item {\n  position: relative;\n  min-height: 40px;\n  line-height: 40px; }\n\n/* line 90, sass/vertical-responsive-menu.scss */\n.menu--item__has_sub_menu .menu--link:after {\n  position: absolute;\n  top: 0;\n  right: 15px;\n  height: 40px;\n  line-height: 40px;\n  font-family: \"FontAwesome\";\n  content: \"\\f0d7\"; }\n\n/* line 100, sass/vertical-responsive-menu.scss */\n.menu--subitens__opened {\n  background: #e9e9e9; }\n  /* line 103, sass/vertical-responsive-menu.scss */\n  .menu--subitens__opened .menu--link {\n    color: #000; }\n  /* line 107, sass/vertical-responsive-menu.scss */\n  .menu--subitens__opened .sub_menu {\n    display: block; }\n\n/* line 113, sass/vertical-responsive-menu.scss */\n.menu--link {\n  display: block;\n  overflow: hidden;\n  font-size: 0.875rem;\n  text-decoration: none;\n  color: #666;\n  font-weight: 400;\n  white-space: nowrap;\n  cursor: pointer; }\n  /* line 123, sass/vertical-responsive-menu.scss */\n  .menu--link:hover, .menu--link:hover .menu--label {\n    color: #000;\n    background: #dddddd; }\n\n/* line 131, sass/vertical-responsive-menu.scss */\n.menu--icon {\n  display: block;\n  float: left;\n  width: 50px;\n  height: 40px;\n  line-height: 40px;\n  font-size: 20px; }\n\n/* line 140, sass/vertical-responsive-menu.scss */\n.menu--label {\n  display: block;\n  height: 40px;\n  line-height: 40px; }\n\n/* line 148, sass/vertical-responsive-menu.scss */\n.sub_menu {\n  display: none;\n  overflow: hidden;\n  padding-left: 0;\n  list-style: none; }\n\n/* line 154, sass/vertical-responsive-menu.scss */\n.sub_menu--link {\n  display: block;\n  padding-left: 50px;\n  padding-right: 16px;\n  font-size: 0.875rem;\n  color: #666;\n  text-decoration: none; }\n  /* line 162, sass/vertical-responsive-menu.scss */\n  .sub_menu--link:hover {\n    color: #000;\n    background: #dddddd; }\n\n/* line 168, sass/vertical-responsive-menu.scss */\n.sub_menu--link__active {\n  color: #000;\n  font-weight: 500; }\n\n/* line 176, sass/vertical-responsive-menu.scss */\n.collapse_menu {\n  display: none; }\n\n@media (min-width: 992px) {\n  /* line 193, sass/vertical-responsive-menu.scss */\n  .vertical_nav {\n    left: 0; }\n\n  /* line 197, sass/vertical-responsive-menu.scss */\n  .toggle_menu {\n    display: none; }\n\n  /* line 203, sass/vertical-responsive-menu.scss */\n  .vertical_nav__minify {\n    width: 50px; }\n    /* line 206, sass/vertical-responsive-menu.scss */\n    .vertical_nav__minify .menu {\n      overflow: visible; }\n    /* line 210, sass/vertical-responsive-menu.scss */\n    .vertical_nav__minify .menu--label {\n      display: none;\n      position: absolute;\n      top: 0;\n      left: 50px;\n      width: 150px;\n      padding-left: 16px;\n      padding-right: 16px;\n      background: #e9e9e9;\n      font-weight: 500; }\n    /* line 222, sass/vertical-responsive-menu.scss */\n    .vertical_nav__minify .menu--item__has_sub_menu .menu--link:after {\n      content: \"\"; }\n    /* line 228, sass/vertical-responsive-menu.scss */\n    .vertical_nav__minify .menu--subitens__opened .menu--label,\n    .vertical_nav__minify .menu--subitens__opened .sub_menu {\n      display: block; }\n    /* line 232, sass/vertical-responsive-menu.scss */\n    .vertical_nav__minify .sub_menu {\n      position: absolute;\n      top: 40px;\n      left: 50px;\n      width: 150px;\n      background: #e9e9e9; }\n    /* line 239, sass/vertical-responsive-menu.scss */\n    .vertical_nav__minify .sub_menu--link {\n      padding-left: 16px; }\n    /* line 245, sass/vertical-responsive-menu.scss */\n    .vertical_nav__minify .collapse_menu--icon {\n      -webkit-transform: rotate(180deg); }\n\n  /* line 253, sass/vertical-responsive-menu.scss */\n  .collapse_menu {\n    position: absolute;\n    bottom: 0px;\n    display: block;\n    width: 100%;\n    height: 40px;\n    line-height: 40px;\n    padding: 0;\n    border: 0;\n    border-top: 1px solid #e6e6e6;\n    background: #f6f6f6;\n    color: #666;\n    font-size: 0.875rem;\n    text-align: left;\n    cursor: pointer; }\n    /* line 269, sass/vertical-responsive-menu.scss */\n    .collapse_menu:hover {\n      color: #000;\n      background: #dddddd; }\n    /* line 274, sass/vertical-responsive-menu.scss */\n    .collapse_menu .collapse_menu--icon {\n      display: block;\n      float: left;\n      width: 50px;\n      height: 40px;\n      line-height: 40px;\n      font-size: 20px; }\n      /* line 282, sass/vertical-responsive-menu.scss */\n      .collapse_menu .collapse_menu--icon:before {\n        content: \"\\f053\"; }\n    /* line 288, sass/vertical-responsive-menu.scss */\n    .collapse_menu .collapse_menu--label {\n      display: block;\n      height: 40px;\n      line-height: 40px; } }\n"
  }
]